summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authorafresh1 <afresh1@openbsd.org>2021-03-01 23:19:42 +0000
committerafresh1 <afresh1@openbsd.org>2021-03-01 23:19:42 +0000
commit56d68f1e19ff848c889ecfa71d3a06340ff64892 (patch)
tree272372e9e82dd675d06054187c7f04b32fe71acc /gnu
parentImport perl-5.32.1 (diff)
downloadwireguard-openbsd-56d68f1e19ff848c889ecfa71d3a06340ff64892.tar.xz
wireguard-openbsd-56d68f1e19ff848c889ecfa71d3a06340ff64892.zip
Fix merge issues, remove excess files - match perl-5.32.1 dist
OK sthen@
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/perl/AUTHORS2473
-rw-r--r--gnu/usr.bin/perl/Configure216
-rw-r--r--gnu/usr.bin/perl/Cross/config.sh-arm-linux45
-rw-r--r--gnu/usr.bin/perl/Cross/config.sh-arm-linux-n77045
-rw-r--r--gnu/usr.bin/perl/EXTERN.h2
-rw-r--r--gnu/usr.bin/perl/INSTALL120
-rw-r--r--gnu/usr.bin/perl/MANIFEST975
-rw-r--r--gnu/usr.bin/perl/META.json11
-rw-r--r--gnu/usr.bin/perl/META.yml9
-rw-r--r--gnu/usr.bin/perl/Makefile.SH53
-rw-r--r--gnu/usr.bin/perl/NetWare/Makefile6
-rw-r--r--gnu/usr.bin/perl/NetWare/config.wc3
-rw-r--r--gnu/usr.bin/perl/NetWare/config_H.wc10
-rw-r--r--gnu/usr.bin/perl/Porting/Glossary10
-rw-r--r--gnu/usr.bin/perl/Porting/Maintainers.pl141
-rw-r--r--gnu/usr.bin/perl/Porting/README.pod7
-rwxr-xr-xgnu/usr.bin/perl/Porting/bench.pl2
-rw-r--r--gnu/usr.bin/perl/Porting/bisect-runner.pl170
-rw-r--r--gnu/usr.bin/perl/Porting/bump-perl-version10
-rwxr-xr-xgnu/usr.bin/perl/Porting/checkAUTHORS.pl448
-rw-r--r--gnu/usr.bin/perl/Porting/checkURL.pl22
-rwxr-xr-xgnu/usr.bin/perl/Porting/checkcfgvar.pl1
-rw-r--r--gnu/usr.bin/perl/Porting/config.sh47
-rw-r--r--gnu/usr.bin/perl/Porting/config_H24
-rwxr-xr-xgnu/usr.bin/perl/Porting/corelist.pl2
-rw-r--r--gnu/usr.bin/perl/Porting/epigraphs.pod134
-rw-r--r--gnu/usr.bin/perl/Porting/exec-bit.txt1
-rw-r--r--gnu/usr.bin/perl/Porting/makemeta4
-rw-r--r--gnu/usr.bin/perl/Porting/makerel6
-rw-r--r--gnu/usr.bin/perl/Porting/perldelta_template.pod2
-rw-r--r--gnu/usr.bin/perl/Porting/pod_lib.pl2
-rw-r--r--gnu/usr.bin/perl/Porting/pumpkin.pod21
-rw-r--r--gnu/usr.bin/perl/Porting/release_announcement_template.txt4
-rw-r--r--gnu/usr.bin/perl/Porting/release_managers_guide.pod64
-rw-r--r--gnu/usr.bin/perl/Porting/release_schedule.pod55
-rw-r--r--gnu/usr.bin/perl/Porting/sync-with-cpan2
-rw-r--r--gnu/usr.bin/perl/Porting/todo.pod27
-rw-r--r--gnu/usr.bin/perl/README6
-rw-r--r--gnu/usr.bin/perl/README.android26
-rw-r--r--gnu/usr.bin/perl/README.bs20005
-rw-r--r--gnu/usr.bin/perl/README.ce453
-rw-r--r--gnu/usr.bin/perl/README.cygwin8
-rw-r--r--gnu/usr.bin/perl/README.haiku4
-rw-r--r--gnu/usr.bin/perl/README.hurd2
-rw-r--r--gnu/usr.bin/perl/README.linux23
-rw-r--r--gnu/usr.bin/perl/README.macosx16
-rw-r--r--gnu/usr.bin/perl/README.os212
-rw-r--r--gnu/usr.bin/perl/README.os39088
-rw-r--r--gnu/usr.bin/perl/README.synology8
-rw-r--r--gnu/usr.bin/perl/README.vms13
-rw-r--r--gnu/usr.bin/perl/README.win3246
-rw-r--r--gnu/usr.bin/perl/TestInit.pm3
-rw-r--r--gnu/usr.bin/perl/XSUB.h46
-rw-r--r--gnu/usr.bin/perl/amigaos4/amigaio.c2
-rw-r--r--gnu/usr.bin/perl/autodoc.pl395
-rw-r--r--gnu/usr.bin/perl/av.c18
-rw-r--r--gnu/usr.bin/perl/av.h6
-rw-r--r--gnu/usr.bin/perl/caretx.c2
-rw-r--r--gnu/usr.bin/perl/cflags.SH16
-rw-r--r--gnu/usr.bin/perl/charclass_invlists.h36285
-rw-r--r--gnu/usr.bin/perl/config_h.SH22
-rw-r--r--gnu/usr.bin/perl/configpm18
-rw-r--r--gnu/usr.bin/perl/configure.com222
-rw-r--r--gnu/usr.bin/perl/cop.h106
-rw-r--r--gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar.pm72
-rw-r--r--gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/Constant.pm13
-rw-r--r--gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/File.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/lib/App/Cpan.pm43
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/lib/CPAN.pm109
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Bundle.pm16
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Distribution.pm415
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FTP.pm19
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FirstTime.pm83
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/HandleConfig.pm12
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Mirrors.pm119
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Queue.pm13
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Shell.pm9
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Tarzip.pm21
-rw-r--r--gnu/usr.bin/perl/cpan/CPAN/scripts/cpan7
-rw-r--r--gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c4
-rw-r--r--gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/compress.c1
-rw-r--r--gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/decompress.c1
-rw-r--r--gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/private/MakeUtil.pm3
-rwxr-xr-xgnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/t/000prereq.t2
-rw-r--r--gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm8
-rw-r--r--gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/private/MakeUtil.pm3
-rw-r--r--gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c7
-rw-r--r--gnu/usr.bin/perl/cpan/DB_File/DB_File.pm396
-rw-r--r--gnu/usr.bin/perl/cpan/DB_File/DB_File.xs1861
-rw-r--r--gnu/usr.bin/perl/cpan/DB_File/Makefile.PL194
-rw-r--r--gnu/usr.bin/perl/cpan/Digest-MD5/MD5.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Digest-MD5/MD5.xs369
-rw-r--r--gnu/usr.bin/perl/cpan/Digest-MD5/Makefile.PL114
-rwxr-xr-xgnu/usr.bin/perl/cpan/Digest-MD5/t/files.t2
-rw-r--r--gnu/usr.bin/perl/cpan/Encode/Encode.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/Encode/Encode.xs6
-rw-r--r--gnu/usr.bin/perl/cpan/Encode/bin/enc2xs22
-rw-r--r--gnu/usr.bin/perl/cpan/Encode/encoding.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/Encode/lib/Encode/Guess.pm4
-rwxr-xr-xgnu/usr.bin/perl/cpan/Encode/t/enc_utf8.t15
-rw-r--r--gnu/usr.bin/perl/cpan/Encode/t/whatwg-aliases.json455
-rw-r--r--gnu/usr.bin/perl/cpan/Encode/t/whatwg-aliases.t66
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm11
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm18
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm8
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm12
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm21
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm8
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm22
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm8
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm8
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm8
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm8
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm152
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm26
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm8
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm22
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm70
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod32
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Locale.pm16
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod7
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm4
-rwxr-xr-xgnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/MM_Unix.t16
-rwxr-xr-xgnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/PL_FILES.t20
-rwxr-xr-xgnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/basic.t8
-rwxr-xr-xgnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/build_man.t91
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Utils.pm2
-rwxr-xr-xgnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/parse_version.t6
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/unicode.t4
-rw-r--r--gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/vstrings.t2
-rw-r--r--gnu/usr.bin/perl/cpan/Getopt-Long/lib/Getopt/Long.pm33
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/Makefile.PL36
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/bin/zipdetails33
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/Compress/Zlib.pm20
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base.pm10
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm52
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Deflate.pm50
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/FAQ.pod6
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip.pm52
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm52
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip.pm460
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm8
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm35
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm67
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Base.pm17
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm27
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm29
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm25
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm27
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm64
-rw-r--r--gnu/usr.bin/perl/cpan/IO-Compress/private/MakeUtil.pm3
-rwxr-xr-xgnu/usr.bin/perl/cpan/IO-Compress/t/000prereq.t5
-rw-r--r--gnu/usr.bin/perl/cpan/IPC-Cmd/lib/IPC/Cmd.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/JSON-PP/bin/json_pp19
-rw-r--r--gnu/usr.bin/perl/cpan/JSON-PP/lib/JSON/PP.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/lib/Math/BigInt/FastCalc.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigFloat.pm471
-rw-r--r--gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt.pm399
-rw-r--r--gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt/Calc.pm609
-rw-r--r--gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/Scalar.pm2
-rwxr-xr-xgnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbf.t2
-rwxr-xr-xgnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbi.t2
-rw-r--r--gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.inc18
-rwxr-xr-xgnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.t2
-rwxr-xr-xgnu/usr.bin/perl/cpan/Math-BigInt/t/bigintc.t23
-rw-r--r--gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.inc65
-rwxr-xr-xgnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.t2
-rwxr-xr-xgnu/usr.bin/perl/cpan/Math-BigInt/t/calling.t2
-rwxr-xr-xgnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbf.t2
-rwxr-xr-xgnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbi.t2
-rw-r--r--gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.inc18
-rwxr-xr-xgnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.t2
-rwxr-xr-xgnu/usr.bin/perl/cpan/Math-BigInt/t/with_sub.t2
-rw-r--r--gnu/usr.bin/perl/cpan/Module-Load-Conditional/lib/Module/Load/Conditional.pm18
-rw-r--r--gnu/usr.bin/perl/cpan/Module-Metadata/lib/Module/Metadata.pm46
-rw-r--r--gnu/usr.bin/perl/cpan/Module-Metadata/t/metadata.t16
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Find.pm553
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/InputObjects.pm946
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/ParseUtils.pm861
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Parser.pm1836
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/PlainText.pm761
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Select.pm756
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/scripts/podselect.PL143
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_bad_pod.xr5
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_pod.t19
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_pod.xr5
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/empty.xr0
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/emptycmd.t21
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/emptycmd.xr2
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/find.t107
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/for.t59
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/for.xr21
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/headings.t140
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/headings.xr26
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/include.t36
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/include.xr22
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/included.t35
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/included.xr3
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/lref.t66
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/lref.xr40
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/multiline_items.t31
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/multiline_items.xr6
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_items.t64
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_items.xr19
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_seqs.t23
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_seqs.xr3
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/oneline_cmds.t46
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/oneline_cmds.xr26
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/podselect.t18
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/podselect.xr44
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/selfcheck.t53
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/special_seqs.t46
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/special_seqs.xr25
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testcmp.pl94
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testp2pt.pl192
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testpchk.pl130
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testpods/lib/Pod/Stuff.pm20
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Parser/t/pod/twice.t36
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Parser/t/unbalanced.t51
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm18
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pm40
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pod27
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/BlackBox.pm732
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Checker.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Debug.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsText.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsXML.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTML.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTMLBatch.pm30
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/LinkSection.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Methody.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Progress.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParser.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserEndToken.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserStartToken.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserTextToken.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserToken.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/RTF.pm179
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Search.pm35
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/SimpleTree.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Subclassing.pod14
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Text.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TextContent.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TiedOutFH.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Transcode.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeDumb.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeSmart.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XHTML.pm10
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XMLOutStream.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/t/encod04.t79
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Simple/t/html01.t12
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Simple/t/search20.t12
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Simple/t/search22.t18
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Simple/t/search50.t1
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Simple/t/whine.t22
-rwxr-xr-xgnu/usr.bin/perl/cpan/Pod-Simple/t/xhtml01.t12
-rw-r--r--gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/testp2pt.pl2
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/ListUtil.xs517
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util.pm105
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util/XS.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Scalar/Util.pm13
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Sub/Util.pm10
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/blessed.t28
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/dualvar.t42
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/first.t17
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/isvstring.t10
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/lln.t24
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/pair.t7
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/readonly.t18
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reduce.t38
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/refaddr.t29
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reftype.t24
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/shuffle.t25
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/sum.t2
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/tainted.t4
-rw-r--r--gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/weak.t4
-rw-r--r--gnu/usr.bin/perl/cpan/Socket/Makefile.PL12
-rw-r--r--gnu/usr.bin/perl/cpan/Socket/Socket.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Socket/Socket.xs23
-rw-r--r--gnu/usr.bin/perl/cpan/Sys-Syslog/Makefile.PL2
-rw-r--r--gnu/usr.bin/perl/cpan/Sys-Syslog/Syslog.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/Term-ANSIColor/lib/Term/ANSIColor.pm354
-rw-r--r--gnu/usr.bin/perl/cpan/Term-ANSIColor/t/lib/Test/RRA.pm89
-rw-r--r--gnu/usr.bin/perl/cpan/Term-ANSIColor/t/lib/Test/RRA/Config.pm22
-rw-r--r--gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/basic256.t19
-rw-r--r--gnu/usr.bin/perl/cpan/Term-ReadKey/META.yml29
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder.pm9
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Module.pm9
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/More.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Simple.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Capture.pm16
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Delegate.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/use/ok.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Test-Simple/lib/ok.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Text-Balanced/lib/Text/Balanced.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Time-Piece/Piece.pm23
-rw-r--r--gnu/usr.bin/perl/cpan/Time-Piece/Seconds.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Time-Piece/t/02core_dst.t11
-rw-r--r--gnu/usr.bin/perl/cpan/Win32/Win32.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Win32/Win32.xs88
-rw-r--r--gnu/usr.bin/perl/cpan/Win32API-File/File.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/Win32API-File/File.xs1
-rw-r--r--gnu/usr.bin/perl/cpan/autodie/lib/Fatal.pm34
-rw-r--r--gnu/usr.bin/perl/cpan/autodie/lib/autodie.pm38
-rw-r--r--gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception/system.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/autodie/lib/autodie/hints.pm4
-rw-r--r--gnu/usr.bin/perl/cpan/autodie/lib/autodie/skip.pm2
-rwxr-xr-xgnu/usr.bin/perl/cpan/autodie/t/version.t7
-rw-r--r--gnu/usr.bin/perl/cpan/parent/lib/parent.pm12
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pm2
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pod6
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq1.pod41
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq2.pod9
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq3.pod19
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq4.pod39
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq5.pod2
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq6.pod2
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq7.pod2
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq8.pod8
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq9.pod104
-rw-r--r--gnu/usr.bin/perl/cpan/perlfaq/lib/perlglossary.pod2
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/Makefile.PL11
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/lib/Pod/Man.pm27
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/lib/Pod/ParseLink.pm8
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text.pm35
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Color.pm9
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Overstrike.pm6
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Termcap.pm72
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/scripts/pod2man.PL28
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/scripts/pod2text.PL4
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/docs/pod-spelling.t6
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/docs/pod.t6
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/docs/synopsis.t6
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/docs/urls.t95
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/general/basic.t4
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/general/filehandle.t4
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/general/pod-parser.t4
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/lib/Test/Podlators.pm78
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA.pm83
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA/Config.pm16
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA/ModuleVersion.pm36
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/man/devise-date.t6
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/man/devise-title.t4
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/man/empty.t4
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/man/heading.t4
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/man/no-encode.t13
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/man/utf8-io.t17
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/parselink/basic.t212
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/style/minimum-version.t6
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/style/module-version.t7
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/style/strict.t50
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/text/basic.t157
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/text/color.t4
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/text/empty.t54
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/text/encoding.t158
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/text/options.t368
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/text/overstrike.t108
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/text/perlio.t129
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/text/termcap.t24
-rw-r--r--gnu/usr.bin/perl/cpan/podlators/t/text/utf8.t128
-rw-r--r--gnu/usr.bin/perl/cv.h8
-rw-r--r--gnu/usr.bin/perl/cygwin/cygwin.c10
-rw-r--r--gnu/usr.bin/perl/dist/Data-Dumper/Dumper.pm4
-rw-r--r--gnu/usr.bin/perl/dist/Data-Dumper/Dumper.xs65
-rwxr-xr-xgnu/usr.bin/perl/dist/Data-Dumper/t/dumper.t12
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/PPPort_xs.PL128
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/devel/mkapidoc.sh81
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/500307042
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/50040101
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/50040201
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/50040301
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/50040401
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/500405042
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/50050101
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/50050201
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/50050304
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/50050401
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/500307021
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/50040101
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/50040201
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/50040301
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/50040401
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/50040507
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/50050101
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/50050201
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/50050304
-rw-r--r--gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/50050401
-rw-r--r--gnu/usr.bin/perl/dist/Dumpvalue/lib/Dumpvalue.pm19
-rw-r--r--gnu/usr.bin/perl/dist/Dumpvalue/t/Dumpvalue.t20
-rw-r--r--gnu/usr.bin/perl/dist/Exporter/lib/Exporter.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/Changes6
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/LICENSE6
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/Makefile.PL4
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder.pm6
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Unix.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/aix.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/android.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/cygwin.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/darwin.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/dec_osf.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/os2.pm2
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-ParseXS/lib/perlxs.pod25
-rw-r--r--gnu/usr.bin/perl/dist/ExtUtils-ParseXS/lib/perlxstut.pod4
-rw-r--r--gnu/usr.bin/perl/dist/Filter-Simple/lib/Filter/Simple.pm3
-rw-r--r--gnu/usr.bin/perl/dist/I18N-LangTags/lib/I18N/LangTags.pm16
-rw-r--r--gnu/usr.bin/perl/dist/I18N-LangTags/lib/I18N/LangTags/Detect.pm8
-rw-r--r--gnu/usr.bin/perl/dist/IO/IO.pm4
-rw-r--r--gnu/usr.bin/perl/dist/IO/IO.xs93
-rw-r--r--gnu/usr.bin/perl/dist/IO/lib/IO/Dir.pm2
-rw-r--r--gnu/usr.bin/perl/dist/IO/lib/IO/File.pm2
-rw-r--r--gnu/usr.bin/perl/dist/IO/lib/IO/Handle.pm22
-rw-r--r--gnu/usr.bin/perl/dist/IO/lib/IO/Pipe.pm2
-rw-r--r--gnu/usr.bin/perl/dist/IO/lib/IO/Poll.pm2
-rw-r--r--gnu/usr.bin/perl/dist/IO/lib/IO/Seekable.pm2
-rw-r--r--gnu/usr.bin/perl/dist/IO/lib/IO/Select.pm18
-rw-r--r--gnu/usr.bin/perl/dist/IO/lib/IO/Socket.pm572
-rw-r--r--gnu/usr.bin/perl/dist/IO/lib/IO/Socket/INET.pm2
-rw-r--r--gnu/usr.bin/perl/dist/IO/lib/IO/Socket/UNIX.pm2
-rw-r--r--gnu/usr.bin/perl/dist/IO/t/cachepropagate-unix.t23
-rwxr-xr-xgnu/usr.bin/perl/dist/IO/t/io_poll.t5
-rwxr-xr-xgnu/usr.bin/perl/dist/IO/t/io_sock.t1
-rw-r--r--gnu/usr.bin/perl/dist/IO/t/io_utf8argv.t18
-rw-r--r--gnu/usr.bin/perl/dist/Locale-Maketext/ChangeLog10
-rw-r--r--gnu/usr.bin/perl/dist/Module-CoreList/Changes33
-rw-r--r--gnu/usr.bin/perl/dist/Module-CoreList/corelist8
-rw-r--r--gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm1020
-rw-r--r--gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm72
-rw-r--r--gnu/usr.bin/perl/dist/Net-Ping/lib/Net/Ping.pm2
-rwxr-xr-xgnu/usr.bin/perl/dist/Net-Ping/t/450_service.t15
-rw-r--r--gnu/usr.bin/perl/dist/PathTools/lib/File/Spec/Win32.pm4
-rw-r--r--gnu/usr.bin/perl/dist/Safe/Safe.pm11
-rw-r--r--gnu/usr.bin/perl/dist/SelfLoader/lib/SelfLoader.pm4
-rw-r--r--gnu/usr.bin/perl/dist/Storable/ChangeLog33
-rw-r--r--gnu/usr.bin/perl/dist/Storable/Makefile.PL59
-rw-r--r--gnu/usr.bin/perl/dist/Storable/Storable.pm (renamed from gnu/usr.bin/perl/dist/Storable/__Storable__.pm)23
-rw-r--r--gnu/usr.bin/perl/dist/Storable/Storable.pm.PL35
-rw-r--r--gnu/usr.bin/perl/dist/Storable/Storable.xs50
-rw-r--r--gnu/usr.bin/perl/dist/Storable/stacksize2
-rwxr-xr-xgnu/usr.bin/perl/dist/Storable/t/attach_errors.t2
-rwxr-xr-xgnu/usr.bin/perl/dist/Storable/t/recurse.t4
-rw-r--r--gnu/usr.bin/perl/dist/Thread-Queue/lib/Thread/Queue.pm6
-rw-r--r--gnu/usr.bin/perl/dist/Tie-File/lib/Tie/File.pm41
-rw-r--r--gnu/usr.bin/perl/dist/Tie-File/t/00_version.t22
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/Changes4
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/HiRes.pm141
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/HiRes.xs1721
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/Makefile.PL689
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/Watchdog.pm54
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/alarm.t204
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/clock.t62
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/gettimeofday.t6
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/itimer.t18
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/nanosleep.t6
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/sleep.t6
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/stat.t20
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/time.t6
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/ualarm.t60
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/usleep.t14
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/t/utime.t304
-rw-r--r--gnu/usr.bin/perl/dist/Time-HiRes/typemap454
-rw-r--r--gnu/usr.bin/perl/dist/XSLoader/Makefile.PL18
-rw-r--r--gnu/usr.bin/perl/dist/threads-shared/lib/threads/shared.pm4
-rw-r--r--gnu/usr.bin/perl/dist/threads-shared/shared.xs15
-rwxr-xr-xgnu/usr.bin/perl/dist/threads-shared/t/stress.t6
-rw-r--r--gnu/usr.bin/perl/dist/threads/lib/threads.pm22
-rw-r--r--gnu/usr.bin/perl/dist/threads/threads.xs2
-rw-r--r--gnu/usr.bin/perl/doio.c35
-rw-r--r--gnu/usr.bin/perl/doop.c733
-rw-r--r--gnu/usr.bin/perl/dosish.h5
-rw-r--r--gnu/usr.bin/perl/dquote.c436
-rw-r--r--gnu/usr.bin/perl/dquote_inline.h67
-rw-r--r--gnu/usr.bin/perl/dump.c47
-rw-r--r--gnu/usr.bin/perl/ebcdic_tables.h20
-rw-r--r--gnu/usr.bin/perl/embed.fnc3079
-rw-r--r--gnu/usr.bin/perl/embed.h502
-rw-r--r--gnu/usr.bin/perl/embedvar.h117
-rw-r--r--gnu/usr.bin/perl/ext/B/B.pm2
-rw-r--r--gnu/usr.bin/perl/ext/B/B.xs32
-rw-r--r--gnu/usr.bin/perl/ext/B/t/b.t15
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/optree_concise.t12
-rw-r--r--gnu/usr.bin/perl/ext/B/t/optree_misc.t4
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/optree_samples.t8
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/optree_sort.t16
-rwxr-xr-xgnu/usr.bin/perl/ext/B/t/optree_varinit.t40
-rwxr-xr-xgnu/usr.bin/perl/ext/Devel-Peek/t/Peek.t4
-rw-r--r--gnu/usr.bin/perl/ext/DynaLoader/DynaLoader_pm.PL21
-rw-r--r--gnu/usr.bin/perl/ext/DynaLoader/dl_aix.xs2
-rw-r--r--gnu/usr.bin/perl/ext/DynaLoader/dl_dlopen.xs14
-rw-r--r--gnu/usr.bin/perl/ext/DynaLoader/t/DynaLoader.t2
-rw-r--r--gnu/usr.bin/perl/ext/File-Find/lib/File/Find.pm2
-rw-r--r--gnu/usr.bin/perl/ext/File-Find/t/find.t85
-rw-r--r--gnu/usr.bin/perl/ext/File-Glob/Glob.pm9
-rw-r--r--gnu/usr.bin/perl/ext/File-Glob/bsd_glob.c4
-rw-r--r--gnu/usr.bin/perl/ext/Hash-Util/lib/Hash/Util.pm4
-rw-r--r--gnu/usr.bin/perl/ext/I18N-Langinfo/Langinfo.pm4
-rw-r--r--gnu/usr.bin/perl/ext/IPC-Open3/lib/IPC/Open3.pm69
-rw-r--r--gnu/usr.bin/perl/ext/NDBM_File/Makefile.PL2
-rw-r--r--gnu/usr.bin/perl/ext/Opcode/Opcode.pm14
-rw-r--r--gnu/usr.bin/perl/ext/Opcode/Opcode.xs2
-rw-r--r--gnu/usr.bin/perl/ext/POSIX/POSIX.xs252
-rw-r--r--gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm2
-rw-r--r--gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod151
-rw-r--r--gnu/usr.bin/perl/ext/POSIX/t/time.t14
-rw-r--r--gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.pm2
-rw-r--r--gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.xs2
-rwxr-xr-xgnu/usr.bin/perl/ext/PerlIO-encoding/t/encoding.t7
-rw-r--r--gnu/usr.bin/perl/ext/PerlIO-via/via.pm2
-rw-r--r--gnu/usr.bin/perl/ext/PerlIO-via/via.xs4
-rw-r--r--gnu/usr.bin/perl/ext/Pod-Html/lib/Pod/Html.pm27
-rw-r--r--gnu/usr.bin/perl/ext/Sys-Hostname/Hostname.pm4
-rw-r--r--gnu/usr.bin/perl/ext/Tie-Hash-NamedCapture/NamedCapture.xs131
-rw-r--r--gnu/usr.bin/perl/ext/XS-APItest/APItest.pm4
-rw-r--r--gnu/usr.bin/perl/ext/XS-APItest/APItest.xs849
-rw-r--r--gnu/usr.bin/perl/ext/XS-APItest/Makefile.PL2
-rwxr-xr-xgnu/usr.bin/perl/ext/XS-APItest/t/call.t31
-rw-r--r--gnu/usr.bin/perl/ext/XS-APItest/t/multicall.t2
-rwxr-xr-xgnu/usr.bin/perl/ext/XS-APItest/t/printf.t14
-rw-r--r--gnu/usr.bin/perl/ext/mro/mro.pm24
-rw-r--r--gnu/usr.bin/perl/ext/re/Makefile.PL5
-rw-r--r--gnu/usr.bin/perl/ext/re/re.pm124
-rw-r--r--gnu/usr.bin/perl/ext/re/re.xs26
-rw-r--r--gnu/usr.bin/perl/ext/re/t/re.t6
-rw-r--r--gnu/usr.bin/perl/feature.h208
-rw-r--r--gnu/usr.bin/perl/globvar.sym1
-rw-r--r--gnu/usr.bin/perl/gv.c62
-rw-r--r--gnu/usr.bin/perl/handy.h967
-rw-r--r--gnu/usr.bin/perl/hints/README.hints2
-rw-r--r--gnu/usr.bin/perl/hints/bsdos.sh2
-rw-r--r--gnu/usr.bin/perl/hints/catamount.sh4
-rw-r--r--gnu/usr.bin/perl/hints/darwin.sh13
-rw-r--r--gnu/usr.bin/perl/hints/freebsd.sh4
-rw-r--r--gnu/usr.bin/perl/hints/hpux.sh8
-rw-r--r--gnu/usr.bin/perl/hints/linux-android.sh72
-rw-r--r--gnu/usr.bin/perl/hints/linux.sh5
-rw-r--r--gnu/usr.bin/perl/hints/netbsd.sh35
-rw-r--r--gnu/usr.bin/perl/hints/openbsd.sh52
-rw-r--r--gnu/usr.bin/perl/hints/os390.sh25
-rw-r--r--gnu/usr.bin/perl/hints/solaris_2.sh5
-rw-r--r--gnu/usr.bin/perl/hv.c44
-rw-r--r--gnu/usr.bin/perl/hv.h18
-rw-r--r--gnu/usr.bin/perl/hv_func.h91
-rw-r--r--gnu/usr.bin/perl/inline.h411
-rw-r--r--gnu/usr.bin/perl/install_lib.pl18
-rw-r--r--gnu/usr.bin/perl/installperl70
-rw-r--r--gnu/usr.bin/perl/intrpvar.h167
-rw-r--r--gnu/usr.bin/perl/invlist_inline.h158
-rw-r--r--gnu/usr.bin/perl/iperlsys.h38
-rw-r--r--gnu/usr.bin/perl/keywords.c30
-rw-r--r--gnu/usr.bin/perl/keywords.h293
-rw-r--r--gnu/usr.bin/perl/l1_char_class_tab.h408
-rw-r--r--gnu/usr.bin/perl/lib/AnyDBM_File.pm2
-rw-r--r--gnu/usr.bin/perl/lib/B/Deparse-core.t9
-rw-r--r--gnu/usr.bin/perl/lib/B/Deparse.pm346
-rw-r--r--gnu/usr.bin/perl/lib/B/Deparse.t59
-rw-r--r--gnu/usr.bin/perl/lib/B/Op_private.pm31
-rw-r--r--gnu/usr.bin/perl/lib/Benchmark.pm4
-rw-r--r--gnu/usr.bin/perl/lib/Class/Struct.pm4
-rw-r--r--gnu/usr.bin/perl/lib/DBM_Filter/t/encode.t5
-rw-r--r--gnu/usr.bin/perl/lib/English.pm4
-rw-r--r--gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t5
-rw-r--r--gnu/usr.bin/perl/lib/File/stat.pm5
-rw-r--r--gnu/usr.bin/perl/lib/File/stat.t6
-rw-r--r--gnu/usr.bin/perl/lib/FindBin.pm170
-rw-r--r--gnu/usr.bin/perl/lib/FindBin.t20
-rw-r--r--gnu/usr.bin/perl/lib/Pod/t/InputObjects.t127
-rw-r--r--gnu/usr.bin/perl/lib/Pod/t/Select.t116
-rw-r--r--gnu/usr.bin/perl/lib/Pod/t/utils.t81
-rw-r--r--gnu/usr.bin/perl/lib/Tie/Scalar.pm4
-rw-r--r--gnu/usr.bin/perl/lib/Unicode/UCD.pm745
-rw-r--r--gnu/usr.bin/perl/lib/Unicode/UCD.t114
-rw-r--r--gnu/usr.bin/perl/lib/_charnames.pm110
-rw-r--r--gnu/usr.bin/perl/lib/charnames.pm4
-rw-r--r--gnu/usr.bin/perl/lib/charnames.t109
-rw-r--r--gnu/usr.bin/perl/lib/diagnostics.pm8
-rw-r--r--gnu/usr.bin/perl/lib/feature.pm66
-rw-r--r--gnu/usr.bin/perl/lib/overload.pm30
-rw-r--r--gnu/usr.bin/perl/lib/overload.t2
-rw-r--r--gnu/usr.bin/perl/lib/perl5db.pl9
-rw-r--r--gnu/usr.bin/perl/lib/perl5db.t25
-rw-r--r--gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt69
-rw-r--r--gnu/usr.bin/perl/lib/unicore/BidiBrackets.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt6
-rw-r--r--gnu/usr.bin/perl/lib/unicore/Blocks.txt12
-rw-r--r--gnu/usr.bin/perl/lib/unicore/CJKRadicals.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/CaseFolding.txt7
-rw-r--r--gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt17
-rw-r--r--gnu/usr.bin/perl/lib/unicore/DAge.txt72
-rw-r--r--gnu/usr.bin/perl/lib/unicore/DCoreProperties.txt421
-rw-r--r--gnu/usr.bin/perl/lib/unicore/DNormalizationProps.txt52
-rw-r--r--gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt115
-rw-r--r--gnu/usr.bin/perl/lib/unicore/EmojiData.txt770
-rw-r--r--gnu/usr.bin/perl/lib/unicore/EmojiSources.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/Heavy.pl7393
-rw-r--r--gnu/usr.bin/perl/lib/unicore/Index.txt20
-rw-r--r--gnu/usr.bin/perl/lib/unicore/IndicPositionalCategory.txt61
-rw-r--r--gnu/usr.bin/perl/lib/unicore/IndicSyllabicCategory.txt46
-rw-r--r--gnu/usr.bin/perl/lib/unicore/Jamo.txt6
-rw-r--r--gnu/usr.bin/perl/lib/unicore/LineBreak.txt148
-rw-r--r--gnu/usr.bin/perl/lib/unicore/NameAliases.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/NamedSequences.txt44
-rw-r--r--gnu/usr.bin/perl/lib/unicore/NamedSqProv.txt35
-rw-r--r--gnu/usr.bin/perl/lib/unicore/NamesList.txt1916
-rw-r--r--gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/PropList.txt75
-rw-r--r--gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt57
-rw-r--r--gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt14
-rw-r--r--gnu/usr.bin/perl/lib/unicore/README.perl2
-rw-r--r--gnu/usr.bin/perl/lib/unicore/ReadMe.txt11
-rw-r--r--gnu/usr.bin/perl/lib/unicore/ScriptExtensions.txt61
-rw-r--r--gnu/usr.bin/perl/lib/unicore/Scripts.txt156
-rw-r--r--gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt6
-rw-r--r--gnu/usr.bin/perl/lib/unicore/UnicodeData.txt962
-rw-r--r--gnu/usr.bin/perl/lib/unicore/auxiliary/GCBTest.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/auxiliary/GraphemeBreakProperty.txt31
-rw-r--r--gnu/usr.bin/perl/lib/unicore/auxiliary/LBTest.txt1996
-rw-r--r--gnu/usr.bin/perl/lib/unicore/auxiliary/SBTest.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/auxiliary/SentenceBreakProperty.txt79
-rw-r--r--gnu/usr.bin/perl/lib/unicore/auxiliary/WBTest.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/auxiliary/WordBreakProperty.txt67
-rw-r--r--gnu/usr.bin/perl/lib/unicore/extracted/DBidiClass.txt123
-rw-r--r--gnu/usr.bin/perl/lib/unicore/extracted/DBinaryProperties.txt4
-rw-r--r--gnu/usr.bin/perl/lib/unicore/extracted/DCombiningClass.txt119
-rw-r--r--gnu/usr.bin/perl/lib/unicore/extracted/DDecompositionType.txt13
-rw-r--r--gnu/usr.bin/perl/lib/unicore/extracted/DEastAsianWidth.txt117
-rw-r--r--gnu/usr.bin/perl/lib/unicore/extracted/DGeneralCategory.txt223
-rw-r--r--gnu/usr.bin/perl/lib/unicore/extracted/DJoinGroup.txt23
-rw-r--r--gnu/usr.bin/perl/lib/unicore/extracted/DJoinType.txt42
-rw-r--r--gnu/usr.bin/perl/lib/unicore/extracted/DLineBreak.txt161
-rw-r--r--gnu/usr.bin/perl/lib/unicore/extracted/DNumType.txt11
-rw-r--r--gnu/usr.bin/perl/lib/unicore/extracted/DNumValues.txt57
-rw-r--r--gnu/usr.bin/perl/lib/unicore/lib/Lb/EB.pl86
-rw-r--r--gnu/usr.bin/perl/lib/unicore/lib/Perl/_PerlNon.pl52
-rw-r--r--gnu/usr.bin/perl/lib/unicore/lib/Sc/Armn.pl24
-rw-r--r--gnu/usr.bin/perl/lib/unicore/mktables1745
-rw-r--r--gnu/usr.bin/perl/lib/unicore/version2
-rw-r--r--gnu/usr.bin/perl/lib/utf8_heavy.pl623
-rw-r--r--gnu/usr.bin/perl/lib/warnings.pm23
-rw-r--r--gnu/usr.bin/perl/locale.c104
-rw-r--r--gnu/usr.bin/perl/make_ext.pl28
-rw-r--r--gnu/usr.bin/perl/make_patchnum.pl29
-rw-r--r--gnu/usr.bin/perl/makedef.pl373
-rw-r--r--gnu/usr.bin/perl/malloc.c28
-rw-r--r--gnu/usr.bin/perl/mathoms.c616
-rw-r--r--gnu/usr.bin/perl/metaconfig.h15
-rw-r--r--gnu/usr.bin/perl/mg.c280
-rwxr-xr-xgnu/usr.bin/perl/mkppport20
-rw-r--r--gnu/usr.bin/perl/mro_core.c12
-rw-r--r--gnu/usr.bin/perl/numeric.c838
-rw-r--r--gnu/usr.bin/perl/op.c3984
-rw-r--r--gnu/usr.bin/perl/op.h121
-rw-r--r--gnu/usr.bin/perl/opcode.h175
-rw-r--r--gnu/usr.bin/perl/opnames.h5
-rw-r--r--gnu/usr.bin/perl/os2/Changes2
-rw-r--r--gnu/usr.bin/perl/os2/dl_os2.c2
-rw-r--r--gnu/usr.bin/perl/os2/os2.c2
-rw-r--r--gnu/usr.bin/perl/os2/os2ish.h2
-rw-r--r--gnu/usr.bin/perl/pad.c98
-rw-r--r--gnu/usr.bin/perl/pad.h48
-rw-r--r--gnu/usr.bin/perl/parser.h12
-rw-r--r--gnu/usr.bin/perl/patchlevel.h6
-rw-r--r--gnu/usr.bin/perl/perl.c212
-rw-r--r--gnu/usr.bin/perl/perl.h856
-rw-r--r--gnu/usr.bin/perl/perlapi.h72
-rw-r--r--gnu/usr.bin/perl/perlio.c39
-rw-r--r--gnu/usr.bin/perl/perlio.h3
-rw-r--r--gnu/usr.bin/perl/perlvars.h78
-rw-r--r--gnu/usr.bin/perl/perly.act1117
-rw-r--r--gnu/usr.bin/perl/perly.h171
-rw-r--r--gnu/usr.bin/perl/perly.tab1937
-rw-r--r--gnu/usr.bin/perl/perly.y103
-rw-r--r--gnu/usr.bin/perl/plan9/config.plan930
-rw-r--r--gnu/usr.bin/perl/plan9/config_sh.sample43
-rw-r--r--gnu/usr.bin/perl/plan9/mkfile2
-rw-r--r--gnu/usr.bin/perl/plan9/plan9ish.h8
-rw-r--r--gnu/usr.bin/perl/pod/perl.pod20
-rw-r--r--gnu/usr.bin/perl/pod/perl5240delta.pod8
-rw-r--r--gnu/usr.bin/perl/pod/perlapio.pod48
-rw-r--r--gnu/usr.bin/perl/pod/perlbook.pod64
-rw-r--r--gnu/usr.bin/perl/pod/perlcall.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perlcheat.pod8
-rw-r--r--gnu/usr.bin/perl/pod/perlclib.pod6
-rw-r--r--gnu/usr.bin/perl/pod/perlcommunity.pod76
-rw-r--r--gnu/usr.bin/perl/pod/perldata.pod4
-rw-r--r--gnu/usr.bin/perl/pod/perldebguts.pod114
-rw-r--r--gnu/usr.bin/perl/pod/perldelta.pod216
-rw-r--r--gnu/usr.bin/perl/pod/perldiag.pod371
-rw-r--r--gnu/usr.bin/perl/pod/perldtrace.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perlebcdic.pod6
-rw-r--r--gnu/usr.bin/perl/pod/perlembed.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perlexperiment.pod55
-rw-r--r--gnu/usr.bin/perl/pod/perlfilter.pod5
-rw-r--r--gnu/usr.bin/perl/pod/perlfunc.pod585
-rw-r--r--gnu/usr.bin/perl/pod/perlgit.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perlguts.pod503
-rw-r--r--gnu/usr.bin/perl/pod/perlhack.pod48
-rw-r--r--gnu/usr.bin/perl/pod/perlhacktips.pod76
-rw-r--r--gnu/usr.bin/perl/pod/perlhist.pod42
-rw-r--r--gnu/usr.bin/perl/pod/perlintro.pod6
-rw-r--r--gnu/usr.bin/perl/pod/perliol.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perlipc.pod546
-rw-r--r--gnu/usr.bin/perl/pod/perllocale.pod34
-rw-r--r--gnu/usr.bin/perl/pod/perlmodinstall.pod22
-rw-r--r--gnu/usr.bin/perl/pod/perlmodlib.PL11
-rw-r--r--gnu/usr.bin/perl/pod/perlmodstyle.pod8
-rw-r--r--gnu/usr.bin/perl/pod/perlmroapi.pod4
-rw-r--r--gnu/usr.bin/perl/pod/perlnewmod.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perlootut.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perlop.pod232
-rw-r--r--gnu/usr.bin/perl/pod/perlpacktut.pod9
-rw-r--r--gnu/usr.bin/perl/pod/perlpod.pod41
-rw-r--r--gnu/usr.bin/perl/pod/perlpodspec.pod19
-rw-r--r--gnu/usr.bin/perl/pod/perlpolicy.pod75
-rw-r--r--gnu/usr.bin/perl/pod/perlport.pod26
-rw-r--r--gnu/usr.bin/perl/pod/perlre.pod33
-rw-r--r--gnu/usr.bin/perl/pod/perlrebackslash.pod22
-rw-r--r--gnu/usr.bin/perl/pod/perlrecharclass.pod4
-rw-r--r--gnu/usr.bin/perl/pod/perlref.pod30
-rw-r--r--gnu/usr.bin/perl/pod/perlreref.pod28
-rw-r--r--gnu/usr.bin/perl/pod/perlretut.pod80
-rw-r--r--gnu/usr.bin/perl/pod/perlrun.pod320
-rw-r--r--gnu/usr.bin/perl/pod/perlsec.pod46
-rw-r--r--gnu/usr.bin/perl/pod/perlsource.pod14
-rw-r--r--gnu/usr.bin/perl/pod/perlstyle.pod21
-rw-r--r--gnu/usr.bin/perl/pod/perlsub.pod7
-rw-r--r--gnu/usr.bin/perl/pod/perlsyn.pod25
-rw-r--r--gnu/usr.bin/perl/pod/perlthrtut.pod8
-rw-r--r--gnu/usr.bin/perl/pod/perltie.pod28
-rw-r--r--gnu/usr.bin/perl/pod/perltrap.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perlunicode.pod246
-rw-r--r--gnu/usr.bin/perl/pod/perlunicook.pod7
-rw-r--r--gnu/usr.bin/perl/pod/perlunifaq.pod2
-rw-r--r--gnu/usr.bin/perl/pod/perluniintro.pod22
-rw-r--r--gnu/usr.bin/perl/pod/perlutil.pod10
-rw-r--r--gnu/usr.bin/perl/pod/perlvar.pod86
-rw-r--r--gnu/usr.bin/perl/pp.c196
-rw-r--r--gnu/usr.bin/perl/pp.h28
-rw-r--r--gnu/usr.bin/perl/pp_ctl.c73
-rw-r--r--gnu/usr.bin/perl/pp_hot.c74
-rw-r--r--gnu/usr.bin/perl/pp_pack.c13
-rw-r--r--gnu/usr.bin/perl/pp_proto.h8
-rw-r--r--gnu/usr.bin/perl/pp_sort.c1383
-rw-r--r--gnu/usr.bin/perl/pp_sys.c29
-rw-r--r--gnu/usr.bin/perl/proto.h1949
-rw-r--r--gnu/usr.bin/perl/reentr.c732
-rw-r--r--gnu/usr.bin/perl/regcharclass.h458
-rw-r--r--gnu/usr.bin/perl/regcomp.c4536
-rw-r--r--gnu/usr.bin/perl/regcomp.h287
-rw-r--r--gnu/usr.bin/perl/regcomp.sym103
-rw-r--r--gnu/usr.bin/perl/regen/ebcdic.pl38
-rw-r--r--gnu/usr.bin/perl/regen/embed.pl83
-rw-r--r--gnu/usr.bin/perl/regen/embed_lib.pl3
-rw-r--r--gnu/usr.bin/perl/regen/feature.pl171
-rw-r--r--gnu/usr.bin/perl/regen/keywords.pl2
-rw-r--r--gnu/usr.bin/perl/regen/lib_cleanup.pl6
-rw-r--r--gnu/usr.bin/perl/regen/mg_vtable.pl7
-rw-r--r--gnu/usr.bin/perl/regen/mk_PL_charclass.pl12
-rw-r--r--gnu/usr.bin/perl/regen/mk_invlists.pl520
-rw-r--r--gnu/usr.bin/perl/regen/op_private12
-rw-r--r--gnu/usr.bin/perl/regen/opcode.pl25
-rw-r--r--gnu/usr.bin/perl/regen/opcodes10
-rw-r--r--gnu/usr.bin/perl/regen/reentr.pl725
-rw-r--r--gnu/usr.bin/perl/regen/regcharclass.pl32
-rw-r--r--gnu/usr.bin/perl/regen/regcharclass_multi_char_folds.pl72
-rw-r--r--gnu/usr.bin/perl/regen/regcomp.pl46
-rw-r--r--gnu/usr.bin/perl/regen/unicode_constants.pl4
-rw-r--r--gnu/usr.bin/perl/regen/warnings.pl32
-rwxr-xr-xgnu/usr.bin/perl/regen_perly.pl4
-rw-r--r--gnu/usr.bin/perl/regexec.c488
-rw-r--r--gnu/usr.bin/perl/regexp.h30
-rw-r--r--gnu/usr.bin/perl/regnodes.h426
-rw-r--r--gnu/usr.bin/perl/scope.c12
-rw-r--r--gnu/usr.bin/perl/scope.h12
-rw-r--r--gnu/usr.bin/perl/sv.c389
-rw-r--r--gnu/usr.bin/perl/sv.h173
-rw-r--r--gnu/usr.bin/perl/symbian/config.sh3
-rw-r--r--gnu/usr.bin/perl/symbian/symbianish.h2
-rw-r--r--gnu/usr.bin/perl/t/TEST32
-rw-r--r--gnu/usr.bin/perl/t/base/cond.t16
-rw-r--r--gnu/usr.bin/perl/t/base/if.t4
-rw-r--r--gnu/usr.bin/perl/t/base/lex.t2
-rw-r--r--gnu/usr.bin/perl/t/base/pat.t4
-rwxr-xr-xgnu/usr.bin/perl/t/benchmark/rt26188-speed-up-keys-on-empty-hash.t84
-rw-r--r--gnu/usr.bin/perl/t/charset_tools.pl37
-rw-r--r--gnu/usr.bin/perl/t/harness6
-rwxr-xr-xgnu/usr.bin/perl/t/io/errno.t2
-rw-r--r--gnu/usr.bin/perl/t/io/pipe.t32
-rw-r--r--gnu/usr.bin/perl/t/lib/charnames/alias2
-rw-r--r--gnu/usr.bin/perl/t/lib/croak/toke71
-rw-r--r--gnu/usr.bin/perl/t/lib/h2ph.pht4
-rw-r--r--gnu/usr.bin/perl/t/lib/overload_nomethod.t10
-rw-r--r--gnu/usr.bin/perl/t/lib/strict/subs8
-rw-r--r--gnu/usr.bin/perl/t/lib/warnings/9uninit10
-rw-r--r--gnu/usr.bin/perl/t/lib/warnings/doop14
-rw-r--r--gnu/usr.bin/perl/t/lib/warnings/op44
-rw-r--r--gnu/usr.bin/perl/t/lib/warnings/regcomp20
-rw-r--r--gnu/usr.bin/perl/t/lib/warnings/toke74
-rw-r--r--gnu/usr.bin/perl/t/loc_tools.pl7
-rw-r--r--gnu/usr.bin/perl/t/mro/next_edgecases.t2
-rw-r--r--gnu/usr.bin/perl/t/mro/next_edgecases_utf8.t2
-rw-r--r--gnu/usr.bin/perl/t/op/aassign.t20
-rw-r--r--gnu/usr.bin/perl/t/op/attrs.t3
-rw-r--r--gnu/usr.bin/perl/t/op/bop.t137
-rw-r--r--gnu/usr.bin/perl/t/op/concat2.t18
-rw-r--r--gnu/usr.bin/perl/t/op/cond.t15
-rw-r--r--gnu/usr.bin/perl/t/op/const-optree.t44
-rw-r--r--gnu/usr.bin/perl/t/op/coreamp.t18
-rw-r--r--gnu/usr.bin/perl/t/op/coresubs.t2
-rw-r--r--gnu/usr.bin/perl/t/op/die.t8
-rw-r--r--gnu/usr.bin/perl/t/op/die_unwind.t4
-rw-r--r--gnu/usr.bin/perl/t/op/exec.t2
-rw-r--r--gnu/usr.bin/perl/t/op/fork.t2
-rwxr-xr-xgnu/usr.bin/perl/t/op/getppid.t2
-rw-r--r--gnu/usr.bin/perl/t/op/goto.t19
-rw-r--r--gnu/usr.bin/perl/t/op/groups.t2
-rw-r--r--gnu/usr.bin/perl/t/op/gv.t2
-rw-r--r--gnu/usr.bin/perl/t/op/hexfp.t18
-rw-r--r--gnu/usr.bin/perl/t/op/index.t28
-rw-r--r--gnu/usr.bin/perl/t/op/int.t5
-rw-r--r--gnu/usr.bin/perl/t/op/lc.t4
-rw-r--r--gnu/usr.bin/perl/t/op/list.t9
-rw-r--r--gnu/usr.bin/perl/t/op/lvref.t15
-rw-r--r--gnu/usr.bin/perl/t/op/magic.t12
-rw-r--r--gnu/usr.bin/perl/t/op/qr.t2
-rw-r--r--gnu/usr.bin/perl/t/op/range.t23
-rw-r--r--gnu/usr.bin/perl/t/op/readdir.t6
-rw-r--r--gnu/usr.bin/perl/t/op/ref.t2
-rw-r--r--gnu/usr.bin/perl/t/op/require_errors.t14
-rw-r--r--gnu/usr.bin/perl/t/op/reverse.t11
-rw-r--r--gnu/usr.bin/perl/t/op/signatures.t40
-rw-r--r--gnu/usr.bin/perl/t/op/sort.t23
-rw-r--r--gnu/usr.bin/perl/t/op/split.t2
-rw-r--r--gnu/usr.bin/perl/t/op/sprintf.t2
-rwxr-xr-xgnu/usr.bin/perl/t/op/sprintf2.t16
-rw-r--r--gnu/usr.bin/perl/t/op/stat.t18
-rw-r--r--gnu/usr.bin/perl/t/op/sub.t2
-rw-r--r--gnu/usr.bin/perl/t/op/sub_lval.t2
-rw-r--r--gnu/usr.bin/perl/t/op/svleak.t2
-rw-r--r--gnu/usr.bin/perl/t/op/taint.t29
-rw-r--r--gnu/usr.bin/perl/t/op/threads-dirh.t1
-rw-r--r--gnu/usr.bin/perl/t/op/tr.t68
-rw-r--r--gnu/usr.bin/perl/t/op/universal.t3
-rw-r--r--gnu/usr.bin/perl/t/op/utftaint.t2
-rw-r--r--gnu/usr.bin/perl/t/op/vec.t25
-rw-r--r--gnu/usr.bin/perl/t/op/write.t2
-rw-r--r--gnu/usr.bin/perl/t/perf/benchmarks6
-rw-r--r--gnu/usr.bin/perl/t/perf/opcount.t14
-rwxr-xr-xgnu/usr.bin/perl/t/porting/args_assert.t4
-rw-r--r--gnu/usr.bin/perl/t/porting/bench.t2
-rw-r--r--gnu/usr.bin/perl/t/porting/customized.dat24
-rwxr-xr-xgnu/usr.bin/perl/t/porting/diag.t6
-rw-r--r--gnu/usr.bin/perl/t/porting/dual-life.t6
-rw-r--r--gnu/usr.bin/perl/t/porting/known_pod_issues.dat34
-rw-r--r--gnu/usr.bin/perl/t/porting/libperl.t2
-rwxr-xr-xgnu/usr.bin/perl/t/porting/manifest.t4
-rwxr-xr-xgnu/usr.bin/perl/t/porting/podcheck.t68
-rw-r--r--gnu/usr.bin/perl/t/re/bigfuzzy_not_utf8.tbin36399 -> 36462 bytes
-rwxr-xr-xgnu/usr.bin/perl/t/re/pat.t184
-rwxr-xr-xgnu/usr.bin/perl/t/re/pat_advanced.t58
-rwxr-xr-xgnu/usr.bin/perl/t/re/pat_re_eval.t8
-rw-r--r--gnu/usr.bin/perl/t/re/re_tests10
-rw-r--r--gnu/usr.bin/perl/t/re/recompile.t2
-rwxr-xr-xgnu/usr.bin/perl/t/re/reg_mesg.t102
-rw-r--r--gnu/usr.bin/perl/t/re/regex_sets.t6
-rwxr-xr-xgnu/usr.bin/perl/t/re/regexp.t76
-rwxr-xr-xgnu/usr.bin/perl/t/re/regexp_unicode_prop.t11
-rw-r--r--gnu/usr.bin/perl/t/re/rt122747.t2
-rw-r--r--gnu/usr.bin/perl/t/re/script_run.t5
-rw-r--r--gnu/usr.bin/perl/t/re/speed.t7
-rw-r--r--gnu/usr.bin/perl/t/run/fresh_perl.t2
-rw-r--r--gnu/usr.bin/perl/t/run/switches.t63
-rw-r--r--gnu/usr.bin/perl/t/test.pl56
-rw-r--r--gnu/usr.bin/perl/t/uni/cache.t35
-rw-r--r--gnu/usr.bin/perl/t/uni/gv.t2
-rw-r--r--gnu/usr.bin/perl/t/uni/variables.t4
-rw-r--r--gnu/usr.bin/perl/taint.c7
-rw-r--r--gnu/usr.bin/perl/time64.c228
-rw-r--r--gnu/usr.bin/perl/time64.h13
-rw-r--r--gnu/usr.bin/perl/toke.c8500
-rw-r--r--gnu/usr.bin/perl/uconfig.h42
-rw-r--r--gnu/usr.bin/perl/uconfig.sh19
-rw-r--r--gnu/usr.bin/perl/uconfig64.sh19
-rw-r--r--gnu/usr.bin/perl/unicode_constants.h10
-rw-r--r--gnu/usr.bin/perl/universal.c360
-rw-r--r--gnu/usr.bin/perl/unixish.h4
-rw-r--r--gnu/usr.bin/perl/utf8.c1336
-rw-r--r--gnu/usr.bin/perl/utf8.h366
-rw-r--r--gnu/usr.bin/perl/utfebcdic.h73
-rw-r--r--gnu/usr.bin/perl/util.c237
-rw-r--r--gnu/usr.bin/perl/util.h30
-rw-r--r--gnu/usr.bin/perl/utils.lst10
-rw-r--r--gnu/usr.bin/perl/utils/Makefile.PL20
-rw-r--r--gnu/usr.bin/perl/utils/h2ph.PL13
-rw-r--r--gnu/usr.bin/perl/utils/h2xs.PL2
-rw-r--r--gnu/usr.bin/perl/utils/perlbug.PL183
-rw-r--r--gnu/usr.bin/perl/utils/perlivp.PL2
-rw-r--r--gnu/usr.bin/perl/utils/pl2pm.PL7
-rw-r--r--gnu/usr.bin/perl/utils/splain.PL9
-rw-r--r--gnu/usr.bin/perl/vms/descrip_mms.template13
-rw-r--r--gnu/usr.bin/perl/vms/gen_shrfls.pl9
-rw-r--r--gnu/usr.bin/perl/vms/vms.c14
-rw-r--r--gnu/usr.bin/perl/vms/vmsish.h3
-rw-r--r--gnu/usr.bin/perl/vutil.c12
-rw-r--r--gnu/usr.bin/perl/vxs.inc2
-rw-r--r--gnu/usr.bin/perl/warnings.h96
-rw-r--r--gnu/usr.bin/perl/win32/GNUmakefile113
-rw-r--r--gnu/usr.bin/perl/win32/Makefile88
-rw-r--r--gnu/usr.bin/perl/win32/Makefile.ce1077
-rw-r--r--gnu/usr.bin/perl/win32/bin/search.pl4
-rw-r--r--gnu/usr.bin/perl/win32/ce-helpers/cecopy-lib.pl207
-rw-r--r--gnu/usr.bin/perl/win32/ce-helpers/comp.pl84
-rw-r--r--gnu/usr.bin/perl/win32/ce-helpers/compile-all.bat62
-rw-r--r--gnu/usr.bin/perl/win32/ce-helpers/compile.bat42
-rw-r--r--gnu/usr.bin/perl/win32/ce-helpers/makedist.pl297
-rw-r--r--gnu/usr.bin/perl/win32/ce-helpers/registry.bat28
-rw-r--r--gnu/usr.bin/perl/win32/ce-helpers/sdsdkenv.bat3
-rw-r--r--gnu/usr.bin/perl/win32/config.ce1137
-rw-r--r--gnu/usr.bin/perl/win32/config.gc3
-rw-r--r--gnu/usr.bin/perl/win32/config.vc3
-rw-r--r--gnu/usr.bin/perl/win32/config_H.ce4206
-rw-r--r--gnu/usr.bin/perl/win32/config_H.gc6
-rw-r--r--gnu/usr.bin/perl/win32/config_H.vc6
-rw-r--r--gnu/usr.bin/perl/win32/config_sh.PL4
-rw-r--r--gnu/usr.bin/perl/win32/include/sys/socket.h157
-rw-r--r--gnu/usr.bin/perl/win32/makefile.mk111
-rw-r--r--gnu/usr.bin/perl/win32/perl.rc36
-rw-r--r--gnu/usr.bin/perl/win32/perlglob.c11
-rw-r--r--gnu/usr.bin/perl/win32/perlhost.h13
-rw-r--r--gnu/usr.bin/perl/win32/perllib.c40
-rw-r--r--gnu/usr.bin/perl/win32/perlmaince.c40
-rw-r--r--gnu/usr.bin/perl/win32/pod.mak20
-rw-r--r--gnu/usr.bin/perl/win32/vdir.h8
-rw-r--r--gnu/usr.bin/perl/win32/vmem.h2
-rw-r--r--gnu/usr.bin/perl/win32/win32.c20
-rw-r--r--gnu/usr.bin/perl/win32/win32.h29
-rw-r--r--gnu/usr.bin/perl/win32/win32ceio.c379
-rw-r--r--gnu/usr.bin/perl/win32/win32io.c2
-rw-r--r--gnu/usr.bin/perl/win32/win32iop-o.h327
-rw-r--r--gnu/usr.bin/perl/win32/win32iop.h155
-rw-r--r--gnu/usr.bin/perl/win32/win32sck.c1
-rw-r--r--gnu/usr.bin/perl/win32/wince.c2877
-rw-r--r--gnu/usr.bin/perl/win32/wince.h146
-rw-r--r--gnu/usr.bin/perl/win32/wincesck.c495
-rw-r--r--gnu/usr.bin/perl/write_buildcustomize.pl6
981 files changed, 84299 insertions, 71740 deletions
diff --git a/gnu/usr.bin/perl/AUTHORS b/gnu/usr.bin/perl/AUTHORS
index 3d80ae64135..2136fb21047 100644
--- a/gnu/usr.bin/perl/AUTHORS
+++ b/gnu/usr.bin/perl/AUTHORS
@@ -15,1303 +15,1326 @@
# This should contain the preferred addresses. Alternate addresses are in
# Porting/checkAUTHORS.pl.
#
-# After editing, please run: make test_porting
+# updated_by: ./Porting/checkAUTHORS.pl --update --from=v5.30.0
--
-A. C. Yardley <yardley@tanet.net>
-A. Sinan Unur <nanis@cpan.org>
-Aaron B. Dossett <aaron@iglou.com>
-Aaron Crane <arc@cpan.org>
-Aaron J. Mackey <ajm6q@virginia.edu>
-Aaron Priven <aaron@priven.com>
-Aaron Trevena <aaaron.trevena@gmail.com>
-Abe Timmerman <abe@ztreet.demon.nl>
-Abhijit Menon-Sen <ams@toroid.org>
-Abigail <abigail@abigail.be>
-Abir Viqar <abiviq@hushmail.com>
-Achim Bohnet <ach@mpe.mpg.de>
-Achim Gratz <achim.gratz@stromeko.de>
-Adam Flott <adam@npjh.com>
-Adam Kennedy <adam@ali.as>
-Adam Krolnik <adamk@gypsy.cyrix.com>
-Adam Milner <carmiac@nmt.edu>
-Adam Russell <arussell@cs.uml.edu>
+A. C. Yardley <yardley@tanet.net>
+A. Sinan Unur <nanis@cpan.org>
+Aaron B. Dossett <aaron@iglou.com>
+Aaron Crane <arc@cpan.org>
+Aaron J. Mackey <ajm6q@virginia.edu>
+Aaron Priven <aaron@priven.com>
+Aaron Trevena <aaaron.trevena@gmail.com>
+Abe Timmerman <abe@ztreet.demon.nl>
+Abhijit Menon-Sen <ams@toroid.org>
+Abigail <abigail@abigail.be>
+Abir Viqar <abiviq@hushmail.com>
+Achim Bohnet <ach@mpe.mpg.de>
+Achim Gratz <achim.gratz@stromeko.de>
+Adam Flott <adam@npjh.com>
+Adam Hartley @BytesGuy
+Adam Kennedy <adam@ali.as>
+Adam Krolnik <adamk@gypsy.cyrix.com>
+Adam Milner <carmiac@nmt.edu>
+Adam Russell <arussell@cs.uml.edu>
Adam Spiers
-Adrian M. Enache <enache@rdslink.ro>
-Adriano Ferreira <a.r.ferreira@gmail.com>
-Akim Demaille <akim@epita.fr>
-Alain Barbet <alian@cpan.org>
-Alan Burlison <Alan.Burlison@uk.sun.com>
-Alan Champion <achampio@lehman.com>
-Alan Ferrency <alan@pair.com>
-Alan Grover <awgrover@gmail.com>
-Alan Grow <agrow@thegotonerd.com>
-Alan Haggai Alavi <haggai@cpan.org>
-Alan Harder <Alan.Harder@Ebay.Sun.COM>
-Alan Hourihane <alanh@fairlite.co.uk>
+Adrian M. Enache <enache@rdslink.ro>
+Adriano Ferreira <a.r.ferreira@gmail.com>
+Akim Demaille <akim@epita.fr>
+Alain Barbet <alian@cpan.org>
+Alan Burlison <alan.burlison@sun.com>
+Alan Champion <achampio@lehman.com>
+Alan Ferrency <alan@pair.com>
+Alan Grover <awgrover@gmail.com>
+Alan Grow <agrow@thegotonerd.com>
+Alan Haggai Alavi <haggai@cpan.org>
+Alan Harder <Alan.Harder@Ebay.Sun.COM>
+Alan Hourihane <alanh@fairlite.co.uk>
Alan Modra
-Alastair Douglas <alastair.douglas@gmail.com>
-Albert Chin-A-Young <china@thewrittenword.com>
-Albert Dvornik <bert@alum.mit.edu>
-Alberto Simões <ambs@cpan.org>
-Alessandro Forghieri <alf@orion.it>
-Alex Davies <adavies@ptc.com>
-Alex Gough <alex@rcon.org>
-Alex Solovey <a.solovey@gmail.com>
-Alex Vandiver <alexmv@mit.edu>
-Alex Waugh <alex@alexwaugh.com>
-Alexander Alekseev <alex@alemate.ru>
-Alexander Bluhm <alexander_bluhm@genua.de>
-Alexander D'Archangel <darksuji@gmail.com>
-Alexander Gernler <alexander_gernler@genua.de>
-Alexander Gough <alex-p5p@earth.li>
-Alexander Hartmaier <abraxxa@cpan.org>
-Alexander Klimov <ask@wisdom.weizmann.ac.il>
-Alexander Smishlajev <als@turnhere.com>
-Alexander Voronov <alexander-voronov@yandex.ru>
-Alexandr Ciornii <alexchorny@gmail.com>
-Alexandr Savca <alexandr.savca89@gmail.com>
-Alexandre (Midnite) Jousset <mid@gtmp.org>
-Alexei Alexandrov <alexei.alexandrov@gmail.com>
-Alexey Mahotkin <alexm@netli.com>
-Alexey Toptygin <alexeyt@freeshell.org>
-Alexey Tourbin <at@altlinux.ru>
-Alexey V. Barantsev <barancev@kazbek.ispras.ru>
-Ali Polatel <alip@exherbo.org>
-Allen Smith <allens@cpan.org>
+Alastair Douglas <alastair.douglas@gmail.com>
+Albert Chin-A-Young <china@thewrittenword.com>
+Albert Dvornik <bert@alum.mit.edu>
+Alberto Simões <ambs@cpan.org>
+Alessandro Forghieri <alf@orion.it>
+Alex Davies <adavies@ptc.com>
+Alex Gough <alex@rcon.org>
+Alex Solovey <a.solovey@gmail.com>
+Alex Vandiver <alexmv@mit.edu>
+Alex Waugh <alex@alexwaugh.com>
+Alexander Alekseev <alex@alemate.ru>
+Alexander Bluhm <alexander_bluhm@genua.de>
+Alexander D'Archangel <darksuji@gmail.com>
+Alexander Gernler <alexander_gernler@genua.de>
+Alexander Gough <alex-p5p@earth.li>
+Alexander Hartmaier <abraxxa@cpan.org>
+Alexander Klimov <ask@wisdom.weizmann.ac.il>
+Alexander Smishlajev <als@turnhere.com>
+Alexander Voronov <alexander-voronov@yandex.ru>
+Alexandr Ciornii <alexchorny@gmail.com>
+Alexandr Savca <alexandr.savca89@gmail.com>
+Alexandre (Midnite) Jousset <mid@gtmp.org>
+Alexei Alexandrov <alexei.alexandrov@gmail.com>
+Alexey Mahotkin <alexm@netli.com>
+Alexey Toptygin <alexeyt@freeshell.org>
+Alexey Tourbin <at@altlinux.ru>
+Alexey V. Barantsev <barancev@kazbek.ispras.ru>
+Ali Polatel <alip@exherbo.org>
+Allen Smith <allens@cpan.org>
Ambrose Kofi Laing
-Ammon Riley <ammon@rhythm.com>
-Ananth Kesari <HYanantha@novell.com>
-Anders Johnson <ajohnson@nvidia.com>
-Andreas Guðmundsson <andreasg@nasarde.org>
-Andreas Karrer <karrer@ife.ee.ethz.ch>
-Andreas Klussmann <andreas@infosys.heitec.de>
-Andreas König <a.koenig@mind.de>
-Andreas Marienborg <andreas.marienborg@gmail.com>
-Andreas Schwab <schwab@suse.de>
-Andreas Voegele <andreas@andreasvoegele.com>
-Andrei Yelistratov <andrew@sundale.net>
-Andrej Borsenkow <Andrej.Borsenkow@mow.siemens.ru>
-Andrew Bettison <andrewb@zip.com.au>
-Andrew Burt <aburt@isis.cs.du.edu>
-Andrew Cohen <cohen@andy.bu.edu>
-andrew deryabin <djsf@technarchy.ru>
-Andrew Fresh <afresh1@openbsd.org>
-Andrew Hamm <AHamm@civica.com.au>
-Andrew M. Langmead <aml@world.std.com>
-Andrew Pimlott <pimlott@idiomtech.com>
-Andrew Rodland <arodland@cpan.org>
-Andrew Savige <ajsavige@yahoo.com.au>
-Andrew Tam <andrewtam000@gmail.com>
-Andrew Vignaux <ajv@nz.sangacorp.com>
-Andrew Wilcox <awilcox@maine.com>
-Andrey Sapozhnikov <sapa@icb.chel.su>
-Andy Armstrong <andy@hexten.net>
-Andy Broad <andy@broad.ology.org.uk>
-Andy Bussey <andybussey@yahoo.co.uk>
-Andy Dougherty <doughera@lafayette.edu>
-Andy Lester <andy@petdance.com>
-Anno Siegel <anno4000@lublin.zrz.tu-berlin.de>
-Anthony David <adavid@netinfo.com.au>
-Anthony Heading <anthony@ajrh.net>
-Anton Berezin <tobez@tobez.org>
-Anton Nikishaev <me@lelf.lu>
-Anton Tagunov <tagunov@motor.ru>
-Archer Sully <archer@meer.net>
-Aristotle Pagaltzis <pagaltzis@gmx.de>
-Arjen Laarhoven <arjen@nl.demon.net>
-Arkturuz <arkturuz@gmail.com>
-Arne Ahrend <aahrend@web.de>
-Arnold D. Robbins <arnold@gnu.ai.mit.edu>
-Art Green <Art_Green@mercmarine.com>
-Art Haas <ahaas@airmail.net>
-Arthur Axel 'fREW' Schmidt <frioux@gmail.com>
-Artiom Morozov <artiom@phreaker.net>
-Artur Bergman <artur@contiller.se>
-Arvan <apritchard@zeus.com>
-Ash Berlin <ash@cpan.org>
-Ask Bjørn Hansen <ask@develooper.com>
-Audrey Tang <cpan@audreyt.org>
-Augustina Blair <auggy@cpan.org>
+Ammon Riley <ammon@rhythm.com>
+Ananth Kesari <HYanantha@novell.com>
+Anders Johnson <ajohnson@nvidia.com>
+Andreas Guðmundsson <andreasg@nasarde.org>
+Andreas Karrer <karrer@ife.ee.ethz.ch>
+Andreas Klussmann <andreas@infosys.heitec.de>
+Andreas König <a.koenig@mind.de>
+Andreas Marienborg <andreas.marienborg@gmail.com>
+Andreas Schwab <schwab@suse.de>
+Andreas Voegele <andreas@andreasvoegele.com>
+Andrei Yelistratov <andrew@sundale.net>
+Andrej Borsenkow <Andrej.Borsenkow@mow.siemens.ru>
+Andrew Bettison <andrewb@zip.com.au>
+Andrew Burt <aburt@isis.cs.du.edu>
+Andrew Cohen <cohen@andy.bu.edu>
+andrew deryabin <djsf@technarchy.ru>
+Andrew Fresh <afresh1@openbsd.org>
+Andrew Hamm <AHamm@civica.com.au>
+Andrew M. Langmead <aml@world.std.com>
+Andrew Pimlott <pimlott@idiomtech.com>
+Andrew Rodland <arodland@cpan.org>
+Andrew Savige <ajsavige@yahoo.com.au>
+Andrew Tam <andrewtam000@gmail.com>
+Andrew Vignaux <ajv@nz.sangacorp.com>
+Andrew Wilcox <awilcox@maine.com>
+Andrey Sapozhnikov <sapa@icb.chel.su>
+Andy Armstrong <andy@hexten.net>
+Andy Broad <andy@broad.ology.org.uk>
+Andy Bussey <andybussey@yahoo.co.uk>
+Andy Dougherty <doughera@lafayette.edu>
+Andy Lester <andy@petdance.com>
+Anno Siegel <anno4000@lublin.zrz.tu-berlin.de>
+Anthony David <adavid@netinfo.com.au>
+Anthony Heading <anthony@ajrh.net>
+Anton Berezin <tobez@tobez.org>
+Anton Nikishaev <me@lelf.lu>
+Anton Tagunov <tagunov@motor.ru>
+Archer Sully <archer@meer.net>
+Aristotle Pagaltzis <pagaltzis@gmx.de>
+Arjen Laarhoven <arjen@nl.demon.net>
+Arkturuz <arkturuz@gmail.com>
+Arne Ahrend <aahrend@web.de>
+Arnold D. Robbins <arnold@gnu.ai.mit.edu>
+Art Green <Art_Green@mercmarine.com>
+Art Haas <ahaas@airmail.net>
+Arthur Axel 'fREW' Schmidt <frioux@gmail.com>
+Artiom Morozov <artiom@phreaker.net>
+Artur Bergman <artur@contiller.se>
+Arvan <apritchard@zeus.com>
+Ash Berlin <ash@cpan.org>
+Ask Bjørn Hansen <ask@develooper.com>
+Atsushi Sugawara <peanutsjamjam@gmail.com>
+Audrey Tang <cpan@audreyt.org>
+Augustina Blair <auggy@cpan.org>
Axel Boldt
-Barrie Slaymaker <barries@slaysys.com>
+Barrie Slaymaker <barries@slaysys.com>
Barry Friedman
-Bart Kedryna <bkedryna@home.com>
-Bas van Sisseren <bas@quarantainenet.nl>
+Bart Kedryna <bkedryna@home.com>
+Bas van Sisseren <bas@quarantainenet.nl>
Beau Cox
-Ben Carter <bcarter@gumdrop.flyinganvil.org>
-Ben Hengst <notbenh@cpan.org>
-Ben Morrow <ben@morrow.me.uk>
-Ben Okopnik <ben@linuxgazette.net>
-Ben Tilly <ben_tilly@operamail.com>
-Benjamin Goldberg <goldbb2@earthlink.net>
-Benjamin Holzman <bah@ecnvantage.com>
-Benjamin Low <b.d.low@unsw.edu.au>
-Benjamin Smith <bsmith@cabbage.org.uk>
-Benjamin Stuhl <sho_pi@hotmail.com>
-Benjamin Sugars <bsugars@canoe.ca>
-Bernard Quatermass <bernard@quatermass.co.uk>
-Bill Campbell <bill@celestial.com>
-Bill Glicker <billg@burrelles.com>
-Billy Constantine <wdconsta@cs.adelaide.edu.au>
-Blair Zajac <blair@orcaware.com>
-Bo Borgerson <gigabo@gmail.com>
-Bo Johansson <bo.johansso@lsn.se>
-Bo Lindbergh <blgl@stacken.kth.se>
-Bob Dalgleish <Robert.Dalgleish@sk.sympatico.ca>
-Bob Ernst <bobernst@cpan.org>
-Bob Wilkinson <bob@fourtheye.org>
-Boris Ratner <ratner2@gmail.com>
-Boris Zentner <bzm@2bz.de>
-Boyd Gerber <gerberb@zenez.com>
-Brad Appleton <bradapp@enteract.com>
-Brad Gilbert <b2gills@gmail.com>
-Brad Howerter <bhower@wgc.woodward.com>
-Brad Hughes <brad@tgsmc.com>
-Brad Lanam <bll@gentoo.com>
-Bradley Dean <bjdean@bjdean.id.au>
-Bram <perl-rt@wizbit.be>
-Brandon Black <blblack@gmail.com>
-Brendan Byrd <BBYRD@CPAN.org>
-Brendan O'Dea <bod@debian.org>
-Breno G. de Oliveira <garu@cpan.org>
-Brent B. Powers <powers@ml.com>
-Brent Dax <brentdax@cpan.org>
-Brian Callaghan <callagh@itginc.com>
-Brian Carlson <brian.carlson@cpanel.net>
-Brian Childs <brian@rentec.com>
-Brian Clarke <clarke@appliedmeta.com>
-brian d foy <brian.d.foy@gmail.com>
-Brian Fraser <fraserbn@gmail.com>
-Brian Gottreu <gottreu@gmail.com>
-Brian Greenfield <briang@cpan.org>
+Ben Carter <bcarter@gumdrop.flyinganvil.org>
+Ben Hengst <notbenh@cpan.org>
+Ben Morrow <ben@morrow.me.uk>
+Ben Okopnik <ben@linuxgazette.net>
+Ben Tilly <ben_tilly@operamail.com>
+Benjamin Goldberg <goldbb2@earthlink.net>
+Benjamin Holzman <bah@ecnvantage.com>
+Benjamin Low <b.d.low@unsw.edu.au>
+Benjamin Smith <bsmith@cabbage.org.uk>
+Benjamin Stuhl <sho_pi@hotmail.com>
+Benjamin Sugars <bsugars@canoe.ca>
+Bernard Quatermass <bernard@quatermass.co.uk>
+Bernhard M. Wiedemann <bwiedemann@suse.de>
+Bill Campbell <bill@celestial.com>
+Bill Glicker <billg@burrelles.com>
+Billy Constantine <wdconsta@cs.adelaide.edu.au>
+Blair Zajac <blair@orcaware.com>
+Bo Borgerson <gigabo@gmail.com>
+Bo Johansson <bo.johansso@lsn.se>
+Bo Lindbergh <blgl@stacken.kth.se>
+Bob Dalgleish <Robert.Dalgleish@sk.sympatico.ca>
+Bob Ernst <bobernst@cpan.org>
+Bob Wilkinson <bob@fourtheye.org>
+Boris Ratner <ratner2@gmail.com>
+Boris Zentner <bzm@2bz.de>
+Boyd Gerber <gerberb@zenez.com>
+Brad Appleton <bradapp@enteract.com>
+Brad Gilbert <b2gills@gmail.com>
+Brad Howerter <bhower@wgc.woodward.com>
+Brad Hughes <brad@tgsmc.com>
+Brad Lanam <bll@gentoo.com>
+Bradley Dean <bjdean@bjdean.id.au>
+Bram <perl-rt@wizbit.be>
+Brandon Black <blblack@gmail.com>
+Brendan Byrd <BBYRD@CPAN.org>
+Brendan O'Dea <bod@debian.org>
+Breno G. de Oliveira <garu@cpan.org>
+Brent B. Powers <powers@ml.com>
+Brent Dax <brentdax@cpan.org>
+Brian Callaghan <callagh@itginc.com>
+Brian Carlson <brian.carlson@cpanel.net>
+Brian Childs <brian@rentec.com>
+Brian Clarke <clarke@appliedmeta.com>
+brian d foy <brian.d.foy@gmail.com>
+Brian Fraser <fraserbn@gmail.com>
+Brian Gottreu <gottreu@gmail.com>
+Brian Greenfield <briang@cpan.org>
Brian Grossman
-Brian Harrison <brie@corp.home.net>
-Brian Jepson <bjepson@oreilly.com>
+Brian Harrison <brie@corp.home.net>
+Brian Jepson <bjepson@oreilly.com>
Brian Katzung
-Brian McCauley <nobull@mail.com>
-Brian Phillips <bphillips@cpan.org>
-Brian Reichert <reichert@internet.com>
-Brian S. Cashman <bsc@umich.edu>
-Brian Strand <bstrand@switchmanagement.com>
+Brian McCauley <nobull@mail.com>
+Brian Phillips <bphillips@cpan.org>
+Brian Reichert <reichert@internet.com>
+Brian S. Cashman <bsc@umich.edu>
+Brian Strand <bstrand@switchmanagement.com>
Brooks D Boyd
-Bruce Barnett <barnett@grymoire.crd.ge.com>
-Bruce J. Keeler <bkeelerx@iwa.dp.intel.com>
-Bruce P. Schuck <bruce@aps.org>
-Bud Huff <BAHUFF@us.oracle.com>
-Byron Brummer <byron@omix.com>
-C Aditya <caditya@novell.com>
-Calle Dybedahl <calle@lysator.liu.se>
-Campo Weijerman <rfc822@nl.ibm.com>
-Carl Eklof <CEklof@endeca.com>
-Carl Hayter <hayter@usc.edu>
-Carl M. Fongheiser <cmf@ins.infonet.net>
-Carl Witty <cwitty@newtonlabs.com>
-Cary D. Renzema <caryr@mxim.com>
-Casey R. Tweten <crt@kiski.net>
-Casey West <casey@geeknest.com>
+Bruce Barnett <barnett@grymoire.crd.ge.com>
+Bruce J. Keeler <bkeelerx@iwa.dp.intel.com>
+Bruce P. Schuck <bruce@aps.org>
+Bryan Stenson <bryan@siliconvortex.com>
+Bud Huff <BAHUFF@us.oracle.com>
+Byron Brummer <byron@omix.com>
+C Aditya <caditya@novell.com>
+Calle Dybedahl <calle@lysator.liu.se>
+Campo Weijerman <rfc822@nl.ibm.com>
+Carl Eklof <CEklof@endeca.com>
+Carl Hayter <hayter@usc.edu>
+Carl M. Fongheiser <cmf@ins.infonet.net>
+Carl Witty <cwitty@newtonlabs.com>
+Cary D. Renzema <caryr@mxim.com>
+Casey R. Tweten <crt@kiski.net>
+Casey West <casey@geeknest.com>
Castor Fu
-Chad Granum <chad.granum@dreamhost.com>
-Chaim Frenkel <chaimf@pobox.com>
-Charles Bailey <bailey@newman.upenn.edu>
-Charles F. Randall <crandall@free.click-n-call.com>
-Charles Lane <lane@DUPHY4.Physics.Drexel.Edu>
-Charles Randall <cfriv@yahoo.com>
-Charles Wilson <cwilson@ece.gatech.edu>
-Charlie Gonzalez <itcharlie@gmail.com>
-Chas. Owens <chas.owens@gmail.com>
-Chase Whitener <cwhitener@gmail.com>
+Chad Granum <chad.granum@dreamhost.com>
+Chaim Frenkel <chaimf@pobox.com>
+Charles Bailey <bailey@newman.upenn.edu>
+Charles F. Randall <crandall@free.click-n-call.com>
+Charles Lane <lane@DUPHY4.Physics.Drexel.Edu>
+Charles Randall <cfriv@yahoo.com>
+Charles Wilson <cwilson@ece.gatech.edu>
+Charlie Gonzalez <itcharlie@gmail.com>
+Chas. Owens <chas.owens@gmail.com>
+Chase Whitener <cwhitener@gmail.com>
Chaskiel M Grundman
-Chia-liang Kao <clkao@clkao.org>
-Chip Salzenberg <chip@pobox.com>
-Chip Turner <cturner@redhat.com>
-chocolateboy <chocolateboy@chocolatey.com>
-Chris Ball <chris@cpan.org>
-Chris 'BinGOs' Williams <chris@bingosnet.co.uk>
-Chris Bongaarts <cab@tc.umn.edu>
-Chris Dolan <chris@chrisdolan.net>
-Chris Faylor <cgf@bbc.com>
-Chris Heath <chris@heathens.co.nz>
-Chris Lamb <lamby@debian.org>
-Chris Lightfoot <chris@ex-parrot.com>
-Chris Nandor <pudge@pobox.com>
+Chia-liang Kao <clkao@clkao.org>
+Chip Salzenberg <chip@pobox.com>
+Chip Turner <cturner@redhat.com>
+chocolateboy <chocolateboy@chocolatey.com>
+Chris 'BinGOs' Williams <chris@bingosnet.co.uk>
+Chris Ball <chris@cpan.org>
+Chris Bongaarts <cab@tc.umn.edu>
+Chris Dolan <chris@chrisdolan.net>
+Chris Faylor <cgf@bbc.com>
+Chris Heath <chris@heathens.co.nz>
+Chris Lamb <lamby@debian.org>
+Chris Lightfoot <chris@ex-parrot.com>
+Chris Nandor <pudge@pobox.com>
Chris Pepper
-Chris R. Donnelly <chris.donnelly@vauto.com>
-Chris Travers <chris.travers@gmail.com>
-Chris Tubutis <chris@broadband.att.com>
-Chris Wick <cwick@lmc.com>
-Chris Williams <chrisw@netinfo.com.au>
-Christian Burger <burger@terra.mpikg-teltow.mpg.de>
-Christian Hansen <chansen@cpan.org>
-Christian Kirsch <ck@held.mind.de>
-Christian Millour <cm.perl@abtela.com>
-Christian Winter <bitpoet@linux-config.de>
-Christoph Lamprecht <ch.l.ngre@online.de>
-Christophe Grosjean <christophe.grosjean@gmail.com>
-Christopher Chavez <chrischavez@gmx.us>
-Christopher Chan-Nui <channui@austin.ibm.com>
-Christopher Davis <ckd@loiosh.kei.com>
-Christopher J. Madsen <perl@cjmweb.net>
-chromatic <chromatic@wgz.org>
-Chuck Phillips <perl@cadop.com>
-Chun Bing Ge <gecb@cn.ibm.com>
-Chunhui Teng <cteng@nortel.ca>
-Claes Jacobsson <claes@surfar.nu>
-Clark Cooper <coopercc@netheaven.com>
-Claudio Ramirez <nxadm@cpan.org>
-Clinton A. Pierce <clintp@geeksalad.org>
-Colin Kuskie <ckuskie@cadence.com>
-Colin McMillen <mcmi0073@tc.umn.edu>
-Colin Meyer <cmeyer@helvella.org>
-Colin Newell <colin.newell@gmail.com>
-Colin Watson <colinw@zeus.com>
+Chris R. Donnelly <chris.donnelly@vauto.com>
+Chris Travers <chris.travers@gmail.com>
+Chris Tubutis <chris@broadband.att.com>
+Chris Wick <cwick@lmc.com>
+Chris Williams <chrisw@netinfo.com.au>
+Christian Burger <burger@terra.mpikg-teltow.mpg.de>
+Christian Hansen <chansen@cpan.org>
+Christian Kirsch <ck@held.mind.de>
+Christian Millour <cm.perl@abtela.com>
+Christian Winter <bitpoet@linux-config.de>
+Christoph Lamprecht <ch.l.ngre@online.de>
+Christophe Grosjean <christophe.grosjean@gmail.com>
+Christopher Chan-Nui <channui@austin.ibm.com>
+Christopher Chavez <chrischavez@gmx.us>
+Christopher Davis <ckd@loiosh.kei.com>
+Christopher J. Madsen <perl@cjmweb.net>
+chromatic <chromatic@wgz.org>
+Chuck Phillips <perl@cadop.com>
+Chun Bing Ge <gecb@cn.ibm.com>
+Chunhui Teng <cteng@nortel.ca>
+Claes Jacobsson <claes@surfar.nu>
+Clark Cooper <coopercc@netheaven.com>
+Claudio Ramirez <nxadm@cpan.org>
+Clinton A. Pierce <clintp@geeksalad.org>
+Colin Kuskie <ckuskie@cadence.com>
+Colin McMillen <mcmi0073@tc.umn.edu>
+Colin Meyer <cmeyer@helvella.org>
+Colin Newell <colin.newell@gmail.com>
+Colin Watson <colinw@zeus.com>
Conrad Augustin
-Conrad E. Kimball <cek@tblv021.ca.boeing.com>
-Craig A. Berry <craigberry@mac.com>
-Craig DeForest <zowie@euterpe.boulder.swri.edu>
-Craig Milo Rogers <Rogers@ISI.EDU>
-Curtis Jewell <perl@csjewell.fastmail.us>
-Curtis Poe <cp@onsitetech.com>
-Dabrien 'Dabe' Murphy <dabe@dabe.com>
-Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
-Dale Amon <amon@vnl.com>
-Damian Conway <damian@conway.org>
-Damon Atkins <Damon.Atkins@nabaus.com.au>
-Dan Book <grinnz@grinnz.com>
-Dan Boorstein <dan_boo@bellsouth.net>
-Dan Brook <dbrook@easyspace.com>
-Dan Collins <dcollinsn@gmail.com>
-Dan Dascalescu <bigbang7@gmail.com>
-Dan Dedrick <ddedrick@lexmark.com>
-Dan Hale <danhale@us.ibm.com>
-Dan Jacobson <jidanni@jidanni.org>
-Dan Kogai <dankogai@dan.co.jp>
-Dan Schmidt <dfan@harmonixmusic.com>
-Dan Sugalski <dan@sidhe.org>
-Daniel Berger <djberg86@attbi.com>
-Daniel Chetlin <daniel@chetlin.com>
-Daniel Dragan <bulk88@hotmail.com>
-Daniel Frederick Crisman <daniel@crisman.org>
-Daniel Grisinger <dgris@dimensional.com>
-Daniel Kahn Gillmor <dkg@fifthhorseman.net>
-Daniel Lieberman <daniel@bitpusher.com>
-Daniel Muiño <dmuino@afip.gov.ar>
-Daniel P. Berrange <dan@berrange.com>
-Daniel Perrett <perrettdl@googlemail.com>
-Daniel S. Lewart <lewart@uiuc.edu>
-Daniel Yacob <perl@geez.org>
-Danny R. Faught <faught@mailhost.rsn.hp.com>
-Danny Sadinoff <danny-cpan@sadinoff.com>
-Darin McBride <dmcbride@cpan.org>
-Darrell Kindred <dkindred+@cmu.edu>
-Darrell Schiebel <drs@nrao.edu>
-Darren/Torin/Who Ever... <torin@daft.com>
+Conrad E. Kimball <cek@tblv021.ca.boeing.com>
+Craig A. Berry <craigberry@mac.com>
+Craig DeForest <zowie@euterpe.boulder.swri.edu>
+Craig Milo Rogers <Rogers@ISI.EDU>
+Curtis Jewell <perl@csjewell.fastmail.us>
+Curtis Poe <cp@onsitetech.com>
+Dabrien 'Dabe' Murphy <dabe@dabe.com>
+Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
+Dale Amon <amon@vnl.com>
+Damian Conway <damian@conway.org>
+Damon Atkins <Damon.Atkins@nabaus.com.au>
+Dan Book <grinnz@grinnz.com>
+Dan Boorstein <dan_boo@bellsouth.net>
+Dan Brook <dbrook@easyspace.com>
+Dan Collins <dcollinsn@gmail.com>
+Dan Dascalescu <bigbang7@gmail.com>
+Dan Dedrick <ddedrick@lexmark.com>
+Dan Hale <danhale@us.ibm.com>
+Dan Jacobson <jidanni@jidanni.org>
+Dan Kogai <dankogai@dan.co.jp>
+Dan Schmidt <dfan@harmonixmusic.com>
+Dan Sugalski <dan@sidhe.org>
+Daniel Berger <djberg86@attbi.com>
+Daniel Chetlin <daniel@chetlin.com>
+Daniel Dragan <bulk88@hotmail.com>
+Daniel Frederick Crisman <daniel@crisman.org>
+Daniel Grisinger <dgris@dimensional.com>
+Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Daniel Lieberman <daniel@bitpusher.com>
+Daniel Muiño <dmuino@afip.gov.ar>
+Daniel P. Berrange <dan@berrange.com>
+Daniel Perrett <perrettdl@googlemail.com>
+Daniel S. Lewart <lewart@uiuc.edu>
+Daniel Yacob <perl@geez.org>
+Danny R. Faught <faught@mailhost.rsn.hp.com>
+Danny Sadinoff <danny-cpan@sadinoff.com>
+Darin McBride <dmcbride@cpan.org>
+Darrell Kindred <dkindred+@cmu.edu>
+Darrell Schiebel <drs@nrao.edu>
+Darren/Torin/Who Ever... <torin@daft.com>
Dave Bianchi
-Dave Cross <dave@mag-sol.com>
-Dave Hartnoll <Dave_Hartnoll@3b2.com>
-Dave Liney <dave.liney@gbr.conoco.com>
-Dave Nelson <David.Nelson@bellcow.com>
+Dave Cross <dave@mag-sol.com>
+Dave Hartnoll <Dave_Hartnoll@3b2.com>
+Dave Liney <dave.liney@gbr.conoco.com>
+Dave Nelson <David.Nelson@bellcow.com>
Dave Paris
-Dave Rolsky <autarch@urth.org>
-Dave Schweisguth <dcs@neutron.chem.yale.edu>
-Dave Shariff Yadallee <doctor@doctor.nl2k.ab.ca>
-David Billinghurst <David.Billinghurst@riotinto.com.au>
-David Caldwell <david@porkrind.org>
+Dave Rolsky <autarch@urth.org>
+Dave Schweisguth <dcs@neutron.chem.yale.edu>
+Dave Shariff Yadallee <doctor@doctor.nl2k.ab.ca>
+David Billinghurst <David.Billinghurst@riotinto.com.au>
+David Caldwell <david@porkrind.org>
David Campbell
-David Cannings <lists@edeca.net>
-David Cantrell <david@cantrell.org.uk>
+David Cannings <lists@edeca.net>
+David Cantrell <david@cantrell.org.uk>
David Couture
-David D. Kilzer <ddkilzer@lubricants-oil.com>
-David Denholm <denholm@conmat.phys.soton.ac.uk>
-David Dyck <david.dyck@fluke.com>
-David F. Haertig <dfh@dwroll.lucent.com>
-David Favor <david@davidfavor.com>
-David Feldman <david.feldman@tudor.com>
-David Fifield <david@bamsoftware.com>
+David D. Kilzer <ddkilzer@lubricants-oil.com>
+David Denholm <denholm@conmat.phys.soton.ac.uk>
+David Dyck <david.dyck@fluke.com>
+David F. Haertig <dfh@dwroll.lucent.com>
+David Favor <david@davidfavor.com>
+David Feldman <david.feldman@tudor.com>
+David Fifield <david@bamsoftware.com>
David Filo
-David Formosa <dformosa@dformosa.zeta.org.au>
-David Gay <dgay@acm.org>
-David Glasser <me@davidglasser.net>
-David Golden <dagolden@cpan.org>
-David H. Adler <dha@panix.com>
-David H. Gutteridge <dhgutteridge@sympatico.ca>
-David Hammen <hammen@gothamcity.jsc.nasa.gov>
-David J. Fiander <davidf@mks.com>
-David Kerry <davidk@tor.securecomputing.com>
-David Landgren <david@landgren.net>
-David Leadbeater <dgl@dgl.cx>
-David M. Syzdek <david@syzdek.net>
-David Manura <dm.list@math2.org>
-David McLean <davem@icc.gsfc.nasa.gov>
-David Mitchell <davem@iabyn.nospamdeletethisbit.com>
-David Muir Sharnoff <muir@idiom.com>
-David Nicol <whatever@davidnicol.com>
-David R. Favor <dfavor@austin.ibm.com>
-David Sparks <daves@ca.sophos.com>
-David Starks-Browning <dstarks@rc.tudelft.nl>
-David Steinbrunner <dsteinbrunner@pobox.com>
-David Sundstrom <sunds@asictest.sc.ti.com>
-David Wheeler <david@justatheory.com>
-Davin Milun <milun@cs.Buffalo.EDU>
-Dean Roehrich <roehrich@cray.com>
-Dee Newcum <perl.org@paperlined.org>
-deekoo <deekoo@tentacle.net>
-Dennis Kaarsemaker <dennis@booking.com>
-Dennis Marsa <dennism@cyrix.com>
-Devin Heitmueller <devin.heitmueller@gmail.com>
-DH <crazyinsomniac@yahoo.com>
-Diab Jerius <dj@head-cfa.harvard.edu>
-dLux <dlux@spam.sch.bme.hu>
-Dmitri Tikhonov <dmitri@cpan.org>
-Dmitry Karasik <dk@tetsuo.karasik.eu.org>
-Dmitry Ulanov <zprogd@gmail.com>
-Dominic Dunlop <domo@computer.org>
-Dominic Hargreaves <dom@earth.li>
-Dominique Dumont <Dominique_Dumont@grenoble.hp.com>
+David Formosa <dformosa@dformosa.zeta.org.au>
+David Gay <dgay@acm.org>
+David Glasser <me@davidglasser.net>
+David Golden <dagolden@cpan.org>
+David H. Adler <dha@panix.com>
+David H. Gutteridge <dhgutteridge@sympatico.ca>
+David Hammen <hammen@gothamcity.jsc.nasa.gov>
+David J. Fiander <davidf@mks.com>
+David Kerry <davidk@tor.securecomputing.com>
+David Landgren <david@landgren.net>
+David Leadbeater <dgl@dgl.cx>
+David M. Syzdek <david@syzdek.net>
+David Manura <dm.list@math2.org>
+David McLean <davem@icc.gsfc.nasa.gov>
+David Mitchell <davem@iabyn.nospamdeletethisbit.com>
+David Muir Sharnoff <muir@idiom.com>
+David Nicol <whatever@davidnicol.com>
+David R. Favor <dfavor@austin.ibm.com>
+David Sparks <daves@ca.sophos.com>
+David Starks-Browning <dstarks@rc.tudelft.nl>
+David Steinbrunner <dsteinbrunner@pobox.com>
+David Sundstrom <sunds@asictest.sc.ti.com>
+David Wheeler <david@justatheory.com>
+Davin Milun <milun@cs.Buffalo.EDU>
+Dean Roehrich <roehrich@cray.com>
+Dee Newcum <perl.org@paperlined.org>
+deekoo <deekoo@tentacle.net>
+Dennis Kaarsemaker <dennis@booking.com>
+Dennis Marsa <dennism@cyrix.com>
+Devin Heitmueller <devin.heitmueller@gmail.com>
+DH <crazyinsomniac@yahoo.com>
+Diab Jerius <dj@head-cfa.harvard.edu>
+dLux <dlux@spam.sch.bme.hu>
+Dmitri Tikhonov <dmitri@cpan.org>
+Dmitry Karasik <dk@tetsuo.karasik.eu.org>
+Dmitry Ulanov <zprogd@gmail.com>
+Dominic Dunlop <domo@computer.org>
+Dominic Hargreaves <dom@earth.li>
+Dominique Dumont <Dominique_Dumont@grenoble.hp.com>
Dominique Quatravaux
-Doug Bell <madcityzen@gmail.com>
-Doug Campbell <soup@ampersand.com>
-Doug MacEachern <dougm@covalent.net>
-Douglas Christopher Wilson <doug@somethingdoug.com>
-Douglas E. Wegscheid <dwegscheid@qtm.net>
-Douglas Lankshear <doug@lankshear.net>
-Douglas Wilson <dougw@cpan.org>
-Dov Grobgeld <dov@Orbotech.Co.IL>
-Dr.Ruud <rvtol+news@isolution.nl>
-Drago Goricanec <drago@raptor.otsd.ts.fujitsu.co.jp>
-Drew Stephens <drewgstephens@gmail.com>
-Duke Leto <jonathan@leto.net>
-Duncan Findlay <duncf@debian.org>
-E. Choroba <choroba@cpan.org>
-Ed Avis <eda@waniasset.com>
-Ed J <etj@cpan.org>
-Ed Mooring <mooring@Lynx.COM>
-Ed Santiago <esm@pobox.com>
-Eddy Tan <eddy.net@gmail.com>
-Edgar Bering <trizor@gmail.com>
+Doug Bell <madcityzen@gmail.com>
+Doug Campbell <soup@ampersand.com>
+Doug MacEachern <dougm@covalent.net>
+Douglas Christopher Wilson <doug@somethingdoug.com>
+Douglas E. Wegscheid <dwegscheid@qtm.net>
+Douglas Lankshear <doug@lankshear.net>
+Douglas Wilson <dougw@cpan.org>
+Dov Grobgeld <dov@Orbotech.Co.IL>
+Dr.Ruud <rvtol+news@isolution.nl>
+Drago Goricanec <drago@raptor.otsd.ts.fujitsu.co.jp>
+Drew Stephens <drewgstephens@gmail.com>
+Duke Leto <jonathan@leto.net>
+Duncan Findlay <duncf@debian.org>
+E. Choroba <choroba@cpan.org>
+Ed Avis <eda@waniasset.com>
+Ed J <etj@cpan.org>
+Ed Mooring <mooring@Lynx.COM>
+Ed Santiago <esm@pobox.com>
+Eddy Tan <eddy.net@gmail.com>
+Edgar Bering <trizor@gmail.com>
Edmund Bacon
-Edward Avis <ed@membled.com>
-Edward Moy <emoy@apple.com>
-Edward Peschko <edwardp@excitehome.net>
-Elaine -HFB- Ashton <elaine@chaos.wustl.edu>
-Elizabeth Mattijsen <liz@dijkmat.nl>
-Enrico Sorcinelli <bepi@perl.it>
+Edward Avis <ed@membled.com>
+Edward Moy <emoy@apple.com>
+Edward Peschko <edwardp@excitehome.net>
+Elaine -HFB- Ashton <elaine@chaos.wustl.edu>
+Elizabeth Mattijsen <liz@dijkmat.nl>
+Enrico Sorcinelli <bepi@perl.it>
Eric Amick
-Eric Arnold <eric.arnold@sun.com>
-Eric Bartley <bartley@icd.cc.purdue.edu>
-Eric Brine <ikegami@adaelis.com>
-Eric E. Coe <Eric.Coe@oracle.com>
-Eric Fifer <egf7@columbia.edu>
-Eric Herman <eric@freesa.org>
+Eric Arnold <eric.arnold@sun.com>
+Eric Bartley <bartley@icd.cc.purdue.edu>
+Eric Brine <ikegami@adaelis.com>
+Eric E. Coe <Eric.Coe@oracle.com>
+Eric Fifer <egf7@columbia.edu>
+Eric Herman <eric@freesa.org>
Eric Melville
-Eric Promislow <ericp@ActiveState.com>
+Eric Promislow <ericp@ActiveState.com>
Erich Rickheit
-Eryq <eryq@zeegee.com>
-Etienne Grossman <etienne@isr.isr.ist.utl.pt>
-Eugen Konkov <kes-kes@yandex.ru>
-Eugene Alterman <Eugene.Alterman@bremer-inc.com>
-Evan Miller <eam@frap.net>
-Evan Zacks <zackse@cpan.org>
-Fabien Tassin <tassin@eerie.fr>
-Father Chrysostomos <sprout@cpan.org>
-Felipe Gasper <felipe@felipegasper.com>
-Felix Gallo <fgallo@etoys.com>
-Fergal Daly <fergal@esatclear.ie>
-Fingle Nark <finglenark@gmail.com>
+Eryq <eryq@zeegee.com>
+Etienne Grossman <etienne@isr.isr.ist.utl.pt>
+Eugen Konkov <kes-kes@yandex.ru>
+Eugene Alterman <Eugene.Alterman@bremer-inc.com>
+Evan Miller <eam@frap.net>
+Evan Zacks <zackse@cpan.org>
+Fabien Tassin <tassin@eerie.fr>
+Father Chrysostomos <sprout@cpan.org>
+Felipe Gasper <felipe@felipegasper.com>
+Felix Gallo <fgallo@etoys.com>
+Fergal Daly <fergal@esatclear.ie>
+Fingle Nark <finglenark@gmail.com>
Florent Guillaume
-Florian Ragwitz <rafl@debian.org>
-François Désarménien <desar@club-internet.fr>
-François Perrad <francois.perrad@gadz.org>
+Florian Ragwitz <rafl@debian.org>
+Florian Weimer <fweimer@redhat.com>
Frank Crawford
-Frank Ridderbusch <Frank.Ridderbusch@pdb.siemens.de>
-Frank Tobin <ftobin@uiuc.edu>
-Frank Wiegand <frank.wiegand@gmail.com>
-Franklin Chen <chen@adi.com>
-Franz Fasching <perldev@drfasching.com>
-Frederic Briere <fbriere@fbriere.net>
-Fréderic Chauveau <fmc@pasteur.fr>
-Fyodor Krasnov <fyodor@aha.ru>
-G. Del Merritt <del@intranetics.com>
+Frank Ridderbusch <Frank.Ridderbusch@pdb.siemens.de>
+Frank Tobin <ftobin@uiuc.edu>
+Frank Wiegand <frank.wiegand@gmail.com>
+Franklin Chen <chen@adi.com>
+Franz Fasching <perldev@drfasching.com>
+François Désarménien <desar@club-internet.fr>
+François Perrad <francois.perrad@gadz.org>
+Frederic Briere <fbriere@fbriere.net>
+Fréderic Chauveau <fmc@pasteur.fr>
+Fyodor Krasnov <fyodor@aha.ru>
+G. Del Merritt <del@intranetics.com>
Gabe Schaffer
-Gabor Szabo <szabgab@gmail.com>
-Garry T. Williams <garry@zvolve.com>
-Gary Clark <GaryC@mail.jeld-wen.com>
+Gabor Szabo <szabgab@gmail.com>
+Garry T. Williams <garry@zvolve.com>
+Gary Clark <GaryC@mail.jeld-wen.com>
Gary L. Armstrong
-Gary Ng <71564.1743@compuserve.com>
-Gavin Shelley <columbusmonkey@me.com>
-Gene Sullivan <genesullivan50@yahoo.com>
-Geoffrey F. Green <geoff-public@stuebegreen.com>
-Geoffrey T. Dairiki <dairiki@dairiki.org>
-Georg Schwarz <geos@epost.de>
-George Greer <perl@greerga.m-l.org>
-George Hartzell <georgewh@gene.com>
-George Necula <necula@eecs.berkeley.edu>
-Geraint A Edwards <gedge@serf.org>
-Gerard Goossen <gerard@ggoossen.net>
-Gerben Wierda <G.C.Th.Wierda@AWT.nl>
-Gerd Knops <gerti@BITart.com>
-Gerrit P. Haase <gp@familiehaase.de>
-Gideon Israel Dsouza <gideon@cpan.org>
-Giles Lean <giles@nemeton.com.au>
-Gisle Aas <gisle@aas.no>
-Glenn D. Golden <gdg@zplane.com>
-Glenn Linderman <perl@nevcal.com>
-Gordon J. Miller <gjm@cray.com>
-Gordon Lack <gml4410@ggr.co.uk>
-Goro Fuji <gfuji@cpan.org>
-Grace Lee <grace@hal.com>
-Graham Barr <gbarr@pobox.com>
-Graham Knop <haarg@haarg.org>
-Graham TerMarsch <graham@howlingfrog.com>
-Grant McLean <grantm@cpan.org>
-Greg Bacon <gbacon@itsc.uah.edu>
-Greg Chapman <glc@well.com>
+Gary Ng <71564.1743@compuserve.com>
+Gavin Shelley <columbusmonkey@me.com>
+Gene Sullivan <genesullivan50@yahoo.com>
+Geoffrey F. Green <geoff-public@stuebegreen.com>
+Geoffrey T. Dairiki <dairiki@dairiki.org>
+Georg Schwarz <geos@epost.de>
+George Greer <perl@greerga.m-l.org>
+George Hartzell <georgewh@gene.com>
+George Necula <necula@eecs.berkeley.edu>
+Geraint A Edwards <gedge@serf.org>
+Gerard Goossen <gerard@ggoossen.net>
+Gerben Wierda <G.C.Th.Wierda@AWT.nl>
+Gerd Knops <gerti@BITart.com>
+Gerrit P. Haase <gp@familiehaase.de>
+Gideon Israel Dsouza <gideon@cpan.org>
+Giles Lean <giles@nemeton.com.au>
+Gisle Aas <gisle@aas.no>
+Glenn D. Golden <gdg@zplane.com>
+Glenn Linderman <perl@nevcal.com>
+Gordon J. Miller <gjm@cray.com>
+Gordon Lack <gml4410@ggr.co.uk>
+Goro Fuji <gfuji@cpan.org>
+Grace Lee <grace@hal.com>
+Graham Barr <gbarr@pobox.com>
+Graham Knop <haarg@haarg.org>
+Graham Ollis <plicease@cpan.org>
+Graham TerMarsch <graham@howlingfrog.com>
+Grant McLean <grantm@cpan.org>
+Greg Bacon <gbacon@itsc.uah.edu>
+Greg Chapman <glc@well.com>
Greg Earle
Greg Kuperberg
-Greg Matheson <lang@ms.chinmin.edu.tw>
-Greg Seibert <seibert@Lynx.COM>
-Greg Ward <gward@ase.com>
-Gregor Chrupala <gregor.chrupala@star-group.net>
-gregor herrmann <gregoa@debian.org>
-Gregory Martin Pfeil <pfeilgm@technomadic.org>
-Guenter Schmidt <gsc@bruker.de>
-Guido Flohr <guido@imperia.net>
-Guruprasad S <SGURUPRASAD@novell.com>
-Gurusamy Sarathy <gsar@cpan.org>
+Greg Matheson <lang@ms.chinmin.edu.tw>
+Greg Seibert <seibert@Lynx.COM>
+Greg Ward <gward@ase.com>
+Gregor Chrupala <gregor.chrupala@star-group.net>
+gregor herrmann <gregoa@debian.org>
+Gregory Martin Pfeil <pfeilgm@technomadic.org>
+Guenter Schmidt <gsc@bruker.de>
+Guido Flohr <guido@imperia.net>
+Guruprasad S <SGURUPRASAD@novell.com>
+Gurusamy Sarathy <gsar@cpan.org>
Gustaf Neumann
-Guy Decoux <decoux@moulon.inra.fr>
-Gwyn Judd <b.judd@xtra.co.nz>
-H.J. Lu <hjl@nynexst.com>
-H.Merijn Brand <h.m.brand@xs4all.nl>
-Hal Morris <hom00@utsglobal.com>
-Hal Pomeranz <pomeranz@netcom.com>
-Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
-Hannu Napari <Hannu.Napari@hut.fi>
-Hans de Graaff <J.J.deGraaff@twi.tudelft.nl>
-Hans Dieter Pearcey <hdp@pobox.com>
-Hans Ginzel <hans@kolej.mff.cuni.cz>
-Hans Mulder <hansmu@xs4all.nl>
-Hans Ranke <Hans.Ranke@ei.tum.de>
-Harald Jörg <Harald.Joerg@arcor.de>
-Harmen <harm@dds.nl>
-Harmon S. Nine <hnine@netarx.com>
-Harri Pasanen <harri.pasanen@trema.com>
-Harry Edmon <harry@atmos.washington.edu>
-Hauke D <haukex@zero-g.net>
-Heiko Eissfeldt <heiko.eissfeldt@hexco.de>
-Helmut Jarausch <jarausch@numa1.igpm.rwth-aachen.de>
-Henrik Tougaard <ht.000@foa.dk>
-Herbert Breunung <lichtkind@cpan.org>
-Hernan Perez Masci <hmasci@uolsinectis.com.ar>
-Hershel Walters <walters@smd4d.wes.army.mil>
-Hio <hio@hio.jp>
-Hiroo Hayashi <hiroo.hayashi@computer.org>
-Hojung Youn <amoc.yn@gmail.com>
+Guy Decoux <decoux@moulon.inra.fr>
+Gwyn Judd <b.judd@xtra.co.nz>
+H.J. Lu <hjl@nynexst.com>
+H.Merijn Brand <h.m.brand@xs4all.nl>
+Hal Morris <hom00@utsglobal.com>
+Hal Pomeranz <pomeranz@netcom.com>
+Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
+Hannu Napari <Hannu.Napari@hut.fi>
+Hans de Graaff <J.J.deGraaff@twi.tudelft.nl>
+Hans Dieter Pearcey <hdp@pobox.com>
+Hans Ginzel <hans@kolej.mff.cuni.cz>
+Hans Mulder <hansmu@xs4all.nl>
+Hans Ranke <Hans.Ranke@ei.tum.de>
+Harald Jörg <Harald.Joerg@arcor.de>
+Harmen <harm@dds.nl>
+Harmon S. Nine <hnine@netarx.com>
+Harri Pasanen <harri.pasanen@trema.com>
+Harry Edmon <harry@atmos.washington.edu>
+Hauke D <haukex@zero-g.net>
+Heiko Eissfeldt <heiko.eissfeldt@hexco.de>
+Helmut Jarausch <jarausch@numa1.igpm.rwth-aachen.de>
+Henrik Tougaard <ht.000@foa.dk>
+Herbert Breunung <lichtkind@cpan.org>
+Hernan Perez Masci <hmasci@uolsinectis.com.ar>
+Hershel Walters <walters@smd4d.wes.army.mil>
+Hiroo Hayashi <hiroo.hayashi@computer.org>
+Hojung Youn <amoc.yn@gmail.com>
Holger Bechtold
-Hongwen Qiu <qiuhongwen@gmail.com>
-Horst von Brand <vonbrand@sleipnir.valparaiso.cl>
+Hongwen Qiu <qiuhongwen@gmail.com>
+Horst von Brand <vonbrand@sleipnir.valparaiso.cl>
Hrunting Jonhson
-Hubert Feyrer <hubert.feyrer@informatik.fh-regensburg.de>
-Hugo van der Sanden <hv@crypt.org>
-Hunter Kelly <retnuh@zule.pixar.com>
-Huw Rogers <count0@gremlin.straylight.co.jp>
+Hubert Feyrer <hubert.feyrer@informatik.fh-regensburg.de>
+Hugo van der Sanden <hv@crypt.org>
+Hunter Kelly <retnuh@zule.pixar.com>
+Huw Rogers <count0@gremlin.straylight.co.jp>
+Håkon Hægland <hakon.hagland@gmail.com>
Iain Truskett
-Ian Goodacre <ian.goodacre@xtra.co.nz>
-Ian Maloney <ian.malonet@ubs.com>
-Ian Phillipps <Ian.Phillipps@iname.com>
-Ignasi Roca Carrió <ignasi.roca@fujitsu-siemens.com>
-Igor Sutton <izut@cpan.org>
-Igor Zaytsev <igor.zaytsev@gmail.com>
-Ilmari Karonen <iltzu@sci.fi>
-Ilya Martynov <ilya@martynov.org>
-Ilya N. Golubev <gin@mo.msk.ru>
-Ilya Sandler <Ilya.Sandler@etak.com>
-Ilya Zakharevich <ilya@math.berkeley.edu>
-Inaba Hiroto <inaba@st.rim.or.jp>
-Indy Singh <indy@nusphere.com>
-Ingo Weinhold <ingo_weinhold@gmx.de>
-Ingy döt Net <ingy@ttul.org>
-insecure <insecure@mail.od.ua>
-Irving Reid <irving@tor.securecomputing.com>
-Ivan Kurmanov <kurmanov@openlib.org>
-Ivan Pozdeev <vano@mail.mipt.ru>
-Ivan Tubert-Brohman <itub@cpan.org>
-J. David Blackstone <jdb@dfwnet.sbms.sbc.com>
-J. Nick Koston <nick@cpanel.net>
-J. van Krieken <John.van.Krieken@ATComputing.nl>
-Jacinta Richardson <jarich@perltraining.com.au>
-Jack Shirazi <JackS@GemStone.com>
-Jacques Germishuys <jacquesg@striata.com>
-Jacqui Caren <Jacqui.Caren@ig.co.uk>
-Jake Hamby <jehamby@lightside.com>
-Jakub Wilk <jwilk@jwilk.net>
-James <james@rf.net>
-James A. Duncan <jduncan@fotango.com>
-James Clarke <jrtc27@jrtc27.com>
-James E Keenan <jkeenan@cpan.org>
-James FitzGibbon <james@ican.net>
-James Jurach <muaddib@erf.net>
-James Mastros <james@mastros.biz>
-James McCoy <vega.james@gmail.com>
-James Raspass <jraspass@gmail.com>
+Ian Goodacre <ian.goodacre@xtra.co.nz>
+Ian Maloney <ian.malonet@ubs.com>
+Ian Phillipps <Ian.Phillipps@iname.com>
+Ichinose Shogo <shogo82148@gmail.com>
+Ignasi Roca Carrió <ignasi.roca@fujitsu-siemens.com>
+Igor Sutton <izut@cpan.org>
+Igor Zaytsev <igor.zaytsev@gmail.com>
+Ilmari Karonen <iltzu@sci.fi>
+Ilya Martynov <ilya@martynov.org>
+Ilya N. Golubev <gin@mo.msk.ru>
+Ilya Sandler <Ilya.Sandler@etak.com>
+Ilya Zakharevich <ilya@math.berkeley.edu>
+Inaba Hiroto <inaba@st.rim.or.jp>
+Indy Singh <indy@nusphere.com>
+Ingo Weinhold <ingo_weinhold@gmx.de>
+Ingy döt Net <ingy@ttul.org>
+insecure <insecure@mail.od.ua>
+Irving Reid <irving@tor.securecomputing.com>
+Ivan Kurmanov <kurmanov@openlib.org>
+Ivan Pozdeev <vano@mail.mipt.ru>
+Ivan Tubert-Brohman <itub@cpan.org>
+J. David Blackstone <jdb@dfwnet.sbms.sbc.com>
+J. Nick Koston <nick@cpanel.net>
+J. van Krieken <John.van.Krieken@ATComputing.nl>
+Jacinta Richardson <jarich@perltraining.com.au>
+Jack Shirazi <JackS@GemStone.com>
+Jacques Germishuys <jacquesg@striata.com>
+Jacqui Caren <Jacqui.Caren@ig.co.uk>
+Jake Hamby <jehamby@lightside.com>
+Jakub Wilk <jwilk@jwilk.net>
+James <james@rf.net>
+James A. Duncan <jduncan@fotango.com>
+James Clarke <jrtc27@jrtc27.com>
+James E Keenan <jkeenan@cpan.org>
+James FitzGibbon <james@ican.net>
+James Jurach <muaddib@erf.net>
+James Mastros <james@mastros.biz>
+James McCoy <vega.james@gmail.com>
+James Raspass <jraspass@gmail.com>
Jamshid Afshar
-Jan D. <jan.djarv@mbox200.swipnet.se>
-Jan Dubois <jan@jandubois.com>
-Jan Pazdziora <adelton@fi.muni.cz>
-Jan Starzynski <jan@planet.de>
-Jan-Erik Karlsson <trg@privat.utfors.se>
-Jan-Pieter Cornet <johnpc@xs4all.nl>
-Jared Rhine <jared@organic.com>
-Jari Aalto <jari.aalto@poboxes.com>
-Jarkko Hietaniemi <jhi@iki.fi>
-Jasmine Ahuja <jasmine.ahuja11@gmail.com>
-Jasmine Ngan <jasmine.ngan@outlook.com>
-Jason A. Smith <smithj4@rpi.edu>
-Jason E. Stewart <jason@openinformatics.com>
+Jan D. <jan.djarv@mbox200.swipnet.se>
+Jan Dubois <jan@jandubois.com>
+Jan Pazdziora <adelton@fi.muni.cz>
+Jan Starzynski <jan@planet.de>
+Jan-Erik Karlsson <trg@privat.utfors.se>
+Jan-Pieter Cornet <johnpc@xs4all.nl>
+Jared Rhine <jared@organic.com>
+Jari Aalto <jari.aalto@poboxes.com>
+Jarkko Hietaniemi <jhi@iki.fi>
+Jasmine Ahuja <jasmine.ahuja11@gmail.com>
+Jasmine Ngan <jasmine.ngan@outlook.com>
+Jason A. Smith <smithj4@rpi.edu>
+Jason E. Stewart <jason@openinformatics.com>
+Jason McIntosh <jmac@jmac.org>
Jason Shirk
-Jason Stewart <jasons@cs.unm.edu>
-Jason Varsoke <jjv@caesun10.msd.ray.com>
-Jay Hannah <jhannah@mutationgrid.com>
-Jay Rogers <jay@rgrs.com>
-JD Laub <jdl@access-health.com>
+Jason Stewart <jasons@cs.unm.edu>
+Jason Varsoke <jjv@caesun10.msd.ray.com>
+Jay Hannah <jhannah@mutationgrid.com>
+Jay Rogers <jay@rgrs.com>
+JD Laub <jdl@access-health.com>
Jeff Bouis
-Jeff McDougal <jmcdo@cris.com>
-Jeff Okamoto <okamoto@corp.hp.com>
-Jeff Pinyan <japhy@pobox.com>
-Jeff Siegal <jbs@eddie.mit.edu>
-Jeff Urlwin <jurlwin@access.digex.net>
-Jeffrey Friedl <jfriedl@regex.info>
-Jeffrey S. Haemer <jsh@woodcock.boulder.qms.com>
-Jens Hamisch <jens@Strawberry.COM>
-Jens Stavnstrup <js@ddre.dk>
-Jens T. Berger Thielemann <jensthi@ifi.uio.no>
-Jens Thomsen <jens@fiend.cis.com>
-Jens-Uwe Mager <jum@helios.de>
-Jeremy D. Zawodny <jeremy@zawodny.com>
-Jeremy H. Brown <jhbrown@ai.mit.edu>
-Jeremy Madea <jmadea@inktomi.com>
-Jerome Abela <abela@hsc.fr>
-Jerrad Pierce <belg4mit@MIT.EDU>
-Jerry D. Hedden <jdhedden@cpan.org>
-Jess Robinson <castaway@desert-island.me.uk>
-Jesse Glick <jesse@sig.bsh.com>
-Jesse Luehrs <doy@tozt.net>
-Jesse Vincent <jesse@fsck.com>
-Jesús Quiroga <jquiroga@pobox.com>
-Jilles Tjoelker <jilles@stack.nl>
-Jim Anderson <jander@ml.com>
-Jim Avera <avera@hal.com>
+Jeff McDougal <jmcdo@cris.com>
+Jeff Okamoto <okamoto@corp.hp.com>
+Jeff Pinyan <japhy@pobox.com>
+Jeff Siegal <jbs@eddie.mit.edu>
+Jeff Urlwin <jurlwin@access.digex.net>
+Jeffrey Friedl <jfriedl@regex.info>
+Jeffrey S. Haemer <jsh@woodcock.boulder.qms.com>
+Jens Hamisch <jens@Strawberry.COM>
+Jens Stavnstrup <js@ddre.dk>
+Jens T. Berger Thielemann <jensthi@ifi.uio.no>
+Jens Thomsen <jens@fiend.cis.com>
+Jens-Uwe Mager <jum@helios.de>
+Jeremy D. Zawodny <jeremy@zawodny.com>
+Jeremy H. Brown <jhbrown@ai.mit.edu>
+Jeremy Madea <jmadea@inktomi.com>
+Jerome Abela <abela@hsc.fr>
+Jerome Duval <jerome.duval@gmail.com>
+Jerrad Pierce <belg4mit@MIT.EDU>
+Jerry D. Hedden <jdhedden@cpan.org>
+Jess Robinson <castaway@desert-island.me.uk>
+Jesse Glick <jesse@sig.bsh.com>
+Jesse Luehrs <doy@tozt.net>
+Jesse Vincent <jesse@fsck.com>
+Jesús Quiroga <jquiroga@pobox.com>
+Jilles Tjoelker <jilles@stack.nl>
+Jim Anderson <jander@ml.com>
+Jim Avera <avera@hal.com>
Jim Balter
-Jim Cromie <jcromie@cpan.org>
-Jim Meyering <meyering@asic.sc.ti.com>
-Jim Miner <jfm@winternet.com>
+Jim Cromie <jcromie@cpan.org>
+Jim Meyering <meyering@asic.sc.ti.com>
+Jim Miner <jfm@winternet.com>
Jim Richardson
-Jim Schneider <james.schneider@db.com>
-Jirka Hruška <jirka@fud.cz>
+Jim Schneider <james.schneider@db.com>
+Jirka Hruška <jirka@fud.cz>
Joachim Huober
-Joaquin Ferrero <explorer@joaquinferrero.com>
-Jochen Wiedmann <joe@ispsoft.de>
-Jody Belka <dev-perl@pimb.org>
-Joe Buehler <jbuehler@hekimian.com>
-Joe McMahon <mcmahon@ibiblio.org>
-Joe Orton <jorton@redhat.com>
-Joe Schaefer <joe+perl@sunstarsys.com>
-Joe Smith <jsmith@inwap.com>
-Joel Berger <joel.a.berger@gmail.com>
-Joel Rosi-Schwartz <j.schwartz@agonet.it>
-Joerg Porath <Joerg.Porath@informatik.tu-chemnitz.de>
+Joaquin Ferrero <explorer@joaquinferrero.com>
+Jochen Wiedmann <joe@ispsoft.de>
+Jody Belka <dev-perl@pimb.org>
+Joe Buehler <jbuehler@hekimian.com>
+Joe McMahon <mcmahon@ibiblio.org>
+Joe Orton <jorton@redhat.com>
+Joe Schaefer <joe+perl@sunstarsys.com>
+Joe Smith <jsmith@inwap.com>
+Joel Berger <joel.a.berger@gmail.com>
+Joel Rosi-Schwartz <j.schwartz@agonet.it>
+Joerg Porath <Joerg.Porath@informatik.tu-chemnitz.de>
Joergen Haegg
Johan Holtman
-Johan Vromans <jvromans@squirrel.nl>
-Johann Klasek <jk@auto.tuwien.ac.at>
-Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.com>
-Johannes Plunien <plu@pqpq.de>
-John Bley <jbb6@acpub.duke.edu>
-John Borwick <jhborwic@unity.ncsu.edu>
-John Cerney <j-cerney1@ti.com>
-John D Groenveld <groenvel@cse.psu.edu>
-John E. Malmberg <wb8tyw@qsl.net>
-John Gardiner Myers <jgmyers@proofpoint.com>
-John Goodyear <johngood@us.ibm.com>
-John Hasstedt <John.Hasstedt@sunysb.edu>
-John Hawkinson <jhawk@mit.edu>
-John Heidemann <johnh@isi.edu>
-John Holdsworth <coldwave@bigfoot.com>
-John Hughes <john@AtlanTech.COM>
-John Kristian <jmk2001@engineer.com>
-John L. Allen <allen@grumman.com>
-John Lightsey <jd@cpanel.net>
-John Macdonald <jmm@revenge.elegant.com>
-John Malmberg <wb8tyw@gmail.com>
-John Nolan <jpnolan@Op.Net>
-John P. Linderman <jpl.jpl@gmail.com>
-John Peacock <jpeacock@messagesystems.com>
-John Pfuntner <pfuntner@vnet.ibm.com>
-John Poltorak <jp@eyup.org>
-John Q. Linux <jql@accessone.com>
-John Redford <jmr@whirlwind.fmr.com>
+Johan Vromans <jvromans@squirrel.nl>
+Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.com>
+Johann Klasek <jk@auto.tuwien.ac.at>
+Johannes Plunien <plu@pqpq.de>
+John Bley <jbb6@acpub.duke.edu>
+John Borwick <jhborwic@unity.ncsu.edu>
+John Cerney <j-cerney1@ti.com>
+John D Groenveld <groenvel@cse.psu.edu>
+John E. Malmberg <wb8tyw@qsl.net>
+John Gardiner Myers <jgmyers@proofpoint.com>
+John Goodyear <johngood@us.ibm.com>
+John Hasstedt <John.Hasstedt@sunysb.edu>
+John Hawkinson <jhawk@mit.edu>
+John Heidemann <johnh@isi.edu>
+John Holdsworth <coldwave@bigfoot.com>
+John Hughes <john@AtlanTech.COM>
+John Kristian <jmk2001@engineer.com>
+John L. Allen <allen@grumman.com>
+John Lightsey <jd@cpanel.net>
+John Macdonald <jmm@revenge.elegant.com>
+John Malmberg <wb8tyw@gmail.com>
+John Nolan <jpnolan@Op.Net>
+John P. Linderman <jpl.jpl@gmail.com>
+John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
+John Peacock <jpeacock@messagesystems.com>
+John Pfuntner <pfuntner@vnet.ibm.com>
+John Poltorak <jp@eyup.org>
+John Q. Linux <jql@accessone.com>
+John Redford <jmr@whirlwind.fmr.com>
John Rowe
-John Salinas <jsalinas@cray.com>
-John SJ Anderson <genehack@genehack.org>
-John Stoffel <jfs@fluent.com>
-John Stumbles <jstumbles@bluearc.com>
-John Tobey <jtobey@john-edwin-tobey.org>
-John Wright <john@johnwright.org>
-Johnny Lam <jlam@jgrind.org>
-Jon Eveland <jweveland@yahoo.com>
-Jon Gunnip <jongunnip@hotmail.com>
-Jon Orwant <orwant@oreilly.com>
-Jonathan Biggar <jon@sems.com>
-Jonathan D Johnston <jdjohnston2@juno.com>
-Jonathan Fine <jfine@borders.com>
-Jonathan Hudson <jonathan.hudson@jrhudson.demon.co.uk>
-Jonathan I. Kamens <jik@kamens.brookline.ma.us>
-Jonathan Roy <roy@idle.com>
-Jonathan Stowe <jns@integration-house.com>
-Joost van Baal <J.E.vanBaal@uvt.nl>
-Jörg Walter <jwalt@cpan.org>
-Jos I. Boumans <kane@dwim.org>
-Jose Auguste-Etienne <Jose.auguste-etienne@cgss-guyane.fr>
-José Pedro Oliveira <jpo@di.uminho.pt>
-Joseph N. Hall <joseph@cscaper.com>
-Joseph S. Myers <jsm28@hermes.cam.ac.uk>
-Joshua ben Jore <jjore@cpan.org>
-Joshua Juran <jjuran@gmail.com>
-Joshua Pritikin <joshua@paloalto.com>
-Joshua Rodd <joshua@rodd.us>
-JT McDuffie <jt@kpc.com>
-Juan Gallego <Little.Boss@physics.mcgill.ca>
-Juerd Waalboer <#####@juerd.nl>
-Juha Laiho <juha.laiho@Elma.Net>
-Julian Yip <julian@imoney.com>
-juna <ggl.20.jj...@spamgourmet.com>
-Jungshik Shin <jshin@mailaps.org>
-Justin Banks <justinb@cray.com>
-Ka-Ping Yee <kpyee@aw.sgi.com>
-kafka <kafka@madrognon.net>
-Kang-min Liu <gugod@gugod.org>
-Kaoru Maeda <maeda@src.ricoh.co.jp>
-Karen Etheridge <ether@cpan.org>
-Karl Glazebrook <kgb@aaossz.aao.GOV.AU>
-Karl Heuer <kwzh@gnu.org>
-Karl Simon Berg <karl@it.kth.se>
-Karl Williamson <khw@cpan.org>
-Karsten Sperling <spiff@phreax.net>
-Karthik Rajagopalan <rajagopa@pauline.schrodinger.com>
-Kaveh Ghazi <ghazi@caip.rutgers.edu>
-KAWAI Takanori <GCD00051@nifty.ne.jp>
-Kay Röpke <kroepke@dolphin-services.de>
-Keedi Kim <keedi@cpan.org>
-Keith Neufeld <neufeld@fast.pvi.org>
-Keith Thompson <Keith.S.Thompson@gmail.com>
-Ken Brown <kbrown@cornell.edu>
-Ken Cotterill <kencotterill@netspace.net.au>
-Ken Estes <estes@ms.com>
-Ken Fox <kfox@ford.com>
-Ken Hirsch <kenhirsch@ftml.net>
-Ken MacLeod <ken@bitsko.slc.ut.us>
+John Salinas <jsalinas@cray.com>
+John SJ Anderson <genehack@genehack.org>
+John Stoffel <jfs@fluent.com>
+John Stumbles <jstumbles@bluearc.com>
+John Tobey <jtobey@john-edwin-tobey.org>
+John Wright <john@johnwright.org>
+Johnny Lam <jlam@jgrind.org>
+Jon Eveland <jweveland@yahoo.com>
+Jon Gunnip <jongunnip@hotmail.com>
+Jon Orwant <orwant@oreilly.com>
+Jonathan Biggar <jon@sems.com>
+Jonathan D Johnston <jdjohnston2@juno.com>
+Jonathan Fine <jfine@borders.com>
+Jonathan Hudson <jonathan.hudson@jrhudson.demon.co.uk>
+Jonathan I. Kamens <jik@kamens.brookline.ma.us>
+Jonathan Roy <roy@idle.com>
+Jonathan Stowe <jns@integration-house.com>
+Joost van Baal <J.E.vanBaal@uvt.nl>
+Jos I. Boumans <kane@dwim.org>
+Jose Auguste-Etienne <Jose.auguste-etienne@cgss-guyane.fr>
+Joseph N. Hall <joseph@cscaper.com>
+Joseph S. Myers <jsm28@hermes.cam.ac.uk>
+Joshua ben Jore <jjore@cpan.org>
+Joshua Juran <jjuran@gmail.com>
+Joshua Pritikin <joshua@paloalto.com>
+Joshua Rodd <joshua@rodd.us>
+José Pedro Oliveira <jpo@di.uminho.pt>
+JT McDuffie <jt@kpc.com>
+Juan Gallego <Little.Boss@physics.mcgill.ca>
+Juerd Waalboer <#####@juerd.nl>
+Juha Laiho <juha.laiho@Elma.Net>
+Julian Yip <julian@imoney.com>
+juna <ggl.20.jj...@spamgourmet.com>
+Jungshik Shin <jshin@mailaps.org>
+Justin Banks <justinb@cray.com>
+Jörg Walter <jwalt@cpan.org>
+Ka-Ping Yee <kpyee@aw.sgi.com>
+kafka <kafka@madrognon.net>
+Kang-min Liu <gugod@gugod.org>
+Kaoru Maeda <maeda@src.ricoh.co.jp>
+Karen Etheridge <ether@cpan.org>
+Karl Glazebrook <kgb@aaossz.aao.GOV.AU>
+Karl Heuer <kwzh@gnu.org>
+Karl Simon Berg <karl@it.kth.se>
+Karl Williamson <khw@cpan.org>
+Karsten Sperling <spiff@phreax.net>
+Karthik Rajagopalan <rajagopa@pauline.schrodinger.com>
+Kaveh Ghazi <ghazi@caip.rutgers.edu>
+KAWAI Takanori <GCD00051@nifty.ne.jp>
+Kay Röpke <kroepke@dolphin-services.de>
+Keedi Kim <keedi@cpan.org>
+Keith Neufeld <neufeld@fast.pvi.org>
+Keith Thompson <Keith.S.Thompson@gmail.com>
+Ken Brown <kbrown@cornell.edu>
+Ken Cotterill <kencotterill@netspace.net.au>
+Ken Estes <estes@ms.com>
+Ken Fox <kfox@ford.com>
+Ken Hirsch <kenhirsch@ftml.net>
+Ken MacLeod <ken@bitsko.slc.ut.us>
Ken Neighbors
-Ken Shan <ken@digitas.harvard.edu>
-Ken Williams <ken@mathforum.org>
-Kenichi Ishigaki <ishigaki@cpan.org>
-Kenneth Albanowski <kjahds@kjahds.com>
-Kenneth Duda <kjd@cisco.com>
-Kent Fredric <kentfredric@gmail.com>
-Keong Lim <Keong.Lim@sr.com.au>
-Kevin Brintnall <kbrint@rufus.net>
-Kevin Chase <kevincha99@hotmail.com>
-kevin dawson <bowtie@cpan.org>
-Kevin Falcone <falcone@bestpractical.com>
-Kevin J. Woolley <kjw@pathillogical.com>
-Kevin O'Gorman <kevin.kosman@nrc.com>
-Kevin Ruscoe <Kevin.Ruscoe@ubsw.com>
-Kevin Ryde <user42@zip.com.au>
-Kevin White <klwhite@magnus.acs.ohio-state.edu>
+Ken Shan <ken@digitas.harvard.edu>
+Ken Williams <ken@mathforum.org>
+Kenichi Ishigaki <ishigaki@cpan.org>
+Kenneth Albanowski <kjahds@kjahds.com>
+Kenneth Duda <kjd@cisco.com>
+Kent Fredric <kentfredric@gmail.com>
+Keong Lim <Keong.Lim@sr.com.au>
+Kevin Brintnall <kbrint@rufus.net>
+Kevin Chase <kevincha99@hotmail.com>
+kevin dawson <bowtie@cpan.org>
+Kevin Falcone <falcone@bestpractical.com>
+Kevin J. Woolley <kjw@pathillogical.com>
+Kevin O'Gorman <kevin.kosman@nrc.com>
+Kevin Ruscoe <Kevin.Ruscoe@ubsw.com>
+Kevin Ryde <user42@zip.com.au>
+Kevin White <klwhite@magnus.acs.ohio-state.edu>
Kim Frutiger
-Kingpin <mthurn@copper.dulles.tasc.com>
-Kirrily Robert <skud@infotrope.net>
-Kiyotaka Sakai <ksakai@netwk.ntt-at.co.jp>
-kmx <kmx@volny.cz>
-Kragen Sitaker <kragen@pobox.com>
-Krishna Sethuraman <krishna@sgi.com>
-Kriton Kyrimis <kyrimis@princeton.edu>
-Kurt D. Starsinic <kstar@wolfetech.com>
+Kingpin <mthurn@copper.dulles.tasc.com>
+Kirrily Robert <skud@infotrope.net>
+Kiyotaka Sakai <ksakai@netwk.ntt-at.co.jp>
+kmx <kmx@volny.cz>
+Kragen Sitaker <kragen@pobox.com>
+Krishna Sethuraman <krishna@sgi.com>
+Kriton Kyrimis <kyrimis@princeton.edu>
+Kurt D. Starsinic <kstar@wolfetech.com>
Kyriakos Georgiou
-Lajos Veres <vlajos@gmail.com>
-Larry Parmelee <parmelee@CS.Cornell.EDU>
+Lajos Veres <vlajos@gmail.com>
+Larry Parmelee <parmelee@CS.Cornell.EDU>
Larry Schuler
-Larry Schwimmer <rosebud@cyclone.Stanford.EDU>
-Larry Shatzer <fugazi@zyx.net>
-Larry W. Virden <lvirden@cas.org>
-Larry Wall <larry@wall.org>
-Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯 <daxim@cpan.org>
-Lars Hecking <lhecking@nmrc.ucc.ie>
-Larwan Berke <apocal@cpan.org>
-Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
-Laurent Dami <dami@cpan.org>
-Leif Huhn <leif@hale.dkstat.com>
-Len Johnson <lenjay@ibm.net>
-Leo Lapworth <leo@cuckoo.org>
-Leon Brocard <acme@astray.com>
-Leon Timmermans <fawaka@gmail.com>
-Les Peters <lpeters@aol.net>
-Lesley Binks <lesley.binks@gmail.com>
-Lincoln D. Stein <lstein@cshl.org>
-Lionel Cons <lionel.cons@cern.ch>
-Louis Strous <louis.strous@gmail.com>
-Lubomir Rintel <lkundrak@v3.sk>
-Luc St-Louis <luc.st-louis@ca.transport.bombardier.com>
+Larry Schwimmer <rosebud@cyclone.Stanford.EDU>
+Larry Shatzer <fugazi@zyx.net>
+Larry W. Virden <lvirden@cas.org>
+Larry Wall <larry@wall.org>
+Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯 <daxim@cpan.org>
+Lars Hecking <lhecking@nmrc.ucc.ie>
+Larwan Berke <apocal@cpan.org>
+Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
+Laurent Dami <dami@cpan.org>
+Leif Huhn <leif@hale.dkstat.com>
+Len Johnson <lenjay@ibm.net>
+Leo Lapworth <leo@cuckoo.org>
+Leon Brocard <acme@astray.com>
+Leon Timmermans <fawaka@gmail.com>
+Les Peters <lpeters@aol.net>
+Lesley Binks <lesley.binks@gmail.com>
+Lincoln D. Stein <lstein@cshl.org>
+Lionel Cons <lionel.cons@cern.ch>
+Louis Strous <louis.strous@gmail.com>
+Lubomir Rintel <lkundrak@v3.sk>
+Luc St-Louis <luc.st-louis@ca.transport.bombardier.com>
Luca Fini
-Lucas Holt <luke@foolishgames.com>
-Ludovic E. R. Tolhurst-Cleaver <camel@ltcdev.com>
-Lukas Mai <l.mai@web.de>
-Luke Closs <lukec@cpan.org>
-Luke Ross <lukeross@gmail.com>
-Lupe Christoph <lupe@lupe-christoph.de>
-Luther Huffman <lutherh@stratcom.com>
-Maik Hentsche <maik@mm-double.de>
-Major Sébastien <sebastien.major@crdp.ac-caen.fr>
-Makoto MATSUSHITA <matusita@ics.es.osaka-u.ac.jp>
-Malcolm Beattie <mbeattie@sable.ox.ac.uk>
-Manuel Mausz <manuel@mausz.at>
-Manuel Valente <mvalente@idealx.com>
-Marc Green <marcgreen@cpan.org>
-Marc Lehmann <pcg@goof.com>
-Marc Paquette <Marc.Paquette@Softimage.COM>
-Marc Simpson <marc@0branch.com>
-Marc-Philip Werner <marc-philip.werner@sap.com>
-Marcel Grünauer <marcel@codewerk.com>
-Marco Fontani <MFONTANI@cpan.org>
-Marco Peereboom <marco@conformal.com>
-Marcus Holland-Moritz <mhx-perl@gmx.net>
-Marek Rouchal <marek.rouchal@infineon.com>
-Mark A Biggar <mab@wdl.loral.com>
-Mark A. Hershberger <mah@everybody.org>
-Mark A. Stratman <stratman@gmail.com>
-Mark Aufflick <mark@aufflick.com>
-Mark Bixby <mark@bixby.org>
-Mark Dickinson <dickins3@fas.harvard.edu>
-Mark Dootson <mdootson@cpan.org>
-Mark Fowler <mark@twoshortplanks.com>
+Lucas Holt <luke@foolishgames.com>
+Ludovic E. R. Tolhurst-Cleaver <camel@ltcdev.com>
+Lukas Mai <l.mai@web.de>
+Luke Closs <lukec@cpan.org>
+Luke Ross <lukeross@gmail.com>
+Lupe Christoph <lupe@lupe-christoph.de>
+Luther Huffman <lutherh@stratcom.com>
+Maik Hentsche <maik@mm-double.de>
+Major Sébastien <sebastien.major@crdp.ac-caen.fr>
+Makoto MATSUSHITA <matusita@ics.es.osaka-u.ac.jp>
+Malcolm Beattie <mbeattie@sable.ox.ac.uk>
+Manuel Mausz <manuel@mausz.at>
+Manuel Valente <mvalente@idealx.com>
+Marc Green <marcgreen@cpan.org>
+Marc Lehmann <pcg@goof.com>
+Marc Paquette <Marc.Paquette@Softimage.COM>
+Marc Simpson <marc@0branch.com>
+Marc-Philip Werner <marc-philip.werner@sap.com>
+Marcel Grünauer <marcel@codewerk.com>
+Marco Fontani <MFONTANI@cpan.org>
+Marco Peereboom <marco@conformal.com>
+Marcus Holland-Moritz <mhx-perl@gmx.net>
+Marek Rouchal <marek.rouchal@infineon.com>
+Mark A Biggar <mab@wdl.loral.com>
+Mark A. Hershberger <mah@everybody.org>
+Mark A. Stratman <stratman@gmail.com>
+Mark Aufflick <mark@aufflick.com>
+Mark Bixby <mark@bixby.org>
+Mark Dickinson <dickins3@fas.harvard.edu>
+Mark Dootson <mdootson@cpan.org>
+Mark Fowler <mark@twoshortplanks.com>
Mark Hanson
-Mark J. Reed <mreed@strange.turner.com>
-Mark Jason Dominus <mjd@plover.com>
-Mark K Trettin <mkt@lucent.com>
-Mark Kaehny <kaehny@execpc.com>
-Mark Kettenis <kettenis@wins.uva.nl>
-Mark Klein <mklein@dis.com>
-Mark Knutsen <knutsen@pilot.njin.net>
-Mark Kvale <kvale@phy.ucsf.edu>
-Mark Leighton Fisher <markleightonfisher@gmail.com>
-Mark Mielke <mark@mark.mielke.cc>
-Mark Murray <mark@grondar.za>
-Mark Overmeer <mark@overmeer.net>
-Mark P. Lutz <mark.p.lutz@boeing.com>
-Mark Pease <peasem@primenet.com>
-Mark Pizzolato <mark@infocomm.com>
-Mark R. Levinson <mrl@isc.upenn.edu>
-Mark Stosberg <mark@summersault.com>
-Marko Asplund <aspa@merlot.kronodoc.fi>
-Markus Jansen <Markus.Jansen@ericsson.com>
-Marnix van Ammers <marnix@gmail.com>
-Martien Verbruggen <mgjv@comdyn.com.au>
-Martijn Koster <mak@excitecorp.com>
-Martijn Lievaart <m@rtij.nl>
-Martin Hasch <mhasch@cpan.org>
-Martin Husemann <martin@duskware.de>
-Martin J. Bligh <mbligh@us.ibm.com>
-Martin Jost <Martin.Jost@icn.siemens.de>
-Martin Lichtin <lichtin@bivio.com>
-Martin McGrath <mcgrath.martin@gmail.com>
-Martin Plechsmid <plechsmi@karlin.mff.cuni.cz>
-Martin Pool <mbp@samba.org>
-Martti Rahkila <martti.rahkila@hut.fi>
-Marty Lucich <marty@netcom.com>
-Marty Pauley <marty+p5p@kasei.com>
-Martyn Pearce <martyn@inpharmatica.co.uk>
-Marvin Humphrey <marvin@rectangular.com>
-Masahiro KAJIURA <masahiro.kajiura@toshiba.co.jp>
-Mashrab Kuvatov <kmashrab@uni-bremen.de>
-Matthias Bethke <matthias@towiski.de>
-Mathias Koerber <mathias@dnssec1.singnet.com.sg>
-Mathieu Arnold <m@absolight.fr>
-Mats Peterson <mats@sm6sxl.net>
-Matsumoto Yasuhiro <mattn.jp@gmail.com>
-Matt Johnson <matt.w.johnson@gmail.com>
+Mark J. Reed <mreed@strange.turner.com>
+Mark Jason Dominus <mjd@plover.com>
+Mark K Trettin <mkt@lucent.com>
+Mark Kaehny <kaehny@execpc.com>
+Mark Kettenis <kettenis@wins.uva.nl>
+Mark Klein <mklein@dis.com>
+Mark Knutsen <knutsen@pilot.njin.net>
+Mark Kvale <kvale@phy.ucsf.edu>
+Mark Leighton Fisher <markleightonfisher@gmail.com>
+Mark Mielke <mark@mark.mielke.cc>
+Mark Murray <mark@grondar.za>
+Mark Overmeer <mark@overmeer.net>
+Mark P. Lutz <mark.p.lutz@boeing.com>
+Mark Pease <peasem@primenet.com>
+Mark Pizzolato <mark@infocomm.com>
+Mark R. Levinson <mrl@isc.upenn.edu>
+Mark Stosberg <mark@summersault.com>
+Marko Asplund <aspa@merlot.kronodoc.fi>
+Markus Jansen <Markus.Jansen@ericsson.com>
+Marnix van Ammers <marnix@gmail.com>
+Martien Verbruggen <mgjv@comdyn.com.au>
+Martijn Koster <mak@excitecorp.com>
+Martijn Lievaart <m@rtij.nl>
+Martin Hasch <mhasch@cpan.org>
+Martin Husemann <martin@duskware.de>
+Martin J. Bligh <mbligh@us.ibm.com>
+Martin Jost <Martin.Jost@icn.siemens.de>
+Martin Lichtin <lichtin@bivio.com>
+Martin McGrath <mcgrath.martin@gmail.com>
+Martin Plechsmid <plechsmi@karlin.mff.cuni.cz>
+Martin Pool <mbp@samba.org>
+Martti Rahkila <martti.rahkila@hut.fi>
+Marty Lucich <marty@netcom.com>
+Marty Pauley <marty+p5p@kasei.com>
+Martyn Pearce <martyn@inpharmatica.co.uk>
+Marvin Humphrey <marvin@rectangular.com>
+Masahiro KAJIURA <masahiro.kajiura@toshiba.co.jp>
+Mashrab Kuvatov <kmashrab@uni-bremen.de>
+Mathias Koerber <mathias@dnssec1.singnet.com.sg>
+Mathieu Arnold <m@absolight.fr>
+Mats Peterson <mats@sm6sxl.net>
+Matsumoto Yasuhiro <mattn.jp@gmail.com>
+Matt Johnson <matt.w.johnson@gmail.com>
Matt Kimball
-Matt Kraai <kraai@ftbfs.org>
-Matt S Trout <mst@shadowcat.co.uk>
-Matt Sergeant <matt@sergeant.org>
-Matt Taggart <taggart@debian.org>
-Matthew Black <black@csulb.edu>
-Matthew Green <mrg@splode.eterna.com.au>
-Matthew Horsfall <wolfsage@gmail.com>
-Matthew Sachs <matthewg@zevils.com>
-Matthew T Harden <mthard@mthard1.monsanto.com>
-Matthias Ulrich Neeracher <neeracher@mac.com>
-Matthias Urlichs <smurf@noris.net>
-Matthijs van Duin <xmath@cpan.org>
-Mattia Barbon <mbarbon@dsi.unive.it>
-Maurizio Loreti <maurizio.loreti@pd.infn.it>
-Max Baker <max@warped.org>
-Max Maischein <corion@corion.net>
-Maxwell Carey <maxwellhaydn@gmail.com>
-Merijn Broeren <merijnb@iloquent.nl>
-Michael A Chase <mchase@ix.netcom.com>
-Michael Breen <perl@mbreen.com>
-Michael Bunk <bunk@iat.uni-leipzig.de>
-Michael Carman <mjcarman@home.com>
-Michael Cook <mcook@cognex.com>
-Michael Cummings <mcummings@gentoo.org>
-Michael De La Rue <mikedlr@tardis.ed.ac.uk>
-Michael Engel <engel@nms1.cc.huji.ac.il>
-Michael Fig <michael@liveblockauctions.com>
-Michael G Schwern <schwern@pobox.com>
-Michael H. Moran <mhm@austin.ibm.com>
-Michael King <mike808@users.sourceforge.net>
-Michael Lemke <lemkemch@t-online.de>
-Michael Mahan <mahanm@nextwork.rose-hulman.edu>
-Michael Parker <michael.parker@st.com>
-Michael Schroeder <Michael.Schroeder@informatik.uni-erlangen.de>
-Michael Somos <somos@grail.cba.csuohio.edu>
-Michael Stevens <mstevens@etla.org>
-Michael van Elst <mlelstv@serpens.de>
-Michael Witten <mfwitten@gmail.com>
+Matt Kraai <kraai@ftbfs.org>
+Matt S Trout <mst@shadowcat.co.uk>
+Matt Sergeant <matt@sergeant.org>
+Matt Taggart <taggart@debian.org>
+Matt Turner <mattst88@gmail.com>
+Matthew Black <black@csulb.edu>
+Matthew Green <mrg@splode.eterna.com.au>
+Matthew Horsfall <wolfsage@gmail.com>
+Matthew Sachs <matthewg@zevils.com>
+Matthew T Harden <mthard@mthard1.monsanto.com>
+Matthias Bethke <matthias@towiski.de>
+Matthias Ulrich Neeracher <neeracher@mac.com>
+Matthias Urlichs <smurf@noris.net>
+Matthijs van Duin <xmath@cpan.org>
+Mattia Barbon <mbarbon@dsi.unive.it>
+Maurizio Loreti <maurizio.loreti@pd.infn.it>
+Max Baker <max@warped.org>
+Max Maischein <corion@corion.net>
+Maxwell Carey <maxwellhaydn@gmail.com>
+Merijn Broeren <merijnb@iloquent.nl>
+Michael A Chase <mchase@ix.netcom.com>
+Michael Breen <perl@mbreen.com>
+Michael Bunk <bunk@iat.uni-leipzig.de>
+Michael Carman <mjcarman@home.com>
+Michael Cook <mcook@cognex.com>
+Michael Cummings <mcummings@gentoo.org>
+Michael De La Rue <mikedlr@tardis.ed.ac.uk>
+Michael Engel <engel@nms1.cc.huji.ac.il>
+Michael Fig <michael@liveblockauctions.com>
+Michael G Schwern <schwern@pobox.com>
+Michael H. Moran <mhm@austin.ibm.com>
+Michael Haardt <michael@moria.de>
+Michael King <mike808@users.sourceforge.net>
+Michael Lemke <lemkemch@t-online.de>
+Michael Mahan <mahanm@nextwork.rose-hulman.edu>
+Michael Parker <michael.parker@st.com>
+Michael Schroeder <Michael.Schroeder@informatik.uni-erlangen.de>
+Michael Somos <somos@grail.cba.csuohio.edu>
+Michael Stevens <mstevens@etla.org>
+Michael van Elst <mlelstv@serpens.de>
+Michael Witten <mfwitten@gmail.com>
Michele Sardo
-Mik Firestone <fireston@lexmark.com>
-Mike Doherty <mike@mikedoherty.ca>
-Mike Fletcher <fletch@phydeaux.org>
-Mike Giroux <rmgiroux@acm.org>
-Mike Guy <mjtg@cam.ac.uk>
-Mike Heins <mike@bill.iac.net>
-Mike Hopkirk <hops@sco.com>
-Mike Kelly <pioto@pioto.org>
-Mike Mestnik <MMestnik@rustconsulting.com>
-Mike Pomraning <mjp@pilcrow.madison.wi.us>
+Mik Firestone <fireston@lexmark.com>
+Mike Doherty <mike@mikedoherty.ca>
+Mike Fletcher <fletch@phydeaux.org>
+Mike Giroux <rmgiroux@acm.org>
+Mike Guy <mjtg@cam.ac.uk>
+Mike Heins <mike@bill.iac.net>
+Mike Hopkirk <hops@sco.com>
+Mike Kelly <pioto@pioto.org>
+Mike Mestnik <MMestnik@rustconsulting.com>
+Mike Pomraning <mjp@pilcrow.madison.wi.us>
Mike Rogers
-Mike Schilli <m@perlmeister.com>
-Mike Sheldrake <mike@sheldrake.net>
-Mike Stok <mike@stok.co.uk>
-Mike W Ellwood <mwe@rl.ac.uk>
-Mikhail Zabaluev <mhz@alt-linux.org>
-Milosz Tanski <mtanski@gridapp.com>
-Milton L. Hankins <mlh@swl.msd.ray.com>
-Misty De Meo <mistydemeo@github.com>
-Mohammed El-Afifi <mohammed_elafifi@yahoo.com>
-Moritz Lenz <moritz@casella.verplant.org>
-Moshe Kaminsky <kaminsky@math.huji.ac.il>
-Mottaqui Karim <taqqui.karim@gmail.com>
-Mr. Nobody <mrnobo1024@yahoo.com>
-Murray Nesbitt <murray@nesbitt.ca>
-Nathan Glenn <garfieldnate@gmail.com>
-Nathan Kurz <nate@valleytel.net>
-Nathan Torkington <gnat@frii.com>
-Nathan Trapuzzano <nbtrap@nbtrap.com>
-Neale Ferguson <neale@VMA.TABNSW.COM.AU>
-Neil Bowers <neil@bowers.com>
-Neil Watkiss <neil.watkiss@sophos.com>
-Neil Williams <codehelp@debian.org>
-Nicholas Clark <nick@ccl4.org>
+Mike Schilli <m@perlmeister.com>
+Mike Sheldrake <mike@sheldrake.net>
+Mike Stok <mike@stok.co.uk>
+Mike W Ellwood <mwe@rl.ac.uk>
+Mikhail Zabaluev <mhz@alt-linux.org>
+Milosz Tanski <mtanski@gridapp.com>
+Milton L. Hankins <mlh@swl.msd.ray.com>
+Misty De Meo <mistydemeo@github.com>
+Mohammed El-Afifi <mohammed_elafifi@yahoo.com>
+Moritz Lenz <moritz@casella.verplant.org>
+Moshe Kaminsky <kaminsky@math.huji.ac.il>
+Mottaqui Karim <taqqui.karim@gmail.com>
+Mr. Nobody <mrnobo1024@yahoo.com>
+Murray Nesbitt <murray@nesbitt.ca>
+Nathan Glenn <garfieldnate@gmail.com>
+Nathan Kurz <nate@valleytel.net>
+Nathan Torkington <gnat@frii.com>
+Nathan Trapuzzano <nbtrap@nbtrap.com>
+Neale Ferguson <neale@VMA.TABNSW.COM.AU>
+Neil Bowers <neil@bowers.com>
+Neil Watkiss <neil.watkiss@sophos.com>
+Neil Williams <codehelp@debian.org>
+Nicholas Clark <nick@ccl4.org>
Nicholas Oxhøj
-Nicholas Perez <nperez@cpan.org>
-Nick Cleaton <nick@cleaton.net>
+Nicholas Perez <nperez@cpan.org>
+Nick Cleaton <nick@cleaton.net>
Nick Duffek
Nick Gianniotis
Nick Ing-Simmons
-Nick Johnston <nickjohnstonsky@gmail.com>
-Nick Logan <ugexe@cpan.org>
-Nick Williams <Nick.Williams@morganstanley.com>
-Nicolas Kaiser <nikai@nikai.net>
-Nicolas R. <atoomic@cpan.org>
-Niels Thykier <niels@thykier.net>
-Nigel Sandever <njsandever@hotmail.com>
-Niko Tyni <ntyni@debian.org>
-Nikola Knezevic <indy@tesla.rcub.bg.ac.yu>
+Nick Johnston <nickjohnstonsky@gmail.com>
+Nick Logan <ugexe@cpan.org>
+Nick Williams <Nick.Williams@morganstanley.com>
+Nicolas Kaiser <nikai@nikai.net>
+Nicolas R. @atoomic
+Niels Thykier <niels@thykier.net>
+Nigel Sandever <njsandever@hotmail.com>
+Niko Tyni <ntyni@debian.org>
+Nikola Knezevic <indy@tesla.rcub.bg.ac.yu>
Nikola Milutinovic
-Nikolai Eipel <eipel@web.de>
-Noah <sitz@onastick.net>
+Nikolai Eipel <eipel@web.de>
+Noah <sitz@onastick.net>
Nobuhiro Iwamatsu
-Noirin Shirley <colmsbook@nerdchic.net>
-Norbert Pueschel <pueschel@imsdd.meb.uni-bonn.de>
-Norio Suzuki <kipp@shonanblue.ne.jp>
-Norman Koch <kochnorman@rocketmail.com>
-Norton T. Allen <allen@huarp.harvard.edu>
-Nuno Carvalho <mestre.smash@gmail.com>
-Offer Kaye <offer.kaye@gmail.com>
-Olaf Flebbe <o.flebbe@science-computing.de>
-Olaf Titz <olaf@bigred.inka.de>
-Oleg Nesterov <oleg@redhat.com>
-Olivier Blin <blino@mandriva.com>
-Olivier Mengué <dolmen@cpan.org>
-Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>
+Noirin Shirley <colmsbook@nerdchic.net>
+Norbert Pueschel <pueschel@imsdd.meb.uni-bonn.de>
+Norio Suzuki <kipp@shonanblue.ne.jp>
+Norman Koch <kochnorman@rocketmail.com>
+Norton T. Allen <allen@huarp.harvard.edu>
+Nuno Carvalho <mestre.smash@gmail.com>
+Offer Kaye <offer.kaye@gmail.com>
+Olaf Flebbe <o.flebbe@science-computing.de>
+Olaf Titz <olaf@bigred.inka.de>
+Oleg Nesterov <oleg@redhat.com>
+Olivier Blin <blino@mandriva.com>
+Olivier Mengué <dolmen@cpan.org>
+Olivier Thauvin <olivier.thauvin@aerov.jussieu.fr>
Olli Savia
-Ollivier Robert <roberto@keltia.freenix.fr>
-Osvaldo Villalon <ovillalon@dextratech.com>
-Owain G. Ainsworth <oga@nicotinebsd.org>
-Owen Taylor <owt1@cornell.edu>
-Pali <pali@cpan.org>
-Papp Zoltan <padre@elte.hu>
-parv <parv@pair.com>
-Pascal Rigaux <pixel@mandriva.com>
-Patrick Donelan <pat@patspam.com>
-Patrick Dugnolle <patrick.dugnolle@bnpparibas.com>
-Patrick Hayes <Patrick.Hayes.CAP_SESA@renault.fr>
-Patrick O'Brien <pdo@cs.umd.edu>
-Patrik Hägglund <patrik.h.hagglund@ericsson.com>
-Pau Amma <pauamma@gundo.com>
-Paul A Sand <pas@unh.edu>
-Paul Boven <p.boven@sara.nl>
-Paul David Fardy <pdf@morgan.ucs.mun.ca>
-Paul Eggert <eggert@twinsun.com>
-Paul Evans <leonerd@leonerd.org.uk>
-Paul Fenwick <pjf@perltraining.com.au>
-Paul Gaborit <paul.gaborit@enstimac.fr>
-Paul Green <Paul.Green@stratus.com>
-Paul Hoffman <phoffman@proper.com>
-Paul Holser <Paul.Holser.pholser@nortelnetworks.com>
-Paul Johnson <paul@pjcj.net>
-Paul Lindner <lindner@inuus.com>
-Paul Marquess <paul.marquess@btinternet.com>
-Paul Moore <Paul.Moore@uk.origin-it.com>
-Paul Rogers <Paul.Rogers@Central.Sun.COM>
-Paul Saab <ps@yahoo-inc.com>
-Paul Schinder <schinder@pobox.com>
-Paul Szabo <psz@maths.usyd.edu.au>
-Pavel Kaňkovský <kan@dcit.cz>
-Pavel Zakouril <Pavel.Zakouril@mff.cuni.cz>
-Pedro Felipe Horrillo Guerra <pancho@pancho.name>
-Per Einar Ellefsen <per.einar@skynet.be>
-Perlover <perlover@perlover.com>
-Pete Peterson <petersonp@genrad.com>
-Peter Avalos <peter@theshell.com>
+Ollivier Robert <roberto@keltia.freenix.fr>
+Osvaldo Villalon <ovillalon@dextratech.com>
+Owain G. Ainsworth <oga@nicotinebsd.org>
+Owen Taylor <owt1@cornell.edu>
+Pali <pali@cpan.org>
+Papp Zoltan <padre@elte.hu>
+parv <parv@pair.com>
+Pascal Rigaux <pixel@mandriva.com>
+Patrick Donelan <pat@patspam.com>
+Patrick Dugnolle <patrick.dugnolle@bnpparibas.com>
+Patrick Hayes <Patrick.Hayes.CAP_SESA@renault.fr>
+Patrick O'Brien <pdo@cs.umd.edu>
+Patrik Hägglund <patrik.h.hagglund@ericsson.com>
+Pau Amma <pauamma@gundo.com>
+Paul A Sand <pas@unh.edu>
+Paul Boven <p.boven@sara.nl>
+Paul David Fardy <pdf@morgan.ucs.mun.ca>
+Paul Eggert <eggert@twinsun.com>
+Paul Evans <leonerd@leonerd.org.uk>
+Paul Fenwick <pjf@perltraining.com.au>
+Paul Gaborit <paul.gaborit@enstimac.fr>
+Paul Green <Paul.Green@stratus.com>
+Paul Hoffman <phoffman@proper.com>
+Paul Holser <Paul.Holser.pholser@nortelnetworks.com>
+Paul Johnson <paul@pjcj.net>
+Paul Lindner <lindner@inuus.com>
+Paul Marquess <pmqs@cpan.org>
+Paul Moore <Paul.Moore@uk.origin-it.com>
+Paul Rogers <Paul.Rogers@Central.Sun.COM>
+Paul Saab <ps@yahoo-inc.com>
+Paul Schinder <schinder@pobox.com>
+Paul Szabo <psz@maths.usyd.edu.au>
+Pavel Kaňkovský <kan@dcit.cz>
+Pavel Zakouril <Pavel.Zakouril@mff.cuni.cz>
+Pedro Felipe Horrillo Guerra <pancho@pancho.name>
+Per Einar Ellefsen <per.einar@skynet.be>
+Perlover <perlover@perlover.com>
+Pete Peterson <petersonp@genrad.com>
+Peter Avalos <peter@theshell.com>
Peter BARABAS
-Peter Chines <pchines@nhgri.nih.gov>
-Peter Dintelmann <Peter.Dintelmann@Dresdner-Bank.com>
-Peter E. Yee <yee@trident.arc.nasa.gov>
-Peter Gessner <peter.gessner@post.rwth-aachen.de>
-Peter Gordon <peter@valor.com>
-Peter Haworth <pmh@edison.ioppublishing.com>
-Peter J. Farley III <pjfarley@banet.net>
-Peter J. Holzer <hjp@hjp.at>
+Peter Chines <pchines@nhgri.nih.gov>
+Peter Dintelmann <peter.dintelmann@dresdner-bank.com>
+Peter E. Yee <yee@trident.arc.nasa.gov>
+Peter Eisentraut <peter@eisentraut.org>
+Peter Gessner <peter.gessner@post.rwth-aachen.de>
+Peter Gordon <peter@valor.com>
+Peter Haworth <pmh@edison.ioppublishing.com>
+Peter J. Farley III <pjfarley@banet.net>
+Peter J. Holzer <hjp@hjp.at>
Peter Jaspers-Fayer
-Peter John Acklam <pjacklam@online.no>
-Peter Martini <PeterCMartini@GMail.com>
-Peter O'Gorman <peter@pogma.com>
-Peter Prymmer <PPrymmer@factset.com>
-Peter Rabbitson <ribasushi@cpan.org>
-Peter Scott <Peter@PSDT.com>
-Peter Valdemar Mørch <pm@capmon.dk>
-Peter van Heusden <pvh@junior.uwc.ac.za>
-Peter Wolfe <wolfe@teloseng.com>
-Petr Písař <ppisar@redhat.com>
-Petter Reinholdtsen <pere@hungry.com>
-Phil Lobbes <phil@perkpartners.com>
-Phil Monsen <philip.monsen@pobox.com>
-Phil Pearl (Lobbes) <plobbes@gmail.com>
-Philip Boulain <philip.boulain@smoothwall.net>
-Philip Guenther <guenther@openbsd.org>
-Philip Hazel <ph10@cus.cam.ac.uk>
-Philip M. Gollucci <pgollucci@p6m7g8.com>
-Philip Newton <pne@cpan.org>
-Philippe Bruhat (BooK) <book@cpan.org>
-Philippe M. Chiasson <gozer@ActiveState.com>
-Pierre Bogossian <bogossian@mail.com>
-Piers Cawley <pdcawley@bofh.org.uk>
-Pino Toscano <pino@debian.org>
-Piotr Fusik <pfusik@op.pl>
-Piotr Klaban <makler@oryl.man.torun.pl>
-Piotr Roszatycki <piotr.roszatycki@gmail.com>
-Pip Cet <pipcet@gmail.com>
-Pradeep Hodigere <phodigere@yahoo.com>
-Prymmer/Kahn <pvhp@best.com>
-Quentin Fennessy <quentin@arrakeen.amd.com>
-Radu Greab <radu@netsoft.ro>
-Rafael Garcia-Suarez <rgs@consttype.org>
-Rainer Keuchel <keuchel@allgeier.com>
-Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-Rainer Tammer <tammer@tammer.net>
-Rajesh Mandalemula <rajesh.mandalemula@deshaw.com>
-Rajesh Vaidheeswarran <rv@gnu.org>
-Ralf S. Engelschall <rse@engelschall.com>
-Randal L. Schwartz <merlyn@stonehenge.com>
-Randall Gellens <randy@qualcomm.com>
-Randolf Werner <randolf.werner@sap.com>
-Randy J. Ray <rjray@redhat.com>
-Randy Stauner <rwstauner@cpan.org>
+Peter John Acklam <pjacklam@online.no>
+Peter Liscovius
+Peter Martini <PeterCMartini@GMail.com>
+Peter O'Gorman <peter@pogma.com>
+Peter Oliver <git@mavit.org.uk>
+Peter Prymmer <PPrymmer@factset.com>
+Peter Rabbitson <ribasushi@cpan.org>
+Peter Scott <Peter@PSDT.com>
+Peter Valdemar Mørch <pm@capmon.dk>
+Peter van Heusden <pvh@junior.uwc.ac.za>
+Peter Wolfe <wolfe@teloseng.com>
+Petr Písař <ppisar@redhat.com>
+Petter Reinholdtsen <pere@hungry.com>
+Phil Lobbes <phil@perkpartners.com>
+Phil Monsen <philip.monsen@pobox.com>
+Phil Pearl (Lobbes) <plobbes@gmail.com>
+Philip Boulain <philip.boulain@smoothwall.net>
+Philip Guenther <guenther@openbsd.org>
+Philip Hazel <ph10@cus.cam.ac.uk>
+Philip M. Gollucci <pgollucci@p6m7g8.com>
+Philip Newton <pne@cpan.org>
+Philippe Bruhat (BooK) <book@cpan.org>
+Philippe M. Chiasson <gozer@ActiveState.com>
+Pierre Bogossian <bogossian@mail.com>
+Piers Cawley <pdcawley@bofh.org.uk>
+Pino Toscano <pino@debian.org>
+Piotr Fusik <pfusik@op.pl>
+Piotr Klaban <makler@oryl.man.torun.pl>
+Piotr Roszatycki <piotr.roszatycki@gmail.com>
+Pip Cet <pipcet@gmail.com>
+Pradeep Hodigere <phodigere@yahoo.com>
+Prymmer/Kahn <pvhp@best.com>
+Quentin Fennessy <quentin@arrakeen.amd.com>
+Radu Greab <radu@netsoft.ro>
+Rafael Garcia-Suarez <rgs@consttype.org>
+Rainer Keuchel <keuchel@allgeier.com>
+Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+Rainer Tammer <tammer@tammer.net>
+Rajesh Mandalemula <rajesh.mandalemula@deshaw.com>
+Rajesh Vaidheeswarran <rv@gnu.org>
+Ralf S. Engelschall <rse@engelschall.com>
+Randal L. Schwartz <merlyn@stonehenge.com>
+Randall Gellens <randy@qualcomm.com>
+Randolf Werner <randolf.werner@sap.com>
+Randy J. Ray <rjray@redhat.com>
+Randy Stauner <rwstauner@cpan.org>
Randy W. Sims
-Raphael Manfredi <Raphael.Manfredi@pobox.com>
-Raul Dias <raul@dias.com.br>
-Raymund Will <ray@caldera.de>
-Redvers Davies <red@criticalintegration.com>
-Reini Urban <rurban@cpan.org>
-Renee Baecker <module@renee-baecker.de>
-Reuben Thomas <rrt@sc3d.org>
-Rex Dieter <rdieter@math.unl.edu>
-Rhesa Rozendaal <perl@rhesa.com>
-Ricardo Signes <rjbs@cpan.org>
-Rich Morin <rdm@cfcl.com>
-Rich Rauenzahn <rrauenza@hp.com>
-Rich Salz <rsalz@bbn.com>
-Richard A. Wells <Rwells@uhs.harvard.edu>
-Richard Clamp <richardc@unixbeard.net>
-Richard Foley <richard.foley@rfi.net>
-Richard Hatch <rhatch@austin.ibm.com>
-Richard Hitt <rbh00@utsglobal.com>
-Richard Kandarian <richard.kandarian@lanl.gov>
-Richard L. England <richard_england@mentorg.com>
-Richard L. Maus, Jr. <rmaus@monmouth.com>
-Richard Leach <rich+perl@hyphen-dash-hyphen.info>
-Richard Levitte <levitte@openssl.org>
-Richard Möhn <richard.moehn@fu-berlin.de>
-Richard Ohnemus <richard_ohnemus@dallas.csd.sterling.com>
-Richard Soderberg <p5-authors@crystalflame.net>
-Richard Yeh <rcyeh@cco.caltech.edu>
-Rick Delaney <rick@consumercontact.com>
+Raphael Manfredi <Raphael.Manfredi@pobox.com>
+Raul Dias <raul@dias.com.br>
+Raymund Will <ray@caldera.de>
+Redvers Davies <red@criticalintegration.com>
+Reini Urban <rurban@cpan.org>
+Renee Baecker <module@renee-baecker.de>
+Reuben Thomas <rrt@sc3d.org>
+Rex Dieter <rdieter@math.unl.edu>
+Rhesa Rozendaal <perl@rhesa.com>
+Ricardo Signes <rjbs@cpan.org>
+Rich Morin <rdm@cfcl.com>
+Rich Rauenzahn <rrauenza@hp.com>
+Rich Salz <rsalz@bbn.com>
+Richard A. Wells <Rwells@uhs.harvard.edu>
+Richard Clamp <richardc@unixbeard.net>
+Richard Foley <richard.foley@rfi.net>
+Richard Hatch <rhatch@austin.ibm.com>
+Richard Hitt <rbh00@utsglobal.com>
+Richard Kandarian <richard.kandarian@lanl.gov>
+Richard L. England <richard_england@mentorg.com>
+Richard L. Maus, Jr. <rmaus@monmouth.com>
+Richard Leach <rich+perl@hyphen-dash-hyphen.info>
+Richard Levitte <levitte@openssl.org>
+Richard Möhn <richard.moehn@fu-berlin.de>
+Richard Ohnemus <richard_ohnemus@dallas.csd.sterling.com>
+Richard Soderberg <p5-authors@crystalflame.net>
+Richard Yeh <rcyeh@cco.caltech.edu>
+Rick Delaney <rick@consumercontact.com>
Rick Pluta
-Rick Smith <ricks@sd.znet.com>
+Rick Smith <ricks@sd.znet.com>
Rickard Westman
-Rob Brown <bbb@cpan.org>
-Rob Henderson <robh@cs.indiana.edu>
-Rob Hoelz <rob@hoelz.ro>
-Rob Napier <rnapier@employees.org>
-Robert May <robertmay@cpan.org>
-Robert Millan <rmh@debian.org>
-Robert Partington <rjp@riffraff.plig.net>
-Robert Sanders <Robert.Sanders@linux.org>
-Robert Sebastian Gerus <arachnist@gmail.com>
-Robert Spier <rspier@pobox.com>
-Roberto C. Sanchez <roberto@connexer.com>
-Robin Barker <RMBarker@cpan.org>
-Robin Houston <robin@cpan.org>
-Rocco Caputo <troc@netrus.net>
-Roderick Schertler <roderick@argon.org>
-Rodger Anderson <rodger@boi.hp.com>
-Rodolfo Carvalho <rhcarvalho@gmail.com>
-Ronald F. Guilmette <rfg@monkeys.com>
-Ronald J. Kimball <rjk@linguist.dartmouth.edu>
-Ronald Schmidt <RonaldWS@aol.com>
-Rostislav Skudnov <skrostislav@gmail.com>
-Ruben Schattevoy <schattev@imb-jena.de>
-Rudolph Todd Maceyko <rm55+@pitt.edu>
-Rujith S. de Silva <desilva@netbox.com>
-Ruslan Zakirov <ruz@bestpractical.com>
-Russ Allbery <rra@stanford.edu>
-Russel O'Connor <roconnor@world.std.com>
-Russell Fulton <russell@ccu1.auckland.ac.nz>
-Russell Mosemann <mose@ccsn.edu>
-Ryan Herbert <rherbert@sycamorehq.com>
-Ryan Voots <simcop2387@simcop2387.info>
-Salvador Fandiño <sfandino@yahoo.com>
-Salvador Ortiz Garcia <sog@msg.com.mx>
-Sam Kimbrel <kimbrel@me.com>
-Sam Tregar <sam@tregar.com>
-Sam Vilain <sam@vilain.net>
-Samuel Thibault <sthibault@debian.org>
-Samuli Kärkkäinen <skarkkai@woods.iki.fi>
-Sawyer X <xsawyerx@cpan.org>
-Schuyler Erle <schuyler@oreilly.com>
-Scott A Crosby <scrosby@cs.rice.edu>
-Scott Bronson <bronson@rinspin.com>
-Scott Gifford <sgifford@tir.com>
-Scott Henry <scotth@sgi.com>
-Scott L. Miller <Scott.L.Miller@Compaq.com>
-Scott Lanning <lannings@who.int>
-Scott Wiersdorf <scott@perlcode.org>
-Sean Boudreau <seanb@qnx.com>
-Sean Dague <sean@dague.net>
-Sean Davis <dive@ender.com>
-Sean M. Burke <sburke@cpan.org>
-Sean Robinson <robinson_s@sc.maricopa.edu>
-Sean Sheedy <seans@ncube.com>
-Sebastian Schmidt <yath@yath.de>
-Sebastian Steinlechner <steinlechner@gmx.net>
-Sebastian Wittmeier <Sebastian.Wittmeier@ginko.de>
-Sébastien Aperghis-Tramoni <saper@cpan.org>
-Sebastien Barre <Sebastien.Barre@utc.fr>
-Sergey Alekseev <varnie29a@mail.ru>
-Sergey Aleynikov <sergey.aleynikov@gmail.com>
-Sérgio Durigan Júnior <sergiodj@linux.vnet.ibm.com>
-Shawn <svicalifornia@gmail.com>
-Shawn M Moore <sartak@gmail.com>
-Sherm Pendley <sherm@dot-app.org>
-Shigeya Suzuki <shigeya@wide.ad.jp>
-Shimpei Yamashita <shimpei@socrates.patnet.caltech.edu>
-Shinya Hayakawa <hayakawa@livedoor.jp>
-Shirakata Kentaro <argrath@ub32.org>
-Shishir Gundavaram <shishir@ruby.ora.com>
-Shlomi Fish <shlomif@cpan.org>
-Shoichi Kaji <skaji@cpan.org>
-Simon Cozens <simon@netthink.co.uk>
-Simon Glover <scog@roe.ac.uk>
+Rob Brown <bbb@cpan.org>
+Rob Henderson <robh@cs.indiana.edu>
+Rob Hoelz <rob@hoelz.ro>
+Rob Napier <rnapier@employees.org>
+Robert May <robertmay@cpan.org>
+Robert Millan <rmh@debian.org>
+Robert Partington <rjp@riffraff.plig.net>
+Robert Sanders <Robert.Sanders@linux.org>
+Robert Sebastian Gerus <arachnist@gmail.com>
+Robert Spier <rspier@pobox.com>
+Roberto C. Sanchez <roberto@connexer.com>
+Robin Barker <RMBarker@cpan.org>
+Robin Houston <robin@cpan.org>
+Rocco Caputo <troc@netrus.net>
+Roderick Schertler <roderick@argon.org>
+Rodger Anderson <rodger@boi.hp.com>
+Rodolfo Carvalho <rhcarvalho@gmail.com>
+Ronald F. Guilmette <rfg@monkeys.com>
+Ronald J. Kimball <rjk@linguist.dartmouth.edu>
+Ronald Schmidt <RonaldWS@aol.com>
+Rostislav Skudnov <skrostislav@gmail.com>
+Ruben Schattevoy <schattev@imb-jena.de>
+Rudolph Todd Maceyko <rm55+@pitt.edu>
+Rujith S. de Silva <desilva@netbox.com>
+Ruslan Zakirov <ruz@bestpractical.com>
+Russ Allbery <rra@stanford.edu>
+Russel O'Connor <roconnor@world.std.com>
+Russell Fulton <russell@ccu1.auckland.ac.nz>
+Russell Mosemann <mose@ccsn.edu>
+Ryan Herbert <rherbert@sycamorehq.com>
+Ryan Voots <simcop2387@simcop2387.info>
+Salvador Fandiño <sfandino@yahoo.com>
+Salvador Ortiz Garcia <sog@msg.com.mx>
+Sam Kimbrel <kimbrel@me.com>
+Sam Tregar <sam@tregar.com>
+Sam Vilain <sam@vilain.net>
+Samuel Smith <esaym@cpan.org>
+Samuel Thibault <sthibault@debian.org>
+Samuli Kärkkäinen <skarkkai@woods.iki.fi>
+Santtu Ojanperä <santtuojanpera98@gmail.com>
+Sawyer X <xsawyerx@cpan.org>
+Schuyler Erle <schuyler@oreilly.com>
+Scott A Crosby <scrosby@cs.rice.edu>
+Scott Bronson <bronson@rinspin.com>
+Scott Gifford <sgifford@tir.com>
+Scott Henry <scotth@sgi.com>
+Scott L. Miller <Scott.L.Miller@Compaq.com>
+Scott Lanning <lannings@who.int>
+Scott Wiersdorf <scott@perlcode.org>
+Sean Boudreau <seanb@qnx.com>
+Sean Dague <sean@dague.net>
+Sean Davis <dive@ender.com>
+Sean M. Burke <sburke@cpan.org>
+Sean Robinson <robinson_s@sc.maricopa.edu>
+Sean Sheedy <seans@ncube.com>
+Sebastian Schmidt <yath@yath.de>
+Sebastian Steinlechner <steinlechner@gmx.net>
+Sebastian Wittmeier <Sebastian.Wittmeier@ginko.de>
+Sebastien Barre <Sebastien.Barre@utc.fr>
+Sergey Alekseev <varnie29a@mail.ru>
+Sergey Aleynikov <sergey.aleynikov@gmail.com>
+Sergiy Borodych <bor@cpan.org>
+Sevan Janiyan <venture37@geeklan.co.uk>
+Shawn <svicalifornia@gmail.com>
+Shawn M Moore <sartak@gmail.com>
+Sherm Pendley <sherm@dot-app.org>
+Shigeya Suzuki <shigeya@wide.ad.jp>
+Shimpei Yamashita <shimpei@socrates.patnet.caltech.edu>
+Shinya Hayakawa <hayakawa@livedoor.jp>
+Shirakata Kentaro <argrath@ub32.org>
+Shishir Gundavaram <shishir@ruby.ora.com>
+Shlomi Fish <shlomif@cpan.org>
+Shoichi Kaji <skaji@cpan.org>
+Simon Cozens <simon@netthink.co.uk>
+Simon Glover <scog@roe.ac.uk>
Simon Leinen
-Simon Parsons <S.Parsons@ftel.co.uk>
-Simon Schubert <corecode@fs.ei.tum.de>
-Sinan Unur <sinan@unur.com>
-Sisyphus <sisyphus@cpan.org>
-Slaven Rezic <slaven@rezic.de>
-Smylers <smylers@stripey.com>
-Solar Designer <solar@openwall.com>
-Spider Boardman <spider@orb.nashua.nh.us>
-Spiros Denaxas <s.denaxas@gmail.com>
-Sreeji K Das <sreeji_k@yahoo.com>
-Stanislaw Pusep <stas@sysd.org>
-Stas Bekman <stas@stason.org>
-Stefan Seifert <nine@detonation.org>
-Steffen Müller <smueller@cpan.org>
-Steffen Schwigon <ss5@renormalist.net>
-Steffen Ullrich <coyote.frank@gmx.net>
-Stepan Kasal <skasal@redhat.com>
-Stéphane Payrard <stef@mongueurs.net>
-Stephanie Beals <bealzy@us.ibm.com>
-Stephen Bennett <sbp@exherbo.com>
-Stephen Clouse <stephenc@theiqgroup.com>
-Stephen McCamant <smcc@mit.edu>
-Stephen O. Lidie <lusol@turkey.cc.Lehigh.EDU>
-Stephen Oberholtzer <oliverklozoff@gmail.com>
-Stephen P. Potter <spp@ds.net>
-Stephen Zander <gibreel@pobox.com>
-Stevan Little <stevan@cpan.org>
-Steve A Fink <sfink@cs.berkeley.edu>
-Steve Grazzini <grazz@pobox.com>
-Steve Hay <steve.m.hay@googlemail.com>
-Steve Kelem <steve.kelem@xilinx.com>
-Steve McDougall <swmcd@world.std.com>
-Steve Nielsen <spn@enteract.com>
+Simon Parsons <S.Parsons@ftel.co.uk>
+Simon Schubert <corecode@fs.ei.tum.de>
+Sinan Unur <sinan@unur.com>
+Sisyphus <sisyphus@cpan.org>
+Slaven Rezic <slaven@rezic.de>
+Smylers <smylers@stripey.com>
+Solar Designer <solar@openwall.com>
+Spider Boardman <spider@orb.nashua.nh.us>
+Spiros Denaxas <s.denaxas@gmail.com>
+Sreeji K Das <sreeji_k@yahoo.com>
+Stanislaw Pusep <stas@sysd.org>
+Stas Bekman <stas@stason.org>
+Stefan Seifert <nine@detonation.org>
+Steffen Müller <smueller@cpan.org>
+Steffen Schwigon <ss5@renormalist.net>
+Steffen Ullrich <coyote.frank@gmx.net>
+Stepan Kasal <skasal@redhat.com>
+Stephanie Beals <bealzy@us.ibm.com>
+Stephen Bennett <sbp@exherbo.com>
+Stephen Clouse <stephenc@theiqgroup.com>
+Stephen McCamant <smcc@mit.edu>
+Stephen O. Lidie <lusol@turkey.cc.Lehigh.EDU>
+Stephen Oberholtzer <oliverklozoff@gmail.com>
+Stephen P. Potter <spp@ds.net>
+Stephen Zander <gibreel@pobox.com>
+Stevan Little <stevan@cpan.org>
+Steve A Fink <sfink@cs.berkeley.edu>
+Steve Grazzini <grazz@pobox.com>
+Steve Hay <steve.m.hay@googlemail.com>
+Steve Kelem <steve.kelem@xilinx.com>
+Steve McDougall <swmcd@world.std.com>
+Steve Nielsen <spn@enteract.com>
Steve Pearlmutter
-Steve Peters <steve@fisharerojo.org>
-Steve Purkis <Steve.Purkis@multimap.com>
+Steve Peters <steve@fisharerojo.org>
+Steve Purkis <Steve.Purkis@multimap.com>
Steve Vinoski
-Steven Hirsch <hirschs@btv.ibm.com>
-Steven Humphrey <catchperl@33k.co.uk>
-Steven Knight <knight@theopera.baldmt.citilink.com>
-Steven Morlock <newspost@morlock.net>
-Steven N. Hirsch <hirschs@stargate.btv.ibm.com>
-Steven Parkes <parkes@sierravista.com>
-Steven Schubiger <schubiger@cpan.org>
-Stian Seeberg <sseeberg@nimsoft.no>
-Sullivan Beck <sbeck@cpan.org>
-Sven Strickroth <sven.strickroth@tu-clausthal.de>
-Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
-syber <syber@crazypanda.ru>
-SynaptiCAD, Inc. <sales@syncad.com>
-Tadeusz Sośnierz <tadeusz.sosnierz@onet.pl>
-Takis Psarogiannakopoulos <takis@xfree86.org>
+Steven Hirsch <hirschs@btv.ibm.com>
+Steven Humphrey <catchperl@33k.co.uk>
+Steven Knight <knight@theopera.baldmt.citilink.com>
+Steven Morlock <newspost@morlock.net>
+Steven N. Hirsch <hirschs@stargate.btv.ibm.com>
+Steven Parkes <parkes@sierravista.com>
+Steven Schubiger <schubiger@cpan.org>
+Stian Seeberg <sseeberg@nimsoft.no>
+Stéphane Payrard <stef@mongueurs.net>
+Sullivan Beck <sbeck@cpan.org>
+Sven Strickroth <sven.strickroth@tu-clausthal.de>
+Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
+Svyatoslav <razmyslov@viva64.com>
+syber <syber@crazypanda.ru>
+SynaptiCAD, Inc. <sales@syncad.com>
+Sébastien Aperghis-Tramoni <sebastien@aperghis.net>
+Sérgio Durigan Júnior <sergiodj@linux.vnet.ibm.com>
+Tadeusz Sośnierz <tadeusz.sosnierz@onet.pl>
+Takis Psarogiannakopoulos <takis@xfree86.org>
Taro KAWAGISHI
-Tassilo von Parseval <tassilo.parseval@post.rwth-aachen.de>
-Tatsuhiko Miyagawa <miyagawa@bulknews.net>
-Ted Ashton <ashted@southern.edu>
-Ted Law <tedlaw@cibcwg.com>
-Tels <nospam-abuse@bloodgate.com>
-Teun Burgers <burgers@ecn.nl>
-Thad Floryan <thad@thadlabs.com>
-Theo Buehler <theo@math.ethz.ch>
-Thomas Bowditch <bowditch@inmet.com>
-Thomas Conté <tom@fr.uu.net>
-Thomas Dorner <Thomas.Dorner@start.de>
+Tassilo von Parseval <tassilo.parseval@post.rwth-aachen.de>
+Tatsuhiko Miyagawa <miyagawa@bulknews.net>
+Ted Ashton <ashted@southern.edu>
+Ted Law <tedlaw@cibcwg.com>
+Tels <nospam-abuse@bloodgate.com>
+Teun Burgers <burgers@ecn.nl>
+Thad Floryan <thad@thadlabs.com>
+Theo Buehler <theo@math.ethz.ch>
+Thibault Duponchelle <thibault.duponchelle@gmail.com>
+Thomas Bowditch <bowditch@inmet.com>
+Thomas Conté <tom@fr.uu.net>
+Thomas Dorner <Thomas.Dorner@start.de>
Thomas Kofler
Thomas König
-Thomas Pfau <pfau@nbpfaus.net>
-Thomas Sibley <tsibley@cpan.org>
-Thomas Wegner <wegner_thomas@yahoo.com>
-Thorsten Glaser <tg@mirbsd.org>
-Tim Adye <T.J.Adye@rl.ac.uk>
-Tim Ayers <tayers@bridge.com>
-Tim Bunce <Tim.Bunce@pobox.com>
-Tim Conrow <tim@spindrift.srl.caltech.edu>
-Tim Freeman <tfreeman@infoseek.com>
-Tim Jenness <tjenness@cpan.org>
-Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>
-Tim Sweetman <tim@aldigital.co.uk>
-Tim Witham <twitham@pcocd2.intel.com>
-Timothe Litt <litt@acm.org>
-Timur I. Bakeyev <bsdi@listserv.bat.ru>
-Tina Müller <cpan2@tinita.de>
-Tkil <tkil@reptile.scrye.com>
-Tobias Leich <email@froggs.de>
-Toby Inkster <mail@tobyinkster.co.uk>
-Todd C. Miller <Todd.Miller@courtesan.com>
-Todd Rinaldo <toddr@cpan.org>
-Todd T. Fries <todd@fries.int.mrleng.com>
-Todd Vierling <tv@duh.org>
-Tokuhiro Matsuno <tokuhirom@gmail.com>
-Tom Bates <tom_bates@att.net>
-Tom Brown <thecap@peach.ece.utexas.edu>
-Tom Christiansen <tchrist@perl.com>
+Thomas Pfau <pfau@nbpfaus.net>
+Thomas Sibley <tsibley@cpan.org>
+Thomas Wegner <wegner_thomas@yahoo.com>
+Thorsten Glaser <tg@mirbsd.org>
+Tim Adye <T.J.Adye@rl.ac.uk>
+Tim Ayers <tayers@bridge.com>
+Tim Bunce <tim.bunce@pobox.com>
+Tim Conrow <tim@spindrift.srl.caltech.edu>
+Tim Freeman <tfreeman@infoseek.com>
+Tim Jenness <tjenness@cpan.org>
+Tim Mooney <mooney@dogbert.cc.ndsu.NoDak.edu>
+Tim Sweetman <tim@aldigital.co.uk>
+Tim Witham <twitham@pcocd2.intel.com>
+Timothe Litt <litt@acm.org>
+Timur I. Bakeyev <bsdi@listserv.bat.ru>
+Tina Müller <cpan2@tinita.de>
+Tkil <tkil@reptile.scrye.com>
+Tobias Leich <email@froggs.de>
+Toby Inkster <mail@tobyinkster.co.uk>
+Todd C. Miller <Todd.Miller@courtesan.com>
+Todd Rinaldo <toddr@cpan.org>
+Todd T. Fries <todd@fries.int.mrleng.com>
+Todd Vierling <tv@duh.org>
+Tokuhiro Matsuno <tokuhirom@gmail.com>
+Tom Bates <tom_bates@att.net>
+Tom Brown <thecap@peach.ece.utexas.edu>
+Tom Christiansen <tchrist@perl.com>
Tom Dinger
-Tom Horsley <Tom.Horsley@mail.ccur.com>
-Tom Hughes <tom@compton.nu>
-Tom Hukins <tom@eborcom.com>
-Tom Phoenix <rootbeer@teleport.com>
-Tom Spindler <dogcow@isi.net>
-Tom Wyant <wyant@cpan.org>
-Tomasz Konojacki <me@xenu.pl>
-Tomoyuki Sadahiro <BQW10602@nifty.com>
-Ton Hospel <cpan@ton.iguana.be>
-Tony Bowden <tony@kasei.com>
+Tom Horsley <Tom.Horsley@mail.ccur.com>
+Tom Hughes <tom@compton.nu>
+Tom Hukins <tom@eborcom.com>
+Tom Phoenix <rootbeer@teleport.com>
+Tom Spindler <dogcow@isi.net>
+Tom Wyant <wyant@cpan.org>
+Tomasz Konojacki <me@xenu.pl>
+Tomoyuki Sadahiro <BQW10602@nifty.com>
+Ton Hospel <cpan@ton.iguana.be>
+Tony Bowden <tony@kasei.com>
Tony Camas
-Tony Cook <tony@develop-help.com>
-Tony Sanders <sanders@bsdi.com>
-Tor Lillqvist <tml@hemuli.tte.vtt.fi>
-Torsten Foertsch <torsten.foertsch@gmx.net>
-Torsten Schönfeld <kaffeetisch@gmx.de>
-Trevor Blackwell <tlb@viaweb.com>
-Tsutomu IKEGAMI <t-ikegami@aist.go.jp>
-Tuomas J. Lukka <tjl@lukka.student.harvard.edu>
-Tye McQueen <tye@metronet.com>
-Ulrich Habel <rhaen@NetBSD.org>
-Ulrich Kunitz <kunitz@mai-koeln.com>
-Ulrich Pfeifer <pfeifer@wait.de>
-Unicode Consortium <unicode.org>
-Vadim Konovalov <vkonovalov@lucent.com>
-Valeriy E. Ushakov <uwe@ptc.spbu.ru>
-Vernon Lyon <vlyon@cpan.org>
-Victor Adam <victor@drawall.cc>
-Victor Efimov <victor@vsespb.ru>
-Viktor Turskyi <koorchik@gmail.com>
-Ville Skyttä <scop@cs132170.pp.htv.fi>
-Vincent Pit <perl@profvince.com>
-Vishal Bhatia <vishal@deja.com>
-Vitali Peil <vitali.peil@uni-bielefeld.de>
-Vlad Harchev <hvv@hippo.ru>
-Vladimir Alexiev <vladimir@cs.ualberta.ca>
-Vladimir Marek <vlmarek@volny.cz>
-Vladimir Timofeev <vovkasm@gmail.com>
-Volker Schatz <perldoc@volkerschatz.com>
-W. Geoffrey Rommel <grommel@sears.com>
-W. Phillip Moore <wpm@ms.com>
-Wallace Reis <wreis@cpan.org>
-Walt Mankowski <waltman@pobox.com>
-Walter Briscoe <w.briscoe@ponl.com>
-Warren Hyde <whyde@pezz.sps.mot.com>
-Warren Jones <wjones@tc.fluke.com>
-Wayne Berke <berke@panix.com>
-Wayne Scott <wscott@ichips.intel.com>
-Wayne Thompson <Wayne.Thompson@Ebay.sun.com>
-Wilfredo Sánchez <wsanchez@mit.edu>
-William J. Middleton <William.Middleton@oslo.mobil.telenor.no>
-William Mann <wmann@avici.com>
-William Middleton <wmiddlet@adobe.com>
-William R Ward <hermit@BayView.COM>
-William Setzer <William_Setzer@ncsu.edu>
-William Williams <biwillia@cisco.com>
-William Yardley <perlbug@veggiechinese.net>
-Winfried König <win@in.rhein-main.de>
-Wolfgang Laun <Wolfgang.Laun@alcatel.at>
-Wolfram Humann <w.c.humann@arcor.de>
-Xavier Noria <fxn@hashref.com>
-YAMASHINA Hio <hio@ymir.co.jp>
-Yaroslav Kuzmin <ykuzmin@rocketsoftware.com>
+Tony Cook <tony@develop-help.com>
+Tony Sanders <sanders@bsdi.com>
+Tor Lillqvist <tml@hemuli.tte.vtt.fi>
+Torsten Foertsch <torsten.foertsch@gmx.net>
+Torsten Schönfeld <kaffeetisch@gmx.de>
+Trevor Blackwell <tlb@viaweb.com>
+Tsutomu IKEGAMI <t-ikegami@aist.go.jp>
+Tuomas J. Lukka <tjl@lukka.student.harvard.edu>
+Tye McQueen <tye@metronet.com>
+Ulrich Habel <rhaen@NetBSD.org>
+Ulrich Kunitz <kunitz@mai-koeln.com>
+Ulrich Pfeifer <pfeifer@wait.de>
+Unicode Consortium <unicode.org>
+Vadim Konovalov <vkonovalov@lucent.com>
+Valeriy E. Ushakov <uwe@ptc.spbu.ru>
+VanL <van@scratch.space>
+Vernon Lyon <vlyon@cpan.org>
+Vickenty Fesunov <kent@setattr.net>
+Victor Adam <victor@drawall.cc>
+Victor Efimov <victor@vsespb.ru>
+Viktor Turskyi <koorchik@gmail.com>
+Ville Skyttä <scop@cs132170.pp.htv.fi>
+Vincent Pit <perl@profvince.com>
+Vishal Bhatia <vishal@deja.com>
+Vitali Peil <vitali.peil@uni-bielefeld.de>
+Vlad Harchev <hvv@hippo.ru>
+Vladimir Alexiev <vladimir@cs.ualberta.ca>
+Vladimir Marek <vlmarek@volny.cz>
+Vladimir Timofeev <vovkasm@gmail.com>
+Volker Schatz <perldoc@volkerschatz.com>
+W. Geoffrey Rommel <grommel@sears.com>
+W. Phillip Moore <wpm@ms.com>
+Wallace Reis <wreis@cpan.org>
+Walt Mankowski <waltman@pobox.com>
+Walter Briscoe <w.briscoe@ponl.com>
+Warren Hyde <whyde@pezz.sps.mot.com>
+Warren Jones <wjones@tc.fluke.com>
+Wayne Berke <berke@panix.com>
+Wayne Scott <wscott@ichips.intel.com>
+Wayne Thompson <Wayne.Thompson@Ebay.sun.com>
+Wilfredo Sánchez <wsanchez@mit.edu>
+William J. Middleton <William.Middleton@oslo.mobil.telenor.no>
+William Mann <wmann@avici.com>
+William Middleton <wmiddlet@adobe.com>
+William R Ward <hermit@BayView.COM>
+William Setzer <William_Setzer@ncsu.edu>
+William Williams <biwillia@cisco.com>
+William Yardley <perlbug@veggiechinese.net>
+Winfried König <win@in.rhein-main.de>
+Wolfgang Laun <Wolfgang.Laun@alcatel.at>
+Wolfram Humann <w.c.humann@arcor.de>
+Xavier Noria <fxn@hashref.com>
+YAMASHINA Hio <hio@ymir.co.jp>
+Yaroslav Kuzmin <ykuzmin@rocketsoftware.com>
Yary Hluchan
-Yasushi Nakajima <sey@jkc.co.jp>
-Yitzchak Scott-Thoennes <sthoenna@efn.org>
-Yutaka OIWA <oiwa@is.s.u-tokyo.ac.jp>
+Yasushi Nakajima <sey@jkc.co.jp>
+Yitzchak Scott-Thoennes <sthoenna@efn.org>
+Yutaka OIWA <oiwa@is.s.u-tokyo.ac.jp>
Yutaka OKAIE
Yutao Feng
-Yuval Kogman <nothingmuch@woobling.org>
-Yves Orton <demerphq@gmail.com>
-Zachary Miller <zcmiller@simon.er.usgs.gov>
-Zachary Storer <zacts.3.14159@gmail.com>
-Zak B. Elep <zakame@zakame.net>
-Zbynek Vyskovsky <kvr@centrum.cz>
-Zefram <zefram@fysh.org>
-Zsbán Ambrus <ambrus@math.bme.hu>
-Ævar Arnfjörð Bjarmason <avar@cpan.org>
+Yuval Kogman <nothingmuch@woobling.org>
+Yves Orton <demerphq@gmail.com>
+Zachary Miller <zcmiller@simon.er.usgs.gov>
+Zachary Storer <zacts.3.14159@gmail.com>
+Zak B. Elep <zakame@zakame.net>
+Zbynek Vyskovsky <kvr@centrum.cz>
+Zefram <zefram@fysh.org>
+Zsbán Ambrus <ambrus@math.bme.hu>
+Ævar Arnfjörð Bjarmason <avar@cpan.org>
diff --git a/gnu/usr.bin/perl/Configure b/gnu/usr.bin/perl/Configure
index 0ea2897d863..fbc225822a4 100644
--- a/gnu/usr.bin/perl/Configure
+++ b/gnu/usr.bin/perl/Configure
@@ -28,7 +28,7 @@
# Porting/pumpkin.pod.
# Generated using [metaconfig 3.5 PL0]
-# (with additional metaconfig patches by perlbug@perl.org)
+# with additional metaconfig patches from https://github.com/Perl/metaconfig
cat >c1$$ <<EOF
ARGGGHHHH!!!!!
@@ -382,6 +382,7 @@ asctime_r_proto=''
d_asctime_r=''
d_asinh=''
d_atanh=''
+d_attribute_always_inline=''
d_attribute_deprecated=''
d_attribute_format=''
d_attribute_malloc=''
@@ -657,6 +658,7 @@ d_lstat=''
d_madvise=''
d_malloc_good_size=''
d_malloc_size=''
+d_malloc_usable_size=''
d_mblen=''
d_mbrlen=''
d_mbrtowc=''
@@ -831,6 +833,7 @@ d_scm_rights=''
d_sin6_scope_id=''
d_sockaddr_in6=''
d_sockaddr_sa_len=''
+d_sockaddr_storage=''
d_socket=''
d_sockpair=''
sockethdr=''
@@ -932,6 +935,7 @@ d_voidsig=''
signal_t=''
d_wait4=''
d_waitpid=''
+d_wcrtomb=''
d_wcscmp=''
d_wcstombs=''
d_wcsxfrm=''
@@ -1534,7 +1538,7 @@ case "$sh" in
$me: Fatal Error: I can't find a Bourne Shell anywhere.
Usually it's in /bin/sh. How did you even get this far?
-Please contact me (Perl Maintainers) at https://github.com/Perl/perl5/issues
+Please report this issue at https://github.com/Perl/perl5/issues
and we'll try to straighten this all out.
EOM
exit 1
@@ -4169,14 +4173,9 @@ EOSC
: determine root of directory hierarchy where package will be installed.
case "$prefix" in
-'')
- dflt=`./loc . /usr/local /usr/local /local /opt /usr`
- ;;
-*?/)
- dflt=`echo "$prefix" | sed 's/.$//'`
+'') dflt=`./loc . /usr/local /usr/local /local /opt /usr`
;;
-*)
- dflt="$prefix"
+*) dflt="$prefix"
;;
esac
$cat <<EOM
@@ -4195,16 +4194,25 @@ rp='Installation prefix to use?'
. ./getfile
oldprefix=''
case "$prefix" in
-'') ;;
-*)
- case "$ans" in
+'') ;;
+*) case "$ans" in
"$prefix") ;;
*) oldprefix="$prefix";;
esac
;;
esac
-prefix="$ans"
-prefixexp="$ansexp"
+
+case "$ans" in
+*?/) prefix=`echo "$ans" | sed 's/.$//'`
+ ;;
+*) prefix="$ans"
+esac
+
+case "$ansexp" in
+*?/) prefixexp=`echo "$ansexp" | sed 's/.$//'`
+ ;;
+*) prefixexp="$ansexp"
+esac
: allow them to override the AFS root
case "$afsroot" in
@@ -5483,25 +5491,6 @@ default|recommended)
eval $checkccflag
;;
esac
- case "$gccversion" in
- 1*) ;;
- 2*) ;;
- ?*) echo " "
- echo "Checking if your compiler accepts -fno-delete-null-pointer-checks" 2>&1
- echo 'int main(void) { return 0; }' > gcctest.c
- if $cc -O2 -fno-delete-null-pointer-checks -o gcctest gcctest.c; then
- echo "Yes, it does." 2>&1
- case "$ccflags" in
- *delete-null-pointer-checks*)
- echo "Leaving current flags $ccflags alone." 2>&1
- ;;
- *) dflt="$dflt -fno-delete-null-pointer-checks" ;;
- esac
- else
- echo "Nope, it doesn't, but that's ok." 2>&1
- fi
- ;;
- esac
# For gcc, adding -pipe speeds up compilations for some, but apparently
# some assemblers can't read from stdin. (It also slows down compilations
# in other cases, but those are apparently rarer these days.) AD 5/2004.
@@ -7275,7 +7264,7 @@ prefixit='case "$3" in
none)
eval "tp=\"\$$2\"";
case "$tp" in
- ""|" ") eval "$1=\"\$$2\"";;
+ ""|" "|none) eval "$1=\"\$$2\"";;
*) eval "$1=";;
esac;;
esac;;
@@ -8129,6 +8118,10 @@ while $test 1 ; do
$define|true|[yY]*)
dflt='y'
;;
+ $undef|false|[nN]*)
+ dflt='n'
+ dflt_dtrace=""
+ ;;
?*)
dflt='y'
dflt_dtrace=$usedtrace
@@ -8565,7 +8558,7 @@ EOM
if $test "X$sysroot" != X; then
case "$gccversion" in
'') ;;
- *) dflt="$dflt --sysroot $sysroot" ;;
+ *) dflt="$dflt --sysroot=$sysroot" ;;
esac
fi
@@ -9626,16 +9619,12 @@ prefixvar=sitescript
set backtrace d_backtrace
eval $inlibc
-: add flags if using c backtrace
+: Check if C backtrace is actually supported.
case "$usecbacktrace" in
"") usecbacktrace=$undef ;;
[yY]*|true|$define)
case "$d_backtrace" in
[yY]*|true|$define)
- case " $ccflags " in
- *" -DUSE_C_BACKTRACE "*) ;; # Already there.
- *) ccflags="$ccflags -DUSE_C_BACKTRACE -g" ;;
- esac
;;
*)
echo "This system does not support backtrace" >&4
@@ -10397,15 +10386,15 @@ esac
$cat >>try.c <<EOP
#ifdef TRY_gconvert
#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
-char *myname = "gconvert";
+const char *myname = "gconvert";
#endif
#ifdef TRY_gcvt
#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
-char *myname = "gcvt";
+const char *myname = "gcvt";
#endif
#ifdef TRY_qgcvt
#define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
-char *myname = "qgcvt";
+const char *myname = "qgcvt";
#define DOUBLETYPE long double
#endif
#ifdef TRY_sprintf
@@ -10418,7 +10407,7 @@ char *myname = "qgcvt";
#else
#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
#endif
-char *myname = "sprintf";
+const char *myname = "sprintf";
#endif
#ifndef DOUBLETYPE
@@ -10437,7 +10426,7 @@ char *myname = "sprintf";
#endif
#include <string.h>
-int checkit(char *expect, char *got)
+void checkit(const char *expect, char *got)
{
if (strcmp(expect, got)) {
printf("%s oddity: Expected %s, got %s\n",
@@ -10586,6 +10575,7 @@ for xxx_convert in $xxx_list; do
fi
else
echo "$xxx_convert NOT found." >&4
+ xxx_convert=''
fi
done
@@ -11263,6 +11253,34 @@ set d_attribute_warn_unused_result
eval $setvar
$rm -f attrib*
+: Look for GCC-style attribute always_inline
+case "$d_attribute_always_inline" in
+'')
+echo " "
+echo "Checking whether your compiler can handle __attribute__((always_inline)) ..." >&4
+$cat >attrib.c <<'EOCP'
+#include <stdio.h>
+static __inline__ __attribute__((always_inline)) int I_will_always_be_inlined(void);
+EOCP
+if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
+ if $contains 'warning' attrib.out >/dev/null 2>&1; then
+ echo "Your C compiler doesn't support __attribute__((always_inline))."
+ val="$undef"
+ else
+ echo "Your C compiler supports __attribute__((always_inline))."
+ val="$define"
+ fi
+else
+ echo "Your C compiler doesn't seem to understand __attribute__ at all."
+ val="$undef"
+fi
+;;
+*) val="$d_attribute_always_inline" ;;
+esac
+set d_attribute_always_inline
+eval $setvar
+$rm -f attrib*
+
: see if getpgrp exists
set getpgrp d_getpgrp
eval $inlibc
@@ -11272,6 +11290,7 @@ case "$d_getpgrp" in
echo " "
echo "Checking to see which flavor of getpgrp is in use..."
$cat >try.c <<EOP
+#include <stdio.h>
#$i_unistd I_UNISTD
#include <sys/types.h>
#ifdef I_UNISTD
@@ -11338,6 +11357,7 @@ case "$d_setpgrp" in
echo " "
echo "Checking to see which flavor of setpgrp is in use..."
$cat >try.c <<EOP
+#include <stdio.h>
#$i_unistd I_UNISTD
#include <sys/types.h>
#ifdef I_UNISTD
@@ -11920,7 +11940,6 @@ set socketpair d_sockpair
eval $inlibc
-echo " "
echo "Checking the availability sa_len in the sock struct ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
@@ -11937,7 +11956,6 @@ fi
set d_sockaddr_sa_len; eval $setvar
$rm_try
-echo " "
echo "Checking the availability struct sockaddr_in6 ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
@@ -11955,7 +11973,23 @@ fi
set d_sockaddr_in6; eval $setvar
$rm_try
-echo " "
+echo "Checking the availability struct sockaddr_storage ..." >&4
+$cat >try.c <<EOF
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+int main() {
+struct sockaddr_storage sastor;
+return (sastor.ss_family);
+}
+EOF
+val="$undef"
+set try; if eval $compile; then
+ val="$define"
+fi
+set d_sockaddr_storage; eval $setvar
+$rm_try
+
echo "Checking the availability sin6_scope_id in struct sockaddr_in6 ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
@@ -11973,7 +12007,6 @@ fi
set d_sin6_scope_id; eval $setvar
$rm_try
-echo " "
echo "Checking the availability struct ip_mreq ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
@@ -11991,7 +12024,6 @@ fi
set d_ip_mreq; eval $setvar
$rm_try
-echo " "
echo "Checking the availability struct ip_mreq_source ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
@@ -12009,7 +12041,6 @@ fi
set d_ip_mreq_source; eval $setvar
$rm_try
-echo " "
echo "Checking the availability struct ipv6_mreq ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
@@ -12027,7 +12058,6 @@ fi
set d_ipv6_mreq; eval $setvar
$rm_try
-echo " "
echo "Checking the availability struct ipv6_mreq_source ..." >&4
$cat >try.c <<EOF
#include <sys/types.h>
@@ -12045,7 +12075,6 @@ fi
set d_ipv6_mreq_source; eval $setvar
$rm_try
-echo " "
echo "Checking the availability of certain socket constants..." >&4
for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
@@ -14098,9 +14127,11 @@ echo " "
echo "Checking if you have a working futimes()" >&4
$cat >try.c <<EOCP
#include <stdio.h>
+#include <stdlib.h>
#include <sys/time.h>
#include <errno.h>
#include <fcntl.h>
+#include <stdlib.h>
int main ()
{
@@ -15793,7 +15824,7 @@ eval $inlibc
echo "Checking to see if you have isless..." >&4
$cat >try.c <<EOCP
#include <math.h>
-int main() { return isless(0.0); }
+int main() { return isless(2.0, 1.0); }
EOCP
set try
if eval $compile; then
@@ -15886,27 +15917,24 @@ esac
: see if lchown exists
echo " "
-$cat > try.c <<'EOCP'
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char lchown(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char lchown();
-int main() {
- /* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_lchown) || defined (__stub___lchown)
-choke me
-#else
-lchown();
+$cat > try.c <<EOCP
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#$i_unistd I_UNISTD
+#ifdef I_UNISTD
+# include <unistd.h>
#endif
-; return 0; }
+int main(int argc, char *argv[])
+{
+ if (lchown("./try.c", -1, getgid()) == -1) {
+ exit(EXIT_FAILURE);
+ }
+ exit(EXIT_SUCCESS);
+}
EOCP
set try
-if eval $compile; then
+if eval $compile && ./try; then
$echo "lchown() found." >&4
val="$define"
else
@@ -15915,6 +15943,7 @@ else
fi
set d_lchown
eval $setvar
+$rm_try
: See if number of significant digits in a double precision number is known
echo " "
@@ -16159,6 +16188,10 @@ eval $inlibc
set malloc_good_size d_malloc_good_size
eval $inlibc
+: see if malloc_usable_size exists
+set malloc_usable_size d_malloc_usable_size
+eval $inlibc
+
: see if mblen exists
set mblen d_mblen
eval $inlibc
@@ -19085,9 +19118,9 @@ EOM
#define strtoll _strtoll
#endif
#include <stdio.h>
-extern long long int strtoll(char *s, char **, int);
+#include <stdlib.h>
static int bad = 0;
-int check(char *s, long long ell, int een) {
+void check(const char *s, long long ell, int een) {
long long gll;
errno = 0;
gll = strtoll(s, 0, 10);
@@ -19140,11 +19173,11 @@ case "$d_strtoul" in
Checking whether your strtoul() works okay...
EOM
$cat >try.c <<'EOCP'
+#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
-extern unsigned long int strtoul(char *s, char **, int);
static int bad = 0;
-void check(char *s, unsigned long eul, int een) {
+void check(const char *s, unsigned long eul, int een) {
unsigned long gul;
errno = 0;
gul = strtoul(s, 0, 10);
@@ -19220,14 +19253,14 @@ case "$d_longlong-$d_strtoull" in
Checking whether your strtoull() works okay...
EOM
$cat >try.c <<'EOCP'
+#include <stdlib.h>
#include <errno.h>
#ifdef __hpux
#define strtoull __strtoull
#endif
#include <stdio.h>
-extern unsigned long long int strtoull(char *s, char **, int);
static int bad = 0;
-int check(char *s, long long eull, int een) {
+void check(const char *s, long long eull, int een) {
long long gull;
errno = 0;
gull = strtoull(s, 0, 10);
@@ -19277,11 +19310,11 @@ case "$d_strtouq" in
Checking whether your strtouq() works okay...
EOM
$cat >try.c <<'EOCP'
+#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
-extern unsigned long long int strtouq(char *s, char **, int);
static int bad = 0;
-void check(char *s, unsigned long long eull, int een) {
+void check(const char *s, unsigned long long eull, int een) {
unsigned long long gull;
errno = 0;
gull = strtouq(s, 0, 10);
@@ -19902,6 +19935,10 @@ eval $inlibc
set waitpid d_waitpid
eval $inlibc
+: see if wcrtomb exists
+set wcrtomb d_wcrtomb
+eval $inlibc
+
: look for wcscmp
echo " "
$cat >try.c <<'EOCP'
@@ -20593,9 +20630,9 @@ case "$ccflags" in
;;
esac
-randfunc=drand48
-drand01="drand48()"
-seedfunc="srand48"
+randfunc=Perl_drand48
+drand01="Perl_drand48()"
+seedfunc="Perl_drand48_init"
randbits=48
randseedtype=U32
@@ -21440,7 +21477,9 @@ int
main(int ac, char **av)
{
signal(SIGSEGV, exit);
- signal(SIGBUS, exit);
+#ifdef SIGBUS
+ signal(SIGBUS, exit);
+#endif
myprintf("%s%cs all right, then\n", "that", '\'');
exit(0);
@@ -23009,7 +23048,7 @@ M68000 m68k m88100 m88k M88KBCS_TARGET MACH machine MachTen
MATH_HAS_NO_SIDE_EFFECTS mc300 mc500 mc68000 mc68010 mc68020
mc68030 mc68040 mc68060 mc68k mc68k32 mc700 mc88000 mc88100
merlin mert MiNT mips MIPSEB MIPSEL MIPS_FPSET MIPS_ISA MIPS_SIM
-MIPS_SZINT MIPS_SZLONG MIPS_SZPTR MODERN_C motorola mpeix MSDOS
+MIPS_SZINT MIPS_SZLONG MIPS_SZPTR MODERN_C motorola MSDOS
MTXINU MULTIMAX MVS mvs M_AMD64 M_ARM M_ARMT M_COFF M_I186 M_I286
M_I386 M_I8086 M_I86 M_I86SM M_IA64 M_IX86 M_PPC M_SYS3 M_SYS5
M_SYSIII M_SYSV M_UNIX M_X86 M_XENIX
@@ -23447,7 +23486,6 @@ xs_extensions=''
find_extensions='
for xxx in *; do
case "$xxx" in
- CVS) ;;
DynaLoader|dynaload) ;;
*)
this_ext=`echo "$xxx" | $sed -e s/-/\\\//g`;
@@ -23685,8 +23723,6 @@ esac
nonxs_ext=''
for xxx in $nonxs_extensions ; do
case "$xxx" in
- CVS|RCS|SCCS|.svn)
- ;;
VMS*)
;;
*) nonxs_ext="$nonxs_ext $xxx"
@@ -24056,6 +24092,7 @@ d_asinh='$d_asinh'
d_atanh='$d_atanh'
d_atolf='$d_atolf'
d_atoll='$d_atoll'
+d_attribute_always_inline='$d_attribute_always_inline'
d_attribute_deprecated='$d_attribute_deprecated'
d_attribute_format='$d_attribute_format'
d_attribute_malloc='$d_attribute_malloc'
@@ -24313,6 +24350,7 @@ d_lstat='$d_lstat'
d_madvise='$d_madvise'
d_malloc_good_size='$d_malloc_good_size'
d_malloc_size='$d_malloc_size'
+d_malloc_usable_size='$d_malloc_usable_size'
d_mblen='$d_mblen'
d_mbrlen='$d_mbrlen'
d_mbrtowc='$d_mbrtowc'
@@ -24480,6 +24518,7 @@ d_sitearch='$d_sitearch'
d_snprintf='$d_snprintf'
d_sockaddr_in6='$d_sockaddr_in6'
d_sockaddr_sa_len='$d_sockaddr_sa_len'
+d_sockaddr_storage='$d_sockaddr_storage'
d_sockatmark='$d_sockatmark'
d_sockatmarkproto='$d_sockatmarkproto'
d_socket='$d_socket'
@@ -24572,6 +24611,7 @@ d_voidtty='$d_voidtty'
d_vsnprintf='$d_vsnprintf'
d_wait4='$d_wait4'
d_waitpid='$d_waitpid'
+d_wcrtomb='$d_wcrtomb'
d_wcscmp='$d_wcscmp'
d_wcstombs='$d_wcstombs'
d_wcsxfrm='$d_wcsxfrm'
diff --git a/gnu/usr.bin/perl/Cross/config.sh-arm-linux b/gnu/usr.bin/perl/Cross/config.sh-arm-linux
index a6e585259d4..d97a69809b1 100644
--- a/gnu/usr.bin/perl/Cross/config.sh-arm-linux
+++ b/gnu/usr.bin/perl/Cross/config.sh-arm-linux
@@ -32,11 +32,11 @@ alignbytes='4'
aphostname='/bin/hostname'
api_revision='5'
api_subversion='0'
-api_version='30'
-api_versionstring='5.30.0'
+api_version='32'
+api_versionstring='5.32.0'
ar='ar'
-archlib='/usr/lib/perl5/5.30.3/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.30.3/armv4l-linux'
+archlib='/usr/lib/perl5/5.32.1/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.32.1/armv4l-linux'
archname64=''
archname='armv4l-linux'
archobjs=''
@@ -55,7 +55,7 @@ castflags='0'
cat='cat'
cc='cc'
cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.30.3/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.32.1/armv4l-linux/CORE'
ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccname='arm-linux-gcc'
@@ -116,6 +116,7 @@ d_asinh='undef'
d_atanh='undef'
d_atolf='undef'
d_atoll='define'
+d_attribute_always_inline='undef'
d_attribute_deprecated='undef'
d_attribute_format='undef'
d_attribute_malloc='undef'
@@ -537,6 +538,7 @@ d_sitearch='define'
d_snprintf='undef'
d_sockaddr_in6='undef'
d_sockaddr_sa_len='undef'
+d_sockaddr_storage='undef'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='define'
@@ -629,6 +631,7 @@ d_voidtty=''
d_vsnprintf='define'
d_wait4='define'
d_waitpid='define'
+d_wcrtomb='undef'
d_wcscmp='undef'
d_wcstombs='define'
d_wcsxfrm='undef'
@@ -821,7 +824,7 @@ inc_version_list=' '
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.30.3/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.32.1/armv4l-linux'
installbin='./install_me_here/usr/bin'
installhtml1dir=''
installhtml3dir=''
@@ -829,13 +832,13 @@ installman1dir='./install_me_here/usr/share/man/man1'
installman3dir='./install_me_here/usr/share/man/man3'
installprefix='./install_me_here/usr'
installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.30.3'
+installprivlib='./install_me_here/usr/lib/perl5/5.32.1'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.30.3/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.32.1/armv4l-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.30.3'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.32.1'
installsiteman1dir='./install_me_here/usr/share/man/man1'
installsiteman3dir='./install_me_here/usr/share/man/man3'
installsitescript='./install_me_here/usr/bin'
@@ -969,8 +972,8 @@ pmake=''
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/usr/lib/perl5/5.30.3'
-privlibexp='/usr/lib/perl5/5.30.3'
+privlib='/usr/lib/perl5/5.32.1'
+privlibexp='/usr/lib/perl5/5.32.1'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
@@ -1035,17 +1038,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
sig_size='68'
signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.30.3/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.30.3/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.32.1/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.32.1/armv4l-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.30.3'
+sitelib='/usr/lib/perl5/site_perl/5.32.1'
sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.30.3'
+sitelibexp='/usr/lib/perl5/site_perl/5.32.1'
siteman1dir='/usr/share/man/man1'
siteman1direxp='/usr/share/man/man1'
siteman3dir='/usr/share/man/man3'
@@ -1084,7 +1087,7 @@ stdio_stream_array=''
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='3'
+subversion='1'
sysman='/usr/share/man/man1'
tail=''
tar=''
@@ -1175,8 +1178,8 @@ vendorprefix=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.30.3'
-version_patchlevel_string='version 30 subversion 3'
+version='5.32.1'
+version_patchlevel_string='version 32 subversion 1'
versiononly='undef'
vi=''
xlibpth='/usr/lib/386 /lib/386'
@@ -1189,10 +1192,10 @@ config_arg0='Configure'
config_args=''
config_argc=0
PERL_REVISION=5
-PERL_VERSION=30
-PERL_SUBVERSION=3
+PERL_VERSION=32
+PERL_SUBVERSION=1
PERL_API_REVISION=5
-PERL_API_VERSION=30
+PERL_API_VERSION=32
PERL_API_SUBVERSION=0
PERL_PATCHLEVEL=
PERL_CONFIG_SH=true
diff --git a/gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770 b/gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770
index f4d3aa9883c..3ad709f938f 100644
--- a/gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770
+++ b/gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770
@@ -32,11 +32,11 @@ alignbytes='4'
aphostname='/bin/hostname'
api_revision='5'
api_subversion='0'
-api_version='30'
-api_versionstring='5.30.0'
+api_version='32'
+api_versionstring='5.32.0'
ar='ar'
-archlib='/usr/lib/perl5/5.30.3/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.30.3/armv4l-linux'
+archlib='/usr/lib/perl5/5.32.1/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.32.1/armv4l-linux'
archname64=''
archname='armv4l-linux'
archobjs=''
@@ -54,7 +54,7 @@ castflags='0'
cat='cat'
cc='arm-none-linux-gnueabi-gcc'
cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.30.3/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.32.1/armv4l-linux/CORE'
ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
ccname='arm-linux-gcc'
@@ -115,6 +115,7 @@ d_asinh='undef'
d_atanh='undef'
d_atolf='undef'
d_atoll='define'
+d_attribute_always_inline='undef'
d_attribute_deprecated='undef'
d_attribute_format='undef'
d_attribute_malloc='undef'
@@ -536,6 +537,7 @@ d_sitearch='define'
d_snprintf='undef'
d_sockaddr_in6='undef'
d_sockaddr_sa_len='undef'
+d_sockaddr_storage='undef'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='define'
@@ -628,6 +630,7 @@ d_voidtty=''
d_vsnprintf='define'
d_wait4='define'
d_waitpid='define'
+d_wcrtomb='undef'
d_wcscmp='undef'
d_wcstombs='define'
d_wcsxfrm='undef'
@@ -819,7 +822,7 @@ inc_version_list=' '
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.30.3/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.32.1/armv4l-linux'
installbin='./install_me_here/usr/bin'
installhtml1dir=''
installhtml3dir=''
@@ -827,13 +830,13 @@ installman1dir='./install_me_here/usr/share/man/man1'
installman3dir='./install_me_here/usr/share/man/man3'
installprefix='./install_me_here/usr'
installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.30.3'
+installprivlib='./install_me_here/usr/lib/perl5/5.32.1'
installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.30.3/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.32.1/armv4l-linux'
installsitebin='./install_me_here/usr/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.30.3'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.32.1'
installsiteman1dir='./install_me_here/usr/share/man/man1'
installsiteman3dir='./install_me_here/usr/share/man/man3'
installsitescript='./install_me_here/usr/bin'
@@ -967,8 +970,8 @@ pmake=''
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/usr/lib/perl5/5.30.3'
-privlibexp='/usr/lib/perl5/5.30.3'
+privlib='/usr/lib/perl5/5.32.1'
+privlibexp='/usr/lib/perl5/5.32.1'
procselfexe='"/proc/self/exe"'
prototype='define'
ptrsize='4'
@@ -1033,17 +1036,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
sig_size='68'
signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.30.3/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.30.3/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.32.1/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.32.1/armv4l-linux'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.30.3'
+sitelib='/usr/lib/perl5/site_perl/5.32.1'
sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.30.3'
+sitelibexp='/usr/lib/perl5/site_perl/5.32.1'
siteman1dir='/usr/share/man/man1'
siteman1direxp='/usr/share/man/man1'
siteman3dir='/usr/share/man/man3'
@@ -1082,7 +1085,7 @@ stdio_stream_array=''
strerror_r_proto='0'
strings='/usr/include/string.h'
submit=''
-subversion='3'
+subversion='1'
sysman='/usr/share/man/man1'
tail=''
tar=''
@@ -1173,8 +1176,8 @@ vendorprefix=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.30.3'
-version_patchlevel_string='version 30 subversion 3'
+version='5.32.1'
+version_patchlevel_string='version 32 subversion 1'
versiononly='undef'
vi=''
xlibpth='/usr/lib/386 /lib/386'
@@ -1187,10 +1190,10 @@ config_arg0='Configure'
config_args=''
config_argc=0
PERL_REVISION=5
-PERL_VERSION=30
-PERL_SUBVERSION=3
+PERL_VERSION=32
+PERL_SUBVERSION=1
PERL_API_REVISION=5
-PERL_API_VERSION=30
+PERL_API_VERSION=32
PERL_API_SUBVERSION=0
PERL_PATCHLEVEL=
PERL_CONFIG_SH=true
diff --git a/gnu/usr.bin/perl/EXTERN.h b/gnu/usr.bin/perl/EXTERN.h
index 558f762a3f1..4406b297521 100644
--- a/gnu/usr.bin/perl/EXTERN.h
+++ b/gnu/usr.bin/perl/EXTERN.h
@@ -21,7 +21,7 @@
# if (defined(WIN32) || defined(__SYMBIAN32__)) && !defined(PERL_STATIC_SYMS)
/* miniperl should not export anything */
-# if defined(PERL_IS_MINIPERL) && !defined(UNDER_CE)
+# if defined(PERL_IS_MINIPERL)
# define EXT extern
# define dEXT
# define EXTCONST extern const
diff --git a/gnu/usr.bin/perl/INSTALL b/gnu/usr.bin/perl/INSTALL
index e3e320ec1d3..76edeec6a21 100644
--- a/gnu/usr.bin/perl/INSTALL
+++ b/gnu/usr.bin/perl/INSTALL
@@ -1,5 +1,5 @@
If you read this file _as_is_, just ignore the funny characters you see.
-It is written in the POD format (see pod/perlpod.pod) which is specially
+It is written in the POD format (see F<pod/perlpod.pod>) which is specially
designed to be readable as is.
=head1 NAME
@@ -10,7 +10,7 @@ INSTALL - Build and Installation guide for perl 5.
First, make sure you have an up-to-date version of Perl. If you
didn't get your Perl source from CPAN, check the latest version at
-http://www.cpan.org/src/. Perl uses a version scheme where even-numbered
+L<https://www.cpan.org/src/>. Perl uses a version scheme where even-numbered
subreleases (like 5.8.x and 5.10.x) are stable maintenance releases and
odd-numbered subreleases (like 5.7.x and 5.9.x) are unstable
development releases. Development releases should not be used in
@@ -28,11 +28,11 @@ the defaults are to run, from a freshly unpacked source tree:
Each of these is explained in further detail below.
-The above commands will install Perl to /usr/local (or some other
-platform-specific directory -- see the appropriate file in hints/.)
+The above commands will install Perl to F</usr/local> (or some other
+platform-specific directory -- see the appropriate file in F<hints/>.)
If that's not okay with you, you can run Configure interactively, by
just typing "sh Configure" (without the -de args). You can also specify
-any prefix location by adding "-Dprefix='/some/dir'" to Configure's args.
+any prefix location by adding C<"-Dprefix='/some/dir'"> to Configure's args.
To explicitly name the perl binary, use the command
"make install PERLNAME=myperl".
@@ -44,20 +44,20 @@ rely on anything more than C89.
These options, and many more, are explained in further detail below.
If you're building perl from a git repository, you should also consult
-the documentation in pod/perlgit.pod for information on that special
+the documentation in F<pod/perlgit.pod> for information on that special
circumstance.
If you have problems, corrections, or questions, please see
L<"Reporting Problems"> below.
For information on what's new in this release, see the
-pod/perldelta.pod file. For more information about how to find more
+F<pod/perldelta.pod> file. For more information about how to find more
specific detail about changes, see the Changes file.
=head1 DESCRIPTION
This document is written in pod format as an easy way to indicate its
-structure. The pod format is described in pod/perlpod.pod, but you can
+structure. The pod format is described in F<pod/perlpod.pod>, but you can
read it as is with any pager or editor. Headings and items are marked
by lines beginning with '='. The other mark-up used is
@@ -73,24 +73,24 @@ proceeding.
In addition to this file, check if there is a README file specific to
your operating system, since it may provide additional or different
instructions for building Perl. If there is a hint file for your
-system (in the hints/ directory) you might also want to read it
+system (in the F<hints/> directory) you might also want to read it
for even more information.
For additional information about porting Perl, see the section on
-L<"Porting information"> below, and look at the files in the Porting/
+L<"Porting information"> below, and look at the files in the F<Porting/>
directory.
=head1 PRELIMINARIES
=head2 Changes and Incompatibilities
-Please see pod/perldelta.pod for a description of the changes and
+Please see F<pod/perldelta.pod> for a description of the changes and
potential incompatibilities introduced with this release. A few of
the most important issues are listed below, but you should refer
-to pod/perldelta.pod for more detailed information.
+to F<pod/perldelta.pod> for more detailed information.
B<WARNING:> This version is not binary compatible with versions of Perl
-earlier than 5.30.0. If you have built extensions (i.e. modules that
+earlier than 5.32.0. If you have built extensions (i.e. modules that
include C code) using an earlier version of Perl, you will need to
rebuild and reinstall those extensions.
@@ -102,7 +102,7 @@ The standard extensions supplied with Perl will be handled automatically.
On a related issue, old modules may possibly be affected by the changes
in the Perl language in the current release. Please see
-pod/perldelta.pod for a description of what's changed. See your
+F<pod/perldelta.pod> for a description of what's changed. See your
installed copy of the perllocal.pod file for a (possibly incomplete)
list of locally installed modules. Also see the L<CPAN> module's
C<autobundle> function for one way to make a "bundle" of your currently
@@ -132,7 +132,7 @@ Configure supports a number of useful options. Run
Configure -h
-to get a listing. See the Porting/Glossary file for a complete list of
+to get a listing. See the F<Porting/Glossary> file for a complete list of
Configure variables you can set and their definitions.
=over 4
@@ -150,32 +150,32 @@ compiler) so that the hints files can set appropriate defaults.
=item Installation prefix
By default, for most systems, perl will be installed in
-/usr/local/{bin, lib, man}. (See L<"Installation Directories">
+F</usr/local/>{F<bin>, F<lib>, F<man>}. (See L<"Installation Directories">
and L<"Coexistence with earlier versions of perl 5"> below for
further details.)
You can specify a different 'prefix' for the default installation
directory when Configure prompts you, or by using the Configure command
-line option -Dprefix='/some/directory', e.g.
+line option C<-Dprefix='/some/directory'>, e.g.
sh Configure -Dprefix=/opt/perl
If your prefix contains the string "perl", then the suggested
directory structure is simplified. For example, if you use
-prefix=/opt/perl, then Configure will suggest /opt/perl/lib instead of
-/opt/perl/lib/perl5/. Again, see L<"Installation Directories"> below
-for more details. Do not include a trailing slash, (i.e. /opt/perl/)
+C<prefix=/opt/perl>, then Configure will suggest F</opt/perl/lib> instead of
+F</opt/perl/lib/perl5/>. Again, see L<"Installation Directories"> below
+for more details. Do not include a trailing slash, (i.e. F</opt/perl/>)
or you may experience odd test failures.
NOTE: You must not specify an installation directory that is the same
as or below your perl source directory. If you do, installperl will
attempt infinite recursion.
-=item /usr/bin/perl
+=item F</usr/bin/perl>
It may seem obvious, but Perl is useful only when users can easily
-find it. It's often a good idea to have both /usr/bin/perl and
-/usr/local/bin/perl be symlinks to the actual binary. Be especially
+find it. It's often a good idea to have both F</usr/bin/perl> and
+F</usr/local/bin/perl> be symlinks to the actual binary. Be especially
careful, however, not to overwrite a version of perl supplied by your
vendor unless you are sure you know what you are doing. If you insist
on replacing your vendor's perl, useful information on how it was
@@ -187,7 +187,7 @@ configured may be found with
spaces in arguments to Configure. For that, you have to look carefully
at config_arg1, config_arg2, etc.)
-By default, Configure will not try to link /usr/bin/perl to the current
+By default, Configure will not try to link F</usr/bin/perl> to the current
version of perl. You can turn on that behavior by running
Configure -Dinstallusrbinperl
@@ -458,7 +458,7 @@ TCP/IP proxy protocol library. SOCKS is used to give applications
access to transport layer network proxies. Perl supports only SOCKS
Version 5. The corresponding Configure option is -Dusesocks.
You can find more about SOCKS from wikipedia at
-L<http://en.wikipedia.org/wiki/SOCKS>.
+L<https://en.wikipedia.org/wiki/SOCKS>.
=head3 Dynamic Loading
@@ -584,6 +584,12 @@ variables for C compiler switches etc.">. You can force an embedded perl
to use direct manipulation by setting C<PL_use_safe_putenv = 0;> after
the C<perl_construct()> call.
+=head3 External glob
+
+Before File::Glob entered core in 5.6.0 globbing was implemented by shelling
+out. If the environmental variable PERL_EXTERNAL_GLOB is defined and if the
+F<csh> shell is available, perl will still do this the old way.
+
=head2 Installation Directories
The installation directories can all be changed by answering the
@@ -609,7 +615,7 @@ The directories set up by Configure fall into three broad categories.
=item Directories for the perl distribution
-By default, Configure will use the following directories for 5.30.3.
+By default, Configure will use the following directories for 5.32.1.
$version is the full perl version number, including subversion, e.g.
5.12.3, and $archname is a string like sun4-sunos,
determined by Configure. The full definitions of all Configure
@@ -764,7 +770,7 @@ run-time methods: $PERLLIB, $PERL5LIB, -I, use lib, etc.
=item default_inc_excludes_dot
Since version 5.26.0, default perl builds no longer includes C<'.'> as the
-last element of @INC. The old behaviour can restored using
+last element of @INC. The old behaviour can restored using
sh Configure -Udefault_inc_excludes_dot
@@ -1019,7 +1025,7 @@ Removes -g from optimize, and -DDEBUGGING from ccflags.
=back
If you are using a shared libperl, see the warnings about multiple
-versions of perl under L<Building a shared Perl library>.
+versions of perl under L</Building a shared Perl library>.
Note that a perl built with -DDEBUGGING will be much bigger and will run
much, much more slowly than a standard perl.
@@ -1040,7 +1046,7 @@ simple D script that uses them:
=head2 Extensions
Perl ships with a number of standard extensions. These are contained
-in the ext/ subdirectory.
+in the F<ext/> subdirectory.
By default, Configure will offer to build every extension which appears
to be supported. For example, Configure will offer to build GDBM_File
@@ -1415,7 +1421,7 @@ including a glossary of all those config.sh variables, is in the Porting
subdirectory. Porting/Glossary should especially come in handy.
Ports for other systems may also be available. You should check out
-http://www.cpan.org/ports for current information on ports to
+L<https://www.cpan.org/ports> for current information on ports to
various other operating systems.
If you plan to port Perl to a new architecture, study carefully the
@@ -1659,7 +1665,7 @@ If you still have missing routines or undefined symbols, you probably
need to add some library or other, make a symbolic link like described
above, or you need to undefine some feature that Configure thought was
there but is defective or incomplete. If you used a hint file, see if
-it has any relevant advice. You can also look through through config.h
+it has any relevant advice. You can also look through config.h
for likely suspects.
=item toke.c
@@ -1806,8 +1812,8 @@ to avoid the BIND.
Perl can be cross-compiled. It is just not trivial, cross-compilation
rarely is. Perl is routinely cross-compiled for several platforms: as of
-January 2014, these include Android, Blackberry 10, PocketPC aka
-WinCE, ARM Linux, and Solaris. Previous versions of
+June 2019, these include Android, Blackberry 10,
+ARM Linux, and Solaris. Previous versions of
Perl also provided support for Open Zaurus, Symbian, and
the IBM OS/400, but it's unknown if those ports are still functional.
These platforms are known as the B<target> platforms, while the systems
@@ -1826,10 +1832,6 @@ the particular platforms:
=over 4
-=item WinCE/PocketPC
-
-L<README.ce or perlce|perlce>
-
=item Android
L<"Cross-compilation" in README.android or
@@ -1854,11 +1856,11 @@ Packaging and transferring either the core Perl modules or CPAN
modules to the target platform is also left up to the each
cross-compilation environment. Often the cross-compilation target
platforms are somewhat limited in diskspace: see the section
-L<Minimizing the Perl installation> to learn more of the minimal set
+L</Minimizing the Perl installation> to learn more of the minimal set
of files required for a functional Perl installation.
For some cross-compilation environments the Configure option
-C<-Dinstallprefix=...> might be handy, see L<Changing the installation
+C<-Dinstallprefix=...> might be handy, see L</Changing the installation
directory>.
About the cross-compilation support of Configure: There's two forms.
@@ -1866,7 +1868,7 @@ The more common one requires some way of transferring and running
executables in the target system, such as an ssh connection; this is the
C<./Configure -Dusecrosscompile -Dtargethost=...> route. The second
method doesn't need access to the target system, but requires you to
-provide a config.sh, and and a canned Makefile; the rest of this section
+provide a config.sh, and a canned Makefile; the rest of this section
describes the former.
This cross-compilation setup of Configure has successfully been used in
@@ -2431,16 +2433,16 @@ for details of how to report the issue.
If you are unsure what makes a good bug report please read "How to
report Bugs Effectively" by Simon Tatham:
-http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
+L<https://www.chiark.greenend.org.uk/~sgtatham/bugs.html>
=head1 Coexistence with earlier versions of perl 5
-Perl 5.30.3 is not binary compatible with versions of Perl earlier than
-5.30.0.
+Perl 5.32.1 is not binary compatible with versions of Perl earlier than
+5.32.0.
In other words, you will have to recompile your XS modules.
-In general, you can usually safely upgrade from one version of Perl
-(e.g. 5.X.Y) to another similar minor version (e.g. 5.X.(Y+1))) without
+In general, you can usually safely upgrade from one stable version of Perl
+(e.g. 5.30.0) to another similar minor version (e.g. 5.30.1) without
re-compiling all of your extensions. You can also safely leave the old
version around in case the new version causes you problems for some
reason.
@@ -2511,9 +2513,9 @@ won't interfere with another version. (The defaults guarantee this for
libraries after 5.6.0, but not for executables. TODO?) One convenient
way to do this is by using a separate prefix for each version, such as
- sh Configure -Dprefix=/opt/perl5.30.3
+ sh Configure -Dprefix=/opt/perl5.32.1
-and adding /opt/perl5.30.3/bin to the shell PATH variable. Such users
+and adding /opt/perl5.32.1/bin to the shell PATH variable. Such users
may also wish to add a symbolic link /usr/local/bin/perl so that
scripts can still start with #!/usr/local/bin/perl.
@@ -2526,13 +2528,13 @@ seriously consider using a separate directory, since development
subversions may not have all the compatibility wrinkles ironed out
yet.
-=head2 Upgrading from 5.29.10 or earlier
+=head2 Upgrading from 5.31.11 or earlier
-B<Perl 5.30.3 may not be binary compatible with Perl 5.29.10 or
+B<Perl 5.32.1 may not be binary compatible with Perl 5.31.11 or
earlier Perl releases.> Perl modules having binary parts
(meaning that a C compiler is used) will have to be recompiled to be
-used with 5.30.3. If you find you do need to rebuild an extension with
-5.30.3, you may safely do so without disturbing the older
+used with 5.32.1. If you find you do need to rebuild an extension with
+5.32.1, you may safely do so without disturbing the older
installations. (See L<"Coexistence with earlier versions of perl 5">
above.)
@@ -2565,15 +2567,15 @@ Firstly, the bare minimum to run this script
print("$f\n");
}
-in Linux with perl-5.30.3 is as follows (under $Config{prefix}):
+in Linux with perl-5.32.1 is as follows (under $Config{prefix}):
./bin/perl
- ./lib/perl5/5.30.3/strict.pm
- ./lib/perl5/5.30.3/warnings.pm
- ./lib/perl5/5.30.3/i686-linux/File/Glob.pm
- ./lib/perl5/5.30.3/feature.pm
- ./lib/perl5/5.30.3/XSLoader.pm
- ./lib/perl5/5.30.3/i686-linux/auto/File/Glob/Glob.so
+ ./lib/perl5/5.32.1/strict.pm
+ ./lib/perl5/5.32.1/warnings.pm
+ ./lib/perl5/5.32.1/i686-linux/File/Glob.pm
+ ./lib/perl5/5.32.1/feature.pm
+ ./lib/perl5/5.32.1/XSLoader.pm
+ ./lib/perl5/5.32.1/i686-linux/auto/File/Glob/Glob.so
Secondly, for perl-5.10.1, the Debian perl-base package contains 591
files, (of which 510 are for lib/unicore) totaling about 3.5MB in its
@@ -2694,7 +2696,7 @@ perl will ignore the C<PERL_INTERNAL_RAND_SEED> environment variable.
=head1 DOCUMENTATION
Read the manual entries before running perl. The main documentation
-is in the pod/ subdirectory and should have been installed during the
+is in the F<pod/> subdirectory and should have been installed during the
build process. Type B<man perl> to get started. Alternatively, you
can type B<perldoc perl> to use the supplied perldoc script. This is
sometimes useful for finding things in the library modules.
diff --git a/gnu/usr.bin/perl/MANIFEST b/gnu/usr.bin/perl/MANIFEST
index f513112a7aa..6fac691f4de 100644
--- a/gnu/usr.bin/perl/MANIFEST
+++ b/gnu/usr.bin/perl/MANIFEST
@@ -17,7 +17,6 @@ caretx.c C file to create $^X
cflags.SH A script that emits C compilation flags per file
Changes Describe how to peruse changes between releases
charclass_invlists.h Compiled-in inversion lists
-config.over Site-specific overrides for Configure defaults
config_h.SH Produces config.h
configpm Produces lib/Config.pm
Configure Portability tool
@@ -117,6 +116,7 @@ cpan/autodie/t/lib/pujHa/ghach.pm autodie - Like a Klingon
cpan/autodie/t/lib/pujHa/ghach/Dotlh.pm autodie - With Klingon honour
cpan/autodie/t/lib/Some/Module.pm autodie - blog_hints.t helper
cpan/autodie/t/mkdir.t autodie - filesystem tests
+cpan/autodie/t/no-default.t
cpan/autodie/t/no_carp.t
cpan/autodie/t/open.t autodie - Testing open
cpan/autodie/t/read.t
@@ -633,8 +633,6 @@ cpan/Encode/t/use-Encode-Alias.t
cpan/Encode/t/utf8ref.t test script
cpan/Encode/t/utf8strict.t test script
cpan/Encode/t/utf8warnings.t
-cpan/Encode/t/whatwg-aliases.json
-cpan/Encode/t/whatwg-aliases.t
cpan/Encode/t/xml.t
cpan/Encode/TW/Makefile.PL Encode extension
cpan/Encode/TW/TW.pm Encode extension
@@ -869,6 +867,7 @@ cpan/ExtUtils-MakeMaker/t/test_boilerplate.t MakeMaker test
cpan/ExtUtils-MakeMaker/t/testdata/reallylongdirectoryname/arch1/Config.pm test data for MakeMaker
cpan/ExtUtils-MakeMaker/t/testdata/reallylongdirectoryname/arch2/Config.pm test data for MakeMaker
cpan/ExtUtils-MakeMaker/t/testlib.t See if ExtUtils::testlib works
+cpan/ExtUtils-MakeMaker/t/testrules.yml
cpan/ExtUtils-MakeMaker/t/unicode.t
cpan/ExtUtils-MakeMaker/t/VERSION_FROM.t See if MakeMaker's VERSION_FROM works
cpan/ExtUtils-MakeMaker/t/vstrings.t
@@ -1008,6 +1007,7 @@ cpan/HTTP-Tiny/t/170_keepalive.t
cpan/HTTP-Tiny/t/BrokenCookieJar.pm
cpan/HTTP-Tiny/t/SimpleCookieJar.pm
cpan/HTTP-Tiny/t/Util.pm
+cpan/IO-Compress/bin/streamzip
cpan/IO-Compress/bin/zipdetails IO::Compress
cpan/IO-Compress/lib/Compress/Zlib.pm IO::Compress
cpan/IO-Compress/lib/File/GlobMapper.pm IO::Compress
@@ -1053,6 +1053,7 @@ cpan/IO-Compress/t/002any-zip.t IO::Compress
cpan/IO-Compress/t/004gziphdr.t IO::Compress
cpan/IO-Compress/t/005defhdr.t IO::Compress
cpan/IO-Compress/t/006zip.t IO::Compress
+cpan/IO-Compress/t/011-streamzip.t
cpan/IO-Compress/t/01misc.t IO::Compress
cpan/IO-Compress/t/020isize.t IO::Compress
cpan/IO-Compress/t/050interop-gzip.t IO::Compress
@@ -1100,6 +1101,7 @@ cpan/IO-Compress/t/107multi-deflate.t IO::Compress
cpan/IO-Compress/t/107multi-gzip.t IO::Compress
cpan/IO-Compress/t/107multi-rawdeflate.t IO::Compress
cpan/IO-Compress/t/107multi-zip.t IO::Compress
+cpan/IO-Compress/t/107multi-zip-only.t
cpan/IO-Compress/t/108anyunc-bzip2.t IO::Compress
cpan/IO-Compress/t/108anyunc-deflate.t IO::Compress
cpan/IO-Compress/t/108anyunc-gzip.t IO::Compress
@@ -1116,6 +1118,7 @@ cpan/IO-Compress/t/110encode-gzip.t IO::Compress
cpan/IO-Compress/t/110encode-rawdeflate.t IO::Compress
cpan/IO-Compress/t/110encode-zip.t IO::Compress
cpan/IO-Compress/t/111const-deflate.t IO::Compress
+cpan/IO-Compress/t/112utf8-zip.t
cpan/IO-Compress/t/999pod.t IO::Compress
cpan/IO-Compress/t/compress/any.pl Compress::Zlib
cpan/IO-Compress/t/compress/anyunc.pl Compress::Zlib
@@ -1136,6 +1139,10 @@ cpan/IO-Compress/t/cz-03zlib-v1.t IO::Compress
cpan/IO-Compress/t/cz-06gzsetp.t IO::Compress
cpan/IO-Compress/t/cz-08encoding.t IO::Compress
cpan/IO-Compress/t/cz-14gzopen.t IO::Compress
+cpan/IO-Compress/t/files/bad-efs.zip
+cpan/IO-Compress/t/files/encrypt-aes.zip
+cpan/IO-Compress/t/files/encrypt-standard.zip
+cpan/IO-Compress/t/files/jar.zip
cpan/IO-Compress/t/files/meta.xml
cpan/IO-Compress/t/files/test.ods
cpan/IO-Compress/t/globmapper.t IO::Compress
@@ -1292,9 +1299,11 @@ cpan/Math-BigInt/lib/Math/BigInt/Calc.pm Pure Perl module to support Math::BigIn
cpan/Math-BigInt/lib/Math/BigInt/Lib.pm
cpan/Math-BigInt/t/_e_math.t Helper routine in BigFloat for _e math
cpan/Math-BigInt/t/alias.inc Support for BigInt tests
+cpan/Math-BigInt/t/backermann-mbi.t Test Math::BigInt
cpan/Math-BigInt/t/bare_mbf.t Test MBF under Math::BigInt::BareCalc
cpan/Math-BigInt/t/bare_mbi.t Test MBI under Math::BigInt::BareCalc
cpan/Math-BigInt/t/bare_mif.t Rounding tests under BareCalc
+cpan/Math-BigInt/t/bdigitsum-mbi.t Test Math::BigInt
cpan/Math-BigInt/t/bdstr-mbf.t Test Math::BigInt
cpan/Math-BigInt/t/bdstr-mbi.t Test Math::BigInt
cpan/Math-BigInt/t/bestr-mbf.t Test Math::BigInt
@@ -1316,6 +1325,7 @@ cpan/Math-BigInt/t/bnstr-mbf.t Test Math::BigInt
cpan/Math-BigInt/t/bnstr-mbi.t Test Math::BigInt
cpan/Math-BigInt/t/bsstr-mbf.t Test Math::BigInt
cpan/Math-BigInt/t/bsstr-mbi.t Test Math::BigInt
+cpan/Math-BigInt/t/buparrow-mbi.t Test Math::BigInt
cpan/Math-BigInt/t/calling.t Test calling conventions
cpan/Math-BigInt/t/calling-class-methods.t Test Math::BigInt
cpan/Math-BigInt/t/calling-instance-methods.t Test Math::BigInt
@@ -1332,6 +1342,7 @@ cpan/Math-BigInt/t/from_bin-mbf.t Test Math::BigInt
cpan/Math-BigInt/t/from_bin-mbi.t
cpan/Math-BigInt/t/from_hex-mbf.t Test Math::BigInt
cpan/Math-BigInt/t/from_hex-mbi.t
+cpan/Math-BigInt/t/from_ieee754-mbf.t Test Math::BigInt
cpan/Math-BigInt/t/from_oct-mbf.t Test Math::BigInt
cpan/Math-BigInt/t/from_oct-mbi.t
cpan/Math-BigInt/t/inf_nan.t Special tests for inf and *NaN* handling
@@ -1371,6 +1382,7 @@ cpan/Math-BigInt/t/sub_mbf.t Empty subclass test of BigFloat
cpan/Math-BigInt/t/sub_mbi.t Empty subclass test of BigInt
cpan/Math-BigInt/t/sub_mif.t Test A & P with subclasses using mbimbf.inc
cpan/Math-BigInt/t/to_base-mbi.t
+cpan/Math-BigInt/t/to_ieee754-mbf.t Test Math::BigInt
cpan/Math-BigInt/t/trap.t Test whether trap_nan and trap_inf work
cpan/Math-BigInt/t/upgrade.inc Actual tests for upgrade.t
cpan/Math-BigInt/t/upgrade.t Test if use Math::BigInt(); under upgrade works
@@ -1459,6 +1471,7 @@ cpan/Module-Load-Conditional/t/test_lib/a/X.pm Module::Conditional tests
cpan/Module-Load-Conditional/t/test_lib/b/X.pm Module::Conditional tests
cpan/Module-Load-Conditional/t/to_load/AutoLoad.pm Module::Conditional tests
cpan/Module-Load-Conditional/t/to_load/Commented.pm Module::Conditional tests
+cpan/Module-Load-Conditional/t/to_load/HereDoc.pm
cpan/Module-Load-Conditional/t/to_load/InPod.pm Module::Load::Conditional tests
cpan/Module-Load-Conditional/t/to_load/LoadIt.pm Module::Conditional tests
cpan/Module-Load-Conditional/t/to_load/LoadMe.pl Module::Conditional tests
@@ -1492,16 +1505,6 @@ cpan/NEXT/t/dynamically_scoped_regex_vars.t NEXT
cpan/NEXT/t/next.t NEXT
cpan/NEXT/t/stringify.t NEXT
cpan/NEXT/t/unseen.t NEXT
-cpan/OpenBSD-MkTemp/lib/OpenBSD/MkTemp.pm OpenBSD::MkTemp
-cpan/OpenBSD-MkTemp/MkTemp.xs OpenBSD::MkTemp
-cpan/OpenBSD-MkTemp/README OpenBSD::MkTemp Readme
-cpan/OpenBSD-MkTemp/t/OpenBSD-MkTemp.t OpenBSD::MkTemp test file
-cpan/OpenBSD-Pledge/lib/OpenBSD/Pledge.pm OpenBSD::Pledge
-cpan/OpenBSD-Pledge/Pledge.xs OpenBSD::Pledge
-cpan/OpenBSD-Pledge/t/OpenBSD-Pledge.t OpenBSD::Pledge test file
-cpan/OpenBSD-Unveil/lib/OpenBSD/Unveil.pm OpenBSD::Unveil
-cpan/OpenBSD-Unveil/t/OpenBSD-Unveil.t OpenBSD::Unveil test file
-cpan/OpenBSD-Unveil/Unveil.xs OpenBSD::Unveil
cpan/Params-Check/lib/Params/Check.pm Params::Check
cpan/Params-Check/t/01_Params-Check.t Params::Check tests
cpan/parent/lib/parent.pm Establish an ISA relationship with base classes at compile time
@@ -1550,48 +1553,6 @@ cpan/Pod-Escapes/lib/Pod/Escapes.pm Pod::Escapes
cpan/Pod-Escapes/t/01_about_verbose.t test Pod::Escapes
cpan/Pod-Escapes/t/10_main.t test Pod::Escapes
cpan/Pod-Escapes/t/15_name2charnum.t test Pod::Escapes
-cpan/Pod-Parser/lib/Pod/Find.pm find POD documents in directory trees
-cpan/Pod-Parser/lib/Pod/InputObjects.pm Pod-Parser - define objects for input streams
-cpan/Pod-Parser/lib/Pod/Parser.pm Pod-Parser - define base class for parsing POD
-cpan/Pod-Parser/lib/Pod/ParseUtils.pm Pod-Parser - pod utility functions
-cpan/Pod-Parser/lib/Pod/PlainText.pm Convert POD data to formatted ASCII text
-cpan/Pod-Parser/lib/Pod/Select.pm Pod-Parser - select portions of POD docs
-cpan/Pod-Parser/scripts/podselect.PL Pod-Parser - Pod::Select::podselect() CLI
-cpan/Pod-Parser/t/pod/contains_bad_pod.xr Pod-Parser test file
-cpan/Pod-Parser/t/pod/contains_pod.t Pod-Parser test
-cpan/Pod-Parser/t/pod/contains_pod.xr Pod-Parser test file
-cpan/Pod-Parser/t/pod/empty.xr
-cpan/Pod-Parser/t/pod/emptycmd.t Test empty pod directives
-cpan/Pod-Parser/t/pod/emptycmd.xr Expected results for emptycmd.t
-cpan/Pod-Parser/t/pod/find.t See if Pod::Find works
-cpan/Pod-Parser/t/pod/for.t Test =for directive
-cpan/Pod-Parser/t/pod/for.xr Expected results for for.t
-cpan/Pod-Parser/t/pod/headings.t Test =head directives
-cpan/Pod-Parser/t/pod/headings.xr Expected results for headings.t
-cpan/Pod-Parser/t/pod/include.t Test =include directive
-cpan/Pod-Parser/t/pod/include.xr Expected results for include.t
-cpan/Pod-Parser/t/pod/included.t Test =include directive
-cpan/Pod-Parser/t/pod/included.xr Expected results for included.t
-cpan/Pod-Parser/t/pod/lref.t Test L<...> sequences
-cpan/Pod-Parser/t/pod/lref.xr Expected results for lref.t
-cpan/Pod-Parser/t/pod/multiline_items.t Test multiline =items
-cpan/Pod-Parser/t/pod/multiline_items.xr Expected results for multiline_items.t
-cpan/Pod-Parser/t/pod/nested_items.t Test nested =items
-cpan/Pod-Parser/t/pod/nested_items.xr Expected results for nested_items.t
-cpan/Pod-Parser/t/pod/nested_seqs.t Test nested interior sequences
-cpan/Pod-Parser/t/pod/nested_seqs.xr Expected results for nested_seqs.t
-cpan/Pod-Parser/t/pod/oneline_cmds.t Test single paragraph ==cmds
-cpan/Pod-Parser/t/pod/oneline_cmds.xr Expected results for oneline_cmds.t
-cpan/Pod-Parser/t/pod/podselect.t Test Pod::Select
-cpan/Pod-Parser/t/pod/podselect.xr Expected results for podselect.t
-cpan/Pod-Parser/t/pod/selfcheck.t
-cpan/Pod-Parser/t/pod/special_seqs.t Test "special" interior sequences
-cpan/Pod-Parser/t/pod/special_seqs.xr Expected results for special_seqs.t
-cpan/Pod-Parser/t/pod/testcmp.pl Module to compare output against expected results
-cpan/Pod-Parser/t/pod/testp2pt.pl Module to test Pod::PlainText for a given file
-cpan/Pod-Parser/t/pod/testpchk.pl Module to test Pod::Checker for a given file
-cpan/Pod-Parser/t/pod/testpods/lib/Pod/Stuff.pm Sample data for t/pod/find.t
-cpan/Pod-Parser/t/pod/twice.t Test Pod::Parser
cpan/Pod-Perldoc/corpus/no-head.pod test file for Pod-Perldoc
cpan/Pod-Perldoc/corpus/perlfunc.pod test file for Pod-Perldoc
cpan/Pod-Perldoc/corpus/utf8.pod test file for Pod-Perldoc
@@ -1624,6 +1585,7 @@ cpan/Pod-Simple/lib/Pod/Simple/DumpAsXML.pm turn Pod into XML
cpan/Pod-Simple/lib/Pod/Simple/HTML.pm convert Pod to HTML
cpan/Pod-Simple/lib/Pod/Simple/HTMLBatch.pm convert several Pod files to several HTML files
cpan/Pod-Simple/lib/Pod/Simple/HTMLLegacy.pm Pod::Simple::HTMLLegacy
+cpan/Pod-Simple/lib/Pod/Simple/JustPod.pm
cpan/Pod-Simple/lib/Pod/Simple/LinkSection.pm represent "section" attributes of L codes
cpan/Pod-Simple/lib/Pod/Simple/Methody.pm turn Pod::Simple events into method calls
cpan/Pod-Simple/lib/Pod/Simple/Progress.pm Pod::Simple::Progress
@@ -1655,6 +1617,7 @@ cpan/Pod-Simple/t/begin.t Pod::Simple test file
cpan/Pod-Simple/t/cbacks.t Pod::Simple test file
cpan/Pod-Simple/t/chunking.t Pod::Simple test file
cpan/Pod-Simple/t/closeys.t Pod::Simple test file
+cpan/Pod-Simple/t/content_seen.t Pod::Simple test file
cpan/Pod-Simple/t/corpus.t Pod::Simple test file
cpan/Pod-Simple/t/corpus/2202jp.txt Pod::Simple test file
cpan/Pod-Simple/t/corpus/2202jp.xml Pod::Simple test file
@@ -1742,6 +1705,7 @@ cpan/Pod-Simple/t/fcodes_l.t Pod::Simple test file
cpan/Pod-Simple/t/fcodes_s.t Pod::Simple test file
cpan/Pod-Simple/t/for.t Pod::Simple test file
cpan/Pod-Simple/t/fornot.t Pod::Simple test file
+cpan/Pod-Simple/t/github_issue_79.t
cpan/Pod-Simple/t/heads.t Pod::Simple test file
cpan/Pod-Simple/t/html01.t Pod::Simple test file
cpan/Pod-Simple/t/html02.t Pod::Simple test file
@@ -1754,6 +1718,9 @@ cpan/Pod-Simple/t/junk1.pod Pod::Simple test file
cpan/Pod-Simple/t/junk1o.txt Pod::Simple test file
cpan/Pod-Simple/t/junk2.pod Pod::Simple test file
cpan/Pod-Simple/t/junk2o.txt Pod::Simple test file
+cpan/Pod-Simple/t/JustPod01.t
+cpan/Pod-Simple/t/JustPod02.t
+cpan/Pod-Simple/t/JustPod_corpus.t
cpan/Pod-Simple/t/linkclas.t Pod::Simple test file
cpan/Pod-Simple/t/output.t Pod::Simple test file
cpan/Pod-Simple/t/perlcyg.pod Pod::Simple test file
@@ -1766,6 +1733,7 @@ cpan/Pod-Simple/t/puller.t Pod::Simple test file
cpan/Pod-Simple/t/pulltitl.t Pod::Simple test file
cpan/Pod-Simple/t/reinit.t Pod::Simple test file
cpan/Pod-Simple/t/render.t Pod::Simple test file
+cpan/Pod-Simple/t/rtf_utf8.t
cpan/Pod-Simple/t/search05.t Pod::Simple test file
cpan/Pod-Simple/t/search10.t Pod::Simple test file
cpan/Pod-Simple/t/search12.t Pod::Simple test file
@@ -1777,6 +1745,9 @@ cpan/Pod-Simple/t/search27.t Pod::Simple test file
cpan/Pod-Simple/t/search28.t Pod::Simple test file
cpan/Pod-Simple/t/search29.t Pod::Simple test file
cpan/Pod-Simple/t/search50.t Pod::Simple test file
+cpan/Pod-Simple/t/search60.t Pod::Simple test file
+cpan/Pod-Simple/t/search60/A/x.pod Pod::Simple test file
+cpan/Pod-Simple/t/search60/B/X.pod Pod::Simple test file
cpan/Pod-Simple/t/stree.t Pod::Simple test file
cpan/Pod-Simple/t/strpvbtm.t Pod::Simple test file
cpan/Pod-Simple/t/testlib1/Blorm.pm Pod::Simple test file
@@ -1797,6 +1768,7 @@ cpan/Pod-Simple/t/testlib2/hinkhonk/readme.txt Pod::Simple test file
cpan/Pod-Simple/t/testlib2/hinkhonk/Vliff.pm Pod::Simple test file
cpan/Pod-Simple/t/testlib2/pod/perlthng.pod Pod::Simple test file
cpan/Pod-Simple/t/testlib2/pod/perlzuk.pod Pod::Simple test file
+cpan/Pod-Simple/t/testlib2/pods/perlzoned.pod Pod::Simple test file
cpan/Pod-Simple/t/testlib2/squaa/Vliff.pm Pod::Simple test file
cpan/Pod-Simple/t/testlib2/squaa/Wowo.pod Pod::Simple test file
cpan/Pod-Simple/t/testlib2/Suzzle.pm Pod::Simple test file
@@ -1901,19 +1873,46 @@ cpan/podlators/t/data/snippets/man/utf8-nonbreaking
cpan/podlators/t/data/snippets/man/utf8-verbatim
cpan/podlators/t/data/snippets/man/x-whitespace
cpan/podlators/t/data/snippets/man/x-whitespace-entry
+cpan/podlators/t/data/snippets/overstrike/tag-width
+cpan/podlators/t/data/snippets/overstrike/wrapping
cpan/podlators/t/data/snippets/README podlators test
cpan/podlators/t/data/snippets/termcap/escape-wrapping
cpan/podlators/t/data/snippets/termcap/tag-width
cpan/podlators/t/data/snippets/termcap/tag-wrapping
+cpan/podlators/t/data/snippets/termcap/term-unknown
cpan/podlators/t/data/snippets/termcap/width
cpan/podlators/t/data/snippets/termcap/wrapping
+cpan/podlators/t/data/snippets/text/alt
+cpan/podlators/t/data/snippets/text/c-with-spaces
+cpan/podlators/t/data/snippets/text/code
cpan/podlators/t/data/snippets/text/cpp podlators test
+cpan/podlators/t/data/snippets/text/empty
+cpan/podlators/t/data/snippets/text/error-die
+cpan/podlators/t/data/snippets/text/error-none
+cpan/podlators/t/data/snippets/text/error-normal
+cpan/podlators/t/data/snippets/text/error-pod
+cpan/podlators/t/data/snippets/text/error-stderr
+cpan/podlators/t/data/snippets/text/error-stderr-opt
+cpan/podlators/t/data/snippets/text/for
+cpan/podlators/t/data/snippets/text/iso-8859-1
+cpan/podlators/t/data/snippets/text/late-encoding
+cpan/podlators/t/data/snippets/text/link-rt
+cpan/podlators/t/data/snippets/text/link-url
+cpan/podlators/t/data/snippets/text/margin
+cpan/podlators/t/data/snippets/text/nonbreaking-space
+cpan/podlators/t/data/snippets/text/nourls
+cpan/podlators/t/data/snippets/text/periods
+cpan/podlators/t/data/snippets/text/quotes-opt
+cpan/podlators/t/data/snippets/text/s-whitespace
+cpan/podlators/t/data/snippets/text/sentence-spacing
+cpan/podlators/t/data/snippets/text/utf8
+cpan/podlators/t/data/snippets/text/utf8-iso
+cpan/podlators/t/data/snippets/text/verbatim
cpan/podlators/t/data/termcap podlators test
cpan/podlators/t/docs/pod.t podlators test
cpan/podlators/t/docs/pod-spelling.t podlators test
cpan/podlators/t/docs/spdx-license.t podlators test
cpan/podlators/t/docs/synopsis.t podlators test
-cpan/podlators/t/docs/urls.t podlators test
cpan/podlators/t/general/basic.t podlators test
cpan/podlators/t/general/filehandle.t podlators test
cpan/podlators/t/general/pod-parser.t podlators test
@@ -1932,16 +1931,15 @@ cpan/podlators/t/man/utf8-io.t podlators test
cpan/podlators/t/parselink/basic.t podlators test
cpan/podlators/t/style/minimum-version.t podlators test
cpan/podlators/t/style/module-version.t podlators test
+cpan/podlators/t/style/obsolete-strings.t
cpan/podlators/t/style/strict.t podlators test
-cpan/podlators/t/text/basic.t podlators test
cpan/podlators/t/text/color.t podlators test
-cpan/podlators/t/text/empty.t podlators test
-cpan/podlators/t/text/encoding.t podlators test
-cpan/podlators/t/text/options.t podlators test
+cpan/podlators/t/text/invalid.t
+cpan/podlators/t/text/iso-8859-1.t
cpan/podlators/t/text/overstrike.t podlators test
-cpan/podlators/t/text/perlio.t podlators test
+cpan/podlators/t/text/snippets.t
cpan/podlators/t/text/termcap.t podlators test
-cpan/podlators/t/text/utf8.t podlators test
+cpan/podlators/t/text/utf8-io.t
cpan/Scalar-List-Utils/lib/List/Util.pm List::Util
cpan/Scalar-List-Utils/lib/List/Util/XS.pm List::Util
cpan/Scalar-List-Utils/lib/Scalar/Util.pm Scalar::Util
@@ -1969,9 +1967,11 @@ cpan/Scalar-List-Utils/t/product.t List::Util
cpan/Scalar-List-Utils/t/prototype.t
cpan/Scalar-List-Utils/t/readonly.t Scalar::Util
cpan/Scalar-List-Utils/t/reduce.t List::Util
+cpan/Scalar-List-Utils/t/reductions.t
cpan/Scalar-List-Utils/t/refaddr.t Scalar::Util
cpan/Scalar-List-Utils/t/reftype.t Scalar::Util
cpan/Scalar-List-Utils/t/rt-96343.t Scalar::Util
+cpan/Scalar-List-Utils/t/sample.t
cpan/Scalar-List-Utils/t/scalarutil-proto.t
cpan/Scalar-List-Utils/t/shuffle.t List::Util
cpan/Scalar-List-Utils/t/stack-corruption.t List::Util
@@ -1980,6 +1980,7 @@ cpan/Scalar-List-Utils/t/sum.t List::Util
cpan/Scalar-List-Utils/t/sum0.t
cpan/Scalar-List-Utils/t/tainted.t Scalar::Util
cpan/Scalar-List-Utils/t/uniq.t Scalar::Util
+cpan/Scalar-List-Utils/t/uniqnum.t
cpan/Scalar-List-Utils/t/weak.t Scalar::Util
cpan/Socket/Makefile.PL Socket extension makefile writer
cpan/Socket/Socket.pm Socket extension Perl module
@@ -2000,8 +2001,15 @@ cpan/Sys-Syslog/Syslog.pm Sys::Syslog extension Perl module
cpan/Sys-Syslog/Syslog.xs Sys::Syslog extension external subroutines
cpan/Sys-Syslog/t/00-load.t test for Sys::Syslog
cpan/Sys-Syslog/t/constants.t test for Sys::Syslog
+cpan/Sys-Syslog/t/cpan-rt-21516.t
+cpan/Sys-Syslog/t/cpan-rt-21866.t
+cpan/Sys-Syslog/t/cpan-rt-25488.t
+cpan/Sys-Syslog/t/cpan-rt-49877.pl
+cpan/Sys-Syslog/t/cpan-rt-55151.t
+cpan/Sys-Syslog/t/cpan-rt-64287.t
cpan/Sys-Syslog/t/facilities-routing.t test for Sys::Syslog
cpan/Sys-Syslog/t/syslog.t See if Sys::Syslog works
+cpan/Sys-Syslog/t/syslog-inet-udp.t
cpan/Sys-Syslog/win32/compile.pl Sys::Syslog extension Win32 related file
cpan/Sys-Syslog/win32/PerlLog.mc Sys::Syslog extension Win32 related file
cpan/Sys-Syslog/win32/PerlLog_dll.uu Sys::Syslog extension Win32 related file
@@ -2015,20 +2023,10 @@ cpan/Term-ANSIColor/t/module/basic.t
cpan/Term-ANSIColor/t/module/basic256.t
cpan/Term-ANSIColor/t/module/eval.t
cpan/Term-ANSIColor/t/module/stringify.t
+cpan/Term-ANSIColor/t/module/true-color.t
cpan/Term-ANSIColor/t/taint/basic.t
cpan/Term-Cap/Cap.pm Perl module supporting termcap usage
cpan/Term-Cap/test.pl See if Term::Cap works
-cpan/Term-ReadKey/Changes Term::ReadKey
-cpan/Term-ReadKey/Configure.pm Term::ReadKey
-cpan/Term-ReadKey/example/test.pl Term::ReadKey
-cpan/Term-ReadKey/genchars.pl Term::ReadKey
-cpan/Term-ReadKey/Makefile.PL Term::ReadKey
-cpan/Term-ReadKey/ppport.h Term::ReadKey
-cpan/Term-ReadKey/ReadKey.xs Term::ReadKey
-cpan/Term-ReadKey/ReadKey.pm.PL Term::ReadKey
-cpan/Term-ReadKey/README Term::ReadKey
-cpan/Term-ReadKey/t/01_basic.t Term::ReadKey
-cpan/Term-ReadKey/t/02_terminal_functions.t Term::ReadKey
cpan/Test-Harness/bin/prove The prove harness utility
cpan/Test-Harness/lib/App/Prove.pm Gubbins for the prove utility
cpan/Test-Harness/lib/App/Prove/State.pm Gubbins for the prove utility
@@ -2603,8 +2601,13 @@ cpan/Time-Piece/t/02core_dst.t
cpan/Time-Piece/t/03compare.t Test for Time::Piece
cpan/Time-Piece/t/04mjd.t Test for Time::Piece
cpan/Time-Piece/t/05overload.t Test for Time::Piece
+cpan/Time-Piece/t/06large.t
cpan/Time-Piece/t/06subclass.t Test for Time::Piece
cpan/Time-Piece/t/07arith.t Test for Time::Piece
+cpan/Time-Piece/t/08truncate.t
+cpan/Time-Piece/t/09locales.t
+cpan/Time-Piece/t/10overload.t
+cpan/Time-Piece/t/99legacy.t
cpan/Time-Piece/t/lib/Time/Piece/Twin.pm
cpan/Unicode-Collate/Collate.pm Unicode::Collate
cpan/Unicode-Collate/Collate.xs Unicode::Collate
@@ -3015,7 +3018,8 @@ dist/Devel-PPPort/apicheck_c.PL Devel::PPPort apicheck generator
dist/Devel-PPPort/Changes Devel::PPPort Changes file
dist/Devel-PPPort/devel/buildperl.pl Devel::PPPort perl version builder
dist/Devel-PPPort/devel/devtools.pl Devel::PPPort development utilities
-dist/Devel-PPPort/devel/mkapidoc.sh Devel::PPPort apidoc collector
+dist/Devel-PPPort/devel/mkapidoc.pl Devel::PPPort apidoc collector
+dist/Devel-PPPort/devel/mkppport_fnc.pl Devel::PPPort
dist/Devel-PPPort/devel/mktodo Devel::PPPort baseline/todo generator
dist/Devel-PPPort/devel/mktodo.pl Devel::PPPort baseline/todo generator
dist/Devel-PPPort/devel/regenerate Devel::PPPort API re-generator
@@ -3028,18 +3032,18 @@ dist/Devel-PPPort/module2.c Devel::PPPort test file
dist/Devel-PPPort/module3.c Devel::PPPort test file
dist/Devel-PPPort/parts/apicheck.pl Devel::PPPort apicheck generator
dist/Devel-PPPort/parts/apidoc.fnc Devel::PPPort Perl API listing
-dist/Devel-PPPort/parts/base/5003070 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5003007 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5004000 Devel::PPPort baseline todo file
-dist/Devel-PPPort/parts/base/5004010 Devel::PPPort baseline todo file
-dist/Devel-PPPort/parts/base/5004020 Devel::PPPort baseline todo file
-dist/Devel-PPPort/parts/base/5004030 Devel::PPPort baseline todo file
-dist/Devel-PPPort/parts/base/5004040 Devel::PPPort baseline todo file
-dist/Devel-PPPort/parts/base/5004050 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5004001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5004002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5004003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5004004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5004005 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5005000 Devel::PPPort baseline todo file
-dist/Devel-PPPort/parts/base/5005010 Devel::PPPort baseline todo file
-dist/Devel-PPPort/parts/base/5005020 Devel::PPPort baseline todo file
-dist/Devel-PPPort/parts/base/5005030 Devel::PPPort baseline todo file
-dist/Devel-PPPort/parts/base/5005040 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5005001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5005002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5005003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5005004 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5006000 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5006001 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5006002 Devel::PPPort baseline todo file
@@ -3144,6 +3148,7 @@ dist/Devel-PPPort/parts/base/5020003 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5021000 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5021001 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5021002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5021003 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5021004 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5021005 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5021006 Devel::PPPort baseline todo file
@@ -3154,6 +3159,9 @@ dist/Devel-PPPort/parts/base/5021010 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5021011 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5022000 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5022001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5022002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5022003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5022004 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5023000 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5023001 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5023002 Devel::PPPort baseline todo file
@@ -3165,7 +3173,63 @@ dist/Devel-PPPort/parts/base/5023007 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5023008 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5023009 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/base/5024000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5024001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5024002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5024003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5024004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025005 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025006 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025007 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025008 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025009 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025010 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025011 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5025012 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5026000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5026001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5026002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5026003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027005 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027006 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027007 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027008 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027009 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027010 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5027011 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5028000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5028001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5029000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5029001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5029002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5029003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5029004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5029005 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5029006 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5029007 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5029008 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5029009 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5029010 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5030000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5031001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5031002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5031003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5031004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5031005 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5031006 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5031007 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/base/5031008
dist/Devel-PPPort/parts/embed.fnc Devel::PPPort Perl API listing
+dist/Devel-PPPort/parts/inc/01_test Devel::PPPort include
dist/Devel-PPPort/parts/inc/call Devel::PPPort include
dist/Devel-PPPort/parts/inc/cop Devel::PPPort include
dist/Devel-PPPort/parts/inc/exception Devel::PPPort include
@@ -3173,7 +3237,9 @@ dist/Devel-PPPort/parts/inc/format Devel::PPPort include
dist/Devel-PPPort/parts/inc/grok Devel::PPPort include
dist/Devel-PPPort/parts/inc/gv Devel::PPPort include
dist/Devel-PPPort/parts/inc/HvNAME Devel::PPPort include
+dist/Devel-PPPort/parts/inc/inctools
dist/Devel-PPPort/parts/inc/limits Devel::PPPort include
+dist/Devel-PPPort/parts/inc/locale
dist/Devel-PPPort/parts/inc/magic Devel::PPPort include
dist/Devel-PPPort/parts/inc/magic_defs Devel::PPPort include
dist/Devel-PPPort/parts/inc/memory Devel::PPPort include
@@ -3195,29 +3261,31 @@ dist/Devel-PPPort/parts/inc/shared_pv Devel::PPPort include
dist/Devel-PPPort/parts/inc/snprintf Devel::PPPort include
dist/Devel-PPPort/parts/inc/sprintf Devel::PPPort include
dist/Devel-PPPort/parts/inc/strlfuncs Devel::PPPort include
+dist/Devel-PPPort/parts/inc/subparse
dist/Devel-PPPort/parts/inc/Sv_set Devel::PPPort include
dist/Devel-PPPort/parts/inc/sv_xpvf Devel::PPPort include
dist/Devel-PPPort/parts/inc/SvPV Devel::PPPort include
dist/Devel-PPPort/parts/inc/SvREFCNT Devel::PPPort include
dist/Devel-PPPort/parts/inc/threads Devel::PPPort include
+dist/Devel-PPPort/parts/inc/utf8
dist/Devel-PPPort/parts/inc/uv Devel::PPPort include
dist/Devel-PPPort/parts/inc/variables Devel::PPPort include
dist/Devel-PPPort/parts/inc/version Devel::PPPort include
dist/Devel-PPPort/parts/inc/warn Devel::PPPort include
dist/Devel-PPPort/parts/ppport.fnc Devel::PPPort API listing
dist/Devel-PPPort/parts/ppptools.pl Devel::PPPort various utilities
-dist/Devel-PPPort/parts/todo/5003070 Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5003007 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/todo/5004000 Devel::PPPort todo file
-dist/Devel-PPPort/parts/todo/5004010 Devel::PPPort todo file
-dist/Devel-PPPort/parts/todo/5004020 Devel::PPPort todo file
-dist/Devel-PPPort/parts/todo/5004030 Devel::PPPort todo file
-dist/Devel-PPPort/parts/todo/5004040 Devel::PPPort todo file
-dist/Devel-PPPort/parts/todo/5004050 Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5004001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5004002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5004003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5004004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5004005 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/todo/5005000 Devel::PPPort todo file
-dist/Devel-PPPort/parts/todo/5005010 Devel::PPPort todo file
-dist/Devel-PPPort/parts/todo/5005020 Devel::PPPort todo file
-dist/Devel-PPPort/parts/todo/5005030 Devel::PPPort todo file
-dist/Devel-PPPort/parts/todo/5005040 Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5005001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5005002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5005003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5005004 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/todo/5006000 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5006001 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5006002 Devel::PPPort todo file
@@ -3322,6 +3390,7 @@ dist/Devel-PPPort/parts/todo/5020003 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5021000 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5021001 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5021002 Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5021003 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/todo/5021004 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5021005 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5021006 Devel::PPPort todo file
@@ -3332,6 +3401,9 @@ dist/Devel-PPPort/parts/todo/5021010 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5021011 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5022000 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5022001 Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5022002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5022003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5022004 Devel::PPPort baseline todo file
dist/Devel-PPPort/parts/todo/5023000 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5023001 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5023002 Devel::PPPort todo file
@@ -3343,11 +3415,67 @@ dist/Devel-PPPort/parts/todo/5023007 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5023008 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5023009 Devel::PPPort todo file
dist/Devel-PPPort/parts/todo/5024000 Devel::PPPort todo file
+dist/Devel-PPPort/parts/todo/5024001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5024002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5024003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5024004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025005 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025006 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025007 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025008 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025009 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025010 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025011 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5025012 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5026000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5026001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5026002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5026003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027005 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027006 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027007 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027008 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027009 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027010 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5027011 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5028000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5028001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5029000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5029001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5029002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5029003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5029004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5029005 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5029006 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5029007 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5029008 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5029009 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5029010 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5030000 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5031001 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5031002 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5031003 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5031004 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5031005 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5031006 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5031007 Devel::PPPort baseline todo file
+dist/Devel-PPPort/parts/todo/5031008
dist/Devel-PPPort/PPPort.xs Devel::PPPort dummy PPPort.xs
dist/Devel-PPPort/ppport_h.PL Devel::PPPort ppport.h writer
dist/Devel-PPPort/PPPort_pm.PL Devel::PPPort PPPort.pm writer
-dist/Devel-PPPort/PPPort_xs.PL Devel::PPPort RealPPPort.xs writer
+dist/Devel-PPPort/RealPPPort_xs.PL Devel::PPPort RealPPPort.xs writer
dist/Devel-PPPort/soak Devel::PPPort Test Harness to run under various Perls
+dist/Devel-PPPort/t/01_test.t Devel::PPPort test file
dist/Devel-PPPort/t/call.t Devel::PPPort test file
dist/Devel-PPPort/t/cop.t Devel::PPPort test file
dist/Devel-PPPort/t/exception.t Devel::PPPort test file
@@ -3356,6 +3484,7 @@ dist/Devel-PPPort/t/grok.t Devel::PPPort test file
dist/Devel-PPPort/t/gv.t Devel::PPPort test file
dist/Devel-PPPort/t/HvNAME.t Devel::PPPort test file
dist/Devel-PPPort/t/limits.t Devel::PPPort test file
+dist/Devel-PPPort/t/locale.t
dist/Devel-PPPort/t/magic.t Devel::PPPort test file
dist/Devel-PPPort/t/memory.t Devel::PPPort test file
dist/Devel-PPPort/t/mess.t Devel::PPPort test file
@@ -3380,14 +3509,19 @@ dist/Devel-PPPort/t/SvPV.t Devel::PPPort test file
dist/Devel-PPPort/t/SvREFCNT.t Devel::PPPort test file
dist/Devel-PPPort/t/testutil.pl Devel::PPPort test utilities
dist/Devel-PPPort/t/threads.t Devel::PPPort test file
+dist/Devel-PPPort/t/utf8.t
dist/Devel-PPPort/t/uv.t Devel::PPPort test file
dist/Devel-PPPort/t/variables.t Devel::PPPort test file
dist/Devel-PPPort/t/warn.t Devel::PPPort test file
+dist/Devel-PPPort/TODO Devel::PPPort developer notes
dist/Devel-PPPort/typemap Devel::PPPort Typemap
dist/Devel-SelfStubber/lib/Devel/SelfStubber.pm Generate stubs for SelfLoader.pm
dist/Devel-SelfStubber/t/Devel-SelfStubber.t See if Devel::SelfStubber works
dist/Dumpvalue/lib/Dumpvalue.pm Screen dump of perl values
dist/Dumpvalue/t/Dumpvalue.t See if Dumpvalue works
+dist/Dumpvalue/t/extend-coverage.t Extend Dumpvalue's test coverage
+dist/Dumpvalue/t/lib/TieOut.pm Helper module for Dumpvalue tests
+dist/Dumpvalue/t/rt-134441-dumpvalue.t See if Dumpvalue works
dist/encoding-warnings/lib/encoding/warnings.pm warn on implicit encoding conversions
dist/encoding-warnings/t/1-warning.t tests for encoding::warnings
dist/encoding-warnings/t/2-fatal.t tests for encoding::warnings
@@ -3496,11 +3630,14 @@ dist/Filter-Simple/t/filter.t See if Filter::Simple works
dist/Filter-Simple/t/filter_only.t See if Filter::Simple works
dist/Filter-Simple/t/import.t See if Filter::Simple works
dist/Filter-Simple/t/lib/Filter/Simple/CodeNoComments.pm Helper file for Filter::Simple tests
+dist/Filter-Simple/t/lib/Filter/Simple/ExeNoComments.pm Helper file for Filter::Simple tests
dist/Filter-Simple/t/lib/Filter/Simple/ExportTest.pm Helper file for Filter::Simple tests
dist/Filter-Simple/t/lib/Filter/Simple/FilterOnlyTest.pm Helper file for Filter::Simple tests
dist/Filter-Simple/t/lib/Filter/Simple/FilterTest.pm Helper file for Filter::Simple tests
dist/Filter-Simple/t/lib/Filter/Simple/ImportTest.pm Helper file for Filter::Simple tests
dist/Filter-Simple/t/no.t See if Filter::Simple works
+dist/FindBin/lib/FindBin.pm Find name of currently executing program
+dist/FindBin/t/FindBin.t See if FindBin works
dist/I18N-Collate/lib/I18N/Collate.pm Routines to do strxfrm-based collation
dist/I18N-Collate/t/I18N-Collate.t See if I18N::Collate works
dist/I18N-LangTags/ChangeLog I18N::LangTags
@@ -3543,12 +3680,14 @@ dist/IO/README IO extension maintenance notice
dist/IO/t/cachepropagate-tcp.t See if IO::Socket duplication works
dist/IO/t/cachepropagate-udp.t See if IO::Socket duplication works
dist/IO/t/cachepropagate-unix.t See if IO::Socket duplication works
+dist/IO/t/gh17447.t Tests fix for #17447
dist/IO/t/IO.t See if IO works
dist/IO/t/io_const.t See if constants from IO work
dist/IO/t/io_dir.t See if directory-related methods from IO work
dist/IO/t/io_dup.t See if dup()-related methods from IO work
dist/IO/t/io_file.t See if binmode()-related methods on IO::File work
dist/IO/t/io_file_export.t Test IO::File exports
+dist/IO/t/io_getline.t Test getline and getlines
dist/IO/t/io_leak.t See if IO leaks SVs (only run in core)
dist/IO/t/io_linenum.t See if I/O line numbers are tracked correctly
dist/IO/t/io_multihomed.t See if INET sockets work with multi-homed hosts
@@ -3682,7 +3821,6 @@ dist/SelfLoader/lib/SelfLoader.pm Load functions only on demand
dist/SelfLoader/t/01SelfLoader.t See if SelfLoader works
dist/SelfLoader/t/02SelfLoader-buggy.t See if SelfLoader works
dist/SelfLoader/t/03taint.t See if SelfLoader works under taint
-dist/Storable/__Storable__.pm Template to generate Storable.pm
dist/Storable/ChangeLog Storable extension
dist/Storable/hints/gnukfreebsd.pl Hint for Storable for named architecture
dist/Storable/hints/gnuknetbsd.pl Hint for Storable for named architecture
@@ -3692,8 +3830,8 @@ dist/Storable/Makefile.PL Storable extension
dist/Storable/MANIFEST Storable MANIFEST file
dist/Storable/README Storable extension
dist/Storable/stacksize compute stack sizes
+dist/Storable/Storable.pm Storable perl module
dist/Storable/Storable.xs Storable extension
-dist/Storable/Storable.pm.PL perl script to generate Storable.pm from template
dist/Storable/t/attach.t Check STORABLE_attach doesn't create objects unnecessarily
dist/Storable/t/attach_errors.t Trigger and test STORABLE_attach errors
dist/Storable/t/attach_singleton.t Test STORABLE_attach for the Singleton pattern
@@ -3835,8 +3973,8 @@ dist/threads-shared/t/sv_simple.t thread shared variables
dist/threads-shared/t/utf8.t Test UTF-8 keys in shared hashes
dist/threads-shared/t/wait.t Test cond_wait and cond_timedwait
dist/threads-shared/t/waithires.t Test sub-second cond_timedwait
+dist/Tie-File/ChangeLog Tie::File
dist/Tie-File/lib/Tie/File.pm Files as tied arrays
-dist/Tie-File/t/00_version.t Trivial test for Tie::File
dist/Tie-File/t/01_gen.t Generic read/write tests for Tie::File
dist/Tie-File/t/02_fetchsize.t File length fetch test for Tie::File
dist/Tie-File/t/03_longfetch.t Past-the-end-of-the-array tests for Tie::File
@@ -3874,6 +4012,7 @@ dist/Tie-File/t/33_defer_vs.t Like 30_defer.t, but with varying-length records
dist/Tie-File/t/40_abs_cache.t Unit tests for Tie::File::Cache
dist/Tie-File/t/41_heap.t Unit tests for Tie::File::Heap
dist/Tie-File/t/42_offset.t Unit tests for the offset method
+dist/Tie-File/t/43_synopsis.t Demonstrate correctness of Tie::File synopsis
dist/Time-HiRes/Changes Time::HiRes extension
dist/Time-HiRes/fallback/const-c.inc Time::HiRes extension
dist/Time-HiRes/fallback/const-xs.inc Time::HiRes extension
@@ -3932,7 +4071,6 @@ doio.c I/O operations
doop.c Support code for various operations
dosish.h Some defines for MS/DOSish machines
dquote.c Functions for double quotish contexts
-dquote_inline.h Inline functions for double quotish contexts
dump.c Debugging output
ebcdic_tables.h Generated tables included in utfebcdic.h
embed.fnc Database used by embed.pl
@@ -3961,6 +4099,7 @@ ext/B/B/Showlex.pm Compiler Showlex backend
ext/B/B/Terse.pm Compiler Terse backend
ext/B/B/Xref.pm Compiler Xref backend
ext/B/hints/darwin.pl Hints for named architecture
+ext/B/hints/openbsd.pl Hints for named architecture
ext/B/Makefile.PL Compiler backend makefile writer
ext/B/O.pm Compiler front-end module (-MO=...)
ext/B/t/b.t See if B works
@@ -3980,6 +4119,7 @@ ext/B/t/optree_sort.t inplace sort optimization regression
ext/B/t/optree_specials.t BEGIN, END, etc code
ext/B/t/optree_varinit.t my,our,local var init optimization
ext/B/t/OptreeCheck.pm optree comparison tool
+ext/B/t/perlstring.t See if B::perlstring output roundtrips properly
ext/B/t/pragma.t See if user pragmas work.
ext/B/t/showlex.t See if B::ShowLex works
ext/B/t/strict.t See if B works with strict and warnings.
@@ -4263,7 +4403,6 @@ ext/Sys-Hostname/Hostname.pm Sys::Hostname extension Perl module
ext/Sys-Hostname/Hostname.xs Sys::Hostname extension external subroutines
ext/Sys-Hostname/t/Hostname.t See if Sys::Hostname works
ext/Tie-Hash-NamedCapture/NamedCapture.pm Implements %- and %+ behaviour
-ext/Tie-Hash-NamedCapture/NamedCapture.xs Implements %- and %+ behaviour
ext/Tie-Hash-NamedCapture/t/tiehash.t Tests TIEHASH
ext/Tie-Memoize/lib/Tie/Memoize.pm Base class for memoized tied hashes
ext/Tie-Memoize/t/Tie-Memoize.t Test for Tie::Memoize
@@ -4339,6 +4478,7 @@ ext/XS-APItest/t/handy08.t XS::APItest: tests for handy.h
ext/XS-APItest/t/handy09.t XS::APItest: tests for handy.h
ext/XS-APItest/t/handy_base.pl XS::APItest: tests for handy.h
ext/XS-APItest/t/hash.t XS::APItest: tests for hash related APIs
+ext/XS-APItest/t/hv_macro.t XS::APItest: tests for low level macros used in hashing
ext/XS-APItest/t/join_with_space.t test op_convert_list
ext/XS-APItest/t/keyword_multiline.t test keyword plugin parsing across lines
ext/XS-APItest/t/keyword_plugin.t test keyword plugin mechanism
@@ -4384,6 +4524,7 @@ ext/XS-APItest/t/stmtsasexpr.t test recursive descent statement-sequence parsing
ext/XS-APItest/t/stuff_modify_bug.t test for eval side-effecting source string
ext/XS-APItest/t/stuff_svcur_bug.t test for a bug in lex_stuff_pvn
ext/XS-APItest/t/subcall.t Test XSUB calls
+ext/XS-APItest/t/subsignature.t Test parse_subsignature()
ext/XS-APItest/t/svcat.t Test sv_catpvn
ext/XS-APItest/t/svcatpvf.t Test sv_catpvf argument reordering
ext/XS-APItest/t/sviscow.t Test SvIsCOW
@@ -4432,7 +4573,6 @@ fakesdio.h stdio in terms of PerlIO
feature.h Feature header
form.h Public declarations for formats
generate_uudmap.c Generate uudmap.h, the uuencode decoding map
-git_version.h Pre-generated git_version.h for OpenBSD
globals.c File to declare global symbols (for shared library)
globvar.sym Global variables that need hiding when embedded
gv.c Glob value code
@@ -4578,7 +4718,6 @@ lib/Class/Struct.t See if Class::Struct works
lib/Config.t See if Config works
lib/Config/Extensions.pm Convenient hash lookup for built extensions
lib/Config/Extensions.t See if Config::Extensions works
-lib/Config_git.pl Pre-generated Config_git.pl for OpenBSD
lib/CORE.pod document the CORE namespace
lib/DB.pm Debugger API (draft)
lib/DB.t See if DB works
@@ -4625,8 +4764,6 @@ lib/FileHandle.pm Backward-compatible front end to IO extension
lib/FileHandle.t See if FileHandle works
lib/filetest.pm For "use filetest"
lib/filetest.t See if filetest works
-lib/FindBin.pm Find name of currently executing program
-lib/FindBin.t See if FindBin works
lib/Getopt/Std.pm Fetch command options (getopt, getopts)
lib/Getopt/Std.t See if Getopt::Std and Getopt::Long work
lib/h2ph.t See if h2ph works like it should
@@ -4669,6 +4806,7 @@ lib/perl5db/t/EnableModule.pm Tests for the Perl debugger
lib/perl5db/t/eval-line-bug Tests for the Perl debugger
lib/perl5db/t/fact Tests for the Perl debugger
lib/perl5db/t/filename-line-breakpoint Tests for the Perl debugger
+lib/perl5db/t/gh-17660 Tests for the Perl debugger
lib/perl5db/t/load-modules Tests for the Perl debugger
lib/perl5db/t/lsub-n Test script used by perl5db.t
lib/perl5db/t/lvalue-bug Tests for the Perl debugger
@@ -4701,10 +4839,7 @@ lib/perl5db/t/uncalled-subroutine Tests for the Perl debugger
lib/perl5db/t/with-subroutine Tests for the Perl debugger
lib/perlbug.t Tests for the Perl bug reporter
lib/PerlIO.pm PerlIO support module
-lib/Pod/t/InputObjects.t See if Pod::InputObjects works
-lib/Pod/t/Select.t See if Pod::Select works
lib/Pod/t/Usage.t See if Pod::Usage works
-lib/Pod/t/utils.t Test for Pod::ParseUtils
lib/SelectSaver.pm Enforce proper select scoping
lib/SelectSaver.t See if SelectSaver works
lib/sigtrap.pm For trapping an abort and giving traceback
@@ -4744,582 +4879,65 @@ lib/Unicode/README Explanation what happened to lib/unicode.
lib/Unicode/UCD.pm Unicode character database
lib/Unicode/UCD.t See if Unicode character database works
lib/unicore/ArabicShaping.txt Unicode character database
-lib/unicore/auxiliary/GCBTest.txt Unicode character database
-lib/unicore/auxiliary/GraphemeBreakProperty.txt Unicode character database
-lib/unicore/auxiliary/LBTest.txt Unicode character database
-lib/unicore/auxiliary/SBTest.txt Unicode character database
-lib/unicore/auxiliary/SentenceBreakProperty.txt Unicode character database
-lib/unicore/auxiliary/WBTest.txt Unicode character database
-lib/unicore/auxiliary/WordBreakProperty.txt Unicode character database
+lib/unicore/auxiliary/GCBTest.txt Unicode character database
+lib/unicore/auxiliary/GraphemeBreakProperty.txt Unicode character database
+lib/unicore/auxiliary/LBTest.txt Unicode character database
+lib/unicore/auxiliary/SBTest.txt Unicode character database
+lib/unicore/auxiliary/SentenceBreakProperty.txt Unicode character database
+lib/unicore/auxiliary/WBTest.txt Unicode character database
+lib/unicore/auxiliary/WordBreakProperty.txt Unicode character database
lib/unicore/BidiBrackets.txt Unicode character database
lib/unicore/BidiMirroring.txt Unicode character database
lib/unicore/Blocks.txt Unicode character database
lib/unicore/CaseFolding.txt Unicode character database
lib/unicore/CJKRadicals.txt Unicode character database
-lib/unicore/CombiningClass.pl Unicode character database
-lib/unicore/CompositionExclusions.txt Unicode character database
+lib/unicore/CompositionExclusions.txt Unicode character database
lib/unicore/DAge.txt Unicode character database
lib/unicore/DCoreProperties.txt Unicode character database
-lib/unicore/Decomposition.pl Unicode character database
-lib/unicore/DNormalizationProps.txt Unicode character database
+lib/unicore/DNormalizationProps.txt Unicode character database
lib/unicore/EastAsianWidth.txt Unicode character database
-lib/unicore/EmojiData.txt Unicode character database
+lib/unicore/emoji/emoji.txt Unicode character database
lib/unicore/EmojiSources.txt Unicode character database
-lib/unicore/EquivalentUnifiedIdeograph.txt Unicode character database
-lib/unicore/extracted/DBidiClass.txt Unicode character database
-lib/unicore/extracted/DBinaryProperties.txt Unicode character database
-lib/unicore/extracted/DCombiningClass.txt Unicode character database
-lib/unicore/extracted/DDecompositionType.txt Unicode character database
-lib/unicore/extracted/DEastAsianWidth.txt Unicode character database
-lib/unicore/extracted/DGeneralCategory.txt Unicode character database
-lib/unicore/extracted/DJoinGroup.txt Unicode character database
-lib/unicore/extracted/DJoinType.txt Unicode character database
-lib/unicore/extracted/DLineBreak.txt Unicode character database
-lib/unicore/extracted/DNumType.txt Unicode character database
-lib/unicore/extracted/DNumValues.txt Unicode character database
-lib/unicore/HangulSyllableType.txt Unicode character database
-lib/unicore/Heavy.pl Unicode character database
+lib/unicore/EquivalentUnifiedIdeograph.txt Unicode character database
+lib/unicore/extracted/DBidiClass.txt Unicode character database
+lib/unicore/extracted/DBinaryProperties.txt Unicode character database
+lib/unicore/extracted/DCombiningClass.txt Unicode character database
+lib/unicore/extracted/DDecompositionType.txt Unicode character database
+lib/unicore/extracted/DEastAsianWidth.txt Unicode character database
+lib/unicore/extracted/DGeneralCategory.txt Unicode character database
+lib/unicore/extracted/DJoinGroup.txt Unicode character database
+lib/unicore/extracted/DJoinType.txt Unicode character database
+lib/unicore/extracted/DLineBreak.txt Unicode character database
+lib/unicore/extracted/DNumType.txt Unicode character database
+lib/unicore/extracted/DNumValues.txt Unicode character database
+lib/unicore/HangulSyllableType.txt Unicode character database
+lib/unicore/IdStatus.txt Unicode UTS 39 database
+lib/unicore/IdType.txt Unicode UTS 39 database
lib/unicore/Index.txt Unicode character database
-lib/unicore/IndicPositionalCategory.txt Unicode character database
-lib/unicore/IndicSyllabicCategory.txt Unicode character database
+lib/unicore/IndicPositionalCategory.txt Unicode character database
+lib/unicore/IndicSyllabicCategory.txt Unicode character database
lib/unicore/Jamo.txt Unicode character database
-lib/unicore/lib/Age/NA.pl Unicode character database
-lib/unicore/lib/Age/V100.pl Unicode character database
-lib/unicore/lib/Age/V11.pl Unicode character database
-lib/unicore/lib/Age/V110.pl Unicode character database
-lib/unicore/lib/Age/V120.pl Unicode character database
-lib/unicore/lib/Age/V20.pl Unicode character database
-lib/unicore/lib/Age/V30.pl Unicode character database
-lib/unicore/lib/Age/V31.pl Unicode character database
-lib/unicore/lib/Age/V32.pl Unicode character database
-lib/unicore/lib/Age/V40.pl Unicode character database
-lib/unicore/lib/Age/V41.pl Unicode character database
-lib/unicore/lib/Age/V50.pl Unicode character database
-lib/unicore/lib/Age/V51.pl Unicode character database
-lib/unicore/lib/Age/V52.pl Unicode character database
-lib/unicore/lib/Age/V60.pl Unicode character database
-lib/unicore/lib/Age/V61.pl Unicode character database
-lib/unicore/lib/Age/V70.pl Unicode character database
-lib/unicore/lib/Age/V80.pl Unicode character database
-lib/unicore/lib/Age/V90.pl Unicode character database
-lib/unicore/lib/Alpha/Y.pl Unicode character database
-lib/unicore/lib/Bc/AL.pl Unicode character database
-lib/unicore/lib/Bc/AN.pl Unicode character database
-lib/unicore/lib/Bc/B.pl Unicode character database
-lib/unicore/lib/Bc/BN.pl Unicode character database
-lib/unicore/lib/Bc/CS.pl Unicode character database
-lib/unicore/lib/Bc/EN.pl Unicode character database
-lib/unicore/lib/Bc/ES.pl Unicode character database
-lib/unicore/lib/Bc/ET.pl Unicode character database
-lib/unicore/lib/Bc/L.pl Unicode character database
-lib/unicore/lib/Bc/NSM.pl Unicode character database
-lib/unicore/lib/Bc/ON.pl Unicode character database
-lib/unicore/lib/Bc/R.pl Unicode character database
-lib/unicore/lib/Bc/WS.pl Unicode character database
-lib/unicore/lib/BidiC/Y.pl Unicode character database
-lib/unicore/lib/BidiM/Y.pl Unicode character database
-lib/unicore/lib/Blk/NB.pl Unicode character database
-lib/unicore/lib/Bpt/C.pl Unicode character database
-lib/unicore/lib/Bpt/N.pl Unicode character database
-lib/unicore/lib/Bpt/O.pl Unicode character database
-lib/unicore/lib/Cased/Y.pl Unicode character database
-lib/unicore/lib/Ccc/A.pl Unicode character database
-lib/unicore/lib/Ccc/AL.pl Unicode character database
-lib/unicore/lib/Ccc/AR.pl Unicode character database
-lib/unicore/lib/Ccc/ATAR.pl Unicode character database
-lib/unicore/lib/Ccc/B.pl Unicode character database
-lib/unicore/lib/Ccc/BR.pl Unicode character database
-lib/unicore/lib/Ccc/DB.pl Unicode character database
-lib/unicore/lib/Ccc/NK.pl Unicode character database
-lib/unicore/lib/Ccc/NR.pl Unicode character database
-lib/unicore/lib/Ccc/OV.pl Unicode character database
-lib/unicore/lib/Ccc/VR.pl Unicode character database
-lib/unicore/lib/CE/Y.pl Unicode character database
-lib/unicore/lib/CI/Y.pl Unicode character database
-lib/unicore/lib/CompEx/Y.pl Unicode character database
-lib/unicore/lib/CWCF/Y.pl Unicode character database
-lib/unicore/lib/CWCM/Y.pl Unicode character database
-lib/unicore/lib/CWKCF/Y.pl Unicode character database
-lib/unicore/lib/CWL/Y.pl Unicode character database
-lib/unicore/lib/CWT/Y.pl Unicode character database
-lib/unicore/lib/CWU/Y.pl Unicode character database
-lib/unicore/lib/Dash/Y.pl Unicode character database
-lib/unicore/lib/Dep/Y.pl Unicode character database
-lib/unicore/lib/DI/Y.pl Unicode character database
-lib/unicore/lib/Dia/Y.pl Unicode character database
-lib/unicore/lib/Dt/Com.pl Unicode character database
-lib/unicore/lib/Dt/Enc.pl Unicode character database
-lib/unicore/lib/Dt/Fin.pl Unicode character database
-lib/unicore/lib/Dt/Font.pl Unicode character database
-lib/unicore/lib/Dt/Init.pl Unicode character database
-lib/unicore/lib/Dt/Iso.pl Unicode character database
-lib/unicore/lib/Dt/Med.pl Unicode character database
-lib/unicore/lib/Dt/Nar.pl Unicode character database
-lib/unicore/lib/Dt/Nb.pl Unicode character database
-lib/unicore/lib/Dt/NonCanon.pl Unicode character database
-lib/unicore/lib/Dt/Sqr.pl Unicode character database
-lib/unicore/lib/Dt/Sub.pl Unicode character database
-lib/unicore/lib/Dt/Sup.pl Unicode character database
-lib/unicore/lib/Dt/Vert.pl Unicode character database
-lib/unicore/lib/Ea/A.pl Unicode character database
-lib/unicore/lib/Ea/H.pl Unicode character database
-lib/unicore/lib/Ea/N.pl Unicode character database
-lib/unicore/lib/Ea/Na.pl Unicode character database
-lib/unicore/lib/Ea/W.pl Unicode character database
-lib/unicore/lib/Ext/Y.pl Unicode character database
-lib/unicore/lib/Gc/C.pl Unicode character database
-lib/unicore/lib/Gc/Cf.pl Unicode character database
-lib/unicore/lib/Gc/Cn.pl Unicode character database
-lib/unicore/lib/Gc/L.pl Unicode character database
-lib/unicore/lib/Gc/LC.pl Unicode character database
-lib/unicore/lib/Gc/Ll.pl Unicode character database
-lib/unicore/lib/Gc/Lm.pl Unicode character database
-lib/unicore/lib/Gc/Lo.pl Unicode character database
-lib/unicore/lib/Gc/Lu.pl Unicode character database
-lib/unicore/lib/Gc/M.pl Unicode character database
-lib/unicore/lib/Gc/Mc.pl Unicode character database
-lib/unicore/lib/Gc/Me.pl Unicode character database
-lib/unicore/lib/Gc/Mn.pl Unicode character database
-lib/unicore/lib/Gc/N.pl Unicode character database
-lib/unicore/lib/Gc/Nd.pl Unicode character database
-lib/unicore/lib/Gc/Nl.pl Unicode character database
-lib/unicore/lib/Gc/No.pl Unicode character database
-lib/unicore/lib/Gc/P.pl Unicode character database
-lib/unicore/lib/Gc/Pc.pl Unicode character database
-lib/unicore/lib/Gc/Pd.pl Unicode character database
-lib/unicore/lib/Gc/Pe.pl Unicode character database
-lib/unicore/lib/Gc/Pf.pl Unicode character database
-lib/unicore/lib/Gc/Pi.pl Unicode character database
-lib/unicore/lib/Gc/Po.pl Unicode character database
-lib/unicore/lib/Gc/Ps.pl Unicode character database
-lib/unicore/lib/Gc/S.pl Unicode character database
-lib/unicore/lib/Gc/Sc.pl Unicode character database
-lib/unicore/lib/Gc/Sk.pl Unicode character database
-lib/unicore/lib/Gc/Sm.pl Unicode character database
-lib/unicore/lib/Gc/So.pl Unicode character database
-lib/unicore/lib/Gc/Z.pl Unicode character database
-lib/unicore/lib/Gc/Zs.pl Unicode character database
-lib/unicore/lib/GCB/CN.pl Unicode character database
-lib/unicore/lib/GCB/EX.pl Unicode character database
-lib/unicore/lib/GCB/LV.pl Unicode character database
-lib/unicore/lib/GCB/LVT.pl Unicode character database
-lib/unicore/lib/GCB/PP.pl Unicode character database
-lib/unicore/lib/GCB/SM.pl Unicode character database
-lib/unicore/lib/GCB/XX.pl Unicode character database
-lib/unicore/lib/GrBase/Y.pl Unicode character database
-lib/unicore/lib/GrExt/Y.pl Unicode character database
-lib/unicore/lib/Hex/Y.pl Unicode character database
-lib/unicore/lib/Hst/NA.pl Unicode character database
-lib/unicore/lib/Hyphen/T.pl Unicode character database
-lib/unicore/lib/IDC/Y.pl Unicode character database
-lib/unicore/lib/Ideo/Y.pl Unicode character database
-lib/unicore/lib/IDS/Y.pl Unicode character database
-lib/unicore/lib/In/10_0.pl Unicode character database
-lib/unicore/lib/In/11_0.pl Unicode character database
-lib/unicore/lib/In/12_0.pl Unicode character database
-lib/unicore/lib/In/12_1.pl Unicode character database
-lib/unicore/lib/In/2_0.pl Unicode character database
-lib/unicore/lib/In/2_1.pl Unicode character database
-lib/unicore/lib/In/3_0.pl Unicode character database
-lib/unicore/lib/In/3_1.pl Unicode character database
-lib/unicore/lib/In/3_2.pl Unicode character database
-lib/unicore/lib/In/4_0.pl Unicode character database
-lib/unicore/lib/In/4_1.pl Unicode character database
-lib/unicore/lib/In/5_0.pl Unicode character database
-lib/unicore/lib/In/5_1.pl Unicode character database
-lib/unicore/lib/In/5_2.pl Unicode character database
-lib/unicore/lib/In/6_0.pl Unicode character database
-lib/unicore/lib/In/6_1.pl Unicode character database
-lib/unicore/lib/In/6_2.pl Unicode character database
-lib/unicore/lib/In/6_3.pl Unicode character database
-lib/unicore/lib/In/7_0.pl Unicode character database
-lib/unicore/lib/In/8_0.pl Unicode character database
-lib/unicore/lib/In/9_0.pl Unicode character database
-lib/unicore/lib/InPC/Bottom.pl Unicode character database
-lib/unicore/lib/InPC/Left.pl Unicode character database
-lib/unicore/lib/InPC/LeftAndR.pl Unicode character database
-lib/unicore/lib/InPC/NA.pl Unicode character database
-lib/unicore/lib/InPC/Overstru.pl Unicode character database
-lib/unicore/lib/InPC/Right.pl Unicode character database
-lib/unicore/lib/InPC/Top.pl Unicode character database
-lib/unicore/lib/InPC/TopAndBo.pl Unicode character database
-lib/unicore/lib/InPC/TopAndL2.pl Unicode character database
-lib/unicore/lib/InPC/TopAndLe.pl Unicode character database
-lib/unicore/lib/InPC/TopAndRi.pl Unicode character database
-lib/unicore/lib/InPC/VisualOr.pl Unicode character database
-lib/unicore/lib/InSC/Avagraha.pl Unicode character database
-lib/unicore/lib/InSC/Bindu.pl Unicode character database
-lib/unicore/lib/InSC/Cantilla.pl Unicode character database
-lib/unicore/lib/InSC/Consona2.pl Unicode character database
-lib/unicore/lib/InSC/Consona3.pl Unicode character database
-lib/unicore/lib/InSC/Consona4.pl Unicode character database
-lib/unicore/lib/InSC/Consona5.pl Unicode character database
-lib/unicore/lib/InSC/Consona6.pl Unicode character database
-lib/unicore/lib/InSC/Consona7.pl Unicode character database
-lib/unicore/lib/InSC/Consonan.pl Unicode character database
-lib/unicore/lib/InSC/Invisibl.pl Unicode character database
-lib/unicore/lib/InSC/Nukta.pl Unicode character database
-lib/unicore/lib/InSC/Number.pl Unicode character database
-lib/unicore/lib/InSC/Other.pl Unicode character database
-lib/unicore/lib/InSC/PureKill.pl Unicode character database
-lib/unicore/lib/InSC/Syllable.pl Unicode character database
-lib/unicore/lib/InSC/ToneMark.pl Unicode character database
-lib/unicore/lib/InSC/Virama.pl Unicode character database
-lib/unicore/lib/InSC/Visarga.pl Unicode character database
-lib/unicore/lib/InSC/Vowel.pl Unicode character database
-lib/unicore/lib/InSC/VowelDep.pl Unicode character database
-lib/unicore/lib/InSC/VowelInd.pl Unicode character database
-lib/unicore/lib/Jg/Ain.pl Unicode character database
-lib/unicore/lib/Jg/Alef.pl Unicode character database
-lib/unicore/lib/Jg/Beh.pl Unicode character database
-lib/unicore/lib/Jg/Dal.pl Unicode character database
-lib/unicore/lib/Jg/FarsiYeh.pl Unicode character database
-lib/unicore/lib/Jg/Feh.pl Unicode character database
-lib/unicore/lib/Jg/Gaf.pl Unicode character database
-lib/unicore/lib/Jg/Hah.pl Unicode character database
-lib/unicore/lib/Jg/HanifiRo.pl Unicode character database
-lib/unicore/lib/Jg/Kaf.pl Unicode character database
-lib/unicore/lib/Jg/Lam.pl Unicode character database
-lib/unicore/lib/Jg/NoJoinin.pl Unicode character database
-lib/unicore/lib/Jg/Qaf.pl Unicode character database
-lib/unicore/lib/Jg/Reh.pl Unicode character database
-lib/unicore/lib/Jg/Sad.pl Unicode character database
-lib/unicore/lib/Jg/Seen.pl Unicode character database
-lib/unicore/lib/Jg/Waw.pl Unicode character database
-lib/unicore/lib/Jg/Yeh.pl Unicode character database
-lib/unicore/lib/Jt/C.pl Unicode character database
-lib/unicore/lib/Jt/D.pl Unicode character database
-lib/unicore/lib/Jt/L.pl Unicode character database
-lib/unicore/lib/Jt/R.pl Unicode character database
-lib/unicore/lib/Jt/T.pl Unicode character database
-lib/unicore/lib/Jt/U.pl Unicode character database
-lib/unicore/lib/Lb/AI.pl Unicode character database
-lib/unicore/lib/Lb/AL.pl Unicode character database
-lib/unicore/lib/Lb/BA.pl Unicode character database
-lib/unicore/lib/Lb/BB.pl Unicode character database
-lib/unicore/lib/Lb/CJ.pl Unicode character database
-lib/unicore/lib/Lb/CL.pl Unicode character database
-lib/unicore/lib/Lb/CM.pl Unicode character database
-lib/unicore/lib/Lb/EB.pl Unicode character database
-lib/unicore/lib/Lb/EX.pl Unicode character database
-lib/unicore/lib/Lb/GL.pl Unicode character database
-lib/unicore/lib/Lb/ID.pl Unicode character database
-lib/unicore/lib/Lb/IN.pl Unicode character database
-lib/unicore/lib/Lb/IS.pl Unicode character database
-lib/unicore/lib/Lb/NS.pl Unicode character database
-lib/unicore/lib/Lb/NU.pl Unicode character database
-lib/unicore/lib/Lb/OP.pl Unicode character database
-lib/unicore/lib/Lb/PO.pl Unicode character database
-lib/unicore/lib/Lb/PR.pl Unicode character database
-lib/unicore/lib/Lb/QU.pl Unicode character database
-lib/unicore/lib/Lb/SA.pl Unicode character database
-lib/unicore/lib/Lb/XX.pl Unicode character database
-lib/unicore/lib/Lower/Y.pl Unicode character database
-lib/unicore/lib/Math/Y.pl Unicode character database
-lib/unicore/lib/NFCQC/M.pl Unicode character database
-lib/unicore/lib/NFCQC/Y.pl Unicode character database
-lib/unicore/lib/NFDQC/N.pl Unicode character database
-lib/unicore/lib/NFDQC/Y.pl Unicode character database
-lib/unicore/lib/NFKCQC/N.pl Unicode character database
-lib/unicore/lib/NFKCQC/Y.pl Unicode character database
-lib/unicore/lib/NFKDQC/N.pl Unicode character database
-lib/unicore/lib/NFKDQC/Y.pl Unicode character database
-lib/unicore/lib/Nt/Di.pl Unicode character database
-lib/unicore/lib/Nt/None.pl Unicode character database
-lib/unicore/lib/Nt/Nu.pl Unicode character database
-lib/unicore/lib/Nv/0.pl Unicode character database
-lib/unicore/lib/Nv/1.pl Unicode character database
-lib/unicore/lib/Nv/10.pl Unicode character database
-lib/unicore/lib/Nv/100.pl Unicode character database
-lib/unicore/lib/Nv/1000.pl Unicode character database
-lib/unicore/lib/Nv/10000.pl Unicode character database
-lib/unicore/lib/Nv/100000.pl Unicode character database
-lib/unicore/lib/Nv/11.pl Unicode character database
-lib/unicore/lib/Nv/12.pl Unicode character database
-lib/unicore/lib/Nv/13.pl Unicode character database
-lib/unicore/lib/Nv/14.pl Unicode character database
-lib/unicore/lib/Nv/15.pl Unicode character database
-lib/unicore/lib/Nv/16.pl Unicode character database
-lib/unicore/lib/Nv/17.pl Unicode character database
-lib/unicore/lib/Nv/18.pl Unicode character database
-lib/unicore/lib/Nv/19.pl Unicode character database
-lib/unicore/lib/Nv/1_16.pl Unicode character database
-lib/unicore/lib/Nv/1_2.pl Unicode character database
-lib/unicore/lib/Nv/1_3.pl Unicode character database
-lib/unicore/lib/Nv/1_4.pl Unicode character database
-lib/unicore/lib/Nv/1_6.pl Unicode character database
-lib/unicore/lib/Nv/1_8.pl Unicode character database
-lib/unicore/lib/Nv/2.pl Unicode character database
-lib/unicore/lib/Nv/20.pl Unicode character database
-lib/unicore/lib/Nv/200.pl Unicode character database
-lib/unicore/lib/Nv/2000.pl Unicode character database
-lib/unicore/lib/Nv/20000.pl Unicode character database
-lib/unicore/lib/Nv/2_3.pl Unicode character database
-lib/unicore/lib/Nv/3.pl Unicode character database
-lib/unicore/lib/Nv/30.pl Unicode character database
-lib/unicore/lib/Nv/300.pl Unicode character database
-lib/unicore/lib/Nv/3000.pl Unicode character database
-lib/unicore/lib/Nv/30000.pl Unicode character database
-lib/unicore/lib/Nv/3_16.pl Unicode character database
-lib/unicore/lib/Nv/3_4.pl Unicode character database
-lib/unicore/lib/Nv/4.pl Unicode character database
-lib/unicore/lib/Nv/40.pl Unicode character database
-lib/unicore/lib/Nv/400.pl Unicode character database
-lib/unicore/lib/Nv/4000.pl Unicode character database
-lib/unicore/lib/Nv/40000.pl Unicode character database
-lib/unicore/lib/Nv/5.pl Unicode character database
-lib/unicore/lib/Nv/50.pl Unicode character database
-lib/unicore/lib/Nv/500.pl Unicode character database
-lib/unicore/lib/Nv/5000.pl Unicode character database
-lib/unicore/lib/Nv/50000.pl Unicode character database
-lib/unicore/lib/Nv/6.pl Unicode character database
-lib/unicore/lib/Nv/60.pl Unicode character database
-lib/unicore/lib/Nv/600.pl Unicode character database
-lib/unicore/lib/Nv/6000.pl Unicode character database
-lib/unicore/lib/Nv/60000.pl Unicode character database
-lib/unicore/lib/Nv/7.pl Unicode character database
-lib/unicore/lib/Nv/70.pl Unicode character database
-lib/unicore/lib/Nv/700.pl Unicode character database
-lib/unicore/lib/Nv/7000.pl Unicode character database
-lib/unicore/lib/Nv/70000.pl Unicode character database
-lib/unicore/lib/Nv/8.pl Unicode character database
-lib/unicore/lib/Nv/80.pl Unicode character database
-lib/unicore/lib/Nv/800.pl Unicode character database
-lib/unicore/lib/Nv/8000.pl Unicode character database
-lib/unicore/lib/Nv/80000.pl Unicode character database
-lib/unicore/lib/Nv/9.pl Unicode character database
-lib/unicore/lib/Nv/90.pl Unicode character database
-lib/unicore/lib/Nv/900.pl Unicode character database
-lib/unicore/lib/Nv/9000.pl Unicode character database
-lib/unicore/lib/Nv/90000.pl Unicode character database
-lib/unicore/lib/PatSyn/Y.pl Unicode character database
-lib/unicore/lib/PCM/Y.pl Unicode character database
-lib/unicore/lib/Perl/_PerlAny.pl Unicode character database
-lib/unicore/lib/Perl/_PerlCh2.pl Unicode character database
-lib/unicore/lib/Perl/_PerlCha.pl Unicode character database
-lib/unicore/lib/Perl/_PerlFol.pl Unicode character database
-lib/unicore/lib/Perl/_PerlIDC.pl Unicode character database
-lib/unicore/lib/Perl/_PerlIDS.pl Unicode character database
-lib/unicore/lib/Perl/_PerlIsI.pl Unicode character database
-lib/unicore/lib/Perl/_PerlNch.pl Unicode character database
-lib/unicore/lib/Perl/_PerlNon.pl Unicode character database
-lib/unicore/lib/Perl/_PerlPat.pl Unicode character database
-lib/unicore/lib/Perl/_PerlPr2.pl Unicode character database
-lib/unicore/lib/Perl/_PerlPro.pl Unicode character database
-lib/unicore/lib/Perl/_PerlQuo.pl Unicode character database
-lib/unicore/lib/Perl/Alnum.pl Unicode character database
-lib/unicore/lib/Perl/Assigned.pl Unicode character database
-lib/unicore/lib/Perl/Blank.pl Unicode character database
-lib/unicore/lib/Perl/Graph.pl Unicode character database
-lib/unicore/lib/Perl/PerlWord.pl Unicode character database
-lib/unicore/lib/Perl/PosixPun.pl Unicode character database
-lib/unicore/lib/Perl/Print.pl Unicode character database
-lib/unicore/lib/Perl/SpacePer.pl Unicode character database
-lib/unicore/lib/Perl/Title.pl Unicode character database
-lib/unicore/lib/Perl/Word.pl Unicode character database
-lib/unicore/lib/Perl/XPosixPu.pl Unicode character database
-lib/unicore/lib/QMark/Y.pl Unicode character database
-lib/unicore/lib/SB/AT.pl Unicode character database
-lib/unicore/lib/SB/CL.pl Unicode character database
-lib/unicore/lib/SB/EX.pl Unicode character database
-lib/unicore/lib/SB/FO.pl Unicode character database
-lib/unicore/lib/SB/LE.pl Unicode character database
-lib/unicore/lib/SB/LO.pl Unicode character database
-lib/unicore/lib/SB/NU.pl Unicode character database
-lib/unicore/lib/SB/SC.pl Unicode character database
-lib/unicore/lib/SB/Sp.pl Unicode character database
-lib/unicore/lib/SB/ST.pl Unicode character database
-lib/unicore/lib/SB/UP.pl Unicode character database
-lib/unicore/lib/SB/XX.pl Unicode character database
-lib/unicore/lib/Sc/Arab.pl Unicode character database
-lib/unicore/lib/Sc/Armn.pl Unicode character database
-lib/unicore/lib/Sc/Beng.pl Unicode character database
-lib/unicore/lib/Sc/Cprt.pl Unicode character database
-lib/unicore/lib/Sc/Cyrl.pl Unicode character database
-lib/unicore/lib/Sc/Deva.pl Unicode character database
-lib/unicore/lib/Sc/Dupl.pl Unicode character database
-lib/unicore/lib/Sc/Geor.pl Unicode character database
-lib/unicore/lib/Sc/Glag.pl Unicode character database
-lib/unicore/lib/Sc/Gong.pl Unicode character database
-lib/unicore/lib/Sc/Gonm.pl Unicode character database
-lib/unicore/lib/Sc/Gran.pl Unicode character database
-lib/unicore/lib/Sc/Grek.pl Unicode character database
-lib/unicore/lib/Sc/Gujr.pl Unicode character database
-lib/unicore/lib/Sc/Guru.pl Unicode character database
-lib/unicore/lib/Sc/Han.pl Unicode character database
-lib/unicore/lib/Sc/Hang.pl Unicode character database
-lib/unicore/lib/Sc/Hira.pl Unicode character database
-lib/unicore/lib/Sc/Kana.pl Unicode character database
-lib/unicore/lib/Sc/Knda.pl Unicode character database
-lib/unicore/lib/Sc/Latn.pl Unicode character database
-lib/unicore/lib/Sc/Limb.pl Unicode character database
-lib/unicore/lib/Sc/Linb.pl Unicode character database
-lib/unicore/lib/Sc/Mlym.pl Unicode character database
-lib/unicore/lib/Sc/Mong.pl Unicode character database
-lib/unicore/lib/Sc/Mult.pl Unicode character database
-lib/unicore/lib/Sc/Orya.pl Unicode character database
-lib/unicore/lib/Sc/Sinh.pl Unicode character database
-lib/unicore/lib/Sc/Syrc.pl Unicode character database
-lib/unicore/lib/Sc/Taml.pl Unicode character database
-lib/unicore/lib/Sc/Telu.pl Unicode character database
-lib/unicore/lib/Sc/Zinh.pl Unicode character database
-lib/unicore/lib/Sc/Zyyy.pl Unicode character database
-lib/unicore/lib/Scx/Adlm.pl Unicode character database
-lib/unicore/lib/Scx/Arab.pl Unicode character database
-lib/unicore/lib/Scx/Armn.pl Unicode character database
-lib/unicore/lib/Scx/Beng.pl Unicode character database
-lib/unicore/lib/Scx/Bhks.pl Unicode character database
-lib/unicore/lib/Scx/Bopo.pl Unicode character database
-lib/unicore/lib/Scx/Cakm.pl Unicode character database
-lib/unicore/lib/Scx/Cham.pl Unicode character database
-lib/unicore/lib/Scx/Copt.pl Unicode character database
-lib/unicore/lib/Scx/Cprt.pl Unicode character database
-lib/unicore/lib/Scx/Cyrl.pl Unicode character database
-lib/unicore/lib/Scx/Deva.pl Unicode character database
-lib/unicore/lib/Scx/Dupl.pl Unicode character database
-lib/unicore/lib/Scx/Ethi.pl Unicode character database
-lib/unicore/lib/Scx/Geor.pl Unicode character database
-lib/unicore/lib/Scx/Glag.pl Unicode character database
-lib/unicore/lib/Scx/Gong.pl Unicode character database
-lib/unicore/lib/Scx/Gonm.pl Unicode character database
-lib/unicore/lib/Scx/Gran.pl Unicode character database
-lib/unicore/lib/Scx/Grek.pl Unicode character database
-lib/unicore/lib/Scx/Gujr.pl Unicode character database
-lib/unicore/lib/Scx/Guru.pl Unicode character database
-lib/unicore/lib/Scx/Han.pl Unicode character database
-lib/unicore/lib/Scx/Hang.pl Unicode character database
-lib/unicore/lib/Scx/Hebr.pl Unicode character database
-lib/unicore/lib/Scx/Hira.pl Unicode character database
-lib/unicore/lib/Scx/Hmng.pl Unicode character database
-lib/unicore/lib/Scx/Hmnp.pl Unicode character database
-lib/unicore/lib/Scx/Kana.pl Unicode character database
-lib/unicore/lib/Scx/Khar.pl Unicode character database
-lib/unicore/lib/Scx/Khmr.pl Unicode character database
-lib/unicore/lib/Scx/Khoj.pl Unicode character database
-lib/unicore/lib/Scx/Knda.pl Unicode character database
-lib/unicore/lib/Scx/Kthi.pl Unicode character database
-lib/unicore/lib/Scx/Lana.pl Unicode character database
-lib/unicore/lib/Scx/Lao.pl Unicode character database
-lib/unicore/lib/Scx/Latn.pl Unicode character database
-lib/unicore/lib/Scx/Limb.pl Unicode character database
-lib/unicore/lib/Scx/Lina.pl Unicode character database
-lib/unicore/lib/Scx/Linb.pl Unicode character database
-lib/unicore/lib/Scx/Mlym.pl Unicode character database
-lib/unicore/lib/Scx/Mong.pl Unicode character database
-lib/unicore/lib/Scx/Mult.pl Unicode character database
-lib/unicore/lib/Scx/Mymr.pl Unicode character database
-lib/unicore/lib/Scx/Nand.pl Unicode character database
-lib/unicore/lib/Scx/Orya.pl Unicode character database
-lib/unicore/lib/Scx/Phlp.pl Unicode character database
-lib/unicore/lib/Scx/Rohg.pl Unicode character database
-lib/unicore/lib/Scx/Shrd.pl Unicode character database
-lib/unicore/lib/Scx/Sind.pl Unicode character database
-lib/unicore/lib/Scx/Sinh.pl Unicode character database
-lib/unicore/lib/Scx/Syrc.pl Unicode character database
-lib/unicore/lib/Scx/Tagb.pl Unicode character database
-lib/unicore/lib/Scx/Takr.pl Unicode character database
-lib/unicore/lib/Scx/Talu.pl Unicode character database
-lib/unicore/lib/Scx/Taml.pl Unicode character database
-lib/unicore/lib/Scx/Telu.pl Unicode character database
-lib/unicore/lib/Scx/Thaa.pl Unicode character database
-lib/unicore/lib/Scx/Tibt.pl Unicode character database
-lib/unicore/lib/Scx/Tirh.pl Unicode character database
-lib/unicore/lib/Scx/Xsux.pl Unicode character database
-lib/unicore/lib/Scx/Yi.pl Unicode character database
-lib/unicore/lib/Scx/Zinh.pl Unicode character database
-lib/unicore/lib/Scx/Zyyy.pl Unicode character database
-lib/unicore/lib/Scx/Zzzz.pl Unicode character database
-lib/unicore/lib/SD/Y.pl Unicode character database
-lib/unicore/lib/STerm/Y.pl Unicode character database
-lib/unicore/lib/Term/Y.pl Unicode character database
-lib/unicore/lib/UIdeo/Y.pl Unicode character database
-lib/unicore/lib/Upper/Y.pl Unicode character database
-lib/unicore/lib/Vo/R.pl Unicode character database
-lib/unicore/lib/Vo/Tr.pl Unicode character database
-lib/unicore/lib/Vo/Tu.pl Unicode character database
-lib/unicore/lib/Vo/U.pl Unicode character database
-lib/unicore/lib/WB/EX.pl Unicode character database
-lib/unicore/lib/WB/Extend.pl Unicode character database
-lib/unicore/lib/WB/FO.pl Unicode character database
-lib/unicore/lib/WB/HL.pl Unicode character database
-lib/unicore/lib/WB/KA.pl Unicode character database
-lib/unicore/lib/WB/LE.pl Unicode character database
-lib/unicore/lib/WB/MB.pl Unicode character database
-lib/unicore/lib/WB/ML.pl Unicode character database
-lib/unicore/lib/WB/MN.pl Unicode character database
-lib/unicore/lib/WB/NU.pl Unicode character database
-lib/unicore/lib/WB/WSegSpac.pl Unicode character database
-lib/unicore/lib/WB/XX.pl Unicode character database
-lib/unicore/lib/XIDC/Y.pl Unicode character database
-lib/unicore/lib/XIDS/Y.pl Unicode character database
lib/unicore/LineBreak.txt Unicode character database
lib/unicore/Makefile Unicode character database
lib/unicore/mktables Unicode character database generator
-lib/unicore/mktables.lst Unicode character database
-lib/unicore/Name.pl Unicode character database
-lib/unicore/Name.pm Unicode character database
lib/unicore/NameAliases.txt Unicode character database
lib/unicore/NamedSequences.txt Unicode character database
lib/unicore/NamedSqProv.txt Unicode character database
lib/unicore/NamesList.txt Unicode character database
-lib/unicore/NormalizationCorrections.txt Unicode character database
+lib/unicore/NormalizationCorrections.txt Unicode character database
lib/unicore/PropertyAliases.txt Unicode character database
lib/unicore/PropList.txt Unicode character database
-lib/unicore/PropValueAliases.txt Unicode character database
+lib/unicore/PropValueAliases.txt Unicode character database
lib/unicore/README.perl Unicode character database
lib/unicore/ReadMe.txt Unicode character database info
-lib/unicore/ScriptExtensions.txt Unicode character database
+lib/unicore/ScriptExtensions.txt Unicode character database
lib/unicore/Scripts.txt Unicode character database
lib/unicore/SpecialCasing.txt Unicode character database
-lib/unicore/StandardizedVariants.txt Unicode character database
-lib/unicore/TestProp.pl Unicode character database
-lib/unicore/To/_PerlLB.pl Unicode character database
-lib/unicore/To/_PerlSCX.pl Unicode character database
-lib/unicore/To/Age.pl Unicode character database
-lib/unicore/To/Bc.pl Unicode character database
-lib/unicore/To/Bmg.pl Unicode character database
-lib/unicore/To/Bpb.pl Unicode character database
-lib/unicore/To/Bpt.pl Unicode character database
-lib/unicore/To/Cf.pl Unicode character database
-lib/unicore/To/Digit.pl Unicode character database
-lib/unicore/To/Ea.pl Unicode character database
-lib/unicore/To/EqUIdeo.pl Unicode character database
-lib/unicore/To/Fold.pl Unicode character database
-lib/unicore/To/Gc.pl Unicode character database
-lib/unicore/To/GCB.pl Unicode character database
-lib/unicore/To/Hst.pl Unicode character database
-lib/unicore/To/InPC.pl Unicode character database
-lib/unicore/To/InSC.pl Unicode character database
-lib/unicore/To/Isc.pl Unicode character database
-lib/unicore/To/Jg.pl Unicode character database
-lib/unicore/To/Jt.pl Unicode character database
-lib/unicore/To/Lb.pl Unicode character database
-lib/unicore/To/Lc.pl Unicode character database
-lib/unicore/To/Lower.pl Unicode character database
-lib/unicore/To/Na1.pl Unicode character database
-lib/unicore/To/NameAlia.pl Unicode character database
-lib/unicore/To/NFCQC.pl Unicode character database
-lib/unicore/To/NFDQC.pl Unicode character database
-lib/unicore/To/NFKCCF.pl Unicode character database
-lib/unicore/To/NFKCQC.pl Unicode character database
-lib/unicore/To/NFKDQC.pl Unicode character database
-lib/unicore/To/Nt.pl Unicode character database
-lib/unicore/To/Nv.pl Unicode character database
-lib/unicore/To/PerlDeci.pl Unicode character database
-lib/unicore/To/SB.pl Unicode character database
-lib/unicore/To/Sc.pl Unicode character database
-lib/unicore/To/Scx.pl Unicode character database
-lib/unicore/To/Tc.pl Unicode character database
-lib/unicore/To/Title.pl Unicode character database
-lib/unicore/To/Uc.pl Unicode character database
-lib/unicore/To/Upper.pl Unicode character database
-lib/unicore/To/Vo.pl Unicode character database
-lib/unicore/To/WB.pl Unicode character database
-lib/unicore/UCD.pl Unicode character database
+lib/unicore/StandardizedVariants.txt Unicode character database
lib/unicore/uni_keywords.pl Indices into array in charclass_invlists.h
lib/unicore/UnicodeData.txt Unicode character database
lib/unicore/version The version of the Unicode
-lib/unicore/VerticalOrientation.txt Unicode character database
+lib/unicore/VerticalOrientation.txt Unicode character database
lib/UNIVERSAL.pm Base class for ALL classes
lib/User/grent.pm By-name interface to Perl's builtin getgr*
lib/User/grent.t See if User::grwent works
@@ -5327,7 +4945,6 @@ lib/User/pwent.pm By-name interface to Perl's builtin getpw*
lib/User/pwent.t See if User::pwent works
lib/utf8.pm Pragma to control Unicode support
lib/utf8.t See if utf8 operations work
-lib/utf8_heavy.pl Support routines for utf8 pragma
lib/vars.pm Declare pseudo-imported global variables
lib/vars.t See if "use vars" works
lib/vars_carp.t See if "use vars" doesn't load Carp.pm per default
@@ -5571,9 +5188,12 @@ pod/perl5263delta.pod Perl changes in version 5.26.3
pod/perl5280delta.pod Perl changes in version 5.28.0
pod/perl5281delta.pod Perl changes in version 5.28.1
pod/perl5282delta.pod Perl changes in version 5.28.2
+pod/perl5283delta.pod Perl changes in version 5.28.3
pod/perl5300delta.pod Perl changes in version 5.30.0
pod/perl5301delta.pod Perl changes in version 5.30.1
pod/perl5302delta.pod Perl changes in version 5.30.2
+pod/perl5303delta.pod Perl changes in version 5.30.3
+pod/perl5320delta.pod Perl changes in version 5.32.0
pod/perl561delta.pod Perl changes in version 5.6.1
pod/perl56delta.pod Perl changes in version 5.6
pod/perl581delta.pod Perl changes in version 5.8.1
@@ -5613,6 +5233,7 @@ pod/perlfork.pod Perl fork() information
pod/perlform.pod Perl formats
pod/perlfunc.pod Perl built-in functions
pod/perlgit.pod Using git with the Perl repository
+pod/perlgov.pod Perl Rules of Governance
pod/perlgpl.pod GNU General Public License
pod/perlguts.pod Perl internal functions for those doing extensions
pod/perlhack.pod Perl hackers guide
@@ -5658,6 +5279,7 @@ pod/perlreref.pod Perl regular expressions quick reference
pod/perlretut.pod Perl regular expressions tutorial
pod/perlrun.pod Perl execution and options
pod/perlsec.pod Perl security
+pod/perlsecpolicy.pod Perl security report handling policy
pod/perlsource.pod Guide to the Perl source tree
pod/perlstyle.pod Perl style guide
pod/perlsub.pod Perl subroutines
@@ -5672,7 +5294,6 @@ pod/perlunicode.pod Perl Unicode support
pod/perlunicook.pod Perl Unicode cookbook
pod/perlunifaq.pod Perl Unicode FAQ
pod/perluniintro.pod Perl Unicode introduction
-pod/perluniprops.pod Index of Unicode properties in Perl
pod/perlunitut.pod Perl Unicode tutorial
pod/perlutil.pod utilities packaged with the Perl distribution
pod/perlvar.pod Perl predefined variables
@@ -5748,6 +5369,7 @@ Porting/release_announcement_template.txt
Porting/release_managers_guide.pod Release Manager's Guide
Porting/release_schedule.pod Schedule for future releases
Porting/rt_list_patches A tool to help you apply patches from RT
+Porting/security_template.pod Template for vulnerability announcements
Porting/sort_perldiag.pl Keep our diagnostics orderly
Porting/sync-with-cpan Sync with CPAN
Porting/timecheck.c Test program for the 2038 fix
@@ -5771,7 +5393,6 @@ README.aix Perl notes for AIX
README.amiga Perl notes for AmigaOS
README.android Perl notes for Android
README.bs2000 Perl notes for POSIX-BC BS2000
-README.ce Perl notes for WinCE
README.cn Perl for Simplified Chinese (in EUC-CN)
README.cygwin Perl notes for Cygwin
README.dos Perl notes for DOS
@@ -5843,6 +5464,7 @@ runtests.SH A script that generates runtests
sbox32_hash.h SBox hash code (32 Bit SBOX based hash function)
scope.c Scope entry and exit code
scope.h Scope entry and exit header
+SECURITY.md Add Security Policy for GitHub
stadtx_hash.h StadtX hash code (64 Bit fast hash function)
sv.c Scalar value code
sv.h Scalar value header
@@ -5905,7 +5527,7 @@ t/base/rs.t See if record-read works
t/base/term.t See if various terms work
t/base/translate.t See if character set translation works
t/base/while.t See if while work
-t/benchmark/rt26188-speed-up-keys-on-empty-hash.t Benchmark if keys on empty hashes is fast enough
+t/benchmark/gh7094-speed-up-keys-on-empty-hash.t Benchmark if keys on empty hashes is fast enough
t/bigmem/hash.t Check hashing too large strings throws an exception
t/bigmem/index.t Check that index() handles large offsets
t/bigmem/pos.t Check that pos() handles large offsets
@@ -5989,6 +5611,7 @@ t/io/tell.t See if file seeking works
t/io/through.t See if pipe passes data intact
t/io/utf8.t See if file seeking works
t/japh/abigail.t Obscure tests
+t/lib/CannotParse.pm For test case in op/require_errors.t
t/lib/charnames/alias Tests of "use charnames" with aliases.
t/lib/Cname.pm Test charnames in regexes (op/pat.t)
t/lib/common.pl Helper for lib/{warnings,feature}.t
@@ -6014,8 +5637,10 @@ t/lib/Devel/nodb.pm Module for t/run/switchd.t
t/lib/Devel/switchd.pm Module for t/run/switchd.t
t/lib/Devel/switchd_empty.pm Module for t/run/switchd.t
t/lib/Devel/switchd_goto.pm Module for t/run/switchd.t
+t/lib/feature/bits Tests for feature bit handling
t/lib/feature/bundle Tests for feature bundles
t/lib/feature/implicit Tests for implicit loading of feature.pm
+t/lib/feature/indirect Tests for enabling/disabling indirect method calls
t/lib/feature/nonesuch Tests for enabling/disabling nonexistent feature
t/lib/feature/removed Tests for enabling/disabling removed feature
t/lib/feature/say Tests for enabling/disabling say feature
@@ -6051,7 +5676,6 @@ t/lib/warnings/9enabled Tests warnings
t/lib/warnings/9uninit Tests "Use of uninitialized" warnings
t/lib/warnings/av Tests for av.c for warnings.t
t/lib/warnings/doio Tests for doio.c for warnings.t
-t/lib/warnings/doop Tests for doop.c for warnings.t
t/lib/warnings/gv Tests for gv.c for warnings.t
t/lib/warnings/hv Tests for hv.c for warnings.t
t/lib/warnings/malloc Tests for malloc.c for warnings.t
@@ -6174,6 +5798,7 @@ t/op/chop.t See if chop works
t/op/chr.t See if chr works
t/op/closure.t See if closures work
t/op/closure_test.pl Extra file for closure.t
+t/op/cmpchain.t See if comparison chaining works
t/op/concat2.t Tests too complex for concat.t
t/op/cond.t See if conditional expressions work
t/op/const-optree.t Tests for sub(){...} becoming constant
@@ -6204,7 +5829,7 @@ t/op/exec.t See if exec, system and qx work
t/op/exists_sub.t See if exists(&sub) works
t/op/exp.t See if math functions work
t/op/fh.t See if filehandles work
-t/op/filehandle.t Tests for http://rt.perl.org/rt3/Ticket/Display.html?id=72586
+t/op/filehandle.t Tests for https://github.com/Perl/perl5/issues/10133
t/op/filetest.t See if file tests work
t/op/filetest_stack_ok.t See if file tests leave their argument on the stack
t/op/filetest_t.t See if -t file test works
@@ -6236,6 +5861,7 @@ t/op/index.t See if index works
t/op/index_thr.t See if index works in another thread
t/op/infnan.t See if inf/nan work
t/op/int.t See if int works
+t/op/isa.t See if isa works
t/op/join.t See if join works
t/op/kill0.t See if kill works
t/op/kill0_child Process tree script that is kill()ed
@@ -6300,6 +5926,7 @@ t/op/runlevel.t See if die() works from perl_call_*()
t/op/select.t See if 0- and 1-argument select works
t/op/setpgrpstack.t See if setpgrp works
t/op/sigdispatch.t See if signals are always dispatched
+t/op/signame_canonical.t See if duplicate signal names always use the canonical name when the handler is invoked.
t/op/signatures.t See if sub signatures work
t/op/sigsystem.t See if system and SIGCHLD handlers play together nicely
t/op/sleep.t See if sleep works
@@ -6414,6 +6041,7 @@ t/porting/test_bootstrap.t Test that the instructions for test bootstrapping are
t/porting/utils.t Check that utility scripts still compile
t/re/alpha_assertions.t See if things like '(*postive_lookahed:...) work properly
t/re/anyof.t See if bracketed char classes [...] compile properly
+t/re/begin-once.t Checking that /o freeze a variable in a RegExp
t/re/bigfuzzy_not_utf8.t Big and ugly tests not storable as UTF-8
t/re/charset.t See if regex modifiers like /d, /u work properly
t/re/fold_grind.pl Core file to see if regex case folding works properly
@@ -6531,7 +6159,6 @@ t/test_pl/tempfile.t Tests for the simple testing library
t/thread_it.pl Run regression tests in a new thread
t/uni/attrs.t See if Unicode attributes work
t/uni/bless.t See if Unicode bless works
-t/uni/cache.t See if Unicode swash caching works
t/uni/caller.t See if Unicode doesn't get mangled in caller()
t/uni/case.pl See if Unicode casing works
t/uni/chomp.t See if Unicode chomp works
@@ -6610,6 +6237,7 @@ utils/ptardiff.PL The ptardiff utility
utils/ptargrep.PL The ptargrep utility
utils/shasum.PL filter for computing SHA digests (analogous to md5sum)
utils/splain.PL Stand-alone version of diagnostics.pm
+utils/streamzip.PL
utils/xsubpp.PL External subroutine preprocessor
utils/zipdetails.PL display the internal structure of zip files
vms/descrip_mms.template Template MM[SK] description file for build
@@ -6638,17 +6266,8 @@ win32/bin/perlglob.pl Win32 globbing
win32/bin/pl2bat.pl wrap perl scripts into batch files
win32/bin/runperl.pl run perl script via batch file namesake
win32/bin/search.pl Win32 port
-win32/ce-helpers/cecopy-lib.pl WinCE port
-win32/ce-helpers/comp.pl WinCE port
-win32/ce-helpers/compile.bat WinCE port
-win32/ce-helpers/compile-all.bat WinCE port
-win32/ce-helpers/makedist.pl WinCE port
-win32/ce-helpers/registry.bat WinCE port
-win32/ce-helpers/sdsdkenv.bat WinCE port
-win32/config.ce WinCE port
win32/config.gc Win32 base line config.sh (MinGW build)
win32/config.vc Win32 base line config.sh (Visual C++ build)
-win32/config_H.ce WinCE port
win32/config_H.gc Win32 config header (MinGW build)
win32/config_h.PL Perl code to convert Win32 config.sh to config.h
win32/config_H.vc Win32 config header (Visual C++ build)
@@ -6665,32 +6284,24 @@ win32/include/sys/errno2.h Win32 port
win32/include/sys/socket.h Win32 port
win32/list_static_libs.pl prints libraries for static linking
win32/Makefile Win32 makefile for NMAKE (Visual C++ build)
-win32/Makefile.ce WinCE port
win32/makefile.mk Win32 makefile for DMAKE (BC++, VC++ builds)
-win32/perl.rc WinCE port
win32/perlexe.ico perlexe.ico image file
win32/perlexe.manifest Assembly manifest file
win32/perlexe.rc associated perl binary with icon
win32/perlglob.c Win32 port
win32/perlhost.h Perl "host" implementation
win32/perllib.c Win32 port
-win32/perlmaince.c WinCE port
win32/pod.mak Win32 port
win32/runperl.c Win32 port
-win32/vdir.h Perl "host" virtual directory manager for CE
-win32/vmem.h Perl "host" memory manager for CE
+win32/vdir.h Perl "host" virtual directory manager for Win32
+win32/vmem.h Perl "host" memory manager for Win32
win32/win32.c Win32 port
win32/win32.h Win32 port
-win32/win32ceio.c Win32/WinCE PerlIO layer support
win32/win32io.c Win32 PerlIO layer support
win32/win32iop.h Win32 port
-win32/win32iop-o.h WinCE port
win32/win32sck.c Win32 port
win32/win32thread.c Win32 functions for threads
win32/win32thread.h Win32 port mapping to threads
-win32/wince.c WinCE port
-win32/wince.h WinCE port
-win32/wincesck.c WinCE port
write_buildcustomize.pl Generate lib/buildcustomize.pl
XSUB.h Include file for extension subroutines
zaphod32_hash.h Zaphod32 hash code (32 bit fast hash function)
diff --git a/gnu/usr.bin/perl/META.json b/gnu/usr.bin/perl/META.json
index eb02af46b33..7ecc883b3fa 100644
--- a/gnu/usr.bin/perl/META.json
+++ b/gnu/usr.bin/perl/META.json
@@ -30,6 +30,7 @@
"dist/ExtUtils-CBuilder",
"dist/ExtUtils-ParseXS",
"dist/Filter-Simple",
+ "dist/FindBin",
"dist/I18N-Collate",
"dist/if",
"dist/IO/",
@@ -80,12 +81,14 @@
"dist/IO/t/cachepropagate-tcp.t",
"dist/IO/t/cachepropagate-udp.t",
"dist/IO/t/cachepropagate-unix.t",
+ "dist/IO/t/gh17447.t",
"dist/IO/t/IO.t",
"dist/IO/t/io_const.t",
"dist/IO/t/io_dir.t",
"dist/IO/t/io_dup.t",
"dist/IO/t/io_file.t",
"dist/IO/t/io_file_export.t",
+ "dist/IO/t/io_getline.t",
"dist/IO/t/io_leak.t",
"dist/IO/t/io_linenum.t",
"dist/IO/t/io_multihomed.t",
@@ -119,14 +122,14 @@
"bugtracker" : {
"web" : "https://github.com/Perl/perl5/issues"
},
- "homepage" : "http://www.perl.org/",
+ "homepage" : "https://www.perl.org/",
"license" : [
- "http://dev.perl.org/licenses/"
+ "https://dev.perl.org/licenses/"
],
"repository" : {
"url" : "https://github.com/Perl/perl5"
}
},
- "version" : "5.030003",
- "x_serialization_backend" : "JSON::PP version 4.02"
+ "version" : "5.032001",
+ "x_serialization_backend" : "JSON::PP version 4.04"
}
diff --git a/gnu/usr.bin/perl/META.yml b/gnu/usr.bin/perl/META.yml
index 6fe3b2ce170..e6c80560faa 100644
--- a/gnu/usr.bin/perl/META.yml
+++ b/gnu/usr.bin/perl/META.yml
@@ -28,6 +28,7 @@ no_index:
- dist/ExtUtils-CBuilder
- dist/ExtUtils-ParseXS
- dist/Filter-Simple
+ - dist/FindBin
- dist/I18N-Collate
- dist/if
- dist/IO/
@@ -77,12 +78,14 @@ no_index:
- dist/IO/t/cachepropagate-tcp.t
- dist/IO/t/cachepropagate-udp.t
- dist/IO/t/cachepropagate-unix.t
+ - dist/IO/t/gh17447.t
- dist/IO/t/IO.t
- dist/IO/t/io_const.t
- dist/IO/t/io_dir.t
- dist/IO/t/io_dup.t
- dist/IO/t/io_file.t
- dist/IO/t/io_file_export.t
+ - dist/IO/t/io_getline.t
- dist/IO/t/io_leak.t
- dist/IO/t/io_linenum.t
- dist/IO/t/io_multihomed.t
@@ -111,8 +114,8 @@ no_index:
- vxs.inc
resources:
bugtracker: https://github.com/Perl/perl5/issues
- homepage: http://www.perl.org/
- license: http://dev.perl.org/licenses/
+ homepage: https://www.perl.org/
+ license: https://dev.perl.org/licenses/
repository: https://github.com/Perl/perl5
-version: '5.030003'
+version: '5.032001'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff --git a/gnu/usr.bin/perl/Makefile.SH b/gnu/usr.bin/perl/Makefile.SH
index 2a550ff706e..124db32a131 100644
--- a/gnu/usr.bin/perl/Makefile.SH
+++ b/gnu/usr.bin/perl/Makefile.SH
@@ -192,13 +192,14 @@ for f in $dynamic_ext; do
esac
done
-: Prepare dependency lists for Makefile.
+: Prepare dependency lists for Makefile. Non-Unix systems likely will also
+: require changes in make_ext.pl
dynamic_list=' '
dynamic_ext_re="lib/auto/re/re.$dlext"
extra_dep='
+cpan/Pod-Simple/pm_to_blib: dist/if/pm_to_blib
ext/Pod-Functions/pm_to_blib: cpan/Pod-Simple/pm_to_blib cpan/Pod-Escapes/pm_to_blib pod/perlfunc.pod
cpan/IO-Compress/pm_to_blib: dist/lib/pm_to_blib
-lib/auto/Term/ReadKey/ReadKey.so: lib/auto/Cwd/Cwd.so
'
for f in $dynamic_ext; do
: the dependency named here will never exist
@@ -488,7 +489,7 @@ shextract=`SH_to_target $SH`
## In the following dollars and backticks do not need the extra backslash.
$spitshell >>$Makefile <<!GROK!THIS!
-private = preplibrary \$(CONFIGPM) \$(CONFIGPOD) lib/buildcustomize.pl
+private = preplibrary \$(CONFIGPM) \$(CONFIGPOD) git_version.h lib/buildcustomize.pl
# Files to be built with variable substitution before miniperl
# is available.
@@ -588,7 +589,7 @@ esac
$spitshell >>$Makefile <<'!NO!SUBS!'
-perltoc_pod_prereqs = extra.pods pod/perl5303delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod
+perltoc_pod_prereqs = extra.pods pod/perl5321delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs)
generated_headers = uudmap.h bitcount.h mg_data.h
@@ -647,16 +648,15 @@ $(MANIFEST_SRT): MANIFEST $(PERL_EXE)
.PHONY: all utilities
-# OpenBSD uses pre-generated lib/Config_git.pl and git_version.h files
# Both git_version.h and lib/Config_git.pl are built
# by make_patchnum.pl.
-#git_version.h: lib/Config_git.pl
-#
-#lib/Config_git.pl: $(MINIPERL_EXE) make_patchnum.pl
-# $(MINIPERL) make_patchnum.pl
-#
-## make sure that we recompile perl.c if the git version changes
-#perl$(OBJ_EXT): git_version.h
+git_version.h: lib/Config_git.pl
+
+lib/Config_git.pl: $(MINIPERL_EXE) make_patchnum.pl
+ $(MINIPERL) make_patchnum.pl
+
+# make sure that we recompile perl.c if the git version changes
+perl$(OBJ_EXT): git_version.h
!NO!SUBS!
@@ -1105,7 +1105,7 @@ catamount)
$spitshell >>$Makefile <<!GROK!THIS!
.PHONY: makeppport
makeppport: \$(MINIPERL_EXE) \$(CONFIGPM)
- -@for f in Makefile.PL PPPort_pm.PL PPPort_xs.PL ppport_h.PL; do \
+ -@for f in Makefile.PL PPPort_pm.PL RealPPPort_xs.PL ppport_h.PL; do \
(cd ext/Devel-PPPort && `pwd`/run.sh ../../$(MINIPERL_EXE) -I../../lib \$\$f); \
done
@@ -1134,7 +1134,10 @@ $(CONFIGPOD): config.sh $(MINIPERL_EXE) configpm Porting/Glossary lib/Config_git
unidatafiles $(unidatafiles) pod/perluniprops.pod: uni.data
uni.data: $(MINIPERL_EXE) $(CONFIGPM) lib/unicore/mktables $(nonxs_ext)
- touch uni.data
+ $(MINIPERL) lib/unicore/mktables -C lib/unicore -P pod -maketest -makelist -p
+# Commented out so always runs, mktables looks at far more files than we
+# can in this makefile to decide if needs to run or not
+# touch uni.data
# $(PERL_EXE) and ext because pod_lib.pl needs Digest::MD5
# But also this ensures that all extensions are built before we try to scan
@@ -1150,9 +1153,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc
pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
$(MINIPERL) pod/perlmodlib.PL -q
-pod/perl5303delta.pod: pod/perldelta.pod
- $(RMS) pod/perl5303delta.pod
- $(LNS) perldelta.pod pod/perl5303delta.pod
+pod/perl5321delta.pod: pod/perldelta.pod
+ $(RMS) pod/perl5321delta.pod
+ $(LNS) perldelta.pod pod/perl5321delta.pod
extra.pods: $(MINIPERL_EXE)
-@test ! -f extra.pods || rm -f `cat extra.pods`
@@ -1381,7 +1384,7 @@ _mopup:
-rm -f *perl.xok
-rm -f cygwin.c libperl*.def libperl*.dll cygperl*.dll *.exe.stackdump
-rm -f $(PERL_EXE) $(MINIPERL_EXE) $(LIBPERL) libperl.* microperl
- -rm -f $(DTRACE_H)
+ -rm -f config.arch config.over $(DTRACE_H)
_cleaner1:
-cd os2; rm -f Makefile
@@ -1446,10 +1449,10 @@ _cleaner2:
-rmdir lib/Sys/Syslog lib/Sys lib/Sub lib/Search lib/Scalar
-rmdir lib/Pod/Text lib/Pod/Simple lib/Pod/Perldoc lib/PerlIO/via
-rmdir lib/PerlIO lib/Perl lib/Parse/CPAN lib/Parse lib/Params
- -rmdir lib/OpenBSD lib/Net/FTP lib/Module/Load lib/Module/CoreList
- -rmdir lib/Module lib/Memoize lib/Math/BigInt lib/Math/BigFloat
- -rmdir lib/Math lib/MIME lib/Locale/Maketext lib/Locale lib/List/Util
- -rmdir lib/List lib/JSON/PP lib/JSON lib/IPC lib/IO/Uncompress/Adapter
+ -rmdir lib/Net/FTP lib/Module/Load lib/Module/CoreList lib/Module
+ -rmdir lib/Memoize lib/Math/BigInt lib/Math/BigFloat lib/Math lib/MIME
+ -rmdir lib/Locale/Maketext lib/Locale lib/List/Util lib/List
+ -rmdir lib/JSON/PP lib/JSON lib/IPC lib/IO/Uncompress/Adapter
-rmdir lib/IO/Uncompress lib/IO/Socket lib/IO/Compress/Zlib
-rmdir lib/IO/Compress/Zip lib/IO/Compress/Gzip lib/IO/Compress/Base
-rmdir lib/IO/Compress/Adapter lib/IO/Compress lib/IO
@@ -1654,15 +1657,15 @@ minitest_prep:
@echo "You may see some irrelevant test failures if you have been unable"
@echo "to build lib/Config.pm, or the Unicode data files."
@echo " "
- - cd t && (rm -f $(PERL_EXE); $(LNS) ../$(MINIPERL_EXE) $(PERL_EXE))
+ cd t && (rm -f $(PERL_EXE); $(LNS) ../$(MINIPERL_EXE) $(PERL_EXE))
MINITEST_TESTS = base/*.t comp/*.t cmd/*.t run/*.t io/*.t re/*.t opbasic/*.t op/*.t uni/*.t perf/*.t
minitest: $(MINIPERL_EXE) minitest_prep
- - cd t && $(RUN_PERL) TEST $(MINITEST_TESTS) <$(devtty)
+ cd t && $(RUN_PERL) TEST $(MINITEST_TESTS) <$(devtty)
minitest-notty minitest_notty: $(MINIPERL_EXE) minitest_prep
- - cd t && PERL_SKIP_TTY_TEST=1 $(RUN_PERL) TEST $(MINITEST_TESTS)
+ cd t && PERL_SKIP_TTY_TEST=1 $(RUN_PERL) TEST $(MINITEST_TESTS)
# Test via harness
diff --git a/gnu/usr.bin/perl/NetWare/Makefile b/gnu/usr.bin/perl/NetWare/Makefile
index 726fdd7fd83..d6672d2bc27 100644
--- a/gnu/usr.bin/perl/NetWare/Makefile
+++ b/gnu/usr.bin/perl/NetWare/Makefile
@@ -86,7 +86,7 @@ NLM_VERSION = 3,20,0
# Here comes the CW tools - TO BE FILLED TO BUILD WITH CW -
-MODULE_DESC = "Perl 5.30.3 for NetWare"
+MODULE_DESC = "Perl 5.32.1 for NetWare"
CCTYPE = CodeWarrior
C_COMPILER = mwccnlm -c
CPP_COMPILER = mwccnlm
@@ -462,7 +462,7 @@ INST_NW_TOP2 = $(INST_NW_DRV)\perl
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-INST_VER = \5.30.3
+INST_VER = \5.32.1
#
# Comment this out if you DON'T want your perl installation to have
@@ -520,7 +520,7 @@ USE_IMP_SYS = define
#
# set this to your email address (perl will guess a value from
-# from your loginname and your hostname, which may not be right)
+# your loginname and your hostname, which may not be right)
#
#EMAIL =
diff --git a/gnu/usr.bin/perl/NetWare/config.wc b/gnu/usr.bin/perl/NetWare/config.wc
index 9173c9de0fd..b0a02f56052 100644
--- a/gnu/usr.bin/perl/NetWare/config.wc
+++ b/gnu/usr.bin/perl/NetWare/config.wc
@@ -103,6 +103,7 @@ d_asinh='undef'
d_atanh='undef'
d_atolf='undef'
d_atoll='undef'
+d_attribute_always_inline='undef'
d_attribute_deprecated='undef'
d_attribute_format='undef'
d_attribute_malloc='undef'
@@ -527,6 +528,7 @@ d_sitearch='undef'
d_snprintf='undef'
d_sockaddr_in6='undef'
d_sockaddr_sa_len='undef'
+d_sockaddr_storage='undef'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='define'
@@ -618,6 +620,7 @@ d_voidtty=''
d_vsnprintf='undef'
d_wait4='undef'
d_waitpid='define'
+d_wcrtomb='undef'
d_wcscmp='undef'
d_wcstombs='define'
d_wcsxfrm='undef'
diff --git a/gnu/usr.bin/perl/NetWare/config_H.wc b/gnu/usr.bin/perl/NetWare/config_H.wc
index 5ded85c4441..3229202d7c9 100644
--- a/gnu/usr.bin/perl/NetWare/config_H.wc
+++ b/gnu/usr.bin/perl/NetWare/config_H.wc
@@ -887,7 +887,7 @@
* This symbol contains the ~name expanded version of ARCHLIB, to be used
* in programs that are not prepared to deal with ~ expansion at run-time.
*/
-#define ARCHLIB "c:\\perl\\5.30.3\\lib\\NetWare-x86-multi-thread" /**/
+#define ARCHLIB "c:\\perl\\5.32.1\\lib\\NetWare-x86-multi-thread" /**/
/*#define ARCHLIB_EXP "" /**/
/* ARCHNAME:
@@ -918,8 +918,8 @@
* This symbol is the filename expanded version of the BIN symbol, for
* programs that do not want to deal with that at run-time.
*/
-#define BIN "c:\\perl\\5.30.3\\bin\\NetWare-x86-multi-thread" /**/
-#define BIN_EXP "c:\\perl\\5.30.3\\bin\\NetWare-x86-multi-thread" /**/
+#define BIN "c:\\perl\\5.32.1\\bin\\NetWare-x86-multi-thread" /**/
+#define BIN_EXP "c:\\perl\\5.32.1\\bin\\NetWare-x86-multi-thread" /**/
/* BYTEORDER:
* This symbol holds the hexadecimal constant defined in byteorder,
@@ -2878,7 +2878,7 @@
* This symbol contains the ~name expanded version of SITEARCH, to be used
* in programs that are not prepared to deal with ~ expansion at run-time.
*/
-#define SITEARCH "c:\\perl\\site\\5.30.3\\lib\\NetWare-x86-multi-thread" /**/
+#define SITEARCH "c:\\perl\\site\\5.32.1\\lib\\NetWare-x86-multi-thread" /**/
/*#define SITEARCH_EXP "" /**/
/* SITELIB:
@@ -2901,7 +2901,7 @@
* removed. The elements in inc_version_list (inc_version_list.U) can
* be tacked onto this variable to generate a list of directories to search.
*/
-#define SITELIB "c:\\perl\\site\\5.30.3\\lib" /**/
+#define SITELIB "c:\\perl\\site\\5.32.1\\lib" /**/
/*#define SITELIB_EXP "" /**/
#define SITELIB_STEM "" /**/
diff --git a/gnu/usr.bin/perl/Porting/Glossary b/gnu/usr.bin/perl/Porting/Glossary
index 16acb5e26f7..e11e4eed234 100644
--- a/gnu/usr.bin/perl/Porting/Glossary
+++ b/gnu/usr.bin/perl/Porting/Glossary
@@ -2097,7 +2097,7 @@ d_random_r (d_random_r.U):
d_re_comp (d_regcmp.U):
This variable conditionally defines the HAS_RECOMP symbol, which
indicates to the C program that the re_comp() routine is available
- for regular patern matching (usally on BSD). If so, it is likely that
+ for regular pattern matching (usually on BSD). If so, it is likely that
re_exec() exists.
d_readdir (d_readdir.U):
@@ -2130,12 +2130,12 @@ d_recvmsg (d_recvmsg.U):
d_regcmp (d_regcmp.U):
This variable conditionally defines the HAS_REGCMP symbol, which
indicates to the C program that the regcmp() routine is available
- for regular patern matching (usally on System V).
+ for regular pattern matching (usually on System V).
d_regcomp (d_regcmp.U):
This variable conditionally defines the HAS_REGCOMP symbol, which
indicates to the C program that the regcomp() routine is available
- for regular patern matching (usally on POSIX.2 conforming systems).
+ for regular pattern matching (usually on POSIX.2 conforming systems).
d_remainder (d_remainder.U):
This variable conditionally defines the HAS_REMAINDER symbol, which
@@ -2762,11 +2762,11 @@ d_times (d_times.U):
d_tm_tm_gmtoff (i_time.U):
This variable conditionally defines HAS_TM_TM_GMTOFF, which indicates
- indicates to the C program that the struct tm has the tm_gmtoff field.
+ to the C program that the struct tm has the tm_gmtoff field.
d_tm_tm_zone (i_time.U):
This variable conditionally defines HAS_TM_TM_ZONE, which indicates
- indicates to the C program that the struct tm has the tm_zone field.
+ to the C program that the struct tm has the tm_zone field.
d_tmpnam_r (d_tmpnam_r.U):
This variable conditionally defines the HAS_TMPNAM_R symbol,
diff --git a/gnu/usr.bin/perl/Porting/Maintainers.pl b/gnu/usr.bin/perl/Porting/Maintainers.pl
index 648fd6d2bb1..b5ffbafe4c2 100644
--- a/gnu/usr.bin/perl/Porting/Maintainers.pl
+++ b/gnu/usr.bin/perl/Porting/Maintainers.pl
@@ -16,7 +16,7 @@ use File::Glob qw(:case);
# complain if it can't find them)
@IGNORABLE = qw(
- .cvsignore .dualLivedDiffConfig .gitignore .perlcriticrc .perltidyrc
+ .cvsignore .dualLivedDiffConfig .gitignore .github .perlcriticrc .perltidyrc
.travis.yml ANNOUNCE Announce Artistic AUTHORS BENCHMARK BUGS Build.PL
CHANGELOG ChangeLog Changelog CHANGES Changes CONTRIBUTING CONTRIBUTING.md
CONTRIBUTING.mkdn COPYING Copying cpanfile CREDITS dist.ini GOALS HISTORY
@@ -123,11 +123,12 @@ use File::Glob qw(:case);
%Modules = (
'Archive::Tar' => {
- 'DISTRIBUTION' => 'BINGOS/Archive-Tar-2.32.tar.gz',
+ 'DISTRIBUTION' => 'BINGOS/Archive-Tar-2.36.tar.gz',
'FILES' => q[cpan/Archive-Tar],
'BUGS' => 'bug-archive-tar@rt.cpan.org',
'EXCLUDED' => [
qw(t/07_ptardiff.t),
+ qr{t/src/(long|short)/foo.txz},
],
},
@@ -137,11 +138,12 @@ use File::Glob qw(:case);
},
'autodie' => {
- 'DISTRIBUTION' => 'PJF/autodie-2.29.tar.gz',
+ 'DISTRIBUTION' => 'TODDR/autodie-2.32.tar.gz',
'FILES' => q[cpan/autodie],
'EXCLUDED' => [
qr{benchmarks},
qr{README\.md},
+ qr{^xt/},
# All these tests depend upon external
# modules that don't exist when we're
# building the core. Hence, they can
@@ -157,19 +159,9 @@ use File::Glob qw(:case);
t/release-pod-syntax.t
t/socket.t
t/system.t
+ t/no-all.t
)
],
- 'CUSTOMIZED' => [
- # CPAN RT 105344
- 't/mkdir.t',
- # smartmatch changes
- 'lib/autodie/exception.pm',
- 'lib/autodie/hints.pm',
- 't/exceptions.t',
- 't/lib/Hints_pod_examples.pm',
- # CPAN RT#127762
- 't/recv.t',
- ],
},
'AutoLoader' => {
@@ -207,10 +199,11 @@ use File::Glob qw(:case);
},
'Compress::Raw::Bzip2' => {
- 'DISTRIBUTION' => 'PMQS/Compress-Raw-Bzip2-2.089.tar.gz',
+ 'DISTRIBUTION' => 'PMQS/Compress-Raw-Bzip2-2.093.tar.gz',
'FILES' => q[cpan/Compress-Raw-Bzip2],
'EXCLUDED' => [
qr{^t/Test/},
+ qr{^t/meta},
'bzip2-src/bzip2-const.patch',
'bzip2-src/bzip2-cpp.patch',
'bzip2-src/bzip2-unsigned.patch',
@@ -218,11 +211,12 @@ use File::Glob qw(:case);
},
'Compress::Raw::Zlib' => {
- 'DISTRIBUTION' => 'PMQS/Compress-Raw-Zlib-2.084.tar.gz',
+ 'DISTRIBUTION' => 'PMQS/Compress-Raw-Zlib-2.093.tar.gz',
'FILES' => q[cpan/Compress-Raw-Zlib],
'EXCLUDED' => [
qr{^examples/},
qr{^t/Test/},
+ qr{^t/meta},
qw( t/000prereq.t
t/99pod.t
),
@@ -235,6 +229,7 @@ use File::Glob qw(:case);
'EXCLUDED' => [qw(
examples/show-v.pl
)],
+ 'CUSTOMIZED' => [ qw(V.pm) ],
},
'constant' => {
@@ -251,7 +246,7 @@ use File::Glob qw(:case);
},
'CPAN' => {
- 'DISTRIBUTION' => 'ANDK/CPAN-2.22.tar.gz',
+ 'DISTRIBUTION' => 'ANDK/CPAN-2.27.tar.gz',
'FILES' => q[cpan/CPAN],
'EXCLUDED' => [
qr{^distroprefs/},
@@ -330,11 +325,13 @@ use File::Glob qw(:case);
},
'DB_File' => {
- 'DISTRIBUTION' => 'PMQS/DB_File-1.843.tar.gz',
+ 'DISTRIBUTION' => 'PMQS/DB_File-1.853.tar.gz',
'FILES' => q[cpan/DB_File],
'EXCLUDED' => [
qr{^patches/},
+ qr{^t/meta},
qw( t/pod.t
+ t/000prereq.t
fallback.h
fallback.xs
),
@@ -342,7 +339,7 @@ use File::Glob qw(:case);
},
'Devel::PPPort' => {
- 'DISTRIBUTION' => 'ATOOMIC/Devel-PPPort-3.52.tar.gz',
+ 'DISTRIBUTION' => 'ATOOMIC/Devel-PPPort-3.57.tar.gz',
'FILES' => q[dist/Devel-PPPort],
'EXCLUDED' => [
'PPPort.pm', # we use PPPort_pm.PL instead
@@ -369,6 +366,11 @@ use File::Glob qw(:case);
'DISTRIBUTION' => 'GAAS/Digest-MD5-2.55.tar.gz',
'FILES' => q[cpan/Digest-MD5],
'EXCLUDED' => ['rfc1321.txt'],
+ 'CUSTOMIZED' => [
+ # RT #133495
+ qw(MD5.xs MD5.pm),
+ qw(Makefile.PL t/files.t)
+ ],
},
'Digest::SHA' => {
@@ -389,8 +391,13 @@ use File::Glob qw(:case);
},
'Encode' => {
- 'DISTRIBUTION' => 'DANKOGAI/Encode-3.01.tar.gz',
+ 'DISTRIBUTION' => 'DANKOGAI/Encode-3.06.tar.gz',
'FILES' => q[cpan/Encode],
+ 'EXCLUDED' => [
+ qw( t/whatwg-aliases.json
+ t/whatwg-aliases.t
+ ),
+ ],
},
'encoding::warnings' => {
@@ -419,7 +426,7 @@ use File::Glob qw(:case);
},
'Exporter' => {
- 'DISTRIBUTION' => 'TODDR/Exporter-5.73.tar.gz',
+ 'DISTRIBUTION' => 'TODDR/Exporter-5.74.tar.gz',
'FILES' => q[dist/Exporter],
'EXCLUDED' => [
qw( t/pod.t
@@ -429,7 +436,7 @@ use File::Glob qw(:case);
},
'ExtUtils::CBuilder' => {
- 'DISTRIBUTION' => 'AMBS/ExtUtils-CBuilder-0.280231.tar.gz',
+ 'DISTRIBUTION' => 'AMBS/ExtUtils-CBuilder-0.280234.tar.gz',
'FILES' => q[dist/ExtUtils-CBuilder],
'EXCLUDED' => [
qw(README.mkdn),
@@ -464,7 +471,7 @@ use File::Glob qw(:case);
},
'ExtUtils::MakeMaker' => {
- 'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.34.tar.gz',
+ 'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.44.tar.gz',
'FILES' => q[cpan/ExtUtils-MakeMaker],
'EXCLUDED' => [
qr{^t/lib/Test/},
@@ -564,10 +571,18 @@ use File::Glob qw(:case);
'perlfilter.pod' => 'pod/perlfilter.pod',
'' => 'cpan/Filter-Util-Call/',
},
+ 'CUSTOMIZED' => [
+ qw(pod/perlfilter.pod)
+ ],
+ },
+
+ 'FindBin' => {
+ 'DISTRIBUTION' => 'XSAWYERX/FindBin-0.000.tar.gz',
+ 'FILES' => q[dist/FindBin],
},
'Getopt::Long' => {
- 'DISTRIBUTION' => 'JV/Getopt-Long-2.50.tar.gz',
+ 'DISTRIBUTION' => 'JV/Getopt-Long-2.51.tar.gz',
'FILES' => q[cpan/Getopt-Long],
'EXCLUDED' => [
qr{^examples/},
@@ -608,17 +623,18 @@ use File::Glob qw(:case);
},
'IO' => {
- 'DISTRIBUTION' => 'TODDR/IO-1.39.tar.gz',
+ 'DISTRIBUTION' => 'TODDR/IO-1.42.tar.gz',
'FILES' => q[dist/IO/],
'EXCLUDED' => ['t/test.pl'],
},
'IO-Compress' => {
- 'DISTRIBUTION' => 'PMQS/IO-Compress-2.084.tar.gz',
+ 'DISTRIBUTION' => 'PMQS/IO-Compress-2.093.tar.gz',
'FILES' => q[cpan/IO-Compress],
'EXCLUDED' => [
qr{^examples/},
qr{^t/Test/},
+ qr{^t/999meta-},
't/010examples-bzip2.t',
't/010examples-zlib.t',
't/cz-05examples.t',
@@ -639,7 +655,7 @@ use File::Glob qw(:case);
},
'IPC::Cmd' => {
- 'DISTRIBUTION' => 'BINGOS/IPC-Cmd-1.02.tar.gz',
+ 'DISTRIBUTION' => 'BINGOS/IPC-Cmd-1.04.tar.gz',
'FILES' => q[cpan/IPC-Cmd],
},
@@ -654,7 +670,7 @@ use File::Glob qw(:case);
},
'JSON::PP' => {
- 'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.02.tar.gz',
+ 'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.04.tar.gz',
'FILES' => q[cpan/JSON-PP],
},
@@ -684,7 +700,7 @@ use File::Glob qw(:case);
},
'Locale::Maketext' => {
- 'DISTRIBUTION' => 'TODDR/Locale-Maketext-1.28.tar.gz',
+ 'DISTRIBUTION' => 'TODDR/Locale-Maketext-1.29.tar.gz',
'FILES' => q[dist/Locale-Maketext],
'EXCLUDED' => [
qw(
@@ -705,7 +721,7 @@ use File::Glob qw(:case);
},
'Math::BigInt' => {
- 'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-1.999816.tar.gz',
+ 'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-1.999818.tar.gz',
'FILES' => q[cpan/Math-BigInt],
'EXCLUDED' => [
qr{^examples/},
@@ -718,7 +734,7 @@ use File::Glob qw(:case);
},
'Math::BigInt::FastCalc' => {
- 'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-FastCalc-0.5008.tar.gz',
+ 'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-FastCalc-0.5009.tar.gz',
'FILES' => q[cpan/Math-BigInt-FastCalc],
'EXCLUDED' => [
qr{^t/author-},
@@ -784,7 +800,7 @@ use File::Glob qw(:case);
},
'Module::CoreList' => {
- 'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20190420.tar.gz',
+ 'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20200428.tar.gz',
'FILES' => q[dist/Module-CoreList],
},
@@ -794,7 +810,7 @@ use File::Glob qw(:case);
},
'Module::Load::Conditional' => {
- 'DISTRIBUTION' => 'BINGOS/Module-Load-Conditional-0.68.tar.gz',
+ 'DISTRIBUTION' => 'BINGOS/Module-Load-Conditional-0.70.tar.gz',
'FILES' => q[cpan/Module-Load-Conditional],
},
@@ -804,7 +820,7 @@ use File::Glob qw(:case);
},
'Module::Metadata' => {
- 'DISTRIBUTION' => 'ETHER/Module-Metadata-1.000036.tar.gz',
+ 'DISTRIBUTION' => 'ETHER/Module-Metadata-1.000037.tar.gz',
'FILES' => q[cpan/Module-Metadata],
'EXCLUDED' => [
qw(t/00-report-prereqs.t),
@@ -815,7 +831,7 @@ use File::Glob qw(:case);
},
'Net::Ping' => {
- 'DISTRIBUTION' => 'RURBAN/Net-Ping-2.71.tar.gz',
+ 'DISTRIBUTION' => 'RURBAN/Net-Ping-2.72.tar.gz',
'FILES' => q[dist/Net-Ping],
'EXCLUDED' => [
qw(README.md.PL),
@@ -823,15 +839,6 @@ use File::Glob qw(:case);
qw(t/600_pod.t),
qw(t/601_pod-coverage.t),
],
- 'CUSTOMIZED' => [
- qw(
- lib/Net/Ping.pm
- t/000_load.t
- t/500_ping_icmp.t
- t/501_ping_icmpv6.t
- ),
- ],
-
},
'NEXT' => {
@@ -847,7 +854,7 @@ use File::Glob qw(:case);
},
'parent' => {
- 'DISTRIBUTION' => 'CORION/parent-0.237.tar.gz',
+ 'DISTRIBUTION' => 'CORION/parent-0.238.tar.gz',
'FILES' => q[cpan/parent],
'EXCLUDED' => [
qr{^xt}
@@ -870,7 +877,7 @@ use File::Glob qw(:case);
},
'perlfaq' => {
- 'DISTRIBUTION' => 'ETHER/perlfaq-5.20190126.tar.gz',
+ 'DISTRIBUTION' => 'ETHER/perlfaq-5.20200523.tar.gz',
'FILES' => q[cpan/perlfaq],
'EXCLUDED' => [ qr/^inc/, qr/^xt/, qr{^t/00-} ],
},
@@ -896,11 +903,6 @@ use File::Glob qw(:case);
'FILES' => q[cpan/Pod-Escapes],
},
- 'Pod::Parser' => {
- 'DISTRIBUTION' => 'MAREKR/Pod-Parser-1.63.tar.gz',
- 'FILES' => q[cpan/Pod-Parser],
- },
-
'Pod::Perldoc' => {
'DISTRIBUTION' => 'MALLEN/Pod-Perldoc-3.28.tar.gz',
'FILES' => q[cpan/Pod-Perldoc],
@@ -926,17 +928,20 @@ use File::Glob qw(:case);
},
'Pod::Simple' => {
- 'DISTRIBUTION' => 'KHW/Pod-Simple-3.35.tar.gz',
+ 'DISTRIBUTION' => 'KHW/Pod-Simple-3.40.tar.gz',
'FILES' => q[cpan/Pod-Simple],
},
'Pod::Usage' => {
'DISTRIBUTION' => 'MAREKR/Pod-Usage-1.69.tar.gz',
'FILES' => q[cpan/Pod-Usage],
+ 'CUSTOMIZED' => [
+ 't/pod/testp2pt.pl',
+ ],
},
'podlators' => {
- 'DISTRIBUTION' => 'RRA/podlators-4.11.tar.gz',
+ 'DISTRIBUTION' => 'RRA/podlators-4.14.tar.gz',
'FILES' => q[cpan/podlators pod/perlpodstyle.pod],
'EXCLUDED' => [
qr{^docs/metadata/},
@@ -955,7 +960,7 @@ use File::Glob qw(:case);
},
'Scalar::Util' => {
- 'DISTRIBUTION' => 'PEVANS/Scalar-List-Utils-1.50.tar.gz',
+ 'DISTRIBUTION' => 'PEVANS/Scalar-List-Utils-1.55.tar.gz',
'FILES' => q[cpan/Scalar-List-Utils],
},
@@ -971,7 +976,7 @@ use File::Glob qw(:case);
},
'Socket' => {
- 'DISTRIBUTION' => 'PEVANS/Socket-2.027.tar.gz',
+ 'DISTRIBUTION' => 'PEVANS/Socket-2.029.tar.gz',
'FILES' => q[cpan/Socket],
},
@@ -984,7 +989,7 @@ use File::Glob qw(:case);
},
'Sys::Syslog' => {
- 'DISTRIBUTION' => 'SAPER/Sys-Syslog-0.35.tar.gz',
+ 'DISTRIBUTION' => 'SAPER/Sys-Syslog-0.36.tar.gz',
'FILES' => q[cpan/Sys-Syslog],
'EXCLUDED' => [
qr{^eg/},
@@ -1001,7 +1006,7 @@ use File::Glob qw(:case);
},
'Term::ANSIColor' => {
- 'DISTRIBUTION' => 'RRA/Term-ANSIColor-4.06.tar.gz',
+ 'DISTRIBUTION' => 'RRA/Term-ANSIColor-5.01.tar.gz',
'FILES' => q[cpan/Term-ANSIColor],
'EXCLUDED' => [
qr{^docs/},
@@ -1052,7 +1057,7 @@ use File::Glob qw(:case);
},
'Test::Simple' => {
- 'DISTRIBUTION' => 'EXODIST/Test-Simple-1.302162.tar.gz',
+ 'DISTRIBUTION' => 'EXODIST/Test-Simple-1.302175.tar.gz',
'FILES' => q[cpan/Test-Simple],
'EXCLUDED' => [
qr{^examples/},
@@ -1154,7 +1159,7 @@ use File::Glob qw(:case);
},
'Tie::File' => {
- 'DISTRIBUTION' => 'TODDR/Tie-File-1.00.tar.gz',
+ 'DISTRIBUTION' => 'TODDR/Tie-File-1.05.tar.gz',
'FILES' => q[dist/Tie-File],
},
@@ -1184,7 +1189,7 @@ use File::Glob qw(:case);
},
'Time::Piece' => {
- 'DISTRIBUTION' => 'ESAYM/Time-Piece-1.33.tar.gz',
+ 'DISTRIBUTION' => 'ESAYM/Time-Piece-1.3401.tar.gz',
'FILES' => q[cpan/Time-Piece],
'EXCLUDED' => [ qw[reverse_deps.txt] ],
},
@@ -1253,7 +1258,7 @@ use File::Glob qw(:case);
},
'Win32' => {
- 'DISTRIBUTION' => "JDB/Win32-0.52.tar.gz",
+ 'DISTRIBUTION' => "JDB/Win32-0.53.tar.gz",
'FILES' => q[cpan/Win32],
},
@@ -1263,6 +1268,12 @@ use File::Glob qw(:case);
'EXCLUDED' => [
qr{^ex/},
],
+ # https://rt.cpan.org/Ticket/Display.html?id=127837
+ 'CUSTOMIZED' => [
+ qw( File.pm
+ File.xs
+ ),
+ ],
},
'XSLoader' => {
@@ -1353,7 +1364,6 @@ use File::Glob qw(:case);
lib/File/Copy.{pm,t}
lib/File/stat{.pm,.t,-7896.t}
lib/FileHandle.{pm,t}
- lib/FindBin.{pm,t}
lib/Getopt/Std.{pm,t}
lib/Internals.pod
lib/Internals.t
@@ -1363,10 +1373,7 @@ use File::Glob qw(:case);
lib/Net/protoent.{pm,t}
lib/Net/servent.{pm,t}
lib/PerlIO.pm
- lib/Pod/t/InputObjects.t
- lib/Pod/t/Select.t
lib/Pod/t/Usage.t
- lib/Pod/t/utils.t
lib/SelectSaver.{pm,t}
lib/Symbol.{pm,t}
lib/Thread.{pm,t}
@@ -1418,14 +1425,10 @@ use File::Glob qw(:case);
lib/subs.{pm,t}
lib/unicore/
lib/utf8.{pm,t}
- lib/utf8_heavy.pl
lib/vars{.pm,.t,_carp.t}
lib/vmsish.{pm,t}
],
},
- 'openbsd' => {
- 'FILES' => q[lib/Config_git.pl],
- },
);
# legacy CPAN flag
diff --git a/gnu/usr.bin/perl/Porting/README.pod b/gnu/usr.bin/perl/Porting/README.pod
index bc4c50d8e70..b02a4da85e4 100644
--- a/gnu/usr.bin/perl/Porting/README.pod
+++ b/gnu/usr.bin/perl/Porting/README.pod
@@ -317,7 +317,7 @@ and that every file is listed.
The y2038 implementation for perl. This is an implementation of POSIX time.h
which solves the year 2038 bug on systems where time_t is only 32 bits. It is
implemented in bog-standard ANSI C. The latest version can be found at
-L<http://y2038.googlecode.com/>.
+L<https://github.com/evalEmpire/y2038>.
=head2 F<release_announcement_template.txt>
@@ -339,6 +339,11 @@ Pumpking.
Shell script to list patches in RT.
+=head1 F<security_template.pod>
+
+Template to guide writers of a perl 5 security vulnerability
+announcement.
+
=head2 F<sort_perldiag.pl>
This is a script for sorting the warning and error messages in
diff --git a/gnu/usr.bin/perl/Porting/bench.pl b/gnu/usr.bin/perl/Porting/bench.pl
index 6087dca1388..5b240968187 100755
--- a/gnu/usr.bin/perl/Porting/bench.pl
+++ b/gnu/usr.bin/perl/Porting/bench.pl
@@ -1726,7 +1726,7 @@ sub grind_print_compact {
@fields = grep exists $OPTS{fields}{$_}, @fields;
}
- # calculate the the max width of the test names
+ # calculate the max width of the test names
my $name_width = 0;
for (@test_names) {
diff --git a/gnu/usr.bin/perl/Porting/bisect-runner.pl b/gnu/usr.bin/perl/Porting/bisect-runner.pl
index 00319211c97..b6c75a9ad4f 100644
--- a/gnu/usr.bin/perl/Porting/bisect-runner.pl
+++ b/gnu/usr.bin/perl/Porting/bisect-runner.pl
@@ -440,7 +440,9 @@ as exiting with a signal or a core dump.)
-A I<config_arg=value>
-Arguments (C<-A>, C<-D>, C<-U>) to pass to F<Configure>. For example,
+Arguments (C<-A>, C<-D>, C<-U>) to pass to F<Configure>. The C<-D>, C<-A> and
+C<-U> switches should be spelled as if you were normally giving them to
+F<./Configure>. For example,
-Dnoextensions=Encode
-Uusedevel
@@ -535,6 +537,12 @@ always exits with zero. If you require more flexibility than this, either
specify your C<valgrind> invocation explicitly as part of the test case, or
use a wrapper script to control the command line or massage the exit codes.
+In order for the test program to be seen as a perl script to valgrind
+(rather than a shell script), the first line must be one of the following
+
+ #!./perl
+ #!./miniperl
+
=item *
--test-build
@@ -836,6 +844,164 @@ Display the usage information and exit.
=back
+=head1 EXAMPLES
+
+=head2 Code has started to crash under C<miniperl>
+
+=over 4
+
+=item * Problem
+
+Under C<make minitest> (but not under C<make test_harness>), F<t/re/pat.t> was
+failing to compile. What was the first commit at which that compilation
+failure could be observed?
+
+=item * Solution
+
+Extract code from the test file at the point where C<./miniperl -Ilib -c> was
+showing a compilation failure. Use that in bisection with the C<miniperl>
+target.
+
+ .../Porting/bisect.pl --target=miniperl --start=2ec4590e \
+ -e 'q|ace| =~ /c(?=.$)/; $#{^CAPTURE} == -1); exit 0;'
+
+=item * Reference
+
+L<GH issue 17293|https://github.com/Perl/perl5/issues/17293>
+
+=back
+
+=head2 Blead breaks CPAN on threaded builds only
+
+=over 4
+
+=item * Problem
+
+Tests in CPAN module XML::Parser's test suite had begun to fail when tested
+against blead in threaded builds only.
+
+=item * Solution
+
+Provide F<Configure>-style switch to bisection program. Straightforward use
+of the C<--module> switch.
+
+ .../Porting/bisect.pl -Duseithreads \
+ --start=6256cf2c \
+ --end=f6f85064 \
+ --module=XML::Parser
+
+=item * Reference
+
+L<GH issue 16918|https://github.com/Perl/perl5/issues/16918>
+
+=back
+
+=head2 Point in time where code started to segfault is unknown
+
+=over 4
+
+=item * Problem
+
+User submitted code sample which when run caused F<perl> to segfault, but did
+not claim that this was a recent change.
+
+=item * Solution
+
+Used locally installed production releases of perl (previously created by
+F<perlbrew>) to identify the first production release at which the code would
+not compile. Used that information to shorten bisection time.
+
+ .../perl Porting/bisect.pl \
+ --start=v5.14.4 \
+ --end=v5.16.3 \
+ --crash -- ./perl -Ilib /tmp/gh-17333-map.pl
+
+ $ cat gh-17333-map.pl
+
+ @N = 1..5;
+ map { pop @N } @N;
+
+=item * Reference
+
+L<GH issue 17333|https://github.com/Perl/perl5/issues/17333>
+
+=back
+
+=head2 When did perl start failing to build on a certain platform using C<g++> as the C-compiler?
+
+=over 4
+
+=item * Problem
+
+On NetBSD-8.0, C<perl> had never been smoke-tested using C<g++> as the
+C-compiler. Once this was done, it became evident that changes in that
+version of the operating system's code were incompatible with some C<perl>
+source written long before that OS version was ever released!
+
+=item * Solution
+
+Bisection range was first narrowed using existing builds at release tags.
+Then, bisection specified the C-compiler via C<Configure>-style switch and
+used C<--test-build> to identify the commit which "broke" the build.
+
+ .../perl Porting/bisect.pl \
+ -Dcc=g++ \
+ --test-build \
+ --start=v5.21.6 \
+ --end=v5.21.7
+
+Then, problem was discussed with knowledgeable NetBSD user.
+
+=item * Reference
+
+L<GH issue 17381|https://github.com/Perl/perl5/issues/17381>
+
+=back
+
+=head2 When did a test file start to emit warnings?
+
+=over 4
+
+=item * Problem
+
+When F<dist/Tie-File/t/43_synopsis> was run as part of C<make test>, we
+observed warnings not previously seen. At what commit were those warnings
+first emitted?
+
+=item * Solution
+
+We know that when this test file was first committed to blead, no warnings
+were observed and there was no output to C<STDERR>. So that commit becomes
+the value for C<--start>.
+
+Since the test file in question is for a CPAN distribution maintained by core,
+we must prepare to run that test by including C<--target=test_prep> in the
+bisection invocation. We then run the test file in a way that captures
+C<STDERR> in a file. If that file has non-zero size, then we have presumably
+captured the newly seen warnings.
+
+ export ERR="/tmp/err"
+
+ .../perl Porting/bisect.pl \
+ --start=507614678018ae1abd55a22e9941778c65741ba3 \
+ --end=d34b46d077dcfc479c36f65b196086abd7941c76 \
+ --target=test_prep \
+ -e 'chdir("t");
+ system(
+ "./perl harness ../dist/Tie-File/t/43_synopsis.t
+ 2>$ENV{ERR}"
+ );
+ -s $ENV{ERR} and die "See $ENV{ERR} for warnings thrown";'
+
+Bisection pointed to a commit where strictures and warnings were first turned
+on throughout the F<dist/Tie-File/> directory.
+
+=item * Reference
+
+L<Commit 125e1a3|https://github.com/Perl/perl5/commit/125e1a36a939>
+
+=back
+
=cut
# Ensure we always exit with 255, to cause git bisect to abort.
@@ -2659,7 +2825,7 @@ lib/Config_git.pl:}m;
lib/Config_git.pl: $1}m;
- # This emulates commits 0f13ebd5d71f8177 and
+ # This emulates commits 0f13ebd5d71f8177
# and a04d4598adc57886. It ensures that
# lib/Config_git.pl is built before configpm,
# and that configpm is run exactly once.
diff --git a/gnu/usr.bin/perl/Porting/bump-perl-version b/gnu/usr.bin/perl/Porting/bump-perl-version
index 17ac9669845..fcc5eb2ab71 100644
--- a/gnu/usr.bin/perl/Porting/bump-perl-version
+++ b/gnu/usr.bin/perl/Porting/bump-perl-version
@@ -78,7 +78,7 @@ EOF
my %opts;
getopts('csui', \%opts) or usage;
if ($opts{u}) {
- @ARGV == 0 or usage('no version version numbers should be specified');
+ @ARGV == 0 or usage('no version numbers should be specified');
# fake to stop warnings when calculating $oldx etc
@ARGV = qw(99.99.99 99.99.99);
}
@@ -196,14 +196,6 @@ my @maps = (
"$oldx.$oldy",
qr/uconfig/,
],
-
- # win32/Makefile.ce
- [
- qr/(PV\s*=\s*)(\d\d{2})\b$/,
- sub { $2, "$1$newx$newy" },
- "$oldx$oldy",
- qr/Makefile\.ce/,
- ],
);
diff --git a/gnu/usr.bin/perl/Porting/checkAUTHORS.pl b/gnu/usr.bin/perl/Porting/checkAUTHORS.pl
index a00d89da46b..2263f9a7f45 100755
--- a/gnu/usr.bin/perl/Porting/checkAUTHORS.pl
+++ b/gnu/usr.bin/perl/Porting/checkAUTHORS.pl
@@ -1,5 +1,9 @@
#!/usr/bin/perl -w
use strict;
+use warnings;
+
+use v5.026;
+
my ($committer, $patch, $author);
use utf8;
use Getopt::Long;
@@ -7,9 +11,10 @@ use Unicode::Collate;
use Text::Wrap;
$Text::Wrap::columns = 80;
-my ($rank, $ta, $ack, $who, $tap) = (0) x 5;
+my ($rank, $ta, $ack, $who, $tap, $update) = (0) x 6;
my ($author_file, $percentage, $cumulative, $reverse);
my (%authors, %untraced, %patchers, %committers, %real_names);
+my ( $from_commit, $to_commit );
my $result = GetOptions (
# modes
@@ -18,15 +23,25 @@ my $result = GetOptions (
"thanks-applied" => \$ta,
"missing" => \$ack ,
"tap" => \$tap,
+ "update" => \$update,
# modifiers
"authors=s" => \$author_file,
"percentage" => \$percentage, # show as %age
"cumulative" => \$cumulative,
"reverse" => \$reverse,
+ "from=s" => \$from_commit,
+ "to=s" => \$to_commit,
+
);
-if (!$result or ( $rank + $ta + $who + $ack + $tap != 1 ) or !@ARGV) {
+
+my $has_from_commit = defined $from_commit ? 1 : 0;
+
+if ( !$result # GetOptions failed
+ or ( $rank + $ta + $who + $ack + $tap + $update != 1 ) # use one and one exactly 'mode'
+ or !( scalar @ARGV + $has_from_commit ) # gitlog provided from --from or stdin
+ ) {
usage();
}
@@ -34,26 +49,30 @@ $author_file ||= './AUTHORS';
die "Can't locate '$author_file'. Specify it with '--authors <path>'."
unless -f $author_file;
-my $map = generate_known_author_map();
-
-read_authors_files($author_file);
+my ( $map, $preferred_email_or_github ) = generate_known_author_map();
+my $preserve_case = $update ? 1 : 0;
+my $AUTHORS_header = read_authors_file($author_file, $preserve_case);
if ($rank) {
- parse_commits_from_stdin();
+ parse_commits();
display_ordered(\%patchers);
} elsif ($ta) {
- parse_commits_from_stdin();
+ parse_commits();
display_ordered(\%committers);
} elsif ($tap) {
- parse_commits_from_stdin_authors();
+ parse_commits_authors();
display_test_output(\%patchers, \%authors, \%real_names);
} elsif ($ack) {
- parse_commits_from_stdin();
+ parse_commits();
display_missing_authors(\%patchers, \%authors, \%real_names);
} elsif ($who) {
- parse_commits_from_stdin();
+ parse_commits();
list_authors(\%patchers, \%authors);
+} elsif ( $update ) {
+ update_authors_files( \%authors, $map, $preferred_email_or_github, $author_file );
+} else {
+ die "unknown mode";
}
exit(0);
@@ -69,17 +88,33 @@ Modes (use only one):
--thanks-applied # ranks committers of others' patches
--missing # display authors not in AUTHORS
--tap # show authors present/missing as TAP
+ --update # update the AUTHORS file with missing
Modifiers:
--authors <authors-file> # path to authors file (default: ./AUTHORS)
--percentage # show rankings as percentages
--cumulative # show rankings cumulatively
--reverse # show rankings in reverse
+ --from # git commit ID used for 'git log' source (use file from STDIN when missing)
+ --to[=HEAD] # git commit ID used for 'git log' destination, default to HEAD.
+
+Sample Usages:
+
+ \$ perl Porting/checkAUTHORS.pl --who --from=v5.31.6 --to=v5.31.7
+ \$ perl Porting/checkAUTHORS.pl --rank --percentage --from=v5.31.6
+ \$ perl Porting/checkAUTHORS.pl --thanks-applied --from=v5.31.6
+ \$ perl Porting/checkAUTHORS.pl --missing --from=v5.31.6
+ \$ perl Porting/checkAUTHORS.pl --tap --from=v5.31.6
+ \$ perl Porting/checkAUTHORS.pl --update --from=v5.31.6
+
+or the split int two and generate your own git log output
Generate git-log-output-file with git log --pretty=fuller rev1..rev2
(or pipe by specifying '-' for stdin). For example:
- \$ git log --pretty=fuller v5.12.0..v5.12.1 > gitlog
+ \$ git log --pretty=fuller v5.31.6..v5.31.7 > gitlog
\$ perl Porting/checkAUTHORS.pl --rank --percentage gitlog
+
+
EOS
}
@@ -88,12 +123,33 @@ sub list_authors {
binmode(STDOUT, ":utf8");
print wrap '', '', join(', ', Unicode::Collate->new(level => 1)->sort(
map { $authors->{$_} }
+ grep { length $_ > 1 } # skip the exception '!' and '?'
keys %$patchers)) . ".\n";
}
-sub parse_commits_from_stdin {
- my @lines = split( /^commit\s*/sm, join( '', <> ) );
- for (@lines) {
+# use --from [and --to] if provided
+# otherwise fallback to stdin for backward compatibility
+sub _git_log {
+ if ( length $from_commit ) {
+ my ( $from, $to ) = ( $from_commit, $to_commit );
+ $to //= 'HEAD';
+ my $gitlog = [ qx{git log --pretty=fuller $from..$to} ];
+ die "git log failed: $!" unless $? == 0;
+ return $gitlog;
+ }
+
+ return [ <> ];
+}
+
+sub parse_commits {
+ my ( $process ) = @_;
+
+ $process //= \&process; # default processor
+
+ my $git_log = _git_log();
+
+ my @lines = split( /^commit\s*/sm, join( '', $git_log->@* ) );
+ foreach (@lines) {
next if m/^$/;
next if m/^(\S*?)^Merge:/ism; # skip merge commits
if (m/^(.*?)^Author:\s*(.*?)^AuthorDate:\s*.*?^Commit:\s*(.*?)^(.*)$/gism) {
@@ -104,39 +160,70 @@ sub parse_commits_from_stdin {
unless ($author) { die $_ }
chomp($committer);
unless ($committer) { die $_ }
- process( $committer, $patch, $author );
+
+ $process->( $committer, $patch, $author );
} else {
die "XXX $_ did not match";
}
}
+ return;
}
-# just grab authors. Quicker than parse_commits_from_stdin
+# just grab authors. Quicker than parse_commits
+
+sub parse_commits_authors {
+
+ my $git_log = _git_log();
-sub parse_commits_from_stdin_authors {
- while (<>) {
+ foreach ($git_log->@*) {
next unless /^Author:\s*(.*)$/;
- my $author = $1;
- $author = _raw_address($author);
- $patchers{$author}++;
+ my $author = $1;
+ $author = _raw_address($author);
+ $patchers{$author}++;
}
-}
+ return;
+}
sub generate_known_author_map {
my %map;
- my $prev = "";
+ my %preferred_email_or_github;
+
+ my $previous_name = "";
+ my $previous_preferred_contact = "";
while (<DATA>) {
+ next if m{^\s*#};
+
chomp;
s/\\100/\@/g;
+
$_ = lc;
- if ( my ( $correct, $alias ) = /^\s*([^#\s]\S*)\s+(.*\S)/ ) {
- $correct =~ s/^\\043/#/;
- if ( $correct eq '+' ) { $correct = $prev }
- else { $prev = $correct }
- $map{$alias} = $correct;
+ if ( my ( $name, $contact ) = /^\s*([^#\s]\S*)\s+(.*\S)/ ) {
+
+ $name =~ s/^\\043/#/;
+ # use the previous stored email if the line starts by a '+'
+ if ( $name eq '+' ) {
+ $name = $previous_name;
+ }
+ else {
+ $previous_name = $name;
+ $previous_preferred_contact = $contact;
+ if ( index($name, '@' ) > 0 ) {
+ # if name is an email, then this is our preferred email... legacy list
+ $previous_preferred_contact = $name;
+ }
+ }
+
+ $map{$contact} = $name;
+
+ if ( $contact ne $previous_preferred_contact ) {
+ $preferred_email_or_github{$contact} = $previous_preferred_contact;
+ }
+ if ( $name ne '+' ) {
+ $preferred_email_or_github{$name} = $previous_preferred_contact;
+ }
}
}
@@ -210,25 +297,34 @@ sub generate_known_author_map {
"(none)",
;
- return \%map;
+ return ( \%map, \%preferred_email_or_github );
}
-sub read_authors_files {
- my @authors = (@_);
- return unless (@authors);
+sub read_authors_file {
+ my ( $filename, $preserve_case ) = @_;
+ return unless defined $filename;
+
+ my @headers;
+
my (%count, %raw);
- foreach my $filename (@authors) {
- open FH, '<', $filename or die "Can't open $filename: $!";
- binmode FH, ':encoding(UTF-8)';
- while (<FH>) {
+ {
+ open my $fh, '<', $filename or die "Can't open $filename: $!";
+ binmode $fh, ':encoding(UTF-8)';
+ my $in_header = 1;
+ while (<$fh>) {
next if /^\#/;
- next if /^-- /;
+ do { $in_header = 0; next } if /^-- /;
if (/^([^<]+)<([^>]+)>/) {
# Easy line.
my ($name, $email) = ($1, $2);
$name =~ s/\s*\z//;
$raw{$email} = $name;
$count{$email}++;
+ } elsif ( /^([^@]+)\s+(\@\S+)\s*$/ ) {
+ my ($name, $github) = ($1, $2);
+ $name =~ s/\s*\z//;
+ $raw{$github} = $name;
+ $count{$github}++;
} elsif (/^([- .'\w]+)[\t\n]/) {
# Name only
@@ -240,31 +336,186 @@ sub read_authors_files {
next;
}
}
+ continue {
+ push @headers, $_ if $in_header;
+ }
}
- foreach ( keys %raw ) {
- print "E-mail $_ occurs $count{$_} times\n" if $count{$_} > 1;
- my $lc = lc $_;
- $authors{ $map->{$lc} || $lc } = $raw{$_};
+ foreach my $contact ( sort keys %raw ) {
+ print "E-mail $contact occurs $count{$contact} times\n" if $count{$contact} > 1;
+ my $lc = lc $contact;
+ my $key = $preserve_case ? $contact : $lc;
+ $authors{ $map->{$lc} || $key } = $raw{$contact};
}
$authors{$_} = $_ for qw(? !);
+
+ push @headers, '-- ', "\n";
+
+ return join( '', @headers );
+}
+
+sub update_authors_files {
+ my ( $authors, $known_authors, $preferred_email_or_github, $author_file ) = @_;
+
+ die qq[Cannot find AUTHORS file '$author_file'] unless -f $author_file;
+ binmode(STDOUT, ":utf8");
+
+ # add missing authors from the recent commits
+ _detect_new_authors_from_recent_commit( $authors, $known_authors );
+
+ my @author_names = sort { $a cmp $b } values %$authors;
+ my $maxlen = length [ sort { length $b <=> length $a } @author_names ]->[0];
+
+ my @list;
+ foreach my $github_or_email ( sort keys %authors ) {
+
+ next if length $github_or_email == 1;
+
+ my $name = $authors{$github_or_email};
+ $name =~ s{\s+$}{};
+
+ #$github_or_email = $known_authors->{ $github_or_email } // $github_or_email;
+ $github_or_email = $preferred_email_or_github->{ $github_or_email } // $github_or_email;
+
+ if ( index( $github_or_email, '@' ) != 0 ) { # preserve '<>' for unicode consortium
+ $github_or_email = '<' . $github_or_email . '>';
+ }
+
+ push @list, sprintf( "%-${maxlen}s %s\n", $name, $github_or_email);
+ }
+
+ # preserve the untraced authors :-) [without email or GitHub account]
+ push @list, map { "$_\n" } keys %untraced;
+
+ {
+ open my $fh, '>', $author_file or die "Can't open $author_file: $!";
+ binmode $fh, ':encoding(UTF-8)';
+
+ print {$fh} $AUTHORS_header;
+
+ map { print {$fh} $_ } sort { lc $a cmp lc $b } @list;
+
+ close $fh;
+
+ }
+
+ return;
}
+# read all recent commits and check if the author email is known
+# if the email is unknown add the author's GitHub account if possible or his email
+sub _detect_new_authors_from_recent_commit {
+ my ( $authors, $known_authors ) = @_;
+
+ my $check_if_email_known = sub {
+ my ( $email ) = @_;
+
+ my $preferred = $map->{$email} // $map->{lc $email}
+ // $preferred_email_or_github->{$email}
+ // $preferred_email_or_github->{lc $email}
+ // $email;
+
+ return $authors{$preferred} || $authors{ lc $preferred } ? 1 : 0;
+ };
+
+ my $already_checked = {};
+ my $process = sub {
+ my ( $committer, $patch, $author ) = @_;
+
+ foreach my $person ( $author, $committer ) {
+ next unless length $person;
+ next if $already_checked->{$person};
+ $already_checked->{$person} = 1;
+
+ my $is_author = $person eq $author;
+
+ if ( $person =~ m{^(.+)\s+<(.+)>$} ) {
+ my ( $name, $email ) = ( $1, $2 );
+
+ # skip unicode consortium and bad emails
+ if ( index( $email, '@' ) <= 0 ) {
+ warn "# Skipping new author: $person - bad email";
+ next;
+ }
+
+ next if $check_if_email_known->( $email );
+
+ # for new users we would prefer using the GitHub account
+ my $github_or_email = _commit_to_github_id( $patch, $is_author ) // $email;
+
+ next if $check_if_email_known->( $github_or_email );
+
+ print "# Detected a new author: $name using email $email [ $github_or_email ]\n";
+ $authors{$github_or_email} = $name; # add it to the list of authors
+ } else {
+ warn "Fail to parse author: $person";
+ }
+ }
+ };
+
+ parse_commits( $process );
+
+ return;
+}
+
+sub _commit_to_github_id {
+ my ( $commit, $is_author ) = @_;
+
+ chomp $commit if defined $commit;
+ return unless length $commit;
+
+ eval { require HTTP::Tiny; 1 } or do {
+ warn "HTTP::Tiny is missing, cannot detect GitHub account from commit id.";
+ no warnings;
+ *_commit_to_github_id = sub {};
+ return;
+ };
+
+ my $github_url_for_commit = q[https://github.com/Perl/perl5/commit/] . $commit;
+ my $response = HTTP::Tiny->new->get( $github_url_for_commit );
+
+ if ( ! $response->{success} ) {
+ warn "HTTP Request Failed: '$github_url_for_commit'";
+ return;
+ }
+
+ my $content = $response->{content} // '';
+
+ # poor man scrapping - probably have to be improved over time
+ # try to parse something like: <a href="/Perl/perl5/commits?author=ThisIsMyGitHubID"
+ my @github_ids; # up to two entries author and committer
+ while ( $content =~ s{\Q<a href="/Perl/perl5/commits?author=\E(.+)"}{} ) {
+ push @github_ids, '@' . $1;
+ }
+
+ warn "Found more than two github ids for $github_url_for_commit" if scalar @github_ids > 2;
+
+ return $github_ids[0] if $is_author;
+ if ( !$is_author && scalar @github_ids >= 2 ) {
+ return $github_ids[1]; # committer is the second entry
+ }
+
+ return $github_ids[0];
+}
+
+
sub display_test_output {
my $patchers = shift;
my $authors = shift;
my $real_names = shift;
my $count = 0;
printf "1..%d\n", scalar keys %$patchers;
- foreach ( sort keys %$patchers ) {
+
+ foreach my $email ( sort keys %$patchers ) {
$count++;
- if ($authors->{$_}) {
- print "ok $count - ".$real_names->{$_} ." $_\n";
+ if ($authors->{$email}) {
+ print "ok $count - ".$real_names->{$email} ." $email\n";
} else {
- print "not ok $count - Contributor not found in AUTHORS: $_ ".($real_names->{$_} || '???' )."\n";
- print STDERR ($real_names->{$_} || '???' )." <$_> not found in AUTHORS\n";
+ print "not ok $count - Contributor not found in AUTHORS: $email ".($real_names->{$email} || '???' )."\n";
+ print STDERR ($real_names->{$email} || '???' )." <$email> not found in AUTHORS\n";
}
-
}
+
+ return;
}
sub display_missing_authors {
@@ -286,6 +537,8 @@ sub display_missing_authors {
print "" . ( $real_names->{$author} || $author ) . "\t\t\t<" . $xauthor . ">\n";
}
}
+
+ return;
}
sub display_ordered {
@@ -315,6 +568,8 @@ sub display_ordered {
}
print wrap ( $prefix, "\t", join( " ", sort @{ $sorted[$i] } ), "\n" );
}
+
+ return;
}
sub process {
@@ -331,6 +586,8 @@ sub process {
# separate commit credit only if committing someone else's patch
$committers{$committer}++;
}
+
+ return;
}
sub _raw_address {
@@ -367,6 +624,7 @@ sub _raw_address {
$addr =~ s/\\100/@/g; # Sometimes, there are encoded @ signs in the git log.
if ($real_name) { $real_names{$addr} = $real_name }
+
return $addr;
}
@@ -374,8 +632,8 @@ sub _raw_address {
__DATA__
#
-# List of mappings. First entry the "correct" email address, as appears
-# in the AUTHORS file. Second is any "alias" mapped to it.
+# List of mappings. First entry the "correct" email address or GitHub account,
+# as appears in the AUTHORS file. Other lines are "alias" mapped to it.
#
# If the "correct" email address is a '+', the entry above it is reused;
# this for addresses with more than one alias.
@@ -386,12 +644,19 @@ __DATA__
#
# Committers.
#
+adamh \100BytesGuy
++ bytesguy\100users.noreply.github.com
++ git\100ahartley.com
adi enache\100rdslink.ro
alanbur alan.burlison\100sun.com
+ alan.burlison\100uk.sun.com
+ aburlison\100cix.compulink.co.uk
ams ams\100toroid.org
+ ams\100wiw.org
+atoomic \100atoomic
++ atoomic\100cpan.org
++ cpan\100atoomic.org
++ nicolas\100atoomic.org
chip chip\100pobox.com
+ chip\100perl.com
+ salzench\100nielsenmedia.com
@@ -399,14 +664,14 @@ chip chip\100pobox.com
+ chip\100rio.atlantic.net
+ salzench\100dun.nielsen.com
+ chip\100ci005.sv2.upperbeyond.com
-craigb craig.berry\100psinetcs.com
+craigb craigberry\100mac.com
+ craig.berry\100metamorgs.com
+ craig.berry\100signaltreesolutions.com
-+ craigberry\100mac.com
++ craig.berry\100psinetcs.com
+ craig.a.berry\100gmail.com
+ craig a. berry)
-davem davem\100fdgroup.com
-+ davem\100iabyn.nospamdeletethisbit.com
+davem davem\100iabyn.nospamdeletethisbit.com
++ davem\100fdgroup.com
+ davem\100iabyn.com
+ davem\100fdgroup.co.uk
+ davem\100fdisolutions.com
@@ -430,15 +695,15 @@ gbarr gbarr\100pobox.com
+ gbarr\100ti.com
+ graham.barr\100tiuk.ti.com
+ gbarr\100monty.mutatus.co.uk
-gisle gisle\100activestate.com
-+ gisle\100aas.no
+gisle gisle\100aas.no
++ gisle\100activestate.com
+ aas\100aas.no
+ aas\100bergen.sn.no
-gsar gsar\100activestate.com
-+ gsar\100cpan.org
+gsar gsar\100cpan.org
++ gsar\100activestate.com
+ gsar\100engin.umich.edu
-hv hv\100crypt.compulink.co.uk
-+ hv\100crypt.org
+hv hv\100crypt.org
++ hv\100crypt.compulink.co.uk
+ hv\100iii.co.uk
jhi jhi\100iki.fi
+ jhietaniemi\100gmail.com
@@ -449,8 +714,8 @@ jhi jhi\100iki.fi
+ jarkko.hietaniemi\100nokia.com
+ jarkko.hietaniemi\100cc.hut.fi
+ jarkko.hietaniemi\100booking.com
-jesse jesse\100bestpractical.com
-+ jesse\100fsck.com
+jesse jesse\100fsck.com
++ jesse\100bestpractical.com
+ jesse\100perl.org
merijn h.m.brand\100xs4all.nl
+ h.m.brand\100procura.nl
@@ -458,12 +723,13 @@ merijn h.m.brand\100xs4all.nl
+ h.m.brand\100hccnet.nl
+ merijn\100l1.procura.nl
+ merijn\100a5.(none)
++ perl5\100tux.freedom.nl
mhx mhx-perl\100gmx.net
+ mhx\100r2d2.(none)
mst mst\100shadowcat.co.uk
+ matthewt\100hercule.scsys.co.uk
-nicholas nick\100unfortu.net
-+ nick\100ccl4.org
+nicholas nick\100ccl4.org
++ nick\100unfortu.net
+ nick\100talking.bollo.cx
+ nick\100plum.flirble.org
+ nick\100babyhippo.co.uk
@@ -472,21 +738,21 @@ nicholas nick\100unfortu.net
+ nicholas\100dromedary.ams6.corp.booking.com
+ Nicholas Clark (sans From field in mail header)
pudge pudge\100pobox.com
-rgs rgarciasuarez\100free.fr
+rgs rgs@consttype.org
++ rgarciasuarez\100free.fr
+ rgarciasuarez\100mandrakesoft.com
+ rgarciasuarez\100mandriva.com
+ rgarciasuarez\100gmail.com
+ raphel.garcia-suarez\100hexaflux.com
-+ rgs@consttype.org
-sky sky\100nanisky.com
-+ artur\100contiller.se
+sky artur\100contiller.se
++ sky\100nanisky.com
+ arthur\100contiller.se
-smueller 7k8lrvf02\100sneakemail.com
+smueller smueller\100cpan.org
++ 7k8lrvf02\100sneakemail.com
+ kjx9zthh3001\100sneakemail.com
+ dtr8sin02\100sneakemail.com
+ rt8363b02\100sneakemail.com
+ o6hhmk002\100sneakemail.com
-+ smueller\100cpan.org
+ l2ot9pa02\100sneakemail.com
+ wyp3rlx02\100sneakemail.com
+ 0mgwtfbbq\100sneakemail.com
@@ -530,7 +796,9 @@ allen\100huarp.harvard.edu nort\100bottesini.harvard.edu
allens\100cpan.org easmith\100beatrice.rutgers.edu
+ root\100dogberry.rutgers.edu
ambs\100cpan.org hashashin\100gmail.com
-andreas.koenig\100anima.de andreas.koenig.gmwojprw\100franz.ak.mind.de
+andrea a.koenig@mind.de
++ andreas.koenig\100anima.de
++ andreas.koenig.gmwojprw\100franz.ak.mind.de
+ andreas.koenig.7os6vvqr\100franz.ak.mind.de
+ a.koenig\100mind.de
+ k\100anna.in-berlin.de
@@ -551,8 +819,8 @@ arnold\100gnu.ai.mit.edu arnold\100emoryu2.arpa
arodland\100cpan.org andrew\100hbslabs.com
arussell\100cs.uml.edu adam\100adam-pc.(none)
ash\100cpan.org ash_cpan\100firemirror.com
-avarab\100gmail.com avar\100cpan.org
-
+avar avar\100cpan.org
++ avarab\100gmail.com
bailey\100newman.upenn.edu bailey\100hmivax.humgen.upenn.edu
+ bailey\100genetics.upenn.edu
+ bailey.charles\100gmail.com
@@ -575,12 +843,14 @@ bulk88\100hotmail.com bulk88
chad.granum\100dreamhost.com exodist7\100gmail.com
choroba\100cpan.org choroba\100weed.(none)
++ choroba\100matfyz.cz
chromatic\100wgz.org chromatic\100rmci.net
ckuskie\100cadence.com colink\100perldreamer.com
claes\100surfar.nu claes\100versed.se
clintp\100geeksalad.org cpierce1\100ford.com
clkao\100clkao.org clkao\100bestpractical.com
corion\100corion.net corion\100cpan.org
++ github@corion.net
cp\100onsitetech.com publiustemp-p5p\100yahoo.com
+ publiustemp-p5p3\100yahoo.com
cpan\100audreyt.org autrijus\100egb.elixus.org
@@ -668,9 +938,11 @@ jari.aalto\100poboxes.com jari.aalto\100cante.net
jarausch\100numa1.igpm.rwth-aachen.de helmutjarausch\100unknown
jasons\100cs.unm.edu jasons\100sandy-home.arc.unm.edu
jbuehler\100hekimian.com jhpb\100hekimian.com
-jcromie\100100divsol.com jcromie\100cpan.org
+jcromie\100cpan.org jcromie\100100divsol.com
+ jim.cromie\100gmail.com
jd\100cpanel.net lightsey\100debian.org
++ john\10004755.net
++ john\100nixnuts.net
jdhedden\100cpan.org jerry\100hedden.us
+ jdhedden\1001979.usna.com
+ jdhedden\100gmail.com
@@ -786,7 +1058,7 @@ ilya\100math.berkeley.edu ilya\100math.ohio-state.edu
+ [9]ilya\100math.ohio-state.edu
ilya\100martynov.org ilya\100juil.nonet
-joshua.pritikin\100db.com joshua\100paloalto.com
+joshua\100paloalto.com joshua.pritikin\100db.com
litt\100acm.org tlhackque\100yahoo.com
@@ -803,7 +1075,9 @@ p5-authors\100crystalflame.net perl\100crystalflame.net
+ rs\100topsy.com
paul.green\100stratus.com paul_greenvos\100vos.stratus.com
+ pgreen\100seussnt.stratus.com
-paul.marquess\100btinternet.com paul_marquess\100yahoo.co.uk
+pmqs pmqs\100cpan.org
++ paul.marquess\100btinternet.com
++ paul_marquess\100yahoo.co.uk
+ paul.marquess\100ntlworld.com
+ paul.marquess\100openwave.com
+ pmarquess\100bfsec.bt.co.uk
@@ -820,9 +1094,11 @@ Peter.Dintelmann\100Dresdner-Bank.com peter.dintelmann\100dresdner-bank.com
# NOTE: There is an intentional trailing space in the line above
pfeifer\100wait.de pfeifer\100charly.informatik.uni-dortmund.de
+ upf\100de.uu.net
+pjacklam\100online.no pjacklam\100gmail.com
ribasushi@cpan.org rabbit\100rabbit.us
+ rabbit+bugs\100rabbit.us
-perl\100aaroncrane.co.uk arc\100cpan.org
+arc\100cpan.org perl\100aaroncrane.co.uk
++ arc@users.noreply.github.com
phil\100perkpartners.com phil\100finchcomputer.com
pimlott\100idiomtech.com andrew\100pimlott.net
+ pimlott\100abel.math.harvard.edu
@@ -838,13 +1114,14 @@ khw\100cpan.org khw\100karl.(none)
radu\100netsoft.ro rgreab\100fx.ro
rajagopa\100pauline.schrodinger.com rajagopa\100schrodinger.com
raphael.manfredi\100pobox.com raphael_manfredi\100grenoble.hp.com
-module@renee-baecker.de renee.baecker\100smart-websolutions.de
+module\100renee-baecker.de renee.baecker\100smart-websolutions.de
+ reneeb\100reneeb-desktop.(none)
-+ github@renee-baecker.de
++ github\100renee-baecker.de
+ otrs\100ubuntu.(none)
+ perl\100renee-baecker.de
+ reb\100perl-services.de
+ info\100perl-services.de
+rich+perl\100hyphen-dash-hyphen.info richardleach\100users.noreply.github.com
richard.foley\100rfi.net richard.foley\100t-online.de
+ richard.foley\100ubs.com
+ richard.foley\100ubsw.com
@@ -854,6 +1131,7 @@ rick\100consumercontact.com rick\100bort.ca
+ rick.delaney\100home.com
rjbs\100cpan.org rjbs-perl-p5p\100lists.manxome.org
+ perl.p5p\100rjbs.manxome.org
++ rjbs\100semiotic.systems
rjk\100linguist.dartmouth.edu rjk\100linguist.thayer.dartmouth.edu
+ rjk-perl-p5p\100tamias.net
+ rjk\100tamias.net
@@ -874,12 +1152,13 @@ roderick\100argon.org roderick\100gate.net
argrath\100ub32.org root\100ub32.org
rootbeer\100teleport.com rootbeer\100redcat.com
+ tomphoenix\100unknown
-rurban\100x-ray.at rurban\100cpan.org
+rra\100stanford.edu rra\100cpan.org
+rurban\100cpan.org rurban\100x-ray.at
+ rurban\100cpanel.net
rvtol+news\100isolution.nl rvtol\100isolution.nl
-sartak\100bestpractical.com sartak\100gmail.com
+sartak\100gmail.com sartak\100bestpractical.com
+ code\100sartak.org
-sadinoff\100olf.com danny-cpan\100sadinoff.com
+danny-cpan\100sadinoff.com sadinoff\100olf.com
schubiger\100cpan.org steven\100accognoscere.org
+ sts\100accognoscere.org
+ schubiger\100gmail.com
@@ -900,11 +1179,12 @@ shlomif\100cpan.org shlomif\100vipe.technion.ac.il
+ shlomif\100iglu.org.il
+ shlomif+processed-by-perl\100gmail.com
+ shlomif\100shlomifish.org
-simon\100simon-cozens.org simon\100pembro4.pmb.ox.ac.uk
+simon\100netthink.co.uk simon\100simon-cozens.org
++ simon\100pembro4.pmb.ox.ac.uk
+ simon\100brecon.co.uk
+ simon\100othersideofthe.earth.li
+ simon\100cozens.net
-+ simon\100netthink.co.uk
++
sisyphus\100cpan.org sisyphus1\100optusnet.com.au
+ sisyphus359\100gmail.com
lannings\100who.int lannings\100gmail.com
@@ -926,7 +1206,7 @@ spider\100orb.nashua.nh.us spider\100web.zk3.dec.com
+ spidb\100cpan.org
+ spider.boardman\100orb.nashua.nh.us
+ root\100peano.zk3.dec.com
-spiros\100lokku.com s.denaxas\100gmail.com
+s.denaxas\100gmail.com spiros\100lokku.com
spp\100ds.net spp\100psa.pencom.com
+ spp\100psasolar.colltech.com
+ spp\100spotter.yi.org
diff --git a/gnu/usr.bin/perl/Porting/checkURL.pl b/gnu/usr.bin/perl/Porting/checkURL.pl
index 0a2c2d211ab..2d92ff3c110 100644
--- a/gnu/usr.bin/perl/Porting/checkURL.pl
+++ b/gnu/usr.bin/perl/Porting/checkURL.pl
@@ -233,6 +233,28 @@ http://aspn.activestate.com/ASPN/Mail/Message/perl6-internals/2746631
http://my.smithmicro.com/mac/stuffit/
http://www.wg.omron.co.jp/cgi-bin/j-e/jfriedl.html
http://persephone.cps.unizar.es/general/gente/spd/gzip/gzip.html
+http://www.openzaurus.org/
+http://Casbah.org/
+http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/nmake15.exe
+http://www.pvhp.com/~pvhp/
+http://www.pvhp.com/%7Epvhp/
+http://www.pvhp.com/%7epvhp/
+http://www.leo.org
+http://www.madgoat.com
+http://www.mks.com/s390/gnu/
+http://www.research.att.com/sw/tools/uwin/
+http://www.tpj.com/
+http://safaribooksonline.com/
+http://use.perl.org/~autrijus/journal/25768
+http://www.s390.ibm.com/products/oe/bpxqp1.html
+http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01396.html
+http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01489.html
+http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01491.html
+http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01608.html
+http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg02144.html
+http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg02998.html
+http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1999-03/msg00520.html
+http://www.w3.org/Security/Faq/
# these are URI extraction bugs
http://www.perl.org/E
diff --git a/gnu/usr.bin/perl/Porting/checkcfgvar.pl b/gnu/usr.bin/perl/Porting/checkcfgvar.pl
index ce72fe56af3..101f12d8682 100755
--- a/gnu/usr.bin/perl/Porting/checkcfgvar.pl
+++ b/gnu/usr.bin/perl/Porting/checkcfgvar.pl
@@ -56,7 +56,6 @@ my @CFG = (
"plan9/config_sh.sample",
"win32/config.gc",
"win32/config.vc",
- "win32/config.ce",
"configure.com",
"Porting/config.sh",
);
diff --git a/gnu/usr.bin/perl/Porting/config.sh b/gnu/usr.bin/perl/Porting/config.sh
index 129bf6e10b9..2d2287cf2a7 100644
--- a/gnu/usr.bin/perl/Porting/config.sh
+++ b/gnu/usr.bin/perl/Porting/config.sh
@@ -45,11 +45,11 @@ alignbytes='8'
aphostname=''
api_revision='5'
api_subversion='0'
-api_version='30'
-api_versionstring='5.30.0'
+api_version='32'
+api_versionstring='5.32.0'
ar='ar'
-archlib='/opt/perl/lib/5.30.3/x86_64-linux'
-archlibexp='/opt/perl/lib/5.30.3/x86_64-linux'
+archlib='/opt/perl/lib/5.32.1/x86_64-linux'
+archlibexp='/opt/perl/lib/5.32.1/x86_64-linux'
archname64=''
archname='x86_64-linux'
archobjs=''
@@ -130,6 +130,7 @@ d_asinh='define'
d_atanh='define'
d_atolf='undef'
d_atoll='define'
+d_attribute_always_inline='undef'
d_attribute_deprecated='define'
d_attribute_format='define'
d_attribute_malloc='define'
@@ -553,6 +554,7 @@ d_sitearch='define'
d_snprintf='define'
d_sockaddr_in6='define'
d_sockaddr_sa_len='undef'
+d_sockaddr_storage='undef'
d_sockatmark='define'
d_sockatmarkproto='define'
d_socket='define'
@@ -645,6 +647,7 @@ d_voidtty=''
d_vsnprintf='define'
d_wait4='define'
d_waitpid='define'
+d_wcrtomb='undef'
d_wcscmp='define'
d_wcstombs='define'
d_wcsxfrm='define'
@@ -845,7 +848,7 @@ incpath=''
incpth='/usr/lib/gcc/x86_64-linux-gnu/4.9/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed /usr/include/x86_64-linux-gnu /usr/include'
inews=''
initialinstalllocation='/opt/perl/bin'
-installarchlib='/opt/perl/lib/5.30.3/x86_64-linux'
+installarchlib='/opt/perl/lib/5.32.1/x86_64-linux'
installbin='/opt/perl/bin'
installhtml1dir=''
installhtml3dir=''
@@ -853,13 +856,13 @@ installman1dir='/opt/perl/man/man1'
installman3dir='/opt/perl/man/man3'
installprefix='/opt/perl'
installprefixexp='/opt/perl'
-installprivlib='/opt/perl/lib/5.30.3'
+installprivlib='/opt/perl/lib/5.32.1'
installscript='/opt/perl/bin'
-installsitearch='/opt/perl/lib/site_perl/5.30.3/x86_64-linux'
+installsitearch='/opt/perl/lib/site_perl/5.32.1/x86_64-linux'
installsitebin='/opt/perl/bin'
installsitehtml1dir=''
installsitehtml3dir=''
-installsitelib='/opt/perl/lib/site_perl/5.30.3'
+installsitelib='/opt/perl/lib/site_perl/5.32.1'
installsiteman1dir='/opt/perl/man/man1'
installsiteman3dir='/opt/perl/man/man3'
installsitescript='/opt/perl/bin'
@@ -984,7 +987,7 @@ perl_patchlevel=''
perl_static_inline='static __inline__'
perladmin='yourname@yourhost.yourplace.com'
perllibs='-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc'
-perlpath='/opt/perl/bin/perl5.30.3'
+perlpath='/opt/perl/bin/perl5.32.1'
pg='pg'
phostname=''
pidtype='pid_t'
@@ -993,8 +996,8 @@ pmake=''
pr=''
prefix='/opt/perl'
prefixexp='/opt/perl'
-privlib='/opt/perl/lib/5.30.3'
-privlibexp='/opt/perl/lib/5.30.3'
+privlib='/opt/perl/lib/5.32.1'
+privlibexp='/opt/perl/lib/5.32.1'
procselfexe='"/proc/self/exe"'
ptrsize='8'
quadkind='2'
@@ -1059,17 +1062,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0'
sig_size='69'
signal_t='void'
-sitearch='/opt/perl/lib/site_perl/5.30.3/x86_64-linux'
-sitearchexp='/opt/perl/lib/site_perl/5.30.3/x86_64-linux'
+sitearch='/opt/perl/lib/site_perl/5.32.1/x86_64-linux'
+sitearchexp='/opt/perl/lib/site_perl/5.32.1/x86_64-linux'
sitebin='/opt/perl/bin'
sitebinexp='/opt/perl/bin'
sitehtml1dir=''
sitehtml1direxp=''
sitehtml3dir=''
sitehtml3direxp=''
-sitelib='/opt/perl/lib/site_perl/5.30.3'
+sitelib='/opt/perl/lib/site_perl/5.32.1'
sitelib_stem='/opt/perl/lib/site_perl'
-sitelibexp='/opt/perl/lib/site_perl/5.30.3'
+sitelibexp='/opt/perl/lib/site_perl/5.32.1'
siteman1dir='/opt/perl/man/man1'
siteman1direxp='/opt/perl/man/man1'
siteman3dir='/opt/perl/man/man3'
@@ -1095,7 +1098,7 @@ src='.'
ssizetype='ssize_t'
st_ino_sign='1'
st_ino_size='8'
-startperl='#!/opt/perl/bin/perl5.30.3'
+startperl='#!/opt/perl/bin/perl5.32.1'
startsh='#!/bin/sh'
static_ext=' '
stdchar='char'
@@ -1107,7 +1110,7 @@ stdio_ptr='((fp)->_IO_read_ptr)'
stdio_stream_array=''
strerror_r_proto='0'
submit=''
-subversion='3'
+subversion='1'
sysman='/usr/share/man/man1'
sysroot=''
tail=''
@@ -1205,8 +1208,8 @@ vendorprefix=''
vendorprefixexp=''
vendorscript=''
vendorscriptexp=''
-version='5.30.3'
-version_patchlevel_string='version 30 subversion 3'
+version='5.32.1'
+version_patchlevel_string='version 32 subversion 1'
versiononly='define'
vi=''
xlibpth='/usr/lib/386 /lib/386'
@@ -1215,10 +1218,10 @@ yaccflags=''
zcat=''
zip='zip'
PERL_REVISION=5
-PERL_VERSION=30
-PERL_SUBVERSION=3
+PERL_VERSION=32
+PERL_SUBVERSION=1
PERL_API_REVISION=5
-PERL_API_VERSION=30
+PERL_API_VERSION=32
PERL_API_SUBVERSION=0
PERL_PATCHLEVEL=''
PERL_CONFIG_SH=true
diff --git a/gnu/usr.bin/perl/Porting/config_H b/gnu/usr.bin/perl/Porting/config_H
index cd0b9848aa3..f9d56917f18 100644
--- a/gnu/usr.bin/perl/Porting/config_H
+++ b/gnu/usr.bin/perl/Porting/config_H
@@ -350,7 +350,7 @@
/* HAS_REGCOMP:
* This symbol, if defined, indicates that the regcomp() routine is
- * available to do some regular patern matching (usually on POSIX.2
+ * available to do some regular pattern matching (usually on POSIX.2
* conforming systems).
*/
#define HAS_REGCOMP /* POSIX.2 */
@@ -1239,8 +1239,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 "/opt/perl/lib/5.30.3/x86_64-linux" /**/
-#define ARCHLIB_EXP "/opt/perl/lib/5.30.3/x86_64-linux" /**/
+#define ARCHLIB "/opt/perl/lib/5.32.1/x86_64-linux" /**/
+#define ARCHLIB_EXP "/opt/perl/lib/5.32.1/x86_64-linux" /**/
/* BIN:
* This symbol holds the path of the bin directory where the package will
@@ -1293,8 +1293,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 "/opt/perl/lib/5.30.3" /**/
-#define PRIVLIB_EXP "/opt/perl/lib/5.30.3" /**/
+#define PRIVLIB "/opt/perl/lib/5.32.1" /**/
+#define PRIVLIB_EXP "/opt/perl/lib/5.32.1" /**/
/* SITEARCH:
* This symbol contains the name of the private library for this package.
@@ -1311,8 +1311,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 "/opt/perl/lib/site_perl/5.30.3/x86_64-linux" /**/
-#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.30.3/x86_64-linux" /**/
+#define SITEARCH "/opt/perl/lib/site_perl/5.32.1/x86_64-linux" /**/
+#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.32.1/x86_64-linux" /**/
/* SITELIB:
* This symbol contains the name of the private library for this package.
@@ -1334,8 +1334,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 "/opt/perl/lib/site_perl/5.30.3" /**/
-#define SITELIB_EXP "/opt/perl/lib/site_perl/5.30.3" /**/
+#define SITELIB "/opt/perl/lib/site_perl/5.32.1" /**/
+#define SITELIB_EXP "/opt/perl/lib/site_perl/5.32.1" /**/
#define SITELIB_STEM "/opt/perl/lib/site_perl" /**/
/* PERL_VENDORARCH:
@@ -4109,7 +4109,7 @@
* script to make sure (one hopes) that it runs with perl and not
* some shell.
*/
-#define STARTPERL "#!/opt/perl/bin/perl5.30.3" /**/
+#define STARTPERL "#!/opt/perl/bin/perl5.32.1" /**/
/* HAS_STDIO_STREAM_ARRAY:
* This symbol, if defined, tells that there is an array
@@ -4170,11 +4170,11 @@
#define USE_64_BIT_ALL /**/
#endif
-/* USE_CBACKTRACE:
+/* USE_C_BACKTRACE:
* This symbol, if defined, indicates that Perl should
* be built with support for backtrace.
*/
-/*#define USE_CBACKTRACE / **/
+/*#define USE_C_BACKTRACE / **/
/* USE_DTRACE:
* This symbol, if defined, indicates that Perl should
diff --git a/gnu/usr.bin/perl/Porting/corelist.pl b/gnu/usr.bin/perl/Porting/corelist.pl
index 57d09a085c2..2f2e61c52e2 100755
--- a/gnu/usr.bin/perl/Porting/corelist.pl
+++ b/gnu/usr.bin/perl/Porting/corelist.pl
@@ -98,7 +98,6 @@ find(
sub {
/(\.pm|_pm\.PL)$/ or return;
/PPPort\.pm$/ and return;
- /__Storable__\.pm$/ and return;
my $module = $File::Find::name;
$module =~ /\b(demo|t|private|corpus)\b/ and return; # demo or test modules
my $version = MM->parse_version($_);
@@ -294,6 +293,7 @@ foreach my $module ( sort keys %module_to_upstream ) {
$bug_tracker = defined $bug_tracker ? quote($bug_tracker) : 'undef';
next if $bug_tracker eq "'https://github.com/Perl/perl5/issues'";
next if $bug_tracker eq "'http://rt.perl.org/perlbug/'";
+ next if $bug_tracker eq "'https://rt.perl.org/perlbug/'";
$tracker .= sprintf " %-24s=> %s,\n", "'$module'", $bug_tracker;
}
$tracker .= ");";
diff --git a/gnu/usr.bin/perl/Porting/epigraphs.pod b/gnu/usr.bin/perl/Porting/epigraphs.pod
index 111819c6b2b..7686f8aac30 100644
--- a/gnu/usr.bin/perl/Porting/epigraphs.pod
+++ b/gnu/usr.bin/perl/Porting/epigraphs.pod
@@ -17,11 +17,122 @@ Consult your favorite dictionary for details.
=head1 EPIGRAPHS
+=head2 v5.33.6 - Edward R. Murrow
+
+L<Announced on 2021-01-20 by Richard Leach|https://www.nntp.perl.org/group/perl.perl5.porters/2021/01/msg258843.html>
+
+This instrument can teach, it can illuminate; yes, and it can even
+inspire. But it can do so only to the extent that humans are determined
+to use it to those ends. Otherwise it is merely wires and lights in a box.
+
+=head2 v5.33.5 - Max Weber, (from "Understanding Administration", by Wolfgang Seibel)
+
+L<Announced on 2020-12-20 by Max Maischein|https://www.nntp.perl.org/group/perl.perl5.porters/2020/12/msg258683.html>
+
+Authority is primarily: Administration
+ -- Max Weber
+
+=head2 v5.33.4 - George Eliot, "Adam Bede"
+
+L<Announced on 2020-11-20 by Tom Hukins|https://www.nntp.perl.org/group/perl.perl5.porters/2020/11/msg258597.html>
+
+It was more than two o'clock in the afternoon when Adam came in sight of
+the grey town on the hill-side and looked searchingly towards the green
+valley below, for the first glimpse of the old thatched roof near the
+ugly red mill.
+
+=head2 v5.33.3 - Ludwig van Beethoven, "Heiligenstadt Testament"; translated and quoted in: Maynard Solomon, "Beethoven"
+
+L<Announced on 2020-10-20 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2020/10/msg258502.html>
+
+Oh you men who think or say that I am malevolent, stubborn, or
+misanthropic, how greatly do you wrong me. You do not know the secret
+cause which makes me seem that way to you. From childhood on, my
+heart and soul have been full of the tender feeling of goodwill, and I
+was ever inclined to accomplish great things. But, think that for six
+years now I have been hopelessly afflicted, made worse by senseless
+physicians, from year to year deceived with hopes of improvement,
+finally compelled to face the prospect of a lasting malady (whose cure
+will take years or, perhaps, be impossible). Though born with a
+fiery, active temperament, even susceptible to the diversions of
+society, I was soon compelled to withdraw myself, to live life alone.
+[...] I endured this wretched existence--truly wretched for so
+susceptible a body, which can be thrown by a sudden change from the
+best condition to the very worst.--Patience, they say, is what I must
+now choose for my guide, and I have done so--I hope my determination
+will remain firm to endure until it pleases the inexorable Parcae to
+break the thread. [...] Recommend virtue to your children; it alone,
+not money, can make them happy. I speak from experience; this was
+what upheld me in time of misery. [...] Do not wholly forget me when I
+am dead; I deserve this from you, for during my lifetime I was
+thinking of you often and of ways to make you happy--please be so--
+
+=head2 v5.33.2 - Elizabeth Warren
+
+L<Announced on 2020-09-20 by Sawyer X|https://www.nntp.perl.org/group/perl.perl5.porters/2020/09/msg258369.html>
+
+ What I've learned is that real change is very, very hard. But I've
+ also learned that change is possible - if you fight for it.
+
+=head2 v5.33.1 - Aleksandr Solzhenitsyn, The Gulag Archipelago 1918-1956 (1973)
+
+L<Announced on 2020-08-20 by Karen Etheridge|https://www.nntp.perl.org/group/perl.perl5.porters/2020/08/msg258282.html>
+
+ If only there were evil people somewhere insidiously committing evil deeds,
+ and it were necessary only to separate them from the rest of us and destroy
+ them. But the line dividing good and evil cuts through the heart of every
+ human being. And who is willing to destroy a piece of his own heart?
+
+=head2 v5.33.0 - Confucius, "Confucius: The Analects"
+
+L<Announed on 2020-07-17 by Sawyer X|https://www.nntp.perl.org/group/perl.perl5.porters/2020/07/msg258033.html>
+
+ The man who moves a mountain begins by carrying away small stones.
+
+=head2 v5.32.1-RC1 - Mikhail Bulgakov, trans. Michael Glenny, "The Heart of a Dog"
+
+L<Announced on 2021-01-09 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2021/01/msg258762.html>
+
+Why bother to learn to read when you can smell meat a mile away? If you
+live in Moscow, though, and if you've got an ounce of brain in your head
+you can't help learning to read - and without going to night-school
+either. There are forty-thousand dogs in Moscow and I'll bet there's
+not one of them so stupid he can't spell out the word 'sausage'.
+
+=head2 v5.32.0 - Bob Dylan, "The Times They Are A Changing"
+
+L<Announced on 2020-06-20 by Sawyer X|https://www.nntp.perl.org/group/perl.perl5.porters/2020/06/msg257547.html>
+
+ Come gather 'round, people
+ Wherever you roam
+ And admit that the waters
+ Around you have grown
+ And accept it that soon
+ You'll be drenched to the bone
+ If your time to you is worth savin'
+ And you better start swimmin'
+ Or you'll sink like a stone
+ For the times they are a-changin'
+
+=head2 v5.32.0-RC1 - Coretta Scott King
+
+L<Announced on 2020-06-08 by Sawyer X|https://www.nntp.perl.org/group/perl.perl5.porters/2020/06/msg257521.html>
+
+ Struggle is a never ending process. Freedom is never really won,
+ you earn it and win it in every generation.
+
+=head2 v5.32.0-RC0 - Franz Kafka
+
+L<Announced on 2020-05-30 by Sawyer X|https://www.nntp.perl.org/group/perl.perl5.porters/2020/05/msg257486.html>
+
+ There are some things one can only achieve by a deliberate leap
+ in the opposite direction.
+
=head2 v5.31.11 - John F. Kennedy, National Committee for a Sane Nuclear Policy
L<Announced on 2020-04-28 by Sawyer X|https://www.nntp.perl.org/group/perl.perl5.porters/2020/04/msg257385.html>
-Mankind must put an end to war, or war will put an end to mankind.
+ Mankind must put an end to war, or war will put an end to mankind.
=head2 v5.31.10 - Christina Rossetti, "Remember"
@@ -244,6 +355,17 @@ L<Announced on 2019-05-24 by Sawyer X|https://www.nntp.perl.org/group/perl.perl5
The secrets inside her mind are like flowers in a garden at
nighttime, filling the darkness with perfume.
+=head2 v5.30.3 - Ben Aaronovitch, "Rivers of London"
+
+L<Announced on 2020-06-01 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2020/01/msg257498.html>
+
+Trewsbury Mead [...] According to the Ordnance Survey, this is where the
+Thames first rises 130 straight-line kilometres west of London. Just to
+the north is the site either of an Iron Age hill fort or a Roman
+encampment, the exact nature of which is awaiting an episode of Time
+Team. Apparently there is a soggy field, a stone to mark the spot and a
+chance, after a particularly wet winter, that you might see some water.
+
=head2 v5.30.2 - Francesco Maria Piave, trans. Deutsche Grammophon GmbH, "La traviata", Act II, Scene 2
L<Announced on 2020-03-14 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2020/03/msg257227.html>
@@ -635,6 +757,16 @@ L<Announced on 2018-06-26 by Sawyer X|http://nntp.perl.org/group/perl.perl5.port
Courage is the only antidote for danger.
+=head2 v5.28.3 - Ben Aaronovitch, "Rivers of London"
+
+L<Announced on 2020-06-01 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2020/01/msg257497.html>
+
+The north end of the London Borough of Camden is dominated by two hills,
+Hampstead on the west, Highgate on the east, with the Heath, one of the
+largest parks in London, slung between them like a green saddle. From
+these heights the land slopes down towards the River Thames and the
+floodplains that lurk below the built-up centre of London.
+
=head2 v5.28.2 - Edward Lear, ed. Vivien Noakes, "The Complete Nonsense and Other Verse": The Jumblies
L<Announced on 2019-04-19 by Steve Hay|http://www.nntp.perl.org/group/perl.perl5.porters/2019/04/msg254456.html>
diff --git a/gnu/usr.bin/perl/Porting/exec-bit.txt b/gnu/usr.bin/perl/Porting/exec-bit.txt
index bb0daee7336..d5c727ce36f 100644
--- a/gnu/usr.bin/perl/Porting/exec-bit.txt
+++ b/gnu/usr.bin/perl/Porting/exec-bit.txt
@@ -14,7 +14,6 @@ cpan/autodie/t/chmod.t
cpan/CPAN-Meta-YAML/t/tml
cpan/Test-Harness/t/source_tests/source.sh
cpan/Test-Harness/t/source_tests/source_args.sh
-dist/Devel-PPPort/devel/mkapidoc.sh
dist/Devel-PPPort/devel/mktodo
dist/Devel-PPPort/devel/regenerate
dist/Devel-PPPort/devel/scanprov
diff --git a/gnu/usr.bin/perl/Porting/makemeta b/gnu/usr.bin/perl/Porting/makemeta
index f4c249079b0..760377e060e 100644
--- a/gnu/usr.bin/perl/Porting/makemeta
+++ b/gnu/usr.bin/perl/Porting/makemeta
@@ -49,12 +49,12 @@ my $distmeta = {
'repository' => {
'url' => 'https://github.com/Perl/perl5'
},
- 'homepage' => 'http://www.perl.org/',
+ 'homepage' => 'https://www.perl.org/',
'bugtracker' => {
'web' => 'https://github.com/Perl/perl5/issues'
},
'license' => [
- 'http://dev.perl.org/licenses/'
+ 'https://dev.perl.org/licenses/'
],
},
};
diff --git a/gnu/usr.bin/perl/Porting/makerel b/gnu/usr.bin/perl/Porting/makerel
index bf4569bf98f..165c8cd32ab 100644
--- a/gnu/usr.bin/perl/Porting/makerel
+++ b/gnu/usr.bin/perl/Porting/makerel
@@ -31,7 +31,7 @@ sub usage { die <<EOF; }
usage: $0 [ -r rootdir ] [-s suffix ] [ -x ] [ -n ]
-r rootdir directory under which to create the build dir and tarball
defaults to '..'
- -s suffix suffix to append to to the perl-x.y.z dir and tarball name
+ -s suffix suffix to append to the perl-x.y.z dir and tarball name
defaults to the concatenation of the local_patches entry
in patchlevel.h (or blank, if none)
-x make a .xz file in addition to a .gz file
@@ -77,7 +77,7 @@ print "\nMaking a release for $perl in $relroot/$reldir\n\n";
print "Cross-checking the MANIFEST...\n";
($missfile, $missentry) = fullcheck();
@$missentry
- = grep {$_ !~ m!^\.git/! and $_ !~ m!(?:/|^)\.gitignore!} @$missentry;
+ = grep {$_ !~ m!^\.(?:git|github|mailmap)! and $_ !~ m!(?:/|^)\.gitignore!} @$missentry;
if (@$missfile ) {
warn "Can't make a release with MANIFEST files missing:\n";
warn "\t".$_."\n" for (@$missfile);
@@ -156,9 +156,7 @@ my @writables = qw(
lib/warnings.pm
win32/GNUmakefile
win32/Makefile
- win32/Makefile.ce
win32/makefile.mk
- win32/config_H.ce
win32/config_H.gc
win32/config_H.vc
uconfig.h
diff --git a/gnu/usr.bin/perl/Porting/perldelta_template.pod b/gnu/usr.bin/perl/Porting/perldelta_template.pod
index 6fa258d3c75..ffb7175d8ec 100644
--- a/gnu/usr.bin/perl/Porting/perldelta_template.pod
+++ b/gnu/usr.bin/perl/Porting/perldelta_template.pod
@@ -403,7 +403,7 @@ died, add a short obituary here.
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.30.3..HEAD
+ perl Porting/acknowledgements.pl v5.32.1..HEAD
=head1 Reporting Bugs
diff --git a/gnu/usr.bin/perl/Porting/pod_lib.pl b/gnu/usr.bin/perl/Porting/pod_lib.pl
index f2d854408eb..1098074f328 100644
--- a/gnu/usr.bin/perl/Porting/pod_lib.pl
+++ b/gnu/usr.bin/perl/Porting/pod_lib.pl
@@ -330,6 +330,8 @@ sub pods_to_install {
# manpages not to be installed
my %do_not_install = map { ($_ => 1) }
qw(Pod::Functions XS::APItest XS::Typemap);
+ $do_not_install{"ExtUtils::XSSymSet"} = 1
+ unless $^O eq "VMS";
my (%done, %found);
diff --git a/gnu/usr.bin/perl/Porting/pumpkin.pod b/gnu/usr.bin/perl/Porting/pumpkin.pod
index 6f4ef812bc5..e952fb2b2da 100644
--- a/gnu/usr.bin/perl/Porting/pumpkin.pod
+++ b/gnu/usr.bin/perl/Porting/pumpkin.pod
@@ -35,15 +35,13 @@ interested in all the latest developments, you should definitely
subscribe. The list is high volume, but generally has a
fairly low noise level.
-Subscribe by sending the message (in the body of your letter)
+To subscribe to perl5-porters, send an email to
- subscribe perl5-porters
-
-to perl5-porters-request@perl.org .
+ perl5-porters-subscribe@perl.org
Archives of the list are held at:
- http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
+ https://lists.perl.org/list/perl5-porters.html
=head1 How are Perl Releases Numbered?
@@ -318,7 +316,8 @@ changes pre-approved by the metaconfig maintainers
=back
-Such changes should also be notified to the metaconfig maintainers.
+Such changes should also be notified to the metaconfig maintainers by
+creating an issue at <https://github.com/Perl/metaconfig/issues>.
Alternatively, do consider if the F<*ish.h> files or the hint files might
be a better place for your changes.
@@ -330,9 +329,9 @@ and F<README_U> files in the metaconfig repository containing Perl's
metaconfig units:
# anonymous clone
- git clone https://github.com/perl5-metaconfig/metaconfig.git
+ git clone https://github.com/Perl/metaconfig.git
# or using a registered github.com identity with ssh
- git clone github.com:perl5-metaconfig/metaconfig metaconfig
+ git clone github.com:Perl/metaconfig.git
Since metaconfig is hard to change, running correction scripts after
this generation is sometimes needed. Configure gained complexity over
@@ -524,7 +523,7 @@ It is courteous to update that if necessary.
I find the F<makepatch> utility quite handy for making patches.
You can obtain it from any CPAN archive under
-L<http://www.cpan.org/authors/Johan_Vromans/>. There are a couple
+L<https://www.cpan.org/authors/id/J/JV/JV/>. There are a couple
of differences between my version and the standard one. I have mine do
a
@@ -544,9 +543,9 @@ Here's how I generate a new patch. I'll use the hypothetical
5.004_07 to 5.004_08 patch as an example.
# unpack perl5.004_07/
- gzip -d -c perl5.004_07.tar.gz | tar -xf -
+ gzip -d -c perl5.004_07.tar.gz | tar -xof -
# unpack perl5.004_08/
- gzip -d -c perl5.004_08.tar.gz | tar -xf -
+ gzip -d -c perl5.004_08.tar.gz | tar -xof -
makepatch perl5.004_07 perl5.004_08 > perl5.004_08.pat
Makepatch will automatically generate appropriate B<rm> commands to remove
diff --git a/gnu/usr.bin/perl/Porting/release_announcement_template.txt b/gnu/usr.bin/perl/Porting/release_announcement_template.txt
index 7efbe15e6b9..55b62674bff 100644
--- a/gnu/usr.bin/perl/Porting/release_announcement_template.txt
+++ b/gnu/usr.bin/perl/Porting/release_announcement_template.txt
@@ -23,7 +23,7 @@ https://metacpan.org/pod/release/[AUTHOR]/perl-5.[VERSION.SUBVERSION]/pod/perlde
[ACKNOWLEDGEMENTS SECTION FROM PERLDELTA]
We expect to release version [NEXT BLEAD VERSION.SUBVERSION] on [FUTURE
-DATE]. The next major stable release of Perl 5, version 30.0, should
-appear in May 2019.
+DATE]. The next major stable release of Perl 5, version 32.0, should
+appear in May 2020.
[YOUR SALUTATION HERE]
diff --git a/gnu/usr.bin/perl/Porting/release_managers_guide.pod b/gnu/usr.bin/perl/Porting/release_managers_guide.pod
index 2e725d17d50..c9f729f4eb7 100644
--- a/gnu/usr.bin/perl/Porting/release_managers_guide.pod
+++ b/gnu/usr.bin/perl/Porting/release_managers_guide.pod
@@ -141,23 +141,17 @@ Andreas' email address at:
https://pause.perl.org/pause/query?ACTION=pause_04imprint
-=head3 GitHub issue management access
-
-Make sure you have permission to close tickets on L<https://github.com/Perl/perl5/issues>
-so you can respond to bug reports as necessary during your stint. If you
-don't, make a GitHub account (if you don't have one) and contact the pumpking
-with your username to get ticket-closing permission.
-
-=head3 git checkout and commit bit
+=head3 GitHub access
You will need a working C<git> installation, checkout of the perl
git repository and perl commit bit. For information about working
with perl and git, see F<pod/perlgit.pod>.
If you are not yet a perl committer, you won't be able to make a
-release. Have a chat with whichever evil perl porter tried to talk
-you into the idea in the first place to figure out the best way to
-resolve the issue.
+release. You will need to have a GitHub account (if you don't have one)
+and contact the pumpking with your username to get membership of the L<<
+Perl-Release-Managers|https://github.com/orgs/Perl/teams/perl-release-managers
+>> team.
=head3 web-based file share
@@ -166,10 +160,6 @@ pre-release testing, and you may wish to upload to PAUSE via URL.
Make sure you have a way of sharing files, such as a web server or
file-sharing service.
-Porters have access to the "dromedary" server (users.perl5.git.perl.org),
-which has a F<public_html> directory to share files with.
-(L<http://users.perl5.git.perl.org/~username/perl-5.xx.y.tar.gz>)
-
If you use Dropbox, you can append "raw=1" as a parameter to their usual
sharing link to allow direct download (albeit with redirects).
@@ -374,6 +364,10 @@ the raw reports.
Similarly, monitor the smoking of perl for compiler warnings, and try to
fix.
+Additionally both L<Travis CI|https://travis-ci.org/Perl/perl5> and
+L<GitHub Actions|https://github.com/Perl/perl5/actions> smokers run
+automatically.
+
=for checklist skip BLEAD-POINT
=head3 monitor CPAN testers for failures
@@ -388,14 +382,6 @@ colon-delimited versions to use for comparison. For example:
L<http://analysis.cpantesters.org/beforemaintrelease?pair=5.20.2:5.22.0%20RC1>
-=head3 Monitor Continuous Integration smokers
-
-Currently both "Travis CI" and "GitHub Actions" smokers are setup.
-Their current status is available at:
-
-L<https://github.com/Perl/perl5/actions>
-L<https://travis-ci.org/Perl/perl5>
-
=head3 update perldelta
Get perldelta in a mostly finished state.
@@ -508,6 +494,33 @@ release (so for 5.15.3 this would be 5.15.2). If the last release manager
followed instructions, this should have already been done after the last
blead release, so you may find nothing to do here.
+=head3 update AUTHORS
+
+The AUTHORS file can be updated by running C<Porting/checkAUTHORS.pl --update>
+The script detects missing authors or committers since the last release using
+a known tag provided by the C<--from=v5.X.Y> argument, and will add missing
+entries to the AUTHORS file.
+
+ $ perl Porting/checkAUTHORS.pl --update --from=v5.X.Y
+
+For MAINT and BLEAD-FINAL releases, C<v5.X.Y> needs to refer to the last
+release in the previous development cycle (so for example, for a 5.14.x
+release, this would be 5.13.11).
+
+For BLEAD-POINT releases, it needs to refer to the previous BLEAD-POINT
+release (so for 5.15.3 this would be 5.15.2).
+
+Note: It should not be harmful to use a wider range.
+
+Note: If you have uncommitted changes this could cause some warnings,
+and you might like to use the addtional argument C<--to=upstream/blead>
+to use the last known git commit by GitHub.
+
+Review the changes to the AUTHORS file, be sure you are not adding duplicate
+entries or removing any entries, then commit your changes.
+
+ $ git commit -a AUTHORS -m 'Update AUTHORS list for 5.x.y'
+
=head3 Check copyright years
Check that the copyright years are up to date by running:
@@ -1149,11 +1162,6 @@ eliminate anxious gnashing of teeth while you wait to see if your
15 megabyte HTTP upload successfully completes across your slow, twitchy
cable modem.
-You can make use of your home directory on dromedary for
-this purpose: F<http://users.perl5.git.perl.org/~USERNAME> maps to
-F</home/USERNAME/public_html>, where F<USERNAME> is your login account
-on dromedary.
-
I<Remember>: if your upload is partially successful, you
may need to contact a PAUSE administrator or even bump the version of perl.
diff --git a/gnu/usr.bin/perl/Porting/release_schedule.pod b/gnu/usr.bin/perl/Porting/release_schedule.pod
index b815ec17f8e..939baddafe3 100644
--- a/gnu/usr.bin/perl/Porting/release_schedule.pod
+++ b/gnu/usr.bin/perl/Porting/release_schedule.pod
@@ -13,35 +13,15 @@ deemed necessary by the Pumpking.
=head2 Perl 5.32
-Code freezes (which happen in the 5.31.X series)
-
- 2020-01-20 5.31.8 ✓ Contentious changes freeze
- 2020-02-20 5.31.9 ✓ User-visible changes to correctly
- functioning programs freeze
- 2020-03-20 5.31.10 ✓ Full code freeze
- 2020-04-28 5.31.11 ✓ Full code freeze (clearing BBCs)
- 2020-05-20 5.32.0 Stable release! (Hopefully)
+ 2020-06-20 5.32.0 ✓ Sawyer X
+ 2021-01-23 5.32.1 Steve Hay
=head2 Perl 5.30
2019-05-22 5.30.0 ✓ Sawyer X
2019-11-10 5.30.1 ✓ Steve Hay
2020-03-14 5.30.2 ✓ Steve Hay
- 2020-06-01 5.30.3 Steve Hay
-
-=head2 Perl 5.28
-
- 2018-05-20 5.28.0 ✓ Sawyer X
- 2018-11-29 5.28.1 ✓ Steve Hay
- 2019-04-19 5.28.2 ✓ Steve Hay
- 2020-06-01 5.28.3 Steve Hay
-
-=head2 Perl 5.26
-
- 2017-05-30 5.26.0 ✓ Sawyer X
- 2017-09-22 5.26.1 ✓ Steve Hay
- 2018-04-14 5.26.2 ✓ Steve Hay
- 2018-11-29 5.26.3 ✓ Steve Hay
+ 2020-06-01 5.30.3 ✓ Steve Hay
=head1 DEVELOPMENT RELEASE SCHEDULE
@@ -57,23 +37,18 @@ When shipping a release, you should include the schedule for (at least)
the next four releases. If a stable version of Perl is released,
you should reset the version numbers to the next blead series.
-=head2 Perl 5.31
-
- 2019-05-23 5.31.0 ✓ Sawyer X
- 2019-06-20 5.31.1 ✓ Karen Etheridge
- 2019-07-20 5.31.2 ✓ Steve Hay
- 2019-08-20 5.31.3 ✓ Tom Hukins
- 2019-09-20 5.31.4 ✓ Max Maischein
- 2019-10-20 5.31.5 ✓ Steve Hay
- 2019-11-20 5.31.6 ✓ BinGOs
- 2019-12-20 5.31.7 ✓ Atoomic
- 2020-01-20 5.31.8 ✓ Matthew Horsfall
- 2020-02-20 5.31.9 ✓ Renee Bäcker
- 2020-03-20 5.31.10 ✓ Sawyer X
- 2020-04-28 5.31.11 ✓ Sawyer X
-
-(RC0 for 5.32.0 will be released once we think that all the blockers have been
-addressed. This typically means some time in April or May.)
+=head2 Perl 5.33
+
+ 2020-07-17 5.33.0 ✓ Sawyer X
+ 2020-08-20 5.33.1 ✓ Karen Etheridge
+ 2020-09-20 5.33.2 ✓ Sawyer X
+ 2020-10-20 5.33.3 ✓ Steve Hay
+ 2020-11-20 5.33.4 ✓ Tom Hukins
+ 2020-12-20 5.33.5 ✓ Max Maischein
+ 2021-01-20 5.33.6 ✓ Richard Leach
+ 2021-02-20 5.33.7 Renee Backer
+ 2021-03-20 5.33.8 Atoomic
+ 2021-04-20 5.33.9 Todd Rinaldo
=head1 VICTIMS
diff --git a/gnu/usr.bin/perl/Porting/sync-with-cpan b/gnu/usr.bin/perl/Porting/sync-with-cpan
index bde97a4ac78..4b3a18b5e87 100644
--- a/gnu/usr.bin/perl/Porting/sync-with-cpan
+++ b/gnu/usr.bin/perl/Porting/sync-with-cpan
@@ -589,7 +589,7 @@ unlink "cpan/$new_file" unless $tarball;
#
# Run the tests. First the test belonging to the module, followed by the
-# the tests in t/porting
+# tests in t/porting
#
chdir "t";
say "Running module tests";
diff --git a/gnu/usr.bin/perl/Porting/todo.pod b/gnu/usr.bin/perl/Porting/todo.pod
index 30f47ba5c14..493fe19788d 100644
--- a/gnu/usr.bin/perl/Porting/todo.pod
+++ b/gnu/usr.bin/perl/Porting/todo.pod
@@ -486,7 +486,7 @@ Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall.
On these systems, it might be the default compilation mode, and there
is currently no guarantee that passing no use64bitall option to the
Configure process will build a 32bit perl. Implementing -Duse32bit*
-options would be nice for perl 5.26.0.
+options would be nice for perl 5.32.1.
=head2 Profile Perl - am I hot or not?
@@ -508,12 +508,6 @@ suggest evictions and promotions to achieve a better F<pp_hot.c>.
One piece of Perl code that might make a good testbed is F<installman>.
-=head2 Improve win32/wince.c
-
-Currently, numerous functions look virtually, if not completely,
-identical in both F<win32/wince.c> and F<win32/win32.c> files, which can't
-be good.
-
=head2 Use secure CRT functions when building with VC8 on Win32
Visual C++ 2005 (VC++ 8.x) deprecated a number of CRT functions on the basis
@@ -545,7 +539,7 @@ read-only attribute).
Furthermore, POSIX::access() behaves differently for directories having the
read-only attribute set depending on what CRT library is being used. For
-example, the _access() function in the VC6 and VC7 CRTs (wrongly) claim that
+example, the _access() function in the VC7 CRT (wrongly) claims that
such directories are not writable, whereas in fact all directories are writable
unless access is denied by DACLs. (In the case of directories, the read-only
attribute actually only means that the directory cannot be deleted.) This CRT
@@ -952,26 +946,15 @@ Logically all lexicals used only once should warn, if the user asks for
warnings. An unworked RT ticket (#5087) has been open for almost seven
years for this discrepancy.
-=head2 UTF-8 revamp
-
-The handling of Unicode is unclean in many places. In the regex engine
-there are especially many problems. The swash data structure could be
-replaced my something better. Inversion lists and maps are likely
-candidates. The whole Unicode database could be placed in-core for a
-huge speed-up. Only minimal work was done on the optimizer when utf8
-was added, with the result that the synthetic start class often will
-fail to narrow down the possible choices when given non-Latin1 input.
-Karl Williamson has been working on this - talk to him.
-
=head2 state variable initialization in list context
Currently this is illegal:
state ($a, $b) = foo();
-In Perl 6, C<state ($a) = foo();> and C<(state $a) = foo();> have different
+In Raku, C<state ($a) = foo();> and C<(state $a) = foo();> have different
semantics, which is tricky to implement in Perl 5 as currently they produce
-the same opcode trees. The Perl 6 design is firm, so it would be good to
+the same opcode trees. The Raku design is firm, so it would be good to
implement the necessary code in Perl 5. There are comments in
C<Perl_newASSIGNOP()> that show the code paths taken by various assignment
constructions involving state variables.
@@ -1206,7 +1189,7 @@ L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2013-01/msg00339.html>
=head1 Big projects
Tasks that will get your name mentioned in the description of the "Highlights
-of 5.26.0"
+of 5.32.1"
=head2 make ithreads more robust
diff --git a/gnu/usr.bin/perl/README b/gnu/usr.bin/perl/README
index 93840d24043..859122434fa 100644
--- a/gnu/usr.bin/perl/README
+++ b/gnu/usr.bin/perl/README
@@ -1,6 +1,6 @@
Perl is Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
-2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Larry Wall and others.
+2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 by Larry Wall and others.
All rights reserved.
@@ -68,7 +68,7 @@ and there may be a more recent version that fixes bugs you've run into or
adds new features that you might find useful.
You can always find the latest version of perl on a CPAN (Comprehensive Perl
-Archive Network) site near you at http://www.cpan.org/src/
+Archive Network) site near you at https://www.cpan.org/src/
If you want to submit a simple patch to the perl source, see the "SUPER
QUICK PATCH GUIDE" in pod/perlhack.pod.
@@ -104,7 +104,7 @@ You should also have received a copy of the GNU General Public License
along with this program in the file named "Copying". If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA or visit their web page on the internet at
-http://www.gnu.org/copyleft/gpl.html.
+https://www.gnu.org/copyleft/gpl.html.
For those of you that choose to use the GNU General Public License,
my interpretation of the GNU General Public License is that no Perl
diff --git a/gnu/usr.bin/perl/README.android b/gnu/usr.bin/perl/README.android
index defcd959992..c9be849cb32 100644
--- a/gnu/usr.bin/perl/README.android
+++ b/gnu/usr.bin/perl/README.android
@@ -8,9 +8,9 @@ perlandroid - Perl under Android
=head1 SYNOPSIS
-The first portions of this documents contains instructions
+The first portions of this document contains instructions
to cross-compile Perl for Android 2.0 and later, using the
-binaries provided by Google. The latter portion describes how to build
+binaries provided by Google. The latter portions describe how to build
perl native using one of the toolchains available on the Play Store.
=head1 DESCRIPTION
@@ -181,10 +181,13 @@ itself off once, and then back on again.
=head1 Native Builds
While Google doesn't provide a native toolchain for Android,
-you can still get one from the Play Store; for example, there's the CCTools
-app which you can get for free.
-Keep in mind that you want a full
-toolchain; some apps tend to default to installing only a barebones
+you can still get one from the Play Store.
+
+=head2 CCTools
+
+You may be able to get the CCTools app, which is free.
+Keep in mind that you want a full toolchain;
+some apps tend to default to installing only a barebones
version without some important utilities, like ar or nm.
Once you have the toolchain set up properly, the only
@@ -197,6 +200,17 @@ compiling perl is little more than:
export LD_LIBRARY_PATH="$SYSROOT/lib:`pwd`:`pwd`/lib:`pwd`/lib/auto:$LD_LIBRARY_PATH"
sh Configure -des -Dsysroot=$SYSROOT -Alibpth="/system/lib /vendor/lib"
+=head2 Termux
+
+L<Termux|https://termux.com/> provides an Android terminal emulator and Linux environment.
+It comes with a cross-compiled perl already installed.
+
+Natively compiling perl 5.30 or later should be as straightforward as:
+
+ sh Configure -des -Alibpth="/system/lib /vendor/lib"
+
+This certainly works on Android 8.1 (Oreo) at least...
+
=head1 AUTHOR
Brian Fraser <fraserbn@gmail.com>
diff --git a/gnu/usr.bin/perl/README.bs2000 b/gnu/usr.bin/perl/README.bs2000
index 57b3eb4bf00..bfed5d5e487 100644
--- a/gnu/usr.bin/perl/README.bs2000
+++ b/gnu/usr.bin/perl/README.bs2000
@@ -227,12 +227,11 @@ To subscribe, send an empty message to perl-mvs-subscribe@perl.org.
See also:
- http://lists.perl.org/list/perl-mvs.html
+ https://lists.perl.org/list/perl-mvs.html
There are web archives of the mailing list at:
- http://www.xray.mpe.mpg.de/mailing-lists/perl-mvs/
- http://archive.develooper.com/perl-mvs@perl.org/
+ https://www.nntp.perl.org/group/perl.mvs/
=head1 HISTORY
diff --git a/gnu/usr.bin/perl/README.ce b/gnu/usr.bin/perl/README.ce
deleted file mode 100644
index fdf636f8f06..00000000000
--- a/gnu/usr.bin/perl/README.ce
+++ /dev/null
@@ -1,453 +0,0 @@
-If you read this file _as_is_, just ignore the funny characters you
-see. It is written in the POD format (see pod/perlpod.pod) which is
-specifically designed to be readable as is.
-
-=head1 NAME
-
-perlce - Perl for WinCE
-
-=head1 Building Perl for WinCE
-
-=head2 WARNING
-
-B<< Much of this document has become very out of date and needs updating,
-rewriting or deleting. The build process was overhauled during the 5.19
-development track and the current instructions as of that time are given
-in L</CURRENT BUILD INSTRUCTIONS>; the previous build instructions, which
-are largely superseded but may still contain some useful information, are
-left in L</OLD BUILD INSTRUCTIONS> but really need removing after anything
-of use has been extracted from them. >>
-
-=head2 DESCRIPTION
-
-This file gives the instructions for building Perl5.8 and above for
-WinCE. Please read and understand the terms under which this
-software is distributed.
-
-=head2 General explanations on cross-compiling WinCE
-
-=over
-
-=item *
-
-F<miniperl> is built. This is a single executable (without DLL), intended
-to run on Win32, and it will facilitate remaining build process; all binaries
-built after it are foreign and should not run locally.
-
-F<miniperl> is built using F<./win32/Makefile>; this is part of normal
-build process invoked as dependency from wince/Makefile.ce
-
-=item *
-
-After F<miniperl> is built, F<configpm> is invoked to create right F<Config.pm>
-in right place and its corresponding Cross.pm.
-
-Unlike Win32 build, miniperl will not have F<Config.pm> of host within reach;
-it rather will use F<Config.pm> from within cross-compilation directories.
-
-File F<Cross.pm> is dead simple: for given cross-architecture places in @INC
-a path where perl modules are, and right F<Config.pm> in that place.
-
-That said, C<miniperl -Ilib -MConfig -we 1> should report an error, because
-it can not find F<Config.pm>. If it does not give an error -- wrong F<Config.pm>
-is substituted, and resulting binaries will be a mess.
-
-C<miniperl -MCross -MConfig -we 1> should run okay, and it will provide right
-F<Config.pm> for further compilations.
-
-=item *
-
-During extensions build phase, a script F<./win32/buildext.pl> is invoked,
-which in turn steps in F<./ext> subdirectories and performs a build of
-each extension in turn.
-
-All invokes of F<Makefile.PL> are provided with C<-MCross> so to enable cross-
-compile.
-
-=back
-
-=head2 CURRENT BUILD INSTRUCTIONS
-
-(These instructions assume the host is 32-bit Windows. If you're on 64-bit
-Windows then change "C:\Program Files" to "C:\Program Files (x86)" throughout.)
-
-1. Install EVC4 from
-
- http://download.microsoft.com/download/c/3/f/c3f8b58b-9753-4c2e-8b96-2dfe3476a2f7/eVC4.exe
-
-Use the key mentioned at
-
- http://download.cnet.com/Microsoft-eMbedded-Visual-C/3000-2212_4-10108490.html?tag=bc
-
-The installer is ancient and has a few bugs on the paths it uses. You
-will have to fix them later. Basically, some things go into "C:/Program
-Files/Windows CE Tools", others go into "C:/Windows CE Tools" regardless
-of the path you gave to the installer (the default will be "C:/Windows
-CE Tools"). Reboots will be required for the installer to proceed. Also
-.c and .h associations with Visual Studio might get overridden when
-installing EVC4. You have been warned.
-
-2. Download celib from GitHub (using "Download ZIP") at
-
- https://github.com/bulk88/celib
-
-Extract it to a spaceless path but not into the perl build source.
-I call this directory "celib-palm-3.0" but in the GitHub
-snapshot it will be called "celib-master". Make a copy of the
-"wince-arm-pocket-wce300-release" folder and rename the copy to
-"wince-arm-pocket-wce400". This is a hack so we can build a CE 4.0
-binary by linking in CE 3.0 ARM asm; the linker doesn't care. Windows
-Mobile/WinCE are backwards compatible with machine code like Desktop Windows.
-
-3. Download console-1.3-src.tar.gz from
-
- http://sourceforge.net/projects/perlce/files/PerlCE%20support%20files/console/
-
-Extract it to a spaceless path but not into the perl build source.
-Don't extract it into the same directory as celib. Make a copy of the
-"wince-arm-pocket-wce300" folder and rename the copy to
-"wince-arm-pocket-wce400". This is a hack so we can build a CE 4.0
-binary by linking in CE 3.0 ARM asm; the linker doesn't care. Windows
-Mobile/WinCE are backwards compatible with machine code like Desktop Windows.
-
-4. Open a command prompt, run your regular batch file to set the environment
-for desktop Visual C building, goto the perl source directory, cd into win32/,
-fill out Makefile, and do a "nmake all" to build a Desktop Perl.
-
-5. Open win32/Makefile.ce in a text editor and do something similar to the
-following patch.
-
- -CELIBDLLDIR = h:\src\wince\celib-palm-3.0
- -CECONSOLEDIR = h:\src\wince\w32console
- +CELIBDLLDIR = C:\sources\celib-palm-3.0
- +CECONSOLEDIR = C:\sources\w32console
-
-Also change
-
- !if "$(MACHINE)" == ""
- MACHINE=wince-arm-hpc-wce300
- #MACHINE=wince-arm-hpc-wce211
- #MACHINE=wince-sh3-hpc-wce211
- #MACHINE=wince-mips-hpc-wce211
- #MACHINE=wince-sh3-hpc-wce200
- #MACHINE=wince-mips-hpc-wce200
- #MACHINE=wince-arm-pocket-wce300
- #MACHINE=wince-mips-pocket-wce300
- #MACHINE=wince-sh3-pocket-wce300
- #MACHINE=wince-x86em-pocket-wce300
- #MACHINE=wince-mips-palm-wce211
- #MACHINE=wince-sh3-palm-wce211
- #MACHINE=wince-x86em-palm-wce211
- #MACHINE=wince-x86-hpc-wce300
- #MACHINE=wince-arm-pocket-wce400
- !endif
-
-to
-
- !if "$(MACHINE)" == ""
- #MACHINE=wince-arm-hpc-wce300
- #MACHINE=wince-arm-hpc-wce211
- #MACHINE=wince-sh3-hpc-wce211
- #MACHINE=wince-mips-hpc-wce211
- #MACHINE=wince-sh3-hpc-wce200
- #MACHINE=wince-mips-hpc-wce200
- #MACHINE=wince-arm-pocket-wce300
- #MACHINE=wince-mips-pocket-wce300
- #MACHINE=wince-sh3-pocket-wce300
- #MACHINE=wince-x86em-pocket-wce300
- #MACHINE=wince-mips-palm-wce211
- #MACHINE=wince-sh3-palm-wce211
- #MACHINE=wince-x86em-palm-wce211
- #MACHINE=wince-x86-hpc-wce300
- MACHINE=wince-arm-pocket-wce400
- !endif
-
-so wince-arm-pocket-wce400 is the MACHINE type.
-
-6. Use a text editor to open "C:\Program Files\Microsoft eMbedded C++
-4.0\EVC\WCE400\BIN\WCEARMV4.BAT". Look for
-
- if "%SDKROOT%"=="" set SDKROOT=...
-
-On a new install it is "C:\Windows CE Tools". Goto
-"C:\Windows CE Tools" in a file manager and see if "C:\Windows CE
-Tools\wce400\STANDARDSDK\Include\Armv4" exists on your disk. If not
-the SDKROOT need to be changed to "C:\Program Files\Windows CE Tools".
-
-Goto celib-palm-3.0\inc\cewin32.h, search for
-
- typedef struct _ABC {
-
-and uncomment the struct.
-
-7. Open another command prompt, ensure PLATFORM is not set to anything
-already unless you know what you're doing (so that the correct default
-value is set by the next command), and run "C:\Program Files\Microsoft
-eMbedded C++ 4.0\EVC\WCE400\BIN\WCEARMV4.BAT"
-
-8. In the WinCE command prompt you made with WCEARMV4.BAT, goto the perl
-source directory, cd into win32/ and run "nmake -f Makefile.ce".
-
-9. The ARM perl interpreter (perl519.dll and perl.exe) will be in something
-like "C:\perl519\src\win32\wince-arm-pocket-wce400", with the XS DLLs in
-"C:\perl519\src\xlib\wince-arm-hpc-wce400\auto".
-
-To prove success on the host machine, run
-"dumpbin /headers wince-arm-pocket-wce400\perl.exe" from the win32/ folder
-and look for "machine (ARM)" in the FILE HEADER VALUES and
-"subsystem (Windows CE GUI)" in the OPTIONAL HEADER VALUES.
-
-=head2 OLD BUILD INSTRUCTIONS
-
-This section describes the steps to be performed to build PerlCE.
-You may find additional information about building perl for WinCE
-at L<http://perlce.sourceforge.net> and some pre-built binaries.
-
-=head3 Tools & SDK
-
-For compiling, you need following:
-
-=over 4
-
-=item * Microsoft Embedded Visual Tools
-
-=item * Microsoft Visual C++
-
-=item * Rainer Keuchel's celib-sources
-
-=item * Rainer Keuchel's console-sources
-
-=back
-
-Needed source files can be downloaded at
-L<http://perlce.sourceforge.net>
-
-=head3 Make
-
-Normally you only need to edit F<./win32/ce-helpers/compile.bat>
-to reflect your system and run it.
-
-File F<./win32/ce-helpers/compile.bat> is actually a wrapper to call
-C<nmake -f makefile.ce> with appropriate parameters and it accepts extra
-parameters and forwards them to C<nmake> command as additional
-arguments. You should pass target this way.
-
-To prepare distribution you need to do following:
-
-=over 4
-
-=item * go to F<./win32> subdirectory
-
-=item * edit file F<./win32/ce-helpers/compile.bat>
-
-=item * run
- compile.bat
-
-=item * run
- compile.bat dist
-
-=back
-
-F<Makefile.ce> has C<CROSS_NAME> macro, and it is used further to refer to
-your cross-compilation scheme. You could assign a name to it, but this
-is not necessary, because by default it is assigned after your machine
-configuration name, such as "wince-sh3-hpc-wce211", and this is enough
-to distinguish different builds at the same time. This option could be
-handy for several different builds on same platform to perform, say,
-threaded build. In a following example we assume that all required
-environment variables are set properly for C cross-compiler (a special
-*.bat file could fit perfectly to this purpose) and your F<compile.bat>
-has proper "MACHINE" parameter set, to, say, C<wince-mips-pocket-wce300>.
-
- compile.bat
- compile.bat dist
- compile.bat CROSS_NAME=mips-wce300-thr "USE_ITHREADS=define" ^
- "USE_IMP_SYS=define" "USE_MULTI=define"
- compile.bat CROSS_NAME=mips-wce300-thr "USE_ITHREADS=define" ^
- "USE_IMP_SYS=define" "USE_MULTI=define" dist
-
-If all goes okay and no errors during a build, you'll get two independent
-distributions: C<wince-mips-pocket-wce300> and C<mips-wce300-thr>.
-
-Target C<dist> prepares distribution file set. Target C<zipdist> performs
-same as C<dist> but additionally compresses distribution files into zip
-archive.
-
-NOTE: during a build there could be created a number (or one) of F<Config.pm>
-for cross-compilation ("foreign" F<Config.pm>) and those are hidden inside
-F<../xlib/$(CROSS_NAME)> with other auxiliary files, but, and this is important to
-note, there should be B<no> F<Config.pm> for host miniperl.
-If you'll get an error that perl could not find Config.pm somewhere in building
-process this means something went wrong. Most probably you forgot to
-specify a cross-compilation when invoking miniperl.exe to Makefile.PL
-When building an extension for cross-compilation your command line should
-look like
-
- ..\miniperl.exe -I..\lib -MCross=mips-wce300-thr Makefile.PL
-
-or just
-
- ..\miniperl.exe -I..\lib -MCross Makefile.PL
-
-to refer a cross-compilation that was created last time.
-
-All questions related to building for WinCE devices could be asked in
-F<perlce-user@lists.sourceforge.net> mailing list.
-
-=head1 Using Perl on WinCE
-
-=head2 DESCRIPTION
-
-PerlCE is currently linked with a simple console window, so it also
-works on non-hpc devices.
-
-The simple stdio implementation creates the files F<stdin.txt>,
-F<stdout.txt> and F<stderr.txt>, so you might examine them if your
-console has only a limited number of cols.
-
-When exitcode is non-zero, a message box appears, otherwise the
-console closes, so you might have to catch an exit with
-status 0 in your program to see any output.
-
-stdout/stderr now go into the files F</perl-stdout.txt> and
-F</perl-stderr.txt.>
-
-PerlIDE is handy to deal with perlce.
-
-=head2 LIMITATIONS
-
-No fork(), pipe(), popen() etc.
-
-=head2 ENVIRONMENT
-
-All environment vars must be stored in HKLM\Environment as
-strings. They are read at process startup.
-
-=over
-
-=item PERL5LIB
-
-Usual perl lib path (semi-list).
-
-=item PATH
-
-Semi-list for executables.
-
-=item TMP
-
-- Tempdir.
-
-=item UNIXROOTPATH
-
-- Root for accessing some special files, i.e. F</dev/null>, F</etc/services>.
-
-=item ROWS/COLS
-
-- Rows/cols for console.
-
-=item HOME
-
-- Home directory.
-
-=item CONSOLEFONTSIZE
-
-- Size for console font.
-
-=back
-
-You can set these with cereg.exe, a (remote) registry editor
-or via the PerlIDE.
-
-=head2 REGISTRY
-
-To start perl by clicking on a perl source file, you have
-to make the according entries in HKCR (see F<ce-helpers/wince-reg.bat>).
-cereg.exe (which must be executed on a desktop pc with
-ActiveSync) is reported not to work on some devices.
-You have to create the registry entries by hand using a
-registry editor.
-
-=head2 XS
-
-The following Win32-Methods are built-in:
-
- newXS("Win32::GetCwd", w32_GetCwd, file);
- newXS("Win32::SetCwd", w32_SetCwd, file);
- newXS("Win32::GetTickCount", w32_GetTickCount, file);
- newXS("Win32::GetOSVersion", w32_GetOSVersion, file);
- newXS("Win32::IsWinNT", w32_IsWinNT, file);
- newXS("Win32::IsWin95", w32_IsWin95, file);
- newXS("Win32::IsWinCE", w32_IsWinCE, file);
- newXS("Win32::CopyFile", w32_CopyFile, file);
- newXS("Win32::Sleep", w32_Sleep, file);
- newXS("Win32::MessageBox", w32_MessageBox, file);
- newXS("Win32::GetPowerStatus", w32_GetPowerStatus, file);
- newXS("Win32::GetOemInfo", w32_GetOemInfo, file);
- newXS("Win32::ShellEx", w32_ShellEx, file);
-
-=head2 BUGS
-
-Opening files for read-write is currently not supported if
-they use stdio (normal perl file handles).
-
-If you find bugs or if it does not work at all on your
-device, send mail to the address below. Please report
-the details of your device (processor, ceversion,
-devicetype (hpc/palm/pocket)) and the date of the downloaded
-files.
-
-=head2 INSTALLATION
-
-Currently installation instructions are at L<http://perlce.sourceforge.net/>.
-
-After installation & testing processes will stabilize, information will
-be more precise.
-
-=head1 ACKNOWLEDGEMENTS
-
-The port for Win32 was used as a reference.
-
-=head1 History of WinCE port
-
-=over
-
-=item 5.6.0
-
-Initial port of perl to WinCE. It was performed in separate directory
-named F<wince>. This port was based on contents of F<./win32> directory.
-F<miniperl> was not built, user must have HOST perl and properly edit
-F<makefile.ce> to reflect this.
-
-=item 5.8.0
-
-wince port was kept in the same F<./wince> directory, and F<wince/Makefile.ce>
-was used to invoke native compiler to create HOST miniperl, which then
-facilitates cross-compiling process.
-Extension building support was added.
-
-=item 5.9.4
-
-Two directories F<./win32> and F<./wince> were merged, so perlce build
-process comes in F<./win32> directory.
-
-=back
-
-=head1 AUTHORS
-
-=over
-
-=item Rainer Keuchel <coyxc@rainer-keuchel.de>
-
-provided initial port of Perl, which appears to be most essential work, as
-it was a breakthrough on having Perl ported at all.
-Many thanks and obligations to Rainer!
-
-=item Vadim Konovalov
-
-made further support of WinCE port.
-
-=item Daniel Dragan
-
-updated the build process during the 5.19 development track.
-
-=back
diff --git a/gnu/usr.bin/perl/README.cygwin b/gnu/usr.bin/perl/README.cygwin
index 90fb14ba15c..5885ac5f694 100644
--- a/gnu/usr.bin/perl/README.cygwin
+++ b/gnu/usr.bin/perl/README.cygwin
@@ -27,7 +27,7 @@ platforms. They run thanks to the Cygwin library which provides the UNIX
system calls and environment these programs expect. More information
about this project can be found at:
-L<http://www.cygwin.com/>
+L<https://www.cygwin.com/>
A recent net or commercial release of Cygwin is required.
@@ -419,13 +419,13 @@ or:
as parent(0x6FB30000) != 0x6FE60000 46 [main] perl 3488 fork: child
3588 - died waiting for dll loading, errno11
-See L<http://cygwin.com/faq/faq-nochunks.html#faq.using.fixing-fork-failures>
+See L<https://cygwin.com/faq/faq-nochunks.html#faq.using.fixing-fork-failures>
It helps if not too many DLLs are loaded in memory so the available address space is larger,
e.g. stopping the MS Internet Explorer might help.
Use the perlrebase or rebase utilities to resolve the conflicting dll addresses.
The rebase package is included in the Cygwin setup. Use F<setup.exe>
-from L<http://www.cygwin.com/setup.exe> to install it.
+from L<https://cygwin.com/install.html> to install it.
1. kill all perl processes and run C<perlrebase> or
@@ -523,7 +523,7 @@ path is mounted in textmode.
=item C<Cygwin::sync_winenv>
Cygwin does not initialize all original Win32 environment variables.
-See the bottom of this page L<http://cygwin.com/cygwin-ug-net/setup-env.html>
+See the bottom of this page L<https://cygwin.com/cygwin-ug-net/setup-env.html>
for "Restricted Win32 environment".
Certain Win32 programs called from cygwin programs might need some environment
diff --git a/gnu/usr.bin/perl/README.haiku b/gnu/usr.bin/perl/README.haiku
index a7913cdd271..784eadc473d 100644
--- a/gnu/usr.bin/perl/README.haiku
+++ b/gnu/usr.bin/perl/README.haiku
@@ -22,9 +22,9 @@ The build procedure is completely standard:
Make perl executable and create a symlink for libperl:
chmod a+x /boot/common/bin/perl
- cd /boot/common/lib; ln -s perl5/5.30.3/BePC-haiku/CORE/libperl.so .
+ cd /boot/common/lib; ln -s perl5/5.32.1/BePC-haiku/CORE/libperl.so .
-Replace C<5.30.3> with your respective version of Perl.
+Replace C<5.32.1> with your respective version of Perl.
=head1 KNOWN PROBLEMS
diff --git a/gnu/usr.bin/perl/README.hurd b/gnu/usr.bin/perl/README.hurd
index 8cb05634248..6ce3c2ee06f 100644
--- a/gnu/usr.bin/perl/README.hurd
+++ b/gnu/usr.bin/perl/README.hurd
@@ -9,7 +9,7 @@ perlhurd - Perl version 5 on Hurd
=head1 DESCRIPTION
If you want to use Perl on the Hurd, I recommend using the Debian
-GNU/Hurd distribution ( see L<http://www.debian.org/> ), even if an
+GNU/Hurd distribution ( see L<https://www.debian.org/> ), even if an
official, stable release has not yet been made. The old "gnu-0.2"
binary distribution will most certainly have additional problems.
diff --git a/gnu/usr.bin/perl/README.linux b/gnu/usr.bin/perl/README.linux
index ab9e2d5f5cd..4e8fd69f5a8 100644
--- a/gnu/usr.bin/perl/README.linux
+++ b/gnu/usr.bin/perl/README.linux
@@ -11,19 +11,30 @@ perllinux - Perl version 5 on Linux systems
This document describes various features of Linux that will affect how Perl
version 5 (hereafter just Perl) is compiled and/or runs.
+=head2 Deploying Perl on Linux
+
+Normally one can install F</usr/bin/perl> on Linux using your distribution's
+package manager (e.g: C<sudo apt-get install perl>, or
+C<sudo dnf install perl>). Note that sometimes one needs to install some
+extra system packages in order to be able to use CPAN frontends, and that
+messing with the system's perl is not always recommended. One can use
+L<perlbrew|https://perlbrew.pl/> to avoid such issues.
+
+Otherwise, perl should build fine on Linux using the mainstream compilers
+GCC and clang, while following the usual instructions.
+
=head2 Experimental Support for Sun Studio Compilers for Linux OS
Sun Microsystems has released a port of their Sun Studio compilers for
-Linux. As of November 2005, only an alpha version has been released.
-Until a release of these compilers is made, support for compiling Perl with
-these compiler experimental.
+Linux. As of May 2019, the last stable release took place on 2017, and one can
+buy support contracts for them.
-Also, some special instructions for building Perl with Sun Studio on Linux.
-Following the normal C<Configure>, you have to run make as follows:
+There are some special instructions for building Perl with Sun Studio on
+Linux. Following the normal C<Configure>, you have to run make as follows:
LDLOADLIBS=-lc make
-C<LDLOADLIBS> is an environment variable used by the linker to link modules
+C<LDLOADLIBS> is an environment variable used by the linker to link
C</ext> modules to glibc. Currently, that environment variable is not getting
populated by a combination of C<Config> entries and C<ExtUtil::MakeMaker>.
While there may be a bug somewhere in Perl's configuration or
diff --git a/gnu/usr.bin/perl/README.macosx b/gnu/usr.bin/perl/README.macosx
index 242c4975cca..3ebfc6df16d 100644
--- a/gnu/usr.bin/perl/README.macosx
+++ b/gnu/usr.bin/perl/README.macosx
@@ -10,9 +10,9 @@ perlmacosx - Perl under Mac OS X
This document briefly describes Perl under Mac OS X.
- curl -O http://www.cpan.org/src/perl-5.30.3.tar.gz
- tar -xzf perl-5.30.3.tar.gz
- cd perl-5.30.3
+ curl -O https://www.cpan.org/src/perl-5.32.1.tar.gz
+ tar -xzf perl-5.32.1.tar.gz
+ cd perl-5.32.1
./Configure -des -Dprefix=/usr/local/
make
make test
@@ -20,7 +20,7 @@ This document briefly describes Perl under Mac OS X.
=head1 DESCRIPTION
-The latest Perl release (5.30.3 as of this writing) builds without changes
+The latest Perl release (5.32.1 as of this writing) builds without changes
under all versions of Mac OS X from 10.3 "Panther" onwards.
In order to build your own version of Perl you will need 'make',
@@ -141,8 +141,8 @@ modules (C<Mac::*>), as the required Apple frameworks do not provide PPC64
support. Similarly, downloads from Fink or Darwinports are unlikely to provide
64-bit support; the libraries must be rebuilt from source with the appropriate
compiler and linker flags. For further information, see Apple's
-I<64-Bit Transition Guide> at
-L<http://developer.apple.com/documentation/Darwin/Conceptual/64bitPorting/index.html>.
+I<64-Bit Transition Guide> at
+L<https://developer.apple.com/library/archive/documentation/Darwin/Conceptual/64bitPorting/transition/transition.html>.
=head2 libperl and Prebinding
@@ -223,7 +223,7 @@ access Foundation (i.e. non-GUI) classes and objects.
An alternative is CamelBones, a framework that allows access to both
Foundation and AppKit classes and objects, so that full GUI applications
can be built in Perl. CamelBones can be found on SourceForge, at
-L<http://www.sourceforge.net/projects/camelbones/>.
+L<https://www.sourceforge.net/projects/camelbones/>.
=head1 Starting From Scratch
@@ -258,7 +258,7 @@ or rebuild Perl from the source code with C<Configure -Dprefix=/usr
works much better with Perl 5.8.1 and later, in Perl 5.8.0 the
settings were not quite right.
-"Pacifist" from CharlesSoft (L<http://www.charlessoft.com/>) is a nice
+"Pacifist" from CharlesSoft (L<https://www.charlessoft.com/>) is a nice
way to extract the Perl binaries from the OS media, without having to
reinstall the entire OS.
diff --git a/gnu/usr.bin/perl/README.os2 b/gnu/usr.bin/perl/README.os2
index d43c6e3c4c6..1c7cd661ddc 100644
--- a/gnu/usr.bin/perl/README.os2
+++ b/gnu/usr.bin/perl/README.os2
@@ -300,7 +300,7 @@ with
perl ../../blah/foo.cmd arg1 arg2 arg3
(note that the argument C<-my_opts> is taken care of by the C<extproc> line
-in your script, see L<C<extproc> on the first line>).
+in your script, see L</C<extproc> on the first line>).
To understand what the above I<magic> does, read perl docs about C<-S>
switch - see L<perlrun>, and cmdref about C<extproc>:
@@ -436,7 +436,7 @@ managed to goof. C<;-)>
=item *
Did you run your programs with C<-w> switch? See
-L<Starting OSE<sol>2 (and DOS) programs under Perl>.
+L</Starting OSE<sol>2 (and DOS) programs under Perl>.
=item *
@@ -619,7 +619,7 @@ C<set PERLLIB_PREFIX> in F<Config.sys>, see L</"C<PERLLIB_PREFIX>">.
=item Additional Perl modules
- unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.30.3/
+ unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.32.1/
Same remark as above applies. Additionally, if this directory is not
one of directories on @INC (and @INC is influenced by C<PERLLIB_PREFIX>), you
@@ -1225,7 +1225,7 @@ necessary external C libraries from F<.lib> format to F<.a> format: run one of
emximp -o foo.a foo.lib
whichever is appropriate.) Also, make sure that the DLLs for external
-libraries are usable with with executables compiled without C<-Zmtd> options.
+libraries are usable with executables compiled without C<-Zmtd> options.
When you are sure that only a few subdirectories
lead to failures, you may want to add C<-j4> option to C<make> to speed up
@@ -2666,8 +2666,8 @@ I will include it into distribution. I have no need for such a module, so
cannot test it.
For the details of the current situation with calling external programs,
-see L<Starting OSE<sol>2 (and DOS) programs under Perl>. Set us mention a couple
-of features:
+see L</Starting OSE<sol>2 (and DOS) programs under Perl>. Set us
+mention a couple of features:
=over 4
diff --git a/gnu/usr.bin/perl/README.os390 b/gnu/usr.bin/perl/README.os390
index 4de4e900384..a06e93f9564 100644
--- a/gnu/usr.bin/perl/README.os390
+++ b/gnu/usr.bin/perl/README.os390
@@ -1,5 +1,5 @@
This document is written in pod format hence there are punctuation
-characters in odd places. Do not worry, you've apparently got the
+characters in odd places. Do not worry, you have apparently got the
ASCII->EBCDIC translation worked out correctly. You can read more
about pod in pod/perlpod.pod or the short summary in the INSTALL file.
@@ -19,7 +19,7 @@ Please submit comments to L<https://github.com/Perl/perl5/issues>.>
This is a fully ported Perl for OS/390 Version 2 Release 3, 5, 6, 7,
8, and 9. It may work on other versions or releases, but those are
-the ones we've tested it on.
+the ones we have tested it on.
You may need to carry out some system configuration tasks before
running the Configure script for Perl.
@@ -52,7 +52,7 @@ If you get lots of errors of the form
tar: FSUM7171 ...: cannot set uid/gid: EDC5139I Operation not permitted
-you didn't read the above and tried to use tar instead of pax, you'll
+you did not read the above and tried to use tar instead of pax, you'll
first have to remove the (now corrupt) perl directory
rm -rf perl-...
@@ -114,24 +114,21 @@ world readable /tmp directory if you have not already done so (see man chmod).
=head2 Configure Perl on OS/390
-Once you've unpacked the distribution, run "sh Configure" (see INSTALL
+Once you have unpacked the distribution, run "sh Configure" (see INSTALL
for a full discussion of the Configure options). There is a "hints" file
for os390 that specifies the correct values for most things. Some things
to watch out for include:
-=over 4
-
-=item *
+=head3 Shell
A message of the form:
- (I see you are using the Korn shell. Some ksh's blow up on
- Configure, mainly on older exotic systems. If yours does, try the
- Bourne shell instead.)
+ (I see you are using the Korn shell. Some ksh's blow up on Configure,
+ mainly on older exotic systems. If yours does, try the Bourne shell instead.)
is nothing to worry about at all.
-=item *
+=head3 Samples
Some of the parser default template files in /samples are needed in /etc.
In particular be sure that you at least copy /samples/yyparse.c to /etc
@@ -143,7 +140,12 @@ misconfigured build root and re-extract the source from the tar ball.
Then you must ensure that /etc/yyparse.c is properly in place before
attempting to re-run Configure.
-=item *
+=head3 Dynamic loading
+
+Dynamic loading is required if you want to use XS modules from CPAN (like
+DBI (and DBD's), JSON::XS, and Text::CSV_XS) or update CORE modules from
+CPAN with newer versions (like Encode) without rebuilding all of the perl
+binary.
This port will support dynamic loading, but it is not selected by
default. If you would like to experiment with dynamic loading then
@@ -162,13 +164,24 @@ then your LIBPATH does not have the location of libperl.x and either
libperl.dll or libperl.so in it. Add that directory to your LIBPATH and
proceed.
-=item *
+In hints/os390.sh, selecting -Dusedl will default to *also* select
+-Duseshrplib. Having a shared plib not only requires LIBPATH to be set to
+the correct location of libperl.so but also makes it close to impossible
+to run more than one different perl that was built this way at the same
+time.
+
+All objects that are involved in -Dusedl builds should be compiled for
+this, probably by adding to all ccflags
+
+ -qexportall -qxplink -qdll -Wc,XPLINK,dll,EXPORTALL -Wl,XPLINK,dll
+
+=head3 Optimizing
Do not turn on the compiler optimization flag "-O". There is
a bug in either the optimizer or perl that causes perl to
not work correctly when the optimizer is on.
-=item *
+=head3 Config files
Some of the configuration files in /etc used by the
networking APIs are either missing or have the wrong
@@ -181,8 +194,6 @@ You may have to look for things like HOSTNAME and DOMAINORIGIN
in the "//'SYS1.TCPPARMS(TCPDATA)'" PDS member in order to
properly set up your /etc networking files.
-=back
-
=head2 Build, Test, Install Perl on OS/390
Simply put:
@@ -204,6 +215,9 @@ or not you have write access to the directories you specified.
"Out of memory!" messages during the build of Perl are most often fixed
by re building the GNU make utility for OS/390 from a source code kit.
+Building debugging-enabled binaries (with -g or -g3) will increase the
+chance of getting these errors. Prevent -g if possible.
+
Another memory limiting item to check is your MAXASSIZE parameter in your
'SYS1.PARMLIB(BPXPRMxx)' data set (note too that as of V2R8 address space
limits can be set on a per user ID basis in the USS segment of a RACF
@@ -230,9 +244,7 @@ installation. You might encounter STDERR messages even during a successful
run of "make test". Here is a guide to some of the more commonly seen
anomalies:
-=over 4
-
-=item *
+=head3 Signals
A message of the form:
@@ -244,7 +256,7 @@ A message of the form:
indicates that the t/io/openpid.t test of Perl has passed but done so
with extraneous messages on stderr from CEE.
-=item *
+=head3 File::Temp
A message of the form:
@@ -258,13 +270,11 @@ A message of the form:
indicates a problem with the permissions on your /tmp directory within the HFS.
To correct that problem issue the command:
- chmod a+t /tmp
+ chmod a+t /tmp
from an account with write access to the directory entry for /tmp.
-=item *
-
-Out of Memory!
+=head3 Out of Memory!
Recent perl test suite is quite memory hungry. In addition to the comments
above on memory limitations it is also worth checking for _CEE_RUNOPTS
@@ -290,9 +300,6 @@ case something like:
is needed to get through the test suite.
-
-=back
-
=head2 Installation Anomalies with Perl on OS/390
The installman script will try to run on OS/390. There will be fewer errors
@@ -357,7 +364,7 @@ The problem can be further examined in a roughly equivalent C program:
=head2 Modules and Extensions for Perl on OS/390
-Pure pure (that is non xs) modules may be installed via the usual:
+Pure Perl (that is non XS) modules may be installed via the usual:
perl Makefile.PL
make
@@ -365,11 +372,11 @@ Pure pure (that is non xs) modules may be installed via the usual:
make install
If you built perl with dynamic loading capability then that would also
-be the way to build xs based extensions. However, if you built perl with
-the default static linking you can still build xs based extensions for OS/390
+be the way to build XS based extensions. However, if you built perl with
+the default static linking you can still build XS based extensions for OS/390
but you will need to follow the instructions in ExtUtils::MakeMaker for
building statically linked perl binaries. In the simplest configurations
-building a static perl + xs extension boils down to:
+building a static perl + XS extension boils down to:
perl Makefile.PL
make
@@ -380,7 +387,7 @@ building a static perl + xs extension boils down to:
In most cases people have reported better results with GNU make rather
than the system's /bin/make program, whether for plain modules or for
-xs based extensions.
+XS based extensions.
If the make process encounters trouble with either compilation or
linking then try setting the _C89_CCMODE to 1. Assuming sh is your
@@ -422,12 +429,11 @@ To subscribe, send an empty message to perl-mvs-subscribe@perl.org.
See also:
- http://lists.perl.org/list/perl-mvs.html
+ https://lists.perl.org/list/perl-mvs.html
There are web archives of the mailing list at:
- http://www.xray.mpe.mpg.de/mailing-lists/perl-mvs/
- http://archive.develooper.com/perl-mvs@perl.org/
+ https://www.nntp.perl.org/group/perl.mvs/
=head1 HISTORY
@@ -436,15 +442,17 @@ release of Perl.
This document was podified for the 5.005_03 release of Perl 11 March 1999.
-Updated 28 November 2001 for broken URLs.
-
Updated 12 November 2000 for the 5.7.1 release of Perl.
-Updated 15 January 2001 for the 5.7.1 release of Perl.
+Updated 15 January 2001 for the 5.7.1 release of Perl.
+
+Updated 24 January 2001 to mention dynamic loading.
-Updated 24 January 2001 to mention dynamic loading.
+Updated 12 March 2001 to mention //'SYS1.TCPPARMS(TCPDATA)'.
+
+Updated 28 November 2001 for broken URLs.
-Updated 12 March 2001 to mention //'SYS1.TCPPARMS(TCPDATA)'.
+Updated 03 October 2019 for perl-5.32.0+
=cut
diff --git a/gnu/usr.bin/perl/README.synology b/gnu/usr.bin/perl/README.synology
index b1b9d8811c0..1fde18cca01 100644
--- a/gnu/usr.bin/perl/README.synology
+++ b/gnu/usr.bin/perl/README.synology
@@ -18,7 +18,7 @@ which is a trimmed-down Linux system enhanced with several tools for
managing the NAS. There are several flavours of hardware: Marvell
Armada (ARMv5tel, ARMv7l), Intel Atom (i686, x86_64), Freescale QorIQ
(PPC), and more. For a full list see the
-L<Synology FAQ|http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have>.
+L<Synology FAQ|https://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have>.
Since it is based on Linux, the NAS can run many popular Linux
software packages, including Perl. In fact, Synology provides a
@@ -42,7 +42,7 @@ H.Merijn Brand (DS213, ARMv5tel and RS815, Intel Atom x64).
As DSM is a trimmed-down Linux system, it lacks many of the tools and
libraries commonly found on Linux. The basic tools like sh, cp, rm,
etc. are implemented using
-L<BusyBox|http://en.wikipedia.org/wiki/BusyBox>.
+L<BusyBox|https://en.wikipedia.org/wiki/BusyBox>.
=over 4
@@ -59,7 +59,7 @@ If you want to smoke test Perl, install C<Perl>.
In Settings, add the following Package Sources:
- http://www.cphub.net
+ https://www.cphub.net
http://packages.quadrat4.de
=item *
@@ -139,7 +139,7 @@ L<Install Entware-ng on Synology NAS|https://github.com/Entware-ng/Entware-ng/wi
That sadly does not (yet) work on QorIQ. At the moment of writing, the
supported architectures are armv5, armv7, mipsel, wl500g, x86_32, and x86_64.
-Check L<here|http://pkg.entware.net/binaries/> for supported platforms.
+Check L<here|https://pkg.entware.net/binaries/> for supported platforms.
Entware-ng comes with a precompiled 5.24.1 (June 2017) that allowes
building shared XS code. Note that this installation does B<not> use
diff --git a/gnu/usr.bin/perl/README.vms b/gnu/usr.bin/perl/README.vms
index 039638b0af3..90136b1d1f3 100644
--- a/gnu/usr.bin/perl/README.vms
+++ b/gnu/usr.bin/perl/README.vms
@@ -142,11 +142,11 @@ You may need to set up a foreign symbol for the unpacking utility of
choice. Once you have done so, use a command like the following to
unpack the archive:
- vmstar -xvf perl-5^.30^.3.tar
+ vmstar -xvf perl-5^.32^.1.tar
Then set default to the top-level source directory like so:
- set default [.perl-5^.30^.3]
+ set default [.perl-5^.32^.1]
and proceed with configuration as described in the next section.
@@ -540,10 +540,10 @@ messages a week) mailing list.
To subscribe, send a mail message to VMSPERL-SUBSCRIBE@PERL.ORG. The VMSPERL
mailing list address is VMSPERL@PERL.ORG. Any mail sent there gets echoed
-to all subscribers of the list. There is a searchable archive of the list
+to all subscribers of the list. There is an archive of the list
on the web at:
- L<http://www.xray.mpe.mpg.de/mailing-lists/vmsperl/>
+ L<https://www.nntp.perl.org/group/perl.vmsperl/>
To unsubscribe from VMSPERL send a message to VMSPERL-UNSUBSCRIBE@PERL.ORG.
Be sure to do so from the subscribed account that you are canceling.
@@ -553,9 +553,8 @@ Be sure to do so from the subscribed account that you are canceling.
Vmsperl pages on the web include:
L<http://www.sidhe.org/vmsperl/index.html>
- L<http://www.cpan.org/modules/by-module/VMS/>
- L<http://www.xray.mpe.mpg.de/mailing-lists/vmsperl/>
- L<http://archive.develooper.com/vmsperl@perl.org/>
+ L<https://www.cpan.org/modules/by-module/VMS/>
+ L<https://www.nntp.perl.org/group/perl.vmsperl/>
L<http://h71000.www7.hp.com/openvms/products/ips/apache/csws_modperl.html>
=head1 SEE ALSO
diff --git a/gnu/usr.bin/perl/README.win32 b/gnu/usr.bin/perl/README.win32
index faac3fe73ea..cc3b6b868ca 100644
--- a/gnu/usr.bin/perl/README.win32
+++ b/gnu/usr.bin/perl/README.win32
@@ -74,7 +74,7 @@ This port can also be built on IA64/AMD64 using:
Microsoft Platform SDK Nov 2001 (64-bit compiler and tools)
MinGW64 compiler (gcc version 4.4.3 or later)
-The Windows SDK can be downloaded from L<http://www.microsoft.com/>.
+The Windows SDK can be downloaded from L<https://developer.microsoft.com/windows/downloads/sdk-archive>.
The MinGW64 compiler is available at L<http://mingw-w64.org>.
The latter is actually a cross-compiler targeting Win64. There's also a trimmed
down compiler (no java, or gfortran) suitable for building perl available at:
@@ -125,15 +125,16 @@ build usually works in this circumstance, but some tests will fail.
=item Microsoft Visual C++
-The nmake that comes with Visual C++ will suffice for building. Visual C
-requires that certain things be set up in the console before Visual C will
+The nmake that comes with Visual C++ will suffice for building. Visual C++
+requires that certain things be set up in the console before Visual C++ will
sucessfully run. To make a console box be able to run the C compiler, you will
-need to beforehand, run the C<vcvars32.bat> file to compile for x86-32 and for
-x86-64 C<vcvarsall.bat x64> or C<vcvarsamd64.bat>. On a typical install of a
-Microsoft C compiler product, these batch files will already be in your C<PATH>
+need to beforehand, run C<vcvarsall.bat x86> to compile for x86-32 and for
+x86-64 C<vcvarsall.bat amd64>. On a typical install of a Microsoft C++
+compiler product, these batch files will already be in your C<PATH>
environment variable so you may just type them without an absolute path into
your console. If you need to find the absolute path to the batch file, it is
-usually found somewhere like C:\Program Files\Microsoft Visual Studio\VC98\Bin.
+usually found somewhere like
+C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC.
With some newer Micrsoft C products (released after ~2004), the installer will
put a shortcut in the start menu to launch a new console window with the
console already set up for your target architecture (x86-32 or x86-64 or IA64).
@@ -148,7 +149,7 @@ everything necessary to build Perl, rather than requiring a separate download
of the Windows SDK like previous versions did.
These packages can be downloaded by searching in the Download Center at
-L<http://www.microsoft.com/downloads/search.aspx?displaylang=en>. (Providing exact
+L<https://www.microsoft.com/downloads/search.aspx?displaylang=en>. (Providing exact
links to these packages has proven a pointless task because the links keep on
changing so often.)
@@ -220,7 +221,7 @@ Framework Redistributable" to be installed first. This can be downloaded and
installed separately, but is included in the "Visual C++ Toolkit 2003" anyway.
These packages can all be downloaded by searching in the Download Center at
-L<http://www.microsoft.com/downloads/search.aspx?displaylang=en>. (Providing exact
+L<https://www.microsoft.com/downloads/search.aspx?displaylang=en>. (Providing exact
links to these packages has proven a pointless task because the links keep on
changing so often.)
@@ -388,16 +389,9 @@ The default value for CCHOME in the makefiles for Visual C++
may not be correct for some versions. Make sure the default exists
and is valid.
-You may also need to comment out the C<DELAYLOAD = ...> line in the
-Makefile if you're using VC++ 6.0 without the latest service pack and
-the linker reports an internal error.
-
If you want build some core extensions statically into perl's dll, specify
them in the STATIC_EXT macro.
-NOTE: The USE_64_BIT_INT build option is not supported with the 32-bit
-Visual C++ 6.0 compiler.
-
Be sure to read the instructions near the top of the makefiles carefully.
=item *
@@ -405,7 +399,7 @@ Be sure to read the instructions near the top of the makefiles carefully.
Type "dmake" ("gmake" for GNU make, or "nmake" if you are using that make).
This should build everything. Specifically, it will create perl.exe,
-perl530.dll at the perl toplevel, and various other extension dll's
+perl532.dll at the perl toplevel, and various other extension dll's
under the lib\auto directory. If the build fails for any reason, make
sure you have done the previous steps correctly.
@@ -449,7 +443,7 @@ in the May 2019 Update, as explained here: L<https://developercommunity.visualst
If you build with certain versions (e.g. 4.8.1) of gcc from www.mingw.org then
F<ext/POSIX/t/time.t> may fail test 17 due to a known bug in those gcc builds:
-see L<http://sourceforge.net/p/mingw/bugs/2152/>.
+see L<https://sourceforge.net/p/mingw/bugs/2152/>.
Some test failures may occur if you use a command shell other than the
native "cmd.exe", or if you are building from a path that contains
@@ -566,9 +560,9 @@ character is the double quote ("). It can be used to protect spaces
and other special characters in arguments.
The Windows documentation describes the shell parsing rules here:
-L<http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true>
+L<https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/cmd>
and the C runtime parsing rules here:
-L<http://msdn.microsoft.com/en-us/library/17w5ykft%28v=VS.100%29.aspx>.
+L<https://msdn.microsoft.com/en-us/library/17w5ykft%28v=VS.100%29.aspx>.
Here are some further observations based on experiments: The C runtime
breaks arguments at spaces and passes them to programs in argc/argv.
@@ -637,11 +631,11 @@ quoted.
The Comprehensive Perl Archive Network (CPAN) offers a wealth
of extensions, some of which require a C compiler to build.
-Look in L<http://www.cpan.org/> for more information on CPAN.
+Look in L<https://www.cpan.org/> for more information on CPAN.
Note that not all of the extensions available from CPAN may work
in the Windows environment; you should check the information at
-L<http://www.cpantesters.org/> before investing too much effort into
+L<https://www.cpantesters.org/> before investing too much effort into
porting modules that don't readily build.
Most extensions (whether they require a C compiler or not) can
@@ -667,7 +661,7 @@ L<http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/nmake15.exe>
Another option is to use the make written in Perl, available from
CPAN.
-L<http://www.cpan.org/modules/by-module/Make/>
+L<https://www.cpan.org/modules/by-module/Make/>
You may also use dmake or gmake. See L</"Make"> above on how to get it.
@@ -888,7 +882,7 @@ L<https://github.com/Perl/perl5/issues>.
Norton AntiVirus interferes with the build process, particularly if
set to "AutoProtect, All Files, when Opened". Unlike large applications
the perl build process opens and modifies a lot of files. Having the
-the AntiVirus scan each and every one slows build the process significantly.
+AntiVirus scan each and every one slows build the process significantly.
Worse, with PERLIO=stdio the build process fails with peculiar messages
as the virus checker interacts badly with miniperl.exe writing configure
files (it seems to either catch file part written and treat it as suspicious,
@@ -928,8 +922,8 @@ Thus, signals may work only for simple things like setting a flag
variable in the handler. Using signals under this port should
currently be considered unsupported.
-Please send detailed descriptions of any problems and solutions that
-you may find to E<lt>L<https://github.com/Perl/perl5/issues>E<gt>,
+Please report detailed descriptions of any problems and solutions that
+you may find at E<lt>L<https://github.com/Perl/perl5/issues>E<gt>,
along with the output produced by C<perl -V>.
=head1 ACKNOWLEDGEMENTS
diff --git a/gnu/usr.bin/perl/TestInit.pm b/gnu/usr.bin/perl/TestInit.pm
index bab5aea5123..7f53664e279 100644
--- a/gnu/usr.bin/perl/TestInit.pm
+++ b/gnu/usr.bin/perl/TestInit.pm
@@ -43,7 +43,8 @@ $VERSION = 1.04;
# which live dual lives on CPAN.
# Don't interfere with the taintedness of %ENV, this could perturbate tests.
# This feels like a better solution than the original, from
-# http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2003-07/msg00154.html
+# Message-ID: 20030703145818.5bdd2873.rgarciasuarez@free.fr
+# https://www.nntp.perl.org/group/perl.perl5.porters/2003/07/msg77533.html
$ENV{PERL_CORE} = $^X;
$0 =~ s/\.dp$//; # for the test.deparse make target
diff --git a/gnu/usr.bin/perl/XSUB.h b/gnu/usr.bin/perl/XSUB.h
index 796a13aae3d..94e9dade6af 100644
--- a/gnu/usr.bin/perl/XSUB.h
+++ b/gnu/usr.bin/perl/XSUB.h
@@ -47,7 +47,7 @@ XSUB's aliases was used to invoke it. See L<perlxs/"The ALIAS: Keyword">.
=for apidoc Am|SV*|ST|int ix
Used to access elements on the XSUB's stack.
-=for apidoc AmU||XS
+=for apidoc AmnU||XS
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.
@@ -56,36 +56,36 @@ 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 AmU||XS_EXTERNAL
+=for apidoc AmnU||XS_EXTERNAL
Macro to declare an XSUB and its C parameter list explicitly exporting the symbols.
-=for apidoc Ams||dAX
+=for apidoc Amns||dAX
Sets up the C<ax> variable.
This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
-=for apidoc Ams||dAXMARK
+=for apidoc Amns||dAXMARK
Sets up the C<ax> variable and stack marker variable C<mark>.
This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
-=for apidoc Ams||dITEMS
+=for apidoc Amns||dITEMS
Sets up the C<items> variable.
This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
-=for apidoc Ams||dXSARGS
+=for apidoc Amns||dXSARGS
Sets up stack and mark pointers for an XSUB, calling C<dSP> and C<dMARK>.
Sets up the C<ax> and C<items> variables by calling C<dAX> and C<dITEMS>.
This is usually handled automatically by C<xsubpp>.
-=for apidoc Ams||dXSI32
+=for apidoc Amns||dXSI32
Sets up the C<ix> variable for an XSUB which has aliases. This is usually
handled automatically by C<xsubpp>.
-=for apidoc Ams||dUNDERBAR
+=for apidoc Amns||dUNDERBAR
Sets up any variable needed by the C<UNDERBAR> macro. It used to define
C<padoff_du>, but it is currently a noop. However, it is strongly advised
to still use it for ensuring past and future compatibility.
-=for apidoc AmU||UNDERBAR
+=for apidoc AmnU||UNDERBAR
The SV* corresponding to the C<$_> variable. Works even if there
is a lexical C<$_> in scope.
@@ -217,6 +217,10 @@ is stored in a new mortal SV.
Place a copy of a string into the specified position C<pos> on the stack.
The value is stored in a new mortal SV.
+=for apidoc Am|void|XST_mUV|int pos|UV uv
+Place an unsigned integer into the specified position C<pos> on the stack. The
+value is stored in a new mortal SV.
+
=for apidoc Am|void|XST_mNO|int pos
Place C<&PL_sv_no> into the specified position C<pos> on the
stack.
@@ -245,16 +249,16 @@ Return a double from an XSUB immediately. Uses C<XST_mNV>.
=for apidoc Am|void|XSRETURN_PV|char* str
Return a copy of a string from an XSUB immediately. Uses C<XST_mPV>.
-=for apidoc Ams||XSRETURN_NO
+=for apidoc Amns||XSRETURN_NO
Return C<&PL_sv_no> from an XSUB immediately. Uses C<XST_mNO>.
-=for apidoc Ams||XSRETURN_YES
+=for apidoc Amns||XSRETURN_YES
Return C<&PL_sv_yes> from an XSUB immediately. Uses C<XST_mYES>.
-=for apidoc Ams||XSRETURN_UNDEF
+=for apidoc Amns||XSRETURN_UNDEF
Return C<&PL_sv_undef> from an XSUB immediately. Uses C<XST_mUNDEF>.
-=for apidoc Ams||XSRETURN_EMPTY
+=for apidoc Amns||XSRETURN_EMPTY
Return an empty list from an XSUB immediately.
=head1 Variables created by C<xsubpp> and C<xsubpp> internal functions
@@ -263,36 +267,36 @@ Return an empty list from an XSUB immediately.
Used by C<xsubpp> to hook up XSUBs as Perl subs. Adds Perl prototypes to
the subs.
-=for apidoc AmU||XS_VERSION
+=for apidoc AmnU||XS_VERSION
The version identifier for an XS module. This is usually
handled automatically by C<ExtUtils::MakeMaker>. See
C<L</XS_VERSION_BOOTCHECK>>.
-=for apidoc Ams||XS_VERSION_BOOTCHECK
+=for apidoc Amns||XS_VERSION_BOOTCHECK
Macro to verify that a PM module's C<$VERSION> variable matches the XS
module's C<XS_VERSION> variable. This is usually handled automatically by
C<xsubpp>. See L<perlxs/"The VERSIONCHECK: Keyword">.
-=for apidoc Ams||XS_APIVERSION_BOOTCHECK
+=for apidoc Amns||XS_APIVERSION_BOOTCHECK
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 Ams||dXCPT
+=for apidoc Amns||dXCPT
Set up necessary local variables for exception handling.
See L<perlguts/"Exception Handling">.
-=for apidoc AmU||XCPT_TRY_START
+=for apidoc AmnU||XCPT_TRY_START
Starts a try block. See L<perlguts/"Exception Handling">.
-=for apidoc AmU||XCPT_TRY_END
+=for apidoc AmnU||XCPT_TRY_END
Ends a try block. See L<perlguts/"Exception Handling">.
-=for apidoc AmU||XCPT_CATCH
+=for apidoc AmnU||XCPT_CATCH
Introduces a catch block. See L<perlguts/"Exception Handling">.
-=for apidoc Ams||XCPT_RETHROW
+=for apidoc Amns||XCPT_RETHROW
Rethrows a previously caught exception. See L<perlguts/"Exception Handling">.
=cut
diff --git a/gnu/usr.bin/perl/amigaos4/amigaio.c b/gnu/usr.bin/perl/amigaos4/amigaio.c
index edc237a033c..58964f955b5 100644
--- a/gnu/usr.bin/perl/amigaos4/amigaio.c
+++ b/gnu/usr.bin/perl/amigaos4/amigaio.c
@@ -682,7 +682,7 @@ static I32 S_do_amigaos_exec3(pTHX_ const char *incmd, int fd, int do_report)
for (s = cmd; *s; s++)
{
if (*s != ' ' && !isALPHA(*s) &&
- strchr("$&*(){}[]'\";\\|?<>~`\n", *s))
+ memCHRs("$&*(){}[]'\";\\|?<>~`\n", *s))
{
if (*s == '\n' && !s[1])
{
diff --git a/gnu/usr.bin/perl/autodoc.pl b/gnu/usr.bin/perl/autodoc.pl
index 788dc359fdf..8bf557e64ab 100644
--- a/gnu/usr.bin/perl/autodoc.pl
+++ b/gnu/usr.bin/perl/autodoc.pl
@@ -22,6 +22,9 @@
# indented. The next input line that is a pod directive terminates this
# heading-level documentation.
+# The meanings of the flags fields in embed.fnc and the source code is
+# documented at the top of embed.fnc.
+
use strict;
if (@ARGV) {
@@ -32,6 +35,29 @@ if (@ARGV) {
require './regen/regen_lib.pl';
require './regen/embed_lib.pl';
+my @specialized_docs = sort qw( perlguts
+ perlxs
+ perlxstut
+ perlclib
+ warnings
+ perlapio
+ perlcall
+ perlfilter
+ perlmroapi
+ config.h
+ );
+sub name_in_pod($) {
+ my $name = shift;
+ return "F<$name>" if $name =~ /\./;
+ return "L<$name>";
+}
+my $other_places_api = join " ", map { name_in_pod($_) } sort @specialized_docs, 'perlintern';
+my $other_places_intern = join " ", map { name_in_pod($_) } sort @specialized_docs, 'perlapi';
+
+@specialized_docs = map { name_in_pod($_) } sort @specialized_docs;
+$specialized_docs[-1] =~ s/^/and /;
+my $specialized_docs = join ", ", @specialized_docs;
+
#
# See database of global and static function prototypes in embed.fnc
# This is used to generate prototype headers under various configurations,
@@ -40,13 +66,8 @@ require './regen/embed_lib.pl';
#
my %docs;
+my %seen;
my %funcflags;
-my %macro = (
- ax => 1,
- items => 1,
- ix => 1,
- svtype => 1,
- );
my %missing;
my $curheader = "Unknown section";
@@ -60,17 +81,12 @@ sub autodoc ($$) { # parse a file and extract documentation info
FUNC:
while (defined($in = $get_next_line->())) {
- if ($in =~ /^#\s*define\s+([A-Za-z_][A-Za-z_0-9]+)\(/ &&
- ($file ne 'embed.h' || $file ne 'proto.h')) {
- $macro{$1} = $file;
- next FUNC;
- }
if ($in=~ /^=head1 (.*)/) {
$curheader = $1;
# If the next non-space line begins with a word char, then it is
- # the start of heading-ldevel documentation.
- if (defined($doc = $get_next_line->())) {
+ # the start of heading-level documentation.
+ if (defined($doc = $get_next_line->())) {
# Skip over empty lines
while ($doc =~ /^\s+$/) {
if (! defined($doc = $get_next_line->())) {
@@ -103,88 +119,112 @@ HDR_DOC:
}
next FUNC;
}
- if ($in =~ /^=for\s+apidoc\s+(.*?)\s*\n/) {
- my $proto = $1;
- $proto = "||$proto" unless $proto =~ /\|/;
- my($flags, $ret, $name, @args) = split /\|/, $proto;
- my $docs = "";
+
+ # Parentheses are used to accept anything that looks like 'for
+ # apidoc', and later verify that things are the actual correct syntax.
+ my $apidoc_re = qr/^(\s*)(=?)(\s*)for(\s*)apidoc(\s*)(.*?)\s*\n/;
+
+ if ($in =~ /^=for comment/) {
+ $in = $get_next_line->();
+ if ($in =~ /skip apidoc/) { # Skips the next apidoc-like line
+ while (defined($in = $get_next_line->())) {
+ last if $in =~ $apidoc_re;
+ }
+ }
+ next FUNC;
+ }
+
+ if ($in =~ $apidoc_re) {
+ my $is_in_proper_form = length $1 == 0
+ && length $2 > 0
+ && length $3 == 0
+ && length $4 > 0
+ && length $5 > 0
+ && length $6 > 0;
+ my $proto_in_file = $6;
+ my $proto = $proto_in_file;
+ $proto = "||$proto" unless $proto =~ /\|/;
+ my($flags, $ret, $name, @args) = split /\s*\|\s*/, $proto;
+ $name && $is_in_proper_form or die <<EOS;
+Bad apidoc at $file line $.:
+ $in
+Expected:
+ =for apidoc flags|returntype|name|arg|arg|...
+ =for apidoc flags|returntype|name
+ =for apidoc name
+EOS
+ die "flag $1 is not legal (for function $name (from $file))"
+ if $flags =~ / ( [^AabCDdEefhiMmNnTOoPpRrSsUuWXx] ) /x;
+ next FUNC if $flags =~ /h/;
+
+ die "'u' flag must also have 'm' flag' for $name" if $flags =~ /u/ && $flags !~ /m/;
+ warn ("'$name' not \\w+ in '$proto_in_file' in $file")
+ if $flags !~ /N/ && $name !~ / ^ [_[:alpha:]] \w* $ /x;
+
+ if (exists $seen{$name}) {
+ die ("'$name' in $file was already documented in $seen{$name}");
+ }
+ else {
+ $seen{$name} = $file;
+ }
+
+ my $docs = "";
DOC:
- while (defined($doc = $get_next_line->())) {
+ while (defined($doc = $get_next_line->())) {
# Other pod commands are considered part of the current
# function's docs, so can have lists, etc.
last DOC if $doc =~ /^=(cut|for\s+apidoc|head)/;
- if ($doc =~ m:^\*/$:) {
- warn "=cut missing? $file:$line:$doc";;
- last DOC;
+ if ($doc =~ m:^\*/$:) {
+ warn "=cut missing? $file:$line:$doc";;
+ last DOC;
}
- $docs .= $doc;
- }
- $docs = "\n$docs" if $docs and $docs !~ /^\n/;
-
- # Check the consistency of the flags
- my ($embed_where, $inline_where);
- my ($embed_may_change, $inline_may_change);
-
- my $docref = delete $funcflags{$name};
- if ($docref and %$docref) {
- $embed_where = $docref->{flags} =~ /A/ ? 'api' : 'guts';
- $embed_may_change = $docref->{flags} =~ /M/;
- $flags .= 'D' if $docref->{flags} =~ /D/;
- } else {
- $missing{$name} = $file;
- }
- if ($flags =~ /m/) {
- $inline_where = $flags =~ /A/ ? 'api' : 'guts';
- $inline_may_change = $flags =~ /x/;
-
- if (defined $embed_where && $inline_where ne $embed_where) {
- warn "Function '$name' inconsistency: embed.fnc says $embed_where, Pod says $inline_where";
- }
-
- if (defined $embed_may_change
- && $inline_may_change ne $embed_may_change) {
- my $message = "Function '$name' inconsistency: ";
- if ($embed_may_change) {
- $message .= "embed.fnc says 'may change', Pod does not";
- } else {
- $message .= "Pod says 'may change', embed.fnc does not";
- }
- warn $message;
- }
- } elsif (!defined $embed_where) {
- warn "Unable to place $name!\n";
- next;
- } else {
- $inline_where = $embed_where;
- $flags .= 'x' if $embed_may_change;
- @args = @{$docref->{args}};
- $ret = $docref->{retval};
- }
-
- if (exists $docs{$inline_where}{$curheader}{$name}) {
+ $docs .= $doc;
+ }
+ $docs = "\n$docs" if $docs and $docs !~ /^\n/;
+
+ # If the entry is also in embed.fnc, it should be defined
+ # completely there, but not here
+ my $embed_docref = delete $funcflags{$name};
+ if ($embed_docref and %$embed_docref) {
+ warn "embed.fnc entry overrides redundant information in"
+ . " '$proto_in_file' in $file" if $flags || $ret || @args;
+ $flags = $embed_docref->{'flags'};
+ warn "embed.fnc entry '$name' missing 'd' flag"
+ unless $flags =~ /d/;
+ next FUNC if $flags =~ /h/;
+ $ret = $embed_docref->{'retval'};
+ @args = @{$embed_docref->{args}};
+ } elsif ($flags !~ /m/) { # Not in embed.fnc, is missing if not a
+ # macro
+ $missing{$name} = $file;
+ }
+
+ my $inline_where = $flags =~ /A/ ? 'api' : 'guts';
+
+ if (exists $docs{$inline_where}{$curheader}{$name}) {
warn "$0: duplicate API entry for '$name' in $inline_where/$curheader\n";
next;
}
- $docs{$inline_where}{$curheader}{$name}
- = [$flags, $docs, $ret, $file, @args];
+ $docs{$inline_where}{$curheader}{$name}
+ = [$flags, $docs, $ret, $file, @args];
# Create a special entry with an empty-string name for the
# heading-level documentation.
- if (defined $header_doc) {
+ if (defined $header_doc) {
$docs{$inline_where}{$curheader}{""} = $header_doc;
undef $header_doc;
}
- if (defined $doc) {
- if ($doc =~ /^=(?:for|head)/) {
- $in = $doc;
- redo FUNC;
- }
- } else {
- warn "$file:$line:$in";
- }
- }
+ if (defined $doc) {
+ if ($doc =~ /^=(?:for|head)/) {
+ $in = $doc;
+ redo FUNC;
+ }
+ } else {
+ warn "$file:$line:$in";
+ }
+ }
}
}
@@ -202,63 +242,74 @@ existing code.\n\n$docs";
$docs = "\n\nNOTE: this function is experimental and may change or be
removed without notice.\n\n$docs" if $flags =~ /x/;
}
+
+ # Is Perl_, but no #define foo # Perl_foo
+ my $p = $flags =~ /p/ && $flags =~ /o/ && $flags !~ /M/;
+
$docs .= "NOTE: the perl_ form of this function is deprecated.\n\n"
- if $flags =~ /p/;
- $docs .= "NOTE: this function must be explicitly called as Perl_$name with an aTHX_ parameter.\n\n"
- if $flags =~ /o/;
+ if $flags =~ /O/;
+ if ($p) {
+ $docs .= "NOTE: this function must be explicitly called as Perl_$name";
+ $docs .= " with an aTHX_ parameter" if $flags !~ /T/;
+ $docs .= ".\n\n"
+ }
print $fh "=item $name\nX<$name>\n$docs";
if ($flags =~ /U/) { # no usage
- # nothing
- } elsif ($flags =~ /s/) { # semicolon ("dTHR;")
- print $fh "\t\t$name;\n\n";
- } elsif ($flags =~ /n/) { # no args
- print $fh "\t$ret\t$name\n\n";
- } else { # full usage
- my $p = $flags =~ /o/; # no #define foo Perl_foo
- my $n = "Perl_"x$p . $name;
- my $large_ret = length $ret > 7;
- my $indent_size = 7+8 # nroff: 7 under =head + 8 under =item
- +8+($large_ret ? 1 + length $ret : 8)
- +length($n) + 1;
- my $indent;
- print $fh "\t$ret" . ($large_ret ? ' ' : "\t") . "$n(";
- my $long_args;
- for (@args) {
- if ($indent_size + 2 + length > 79) {
- $long_args=1;
- $indent_size -= length($n) - 3;
- last;
- }
- }
- my $args = '';
- if ($p) {
- $args = @args ? "pTHX_ " : "pTHX";
- if ($long_args) { print $fh $args; $args = '' }
- }
- $long_args and print $fh "\n";
- my $first = !$long_args;
- while () {
- if (!@args or
- length $args
- && $indent_size + 3 + length($args[0]) + length $args > 79
- ) {
- print $fh
- $first ? '' : (
- $indent //=
- "\t".($large_ret ? " " x (1+length $ret) : "\t")
- ." "x($long_args ? 4 : 1 + length $n)
- ),
- $args, (","x($args ne 'pTHX_ ') . "\n")x!!@args;
- $args = $first = '';
- }
- @args or last;
- $args .= ", "x!!(length $args && $args ne 'pTHX_ ')
- . shift @args;
- }
- if ($long_args) { print $fh "\n", substr $indent, 0, -4 }
- print $fh ")\n\n";
+ warn("U and s flags are incompatible") if $flags =~ /s/;
+ # nothing
+ } else {
+ if ($flags =~ /n/) { # no args
+ warn("n flag without m") unless $flags =~ /m/;
+ warn("n flag but apparently has args") if @args;
+ print $fh "\t$ret\t$name";
+ } else { # full usage
+ my $n = "Perl_"x$p . $name;
+ my $large_ret = length $ret > 7;
+ my $indent_size = 7+8 # nroff: 7 under =head + 8 under =item
+ +8+($large_ret ? 1 + length $ret : 8)
+ +length($n) + 1;
+ my $indent;
+ print $fh "\t$ret" . ($large_ret ? ' ' : "\t") . "$n(";
+ my $long_args;
+ for (@args) {
+ if ($indent_size + 2 + length > 79) {
+ $long_args=1;
+ $indent_size -= length($n) - 3;
+ last;
+ }
+ }
+ my $args = '';
+ if ($flags !~ /T/ && ($p || ($flags =~ /m/ && $name =~ /^Perl_/))) {
+ $args = @args ? "pTHX_ " : "pTHX";
+ if ($long_args) { print $fh $args; $args = '' }
+ }
+ $long_args and print $fh "\n";
+ my $first = !$long_args;
+ while () {
+ if (!@args or
+ length $args
+ && $indent_size + 3 + length($args[0]) + length $args > 79
+ ) {
+ print $fh
+ $first ? '' : (
+ $indent //=
+ "\t".($large_ret ? " " x (1+length $ret) : "\t")
+ ." "x($long_args ? 4 : 1 + length $n)
+ ),
+ $args, (","x($args ne 'pTHX_ ') . "\n")x!!@args;
+ $args = $first = '';
+ }
+ @args or last;
+ $args .= ", "x!!(length $args && $args ne 'pTHX_ ')
+ . shift @args;
+ }
+ if ($long_args) { print $fh "\n", substr $indent, 0, -4 }
+ print $fh ")";
+ }
+ print $fh ";" if $flags =~ /s/; # semicolon "dTHR;"
+ print $fh "\n\n";
}
print $fh "=for hackers\nFound in file $file\n\n";
}
@@ -279,15 +330,15 @@ sub output {
s/^\|//gm for $header, $footer;
my $fh = open_new("pod/$podname.pod", undef,
- {by => "$0 extracting documentation",
+ {by => "$0 extracting documentation",
from => 'the C source files'}, 1);
print $fh $header;
my $key;
for $key (sort sort_helper keys %$dochash) {
- my $section = $dochash->{$key};
- print $fh "\n=head1 $key\n\n";
+ my $section = $dochash->{$key};
+ print $fh "\n=head1 $key\n\n";
# Output any heading-level documentation and delete so won't get in
# the way later
@@ -295,12 +346,12 @@ sub output {
print $fh $section->{""} . "\n";
delete $section->{""};
}
- print $fh "=over 8\n\n";
+ print $fh "=over 8\n\n";
- for my $key (sort sort_helper keys %$section) {
- docout($fh, $key, $section->{$key});
- }
- print $fh "\n=back\n";
+ for my $key (sort sort_helper keys %$section) {
+ docout($fh, $key, $section->{$key});
+ }
+ print $fh "\n=back\n";
}
if (@$missing) {
@@ -343,10 +394,10 @@ foreach (@{(setup_embed())[0]}) {
s/\b(?:NN|NULLOK)\b\s+//g for @args;
$funcflags{$func} = {
- flags => $flags,
- retval => $retval,
- args => \@args,
- };
+ flags => $flags,
+ retval => $retval,
+ args => \@args,
+ };
}
# glob() picks up docs from extra .c or .h files that may be in unclean
@@ -354,7 +405,7 @@ foreach (@{(setup_embed())[0]}) {
open my $fh, '<', 'MANIFEST'
or die "Can't open MANIFEST: $!";
while (my $line = <$fh>) {
- next unless my ($file) = $line =~ /^(\S+\.[ch])\t/;
+ next unless my ($file) = $line =~ /^(\S+\.(?:[ch]|pod))\t/;
open F, '<', $file or die "Cannot open $file for docs: $!\n";
$curheader = "Functions in file $file\n";
@@ -365,25 +416,23 @@ close $fh or die "Error whilst reading MANIFEST: $!";
for (sort keys %funcflags) {
next unless $funcflags{$_}{flags} =~ /d/;
+ next if $funcflags{$_}{flags} =~ /h/;
warn "no docs for $_\n"
}
foreach (sort keys %missing) {
- next if $macro{$_};
- # Heuristics for known not-a-function macros:
- next if /^[A-Z]/;
- next if /^dj?[A-Z]/;
-
warn "Function '$_', documented in $missing{$_}, not listed in embed.fnc";
}
# walk table providing an array of components in each line to
# subroutine, printing the result
-# List of funcs in the public API that aren't also marked as experimental nor
-# deprecated.
-my @missing_api = grep $funcflags{$_}{flags} =~ /A/ && $funcflags{$_}{flags} !~ /[MD]/ && !$docs{api}{$_}, keys %funcflags;
-output('perlapi', <<'_EOB_', $docs{api}, \@missing_api, <<'_EOE_');
+# List of funcs in the public API that aren't also marked as core-only,
+# experimental nor deprecated.
+my @missing_api = grep $funcflags{$_}{flags} =~ /A/
+ && $funcflags{$_}{flags} !~ /[xD]/
+ && !$docs{api}{$_}, keys %funcflags;
+output('perlapi', <<"_EOB_", $docs{api}, \@missing_api, <<"_EOE_");
|=encoding UTF-8
|
|=head1 NAME
@@ -393,14 +442,18 @@ output('perlapi', <<'_EOB_', $docs{api}, \@missing_api, <<'_EOE_');
|=head1 DESCRIPTION
|X<Perl API> X<API> X<api>
|
-|This file contains the documentation of the perl public API generated by
-|F<embed.pl>, specifically a listing of functions, macros, flags, and variables
-|that may be used by extension writers. L<At the end|/Undocumented functions>
-|is a list of functions which have yet to be documented. The interfaces of
-|those are subject to change without notice. Anything not listed here is
-|not part of the public API, and should not be used by extension writers at
-|all. For these reasons, blindly using functions listed in proto.h is to be
-|avoided when writing extensions.
+|This file contains most of the documentation of the perl public API, as
+|generated by F<embed.pl>. Specifically, it is a listing of functions,
+|macros, flags, and variables that may be used by extension writers. Some
+|specialized items are instead documented in $specialized_docs.
+|
+|L<At the end|/Undocumented functions> is a list of functions which have yet
+|to be documented. Patches welcome! The interfaces of these are subject to
+|change without notice.
+|
+|Anything not listed here is not part of the public API, and should not be
+|used by extension writers at all. For these reasons, blindly using functions
+|listed in proto.h is to be avoided when writing extensions.
|
|In Perl, unlike C, a string of characters may generally contain embedded
|C<NUL> characters. Sometimes in the documentation a Perl string is referred
@@ -446,32 +499,31 @@ _EOB_
|=head1 AUTHORS
|
|Until May 1997, this document was maintained by Jeff Okamoto
-|<okamoto@corp.hp.com>. It is now maintained as part of Perl itself.
+|<okamoto\@corp.hp.com>. It is now maintained as part of Perl itself.
|
|With lots of help and suggestions from Dean Roehrich, Malcolm Beattie,
|Andreas Koenig, Paul Hudson, Ilya Zakharevich, Paul Marquess, Neil
|Bowers, Matthew Green, Tim Bunce, Spider Boardman, Ulrich Pfeifer,
|Stephen McCamant, and Gurusamy Sarathy.
|
-|API Listing originally by Dean Roehrich <roehrich@cray.com>.
+|API Listing originally by Dean Roehrich <roehrich\@cray.com>.
|
|Updated to be autogenerated from comments in the source by Benjamin Stuhl.
|
|=head1 SEE ALSO
|
-|L<perlguts>, L<perlxs>, L<perlxstut>, L<perlintern>
-|
+$other_places_api
_EOE_
# List of non-static internal functions
my @missing_guts =
- grep $funcflags{$_}{flags} !~ /[As]/ && !$docs{guts}{$_}, keys %funcflags;
+ grep $funcflags{$_}{flags} !~ /[AS]/ && !$docs{guts}{$_}, keys %funcflags;
-output('perlintern', <<'END', $docs{guts}, \@missing_guts, <<'END');
+output('perlintern', <<'_EOB_', $docs{guts}, \@missing_guts, <<"_EOE_");
|=head1 NAME
|
|perlintern - autogenerated documentation of purely B<internal>
-| Perl functions
+|Perl functions
|
|=head1 DESCRIPTION
|X<internal Perl functions> X<interpreter functions>
@@ -481,7 +533,7 @@ output('perlintern', <<'END', $docs{guts}, \@missing_guts, <<'END');
|format but are not marked as part of the Perl API. In other words,
|B<they are not for use in extensions>!
|
-END
+_EOB_
|
|=head1 AUTHORS
|
@@ -491,6 +543,5 @@ END
|
|=head1 SEE ALSO
|
-|L<perlguts>, L<perlapi>
-|
-END
+$other_places_intern
+_EOE_
diff --git a/gnu/usr.bin/perl/av.c b/gnu/usr.bin/perl/av.c
index 918844c3761..27b2f12032b 100644
--- a/gnu/usr.bin/perl/av.c
+++ b/gnu/usr.bin/perl/av.c
@@ -55,8 +55,13 @@ Perl_av_reify(pTHX_ AV *av)
/*
=for apidoc av_extend
-Pre-extend an array. The C<key> is the index to which the array should be
-extended.
+Pre-extend an array so that it is capable of storing values at indexes
+C<0..key>. Thus C<av_extend(av,99)> guarantees that the array can store 100
+elements, i.e. that C<av_store(av, 0, sv)> through C<av_store(av, 99, sv)>
+on a plain array will work without any further memory allocation.
+
+If the av argument is a tied array then will call the C<EXTEND> tied
+array method with an argument of C<(key+1)>.
=cut
*/
@@ -72,6 +77,15 @@ Perl_av_extend(pTHX_ AV *av, SSize_t key)
mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied);
if (mg) {
SV *arg1 = sv_newmortal();
+ /* NOTE: the API for av_extend() is NOT the same as the tie method EXTEND.
+ *
+ * The C function takes an *index* (assumes 0 indexed arrays) and ensures
+ * that the array is at least as large as the index provided.
+ *
+ * The tied array method EXTEND takes a *count* and ensures that the array
+ * is at least that many elements large. Thus we have to +1 the key when
+ * we call the tied method.
+ */
sv_setiv(arg1, (IV)(key + 1));
Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(EXTEND), G_DISCARD, 1,
arg1);
diff --git a/gnu/usr.bin/perl/av.h b/gnu/usr.bin/perl/av.h
index 6b2b14ce8f2..5e39c42ea12 100644
--- a/gnu/usr.bin/perl/av.h
+++ b/gnu/usr.bin/perl/av.h
@@ -39,7 +39,7 @@ struct xpvav {
/*
=head1 Handy Values
-=for apidoc AmU||Nullav
+=for apidoc ADmnU||Nullav
Null AV pointer.
(deprecated - use C<(AV *)NULL> instead)
@@ -49,9 +49,11 @@ Null AV pointer.
=for apidoc Am|int|AvFILL|AV* av
Same as C<av_top_index()> or C<av_tindex()>.
-=for apidoc Am|int|av_tindex|AV* av
+=for apidoc av_tindex
Same as C<av_top_index()>.
+=for apidoc m|int|AvFILLp|AV* av
+
=cut
*/
diff --git a/gnu/usr.bin/perl/caretx.c b/gnu/usr.bin/perl/caretx.c
index 247708de8ce..fc5ff93c257 100644
--- a/gnu/usr.bin/perl/caretx.c
+++ b/gnu/usr.bin/perl/caretx.c
@@ -77,7 +77,7 @@ Perl_set_caret_X(pTHX) {
mib[3] = -1;
if (sysctl(mib, 4, NULL, &size, NULL, 0) == 0
- && size > 0 && size < MAXPATHLEN * MAXPATHLEN) {
+ && inRANGE(size, 1, -1 + MAXPATHLEN * MAXPATHLEN)) {
sv_grow(caret_x, size);
if (sysctl(mib, 4, SvPVX(caret_x), &size, NULL, 0) == 0
diff --git a/gnu/usr.bin/perl/cflags.SH b/gnu/usr.bin/perl/cflags.SH
index f1bcd6c38eb..96bfcd928bc 100644
--- a/gnu/usr.bin/perl/cflags.SH
+++ b/gnu/usr.bin/perl/cflags.SH
@@ -178,11 +178,17 @@ Intel*) ;; # # Is that you, Intel C++?
# -std=c89 before -ansi
# -pedantic* before -Werror=d-a-s
#
-*) for opt in -std=c89 -ansi $pedantic \
- -Werror=declaration-after-statement \
- -Werror=pointer-arith \
- -Wextra -W \
- -Wc++-compat -Wwrite-strings
+*) warns="-std=c89 -ansi $pedantic \
+ -Werror=pointer-arith \
+ -Wextra -W \
+ -Wc++-compat -Wwrite-strings"
+ # declaration after statement is normal in C++ rather than an
+ # extension and compilers complain if we try to warn about it
+ case "$d_cplusplus" in
+ define) ;;
+ *) warns="$warns -Werror=declaration-after-statement" ;;
+ esac
+ for opt in $warns
do
case " $ccflags " in
*" $opt "*) ;; # Skip if already there.
diff --git a/gnu/usr.bin/perl/charclass_invlists.h b/gnu/usr.bin/perl/charclass_invlists.h
index cf5cc3f27dd..9a6a9cf789c 100644
--- a/gnu/usr.bin/perl/charclass_invlists.h
+++ b/gnu/usr.bin/perl/charclass_invlists.h
@@ -6,6 +6,24 @@
/* See the generating file for comments */
+/* This gives the number of code points that can be in the bitmap of an ANYOF
+ * node. The shift number must currently be one of: 8..12. It can't be less
+ * than 8 (256) because some code relies on it being at least that. Above 12
+ * (4096), and you start running into warnings that some data structure widths
+ * have been exceeded, though the test suite as of this writing still passes
+ * for up through 16, which is as high as anyone would ever want to go,
+ * encompassing all of the Unicode BMP, and thus including all the economically
+ * important world scripts. At 12 most of them are: including Arabic,
+ * Cyrillic, Greek, Hebrew, Indian subcontinent, Latin, and Thai; but not Han,
+ * Japanese, nor Korean. (The regarglen structure in regnodes.h is a U8, and
+ * the trie types TRIEC and AHOCORASICKC are larger than U8 for shift values
+ * above 12.) Be sure to benchmark before changing, as larger sizes do
+ * significantly slow down the test suite */
+
+#define NUM_ANYOF_CODE_POINTS (1 << 8)
+
+/* The precision to use in "%.*e" formats */
+#define PL_E_FORMAT_PRECISION 2
#if (defined(PERL_IN_REGCOMP_C) && ! defined(PERL_IN_XSUB_RE))
@@ -27,6 +45,8 @@ static const UV AboveLatin1_invlist[] = {
0x100
};
+static const UV * const InBitmap_invlist = Latin1_invlist;
+
#endif /* (defined(PERL_IN_REGCOMP_C) && ! defined(PERL_IN_XSUB_RE)) */
#if (defined(PERL_IN_REGCOMP_C) && ! defined(PERL_IN_XSUB_RE))
@@ -34,7 +54,7 @@ static const UV AboveLatin1_invlist[] = {
# if 'A' == 65 /* ASCII/Latin1 */
static const UV Case_Folding_invlist[] = { /* for ASCII/Latin1 */
- 1393, /* Number of elements */
+ 1398, /* 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 */
@@ -1402,6 +1422,11 @@ static const UV Case_Folding_invlist[] = { /* for ASCII/Latin1 */
0xA7C5,
0xA7C6,
0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xAB70,
0xABC0,
0xFB00,
@@ -1524,386 +1549,386 @@ typedef enum {
#define HAS_CF_AUX_TABLES
-static const unsigned int CF_AUX_TABLE_1[] = {
+static const U32 CF_AUX_TABLE_1[] = {
0x73,
0x73
};
-static const unsigned int CF_AUX_TABLE_2[] = {
+static const U32 CF_AUX_TABLE_2[] = {
0x69,
0x307
};
-static const unsigned int CF_AUX_TABLE_3[] = {
+static const U32 CF_AUX_TABLE_3[] = {
0x2BC,
0x6E
};
-static const unsigned int CF_AUX_TABLE_4[] = {
+static const U32 CF_AUX_TABLE_4[] = {
0x6A,
0x30C
};
-static const unsigned int CF_AUX_TABLE_5[] = {
+static const U32 CF_AUX_TABLE_5[] = {
0x3B9,
0x308,
0x301
};
-static const unsigned int CF_AUX_TABLE_6[] = {
+static const U32 CF_AUX_TABLE_6[] = {
0x3C5,
0x308,
0x301
};
-static const unsigned int CF_AUX_TABLE_7[] = {
+static const U32 CF_AUX_TABLE_7[] = {
0x565,
0x582
};
-static const unsigned int CF_AUX_TABLE_8[] = {
+static const U32 CF_AUX_TABLE_8[] = {
0x68,
0x331
};
-static const unsigned int CF_AUX_TABLE_9[] = {
+static const U32 CF_AUX_TABLE_9[] = {
0x74,
0x308
};
-static const unsigned int CF_AUX_TABLE_10[] = {
+static const U32 CF_AUX_TABLE_10[] = {
0x77,
0x30A
};
-static const unsigned int CF_AUX_TABLE_11[] = {
+static const U32 CF_AUX_TABLE_11[] = {
0x79,
0x30A
};
-static const unsigned int CF_AUX_TABLE_12[] = {
+static const U32 CF_AUX_TABLE_12[] = {
0x61,
0x2BE
};
-static const unsigned int CF_AUX_TABLE_13[] = {
+static const U32 CF_AUX_TABLE_13[] = {
0x3C5,
0x313
};
-static const unsigned int CF_AUX_TABLE_14[] = {
+static const U32 CF_AUX_TABLE_14[] = {
0x3C5,
0x313,
0x300
};
-static const unsigned int CF_AUX_TABLE_15[] = {
+static const U32 CF_AUX_TABLE_15[] = {
0x3C5,
0x313,
0x301
};
-static const unsigned int CF_AUX_TABLE_16[] = {
+static const U32 CF_AUX_TABLE_16[] = {
0x3C5,
0x313,
0x342
};
-static const unsigned int CF_AUX_TABLE_17[] = {
+static const U32 CF_AUX_TABLE_17[] = {
0x1F00,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_18[] = {
+static const U32 CF_AUX_TABLE_18[] = {
0x1F01,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_19[] = {
+static const U32 CF_AUX_TABLE_19[] = {
0x1F02,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_20[] = {
+static const U32 CF_AUX_TABLE_20[] = {
0x1F03,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_21[] = {
+static const U32 CF_AUX_TABLE_21[] = {
0x1F04,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_22[] = {
+static const U32 CF_AUX_TABLE_22[] = {
0x1F05,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_23[] = {
+static const U32 CF_AUX_TABLE_23[] = {
0x1F06,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_24[] = {
+static const U32 CF_AUX_TABLE_24[] = {
0x1F07,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_25[] = {
+static const U32 CF_AUX_TABLE_25[] = {
0x1F20,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_26[] = {
+static const U32 CF_AUX_TABLE_26[] = {
0x1F21,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_27[] = {
+static const U32 CF_AUX_TABLE_27[] = {
0x1F22,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_28[] = {
+static const U32 CF_AUX_TABLE_28[] = {
0x1F23,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_29[] = {
+static const U32 CF_AUX_TABLE_29[] = {
0x1F24,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_30[] = {
+static const U32 CF_AUX_TABLE_30[] = {
0x1F25,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_31[] = {
+static const U32 CF_AUX_TABLE_31[] = {
0x1F26,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_32[] = {
+static const U32 CF_AUX_TABLE_32[] = {
0x1F27,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_33[] = {
+static const U32 CF_AUX_TABLE_33[] = {
0x1F60,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_34[] = {
+static const U32 CF_AUX_TABLE_34[] = {
0x1F61,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_35[] = {
+static const U32 CF_AUX_TABLE_35[] = {
0x1F62,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_36[] = {
+static const U32 CF_AUX_TABLE_36[] = {
0x1F63,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_37[] = {
+static const U32 CF_AUX_TABLE_37[] = {
0x1F64,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_38[] = {
+static const U32 CF_AUX_TABLE_38[] = {
0x1F65,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_39[] = {
+static const U32 CF_AUX_TABLE_39[] = {
0x1F66,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_40[] = {
+static const U32 CF_AUX_TABLE_40[] = {
0x1F67,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_41[] = {
+static const U32 CF_AUX_TABLE_41[] = {
0x1F70,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_42[] = {
+static const U32 CF_AUX_TABLE_42[] = {
0x3B1,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_43[] = {
+static const U32 CF_AUX_TABLE_43[] = {
0x3AC,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_44[] = {
+static const U32 CF_AUX_TABLE_44[] = {
0x3B1,
0x342
};
-static const unsigned int CF_AUX_TABLE_45[] = {
+static const U32 CF_AUX_TABLE_45[] = {
0x3B1,
0x342,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_46[] = {
+static const U32 CF_AUX_TABLE_46[] = {
0x1F74,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_47[] = {
+static const U32 CF_AUX_TABLE_47[] = {
0x3B7,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_48[] = {
+static const U32 CF_AUX_TABLE_48[] = {
0x3AE,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_49[] = {
+static const U32 CF_AUX_TABLE_49[] = {
0x3B7,
0x342
};
-static const unsigned int CF_AUX_TABLE_50[] = {
+static const U32 CF_AUX_TABLE_50[] = {
0x3B7,
0x342,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_51[] = {
+static const U32 CF_AUX_TABLE_51[] = {
0x3B9,
0x308,
0x300
};
-static const unsigned int CF_AUX_TABLE_52[] = {
+static const U32 CF_AUX_TABLE_52[] = {
0x3B9,
0x342
};
-static const unsigned int CF_AUX_TABLE_53[] = {
+static const U32 CF_AUX_TABLE_53[] = {
0x3B9,
0x308,
0x342
};
-static const unsigned int CF_AUX_TABLE_54[] = {
+static const U32 CF_AUX_TABLE_54[] = {
0x3C5,
0x308,
0x300
};
-static const unsigned int CF_AUX_TABLE_55[] = {
+static const U32 CF_AUX_TABLE_55[] = {
0x3C1,
0x313
};
-static const unsigned int CF_AUX_TABLE_56[] = {
+static const U32 CF_AUX_TABLE_56[] = {
0x3C5,
0x342
};
-static const unsigned int CF_AUX_TABLE_57[] = {
+static const U32 CF_AUX_TABLE_57[] = {
0x3C5,
0x308,
0x342
};
-static const unsigned int CF_AUX_TABLE_58[] = {
+static const U32 CF_AUX_TABLE_58[] = {
0x1F7C,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_59[] = {
+static const U32 CF_AUX_TABLE_59[] = {
0x3C9,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_60[] = {
+static const U32 CF_AUX_TABLE_60[] = {
0x3CE,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_61[] = {
+static const U32 CF_AUX_TABLE_61[] = {
0x3C9,
0x342
};
-static const unsigned int CF_AUX_TABLE_62[] = {
+static const U32 CF_AUX_TABLE_62[] = {
0x3C9,
0x342,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_63[] = {
+static const U32 CF_AUX_TABLE_63[] = {
0x66,
0x66
};
-static const unsigned int CF_AUX_TABLE_64[] = {
+static const U32 CF_AUX_TABLE_64[] = {
0x66,
0x69
};
-static const unsigned int CF_AUX_TABLE_65[] = {
+static const U32 CF_AUX_TABLE_65[] = {
0x66,
0x6C
};
-static const unsigned int CF_AUX_TABLE_66[] = {
+static const U32 CF_AUX_TABLE_66[] = {
0x66,
0x66,
0x69
};
-static const unsigned int CF_AUX_TABLE_67[] = {
+static const U32 CF_AUX_TABLE_67[] = {
0x66,
0x66,
0x6C
};
-static const unsigned int CF_AUX_TABLE_68[] = {
+static const U32 CF_AUX_TABLE_68[] = {
0x73,
0x74
};
-static const unsigned int CF_AUX_TABLE_69[] = {
+static const U32 CF_AUX_TABLE_69[] = {
0x574,
0x576
};
-static const unsigned int CF_AUX_TABLE_70[] = {
+static const U32 CF_AUX_TABLE_70[] = {
0x574,
0x565
};
-static const unsigned int CF_AUX_TABLE_71[] = {
+static const U32 CF_AUX_TABLE_71[] = {
0x574,
0x56B
};
-static const unsigned int CF_AUX_TABLE_72[] = {
+static const U32 CF_AUX_TABLE_72[] = {
0x57E,
0x576
};
-static const unsigned int CF_AUX_TABLE_73[] = {
+static const U32 CF_AUX_TABLE_73[] = {
0x574,
0x56D
};
-static const unsigned int * const CF_AUX_TABLE_ptrs[] = {
+static const U32 * const CF_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
CF_AUX_TABLE_1,
CF_AUX_TABLE_2,
@@ -2060,7 +2085,7 @@ static const U8 CF_AUX_TABLE_lengths[] = {
2 /* CF_AUX_TABLE_73 */
};
-static const int Case_Folding_invmap[] = { /* for ASCII/Latin1 */
+static const I32 Case_Folding_invmap[] = { /* for ASCII/Latin1 */
0,
0x61,
0,
@@ -3424,6 +3449,11 @@ static const int Case_Folding_invmap[] = { /* for ASCII/Latin1 */
0xA794,
0x282,
0x1D8E,
+ 0xA7C8,
+ 0,
+ 0xA7CA,
+ 0,
+ 0xA7F6,
0,
0x13A0,
0,
@@ -3468,7 +3498,7 @@ static const int Case_Folding_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV Case_Folding_invlist[] = { /* for EBCDIC 1047 */
- 1412, /* Number of elements */
+ 1417, /* 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 */
@@ -4855,6 +4885,11 @@ static const UV Case_Folding_invlist[] = { /* for EBCDIC 1047 */
0xA7C5,
0xA7C6,
0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xAB70,
0xABC0,
0xFB00,
@@ -4980,386 +5015,386 @@ typedef enum {
#define HAS_CF_AUX_TABLES
-static const unsigned int CF_AUX_TABLE_1[] = {
+static const U32 CF_AUX_TABLE_1[] = {
0xA2,
0xA2
};
-static const unsigned int CF_AUX_TABLE_2[] = {
+static const U32 CF_AUX_TABLE_2[] = {
0x89,
0x307
};
-static const unsigned int CF_AUX_TABLE_3[] = {
+static const U32 CF_AUX_TABLE_3[] = {
0x2BC,
0x95
};
-static const unsigned int CF_AUX_TABLE_4[] = {
+static const U32 CF_AUX_TABLE_4[] = {
0x91,
0x30C
};
-static const unsigned int CF_AUX_TABLE_5[] = {
+static const U32 CF_AUX_TABLE_5[] = {
0x3B9,
0x308,
0x301
};
-static const unsigned int CF_AUX_TABLE_6[] = {
+static const U32 CF_AUX_TABLE_6[] = {
0x3C5,
0x308,
0x301
};
-static const unsigned int CF_AUX_TABLE_7[] = {
+static const U32 CF_AUX_TABLE_7[] = {
0x565,
0x582
};
-static const unsigned int CF_AUX_TABLE_8[] = {
+static const U32 CF_AUX_TABLE_8[] = {
0x88,
0x331
};
-static const unsigned int CF_AUX_TABLE_9[] = {
+static const U32 CF_AUX_TABLE_9[] = {
0xA3,
0x308
};
-static const unsigned int CF_AUX_TABLE_10[] = {
+static const U32 CF_AUX_TABLE_10[] = {
0xA6,
0x30A
};
-static const unsigned int CF_AUX_TABLE_11[] = {
+static const U32 CF_AUX_TABLE_11[] = {
0xA8,
0x30A
};
-static const unsigned int CF_AUX_TABLE_12[] = {
+static const U32 CF_AUX_TABLE_12[] = {
0x81,
0x2BE
};
-static const unsigned int CF_AUX_TABLE_13[] = {
+static const U32 CF_AUX_TABLE_13[] = {
0x3C5,
0x313
};
-static const unsigned int CF_AUX_TABLE_14[] = {
+static const U32 CF_AUX_TABLE_14[] = {
0x3C5,
0x313,
0x300
};
-static const unsigned int CF_AUX_TABLE_15[] = {
+static const U32 CF_AUX_TABLE_15[] = {
0x3C5,
0x313,
0x301
};
-static const unsigned int CF_AUX_TABLE_16[] = {
+static const U32 CF_AUX_TABLE_16[] = {
0x3C5,
0x313,
0x342
};
-static const unsigned int CF_AUX_TABLE_17[] = {
+static const U32 CF_AUX_TABLE_17[] = {
0x1F00,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_18[] = {
+static const U32 CF_AUX_TABLE_18[] = {
0x1F01,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_19[] = {
+static const U32 CF_AUX_TABLE_19[] = {
0x1F02,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_20[] = {
+static const U32 CF_AUX_TABLE_20[] = {
0x1F03,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_21[] = {
+static const U32 CF_AUX_TABLE_21[] = {
0x1F04,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_22[] = {
+static const U32 CF_AUX_TABLE_22[] = {
0x1F05,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_23[] = {
+static const U32 CF_AUX_TABLE_23[] = {
0x1F06,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_24[] = {
+static const U32 CF_AUX_TABLE_24[] = {
0x1F07,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_25[] = {
+static const U32 CF_AUX_TABLE_25[] = {
0x1F20,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_26[] = {
+static const U32 CF_AUX_TABLE_26[] = {
0x1F21,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_27[] = {
+static const U32 CF_AUX_TABLE_27[] = {
0x1F22,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_28[] = {
+static const U32 CF_AUX_TABLE_28[] = {
0x1F23,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_29[] = {
+static const U32 CF_AUX_TABLE_29[] = {
0x1F24,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_30[] = {
+static const U32 CF_AUX_TABLE_30[] = {
0x1F25,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_31[] = {
+static const U32 CF_AUX_TABLE_31[] = {
0x1F26,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_32[] = {
+static const U32 CF_AUX_TABLE_32[] = {
0x1F27,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_33[] = {
+static const U32 CF_AUX_TABLE_33[] = {
0x1F60,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_34[] = {
+static const U32 CF_AUX_TABLE_34[] = {
0x1F61,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_35[] = {
+static const U32 CF_AUX_TABLE_35[] = {
0x1F62,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_36[] = {
+static const U32 CF_AUX_TABLE_36[] = {
0x1F63,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_37[] = {
+static const U32 CF_AUX_TABLE_37[] = {
0x1F64,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_38[] = {
+static const U32 CF_AUX_TABLE_38[] = {
0x1F65,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_39[] = {
+static const U32 CF_AUX_TABLE_39[] = {
0x1F66,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_40[] = {
+static const U32 CF_AUX_TABLE_40[] = {
0x1F67,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_41[] = {
+static const U32 CF_AUX_TABLE_41[] = {
0x1F70,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_42[] = {
+static const U32 CF_AUX_TABLE_42[] = {
0x3B1,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_43[] = {
+static const U32 CF_AUX_TABLE_43[] = {
0x3AC,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_44[] = {
+static const U32 CF_AUX_TABLE_44[] = {
0x3B1,
0x342
};
-static const unsigned int CF_AUX_TABLE_45[] = {
+static const U32 CF_AUX_TABLE_45[] = {
0x3B1,
0x342,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_46[] = {
+static const U32 CF_AUX_TABLE_46[] = {
0x1F74,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_47[] = {
+static const U32 CF_AUX_TABLE_47[] = {
0x3B7,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_48[] = {
+static const U32 CF_AUX_TABLE_48[] = {
0x3AE,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_49[] = {
+static const U32 CF_AUX_TABLE_49[] = {
0x3B7,
0x342
};
-static const unsigned int CF_AUX_TABLE_50[] = {
+static const U32 CF_AUX_TABLE_50[] = {
0x3B7,
0x342,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_51[] = {
+static const U32 CF_AUX_TABLE_51[] = {
0x3B9,
0x308,
0x300
};
-static const unsigned int CF_AUX_TABLE_52[] = {
+static const U32 CF_AUX_TABLE_52[] = {
0x3B9,
0x342
};
-static const unsigned int CF_AUX_TABLE_53[] = {
+static const U32 CF_AUX_TABLE_53[] = {
0x3B9,
0x308,
0x342
};
-static const unsigned int CF_AUX_TABLE_54[] = {
+static const U32 CF_AUX_TABLE_54[] = {
0x3C5,
0x308,
0x300
};
-static const unsigned int CF_AUX_TABLE_55[] = {
+static const U32 CF_AUX_TABLE_55[] = {
0x3C1,
0x313
};
-static const unsigned int CF_AUX_TABLE_56[] = {
+static const U32 CF_AUX_TABLE_56[] = {
0x3C5,
0x342
};
-static const unsigned int CF_AUX_TABLE_57[] = {
+static const U32 CF_AUX_TABLE_57[] = {
0x3C5,
0x308,
0x342
};
-static const unsigned int CF_AUX_TABLE_58[] = {
+static const U32 CF_AUX_TABLE_58[] = {
0x1F7C,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_59[] = {
+static const U32 CF_AUX_TABLE_59[] = {
0x3C9,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_60[] = {
+static const U32 CF_AUX_TABLE_60[] = {
0x3CE,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_61[] = {
+static const U32 CF_AUX_TABLE_61[] = {
0x3C9,
0x342
};
-static const unsigned int CF_AUX_TABLE_62[] = {
+static const U32 CF_AUX_TABLE_62[] = {
0x3C9,
0x342,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_63[] = {
+static const U32 CF_AUX_TABLE_63[] = {
0x86,
0x86
};
-static const unsigned int CF_AUX_TABLE_64[] = {
+static const U32 CF_AUX_TABLE_64[] = {
0x86,
0x89
};
-static const unsigned int CF_AUX_TABLE_65[] = {
+static const U32 CF_AUX_TABLE_65[] = {
0x86,
0x93
};
-static const unsigned int CF_AUX_TABLE_66[] = {
+static const U32 CF_AUX_TABLE_66[] = {
0x86,
0x86,
0x89
};
-static const unsigned int CF_AUX_TABLE_67[] = {
+static const U32 CF_AUX_TABLE_67[] = {
0x86,
0x86,
0x93
};
-static const unsigned int CF_AUX_TABLE_68[] = {
+static const U32 CF_AUX_TABLE_68[] = {
0xA2,
0xA3
};
-static const unsigned int CF_AUX_TABLE_69[] = {
+static const U32 CF_AUX_TABLE_69[] = {
0x574,
0x576
};
-static const unsigned int CF_AUX_TABLE_70[] = {
+static const U32 CF_AUX_TABLE_70[] = {
0x574,
0x565
};
-static const unsigned int CF_AUX_TABLE_71[] = {
+static const U32 CF_AUX_TABLE_71[] = {
0x574,
0x56B
};
-static const unsigned int CF_AUX_TABLE_72[] = {
+static const U32 CF_AUX_TABLE_72[] = {
0x57E,
0x576
};
-static const unsigned int CF_AUX_TABLE_73[] = {
+static const U32 CF_AUX_TABLE_73[] = {
0x574,
0x56D
};
-static const unsigned int * const CF_AUX_TABLE_ptrs[] = {
+static const U32 * const CF_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
CF_AUX_TABLE_1,
CF_AUX_TABLE_2,
@@ -5516,7 +5551,7 @@ static const U8 CF_AUX_TABLE_lengths[] = {
2 /* CF_AUX_TABLE_73 */
};
-static const int Case_Folding_invmap[] = { /* for EBCDIC 1047 */
+static const I32 Case_Folding_invmap[] = { /* for EBCDIC 1047 */
0,
CF_use_AUX_TABLE_1,
0,
@@ -6899,6 +6934,11 @@ static const int Case_Folding_invmap[] = { /* for EBCDIC 1047 */
0xA794,
0x282,
0x1D8E,
+ 0xA7C8,
+ 0,
+ 0xA7CA,
+ 0,
+ 0xA7F6,
0,
0x13A0,
0,
@@ -6943,7 +6983,7 @@ static const int Case_Folding_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV Case_Folding_invlist[] = { /* for EBCDIC 037 */
- 1408, /* Number of elements */
+ 1413, /* 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 */
@@ -8326,6 +8366,11 @@ static const UV Case_Folding_invlist[] = { /* for EBCDIC 037 */
0xA7C5,
0xA7C6,
0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xAB70,
0xABC0,
0xFB00,
@@ -8451,386 +8496,386 @@ typedef enum {
#define HAS_CF_AUX_TABLES
-static const unsigned int CF_AUX_TABLE_1[] = {
+static const U32 CF_AUX_TABLE_1[] = {
0xA2,
0xA2
};
-static const unsigned int CF_AUX_TABLE_2[] = {
+static const U32 CF_AUX_TABLE_2[] = {
0x89,
0x307
};
-static const unsigned int CF_AUX_TABLE_3[] = {
+static const U32 CF_AUX_TABLE_3[] = {
0x2BC,
0x95
};
-static const unsigned int CF_AUX_TABLE_4[] = {
+static const U32 CF_AUX_TABLE_4[] = {
0x91,
0x30C
};
-static const unsigned int CF_AUX_TABLE_5[] = {
+static const U32 CF_AUX_TABLE_5[] = {
0x3B9,
0x308,
0x301
};
-static const unsigned int CF_AUX_TABLE_6[] = {
+static const U32 CF_AUX_TABLE_6[] = {
0x3C5,
0x308,
0x301
};
-static const unsigned int CF_AUX_TABLE_7[] = {
+static const U32 CF_AUX_TABLE_7[] = {
0x565,
0x582
};
-static const unsigned int CF_AUX_TABLE_8[] = {
+static const U32 CF_AUX_TABLE_8[] = {
0x88,
0x331
};
-static const unsigned int CF_AUX_TABLE_9[] = {
+static const U32 CF_AUX_TABLE_9[] = {
0xA3,
0x308
};
-static const unsigned int CF_AUX_TABLE_10[] = {
+static const U32 CF_AUX_TABLE_10[] = {
0xA6,
0x30A
};
-static const unsigned int CF_AUX_TABLE_11[] = {
+static const U32 CF_AUX_TABLE_11[] = {
0xA8,
0x30A
};
-static const unsigned int CF_AUX_TABLE_12[] = {
+static const U32 CF_AUX_TABLE_12[] = {
0x81,
0x2BE
};
-static const unsigned int CF_AUX_TABLE_13[] = {
+static const U32 CF_AUX_TABLE_13[] = {
0x3C5,
0x313
};
-static const unsigned int CF_AUX_TABLE_14[] = {
+static const U32 CF_AUX_TABLE_14[] = {
0x3C5,
0x313,
0x300
};
-static const unsigned int CF_AUX_TABLE_15[] = {
+static const U32 CF_AUX_TABLE_15[] = {
0x3C5,
0x313,
0x301
};
-static const unsigned int CF_AUX_TABLE_16[] = {
+static const U32 CF_AUX_TABLE_16[] = {
0x3C5,
0x313,
0x342
};
-static const unsigned int CF_AUX_TABLE_17[] = {
+static const U32 CF_AUX_TABLE_17[] = {
0x1F00,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_18[] = {
+static const U32 CF_AUX_TABLE_18[] = {
0x1F01,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_19[] = {
+static const U32 CF_AUX_TABLE_19[] = {
0x1F02,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_20[] = {
+static const U32 CF_AUX_TABLE_20[] = {
0x1F03,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_21[] = {
+static const U32 CF_AUX_TABLE_21[] = {
0x1F04,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_22[] = {
+static const U32 CF_AUX_TABLE_22[] = {
0x1F05,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_23[] = {
+static const U32 CF_AUX_TABLE_23[] = {
0x1F06,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_24[] = {
+static const U32 CF_AUX_TABLE_24[] = {
0x1F07,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_25[] = {
+static const U32 CF_AUX_TABLE_25[] = {
0x1F20,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_26[] = {
+static const U32 CF_AUX_TABLE_26[] = {
0x1F21,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_27[] = {
+static const U32 CF_AUX_TABLE_27[] = {
0x1F22,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_28[] = {
+static const U32 CF_AUX_TABLE_28[] = {
0x1F23,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_29[] = {
+static const U32 CF_AUX_TABLE_29[] = {
0x1F24,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_30[] = {
+static const U32 CF_AUX_TABLE_30[] = {
0x1F25,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_31[] = {
+static const U32 CF_AUX_TABLE_31[] = {
0x1F26,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_32[] = {
+static const U32 CF_AUX_TABLE_32[] = {
0x1F27,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_33[] = {
+static const U32 CF_AUX_TABLE_33[] = {
0x1F60,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_34[] = {
+static const U32 CF_AUX_TABLE_34[] = {
0x1F61,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_35[] = {
+static const U32 CF_AUX_TABLE_35[] = {
0x1F62,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_36[] = {
+static const U32 CF_AUX_TABLE_36[] = {
0x1F63,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_37[] = {
+static const U32 CF_AUX_TABLE_37[] = {
0x1F64,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_38[] = {
+static const U32 CF_AUX_TABLE_38[] = {
0x1F65,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_39[] = {
+static const U32 CF_AUX_TABLE_39[] = {
0x1F66,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_40[] = {
+static const U32 CF_AUX_TABLE_40[] = {
0x1F67,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_41[] = {
+static const U32 CF_AUX_TABLE_41[] = {
0x1F70,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_42[] = {
+static const U32 CF_AUX_TABLE_42[] = {
0x3B1,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_43[] = {
+static const U32 CF_AUX_TABLE_43[] = {
0x3AC,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_44[] = {
+static const U32 CF_AUX_TABLE_44[] = {
0x3B1,
0x342
};
-static const unsigned int CF_AUX_TABLE_45[] = {
+static const U32 CF_AUX_TABLE_45[] = {
0x3B1,
0x342,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_46[] = {
+static const U32 CF_AUX_TABLE_46[] = {
0x1F74,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_47[] = {
+static const U32 CF_AUX_TABLE_47[] = {
0x3B7,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_48[] = {
+static const U32 CF_AUX_TABLE_48[] = {
0x3AE,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_49[] = {
+static const U32 CF_AUX_TABLE_49[] = {
0x3B7,
0x342
};
-static const unsigned int CF_AUX_TABLE_50[] = {
+static const U32 CF_AUX_TABLE_50[] = {
0x3B7,
0x342,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_51[] = {
+static const U32 CF_AUX_TABLE_51[] = {
0x3B9,
0x308,
0x300
};
-static const unsigned int CF_AUX_TABLE_52[] = {
+static const U32 CF_AUX_TABLE_52[] = {
0x3B9,
0x342
};
-static const unsigned int CF_AUX_TABLE_53[] = {
+static const U32 CF_AUX_TABLE_53[] = {
0x3B9,
0x308,
0x342
};
-static const unsigned int CF_AUX_TABLE_54[] = {
+static const U32 CF_AUX_TABLE_54[] = {
0x3C5,
0x308,
0x300
};
-static const unsigned int CF_AUX_TABLE_55[] = {
+static const U32 CF_AUX_TABLE_55[] = {
0x3C1,
0x313
};
-static const unsigned int CF_AUX_TABLE_56[] = {
+static const U32 CF_AUX_TABLE_56[] = {
0x3C5,
0x342
};
-static const unsigned int CF_AUX_TABLE_57[] = {
+static const U32 CF_AUX_TABLE_57[] = {
0x3C5,
0x308,
0x342
};
-static const unsigned int CF_AUX_TABLE_58[] = {
+static const U32 CF_AUX_TABLE_58[] = {
0x1F7C,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_59[] = {
+static const U32 CF_AUX_TABLE_59[] = {
0x3C9,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_60[] = {
+static const U32 CF_AUX_TABLE_60[] = {
0x3CE,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_61[] = {
+static const U32 CF_AUX_TABLE_61[] = {
0x3C9,
0x342
};
-static const unsigned int CF_AUX_TABLE_62[] = {
+static const U32 CF_AUX_TABLE_62[] = {
0x3C9,
0x342,
0x3B9
};
-static const unsigned int CF_AUX_TABLE_63[] = {
+static const U32 CF_AUX_TABLE_63[] = {
0x86,
0x86
};
-static const unsigned int CF_AUX_TABLE_64[] = {
+static const U32 CF_AUX_TABLE_64[] = {
0x86,
0x89
};
-static const unsigned int CF_AUX_TABLE_65[] = {
+static const U32 CF_AUX_TABLE_65[] = {
0x86,
0x93
};
-static const unsigned int CF_AUX_TABLE_66[] = {
+static const U32 CF_AUX_TABLE_66[] = {
0x86,
0x86,
0x89
};
-static const unsigned int CF_AUX_TABLE_67[] = {
+static const U32 CF_AUX_TABLE_67[] = {
0x86,
0x86,
0x93
};
-static const unsigned int CF_AUX_TABLE_68[] = {
+static const U32 CF_AUX_TABLE_68[] = {
0xA2,
0xA3
};
-static const unsigned int CF_AUX_TABLE_69[] = {
+static const U32 CF_AUX_TABLE_69[] = {
0x574,
0x576
};
-static const unsigned int CF_AUX_TABLE_70[] = {
+static const U32 CF_AUX_TABLE_70[] = {
0x574,
0x565
};
-static const unsigned int CF_AUX_TABLE_71[] = {
+static const U32 CF_AUX_TABLE_71[] = {
0x574,
0x56B
};
-static const unsigned int CF_AUX_TABLE_72[] = {
+static const U32 CF_AUX_TABLE_72[] = {
0x57E,
0x576
};
-static const unsigned int CF_AUX_TABLE_73[] = {
+static const U32 CF_AUX_TABLE_73[] = {
0x574,
0x56D
};
-static const unsigned int * const CF_AUX_TABLE_ptrs[] = {
+static const U32 * const CF_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
CF_AUX_TABLE_1,
CF_AUX_TABLE_2,
@@ -8987,7 +9032,7 @@ static const U8 CF_AUX_TABLE_lengths[] = {
2 /* CF_AUX_TABLE_73 */
};
-static const int Case_Folding_invmap[] = { /* for EBCDIC 037 */
+static const I32 Case_Folding_invmap[] = { /* for EBCDIC 037 */
0,
CF_use_AUX_TABLE_1,
0,
@@ -10366,6 +10411,11 @@ static const int Case_Folding_invmap[] = { /* for EBCDIC 037 */
0xA794,
0x282,
0x1D8E,
+ 0xA7C8,
+ 0,
+ 0xA7CA,
+ 0,
+ 0xA7F6,
0,
0x13A0,
0,
@@ -10407,7 +10457,7 @@ static const int Case_Folding_invmap[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV Lowercase_Mapping_invlist[] = { /* for ASCII/Latin1 */
- 1257, /* Number of elements */
+ 1262, /* 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 */
@@ -11654,6 +11704,11 @@ static const UV Lowercase_Mapping_invlist[] = { /* for ASCII/Latin1 */
0xA7C5,
0xA7C6,
0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -11689,12 +11744,12 @@ typedef enum {
#define HAS_LC_AUX_TABLES
-static const unsigned int LC_AUX_TABLE_1[] = {
+static const U32 LC_AUX_TABLE_1[] = {
0x69,
0x307
};
-static const unsigned int * const LC_AUX_TABLE_ptrs[] = {
+static const U32 * const LC_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
LC_AUX_TABLE_1
};
@@ -11707,7 +11762,7 @@ static const U8 LC_AUX_TABLE_lengths[] = {
2 /* LC_AUX_TABLE_1 */
};
-static const int Lowercase_Mapping_invmap[] = { /* for ASCII/Latin1 */
+static const I32 Lowercase_Mapping_invmap[] = { /* for ASCII/Latin1 */
0,
0x61,
0,
@@ -12950,6 +13005,11 @@ static const int Lowercase_Mapping_invmap[] = { /* for ASCII/Latin1 */
0xA794,
0x282,
0x1D8E,
+ 0xA7C8,
+ 0,
+ 0xA7CA,
+ 0,
+ 0xA7F6,
0,
0xFF41,
0,
@@ -12979,7 +13039,7 @@ static const int Lowercase_Mapping_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 1047 */
- 1275, /* Number of elements */
+ 1280, /* 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 */
@@ -14244,6 +14304,11 @@ static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 1047 */
0xA7C5,
0xA7C6,
0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -14282,12 +14347,12 @@ typedef enum {
#define HAS_LC_AUX_TABLES
-static const unsigned int LC_AUX_TABLE_1[] = {
+static const U32 LC_AUX_TABLE_1[] = {
0x89,
0x307
};
-static const unsigned int * const LC_AUX_TABLE_ptrs[] = {
+static const U32 * const LC_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
LC_AUX_TABLE_1
};
@@ -14300,7 +14365,7 @@ static const U8 LC_AUX_TABLE_lengths[] = {
2 /* LC_AUX_TABLE_1 */
};
-static const int Lowercase_Mapping_invmap[] = { /* for EBCDIC 1047 */
+static const I32 Lowercase_Mapping_invmap[] = { /* for EBCDIC 1047 */
0,
0x42,
0,
@@ -15561,6 +15626,11 @@ static const int Lowercase_Mapping_invmap[] = { /* for EBCDIC 1047 */
0xA794,
0x282,
0x1D8E,
+ 0xA7C8,
+ 0,
+ 0xA7CA,
+ 0,
+ 0xA7F6,
0,
0xFF41,
0,
@@ -15590,7 +15660,7 @@ static const int Lowercase_Mapping_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 037 */
- 1271, /* Number of elements */
+ 1276, /* 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 */
@@ -16851,6 +16921,11 @@ static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 037 */
0xA7C5,
0xA7C6,
0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -16889,12 +16964,12 @@ typedef enum {
#define HAS_LC_AUX_TABLES
-static const unsigned int LC_AUX_TABLE_1[] = {
+static const U32 LC_AUX_TABLE_1[] = {
0x89,
0x307
};
-static const unsigned int * const LC_AUX_TABLE_ptrs[] = {
+static const U32 * const LC_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
LC_AUX_TABLE_1
};
@@ -16907,7 +16982,7 @@ static const U8 LC_AUX_TABLE_lengths[] = {
2 /* LC_AUX_TABLE_1 */
};
-static const int Lowercase_Mapping_invmap[] = { /* for EBCDIC 037 */
+static const I32 Lowercase_Mapping_invmap[] = { /* for EBCDIC 037 */
0,
0x42,
0,
@@ -18164,6 +18239,11 @@ static const int Lowercase_Mapping_invmap[] = { /* for EBCDIC 037 */
0xA794,
0x282,
0x1D8E,
+ 0xA7C8,
+ 0,
+ 0xA7CA,
+ 0,
+ 0xA7F6,
0,
0xFF41,
0,
@@ -18188,7 +18268,7 @@ static const int Lowercase_Mapping_invmap[] = { /* for EBCDIC 037 */
#if (defined(PERL_IN_REGCOMP_C) && ! defined(PERL_IN_XSUB_RE))
static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */
- 349, /* Number of elements */
+ 359, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -18381,6 +18461,8 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */
0x1ABB,
0x1ABD,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B34,
0x1B35,
0x1B44,
@@ -18433,6 +18515,8 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */
0x309B,
0xA806,
0xA807,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C5,
0xA92B,
@@ -18509,6 +18593,10 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */
0x1172C,
0x11839,
0x1183B,
+ 0x1193D,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119E0,
0x119E1,
0x11A34,
@@ -18527,6 +18615,8 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */
0x11D98,
0x16AF0,
0x16AF5,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9E,
0x1BC9F,
0x1D165,
@@ -18546,7 +18636,7 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
- 1777, /* Number of elements */
+ 1805, /* 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 */
@@ -18707,7 +18797,7 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
0xB4B,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -18780,6 +18870,7 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
0xD58,
0xD62,
0xD64,
+ 0xD81,
0xD82,
0xD84,
0xDCA,
@@ -18916,7 +19007,7 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B05,
@@ -19104,6 +19195,8 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
0xA825,
0xA827,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -20006,6 +20099,8 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -20047,6 +20142,9 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
0x111C4,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111CF,
+ 0x111D0,
0x1122C,
0x1122F,
0x11232,
@@ -20140,6 +20238,20 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
0x11838,
0x11839,
0x1183B,
+ 0x11930,
+ 0x11931,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11943,
+ 0x11944,
0x119D1,
0x119D4,
0x119D8,
@@ -20217,6 +20329,10 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -20320,6 +20436,8 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
0x1F93C,
0x1F946,
0x1F947,
+ 0x1FB00,
+ 0x1FC00,
0x1FFFE,
0xE0000,
0xE0020,
@@ -20339,21 +20457,21 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */
typedef enum {
GCB_Other = 0,
- GCB_CR = 1,
- GCB_Control = 2,
- GCB_Extend = 3,
- GCB_L = 4,
- GCB_LF = 5,
- GCB_LV = 6,
- GCB_LVT = 7,
- GCB_Prepend = 8,
- GCB_Regional_Indicator = 9,
- GCB_SpacingMark = 10,
- GCB_T = 11,
- GCB_V = 12,
- GCB_XPG_XX = 13,
- GCB_ZWJ = 14,
- GCB_EDGE = 15,
+ GCB_Control = 1,
+ GCB_CR = 2,
+ GCB_EDGE = 3,
+ GCB_ExtPict_XX = 4,
+ GCB_Extend = 5,
+ GCB_L = 6,
+ GCB_LF = 7,
+ GCB_LV = 8,
+ GCB_LVT = 9,
+ GCB_Prepend = 10,
+ GCB_Regional_Indicator = 11,
+ GCB_SpacingMark = 12,
+ GCB_T = 13,
+ GCB_V = 14,
+ GCB_ZWJ = 15,
GCB_E_Base = 16,
GCB_E_Base_GAZ = 16,
GCB_E_Modifier = 16,
@@ -20369,10 +20487,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
GCB_Other,
GCB_Control,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Control,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Extend,
GCB_Other,
@@ -20591,6 +20709,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
GCB_Other,
GCB_Extend,
GCB_Other,
+ GCB_Extend,
GCB_SpacingMark,
GCB_Other,
GCB_Extend,
@@ -20788,97 +20907,97 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
GCB_Other,
GCB_Control,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Control,
GCB_Other,
GCB_Extend,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Extend,
GCB_Other,
@@ -20887,15 +21006,15 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
GCB_Extend,
GCB_Other,
GCB_Extend,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Extend,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Extend,
GCB_Other,
@@ -20915,6 +21034,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
GCB_Extend,
GCB_SpacingMark,
GCB_Other,
+ GCB_Extend,
+ GCB_Other,
GCB_SpacingMark,
GCB_Other,
GCB_SpacingMark,
@@ -21819,6 +21940,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
GCB_Other,
GCB_Extend,
GCB_Other,
+ GCB_Extend,
+ GCB_Other,
GCB_SpacingMark,
GCB_Extend,
GCB_SpacingMark,
@@ -21860,6 +21983,9 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
GCB_Other,
GCB_SpacingMark,
GCB_Extend,
+ GCB_Other,
+ GCB_SpacingMark,
+ GCB_Extend,
GCB_SpacingMark,
GCB_Extend,
GCB_SpacingMark,
@@ -21951,6 +22077,20 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
GCB_SpacingMark,
GCB_Extend,
GCB_Other,
+ GCB_Extend,
+ GCB_SpacingMark,
+ GCB_Other,
+ GCB_SpacingMark,
+ GCB_Other,
+ GCB_Extend,
+ GCB_SpacingMark,
+ GCB_Extend,
+ GCB_Prepend,
+ GCB_SpacingMark,
+ GCB_Prepend,
+ GCB_SpacingMark,
+ GCB_Extend,
+ GCB_Other,
GCB_SpacingMark,
GCB_Extend,
GCB_Other,
@@ -22030,6 +22170,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
GCB_Other,
GCB_Extend,
GCB_Other,
+ GCB_SpacingMark,
+ GCB_Other,
+ GCB_Extend,
+ GCB_Other,
GCB_Control,
GCB_Other,
GCB_Extend,
@@ -22077,60 +22221,62 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
GCB_Other,
GCB_Extend,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Regional_Indicator,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Extend,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
+ GCB_Other,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Control,
GCB_Extend,
@@ -22152,7 +22298,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
- 1778, /* Number of elements */
+ 1806, /* 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 */
@@ -22314,7 +22460,7 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
0xB4B,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -22387,6 +22533,7 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
0xD58,
0xD62,
0xD64,
+ 0xD81,
0xD82,
0xD84,
0xDCA,
@@ -22523,7 +22670,7 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B05,
@@ -22711,6 +22858,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
0xA825,
0xA827,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -23613,6 +23762,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -23654,6 +23805,9 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
0x111C4,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111CF,
+ 0x111D0,
0x1122C,
0x1122F,
0x11232,
@@ -23747,6 +23901,20 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
0x11838,
0x11839,
0x1183B,
+ 0x11930,
+ 0x11931,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11943,
+ 0x11944,
0x119D1,
0x119D4,
0x119D8,
@@ -23824,6 +23992,10 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -23927,6 +24099,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
0x1F93C,
0x1F946,
0x1F947,
+ 0x1FB00,
+ 0x1FC00,
0x1FFFE,
0xE0000,
0xE0020,
@@ -23949,21 +24123,21 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */
typedef enum {
GCB_Other = 0,
- GCB_CR = 1,
- GCB_Control = 2,
- GCB_Extend = 3,
- GCB_L = 4,
- GCB_LF = 5,
- GCB_LV = 6,
- GCB_LVT = 7,
- GCB_Prepend = 8,
- GCB_Regional_Indicator = 9,
- GCB_SpacingMark = 10,
- GCB_T = 11,
- GCB_V = 12,
- GCB_XPG_XX = 13,
- GCB_ZWJ = 14,
- GCB_EDGE = 15,
+ GCB_Control = 1,
+ GCB_CR = 2,
+ GCB_EDGE = 3,
+ GCB_ExtPict_XX = 4,
+ GCB_Extend = 5,
+ GCB_L = 6,
+ GCB_LF = 7,
+ GCB_LV = 8,
+ GCB_LVT = 9,
+ GCB_Prepend = 10,
+ GCB_Regional_Indicator = 11,
+ GCB_SpacingMark = 12,
+ GCB_T = 13,
+ GCB_V = 14,
+ GCB_ZWJ = 15,
GCB_E_Base = 16,
GCB_E_Base_GAZ = 16,
GCB_E_Modifier = 16,
@@ -23977,9 +24151,9 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
GCB_LF,
GCB_Control,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Control,
GCB_Other,
@@ -24202,6 +24376,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
GCB_Other,
GCB_Extend,
GCB_Other,
+ GCB_Extend,
GCB_SpacingMark,
GCB_Other,
GCB_Extend,
@@ -24399,97 +24574,97 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
GCB_Other,
GCB_Control,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Control,
GCB_Other,
GCB_Extend,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Extend,
GCB_Other,
@@ -24498,15 +24673,15 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
GCB_Extend,
GCB_Other,
GCB_Extend,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Extend,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Extend,
GCB_Other,
@@ -24526,6 +24701,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
GCB_Extend,
GCB_SpacingMark,
GCB_Other,
+ GCB_Extend,
+ GCB_Other,
GCB_SpacingMark,
GCB_Other,
GCB_SpacingMark,
@@ -25430,6 +25607,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
GCB_Other,
GCB_Extend,
GCB_Other,
+ GCB_Extend,
+ GCB_Other,
GCB_SpacingMark,
GCB_Extend,
GCB_SpacingMark,
@@ -25471,6 +25650,9 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
GCB_Other,
GCB_SpacingMark,
GCB_Extend,
+ GCB_Other,
+ GCB_SpacingMark,
+ GCB_Extend,
GCB_SpacingMark,
GCB_Extend,
GCB_SpacingMark,
@@ -25562,6 +25744,20 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
GCB_SpacingMark,
GCB_Extend,
GCB_Other,
+ GCB_Extend,
+ GCB_SpacingMark,
+ GCB_Other,
+ GCB_SpacingMark,
+ GCB_Other,
+ GCB_Extend,
+ GCB_SpacingMark,
+ GCB_Extend,
+ GCB_Prepend,
+ GCB_SpacingMark,
+ GCB_Prepend,
+ GCB_SpacingMark,
+ GCB_Extend,
+ GCB_Other,
GCB_SpacingMark,
GCB_Extend,
GCB_Other,
@@ -25641,6 +25837,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
GCB_Other,
GCB_Extend,
GCB_Other,
+ GCB_SpacingMark,
+ GCB_Other,
+ GCB_Extend,
+ GCB_Other,
GCB_Control,
GCB_Other,
GCB_Extend,
@@ -25688,60 +25888,62 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
GCB_Other,
GCB_Extend,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Regional_Indicator,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Extend,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
+ GCB_Other,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Control,
GCB_Extend,
@@ -25763,7 +25965,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
- 1778, /* Number of elements */
+ 1806, /* 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 */
@@ -25925,7 +26127,7 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
0xB4B,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -25998,6 +26200,7 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
0xD58,
0xD62,
0xD64,
+ 0xD81,
0xD82,
0xD84,
0xDCA,
@@ -26134,7 +26337,7 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B05,
@@ -26322,6 +26525,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
0xA825,
0xA827,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -27224,6 +27429,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -27265,6 +27472,9 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
0x111C4,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111CF,
+ 0x111D0,
0x1122C,
0x1122F,
0x11232,
@@ -27358,6 +27568,20 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
0x11838,
0x11839,
0x1183B,
+ 0x11930,
+ 0x11931,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11943,
+ 0x11944,
0x119D1,
0x119D4,
0x119D8,
@@ -27435,6 +27659,10 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -27538,6 +27766,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
0x1F93C,
0x1F946,
0x1F947,
+ 0x1FB00,
+ 0x1FC00,
0x1FFFE,
0xE0000,
0xE0020,
@@ -27560,21 +27790,21 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */
typedef enum {
GCB_Other = 0,
- GCB_CR = 1,
- GCB_Control = 2,
- GCB_Extend = 3,
- GCB_L = 4,
- GCB_LF = 5,
- GCB_LV = 6,
- GCB_LVT = 7,
- GCB_Prepend = 8,
- GCB_Regional_Indicator = 9,
- GCB_SpacingMark = 10,
- GCB_T = 11,
- GCB_V = 12,
- GCB_XPG_XX = 13,
- GCB_ZWJ = 14,
- GCB_EDGE = 15,
+ GCB_Control = 1,
+ GCB_CR = 2,
+ GCB_EDGE = 3,
+ GCB_ExtPict_XX = 4,
+ GCB_Extend = 5,
+ GCB_L = 6,
+ GCB_LF = 7,
+ GCB_LV = 8,
+ GCB_LVT = 9,
+ GCB_Prepend = 10,
+ GCB_Regional_Indicator = 11,
+ GCB_SpacingMark = 12,
+ GCB_T = 13,
+ GCB_V = 14,
+ GCB_ZWJ = 15,
GCB_E_Base = 16,
GCB_E_Base_GAZ = 16,
GCB_E_Modifier = 16,
@@ -27588,9 +27818,9 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
GCB_LF,
GCB_Control,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Control,
GCB_Other,
@@ -27813,6 +28043,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
GCB_Other,
GCB_Extend,
GCB_Other,
+ GCB_Extend,
GCB_SpacingMark,
GCB_Other,
GCB_Extend,
@@ -28010,97 +28241,97 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
GCB_Other,
GCB_Control,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Control,
GCB_Other,
GCB_Extend,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Extend,
GCB_Other,
@@ -28109,15 +28340,15 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
GCB_Extend,
GCB_Other,
GCB_Extend,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Extend,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Extend,
GCB_Other,
@@ -28137,6 +28368,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
GCB_Extend,
GCB_SpacingMark,
GCB_Other,
+ GCB_Extend,
+ GCB_Other,
GCB_SpacingMark,
GCB_Other,
GCB_SpacingMark,
@@ -29041,6 +29274,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
GCB_Other,
GCB_Extend,
GCB_Other,
+ GCB_Extend,
+ GCB_Other,
GCB_SpacingMark,
GCB_Extend,
GCB_SpacingMark,
@@ -29082,6 +29317,9 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
GCB_Other,
GCB_SpacingMark,
GCB_Extend,
+ GCB_Other,
+ GCB_SpacingMark,
+ GCB_Extend,
GCB_SpacingMark,
GCB_Extend,
GCB_SpacingMark,
@@ -29173,6 +29411,20 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
GCB_SpacingMark,
GCB_Extend,
GCB_Other,
+ GCB_Extend,
+ GCB_SpacingMark,
+ GCB_Other,
+ GCB_SpacingMark,
+ GCB_Other,
+ GCB_Extend,
+ GCB_SpacingMark,
+ GCB_Extend,
+ GCB_Prepend,
+ GCB_SpacingMark,
+ GCB_Prepend,
+ GCB_SpacingMark,
+ GCB_Extend,
+ GCB_Other,
GCB_SpacingMark,
GCB_Extend,
GCB_Other,
@@ -29252,6 +29504,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
GCB_Other,
GCB_Extend,
GCB_Other,
+ GCB_SpacingMark,
+ GCB_Other,
+ GCB_Extend,
+ GCB_Other,
GCB_Control,
GCB_Other,
GCB_Extend,
@@ -29299,60 +29555,62 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
GCB_Other,
GCB_Extend,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Regional_Indicator,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Extend,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
GCB_Other,
- GCB_XPG_XX,
+ GCB_ExtPict_XX,
+ GCB_Other,
+ GCB_ExtPict_XX,
GCB_Other,
GCB_Control,
GCB_Extend,
@@ -29371,7 +29629,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV _Perl_IVCF_invlist[] = { /* for ASCII/Latin1 */
- 1309, /* Number of elements */
+ 1316, /* 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 */
@@ -30666,6 +30924,12 @@ static const UV _Perl_IVCF_invlist[] = { /* for ASCII/Latin1 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xFB05,
@@ -30683,7 +30947,8 @@ static const UV _Perl_IVCF_invlist[] = { /* for ASCII/Latin1 */
0x118E0,
0x16E60,
0x16E80,
- 0x1E922
+ 0x1E922,
+ 0x1E944
};
# endif /* ASCII/Latin1 */
@@ -30731,145 +30996,145 @@ typedef enum {
#define HAS_IVCF_AUX_TABLES
-static const unsigned int IVCF_AUX_TABLE_1[] = {
+static const U32 IVCF_AUX_TABLE_1[] = {
0x4B,
0x212A
};
-static const unsigned int IVCF_AUX_TABLE_2[] = {
+static const U32 IVCF_AUX_TABLE_2[] = {
0x53,
0x17F
};
-static const unsigned int IVCF_AUX_TABLE_3[] = {
+static const U32 IVCF_AUX_TABLE_3[] = {
0xC5,
0x212B
};
-static const unsigned int IVCF_AUX_TABLE_4[] = {
+static const U32 IVCF_AUX_TABLE_4[] = {
0x1C4,
0x1C5
};
-static const unsigned int IVCF_AUX_TABLE_5[] = {
+static const U32 IVCF_AUX_TABLE_5[] = {
0x1C7,
0x1C8
};
-static const unsigned int IVCF_AUX_TABLE_6[] = {
+static const U32 IVCF_AUX_TABLE_6[] = {
0x1CA,
0x1CB
};
-static const unsigned int IVCF_AUX_TABLE_7[] = {
+static const U32 IVCF_AUX_TABLE_7[] = {
0x1F1,
0x1F2
};
-static const unsigned int IVCF_AUX_TABLE_8[] = {
+static const U32 IVCF_AUX_TABLE_8[] = {
0x392,
0x3D0
};
-static const unsigned int IVCF_AUX_TABLE_9[] = {
+static const U32 IVCF_AUX_TABLE_9[] = {
0x395,
0x3F5
};
-static const unsigned int IVCF_AUX_TABLE_10[] = {
+static const U32 IVCF_AUX_TABLE_10[] = {
0x398,
0x3D1,
0x3F4
};
-static const unsigned int IVCF_AUX_TABLE_11[] = {
+static const U32 IVCF_AUX_TABLE_11[] = {
0x345,
0x399,
0x1FBE
};
-static const unsigned int IVCF_AUX_TABLE_12[] = {
+static const U32 IVCF_AUX_TABLE_12[] = {
0x39A,
0x3F0
};
-static const unsigned int IVCF_AUX_TABLE_13[] = {
+static const U32 IVCF_AUX_TABLE_13[] = {
0xB5,
0x39C
};
-static const unsigned int IVCF_AUX_TABLE_14[] = {
+static const U32 IVCF_AUX_TABLE_14[] = {
0x3A0,
0x3D6
};
-static const unsigned int IVCF_AUX_TABLE_15[] = {
+static const U32 IVCF_AUX_TABLE_15[] = {
0x3A1,
0x3F1
};
-static const unsigned int IVCF_AUX_TABLE_16[] = {
+static const U32 IVCF_AUX_TABLE_16[] = {
0x3A3,
0x3C2
};
-static const unsigned int IVCF_AUX_TABLE_17[] = {
+static const U32 IVCF_AUX_TABLE_17[] = {
0x3A6,
0x3D5
};
-static const unsigned int IVCF_AUX_TABLE_18[] = {
+static const U32 IVCF_AUX_TABLE_18[] = {
0x3A9,
0x2126
};
-static const unsigned int IVCF_AUX_TABLE_19[] = {
+static const U32 IVCF_AUX_TABLE_19[] = {
0x412,
0x1C80
};
-static const unsigned int IVCF_AUX_TABLE_20[] = {
+static const U32 IVCF_AUX_TABLE_20[] = {
0x414,
0x1C81
};
-static const unsigned int IVCF_AUX_TABLE_21[] = {
+static const U32 IVCF_AUX_TABLE_21[] = {
0x41E,
0x1C82
};
-static const unsigned int IVCF_AUX_TABLE_22[] = {
+static const U32 IVCF_AUX_TABLE_22[] = {
0x421,
0x1C83
};
-static const unsigned int IVCF_AUX_TABLE_23[] = {
+static const U32 IVCF_AUX_TABLE_23[] = {
0x422,
0x1C84,
0x1C85
};
-static const unsigned int IVCF_AUX_TABLE_24[] = {
+static const U32 IVCF_AUX_TABLE_24[] = {
0x42A,
0x1C86
};
-static const unsigned int IVCF_AUX_TABLE_25[] = {
+static const U32 IVCF_AUX_TABLE_25[] = {
0x462,
0x1C87
};
-static const unsigned int IVCF_AUX_TABLE_26[] = {
+static const U32 IVCF_AUX_TABLE_26[] = {
0x1E60,
0x1E9B
};
-static const unsigned int IVCF_AUX_TABLE_27[] = {
+static const U32 IVCF_AUX_TABLE_27[] = {
0x1C88,
0xA64A
};
-static const unsigned int * const IVCF_AUX_TABLE_ptrs[] = {
+static const U32 * const IVCF_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
IVCF_AUX_TABLE_1,
IVCF_AUX_TABLE_2,
@@ -30934,7 +31199,7 @@ static const U8 IVCF_AUX_TABLE_lengths[] = {
2 /* IVCF_AUX_TABLE_27 */
};
-static const int _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
+static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
0,
0x41,
IVCF_use_AUX_TABLE_1,
@@ -32226,6 +32491,12 @@ static const int _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
0,
0xA7C2,
0,
+ 0xA7C7,
+ 0,
+ 0xA7C9,
+ 0,
+ 0xA7F5,
+ 0,
0xA7B3,
0,
0xFB06,
@@ -32243,7 +32514,8 @@ static const int _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
0,
0x16E40,
0,
- 0x1E900
+ 0x1E900,
+ 0
};
# endif /* ASCII/Latin1 */
@@ -32258,7 +32530,7 @@ static const int _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 1047 */
- 1323, /* 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 */
@@ -32276,6 +32548,7 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 1047 */
0x8A,
0x8C,
0x8D,
+ 0x8E,
0x8F,
0x91,
0x92,
@@ -33567,6 +33840,12 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 1047 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xFB05,
@@ -33584,7 +33863,8 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 1047 */
0x118E0,
0x16E60,
0x16E80,
- 0x1E922
+ 0x1E922,
+ 0x1E944
};
# endif /* EBCDIC 1047 */
@@ -33635,145 +33915,145 @@ typedef enum {
#define HAS_IVCF_AUX_TABLES
-static const unsigned int IVCF_AUX_TABLE_1[] = {
+static const U32 IVCF_AUX_TABLE_1[] = {
0x67,
0x212B
};
-static const unsigned int IVCF_AUX_TABLE_2[] = {
+static const U32 IVCF_AUX_TABLE_2[] = {
0xD2,
0x212A
};
-static const unsigned int IVCF_AUX_TABLE_3[] = {
+static const U32 IVCF_AUX_TABLE_3[] = {
0xE2,
0x17F
};
-static const unsigned int IVCF_AUX_TABLE_4[] = {
+static const U32 IVCF_AUX_TABLE_4[] = {
0x1C4,
0x1C5
};
-static const unsigned int IVCF_AUX_TABLE_5[] = {
+static const U32 IVCF_AUX_TABLE_5[] = {
0x1C7,
0x1C8
};
-static const unsigned int IVCF_AUX_TABLE_6[] = {
+static const U32 IVCF_AUX_TABLE_6[] = {
0x1CA,
0x1CB
};
-static const unsigned int IVCF_AUX_TABLE_7[] = {
+static const U32 IVCF_AUX_TABLE_7[] = {
0x1F1,
0x1F2
};
-static const unsigned int IVCF_AUX_TABLE_8[] = {
+static const U32 IVCF_AUX_TABLE_8[] = {
0x392,
0x3D0
};
-static const unsigned int IVCF_AUX_TABLE_9[] = {
+static const U32 IVCF_AUX_TABLE_9[] = {
0x395,
0x3F5
};
-static const unsigned int IVCF_AUX_TABLE_10[] = {
+static const U32 IVCF_AUX_TABLE_10[] = {
0x398,
0x3D1,
0x3F4
};
-static const unsigned int IVCF_AUX_TABLE_11[] = {
+static const U32 IVCF_AUX_TABLE_11[] = {
0x345,
0x399,
0x1FBE
};
-static const unsigned int IVCF_AUX_TABLE_12[] = {
+static const U32 IVCF_AUX_TABLE_12[] = {
0x39A,
0x3F0
};
-static const unsigned int IVCF_AUX_TABLE_13[] = {
- 0xB5,
+static const U32 IVCF_AUX_TABLE_13[] = {
+ 0xA0,
0x39C
};
-static const unsigned int IVCF_AUX_TABLE_14[] = {
+static const U32 IVCF_AUX_TABLE_14[] = {
0x3A0,
0x3D6
};
-static const unsigned int IVCF_AUX_TABLE_15[] = {
+static const U32 IVCF_AUX_TABLE_15[] = {
0x3A1,
0x3F1
};
-static const unsigned int IVCF_AUX_TABLE_16[] = {
+static const U32 IVCF_AUX_TABLE_16[] = {
0x3A3,
0x3C2
};
-static const unsigned int IVCF_AUX_TABLE_17[] = {
+static const U32 IVCF_AUX_TABLE_17[] = {
0x3A6,
0x3D5
};
-static const unsigned int IVCF_AUX_TABLE_18[] = {
+static const U32 IVCF_AUX_TABLE_18[] = {
0x3A9,
0x2126
};
-static const unsigned int IVCF_AUX_TABLE_19[] = {
+static const U32 IVCF_AUX_TABLE_19[] = {
0x412,
0x1C80
};
-static const unsigned int IVCF_AUX_TABLE_20[] = {
+static const U32 IVCF_AUX_TABLE_20[] = {
0x414,
0x1C81
};
-static const unsigned int IVCF_AUX_TABLE_21[] = {
+static const U32 IVCF_AUX_TABLE_21[] = {
0x41E,
0x1C82
};
-static const unsigned int IVCF_AUX_TABLE_22[] = {
+static const U32 IVCF_AUX_TABLE_22[] = {
0x421,
0x1C83
};
-static const unsigned int IVCF_AUX_TABLE_23[] = {
+static const U32 IVCF_AUX_TABLE_23[] = {
0x422,
0x1C84,
0x1C85
};
-static const unsigned int IVCF_AUX_TABLE_24[] = {
+static const U32 IVCF_AUX_TABLE_24[] = {
0x42A,
0x1C86
};
-static const unsigned int IVCF_AUX_TABLE_25[] = {
+static const U32 IVCF_AUX_TABLE_25[] = {
0x462,
0x1C87
};
-static const unsigned int IVCF_AUX_TABLE_26[] = {
+static const U32 IVCF_AUX_TABLE_26[] = {
0x1E60,
0x1E9B
};
-static const unsigned int IVCF_AUX_TABLE_27[] = {
+static const U32 IVCF_AUX_TABLE_27[] = {
0x1C88,
0xA64A
};
-static const unsigned int * const IVCF_AUX_TABLE_ptrs[] = {
+static const U32 * const IVCF_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
IVCF_AUX_TABLE_1,
IVCF_AUX_TABLE_2,
@@ -33838,34 +34118,35 @@ static const U8 IVCF_AUX_TABLE_lengths[] = {
2 /* IVCF_AUX_TABLE_27 */
};
-static const int _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
+static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
0,
- 0xC0,
+ 0x62,
IVCF_use_AUX_TABLE_1,
- 0xC6,
+ 0x68,
0,
- 0xC6,
+ 0x71,
0x1E9E,
0,
- 0xD8,
+ 0x80,
0,
- 0x41,
+ 0xC1,
0,
- 0xC6,
- 0xD8,
+ 0xAC,
+ 0xBA,
+ 0xAE,
0,
- 0x41,
+ 0xD1,
IVCF_use_AUX_TABLE_2,
- 0x4C,
+ 0xD3,
0,
- 0xC6,
+ 0x9E,
0,
IVCF_use_AUX_TABLE_3,
- 0x54,
+ 0xE3,
0,
- 0xC6,
+ 0xEB,
0,
- 0xD8,
+ 0xFB,
0x178,
0,
0x100,
@@ -34648,7 +34929,7 @@ static const int _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
0,
0x1E94,
0,
- 0xDF,
+ 0x59,
0,
0x1EA0,
0,
@@ -35144,6 +35425,12 @@ static const int _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
0,
0xA7C2,
0,
+ 0xA7C7,
+ 0,
+ 0xA7C9,
+ 0,
+ 0xA7F5,
+ 0,
0xA7B3,
0,
0xFB06,
@@ -35161,7 +35448,8 @@ static const int _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
0,
0x16E40,
0,
- 0x1E900
+ 0x1E900,
+ 0
};
# endif /* EBCDIC 1047 */
@@ -35176,7 +35464,7 @@ static const int _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 037 */
- 1323, /* Number of elements */
+ 1329, /* 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 */
@@ -35193,7 +35481,6 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 037 */
0x81,
0x8A,
0x8C,
- 0x8D,
0x8F,
0x91,
0x92,
@@ -36485,6 +36772,12 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 037 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xFB05,
@@ -36502,7 +36795,8 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 037 */
0x118E0,
0x16E60,
0x16E80,
- 0x1E922
+ 0x1E922,
+ 0x1E944
};
# endif /* EBCDIC 037 */
@@ -36553,145 +36847,145 @@ typedef enum {
#define HAS_IVCF_AUX_TABLES
-static const unsigned int IVCF_AUX_TABLE_1[] = {
+static const U32 IVCF_AUX_TABLE_1[] = {
0x67,
0x212B
};
-static const unsigned int IVCF_AUX_TABLE_2[] = {
+static const U32 IVCF_AUX_TABLE_2[] = {
0xD2,
0x212A
};
-static const unsigned int IVCF_AUX_TABLE_3[] = {
+static const U32 IVCF_AUX_TABLE_3[] = {
0xE2,
0x17F
};
-static const unsigned int IVCF_AUX_TABLE_4[] = {
+static const U32 IVCF_AUX_TABLE_4[] = {
0x1C4,
0x1C5
};
-static const unsigned int IVCF_AUX_TABLE_5[] = {
+static const U32 IVCF_AUX_TABLE_5[] = {
0x1C7,
0x1C8
};
-static const unsigned int IVCF_AUX_TABLE_6[] = {
+static const U32 IVCF_AUX_TABLE_6[] = {
0x1CA,
0x1CB
};
-static const unsigned int IVCF_AUX_TABLE_7[] = {
+static const U32 IVCF_AUX_TABLE_7[] = {
0x1F1,
0x1F2
};
-static const unsigned int IVCF_AUX_TABLE_8[] = {
+static const U32 IVCF_AUX_TABLE_8[] = {
0x392,
0x3D0
};
-static const unsigned int IVCF_AUX_TABLE_9[] = {
+static const U32 IVCF_AUX_TABLE_9[] = {
0x395,
0x3F5
};
-static const unsigned int IVCF_AUX_TABLE_10[] = {
+static const U32 IVCF_AUX_TABLE_10[] = {
0x398,
0x3D1,
0x3F4
};
-static const unsigned int IVCF_AUX_TABLE_11[] = {
+static const U32 IVCF_AUX_TABLE_11[] = {
0x345,
0x399,
0x1FBE
};
-static const unsigned int IVCF_AUX_TABLE_12[] = {
+static const U32 IVCF_AUX_TABLE_12[] = {
0x39A,
0x3F0
};
-static const unsigned int IVCF_AUX_TABLE_13[] = {
- 0xB5,
+static const U32 IVCF_AUX_TABLE_13[] = {
+ 0xA0,
0x39C
};
-static const unsigned int IVCF_AUX_TABLE_14[] = {
+static const U32 IVCF_AUX_TABLE_14[] = {
0x3A0,
0x3D6
};
-static const unsigned int IVCF_AUX_TABLE_15[] = {
+static const U32 IVCF_AUX_TABLE_15[] = {
0x3A1,
0x3F1
};
-static const unsigned int IVCF_AUX_TABLE_16[] = {
+static const U32 IVCF_AUX_TABLE_16[] = {
0x3A3,
0x3C2
};
-static const unsigned int IVCF_AUX_TABLE_17[] = {
+static const U32 IVCF_AUX_TABLE_17[] = {
0x3A6,
0x3D5
};
-static const unsigned int IVCF_AUX_TABLE_18[] = {
+static const U32 IVCF_AUX_TABLE_18[] = {
0x3A9,
0x2126
};
-static const unsigned int IVCF_AUX_TABLE_19[] = {
+static const U32 IVCF_AUX_TABLE_19[] = {
0x412,
0x1C80
};
-static const unsigned int IVCF_AUX_TABLE_20[] = {
+static const U32 IVCF_AUX_TABLE_20[] = {
0x414,
0x1C81
};
-static const unsigned int IVCF_AUX_TABLE_21[] = {
+static const U32 IVCF_AUX_TABLE_21[] = {
0x41E,
0x1C82
};
-static const unsigned int IVCF_AUX_TABLE_22[] = {
+static const U32 IVCF_AUX_TABLE_22[] = {
0x421,
0x1C83
};
-static const unsigned int IVCF_AUX_TABLE_23[] = {
+static const U32 IVCF_AUX_TABLE_23[] = {
0x422,
0x1C84,
0x1C85
};
-static const unsigned int IVCF_AUX_TABLE_24[] = {
+static const U32 IVCF_AUX_TABLE_24[] = {
0x42A,
0x1C86
};
-static const unsigned int IVCF_AUX_TABLE_25[] = {
+static const U32 IVCF_AUX_TABLE_25[] = {
0x462,
0x1C87
};
-static const unsigned int IVCF_AUX_TABLE_26[] = {
+static const U32 IVCF_AUX_TABLE_26[] = {
0x1E60,
0x1E9B
};
-static const unsigned int IVCF_AUX_TABLE_27[] = {
+static const U32 IVCF_AUX_TABLE_27[] = {
0x1C88,
0xA64A
};
-static const unsigned int * const IVCF_AUX_TABLE_ptrs[] = {
+static const U32 * const IVCF_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
IVCF_AUX_TABLE_1,
IVCF_AUX_TABLE_2,
@@ -36756,34 +37050,33 @@ static const U8 IVCF_AUX_TABLE_lengths[] = {
2 /* IVCF_AUX_TABLE_27 */
};
-static const int _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
+static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
0,
- 0xC0,
+ 0x62,
IVCF_use_AUX_TABLE_1,
- 0xC6,
+ 0x68,
0,
- 0xC6,
+ 0x71,
0x1E9E,
0,
- 0xD8,
+ 0x80,
0,
- 0x41,
+ 0xC1,
0,
- 0xC6,
- 0xD8,
+ 0xAC,
0,
- 0x41,
+ 0xD1,
IVCF_use_AUX_TABLE_2,
- 0x4C,
+ 0xD3,
0,
- 0xC6,
+ 0x9E,
0,
IVCF_use_AUX_TABLE_3,
- 0x54,
+ 0xE3,
0,
- 0xC6,
+ 0xEB,
0,
- 0xD8,
+ 0xFB,
0x178,
0,
0x100,
@@ -37566,7 +37859,7 @@ static const int _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
0,
0x1E94,
0,
- 0xDF,
+ 0x59,
0,
0x1EA0,
0,
@@ -38062,6 +38355,12 @@ static const int _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
0,
0xA7C2,
0,
+ 0xA7C7,
+ 0,
+ 0xA7C9,
+ 0,
+ 0xA7F5,
+ 0,
0xA7B3,
0,
0xFB06,
@@ -38079,7 +38378,8 @@ static const int _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
0,
0x16E40,
0,
- 0x1E900
+ 0x1E900,
+ 0
};
# endif /* EBCDIC 037 */
@@ -38091,7 +38391,7 @@ static const int _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
- 2388, /* Number of elements */
+ 2416, /* 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 */
@@ -38323,7 +38623,7 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -38394,7 +38694,7 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0xD70,
0xD79,
0xD7A,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -38571,7 +38871,7 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0x1A90,
0x1A9A,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -38953,8 +39253,6 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x3200,
@@ -38995,6 +39293,8 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA838,
0xA839,
0xA874,
@@ -40037,6 +40337,9 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EAE,
0x10F46,
0x10F51,
0x11000,
@@ -40076,6 +40379,7 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0x111C8,
0x111C9,
0x111CD,
+ 0x111CE,
0x111D0,
0x111DA,
0x111DB,
@@ -40119,7 +40423,6 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0x1144F,
0x11450,
0x1145A,
- 0x1145B,
0x1145C,
0x1145E,
0x1145F,
@@ -40159,6 +40462,19 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0x1183B,
0x118E0,
0x118EA,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119D1,
0x119D8,
0x119DA,
@@ -40274,10 +40590,15 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0x16F93,
0x16FE0,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18B00,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -40450,6 +40771,7 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0x1F8AE,
0x1F900,
0x1F90C,
+ 0x1F90D,
0x1F90F,
0x1F910,
0x1F918,
@@ -40460,6 +40782,8 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0x1F93A,
0x1F93C,
0x1F93F,
+ 0x1F977,
+ 0x1F978,
0x1F9B5,
0x1F9B7,
0x1F9B8,
@@ -40472,6 +40796,10 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
0x1F9DE,
0x1FA00,
0x1FA54,
+ 0x1FB00,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x1FC00,
0x1FFFE,
0x20000,
0x2FFFE,
@@ -40495,44 +40823,46 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */
typedef enum {
LB_Alphabetic = 0,
- LB_Break_After = 1,
- LB_Break_Before = 2,
- LB_Break_Both = 3,
- LB_Break_Symbols = 4,
- LB_Carriage_Return = 5,
- LB_Close_Parenthesis = 6,
- LB_Close_Punctuation = 7,
- LB_Combining_Mark = 8,
- LB_Contingent_Break = 9,
- LB_E_Base = 10,
- LB_E_Modifier = 11,
- LB_Exclamation = 12,
- LB_Glue = 13,
- LB_H2 = 14,
- LB_H3 = 15,
- LB_Hebrew_Letter = 16,
- LB_Hyphen = 17,
- LB_Ideographic = 18,
- LB_Infix_Numeric = 19,
- LB_Inseparable = 20,
- LB_JL = 21,
- LB_JT = 22,
- LB_JV = 23,
- LB_Line_Feed = 24,
- LB_Mandatory_Break = 25,
- LB_Next_Line = 26,
- LB_Nonstarter = 27,
- LB_Numeric = 28,
- LB_Open_Punctuation = 29,
- LB_Postfix_Numeric = 30,
- LB_Prefix_Numeric = 31,
- LB_Quotation = 32,
- LB_Regional_Indicator = 33,
- LB_Space = 34,
- LB_Word_Joiner = 35,
- LB_ZWJ = 36,
- LB_ZWSpace = 37,
- LB_EDGE = 38
+ LB_Break_Both = 1,
+ LB_Break_After = 2,
+ LB_Break_Before = 3,
+ LB_Mandatory_Break = 4,
+ LB_Contingent_Break = 5,
+ LB_Close_Punctuation = 6,
+ LB_Combining_Mark = 7,
+ LB_Close_Parenthesis = 8,
+ LB_Carriage_Return = 9,
+ LB_East_Asian_OP = 10,
+ LB_E_Base = 11,
+ LB_EDGE = 12,
+ LB_E_Modifier = 13,
+ LB_Exclamation = 14,
+ LB_Glue = 15,
+ LB_H2 = 16,
+ LB_H3 = 17,
+ LB_Hebrew_Letter = 18,
+ LB_Hyphen = 19,
+ LB_Ideographic = 20,
+ LB_Inseparable = 21,
+ LB_Infix_Numeric = 22,
+ LB_JL = 23,
+ LB_JT = 24,
+ LB_JV = 25,
+ LB_Line_Feed = 26,
+ LB_Next_Line = 27,
+ LB_Nonstarter = 28,
+ LB_Numeric = 29,
+ LB_Open_Punctuation = 30,
+ LB_Postfix_Numeric = 31,
+ LB_Prefix_Numeric = 32,
+ LB_Quotation = 33,
+ LB_Regional_Indicator = 34,
+ LB_Space = 35,
+ LB_Break_Symbols = 36,
+ LB_Word_Joiner = 37,
+ LB_ZWSpace = 38,
+ LB_ZWJ = 39,
+ LB_East_Asian_CP = 40
} LB_enum;
static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
@@ -41134,7 +41464,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Alphabetic,
LB_Ideographic,
@@ -41309,27 +41639,27 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Ideographic,
LB_Nonstarter,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Nonstarter,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Combining_Mark,
@@ -41395,8 +41725,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
- LB_Ideographic,
- LB_Alphabetic,
LB_Nonstarter,
LB_Ideographic,
LB_Alphabetic,
@@ -41436,6 +41764,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Alphabetic,
LB_Combining_Mark,
LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
LB_Postfix_Numeric,
LB_Alphabetic,
LB_Break_Before,
@@ -42338,30 +42668,30 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Close_Punctuation,
LB_Infix_Numeric,
LB_Exclamation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Inseparable,
LB_Alphabetic,
LB_Combining_Mark,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Close_Punctuation,
@@ -42371,11 +42701,11 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Nonstarter,
LB_Exclamation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Alphabetic,
@@ -42391,7 +42721,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Prefix_Numeric,
LB_Postfix_Numeric,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Close_Punctuation,
@@ -42402,17 +42732,17 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Ideographic,
LB_Exclamation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Ideographic,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Ideographic,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Nonstarter,
LB_Ideographic,
@@ -42479,6 +42809,9 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Numeric,
LB_Alphabetic,
LB_Combining_Mark,
+ LB_Break_After,
+ LB_Alphabetic,
+ LB_Combining_Mark,
LB_Alphabetic,
LB_Combining_Mark,
LB_Alphabetic,
@@ -42517,6 +42850,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Break_After,
LB_Combining_Mark,
LB_Alphabetic,
+ LB_Combining_Mark,
LB_Numeric,
LB_Alphabetic,
LB_Break_Before,
@@ -42559,7 +42893,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Break_After,
LB_Alphabetic,
LB_Numeric,
- LB_Alphabetic,
LB_Break_After,
LB_Alphabetic,
LB_Combining_Mark,
@@ -42604,6 +42937,19 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Alphabetic,
LB_Combining_Mark,
LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Break_After,
+ LB_Alphabetic,
+ LB_Numeric,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
LB_Break_Before,
LB_Alphabetic,
LB_Combining_Mark,
@@ -42714,6 +43060,11 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Combining_Mark,
LB_Alphabetic,
LB_Nonstarter,
+ LB_Glue,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Ideographic,
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
@@ -42890,6 +43241,9 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
+ LB_E_Base,
+ LB_Ideographic,
+ LB_E_Base,
LB_Ideographic,
LB_E_Base,
LB_Ideographic,
@@ -42914,6 +43268,10 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
+ LB_Numeric,
+ LB_Alphabetic,
+ LB_Ideographic,
+ LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
LB_Ideographic,
@@ -42938,7 +43296,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
- 2400, /* Number of elements */
+ 2428, /* 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 */
@@ -43182,7 +43540,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -43253,7 +43611,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD79,
0xD7A,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -43430,7 +43788,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0x1A90,
0x1A9A,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -43812,8 +44170,6 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x3200,
@@ -43854,6 +44210,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA838,
0xA839,
0xA874,
@@ -44896,6 +45254,9 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EAE,
0x10F46,
0x10F51,
0x11000,
@@ -44935,6 +45296,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0x111C8,
0x111C9,
0x111CD,
+ 0x111CE,
0x111D0,
0x111DA,
0x111DB,
@@ -44978,7 +45340,6 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0x1144F,
0x11450,
0x1145A,
- 0x1145B,
0x1145C,
0x1145E,
0x1145F,
@@ -45018,6 +45379,19 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0x1183B,
0x118E0,
0x118EA,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119D1,
0x119D8,
0x119DA,
@@ -45133,10 +45507,15 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0x16F93,
0x16FE0,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18B00,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -45309,6 +45688,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0x1F8AE,
0x1F900,
0x1F90C,
+ 0x1F90D,
0x1F90F,
0x1F910,
0x1F918,
@@ -45319,6 +45699,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0x1F93A,
0x1F93C,
0x1F93F,
+ 0x1F977,
+ 0x1F978,
0x1F9B5,
0x1F9B7,
0x1F9B8,
@@ -45331,6 +45713,10 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
0x1F9DE,
0x1FA00,
0x1FA54,
+ 0x1FB00,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x1FC00,
0x1FFFE,
0x20000,
0x2FFFE,
@@ -45357,44 +45743,46 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */
typedef enum {
LB_Alphabetic = 0,
- LB_Break_After = 1,
- LB_Break_Before = 2,
- LB_Break_Both = 3,
- LB_Break_Symbols = 4,
- LB_Carriage_Return = 5,
- LB_Close_Parenthesis = 6,
- LB_Close_Punctuation = 7,
- LB_Combining_Mark = 8,
- LB_Contingent_Break = 9,
- LB_E_Base = 10,
- LB_E_Modifier = 11,
- LB_Exclamation = 12,
- LB_Glue = 13,
- LB_H2 = 14,
- LB_H3 = 15,
- LB_Hebrew_Letter = 16,
- LB_Hyphen = 17,
- LB_Ideographic = 18,
- LB_Infix_Numeric = 19,
- LB_Inseparable = 20,
- LB_JL = 21,
- LB_JT = 22,
- LB_JV = 23,
- LB_Line_Feed = 24,
- LB_Mandatory_Break = 25,
- LB_Next_Line = 26,
- LB_Nonstarter = 27,
- LB_Numeric = 28,
- LB_Open_Punctuation = 29,
- LB_Postfix_Numeric = 30,
- LB_Prefix_Numeric = 31,
- LB_Quotation = 32,
- LB_Regional_Indicator = 33,
- LB_Space = 34,
- LB_Word_Joiner = 35,
- LB_ZWJ = 36,
- LB_ZWSpace = 37,
- LB_EDGE = 38
+ LB_Break_Both = 1,
+ LB_Break_After = 2,
+ LB_Break_Before = 3,
+ LB_Mandatory_Break = 4,
+ LB_Contingent_Break = 5,
+ LB_Close_Punctuation = 6,
+ LB_Combining_Mark = 7,
+ LB_Close_Parenthesis = 8,
+ LB_Carriage_Return = 9,
+ LB_East_Asian_OP = 10,
+ LB_E_Base = 11,
+ LB_EDGE = 12,
+ LB_E_Modifier = 13,
+ LB_Exclamation = 14,
+ LB_Glue = 15,
+ LB_H2 = 16,
+ LB_H3 = 17,
+ LB_Hebrew_Letter = 18,
+ LB_Hyphen = 19,
+ LB_Ideographic = 20,
+ LB_Inseparable = 21,
+ LB_Infix_Numeric = 22,
+ LB_JL = 23,
+ LB_JT = 24,
+ LB_JV = 25,
+ LB_Line_Feed = 26,
+ LB_Next_Line = 27,
+ LB_Nonstarter = 28,
+ LB_Numeric = 29,
+ LB_Open_Punctuation = 30,
+ LB_Postfix_Numeric = 31,
+ LB_Prefix_Numeric = 32,
+ LB_Quotation = 33,
+ LB_Regional_Indicator = 34,
+ LB_Space = 35,
+ LB_Break_Symbols = 36,
+ LB_Word_Joiner = 37,
+ LB_ZWSpace = 38,
+ LB_ZWJ = 39,
+ LB_East_Asian_CP = 40
} LB_enum;
static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
@@ -46008,7 +46396,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Alphabetic,
LB_Ideographic,
@@ -46183,27 +46571,27 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Ideographic,
LB_Nonstarter,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Nonstarter,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Combining_Mark,
@@ -46269,8 +46657,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
- LB_Ideographic,
- LB_Alphabetic,
LB_Nonstarter,
LB_Ideographic,
LB_Alphabetic,
@@ -46310,6 +46696,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Alphabetic,
LB_Combining_Mark,
LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
LB_Postfix_Numeric,
LB_Alphabetic,
LB_Break_Before,
@@ -47212,30 +47600,30 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Close_Punctuation,
LB_Infix_Numeric,
LB_Exclamation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Inseparable,
LB_Alphabetic,
LB_Combining_Mark,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Close_Punctuation,
@@ -47245,11 +47633,11 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Nonstarter,
LB_Exclamation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Alphabetic,
@@ -47265,7 +47653,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Prefix_Numeric,
LB_Postfix_Numeric,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Close_Punctuation,
@@ -47276,17 +47664,17 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Ideographic,
LB_Exclamation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Ideographic,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Ideographic,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Nonstarter,
LB_Ideographic,
@@ -47353,6 +47741,9 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Numeric,
LB_Alphabetic,
LB_Combining_Mark,
+ LB_Break_After,
+ LB_Alphabetic,
+ LB_Combining_Mark,
LB_Alphabetic,
LB_Combining_Mark,
LB_Alphabetic,
@@ -47391,6 +47782,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Break_After,
LB_Combining_Mark,
LB_Alphabetic,
+ LB_Combining_Mark,
LB_Numeric,
LB_Alphabetic,
LB_Break_Before,
@@ -47433,7 +47825,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Break_After,
LB_Alphabetic,
LB_Numeric,
- LB_Alphabetic,
LB_Break_After,
LB_Alphabetic,
LB_Combining_Mark,
@@ -47478,6 +47869,19 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Alphabetic,
LB_Combining_Mark,
LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Break_After,
+ LB_Alphabetic,
+ LB_Numeric,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
LB_Break_Before,
LB_Alphabetic,
LB_Combining_Mark,
@@ -47588,6 +47992,11 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Combining_Mark,
LB_Alphabetic,
LB_Nonstarter,
+ LB_Glue,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Ideographic,
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
@@ -47764,6 +48173,9 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
+ LB_E_Base,
+ LB_Ideographic,
+ LB_E_Base,
LB_Ideographic,
LB_E_Base,
LB_Ideographic,
@@ -47788,6 +48200,10 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
+ LB_Numeric,
+ LB_Alphabetic,
+ LB_Ideographic,
+ LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
LB_Ideographic,
@@ -47812,7 +48228,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
- 2400, /* Number of elements */
+ 2428, /* 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 */
@@ -48056,7 +48472,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -48127,7 +48543,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD79,
0xD7A,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -48304,7 +48720,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0x1A90,
0x1A9A,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -48686,8 +49102,6 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x3200,
@@ -48728,6 +49142,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA838,
0xA839,
0xA874,
@@ -49770,6 +50186,9 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EAE,
0x10F46,
0x10F51,
0x11000,
@@ -49809,6 +50228,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0x111C8,
0x111C9,
0x111CD,
+ 0x111CE,
0x111D0,
0x111DA,
0x111DB,
@@ -49852,7 +50272,6 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0x1144F,
0x11450,
0x1145A,
- 0x1145B,
0x1145C,
0x1145E,
0x1145F,
@@ -49892,6 +50311,19 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0x1183B,
0x118E0,
0x118EA,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119D1,
0x119D8,
0x119DA,
@@ -50007,10 +50439,15 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0x16F93,
0x16FE0,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18B00,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -50183,6 +50620,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0x1F8AE,
0x1F900,
0x1F90C,
+ 0x1F90D,
0x1F90F,
0x1F910,
0x1F918,
@@ -50193,6 +50631,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0x1F93A,
0x1F93C,
0x1F93F,
+ 0x1F977,
+ 0x1F978,
0x1F9B5,
0x1F9B7,
0x1F9B8,
@@ -50205,6 +50645,10 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
0x1F9DE,
0x1FA00,
0x1FA54,
+ 0x1FB00,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x1FC00,
0x1FFFE,
0x20000,
0x2FFFE,
@@ -50231,44 +50675,46 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */
typedef enum {
LB_Alphabetic = 0,
- LB_Break_After = 1,
- LB_Break_Before = 2,
- LB_Break_Both = 3,
- LB_Break_Symbols = 4,
- LB_Carriage_Return = 5,
- LB_Close_Parenthesis = 6,
- LB_Close_Punctuation = 7,
- LB_Combining_Mark = 8,
- LB_Contingent_Break = 9,
- LB_E_Base = 10,
- LB_E_Modifier = 11,
- LB_Exclamation = 12,
- LB_Glue = 13,
- LB_H2 = 14,
- LB_H3 = 15,
- LB_Hebrew_Letter = 16,
- LB_Hyphen = 17,
- LB_Ideographic = 18,
- LB_Infix_Numeric = 19,
- LB_Inseparable = 20,
- LB_JL = 21,
- LB_JT = 22,
- LB_JV = 23,
- LB_Line_Feed = 24,
- LB_Mandatory_Break = 25,
- LB_Next_Line = 26,
- LB_Nonstarter = 27,
- LB_Numeric = 28,
- LB_Open_Punctuation = 29,
- LB_Postfix_Numeric = 30,
- LB_Prefix_Numeric = 31,
- LB_Quotation = 32,
- LB_Regional_Indicator = 33,
- LB_Space = 34,
- LB_Word_Joiner = 35,
- LB_ZWJ = 36,
- LB_ZWSpace = 37,
- LB_EDGE = 38
+ LB_Break_Both = 1,
+ LB_Break_After = 2,
+ LB_Break_Before = 3,
+ LB_Mandatory_Break = 4,
+ LB_Contingent_Break = 5,
+ LB_Close_Punctuation = 6,
+ LB_Combining_Mark = 7,
+ LB_Close_Parenthesis = 8,
+ LB_Carriage_Return = 9,
+ LB_East_Asian_OP = 10,
+ LB_E_Base = 11,
+ LB_EDGE = 12,
+ LB_E_Modifier = 13,
+ LB_Exclamation = 14,
+ LB_Glue = 15,
+ LB_H2 = 16,
+ LB_H3 = 17,
+ LB_Hebrew_Letter = 18,
+ LB_Hyphen = 19,
+ LB_Ideographic = 20,
+ LB_Inseparable = 21,
+ LB_Infix_Numeric = 22,
+ LB_JL = 23,
+ LB_JT = 24,
+ LB_JV = 25,
+ LB_Line_Feed = 26,
+ LB_Next_Line = 27,
+ LB_Nonstarter = 28,
+ LB_Numeric = 29,
+ LB_Open_Punctuation = 30,
+ LB_Postfix_Numeric = 31,
+ LB_Prefix_Numeric = 32,
+ LB_Quotation = 33,
+ LB_Regional_Indicator = 34,
+ LB_Space = 35,
+ LB_Break_Symbols = 36,
+ LB_Word_Joiner = 37,
+ LB_ZWSpace = 38,
+ LB_ZWJ = 39,
+ LB_East_Asian_CP = 40
} LB_enum;
static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
@@ -50882,7 +51328,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Alphabetic,
LB_Ideographic,
@@ -51057,27 +51503,27 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Ideographic,
LB_Nonstarter,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Nonstarter,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Combining_Mark,
@@ -51143,8 +51589,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
- LB_Ideographic,
- LB_Alphabetic,
LB_Nonstarter,
LB_Ideographic,
LB_Alphabetic,
@@ -51184,6 +51628,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Alphabetic,
LB_Combining_Mark,
LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
LB_Postfix_Numeric,
LB_Alphabetic,
LB_Break_Before,
@@ -52086,30 +52532,30 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Close_Punctuation,
LB_Infix_Numeric,
LB_Exclamation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Inseparable,
LB_Alphabetic,
LB_Combining_Mark,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Close_Punctuation,
@@ -52119,11 +52565,11 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Nonstarter,
LB_Exclamation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Alphabetic,
@@ -52139,7 +52585,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Prefix_Numeric,
LB_Postfix_Numeric,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Ideographic,
LB_Close_Punctuation,
@@ -52150,17 +52596,17 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Ideographic,
LB_Exclamation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Ideographic,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Ideographic,
LB_Close_Punctuation,
LB_Ideographic,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
- LB_Open_Punctuation,
+ LB_East_Asian_OP,
LB_Close_Punctuation,
LB_Nonstarter,
LB_Ideographic,
@@ -52227,6 +52673,9 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Numeric,
LB_Alphabetic,
LB_Combining_Mark,
+ LB_Break_After,
+ LB_Alphabetic,
+ LB_Combining_Mark,
LB_Alphabetic,
LB_Combining_Mark,
LB_Alphabetic,
@@ -52265,6 +52714,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Break_After,
LB_Combining_Mark,
LB_Alphabetic,
+ LB_Combining_Mark,
LB_Numeric,
LB_Alphabetic,
LB_Break_Before,
@@ -52307,7 +52757,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Break_After,
LB_Alphabetic,
LB_Numeric,
- LB_Alphabetic,
LB_Break_After,
LB_Alphabetic,
LB_Combining_Mark,
@@ -52352,6 +52801,19 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Alphabetic,
LB_Combining_Mark,
LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Break_After,
+ LB_Alphabetic,
+ LB_Numeric,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
LB_Break_Before,
LB_Alphabetic,
LB_Combining_Mark,
@@ -52462,6 +52924,11 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Combining_Mark,
LB_Alphabetic,
LB_Nonstarter,
+ LB_Glue,
+ LB_Alphabetic,
+ LB_Combining_Mark,
+ LB_Alphabetic,
+ LB_Ideographic,
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
@@ -52638,6 +53105,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
+ LB_E_Base,
LB_Ideographic,
LB_E_Base,
LB_Ideographic,
@@ -52659,6 +53127,12 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
LB_Ideographic,
LB_E_Base,
LB_Ideographic,
+ LB_E_Base,
+ LB_Ideographic,
+ LB_Alphabetic,
+ LB_Ideographic,
+ LB_Alphabetic,
+ LB_Numeric,
LB_Alphabetic,
LB_Ideographic,
LB_Alphabetic,
@@ -52683,7 +53157,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
- 3097, /* Number of elements */
+ 3146, /* 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 */
@@ -53400,7 +53874,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -53542,7 +54016,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -53645,7 +54119,6 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0xCF3,
0xD00,
0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -53669,7 +54142,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -53927,7 +54400,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x1AA8,
0x1AAC,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -54592,13 +55065,13 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -54840,7 +55313,12 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F6,
0xA7F7,
0xA7F8,
0xA7FB,
@@ -54852,6 +55330,8 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA876,
@@ -54943,7 +55423,8 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
+ 0xAB6A,
0xAB70,
0xABC0,
0xABE3,
@@ -55196,6 +55677,12 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
@@ -55205,6 +55692,8 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x10F51,
0x10F55,
0x10F5A,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -55237,6 +55726,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x11144,
0x11145,
0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -55326,7 +55816,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x1145A,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -55376,7 +55866,29 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x118E0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -55461,6 +55973,8 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x11EF3,
0x11EF7,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -55517,10 +56031,15 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -55766,8 +56285,10 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x1F18A,
0x1F676,
0x1F679,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -55778,6 +56299,8 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -55797,20 +56320,20 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */
typedef enum {
SB_Other = 0,
SB_ATerm = 1,
- SB_CR = 2,
- SB_Close = 3,
- SB_Extend = 4,
- SB_Format = 5,
- SB_LF = 6,
- SB_Lower = 7,
- SB_Numeric = 8,
- SB_OLetter = 9,
- SB_SContinue = 10,
- SB_STerm = 11,
+ SB_Close = 2,
+ SB_CR = 3,
+ SB_EDGE = 4,
+ SB_Extend = 5,
+ SB_Format = 6,
+ SB_LF = 7,
+ SB_Lower = 8,
+ SB_Numeric = 9,
+ SB_OLetter = 10,
+ SB_SContinue = 11,
SB_Sep = 12,
SB_Sp = 13,
- SB_Upper = 14,
- SB_EDGE = 15
+ SB_STerm = 14,
+ SB_Upper = 15
} SB_enum;
static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
@@ -56771,7 +57294,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_OLetter,
SB_Other,
SB_Extend,
- SB_Other,
SB_OLetter,
SB_Other,
SB_OLetter,
@@ -57967,7 +58489,12 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_Upper,
SB_Lower,
SB_Upper,
+ SB_Lower,
+ SB_Upper,
+ SB_Lower,
SB_Other,
+ SB_Upper,
+ SB_Lower,
SB_OLetter,
SB_Lower,
SB_OLetter,
@@ -57979,6 +58506,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_OLetter,
SB_Extend,
SB_Other,
+ SB_Extend,
+ SB_Other,
SB_OLetter,
SB_Other,
SB_STerm,
@@ -58070,6 +58599,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_Lower,
SB_Other,
SB_Lower,
+ SB_OLetter,
SB_Other,
SB_Lower,
SB_OLetter,
@@ -58325,6 +58855,12 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_Other,
SB_OLetter,
SB_Other,
+ SB_Extend,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_OLetter,
SB_Other,
SB_OLetter,
@@ -58334,6 +58870,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_Other,
SB_OLetter,
SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_Extend,
SB_OLetter,
SB_Extend,
@@ -58363,6 +58901,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_STerm,
SB_OLetter,
SB_Extend,
+ SB_OLetter,
SB_Other,
SB_OLetter,
SB_Extend,
@@ -58377,7 +58916,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_Other,
SB_Extend,
SB_STerm,
- SB_Other,
+ SB_Extend,
SB_Numeric,
SB_OLetter,
SB_Other,
@@ -58507,6 +59046,28 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_OLetter,
SB_Other,
SB_OLetter,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
+ SB_OLetter,
+ SB_Extend,
+ SB_Other,
+ SB_Extend,
+ SB_Other,
+ SB_Extend,
+ SB_OLetter,
+ SB_Extend,
+ SB_OLetter,
+ SB_Extend,
+ SB_STerm,
+ SB_Other,
+ SB_STerm,
+ SB_Other,
+ SB_Numeric,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
+ SB_OLetter,
SB_Extend,
SB_Other,
SB_Extend,
@@ -58596,6 +59157,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_Other,
SB_OLetter,
SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_Format,
SB_Other,
SB_OLetter,
@@ -58643,6 +59206,11 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_OLetter,
SB_Other,
SB_OLetter,
+ SB_Extend,
+ SB_Other,
+ SB_Extend,
+ SB_Other,
+ SB_OLetter,
SB_Other,
SB_OLetter,
SB_Other,
@@ -58893,6 +59461,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
SB_Other,
SB_Close,
SB_Other,
+ SB_Numeric,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_OLetter,
SB_Other,
SB_OLetter,
@@ -58925,7 +59497,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
- 3121, /* Number of elements */
+ 3170, /* 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 */
@@ -59666,7 +60238,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -59808,7 +60380,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -59911,7 +60483,6 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0xCF3,
0xD00,
0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -59935,7 +60506,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -60193,7 +60764,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x1AA8,
0x1AAC,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -60858,13 +61429,13 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -61106,7 +61677,12 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F6,
0xA7F7,
0xA7F8,
0xA7FB,
@@ -61118,6 +61694,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA876,
@@ -61209,7 +61787,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
+ 0xAB6A,
0xAB70,
0xABC0,
0xABE3,
@@ -61462,6 +62041,12 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
@@ -61471,6 +62056,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x10F51,
0x10F55,
0x10F5A,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -61503,6 +62090,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x11144,
0x11145,
0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -61592,7 +62180,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x1145A,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -61642,7 +62230,29 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x118E0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -61727,6 +62337,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x11EF3,
0x11EF7,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -61783,10 +62395,15 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -62032,8 +62649,10 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x1F18A,
0x1F676,
0x1F679,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -62044,6 +62663,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -62066,20 +62687,20 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */
typedef enum {
SB_Other = 0,
SB_ATerm = 1,
- SB_CR = 2,
- SB_Close = 3,
- SB_Extend = 4,
- SB_Format = 5,
- SB_LF = 6,
- SB_Lower = 7,
- SB_Numeric = 8,
- SB_OLetter = 9,
- SB_SContinue = 10,
- SB_STerm = 11,
+ SB_Close = 2,
+ SB_CR = 3,
+ SB_EDGE = 4,
+ SB_Extend = 5,
+ SB_Format = 6,
+ SB_LF = 7,
+ SB_Lower = 8,
+ SB_Numeric = 9,
+ SB_OLetter = 10,
+ SB_SContinue = 11,
SB_Sep = 12,
SB_Sp = 13,
- SB_Upper = 14,
- SB_EDGE = 15
+ SB_STerm = 14,
+ SB_Upper = 15
} SB_enum;
static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
@@ -63064,7 +63685,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_OLetter,
SB_Other,
SB_Extend,
- SB_Other,
SB_OLetter,
SB_Other,
SB_OLetter,
@@ -64260,7 +64880,12 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_Upper,
SB_Lower,
SB_Upper,
+ SB_Lower,
+ SB_Upper,
+ SB_Lower,
SB_Other,
+ SB_Upper,
+ SB_Lower,
SB_OLetter,
SB_Lower,
SB_OLetter,
@@ -64272,6 +64897,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_OLetter,
SB_Extend,
SB_Other,
+ SB_Extend,
+ SB_Other,
SB_OLetter,
SB_Other,
SB_STerm,
@@ -64363,6 +64990,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_Lower,
SB_Other,
SB_Lower,
+ SB_OLetter,
SB_Other,
SB_Lower,
SB_OLetter,
@@ -64618,6 +65246,12 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_Other,
SB_OLetter,
SB_Other,
+ SB_Extend,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_OLetter,
SB_Other,
SB_OLetter,
@@ -64627,6 +65261,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_Other,
SB_OLetter,
SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_Extend,
SB_OLetter,
SB_Extend,
@@ -64656,6 +65292,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_STerm,
SB_OLetter,
SB_Extend,
+ SB_OLetter,
SB_Other,
SB_OLetter,
SB_Extend,
@@ -64670,7 +65307,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_Other,
SB_Extend,
SB_STerm,
- SB_Other,
+ SB_Extend,
SB_Numeric,
SB_OLetter,
SB_Other,
@@ -64800,6 +65437,28 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_OLetter,
SB_Other,
SB_OLetter,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
+ SB_OLetter,
+ SB_Extend,
+ SB_Other,
+ SB_Extend,
+ SB_Other,
+ SB_Extend,
+ SB_OLetter,
+ SB_Extend,
+ SB_OLetter,
+ SB_Extend,
+ SB_STerm,
+ SB_Other,
+ SB_STerm,
+ SB_Other,
+ SB_Numeric,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
+ SB_OLetter,
SB_Extend,
SB_Other,
SB_Extend,
@@ -64889,6 +65548,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_Other,
SB_OLetter,
SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_Format,
SB_Other,
SB_OLetter,
@@ -64936,6 +65597,11 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_OLetter,
SB_Other,
SB_OLetter,
+ SB_Extend,
+ SB_Other,
+ SB_Extend,
+ SB_Other,
+ SB_OLetter,
SB_Other,
SB_OLetter,
SB_Other,
@@ -65186,6 +65852,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
SB_Other,
SB_Close,
SB_Other,
+ SB_Numeric,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_OLetter,
SB_Other,
SB_OLetter,
@@ -65218,7 +65888,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
- 3117, /* Number of elements */
+ 3166, /* 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 */
@@ -65955,7 +66625,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -66097,7 +66767,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -66200,7 +66870,6 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0xCF3,
0xD00,
0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -66224,7 +66893,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -66482,7 +67151,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x1AA8,
0x1AAC,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -67147,13 +67816,13 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -67395,7 +68064,12 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F6,
0xA7F7,
0xA7F8,
0xA7FB,
@@ -67407,6 +68081,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA876,
@@ -67498,7 +68174,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
+ 0xAB6A,
0xAB70,
0xABC0,
0xABE3,
@@ -67751,6 +68428,12 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
@@ -67760,6 +68443,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x10F51,
0x10F55,
0x10F5A,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -67792,6 +68477,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x11144,
0x11145,
0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -67881,7 +68567,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x1145A,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -67931,7 +68617,29 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x118E0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -68016,6 +68724,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x11EF3,
0x11EF7,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -68072,10 +68782,15 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -68321,8 +69036,10 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x1F18A,
0x1F676,
0x1F679,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -68333,6 +69050,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -68355,20 +69074,20 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */
typedef enum {
SB_Other = 0,
SB_ATerm = 1,
- SB_CR = 2,
- SB_Close = 3,
- SB_Extend = 4,
- SB_Format = 5,
- SB_LF = 6,
- SB_Lower = 7,
- SB_Numeric = 8,
- SB_OLetter = 9,
- SB_SContinue = 10,
- SB_STerm = 11,
+ SB_Close = 2,
+ SB_CR = 3,
+ SB_EDGE = 4,
+ SB_Extend = 5,
+ SB_Format = 6,
+ SB_LF = 7,
+ SB_Lower = 8,
+ SB_Numeric = 9,
+ SB_OLetter = 10,
+ SB_SContinue = 11,
SB_Sep = 12,
SB_Sp = 13,
- SB_Upper = 14,
- SB_EDGE = 15
+ SB_STerm = 14,
+ SB_Upper = 15
} SB_enum;
static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
@@ -69349,7 +70068,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_OLetter,
SB_Other,
SB_Extend,
- SB_Other,
SB_OLetter,
SB_Other,
SB_OLetter,
@@ -70545,7 +71263,12 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_Upper,
SB_Lower,
SB_Upper,
+ SB_Lower,
+ SB_Upper,
+ SB_Lower,
SB_Other,
+ SB_Upper,
+ SB_Lower,
SB_OLetter,
SB_Lower,
SB_OLetter,
@@ -70557,6 +71280,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_OLetter,
SB_Extend,
SB_Other,
+ SB_Extend,
+ SB_Other,
SB_OLetter,
SB_Other,
SB_STerm,
@@ -70648,6 +71373,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_Lower,
SB_Other,
SB_Lower,
+ SB_OLetter,
SB_Other,
SB_Lower,
SB_OLetter,
@@ -70903,6 +71629,12 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_Other,
SB_OLetter,
SB_Other,
+ SB_Extend,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_OLetter,
SB_Other,
SB_OLetter,
@@ -70912,6 +71644,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_Other,
SB_OLetter,
SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_Extend,
SB_OLetter,
SB_Extend,
@@ -70941,6 +71675,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_STerm,
SB_OLetter,
SB_Extend,
+ SB_OLetter,
SB_Other,
SB_OLetter,
SB_Extend,
@@ -70955,7 +71690,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_Other,
SB_Extend,
SB_STerm,
- SB_Other,
+ SB_Extend,
SB_Numeric,
SB_OLetter,
SB_Other,
@@ -71085,6 +71820,28 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_OLetter,
SB_Other,
SB_OLetter,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
+ SB_OLetter,
+ SB_Extend,
+ SB_Other,
+ SB_Extend,
+ SB_Other,
+ SB_Extend,
+ SB_OLetter,
+ SB_Extend,
+ SB_OLetter,
+ SB_Extend,
+ SB_STerm,
+ SB_Other,
+ SB_STerm,
+ SB_Other,
+ SB_Numeric,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
+ SB_OLetter,
SB_Extend,
SB_Other,
SB_Extend,
@@ -71174,6 +71931,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_Other,
SB_OLetter,
SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_Format,
SB_Other,
SB_OLetter,
@@ -71221,6 +71980,11 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_OLetter,
SB_Other,
SB_OLetter,
+ SB_Extend,
+ SB_Other,
+ SB_Extend,
+ SB_Other,
+ SB_OLetter,
SB_Other,
SB_OLetter,
SB_Other,
@@ -71471,6 +72235,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
SB_Other,
SB_Close,
SB_Other,
+ SB_Numeric,
+ SB_Other,
+ SB_OLetter,
+ SB_Other,
SB_OLetter,
SB_Other,
SB_OLetter,
@@ -71500,7 +72268,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
- 1644, /* Number of elements */
+ 1673, /* 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 */
@@ -71560,8 +72328,6 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x531,
0x557,
0x559,
- 0x589,
- 0x58A,
0x58B,
0x58D,
0x590,
@@ -71618,7 +72384,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -71742,7 +72508,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -71833,8 +72599,6 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -71848,7 +72612,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -72043,7 +72807,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -72106,6 +72870,8 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x1D79,
0x1DBF,
0x1DC2,
+ 0x1DF8,
+ 0x1DF9,
0x1DFA,
0x1DFB,
0x1E00,
@@ -72183,7 +72949,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2C2F,
0x2C30,
@@ -72225,7 +72991,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x2E00,
0x2E43,
0x2E44,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -72272,7 +73038,6 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x318F,
0x3190,
0x31A0,
- 0x31BB,
0x31C0,
0x31E4,
0x31F0,
@@ -72296,10 +73061,9 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x33E0,
0x33FF,
0x3400,
- 0x4DB6,
0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -72313,15 +73077,16 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0xA6A0,
0xA6F8,
0xA700,
+ 0xA708,
0xA722,
0xA788,
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA800,
- 0xA82C,
+ 0xA82D,
0xA830,
0xA833,
0xA836,
@@ -72381,7 +73146,8 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0xAB5C,
0xAB65,
0xAB66,
- 0xAB68,
+ 0xAB6A,
+ 0xAB6C,
0xAB70,
0xABC0,
0xABEE,
@@ -72493,7 +73259,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x10140,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -72629,10 +73395,18 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -72651,12 +73425,10 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -72713,11 +73485,9 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -72748,6 +73518,21 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x118F3,
0x118FF,
0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -72802,6 +73587,8 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FD0,
0x11FD2,
@@ -72857,10 +73644,16 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x16FE1,
0x16FE2,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18B00,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B001,
0x1B11F,
@@ -73067,11 +73860,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F200,
0x1F201,
@@ -73085,11 +73874,11 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -73106,32 +73895,38 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -73142,6 +73937,8 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -73185,139 +73982,143 @@ typedef enum {
SCX_Chakma = 21,
SCX_Cham = 22,
SCX_Cherokee = 23,
- SCX_Common = 24,
- SCX_Coptic = 25,
- SCX_Cuneiform = 26,
- SCX_Cypriot = 27,
- SCX_Cyrillic = 28,
- SCX_Deseret = 29,
- SCX_Devanagari = 30,
- SCX_Dogra = 31,
- SCX_Duployan = 32,
- SCX_Egyptian_Hieroglyphs = 33,
- SCX_Elbasan = 34,
- SCX_Elymaic = 35,
- SCX_Ethiopic = 36,
- SCX_Georgian = 37,
- SCX_Glagolitic = 38,
- SCX_Gothic = 39,
- SCX_Grantha = 40,
- SCX_Greek = 41,
- SCX_Gujarati = 42,
- SCX_Gunjala_Gondi = 43,
- SCX_Gurmukhi = 44,
- SCX_Han = 45,
- SCX_Hanb = 46,
- SCX_Hangul = 47,
- SCX_Hanifi_Rohingya = 48,
- SCX_Hanunoo = 49,
- SCX_Hatran = 50,
- SCX_Hebrew = 51,
- SCX_Hiragana = 52,
- SCX_Imperial_Aramaic = 53,
- SCX_Inherited = 54,
- SCX_Inscriptional_Pahlavi = 55,
- SCX_Inscriptional_Parthian = 56,
- SCX_Javanese = 57,
- SCX_Jpan = 58,
- SCX_Kaithi = 59,
- SCX_Kannada = 60,
- SCX_Katakana = 61,
- SCX_Kayah_Li = 62,
- SCX_Kharoshthi = 63,
- SCX_Khmer = 64,
- SCX_Khojki = 65,
- SCX_Khudawadi = 66,
- SCX_Kore = 67,
- SCX_Lao = 68,
- SCX_Latin = 69,
- SCX_Lepcha = 70,
- SCX_Limbu = 71,
- SCX_Linear_A = 72,
- SCX_Linear_B = 73,
- SCX_Lisu = 74,
- SCX_Lycian = 75,
- SCX_Lydian = 76,
- SCX_Mahajani = 77,
- SCX_Makasar = 78,
- SCX_Malayalam = 79,
- SCX_Mandaic = 80,
- SCX_Manichaean = 81,
- SCX_Marchen = 82,
- SCX_Masaram_Gondi = 83,
- SCX_Medefaidrin = 84,
- SCX_Meetei_Mayek = 85,
- SCX_Mende_Kikakui = 86,
- SCX_Meroitic_Cursive = 87,
- SCX_Meroitic_Hieroglyphs = 88,
- SCX_Miao = 89,
- SCX_Modi = 90,
- SCX_Mongolian = 91,
- SCX_Mro = 92,
- SCX_Multani = 93,
- SCX_Myanmar = 94,
- SCX_Nabataean = 95,
- SCX_Nandinagari = 96,
- SCX_New_Tai_Lue = 97,
- SCX_Newa = 98,
- SCX_Nko = 99,
- SCX_Nushu = 100,
- SCX_Nyiakeng_Puachue_Hmong = 101,
- SCX_Ogham = 102,
- SCX_Ol_Chiki = 103,
- SCX_Old_Hungarian = 104,
- SCX_Old_Italic = 105,
- SCX_Old_North_Arabian = 106,
- SCX_Old_Permic = 107,
- SCX_Old_Persian = 108,
- SCX_Old_Sogdian = 109,
- SCX_Old_South_Arabian = 110,
- SCX_Old_Turkic = 111,
- SCX_Oriya = 112,
- SCX_Osage = 113,
- SCX_Osmanya = 114,
- SCX_Pahawh_Hmong = 115,
- SCX_Palmyrene = 116,
- SCX_Pau_Cin_Hau = 117,
- SCX_Phags_Pa = 118,
- SCX_Phoenician = 119,
- SCX_Psalter_Pahlavi = 120,
- SCX_Rejang = 121,
- SCX_Runic = 122,
- SCX_Samaritan = 123,
- SCX_Saurashtra = 124,
- SCX_Sharada = 125,
- SCX_Shavian = 126,
- SCX_Siddham = 127,
- SCX_SignWriting = 128,
- SCX_Sinhala = 129,
- SCX_Sogdian = 130,
- SCX_Sora_Sompeng = 131,
- SCX_Soyombo = 132,
- SCX_Sundanese = 133,
- SCX_Syloti_Nagri = 134,
- SCX_Syriac = 135,
- SCX_Tagalog = 136,
- SCX_Tagbanwa = 137,
- SCX_Tai_Le = 138,
- SCX_Tai_Tham = 139,
- SCX_Tai_Viet = 140,
- SCX_Takri = 141,
- SCX_Tamil = 142,
- SCX_Tangut = 143,
- SCX_Telugu = 144,
- SCX_Thaana = 145,
- SCX_Thai = 146,
- SCX_Tibetan = 147,
- SCX_Tifinagh = 148,
- SCX_Tirhuta = 149,
- SCX_Ugaritic = 150,
- SCX_Vai = 151,
- SCX_Wancho = 152,
- SCX_Warang_Citi = 153,
- SCX_Yi = 154,
- SCX_Zanabazar_Square = 155,
- SCX_INVALID = 156,
+ SCX_Chorasmian = 24,
+ SCX_Common = 25,
+ SCX_Coptic = 26,
+ SCX_Cuneiform = 27,
+ SCX_Cypriot = 28,
+ SCX_Cyrillic = 29,
+ SCX_Deseret = 30,
+ SCX_Devanagari = 31,
+ SCX_Dives_Akuru = 32,
+ SCX_Dogra = 33,
+ SCX_Duployan = 34,
+ SCX_Egyptian_Hieroglyphs = 35,
+ SCX_Elbasan = 36,
+ SCX_Elymaic = 37,
+ SCX_Ethiopic = 38,
+ SCX_Georgian = 39,
+ SCX_Glagolitic = 40,
+ SCX_Gothic = 41,
+ SCX_Grantha = 42,
+ SCX_Greek = 43,
+ SCX_Gujarati = 44,
+ SCX_Gunjala_Gondi = 45,
+ SCX_Gurmukhi = 46,
+ SCX_Han = 47,
+ SCX_Hanb = 48,
+ SCX_Hangul = 49,
+ SCX_Hanifi_Rohingya = 50,
+ SCX_Hanunoo = 51,
+ SCX_Hatran = 52,
+ SCX_Hebrew = 53,
+ SCX_Hiragana = 54,
+ SCX_Imperial_Aramaic = 55,
+ SCX_Inherited = 56,
+ SCX_Inscriptional_Pahlavi = 57,
+ SCX_Inscriptional_Parthian = 58,
+ SCX_INVALID = 59,
+ SCX_Javanese = 60,
+ SCX_Jpan = 61,
+ SCX_Kaithi = 62,
+ SCX_Kannada = 63,
+ SCX_Katakana = 64,
+ SCX_Kayah_Li = 65,
+ SCX_Kharoshthi = 66,
+ SCX_Khitan_Small_Script = 67,
+ SCX_Khmer = 68,
+ SCX_Khojki = 69,
+ SCX_Khudawadi = 70,
+ SCX_Kore = 71,
+ SCX_Lao = 72,
+ SCX_Latin = 73,
+ SCX_Lepcha = 74,
+ SCX_Limbu = 75,
+ SCX_Linear_A = 76,
+ SCX_Linear_B = 77,
+ SCX_Lisu = 78,
+ SCX_Lycian = 79,
+ SCX_Lydian = 80,
+ SCX_Mahajani = 81,
+ SCX_Makasar = 82,
+ SCX_Malayalam = 83,
+ SCX_Mandaic = 84,
+ SCX_Manichaean = 85,
+ SCX_Marchen = 86,
+ SCX_Masaram_Gondi = 87,
+ SCX_Medefaidrin = 88,
+ SCX_Meetei_Mayek = 89,
+ SCX_Mende_Kikakui = 90,
+ SCX_Meroitic_Cursive = 91,
+ SCX_Meroitic_Hieroglyphs = 92,
+ SCX_Miao = 93,
+ SCX_Modi = 94,
+ SCX_Mongolian = 95,
+ SCX_Mro = 96,
+ SCX_Multani = 97,
+ SCX_Myanmar = 98,
+ SCX_Nabataean = 99,
+ SCX_Nandinagari = 100,
+ SCX_New_Tai_Lue = 101,
+ SCX_Newa = 102,
+ SCX_Nko = 103,
+ SCX_Nushu = 104,
+ SCX_Nyiakeng_Puachue_Hmong = 105,
+ SCX_Ogham = 106,
+ SCX_Ol_Chiki = 107,
+ SCX_Old_Hungarian = 108,
+ SCX_Old_Italic = 109,
+ SCX_Old_North_Arabian = 110,
+ SCX_Old_Permic = 111,
+ SCX_Old_Persian = 112,
+ SCX_Old_Sogdian = 113,
+ SCX_Old_South_Arabian = 114,
+ SCX_Old_Turkic = 115,
+ SCX_Oriya = 116,
+ SCX_Osage = 117,
+ SCX_Osmanya = 118,
+ SCX_Pahawh_Hmong = 119,
+ SCX_Palmyrene = 120,
+ SCX_Pau_Cin_Hau = 121,
+ SCX_Phags_Pa = 122,
+ SCX_Phoenician = 123,
+ SCX_Psalter_Pahlavi = 124,
+ SCX_Rejang = 125,
+ SCX_Runic = 126,
+ SCX_Samaritan = 127,
+ SCX_Saurashtra = 128,
+ SCX_Sharada = 129,
+ SCX_Shavian = 130,
+ SCX_Siddham = 131,
+ SCX_SignWriting = 132,
+ SCX_Sinhala = 133,
+ SCX_Sogdian = 134,
+ SCX_Sora_Sompeng = 135,
+ SCX_Soyombo = 136,
+ SCX_Sundanese = 137,
+ SCX_Syloti_Nagri = 138,
+ SCX_Syriac = 139,
+ SCX_Tagalog = 140,
+ SCX_Tagbanwa = 141,
+ SCX_Tai_Le = 142,
+ SCX_Tai_Tham = 143,
+ SCX_Tai_Viet = 144,
+ SCX_Takri = 145,
+ SCX_Tamil = 146,
+ SCX_Tangut = 147,
+ SCX_Telugu = 148,
+ SCX_Thaana = 149,
+ SCX_Thai = 150,
+ SCX_Tibetan = 151,
+ SCX_Tifinagh = 152,
+ SCX_Tirhuta = 153,
+ SCX_Ugaritic = 154,
+ SCX_Vai = 155,
+ SCX_Wancho = 156,
+ SCX_Warang_Citi = 157,
+ SCX_Yezidi = 158,
+ SCX_Yi = 159,
+ SCX_Zanabazar_Square = 160,
SCX_use_AUX_TABLE_1 = -1,
SCX_use_AUX_TABLE_2 = -2,
SCX_use_AUX_TABLE_3 = -3,
@@ -73370,7 +74171,9 @@ typedef enum {
SCX_use_AUX_TABLE_50 = -50,
SCX_use_AUX_TABLE_51 = -51,
SCX_use_AUX_TABLE_52 = -52,
- SCX_use_AUX_TABLE_53 = -53
+ SCX_use_AUX_TABLE_53 = -53,
+ SCX_use_AUX_TABLE_54 = -54,
+ SCX_use_AUX_TABLE_55 = -55
} SCX_enum;
# endif /* ASCII/Latin1 */
@@ -73402,24 +74205,20 @@ static const SCX_enum SCX_AUX_TABLE_4[] = {
};
static const SCX_enum SCX_AUX_TABLE_5[] = {
- SCX_Armenian,
- SCX_Georgian
-};
-
-static const SCX_enum SCX_AUX_TABLE_6[] = {
SCX_Arabic,
SCX_Hanifi_Rohingya,
SCX_Syriac,
- SCX_Thaana
+ SCX_Thaana,
+ SCX_Yezidi
};
-static const SCX_enum SCX_AUX_TABLE_7[] = {
+static const SCX_enum SCX_AUX_TABLE_6[] = {
SCX_Arabic,
SCX_Syriac,
SCX_Thaana
};
-static const SCX_enum SCX_AUX_TABLE_8[] = {
+static const SCX_enum SCX_AUX_TABLE_7[] = {
SCX_Adlam,
SCX_Arabic,
SCX_Hanifi_Rohingya,
@@ -73430,22 +74229,23 @@ static const SCX_enum SCX_AUX_TABLE_8[] = {
SCX_Syriac
};
-static const SCX_enum SCX_AUX_TABLE_9[] = {
+static const SCX_enum SCX_AUX_TABLE_8[] = {
SCX_Arabic,
SCX_Syriac
};
-static const SCX_enum SCX_AUX_TABLE_10[] = {
+static const SCX_enum SCX_AUX_TABLE_9[] = {
SCX_Arabic,
- SCX_Thaana
+ SCX_Thaana,
+ SCX_Yezidi
};
-static const SCX_enum SCX_AUX_TABLE_11[] = {
+static const SCX_enum SCX_AUX_TABLE_10[] = {
SCX_Arabic,
SCX_Hanifi_Rohingya
};
-static const SCX_enum SCX_AUX_TABLE_12[] = {
+static const SCX_enum SCX_AUX_TABLE_11[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
@@ -73461,7 +74261,7 @@ static const SCX_enum SCX_AUX_TABLE_12[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_13[] = {
+static const SCX_enum SCX_AUX_TABLE_12[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
@@ -73476,7 +74276,7 @@ static const SCX_enum SCX_AUX_TABLE_13[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_14[] = {
+static const SCX_enum SCX_AUX_TABLE_13[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Dogra,
@@ -73499,7 +74299,7 @@ static const SCX_enum SCX_AUX_TABLE_14[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_15[] = {
+static const SCX_enum SCX_AUX_TABLE_14[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Dogra,
@@ -73523,90 +74323,90 @@ static const SCX_enum SCX_AUX_TABLE_15[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_16[] = {
+static const SCX_enum SCX_AUX_TABLE_15[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Kaithi,
SCX_Mahajani
};
-static const SCX_enum SCX_AUX_TABLE_17[] = {
+static const SCX_enum SCX_AUX_TABLE_16[] = {
SCX_Bengali,
SCX_Chakma,
SCX_Syloti_Nagri
};
-static const SCX_enum SCX_AUX_TABLE_18[] = {
+static const SCX_enum SCX_AUX_TABLE_17[] = {
SCX_Gurmukhi,
SCX_Multani
};
-static const SCX_enum SCX_AUX_TABLE_19[] = {
+static const SCX_enum SCX_AUX_TABLE_18[] = {
SCX_Gujarati,
SCX_Khojki
};
-static const SCX_enum SCX_AUX_TABLE_20[] = {
+static const SCX_enum SCX_AUX_TABLE_19[] = {
SCX_Grantha,
SCX_Tamil
};
-static const SCX_enum SCX_AUX_TABLE_21[] = {
+static const SCX_enum SCX_AUX_TABLE_20[] = {
SCX_Kannada,
SCX_Nandinagari
};
-static const SCX_enum SCX_AUX_TABLE_22[] = {
+static const SCX_enum SCX_AUX_TABLE_21[] = {
SCX_Chakma,
SCX_Myanmar,
SCX_Tai_Le
};
-static const SCX_enum SCX_AUX_TABLE_23[] = {
+static const SCX_enum SCX_AUX_TABLE_22[] = {
SCX_Georgian,
SCX_Latin
};
-static const SCX_enum SCX_AUX_TABLE_24[] = {
+static const SCX_enum SCX_AUX_TABLE_23[] = {
SCX_Hangul,
SCX_Kore
};
-static const SCX_enum SCX_AUX_TABLE_25[] = {
+static const SCX_enum SCX_AUX_TABLE_24[] = {
SCX_Buhid,
SCX_Hanunoo,
SCX_Tagalog,
SCX_Tagbanwa
};
-static const SCX_enum SCX_AUX_TABLE_26[] = {
+static const SCX_enum SCX_AUX_TABLE_25[] = {
SCX_Mongolian,
SCX_Phags_Pa
};
-static const SCX_enum SCX_AUX_TABLE_27[] = {
+static const SCX_enum SCX_AUX_TABLE_26[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
SCX_Kannada
};
-static const SCX_enum SCX_AUX_TABLE_28[] = {
+static const SCX_enum SCX_AUX_TABLE_27[] = {
SCX_Devanagari,
SCX_Grantha
};
-static const SCX_enum SCX_AUX_TABLE_29[] = {
+static const SCX_enum SCX_AUX_TABLE_28[] = {
SCX_Bengali,
SCX_Devanagari
};
-static const SCX_enum SCX_AUX_TABLE_30[] = {
+static const SCX_enum SCX_AUX_TABLE_29[] = {
SCX_Devanagari,
SCX_Sharada
};
-static const SCX_enum SCX_AUX_TABLE_31[] = {
+static const SCX_enum SCX_AUX_TABLE_30[] = {
SCX_Devanagari,
SCX_Kannada,
SCX_Malayalam,
@@ -73615,12 +74415,12 @@ static const SCX_enum SCX_AUX_TABLE_31[] = {
SCX_Telugu
};
-static const SCX_enum SCX_AUX_TABLE_32[] = {
+static const SCX_enum SCX_AUX_TABLE_31[] = {
SCX_Devanagari,
SCX_Nandinagari
};
-static const SCX_enum SCX_AUX_TABLE_33[] = {
+static const SCX_enum SCX_AUX_TABLE_32[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
@@ -73631,12 +74431,17 @@ static const SCX_enum SCX_AUX_TABLE_33[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_34[] = {
+static const SCX_enum SCX_AUX_TABLE_33[] = {
SCX_Devanagari,
SCX_Grantha,
SCX_Kannada
};
+static const SCX_enum SCX_AUX_TABLE_34[] = {
+ SCX_Cyrillic,
+ SCX_Syriac
+};
+
static const SCX_enum SCX_AUX_TABLE_35[] = {
SCX_Latin,
SCX_Mongolian
@@ -73712,6 +74517,14 @@ static const SCX_enum SCX_AUX_TABLE_44[] = {
};
static const SCX_enum SCX_AUX_TABLE_45[] = {
+ SCX_Han,
+ SCX_Hanb,
+ SCX_Jpan,
+ SCX_Kore,
+ SCX_Latin
+};
+
+static const SCX_enum SCX_AUX_TABLE_46[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Gujarati,
@@ -73728,7 +74541,7 @@ static const SCX_enum SCX_AUX_TABLE_45[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_46[] = {
+static const SCX_enum SCX_AUX_TABLE_47[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Gujarati,
@@ -73744,7 +74557,7 @@ static const SCX_enum SCX_AUX_TABLE_46[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_47[] = {
+static const SCX_enum SCX_AUX_TABLE_48[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Gujarati,
@@ -73758,34 +74571,39 @@ static const SCX_enum SCX_AUX_TABLE_47[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_48[] = {
+static const SCX_enum SCX_AUX_TABLE_49[] = {
SCX_Devanagari,
SCX_Tamil
};
-static const SCX_enum SCX_AUX_TABLE_49[] = {
+static const SCX_enum SCX_AUX_TABLE_50[] = {
SCX_Kayah_Li,
SCX_Latin,
SCX_Myanmar
};
-static const SCX_enum SCX_AUX_TABLE_50[] = {
+static const SCX_enum SCX_AUX_TABLE_51[] = {
SCX_Buginese,
SCX_Javanese
};
-static const SCX_enum SCX_AUX_TABLE_51[] = {
+static const SCX_enum SCX_AUX_TABLE_52[] = {
+ SCX_Arabic,
+ SCX_Thaana
+};
+
+static const SCX_enum SCX_AUX_TABLE_53[] = {
SCX_Cypriot,
SCX_Linear_B
};
-static const SCX_enum SCX_AUX_TABLE_52[] = {
+static const SCX_enum SCX_AUX_TABLE_54[] = {
SCX_Cypriot,
SCX_Linear_A,
SCX_Linear_B
};
-static const SCX_enum SCX_AUX_TABLE_53[] = {
+static const SCX_enum SCX_AUX_TABLE_55[] = {
SCX_Arabic,
SCX_Coptic
};
@@ -73844,7 +74662,9 @@ static const SCX_enum * const SCX_AUX_TABLE_ptrs[] = {
SCX_AUX_TABLE_50,
SCX_AUX_TABLE_51,
SCX_AUX_TABLE_52,
- SCX_AUX_TABLE_53
+ SCX_AUX_TABLE_53,
+ SCX_AUX_TABLE_54,
+ SCX_AUX_TABLE_55
};
/* Parallel table to the above, giving the number of elements in each table
@@ -73856,36 +74676,36 @@ static const U8 SCX_AUX_TABLE_lengths[] = {
2 /* SCX_AUX_TABLE_2 */,
2 /* SCX_AUX_TABLE_3 */,
2 /* SCX_AUX_TABLE_4 */,
- 2 /* SCX_AUX_TABLE_5 */,
- 4 /* SCX_AUX_TABLE_6 */,
- 3 /* SCX_AUX_TABLE_7 */,
- 8 /* SCX_AUX_TABLE_8 */,
- 2 /* SCX_AUX_TABLE_9 */,
+ 5 /* SCX_AUX_TABLE_5 */,
+ 3 /* SCX_AUX_TABLE_6 */,
+ 8 /* SCX_AUX_TABLE_7 */,
+ 2 /* SCX_AUX_TABLE_8 */,
+ 3 /* SCX_AUX_TABLE_9 */,
2 /* SCX_AUX_TABLE_10 */,
- 2 /* SCX_AUX_TABLE_11 */,
- 13 /* SCX_AUX_TABLE_12 */,
- 12 /* SCX_AUX_TABLE_13 */,
- 20 /* SCX_AUX_TABLE_14 */,
- 21 /* SCX_AUX_TABLE_15 */,
- 4 /* SCX_AUX_TABLE_16 */,
- 3 /* SCX_AUX_TABLE_17 */,
+ 13 /* SCX_AUX_TABLE_11 */,
+ 12 /* SCX_AUX_TABLE_12 */,
+ 20 /* SCX_AUX_TABLE_13 */,
+ 21 /* SCX_AUX_TABLE_14 */,
+ 4 /* SCX_AUX_TABLE_15 */,
+ 3 /* SCX_AUX_TABLE_16 */,
+ 2 /* SCX_AUX_TABLE_17 */,
2 /* SCX_AUX_TABLE_18 */,
2 /* SCX_AUX_TABLE_19 */,
2 /* SCX_AUX_TABLE_20 */,
- 2 /* SCX_AUX_TABLE_21 */,
- 3 /* SCX_AUX_TABLE_22 */,
+ 3 /* SCX_AUX_TABLE_21 */,
+ 2 /* SCX_AUX_TABLE_22 */,
2 /* SCX_AUX_TABLE_23 */,
- 2 /* SCX_AUX_TABLE_24 */,
- 4 /* SCX_AUX_TABLE_25 */,
- 2 /* SCX_AUX_TABLE_26 */,
- 4 /* SCX_AUX_TABLE_27 */,
+ 4 /* SCX_AUX_TABLE_24 */,
+ 2 /* SCX_AUX_TABLE_25 */,
+ 4 /* SCX_AUX_TABLE_26 */,
+ 2 /* SCX_AUX_TABLE_27 */,
2 /* SCX_AUX_TABLE_28 */,
2 /* SCX_AUX_TABLE_29 */,
- 2 /* SCX_AUX_TABLE_30 */,
- 6 /* SCX_AUX_TABLE_31 */,
- 2 /* SCX_AUX_TABLE_32 */,
- 8 /* SCX_AUX_TABLE_33 */,
- 3 /* SCX_AUX_TABLE_34 */,
+ 6 /* SCX_AUX_TABLE_30 */,
+ 2 /* SCX_AUX_TABLE_31 */,
+ 8 /* SCX_AUX_TABLE_32 */,
+ 3 /* SCX_AUX_TABLE_33 */,
+ 2 /* SCX_AUX_TABLE_34 */,
2 /* SCX_AUX_TABLE_35 */,
3 /* SCX_AUX_TABLE_36 */,
4 /* SCX_AUX_TABLE_37 */,
@@ -73896,15 +74716,17 @@ static const U8 SCX_AUX_TABLE_lengths[] = {
6 /* SCX_AUX_TABLE_42 */,
2 /* SCX_AUX_TABLE_43 */,
2 /* SCX_AUX_TABLE_44 */,
- 14 /* SCX_AUX_TABLE_45 */,
- 13 /* SCX_AUX_TABLE_46 */,
- 11 /* SCX_AUX_TABLE_47 */,
- 2 /* SCX_AUX_TABLE_48 */,
- 3 /* SCX_AUX_TABLE_49 */,
- 2 /* SCX_AUX_TABLE_50 */,
+ 5 /* SCX_AUX_TABLE_45 */,
+ 14 /* SCX_AUX_TABLE_46 */,
+ 13 /* SCX_AUX_TABLE_47 */,
+ 11 /* SCX_AUX_TABLE_48 */,
+ 2 /* SCX_AUX_TABLE_49 */,
+ 3 /* SCX_AUX_TABLE_50 */,
2 /* SCX_AUX_TABLE_51 */,
- 3 /* SCX_AUX_TABLE_52 */,
- 2 /* SCX_AUX_TABLE_53 */
+ 2 /* SCX_AUX_TABLE_52 */,
+ 2 /* SCX_AUX_TABLE_53 */,
+ 3 /* SCX_AUX_TABLE_54 */,
+ 2 /* SCX_AUX_TABLE_55 */
};
/* This table, indexed by the script enum, gives the zero code point for that
@@ -73936,6 +74758,7 @@ static const UV script_zeros[] = {
0, /* Chakma */
0xaa50, /* Cham */
'0', /* Cherokee */
+ '0', /* Chorasmian */
0, /* Common */
'0', /* Coptic */
'0', /* Cuneiform */
@@ -73943,6 +74766,7 @@ static const UV script_zeros[] = {
'0', /* Cyrillic */
'0', /* Deseret */
0x966, /* Devanagari */
+ 0x11950, /* Dives_Akuru */
0x966, /* Dogra */
'0', /* Duployan */
'0', /* Egyptian_Hieroglyphs */
@@ -73969,6 +74793,7 @@ static const UV script_zeros[] = {
0, /* Inherited */
'0', /* Inscriptional_Pahlavi */
'0', /* Inscriptional_Parthian */
+ '0', /* INVALID */
0xa9d0, /* Javanese */
'0', /* Jpan */
0x966, /* Kaithi */
@@ -73976,6 +74801,7 @@ static const UV script_zeros[] = {
'0', /* Katakana */
0xa900, /* Kayah_Li */
'0', /* Kharoshthi */
+ '0', /* Khitan_Small_Script */
0x17e0, /* Khmer */
0xae6, /* Khojki */
0x112f0, /* Khudawadi */
@@ -74065,7 +74891,8 @@ static const UV script_zeros[] = {
'0', /* Ugaritic */
0xa620, /* Vai */
0x1e2f0, /* Wancho */
- 0x118e0 /* Warang_Citi */
+ 0x118e0, /* Warang_Citi */
+ 0x660 /* Yezidi */
};
static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
@@ -74125,8 +74952,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Armenian,
SCX_Unknown,
SCX_Armenian,
- SCX_use_AUX_TABLE_5,
- SCX_Armenian,
SCX_Unknown,
SCX_Armenian,
SCX_Unknown,
@@ -74139,23 +74964,23 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Arabic,
SCX_Common,
SCX_Arabic,
- SCX_use_AUX_TABLE_6,
+ SCX_use_AUX_TABLE_5,
SCX_Arabic,
+ SCX_use_AUX_TABLE_5,
SCX_use_AUX_TABLE_6,
- SCX_use_AUX_TABLE_7,
SCX_Unknown,
SCX_Arabic,
- SCX_use_AUX_TABLE_6,
+ SCX_use_AUX_TABLE_5,
+ SCX_Arabic,
+ SCX_use_AUX_TABLE_7,
SCX_Arabic,
SCX_use_AUX_TABLE_8,
SCX_Arabic,
SCX_use_AUX_TABLE_9,
SCX_Arabic,
- SCX_use_AUX_TABLE_10,
- SCX_Arabic,
- SCX_use_AUX_TABLE_9,
+ SCX_use_AUX_TABLE_8,
SCX_Arabic,
- SCX_use_AUX_TABLE_11,
+ SCX_use_AUX_TABLE_10,
SCX_Arabic,
SCX_Common,
SCX_Arabic,
@@ -74188,13 +75013,13 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Common,
SCX_Arabic,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_11,
SCX_use_AUX_TABLE_12,
- SCX_use_AUX_TABLE_13,
SCX_Inherited,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_13,
SCX_use_AUX_TABLE_14,
SCX_use_AUX_TABLE_15,
- SCX_use_AUX_TABLE_16,
SCX_Devanagari,
SCX_Bengali,
SCX_Unknown,
@@ -74222,7 +75047,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Bengali,
SCX_Unknown,
- SCX_use_AUX_TABLE_17,
+ SCX_use_AUX_TABLE_16,
SCX_Bengali,
SCX_Unknown,
SCX_Gurmukhi,
@@ -74255,7 +75080,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Gurmukhi,
SCX_Unknown,
- SCX_use_AUX_TABLE_18,
+ SCX_use_AUX_TABLE_17,
SCX_Gurmukhi,
SCX_Unknown,
SCX_Gujarati,
@@ -74282,7 +75107,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Gujarati,
SCX_Unknown,
- SCX_use_AUX_TABLE_19,
+ SCX_use_AUX_TABLE_18,
SCX_Gujarati,
SCX_Unknown,
SCX_Gujarati,
@@ -74345,7 +75170,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Tamil,
SCX_Unknown,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Tamil,
SCX_Unknown,
SCX_Telugu,
@@ -74393,7 +75218,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Kannada,
SCX_Unknown,
- SCX_use_AUX_TABLE_21,
+ SCX_use_AUX_TABLE_20,
SCX_Unknown,
SCX_Kannada,
SCX_Unknown,
@@ -74411,8 +75236,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Malayalam,
SCX_Unknown,
- SCX_Malayalam,
- SCX_Unknown,
SCX_Sinhala,
SCX_Unknown,
SCX_Sinhala,
@@ -74479,7 +75302,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Tibetan,
SCX_Unknown,
SCX_Myanmar,
- SCX_use_AUX_TABLE_22,
+ SCX_use_AUX_TABLE_21,
SCX_Myanmar,
SCX_Georgian,
SCX_Unknown,
@@ -74488,9 +75311,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Georgian,
SCX_Unknown,
SCX_Georgian,
- SCX_use_AUX_TABLE_23,
+ SCX_use_AUX_TABLE_22,
SCX_Georgian,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Ethiopic,
SCX_Unknown,
SCX_Ethiopic,
@@ -74543,7 +75366,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Tagalog,
SCX_Unknown,
SCX_Hanunoo,
- SCX_use_AUX_TABLE_25,
+ SCX_use_AUX_TABLE_24,
SCX_Unknown,
SCX_Buhid,
SCX_Unknown,
@@ -74560,9 +75383,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Khmer,
SCX_Unknown,
SCX_Mongolian,
- SCX_use_AUX_TABLE_26,
+ SCX_use_AUX_TABLE_25,
SCX_Mongolian,
- SCX_use_AUX_TABLE_26,
+ SCX_use_AUX_TABLE_25,
SCX_Mongolian,
SCX_Unknown,
SCX_Mongolian,
@@ -74630,33 +75453,33 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Georgian,
SCX_Sundanese,
SCX_Unknown,
- SCX_use_AUX_TABLE_27,
+ SCX_use_AUX_TABLE_26,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_26,
SCX_use_AUX_TABLE_27,
- SCX_use_AUX_TABLE_28,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_28,
SCX_use_AUX_TABLE_29,
- SCX_use_AUX_TABLE_30,
+ SCX_use_AUX_TABLE_28,
SCX_use_AUX_TABLE_29,
SCX_use_AUX_TABLE_30,
- SCX_use_AUX_TABLE_31,
- SCX_Devanagari,
- SCX_use_AUX_TABLE_30,
SCX_Devanagari,
- SCX_use_AUX_TABLE_30,
SCX_use_AUX_TABLE_29,
SCX_Devanagari,
- SCX_use_AUX_TABLE_32,
SCX_use_AUX_TABLE_29,
+ SCX_use_AUX_TABLE_28,
SCX_Devanagari,
- SCX_use_AUX_TABLE_29,
+ SCX_use_AUX_TABLE_31,
+ SCX_use_AUX_TABLE_28,
+ SCX_Devanagari,
+ SCX_use_AUX_TABLE_28,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_32,
+ SCX_use_AUX_TABLE_27,
SCX_use_AUX_TABLE_33,
SCX_use_AUX_TABLE_28,
- SCX_use_AUX_TABLE_34,
- SCX_use_AUX_TABLE_29,
SCX_Bengali,
- SCX_use_AUX_TABLE_28,
+ SCX_use_AUX_TABLE_27,
SCX_Nandinagari,
SCX_Unknown,
SCX_Latin,
@@ -74671,6 +75494,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Latin,
SCX_Greek,
SCX_Inherited,
+ SCX_use_AUX_TABLE_34,
+ SCX_Inherited,
SCX_Unknown,
SCX_Inherited,
SCX_Latin,
@@ -74812,7 +75637,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Common,
SCX_use_AUX_TABLE_37,
SCX_use_AUX_TABLE_40,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_use_AUX_TABLE_39,
SCX_use_AUX_TABLE_41,
SCX_Common,
@@ -74833,19 +75658,18 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_use_AUX_TABLE_1,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_use_AUX_TABLE_1,
- SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
SCX_use_AUX_TABLE_44,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Common,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Common,
SCX_use_AUX_TABLE_37,
SCX_Common,
@@ -74861,7 +75685,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_use_AUX_TABLE_37,
SCX_Common,
SCX_use_AUX_TABLE_37,
- SCX_Unknown,
SCX_Common,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
@@ -74877,6 +75700,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Cyrillic,
SCX_Bamum,
SCX_Unknown,
+ SCX_use_AUX_TABLE_45,
SCX_Common,
SCX_Latin,
SCX_Common,
@@ -74887,9 +75711,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Latin,
SCX_Syloti_Nagri,
SCX_Unknown,
- SCX_use_AUX_TABLE_45,
SCX_use_AUX_TABLE_46,
SCX_use_AUX_TABLE_47,
+ SCX_use_AUX_TABLE_48,
SCX_Unknown,
SCX_Phags_Pa,
SCX_Unknown,
@@ -74898,21 +75722,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Saurashtra,
SCX_Unknown,
SCX_Devanagari,
- SCX_use_AUX_TABLE_29,
+ SCX_use_AUX_TABLE_28,
SCX_Devanagari,
- SCX_use_AUX_TABLE_48,
+ SCX_use_AUX_TABLE_49,
SCX_Devanagari,
SCX_Kayah_Li,
- SCX_use_AUX_TABLE_49,
+ SCX_use_AUX_TABLE_50,
SCX_Kayah_Li,
SCX_Rejang,
SCX_Unknown,
SCX_Rejang,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_Javanese,
SCX_Unknown,
- SCX_use_AUX_TABLE_50,
+ SCX_use_AUX_TABLE_51,
SCX_Javanese,
SCX_Unknown,
SCX_Javanese,
@@ -74946,17 +75770,18 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Latin,
SCX_Greek,
SCX_Latin,
+ SCX_Common,
SCX_Unknown,
SCX_Cherokee,
SCX_Meetei_Mayek,
SCX_Unknown,
SCX_Meetei_Mayek,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
@@ -74987,9 +75812,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Arabic,
SCX_Unknown,
SCX_Arabic,
- SCX_use_AUX_TABLE_10,
+ SCX_use_AUX_TABLE_52,
SCX_Arabic,
- SCX_use_AUX_TABLE_10,
+ SCX_use_AUX_TABLE_52,
SCX_Unknown,
SCX_Inherited,
SCX_Common,
@@ -75020,15 +75845,15 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_use_AUX_TABLE_41,
SCX_use_AUX_TABLE_44,
SCX_use_AUX_TABLE_41,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_Common,
SCX_Unknown,
@@ -75050,11 +75875,11 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Linear_B,
SCX_Unknown,
- SCX_use_AUX_TABLE_51,
+ SCX_use_AUX_TABLE_53,
SCX_Unknown,
- SCX_use_AUX_TABLE_52,
+ SCX_use_AUX_TABLE_54,
SCX_Unknown,
- SCX_use_AUX_TABLE_51,
+ SCX_use_AUX_TABLE_53,
SCX_Greek,
SCX_Unknown,
SCX_Common,
@@ -75068,7 +75893,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Carian,
SCX_Unknown,
- SCX_use_AUX_TABLE_53,
+ SCX_use_AUX_TABLE_55,
SCX_Unknown,
SCX_Old_Italic,
SCX_Unknown,
@@ -75194,10 +76019,18 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Arabic,
SCX_Unknown,
+ SCX_Yezidi,
+ SCX_Unknown,
+ SCX_Yezidi,
+ SCX_Unknown,
+ SCX_Yezidi,
+ SCX_Unknown,
SCX_Old_Sogdian,
SCX_Unknown,
SCX_Sogdian,
SCX_Unknown,
+ SCX_Chorasmian,
+ SCX_Unknown,
SCX_Elymaic,
SCX_Unknown,
SCX_Brahmi,
@@ -75221,8 +76054,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Sharada,
SCX_Unknown,
- SCX_Sharada,
- SCX_Unknown,
SCX_Sinhala,
SCX_Unknown,
SCX_Khojki,
@@ -75244,9 +76075,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Khudawadi,
SCX_Unknown,
SCX_Grantha,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Grantha,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Unknown,
SCX_Grantha,
SCX_Unknown,
@@ -75260,7 +76091,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Grantha,
SCX_Unknown,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Grantha,
SCX_Unknown,
SCX_Grantha,
@@ -75281,8 +76112,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Newa,
SCX_Unknown,
- SCX_Newa,
- SCX_Unknown,
SCX_Tirhuta,
SCX_Unknown,
SCX_Tirhuta,
@@ -75312,6 +76141,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Warang_Citi,
SCX_Unknown,
SCX_Warang_Citi,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
SCX_Unknown,
SCX_Nandinagari,
SCX_Unknown,
@@ -75367,10 +76211,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_Makasar,
SCX_Unknown,
+ SCX_Lisu,
+ SCX_Unknown,
SCX_Tamil,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Tamil,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Tamil,
SCX_Unknown,
SCX_Tamil,
@@ -75421,8 +76267,14 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Tangut,
SCX_Nushu,
SCX_Common,
+ SCX_Khitan_Small_Script,
+ SCX_Unknown,
+ SCX_use_AUX_TABLE_37,
+ SCX_Unknown,
+ SCX_Tangut,
SCX_Unknown,
SCX_Tangut,
+ SCX_Khitan_Small_Script,
SCX_Unknown,
SCX_Tangut,
SCX_Unknown,
@@ -75634,18 +76486,20 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Common,
SCX_Unknown,
SCX_Common,
- SCX_Unknown,
+ SCX_use_AUX_TABLE_43,
SCX_Common,
SCX_Unknown,
SCX_Common,
- SCX_use_AUX_TABLE_43,
+ SCX_Unknown,
SCX_Common,
SCX_Unknown,
+ SCX_use_AUX_TABLE_37,
+ SCX_Unknown,
SCX_Common,
SCX_Unknown,
SCX_Common,
SCX_Unknown,
- SCX_use_AUX_TABLE_37,
+ SCX_Common,
SCX_Unknown,
SCX_Common,
SCX_Unknown,
@@ -75707,6 +76561,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
+ SCX_use_AUX_TABLE_37,
+ SCX_Unknown,
SCX_Common,
SCX_Unknown,
SCX_Common,
@@ -75727,7 +76583,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
- 1670, /* Number of elements */
+ 1699, /* 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 */
@@ -75813,8 +76669,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x531,
0x557,
0x559,
- 0x589,
- 0x58A,
0x58B,
0x58D,
0x590,
@@ -75871,7 +76725,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -75995,7 +76849,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -76086,8 +76940,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -76101,7 +76953,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -76296,7 +77148,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -76359,6 +77211,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x1D79,
0x1DBF,
0x1DC2,
+ 0x1DF8,
+ 0x1DF9,
0x1DFA,
0x1DFB,
0x1E00,
@@ -76436,7 +77290,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2C2F,
0x2C30,
@@ -76478,7 +77332,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x2E00,
0x2E43,
0x2E44,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -76525,7 +77379,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x318F,
0x3190,
0x31A0,
- 0x31BB,
0x31C0,
0x31E4,
0x31F0,
@@ -76549,10 +77402,9 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x33E0,
0x33FF,
0x3400,
- 0x4DB6,
0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -76566,15 +77418,16 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0xA6A0,
0xA6F8,
0xA700,
+ 0xA708,
0xA722,
0xA788,
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA800,
- 0xA82C,
+ 0xA82D,
0xA830,
0xA833,
0xA836,
@@ -76634,7 +77487,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0xAB5C,
0xAB65,
0xAB66,
- 0xAB68,
+ 0xAB6A,
+ 0xAB6C,
0xAB70,
0xABC0,
0xABEE,
@@ -76746,7 +77600,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x10140,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -76882,10 +77736,18 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -76904,12 +77766,10 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -76966,11 +77826,9 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -77001,6 +77859,21 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x118F3,
0x118FF,
0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -77055,6 +77928,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FD0,
0x11FD2,
@@ -77110,10 +77985,16 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x16FE1,
0x16FE2,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18B00,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B001,
0x1B11F,
@@ -77320,11 +78201,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F200,
0x1F201,
@@ -77338,11 +78215,11 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -77359,32 +78236,38 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -77395,6 +78278,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -77441,139 +78326,143 @@ typedef enum {
SCX_Chakma = 21,
SCX_Cham = 22,
SCX_Cherokee = 23,
- SCX_Common = 24,
- SCX_Coptic = 25,
- SCX_Cuneiform = 26,
- SCX_Cypriot = 27,
- SCX_Cyrillic = 28,
- SCX_Deseret = 29,
- SCX_Devanagari = 30,
- SCX_Dogra = 31,
- SCX_Duployan = 32,
- SCX_Egyptian_Hieroglyphs = 33,
- SCX_Elbasan = 34,
- SCX_Elymaic = 35,
- SCX_Ethiopic = 36,
- SCX_Georgian = 37,
- SCX_Glagolitic = 38,
- SCX_Gothic = 39,
- SCX_Grantha = 40,
- SCX_Greek = 41,
- SCX_Gujarati = 42,
- SCX_Gunjala_Gondi = 43,
- SCX_Gurmukhi = 44,
- SCX_Han = 45,
- SCX_Hanb = 46,
- SCX_Hangul = 47,
- SCX_Hanifi_Rohingya = 48,
- SCX_Hanunoo = 49,
- SCX_Hatran = 50,
- SCX_Hebrew = 51,
- SCX_Hiragana = 52,
- SCX_Imperial_Aramaic = 53,
- SCX_Inherited = 54,
- SCX_Inscriptional_Pahlavi = 55,
- SCX_Inscriptional_Parthian = 56,
- SCX_Javanese = 57,
- SCX_Jpan = 58,
- SCX_Kaithi = 59,
- SCX_Kannada = 60,
- SCX_Katakana = 61,
- SCX_Kayah_Li = 62,
- SCX_Kharoshthi = 63,
- SCX_Khmer = 64,
- SCX_Khojki = 65,
- SCX_Khudawadi = 66,
- SCX_Kore = 67,
- SCX_Lao = 68,
- SCX_Latin = 69,
- SCX_Lepcha = 70,
- SCX_Limbu = 71,
- SCX_Linear_A = 72,
- SCX_Linear_B = 73,
- SCX_Lisu = 74,
- SCX_Lycian = 75,
- SCX_Lydian = 76,
- SCX_Mahajani = 77,
- SCX_Makasar = 78,
- SCX_Malayalam = 79,
- SCX_Mandaic = 80,
- SCX_Manichaean = 81,
- SCX_Marchen = 82,
- SCX_Masaram_Gondi = 83,
- SCX_Medefaidrin = 84,
- SCX_Meetei_Mayek = 85,
- SCX_Mende_Kikakui = 86,
- SCX_Meroitic_Cursive = 87,
- SCX_Meroitic_Hieroglyphs = 88,
- SCX_Miao = 89,
- SCX_Modi = 90,
- SCX_Mongolian = 91,
- SCX_Mro = 92,
- SCX_Multani = 93,
- SCX_Myanmar = 94,
- SCX_Nabataean = 95,
- SCX_Nandinagari = 96,
- SCX_New_Tai_Lue = 97,
- SCX_Newa = 98,
- SCX_Nko = 99,
- SCX_Nushu = 100,
- SCX_Nyiakeng_Puachue_Hmong = 101,
- SCX_Ogham = 102,
- SCX_Ol_Chiki = 103,
- SCX_Old_Hungarian = 104,
- SCX_Old_Italic = 105,
- SCX_Old_North_Arabian = 106,
- SCX_Old_Permic = 107,
- SCX_Old_Persian = 108,
- SCX_Old_Sogdian = 109,
- SCX_Old_South_Arabian = 110,
- SCX_Old_Turkic = 111,
- SCX_Oriya = 112,
- SCX_Osage = 113,
- SCX_Osmanya = 114,
- SCX_Pahawh_Hmong = 115,
- SCX_Palmyrene = 116,
- SCX_Pau_Cin_Hau = 117,
- SCX_Phags_Pa = 118,
- SCX_Phoenician = 119,
- SCX_Psalter_Pahlavi = 120,
- SCX_Rejang = 121,
- SCX_Runic = 122,
- SCX_Samaritan = 123,
- SCX_Saurashtra = 124,
- SCX_Sharada = 125,
- SCX_Shavian = 126,
- SCX_Siddham = 127,
- SCX_SignWriting = 128,
- SCX_Sinhala = 129,
- SCX_Sogdian = 130,
- SCX_Sora_Sompeng = 131,
- SCX_Soyombo = 132,
- SCX_Sundanese = 133,
- SCX_Syloti_Nagri = 134,
- SCX_Syriac = 135,
- SCX_Tagalog = 136,
- SCX_Tagbanwa = 137,
- SCX_Tai_Le = 138,
- SCX_Tai_Tham = 139,
- SCX_Tai_Viet = 140,
- SCX_Takri = 141,
- SCX_Tamil = 142,
- SCX_Tangut = 143,
- SCX_Telugu = 144,
- SCX_Thaana = 145,
- SCX_Thai = 146,
- SCX_Tibetan = 147,
- SCX_Tifinagh = 148,
- SCX_Tirhuta = 149,
- SCX_Ugaritic = 150,
- SCX_Vai = 151,
- SCX_Wancho = 152,
- SCX_Warang_Citi = 153,
- SCX_Yi = 154,
- SCX_Zanabazar_Square = 155,
- SCX_INVALID = 156,
+ SCX_Chorasmian = 24,
+ SCX_Common = 25,
+ SCX_Coptic = 26,
+ SCX_Cuneiform = 27,
+ SCX_Cypriot = 28,
+ SCX_Cyrillic = 29,
+ SCX_Deseret = 30,
+ SCX_Devanagari = 31,
+ SCX_Dives_Akuru = 32,
+ SCX_Dogra = 33,
+ SCX_Duployan = 34,
+ SCX_Egyptian_Hieroglyphs = 35,
+ SCX_Elbasan = 36,
+ SCX_Elymaic = 37,
+ SCX_Ethiopic = 38,
+ SCX_Georgian = 39,
+ SCX_Glagolitic = 40,
+ SCX_Gothic = 41,
+ SCX_Grantha = 42,
+ SCX_Greek = 43,
+ SCX_Gujarati = 44,
+ SCX_Gunjala_Gondi = 45,
+ SCX_Gurmukhi = 46,
+ SCX_Han = 47,
+ SCX_Hanb = 48,
+ SCX_Hangul = 49,
+ SCX_Hanifi_Rohingya = 50,
+ SCX_Hanunoo = 51,
+ SCX_Hatran = 52,
+ SCX_Hebrew = 53,
+ SCX_Hiragana = 54,
+ SCX_Imperial_Aramaic = 55,
+ SCX_Inherited = 56,
+ SCX_Inscriptional_Pahlavi = 57,
+ SCX_Inscriptional_Parthian = 58,
+ SCX_INVALID = 59,
+ SCX_Javanese = 60,
+ SCX_Jpan = 61,
+ SCX_Kaithi = 62,
+ SCX_Kannada = 63,
+ SCX_Katakana = 64,
+ SCX_Kayah_Li = 65,
+ SCX_Kharoshthi = 66,
+ SCX_Khitan_Small_Script = 67,
+ SCX_Khmer = 68,
+ SCX_Khojki = 69,
+ SCX_Khudawadi = 70,
+ SCX_Kore = 71,
+ SCX_Lao = 72,
+ SCX_Latin = 73,
+ SCX_Lepcha = 74,
+ SCX_Limbu = 75,
+ SCX_Linear_A = 76,
+ SCX_Linear_B = 77,
+ SCX_Lisu = 78,
+ SCX_Lycian = 79,
+ SCX_Lydian = 80,
+ SCX_Mahajani = 81,
+ SCX_Makasar = 82,
+ SCX_Malayalam = 83,
+ SCX_Mandaic = 84,
+ SCX_Manichaean = 85,
+ SCX_Marchen = 86,
+ SCX_Masaram_Gondi = 87,
+ SCX_Medefaidrin = 88,
+ SCX_Meetei_Mayek = 89,
+ SCX_Mende_Kikakui = 90,
+ SCX_Meroitic_Cursive = 91,
+ SCX_Meroitic_Hieroglyphs = 92,
+ SCX_Miao = 93,
+ SCX_Modi = 94,
+ SCX_Mongolian = 95,
+ SCX_Mro = 96,
+ SCX_Multani = 97,
+ SCX_Myanmar = 98,
+ SCX_Nabataean = 99,
+ SCX_Nandinagari = 100,
+ SCX_New_Tai_Lue = 101,
+ SCX_Newa = 102,
+ SCX_Nko = 103,
+ SCX_Nushu = 104,
+ SCX_Nyiakeng_Puachue_Hmong = 105,
+ SCX_Ogham = 106,
+ SCX_Ol_Chiki = 107,
+ SCX_Old_Hungarian = 108,
+ SCX_Old_Italic = 109,
+ SCX_Old_North_Arabian = 110,
+ SCX_Old_Permic = 111,
+ SCX_Old_Persian = 112,
+ SCX_Old_Sogdian = 113,
+ SCX_Old_South_Arabian = 114,
+ SCX_Old_Turkic = 115,
+ SCX_Oriya = 116,
+ SCX_Osage = 117,
+ SCX_Osmanya = 118,
+ SCX_Pahawh_Hmong = 119,
+ SCX_Palmyrene = 120,
+ SCX_Pau_Cin_Hau = 121,
+ SCX_Phags_Pa = 122,
+ SCX_Phoenician = 123,
+ SCX_Psalter_Pahlavi = 124,
+ SCX_Rejang = 125,
+ SCX_Runic = 126,
+ SCX_Samaritan = 127,
+ SCX_Saurashtra = 128,
+ SCX_Sharada = 129,
+ SCX_Shavian = 130,
+ SCX_Siddham = 131,
+ SCX_SignWriting = 132,
+ SCX_Sinhala = 133,
+ SCX_Sogdian = 134,
+ SCX_Sora_Sompeng = 135,
+ SCX_Soyombo = 136,
+ SCX_Sundanese = 137,
+ SCX_Syloti_Nagri = 138,
+ SCX_Syriac = 139,
+ SCX_Tagalog = 140,
+ SCX_Tagbanwa = 141,
+ SCX_Tai_Le = 142,
+ SCX_Tai_Tham = 143,
+ SCX_Tai_Viet = 144,
+ SCX_Takri = 145,
+ SCX_Tamil = 146,
+ SCX_Tangut = 147,
+ SCX_Telugu = 148,
+ SCX_Thaana = 149,
+ SCX_Thai = 150,
+ SCX_Tibetan = 151,
+ SCX_Tifinagh = 152,
+ SCX_Tirhuta = 153,
+ SCX_Ugaritic = 154,
+ SCX_Vai = 155,
+ SCX_Wancho = 156,
+ SCX_Warang_Citi = 157,
+ SCX_Yezidi = 158,
+ SCX_Yi = 159,
+ SCX_Zanabazar_Square = 160,
SCX_use_AUX_TABLE_1 = -1,
SCX_use_AUX_TABLE_2 = -2,
SCX_use_AUX_TABLE_3 = -3,
@@ -77626,7 +78515,9 @@ typedef enum {
SCX_use_AUX_TABLE_50 = -50,
SCX_use_AUX_TABLE_51 = -51,
SCX_use_AUX_TABLE_52 = -52,
- SCX_use_AUX_TABLE_53 = -53
+ SCX_use_AUX_TABLE_53 = -53,
+ SCX_use_AUX_TABLE_54 = -54,
+ SCX_use_AUX_TABLE_55 = -55
} SCX_enum;
# endif /* EBCDIC 1047 */
@@ -77661,24 +78552,20 @@ static const SCX_enum SCX_AUX_TABLE_4[] = {
};
static const SCX_enum SCX_AUX_TABLE_5[] = {
- SCX_Armenian,
- SCX_Georgian
-};
-
-static const SCX_enum SCX_AUX_TABLE_6[] = {
SCX_Arabic,
SCX_Hanifi_Rohingya,
SCX_Syriac,
- SCX_Thaana
+ SCX_Thaana,
+ SCX_Yezidi
};
-static const SCX_enum SCX_AUX_TABLE_7[] = {
+static const SCX_enum SCX_AUX_TABLE_6[] = {
SCX_Arabic,
SCX_Syriac,
SCX_Thaana
};
-static const SCX_enum SCX_AUX_TABLE_8[] = {
+static const SCX_enum SCX_AUX_TABLE_7[] = {
SCX_Adlam,
SCX_Arabic,
SCX_Hanifi_Rohingya,
@@ -77689,22 +78576,23 @@ static const SCX_enum SCX_AUX_TABLE_8[] = {
SCX_Syriac
};
-static const SCX_enum SCX_AUX_TABLE_9[] = {
+static const SCX_enum SCX_AUX_TABLE_8[] = {
SCX_Arabic,
SCX_Syriac
};
-static const SCX_enum SCX_AUX_TABLE_10[] = {
+static const SCX_enum SCX_AUX_TABLE_9[] = {
SCX_Arabic,
- SCX_Thaana
+ SCX_Thaana,
+ SCX_Yezidi
};
-static const SCX_enum SCX_AUX_TABLE_11[] = {
+static const SCX_enum SCX_AUX_TABLE_10[] = {
SCX_Arabic,
SCX_Hanifi_Rohingya
};
-static const SCX_enum SCX_AUX_TABLE_12[] = {
+static const SCX_enum SCX_AUX_TABLE_11[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
@@ -77720,7 +78608,7 @@ static const SCX_enum SCX_AUX_TABLE_12[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_13[] = {
+static const SCX_enum SCX_AUX_TABLE_12[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
@@ -77735,7 +78623,7 @@ static const SCX_enum SCX_AUX_TABLE_13[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_14[] = {
+static const SCX_enum SCX_AUX_TABLE_13[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Dogra,
@@ -77758,7 +78646,7 @@ static const SCX_enum SCX_AUX_TABLE_14[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_15[] = {
+static const SCX_enum SCX_AUX_TABLE_14[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Dogra,
@@ -77782,90 +78670,90 @@ static const SCX_enum SCX_AUX_TABLE_15[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_16[] = {
+static const SCX_enum SCX_AUX_TABLE_15[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Kaithi,
SCX_Mahajani
};
-static const SCX_enum SCX_AUX_TABLE_17[] = {
+static const SCX_enum SCX_AUX_TABLE_16[] = {
SCX_Bengali,
SCX_Chakma,
SCX_Syloti_Nagri
};
-static const SCX_enum SCX_AUX_TABLE_18[] = {
+static const SCX_enum SCX_AUX_TABLE_17[] = {
SCX_Gurmukhi,
SCX_Multani
};
-static const SCX_enum SCX_AUX_TABLE_19[] = {
+static const SCX_enum SCX_AUX_TABLE_18[] = {
SCX_Gujarati,
SCX_Khojki
};
-static const SCX_enum SCX_AUX_TABLE_20[] = {
+static const SCX_enum SCX_AUX_TABLE_19[] = {
SCX_Grantha,
SCX_Tamil
};
-static const SCX_enum SCX_AUX_TABLE_21[] = {
+static const SCX_enum SCX_AUX_TABLE_20[] = {
SCX_Kannada,
SCX_Nandinagari
};
-static const SCX_enum SCX_AUX_TABLE_22[] = {
+static const SCX_enum SCX_AUX_TABLE_21[] = {
SCX_Chakma,
SCX_Myanmar,
SCX_Tai_Le
};
-static const SCX_enum SCX_AUX_TABLE_23[] = {
+static const SCX_enum SCX_AUX_TABLE_22[] = {
SCX_Georgian,
SCX_Latin
};
-static const SCX_enum SCX_AUX_TABLE_24[] = {
+static const SCX_enum SCX_AUX_TABLE_23[] = {
SCX_Hangul,
SCX_Kore
};
-static const SCX_enum SCX_AUX_TABLE_25[] = {
+static const SCX_enum SCX_AUX_TABLE_24[] = {
SCX_Buhid,
SCX_Hanunoo,
SCX_Tagalog,
SCX_Tagbanwa
};
-static const SCX_enum SCX_AUX_TABLE_26[] = {
+static const SCX_enum SCX_AUX_TABLE_25[] = {
SCX_Mongolian,
SCX_Phags_Pa
};
-static const SCX_enum SCX_AUX_TABLE_27[] = {
+static const SCX_enum SCX_AUX_TABLE_26[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
SCX_Kannada
};
-static const SCX_enum SCX_AUX_TABLE_28[] = {
+static const SCX_enum SCX_AUX_TABLE_27[] = {
SCX_Devanagari,
SCX_Grantha
};
-static const SCX_enum SCX_AUX_TABLE_29[] = {
+static const SCX_enum SCX_AUX_TABLE_28[] = {
SCX_Bengali,
SCX_Devanagari
};
-static const SCX_enum SCX_AUX_TABLE_30[] = {
+static const SCX_enum SCX_AUX_TABLE_29[] = {
SCX_Devanagari,
SCX_Sharada
};
-static const SCX_enum SCX_AUX_TABLE_31[] = {
+static const SCX_enum SCX_AUX_TABLE_30[] = {
SCX_Devanagari,
SCX_Kannada,
SCX_Malayalam,
@@ -77874,12 +78762,12 @@ static const SCX_enum SCX_AUX_TABLE_31[] = {
SCX_Telugu
};
-static const SCX_enum SCX_AUX_TABLE_32[] = {
+static const SCX_enum SCX_AUX_TABLE_31[] = {
SCX_Devanagari,
SCX_Nandinagari
};
-static const SCX_enum SCX_AUX_TABLE_33[] = {
+static const SCX_enum SCX_AUX_TABLE_32[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
@@ -77890,12 +78778,17 @@ static const SCX_enum SCX_AUX_TABLE_33[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_34[] = {
+static const SCX_enum SCX_AUX_TABLE_33[] = {
SCX_Devanagari,
SCX_Grantha,
SCX_Kannada
};
+static const SCX_enum SCX_AUX_TABLE_34[] = {
+ SCX_Cyrillic,
+ SCX_Syriac
+};
+
static const SCX_enum SCX_AUX_TABLE_35[] = {
SCX_Latin,
SCX_Mongolian
@@ -77971,6 +78864,14 @@ static const SCX_enum SCX_AUX_TABLE_44[] = {
};
static const SCX_enum SCX_AUX_TABLE_45[] = {
+ SCX_Han,
+ SCX_Hanb,
+ SCX_Jpan,
+ SCX_Kore,
+ SCX_Latin
+};
+
+static const SCX_enum SCX_AUX_TABLE_46[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Gujarati,
@@ -77987,7 +78888,7 @@ static const SCX_enum SCX_AUX_TABLE_45[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_46[] = {
+static const SCX_enum SCX_AUX_TABLE_47[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Gujarati,
@@ -78003,7 +78904,7 @@ static const SCX_enum SCX_AUX_TABLE_46[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_47[] = {
+static const SCX_enum SCX_AUX_TABLE_48[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Gujarati,
@@ -78017,34 +78918,39 @@ static const SCX_enum SCX_AUX_TABLE_47[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_48[] = {
+static const SCX_enum SCX_AUX_TABLE_49[] = {
SCX_Devanagari,
SCX_Tamil
};
-static const SCX_enum SCX_AUX_TABLE_49[] = {
+static const SCX_enum SCX_AUX_TABLE_50[] = {
SCX_Kayah_Li,
SCX_Latin,
SCX_Myanmar
};
-static const SCX_enum SCX_AUX_TABLE_50[] = {
+static const SCX_enum SCX_AUX_TABLE_51[] = {
SCX_Buginese,
SCX_Javanese
};
-static const SCX_enum SCX_AUX_TABLE_51[] = {
+static const SCX_enum SCX_AUX_TABLE_52[] = {
+ SCX_Arabic,
+ SCX_Thaana
+};
+
+static const SCX_enum SCX_AUX_TABLE_53[] = {
SCX_Cypriot,
SCX_Linear_B
};
-static const SCX_enum SCX_AUX_TABLE_52[] = {
+static const SCX_enum SCX_AUX_TABLE_54[] = {
SCX_Cypriot,
SCX_Linear_A,
SCX_Linear_B
};
-static const SCX_enum SCX_AUX_TABLE_53[] = {
+static const SCX_enum SCX_AUX_TABLE_55[] = {
SCX_Arabic,
SCX_Coptic
};
@@ -78103,7 +79009,9 @@ static const SCX_enum * const SCX_AUX_TABLE_ptrs[] = {
SCX_AUX_TABLE_50,
SCX_AUX_TABLE_51,
SCX_AUX_TABLE_52,
- SCX_AUX_TABLE_53
+ SCX_AUX_TABLE_53,
+ SCX_AUX_TABLE_54,
+ SCX_AUX_TABLE_55
};
/* Parallel table to the above, giving the number of elements in each table
@@ -78115,36 +79023,36 @@ static const U8 SCX_AUX_TABLE_lengths[] = {
2 /* SCX_AUX_TABLE_2 */,
2 /* SCX_AUX_TABLE_3 */,
2 /* SCX_AUX_TABLE_4 */,
- 2 /* SCX_AUX_TABLE_5 */,
- 4 /* SCX_AUX_TABLE_6 */,
- 3 /* SCX_AUX_TABLE_7 */,
- 8 /* SCX_AUX_TABLE_8 */,
- 2 /* SCX_AUX_TABLE_9 */,
+ 5 /* SCX_AUX_TABLE_5 */,
+ 3 /* SCX_AUX_TABLE_6 */,
+ 8 /* SCX_AUX_TABLE_7 */,
+ 2 /* SCX_AUX_TABLE_8 */,
+ 3 /* SCX_AUX_TABLE_9 */,
2 /* SCX_AUX_TABLE_10 */,
- 2 /* SCX_AUX_TABLE_11 */,
- 13 /* SCX_AUX_TABLE_12 */,
- 12 /* SCX_AUX_TABLE_13 */,
- 20 /* SCX_AUX_TABLE_14 */,
- 21 /* SCX_AUX_TABLE_15 */,
- 4 /* SCX_AUX_TABLE_16 */,
- 3 /* SCX_AUX_TABLE_17 */,
+ 13 /* SCX_AUX_TABLE_11 */,
+ 12 /* SCX_AUX_TABLE_12 */,
+ 20 /* SCX_AUX_TABLE_13 */,
+ 21 /* SCX_AUX_TABLE_14 */,
+ 4 /* SCX_AUX_TABLE_15 */,
+ 3 /* SCX_AUX_TABLE_16 */,
+ 2 /* SCX_AUX_TABLE_17 */,
2 /* SCX_AUX_TABLE_18 */,
2 /* SCX_AUX_TABLE_19 */,
2 /* SCX_AUX_TABLE_20 */,
- 2 /* SCX_AUX_TABLE_21 */,
- 3 /* SCX_AUX_TABLE_22 */,
+ 3 /* SCX_AUX_TABLE_21 */,
+ 2 /* SCX_AUX_TABLE_22 */,
2 /* SCX_AUX_TABLE_23 */,
- 2 /* SCX_AUX_TABLE_24 */,
- 4 /* SCX_AUX_TABLE_25 */,
- 2 /* SCX_AUX_TABLE_26 */,
- 4 /* SCX_AUX_TABLE_27 */,
+ 4 /* SCX_AUX_TABLE_24 */,
+ 2 /* SCX_AUX_TABLE_25 */,
+ 4 /* SCX_AUX_TABLE_26 */,
+ 2 /* SCX_AUX_TABLE_27 */,
2 /* SCX_AUX_TABLE_28 */,
2 /* SCX_AUX_TABLE_29 */,
- 2 /* SCX_AUX_TABLE_30 */,
- 6 /* SCX_AUX_TABLE_31 */,
- 2 /* SCX_AUX_TABLE_32 */,
- 8 /* SCX_AUX_TABLE_33 */,
- 3 /* SCX_AUX_TABLE_34 */,
+ 6 /* SCX_AUX_TABLE_30 */,
+ 2 /* SCX_AUX_TABLE_31 */,
+ 8 /* SCX_AUX_TABLE_32 */,
+ 3 /* SCX_AUX_TABLE_33 */,
+ 2 /* SCX_AUX_TABLE_34 */,
2 /* SCX_AUX_TABLE_35 */,
3 /* SCX_AUX_TABLE_36 */,
4 /* SCX_AUX_TABLE_37 */,
@@ -78155,15 +79063,17 @@ static const U8 SCX_AUX_TABLE_lengths[] = {
6 /* SCX_AUX_TABLE_42 */,
2 /* SCX_AUX_TABLE_43 */,
2 /* SCX_AUX_TABLE_44 */,
- 14 /* SCX_AUX_TABLE_45 */,
- 13 /* SCX_AUX_TABLE_46 */,
- 11 /* SCX_AUX_TABLE_47 */,
- 2 /* SCX_AUX_TABLE_48 */,
- 3 /* SCX_AUX_TABLE_49 */,
- 2 /* SCX_AUX_TABLE_50 */,
+ 5 /* SCX_AUX_TABLE_45 */,
+ 14 /* SCX_AUX_TABLE_46 */,
+ 13 /* SCX_AUX_TABLE_47 */,
+ 11 /* SCX_AUX_TABLE_48 */,
+ 2 /* SCX_AUX_TABLE_49 */,
+ 3 /* SCX_AUX_TABLE_50 */,
2 /* SCX_AUX_TABLE_51 */,
- 3 /* SCX_AUX_TABLE_52 */,
- 2 /* SCX_AUX_TABLE_53 */
+ 2 /* SCX_AUX_TABLE_52 */,
+ 2 /* SCX_AUX_TABLE_53 */,
+ 3 /* SCX_AUX_TABLE_54 */,
+ 2 /* SCX_AUX_TABLE_55 */
};
/* This table, indexed by the script enum, gives the zero code point for that
@@ -78195,6 +79105,7 @@ static const UV script_zeros[] = {
0, /* Chakma */
0xaa50, /* Cham */
'0', /* Cherokee */
+ '0', /* Chorasmian */
0, /* Common */
'0', /* Coptic */
'0', /* Cuneiform */
@@ -78202,6 +79113,7 @@ static const UV script_zeros[] = {
'0', /* Cyrillic */
'0', /* Deseret */
0x966, /* Devanagari */
+ 0x11950, /* Dives_Akuru */
0x966, /* Dogra */
'0', /* Duployan */
'0', /* Egyptian_Hieroglyphs */
@@ -78228,6 +79140,7 @@ static const UV script_zeros[] = {
0, /* Inherited */
'0', /* Inscriptional_Pahlavi */
'0', /* Inscriptional_Parthian */
+ '0', /* INVALID */
0xa9d0, /* Javanese */
'0', /* Jpan */
0x966, /* Kaithi */
@@ -78235,6 +79148,7 @@ static const UV script_zeros[] = {
'0', /* Katakana */
0xa900, /* Kayah_Li */
'0', /* Kharoshthi */
+ '0', /* Khitan_Small_Script */
0x17e0, /* Khmer */
0xae6, /* Khojki */
0x112f0, /* Khudawadi */
@@ -78324,7 +79238,8 @@ static const UV script_zeros[] = {
'0', /* Ugaritic */
0xa620, /* Vai */
0x1e2f0, /* Wancho */
- 0x118e0 /* Warang_Citi */
+ 0x118e0, /* Warang_Citi */
+ 0x660 /* Yezidi */
};
static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
@@ -78410,8 +79325,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Armenian,
SCX_Unknown,
SCX_Armenian,
- SCX_use_AUX_TABLE_5,
- SCX_Armenian,
SCX_Unknown,
SCX_Armenian,
SCX_Unknown,
@@ -78424,23 +79337,23 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Arabic,
SCX_Common,
SCX_Arabic,
- SCX_use_AUX_TABLE_6,
+ SCX_use_AUX_TABLE_5,
SCX_Arabic,
+ SCX_use_AUX_TABLE_5,
SCX_use_AUX_TABLE_6,
- SCX_use_AUX_TABLE_7,
SCX_Unknown,
SCX_Arabic,
- SCX_use_AUX_TABLE_6,
+ SCX_use_AUX_TABLE_5,
+ SCX_Arabic,
+ SCX_use_AUX_TABLE_7,
SCX_Arabic,
SCX_use_AUX_TABLE_8,
SCX_Arabic,
SCX_use_AUX_TABLE_9,
SCX_Arabic,
- SCX_use_AUX_TABLE_10,
- SCX_Arabic,
- SCX_use_AUX_TABLE_9,
+ SCX_use_AUX_TABLE_8,
SCX_Arabic,
- SCX_use_AUX_TABLE_11,
+ SCX_use_AUX_TABLE_10,
SCX_Arabic,
SCX_Common,
SCX_Arabic,
@@ -78473,13 +79386,13 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Common,
SCX_Arabic,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_11,
SCX_use_AUX_TABLE_12,
- SCX_use_AUX_TABLE_13,
SCX_Inherited,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_13,
SCX_use_AUX_TABLE_14,
SCX_use_AUX_TABLE_15,
- SCX_use_AUX_TABLE_16,
SCX_Devanagari,
SCX_Bengali,
SCX_Unknown,
@@ -78507,7 +79420,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Bengali,
SCX_Unknown,
- SCX_use_AUX_TABLE_17,
+ SCX_use_AUX_TABLE_16,
SCX_Bengali,
SCX_Unknown,
SCX_Gurmukhi,
@@ -78540,7 +79453,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Gurmukhi,
SCX_Unknown,
- SCX_use_AUX_TABLE_18,
+ SCX_use_AUX_TABLE_17,
SCX_Gurmukhi,
SCX_Unknown,
SCX_Gujarati,
@@ -78567,7 +79480,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Gujarati,
SCX_Unknown,
- SCX_use_AUX_TABLE_19,
+ SCX_use_AUX_TABLE_18,
SCX_Gujarati,
SCX_Unknown,
SCX_Gujarati,
@@ -78630,7 +79543,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Tamil,
SCX_Unknown,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Tamil,
SCX_Unknown,
SCX_Telugu,
@@ -78678,7 +79591,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Kannada,
SCX_Unknown,
- SCX_use_AUX_TABLE_21,
+ SCX_use_AUX_TABLE_20,
SCX_Unknown,
SCX_Kannada,
SCX_Unknown,
@@ -78696,8 +79609,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Malayalam,
SCX_Unknown,
- SCX_Malayalam,
- SCX_Unknown,
SCX_Sinhala,
SCX_Unknown,
SCX_Sinhala,
@@ -78764,7 +79675,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Tibetan,
SCX_Unknown,
SCX_Myanmar,
- SCX_use_AUX_TABLE_22,
+ SCX_use_AUX_TABLE_21,
SCX_Myanmar,
SCX_Georgian,
SCX_Unknown,
@@ -78773,9 +79684,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Georgian,
SCX_Unknown,
SCX_Georgian,
- SCX_use_AUX_TABLE_23,
+ SCX_use_AUX_TABLE_22,
SCX_Georgian,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Ethiopic,
SCX_Unknown,
SCX_Ethiopic,
@@ -78828,7 +79739,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Tagalog,
SCX_Unknown,
SCX_Hanunoo,
- SCX_use_AUX_TABLE_25,
+ SCX_use_AUX_TABLE_24,
SCX_Unknown,
SCX_Buhid,
SCX_Unknown,
@@ -78845,9 +79756,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Khmer,
SCX_Unknown,
SCX_Mongolian,
- SCX_use_AUX_TABLE_26,
+ SCX_use_AUX_TABLE_25,
SCX_Mongolian,
- SCX_use_AUX_TABLE_26,
+ SCX_use_AUX_TABLE_25,
SCX_Mongolian,
SCX_Unknown,
SCX_Mongolian,
@@ -78915,33 +79826,33 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Georgian,
SCX_Sundanese,
SCX_Unknown,
- SCX_use_AUX_TABLE_27,
+ SCX_use_AUX_TABLE_26,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_26,
SCX_use_AUX_TABLE_27,
- SCX_use_AUX_TABLE_28,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_28,
SCX_use_AUX_TABLE_29,
- SCX_use_AUX_TABLE_30,
+ SCX_use_AUX_TABLE_28,
SCX_use_AUX_TABLE_29,
SCX_use_AUX_TABLE_30,
- SCX_use_AUX_TABLE_31,
- SCX_Devanagari,
- SCX_use_AUX_TABLE_30,
SCX_Devanagari,
- SCX_use_AUX_TABLE_30,
SCX_use_AUX_TABLE_29,
SCX_Devanagari,
- SCX_use_AUX_TABLE_32,
SCX_use_AUX_TABLE_29,
+ SCX_use_AUX_TABLE_28,
SCX_Devanagari,
- SCX_use_AUX_TABLE_29,
+ SCX_use_AUX_TABLE_31,
+ SCX_use_AUX_TABLE_28,
+ SCX_Devanagari,
+ SCX_use_AUX_TABLE_28,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_32,
+ SCX_use_AUX_TABLE_27,
SCX_use_AUX_TABLE_33,
SCX_use_AUX_TABLE_28,
- SCX_use_AUX_TABLE_34,
- SCX_use_AUX_TABLE_29,
SCX_Bengali,
- SCX_use_AUX_TABLE_28,
+ SCX_use_AUX_TABLE_27,
SCX_Nandinagari,
SCX_Unknown,
SCX_Latin,
@@ -78956,6 +79867,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Latin,
SCX_Greek,
SCX_Inherited,
+ SCX_use_AUX_TABLE_34,
+ SCX_Inherited,
SCX_Unknown,
SCX_Inherited,
SCX_Latin,
@@ -79097,7 +80010,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Common,
SCX_use_AUX_TABLE_37,
SCX_use_AUX_TABLE_40,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_use_AUX_TABLE_39,
SCX_use_AUX_TABLE_41,
SCX_Common,
@@ -79118,19 +80031,18 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_use_AUX_TABLE_1,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_use_AUX_TABLE_1,
- SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
SCX_use_AUX_TABLE_44,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Common,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Common,
SCX_use_AUX_TABLE_37,
SCX_Common,
@@ -79146,7 +80058,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_use_AUX_TABLE_37,
SCX_Common,
SCX_use_AUX_TABLE_37,
- SCX_Unknown,
SCX_Common,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
@@ -79162,6 +80073,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Cyrillic,
SCX_Bamum,
SCX_Unknown,
+ SCX_use_AUX_TABLE_45,
SCX_Common,
SCX_Latin,
SCX_Common,
@@ -79172,9 +80084,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Latin,
SCX_Syloti_Nagri,
SCX_Unknown,
- SCX_use_AUX_TABLE_45,
SCX_use_AUX_TABLE_46,
SCX_use_AUX_TABLE_47,
+ SCX_use_AUX_TABLE_48,
SCX_Unknown,
SCX_Phags_Pa,
SCX_Unknown,
@@ -79183,21 +80095,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Saurashtra,
SCX_Unknown,
SCX_Devanagari,
- SCX_use_AUX_TABLE_29,
+ SCX_use_AUX_TABLE_28,
SCX_Devanagari,
- SCX_use_AUX_TABLE_48,
+ SCX_use_AUX_TABLE_49,
SCX_Devanagari,
SCX_Kayah_Li,
- SCX_use_AUX_TABLE_49,
+ SCX_use_AUX_TABLE_50,
SCX_Kayah_Li,
SCX_Rejang,
SCX_Unknown,
SCX_Rejang,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_Javanese,
SCX_Unknown,
- SCX_use_AUX_TABLE_50,
+ SCX_use_AUX_TABLE_51,
SCX_Javanese,
SCX_Unknown,
SCX_Javanese,
@@ -79231,17 +80143,18 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Latin,
SCX_Greek,
SCX_Latin,
+ SCX_Common,
SCX_Unknown,
SCX_Cherokee,
SCX_Meetei_Mayek,
SCX_Unknown,
SCX_Meetei_Mayek,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
@@ -79272,9 +80185,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Arabic,
SCX_Unknown,
SCX_Arabic,
- SCX_use_AUX_TABLE_10,
+ SCX_use_AUX_TABLE_52,
SCX_Arabic,
- SCX_use_AUX_TABLE_10,
+ SCX_use_AUX_TABLE_52,
SCX_Unknown,
SCX_Inherited,
SCX_Common,
@@ -79305,15 +80218,15 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_use_AUX_TABLE_41,
SCX_use_AUX_TABLE_44,
SCX_use_AUX_TABLE_41,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_Common,
SCX_Unknown,
@@ -79335,11 +80248,11 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Linear_B,
SCX_Unknown,
- SCX_use_AUX_TABLE_51,
+ SCX_use_AUX_TABLE_53,
SCX_Unknown,
- SCX_use_AUX_TABLE_52,
+ SCX_use_AUX_TABLE_54,
SCX_Unknown,
- SCX_use_AUX_TABLE_51,
+ SCX_use_AUX_TABLE_53,
SCX_Greek,
SCX_Unknown,
SCX_Common,
@@ -79353,7 +80266,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Carian,
SCX_Unknown,
- SCX_use_AUX_TABLE_53,
+ SCX_use_AUX_TABLE_55,
SCX_Unknown,
SCX_Old_Italic,
SCX_Unknown,
@@ -79479,10 +80392,18 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Arabic,
SCX_Unknown,
+ SCX_Yezidi,
+ SCX_Unknown,
+ SCX_Yezidi,
+ SCX_Unknown,
+ SCX_Yezidi,
+ SCX_Unknown,
SCX_Old_Sogdian,
SCX_Unknown,
SCX_Sogdian,
SCX_Unknown,
+ SCX_Chorasmian,
+ SCX_Unknown,
SCX_Elymaic,
SCX_Unknown,
SCX_Brahmi,
@@ -79506,8 +80427,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Sharada,
SCX_Unknown,
- SCX_Sharada,
- SCX_Unknown,
SCX_Sinhala,
SCX_Unknown,
SCX_Khojki,
@@ -79529,9 +80448,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Khudawadi,
SCX_Unknown,
SCX_Grantha,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Grantha,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Unknown,
SCX_Grantha,
SCX_Unknown,
@@ -79545,7 +80464,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Grantha,
SCX_Unknown,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Grantha,
SCX_Unknown,
SCX_Grantha,
@@ -79566,8 +80485,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Newa,
SCX_Unknown,
- SCX_Newa,
- SCX_Unknown,
SCX_Tirhuta,
SCX_Unknown,
SCX_Tirhuta,
@@ -79597,6 +80514,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Warang_Citi,
SCX_Unknown,
SCX_Warang_Citi,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
SCX_Unknown,
SCX_Nandinagari,
SCX_Unknown,
@@ -79652,10 +80584,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_Makasar,
SCX_Unknown,
+ SCX_Lisu,
+ SCX_Unknown,
SCX_Tamil,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Tamil,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Tamil,
SCX_Unknown,
SCX_Tamil,
@@ -79706,8 +80640,14 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Tangut,
SCX_Nushu,
SCX_Common,
+ SCX_Khitan_Small_Script,
+ SCX_Unknown,
+ SCX_use_AUX_TABLE_37,
+ SCX_Unknown,
+ SCX_Tangut,
SCX_Unknown,
SCX_Tangut,
+ SCX_Khitan_Small_Script,
SCX_Unknown,
SCX_Tangut,
SCX_Unknown,
@@ -79919,18 +80859,20 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Common,
SCX_Unknown,
SCX_Common,
- SCX_Unknown,
+ SCX_use_AUX_TABLE_43,
SCX_Common,
SCX_Unknown,
SCX_Common,
- SCX_use_AUX_TABLE_43,
+ SCX_Unknown,
SCX_Common,
SCX_Unknown,
+ SCX_use_AUX_TABLE_37,
+ SCX_Unknown,
SCX_Common,
SCX_Unknown,
SCX_Common,
SCX_Unknown,
- SCX_use_AUX_TABLE_37,
+ SCX_Common,
SCX_Unknown,
SCX_Common,
SCX_Unknown,
@@ -79992,6 +80934,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
+ SCX_use_AUX_TABLE_37,
+ SCX_Unknown,
SCX_Common,
SCX_Unknown,
SCX_Common,
@@ -80012,7 +80956,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
- 1666, /* Number of elements */
+ 1695, /* 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 */
@@ -80094,8 +81038,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x531,
0x557,
0x559,
- 0x589,
- 0x58A,
0x58B,
0x58D,
0x590,
@@ -80152,7 +81094,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -80276,7 +81218,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -80367,8 +81309,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -80382,7 +81322,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -80577,7 +81517,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -80640,6 +81580,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x1D79,
0x1DBF,
0x1DC2,
+ 0x1DF8,
+ 0x1DF9,
0x1DFA,
0x1DFB,
0x1E00,
@@ -80717,7 +81659,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2C2F,
0x2C30,
@@ -80759,7 +81701,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x2E00,
0x2E43,
0x2E44,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -80806,7 +81748,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x318F,
0x3190,
0x31A0,
- 0x31BB,
0x31C0,
0x31E4,
0x31F0,
@@ -80830,10 +81771,9 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x33E0,
0x33FF,
0x3400,
- 0x4DB6,
0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -80847,15 +81787,16 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0xA6A0,
0xA6F8,
0xA700,
+ 0xA708,
0xA722,
0xA788,
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA800,
- 0xA82C,
+ 0xA82D,
0xA830,
0xA833,
0xA836,
@@ -80915,7 +81856,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0xAB5C,
0xAB65,
0xAB66,
- 0xAB68,
+ 0xAB6A,
+ 0xAB6C,
0xAB70,
0xABC0,
0xABEE,
@@ -81027,7 +81969,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x10140,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -81163,10 +82105,18 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -81185,12 +82135,10 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -81247,11 +82195,9 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -81282,6 +82228,21 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x118F3,
0x118FF,
0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -81336,6 +82297,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FD0,
0x11FD2,
@@ -81391,10 +82354,16 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x16FE1,
0x16FE2,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18B00,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B001,
0x1B11F,
@@ -81601,11 +82570,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F200,
0x1F201,
@@ -81619,11 +82584,11 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -81640,32 +82605,38 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -81676,6 +82647,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -81722,139 +82695,143 @@ typedef enum {
SCX_Chakma = 21,
SCX_Cham = 22,
SCX_Cherokee = 23,
- SCX_Common = 24,
- SCX_Coptic = 25,
- SCX_Cuneiform = 26,
- SCX_Cypriot = 27,
- SCX_Cyrillic = 28,
- SCX_Deseret = 29,
- SCX_Devanagari = 30,
- SCX_Dogra = 31,
- SCX_Duployan = 32,
- SCX_Egyptian_Hieroglyphs = 33,
- SCX_Elbasan = 34,
- SCX_Elymaic = 35,
- SCX_Ethiopic = 36,
- SCX_Georgian = 37,
- SCX_Glagolitic = 38,
- SCX_Gothic = 39,
- SCX_Grantha = 40,
- SCX_Greek = 41,
- SCX_Gujarati = 42,
- SCX_Gunjala_Gondi = 43,
- SCX_Gurmukhi = 44,
- SCX_Han = 45,
- SCX_Hanb = 46,
- SCX_Hangul = 47,
- SCX_Hanifi_Rohingya = 48,
- SCX_Hanunoo = 49,
- SCX_Hatran = 50,
- SCX_Hebrew = 51,
- SCX_Hiragana = 52,
- SCX_Imperial_Aramaic = 53,
- SCX_Inherited = 54,
- SCX_Inscriptional_Pahlavi = 55,
- SCX_Inscriptional_Parthian = 56,
- SCX_Javanese = 57,
- SCX_Jpan = 58,
- SCX_Kaithi = 59,
- SCX_Kannada = 60,
- SCX_Katakana = 61,
- SCX_Kayah_Li = 62,
- SCX_Kharoshthi = 63,
- SCX_Khmer = 64,
- SCX_Khojki = 65,
- SCX_Khudawadi = 66,
- SCX_Kore = 67,
- SCX_Lao = 68,
- SCX_Latin = 69,
- SCX_Lepcha = 70,
- SCX_Limbu = 71,
- SCX_Linear_A = 72,
- SCX_Linear_B = 73,
- SCX_Lisu = 74,
- SCX_Lycian = 75,
- SCX_Lydian = 76,
- SCX_Mahajani = 77,
- SCX_Makasar = 78,
- SCX_Malayalam = 79,
- SCX_Mandaic = 80,
- SCX_Manichaean = 81,
- SCX_Marchen = 82,
- SCX_Masaram_Gondi = 83,
- SCX_Medefaidrin = 84,
- SCX_Meetei_Mayek = 85,
- SCX_Mende_Kikakui = 86,
- SCX_Meroitic_Cursive = 87,
- SCX_Meroitic_Hieroglyphs = 88,
- SCX_Miao = 89,
- SCX_Modi = 90,
- SCX_Mongolian = 91,
- SCX_Mro = 92,
- SCX_Multani = 93,
- SCX_Myanmar = 94,
- SCX_Nabataean = 95,
- SCX_Nandinagari = 96,
- SCX_New_Tai_Lue = 97,
- SCX_Newa = 98,
- SCX_Nko = 99,
- SCX_Nushu = 100,
- SCX_Nyiakeng_Puachue_Hmong = 101,
- SCX_Ogham = 102,
- SCX_Ol_Chiki = 103,
- SCX_Old_Hungarian = 104,
- SCX_Old_Italic = 105,
- SCX_Old_North_Arabian = 106,
- SCX_Old_Permic = 107,
- SCX_Old_Persian = 108,
- SCX_Old_Sogdian = 109,
- SCX_Old_South_Arabian = 110,
- SCX_Old_Turkic = 111,
- SCX_Oriya = 112,
- SCX_Osage = 113,
- SCX_Osmanya = 114,
- SCX_Pahawh_Hmong = 115,
- SCX_Palmyrene = 116,
- SCX_Pau_Cin_Hau = 117,
- SCX_Phags_Pa = 118,
- SCX_Phoenician = 119,
- SCX_Psalter_Pahlavi = 120,
- SCX_Rejang = 121,
- SCX_Runic = 122,
- SCX_Samaritan = 123,
- SCX_Saurashtra = 124,
- SCX_Sharada = 125,
- SCX_Shavian = 126,
- SCX_Siddham = 127,
- SCX_SignWriting = 128,
- SCX_Sinhala = 129,
- SCX_Sogdian = 130,
- SCX_Sora_Sompeng = 131,
- SCX_Soyombo = 132,
- SCX_Sundanese = 133,
- SCX_Syloti_Nagri = 134,
- SCX_Syriac = 135,
- SCX_Tagalog = 136,
- SCX_Tagbanwa = 137,
- SCX_Tai_Le = 138,
- SCX_Tai_Tham = 139,
- SCX_Tai_Viet = 140,
- SCX_Takri = 141,
- SCX_Tamil = 142,
- SCX_Tangut = 143,
- SCX_Telugu = 144,
- SCX_Thaana = 145,
- SCX_Thai = 146,
- SCX_Tibetan = 147,
- SCX_Tifinagh = 148,
- SCX_Tirhuta = 149,
- SCX_Ugaritic = 150,
- SCX_Vai = 151,
- SCX_Wancho = 152,
- SCX_Warang_Citi = 153,
- SCX_Yi = 154,
- SCX_Zanabazar_Square = 155,
- SCX_INVALID = 156,
+ SCX_Chorasmian = 24,
+ SCX_Common = 25,
+ SCX_Coptic = 26,
+ SCX_Cuneiform = 27,
+ SCX_Cypriot = 28,
+ SCX_Cyrillic = 29,
+ SCX_Deseret = 30,
+ SCX_Devanagari = 31,
+ SCX_Dives_Akuru = 32,
+ SCX_Dogra = 33,
+ SCX_Duployan = 34,
+ SCX_Egyptian_Hieroglyphs = 35,
+ SCX_Elbasan = 36,
+ SCX_Elymaic = 37,
+ SCX_Ethiopic = 38,
+ SCX_Georgian = 39,
+ SCX_Glagolitic = 40,
+ SCX_Gothic = 41,
+ SCX_Grantha = 42,
+ SCX_Greek = 43,
+ SCX_Gujarati = 44,
+ SCX_Gunjala_Gondi = 45,
+ SCX_Gurmukhi = 46,
+ SCX_Han = 47,
+ SCX_Hanb = 48,
+ SCX_Hangul = 49,
+ SCX_Hanifi_Rohingya = 50,
+ SCX_Hanunoo = 51,
+ SCX_Hatran = 52,
+ SCX_Hebrew = 53,
+ SCX_Hiragana = 54,
+ SCX_Imperial_Aramaic = 55,
+ SCX_Inherited = 56,
+ SCX_Inscriptional_Pahlavi = 57,
+ SCX_Inscriptional_Parthian = 58,
+ SCX_INVALID = 59,
+ SCX_Javanese = 60,
+ SCX_Jpan = 61,
+ SCX_Kaithi = 62,
+ SCX_Kannada = 63,
+ SCX_Katakana = 64,
+ SCX_Kayah_Li = 65,
+ SCX_Kharoshthi = 66,
+ SCX_Khitan_Small_Script = 67,
+ SCX_Khmer = 68,
+ SCX_Khojki = 69,
+ SCX_Khudawadi = 70,
+ SCX_Kore = 71,
+ SCX_Lao = 72,
+ SCX_Latin = 73,
+ SCX_Lepcha = 74,
+ SCX_Limbu = 75,
+ SCX_Linear_A = 76,
+ SCX_Linear_B = 77,
+ SCX_Lisu = 78,
+ SCX_Lycian = 79,
+ SCX_Lydian = 80,
+ SCX_Mahajani = 81,
+ SCX_Makasar = 82,
+ SCX_Malayalam = 83,
+ SCX_Mandaic = 84,
+ SCX_Manichaean = 85,
+ SCX_Marchen = 86,
+ SCX_Masaram_Gondi = 87,
+ SCX_Medefaidrin = 88,
+ SCX_Meetei_Mayek = 89,
+ SCX_Mende_Kikakui = 90,
+ SCX_Meroitic_Cursive = 91,
+ SCX_Meroitic_Hieroglyphs = 92,
+ SCX_Miao = 93,
+ SCX_Modi = 94,
+ SCX_Mongolian = 95,
+ SCX_Mro = 96,
+ SCX_Multani = 97,
+ SCX_Myanmar = 98,
+ SCX_Nabataean = 99,
+ SCX_Nandinagari = 100,
+ SCX_New_Tai_Lue = 101,
+ SCX_Newa = 102,
+ SCX_Nko = 103,
+ SCX_Nushu = 104,
+ SCX_Nyiakeng_Puachue_Hmong = 105,
+ SCX_Ogham = 106,
+ SCX_Ol_Chiki = 107,
+ SCX_Old_Hungarian = 108,
+ SCX_Old_Italic = 109,
+ SCX_Old_North_Arabian = 110,
+ SCX_Old_Permic = 111,
+ SCX_Old_Persian = 112,
+ SCX_Old_Sogdian = 113,
+ SCX_Old_South_Arabian = 114,
+ SCX_Old_Turkic = 115,
+ SCX_Oriya = 116,
+ SCX_Osage = 117,
+ SCX_Osmanya = 118,
+ SCX_Pahawh_Hmong = 119,
+ SCX_Palmyrene = 120,
+ SCX_Pau_Cin_Hau = 121,
+ SCX_Phags_Pa = 122,
+ SCX_Phoenician = 123,
+ SCX_Psalter_Pahlavi = 124,
+ SCX_Rejang = 125,
+ SCX_Runic = 126,
+ SCX_Samaritan = 127,
+ SCX_Saurashtra = 128,
+ SCX_Sharada = 129,
+ SCX_Shavian = 130,
+ SCX_Siddham = 131,
+ SCX_SignWriting = 132,
+ SCX_Sinhala = 133,
+ SCX_Sogdian = 134,
+ SCX_Sora_Sompeng = 135,
+ SCX_Soyombo = 136,
+ SCX_Sundanese = 137,
+ SCX_Syloti_Nagri = 138,
+ SCX_Syriac = 139,
+ SCX_Tagalog = 140,
+ SCX_Tagbanwa = 141,
+ SCX_Tai_Le = 142,
+ SCX_Tai_Tham = 143,
+ SCX_Tai_Viet = 144,
+ SCX_Takri = 145,
+ SCX_Tamil = 146,
+ SCX_Tangut = 147,
+ SCX_Telugu = 148,
+ SCX_Thaana = 149,
+ SCX_Thai = 150,
+ SCX_Tibetan = 151,
+ SCX_Tifinagh = 152,
+ SCX_Tirhuta = 153,
+ SCX_Ugaritic = 154,
+ SCX_Vai = 155,
+ SCX_Wancho = 156,
+ SCX_Warang_Citi = 157,
+ SCX_Yezidi = 158,
+ SCX_Yi = 159,
+ SCX_Zanabazar_Square = 160,
SCX_use_AUX_TABLE_1 = -1,
SCX_use_AUX_TABLE_2 = -2,
SCX_use_AUX_TABLE_3 = -3,
@@ -81907,7 +82884,9 @@ typedef enum {
SCX_use_AUX_TABLE_50 = -50,
SCX_use_AUX_TABLE_51 = -51,
SCX_use_AUX_TABLE_52 = -52,
- SCX_use_AUX_TABLE_53 = -53
+ SCX_use_AUX_TABLE_53 = -53,
+ SCX_use_AUX_TABLE_54 = -54,
+ SCX_use_AUX_TABLE_55 = -55
} SCX_enum;
# endif /* EBCDIC 037 */
@@ -81942,24 +82921,20 @@ static const SCX_enum SCX_AUX_TABLE_4[] = {
};
static const SCX_enum SCX_AUX_TABLE_5[] = {
- SCX_Armenian,
- SCX_Georgian
-};
-
-static const SCX_enum SCX_AUX_TABLE_6[] = {
SCX_Arabic,
SCX_Hanifi_Rohingya,
SCX_Syriac,
- SCX_Thaana
+ SCX_Thaana,
+ SCX_Yezidi
};
-static const SCX_enum SCX_AUX_TABLE_7[] = {
+static const SCX_enum SCX_AUX_TABLE_6[] = {
SCX_Arabic,
SCX_Syriac,
SCX_Thaana
};
-static const SCX_enum SCX_AUX_TABLE_8[] = {
+static const SCX_enum SCX_AUX_TABLE_7[] = {
SCX_Adlam,
SCX_Arabic,
SCX_Hanifi_Rohingya,
@@ -81970,22 +82945,23 @@ static const SCX_enum SCX_AUX_TABLE_8[] = {
SCX_Syriac
};
-static const SCX_enum SCX_AUX_TABLE_9[] = {
+static const SCX_enum SCX_AUX_TABLE_8[] = {
SCX_Arabic,
SCX_Syriac
};
-static const SCX_enum SCX_AUX_TABLE_10[] = {
+static const SCX_enum SCX_AUX_TABLE_9[] = {
SCX_Arabic,
- SCX_Thaana
+ SCX_Thaana,
+ SCX_Yezidi
};
-static const SCX_enum SCX_AUX_TABLE_11[] = {
+static const SCX_enum SCX_AUX_TABLE_10[] = {
SCX_Arabic,
SCX_Hanifi_Rohingya
};
-static const SCX_enum SCX_AUX_TABLE_12[] = {
+static const SCX_enum SCX_AUX_TABLE_11[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
@@ -82001,7 +82977,7 @@ static const SCX_enum SCX_AUX_TABLE_12[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_13[] = {
+static const SCX_enum SCX_AUX_TABLE_12[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
@@ -82016,7 +82992,7 @@ static const SCX_enum SCX_AUX_TABLE_13[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_14[] = {
+static const SCX_enum SCX_AUX_TABLE_13[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Dogra,
@@ -82039,7 +83015,7 @@ static const SCX_enum SCX_AUX_TABLE_14[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_15[] = {
+static const SCX_enum SCX_AUX_TABLE_14[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Dogra,
@@ -82063,90 +83039,90 @@ static const SCX_enum SCX_AUX_TABLE_15[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_16[] = {
+static const SCX_enum SCX_AUX_TABLE_15[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Kaithi,
SCX_Mahajani
};
-static const SCX_enum SCX_AUX_TABLE_17[] = {
+static const SCX_enum SCX_AUX_TABLE_16[] = {
SCX_Bengali,
SCX_Chakma,
SCX_Syloti_Nagri
};
-static const SCX_enum SCX_AUX_TABLE_18[] = {
+static const SCX_enum SCX_AUX_TABLE_17[] = {
SCX_Gurmukhi,
SCX_Multani
};
-static const SCX_enum SCX_AUX_TABLE_19[] = {
+static const SCX_enum SCX_AUX_TABLE_18[] = {
SCX_Gujarati,
SCX_Khojki
};
-static const SCX_enum SCX_AUX_TABLE_20[] = {
+static const SCX_enum SCX_AUX_TABLE_19[] = {
SCX_Grantha,
SCX_Tamil
};
-static const SCX_enum SCX_AUX_TABLE_21[] = {
+static const SCX_enum SCX_AUX_TABLE_20[] = {
SCX_Kannada,
SCX_Nandinagari
};
-static const SCX_enum SCX_AUX_TABLE_22[] = {
+static const SCX_enum SCX_AUX_TABLE_21[] = {
SCX_Chakma,
SCX_Myanmar,
SCX_Tai_Le
};
-static const SCX_enum SCX_AUX_TABLE_23[] = {
+static const SCX_enum SCX_AUX_TABLE_22[] = {
SCX_Georgian,
SCX_Latin
};
-static const SCX_enum SCX_AUX_TABLE_24[] = {
+static const SCX_enum SCX_AUX_TABLE_23[] = {
SCX_Hangul,
SCX_Kore
};
-static const SCX_enum SCX_AUX_TABLE_25[] = {
+static const SCX_enum SCX_AUX_TABLE_24[] = {
SCX_Buhid,
SCX_Hanunoo,
SCX_Tagalog,
SCX_Tagbanwa
};
-static const SCX_enum SCX_AUX_TABLE_26[] = {
+static const SCX_enum SCX_AUX_TABLE_25[] = {
SCX_Mongolian,
SCX_Phags_Pa
};
-static const SCX_enum SCX_AUX_TABLE_27[] = {
+static const SCX_enum SCX_AUX_TABLE_26[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
SCX_Kannada
};
-static const SCX_enum SCX_AUX_TABLE_28[] = {
+static const SCX_enum SCX_AUX_TABLE_27[] = {
SCX_Devanagari,
SCX_Grantha
};
-static const SCX_enum SCX_AUX_TABLE_29[] = {
+static const SCX_enum SCX_AUX_TABLE_28[] = {
SCX_Bengali,
SCX_Devanagari
};
-static const SCX_enum SCX_AUX_TABLE_30[] = {
+static const SCX_enum SCX_AUX_TABLE_29[] = {
SCX_Devanagari,
SCX_Sharada
};
-static const SCX_enum SCX_AUX_TABLE_31[] = {
+static const SCX_enum SCX_AUX_TABLE_30[] = {
SCX_Devanagari,
SCX_Kannada,
SCX_Malayalam,
@@ -82155,12 +83131,12 @@ static const SCX_enum SCX_AUX_TABLE_31[] = {
SCX_Telugu
};
-static const SCX_enum SCX_AUX_TABLE_32[] = {
+static const SCX_enum SCX_AUX_TABLE_31[] = {
SCX_Devanagari,
SCX_Nandinagari
};
-static const SCX_enum SCX_AUX_TABLE_33[] = {
+static const SCX_enum SCX_AUX_TABLE_32[] = {
SCX_Bengali,
SCX_Devanagari,
SCX_Grantha,
@@ -82171,12 +83147,17 @@ static const SCX_enum SCX_AUX_TABLE_33[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_34[] = {
+static const SCX_enum SCX_AUX_TABLE_33[] = {
SCX_Devanagari,
SCX_Grantha,
SCX_Kannada
};
+static const SCX_enum SCX_AUX_TABLE_34[] = {
+ SCX_Cyrillic,
+ SCX_Syriac
+};
+
static const SCX_enum SCX_AUX_TABLE_35[] = {
SCX_Latin,
SCX_Mongolian
@@ -82252,6 +83233,14 @@ static const SCX_enum SCX_AUX_TABLE_44[] = {
};
static const SCX_enum SCX_AUX_TABLE_45[] = {
+ SCX_Han,
+ SCX_Hanb,
+ SCX_Jpan,
+ SCX_Kore,
+ SCX_Latin
+};
+
+static const SCX_enum SCX_AUX_TABLE_46[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Gujarati,
@@ -82268,7 +83257,7 @@ static const SCX_enum SCX_AUX_TABLE_45[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_46[] = {
+static const SCX_enum SCX_AUX_TABLE_47[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Gujarati,
@@ -82284,7 +83273,7 @@ static const SCX_enum SCX_AUX_TABLE_46[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_47[] = {
+static const SCX_enum SCX_AUX_TABLE_48[] = {
SCX_Devanagari,
SCX_Dogra,
SCX_Gujarati,
@@ -82298,34 +83287,39 @@ static const SCX_enum SCX_AUX_TABLE_47[] = {
SCX_Tirhuta
};
-static const SCX_enum SCX_AUX_TABLE_48[] = {
+static const SCX_enum SCX_AUX_TABLE_49[] = {
SCX_Devanagari,
SCX_Tamil
};
-static const SCX_enum SCX_AUX_TABLE_49[] = {
+static const SCX_enum SCX_AUX_TABLE_50[] = {
SCX_Kayah_Li,
SCX_Latin,
SCX_Myanmar
};
-static const SCX_enum SCX_AUX_TABLE_50[] = {
+static const SCX_enum SCX_AUX_TABLE_51[] = {
SCX_Buginese,
SCX_Javanese
};
-static const SCX_enum SCX_AUX_TABLE_51[] = {
+static const SCX_enum SCX_AUX_TABLE_52[] = {
+ SCX_Arabic,
+ SCX_Thaana
+};
+
+static const SCX_enum SCX_AUX_TABLE_53[] = {
SCX_Cypriot,
SCX_Linear_B
};
-static const SCX_enum SCX_AUX_TABLE_52[] = {
+static const SCX_enum SCX_AUX_TABLE_54[] = {
SCX_Cypriot,
SCX_Linear_A,
SCX_Linear_B
};
-static const SCX_enum SCX_AUX_TABLE_53[] = {
+static const SCX_enum SCX_AUX_TABLE_55[] = {
SCX_Arabic,
SCX_Coptic
};
@@ -82384,7 +83378,9 @@ static const SCX_enum * const SCX_AUX_TABLE_ptrs[] = {
SCX_AUX_TABLE_50,
SCX_AUX_TABLE_51,
SCX_AUX_TABLE_52,
- SCX_AUX_TABLE_53
+ SCX_AUX_TABLE_53,
+ SCX_AUX_TABLE_54,
+ SCX_AUX_TABLE_55
};
/* Parallel table to the above, giving the number of elements in each table
@@ -82396,36 +83392,36 @@ static const U8 SCX_AUX_TABLE_lengths[] = {
2 /* SCX_AUX_TABLE_2 */,
2 /* SCX_AUX_TABLE_3 */,
2 /* SCX_AUX_TABLE_4 */,
- 2 /* SCX_AUX_TABLE_5 */,
- 4 /* SCX_AUX_TABLE_6 */,
- 3 /* SCX_AUX_TABLE_7 */,
- 8 /* SCX_AUX_TABLE_8 */,
- 2 /* SCX_AUX_TABLE_9 */,
+ 5 /* SCX_AUX_TABLE_5 */,
+ 3 /* SCX_AUX_TABLE_6 */,
+ 8 /* SCX_AUX_TABLE_7 */,
+ 2 /* SCX_AUX_TABLE_8 */,
+ 3 /* SCX_AUX_TABLE_9 */,
2 /* SCX_AUX_TABLE_10 */,
- 2 /* SCX_AUX_TABLE_11 */,
- 13 /* SCX_AUX_TABLE_12 */,
- 12 /* SCX_AUX_TABLE_13 */,
- 20 /* SCX_AUX_TABLE_14 */,
- 21 /* SCX_AUX_TABLE_15 */,
- 4 /* SCX_AUX_TABLE_16 */,
- 3 /* SCX_AUX_TABLE_17 */,
+ 13 /* SCX_AUX_TABLE_11 */,
+ 12 /* SCX_AUX_TABLE_12 */,
+ 20 /* SCX_AUX_TABLE_13 */,
+ 21 /* SCX_AUX_TABLE_14 */,
+ 4 /* SCX_AUX_TABLE_15 */,
+ 3 /* SCX_AUX_TABLE_16 */,
+ 2 /* SCX_AUX_TABLE_17 */,
2 /* SCX_AUX_TABLE_18 */,
2 /* SCX_AUX_TABLE_19 */,
2 /* SCX_AUX_TABLE_20 */,
- 2 /* SCX_AUX_TABLE_21 */,
- 3 /* SCX_AUX_TABLE_22 */,
+ 3 /* SCX_AUX_TABLE_21 */,
+ 2 /* SCX_AUX_TABLE_22 */,
2 /* SCX_AUX_TABLE_23 */,
- 2 /* SCX_AUX_TABLE_24 */,
- 4 /* SCX_AUX_TABLE_25 */,
- 2 /* SCX_AUX_TABLE_26 */,
- 4 /* SCX_AUX_TABLE_27 */,
+ 4 /* SCX_AUX_TABLE_24 */,
+ 2 /* SCX_AUX_TABLE_25 */,
+ 4 /* SCX_AUX_TABLE_26 */,
+ 2 /* SCX_AUX_TABLE_27 */,
2 /* SCX_AUX_TABLE_28 */,
2 /* SCX_AUX_TABLE_29 */,
- 2 /* SCX_AUX_TABLE_30 */,
- 6 /* SCX_AUX_TABLE_31 */,
- 2 /* SCX_AUX_TABLE_32 */,
- 8 /* SCX_AUX_TABLE_33 */,
- 3 /* SCX_AUX_TABLE_34 */,
+ 6 /* SCX_AUX_TABLE_30 */,
+ 2 /* SCX_AUX_TABLE_31 */,
+ 8 /* SCX_AUX_TABLE_32 */,
+ 3 /* SCX_AUX_TABLE_33 */,
+ 2 /* SCX_AUX_TABLE_34 */,
2 /* SCX_AUX_TABLE_35 */,
3 /* SCX_AUX_TABLE_36 */,
4 /* SCX_AUX_TABLE_37 */,
@@ -82436,15 +83432,17 @@ static const U8 SCX_AUX_TABLE_lengths[] = {
6 /* SCX_AUX_TABLE_42 */,
2 /* SCX_AUX_TABLE_43 */,
2 /* SCX_AUX_TABLE_44 */,
- 14 /* SCX_AUX_TABLE_45 */,
- 13 /* SCX_AUX_TABLE_46 */,
- 11 /* SCX_AUX_TABLE_47 */,
- 2 /* SCX_AUX_TABLE_48 */,
- 3 /* SCX_AUX_TABLE_49 */,
- 2 /* SCX_AUX_TABLE_50 */,
+ 5 /* SCX_AUX_TABLE_45 */,
+ 14 /* SCX_AUX_TABLE_46 */,
+ 13 /* SCX_AUX_TABLE_47 */,
+ 11 /* SCX_AUX_TABLE_48 */,
+ 2 /* SCX_AUX_TABLE_49 */,
+ 3 /* SCX_AUX_TABLE_50 */,
2 /* SCX_AUX_TABLE_51 */,
- 3 /* SCX_AUX_TABLE_52 */,
- 2 /* SCX_AUX_TABLE_53 */
+ 2 /* SCX_AUX_TABLE_52 */,
+ 2 /* SCX_AUX_TABLE_53 */,
+ 3 /* SCX_AUX_TABLE_54 */,
+ 2 /* SCX_AUX_TABLE_55 */
};
/* This table, indexed by the script enum, gives the zero code point for that
@@ -82476,6 +83474,7 @@ static const UV script_zeros[] = {
0, /* Chakma */
0xaa50, /* Cham */
'0', /* Cherokee */
+ '0', /* Chorasmian */
0, /* Common */
'0', /* Coptic */
'0', /* Cuneiform */
@@ -82483,6 +83482,7 @@ static const UV script_zeros[] = {
'0', /* Cyrillic */
'0', /* Deseret */
0x966, /* Devanagari */
+ 0x11950, /* Dives_Akuru */
0x966, /* Dogra */
'0', /* Duployan */
'0', /* Egyptian_Hieroglyphs */
@@ -82509,6 +83509,7 @@ static const UV script_zeros[] = {
0, /* Inherited */
'0', /* Inscriptional_Pahlavi */
'0', /* Inscriptional_Parthian */
+ '0', /* INVALID */
0xa9d0, /* Javanese */
'0', /* Jpan */
0x966, /* Kaithi */
@@ -82516,6 +83517,7 @@ static const UV script_zeros[] = {
'0', /* Katakana */
0xa900, /* Kayah_Li */
'0', /* Kharoshthi */
+ '0', /* Khitan_Small_Script */
0x17e0, /* Khmer */
0xae6, /* Khojki */
0x112f0, /* Khudawadi */
@@ -82605,7 +83607,8 @@ static const UV script_zeros[] = {
'0', /* Ugaritic */
0xa620, /* Vai */
0x1e2f0, /* Wancho */
- 0x118e0 /* Warang_Citi */
+ 0x118e0, /* Warang_Citi */
+ 0x660 /* Yezidi */
};
static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
@@ -82687,8 +83690,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Armenian,
SCX_Unknown,
SCX_Armenian,
- SCX_use_AUX_TABLE_5,
- SCX_Armenian,
SCX_Unknown,
SCX_Armenian,
SCX_Unknown,
@@ -82701,23 +83702,23 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Arabic,
SCX_Common,
SCX_Arabic,
- SCX_use_AUX_TABLE_6,
+ SCX_use_AUX_TABLE_5,
SCX_Arabic,
+ SCX_use_AUX_TABLE_5,
SCX_use_AUX_TABLE_6,
- SCX_use_AUX_TABLE_7,
SCX_Unknown,
SCX_Arabic,
- SCX_use_AUX_TABLE_6,
+ SCX_use_AUX_TABLE_5,
+ SCX_Arabic,
+ SCX_use_AUX_TABLE_7,
SCX_Arabic,
SCX_use_AUX_TABLE_8,
SCX_Arabic,
SCX_use_AUX_TABLE_9,
SCX_Arabic,
- SCX_use_AUX_TABLE_10,
- SCX_Arabic,
- SCX_use_AUX_TABLE_9,
+ SCX_use_AUX_TABLE_8,
SCX_Arabic,
- SCX_use_AUX_TABLE_11,
+ SCX_use_AUX_TABLE_10,
SCX_Arabic,
SCX_Common,
SCX_Arabic,
@@ -82750,13 +83751,13 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Common,
SCX_Arabic,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_11,
SCX_use_AUX_TABLE_12,
- SCX_use_AUX_TABLE_13,
SCX_Inherited,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_13,
SCX_use_AUX_TABLE_14,
SCX_use_AUX_TABLE_15,
- SCX_use_AUX_TABLE_16,
SCX_Devanagari,
SCX_Bengali,
SCX_Unknown,
@@ -82784,7 +83785,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Bengali,
SCX_Unknown,
- SCX_use_AUX_TABLE_17,
+ SCX_use_AUX_TABLE_16,
SCX_Bengali,
SCX_Unknown,
SCX_Gurmukhi,
@@ -82817,7 +83818,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Gurmukhi,
SCX_Unknown,
- SCX_use_AUX_TABLE_18,
+ SCX_use_AUX_TABLE_17,
SCX_Gurmukhi,
SCX_Unknown,
SCX_Gujarati,
@@ -82844,7 +83845,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Gujarati,
SCX_Unknown,
- SCX_use_AUX_TABLE_19,
+ SCX_use_AUX_TABLE_18,
SCX_Gujarati,
SCX_Unknown,
SCX_Gujarati,
@@ -82907,7 +83908,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Tamil,
SCX_Unknown,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Tamil,
SCX_Unknown,
SCX_Telugu,
@@ -82955,7 +83956,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Kannada,
SCX_Unknown,
- SCX_use_AUX_TABLE_21,
+ SCX_use_AUX_TABLE_20,
SCX_Unknown,
SCX_Kannada,
SCX_Unknown,
@@ -82973,8 +83974,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Malayalam,
SCX_Unknown,
- SCX_Malayalam,
- SCX_Unknown,
SCX_Sinhala,
SCX_Unknown,
SCX_Sinhala,
@@ -83041,7 +84040,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Tibetan,
SCX_Unknown,
SCX_Myanmar,
- SCX_use_AUX_TABLE_22,
+ SCX_use_AUX_TABLE_21,
SCX_Myanmar,
SCX_Georgian,
SCX_Unknown,
@@ -83050,9 +84049,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Georgian,
SCX_Unknown,
SCX_Georgian,
- SCX_use_AUX_TABLE_23,
+ SCX_use_AUX_TABLE_22,
SCX_Georgian,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Ethiopic,
SCX_Unknown,
SCX_Ethiopic,
@@ -83105,7 +84104,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Tagalog,
SCX_Unknown,
SCX_Hanunoo,
- SCX_use_AUX_TABLE_25,
+ SCX_use_AUX_TABLE_24,
SCX_Unknown,
SCX_Buhid,
SCX_Unknown,
@@ -83122,9 +84121,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Khmer,
SCX_Unknown,
SCX_Mongolian,
- SCX_use_AUX_TABLE_26,
+ SCX_use_AUX_TABLE_25,
SCX_Mongolian,
- SCX_use_AUX_TABLE_26,
+ SCX_use_AUX_TABLE_25,
SCX_Mongolian,
SCX_Unknown,
SCX_Mongolian,
@@ -83192,33 +84191,33 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Georgian,
SCX_Sundanese,
SCX_Unknown,
- SCX_use_AUX_TABLE_27,
+ SCX_use_AUX_TABLE_26,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_26,
SCX_use_AUX_TABLE_27,
- SCX_use_AUX_TABLE_28,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_28,
SCX_use_AUX_TABLE_29,
- SCX_use_AUX_TABLE_30,
+ SCX_use_AUX_TABLE_28,
SCX_use_AUX_TABLE_29,
SCX_use_AUX_TABLE_30,
- SCX_use_AUX_TABLE_31,
- SCX_Devanagari,
- SCX_use_AUX_TABLE_30,
SCX_Devanagari,
- SCX_use_AUX_TABLE_30,
SCX_use_AUX_TABLE_29,
SCX_Devanagari,
- SCX_use_AUX_TABLE_32,
SCX_use_AUX_TABLE_29,
+ SCX_use_AUX_TABLE_28,
SCX_Devanagari,
- SCX_use_AUX_TABLE_29,
+ SCX_use_AUX_TABLE_31,
+ SCX_use_AUX_TABLE_28,
+ SCX_Devanagari,
+ SCX_use_AUX_TABLE_28,
SCX_Devanagari,
+ SCX_use_AUX_TABLE_32,
+ SCX_use_AUX_TABLE_27,
SCX_use_AUX_TABLE_33,
SCX_use_AUX_TABLE_28,
- SCX_use_AUX_TABLE_34,
- SCX_use_AUX_TABLE_29,
SCX_Bengali,
- SCX_use_AUX_TABLE_28,
+ SCX_use_AUX_TABLE_27,
SCX_Nandinagari,
SCX_Unknown,
SCX_Latin,
@@ -83233,6 +84232,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Latin,
SCX_Greek,
SCX_Inherited,
+ SCX_use_AUX_TABLE_34,
+ SCX_Inherited,
SCX_Unknown,
SCX_Inherited,
SCX_Latin,
@@ -83374,7 +84375,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Common,
SCX_use_AUX_TABLE_37,
SCX_use_AUX_TABLE_40,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_use_AUX_TABLE_39,
SCX_use_AUX_TABLE_41,
SCX_Common,
@@ -83395,19 +84396,18 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_use_AUX_TABLE_1,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_use_AUX_TABLE_1,
- SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
SCX_use_AUX_TABLE_44,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Common,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Common,
SCX_use_AUX_TABLE_37,
SCX_Common,
@@ -83423,7 +84423,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_use_AUX_TABLE_37,
SCX_Common,
SCX_use_AUX_TABLE_37,
- SCX_Unknown,
SCX_Common,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
@@ -83439,6 +84438,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Cyrillic,
SCX_Bamum,
SCX_Unknown,
+ SCX_use_AUX_TABLE_45,
SCX_Common,
SCX_Latin,
SCX_Common,
@@ -83449,9 +84449,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Latin,
SCX_Syloti_Nagri,
SCX_Unknown,
- SCX_use_AUX_TABLE_45,
SCX_use_AUX_TABLE_46,
SCX_use_AUX_TABLE_47,
+ SCX_use_AUX_TABLE_48,
SCX_Unknown,
SCX_Phags_Pa,
SCX_Unknown,
@@ -83460,21 +84460,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Saurashtra,
SCX_Unknown,
SCX_Devanagari,
- SCX_use_AUX_TABLE_29,
+ SCX_use_AUX_TABLE_28,
SCX_Devanagari,
- SCX_use_AUX_TABLE_48,
+ SCX_use_AUX_TABLE_49,
SCX_Devanagari,
SCX_Kayah_Li,
- SCX_use_AUX_TABLE_49,
+ SCX_use_AUX_TABLE_50,
SCX_Kayah_Li,
SCX_Rejang,
SCX_Unknown,
SCX_Rejang,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_Javanese,
SCX_Unknown,
- SCX_use_AUX_TABLE_50,
+ SCX_use_AUX_TABLE_51,
SCX_Javanese,
SCX_Unknown,
SCX_Javanese,
@@ -83508,17 +84508,18 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Latin,
SCX_Greek,
SCX_Latin,
+ SCX_Common,
SCX_Unknown,
SCX_Cherokee,
SCX_Meetei_Mayek,
SCX_Unknown,
SCX_Meetei_Mayek,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
@@ -83549,9 +84550,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Arabic,
SCX_Unknown,
SCX_Arabic,
- SCX_use_AUX_TABLE_10,
+ SCX_use_AUX_TABLE_52,
SCX_Arabic,
- SCX_use_AUX_TABLE_10,
+ SCX_use_AUX_TABLE_52,
SCX_Unknown,
SCX_Inherited,
SCX_Common,
@@ -83582,15 +84583,15 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_use_AUX_TABLE_41,
SCX_use_AUX_TABLE_44,
SCX_use_AUX_TABLE_41,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
- SCX_use_AUX_TABLE_24,
+ SCX_use_AUX_TABLE_23,
SCX_Unknown,
SCX_Common,
SCX_Unknown,
@@ -83612,11 +84613,11 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Linear_B,
SCX_Unknown,
- SCX_use_AUX_TABLE_51,
+ SCX_use_AUX_TABLE_53,
SCX_Unknown,
- SCX_use_AUX_TABLE_52,
+ SCX_use_AUX_TABLE_54,
SCX_Unknown,
- SCX_use_AUX_TABLE_51,
+ SCX_use_AUX_TABLE_53,
SCX_Greek,
SCX_Unknown,
SCX_Common,
@@ -83630,7 +84631,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Carian,
SCX_Unknown,
- SCX_use_AUX_TABLE_53,
+ SCX_use_AUX_TABLE_55,
SCX_Unknown,
SCX_Old_Italic,
SCX_Unknown,
@@ -83756,10 +84757,18 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Arabic,
SCX_Unknown,
+ SCX_Yezidi,
+ SCX_Unknown,
+ SCX_Yezidi,
+ SCX_Unknown,
+ SCX_Yezidi,
+ SCX_Unknown,
SCX_Old_Sogdian,
SCX_Unknown,
SCX_Sogdian,
SCX_Unknown,
+ SCX_Chorasmian,
+ SCX_Unknown,
SCX_Elymaic,
SCX_Unknown,
SCX_Brahmi,
@@ -83783,8 +84792,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Sharada,
SCX_Unknown,
- SCX_Sharada,
- SCX_Unknown,
SCX_Sinhala,
SCX_Unknown,
SCX_Khojki,
@@ -83806,9 +84813,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Khudawadi,
SCX_Unknown,
SCX_Grantha,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Grantha,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Unknown,
SCX_Grantha,
SCX_Unknown,
@@ -83822,7 +84829,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Grantha,
SCX_Unknown,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Grantha,
SCX_Unknown,
SCX_Grantha,
@@ -83843,8 +84850,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Newa,
SCX_Unknown,
- SCX_Newa,
- SCX_Unknown,
SCX_Tirhuta,
SCX_Unknown,
SCX_Tirhuta,
@@ -83874,6 +84879,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Warang_Citi,
SCX_Unknown,
SCX_Warang_Citi,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
+ SCX_Unknown,
+ SCX_Dives_Akuru,
SCX_Unknown,
SCX_Nandinagari,
SCX_Unknown,
@@ -83929,10 +84949,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_Makasar,
SCX_Unknown,
+ SCX_Lisu,
+ SCX_Unknown,
SCX_Tamil,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Tamil,
- SCX_use_AUX_TABLE_20,
+ SCX_use_AUX_TABLE_19,
SCX_Tamil,
SCX_Unknown,
SCX_Tamil,
@@ -83983,8 +85005,14 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Tangut,
SCX_Nushu,
SCX_Common,
+ SCX_Khitan_Small_Script,
+ SCX_Unknown,
+ SCX_use_AUX_TABLE_37,
+ SCX_Unknown,
+ SCX_Tangut,
SCX_Unknown,
SCX_Tangut,
+ SCX_Khitan_Small_Script,
SCX_Unknown,
SCX_Tangut,
SCX_Unknown,
@@ -84196,18 +85224,20 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Common,
SCX_Unknown,
SCX_Common,
- SCX_Unknown,
+ SCX_use_AUX_TABLE_43,
SCX_Common,
SCX_Unknown,
SCX_Common,
- SCX_use_AUX_TABLE_43,
+ SCX_Unknown,
SCX_Common,
SCX_Unknown,
+ SCX_use_AUX_TABLE_37,
+ SCX_Unknown,
SCX_Common,
SCX_Unknown,
SCX_Common,
SCX_Unknown,
- SCX_use_AUX_TABLE_37,
+ SCX_Common,
SCX_Unknown,
SCX_Common,
SCX_Unknown,
@@ -84269,6 +85299,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
SCX_Unknown,
SCX_use_AUX_TABLE_37,
SCX_Unknown,
+ SCX_use_AUX_TABLE_37,
+ SCX_Unknown,
SCX_Common,
SCX_Unknown,
SCX_Common,
@@ -84286,7 +85318,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
- 1848, /* Number of elements */
+ 1884, /* 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 */
@@ -84339,8 +85371,6 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0xF8,
0x2D8,
0x2DE,
- 0x2E5,
- 0x2EC,
0x300,
0x370,
0x375,
@@ -84368,14 +85398,13 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x531,
0x557,
0x559,
- 0x55A,
- 0x55B,
0x55D,
0x55E,
0x55F,
0x560,
0x589,
0x58A,
+ 0x58B,
0x591,
0x5BE,
0x5BF,
@@ -84464,7 +85493,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -84606,7 +85635,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -84709,7 +85738,6 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0xCF3,
0xD00,
0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -84733,7 +85761,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -84939,7 +85967,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x1A90,
0x1A9A,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -85242,7 +86270,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3297,
@@ -85273,11 +86301,11 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0xA6A0,
0xA6F0,
0xA6F2,
- 0xA717,
+ 0xA708,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -85286,6 +86314,8 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -85360,7 +86390,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xABEB,
@@ -85586,6 +86616,12 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
@@ -85593,6 +86629,8 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x10F30,
0x10F46,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -85622,6 +86660,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x11144,
0x11145,
0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -85634,6 +86673,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x111C5,
0x111C9,
0x111CD,
+ 0x111CE,
0x111D0,
0x111DA,
0x111DB,
@@ -85702,7 +86742,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x1145A,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -85743,7 +86783,26 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x118E0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -85823,6 +86882,8 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x11EE0,
0x11EF3,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -85871,6 +86932,9 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1B000,
0x1B001,
0x1B164,
@@ -86131,6 +87195,10 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
0x1F93C,
0x1F946,
0x1F947,
+ 0x1FB00,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x1FC00,
0x1FFFE,
0xE0001,
0xE0002,
@@ -86150,27 +87218,27 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */
typedef enum {
WB_Other = 0,
- WB_ALetter = 1,
- WB_CR = 2,
- WB_Double_Quote = 3,
- WB_Extend = 4,
- WB_ExtendNumLet = 5,
- WB_Format = 6,
- WB_Hebrew_Letter = 7,
- WB_Katakana = 8,
- WB_LF = 9,
- WB_MidLetter = 10,
- WB_MidNum = 11,
- WB_MidNumLet = 12,
- WB_Newline = 13,
- WB_Numeric = 14,
- WB_Perl_Tailored_HSpace = 15,
- WB_Regional_Indicator = 16,
- WB_Single_Quote = 17,
- WB_XPG_LE = 18,
- WB_XPG_XX = 19,
- WB_ZWJ = 20,
- WB_EDGE = 21,
+ WB_CR = 1,
+ WB_Double_Quote = 2,
+ WB_EDGE = 3,
+ WB_ExtPict_LE = 4,
+ WB_ExtPict_XX = 5,
+ WB_ExtendNumLet = 6,
+ WB_Extend = 7,
+ WB_Format = 8,
+ WB_Hebrew_Letter = 9,
+ WB_Perl_Tailored_HSpace = 10,
+ WB_Katakana = 11,
+ WB_ALetter = 12,
+ WB_LF = 13,
+ WB_MidNumLet = 14,
+ WB_MidLetter = 15,
+ WB_MidNum = 16,
+ WB_Newline = 17,
+ WB_Numeric = 18,
+ WB_Regional_Indicator = 19,
+ WB_Single_Quote = 20,
+ WB_ZWJ = 21,
WB_E_Base = 22,
WB_E_Base_GAZ = 22,
WB_E_Modifier = 22,
@@ -86209,11 +87277,11 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_Other,
WB_Perl_Tailored_HSpace,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_ALetter,
WB_Other,
WB_Format,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
WB_Other,
@@ -86228,8 +87296,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_ALetter,
WB_Other,
WB_ALetter,
- WB_Other,
- WB_ALetter,
WB_Extend,
WB_ALetter,
WB_Other,
@@ -86259,11 +87325,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_ALetter,
WB_Other,
WB_ALetter,
- WB_Other,
- WB_ALetter,
- WB_Other,
+ WB_MidLetter,
WB_ALetter,
WB_MidNum,
+ WB_ALetter,
WB_Other,
WB_Extend,
WB_Other,
@@ -86597,7 +87662,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_ALetter,
WB_Other,
WB_Extend,
- WB_Other,
WB_ALetter,
WB_Other,
WB_ALetter,
@@ -86929,13 +87993,13 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_Format,
WB_ExtendNumLet,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ExtendNumLet,
WB_Other,
WB_MidNum,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ExtendNumLet,
WB_Other,
@@ -86962,7 +88026,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
WB_Other,
@@ -86973,7 +88037,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_ALetter,
WB_Other,
WB_ALetter,
- WB_XPG_LE,
+ WB_ExtPict_LE,
WB_Other,
WB_ALetter,
WB_Other,
@@ -86983,87 +88047,87 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
- WB_XPG_LE,
+ WB_ExtPict_LE,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
WB_Other,
@@ -87113,11 +88177,11 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_ALetter,
WB_Other,
WB_Extend,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Katakana,
WB_Other,
WB_ALetter,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_Extend,
WB_Katakana,
@@ -87134,9 +88198,9 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_Other,
WB_Katakana,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_Katakana,
WB_Other,
@@ -87175,6 +88239,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_ALetter,
WB_Extend,
WB_Other,
+ WB_Extend,
+ WB_Other,
WB_ALetter,
WB_Other,
WB_Extend,
@@ -87477,6 +88543,12 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_Other,
WB_ALetter,
WB_Other,
+ WB_Extend,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
WB_ALetter,
WB_Other,
WB_ALetter,
@@ -87484,6 +88556,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_Other,
WB_ALetter,
WB_Other,
+ WB_ALetter,
+ WB_Other,
WB_Extend,
WB_ALetter,
WB_Extend,
@@ -87510,6 +88584,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_Other,
WB_ALetter,
WB_Extend,
+ WB_ALetter,
WB_Other,
WB_ALetter,
WB_Extend,
@@ -87523,6 +88598,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_Other,
WB_Extend,
WB_Other,
+ WB_Extend,
WB_Numeric,
WB_ALetter,
WB_Other,
@@ -87636,6 +88712,25 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_ALetter,
WB_Other,
WB_ALetter,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
+ WB_ALetter,
+ WB_Extend,
+ WB_Other,
+ WB_Extend,
+ WB_Other,
+ WB_Extend,
+ WB_ALetter,
+ WB_Extend,
+ WB_ALetter,
+ WB_Extend,
+ WB_Other,
+ WB_Numeric,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
+ WB_ALetter,
WB_Extend,
WB_Other,
WB_Extend,
@@ -87720,6 +88815,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_Other,
WB_ALetter,
WB_Other,
+ WB_ALetter,
+ WB_Other,
WB_Format,
WB_Other,
WB_ALetter,
@@ -87759,6 +88856,9 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_ALetter,
WB_Other,
WB_ALetter,
+ WB_Extend,
+ WB_Other,
+ WB_Extend,
WB_Other,
WB_Katakana,
WB_Other,
@@ -87961,65 +89061,69 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_ALetter,
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
- WB_XPG_LE,
+ WB_ExtPict_XX,
+ WB_ExtPict_LE,
WB_ALetter,
- WB_XPG_LE,
+ WB_ExtPict_LE,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Regional_Indicator,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Extend,
- WB_XPG_XX,
+ WB_ExtPict_XX,
+ WB_Other,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_Numeric,
+ WB_Other,
+ WB_ExtPict_XX,
WB_Other,
WB_Format,
WB_Other,
@@ -88041,7 +89145,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
- 1871, /* Number of elements */
+ 1907, /* 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 */
@@ -88117,8 +89221,6 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x100,
0x2D8,
0x2DE,
- 0x2E5,
- 0x2EC,
0x300,
0x370,
0x375,
@@ -88146,14 +89248,13 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x531,
0x557,
0x559,
- 0x55A,
- 0x55B,
0x55D,
0x55E,
0x55F,
0x560,
0x589,
0x58A,
+ 0x58B,
0x591,
0x5BE,
0x5BF,
@@ -88242,7 +89343,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -88384,7 +89485,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -88487,7 +89588,6 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0xCF3,
0xD00,
0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -88511,7 +89611,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -88717,7 +89817,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x1A90,
0x1A9A,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -89020,7 +90120,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3297,
@@ -89051,11 +90151,11 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0xA6A0,
0xA6F0,
0xA6F2,
- 0xA717,
+ 0xA708,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -89064,6 +90164,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -89138,7 +90240,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xABEB,
@@ -89364,6 +90466,12 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
@@ -89371,6 +90479,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x10F30,
0x10F46,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -89400,6 +90510,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x11144,
0x11145,
0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -89412,6 +90523,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x111C5,
0x111C9,
0x111CD,
+ 0x111CE,
0x111D0,
0x111DA,
0x111DB,
@@ -89480,7 +90592,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x1145A,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -89521,7 +90633,26 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x118E0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -89601,6 +90732,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x11EE0,
0x11EF3,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -89649,6 +90782,9 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1B000,
0x1B001,
0x1B164,
@@ -89909,6 +91045,10 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
0x1F93C,
0x1F946,
0x1F947,
+ 0x1FB00,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x1FC00,
0x1FFFE,
0xE0001,
0xE0002,
@@ -89931,27 +91071,27 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */
typedef enum {
WB_Other = 0,
- WB_ALetter = 1,
- WB_CR = 2,
- WB_Double_Quote = 3,
- WB_Extend = 4,
- WB_ExtendNumLet = 5,
- WB_Format = 6,
- WB_Hebrew_Letter = 7,
- WB_Katakana = 8,
- WB_LF = 9,
- WB_MidLetter = 10,
- WB_MidNum = 11,
- WB_MidNumLet = 12,
- WB_Newline = 13,
- WB_Numeric = 14,
- WB_Perl_Tailored_HSpace = 15,
- WB_Regional_Indicator = 16,
- WB_Single_Quote = 17,
- WB_XPG_LE = 18,
- WB_XPG_XX = 19,
- WB_ZWJ = 20,
- WB_EDGE = 21,
+ WB_CR = 1,
+ WB_Double_Quote = 2,
+ WB_EDGE = 3,
+ WB_ExtPict_LE = 4,
+ WB_ExtPict_XX = 5,
+ WB_ExtendNumLet = 6,
+ WB_Extend = 7,
+ WB_Format = 8,
+ WB_Hebrew_Letter = 9,
+ WB_Perl_Tailored_HSpace = 10,
+ WB_Katakana = 11,
+ WB_ALetter = 12,
+ WB_LF = 13,
+ WB_MidNumLet = 14,
+ WB_MidLetter = 15,
+ WB_MidNum = 16,
+ WB_Newline = 17,
+ WB_Numeric = 18,
+ WB_Regional_Indicator = 19,
+ WB_Single_Quote = 20,
+ WB_ZWJ = 21,
WB_E_Base = 22,
WB_E_Base_GAZ = 22,
WB_E_Modifier = 22,
@@ -90007,10 +91147,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_ALetter,
WB_Other,
WB_ALetter,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_MidLetter,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
WB_Other,
@@ -90032,8 +91172,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_ALetter,
WB_Other,
WB_ALetter,
- WB_Other,
- WB_ALetter,
WB_Extend,
WB_ALetter,
WB_Other,
@@ -90063,11 +91201,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_ALetter,
WB_Other,
WB_ALetter,
- WB_Other,
- WB_ALetter,
- WB_Other,
+ WB_MidLetter,
WB_ALetter,
WB_MidNum,
+ WB_ALetter,
WB_Other,
WB_Extend,
WB_Other,
@@ -90401,7 +91538,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_ALetter,
WB_Other,
WB_Extend,
- WB_Other,
WB_ALetter,
WB_Other,
WB_ALetter,
@@ -90733,13 +91869,13 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_Format,
WB_ExtendNumLet,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ExtendNumLet,
WB_Other,
WB_MidNum,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ExtendNumLet,
WB_Other,
@@ -90766,7 +91902,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
WB_Other,
@@ -90777,7 +91913,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_ALetter,
WB_Other,
WB_ALetter,
- WB_XPG_LE,
+ WB_ExtPict_LE,
WB_Other,
WB_ALetter,
WB_Other,
@@ -90787,87 +91923,87 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
- WB_XPG_LE,
+ WB_ExtPict_LE,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
WB_Other,
@@ -90917,11 +92053,11 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_ALetter,
WB_Other,
WB_Extend,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Katakana,
WB_Other,
WB_ALetter,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_Extend,
WB_Katakana,
@@ -90938,9 +92074,9 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_Other,
WB_Katakana,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_Katakana,
WB_Other,
@@ -90979,6 +92115,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_ALetter,
WB_Extend,
WB_Other,
+ WB_Extend,
+ WB_Other,
WB_ALetter,
WB_Other,
WB_Extend,
@@ -91281,6 +92419,12 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_Other,
WB_ALetter,
WB_Other,
+ WB_Extend,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
WB_ALetter,
WB_Other,
WB_ALetter,
@@ -91288,6 +92432,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_Other,
WB_ALetter,
WB_Other,
+ WB_ALetter,
+ WB_Other,
WB_Extend,
WB_ALetter,
WB_Extend,
@@ -91314,6 +92460,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_Other,
WB_ALetter,
WB_Extend,
+ WB_ALetter,
WB_Other,
WB_ALetter,
WB_Extend,
@@ -91327,6 +92474,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_Other,
WB_Extend,
WB_Other,
+ WB_Extend,
WB_Numeric,
WB_ALetter,
WB_Other,
@@ -91440,6 +92588,25 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_ALetter,
WB_Other,
WB_ALetter,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
+ WB_ALetter,
+ WB_Extend,
+ WB_Other,
+ WB_Extend,
+ WB_Other,
+ WB_Extend,
+ WB_ALetter,
+ WB_Extend,
+ WB_ALetter,
+ WB_Extend,
+ WB_Other,
+ WB_Numeric,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
+ WB_ALetter,
WB_Extend,
WB_Other,
WB_Extend,
@@ -91524,6 +92691,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_Other,
WB_ALetter,
WB_Other,
+ WB_ALetter,
+ WB_Other,
WB_Format,
WB_Other,
WB_ALetter,
@@ -91563,6 +92732,9 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_ALetter,
WB_Other,
WB_ALetter,
+ WB_Extend,
+ WB_Other,
+ WB_Extend,
WB_Other,
WB_Katakana,
WB_Other,
@@ -91765,65 +92937,69 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_ALetter,
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
- WB_XPG_LE,
+ WB_ExtPict_XX,
+ WB_ExtPict_LE,
WB_ALetter,
- WB_XPG_LE,
+ WB_ExtPict_LE,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Regional_Indicator,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Extend,
- WB_XPG_XX,
+ WB_ExtPict_XX,
+ WB_Other,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_Numeric,
+ WB_Other,
+ WB_ExtPict_XX,
WB_Other,
WB_Format,
WB_Other,
@@ -91845,7 +93021,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
- 1867, /* Number of elements */
+ 1903, /* 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 */
@@ -91917,8 +93093,6 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x100,
0x2D8,
0x2DE,
- 0x2E5,
- 0x2EC,
0x300,
0x370,
0x375,
@@ -91946,14 +93120,13 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x531,
0x557,
0x559,
- 0x55A,
- 0x55B,
0x55D,
0x55E,
0x55F,
0x560,
0x589,
0x58A,
+ 0x58B,
0x591,
0x5BE,
0x5BF,
@@ -92042,7 +93215,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -92184,7 +93357,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -92287,7 +93460,6 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0xCF3,
0xD00,
0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -92311,7 +93483,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -92517,7 +93689,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x1A90,
0x1A9A,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -92820,7 +93992,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3297,
@@ -92851,11 +94023,11 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0xA6A0,
0xA6F0,
0xA6F2,
- 0xA717,
+ 0xA708,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -92864,6 +94036,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -92938,7 +94112,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xABEB,
@@ -93164,6 +94338,12 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
@@ -93171,6 +94351,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x10F30,
0x10F46,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -93200,6 +94382,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x11144,
0x11145,
0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -93212,6 +94395,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x111C5,
0x111C9,
0x111CD,
+ 0x111CE,
0x111D0,
0x111DA,
0x111DB,
@@ -93280,7 +94464,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x1145A,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -93321,7 +94505,26 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x118E0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -93401,6 +94604,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x11EE0,
0x11EF3,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -93449,6 +94654,9 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1B000,
0x1B001,
0x1B164,
@@ -93709,6 +94917,10 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
0x1F93C,
0x1F946,
0x1F947,
+ 0x1FB00,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x1FC00,
0x1FFFE,
0xE0001,
0xE0002,
@@ -93731,27 +94943,27 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */
typedef enum {
WB_Other = 0,
- WB_ALetter = 1,
- WB_CR = 2,
- WB_Double_Quote = 3,
- WB_Extend = 4,
- WB_ExtendNumLet = 5,
- WB_Format = 6,
- WB_Hebrew_Letter = 7,
- WB_Katakana = 8,
- WB_LF = 9,
- WB_MidLetter = 10,
- WB_MidNum = 11,
- WB_MidNumLet = 12,
- WB_Newline = 13,
- WB_Numeric = 14,
- WB_Perl_Tailored_HSpace = 15,
- WB_Regional_Indicator = 16,
- WB_Single_Quote = 17,
- WB_XPG_LE = 18,
- WB_XPG_XX = 19,
- WB_ZWJ = 20,
- WB_EDGE = 21,
+ WB_CR = 1,
+ WB_Double_Quote = 2,
+ WB_EDGE = 3,
+ WB_ExtPict_LE = 4,
+ WB_ExtPict_XX = 5,
+ WB_ExtendNumLet = 6,
+ WB_Extend = 7,
+ WB_Format = 8,
+ WB_Hebrew_Letter = 9,
+ WB_Perl_Tailored_HSpace = 10,
+ WB_Katakana = 11,
+ WB_ALetter = 12,
+ WB_LF = 13,
+ WB_MidNumLet = 14,
+ WB_MidLetter = 15,
+ WB_MidNum = 16,
+ WB_Newline = 17,
+ WB_Numeric = 18,
+ WB_Regional_Indicator = 19,
+ WB_Single_Quote = 20,
+ WB_ZWJ = 21,
WB_E_Base = 22,
WB_E_Base_GAZ = 22,
WB_E_Modifier = 22,
@@ -93805,10 +95017,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_ALetter,
WB_Other,
WB_ALetter,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_MidLetter,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
WB_Format,
@@ -93828,8 +95040,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_ALetter,
WB_Other,
WB_ALetter,
- WB_Other,
- WB_ALetter,
WB_Extend,
WB_ALetter,
WB_Other,
@@ -93859,11 +95069,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_ALetter,
WB_Other,
WB_ALetter,
- WB_Other,
- WB_ALetter,
- WB_Other,
+ WB_MidLetter,
WB_ALetter,
WB_MidNum,
+ WB_ALetter,
WB_Other,
WB_Extend,
WB_Other,
@@ -94197,7 +95406,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_ALetter,
WB_Other,
WB_Extend,
- WB_Other,
WB_ALetter,
WB_Other,
WB_ALetter,
@@ -94529,13 +95737,13 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_Format,
WB_ExtendNumLet,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ExtendNumLet,
WB_Other,
WB_MidNum,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ExtendNumLet,
WB_Other,
@@ -94562,7 +95770,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
WB_Other,
@@ -94573,7 +95781,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_ALetter,
WB_Other,
WB_ALetter,
- WB_XPG_LE,
+ WB_ExtPict_LE,
WB_Other,
WB_ALetter,
WB_Other,
@@ -94583,87 +95791,87 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
- WB_XPG_LE,
+ WB_ExtPict_LE,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_ALetter,
WB_Other,
@@ -94713,11 +95921,11 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_ALetter,
WB_Other,
WB_Extend,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Katakana,
WB_Other,
WB_ALetter,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_Extend,
WB_Katakana,
@@ -94734,9 +95942,9 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_Other,
WB_Katakana,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_Katakana,
WB_Other,
@@ -94775,6 +95983,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_ALetter,
WB_Extend,
WB_Other,
+ WB_Extend,
+ WB_Other,
WB_ALetter,
WB_Other,
WB_Extend,
@@ -95077,6 +96287,12 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_Other,
WB_ALetter,
WB_Other,
+ WB_Extend,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
WB_ALetter,
WB_Other,
WB_ALetter,
@@ -95084,6 +96300,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_Other,
WB_ALetter,
WB_Other,
+ WB_ALetter,
+ WB_Other,
WB_Extend,
WB_ALetter,
WB_Extend,
@@ -95110,6 +96328,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_Other,
WB_ALetter,
WB_Extend,
+ WB_ALetter,
WB_Other,
WB_ALetter,
WB_Extend,
@@ -95123,6 +96342,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_Other,
WB_Extend,
WB_Other,
+ WB_Extend,
WB_Numeric,
WB_ALetter,
WB_Other,
@@ -95236,6 +96456,25 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_ALetter,
WB_Other,
WB_ALetter,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
+ WB_ALetter,
+ WB_Extend,
+ WB_Other,
+ WB_Extend,
+ WB_Other,
+ WB_Extend,
+ WB_ALetter,
+ WB_Extend,
+ WB_ALetter,
+ WB_Extend,
+ WB_Other,
+ WB_Numeric,
+ WB_Other,
+ WB_ALetter,
+ WB_Other,
+ WB_ALetter,
WB_Extend,
WB_Other,
WB_Extend,
@@ -95320,6 +96559,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_Other,
WB_ALetter,
WB_Other,
+ WB_ALetter,
+ WB_Other,
WB_Format,
WB_Other,
WB_ALetter,
@@ -95359,6 +96600,9 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_ALetter,
WB_Other,
WB_ALetter,
+ WB_Extend,
+ WB_Other,
+ WB_Extend,
WB_Other,
WB_Katakana,
WB_Other,
@@ -95561,65 +96805,69 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_ALetter,
WB_Other,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
- WB_XPG_LE,
+ WB_ExtPict_XX,
+ WB_ExtPict_LE,
WB_ALetter,
- WB_XPG_LE,
+ WB_ExtPict_LE,
WB_ALetter,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Regional_Indicator,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Extend,
- WB_XPG_XX,
+ WB_ExtPict_XX,
+ WB_Other,
+ WB_ExtPict_XX,
+ WB_Other,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
- WB_XPG_XX,
+ WB_Numeric,
WB_Other,
- WB_XPG_XX,
+ WB_ExtPict_XX,
WB_Other,
WB_Format,
WB_Other,
@@ -95638,7 +96886,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV Simple_Case_Folding_invlist[] = { /* for ASCII/Latin1 */
- 1286, /* Number of elements */
+ 1291, /* 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 */
@@ -96912,6 +98160,11 @@ static const UV Simple_Case_Folding_invlist[] = { /* for ASCII/Latin1 */
0xA7C5,
0xA7C6,
0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xAB70,
0xABC0,
0xFF21,
@@ -96938,7 +98191,7 @@ static const UV Simple_Case_Folding_invlist[] = { /* for ASCII/Latin1 */
# if 'A' == 65 /* ASCII/Latin1 */
-static const int Simple_Case_Folding_invmap[] = { /* for ASCII/Latin1 */
+static const I32 Simple_Case_Folding_invmap[] = { /* for ASCII/Latin1 */
0,
0x61,
0,
@@ -98208,6 +99461,11 @@ static const int Simple_Case_Folding_invmap[] = { /* for ASCII/Latin1 */
0xA794,
0x282,
0x1D8E,
+ 0xA7C8,
+ 0,
+ 0xA7CA,
+ 0,
+ 0xA7F6,
0,
0x13A0,
0,
@@ -98239,7 +99497,7 @@ static const int Simple_Case_Folding_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 1047 */
- 1304, /* Number of elements */
+ 1309, /* 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 */
@@ -99531,6 +100789,11 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 1047 */
0xA7C5,
0xA7C6,
0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xAB70,
0xABC0,
0xFF21,
@@ -99560,7 +100823,7 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 1047 */
&& '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
-static const int Simple_Case_Folding_invmap[] = { /* for EBCDIC 1047 */
+static const I32 Simple_Case_Folding_invmap[] = { /* for EBCDIC 1047 */
0,
0x42,
0,
@@ -100848,6 +102111,11 @@ static const int Simple_Case_Folding_invmap[] = { /* for EBCDIC 1047 */
0xA794,
0x282,
0x1D8E,
+ 0xA7C8,
+ 0,
+ 0xA7CA,
+ 0,
+ 0xA7F6,
0,
0x13A0,
0,
@@ -100879,7 +102147,7 @@ static const int Simple_Case_Folding_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 037 */
- 1300, /* Number of elements */
+ 1305, /* 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 */
@@ -102167,6 +103435,11 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 037 */
0xA7C5,
0xA7C6,
0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xAB70,
0xABC0,
0xFF21,
@@ -102196,7 +103469,7 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 037 */
&& '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
-static const int Simple_Case_Folding_invmap[] = { /* for EBCDIC 037 */
+static const I32 Simple_Case_Folding_invmap[] = { /* for EBCDIC 037 */
0,
0x42,
0,
@@ -103480,6 +104753,11 @@ static const int Simple_Case_Folding_invmap[] = { /* for EBCDIC 037 */
0xA794,
0x282,
0x1D8E,
+ 0xA7C8,
+ 0,
+ 0xA7CA,
+ 0,
+ 0xA7F6,
0,
0x13A0,
0,
@@ -103508,7 +104786,7 @@ static const int Simple_Case_Folding_invmap[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV Titlecase_Mapping_invlist[] = { /* for ASCII/Latin1 */
- 1334, /* Number of elements */
+ 1340, /* 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 */
@@ -104815,6 +106093,12 @@ static const UV Titlecase_Mapping_invlist[] = { /* for ASCII/Latin1 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -104911,246 +106195,246 @@ typedef enum {
#define HAS_TC_AUX_TABLES
-static const unsigned int TC_AUX_TABLE_1[] = {
+static const U32 TC_AUX_TABLE_1[] = {
0x53,
0x73
};
-static const unsigned int TC_AUX_TABLE_2[] = {
+static const U32 TC_AUX_TABLE_2[] = {
0x2BC,
0x4E
};
-static const unsigned int TC_AUX_TABLE_3[] = {
+static const U32 TC_AUX_TABLE_3[] = {
0x4A,
0x30C
};
-static const unsigned int TC_AUX_TABLE_4[] = {
+static const U32 TC_AUX_TABLE_4[] = {
0x399,
0x308,
0x301
};
-static const unsigned int TC_AUX_TABLE_5[] = {
+static const U32 TC_AUX_TABLE_5[] = {
0x3A5,
0x308,
0x301
};
-static const unsigned int TC_AUX_TABLE_6[] = {
+static const U32 TC_AUX_TABLE_6[] = {
0x535,
0x582
};
-static const unsigned int TC_AUX_TABLE_7[] = {
+static const U32 TC_AUX_TABLE_7[] = {
0x48,
0x331
};
-static const unsigned int TC_AUX_TABLE_8[] = {
+static const U32 TC_AUX_TABLE_8[] = {
0x54,
0x308
};
-static const unsigned int TC_AUX_TABLE_9[] = {
+static const U32 TC_AUX_TABLE_9[] = {
0x57,
0x30A
};
-static const unsigned int TC_AUX_TABLE_10[] = {
+static const U32 TC_AUX_TABLE_10[] = {
0x59,
0x30A
};
-static const unsigned int TC_AUX_TABLE_11[] = {
+static const U32 TC_AUX_TABLE_11[] = {
0x41,
0x2BE
};
-static const unsigned int TC_AUX_TABLE_12[] = {
+static const U32 TC_AUX_TABLE_12[] = {
0x3A5,
0x313
};
-static const unsigned int TC_AUX_TABLE_13[] = {
+static const U32 TC_AUX_TABLE_13[] = {
0x3A5,
0x313,
0x300
};
-static const unsigned int TC_AUX_TABLE_14[] = {
+static const U32 TC_AUX_TABLE_14[] = {
0x3A5,
0x313,
0x301
};
-static const unsigned int TC_AUX_TABLE_15[] = {
+static const U32 TC_AUX_TABLE_15[] = {
0x3A5,
0x313,
0x342
};
-static const unsigned int TC_AUX_TABLE_16[] = {
+static const U32 TC_AUX_TABLE_16[] = {
0x1FBA,
0x345
};
-static const unsigned int TC_AUX_TABLE_17[] = {
+static const U32 TC_AUX_TABLE_17[] = {
0x386,
0x345
};
-static const unsigned int TC_AUX_TABLE_18[] = {
+static const U32 TC_AUX_TABLE_18[] = {
0x391,
0x342
};
-static const unsigned int TC_AUX_TABLE_19[] = {
+static const U32 TC_AUX_TABLE_19[] = {
0x391,
0x342,
0x345
};
-static const unsigned int TC_AUX_TABLE_20[] = {
+static const U32 TC_AUX_TABLE_20[] = {
0x1FCA,
0x345
};
-static const unsigned int TC_AUX_TABLE_21[] = {
+static const U32 TC_AUX_TABLE_21[] = {
0x389,
0x345
};
-static const unsigned int TC_AUX_TABLE_22[] = {
+static const U32 TC_AUX_TABLE_22[] = {
0x397,
0x342
};
-static const unsigned int TC_AUX_TABLE_23[] = {
+static const U32 TC_AUX_TABLE_23[] = {
0x397,
0x342,
0x345
};
-static const unsigned int TC_AUX_TABLE_24[] = {
+static const U32 TC_AUX_TABLE_24[] = {
0x399,
0x308,
0x300
};
-static const unsigned int TC_AUX_TABLE_25[] = {
+static const U32 TC_AUX_TABLE_25[] = {
0x399,
0x342
};
-static const unsigned int TC_AUX_TABLE_26[] = {
+static const U32 TC_AUX_TABLE_26[] = {
0x399,
0x308,
0x342
};
-static const unsigned int TC_AUX_TABLE_27[] = {
+static const U32 TC_AUX_TABLE_27[] = {
0x3A5,
0x308,
0x300
};
-static const unsigned int TC_AUX_TABLE_28[] = {
+static const U32 TC_AUX_TABLE_28[] = {
0x3A1,
0x313
};
-static const unsigned int TC_AUX_TABLE_29[] = {
+static const U32 TC_AUX_TABLE_29[] = {
0x3A5,
0x342
};
-static const unsigned int TC_AUX_TABLE_30[] = {
+static const U32 TC_AUX_TABLE_30[] = {
0x3A5,
0x308,
0x342
};
-static const unsigned int TC_AUX_TABLE_31[] = {
+static const U32 TC_AUX_TABLE_31[] = {
0x1FFA,
0x345
};
-static const unsigned int TC_AUX_TABLE_32[] = {
+static const U32 TC_AUX_TABLE_32[] = {
0x38F,
0x345
};
-static const unsigned int TC_AUX_TABLE_33[] = {
+static const U32 TC_AUX_TABLE_33[] = {
0x3A9,
0x342
};
-static const unsigned int TC_AUX_TABLE_34[] = {
+static const U32 TC_AUX_TABLE_34[] = {
0x3A9,
0x342,
0x345
};
-static const unsigned int TC_AUX_TABLE_35[] = {
+static const U32 TC_AUX_TABLE_35[] = {
0x46,
0x66
};
-static const unsigned int TC_AUX_TABLE_36[] = {
+static const U32 TC_AUX_TABLE_36[] = {
0x46,
0x69
};
-static const unsigned int TC_AUX_TABLE_37[] = {
+static const U32 TC_AUX_TABLE_37[] = {
0x46,
0x6C
};
-static const unsigned int TC_AUX_TABLE_38[] = {
+static const U32 TC_AUX_TABLE_38[] = {
0x46,
0x66,
0x69
};
-static const unsigned int TC_AUX_TABLE_39[] = {
+static const U32 TC_AUX_TABLE_39[] = {
0x46,
0x66,
0x6C
};
-static const unsigned int TC_AUX_TABLE_40[] = {
+static const U32 TC_AUX_TABLE_40[] = {
0x53,
0x74
};
-static const unsigned int TC_AUX_TABLE_41[] = {
+static const U32 TC_AUX_TABLE_41[] = {
0x544,
0x576
};
-static const unsigned int TC_AUX_TABLE_42[] = {
+static const U32 TC_AUX_TABLE_42[] = {
0x544,
0x565
};
-static const unsigned int TC_AUX_TABLE_43[] = {
+static const U32 TC_AUX_TABLE_43[] = {
0x544,
0x56B
};
-static const unsigned int TC_AUX_TABLE_44[] = {
+static const U32 TC_AUX_TABLE_44[] = {
0x54E,
0x576
};
-static const unsigned int TC_AUX_TABLE_45[] = {
+static const U32 TC_AUX_TABLE_45[] = {
0x544,
0x56D
};
-static const unsigned int * const TC_AUX_TABLE_ptrs[] = {
+static const U32 * const TC_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
TC_AUX_TABLE_1,
TC_AUX_TABLE_2,
@@ -105251,7 +106535,7 @@ static const U8 TC_AUX_TABLE_lengths[] = {
2 /* TC_AUX_TABLE_45 */
};
-static const int Titlecase_Mapping_invmap[] = { /* for ASCII/Latin1 */
+static const I32 Titlecase_Mapping_invmap[] = { /* for ASCII/Latin1 */
0,
0x41,
0,
@@ -106555,6 +107839,12 @@ static const int Titlecase_Mapping_invmap[] = { /* for ASCII/Latin1 */
0,
0xA7C2,
0,
+ 0xA7C7,
+ 0,
+ 0xA7C9,
+ 0,
+ 0xA7F5,
+ 0,
0xA7B3,
0,
0x13A0,
@@ -106600,7 +107890,7 @@ static const int Titlecase_Mapping_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 1047 */
- 1350, /* Number of elements */
+ 1356, /* 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 */
@@ -107923,6 +109213,12 @@ static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 1047 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -108022,246 +109318,246 @@ typedef enum {
#define HAS_TC_AUX_TABLES
-static const unsigned int TC_AUX_TABLE_1[] = {
+static const U32 TC_AUX_TABLE_1[] = {
0xE2,
0xA2
};
-static const unsigned int TC_AUX_TABLE_2[] = {
+static const U32 TC_AUX_TABLE_2[] = {
0x2BC,
0xD5
};
-static const unsigned int TC_AUX_TABLE_3[] = {
+static const U32 TC_AUX_TABLE_3[] = {
0xD1,
0x30C
};
-static const unsigned int TC_AUX_TABLE_4[] = {
+static const U32 TC_AUX_TABLE_4[] = {
0x399,
0x308,
0x301
};
-static const unsigned int TC_AUX_TABLE_5[] = {
+static const U32 TC_AUX_TABLE_5[] = {
0x3A5,
0x308,
0x301
};
-static const unsigned int TC_AUX_TABLE_6[] = {
+static const U32 TC_AUX_TABLE_6[] = {
0x535,
0x582
};
-static const unsigned int TC_AUX_TABLE_7[] = {
+static const U32 TC_AUX_TABLE_7[] = {
0xC8,
0x331
};
-static const unsigned int TC_AUX_TABLE_8[] = {
+static const U32 TC_AUX_TABLE_8[] = {
0xE3,
0x308
};
-static const unsigned int TC_AUX_TABLE_9[] = {
+static const U32 TC_AUX_TABLE_9[] = {
0xE6,
0x30A
};
-static const unsigned int TC_AUX_TABLE_10[] = {
+static const U32 TC_AUX_TABLE_10[] = {
0xE8,
0x30A
};
-static const unsigned int TC_AUX_TABLE_11[] = {
+static const U32 TC_AUX_TABLE_11[] = {
0xC1,
0x2BE
};
-static const unsigned int TC_AUX_TABLE_12[] = {
+static const U32 TC_AUX_TABLE_12[] = {
0x3A5,
0x313
};
-static const unsigned int TC_AUX_TABLE_13[] = {
+static const U32 TC_AUX_TABLE_13[] = {
0x3A5,
0x313,
0x300
};
-static const unsigned int TC_AUX_TABLE_14[] = {
+static const U32 TC_AUX_TABLE_14[] = {
0x3A5,
0x313,
0x301
};
-static const unsigned int TC_AUX_TABLE_15[] = {
+static const U32 TC_AUX_TABLE_15[] = {
0x3A5,
0x313,
0x342
};
-static const unsigned int TC_AUX_TABLE_16[] = {
+static const U32 TC_AUX_TABLE_16[] = {
0x1FBA,
0x345
};
-static const unsigned int TC_AUX_TABLE_17[] = {
+static const U32 TC_AUX_TABLE_17[] = {
0x386,
0x345
};
-static const unsigned int TC_AUX_TABLE_18[] = {
+static const U32 TC_AUX_TABLE_18[] = {
0x391,
0x342
};
-static const unsigned int TC_AUX_TABLE_19[] = {
+static const U32 TC_AUX_TABLE_19[] = {
0x391,
0x342,
0x345
};
-static const unsigned int TC_AUX_TABLE_20[] = {
+static const U32 TC_AUX_TABLE_20[] = {
0x1FCA,
0x345
};
-static const unsigned int TC_AUX_TABLE_21[] = {
+static const U32 TC_AUX_TABLE_21[] = {
0x389,
0x345
};
-static const unsigned int TC_AUX_TABLE_22[] = {
+static const U32 TC_AUX_TABLE_22[] = {
0x397,
0x342
};
-static const unsigned int TC_AUX_TABLE_23[] = {
+static const U32 TC_AUX_TABLE_23[] = {
0x397,
0x342,
0x345
};
-static const unsigned int TC_AUX_TABLE_24[] = {
+static const U32 TC_AUX_TABLE_24[] = {
0x399,
0x308,
0x300
};
-static const unsigned int TC_AUX_TABLE_25[] = {
+static const U32 TC_AUX_TABLE_25[] = {
0x399,
0x342
};
-static const unsigned int TC_AUX_TABLE_26[] = {
+static const U32 TC_AUX_TABLE_26[] = {
0x399,
0x308,
0x342
};
-static const unsigned int TC_AUX_TABLE_27[] = {
+static const U32 TC_AUX_TABLE_27[] = {
0x3A5,
0x308,
0x300
};
-static const unsigned int TC_AUX_TABLE_28[] = {
+static const U32 TC_AUX_TABLE_28[] = {
0x3A1,
0x313
};
-static const unsigned int TC_AUX_TABLE_29[] = {
+static const U32 TC_AUX_TABLE_29[] = {
0x3A5,
0x342
};
-static const unsigned int TC_AUX_TABLE_30[] = {
+static const U32 TC_AUX_TABLE_30[] = {
0x3A5,
0x308,
0x342
};
-static const unsigned int TC_AUX_TABLE_31[] = {
+static const U32 TC_AUX_TABLE_31[] = {
0x1FFA,
0x345
};
-static const unsigned int TC_AUX_TABLE_32[] = {
+static const U32 TC_AUX_TABLE_32[] = {
0x38F,
0x345
};
-static const unsigned int TC_AUX_TABLE_33[] = {
+static const U32 TC_AUX_TABLE_33[] = {
0x3A9,
0x342
};
-static const unsigned int TC_AUX_TABLE_34[] = {
+static const U32 TC_AUX_TABLE_34[] = {
0x3A9,
0x342,
0x345
};
-static const unsigned int TC_AUX_TABLE_35[] = {
+static const U32 TC_AUX_TABLE_35[] = {
0xC6,
0x86
};
-static const unsigned int TC_AUX_TABLE_36[] = {
+static const U32 TC_AUX_TABLE_36[] = {
0xC6,
0x89
};
-static const unsigned int TC_AUX_TABLE_37[] = {
+static const U32 TC_AUX_TABLE_37[] = {
0xC6,
0x93
};
-static const unsigned int TC_AUX_TABLE_38[] = {
+static const U32 TC_AUX_TABLE_38[] = {
0xC6,
0x86,
0x89
};
-static const unsigned int TC_AUX_TABLE_39[] = {
+static const U32 TC_AUX_TABLE_39[] = {
0xC6,
0x86,
0x93
};
-static const unsigned int TC_AUX_TABLE_40[] = {
+static const U32 TC_AUX_TABLE_40[] = {
0xE2,
0xA3
};
-static const unsigned int TC_AUX_TABLE_41[] = {
+static const U32 TC_AUX_TABLE_41[] = {
0x544,
0x576
};
-static const unsigned int TC_AUX_TABLE_42[] = {
+static const U32 TC_AUX_TABLE_42[] = {
0x544,
0x565
};
-static const unsigned int TC_AUX_TABLE_43[] = {
+static const U32 TC_AUX_TABLE_43[] = {
0x544,
0x56B
};
-static const unsigned int TC_AUX_TABLE_44[] = {
+static const U32 TC_AUX_TABLE_44[] = {
0x54E,
0x576
};
-static const unsigned int TC_AUX_TABLE_45[] = {
+static const U32 TC_AUX_TABLE_45[] = {
0x544,
0x56D
};
-static const unsigned int * const TC_AUX_TABLE_ptrs[] = {
+static const U32 * const TC_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
TC_AUX_TABLE_1,
TC_AUX_TABLE_2,
@@ -108362,7 +109658,7 @@ static const U8 TC_AUX_TABLE_lengths[] = {
2 /* TC_AUX_TABLE_45 */
};
-static const int Titlecase_Mapping_invmap[] = { /* for EBCDIC 1047 */
+static const I32 Titlecase_Mapping_invmap[] = { /* for EBCDIC 1047 */
0,
0x62,
0,
@@ -109682,6 +110978,12 @@ static const int Titlecase_Mapping_invmap[] = { /* for EBCDIC 1047 */
0,
0xA7C2,
0,
+ 0xA7C7,
+ 0,
+ 0xA7C9,
+ 0,
+ 0xA7F5,
+ 0,
0xA7B3,
0,
0x13A0,
@@ -109727,7 +111029,7 @@ static const int Titlecase_Mapping_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 037 */
- 1348, /* Number of elements */
+ 1354, /* 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 */
@@ -111048,6 +112350,12 @@ static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 037 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -111147,246 +112455,246 @@ typedef enum {
#define HAS_TC_AUX_TABLES
-static const unsigned int TC_AUX_TABLE_1[] = {
+static const U32 TC_AUX_TABLE_1[] = {
0xE2,
0xA2
};
-static const unsigned int TC_AUX_TABLE_2[] = {
+static const U32 TC_AUX_TABLE_2[] = {
0x2BC,
0xD5
};
-static const unsigned int TC_AUX_TABLE_3[] = {
+static const U32 TC_AUX_TABLE_3[] = {
0xD1,
0x30C
};
-static const unsigned int TC_AUX_TABLE_4[] = {
+static const U32 TC_AUX_TABLE_4[] = {
0x399,
0x308,
0x301
};
-static const unsigned int TC_AUX_TABLE_5[] = {
+static const U32 TC_AUX_TABLE_5[] = {
0x3A5,
0x308,
0x301
};
-static const unsigned int TC_AUX_TABLE_6[] = {
+static const U32 TC_AUX_TABLE_6[] = {
0x535,
0x582
};
-static const unsigned int TC_AUX_TABLE_7[] = {
+static const U32 TC_AUX_TABLE_7[] = {
0xC8,
0x331
};
-static const unsigned int TC_AUX_TABLE_8[] = {
+static const U32 TC_AUX_TABLE_8[] = {
0xE3,
0x308
};
-static const unsigned int TC_AUX_TABLE_9[] = {
+static const U32 TC_AUX_TABLE_9[] = {
0xE6,
0x30A
};
-static const unsigned int TC_AUX_TABLE_10[] = {
+static const U32 TC_AUX_TABLE_10[] = {
0xE8,
0x30A
};
-static const unsigned int TC_AUX_TABLE_11[] = {
+static const U32 TC_AUX_TABLE_11[] = {
0xC1,
0x2BE
};
-static const unsigned int TC_AUX_TABLE_12[] = {
+static const U32 TC_AUX_TABLE_12[] = {
0x3A5,
0x313
};
-static const unsigned int TC_AUX_TABLE_13[] = {
+static const U32 TC_AUX_TABLE_13[] = {
0x3A5,
0x313,
0x300
};
-static const unsigned int TC_AUX_TABLE_14[] = {
+static const U32 TC_AUX_TABLE_14[] = {
0x3A5,
0x313,
0x301
};
-static const unsigned int TC_AUX_TABLE_15[] = {
+static const U32 TC_AUX_TABLE_15[] = {
0x3A5,
0x313,
0x342
};
-static const unsigned int TC_AUX_TABLE_16[] = {
+static const U32 TC_AUX_TABLE_16[] = {
0x1FBA,
0x345
};
-static const unsigned int TC_AUX_TABLE_17[] = {
+static const U32 TC_AUX_TABLE_17[] = {
0x386,
0x345
};
-static const unsigned int TC_AUX_TABLE_18[] = {
+static const U32 TC_AUX_TABLE_18[] = {
0x391,
0x342
};
-static const unsigned int TC_AUX_TABLE_19[] = {
+static const U32 TC_AUX_TABLE_19[] = {
0x391,
0x342,
0x345
};
-static const unsigned int TC_AUX_TABLE_20[] = {
+static const U32 TC_AUX_TABLE_20[] = {
0x1FCA,
0x345
};
-static const unsigned int TC_AUX_TABLE_21[] = {
+static const U32 TC_AUX_TABLE_21[] = {
0x389,
0x345
};
-static const unsigned int TC_AUX_TABLE_22[] = {
+static const U32 TC_AUX_TABLE_22[] = {
0x397,
0x342
};
-static const unsigned int TC_AUX_TABLE_23[] = {
+static const U32 TC_AUX_TABLE_23[] = {
0x397,
0x342,
0x345
};
-static const unsigned int TC_AUX_TABLE_24[] = {
+static const U32 TC_AUX_TABLE_24[] = {
0x399,
0x308,
0x300
};
-static const unsigned int TC_AUX_TABLE_25[] = {
+static const U32 TC_AUX_TABLE_25[] = {
0x399,
0x342
};
-static const unsigned int TC_AUX_TABLE_26[] = {
+static const U32 TC_AUX_TABLE_26[] = {
0x399,
0x308,
0x342
};
-static const unsigned int TC_AUX_TABLE_27[] = {
+static const U32 TC_AUX_TABLE_27[] = {
0x3A5,
0x308,
0x300
};
-static const unsigned int TC_AUX_TABLE_28[] = {
+static const U32 TC_AUX_TABLE_28[] = {
0x3A1,
0x313
};
-static const unsigned int TC_AUX_TABLE_29[] = {
+static const U32 TC_AUX_TABLE_29[] = {
0x3A5,
0x342
};
-static const unsigned int TC_AUX_TABLE_30[] = {
+static const U32 TC_AUX_TABLE_30[] = {
0x3A5,
0x308,
0x342
};
-static const unsigned int TC_AUX_TABLE_31[] = {
+static const U32 TC_AUX_TABLE_31[] = {
0x1FFA,
0x345
};
-static const unsigned int TC_AUX_TABLE_32[] = {
+static const U32 TC_AUX_TABLE_32[] = {
0x38F,
0x345
};
-static const unsigned int TC_AUX_TABLE_33[] = {
+static const U32 TC_AUX_TABLE_33[] = {
0x3A9,
0x342
};
-static const unsigned int TC_AUX_TABLE_34[] = {
+static const U32 TC_AUX_TABLE_34[] = {
0x3A9,
0x342,
0x345
};
-static const unsigned int TC_AUX_TABLE_35[] = {
+static const U32 TC_AUX_TABLE_35[] = {
0xC6,
0x86
};
-static const unsigned int TC_AUX_TABLE_36[] = {
+static const U32 TC_AUX_TABLE_36[] = {
0xC6,
0x89
};
-static const unsigned int TC_AUX_TABLE_37[] = {
+static const U32 TC_AUX_TABLE_37[] = {
0xC6,
0x93
};
-static const unsigned int TC_AUX_TABLE_38[] = {
+static const U32 TC_AUX_TABLE_38[] = {
0xC6,
0x86,
0x89
};
-static const unsigned int TC_AUX_TABLE_39[] = {
+static const U32 TC_AUX_TABLE_39[] = {
0xC6,
0x86,
0x93
};
-static const unsigned int TC_AUX_TABLE_40[] = {
+static const U32 TC_AUX_TABLE_40[] = {
0xE2,
0xA3
};
-static const unsigned int TC_AUX_TABLE_41[] = {
+static const U32 TC_AUX_TABLE_41[] = {
0x544,
0x576
};
-static const unsigned int TC_AUX_TABLE_42[] = {
+static const U32 TC_AUX_TABLE_42[] = {
0x544,
0x565
};
-static const unsigned int TC_AUX_TABLE_43[] = {
+static const U32 TC_AUX_TABLE_43[] = {
0x544,
0x56B
};
-static const unsigned int TC_AUX_TABLE_44[] = {
+static const U32 TC_AUX_TABLE_44[] = {
0x54E,
0x576
};
-static const unsigned int TC_AUX_TABLE_45[] = {
+static const U32 TC_AUX_TABLE_45[] = {
0x544,
0x56D
};
-static const unsigned int * const TC_AUX_TABLE_ptrs[] = {
+static const U32 * const TC_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
TC_AUX_TABLE_1,
TC_AUX_TABLE_2,
@@ -111487,7 +112795,7 @@ static const U8 TC_AUX_TABLE_lengths[] = {
2 /* TC_AUX_TABLE_45 */
};
-static const int Titlecase_Mapping_invmap[] = { /* for EBCDIC 037 */
+static const I32 Titlecase_Mapping_invmap[] = { /* for EBCDIC 037 */
0,
0x62,
0,
@@ -112805,6 +114113,12 @@ static const int Titlecase_Mapping_invmap[] = { /* for EBCDIC 037 */
0,
0xA7C2,
0,
+ 0xA7C7,
+ 0,
+ 0xA7C9,
+ 0,
+ 0xA7F5,
+ 0,
0xA7B3,
0,
0x13A0,
@@ -112847,7 +114161,7 @@ static const int Titlecase_Mapping_invmap[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV Uppercase_Mapping_invlist[] = { /* for ASCII/Latin1 */
- 1385, /* Number of elements */
+ 1391, /* 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 */
@@ -114205,6 +115519,12 @@ static const UV Uppercase_Mapping_invlist[] = { /* for ASCII/Latin1 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -114328,381 +115648,381 @@ typedef enum {
#define HAS_UC_AUX_TABLES
-static const unsigned int UC_AUX_TABLE_1[] = {
+static const U32 UC_AUX_TABLE_1[] = {
0x53,
0x53
};
-static const unsigned int UC_AUX_TABLE_2[] = {
+static const U32 UC_AUX_TABLE_2[] = {
0x2BC,
0x4E
};
-static const unsigned int UC_AUX_TABLE_3[] = {
+static const U32 UC_AUX_TABLE_3[] = {
0x4A,
0x30C
};
-static const unsigned int UC_AUX_TABLE_4[] = {
+static const U32 UC_AUX_TABLE_4[] = {
0x399,
0x308,
0x301
};
-static const unsigned int UC_AUX_TABLE_5[] = {
+static const U32 UC_AUX_TABLE_5[] = {
0x3A5,
0x308,
0x301
};
-static const unsigned int UC_AUX_TABLE_6[] = {
+static const U32 UC_AUX_TABLE_6[] = {
0x535,
0x552
};
-static const unsigned int UC_AUX_TABLE_7[] = {
+static const U32 UC_AUX_TABLE_7[] = {
0x48,
0x331
};
-static const unsigned int UC_AUX_TABLE_8[] = {
+static const U32 UC_AUX_TABLE_8[] = {
0x54,
0x308
};
-static const unsigned int UC_AUX_TABLE_9[] = {
+static const U32 UC_AUX_TABLE_9[] = {
0x57,
0x30A
};
-static const unsigned int UC_AUX_TABLE_10[] = {
+static const U32 UC_AUX_TABLE_10[] = {
0x59,
0x30A
};
-static const unsigned int UC_AUX_TABLE_11[] = {
+static const U32 UC_AUX_TABLE_11[] = {
0x41,
0x2BE
};
-static const unsigned int UC_AUX_TABLE_12[] = {
+static const U32 UC_AUX_TABLE_12[] = {
0x3A5,
0x313
};
-static const unsigned int UC_AUX_TABLE_13[] = {
+static const U32 UC_AUX_TABLE_13[] = {
0x3A5,
0x313,
0x300
};
-static const unsigned int UC_AUX_TABLE_14[] = {
+static const U32 UC_AUX_TABLE_14[] = {
0x3A5,
0x313,
0x301
};
-static const unsigned int UC_AUX_TABLE_15[] = {
+static const U32 UC_AUX_TABLE_15[] = {
0x3A5,
0x313,
0x342
};
-static const unsigned int UC_AUX_TABLE_16[] = {
+static const U32 UC_AUX_TABLE_16[] = {
0x1F08,
0x399
};
-static const unsigned int UC_AUX_TABLE_17[] = {
+static const U32 UC_AUX_TABLE_17[] = {
0x1F09,
0x399
};
-static const unsigned int UC_AUX_TABLE_18[] = {
+static const U32 UC_AUX_TABLE_18[] = {
0x1F0A,
0x399
};
-static const unsigned int UC_AUX_TABLE_19[] = {
+static const U32 UC_AUX_TABLE_19[] = {
0x1F0B,
0x399
};
-static const unsigned int UC_AUX_TABLE_20[] = {
+static const U32 UC_AUX_TABLE_20[] = {
0x1F0C,
0x399
};
-static const unsigned int UC_AUX_TABLE_21[] = {
+static const U32 UC_AUX_TABLE_21[] = {
0x1F0D,
0x399
};
-static const unsigned int UC_AUX_TABLE_22[] = {
+static const U32 UC_AUX_TABLE_22[] = {
0x1F0E,
0x399
};
-static const unsigned int UC_AUX_TABLE_23[] = {
+static const U32 UC_AUX_TABLE_23[] = {
0x1F0F,
0x399
};
-static const unsigned int UC_AUX_TABLE_24[] = {
+static const U32 UC_AUX_TABLE_24[] = {
0x1F28,
0x399
};
-static const unsigned int UC_AUX_TABLE_25[] = {
+static const U32 UC_AUX_TABLE_25[] = {
0x1F29,
0x399
};
-static const unsigned int UC_AUX_TABLE_26[] = {
+static const U32 UC_AUX_TABLE_26[] = {
0x1F2A,
0x399
};
-static const unsigned int UC_AUX_TABLE_27[] = {
+static const U32 UC_AUX_TABLE_27[] = {
0x1F2B,
0x399
};
-static const unsigned int UC_AUX_TABLE_28[] = {
+static const U32 UC_AUX_TABLE_28[] = {
0x1F2C,
0x399
};
-static const unsigned int UC_AUX_TABLE_29[] = {
+static const U32 UC_AUX_TABLE_29[] = {
0x1F2D,
0x399
};
-static const unsigned int UC_AUX_TABLE_30[] = {
+static const U32 UC_AUX_TABLE_30[] = {
0x1F2E,
0x399
};
-static const unsigned int UC_AUX_TABLE_31[] = {
+static const U32 UC_AUX_TABLE_31[] = {
0x1F2F,
0x399
};
-static const unsigned int UC_AUX_TABLE_32[] = {
+static const U32 UC_AUX_TABLE_32[] = {
0x1F68,
0x399
};
-static const unsigned int UC_AUX_TABLE_33[] = {
+static const U32 UC_AUX_TABLE_33[] = {
0x1F69,
0x399
};
-static const unsigned int UC_AUX_TABLE_34[] = {
+static const U32 UC_AUX_TABLE_34[] = {
0x1F6A,
0x399
};
-static const unsigned int UC_AUX_TABLE_35[] = {
+static const U32 UC_AUX_TABLE_35[] = {
0x1F6B,
0x399
};
-static const unsigned int UC_AUX_TABLE_36[] = {
+static const U32 UC_AUX_TABLE_36[] = {
0x1F6C,
0x399
};
-static const unsigned int UC_AUX_TABLE_37[] = {
+static const U32 UC_AUX_TABLE_37[] = {
0x1F6D,
0x399
};
-static const unsigned int UC_AUX_TABLE_38[] = {
+static const U32 UC_AUX_TABLE_38[] = {
0x1F6E,
0x399
};
-static const unsigned int UC_AUX_TABLE_39[] = {
+static const U32 UC_AUX_TABLE_39[] = {
0x1F6F,
0x399
};
-static const unsigned int UC_AUX_TABLE_40[] = {
+static const U32 UC_AUX_TABLE_40[] = {
0x1FBA,
0x399
};
-static const unsigned int UC_AUX_TABLE_41[] = {
+static const U32 UC_AUX_TABLE_41[] = {
0x391,
0x399
};
-static const unsigned int UC_AUX_TABLE_42[] = {
+static const U32 UC_AUX_TABLE_42[] = {
0x386,
0x399
};
-static const unsigned int UC_AUX_TABLE_43[] = {
+static const U32 UC_AUX_TABLE_43[] = {
0x391,
0x342
};
-static const unsigned int UC_AUX_TABLE_44[] = {
+static const U32 UC_AUX_TABLE_44[] = {
0x391,
0x342,
0x399
};
-static const unsigned int UC_AUX_TABLE_45[] = {
+static const U32 UC_AUX_TABLE_45[] = {
0x1FCA,
0x399
};
-static const unsigned int UC_AUX_TABLE_46[] = {
+static const U32 UC_AUX_TABLE_46[] = {
0x397,
0x399
};
-static const unsigned int UC_AUX_TABLE_47[] = {
+static const U32 UC_AUX_TABLE_47[] = {
0x389,
0x399
};
-static const unsigned int UC_AUX_TABLE_48[] = {
+static const U32 UC_AUX_TABLE_48[] = {
0x397,
0x342
};
-static const unsigned int UC_AUX_TABLE_49[] = {
+static const U32 UC_AUX_TABLE_49[] = {
0x397,
0x342,
0x399
};
-static const unsigned int UC_AUX_TABLE_50[] = {
+static const U32 UC_AUX_TABLE_50[] = {
0x399,
0x308,
0x300
};
-static const unsigned int UC_AUX_TABLE_51[] = {
+static const U32 UC_AUX_TABLE_51[] = {
0x399,
0x342
};
-static const unsigned int UC_AUX_TABLE_52[] = {
+static const U32 UC_AUX_TABLE_52[] = {
0x399,
0x308,
0x342
};
-static const unsigned int UC_AUX_TABLE_53[] = {
+static const U32 UC_AUX_TABLE_53[] = {
0x3A5,
0x308,
0x300
};
-static const unsigned int UC_AUX_TABLE_54[] = {
+static const U32 UC_AUX_TABLE_54[] = {
0x3A1,
0x313
};
-static const unsigned int UC_AUX_TABLE_55[] = {
+static const U32 UC_AUX_TABLE_55[] = {
0x3A5,
0x342
};
-static const unsigned int UC_AUX_TABLE_56[] = {
+static const U32 UC_AUX_TABLE_56[] = {
0x3A5,
0x308,
0x342
};
-static const unsigned int UC_AUX_TABLE_57[] = {
+static const U32 UC_AUX_TABLE_57[] = {
0x1FFA,
0x399
};
-static const unsigned int UC_AUX_TABLE_58[] = {
+static const U32 UC_AUX_TABLE_58[] = {
0x3A9,
0x399
};
-static const unsigned int UC_AUX_TABLE_59[] = {
+static const U32 UC_AUX_TABLE_59[] = {
0x38F,
0x399
};
-static const unsigned int UC_AUX_TABLE_60[] = {
+static const U32 UC_AUX_TABLE_60[] = {
0x3A9,
0x342
};
-static const unsigned int UC_AUX_TABLE_61[] = {
+static const U32 UC_AUX_TABLE_61[] = {
0x3A9,
0x342,
0x399
};
-static const unsigned int UC_AUX_TABLE_62[] = {
+static const U32 UC_AUX_TABLE_62[] = {
0x46,
0x46
};
-static const unsigned int UC_AUX_TABLE_63[] = {
+static const U32 UC_AUX_TABLE_63[] = {
0x46,
0x49
};
-static const unsigned int UC_AUX_TABLE_64[] = {
+static const U32 UC_AUX_TABLE_64[] = {
0x46,
0x4C
};
-static const unsigned int UC_AUX_TABLE_65[] = {
+static const U32 UC_AUX_TABLE_65[] = {
0x46,
0x46,
0x49
};
-static const unsigned int UC_AUX_TABLE_66[] = {
+static const U32 UC_AUX_TABLE_66[] = {
0x46,
0x46,
0x4C
};
-static const unsigned int UC_AUX_TABLE_67[] = {
+static const U32 UC_AUX_TABLE_67[] = {
0x53,
0x54
};
-static const unsigned int UC_AUX_TABLE_68[] = {
+static const U32 UC_AUX_TABLE_68[] = {
0x544,
0x546
};
-static const unsigned int UC_AUX_TABLE_69[] = {
+static const U32 UC_AUX_TABLE_69[] = {
0x544,
0x535
};
-static const unsigned int UC_AUX_TABLE_70[] = {
+static const U32 UC_AUX_TABLE_70[] = {
0x544,
0x53B
};
-static const unsigned int UC_AUX_TABLE_71[] = {
+static const U32 UC_AUX_TABLE_71[] = {
0x54E,
0x546
};
-static const unsigned int UC_AUX_TABLE_72[] = {
+static const U32 UC_AUX_TABLE_72[] = {
0x544,
0x53D
};
-static const unsigned int * const UC_AUX_TABLE_ptrs[] = {
+static const U32 * const UC_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
UC_AUX_TABLE_1,
UC_AUX_TABLE_2,
@@ -114857,7 +116177,7 @@ static const U8 UC_AUX_TABLE_lengths[] = {
2 /* UC_AUX_TABLE_72 */
};
-static const int Uppercase_Mapping_invmap[] = { /* for ASCII/Latin1 */
+static const I32 Uppercase_Mapping_invmap[] = { /* for ASCII/Latin1 */
0,
0x41,
0,
@@ -116212,6 +117532,12 @@ static const int Uppercase_Mapping_invmap[] = { /* for ASCII/Latin1 */
0,
0xA7C2,
0,
+ 0xA7C7,
+ 0,
+ 0xA7C9,
+ 0,
+ 0xA7F5,
+ 0,
0xA7B3,
0,
0x13A0,
@@ -116257,7 +117583,7 @@ static const int Uppercase_Mapping_invmap[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 1047 */
- 1401, /* Number of elements */
+ 1407, /* 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 */
@@ -117631,6 +118957,12 @@ static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 1047 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -117757,381 +119089,381 @@ typedef enum {
#define HAS_UC_AUX_TABLES
-static const unsigned int UC_AUX_TABLE_1[] = {
+static const U32 UC_AUX_TABLE_1[] = {
0xE2,
0xE2
};
-static const unsigned int UC_AUX_TABLE_2[] = {
+static const U32 UC_AUX_TABLE_2[] = {
0x2BC,
0xD5
};
-static const unsigned int UC_AUX_TABLE_3[] = {
+static const U32 UC_AUX_TABLE_3[] = {
0xD1,
0x30C
};
-static const unsigned int UC_AUX_TABLE_4[] = {
+static const U32 UC_AUX_TABLE_4[] = {
0x399,
0x308,
0x301
};
-static const unsigned int UC_AUX_TABLE_5[] = {
+static const U32 UC_AUX_TABLE_5[] = {
0x3A5,
0x308,
0x301
};
-static const unsigned int UC_AUX_TABLE_6[] = {
+static const U32 UC_AUX_TABLE_6[] = {
0x535,
0x552
};
-static const unsigned int UC_AUX_TABLE_7[] = {
+static const U32 UC_AUX_TABLE_7[] = {
0xC8,
0x331
};
-static const unsigned int UC_AUX_TABLE_8[] = {
+static const U32 UC_AUX_TABLE_8[] = {
0xE3,
0x308
};
-static const unsigned int UC_AUX_TABLE_9[] = {
+static const U32 UC_AUX_TABLE_9[] = {
0xE6,
0x30A
};
-static const unsigned int UC_AUX_TABLE_10[] = {
+static const U32 UC_AUX_TABLE_10[] = {
0xE8,
0x30A
};
-static const unsigned int UC_AUX_TABLE_11[] = {
+static const U32 UC_AUX_TABLE_11[] = {
0xC1,
0x2BE
};
-static const unsigned int UC_AUX_TABLE_12[] = {
+static const U32 UC_AUX_TABLE_12[] = {
0x3A5,
0x313
};
-static const unsigned int UC_AUX_TABLE_13[] = {
+static const U32 UC_AUX_TABLE_13[] = {
0x3A5,
0x313,
0x300
};
-static const unsigned int UC_AUX_TABLE_14[] = {
+static const U32 UC_AUX_TABLE_14[] = {
0x3A5,
0x313,
0x301
};
-static const unsigned int UC_AUX_TABLE_15[] = {
+static const U32 UC_AUX_TABLE_15[] = {
0x3A5,
0x313,
0x342
};
-static const unsigned int UC_AUX_TABLE_16[] = {
+static const U32 UC_AUX_TABLE_16[] = {
0x1F08,
0x399
};
-static const unsigned int UC_AUX_TABLE_17[] = {
+static const U32 UC_AUX_TABLE_17[] = {
0x1F09,
0x399
};
-static const unsigned int UC_AUX_TABLE_18[] = {
+static const U32 UC_AUX_TABLE_18[] = {
0x1F0A,
0x399
};
-static const unsigned int UC_AUX_TABLE_19[] = {
+static const U32 UC_AUX_TABLE_19[] = {
0x1F0B,
0x399
};
-static const unsigned int UC_AUX_TABLE_20[] = {
+static const U32 UC_AUX_TABLE_20[] = {
0x1F0C,
0x399
};
-static const unsigned int UC_AUX_TABLE_21[] = {
+static const U32 UC_AUX_TABLE_21[] = {
0x1F0D,
0x399
};
-static const unsigned int UC_AUX_TABLE_22[] = {
+static const U32 UC_AUX_TABLE_22[] = {
0x1F0E,
0x399
};
-static const unsigned int UC_AUX_TABLE_23[] = {
+static const U32 UC_AUX_TABLE_23[] = {
0x1F0F,
0x399
};
-static const unsigned int UC_AUX_TABLE_24[] = {
+static const U32 UC_AUX_TABLE_24[] = {
0x1F28,
0x399
};
-static const unsigned int UC_AUX_TABLE_25[] = {
+static const U32 UC_AUX_TABLE_25[] = {
0x1F29,
0x399
};
-static const unsigned int UC_AUX_TABLE_26[] = {
+static const U32 UC_AUX_TABLE_26[] = {
0x1F2A,
0x399
};
-static const unsigned int UC_AUX_TABLE_27[] = {
+static const U32 UC_AUX_TABLE_27[] = {
0x1F2B,
0x399
};
-static const unsigned int UC_AUX_TABLE_28[] = {
+static const U32 UC_AUX_TABLE_28[] = {
0x1F2C,
0x399
};
-static const unsigned int UC_AUX_TABLE_29[] = {
+static const U32 UC_AUX_TABLE_29[] = {
0x1F2D,
0x399
};
-static const unsigned int UC_AUX_TABLE_30[] = {
+static const U32 UC_AUX_TABLE_30[] = {
0x1F2E,
0x399
};
-static const unsigned int UC_AUX_TABLE_31[] = {
+static const U32 UC_AUX_TABLE_31[] = {
0x1F2F,
0x399
};
-static const unsigned int UC_AUX_TABLE_32[] = {
+static const U32 UC_AUX_TABLE_32[] = {
0x1F68,
0x399
};
-static const unsigned int UC_AUX_TABLE_33[] = {
+static const U32 UC_AUX_TABLE_33[] = {
0x1F69,
0x399
};
-static const unsigned int UC_AUX_TABLE_34[] = {
+static const U32 UC_AUX_TABLE_34[] = {
0x1F6A,
0x399
};
-static const unsigned int UC_AUX_TABLE_35[] = {
+static const U32 UC_AUX_TABLE_35[] = {
0x1F6B,
0x399
};
-static const unsigned int UC_AUX_TABLE_36[] = {
+static const U32 UC_AUX_TABLE_36[] = {
0x1F6C,
0x399
};
-static const unsigned int UC_AUX_TABLE_37[] = {
+static const U32 UC_AUX_TABLE_37[] = {
0x1F6D,
0x399
};
-static const unsigned int UC_AUX_TABLE_38[] = {
+static const U32 UC_AUX_TABLE_38[] = {
0x1F6E,
0x399
};
-static const unsigned int UC_AUX_TABLE_39[] = {
+static const U32 UC_AUX_TABLE_39[] = {
0x1F6F,
0x399
};
-static const unsigned int UC_AUX_TABLE_40[] = {
+static const U32 UC_AUX_TABLE_40[] = {
0x1FBA,
0x399
};
-static const unsigned int UC_AUX_TABLE_41[] = {
+static const U32 UC_AUX_TABLE_41[] = {
0x391,
0x399
};
-static const unsigned int UC_AUX_TABLE_42[] = {
+static const U32 UC_AUX_TABLE_42[] = {
0x386,
0x399
};
-static const unsigned int UC_AUX_TABLE_43[] = {
+static const U32 UC_AUX_TABLE_43[] = {
0x391,
0x342
};
-static const unsigned int UC_AUX_TABLE_44[] = {
+static const U32 UC_AUX_TABLE_44[] = {
0x391,
0x342,
0x399
};
-static const unsigned int UC_AUX_TABLE_45[] = {
+static const U32 UC_AUX_TABLE_45[] = {
0x1FCA,
0x399
};
-static const unsigned int UC_AUX_TABLE_46[] = {
+static const U32 UC_AUX_TABLE_46[] = {
0x397,
0x399
};
-static const unsigned int UC_AUX_TABLE_47[] = {
+static const U32 UC_AUX_TABLE_47[] = {
0x389,
0x399
};
-static const unsigned int UC_AUX_TABLE_48[] = {
+static const U32 UC_AUX_TABLE_48[] = {
0x397,
0x342
};
-static const unsigned int UC_AUX_TABLE_49[] = {
+static const U32 UC_AUX_TABLE_49[] = {
0x397,
0x342,
0x399
};
-static const unsigned int UC_AUX_TABLE_50[] = {
+static const U32 UC_AUX_TABLE_50[] = {
0x399,
0x308,
0x300
};
-static const unsigned int UC_AUX_TABLE_51[] = {
+static const U32 UC_AUX_TABLE_51[] = {
0x399,
0x342
};
-static const unsigned int UC_AUX_TABLE_52[] = {
+static const U32 UC_AUX_TABLE_52[] = {
0x399,
0x308,
0x342
};
-static const unsigned int UC_AUX_TABLE_53[] = {
+static const U32 UC_AUX_TABLE_53[] = {
0x3A5,
0x308,
0x300
};
-static const unsigned int UC_AUX_TABLE_54[] = {
+static const U32 UC_AUX_TABLE_54[] = {
0x3A1,
0x313
};
-static const unsigned int UC_AUX_TABLE_55[] = {
+static const U32 UC_AUX_TABLE_55[] = {
0x3A5,
0x342
};
-static const unsigned int UC_AUX_TABLE_56[] = {
+static const U32 UC_AUX_TABLE_56[] = {
0x3A5,
0x308,
0x342
};
-static const unsigned int UC_AUX_TABLE_57[] = {
+static const U32 UC_AUX_TABLE_57[] = {
0x1FFA,
0x399
};
-static const unsigned int UC_AUX_TABLE_58[] = {
+static const U32 UC_AUX_TABLE_58[] = {
0x3A9,
0x399
};
-static const unsigned int UC_AUX_TABLE_59[] = {
+static const U32 UC_AUX_TABLE_59[] = {
0x38F,
0x399
};
-static const unsigned int UC_AUX_TABLE_60[] = {
+static const U32 UC_AUX_TABLE_60[] = {
0x3A9,
0x342
};
-static const unsigned int UC_AUX_TABLE_61[] = {
+static const U32 UC_AUX_TABLE_61[] = {
0x3A9,
0x342,
0x399
};
-static const unsigned int UC_AUX_TABLE_62[] = {
+static const U32 UC_AUX_TABLE_62[] = {
0xC6,
0xC6
};
-static const unsigned int UC_AUX_TABLE_63[] = {
+static const U32 UC_AUX_TABLE_63[] = {
0xC6,
0xC9
};
-static const unsigned int UC_AUX_TABLE_64[] = {
+static const U32 UC_AUX_TABLE_64[] = {
0xC6,
0xD3
};
-static const unsigned int UC_AUX_TABLE_65[] = {
+static const U32 UC_AUX_TABLE_65[] = {
0xC6,
0xC6,
0xC9
};
-static const unsigned int UC_AUX_TABLE_66[] = {
+static const U32 UC_AUX_TABLE_66[] = {
0xC6,
0xC6,
0xD3
};
-static const unsigned int UC_AUX_TABLE_67[] = {
+static const U32 UC_AUX_TABLE_67[] = {
0xE2,
0xE3
};
-static const unsigned int UC_AUX_TABLE_68[] = {
+static const U32 UC_AUX_TABLE_68[] = {
0x544,
0x546
};
-static const unsigned int UC_AUX_TABLE_69[] = {
+static const U32 UC_AUX_TABLE_69[] = {
0x544,
0x535
};
-static const unsigned int UC_AUX_TABLE_70[] = {
+static const U32 UC_AUX_TABLE_70[] = {
0x544,
0x53B
};
-static const unsigned int UC_AUX_TABLE_71[] = {
+static const U32 UC_AUX_TABLE_71[] = {
0x54E,
0x546
};
-static const unsigned int UC_AUX_TABLE_72[] = {
+static const U32 UC_AUX_TABLE_72[] = {
0x544,
0x53D
};
-static const unsigned int * const UC_AUX_TABLE_ptrs[] = {
+static const U32 * const UC_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
UC_AUX_TABLE_1,
UC_AUX_TABLE_2,
@@ -118286,7 +119618,7 @@ static const U8 UC_AUX_TABLE_lengths[] = {
2 /* UC_AUX_TABLE_72 */
};
-static const int Uppercase_Mapping_invmap[] = { /* for EBCDIC 1047 */
+static const I32 Uppercase_Mapping_invmap[] = { /* for EBCDIC 1047 */
0,
0x62,
0,
@@ -119657,6 +120989,12 @@ static const int Uppercase_Mapping_invmap[] = { /* for EBCDIC 1047 */
0,
0xA7C2,
0,
+ 0xA7C7,
+ 0,
+ 0xA7C9,
+ 0,
+ 0xA7F5,
+ 0,
0xA7B3,
0,
0x13A0,
@@ -119702,7 +121040,7 @@ static const int Uppercase_Mapping_invmap[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 037 */
- 1399, /* Number of elements */
+ 1405, /* 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 */
@@ -121074,6 +122412,12 @@ static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 037 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -121200,381 +122544,381 @@ typedef enum {
#define HAS_UC_AUX_TABLES
-static const unsigned int UC_AUX_TABLE_1[] = {
+static const U32 UC_AUX_TABLE_1[] = {
0xE2,
0xE2
};
-static const unsigned int UC_AUX_TABLE_2[] = {
+static const U32 UC_AUX_TABLE_2[] = {
0x2BC,
0xD5
};
-static const unsigned int UC_AUX_TABLE_3[] = {
+static const U32 UC_AUX_TABLE_3[] = {
0xD1,
0x30C
};
-static const unsigned int UC_AUX_TABLE_4[] = {
+static const U32 UC_AUX_TABLE_4[] = {
0x399,
0x308,
0x301
};
-static const unsigned int UC_AUX_TABLE_5[] = {
+static const U32 UC_AUX_TABLE_5[] = {
0x3A5,
0x308,
0x301
};
-static const unsigned int UC_AUX_TABLE_6[] = {
+static const U32 UC_AUX_TABLE_6[] = {
0x535,
0x552
};
-static const unsigned int UC_AUX_TABLE_7[] = {
+static const U32 UC_AUX_TABLE_7[] = {
0xC8,
0x331
};
-static const unsigned int UC_AUX_TABLE_8[] = {
+static const U32 UC_AUX_TABLE_8[] = {
0xE3,
0x308
};
-static const unsigned int UC_AUX_TABLE_9[] = {
+static const U32 UC_AUX_TABLE_9[] = {
0xE6,
0x30A
};
-static const unsigned int UC_AUX_TABLE_10[] = {
+static const U32 UC_AUX_TABLE_10[] = {
0xE8,
0x30A
};
-static const unsigned int UC_AUX_TABLE_11[] = {
+static const U32 UC_AUX_TABLE_11[] = {
0xC1,
0x2BE
};
-static const unsigned int UC_AUX_TABLE_12[] = {
+static const U32 UC_AUX_TABLE_12[] = {
0x3A5,
0x313
};
-static const unsigned int UC_AUX_TABLE_13[] = {
+static const U32 UC_AUX_TABLE_13[] = {
0x3A5,
0x313,
0x300
};
-static const unsigned int UC_AUX_TABLE_14[] = {
+static const U32 UC_AUX_TABLE_14[] = {
0x3A5,
0x313,
0x301
};
-static const unsigned int UC_AUX_TABLE_15[] = {
+static const U32 UC_AUX_TABLE_15[] = {
0x3A5,
0x313,
0x342
};
-static const unsigned int UC_AUX_TABLE_16[] = {
+static const U32 UC_AUX_TABLE_16[] = {
0x1F08,
0x399
};
-static const unsigned int UC_AUX_TABLE_17[] = {
+static const U32 UC_AUX_TABLE_17[] = {
0x1F09,
0x399
};
-static const unsigned int UC_AUX_TABLE_18[] = {
+static const U32 UC_AUX_TABLE_18[] = {
0x1F0A,
0x399
};
-static const unsigned int UC_AUX_TABLE_19[] = {
+static const U32 UC_AUX_TABLE_19[] = {
0x1F0B,
0x399
};
-static const unsigned int UC_AUX_TABLE_20[] = {
+static const U32 UC_AUX_TABLE_20[] = {
0x1F0C,
0x399
};
-static const unsigned int UC_AUX_TABLE_21[] = {
+static const U32 UC_AUX_TABLE_21[] = {
0x1F0D,
0x399
};
-static const unsigned int UC_AUX_TABLE_22[] = {
+static const U32 UC_AUX_TABLE_22[] = {
0x1F0E,
0x399
};
-static const unsigned int UC_AUX_TABLE_23[] = {
+static const U32 UC_AUX_TABLE_23[] = {
0x1F0F,
0x399
};
-static const unsigned int UC_AUX_TABLE_24[] = {
+static const U32 UC_AUX_TABLE_24[] = {
0x1F28,
0x399
};
-static const unsigned int UC_AUX_TABLE_25[] = {
+static const U32 UC_AUX_TABLE_25[] = {
0x1F29,
0x399
};
-static const unsigned int UC_AUX_TABLE_26[] = {
+static const U32 UC_AUX_TABLE_26[] = {
0x1F2A,
0x399
};
-static const unsigned int UC_AUX_TABLE_27[] = {
+static const U32 UC_AUX_TABLE_27[] = {
0x1F2B,
0x399
};
-static const unsigned int UC_AUX_TABLE_28[] = {
+static const U32 UC_AUX_TABLE_28[] = {
0x1F2C,
0x399
};
-static const unsigned int UC_AUX_TABLE_29[] = {
+static const U32 UC_AUX_TABLE_29[] = {
0x1F2D,
0x399
};
-static const unsigned int UC_AUX_TABLE_30[] = {
+static const U32 UC_AUX_TABLE_30[] = {
0x1F2E,
0x399
};
-static const unsigned int UC_AUX_TABLE_31[] = {
+static const U32 UC_AUX_TABLE_31[] = {
0x1F2F,
0x399
};
-static const unsigned int UC_AUX_TABLE_32[] = {
+static const U32 UC_AUX_TABLE_32[] = {
0x1F68,
0x399
};
-static const unsigned int UC_AUX_TABLE_33[] = {
+static const U32 UC_AUX_TABLE_33[] = {
0x1F69,
0x399
};
-static const unsigned int UC_AUX_TABLE_34[] = {
+static const U32 UC_AUX_TABLE_34[] = {
0x1F6A,
0x399
};
-static const unsigned int UC_AUX_TABLE_35[] = {
+static const U32 UC_AUX_TABLE_35[] = {
0x1F6B,
0x399
};
-static const unsigned int UC_AUX_TABLE_36[] = {
+static const U32 UC_AUX_TABLE_36[] = {
0x1F6C,
0x399
};
-static const unsigned int UC_AUX_TABLE_37[] = {
+static const U32 UC_AUX_TABLE_37[] = {
0x1F6D,
0x399
};
-static const unsigned int UC_AUX_TABLE_38[] = {
+static const U32 UC_AUX_TABLE_38[] = {
0x1F6E,
0x399
};
-static const unsigned int UC_AUX_TABLE_39[] = {
+static const U32 UC_AUX_TABLE_39[] = {
0x1F6F,
0x399
};
-static const unsigned int UC_AUX_TABLE_40[] = {
+static const U32 UC_AUX_TABLE_40[] = {
0x1FBA,
0x399
};
-static const unsigned int UC_AUX_TABLE_41[] = {
+static const U32 UC_AUX_TABLE_41[] = {
0x391,
0x399
};
-static const unsigned int UC_AUX_TABLE_42[] = {
+static const U32 UC_AUX_TABLE_42[] = {
0x386,
0x399
};
-static const unsigned int UC_AUX_TABLE_43[] = {
+static const U32 UC_AUX_TABLE_43[] = {
0x391,
0x342
};
-static const unsigned int UC_AUX_TABLE_44[] = {
+static const U32 UC_AUX_TABLE_44[] = {
0x391,
0x342,
0x399
};
-static const unsigned int UC_AUX_TABLE_45[] = {
+static const U32 UC_AUX_TABLE_45[] = {
0x1FCA,
0x399
};
-static const unsigned int UC_AUX_TABLE_46[] = {
+static const U32 UC_AUX_TABLE_46[] = {
0x397,
0x399
};
-static const unsigned int UC_AUX_TABLE_47[] = {
+static const U32 UC_AUX_TABLE_47[] = {
0x389,
0x399
};
-static const unsigned int UC_AUX_TABLE_48[] = {
+static const U32 UC_AUX_TABLE_48[] = {
0x397,
0x342
};
-static const unsigned int UC_AUX_TABLE_49[] = {
+static const U32 UC_AUX_TABLE_49[] = {
0x397,
0x342,
0x399
};
-static const unsigned int UC_AUX_TABLE_50[] = {
+static const U32 UC_AUX_TABLE_50[] = {
0x399,
0x308,
0x300
};
-static const unsigned int UC_AUX_TABLE_51[] = {
+static const U32 UC_AUX_TABLE_51[] = {
0x399,
0x342
};
-static const unsigned int UC_AUX_TABLE_52[] = {
+static const U32 UC_AUX_TABLE_52[] = {
0x399,
0x308,
0x342
};
-static const unsigned int UC_AUX_TABLE_53[] = {
+static const U32 UC_AUX_TABLE_53[] = {
0x3A5,
0x308,
0x300
};
-static const unsigned int UC_AUX_TABLE_54[] = {
+static const U32 UC_AUX_TABLE_54[] = {
0x3A1,
0x313
};
-static const unsigned int UC_AUX_TABLE_55[] = {
+static const U32 UC_AUX_TABLE_55[] = {
0x3A5,
0x342
};
-static const unsigned int UC_AUX_TABLE_56[] = {
+static const U32 UC_AUX_TABLE_56[] = {
0x3A5,
0x308,
0x342
};
-static const unsigned int UC_AUX_TABLE_57[] = {
+static const U32 UC_AUX_TABLE_57[] = {
0x1FFA,
0x399
};
-static const unsigned int UC_AUX_TABLE_58[] = {
+static const U32 UC_AUX_TABLE_58[] = {
0x3A9,
0x399
};
-static const unsigned int UC_AUX_TABLE_59[] = {
+static const U32 UC_AUX_TABLE_59[] = {
0x38F,
0x399
};
-static const unsigned int UC_AUX_TABLE_60[] = {
+static const U32 UC_AUX_TABLE_60[] = {
0x3A9,
0x342
};
-static const unsigned int UC_AUX_TABLE_61[] = {
+static const U32 UC_AUX_TABLE_61[] = {
0x3A9,
0x342,
0x399
};
-static const unsigned int UC_AUX_TABLE_62[] = {
+static const U32 UC_AUX_TABLE_62[] = {
0xC6,
0xC6
};
-static const unsigned int UC_AUX_TABLE_63[] = {
+static const U32 UC_AUX_TABLE_63[] = {
0xC6,
0xC9
};
-static const unsigned int UC_AUX_TABLE_64[] = {
+static const U32 UC_AUX_TABLE_64[] = {
0xC6,
0xD3
};
-static const unsigned int UC_AUX_TABLE_65[] = {
+static const U32 UC_AUX_TABLE_65[] = {
0xC6,
0xC6,
0xC9
};
-static const unsigned int UC_AUX_TABLE_66[] = {
+static const U32 UC_AUX_TABLE_66[] = {
0xC6,
0xC6,
0xD3
};
-static const unsigned int UC_AUX_TABLE_67[] = {
+static const U32 UC_AUX_TABLE_67[] = {
0xE2,
0xE3
};
-static const unsigned int UC_AUX_TABLE_68[] = {
+static const U32 UC_AUX_TABLE_68[] = {
0x544,
0x546
};
-static const unsigned int UC_AUX_TABLE_69[] = {
+static const U32 UC_AUX_TABLE_69[] = {
0x544,
0x535
};
-static const unsigned int UC_AUX_TABLE_70[] = {
+static const U32 UC_AUX_TABLE_70[] = {
0x544,
0x53B
};
-static const unsigned int UC_AUX_TABLE_71[] = {
+static const U32 UC_AUX_TABLE_71[] = {
0x54E,
0x546
};
-static const unsigned int UC_AUX_TABLE_72[] = {
+static const U32 UC_AUX_TABLE_72[] = {
0x544,
0x53D
};
-static const unsigned int * const UC_AUX_TABLE_ptrs[] = {
+static const U32 * const UC_AUX_TABLE_ptrs[] = {
NULL, /* Placeholder */
UC_AUX_TABLE_1,
UC_AUX_TABLE_2,
@@ -121729,7 +123073,7 @@ static const U8 UC_AUX_TABLE_lengths[] = {
2 /* UC_AUX_TABLE_72 */
};
-static const int Uppercase_Mapping_invmap[] = { /* for EBCDIC 037 */
+static const I32 Uppercase_Mapping_invmap[] = { /* for EBCDIC 037 */
0,
0x62,
0,
@@ -123098,6 +124442,12 @@ static const int Uppercase_Mapping_invmap[] = { /* for EBCDIC 037 */
0,
0xA7C2,
0,
+ 0xA7C7,
+ 0,
+ 0xA7C9,
+ 0,
+ 0xA7F5,
+ 0,
0xA7B3,
0,
0x13A0,
@@ -123443,7 +124793,7 @@ static const UV UNI_ASCII_invlist[] = { /* for EBCDIC 037 */
# endif /* EBCDIC 037 */
static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
- 1332, /* Number of elements */
+ 1354, /* 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 */
@@ -123494,7 +124844,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x984,
0x985,
@@ -123603,7 +124953,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -123692,8 +125042,6 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -123707,7 +125055,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -123880,7 +125228,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -123955,7 +125303,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -123990,7 +125338,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -124010,15 +125358,11 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -124030,9 +125374,9 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -124072,7 +125416,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -124162,7 +125506,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -124281,10 +125625,18 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -124302,12 +125654,10 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -124360,11 +125710,9 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -124394,7 +125742,21 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -124449,6 +125811,8 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -124496,11 +125860,15 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -124696,11 +126064,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -124712,11 +126076,11 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -124733,32 +126097,38 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -124769,6 +126139,8 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -124784,7 +126156,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_CASED_invlist[] = { /* for ASCII/Latin1 */
- 281, /* Number of elements */
+ 283, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -124970,13 +126342,15 @@ static const UV UNI_CASED_invlist[] = { /* for ASCII/Latin1 */
0xA790,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xA7F8,
0xA7FB,
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -125079,7 +126453,7 @@ static const UV UNI_CASED_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_CASED_invlist[] = { /* for EBCDIC 1047 */
- 307, /* Number of elements */
+ 309, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -125291,13 +126665,15 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 1047 */
0xA790,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xA7F8,
0xA7FB,
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -125400,7 +126776,7 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_CASED_invlist[] = { /* for EBCDIC 037 */
- 303, /* Number of elements */
+ 305, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -125608,13 +126984,15 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 037 */
0xA790,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xA7F8,
0xA7FB,
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -125714,7 +127092,7 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_CASEDLETTER_invlist[] = { /* for ASCII/Latin1 */
- 263, /* Number of elements */
+ 265, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -125888,13 +127266,15 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for ASCII/Latin1 */
0xA790,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xA7FA,
0xA7FB,
0xAB30,
0xAB5B,
0xAB60,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -125991,7 +127371,7 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 1047 */
- 295, /* Number of elements */
+ 297, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -126197,13 +127577,15 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 1047 */
0xA790,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xA7FA,
0xA7FB,
0xAB30,
0xAB5B,
0xAB60,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -126300,7 +127682,7 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 037 */
- 291, /* Number of elements */
+ 293, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -126502,13 +127884,15 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 037 */
0xA790,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xA7FA,
0xA7FB,
0xAB30,
0xAB5B,
0xAB60,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -126602,7 +127986,7 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_LOWERCASELETTER_invlist[] = { /* for ASCII/Latin1 */
- 1285, /* Number of elements */
+ 1291, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -127809,12 +129193,18 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for ASCII/Latin1 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xA7FA,
0xA7FB,
0xAB30,
0xAB5B,
0xAB60,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -127901,7 +129291,7 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 1047 */
- 1299, /* Number of elements */
+ 1305, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -129122,12 +130512,18 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 1047 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xA7FA,
0xA7FB,
0xAB30,
0xAB5B,
0xAB60,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -129214,7 +130610,7 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 037 */
- 1299, /* Number of elements */
+ 1305, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -130435,12 +131831,18 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 037 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xA7FA,
0xA7FB,
0xAB30,
0xAB5B,
0xAB60,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -131511,7 +132913,7 @@ static const UV UNI_TITLE_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_UPPERCASELETTER_invlist[] = { /* for ASCII/Latin1 */
- 1273, /* Number of elements */
+ 1277, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -132711,7 +134113,11 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for ASCII/Latin1 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -132798,7 +134204,7 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 1047 */
- 1291, /* Number of elements */
+ 1295, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -134016,7 +135422,11 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 1047 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -134103,7 +135513,7 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 037 */
- 1287, /* Number of elements */
+ 1291, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -135317,7 +136727,11 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 037 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -135465,7 +136879,7 @@ static const UV UNI_VERTSPACE_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
- 1431, /* Number of elements */
+ 1465, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -135577,7 +136991,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D4,
0x8E0,
0x8E3,
@@ -135797,8 +137211,6 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -135820,7 +137232,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -136012,6 +137424,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x1A9A,
0x1AA7,
0x1AA8,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B34,
0x1B35,
@@ -136187,13 +137601,13 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -136215,8 +137629,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA806,
0xA807,
0xA828,
@@ -136279,7 +137693,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABF0,
@@ -136456,12 +137870,20 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -136479,7 +137901,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -136488,7 +137910,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x111C0,
0x111C1,
0x111C5,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -136549,7 +137971,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x11450,
0x1145A,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114C2,
0x114C4,
@@ -136589,7 +138011,23 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193D,
+ 0x1193F,
+ 0x11943,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -136660,6 +138098,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -136700,10 +138140,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -136888,8 +138332,10 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x1F16A,
0x1F170,
0x1F18A,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -136899,7 +138345,9 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* ASCII/Latin1 */
@@ -136910,7 +138358,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
- 1455, /* Number of elements */
+ 1489, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -137046,7 +138494,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D4,
0x8E0,
0x8E3,
@@ -137266,8 +138714,6 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -137289,7 +138735,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -137481,6 +138927,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x1A9A,
0x1AA7,
0x1AA8,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B34,
0x1B35,
@@ -137656,13 +139104,13 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -137684,8 +139132,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA806,
0xA807,
0xA828,
@@ -137748,7 +139196,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABF0,
@@ -137925,12 +139373,20 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -137948,7 +139404,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -137957,7 +139413,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x111C0,
0x111C1,
0x111C5,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -138018,7 +139474,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x11450,
0x1145A,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114C2,
0x114C4,
@@ -138058,7 +139514,23 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193D,
+ 0x1193F,
+ 0x11943,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -138129,6 +139601,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -138169,10 +139643,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -138357,8 +139835,10 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x1F16A,
0x1F170,
0x1F18A,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -138368,7 +139848,9 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 1047 */
@@ -138379,7 +139861,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
- 1451, /* Number of elements */
+ 1485, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -138511,7 +139993,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D4,
0x8E0,
0x8E3,
@@ -138731,8 +140213,6 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -138754,7 +140234,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -138946,6 +140426,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x1A9A,
0x1AA7,
0x1AA8,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B34,
0x1B35,
@@ -139121,13 +140603,13 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -139149,8 +140631,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA806,
0xA807,
0xA828,
@@ -139213,7 +140695,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABF0,
@@ -139390,12 +140872,20 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -139413,7 +140903,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -139422,7 +140912,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x111C0,
0x111C1,
0x111C5,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -139483,7 +140973,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x11450,
0x1145A,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114C2,
0x114C4,
@@ -139523,7 +141013,23 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193D,
+ 0x1193F,
+ 0x11943,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -139594,6 +141100,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -139634,10 +141142,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -139822,8 +141334,10 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x1F16A,
0x1F170,
0x1F18A,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -139833,7 +141347,9 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 037 */
@@ -139841,7 +141357,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
- 1359, /* Number of elements */
+ 1391, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -139953,7 +141469,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D4,
0x8E0,
0x8E3,
@@ -140161,8 +141677,6 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -140182,7 +141696,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0xD64,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -140358,6 +141872,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x1A75,
0x1AA7,
0x1AA8,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B34,
0x1B35,
@@ -140533,13 +142049,13 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -140563,8 +142079,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA806,
0xA807,
0xA828,
@@ -140627,7 +142143,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xAC00,
@@ -140796,12 +142312,20 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x10CF3,
0x10D00,
0x10D28,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -140813,7 +142337,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x11100,
0x11133,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -140822,6 +142346,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x111C0,
0x111C1,
0x111C5,
+ 0x111CE,
+ 0x111D0,
0x111DA,
0x111DB,
0x111DC,
@@ -140879,7 +142405,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114C2,
0x114C4,
@@ -140911,7 +142437,21 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193D,
+ 0x1193F,
+ 0x11943,
0x119A0,
0x119A8,
0x119AA,
@@ -140976,6 +142516,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x11D99,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -141012,10 +142554,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -141193,7 +142739,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x1F170,
0x1F18A,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -141203,7 +142749,9 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* ASCII/Latin1 */
@@ -141214,7 +142762,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
- 1385, /* Number of elements */
+ 1417, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -141352,7 +142900,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D4,
0x8E0,
0x8E3,
@@ -141560,8 +143108,6 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -141581,7 +143127,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0xD64,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -141757,6 +143303,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x1A75,
0x1AA7,
0x1AA8,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B34,
0x1B35,
@@ -141932,13 +143480,13 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -141962,8 +143510,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA806,
0xA807,
0xA828,
@@ -142026,7 +143574,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xAC00,
@@ -142195,12 +143743,20 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x10CF3,
0x10D00,
0x10D28,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -142212,7 +143768,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x11100,
0x11133,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -142221,6 +143777,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x111C0,
0x111C1,
0x111C5,
+ 0x111CE,
+ 0x111D0,
0x111DA,
0x111DB,
0x111DC,
@@ -142278,7 +143836,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114C2,
0x114C4,
@@ -142310,7 +143868,21 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193D,
+ 0x1193F,
+ 0x11943,
0x119A0,
0x119A8,
0x119AA,
@@ -142375,6 +143947,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x11D99,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -142411,10 +143985,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -142592,7 +144170,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x1F170,
0x1F18A,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -142602,7 +144180,9 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 1047 */
@@ -142613,7 +144193,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
- 1381, /* Number of elements */
+ 1413, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -142747,7 +144327,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D4,
0x8E0,
0x8E3,
@@ -142955,8 +144535,6 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -142976,7 +144554,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0xD64,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -143152,6 +144730,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x1A75,
0x1AA7,
0x1AA8,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B34,
0x1B35,
@@ -143327,13 +144907,13 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -143357,8 +144937,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA806,
0xA807,
0xA828,
@@ -143421,7 +145001,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xAC00,
@@ -143590,12 +145170,20 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x10CF3,
0x10D00,
0x10D28,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -143607,7 +145195,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x11100,
0x11133,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -143616,6 +145204,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x111C0,
0x111C1,
0x111C5,
+ 0x111CE,
+ 0x111D0,
0x111DA,
0x111DB,
0x111DC,
@@ -143673,7 +145263,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114C2,
0x114C4,
@@ -143705,7 +145295,21 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193D,
+ 0x1193F,
+ 0x11943,
0x119A0,
0x119A8,
0x119AA,
@@ -143770,6 +145374,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x11D99,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -143806,10 +145412,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x16FE2,
0x16FE3,
0x16FE4,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -143987,7 +145597,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x1F170,
0x1F18A,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -143997,7 +145607,9 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 037 */
@@ -144142,7 +145754,7 @@ static const UV UNI_XPOSIXCNTRL_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for ASCII/Latin1 */
- 119, /* Number of elements */
+ 123, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -144247,6 +145859,8 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for ASCII/Latin1 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -144264,7 +145878,9 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for ASCII/Latin1 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* ASCII/Latin1 */
@@ -144275,7 +145891,7 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 1047 */
- 119, /* Number of elements */
+ 123, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -144380,6 +145996,8 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 1047 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -144397,7 +146015,9 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 1047 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 1047 */
@@ -144408,7 +146028,7 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 037 */
- 119, /* Number of elements */
+ 123, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -144513,6 +146133,8 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 037 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -144530,7 +146152,9 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 037 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 037 */
@@ -144538,7 +146162,7 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
- 1343, /* Number of elements */
+ 1365, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -144592,7 +146216,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x984,
0x985,
@@ -144701,7 +146325,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -144790,8 +146414,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -144805,7 +146427,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -144980,7 +146602,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -145061,7 +146683,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -145096,7 +146718,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -145116,15 +146738,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -145136,9 +146754,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -145178,7 +146796,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -145268,7 +146886,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -145387,10 +147005,18 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -145408,12 +147034,10 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -145466,11 +147090,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -145500,7 +147122,21 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -145555,6 +147191,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -145602,11 +147240,15 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -145802,11 +147444,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -145818,11 +147456,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -145839,32 +147477,38 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -145875,6 +147519,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -145895,7 +147541,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
- 1343, /* Number of elements */
+ 1365, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -145949,7 +147595,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x984,
0x985,
@@ -146058,7 +147704,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -146147,8 +147793,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -146162,7 +147806,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -146337,7 +147981,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -146418,7 +148062,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -146453,7 +148097,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -146473,15 +148117,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -146493,9 +148133,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -146535,7 +148175,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -146625,7 +148265,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -146744,10 +148384,18 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -146765,12 +148413,10 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -146823,11 +148469,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -146857,7 +148501,21 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -146912,6 +148570,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -146959,11 +148619,15 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -147159,11 +148823,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -147175,11 +148835,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -147196,32 +148856,38 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -147232,6 +148898,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -147252,7 +148920,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
- 1343, /* Number of elements */
+ 1365, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -147306,7 +148974,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x984,
0x985,
@@ -147415,7 +149083,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -147504,8 +149172,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -147519,7 +149185,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -147694,7 +149360,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -147775,7 +149441,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -147810,7 +149476,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -147830,15 +149496,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -147850,9 +149512,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -147892,7 +149554,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -147982,7 +149644,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -148101,10 +149763,18 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -148122,12 +149792,10 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -148180,11 +149848,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -148214,7 +149880,21 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -148269,6 +149949,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -148316,11 +149998,15 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -148516,11 +150202,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -148532,11 +150214,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -148553,32 +150235,38 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -148589,6 +150277,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -148606,7 +150296,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_XPOSIXLOWER_invlist[] = { /* for ASCII/Latin1 */
- 1299, /* Number of elements */
+ 1305, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -149827,12 +151517,18 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for ASCII/Latin1 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xA7F8,
0xA7FB,
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -149919,7 +151615,7 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 1047 */
- 1307, /* Number of elements */
+ 1313, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -151148,12 +152844,18 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 1047 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xA7F8,
0xA7FB,
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -151240,7 +152942,7 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 037 */
- 1307, /* Number of elements */
+ 1313, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -152469,12 +154171,18 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 037 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xA7F8,
0xA7FB,
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -152558,7 +154266,7 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
- 1337, /* Number of elements */
+ 1359, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -152612,7 +154320,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x984,
0x985,
@@ -152721,7 +154429,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -152810,8 +154518,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -152825,7 +154531,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -152998,7 +154704,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -153075,7 +154781,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -153110,7 +154816,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -153130,15 +154836,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -153150,9 +154852,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -153192,7 +154894,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -153282,7 +154984,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -153401,10 +155103,18 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -153422,12 +155132,10 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -153480,11 +155188,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -153514,7 +155220,21 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -153569,6 +155289,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -153616,11 +155338,15 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -153816,11 +155542,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -153832,11 +155554,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -153853,32 +155575,38 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -153889,6 +155617,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -153909,7 +155639,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
- 1337, /* Number of elements */
+ 1359, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -153963,7 +155693,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x984,
0x985,
@@ -154072,7 +155802,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -154161,8 +155891,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -154176,7 +155904,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -154349,7 +156077,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -154426,7 +156154,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -154461,7 +156189,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -154481,15 +156209,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -154501,9 +156225,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -154543,7 +156267,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -154633,7 +156357,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -154752,10 +156476,18 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -154773,12 +156505,10 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -154831,11 +156561,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -154865,7 +156593,21 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -154920,6 +156662,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -154967,11 +156711,15 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -155167,11 +156915,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -155183,11 +156927,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -155204,32 +156948,38 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -155240,6 +156990,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -155260,7 +157012,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
- 1337, /* Number of elements */
+ 1359, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -155314,7 +157066,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x984,
0x985,
@@ -155423,7 +157175,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -155512,8 +157264,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -155527,7 +157277,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -155700,7 +157450,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -155777,7 +157527,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -155812,7 +157562,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -155832,15 +157582,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -155852,9 +157598,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -155894,7 +157640,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -155984,7 +157730,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -156103,10 +157849,18 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -156124,12 +157878,10 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -156182,11 +157934,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -156216,7 +157966,21 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -156271,6 +158035,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -156318,11 +158084,15 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -156518,11 +158288,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -156534,11 +158300,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -156555,32 +158321,38 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -156591,6 +158363,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -156608,7 +158382,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */
- 355, /* Number of elements */
+ 361, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -156783,6 +158557,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */
0x2E2F,
0x2E30,
0x2E50,
+ 0x2E52,
+ 0x2E53,
0x3001,
0x3004,
0x3008,
@@ -156889,6 +158665,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */
0x10B40,
0x10B99,
0x10B9D,
+ 0x10EAD,
+ 0x10EAE,
0x10F55,
0x10F5A,
0x11047,
@@ -156915,7 +158693,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */
0x112AA,
0x1144B,
0x11450,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x1145D,
0x1145E,
@@ -156931,6 +158709,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */
0x1173F,
0x1183B,
0x1183C,
+ 0x11944,
+ 0x11947,
0x119E2,
0x119E3,
0x11A3F,
@@ -156977,7 +158757,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */
- 363, /* Number of elements */
+ 369, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -157160,6 +158940,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */
0x2E2F,
0x2E30,
0x2E50,
+ 0x2E52,
+ 0x2E53,
0x3001,
0x3004,
0x3008,
@@ -157266,6 +159048,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */
0x10B40,
0x10B99,
0x10B9D,
+ 0x10EAD,
+ 0x10EAE,
0x10F55,
0x10F5A,
0x11047,
@@ -157292,7 +159076,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */
0x112AA,
0x1144B,
0x11450,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x1145D,
0x1145E,
@@ -157308,6 +159092,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */
0x1173F,
0x1183B,
0x1183C,
+ 0x11944,
+ 0x11947,
0x119E2,
0x119E3,
0x11A3F,
@@ -157354,7 +159140,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */
- 365, /* Number of elements */
+ 371, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -157539,6 +159325,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */
0x2E2F,
0x2E30,
0x2E50,
+ 0x2E52,
+ 0x2E53,
0x3001,
0x3004,
0x3008,
@@ -157645,6 +159433,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */
0x10B40,
0x10B99,
0x10B9D,
+ 0x10EAD,
+ 0x10EAE,
0x10F55,
0x10F5A,
0x11047,
@@ -157671,7 +159461,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */
0x112AA,
0x1144B,
0x11450,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x1145D,
0x1145E,
@@ -157687,6 +159477,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */
0x1173F,
0x1183B,
0x1183C,
+ 0x11944,
+ 0x11947,
0x119E2,
0x119E3,
0x11A3F,
@@ -157836,7 +159628,7 @@ static const UV UNI_XPOSIXSPACE_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_XPOSIXUPPER_invlist[] = { /* for ASCII/Latin1 */
- 1283, /* Number of elements */
+ 1287, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -159040,7 +160832,11 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for ASCII/Latin1 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -159133,7 +160929,7 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 1047 */
- 1301, /* Number of elements */
+ 1305, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -160355,7 +162151,11 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 1047 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -160448,7 +162248,7 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 037 */
- 1297, /* Number of elements */
+ 1301, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -161666,7 +163466,11 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 037 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -161756,7 +163560,7 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
- 1435, /* Number of elements */
+ 1467, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -161864,7 +163668,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -161983,7 +163787,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -162076,8 +163880,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -162095,7 +163897,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -162294,7 +164096,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x1AA7,
0x1AA8,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -162466,13 +164268,13 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -162494,9 +164296,11 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -162548,7 +164352,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -162745,12 +164549,20 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -162768,7 +164580,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -162777,7 +164589,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -162836,7 +164648,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -162870,7 +164682,21 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -162931,6 +164757,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -162972,11 +164800,15 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -163181,8 +165013,10 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x1F16A,
0x1F170,
0x1F18A,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -163193,6 +165027,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -163205,7 +165041,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
- 1459, /* Number of elements */
+ 1491, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -163337,7 +165173,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -163456,7 +165292,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -163549,8 +165385,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -163568,7 +165402,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -163767,7 +165601,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x1AA7,
0x1AA8,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -163939,13 +165773,13 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -163967,9 +165801,11 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -164021,7 +165857,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -164218,12 +166054,20 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -164241,7 +166085,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -164250,7 +166094,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -164309,7 +166153,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -164343,7 +166187,21 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -164404,6 +166262,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -164445,11 +166305,15 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -164654,8 +166518,10 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x1F16A,
0x1F170,
0x1F18A,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -164666,6 +166532,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -164678,7 +166546,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
- 1455, /* Number of elements */
+ 1487, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -164806,7 +166674,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -164925,7 +166793,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -165018,8 +166886,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -165037,7 +166903,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -165236,7 +167102,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x1AA7,
0x1AA8,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -165408,13 +167274,13 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -165436,9 +167302,11 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -165490,7 +167358,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -165687,12 +167555,20 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -165710,7 +167586,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -165719,7 +167595,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -165778,7 +167654,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -165812,7 +167688,21 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -165873,6 +167763,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -165914,11 +167806,15 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -166123,8 +168019,10 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x1F16A,
0x1F170,
0x1F18A,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -166135,6 +168033,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -166222,7 +168122,7 @@ static const UV UNI_XPOSIXXDIGIT_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for ASCII/Latin1 */
- 267, /* Number of elements */
+ 269, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -166464,7 +168364,9 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for ASCII/Latin1 */
0xA7B0,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -166503,7 +168405,7 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 1047 */
- 299, /* Number of elements */
+ 301, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -166777,7 +168679,9 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 1047 */
0xA7B0,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -166816,7 +168720,7 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 037 */
- 295, /* Number of elements */
+ 297, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -167086,7 +168990,9 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 037 */
0xA7B0,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -167122,7 +169028,7 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
- 1231, /* Number of elements */
+ 1257, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -167228,7 +169134,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -167379,7 +169285,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -167720,13 +169626,13 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -167750,8 +169656,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -167826,7 +169732,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -168007,12 +169913,18 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -168025,6 +169937,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -168076,7 +169990,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -168102,7 +170016,19 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -168151,6 +170077,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12480,
@@ -168188,7 +170116,9 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -168346,7 +170276,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -168356,7 +170286,9 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* ASCII/Latin1 */
@@ -168367,7 +170299,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
- 1257, /* Number of elements */
+ 1283, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -168499,7 +170431,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -168650,7 +170582,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -168991,13 +170923,13 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -169021,8 +170953,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -169097,7 +171029,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -169278,12 +171210,18 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -169296,6 +171234,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -169347,7 +171287,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -169373,7 +171313,19 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -169422,6 +171374,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12480,
@@ -169459,7 +171413,9 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -169617,7 +171573,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -169627,7 +171583,9 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 1047 */
@@ -169638,7 +171596,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
- 1253, /* Number of elements */
+ 1279, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -169766,7 +171724,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -169917,7 +171875,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -170258,13 +172216,13 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -170288,8 +172246,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -170364,7 +172322,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -170545,12 +172503,18 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -170563,6 +172527,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -170614,7 +172580,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -170640,7 +172606,19 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -170689,6 +172667,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12480,
@@ -170726,7 +172706,9 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -170884,7 +172866,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -170894,7 +172876,9 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 037 */
@@ -170902,7 +172886,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 */
- 1447, /* Number of elements */
+ 1481, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -171018,7 +173002,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -171137,7 +173121,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -171230,8 +173214,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -171249,7 +173231,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -171449,6 +173431,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -171618,13 +173602,13 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -171646,9 +173630,11 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -171700,7 +173686,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -171909,12 +173895,20 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -171932,7 +173926,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -171941,7 +173935,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -172000,7 +173994,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -172034,7 +174028,21 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -172095,6 +174103,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -172136,11 +174146,15 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -172339,8 +174353,10 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -172351,6 +174367,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -172363,7 +174381,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 *
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
- 1473, /* Number of elements */
+ 1507, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -172505,7 +174523,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -172624,7 +174642,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -172717,8 +174735,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -172736,7 +174752,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -172936,6 +174952,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -173105,13 +175123,13 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -173133,9 +175151,11 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -173187,7 +175207,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -173396,12 +175416,20 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -173419,7 +175447,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -173428,7 +175456,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -173487,7 +175515,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -173521,7 +175549,21 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -173582,6 +175624,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -173623,11 +175667,15 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -173826,8 +175874,10 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -173838,6 +175888,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -173850,7 +175902,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
- 1469, /* Number of elements */
+ 1503, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -173988,7 +176040,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -174107,7 +176159,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -174200,8 +176252,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -174219,7 +176269,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -174419,6 +176469,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -174588,13 +176640,13 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -174616,9 +176668,11 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -174670,7 +176724,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -174879,12 +176933,20 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -174902,7 +176964,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -174911,7 +176973,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -174970,7 +177032,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -175004,7 +177066,21 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -175065,6 +177141,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -175106,11 +177184,15 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -175309,8 +177391,10 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -175321,6 +177405,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -175546,7 +177632,7 @@ static const UV UNI__PERL_FOLDS_TO_MULTI_CHAR_invlist[] = { /* for EBCDIC 037 *
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
- 1441, /* Number of elements */
+ 1475, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -175656,7 +177742,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -175775,7 +177861,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -175868,8 +177954,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -175887,7 +177971,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -176087,6 +178171,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -176256,13 +178342,13 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -176284,9 +178370,11 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -176338,7 +178426,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -176547,12 +178635,20 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -176570,7 +178666,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -176579,7 +178675,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -176638,7 +178734,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -176672,7 +178768,21 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -176733,6 +178843,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -176774,11 +178886,15 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -176977,8 +179093,10 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -176989,6 +179107,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -177001,7 +179121,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
- 1465, /* Number of elements */
+ 1499, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -177135,7 +179255,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -177254,7 +179374,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -177347,8 +179467,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -177366,7 +179484,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -177566,6 +179684,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -177735,13 +179855,13 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -177763,9 +179883,11 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -177817,7 +179939,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -178026,12 +180148,20 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -178049,7 +180179,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -178058,7 +180188,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -178117,7 +180247,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -178151,7 +180281,21 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -178212,6 +180356,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -178253,11 +180399,15 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -178456,8 +180606,10 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -178468,6 +180620,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -178480,7 +180634,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
- 1461, /* Number of elements */
+ 1495, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -178610,7 +180764,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -178729,7 +180883,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -178822,8 +180976,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -178841,7 +180993,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -179041,6 +181193,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -179210,13 +181364,13 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -179238,9 +181392,11 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -179292,7 +181448,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -179501,12 +181657,20 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -179524,7 +181688,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -179533,7 +181697,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -179592,7 +181756,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -179626,7 +181790,21 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -179687,6 +181865,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -179728,11 +181908,15 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -179931,8 +182115,10 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -179943,6 +182129,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -179952,7 +182140,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
- 1237, /* Number of elements */
+ 1263, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -180060,7 +182248,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -180211,7 +182399,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -180552,13 +182740,13 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -180582,8 +182770,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -180658,7 +182846,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -180841,12 +183029,18 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -180859,6 +183053,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -180910,7 +183106,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -180936,7 +183132,19 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -180985,6 +183193,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -181024,7 +183234,9 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -181182,7 +183394,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -181192,7 +183404,9 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* ASCII/Latin1 */
@@ -181203,7 +183417,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
- 1263, /* Number of elements */
+ 1289, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -181337,7 +183551,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -181488,7 +183702,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -181829,13 +184043,13 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -181859,8 +184073,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -181935,7 +184149,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -182118,12 +184332,18 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -182136,6 +184356,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -182187,7 +184409,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -182213,7 +184435,19 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -182262,6 +184496,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -182301,7 +184537,9 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -182459,7 +184697,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -182469,7 +184707,9 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 1047 */
@@ -182480,7 +184720,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
- 1259, /* Number of elements */
+ 1285, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -182610,7 +184850,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -182761,7 +185001,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -183102,13 +185342,13 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -183132,8 +185372,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -183208,7 +185448,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -183391,12 +185631,18 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -183409,6 +185655,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -183460,7 +185708,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -183486,7 +185734,19 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -183535,6 +185795,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -183574,7 +185836,9 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -183732,7 +185996,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -183742,7 +186006,9 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 037 */
@@ -184027,162 +186293,6 @@ static const UV UNI__PERL_IS_IN_MULTI_CHAR_FOLD_invlist[] = { /* for EBCDIC 037
# endif /* EBCDIC 037 */
-# if 'A' == 65 /* ASCII/Latin1 */
-
-static const UV UNI__PERL_NON_FINAL_FOLDS_invlist[] = { /* for ASCII/Latin1 */
- 39, /* Number of elements */
- 148565664, /* Version and data structure type */
- 1, /* 0 if the list starts at 0;
- 1 if it starts at the element beyond 0 */
- 0x0,
- 0x66,
- 0x67,
- 0x69,
- 0x6A,
- 0x6C,
- 0x6D,
- 0x6E,
- 0x6F,
- 0x73,
- 0x75,
- 0x2BE,
- 0x2BF,
- 0x300,
- 0x302,
- 0x307,
- 0x309,
- 0x30A,
- 0x30B,
- 0x30C,
- 0x30D,
- 0x313,
- 0x314,
- 0x331,
- 0x332,
- 0x342,
- 0x343,
- 0x3B9,
- 0x3BA,
- 0x565,
- 0x566,
- 0x56B,
- 0x56C,
- 0x56D,
- 0x56E,
- 0x576,
- 0x577,
- 0x582,
- 0x583
-};
-
-# endif /* ASCII/Latin1 */
-
-# if 'A' == 193 /* EBCDIC 1047 */ \
- && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
- && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
- && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
-
-static const UV UNI__PERL_NON_FINAL_FOLDS_invlist[] = { /* for EBCDIC 1047 */
- 39, /* Number of elements */
- 148565664, /* Version and data structure type */
- 1, /* 0 if the list starts at 0;
- 1 if it starts at the element beyond 0 */
- 0x0,
- 0x86,
- 0x87,
- 0x89,
- 0x8A,
- 0x93,
- 0x94,
- 0x95,
- 0x96,
- 0xA2,
- 0xA4,
- 0x2BE,
- 0x2BF,
- 0x300,
- 0x302,
- 0x307,
- 0x309,
- 0x30A,
- 0x30B,
- 0x30C,
- 0x30D,
- 0x313,
- 0x314,
- 0x331,
- 0x332,
- 0x342,
- 0x343,
- 0x3B9,
- 0x3BA,
- 0x565,
- 0x566,
- 0x56B,
- 0x56C,
- 0x56D,
- 0x56E,
- 0x576,
- 0x577,
- 0x582,
- 0x583
-};
-
-# endif /* EBCDIC 1047 */
-
-# if 'A' == 193 /* EBCDIC 037 */ \
- && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
- && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
- && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
-
-static const UV UNI__PERL_NON_FINAL_FOLDS_invlist[] = { /* for EBCDIC 037 */
- 39, /* Number of elements */
- 148565664, /* Version and data structure type */
- 1, /* 0 if the list starts at 0;
- 1 if it starts at the element beyond 0 */
- 0x0,
- 0x86,
- 0x87,
- 0x89,
- 0x8A,
- 0x93,
- 0x94,
- 0x95,
- 0x96,
- 0xA2,
- 0xA4,
- 0x2BE,
- 0x2BF,
- 0x300,
- 0x302,
- 0x307,
- 0x309,
- 0x30A,
- 0x30B,
- 0x30C,
- 0x30D,
- 0x313,
- 0x314,
- 0x331,
- 0x332,
- 0x342,
- 0x343,
- 0x3B9,
- 0x3BA,
- 0x565,
- 0x566,
- 0x56B,
- 0x56C,
- 0x56D,
- 0x56E,
- 0x576,
- 0x577,
- 0x582,
- 0x583
-};
-
-# endif /* EBCDIC 037 */
-
static const UV UNI__PERL_PROBLEMATIC_LOCALE_FOLDEDS_START_invlist[] = { /* for all charsets */
26, /* Number of elements */
148565664, /* Version and data structure type */
@@ -184926,6 +187036,132 @@ static const UV UNI_AGE__12_DOT_1_invlist[] = { /* for all charsets */
0x3300
};
+static const UV UNI_AGE__13_invlist[] = { /* for all charsets */
+ 119, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x8BE,
+ 0x8C8,
+ 0xB55,
+ 0xB56,
+ 0xD04,
+ 0xD05,
+ 0xD81,
+ 0xD82,
+ 0x1ABF,
+ 0x1AC1,
+ 0x2B97,
+ 0x2B98,
+ 0x2E50,
+ 0x2E53,
+ 0x31BB,
+ 0x31C0,
+ 0x4DB6,
+ 0x4DC0,
+ 0x9FF0,
+ 0x9FFD,
+ 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
+ 0xA82C,
+ 0xA82D,
+ 0xAB68,
+ 0xAB6C,
+ 0x1019C,
+ 0x1019D,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
+ 0x10FB0,
+ 0x10FCC,
+ 0x11147,
+ 0x11148,
+ 0x111CE,
+ 0x111D0,
+ 0x1145A,
+ 0x1145B,
+ 0x11460,
+ 0x11462,
+ 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
+ 0x11FB0,
+ 0x11FB1,
+ 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
+ 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
+ 0x1F10D,
+ 0x1F110,
+ 0x1F16D,
+ 0x1F170,
+ 0x1F1AD,
+ 0x1F1AE,
+ 0x1F6D6,
+ 0x1F6D8,
+ 0x1F6FB,
+ 0x1F6FD,
+ 0x1F8B0,
+ 0x1F8B2,
+ 0x1F90C,
+ 0x1F90D,
+ 0x1F972,
+ 0x1F973,
+ 0x1F977,
+ 0x1F979,
+ 0x1F9A3,
+ 0x1F9A5,
+ 0x1F9AB,
+ 0x1F9AE,
+ 0x1F9CB,
+ 0x1F9CC,
+ 0x1FA74,
+ 0x1FA75,
+ 0x1FA83,
+ 0x1FA87,
+ 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x2A6D7,
+ 0x2A6DE,
+ 0x30000,
+ 0x3134B
+};
+
static const UV UNI_AGE__2_invlist[] = { /* for all charsets */
59, /* Number of elements */
148565664, /* Version and data structure type */
@@ -187211,7 +189447,7 @@ static const UV UNI_AGE__9_invlist[] = { /* for all charsets */
};
static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
- 1352, /* Number of elements */
+ 1372, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -187262,7 +189498,7 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x984,
0x985,
@@ -187371,7 +189607,7 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -187460,8 +189696,6 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -187475,7 +189709,7 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -187648,7 +189882,7 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -187723,7 +189957,7 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -187758,7 +189992,7 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -187778,15 +190012,11 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -187798,9 +190028,9 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -187840,7 +190070,7 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -187928,7 +190158,7 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -188047,10 +190277,18 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -188068,12 +190306,10 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -188126,11 +190362,9 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -188160,7 +190394,21 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -188215,6 +190463,8 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -188262,11 +190512,15 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -188462,11 +190716,7 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -188478,11 +190728,11 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -188499,32 +190749,38 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x1FFFE,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -188536,7 +190792,7 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */
0x2F800,
0x2FA1E,
0x2FFFE,
- 0x30000,
+ 0x3134B,
0x3FFFE,
0x40000,
0x4FFFE,
@@ -188681,7 +190937,7 @@ static const UV UNI_ARAB_invlist[] = { /* for all charsets */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -189460,7 +191716,7 @@ static const UV UNI_BC__CS_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_BC__EN_invlist[] = { /* for ASCII/Latin1 */
- 25, /* Number of elements */
+ 27, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -189488,7 +191744,9 @@ static const UV UNI_BC__EN_invlist[] = { /* for ASCII/Latin1 */
0x1D7CE,
0x1D800,
0x1F100,
- 0x1F10B
+ 0x1F10B,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* ASCII/Latin1 */
@@ -189499,7 +191757,7 @@ static const UV UNI_BC__EN_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_BC__EN_invlist[] = { /* for EBCDIC 1047 */
- 25, /* Number of elements */
+ 27, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -189527,7 +191785,9 @@ static const UV UNI_BC__EN_invlist[] = { /* for EBCDIC 1047 */
0x1D7CE,
0x1D800,
0x1F100,
- 0x1F10B
+ 0x1F10B,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 1047 */
@@ -189538,7 +191798,7 @@ static const UV UNI_BC__EN_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_BC__EN_invlist[] = { /* for EBCDIC 037 */
- 25, /* Number of elements */
+ 27, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -189566,7 +191826,9 @@ static const UV UNI_BC__EN_invlist[] = { /* for EBCDIC 037 */
0x1D7CE,
0x1D800,
0x1F100,
- 0x1F10B
+ 0x1F10B,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 037 */
@@ -189882,7 +192144,7 @@ static const UV UNI_BC__FSI_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
- 904, /* Number of elements */
+ 926, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -189998,7 +192260,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -190044,6 +192306,8 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -190177,7 +192441,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -190296,7 +192560,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
@@ -190307,7 +192571,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0x2D7F,
0x2D80,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -190377,7 +192641,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0xA825,
0xA827,
0xA828,
- 0xA82C,
+ 0xA82D,
0xA838,
0xA83A,
0xA874,
@@ -190428,6 +192692,8 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0xAAEE,
0xAAF6,
0xAAF7,
+ 0xAB6A,
+ 0xAB6C,
0xABE5,
0xABE6,
0xABE8,
@@ -190461,7 +192727,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0x10140,
0x1018D,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101FD,
@@ -190498,6 +192764,8 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -190570,6 +192838,12 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -190636,6 +192910,8 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0x16F93,
0x16FE2,
0x16FE3,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -190705,19 +192981,21 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
+ 0x1F110,
0x1F12F,
0x1F130,
0x1F16A,
- 0x1F16D,
+ 0x1F170,
+ 0x1F1AD,
+ 0x1F1AE,
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -190734,30 +193012,36 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x1FFFE,
0x20000,
0x2FFFE,
@@ -190800,7 +193084,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
- 930, /* Number of elements */
+ 952, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -190942,7 +193226,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -190988,6 +193272,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -191121,7 +193407,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -191240,7 +193526,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
@@ -191251,7 +193537,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0x2D7F,
0x2D80,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -191321,7 +193607,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0xA825,
0xA827,
0xA828,
- 0xA82C,
+ 0xA82D,
0xA838,
0xA83A,
0xA874,
@@ -191372,6 +193658,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0xAAEE,
0xAAF6,
0xAAF7,
+ 0xAB6A,
+ 0xAB6C,
0xABE5,
0xABE6,
0xABE8,
@@ -191405,7 +193693,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0x10140,
0x1018D,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101FD,
@@ -191442,6 +193730,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -191514,6 +193804,12 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -191580,6 +193876,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0x16F93,
0x16FE2,
0x16FE3,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -191649,19 +193947,21 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
+ 0x1F110,
0x1F12F,
0x1F130,
0x1F16A,
- 0x1F16D,
+ 0x1F170,
+ 0x1F1AD,
+ 0x1F1AE,
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -191678,30 +193978,36 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x1FFFE,
0x20000,
0x2FFFE,
@@ -191744,7 +194050,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
- 926, /* Number of elements */
+ 948, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -191882,7 +194188,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -191928,6 +194234,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -192061,7 +194369,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -192180,7 +194488,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
@@ -192191,7 +194499,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0x2D7F,
0x2D80,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -192261,7 +194569,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0xA825,
0xA827,
0xA828,
- 0xA82C,
+ 0xA82D,
0xA838,
0xA83A,
0xA874,
@@ -192312,6 +194620,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0xAAEE,
0xAAF6,
0xAAF7,
+ 0xAB6A,
+ 0xAB6C,
0xABE5,
0xABE6,
0xABE8,
@@ -192345,7 +194655,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0x10140,
0x1018D,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101FD,
@@ -192382,6 +194692,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -192454,6 +194766,12 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -192520,6 +194838,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0x16F93,
0x16FE2,
0x16FE3,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -192589,19 +194909,21 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
+ 0x1F110,
0x1F12F,
0x1F130,
0x1F16A,
- 0x1F16D,
+ 0x1F170,
+ 0x1F1AD,
+ 0x1F1AE,
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -192618,30 +194940,36 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x1FFFE,
0x20000,
0x2FFFE,
@@ -192709,7 +195037,7 @@ static const UV UNI_BC__LRO_invlist[] = { /* for all charsets */
};
static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */
- 629, /* Number of elements */
+ 645, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -192830,7 +195158,7 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -192872,6 +195200,8 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -192985,7 +195315,7 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -193062,6 +195392,8 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C6,
0xA8E0,
@@ -193140,6 +195472,8 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11001,
@@ -193166,6 +195500,8 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -193236,6 +195572,12 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -193298,6 +195640,8 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */
0x16F50,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1D167,
@@ -193347,7 +195691,7 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */
- 369, /* Number of elements */
+ 377, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -193508,14 +195852,14 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
0x2CF9,
0x2D00,
0x2E00,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -193576,6 +195920,8 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */
0xA82C,
0xA874,
0xA878,
+ 0xAB6A,
+ 0xAB6C,
0xFD3E,
0xFD40,
0xFDFD,
@@ -193619,7 +195965,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */
0x10140,
0x1018D,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x1091F,
@@ -193667,19 +196013,21 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */
0x1F0D1,
0x1F0F6,
0x1F10B,
- 0x1F10D,
+ 0x1F110,
0x1F12F,
0x1F130,
0x1F16A,
- 0x1F16D,
+ 0x1F170,
+ 0x1F1AD,
+ 0x1F1AE,
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -193696,30 +196044,34 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* ASCII/Latin1 */
@@ -193730,7 +196082,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */
- 377, /* Number of elements */
+ 385, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -193899,14 +196251,14 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
0x2CF9,
0x2D00,
0x2E00,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -193967,6 +196319,8 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */
0xA82C,
0xA874,
0xA878,
+ 0xAB6A,
+ 0xAB6C,
0xFD3E,
0xFD40,
0xFDFD,
@@ -194010,7 +196364,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */
0x10140,
0x1018D,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x1091F,
@@ -194058,19 +196412,21 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */
0x1F0D1,
0x1F0F6,
0x1F10B,
- 0x1F10D,
+ 0x1F110,
0x1F12F,
0x1F130,
0x1F16A,
- 0x1F16D,
+ 0x1F170,
+ 0x1F1AD,
+ 0x1F1AE,
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -194087,30 +196443,34 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* EBCDIC 1047 */
@@ -194121,7 +196481,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */
- 373, /* Number of elements */
+ 381, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -194286,14 +196646,14 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
0x2CF9,
0x2D00,
0x2E00,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -194354,6 +196714,8 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */
0xA82C,
0xA874,
0xA878,
+ 0xAB6A,
+ 0xAB6C,
0xFD3E,
0xFD40,
0xFDFD,
@@ -194397,7 +196759,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */
0x10140,
0x1018D,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x1091F,
@@ -194445,19 +196807,21 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */
0x1F0D1,
0x1F0F6,
0x1F10B,
- 0x1F10D,
+ 0x1F110,
0x1F12F,
0x1F130,
0x1F16A,
- 0x1F16D,
+ 0x1F170,
+ 0x1F1AD,
+ 0x1F1AE,
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -194474,30 +196838,34 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* EBCDIC 037 */
@@ -194523,7 +196891,7 @@ static const UV UNI_BC__PDI_invlist[] = { /* for all charsets */
};
static const UV UNI_BC__R_invlist[] = { /* for all charsets */
- 77, /* Number of elements */
+ 79, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -194589,6 +196957,8 @@ static const UV UNI_BC__R_invlist[] = { /* for all charsets */
0x10D40,
0x10E60,
0x10E7F,
+ 0x10EAB,
+ 0x10EAD,
0x10F30,
0x10F70,
0x11000,
@@ -195621,7 +197991,7 @@ static const UV UNI_BOPO_invlist[] = { /* for all charsets */
0x3105,
0x3130,
0x31A0,
- 0x31BB,
+ 0x31C0,
0xFE45,
0xFE47,
0xFF61,
@@ -196733,7 +199103,7 @@ static const UV UNI_BYZANTINEMUSIC_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
- 1335, /* Number of elements */
+ 1357, /* 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 */
@@ -196791,7 +199161,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -196902,7 +199272,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -196991,8 +199361,6 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -197006,7 +199374,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -197179,7 +199547,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -197258,7 +199626,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -197293,7 +199661,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -197313,15 +199681,11 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -197333,9 +199697,9 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -197375,7 +199739,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -197463,7 +199827,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -197582,10 +199946,18 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -197603,12 +199975,10 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -197661,11 +200031,9 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -197695,7 +200063,21 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -197750,6 +200132,8 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -197795,11 +200179,15 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -197997,11 +200385,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -198013,11 +200397,11 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -198034,32 +200418,38 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -198070,6 +200460,8 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -198082,7 +200474,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
- 1335, /* Number of elements */
+ 1357, /* 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 */
@@ -198140,7 +200532,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -198251,7 +200643,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -198340,8 +200732,6 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -198355,7 +200745,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -198528,7 +200918,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -198607,7 +200997,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -198642,7 +201032,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -198662,15 +201052,11 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -198682,9 +201068,9 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -198724,7 +201110,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -198812,7 +201198,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -198931,10 +201317,18 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -198952,12 +201346,10 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -199010,11 +201402,9 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -199044,7 +201434,21 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -199099,6 +201503,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -199144,11 +201550,15 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -199346,11 +201756,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -199362,11 +201768,11 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -199383,32 +201789,38 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -199419,6 +201831,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -199431,7 +201845,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
- 1335, /* Number of elements */
+ 1357, /* 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 */
@@ -199489,7 +201903,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -199600,7 +202014,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -199689,8 +202103,6 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -199704,7 +202116,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -199877,7 +202289,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -199956,7 +202368,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -199991,7 +202403,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -200011,15 +202423,11 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -200031,9 +202439,9 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -200073,7 +202481,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -200161,7 +202569,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -200280,10 +202688,18 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -200301,12 +202717,10 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -200359,11 +202773,9 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -200393,7 +202805,21 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -200448,6 +202874,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -200493,11 +202921,15 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -200695,11 +203127,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -200711,11 +203139,11 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -200732,32 +203160,38 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -200768,6 +203202,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -200787,7 +203223,7 @@ static const UV UNI_CAKM_invlist[] = { /* for all charsets */
0x11100,
0x11135,
0x11136,
- 0x11147
+ 0x11148
};
static const UV UNI_CANS_invlist[] = { /* for all charsets */
@@ -200813,7 +203249,7 @@ static const UV UNI_CARI_invlist[] = { /* for all charsets */
};
static const UV UNI_CCC__0_invlist[] = { /* for all charsets */
- 357, /* Number of elements */
+ 369, /* 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 */
@@ -200970,6 +203406,8 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */
0x1A80,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B34,
0x1B35,
0x1B44,
@@ -201026,6 +203464,8 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */
0xA6F2,
0xA806,
0xA807,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C5,
0xA8E0,
@@ -201074,6 +203514,8 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11046,
@@ -201122,6 +203564,10 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */
0x1172C,
0x11839,
0x1183B,
+ 0x1193D,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119E0,
0x119E1,
0x11A34,
@@ -201142,6 +203588,8 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */
0x16AF5,
0x16B30,
0x16B37,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9E,
0x1BC9F,
0x1D165,
@@ -201604,8 +204052,18 @@ static const UV UNI_CCC__36_invlist[] = { /* for all charsets */
0x712
};
+static const UV UNI_CCC__6_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x16FF0,
+ 0x16FF2
+};
+
static const UV UNI_CCC__7_invlist[] = { /* for all charsets */
- 49, /* Number of elements */
+ 51, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -201654,6 +204112,8 @@ static const UV UNI_CCC__7_invlist[] = { /* for all charsets */
0x116B8,
0x1183A,
0x1183B,
+ 0x11943,
+ 0x11944,
0x11D42,
0x11D43,
0x1E94A,
@@ -201681,7 +204141,7 @@ static const UV UNI_CCC__84_invlist[] = { /* for all charsets */
};
static const UV UNI_CCC__9_invlist[] = { /* for all charsets */
- 105, /* Number of elements */
+ 109, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -201734,6 +204194,8 @@ static const UV UNI_CCC__9_invlist[] = { /* for all charsets */
0x2D80,
0xA806,
0xA807,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C5,
0xA953,
@@ -201776,6 +204238,8 @@ static const UV UNI_CCC__9_invlist[] = { /* for all charsets */
0x1172C,
0x11839,
0x1183A,
+ 0x1193D,
+ 0x1193F,
0x119E0,
0x119E1,
0x11A34,
@@ -201803,7 +204267,7 @@ static const UV UNI_CCC__91_invlist[] = { /* for all charsets */
};
static const UV UNI_CCC__A_invlist[] = { /* for all charsets */
- 235, /* Number of elements */
+ 237, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -202006,6 +204470,8 @@ static const UV UNI_CCC__A_invlist[] = { /* for all charsets */
0x10AE6,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F48,
0x10F4B,
0x10F4C,
@@ -202079,7 +204545,7 @@ static const UV UNI_CCC__AR_invlist[] = { /* for all charsets */
};
static const UV UNI_CCC__B_invlist[] = { /* for all charsets */
- 155, /* Number of elements */
+ 157, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -202186,6 +204652,8 @@ static const UV UNI_CCC__B_invlist[] = { /* for all charsets */
0x1ABB,
0x1ABD,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B6C,
0x1B6D,
0x1CD5,
@@ -202612,10 +205080,20 @@ static const UV UNI_CHESSSYMBOLS_invlist[] = { /* for all charsets */
0x1FA70
};
+static const UV UNI_CHRS_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x10FB0,
+ 0x10FCC
+};
+
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
- 803, /* Number of elements */
+ 821, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -202654,6 +205132,8 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
0x48A,
0x559,
0x55A,
+ 0x55F,
+ 0x560,
0x591,
0x5BE,
0x5BF,
@@ -202770,7 +205250,7 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -202816,6 +205296,8 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -202939,7 +205421,7 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
0x1AA7,
0x1AA8,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -203084,6 +205566,8 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C6,
0xA8E0,
@@ -203140,6 +205624,8 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
0xAAF7,
0xAB5B,
0xAB60,
+ 0xAB69,
+ 0xAB6C,
0xABE5,
0xABE6,
0xABE8,
@@ -203200,6 +205686,8 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11001,
@@ -203230,6 +205718,8 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -203300,6 +205790,12 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -203369,7 +205865,7 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -203432,7 +205928,7 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
- 801, /* Number of elements */
+ 819, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -203469,6 +205965,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
0x48A,
0x559,
0x55A,
+ 0x55F,
+ 0x560,
0x591,
0x5BE,
0x5BF,
@@ -203585,7 +206083,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -203631,6 +206129,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -203754,7 +206254,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
0x1AA7,
0x1AA8,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -203899,6 +206399,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C6,
0xA8E0,
@@ -203955,6 +206457,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
0xAAF7,
0xAB5B,
0xAB60,
+ 0xAB69,
+ 0xAB6C,
0xABE5,
0xABE6,
0xABE8,
@@ -204015,6 +206519,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11001,
@@ -204045,6 +206551,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -204115,6 +206623,12 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -204184,7 +206698,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -204247,7 +206761,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */
- 799, /* Number of elements */
+ 817, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -204282,6 +206796,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */
0x48A,
0x559,
0x55A,
+ 0x55F,
+ 0x560,
0x591,
0x5BE,
0x5BF,
@@ -204398,7 +206914,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -204444,6 +206960,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -204567,7 +207085,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */
0x1AA7,
0x1AA8,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -204712,6 +207230,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C6,
0xA8E0,
@@ -204768,6 +207288,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */
0xAAF7,
0xAB5B,
0xAB60,
+ 0xAB69,
+ 0xAB6C,
0xABE5,
0xABE6,
0xABE8,
@@ -204828,6 +207350,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11001,
@@ -204858,6 +207382,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -204928,6 +207454,12 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -204997,7 +207529,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -205164,6 +207696,16 @@ static const UV UNI_CJKEXTF_invlist[] = { /* for all charsets */
0x2EBF0
};
+static const UV UNI_CJKEXTG_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x30000,
+ 0x31350
+};
+
static const UV UNI_CJKRADICALSSUP_invlist[] = { /* for all charsets */
3, /* Number of elements */
148565664, /* Version and data structure type */
@@ -205195,7 +207737,7 @@ static const UV UNI_CJKSYMBOLS_invlist[] = { /* for all charsets */
};
static const UV UNI_CN_invlist[] = { /* for all charsets */
- 1332, /* Number of elements */
+ 1354, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -205246,7 +207788,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x984,
0x985,
@@ -205355,7 +207897,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -205444,8 +207986,6 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -205459,7 +207999,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -205632,7 +208172,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -205707,7 +208247,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -205742,7 +208282,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -205762,15 +208302,11 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -205782,9 +208318,9 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -205824,7 +208360,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -205914,7 +208450,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -206033,10 +208569,18 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -206054,12 +208598,10 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -206112,11 +208654,9 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -206146,7 +208686,21 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -206201,6 +208755,8 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -206248,11 +208804,15 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -206448,11 +209008,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -206464,11 +209020,11 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -206485,32 +209041,38 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -206521,6 +209083,8 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -206806,7 +209370,7 @@ static const UV UNI_CURRENCYSYMBOLS_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_CWCF_invlist[] = { /* for ASCII/Latin1 */
- 1225, /* Number of elements */
+ 1229, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -208014,7 +210578,11 @@ static const UV UNI_CWCF_invlist[] = { /* for ASCII/Latin1 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xAB70,
0xABC0,
0xFB00,
@@ -208045,7 +210613,7 @@ static const UV UNI_CWCF_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 1047 */
- 1245, /* Number of elements */
+ 1249, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -209273,7 +211841,11 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 1047 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xAB70,
0xABC0,
0xFB00,
@@ -209304,7 +211876,7 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 037 */
- 1241, /* Number of elements */
+ 1245, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -210528,7 +213100,11 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 037 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xAB70,
0xABC0,
0xFB00,
@@ -210556,7 +213132,7 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_CWCM_invlist[] = { /* for ASCII/Latin1 */
- 247, /* Number of elements */
+ 249, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -210778,7 +213354,9 @@ static const UV UNI_CWCM_invlist[] = { /* for ASCII/Latin1 */
0xA7B0,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -210817,7 +213395,7 @@ static const UV UNI_CWCM_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 1047 */
- 279, /* Number of elements */
+ 281, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -211071,7 +213649,9 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 1047 */
0xA7B0,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -211110,7 +213690,7 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 037 */
- 275, /* Number of elements */
+ 277, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -211360,7 +213940,9 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 037 */
0xA7B0,
0xA7C0,
0xA7C2,
- 0xA7C7,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -211396,7 +213978,7 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_CWKCF_invlist[] = { /* for ASCII/Latin1 */
- 1647, /* Number of elements */
+ 1655, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -212812,11 +215394,17 @@ static const UV UNI_CWKCF_invlist[] = { /* for ASCII/Latin1 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xA7F8,
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xAB70,
0xABC0,
0xF900,
@@ -213043,6 +215631,8 @@ static const UV UNI_CWKCF_invlist[] = { /* for ASCII/Latin1 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E,
0xE0000,
@@ -213057,7 +215647,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 1047 */
- 1657, /* Number of elements */
+ 1665, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -214483,11 +217073,17 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 1047 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xA7F8,
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xAB70,
0xABC0,
0xF900,
@@ -214714,6 +217310,8 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 1047 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E,
0xE0000,
@@ -214728,7 +217326,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 037 */
- 1655, /* Number of elements */
+ 1663, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -216152,11 +218750,17 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 037 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xA7F8,
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xAB70,
0xABC0,
0xF900,
@@ -216383,6 +218987,8 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 037 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E,
0xE0000,
@@ -216394,7 +219000,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_CWL_invlist[] = { /* for ASCII/Latin1 */
- 1199, /* Number of elements */
+ 1203, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -217582,7 +220188,11 @@ static const UV UNI_CWL_invlist[] = { /* for ASCII/Latin1 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -217607,7 +220217,7 @@ static const UV UNI_CWL_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_CWL_invlist[] = { /* for EBCDIC 1047 */
- 1217, /* Number of elements */
+ 1221, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -218813,7 +221423,11 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 1047 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -218838,7 +221452,7 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_CWL_invlist[] = { /* for EBCDIC 037 */
- 1213, /* Number of elements */
+ 1217, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -220040,7 +222654,11 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 037 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -220062,7 +222680,7 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_CWT_invlist[] = { /* for ASCII/Latin1 */
- 1231, /* Number of elements */
+ 1237, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -221275,6 +223893,12 @@ static const UV UNI_CWT_invlist[] = { /* for ASCII/Latin1 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -221307,7 +223931,7 @@ static const UV UNI_CWT_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_CWT_invlist[] = { /* for EBCDIC 1047 */
- 1245, /* Number of elements */
+ 1251, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -222534,6 +225158,12 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 1047 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -222566,7 +225196,7 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_CWT_invlist[] = { /* for EBCDIC 037 */
- 1245, /* Number of elements */
+ 1251, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -223793,6 +226423,12 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 037 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -223822,7 +226458,7 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_CWU_invlist[] = { /* for ASCII/Latin1 */
- 1233, /* Number of elements */
+ 1239, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -225037,6 +227673,12 @@ static const UV UNI_CWU_invlist[] = { /* for ASCII/Latin1 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -225069,7 +227711,7 @@ static const UV UNI_CWU_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_CWU_invlist[] = { /* for EBCDIC 1047 */
- 1247, /* Number of elements */
+ 1253, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -226298,6 +228940,12 @@ static const UV UNI_CWU_invlist[] = { /* for EBCDIC 1047 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -226330,7 +228978,7 @@ static const UV UNI_CWU_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_CWU_invlist[] = { /* for EBCDIC 037 */
- 1247, /* Number of elements */
+ 1253, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -227559,6 +230207,12 @@ static const UV UNI_CWU_invlist[] = { /* for EBCDIC 037 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xAB53,
0xAB54,
0xAB70,
@@ -227636,7 +230290,7 @@ static const UV UNI_CYRILLICSUP_invlist[] = { /* for all charsets */
};
static const UV UNI_CYRL_invlist[] = { /* for all charsets */
- 17, /* Number of elements */
+ 19, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -227649,6 +230303,8 @@ static const UV UNI_CYRL_invlist[] = { /* for all charsets */
0x1D2C,
0x1D78,
0x1D79,
+ 0x1DF8,
+ 0x1DF9,
0x2DE0,
0x2E00,
0x2E43,
@@ -227662,7 +230318,7 @@ static const UV UNI_CYRL_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_DASH_invlist[] = { /* for ASCII/Latin1 */
- 43, /* Number of elements */
+ 45, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -227708,7 +230364,9 @@ static const UV UNI_DASH_invlist[] = { /* for ASCII/Latin1 */
0xFE63,
0xFE64,
0xFF0D,
- 0xFF0E
+ 0xFF0E,
+ 0x10EAD,
+ 0x10EAE
};
# endif /* ASCII/Latin1 */
@@ -227719,7 +230377,7 @@ static const UV UNI_DASH_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_DASH_invlist[] = { /* for EBCDIC 1047 */
- 43, /* Number of elements */
+ 45, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -227765,7 +230423,9 @@ static const UV UNI_DASH_invlist[] = { /* for EBCDIC 1047 */
0xFE63,
0xFE64,
0xFF0D,
- 0xFF0E
+ 0xFF0E,
+ 0x10EAD,
+ 0x10EAE
};
# endif /* EBCDIC 1047 */
@@ -227776,7 +230436,7 @@ static const UV UNI_DASH_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_DASH_invlist[] = { /* for EBCDIC 037 */
- 43, /* Number of elements */
+ 45, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -227822,7 +230482,9 @@ static const UV UNI_DASH_invlist[] = { /* for EBCDIC 037 */
0xFE63,
0xFE64,
0xFF0D,
- 0xFF0E
+ 0xFF0E,
+ 0x10EAD,
+ 0x10EAE
};
# endif /* EBCDIC 037 */
@@ -228030,7 +230692,7 @@ static const UV UNI_DI_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */
- 343, /* Number of elements */
+ 353, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -228119,6 +230781,8 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */
0xB3D,
0xB4D,
0xB4E,
+ 0xB55,
+ 0xB56,
0xBCD,
0xBCE,
0xC4D,
@@ -228273,6 +230937,8 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */
0xAAF7,
0xAB5B,
0xAB60,
+ 0xAB69,
+ 0xAB6C,
0xABEC,
0xABEE,
0xFB1E,
@@ -228335,6 +231001,10 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */
0x1172C,
0x11839,
0x1183B,
+ 0x1193D,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119E0,
0x119E1,
0x11A34,
@@ -228357,6 +231027,8 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */
0x16B37,
0x16F8F,
0x16FA0,
+ 0x16FF0,
+ 0x16FF2,
0x1D167,
0x1D16A,
0x1D16D,
@@ -228387,7 +231059,7 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */
- 343, /* Number of elements */
+ 353, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -228476,6 +231148,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */
0xB3D,
0xB4D,
0xB4E,
+ 0xB55,
+ 0xB56,
0xBCD,
0xBCE,
0xC4D,
@@ -228630,6 +231304,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */
0xAAF7,
0xAB5B,
0xAB60,
+ 0xAB69,
+ 0xAB6C,
0xABEC,
0xABEE,
0xFB1E,
@@ -228692,6 +231368,10 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */
0x1172C,
0x11839,
0x1183B,
+ 0x1193D,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119E0,
0x119E1,
0x11A34,
@@ -228714,6 +231394,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */
0x16B37,
0x16F8F,
0x16FA0,
+ 0x16FF0,
+ 0x16FF2,
0x1D167,
0x1D16A,
0x1D16D,
@@ -228744,7 +231426,7 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */
- 341, /* Number of elements */
+ 351, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -228831,6 +231513,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */
0xB3D,
0xB4D,
0xB4E,
+ 0xB55,
+ 0xB56,
0xBCD,
0xBCE,
0xC4D,
@@ -228985,6 +231669,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */
0xAAF7,
0xAB5B,
0xAB60,
+ 0xAB69,
+ 0xAB6C,
0xABEC,
0xABEE,
0xFB1E,
@@ -229047,6 +231733,10 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */
0x1172C,
0x11839,
0x1183B,
+ 0x1193D,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119E0,
0x119E1,
0x11A34,
@@ -229069,6 +231759,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */
0x16B37,
0x16F8F,
0x16FA0,
+ 0x16FF0,
+ 0x16FF2,
0x1D167,
0x1D16A,
0x1D16D,
@@ -229133,6 +231825,30 @@ static const UV UNI_DIACRITICALSSUP_invlist[] = { /* for all charsets */
0x1E00
};
+static const UV UNI_DIAK_invlist[] = { /* for all charsets */
+ 17, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A
+};
+
static const UV UNI_DINGBATS_invlist[] = { /* for all charsets */
3, /* Number of elements */
148565664, /* Version and data structure type */
@@ -229180,7 +231896,7 @@ static const UV UNI_DSRT_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_DT__CAN_invlist[] = { /* for ASCII/Latin1 */
- 463, /* Number of elements */
+ 465, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -229641,6 +232357,8 @@ static const UV UNI_DT__CAN_invlist[] = { /* for ASCII/Latin1 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -229657,7 +232375,7 @@ static const UV UNI_DT__CAN_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_DT__CAN_invlist[] = { /* for EBCDIC 1047 */
- 467, /* Number of elements */
+ 469, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -230122,6 +232840,8 @@ static const UV UNI_DT__CAN_invlist[] = { /* for EBCDIC 1047 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -230138,7 +232858,7 @@ static const UV UNI_DT__CAN_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_DT__CAN_invlist[] = { /* for EBCDIC 037 */
- 467, /* Number of elements */
+ 469, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -230603,6 +233323,8 @@ static const UV UNI_DT__CAN_invlist[] = { /* for EBCDIC 037 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -231356,7 +234078,7 @@ static const UV UNI_DT__FIN_invlist[] = { /* for all charsets */
};
static const UV UNI_DT__FONT_invlist[] = { /* for all charsets */
- 135, /* Number of elements */
+ 137, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -231494,7 +234216,9 @@ static const UV UNI_DT__FONT_invlist[] = { /* for all charsets */
0x1EEA5,
0x1EEAA,
0x1EEAB,
- 0x1EEBC
+ 0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA
};
# if 'A' == 65 /* ASCII/Latin1 */
@@ -232130,7 +234854,7 @@ static const UV UNI_DT__NB_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_DT__NONCANON_invlist[] = { /* for ASCII/Latin1 */
- 371, /* Number of elements */
+ 375, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -232333,6 +235057,8 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for ASCII/Latin1 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xFB00,
0xFB07,
0xFB13,
@@ -232504,7 +235230,9 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for ASCII/Latin1 */
0x1F240,
0x1F249,
0x1F250,
- 0x1F252
+ 0x1F252,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* ASCII/Latin1 */
@@ -232515,7 +235243,7 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 1047 */
- 377, /* Number of elements */
+ 381, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -232724,6 +235452,8 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 1047 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xFB00,
0xFB07,
0xFB13,
@@ -232895,7 +235625,9 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 1047 */
0x1F240,
0x1F249,
0x1F250,
- 0x1F252
+ 0x1F252,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 1047 */
@@ -232906,7 +235638,7 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 037 */
- 375, /* Number of elements */
+ 379, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -233113,6 +235845,8 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 037 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xFB00,
0xFB07,
0xFB13,
@@ -233284,7 +236018,9 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 037 */
0x1F240,
0x1F249,
0x1F250,
- 0x1F252
+ 0x1F252,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 037 */
@@ -233292,7 +236028,7 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_DT__NONE_invlist[] = { /* for ASCII/Latin1 */
- 779, /* Number of elements */
+ 785, /* 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 */
@@ -233851,6 +236587,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for ASCII/Latin1 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xAC00,
0xD7A4,
0xF900,
@@ -233943,6 +236681,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for ASCII/Latin1 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -234073,6 +236813,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for ASCII/Latin1 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -234085,7 +236827,7 @@ static const UV UNI_DT__NONE_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 1047 */
- 777, /* Number of elements */
+ 783, /* 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 */
@@ -234642,6 +237384,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 1047 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xAC00,
0xD7A4,
0xF900,
@@ -234734,6 +237478,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 1047 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -234864,6 +237610,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 1047 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -234876,7 +237624,7 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 037 */
- 779, /* Number of elements */
+ 785, /* 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 */
@@ -235435,6 +238183,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 037 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xAC00,
0xD7A4,
0xF900,
@@ -235527,6 +238277,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 037 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -235657,6 +238409,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 037 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -235722,7 +238476,7 @@ static const UV UNI_DT__SUB_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_DT__SUP_invlist[] = { /* for ASCII/Latin1 */
- 49, /* Number of elements */
+ 51, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -235773,6 +238527,8 @@ static const UV UNI_DT__SUP_invlist[] = { /* for ASCII/Latin1 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0x1F16A,
0x1F16D
};
@@ -235785,7 +238541,7 @@ static const UV UNI_DT__SUP_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_DT__SUP_invlist[] = { /* for EBCDIC 1047 */
- 51, /* Number of elements */
+ 53, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -235838,6 +238594,8 @@ static const UV UNI_DT__SUP_invlist[] = { /* for EBCDIC 1047 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0x1F16A,
0x1F16D
};
@@ -235850,7 +238608,7 @@ static const UV UNI_DT__SUP_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_DT__SUP_invlist[] = { /* for EBCDIC 037 */
- 51, /* Number of elements */
+ 53, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -235903,6 +238661,8 @@ static const UV UNI_DT__SUP_invlist[] = { /* for EBCDIC 037 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0x1F16A,
0x1F16D
};
@@ -237106,7 +239866,7 @@ static const UV UNI_EA__H_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_EA__N_invlist[] = { /* for ASCII/Latin1 */
- 547, /* Number of elements */
+ 553, /* 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 */
@@ -237500,8 +240260,6 @@ static const UV UNI_EA__N_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
@@ -237542,11 +240300,15 @@ static const UV UNI_EA__N_invlist[] = { /* for ASCII/Latin1 */
0xFFFD,
0xFFFE,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -237620,33 +240382,37 @@ static const UV UNI_EA__N_invlist[] = { /* for ASCII/Latin1 */
0x1F6D0,
0x1F6D3,
0x1F6D5,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6EB,
0x1F6ED,
0x1F6F4,
- 0x1F6FB,
+ 0x1F6FD,
0x1F7E0,
0x1F7EC,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F90C,
+ 0x1F93B,
+ 0x1F93C,
+ 0x1F946,
+ 0x1F947,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA00,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
0x20000,
0x2FFFE,
0x30000,
@@ -237667,7 +240433,7 @@ static const UV UNI_EA__N_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 1047 */
- 545, /* Number of elements */
+ 551, /* 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 */
@@ -238059,8 +240825,6 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
@@ -238101,11 +240865,15 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 1047 */
0xFFFD,
0xFFFE,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -238179,33 +240947,37 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 1047 */
0x1F6D0,
0x1F6D3,
0x1F6D5,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6EB,
0x1F6ED,
0x1F6F4,
- 0x1F6FB,
+ 0x1F6FD,
0x1F7E0,
0x1F7EC,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F90C,
+ 0x1F93B,
+ 0x1F93C,
+ 0x1F946,
+ 0x1F947,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA00,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
0x20000,
0x2FFFE,
0x30000,
@@ -238226,7 +240998,7 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 037 */
- 545, /* Number of elements */
+ 551, /* 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 */
@@ -238618,8 +241390,6 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
@@ -238660,11 +241430,15 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 037 */
0xFFFD,
0xFFFE,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -238738,33 +241512,37 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 037 */
0x1F6D0,
0x1F6D3,
0x1F6D5,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6EB,
0x1F6ED,
0x1F6F4,
- 0x1F6FB,
+ 0x1F6FD,
0x1F7E0,
0x1F7EC,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F90C,
+ 0x1F93B,
+ 0x1F93C,
+ 0x1F946,
+ 0x1F947,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA00,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
0x20000,
0x2FFFE,
0x30000,
@@ -238906,7 +241684,7 @@ static const UV UNI_EA__NA_invlist[] = { /* for EBCDIC 037 */
# endif /* EBCDIC 037 */
static const UV UNI_EA__W_invlist[] = { /* for all charsets */
- 223, /* Number of elements */
+ 229, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -239000,8 +241778,6 @@ static const UV UNI_EA__W_invlist[] = { /* for all charsets */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
@@ -239028,11 +241804,15 @@ static const UV UNI_EA__W_invlist[] = { /* for all charsets */
0xFE68,
0xFE6C,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -239102,33 +241882,37 @@ static const UV UNI_EA__W_invlist[] = { /* for all charsets */
0x1F6D0,
0x1F6D3,
0x1F6D5,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6EB,
0x1F6ED,
0x1F6F4,
- 0x1F6FB,
+ 0x1F6FD,
0x1F7E0,
0x1F7EC,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F90C,
+ 0x1F93B,
+ 0x1F93C,
+ 0x1F946,
+ 0x1F947,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA00,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
0x20000,
0x2FFFE,
0x30000,
@@ -239145,6 +241929,192 @@ static const UV UNI_EARLYDYNASTICCUNEIFORM_invlist[] = { /* for all charsets */
0x12550
};
+static const UV UNI_EBASE_invlist[] = { /* for all charsets */
+ 77, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x261D,
+ 0x261E,
+ 0x26F9,
+ 0x26FA,
+ 0x270A,
+ 0x270E,
+ 0x1F385,
+ 0x1F386,
+ 0x1F3C2,
+ 0x1F3C5,
+ 0x1F3C7,
+ 0x1F3C8,
+ 0x1F3CA,
+ 0x1F3CD,
+ 0x1F442,
+ 0x1F444,
+ 0x1F446,
+ 0x1F451,
+ 0x1F466,
+ 0x1F479,
+ 0x1F47C,
+ 0x1F47D,
+ 0x1F481,
+ 0x1F484,
+ 0x1F485,
+ 0x1F488,
+ 0x1F48F,
+ 0x1F490,
+ 0x1F491,
+ 0x1F492,
+ 0x1F4AA,
+ 0x1F4AB,
+ 0x1F574,
+ 0x1F576,
+ 0x1F57A,
+ 0x1F57B,
+ 0x1F590,
+ 0x1F591,
+ 0x1F595,
+ 0x1F597,
+ 0x1F645,
+ 0x1F648,
+ 0x1F64B,
+ 0x1F650,
+ 0x1F6A3,
+ 0x1F6A4,
+ 0x1F6B4,
+ 0x1F6B7,
+ 0x1F6C0,
+ 0x1F6C1,
+ 0x1F6CC,
+ 0x1F6CD,
+ 0x1F90C,
+ 0x1F90D,
+ 0x1F90F,
+ 0x1F910,
+ 0x1F918,
+ 0x1F920,
+ 0x1F926,
+ 0x1F927,
+ 0x1F930,
+ 0x1F93A,
+ 0x1F93C,
+ 0x1F93F,
+ 0x1F977,
+ 0x1F978,
+ 0x1F9B5,
+ 0x1F9B7,
+ 0x1F9B8,
+ 0x1F9BA,
+ 0x1F9BB,
+ 0x1F9BC,
+ 0x1F9CD,
+ 0x1F9D0,
+ 0x1F9D1,
+ 0x1F9DE
+};
+
+# if 'A' == 65 /* ASCII/Latin1 */
+
+static const UV UNI_ECOMP_invlist[] = { /* for ASCII/Latin1 */
+ 21, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x23,
+ 0x24,
+ 0x2A,
+ 0x2B,
+ 0x30,
+ 0x3A,
+ 0x200D,
+ 0x200E,
+ 0x20E3,
+ 0x20E4,
+ 0xFE0F,
+ 0xFE10,
+ 0x1F1E6,
+ 0x1F200,
+ 0x1F3FB,
+ 0x1F400,
+ 0x1F9B0,
+ 0x1F9B4,
+ 0xE0020,
+ 0xE0080
+};
+
+# endif /* ASCII/Latin1 */
+
+# if 'A' == 193 /* EBCDIC 1047 */ \
+ && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
+ && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
+
+static const UV UNI_ECOMP_invlist[] = { /* for EBCDIC 1047 */
+ 21, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x5C,
+ 0x5D,
+ 0x7B,
+ 0x7C,
+ 0xF0,
+ 0xFA,
+ 0x200D,
+ 0x200E,
+ 0x20E3,
+ 0x20E4,
+ 0xFE0F,
+ 0xFE10,
+ 0x1F1E6,
+ 0x1F200,
+ 0x1F3FB,
+ 0x1F400,
+ 0x1F9B0,
+ 0x1F9B4,
+ 0xE0020,
+ 0xE0080
+};
+
+# endif /* EBCDIC 1047 */
+
+# if 'A' == 193 /* EBCDIC 037 */ \
+ && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
+ && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
+
+static const UV UNI_ECOMP_invlist[] = { /* for EBCDIC 037 */
+ 21, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x5C,
+ 0x5D,
+ 0x7B,
+ 0x7C,
+ 0xF0,
+ 0xFA,
+ 0x200D,
+ 0x200E,
+ 0x20E3,
+ 0x20E4,
+ 0xFE0F,
+ 0xFE10,
+ 0x1F1E6,
+ 0x1F200,
+ 0x1F3FB,
+ 0x1F400,
+ 0x1F9B0,
+ 0x1F9B4,
+ 0xE0020,
+ 0xE0080
+};
+
+# endif /* EBCDIC 037 */
+
static const UV UNI_EGYP_invlist[] = { /* for all charsets */
5, /* Number of elements */
148565664, /* Version and data structure type */
@@ -239187,6 +242157,970 @@ static const UV UNI_ELYM_invlist[] = { /* for all charsets */
0x10FF7
};
+static const UV UNI_EMOD_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x1F3FB,
+ 0x1F400
+};
+
+# if 'A' == 65 /* ASCII/Latin1 */
+
+static const UV UNI_EMOJI_invlist[] = { /* for ASCII/Latin1 */
+ 305, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x23,
+ 0x24,
+ 0x2A,
+ 0x2B,
+ 0x30,
+ 0x3A,
+ 0xA9,
+ 0xAA,
+ 0xAE,
+ 0xAF,
+ 0x203C,
+ 0x203D,
+ 0x2049,
+ 0x204A,
+ 0x2122,
+ 0x2123,
+ 0x2139,
+ 0x213A,
+ 0x2194,
+ 0x219A,
+ 0x21A9,
+ 0x21AB,
+ 0x231A,
+ 0x231C,
+ 0x2328,
+ 0x2329,
+ 0x23CF,
+ 0x23D0,
+ 0x23E9,
+ 0x23F4,
+ 0x23F8,
+ 0x23FB,
+ 0x24C2,
+ 0x24C3,
+ 0x25AA,
+ 0x25AC,
+ 0x25B6,
+ 0x25B7,
+ 0x25C0,
+ 0x25C1,
+ 0x25FB,
+ 0x25FF,
+ 0x2600,
+ 0x2605,
+ 0x260E,
+ 0x260F,
+ 0x2611,
+ 0x2612,
+ 0x2614,
+ 0x2616,
+ 0x2618,
+ 0x2619,
+ 0x261D,
+ 0x261E,
+ 0x2620,
+ 0x2621,
+ 0x2622,
+ 0x2624,
+ 0x2626,
+ 0x2627,
+ 0x262A,
+ 0x262B,
+ 0x262E,
+ 0x2630,
+ 0x2638,
+ 0x263B,
+ 0x2640,
+ 0x2641,
+ 0x2642,
+ 0x2643,
+ 0x2648,
+ 0x2654,
+ 0x265F,
+ 0x2661,
+ 0x2663,
+ 0x2664,
+ 0x2665,
+ 0x2667,
+ 0x2668,
+ 0x2669,
+ 0x267B,
+ 0x267C,
+ 0x267E,
+ 0x2680,
+ 0x2692,
+ 0x2698,
+ 0x2699,
+ 0x269A,
+ 0x269B,
+ 0x269D,
+ 0x26A0,
+ 0x26A2,
+ 0x26A7,
+ 0x26A8,
+ 0x26AA,
+ 0x26AC,
+ 0x26B0,
+ 0x26B2,
+ 0x26BD,
+ 0x26BF,
+ 0x26C4,
+ 0x26C6,
+ 0x26C8,
+ 0x26C9,
+ 0x26CE,
+ 0x26D0,
+ 0x26D1,
+ 0x26D2,
+ 0x26D3,
+ 0x26D5,
+ 0x26E9,
+ 0x26EB,
+ 0x26F0,
+ 0x26F6,
+ 0x26F7,
+ 0x26FB,
+ 0x26FD,
+ 0x26FE,
+ 0x2702,
+ 0x2703,
+ 0x2705,
+ 0x2706,
+ 0x2708,
+ 0x270E,
+ 0x270F,
+ 0x2710,
+ 0x2712,
+ 0x2713,
+ 0x2714,
+ 0x2715,
+ 0x2716,
+ 0x2717,
+ 0x271D,
+ 0x271E,
+ 0x2721,
+ 0x2722,
+ 0x2728,
+ 0x2729,
+ 0x2733,
+ 0x2735,
+ 0x2744,
+ 0x2745,
+ 0x2747,
+ 0x2748,
+ 0x274C,
+ 0x274D,
+ 0x274E,
+ 0x274F,
+ 0x2753,
+ 0x2756,
+ 0x2757,
+ 0x2758,
+ 0x2763,
+ 0x2765,
+ 0x2795,
+ 0x2798,
+ 0x27A1,
+ 0x27A2,
+ 0x27B0,
+ 0x27B1,
+ 0x27BF,
+ 0x27C0,
+ 0x2934,
+ 0x2936,
+ 0x2B05,
+ 0x2B08,
+ 0x2B1B,
+ 0x2B1D,
+ 0x2B50,
+ 0x2B51,
+ 0x2B55,
+ 0x2B56,
+ 0x3030,
+ 0x3031,
+ 0x303D,
+ 0x303E,
+ 0x3297,
+ 0x3298,
+ 0x3299,
+ 0x329A,
+ 0x1F004,
+ 0x1F005,
+ 0x1F0CF,
+ 0x1F0D0,
+ 0x1F170,
+ 0x1F172,
+ 0x1F17E,
+ 0x1F180,
+ 0x1F18E,
+ 0x1F18F,
+ 0x1F191,
+ 0x1F19B,
+ 0x1F1E6,
+ 0x1F200,
+ 0x1F201,
+ 0x1F203,
+ 0x1F21A,
+ 0x1F21B,
+ 0x1F22F,
+ 0x1F230,
+ 0x1F232,
+ 0x1F23B,
+ 0x1F250,
+ 0x1F252,
+ 0x1F300,
+ 0x1F322,
+ 0x1F324,
+ 0x1F394,
+ 0x1F396,
+ 0x1F398,
+ 0x1F399,
+ 0x1F39C,
+ 0x1F39E,
+ 0x1F3F1,
+ 0x1F3F3,
+ 0x1F3F6,
+ 0x1F3F7,
+ 0x1F4FE,
+ 0x1F4FF,
+ 0x1F53E,
+ 0x1F549,
+ 0x1F54F,
+ 0x1F550,
+ 0x1F568,
+ 0x1F56F,
+ 0x1F571,
+ 0x1F573,
+ 0x1F57B,
+ 0x1F587,
+ 0x1F588,
+ 0x1F58A,
+ 0x1F58E,
+ 0x1F590,
+ 0x1F591,
+ 0x1F595,
+ 0x1F597,
+ 0x1F5A4,
+ 0x1F5A6,
+ 0x1F5A8,
+ 0x1F5A9,
+ 0x1F5B1,
+ 0x1F5B3,
+ 0x1F5BC,
+ 0x1F5BD,
+ 0x1F5C2,
+ 0x1F5C5,
+ 0x1F5D1,
+ 0x1F5D4,
+ 0x1F5DC,
+ 0x1F5DF,
+ 0x1F5E1,
+ 0x1F5E2,
+ 0x1F5E3,
+ 0x1F5E4,
+ 0x1F5E8,
+ 0x1F5E9,
+ 0x1F5EF,
+ 0x1F5F0,
+ 0x1F5F3,
+ 0x1F5F4,
+ 0x1F5FA,
+ 0x1F650,
+ 0x1F680,
+ 0x1F6C6,
+ 0x1F6CB,
+ 0x1F6D3,
+ 0x1F6D5,
+ 0x1F6D8,
+ 0x1F6E0,
+ 0x1F6E6,
+ 0x1F6E9,
+ 0x1F6EA,
+ 0x1F6EB,
+ 0x1F6ED,
+ 0x1F6F0,
+ 0x1F6F1,
+ 0x1F6F3,
+ 0x1F6FD,
+ 0x1F7E0,
+ 0x1F7EC,
+ 0x1F90C,
+ 0x1F93B,
+ 0x1F93C,
+ 0x1F946,
+ 0x1F947,
+ 0x1F979,
+ 0x1F97A,
+ 0x1F9CC,
+ 0x1F9CD,
+ 0x1FA00,
+ 0x1FA70,
+ 0x1FA75,
+ 0x1FA78,
+ 0x1FA7B,
+ 0x1FA80,
+ 0x1FA87,
+ 0x1FA90,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7
+};
+
+# endif /* ASCII/Latin1 */
+
+# if 'A' == 193 /* EBCDIC 1047 */ \
+ && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
+ && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
+
+static const UV UNI_EMOJI_invlist[] = { /* for EBCDIC 1047 */
+ 305, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x5C,
+ 0x5D,
+ 0x7B,
+ 0x7C,
+ 0xAF,
+ 0xB0,
+ 0xB4,
+ 0xB5,
+ 0xF0,
+ 0xFA,
+ 0x203C,
+ 0x203D,
+ 0x2049,
+ 0x204A,
+ 0x2122,
+ 0x2123,
+ 0x2139,
+ 0x213A,
+ 0x2194,
+ 0x219A,
+ 0x21A9,
+ 0x21AB,
+ 0x231A,
+ 0x231C,
+ 0x2328,
+ 0x2329,
+ 0x23CF,
+ 0x23D0,
+ 0x23E9,
+ 0x23F4,
+ 0x23F8,
+ 0x23FB,
+ 0x24C2,
+ 0x24C3,
+ 0x25AA,
+ 0x25AC,
+ 0x25B6,
+ 0x25B7,
+ 0x25C0,
+ 0x25C1,
+ 0x25FB,
+ 0x25FF,
+ 0x2600,
+ 0x2605,
+ 0x260E,
+ 0x260F,
+ 0x2611,
+ 0x2612,
+ 0x2614,
+ 0x2616,
+ 0x2618,
+ 0x2619,
+ 0x261D,
+ 0x261E,
+ 0x2620,
+ 0x2621,
+ 0x2622,
+ 0x2624,
+ 0x2626,
+ 0x2627,
+ 0x262A,
+ 0x262B,
+ 0x262E,
+ 0x2630,
+ 0x2638,
+ 0x263B,
+ 0x2640,
+ 0x2641,
+ 0x2642,
+ 0x2643,
+ 0x2648,
+ 0x2654,
+ 0x265F,
+ 0x2661,
+ 0x2663,
+ 0x2664,
+ 0x2665,
+ 0x2667,
+ 0x2668,
+ 0x2669,
+ 0x267B,
+ 0x267C,
+ 0x267E,
+ 0x2680,
+ 0x2692,
+ 0x2698,
+ 0x2699,
+ 0x269A,
+ 0x269B,
+ 0x269D,
+ 0x26A0,
+ 0x26A2,
+ 0x26A7,
+ 0x26A8,
+ 0x26AA,
+ 0x26AC,
+ 0x26B0,
+ 0x26B2,
+ 0x26BD,
+ 0x26BF,
+ 0x26C4,
+ 0x26C6,
+ 0x26C8,
+ 0x26C9,
+ 0x26CE,
+ 0x26D0,
+ 0x26D1,
+ 0x26D2,
+ 0x26D3,
+ 0x26D5,
+ 0x26E9,
+ 0x26EB,
+ 0x26F0,
+ 0x26F6,
+ 0x26F7,
+ 0x26FB,
+ 0x26FD,
+ 0x26FE,
+ 0x2702,
+ 0x2703,
+ 0x2705,
+ 0x2706,
+ 0x2708,
+ 0x270E,
+ 0x270F,
+ 0x2710,
+ 0x2712,
+ 0x2713,
+ 0x2714,
+ 0x2715,
+ 0x2716,
+ 0x2717,
+ 0x271D,
+ 0x271E,
+ 0x2721,
+ 0x2722,
+ 0x2728,
+ 0x2729,
+ 0x2733,
+ 0x2735,
+ 0x2744,
+ 0x2745,
+ 0x2747,
+ 0x2748,
+ 0x274C,
+ 0x274D,
+ 0x274E,
+ 0x274F,
+ 0x2753,
+ 0x2756,
+ 0x2757,
+ 0x2758,
+ 0x2763,
+ 0x2765,
+ 0x2795,
+ 0x2798,
+ 0x27A1,
+ 0x27A2,
+ 0x27B0,
+ 0x27B1,
+ 0x27BF,
+ 0x27C0,
+ 0x2934,
+ 0x2936,
+ 0x2B05,
+ 0x2B08,
+ 0x2B1B,
+ 0x2B1D,
+ 0x2B50,
+ 0x2B51,
+ 0x2B55,
+ 0x2B56,
+ 0x3030,
+ 0x3031,
+ 0x303D,
+ 0x303E,
+ 0x3297,
+ 0x3298,
+ 0x3299,
+ 0x329A,
+ 0x1F004,
+ 0x1F005,
+ 0x1F0CF,
+ 0x1F0D0,
+ 0x1F170,
+ 0x1F172,
+ 0x1F17E,
+ 0x1F180,
+ 0x1F18E,
+ 0x1F18F,
+ 0x1F191,
+ 0x1F19B,
+ 0x1F1E6,
+ 0x1F200,
+ 0x1F201,
+ 0x1F203,
+ 0x1F21A,
+ 0x1F21B,
+ 0x1F22F,
+ 0x1F230,
+ 0x1F232,
+ 0x1F23B,
+ 0x1F250,
+ 0x1F252,
+ 0x1F300,
+ 0x1F322,
+ 0x1F324,
+ 0x1F394,
+ 0x1F396,
+ 0x1F398,
+ 0x1F399,
+ 0x1F39C,
+ 0x1F39E,
+ 0x1F3F1,
+ 0x1F3F3,
+ 0x1F3F6,
+ 0x1F3F7,
+ 0x1F4FE,
+ 0x1F4FF,
+ 0x1F53E,
+ 0x1F549,
+ 0x1F54F,
+ 0x1F550,
+ 0x1F568,
+ 0x1F56F,
+ 0x1F571,
+ 0x1F573,
+ 0x1F57B,
+ 0x1F587,
+ 0x1F588,
+ 0x1F58A,
+ 0x1F58E,
+ 0x1F590,
+ 0x1F591,
+ 0x1F595,
+ 0x1F597,
+ 0x1F5A4,
+ 0x1F5A6,
+ 0x1F5A8,
+ 0x1F5A9,
+ 0x1F5B1,
+ 0x1F5B3,
+ 0x1F5BC,
+ 0x1F5BD,
+ 0x1F5C2,
+ 0x1F5C5,
+ 0x1F5D1,
+ 0x1F5D4,
+ 0x1F5DC,
+ 0x1F5DF,
+ 0x1F5E1,
+ 0x1F5E2,
+ 0x1F5E3,
+ 0x1F5E4,
+ 0x1F5E8,
+ 0x1F5E9,
+ 0x1F5EF,
+ 0x1F5F0,
+ 0x1F5F3,
+ 0x1F5F4,
+ 0x1F5FA,
+ 0x1F650,
+ 0x1F680,
+ 0x1F6C6,
+ 0x1F6CB,
+ 0x1F6D3,
+ 0x1F6D5,
+ 0x1F6D8,
+ 0x1F6E0,
+ 0x1F6E6,
+ 0x1F6E9,
+ 0x1F6EA,
+ 0x1F6EB,
+ 0x1F6ED,
+ 0x1F6F0,
+ 0x1F6F1,
+ 0x1F6F3,
+ 0x1F6FD,
+ 0x1F7E0,
+ 0x1F7EC,
+ 0x1F90C,
+ 0x1F93B,
+ 0x1F93C,
+ 0x1F946,
+ 0x1F947,
+ 0x1F979,
+ 0x1F97A,
+ 0x1F9CC,
+ 0x1F9CD,
+ 0x1FA00,
+ 0x1FA70,
+ 0x1FA75,
+ 0x1FA78,
+ 0x1FA7B,
+ 0x1FA80,
+ 0x1FA87,
+ 0x1FA90,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7
+};
+
+# endif /* EBCDIC 1047 */
+
+# if 'A' == 193 /* EBCDIC 037 */ \
+ && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
+ && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
+
+static const UV UNI_EMOJI_invlist[] = { /* for EBCDIC 037 */
+ 305, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x5C,
+ 0x5D,
+ 0x7B,
+ 0x7C,
+ 0xAF,
+ 0xB0,
+ 0xB4,
+ 0xB5,
+ 0xF0,
+ 0xFA,
+ 0x203C,
+ 0x203D,
+ 0x2049,
+ 0x204A,
+ 0x2122,
+ 0x2123,
+ 0x2139,
+ 0x213A,
+ 0x2194,
+ 0x219A,
+ 0x21A9,
+ 0x21AB,
+ 0x231A,
+ 0x231C,
+ 0x2328,
+ 0x2329,
+ 0x23CF,
+ 0x23D0,
+ 0x23E9,
+ 0x23F4,
+ 0x23F8,
+ 0x23FB,
+ 0x24C2,
+ 0x24C3,
+ 0x25AA,
+ 0x25AC,
+ 0x25B6,
+ 0x25B7,
+ 0x25C0,
+ 0x25C1,
+ 0x25FB,
+ 0x25FF,
+ 0x2600,
+ 0x2605,
+ 0x260E,
+ 0x260F,
+ 0x2611,
+ 0x2612,
+ 0x2614,
+ 0x2616,
+ 0x2618,
+ 0x2619,
+ 0x261D,
+ 0x261E,
+ 0x2620,
+ 0x2621,
+ 0x2622,
+ 0x2624,
+ 0x2626,
+ 0x2627,
+ 0x262A,
+ 0x262B,
+ 0x262E,
+ 0x2630,
+ 0x2638,
+ 0x263B,
+ 0x2640,
+ 0x2641,
+ 0x2642,
+ 0x2643,
+ 0x2648,
+ 0x2654,
+ 0x265F,
+ 0x2661,
+ 0x2663,
+ 0x2664,
+ 0x2665,
+ 0x2667,
+ 0x2668,
+ 0x2669,
+ 0x267B,
+ 0x267C,
+ 0x267E,
+ 0x2680,
+ 0x2692,
+ 0x2698,
+ 0x2699,
+ 0x269A,
+ 0x269B,
+ 0x269D,
+ 0x26A0,
+ 0x26A2,
+ 0x26A7,
+ 0x26A8,
+ 0x26AA,
+ 0x26AC,
+ 0x26B0,
+ 0x26B2,
+ 0x26BD,
+ 0x26BF,
+ 0x26C4,
+ 0x26C6,
+ 0x26C8,
+ 0x26C9,
+ 0x26CE,
+ 0x26D0,
+ 0x26D1,
+ 0x26D2,
+ 0x26D3,
+ 0x26D5,
+ 0x26E9,
+ 0x26EB,
+ 0x26F0,
+ 0x26F6,
+ 0x26F7,
+ 0x26FB,
+ 0x26FD,
+ 0x26FE,
+ 0x2702,
+ 0x2703,
+ 0x2705,
+ 0x2706,
+ 0x2708,
+ 0x270E,
+ 0x270F,
+ 0x2710,
+ 0x2712,
+ 0x2713,
+ 0x2714,
+ 0x2715,
+ 0x2716,
+ 0x2717,
+ 0x271D,
+ 0x271E,
+ 0x2721,
+ 0x2722,
+ 0x2728,
+ 0x2729,
+ 0x2733,
+ 0x2735,
+ 0x2744,
+ 0x2745,
+ 0x2747,
+ 0x2748,
+ 0x274C,
+ 0x274D,
+ 0x274E,
+ 0x274F,
+ 0x2753,
+ 0x2756,
+ 0x2757,
+ 0x2758,
+ 0x2763,
+ 0x2765,
+ 0x2795,
+ 0x2798,
+ 0x27A1,
+ 0x27A2,
+ 0x27B0,
+ 0x27B1,
+ 0x27BF,
+ 0x27C0,
+ 0x2934,
+ 0x2936,
+ 0x2B05,
+ 0x2B08,
+ 0x2B1B,
+ 0x2B1D,
+ 0x2B50,
+ 0x2B51,
+ 0x2B55,
+ 0x2B56,
+ 0x3030,
+ 0x3031,
+ 0x303D,
+ 0x303E,
+ 0x3297,
+ 0x3298,
+ 0x3299,
+ 0x329A,
+ 0x1F004,
+ 0x1F005,
+ 0x1F0CF,
+ 0x1F0D0,
+ 0x1F170,
+ 0x1F172,
+ 0x1F17E,
+ 0x1F180,
+ 0x1F18E,
+ 0x1F18F,
+ 0x1F191,
+ 0x1F19B,
+ 0x1F1E6,
+ 0x1F200,
+ 0x1F201,
+ 0x1F203,
+ 0x1F21A,
+ 0x1F21B,
+ 0x1F22F,
+ 0x1F230,
+ 0x1F232,
+ 0x1F23B,
+ 0x1F250,
+ 0x1F252,
+ 0x1F300,
+ 0x1F322,
+ 0x1F324,
+ 0x1F394,
+ 0x1F396,
+ 0x1F398,
+ 0x1F399,
+ 0x1F39C,
+ 0x1F39E,
+ 0x1F3F1,
+ 0x1F3F3,
+ 0x1F3F6,
+ 0x1F3F7,
+ 0x1F4FE,
+ 0x1F4FF,
+ 0x1F53E,
+ 0x1F549,
+ 0x1F54F,
+ 0x1F550,
+ 0x1F568,
+ 0x1F56F,
+ 0x1F571,
+ 0x1F573,
+ 0x1F57B,
+ 0x1F587,
+ 0x1F588,
+ 0x1F58A,
+ 0x1F58E,
+ 0x1F590,
+ 0x1F591,
+ 0x1F595,
+ 0x1F597,
+ 0x1F5A4,
+ 0x1F5A6,
+ 0x1F5A8,
+ 0x1F5A9,
+ 0x1F5B1,
+ 0x1F5B3,
+ 0x1F5BC,
+ 0x1F5BD,
+ 0x1F5C2,
+ 0x1F5C5,
+ 0x1F5D1,
+ 0x1F5D4,
+ 0x1F5DC,
+ 0x1F5DF,
+ 0x1F5E1,
+ 0x1F5E2,
+ 0x1F5E3,
+ 0x1F5E4,
+ 0x1F5E8,
+ 0x1F5E9,
+ 0x1F5EF,
+ 0x1F5F0,
+ 0x1F5F3,
+ 0x1F5F4,
+ 0x1F5FA,
+ 0x1F650,
+ 0x1F680,
+ 0x1F6C6,
+ 0x1F6CB,
+ 0x1F6D3,
+ 0x1F6D5,
+ 0x1F6D8,
+ 0x1F6E0,
+ 0x1F6E6,
+ 0x1F6E9,
+ 0x1F6EA,
+ 0x1F6EB,
+ 0x1F6ED,
+ 0x1F6F0,
+ 0x1F6F1,
+ 0x1F6F3,
+ 0x1F6FD,
+ 0x1F7E0,
+ 0x1F7EC,
+ 0x1F90C,
+ 0x1F93B,
+ 0x1F93C,
+ 0x1F946,
+ 0x1F947,
+ 0x1F979,
+ 0x1F97A,
+ 0x1F9CC,
+ 0x1F9CD,
+ 0x1FA00,
+ 0x1FA70,
+ 0x1FA75,
+ 0x1FA78,
+ 0x1FA7B,
+ 0x1FA80,
+ 0x1FA87,
+ 0x1FA90,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7
+};
+
+# endif /* EBCDIC 037 */
+
static const UV UNI_EMOTICONS_invlist[] = { /* for all charsets */
3, /* Number of elements */
148565664, /* Version and data structure type */
@@ -239237,6 +243171,176 @@ static const UV UNI_ENCLOSEDIDEOGRAPHICSUP_invlist[] = { /* for all charsets */
0x1F300
};
+static const UV UNI_EPRES_invlist[] = { /* for all charsets */
+ 163, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x231A,
+ 0x231C,
+ 0x23E9,
+ 0x23ED,
+ 0x23F0,
+ 0x23F1,
+ 0x23F3,
+ 0x23F4,
+ 0x25FD,
+ 0x25FF,
+ 0x2614,
+ 0x2616,
+ 0x2648,
+ 0x2654,
+ 0x267F,
+ 0x2680,
+ 0x2693,
+ 0x2694,
+ 0x26A1,
+ 0x26A2,
+ 0x26AA,
+ 0x26AC,
+ 0x26BD,
+ 0x26BF,
+ 0x26C4,
+ 0x26C6,
+ 0x26CE,
+ 0x26CF,
+ 0x26D4,
+ 0x26D5,
+ 0x26EA,
+ 0x26EB,
+ 0x26F2,
+ 0x26F4,
+ 0x26F5,
+ 0x26F6,
+ 0x26FA,
+ 0x26FB,
+ 0x26FD,
+ 0x26FE,
+ 0x2705,
+ 0x2706,
+ 0x270A,
+ 0x270C,
+ 0x2728,
+ 0x2729,
+ 0x274C,
+ 0x274D,
+ 0x274E,
+ 0x274F,
+ 0x2753,
+ 0x2756,
+ 0x2757,
+ 0x2758,
+ 0x2795,
+ 0x2798,
+ 0x27B0,
+ 0x27B1,
+ 0x27BF,
+ 0x27C0,
+ 0x2B1B,
+ 0x2B1D,
+ 0x2B50,
+ 0x2B51,
+ 0x2B55,
+ 0x2B56,
+ 0x1F004,
+ 0x1F005,
+ 0x1F0CF,
+ 0x1F0D0,
+ 0x1F18E,
+ 0x1F18F,
+ 0x1F191,
+ 0x1F19B,
+ 0x1F1E6,
+ 0x1F200,
+ 0x1F201,
+ 0x1F202,
+ 0x1F21A,
+ 0x1F21B,
+ 0x1F22F,
+ 0x1F230,
+ 0x1F232,
+ 0x1F237,
+ 0x1F238,
+ 0x1F23B,
+ 0x1F250,
+ 0x1F252,
+ 0x1F300,
+ 0x1F321,
+ 0x1F32D,
+ 0x1F336,
+ 0x1F337,
+ 0x1F37D,
+ 0x1F37E,
+ 0x1F394,
+ 0x1F3A0,
+ 0x1F3CB,
+ 0x1F3CF,
+ 0x1F3D4,
+ 0x1F3E0,
+ 0x1F3F1,
+ 0x1F3F4,
+ 0x1F3F5,
+ 0x1F3F8,
+ 0x1F43F,
+ 0x1F440,
+ 0x1F441,
+ 0x1F442,
+ 0x1F4FD,
+ 0x1F4FF,
+ 0x1F53E,
+ 0x1F54B,
+ 0x1F54F,
+ 0x1F550,
+ 0x1F568,
+ 0x1F57A,
+ 0x1F57B,
+ 0x1F595,
+ 0x1F597,
+ 0x1F5A4,
+ 0x1F5A5,
+ 0x1F5FB,
+ 0x1F650,
+ 0x1F680,
+ 0x1F6C6,
+ 0x1F6CC,
+ 0x1F6CD,
+ 0x1F6D0,
+ 0x1F6D3,
+ 0x1F6D5,
+ 0x1F6D8,
+ 0x1F6EB,
+ 0x1F6ED,
+ 0x1F6F4,
+ 0x1F6FD,
+ 0x1F7E0,
+ 0x1F7EC,
+ 0x1F90C,
+ 0x1F93B,
+ 0x1F93C,
+ 0x1F946,
+ 0x1F947,
+ 0x1F979,
+ 0x1F97A,
+ 0x1F9CC,
+ 0x1F9CD,
+ 0x1FA00,
+ 0x1FA70,
+ 0x1FA75,
+ 0x1FA78,
+ 0x1FA7B,
+ 0x1FA80,
+ 0x1FA87,
+ 0x1FA90,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7
+};
+
static const UV UNI_ETHI_invlist[] = { /* for all charsets */
65, /* Number of elements */
148565664, /* Version and data structure type */
@@ -239342,7 +243446,7 @@ static const UV UNI_ETHIOPICSUP_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_EXT_invlist[] = { /* for ASCII/Latin1 */
- 63, /* Number of elements */
+ 65, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -239355,6 +243459,8 @@ static const UV UNI_EXT_invlist[] = { /* for ASCII/Latin1 */
0x641,
0x7FA,
0x7FB,
+ 0xB55,
+ 0xB56,
0xE46,
0xE47,
0xEC6,
@@ -239419,7 +243525,7 @@ static const UV UNI_EXT_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_EXT_invlist[] = { /* for EBCDIC 1047 */
- 63, /* Number of elements */
+ 65, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -239432,6 +243538,8 @@ static const UV UNI_EXT_invlist[] = { /* for EBCDIC 1047 */
0x641,
0x7FA,
0x7FB,
+ 0xB55,
+ 0xB56,
0xE46,
0xE47,
0xEC6,
@@ -239496,7 +243604,7 @@ static const UV UNI_EXT_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_EXT_invlist[] = { /* for EBCDIC 037 */
- 63, /* Number of elements */
+ 65, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -239509,6 +243617,8 @@ static const UV UNI_EXT_invlist[] = { /* for EBCDIC 037 */
0x641,
0x7FA,
0x7FB,
+ 0xB55,
+ 0xB56,
0xE46,
0xE47,
0xEC6,
@@ -239569,6 +243679,516 @@ static const UV UNI_EXT_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
+static const UV UNI_EXTPICT_invlist[] = { /* for ASCII/Latin1 */
+ 157, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0xA9,
+ 0xAA,
+ 0xAE,
+ 0xAF,
+ 0x203C,
+ 0x203D,
+ 0x2049,
+ 0x204A,
+ 0x2122,
+ 0x2123,
+ 0x2139,
+ 0x213A,
+ 0x2194,
+ 0x219A,
+ 0x21A9,
+ 0x21AB,
+ 0x231A,
+ 0x231C,
+ 0x2328,
+ 0x2329,
+ 0x2388,
+ 0x2389,
+ 0x23CF,
+ 0x23D0,
+ 0x23E9,
+ 0x23F4,
+ 0x23F8,
+ 0x23FB,
+ 0x24C2,
+ 0x24C3,
+ 0x25AA,
+ 0x25AC,
+ 0x25B6,
+ 0x25B7,
+ 0x25C0,
+ 0x25C1,
+ 0x25FB,
+ 0x25FF,
+ 0x2600,
+ 0x2606,
+ 0x2607,
+ 0x2613,
+ 0x2614,
+ 0x2686,
+ 0x2690,
+ 0x2706,
+ 0x2708,
+ 0x2713,
+ 0x2714,
+ 0x2715,
+ 0x2716,
+ 0x2717,
+ 0x271D,
+ 0x271E,
+ 0x2721,
+ 0x2722,
+ 0x2728,
+ 0x2729,
+ 0x2733,
+ 0x2735,
+ 0x2744,
+ 0x2745,
+ 0x2747,
+ 0x2748,
+ 0x274C,
+ 0x274D,
+ 0x274E,
+ 0x274F,
+ 0x2753,
+ 0x2756,
+ 0x2757,
+ 0x2758,
+ 0x2763,
+ 0x2768,
+ 0x2795,
+ 0x2798,
+ 0x27A1,
+ 0x27A2,
+ 0x27B0,
+ 0x27B1,
+ 0x27BF,
+ 0x27C0,
+ 0x2934,
+ 0x2936,
+ 0x2B05,
+ 0x2B08,
+ 0x2B1B,
+ 0x2B1D,
+ 0x2B50,
+ 0x2B51,
+ 0x2B55,
+ 0x2B56,
+ 0x3030,
+ 0x3031,
+ 0x303D,
+ 0x303E,
+ 0x3297,
+ 0x3298,
+ 0x3299,
+ 0x329A,
+ 0x1F000,
+ 0x1F100,
+ 0x1F10D,
+ 0x1F110,
+ 0x1F12F,
+ 0x1F130,
+ 0x1F16C,
+ 0x1F172,
+ 0x1F17E,
+ 0x1F180,
+ 0x1F18E,
+ 0x1F18F,
+ 0x1F191,
+ 0x1F19B,
+ 0x1F1AD,
+ 0x1F1E6,
+ 0x1F201,
+ 0x1F210,
+ 0x1F21A,
+ 0x1F21B,
+ 0x1F22F,
+ 0x1F230,
+ 0x1F232,
+ 0x1F23B,
+ 0x1F23C,
+ 0x1F240,
+ 0x1F249,
+ 0x1F3FB,
+ 0x1F400,
+ 0x1F53E,
+ 0x1F546,
+ 0x1F650,
+ 0x1F680,
+ 0x1F700,
+ 0x1F774,
+ 0x1F780,
+ 0x1F7D5,
+ 0x1F800,
+ 0x1F80C,
+ 0x1F810,
+ 0x1F848,
+ 0x1F850,
+ 0x1F85A,
+ 0x1F860,
+ 0x1F888,
+ 0x1F890,
+ 0x1F8AE,
+ 0x1F900,
+ 0x1F90C,
+ 0x1F93B,
+ 0x1F93C,
+ 0x1F946,
+ 0x1F947,
+ 0x1FB00,
+ 0x1FC00,
+ 0x1FFFE
+};
+
+# endif /* ASCII/Latin1 */
+
+# if 'A' == 193 /* EBCDIC 1047 */ \
+ && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
+ && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
+
+static const UV UNI_EXTPICT_invlist[] = { /* for EBCDIC 1047 */
+ 157, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0xAF,
+ 0xB0,
+ 0xB4,
+ 0xB5,
+ 0x203C,
+ 0x203D,
+ 0x2049,
+ 0x204A,
+ 0x2122,
+ 0x2123,
+ 0x2139,
+ 0x213A,
+ 0x2194,
+ 0x219A,
+ 0x21A9,
+ 0x21AB,
+ 0x231A,
+ 0x231C,
+ 0x2328,
+ 0x2329,
+ 0x2388,
+ 0x2389,
+ 0x23CF,
+ 0x23D0,
+ 0x23E9,
+ 0x23F4,
+ 0x23F8,
+ 0x23FB,
+ 0x24C2,
+ 0x24C3,
+ 0x25AA,
+ 0x25AC,
+ 0x25B6,
+ 0x25B7,
+ 0x25C0,
+ 0x25C1,
+ 0x25FB,
+ 0x25FF,
+ 0x2600,
+ 0x2606,
+ 0x2607,
+ 0x2613,
+ 0x2614,
+ 0x2686,
+ 0x2690,
+ 0x2706,
+ 0x2708,
+ 0x2713,
+ 0x2714,
+ 0x2715,
+ 0x2716,
+ 0x2717,
+ 0x271D,
+ 0x271E,
+ 0x2721,
+ 0x2722,
+ 0x2728,
+ 0x2729,
+ 0x2733,
+ 0x2735,
+ 0x2744,
+ 0x2745,
+ 0x2747,
+ 0x2748,
+ 0x274C,
+ 0x274D,
+ 0x274E,
+ 0x274F,
+ 0x2753,
+ 0x2756,
+ 0x2757,
+ 0x2758,
+ 0x2763,
+ 0x2768,
+ 0x2795,
+ 0x2798,
+ 0x27A1,
+ 0x27A2,
+ 0x27B0,
+ 0x27B1,
+ 0x27BF,
+ 0x27C0,
+ 0x2934,
+ 0x2936,
+ 0x2B05,
+ 0x2B08,
+ 0x2B1B,
+ 0x2B1D,
+ 0x2B50,
+ 0x2B51,
+ 0x2B55,
+ 0x2B56,
+ 0x3030,
+ 0x3031,
+ 0x303D,
+ 0x303E,
+ 0x3297,
+ 0x3298,
+ 0x3299,
+ 0x329A,
+ 0x1F000,
+ 0x1F100,
+ 0x1F10D,
+ 0x1F110,
+ 0x1F12F,
+ 0x1F130,
+ 0x1F16C,
+ 0x1F172,
+ 0x1F17E,
+ 0x1F180,
+ 0x1F18E,
+ 0x1F18F,
+ 0x1F191,
+ 0x1F19B,
+ 0x1F1AD,
+ 0x1F1E6,
+ 0x1F201,
+ 0x1F210,
+ 0x1F21A,
+ 0x1F21B,
+ 0x1F22F,
+ 0x1F230,
+ 0x1F232,
+ 0x1F23B,
+ 0x1F23C,
+ 0x1F240,
+ 0x1F249,
+ 0x1F3FB,
+ 0x1F400,
+ 0x1F53E,
+ 0x1F546,
+ 0x1F650,
+ 0x1F680,
+ 0x1F700,
+ 0x1F774,
+ 0x1F780,
+ 0x1F7D5,
+ 0x1F800,
+ 0x1F80C,
+ 0x1F810,
+ 0x1F848,
+ 0x1F850,
+ 0x1F85A,
+ 0x1F860,
+ 0x1F888,
+ 0x1F890,
+ 0x1F8AE,
+ 0x1F900,
+ 0x1F90C,
+ 0x1F93B,
+ 0x1F93C,
+ 0x1F946,
+ 0x1F947,
+ 0x1FB00,
+ 0x1FC00,
+ 0x1FFFE
+};
+
+# endif /* EBCDIC 1047 */
+
+# if 'A' == 193 /* EBCDIC 037 */ \
+ && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
+ && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
+
+static const UV UNI_EXTPICT_invlist[] = { /* for EBCDIC 037 */
+ 157, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0xAF,
+ 0xB0,
+ 0xB4,
+ 0xB5,
+ 0x203C,
+ 0x203D,
+ 0x2049,
+ 0x204A,
+ 0x2122,
+ 0x2123,
+ 0x2139,
+ 0x213A,
+ 0x2194,
+ 0x219A,
+ 0x21A9,
+ 0x21AB,
+ 0x231A,
+ 0x231C,
+ 0x2328,
+ 0x2329,
+ 0x2388,
+ 0x2389,
+ 0x23CF,
+ 0x23D0,
+ 0x23E9,
+ 0x23F4,
+ 0x23F8,
+ 0x23FB,
+ 0x24C2,
+ 0x24C3,
+ 0x25AA,
+ 0x25AC,
+ 0x25B6,
+ 0x25B7,
+ 0x25C0,
+ 0x25C1,
+ 0x25FB,
+ 0x25FF,
+ 0x2600,
+ 0x2606,
+ 0x2607,
+ 0x2613,
+ 0x2614,
+ 0x2686,
+ 0x2690,
+ 0x2706,
+ 0x2708,
+ 0x2713,
+ 0x2714,
+ 0x2715,
+ 0x2716,
+ 0x2717,
+ 0x271D,
+ 0x271E,
+ 0x2721,
+ 0x2722,
+ 0x2728,
+ 0x2729,
+ 0x2733,
+ 0x2735,
+ 0x2744,
+ 0x2745,
+ 0x2747,
+ 0x2748,
+ 0x274C,
+ 0x274D,
+ 0x274E,
+ 0x274F,
+ 0x2753,
+ 0x2756,
+ 0x2757,
+ 0x2758,
+ 0x2763,
+ 0x2768,
+ 0x2795,
+ 0x2798,
+ 0x27A1,
+ 0x27A2,
+ 0x27B0,
+ 0x27B1,
+ 0x27BF,
+ 0x27C0,
+ 0x2934,
+ 0x2936,
+ 0x2B05,
+ 0x2B08,
+ 0x2B1B,
+ 0x2B1D,
+ 0x2B50,
+ 0x2B51,
+ 0x2B55,
+ 0x2B56,
+ 0x3030,
+ 0x3031,
+ 0x303D,
+ 0x303E,
+ 0x3297,
+ 0x3298,
+ 0x3299,
+ 0x329A,
+ 0x1F000,
+ 0x1F100,
+ 0x1F10D,
+ 0x1F110,
+ 0x1F12F,
+ 0x1F130,
+ 0x1F16C,
+ 0x1F172,
+ 0x1F17E,
+ 0x1F180,
+ 0x1F18E,
+ 0x1F18F,
+ 0x1F191,
+ 0x1F19B,
+ 0x1F1AD,
+ 0x1F1E6,
+ 0x1F201,
+ 0x1F210,
+ 0x1F21A,
+ 0x1F21B,
+ 0x1F22F,
+ 0x1F230,
+ 0x1F232,
+ 0x1F23B,
+ 0x1F23C,
+ 0x1F240,
+ 0x1F249,
+ 0x1F3FB,
+ 0x1F400,
+ 0x1F53E,
+ 0x1F546,
+ 0x1F650,
+ 0x1F680,
+ 0x1F700,
+ 0x1F774,
+ 0x1F780,
+ 0x1F7D5,
+ 0x1F800,
+ 0x1F80C,
+ 0x1F810,
+ 0x1F848,
+ 0x1F850,
+ 0x1F85A,
+ 0x1F860,
+ 0x1F888,
+ 0x1F890,
+ 0x1F8AE,
+ 0x1F900,
+ 0x1F90C,
+ 0x1F93B,
+ 0x1F93C,
+ 0x1F946,
+ 0x1F947,
+ 0x1FB00,
+ 0x1FC00,
+ 0x1FFFE
+};
+
+# endif /* EBCDIC 037 */
+
+# if 'A' == 65 /* ASCII/Latin1 */
+
static const UV UNI_GCB__CN_invlist[] = { /* for ASCII/Latin1 */
38, /* Number of elements */
148565664, /* Version and data structure type */
@@ -239721,7 +244341,7 @@ static const UV UNI_GCB__CN_invlist[] = { /* for EBCDIC 037 */
# endif /* EBCDIC 037 */
static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */
- 673, /* Number of elements */
+ 691, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -239846,7 +244466,7 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -239904,6 +244524,8 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */
0xD58,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDCF,
@@ -240021,7 +244643,7 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -240098,6 +244720,8 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C6,
0xA8E0,
@@ -240178,6 +244802,8 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11001,
@@ -240204,6 +244830,8 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -240284,6 +244912,14 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */
0x11838,
0x11839,
0x1183B,
+ 0x11930,
+ 0x11931,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -240346,6 +244982,8 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */
0x16F50,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1D165,
@@ -240413,7 +245051,7 @@ static const UV UNI_GCB__L_invlist[] = { /* for all charsets */
};
static const UV UNI_GCB__PP_invlist[] = { /* for all charsets */
- 23, /* Number of elements */
+ 27, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -240434,6 +245072,10 @@ static const UV UNI_GCB__PP_invlist[] = { /* for all charsets */
0x110CE,
0x111C2,
0x111C4,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x11A3A,
0x11A3B,
0x11A84,
@@ -240443,7 +245085,7 @@ static const UV UNI_GCB__PP_invlist[] = { /* for all charsets */
};
static const UV UNI_GCB__SM_invlist[] = { /* for all charsets */
- 305, /* Number of elements */
+ 319, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -240654,6 +245296,8 @@ static const UV UNI_GCB__SM_invlist[] = { /* for all charsets */
0x111B6,
0x111BF,
0x111C1,
+ 0x111CE,
+ 0x111CF,
0x1122C,
0x1122F,
0x11232,
@@ -240716,6 +245360,16 @@ static const UV UNI_GCB__SM_invlist[] = { /* for all charsets */
0x1182F,
0x11838,
0x11839,
+ 0x11931,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193D,
+ 0x1193E,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11943,
0x119D1,
0x119D4,
0x119DC,
@@ -240748,6 +245402,8 @@ static const UV UNI_GCB__SM_invlist[] = { /* for all charsets */
0x11EF7,
0x16F51,
0x16F88,
+ 0x16FF0,
+ 0x16FF2,
0x1D166,
0x1D167,
0x1D16D,
@@ -240781,7 +245437,7 @@ static const UV UNI_GCB__V_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */
- 604, /* Number of elements */
+ 620, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -240911,7 +245567,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -240965,7 +245621,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */
0xD58,
0xD62,
0xD64,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -241066,7 +245722,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -241129,6 +245785,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -241213,6 +245871,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -241243,6 +245903,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */
0x111C4,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111D0,
0x1122C,
0x11238,
0x1123E,
@@ -241287,6 +245949,12 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */
0x1172C,
0x1182C,
0x1183B,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
0x119D1,
0x119D8,
0x119DA,
@@ -241339,6 +246007,10 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -241399,7 +246071,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */
- 604, /* Number of elements */
+ 620, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -241529,7 +246201,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -241583,7 +246255,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */
0xD58,
0xD62,
0xD64,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -241684,7 +246356,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -241747,6 +246419,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -241831,6 +246505,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -241861,6 +246537,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */
0x111C4,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111D0,
0x1122C,
0x11238,
0x1123E,
@@ -241905,6 +246583,12 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */
0x1172C,
0x1182C,
0x1183B,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
0x119D1,
0x119D8,
0x119DA,
@@ -241957,6 +246641,10 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -242017,7 +246705,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */
- 604, /* Number of elements */
+ 620, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -242147,7 +246835,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -242201,7 +246889,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */
0xD58,
0xD62,
0xD64,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -242302,7 +246990,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -242365,6 +247053,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -242449,6 +247139,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -242479,6 +247171,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */
0x111C4,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111D0,
0x1122C,
0x11238,
0x1123E,
@@ -242523,6 +247217,12 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */
0x1172C,
0x1182C,
0x1183B,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
0x119D1,
0x119D8,
0x119DA,
@@ -242575,6 +247275,10 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -242650,13 +247354,11 @@ static const UV UNI_GEOMETRICSHAPESEXT_invlist[] = { /* for all charsets */
};
static const UV UNI_GEOR_invlist[] = { /* for all charsets */
- 21, /* Number of elements */
+ 19, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
- 0x589,
- 0x58A,
0x10A0,
0x10C6,
0x10C7,
@@ -242854,7 +247556,7 @@ static const UV UNI_GRAN_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
- 1639, /* Number of elements */
+ 1669, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -242946,7 +247648,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x903,
0x93A,
0x93B,
@@ -243158,8 +247860,6 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD02,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -243523,7 +248223,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -243560,7 +248260,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x2DD8,
0x2DDF,
0x2E00,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -243582,15 +248282,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -243610,8 +248306,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -243696,7 +248392,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABE5,
0xABE6,
@@ -243792,7 +248488,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -243907,12 +248603,20 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAD,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F46,
0x10F51,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -243940,7 +248644,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x1112C,
0x1112D,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -243950,7 +248654,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x111BF,
0x111C9,
0x111CD,
- 0x111CE,
+ 0x111CF,
0x111D0,
0x111E0,
0x111E1,
@@ -244016,13 +248720,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x11445,
0x11446,
0x11447,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114B1,
@@ -244090,7 +248792,27 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x11931,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -244165,6 +248887,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x11EF3,
0x11EF5,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -244213,10 +248937,14 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x16FA0,
0x16FE0,
0x16FE4,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -244424,11 +249152,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -244440,11 +249164,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -244461,32 +249185,38 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -244496,7 +249226,9 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* ASCII/Latin1 */
@@ -244507,7 +249239,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
- 1639, /* Number of elements */
+ 1669, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -244599,7 +249331,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x903,
0x93A,
0x93B,
@@ -244811,8 +249543,6 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD02,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -245176,7 +249906,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -245213,7 +249943,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x2DD8,
0x2DDF,
0x2E00,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -245235,15 +249965,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -245263,8 +249989,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -245349,7 +250075,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABE5,
0xABE6,
@@ -245445,7 +250171,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -245560,12 +250286,20 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAD,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F46,
0x10F51,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -245593,7 +250327,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x1112C,
0x1112D,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -245603,7 +250337,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x111BF,
0x111C9,
0x111CD,
- 0x111CE,
+ 0x111CF,
0x111D0,
0x111E0,
0x111E1,
@@ -245669,13 +250403,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x11445,
0x11446,
0x11447,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114B1,
@@ -245743,7 +250475,27 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x11931,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -245818,6 +250570,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x11EF3,
0x11EF5,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -245866,10 +250620,14 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x16FA0,
0x16FE0,
0x16FE4,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -246077,11 +250835,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -246093,11 +250847,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -246114,32 +250868,38 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -246149,7 +250909,9 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 1047 */
@@ -246160,7 +250922,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
- 1639, /* Number of elements */
+ 1669, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -246252,7 +251014,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x903,
0x93A,
0x93B,
@@ -246464,8 +251226,6 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD02,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -246829,7 +251589,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -246866,7 +251626,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x2DD8,
0x2DDF,
0x2E00,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -246888,15 +251648,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -246916,8 +251672,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -247002,7 +251758,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABE5,
0xABE6,
@@ -247098,7 +251854,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -247213,12 +251969,20 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAD,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F46,
0x10F51,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -247246,7 +252010,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x1112C,
0x1112D,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -247256,7 +252020,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x111BF,
0x111C9,
0x111CD,
- 0x111CE,
+ 0x111CF,
0x111D0,
0x111E0,
0x111E1,
@@ -247322,13 +252086,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x11445,
0x11446,
0x11447,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114B1,
@@ -247396,7 +252158,27 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x11931,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -247471,6 +252253,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x11EF3,
0x11EF5,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -247519,10 +252303,14 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x16FA0,
0x16FE0,
0x16FE4,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -247730,11 +252518,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -247746,11 +252530,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -247767,32 +252551,38 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -247802,7 +252592,9 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 037 */
@@ -247902,7 +252694,7 @@ static const UV UNI_GREK_invlist[] = { /* for all charsets */
};
static const UV UNI_GREXT_invlist[] = { /* for all charsets */
- 671, /* Number of elements */
+ 689, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -248027,7 +252819,7 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -248085,6 +252877,8 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */
0xD58,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDCF,
@@ -248202,7 +252996,7 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -248279,6 +253073,8 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C6,
0xA8E0,
@@ -248359,6 +253155,8 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11001,
@@ -248385,6 +253183,8 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -248465,6 +253265,14 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */
0x11838,
0x11839,
0x1183B,
+ 0x11930,
+ 0x11931,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -248527,6 +253335,8 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */
0x16F50,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1D165,
@@ -248688,7 +253498,7 @@ static const UV UNI_HALFMARKS_invlist[] = { /* for all charsets */
};
static const UV UNI_HAN_invlist[] = { /* for all charsets */
- 67, /* Number of elements */
+ 73, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -248732,9 +253542,11 @@ static const UV UNI_HAN_invlist[] = { /* for all charsets */
0x33E0,
0x33FF,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
+ 0xA700,
+ 0xA708,
0xF900,
0xFA6E,
0xFA70,
@@ -248743,12 +253555,14 @@ static const UV UNI_HAN_invlist[] = { /* for all charsets */
0xFE47,
0xFF61,
0xFF66,
+ 0x16FF0,
+ 0x16FF2,
0x1D360,
0x1D372,
0x1F250,
0x1F252,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -248758,7 +253572,9 @@ static const UV UNI_HAN_invlist[] = { /* for all charsets */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
static const UV UNI_HANG_invlist[] = { /* for all charsets */
@@ -249102,7 +253918,7 @@ static const UV UNI_HYPHEN_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
- 1427, /* Number of elements */
+ 1461, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -249212,7 +254028,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -249331,7 +254147,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -249424,8 +254240,6 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -249443,7 +254257,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -249645,6 +254459,8 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -249810,13 +254626,13 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -249838,9 +254654,11 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -249892,7 +254710,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -250089,12 +254907,20 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -250112,7 +254938,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -250121,7 +254947,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -250180,7 +255006,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -250214,7 +255040,21 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -250275,6 +255115,8 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -250316,11 +255158,15 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -250519,8 +255365,10 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -250531,6 +255379,8 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -250543,7 +255393,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
- 1451, /* Number of elements */
+ 1485, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -250677,7 +255527,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -250796,7 +255646,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -250889,8 +255739,6 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -250908,7 +255756,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -251110,6 +255958,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -251275,13 +256125,13 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -251303,9 +256153,11 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -251357,7 +256209,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -251554,12 +256406,20 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -251577,7 +256437,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -251586,7 +256446,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -251645,7 +256505,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -251679,7 +256539,21 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -251740,6 +256614,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -251781,11 +256657,15 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -251984,8 +256864,10 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -251996,6 +256878,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -252008,7 +256892,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
- 1447, /* Number of elements */
+ 1481, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -252138,7 +257022,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -252257,7 +257141,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -252350,8 +257234,6 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -252369,7 +257251,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -252571,6 +257453,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -252736,13 +257620,13 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -252764,9 +257648,11 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -252818,7 +257704,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -253015,12 +257901,20 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -253038,7 +257932,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -253047,7 +257941,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -253106,7 +258000,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -253140,7 +258034,21 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -253201,6 +258109,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -253242,11 +258152,15 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -253445,8 +258359,10 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -253457,18 +258373,16302 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
# endif /* EBCDIC 037 */
-static const UV UNI_IDEO_invlist[] = { /* for all charsets */
+# if 'A' == 65 /* ASCII/Latin1 */
+
+static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for ASCII/Latin1 */
+ 749, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x27,
+ 0x28,
+ 0x2D,
+ 0x2F,
+ 0x30,
+ 0x3B,
+ 0x41,
+ 0x5B,
+ 0x5F,
+ 0x60,
+ 0x61,
+ 0x7B,
+ 0xB7,
+ 0xB8,
+ 0xC0,
+ 0xD7,
+ 0xD8,
+ 0xF7,
+ 0xF8,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x149,
+ 0x14A,
+ 0x17F,
+ 0x18F,
+ 0x190,
+ 0x1A0,
+ 0x1A2,
+ 0x1AF,
+ 0x1B1,
+ 0x1CD,
+ 0x1DD,
+ 0x1DE,
+ 0x1E4,
+ 0x1E6,
+ 0x1F1,
+ 0x1F4,
+ 0x1F6,
+ 0x1F8,
+ 0x21C,
+ 0x21E,
+ 0x220,
+ 0x226,
+ 0x234,
+ 0x259,
+ 0x25A,
+ 0x2BB,
+ 0x2BD,
+ 0x2EC,
+ 0x2ED,
+ 0x300,
+ 0x305,
+ 0x306,
+ 0x30D,
+ 0x30F,
+ 0x312,
+ 0x313,
+ 0x315,
+ 0x31B,
+ 0x31C,
+ 0x323,
+ 0x329,
+ 0x32D,
+ 0x32F,
+ 0x330,
+ 0x332,
+ 0x335,
+ 0x336,
+ 0x338,
+ 0x33A,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x346,
+ 0x375,
+ 0x376,
+ 0x37B,
+ 0x37E,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x3CF,
+ 0x3FC,
+ 0x460,
+ 0x48A,
+ 0x500,
+ 0x510,
+ 0x52A,
+ 0x52E,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x55A,
+ 0x561,
+ 0x587,
+ 0x58A,
+ 0x58B,
+ 0x5B4,
+ 0x5B5,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F5,
+ 0x620,
+ 0x640,
+ 0x641,
+ 0x656,
+ 0x660,
+ 0x66A,
+ 0x670,
+ 0x673,
+ 0x674,
+ 0x675,
+ 0x679,
+ 0x68E,
+ 0x68F,
+ 0x6A1,
+ 0x6A2,
+ 0x6D4,
+ 0x6D5,
+ 0x6D6,
+ 0x6E5,
+ 0x6E7,
+ 0x6EE,
+ 0x700,
+ 0x750,
+ 0x7B2,
+ 0x8A0,
+ 0x8AD,
+ 0x8B2,
+ 0x8B3,
+ 0x8B6,
+ 0x8C8,
+ 0x901,
+ 0x94E,
+ 0x94F,
+ 0x951,
+ 0x956,
+ 0x958,
+ 0x960,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x978,
+ 0x979,
+ 0x980,
+ 0x981,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9E0,
+ 0x9E4,
+ 0x9E6,
+ 0x9F2,
+ 0x9FE,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA33,
+ 0xA35,
+ 0xA36,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA5C,
+ 0xA5D,
+ 0xA66,
+ 0xA75,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF0,
+ 0xAFA,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB44,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5F,
+ 0xB62,
+ 0xB66,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBF0,
+ 0xC01,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC34,
+ 0xC35,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC60,
+ 0xC62,
+ 0xC66,
+ 0xC70,
+ 0xC80,
+ 0xC81,
+ 0xC82,
+ 0xC84,
+ 0xC85,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD01,
+ 0xD02,
+ 0xD04,
+ 0xD05,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD3B,
+ 0xD3D,
+ 0xD44,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD4F,
+ 0xD54,
+ 0xD58,
+ 0xD60,
+ 0xD62,
+ 0xD66,
+ 0xD70,
+ 0xD7A,
+ 0xD80,
+ 0xD82,
+ 0xD84,
+ 0xD85,
+ 0xD8F,
+ 0xD91,
+ 0xD97,
+ 0xD9A,
+ 0xDA6,
+ 0xDA7,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDDF,
+ 0xDF2,
+ 0xDF3,
+ 0xE01,
+ 0xE33,
+ 0xE34,
+ 0xE3B,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEB3,
+ 0xEB4,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDE,
+ 0xEE0,
+ 0xF00,
+ 0xF01,
+ 0xF0B,
+ 0xF0C,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF3E,
+ 0xF43,
+ 0xF44,
+ 0xF48,
+ 0xF49,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF6D,
+ 0xF71,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF7A,
+ 0xF81,
+ 0xF82,
+ 0xF85,
+ 0xF86,
+ 0xF93,
+ 0xF94,
+ 0xF98,
+ 0xF99,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0xFBD,
+ 0xFC6,
+ 0xFC7,
+ 0x1000,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x10F1,
+ 0x10F7,
+ 0x10FB,
+ 0x10FD,
+ 0x1100,
+ 0x1200,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x1360,
+ 0x1380,
+ 0x1390,
+ 0x1780,
+ 0x17A3,
+ 0x17A5,
+ 0x17A8,
+ 0x17A9,
+ 0x17B4,
+ 0x17B6,
+ 0x17CB,
+ 0x17D2,
+ 0x17D3,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17DD,
+ 0x17E0,
+ 0x17EA,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC0,
+ 0x1E00,
+ 0x1E9A,
+ 0x1E9E,
+ 0x1E9F,
+ 0x1EA0,
+ 0x1EFA,
+ 0x1F00,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD6,
+ 0x1FDB,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x2011,
+ 0x2019,
+ 0x201A,
+ 0x2027,
+ 0x2028,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D80,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x3005,
+ 0x3008,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A0,
+ 0x30FF,
+ 0x3105,
+ 0x312E,
+ 0x312F,
+ 0x3130,
+ 0x31A0,
+ 0x31C0,
+ 0x3400,
+ 0x4DC0,
+ 0x4E00,
+ 0x9FFD,
+ 0xA67F,
+ 0xA680,
+ 0xA717,
+ 0xA720,
+ 0xA788,
+ 0xA789,
+ 0xA78D,
+ 0xA78E,
+ 0xA792,
+ 0xA794,
+ 0xA7AA,
+ 0xA7AB,
+ 0xA7AE,
+ 0xA7AF,
+ 0xA7B8,
+ 0xA7BA,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA9E7,
+ 0xA9FF,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAA80,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB66,
+ 0xAB68,
+ 0xAC00,
+ 0xD7A4,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0x11301,
+ 0x11302,
+ 0x11303,
+ 0x11304,
+ 0x1133B,
+ 0x1133D,
+ 0x16FF0,
+ 0x16FF2,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x30000,
+ 0x3134B
+};
+
+# endif /* ASCII/Latin1 */
+
+# if 'A' == 193 /* EBCDIC 1047 */ \
+ && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
+ && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
+
+static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 1047 */
+ 783, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x42,
+ 0x4A,
+ 0x4B,
+ 0x4C,
+ 0x51,
+ 0x5A,
+ 0x60,
+ 0x61,
+ 0x62,
+ 0x6A,
+ 0x6D,
+ 0x6E,
+ 0x70,
+ 0x79,
+ 0x7A,
+ 0x7B,
+ 0x7D,
+ 0x7E,
+ 0x80,
+ 0x8A,
+ 0x8C,
+ 0x8F,
+ 0x91,
+ 0x9A,
+ 0x9C,
+ 0x9D,
+ 0x9E,
+ 0x9F,
+ 0xA2,
+ 0xAA,
+ 0xAC,
+ 0xAD,
+ 0xAE,
+ 0xAF,
+ 0xB3,
+ 0xB4,
+ 0xBA,
+ 0xBB,
+ 0xC1,
+ 0xCA,
+ 0xCB,
+ 0xD0,
+ 0xD1,
+ 0xDA,
+ 0xDB,
+ 0xE0,
+ 0xE2,
+ 0xEA,
+ 0xEB,
+ 0xFA,
+ 0xFB,
+ 0xFF,
+ 0x100,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x149,
+ 0x14A,
+ 0x17F,
+ 0x18F,
+ 0x190,
+ 0x1A0,
+ 0x1A2,
+ 0x1AF,
+ 0x1B1,
+ 0x1CD,
+ 0x1DD,
+ 0x1DE,
+ 0x1E4,
+ 0x1E6,
+ 0x1F1,
+ 0x1F4,
+ 0x1F6,
+ 0x1F8,
+ 0x21C,
+ 0x21E,
+ 0x220,
+ 0x226,
+ 0x234,
+ 0x259,
+ 0x25A,
+ 0x2BB,
+ 0x2BD,
+ 0x2EC,
+ 0x2ED,
+ 0x300,
+ 0x305,
+ 0x306,
+ 0x30D,
+ 0x30F,
+ 0x312,
+ 0x313,
+ 0x315,
+ 0x31B,
+ 0x31C,
+ 0x323,
+ 0x329,
+ 0x32D,
+ 0x32F,
+ 0x330,
+ 0x332,
+ 0x335,
+ 0x336,
+ 0x338,
+ 0x33A,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x346,
+ 0x375,
+ 0x376,
+ 0x37B,
+ 0x37E,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x3CF,
+ 0x3FC,
+ 0x460,
+ 0x48A,
+ 0x500,
+ 0x510,
+ 0x52A,
+ 0x52E,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x55A,
+ 0x561,
+ 0x587,
+ 0x58A,
+ 0x58B,
+ 0x5B4,
+ 0x5B5,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F5,
+ 0x620,
+ 0x640,
+ 0x641,
+ 0x656,
+ 0x660,
+ 0x66A,
+ 0x670,
+ 0x673,
+ 0x674,
+ 0x675,
+ 0x679,
+ 0x68E,
+ 0x68F,
+ 0x6A1,
+ 0x6A2,
+ 0x6D4,
+ 0x6D5,
+ 0x6D6,
+ 0x6E5,
+ 0x6E7,
+ 0x6EE,
+ 0x700,
+ 0x750,
+ 0x7B2,
+ 0x8A0,
+ 0x8AD,
+ 0x8B2,
+ 0x8B3,
+ 0x8B6,
+ 0x8C8,
+ 0x901,
+ 0x94E,
+ 0x94F,
+ 0x951,
+ 0x956,
+ 0x958,
+ 0x960,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x978,
+ 0x979,
+ 0x980,
+ 0x981,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9E0,
+ 0x9E4,
+ 0x9E6,
+ 0x9F2,
+ 0x9FE,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA33,
+ 0xA35,
+ 0xA36,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA5C,
+ 0xA5D,
+ 0xA66,
+ 0xA75,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF0,
+ 0xAFA,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB44,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5F,
+ 0xB62,
+ 0xB66,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBF0,
+ 0xC01,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC34,
+ 0xC35,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC60,
+ 0xC62,
+ 0xC66,
+ 0xC70,
+ 0xC80,
+ 0xC81,
+ 0xC82,
+ 0xC84,
+ 0xC85,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD01,
+ 0xD02,
+ 0xD04,
+ 0xD05,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD3B,
+ 0xD3D,
+ 0xD44,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD4F,
+ 0xD54,
+ 0xD58,
+ 0xD60,
+ 0xD62,
+ 0xD66,
+ 0xD70,
+ 0xD7A,
+ 0xD80,
+ 0xD82,
+ 0xD84,
+ 0xD85,
+ 0xD8F,
+ 0xD91,
+ 0xD97,
+ 0xD9A,
+ 0xDA6,
+ 0xDA7,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDDF,
+ 0xDF2,
+ 0xDF3,
+ 0xE01,
+ 0xE33,
+ 0xE34,
+ 0xE3B,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEB3,
+ 0xEB4,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDE,
+ 0xEE0,
+ 0xF00,
+ 0xF01,
+ 0xF0B,
+ 0xF0C,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF3E,
+ 0xF43,
+ 0xF44,
+ 0xF48,
+ 0xF49,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF6D,
+ 0xF71,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF7A,
+ 0xF81,
+ 0xF82,
+ 0xF85,
+ 0xF86,
+ 0xF93,
+ 0xF94,
+ 0xF98,
+ 0xF99,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0xFBD,
+ 0xFC6,
+ 0xFC7,
+ 0x1000,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x10F1,
+ 0x10F7,
+ 0x10FB,
+ 0x10FD,
+ 0x1100,
+ 0x1200,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x1360,
+ 0x1380,
+ 0x1390,
+ 0x1780,
+ 0x17A3,
+ 0x17A5,
+ 0x17A8,
+ 0x17A9,
+ 0x17B4,
+ 0x17B6,
+ 0x17CB,
+ 0x17D2,
+ 0x17D3,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17DD,
+ 0x17E0,
+ 0x17EA,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC0,
+ 0x1E00,
+ 0x1E9A,
+ 0x1E9E,
+ 0x1E9F,
+ 0x1EA0,
+ 0x1EFA,
+ 0x1F00,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD6,
+ 0x1FDB,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x2011,
+ 0x2019,
+ 0x201A,
+ 0x2027,
+ 0x2028,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D80,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x3005,
+ 0x3008,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A0,
+ 0x30FF,
+ 0x3105,
+ 0x312E,
+ 0x312F,
+ 0x3130,
+ 0x31A0,
+ 0x31C0,
+ 0x3400,
+ 0x4DC0,
+ 0x4E00,
+ 0x9FFD,
+ 0xA67F,
+ 0xA680,
+ 0xA717,
+ 0xA720,
+ 0xA788,
+ 0xA789,
+ 0xA78D,
+ 0xA78E,
+ 0xA792,
+ 0xA794,
+ 0xA7AA,
+ 0xA7AB,
+ 0xA7AE,
+ 0xA7AF,
+ 0xA7B8,
+ 0xA7BA,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA9E7,
+ 0xA9FF,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAA80,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB66,
+ 0xAB68,
+ 0xAC00,
+ 0xD7A4,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0x11301,
+ 0x11302,
+ 0x11303,
+ 0x11304,
+ 0x1133B,
+ 0x1133D,
+ 0x16FF0,
+ 0x16FF2,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x30000,
+ 0x3134B
+};
+
+# endif /* EBCDIC 1047 */
+
+# if 'A' == 193 /* EBCDIC 037 */ \
+ && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
+ && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
+
+static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 037 */
+ 779, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x42,
+ 0x4A,
+ 0x4B,
+ 0x4C,
+ 0x51,
+ 0x5A,
+ 0x60,
+ 0x61,
+ 0x62,
+ 0x6A,
+ 0x6D,
+ 0x6E,
+ 0x70,
+ 0x79,
+ 0x7A,
+ 0x7B,
+ 0x7D,
+ 0x7E,
+ 0x80,
+ 0x8A,
+ 0x8C,
+ 0x8F,
+ 0x91,
+ 0x9A,
+ 0x9C,
+ 0x9D,
+ 0x9E,
+ 0x9F,
+ 0xA2,
+ 0xAA,
+ 0xAC,
+ 0xAF,
+ 0xB3,
+ 0xB4,
+ 0xC1,
+ 0xCA,
+ 0xCB,
+ 0xD0,
+ 0xD1,
+ 0xDA,
+ 0xDB,
+ 0xE0,
+ 0xE2,
+ 0xEA,
+ 0xEB,
+ 0xFA,
+ 0xFB,
+ 0xFF,
+ 0x100,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x149,
+ 0x14A,
+ 0x17F,
+ 0x18F,
+ 0x190,
+ 0x1A0,
+ 0x1A2,
+ 0x1AF,
+ 0x1B1,
+ 0x1CD,
+ 0x1DD,
+ 0x1DE,
+ 0x1E4,
+ 0x1E6,
+ 0x1F1,
+ 0x1F4,
+ 0x1F6,
+ 0x1F8,
+ 0x21C,
+ 0x21E,
+ 0x220,
+ 0x226,
+ 0x234,
+ 0x259,
+ 0x25A,
+ 0x2BB,
+ 0x2BD,
+ 0x2EC,
+ 0x2ED,
+ 0x300,
+ 0x305,
+ 0x306,
+ 0x30D,
+ 0x30F,
+ 0x312,
+ 0x313,
+ 0x315,
+ 0x31B,
+ 0x31C,
+ 0x323,
+ 0x329,
+ 0x32D,
+ 0x32F,
+ 0x330,
+ 0x332,
+ 0x335,
+ 0x336,
+ 0x338,
+ 0x33A,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x346,
+ 0x375,
+ 0x376,
+ 0x37B,
+ 0x37E,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x3CF,
+ 0x3FC,
+ 0x460,
+ 0x48A,
+ 0x500,
+ 0x510,
+ 0x52A,
+ 0x52E,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x55A,
+ 0x561,
+ 0x587,
+ 0x58A,
+ 0x58B,
+ 0x5B4,
+ 0x5B5,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F5,
+ 0x620,
+ 0x640,
+ 0x641,
+ 0x656,
+ 0x660,
+ 0x66A,
+ 0x670,
+ 0x673,
+ 0x674,
+ 0x675,
+ 0x679,
+ 0x68E,
+ 0x68F,
+ 0x6A1,
+ 0x6A2,
+ 0x6D4,
+ 0x6D5,
+ 0x6D6,
+ 0x6E5,
+ 0x6E7,
+ 0x6EE,
+ 0x700,
+ 0x750,
+ 0x7B2,
+ 0x8A0,
+ 0x8AD,
+ 0x8B2,
+ 0x8B3,
+ 0x8B6,
+ 0x8C8,
+ 0x901,
+ 0x94E,
+ 0x94F,
+ 0x951,
+ 0x956,
+ 0x958,
+ 0x960,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x978,
+ 0x979,
+ 0x980,
+ 0x981,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9E0,
+ 0x9E4,
+ 0x9E6,
+ 0x9F2,
+ 0x9FE,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA33,
+ 0xA35,
+ 0xA36,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA5C,
+ 0xA5D,
+ 0xA66,
+ 0xA75,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF0,
+ 0xAFA,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB44,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5F,
+ 0xB62,
+ 0xB66,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBF0,
+ 0xC01,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC34,
+ 0xC35,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC60,
+ 0xC62,
+ 0xC66,
+ 0xC70,
+ 0xC80,
+ 0xC81,
+ 0xC82,
+ 0xC84,
+ 0xC85,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD01,
+ 0xD02,
+ 0xD04,
+ 0xD05,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD3B,
+ 0xD3D,
+ 0xD44,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD4F,
+ 0xD54,
+ 0xD58,
+ 0xD60,
+ 0xD62,
+ 0xD66,
+ 0xD70,
+ 0xD7A,
+ 0xD80,
+ 0xD82,
+ 0xD84,
+ 0xD85,
+ 0xD8F,
+ 0xD91,
+ 0xD97,
+ 0xD9A,
+ 0xDA6,
+ 0xDA7,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDDF,
+ 0xDF2,
+ 0xDF3,
+ 0xE01,
+ 0xE33,
+ 0xE34,
+ 0xE3B,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEB3,
+ 0xEB4,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDE,
+ 0xEE0,
+ 0xF00,
+ 0xF01,
+ 0xF0B,
+ 0xF0C,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF3E,
+ 0xF43,
+ 0xF44,
+ 0xF48,
+ 0xF49,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF6D,
+ 0xF71,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF7A,
+ 0xF81,
+ 0xF82,
+ 0xF85,
+ 0xF86,
+ 0xF93,
+ 0xF94,
+ 0xF98,
+ 0xF99,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0xFBD,
+ 0xFC6,
+ 0xFC7,
+ 0x1000,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x10F1,
+ 0x10F7,
+ 0x10FB,
+ 0x10FD,
+ 0x1100,
+ 0x1200,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x1360,
+ 0x1380,
+ 0x1390,
+ 0x1780,
+ 0x17A3,
+ 0x17A5,
+ 0x17A8,
+ 0x17A9,
+ 0x17B4,
+ 0x17B6,
+ 0x17CB,
+ 0x17D2,
+ 0x17D3,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17DD,
+ 0x17E0,
+ 0x17EA,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC0,
+ 0x1E00,
+ 0x1E9A,
+ 0x1E9E,
+ 0x1E9F,
+ 0x1EA0,
+ 0x1EFA,
+ 0x1F00,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD6,
+ 0x1FDB,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x2011,
+ 0x2019,
+ 0x201A,
+ 0x2027,
+ 0x2028,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D80,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x3005,
+ 0x3008,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A0,
+ 0x30FF,
+ 0x3105,
+ 0x312E,
+ 0x312F,
+ 0x3130,
+ 0x31A0,
+ 0x31C0,
+ 0x3400,
+ 0x4DC0,
+ 0x4E00,
+ 0x9FFD,
+ 0xA67F,
+ 0xA680,
+ 0xA717,
+ 0xA720,
+ 0xA788,
+ 0xA789,
+ 0xA78D,
+ 0xA78E,
+ 0xA792,
+ 0xA794,
+ 0xA7AA,
+ 0xA7AB,
+ 0xA7AE,
+ 0xA7AF,
+ 0xA7B8,
+ 0xA7BA,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA9E7,
+ 0xA9FF,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAA80,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB66,
+ 0xAB68,
+ 0xAC00,
+ 0xD7A4,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0x11301,
+ 0x11302,
+ 0x11303,
+ 0x11304,
+ 0x1133B,
+ 0x1133D,
+ 0x16FF0,
+ 0x16FF2,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x30000,
+ 0x3134B
+};
+
+# endif /* EBCDIC 037 */
+
+# if 'A' == 65 /* ASCII/Latin1 */
+
+static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for ASCII/Latin1 */
+ 749, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 0, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x27,
+ 0x28,
+ 0x2D,
+ 0x2F,
+ 0x30,
+ 0x3B,
+ 0x41,
+ 0x5B,
+ 0x5F,
+ 0x60,
+ 0x61,
+ 0x7B,
+ 0xB7,
+ 0xB8,
+ 0xC0,
+ 0xD7,
+ 0xD8,
+ 0xF7,
+ 0xF8,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x149,
+ 0x14A,
+ 0x17F,
+ 0x18F,
+ 0x190,
+ 0x1A0,
+ 0x1A2,
+ 0x1AF,
+ 0x1B1,
+ 0x1CD,
+ 0x1DD,
+ 0x1DE,
+ 0x1E4,
+ 0x1E6,
+ 0x1F1,
+ 0x1F4,
+ 0x1F6,
+ 0x1F8,
+ 0x21C,
+ 0x21E,
+ 0x220,
+ 0x226,
+ 0x234,
+ 0x259,
+ 0x25A,
+ 0x2BB,
+ 0x2BD,
+ 0x2EC,
+ 0x2ED,
+ 0x300,
+ 0x305,
+ 0x306,
+ 0x30D,
+ 0x30F,
+ 0x312,
+ 0x313,
+ 0x315,
+ 0x31B,
+ 0x31C,
+ 0x323,
+ 0x329,
+ 0x32D,
+ 0x32F,
+ 0x330,
+ 0x332,
+ 0x335,
+ 0x336,
+ 0x338,
+ 0x33A,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x346,
+ 0x375,
+ 0x376,
+ 0x37B,
+ 0x37E,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x3CF,
+ 0x3FC,
+ 0x460,
+ 0x48A,
+ 0x500,
+ 0x510,
+ 0x52A,
+ 0x52E,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x55A,
+ 0x561,
+ 0x587,
+ 0x58A,
+ 0x58B,
+ 0x5B4,
+ 0x5B5,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F5,
+ 0x620,
+ 0x640,
+ 0x641,
+ 0x656,
+ 0x660,
+ 0x66A,
+ 0x670,
+ 0x673,
+ 0x674,
+ 0x675,
+ 0x679,
+ 0x68E,
+ 0x68F,
+ 0x6A1,
+ 0x6A2,
+ 0x6D4,
+ 0x6D5,
+ 0x6D6,
+ 0x6E5,
+ 0x6E7,
+ 0x6EE,
+ 0x700,
+ 0x750,
+ 0x7B2,
+ 0x8A0,
+ 0x8AD,
+ 0x8B2,
+ 0x8B3,
+ 0x8B6,
+ 0x8C8,
+ 0x901,
+ 0x94E,
+ 0x94F,
+ 0x951,
+ 0x956,
+ 0x958,
+ 0x960,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x978,
+ 0x979,
+ 0x980,
+ 0x981,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9E0,
+ 0x9E4,
+ 0x9E6,
+ 0x9F2,
+ 0x9FE,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA33,
+ 0xA35,
+ 0xA36,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA5C,
+ 0xA5D,
+ 0xA66,
+ 0xA75,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF0,
+ 0xAFA,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB44,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5F,
+ 0xB62,
+ 0xB66,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBF0,
+ 0xC01,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC34,
+ 0xC35,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC60,
+ 0xC62,
+ 0xC66,
+ 0xC70,
+ 0xC80,
+ 0xC81,
+ 0xC82,
+ 0xC84,
+ 0xC85,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD01,
+ 0xD02,
+ 0xD04,
+ 0xD05,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD3B,
+ 0xD3D,
+ 0xD44,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD4F,
+ 0xD54,
+ 0xD58,
+ 0xD60,
+ 0xD62,
+ 0xD66,
+ 0xD70,
+ 0xD7A,
+ 0xD80,
+ 0xD82,
+ 0xD84,
+ 0xD85,
+ 0xD8F,
+ 0xD91,
+ 0xD97,
+ 0xD9A,
+ 0xDA6,
+ 0xDA7,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDDF,
+ 0xDF2,
+ 0xDF3,
+ 0xE01,
+ 0xE33,
+ 0xE34,
+ 0xE3B,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEB3,
+ 0xEB4,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDE,
+ 0xEE0,
+ 0xF00,
+ 0xF01,
+ 0xF0B,
+ 0xF0C,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF3E,
+ 0xF43,
+ 0xF44,
+ 0xF48,
+ 0xF49,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF6D,
+ 0xF71,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF7A,
+ 0xF81,
+ 0xF82,
+ 0xF85,
+ 0xF86,
+ 0xF93,
+ 0xF94,
+ 0xF98,
+ 0xF99,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0xFBD,
+ 0xFC6,
+ 0xFC7,
+ 0x1000,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x10F1,
+ 0x10F7,
+ 0x10FB,
+ 0x10FD,
+ 0x1100,
+ 0x1200,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x1360,
+ 0x1380,
+ 0x1390,
+ 0x1780,
+ 0x17A3,
+ 0x17A5,
+ 0x17A8,
+ 0x17A9,
+ 0x17B4,
+ 0x17B6,
+ 0x17CB,
+ 0x17D2,
+ 0x17D3,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17DD,
+ 0x17E0,
+ 0x17EA,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC0,
+ 0x1E00,
+ 0x1E9A,
+ 0x1E9E,
+ 0x1E9F,
+ 0x1EA0,
+ 0x1EFA,
+ 0x1F00,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD6,
+ 0x1FDB,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x2011,
+ 0x2019,
+ 0x201A,
+ 0x2027,
+ 0x2028,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D80,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x3005,
+ 0x3008,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A0,
+ 0x30FF,
+ 0x3105,
+ 0x312E,
+ 0x312F,
+ 0x3130,
+ 0x31A0,
+ 0x31C0,
+ 0x3400,
+ 0x4DC0,
+ 0x4E00,
+ 0x9FFD,
+ 0xA67F,
+ 0xA680,
+ 0xA717,
+ 0xA720,
+ 0xA788,
+ 0xA789,
+ 0xA78D,
+ 0xA78E,
+ 0xA792,
+ 0xA794,
+ 0xA7AA,
+ 0xA7AB,
+ 0xA7AE,
+ 0xA7AF,
+ 0xA7B8,
+ 0xA7BA,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA9E7,
+ 0xA9FF,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAA80,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB66,
+ 0xAB68,
+ 0xAC00,
+ 0xD7A4,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0x11301,
+ 0x11302,
+ 0x11303,
+ 0x11304,
+ 0x1133B,
+ 0x1133D,
+ 0x16FF0,
+ 0x16FF2,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x30000,
+ 0x3134B
+};
+
+# endif /* ASCII/Latin1 */
+
+# if 'A' == 193 /* EBCDIC 1047 */ \
+ && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
+ && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
+
+static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 1047 */
+ 783, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 0, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x42,
+ 0x4A,
+ 0x4B,
+ 0x4C,
+ 0x51,
+ 0x5A,
+ 0x60,
+ 0x61,
+ 0x62,
+ 0x6A,
+ 0x6D,
+ 0x6E,
+ 0x70,
+ 0x79,
+ 0x7A,
+ 0x7B,
+ 0x7D,
+ 0x7E,
+ 0x80,
+ 0x8A,
+ 0x8C,
+ 0x8F,
+ 0x91,
+ 0x9A,
+ 0x9C,
+ 0x9D,
+ 0x9E,
+ 0x9F,
+ 0xA2,
+ 0xAA,
+ 0xAC,
+ 0xAD,
+ 0xAE,
+ 0xAF,
+ 0xB3,
+ 0xB4,
+ 0xBA,
+ 0xBB,
+ 0xC1,
+ 0xCA,
+ 0xCB,
+ 0xD0,
+ 0xD1,
+ 0xDA,
+ 0xDB,
+ 0xE0,
+ 0xE2,
+ 0xEA,
+ 0xEB,
+ 0xFA,
+ 0xFB,
+ 0xFF,
+ 0x100,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x149,
+ 0x14A,
+ 0x17F,
+ 0x18F,
+ 0x190,
+ 0x1A0,
+ 0x1A2,
+ 0x1AF,
+ 0x1B1,
+ 0x1CD,
+ 0x1DD,
+ 0x1DE,
+ 0x1E4,
+ 0x1E6,
+ 0x1F1,
+ 0x1F4,
+ 0x1F6,
+ 0x1F8,
+ 0x21C,
+ 0x21E,
+ 0x220,
+ 0x226,
+ 0x234,
+ 0x259,
+ 0x25A,
+ 0x2BB,
+ 0x2BD,
+ 0x2EC,
+ 0x2ED,
+ 0x300,
+ 0x305,
+ 0x306,
+ 0x30D,
+ 0x30F,
+ 0x312,
+ 0x313,
+ 0x315,
+ 0x31B,
+ 0x31C,
+ 0x323,
+ 0x329,
+ 0x32D,
+ 0x32F,
+ 0x330,
+ 0x332,
+ 0x335,
+ 0x336,
+ 0x338,
+ 0x33A,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x346,
+ 0x375,
+ 0x376,
+ 0x37B,
+ 0x37E,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x3CF,
+ 0x3FC,
+ 0x460,
+ 0x48A,
+ 0x500,
+ 0x510,
+ 0x52A,
+ 0x52E,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x55A,
+ 0x561,
+ 0x587,
+ 0x58A,
+ 0x58B,
+ 0x5B4,
+ 0x5B5,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F5,
+ 0x620,
+ 0x640,
+ 0x641,
+ 0x656,
+ 0x660,
+ 0x66A,
+ 0x670,
+ 0x673,
+ 0x674,
+ 0x675,
+ 0x679,
+ 0x68E,
+ 0x68F,
+ 0x6A1,
+ 0x6A2,
+ 0x6D4,
+ 0x6D5,
+ 0x6D6,
+ 0x6E5,
+ 0x6E7,
+ 0x6EE,
+ 0x700,
+ 0x750,
+ 0x7B2,
+ 0x8A0,
+ 0x8AD,
+ 0x8B2,
+ 0x8B3,
+ 0x8B6,
+ 0x8C8,
+ 0x901,
+ 0x94E,
+ 0x94F,
+ 0x951,
+ 0x956,
+ 0x958,
+ 0x960,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x978,
+ 0x979,
+ 0x980,
+ 0x981,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9E0,
+ 0x9E4,
+ 0x9E6,
+ 0x9F2,
+ 0x9FE,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA33,
+ 0xA35,
+ 0xA36,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA5C,
+ 0xA5D,
+ 0xA66,
+ 0xA75,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF0,
+ 0xAFA,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB44,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5F,
+ 0xB62,
+ 0xB66,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBF0,
+ 0xC01,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC34,
+ 0xC35,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC60,
+ 0xC62,
+ 0xC66,
+ 0xC70,
+ 0xC80,
+ 0xC81,
+ 0xC82,
+ 0xC84,
+ 0xC85,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD01,
+ 0xD02,
+ 0xD04,
+ 0xD05,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD3B,
+ 0xD3D,
+ 0xD44,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD4F,
+ 0xD54,
+ 0xD58,
+ 0xD60,
+ 0xD62,
+ 0xD66,
+ 0xD70,
+ 0xD7A,
+ 0xD80,
+ 0xD82,
+ 0xD84,
+ 0xD85,
+ 0xD8F,
+ 0xD91,
+ 0xD97,
+ 0xD9A,
+ 0xDA6,
+ 0xDA7,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDDF,
+ 0xDF2,
+ 0xDF3,
+ 0xE01,
+ 0xE33,
+ 0xE34,
+ 0xE3B,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEB3,
+ 0xEB4,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDE,
+ 0xEE0,
+ 0xF00,
+ 0xF01,
+ 0xF0B,
+ 0xF0C,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF3E,
+ 0xF43,
+ 0xF44,
+ 0xF48,
+ 0xF49,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF6D,
+ 0xF71,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF7A,
+ 0xF81,
+ 0xF82,
+ 0xF85,
+ 0xF86,
+ 0xF93,
+ 0xF94,
+ 0xF98,
+ 0xF99,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0xFBD,
+ 0xFC6,
+ 0xFC7,
+ 0x1000,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x10F1,
+ 0x10F7,
+ 0x10FB,
+ 0x10FD,
+ 0x1100,
+ 0x1200,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x1360,
+ 0x1380,
+ 0x1390,
+ 0x1780,
+ 0x17A3,
+ 0x17A5,
+ 0x17A8,
+ 0x17A9,
+ 0x17B4,
+ 0x17B6,
+ 0x17CB,
+ 0x17D2,
+ 0x17D3,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17DD,
+ 0x17E0,
+ 0x17EA,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC0,
+ 0x1E00,
+ 0x1E9A,
+ 0x1E9E,
+ 0x1E9F,
+ 0x1EA0,
+ 0x1EFA,
+ 0x1F00,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD6,
+ 0x1FDB,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x2011,
+ 0x2019,
+ 0x201A,
+ 0x2027,
+ 0x2028,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D80,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x3005,
+ 0x3008,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A0,
+ 0x30FF,
+ 0x3105,
+ 0x312E,
+ 0x312F,
+ 0x3130,
+ 0x31A0,
+ 0x31C0,
+ 0x3400,
+ 0x4DC0,
+ 0x4E00,
+ 0x9FFD,
+ 0xA67F,
+ 0xA680,
+ 0xA717,
+ 0xA720,
+ 0xA788,
+ 0xA789,
+ 0xA78D,
+ 0xA78E,
+ 0xA792,
+ 0xA794,
+ 0xA7AA,
+ 0xA7AB,
+ 0xA7AE,
+ 0xA7AF,
+ 0xA7B8,
+ 0xA7BA,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA9E7,
+ 0xA9FF,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAA80,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB66,
+ 0xAB68,
+ 0xAC00,
+ 0xD7A4,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0x11301,
+ 0x11302,
+ 0x11303,
+ 0x11304,
+ 0x1133B,
+ 0x1133D,
+ 0x16FF0,
+ 0x16FF2,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x30000,
+ 0x3134B
+};
+
+# endif /* EBCDIC 1047 */
+
+# if 'A' == 193 /* EBCDIC 037 */ \
+ && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
+ && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
+
+static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 037 */
+ 779, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 0, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x42,
+ 0x4A,
+ 0x4B,
+ 0x4C,
+ 0x51,
+ 0x5A,
+ 0x60,
+ 0x61,
+ 0x62,
+ 0x6A,
+ 0x6D,
+ 0x6E,
+ 0x70,
+ 0x79,
+ 0x7A,
+ 0x7B,
+ 0x7D,
+ 0x7E,
+ 0x80,
+ 0x8A,
+ 0x8C,
+ 0x8F,
+ 0x91,
+ 0x9A,
+ 0x9C,
+ 0x9D,
+ 0x9E,
+ 0x9F,
+ 0xA2,
+ 0xAA,
+ 0xAC,
+ 0xAF,
+ 0xB3,
+ 0xB4,
+ 0xC1,
+ 0xCA,
+ 0xCB,
+ 0xD0,
+ 0xD1,
+ 0xDA,
+ 0xDB,
+ 0xE0,
+ 0xE2,
+ 0xEA,
+ 0xEB,
+ 0xFA,
+ 0xFB,
+ 0xFF,
+ 0x100,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x149,
+ 0x14A,
+ 0x17F,
+ 0x18F,
+ 0x190,
+ 0x1A0,
+ 0x1A2,
+ 0x1AF,
+ 0x1B1,
+ 0x1CD,
+ 0x1DD,
+ 0x1DE,
+ 0x1E4,
+ 0x1E6,
+ 0x1F1,
+ 0x1F4,
+ 0x1F6,
+ 0x1F8,
+ 0x21C,
+ 0x21E,
+ 0x220,
+ 0x226,
+ 0x234,
+ 0x259,
+ 0x25A,
+ 0x2BB,
+ 0x2BD,
+ 0x2EC,
+ 0x2ED,
+ 0x300,
+ 0x305,
+ 0x306,
+ 0x30D,
+ 0x30F,
+ 0x312,
+ 0x313,
+ 0x315,
+ 0x31B,
+ 0x31C,
+ 0x323,
+ 0x329,
+ 0x32D,
+ 0x32F,
+ 0x330,
+ 0x332,
+ 0x335,
+ 0x336,
+ 0x338,
+ 0x33A,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x346,
+ 0x375,
+ 0x376,
+ 0x37B,
+ 0x37E,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x3CF,
+ 0x3FC,
+ 0x460,
+ 0x48A,
+ 0x500,
+ 0x510,
+ 0x52A,
+ 0x52E,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x55A,
+ 0x561,
+ 0x587,
+ 0x58A,
+ 0x58B,
+ 0x5B4,
+ 0x5B5,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F5,
+ 0x620,
+ 0x640,
+ 0x641,
+ 0x656,
+ 0x660,
+ 0x66A,
+ 0x670,
+ 0x673,
+ 0x674,
+ 0x675,
+ 0x679,
+ 0x68E,
+ 0x68F,
+ 0x6A1,
+ 0x6A2,
+ 0x6D4,
+ 0x6D5,
+ 0x6D6,
+ 0x6E5,
+ 0x6E7,
+ 0x6EE,
+ 0x700,
+ 0x750,
+ 0x7B2,
+ 0x8A0,
+ 0x8AD,
+ 0x8B2,
+ 0x8B3,
+ 0x8B6,
+ 0x8C8,
+ 0x901,
+ 0x94E,
+ 0x94F,
+ 0x951,
+ 0x956,
+ 0x958,
+ 0x960,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x978,
+ 0x979,
+ 0x980,
+ 0x981,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9E0,
+ 0x9E4,
+ 0x9E6,
+ 0x9F2,
+ 0x9FE,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA33,
+ 0xA35,
+ 0xA36,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA5C,
+ 0xA5D,
+ 0xA66,
+ 0xA75,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF0,
+ 0xAFA,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB44,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5F,
+ 0xB62,
+ 0xB66,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBF0,
+ 0xC01,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC34,
+ 0xC35,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC60,
+ 0xC62,
+ 0xC66,
+ 0xC70,
+ 0xC80,
+ 0xC81,
+ 0xC82,
+ 0xC84,
+ 0xC85,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD01,
+ 0xD02,
+ 0xD04,
+ 0xD05,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD3B,
+ 0xD3D,
+ 0xD44,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD4F,
+ 0xD54,
+ 0xD58,
+ 0xD60,
+ 0xD62,
+ 0xD66,
+ 0xD70,
+ 0xD7A,
+ 0xD80,
+ 0xD82,
+ 0xD84,
+ 0xD85,
+ 0xD8F,
+ 0xD91,
+ 0xD97,
+ 0xD9A,
+ 0xDA6,
+ 0xDA7,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDDF,
+ 0xDF2,
+ 0xDF3,
+ 0xE01,
+ 0xE33,
+ 0xE34,
+ 0xE3B,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEB3,
+ 0xEB4,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDE,
+ 0xEE0,
+ 0xF00,
+ 0xF01,
+ 0xF0B,
+ 0xF0C,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF3E,
+ 0xF43,
+ 0xF44,
+ 0xF48,
+ 0xF49,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF6D,
+ 0xF71,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF7A,
+ 0xF81,
+ 0xF82,
+ 0xF85,
+ 0xF86,
+ 0xF93,
+ 0xF94,
+ 0xF98,
+ 0xF99,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0xFBD,
+ 0xFC6,
+ 0xFC7,
+ 0x1000,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x10F1,
+ 0x10F7,
+ 0x10FB,
+ 0x10FD,
+ 0x1100,
+ 0x1200,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x1360,
+ 0x1380,
+ 0x1390,
+ 0x1780,
+ 0x17A3,
+ 0x17A5,
+ 0x17A8,
+ 0x17A9,
+ 0x17B4,
+ 0x17B6,
+ 0x17CB,
+ 0x17D2,
+ 0x17D3,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17DD,
+ 0x17E0,
+ 0x17EA,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC0,
+ 0x1E00,
+ 0x1E9A,
+ 0x1E9E,
+ 0x1E9F,
+ 0x1EA0,
+ 0x1EFA,
+ 0x1F00,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD6,
+ 0x1FDB,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x2011,
+ 0x2019,
+ 0x201A,
+ 0x2027,
+ 0x2028,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D80,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x3005,
+ 0x3008,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A0,
+ 0x30FF,
+ 0x3105,
+ 0x312E,
+ 0x312F,
+ 0x3130,
+ 0x31A0,
+ 0x31C0,
+ 0x3400,
+ 0x4DC0,
+ 0x4E00,
+ 0x9FFD,
+ 0xA67F,
+ 0xA680,
+ 0xA717,
+ 0xA720,
+ 0xA788,
+ 0xA789,
+ 0xA78D,
+ 0xA78E,
+ 0xA792,
+ 0xA794,
+ 0xA7AA,
+ 0xA7AB,
+ 0xA7AE,
+ 0xA7AF,
+ 0xA7B8,
+ 0xA7BA,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA9E7,
+ 0xA9FF,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAA80,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB66,
+ 0xAB68,
+ 0xAC00,
+ 0xD7A4,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0x11301,
+ 0x11302,
+ 0x11303,
+ 0x11304,
+ 0x1133B,
+ 0x1133D,
+ 0x16FF0,
+ 0x16FF2,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x30000,
+ 0x3134B
+};
+
+# endif /* EBCDIC 037 */
+
+# if 'A' == 65 /* ASCII/Latin1 */
+
+static const UV UNI_IDENTIFIERTYPE__DEFAULTIGNORABLE_invlist[] = { /* for ASCII/Latin1 */
+ 39, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0xAD,
+ 0xAE,
+ 0x34F,
+ 0x350,
+ 0x61C,
+ 0x61D,
+ 0x115F,
+ 0x1161,
+ 0x17B4,
+ 0x17B6,
+ 0x180B,
+ 0x180F,
+ 0x200B,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x202A,
+ 0x202F,
+ 0x2060,
+ 0x2065,
+ 0x2066,
+ 0x206A,
+ 0x3164,
+ 0x3165,
+ 0xFE00,
+ 0xFE10,
+ 0xFEFF,
+ 0xFF00,
+ 0xFFA0,
+ 0xFFA1,
+ 0x1BCA0,
+ 0x1BCA4,
+ 0x1D173,
+ 0x1D17B,
+ 0xE0020,
+ 0xE0080,
+ 0xE0100,
+ 0xE01F0
+};
+
+# endif /* ASCII/Latin1 */
+
+# if 'A' == 193 /* EBCDIC 1047 */ \
+ && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
+ && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
+
+static const UV UNI_IDENTIFIERTYPE__DEFAULTIGNORABLE_invlist[] = { /* for EBCDIC 1047 */
+ 39, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0xCA,
+ 0xCB,
+ 0x34F,
+ 0x350,
+ 0x61C,
+ 0x61D,
+ 0x115F,
+ 0x1161,
+ 0x17B4,
+ 0x17B6,
+ 0x180B,
+ 0x180F,
+ 0x200B,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x202A,
+ 0x202F,
+ 0x2060,
+ 0x2065,
+ 0x2066,
+ 0x206A,
+ 0x3164,
+ 0x3165,
+ 0xFE00,
+ 0xFE10,
+ 0xFEFF,
+ 0xFF00,
+ 0xFFA0,
+ 0xFFA1,
+ 0x1BCA0,
+ 0x1BCA4,
+ 0x1D173,
+ 0x1D17B,
+ 0xE0020,
+ 0xE0080,
+ 0xE0100,
+ 0xE01F0
+};
+
+# endif /* EBCDIC 1047 */
+
+# if 'A' == 193 /* EBCDIC 037 */ \
+ && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
+ && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
+
+static const UV UNI_IDENTIFIERTYPE__DEFAULTIGNORABLE_invlist[] = { /* for EBCDIC 037 */
+ 39, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0xCA,
+ 0xCB,
+ 0x34F,
+ 0x350,
+ 0x61C,
+ 0x61D,
+ 0x115F,
+ 0x1161,
+ 0x17B4,
+ 0x17B6,
+ 0x180B,
+ 0x180F,
+ 0x200B,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x202A,
+ 0x202F,
+ 0x2060,
+ 0x2065,
+ 0x2066,
+ 0x206A,
+ 0x3164,
+ 0x3165,
+ 0xFE00,
+ 0xFE10,
+ 0xFEFF,
+ 0xFF00,
+ 0xFFA0,
+ 0xFFA1,
+ 0x1BCA0,
+ 0x1BCA4,
+ 0x1D173,
+ 0x1D17B,
+ 0xE0020,
+ 0xE0080,
+ 0xE0100,
+ 0xE01F0
+};
+
+# endif /* EBCDIC 037 */
+
+static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets */
+ 425, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x3E2,
+ 0x3F0,
+ 0x800,
+ 0x82E,
+ 0x830,
+ 0x83F,
+ 0x1680,
+ 0x169D,
+ 0x16A0,
+ 0x16EB,
+ 0x16EE,
+ 0x16F9,
+ 0x1700,
+ 0x170D,
+ 0x170E,
+ 0x1715,
+ 0x1720,
+ 0x1737,
+ 0x1740,
+ 0x1754,
+ 0x1760,
+ 0x176D,
+ 0x176E,
+ 0x1771,
+ 0x1772,
+ 0x1774,
+ 0x1800,
+ 0x180B,
+ 0x1810,
+ 0x181A,
+ 0x1820,
+ 0x1879,
+ 0x1880,
+ 0x18AB,
+ 0x1A00,
+ 0x1A1C,
+ 0x1A1E,
+ 0x1A20,
+ 0x1CFA,
+ 0x1CFB,
+ 0x2C00,
+ 0x2C2F,
+ 0x2C30,
+ 0x2C5F,
+ 0x2C80,
+ 0x2CF4,
+ 0x2CF9,
+ 0x2D00,
+ 0xA840,
+ 0xA878,
+ 0xA930,
+ 0xA954,
+ 0xA95F,
+ 0xA960,
+ 0xA9CF,
+ 0xA9D0,
+ 0x10000,
+ 0x1000C,
+ 0x1000D,
+ 0x10027,
+ 0x10028,
+ 0x1003B,
+ 0x1003C,
+ 0x1003E,
+ 0x1003F,
+ 0x1004E,
+ 0x10050,
+ 0x1005E,
+ 0x10080,
+ 0x100FB,
+ 0x10100,
+ 0x10103,
+ 0x10107,
+ 0x10134,
+ 0x10137,
+ 0x10140,
+ 0x10280,
+ 0x1029D,
+ 0x102A0,
+ 0x102D1,
+ 0x10300,
+ 0x10324,
+ 0x1032D,
+ 0x1034B,
+ 0x10350,
+ 0x1037B,
+ 0x10380,
+ 0x1039E,
+ 0x1039F,
+ 0x103C4,
+ 0x103C8,
+ 0x103D6,
+ 0x10400,
+ 0x1049E,
+ 0x104A0,
+ 0x104AA,
+ 0x10500,
+ 0x10528,
+ 0x10530,
+ 0x10564,
+ 0x1056F,
+ 0x10570,
+ 0x10600,
+ 0x10737,
+ 0x10740,
+ 0x10756,
+ 0x10760,
+ 0x10768,
+ 0x10800,
+ 0x10806,
+ 0x10808,
+ 0x10809,
+ 0x1080A,
+ 0x10836,
+ 0x10837,
+ 0x10839,
+ 0x1083C,
+ 0x1083D,
+ 0x1083F,
+ 0x10856,
+ 0x10857,
+ 0x1089F,
+ 0x108A7,
+ 0x108B0,
+ 0x108E0,
+ 0x108F3,
+ 0x108F4,
+ 0x108F6,
+ 0x108FB,
+ 0x1091C,
+ 0x1091F,
+ 0x1093A,
+ 0x1093F,
+ 0x10940,
+ 0x10980,
+ 0x109B8,
+ 0x109BC,
+ 0x109D0,
+ 0x109D2,
+ 0x10A04,
+ 0x10A05,
+ 0x10A07,
+ 0x10A0C,
+ 0x10A14,
+ 0x10A15,
+ 0x10A18,
+ 0x10A19,
+ 0x10A36,
+ 0x10A38,
+ 0x10A3B,
+ 0x10A3F,
+ 0x10A49,
+ 0x10A50,
+ 0x10A59,
+ 0x10A60,
+ 0x10AA0,
+ 0x10AC0,
+ 0x10AE7,
+ 0x10AEB,
+ 0x10AF7,
+ 0x10B00,
+ 0x10B36,
+ 0x10B39,
+ 0x10B56,
+ 0x10B58,
+ 0x10B73,
+ 0x10B78,
+ 0x10B92,
+ 0x10B99,
+ 0x10B9D,
+ 0x10BA9,
+ 0x10BB0,
+ 0x10C00,
+ 0x10C49,
+ 0x10C80,
+ 0x10CB3,
+ 0x10CC0,
+ 0x10CF3,
+ 0x10CFA,
+ 0x10D00,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
+ 0x10F00,
+ 0x10F28,
+ 0x10F30,
+ 0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
+ 0x10FE0,
+ 0x10FF7,
+ 0x11000,
+ 0x1104E,
+ 0x11052,
+ 0x11070,
+ 0x1107F,
+ 0x110C2,
+ 0x110CD,
+ 0x110CE,
+ 0x110D0,
+ 0x110E9,
+ 0x110F0,
+ 0x110FA,
+ 0x11150,
+ 0x11177,
+ 0x11180,
+ 0x111E0,
+ 0x11200,
+ 0x11212,
+ 0x11213,
+ 0x1123F,
+ 0x11280,
+ 0x11287,
+ 0x11288,
+ 0x11289,
+ 0x1128A,
+ 0x1128E,
+ 0x1128F,
+ 0x1129E,
+ 0x1129F,
+ 0x112AA,
+ 0x112B0,
+ 0x112EB,
+ 0x112F0,
+ 0x112FA,
+ 0x11300,
+ 0x11301,
+ 0x11302,
+ 0x11303,
+ 0x11305,
+ 0x1130D,
+ 0x1130F,
+ 0x11311,
+ 0x11313,
+ 0x11329,
+ 0x1132A,
+ 0x11331,
+ 0x11332,
+ 0x11334,
+ 0x11335,
+ 0x1133A,
+ 0x1133D,
+ 0x11345,
+ 0x11347,
+ 0x11349,
+ 0x1134B,
+ 0x1134E,
+ 0x11350,
+ 0x11351,
+ 0x11357,
+ 0x11358,
+ 0x1135D,
+ 0x11364,
+ 0x11366,
+ 0x1136D,
+ 0x11370,
+ 0x11375,
+ 0x11480,
+ 0x114C8,
+ 0x114D0,
+ 0x114DA,
+ 0x11580,
+ 0x115B6,
+ 0x115B8,
+ 0x115DE,
+ 0x11600,
+ 0x11645,
+ 0x11650,
+ 0x1165A,
+ 0x11660,
+ 0x1166D,
+ 0x11680,
+ 0x116B9,
+ 0x116C0,
+ 0x116CA,
+ 0x11700,
+ 0x1171B,
+ 0x1171D,
+ 0x1172C,
+ 0x11730,
+ 0x11740,
+ 0x11800,
+ 0x1183C,
+ 0x118A0,
+ 0x118F3,
+ 0x118FF,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
+ 0x119A0,
+ 0x119A8,
+ 0x119AA,
+ 0x119D8,
+ 0x119DA,
+ 0x119E5,
+ 0x11A00,
+ 0x11A48,
+ 0x11A50,
+ 0x11AA3,
+ 0x11AC0,
+ 0x11AF9,
+ 0x11C00,
+ 0x11C09,
+ 0x11C0A,
+ 0x11C37,
+ 0x11C38,
+ 0x11C46,
+ 0x11C50,
+ 0x11C6D,
+ 0x11C70,
+ 0x11C90,
+ 0x11C92,
+ 0x11CA8,
+ 0x11CA9,
+ 0x11CB7,
+ 0x11D00,
+ 0x11D07,
+ 0x11D08,
+ 0x11D0A,
+ 0x11D0B,
+ 0x11D37,
+ 0x11D3A,
+ 0x11D3B,
+ 0x11D3C,
+ 0x11D3E,
+ 0x11D3F,
+ 0x11D48,
+ 0x11D50,
+ 0x11D5A,
+ 0x11EE0,
+ 0x11EF9,
+ 0x12000,
+ 0x1239A,
+ 0x12400,
+ 0x1246F,
+ 0x12470,
+ 0x12475,
+ 0x12480,
+ 0x12544,
+ 0x13000,
+ 0x1342F,
+ 0x13430,
+ 0x13439,
+ 0x14400,
+ 0x14647,
+ 0x16A40,
+ 0x16A5F,
+ 0x16A60,
+ 0x16A6A,
+ 0x16A6E,
+ 0x16A70,
+ 0x16AD0,
+ 0x16AEE,
+ 0x16AF0,
+ 0x16AF6,
+ 0x16B00,
+ 0x16B46,
+ 0x16B50,
+ 0x16B5A,
+ 0x16B5B,
+ 0x16B62,
+ 0x16B63,
+ 0x16B78,
+ 0x16B7D,
+ 0x16B90,
+ 0x16E40,
+ 0x16E9B,
+ 0x16FE0,
+ 0x16FE2,
+ 0x16FE4,
+ 0x16FE5,
+ 0x17000,
+ 0x187F8,
+ 0x18800,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
+ 0x1B170,
+ 0x1B2FC,
+ 0x1BC00,
+ 0x1BC6B,
+ 0x1BC70,
+ 0x1BC7D,
+ 0x1BC80,
+ 0x1BC89,
+ 0x1BC90,
+ 0x1BC9A,
+ 0x1BC9C,
+ 0x1BCA0,
+ 0x1D800,
+ 0x1DA8C,
+ 0x1DA9B,
+ 0x1DAA0,
+ 0x1DAA1,
+ 0x1DAB0,
+ 0x1E000,
+ 0x1E007,
+ 0x1E008,
+ 0x1E019,
+ 0x1E01B,
+ 0x1E022,
+ 0x1E023,
+ 0x1E025,
+ 0x1E026,
+ 0x1E02B,
+ 0x1E800,
+ 0x1E8C5,
+ 0x1E8C7,
+ 0x1E8D7
+};
+
+# if 'A' == 65 /* ASCII/Latin1 */
+
+static const UV UNI_IDENTIFIERTYPE__INCLUSION_invlist[] = { /* for ASCII/Latin1 */
+ 31, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x27,
+ 0x28,
+ 0x2D,
+ 0x2F,
+ 0x3A,
+ 0x3B,
+ 0xB7,
+ 0xB8,
+ 0x375,
+ 0x376,
+ 0x58A,
+ 0x58B,
+ 0x5F3,
+ 0x5F5,
+ 0x6FD,
+ 0x6FF,
+ 0xF0B,
+ 0xF0C,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x2011,
+ 0x2019,
+ 0x201A,
+ 0x2027,
+ 0x2028,
+ 0x30A0,
+ 0x30A1,
+ 0x30FB,
+ 0x30FC
+};
+
+# endif /* ASCII/Latin1 */
+
+# if 'A' == 193 /* EBCDIC 1047 */ \
+ && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
+ && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
+
+static const UV UNI_IDENTIFIERTYPE__INCLUSION_invlist[] = { /* for EBCDIC 1047 */
33, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
+ 0x4B,
+ 0x4C,
+ 0x60,
+ 0x61,
+ 0x7A,
+ 0x7B,
+ 0x7D,
+ 0x7E,
+ 0xB3,
+ 0xB4,
+ 0x375,
+ 0x376,
+ 0x58A,
+ 0x58B,
+ 0x5F3,
+ 0x5F5,
+ 0x6FD,
+ 0x6FF,
+ 0xF0B,
+ 0xF0C,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x2011,
+ 0x2019,
+ 0x201A,
+ 0x2027,
+ 0x2028,
+ 0x30A0,
+ 0x30A1,
+ 0x30FB,
+ 0x30FC
+};
+
+# endif /* EBCDIC 1047 */
+
+# if 'A' == 193 /* EBCDIC 037 */ \
+ && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
+ && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
+
+static const UV UNI_IDENTIFIERTYPE__INCLUSION_invlist[] = { /* for EBCDIC 037 */
+ 33, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x4B,
+ 0x4C,
+ 0x60,
+ 0x61,
+ 0x7A,
+ 0x7B,
+ 0x7D,
+ 0x7E,
+ 0xB3,
+ 0xB4,
+ 0x375,
+ 0x376,
+ 0x58A,
+ 0x58B,
+ 0x5F3,
+ 0x5F5,
+ 0x6FD,
+ 0x6FF,
+ 0xF0B,
+ 0xF0C,
+ 0x200C,
+ 0x200E,
+ 0x2010,
+ 0x2011,
+ 0x2019,
+ 0x201A,
+ 0x2027,
+ 0x2028,
+ 0x30A0,
+ 0x30A1,
+ 0x30FB,
+ 0x30FC
+};
+
+# endif /* EBCDIC 037 */
+
+static const UV UNI_IDENTIFIERTYPE__LIMITEDUSE_invlist[] = { /* for all charsets */
+ 171, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x700,
+ 0x70E,
+ 0x70F,
+ 0x74B,
+ 0x74D,
+ 0x750,
+ 0x7C0,
+ 0x7FB,
+ 0x7FD,
+ 0x800,
+ 0x840,
+ 0x85C,
+ 0x85E,
+ 0x85F,
+ 0x860,
+ 0x86B,
+ 0x13A0,
+ 0x13F6,
+ 0x13F8,
+ 0x13FE,
+ 0x1400,
+ 0x1680,
+ 0x18B0,
+ 0x18F6,
+ 0x1900,
+ 0x191F,
+ 0x1920,
+ 0x192C,
+ 0x1930,
+ 0x193C,
+ 0x1940,
+ 0x1941,
+ 0x1944,
+ 0x196E,
+ 0x1970,
+ 0x1975,
+ 0x1980,
+ 0x19AC,
+ 0x19B0,
+ 0x19CA,
+ 0x19D0,
+ 0x19DB,
+ 0x19DE,
+ 0x19E0,
+ 0x1A20,
+ 0x1A5F,
+ 0x1A60,
+ 0x1A7D,
+ 0x1A7F,
+ 0x1A8A,
+ 0x1A90,
+ 0x1A9A,
+ 0x1AA0,
+ 0x1AAE,
+ 0x1B00,
+ 0x1B4C,
+ 0x1B50,
+ 0x1B7D,
+ 0x1B80,
+ 0x1BF4,
+ 0x1BFC,
+ 0x1C38,
+ 0x1C3B,
+ 0x1C4A,
+ 0x1C4D,
+ 0x1C80,
+ 0x1CC0,
+ 0x1CC8,
+ 0x2D30,
+ 0x2D68,
+ 0x2D70,
+ 0x2D71,
+ 0x2D7F,
+ 0x2D80,
+ 0xA000,
+ 0xA48D,
+ 0xA490,
+ 0xA4C7,
+ 0xA4D0,
+ 0xA62C,
+ 0xA6A0,
+ 0xA6F8,
+ 0xA800,
+ 0xA82D,
+ 0xA880,
+ 0xA8C6,
+ 0xA8CE,
+ 0xA8DA,
+ 0xA900,
+ 0xA92E,
+ 0xA92F,
+ 0xA930,
+ 0xA980,
+ 0xA9CE,
+ 0xA9CF,
+ 0xA9DA,
+ 0xA9DE,
+ 0xA9E0,
+ 0xAA00,
+ 0xAA37,
+ 0xAA40,
+ 0xAA4E,
+ 0xAA50,
+ 0xAA5A,
+ 0xAA5C,
+ 0xAA60,
+ 0xAA80,
+ 0xAAC3,
+ 0xAADB,
+ 0xAAF7,
+ 0xAB70,
+ 0xABEE,
+ 0xABF0,
+ 0xABFA,
+ 0x104B0,
+ 0x104D4,
+ 0x104D8,
+ 0x104FC,
+ 0x10D00,
+ 0x10D28,
+ 0x10D30,
+ 0x10D3A,
+ 0x11100,
+ 0x11135,
+ 0x11136,
+ 0x11148,
+ 0x11400,
+ 0x1145C,
+ 0x1145D,
+ 0x11462,
+ 0x11D60,
+ 0x11D66,
+ 0x11D67,
+ 0x11D69,
+ 0x11D6A,
+ 0x11D8F,
+ 0x11D90,
+ 0x11D92,
+ 0x11D93,
+ 0x11D99,
+ 0x11DA0,
+ 0x11DAA,
+ 0x11FB0,
+ 0x11FB1,
+ 0x16800,
+ 0x16A39,
+ 0x16F00,
+ 0x16F4B,
+ 0x16F4F,
+ 0x16F88,
+ 0x16F8F,
+ 0x16FA0,
+ 0x1E100,
+ 0x1E12D,
+ 0x1E130,
+ 0x1E13E,
+ 0x1E140,
+ 0x1E14A,
+ 0x1E14E,
+ 0x1E150,
+ 0x1E2C0,
+ 0x1E2FA,
+ 0x1E2FF,
+ 0x1E300,
+ 0x1E900,
+ 0x1E94C,
+ 0x1E950,
+ 0x1E95A,
+ 0x1E95E,
+ 0x1E960
+};
+
+# if 'A' == 65 /* ASCII/Latin1 */
+
+static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Latin1 */
+ 1357, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 0, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x9,
+ 0xE,
+ 0x20,
+ 0x7F,
+ 0x85,
+ 0x86,
+ 0xA0,
+ 0x378,
+ 0x37A,
+ 0x380,
+ 0x384,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x58B,
+ 0x58D,
+ 0x590,
+ 0x591,
+ 0x5C8,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F5,
+ 0x600,
+ 0x61D,
+ 0x61E,
+ 0x70E,
+ 0x70F,
+ 0x74B,
+ 0x74D,
+ 0x7B2,
+ 0x7C0,
+ 0x7FB,
+ 0x7FD,
+ 0x82E,
+ 0x830,
+ 0x83F,
+ 0x840,
+ 0x85C,
+ 0x85E,
+ 0x85F,
+ 0x860,
+ 0x86B,
+ 0x8A0,
+ 0x8B5,
+ 0x8B6,
+ 0x8C8,
+ 0x8D3,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9DC,
+ 0x9DE,
+ 0x9DF,
+ 0x9E4,
+ 0x9E6,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA34,
+ 0xA35,
+ 0xA37,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA51,
+ 0xA52,
+ 0xA59,
+ 0xA5D,
+ 0xA5E,
+ 0xA5F,
+ 0xA66,
+ 0xA77,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF2,
+ 0xAF9,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB45,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5C,
+ 0xB5E,
+ 0xB5F,
+ 0xB64,
+ 0xB66,
+ 0xB78,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBFB,
+ 0xC00,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC58,
+ 0xC5B,
+ 0xC60,
+ 0xC64,
+ 0xC66,
+ 0xC70,
+ 0xC77,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCDE,
+ 0xCDF,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD45,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD50,
+ 0xD54,
+ 0xD64,
+ 0xD66,
+ 0xD80,
+ 0xD81,
+ 0xD84,
+ 0xD85,
+ 0xD97,
+ 0xD9A,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDE0,
+ 0xDE6,
+ 0xDF0,
+ 0xDF2,
+ 0xDF5,
+ 0xE01,
+ 0xE3B,
+ 0xE3F,
+ 0xE5C,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDC,
+ 0xEE0,
+ 0xF00,
+ 0xF48,
+ 0xF49,
+ 0xF6D,
+ 0xF71,
+ 0xF98,
+ 0xF99,
+ 0xFBD,
+ 0xFBE,
+ 0xFCD,
+ 0xFCE,
+ 0xFDB,
+ 0x1000,
+ 0x10C6,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x137D,
+ 0x1380,
+ 0x139A,
+ 0x13A0,
+ 0x13F6,
+ 0x13F8,
+ 0x13FE,
+ 0x1400,
+ 0x169D,
+ 0x16A0,
+ 0x16F9,
+ 0x1700,
+ 0x170D,
+ 0x170E,
+ 0x1715,
+ 0x1720,
+ 0x1737,
+ 0x1740,
+ 0x1754,
+ 0x1760,
+ 0x176D,
+ 0x176E,
+ 0x1771,
+ 0x1772,
+ 0x1774,
+ 0x1780,
+ 0x17DE,
+ 0x17E0,
+ 0x17EA,
+ 0x17F0,
+ 0x17FA,
+ 0x1800,
+ 0x180F,
+ 0x1810,
+ 0x181A,
+ 0x1820,
+ 0x1879,
+ 0x1880,
+ 0x18AB,
+ 0x18B0,
+ 0x18F6,
+ 0x1900,
+ 0x191F,
+ 0x1920,
+ 0x192C,
+ 0x1930,
+ 0x193C,
+ 0x1940,
+ 0x1941,
+ 0x1944,
+ 0x196E,
+ 0x1970,
+ 0x1975,
+ 0x1980,
+ 0x19AC,
+ 0x19B0,
+ 0x19CA,
+ 0x19D0,
+ 0x19DB,
+ 0x19DE,
+ 0x1A1C,
+ 0x1A1E,
+ 0x1A5F,
+ 0x1A60,
+ 0x1A7D,
+ 0x1A7F,
+ 0x1A8A,
+ 0x1A90,
+ 0x1A9A,
+ 0x1AA0,
+ 0x1AAE,
+ 0x1AB0,
+ 0x1AC1,
+ 0x1B00,
+ 0x1B4C,
+ 0x1B50,
+ 0x1B7D,
+ 0x1B80,
+ 0x1BF4,
+ 0x1BFC,
+ 0x1C38,
+ 0x1C3B,
+ 0x1C4A,
+ 0x1C4D,
+ 0x1C89,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC8,
+ 0x1CD0,
+ 0x1CFB,
+ 0x1D00,
+ 0x1DFA,
+ 0x1DFB,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F7E,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FD4,
+ 0x1FD6,
+ 0x1FDC,
+ 0x1FDD,
+ 0x1FF0,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FFF,
+ 0x2000,
+ 0x2065,
+ 0x2066,
+ 0x2072,
+ 0x2074,
+ 0x208F,
+ 0x2090,
+ 0x209D,
+ 0x20A0,
+ 0x20C0,
+ 0x20D0,
+ 0x20F1,
+ 0x2100,
+ 0x218C,
+ 0x2190,
+ 0x2427,
+ 0x2440,
+ 0x244B,
+ 0x2460,
+ 0x2B74,
+ 0x2B76,
+ 0x2B96,
+ 0x2B97,
+ 0x2C2F,
+ 0x2C30,
+ 0x2C5F,
+ 0x2C60,
+ 0x2CF4,
+ 0x2CF9,
+ 0x2D26,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D30,
+ 0x2D68,
+ 0x2D6F,
+ 0x2D71,
+ 0x2D7F,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x2DE0,
+ 0x2E53,
+ 0x2E80,
+ 0x2E9A,
+ 0x2E9B,
+ 0x2EF4,
+ 0x2F00,
+ 0x2FD6,
+ 0x2FF0,
+ 0x2FFC,
+ 0x3000,
+ 0x3040,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x3100,
+ 0x3105,
+ 0x3130,
+ 0x3131,
+ 0x318F,
+ 0x3190,
+ 0x31E4,
+ 0x31F0,
+ 0x321F,
+ 0x3220,
+ 0x9FFD,
+ 0xA000,
+ 0xA48D,
+ 0xA490,
+ 0xA4C7,
+ 0xA4D0,
+ 0xA62C,
+ 0xA640,
+ 0xA6F8,
+ 0xA700,
+ 0xA7C0,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
+ 0xA830,
+ 0xA83A,
+ 0xA840,
+ 0xA878,
+ 0xA880,
+ 0xA8C6,
+ 0xA8CE,
+ 0xA8DA,
+ 0xA8E0,
+ 0xA954,
+ 0xA95F,
+ 0xA97D,
+ 0xA980,
+ 0xA9CE,
+ 0xA9CF,
+ 0xA9DA,
+ 0xA9DE,
+ 0xA9FF,
+ 0xAA00,
+ 0xAA37,
+ 0xAA40,
+ 0xAA4E,
+ 0xAA50,
+ 0xAA5A,
+ 0xAA5C,
+ 0xAAC3,
+ 0xAADB,
+ 0xAAF7,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB30,
+ 0xAB6C,
+ 0xAB70,
+ 0xABEE,
+ 0xABF0,
+ 0xABFA,
+ 0xAC00,
+ 0xD7A4,
+ 0xD7B0,
+ 0xD7C7,
+ 0xD7CB,
+ 0xD7FC,
+ 0xF900,
+ 0xFA6E,
+ 0xFA70,
+ 0xFADA,
+ 0xFB00,
+ 0xFB07,
+ 0xFB13,
+ 0xFB18,
+ 0xFB1D,
+ 0xFB37,
+ 0xFB38,
+ 0xFB3D,
+ 0xFB3E,
+ 0xFB3F,
+ 0xFB40,
+ 0xFB42,
+ 0xFB43,
+ 0xFB45,
+ 0xFB46,
+ 0xFBC2,
+ 0xFBD3,
+ 0xFD40,
+ 0xFD50,
+ 0xFD90,
+ 0xFD92,
+ 0xFDC8,
+ 0xFDF0,
+ 0xFDFE,
+ 0xFE00,
+ 0xFE1A,
+ 0xFE20,
+ 0xFE53,
+ 0xFE54,
+ 0xFE67,
+ 0xFE68,
+ 0xFE6C,
+ 0xFE70,
+ 0xFE75,
+ 0xFE76,
+ 0xFEFD,
+ 0xFEFF,
+ 0xFF00,
+ 0xFF01,
+ 0xFFBF,
+ 0xFFC2,
+ 0xFFC8,
+ 0xFFCA,
+ 0xFFD0,
+ 0xFFD2,
+ 0xFFD8,
+ 0xFFDA,
+ 0xFFDD,
+ 0xFFE0,
+ 0xFFE7,
+ 0xFFE8,
+ 0xFFEF,
+ 0xFFF9,
+ 0xFFFE,
+ 0x10000,
+ 0x1000C,
+ 0x1000D,
+ 0x10027,
+ 0x10028,
+ 0x1003B,
+ 0x1003C,
+ 0x1003E,
+ 0x1003F,
+ 0x1004E,
+ 0x10050,
+ 0x1005E,
+ 0x10080,
+ 0x100FB,
+ 0x10100,
+ 0x10103,
+ 0x10107,
+ 0x10134,
+ 0x10137,
+ 0x1018F,
+ 0x10190,
+ 0x1019D,
+ 0x101A0,
+ 0x101A1,
+ 0x101D0,
+ 0x101FE,
+ 0x10280,
+ 0x1029D,
+ 0x102A0,
+ 0x102D1,
+ 0x102E0,
+ 0x102FC,
+ 0x10300,
+ 0x10324,
+ 0x1032D,
+ 0x1034B,
+ 0x10350,
+ 0x1037B,
+ 0x10380,
+ 0x1039E,
+ 0x1039F,
+ 0x103C4,
+ 0x103C8,
+ 0x103D6,
+ 0x10400,
+ 0x1049E,
+ 0x104A0,
+ 0x104AA,
+ 0x104B0,
+ 0x104D4,
+ 0x104D8,
+ 0x104FC,
+ 0x10500,
+ 0x10528,
+ 0x10530,
+ 0x10564,
+ 0x1056F,
+ 0x10570,
+ 0x10600,
+ 0x10737,
+ 0x10740,
+ 0x10756,
+ 0x10760,
+ 0x10768,
+ 0x10800,
+ 0x10806,
+ 0x10808,
+ 0x10809,
+ 0x1080A,
+ 0x10836,
+ 0x10837,
+ 0x10839,
+ 0x1083C,
+ 0x1083D,
+ 0x1083F,
+ 0x10856,
+ 0x10857,
+ 0x1089F,
+ 0x108A7,
+ 0x108B0,
+ 0x108E0,
+ 0x108F3,
+ 0x108F4,
+ 0x108F6,
+ 0x108FB,
+ 0x1091C,
+ 0x1091F,
+ 0x1093A,
+ 0x1093F,
+ 0x10940,
+ 0x10980,
+ 0x109B8,
+ 0x109BC,
+ 0x109D0,
+ 0x109D2,
+ 0x10A04,
+ 0x10A05,
+ 0x10A07,
+ 0x10A0C,
+ 0x10A14,
+ 0x10A15,
+ 0x10A18,
+ 0x10A19,
+ 0x10A36,
+ 0x10A38,
+ 0x10A3B,
+ 0x10A3F,
+ 0x10A49,
+ 0x10A50,
+ 0x10A59,
+ 0x10A60,
+ 0x10AA0,
+ 0x10AC0,
+ 0x10AE7,
+ 0x10AEB,
+ 0x10AF7,
+ 0x10B00,
+ 0x10B36,
+ 0x10B39,
+ 0x10B56,
+ 0x10B58,
+ 0x10B73,
+ 0x10B78,
+ 0x10B92,
+ 0x10B99,
+ 0x10B9D,
+ 0x10BA9,
+ 0x10BB0,
+ 0x10C00,
+ 0x10C49,
+ 0x10C80,
+ 0x10CB3,
+ 0x10CC0,
+ 0x10CF3,
+ 0x10CFA,
+ 0x10D28,
+ 0x10D30,
+ 0x10D3A,
+ 0x10E60,
+ 0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
+ 0x10F00,
+ 0x10F28,
+ 0x10F30,
+ 0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
+ 0x10FE0,
+ 0x10FF7,
+ 0x11000,
+ 0x1104E,
+ 0x11052,
+ 0x11070,
+ 0x1107F,
+ 0x110C2,
+ 0x110CD,
+ 0x110CE,
+ 0x110D0,
+ 0x110E9,
+ 0x110F0,
+ 0x110FA,
+ 0x11100,
+ 0x11135,
+ 0x11136,
+ 0x11148,
+ 0x11150,
+ 0x11177,
+ 0x11180,
+ 0x111E0,
+ 0x111E1,
+ 0x111F5,
+ 0x11200,
+ 0x11212,
+ 0x11213,
+ 0x1123F,
+ 0x11280,
+ 0x11287,
+ 0x11288,
+ 0x11289,
+ 0x1128A,
+ 0x1128E,
+ 0x1128F,
+ 0x1129E,
+ 0x1129F,
+ 0x112AA,
+ 0x112B0,
+ 0x112EB,
+ 0x112F0,
+ 0x112FA,
+ 0x11300,
+ 0x11304,
+ 0x11305,
+ 0x1130D,
+ 0x1130F,
+ 0x11311,
+ 0x11313,
+ 0x11329,
+ 0x1132A,
+ 0x11331,
+ 0x11332,
+ 0x11334,
+ 0x11335,
+ 0x1133A,
+ 0x1133B,
+ 0x11345,
+ 0x11347,
+ 0x11349,
+ 0x1134B,
+ 0x1134E,
+ 0x11350,
+ 0x11351,
+ 0x11357,
+ 0x11358,
+ 0x1135D,
+ 0x11364,
+ 0x11366,
+ 0x1136D,
+ 0x11370,
+ 0x11375,
+ 0x11400,
+ 0x1145C,
+ 0x1145D,
+ 0x11462,
+ 0x11480,
+ 0x114C8,
+ 0x114D0,
+ 0x114DA,
+ 0x11580,
+ 0x115B6,
+ 0x115B8,
+ 0x115DE,
+ 0x11600,
+ 0x11645,
+ 0x11650,
+ 0x1165A,
+ 0x11660,
+ 0x1166D,
+ 0x11680,
+ 0x116B9,
+ 0x116C0,
+ 0x116CA,
+ 0x11700,
+ 0x1171B,
+ 0x1171D,
+ 0x1172C,
+ 0x11730,
+ 0x11740,
+ 0x11800,
+ 0x1183C,
+ 0x118A0,
+ 0x118F3,
+ 0x118FF,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
+ 0x119A0,
+ 0x119A8,
+ 0x119AA,
+ 0x119D8,
+ 0x119DA,
+ 0x119E5,
+ 0x11A00,
+ 0x11A48,
+ 0x11A50,
+ 0x11AA3,
+ 0x11AC0,
+ 0x11AF9,
+ 0x11C00,
+ 0x11C09,
+ 0x11C0A,
+ 0x11C37,
+ 0x11C38,
+ 0x11C46,
+ 0x11C50,
+ 0x11C6D,
+ 0x11C70,
+ 0x11C90,
+ 0x11C92,
+ 0x11CA8,
+ 0x11CA9,
+ 0x11CB7,
+ 0x11D00,
+ 0x11D07,
+ 0x11D08,
+ 0x11D0A,
+ 0x11D0B,
+ 0x11D37,
+ 0x11D3A,
+ 0x11D3B,
+ 0x11D3C,
+ 0x11D3E,
+ 0x11D3F,
+ 0x11D48,
+ 0x11D50,
+ 0x11D5A,
+ 0x11D60,
+ 0x11D66,
+ 0x11D67,
+ 0x11D69,
+ 0x11D6A,
+ 0x11D8F,
+ 0x11D90,
+ 0x11D92,
+ 0x11D93,
+ 0x11D99,
+ 0x11DA0,
+ 0x11DAA,
+ 0x11EE0,
+ 0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
+ 0x11FC0,
+ 0x11FF2,
+ 0x11FFF,
+ 0x1239A,
+ 0x12400,
+ 0x1246F,
+ 0x12470,
+ 0x12475,
+ 0x12480,
+ 0x12544,
+ 0x13000,
+ 0x1342F,
+ 0x13430,
+ 0x13439,
+ 0x14400,
+ 0x14647,
+ 0x16800,
+ 0x16A39,
+ 0x16A40,
+ 0x16A5F,
+ 0x16A60,
+ 0x16A6A,
+ 0x16A6E,
+ 0x16A70,
+ 0x16AD0,
+ 0x16AEE,
+ 0x16AF0,
+ 0x16AF6,
+ 0x16B00,
+ 0x16B46,
+ 0x16B50,
+ 0x16B5A,
+ 0x16B5B,
+ 0x16B62,
+ 0x16B63,
+ 0x16B78,
+ 0x16B7D,
+ 0x16B90,
+ 0x16E40,
+ 0x16E9B,
+ 0x16F00,
+ 0x16F4B,
+ 0x16F4F,
+ 0x16F88,
+ 0x16F8F,
+ 0x16FA0,
+ 0x16FE0,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
+ 0x17000,
+ 0x187F8,
+ 0x18800,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
+ 0x1B000,
+ 0x1B11F,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x1B170,
+ 0x1B2FC,
+ 0x1BC00,
+ 0x1BC6B,
+ 0x1BC70,
+ 0x1BC7D,
+ 0x1BC80,
+ 0x1BC89,
+ 0x1BC90,
+ 0x1BC9A,
+ 0x1BC9C,
+ 0x1BCA4,
+ 0x1D000,
+ 0x1D0F6,
+ 0x1D100,
+ 0x1D127,
+ 0x1D129,
+ 0x1D1E9,
+ 0x1D200,
+ 0x1D246,
+ 0x1D2E0,
+ 0x1D2F4,
+ 0x1D300,
+ 0x1D357,
+ 0x1D360,
+ 0x1D379,
+ 0x1D400,
+ 0x1D455,
+ 0x1D456,
+ 0x1D49D,
+ 0x1D49E,
+ 0x1D4A0,
+ 0x1D4A2,
+ 0x1D4A3,
+ 0x1D4A5,
+ 0x1D4A7,
+ 0x1D4A9,
+ 0x1D4AD,
+ 0x1D4AE,
+ 0x1D4BA,
+ 0x1D4BB,
+ 0x1D4BC,
+ 0x1D4BD,
+ 0x1D4C4,
+ 0x1D4C5,
+ 0x1D506,
+ 0x1D507,
+ 0x1D50B,
+ 0x1D50D,
+ 0x1D515,
+ 0x1D516,
+ 0x1D51D,
+ 0x1D51E,
+ 0x1D53A,
+ 0x1D53B,
+ 0x1D53F,
+ 0x1D540,
+ 0x1D545,
+ 0x1D546,
+ 0x1D547,
+ 0x1D54A,
+ 0x1D551,
+ 0x1D552,
+ 0x1D6A6,
+ 0x1D6A8,
+ 0x1D7CC,
+ 0x1D7CE,
+ 0x1DA8C,
+ 0x1DA9B,
+ 0x1DAA0,
+ 0x1DAA1,
+ 0x1DAB0,
+ 0x1E000,
+ 0x1E007,
+ 0x1E008,
+ 0x1E019,
+ 0x1E01B,
+ 0x1E022,
+ 0x1E023,
+ 0x1E025,
+ 0x1E026,
+ 0x1E02B,
+ 0x1E100,
+ 0x1E12D,
+ 0x1E130,
+ 0x1E13E,
+ 0x1E140,
+ 0x1E14A,
+ 0x1E14E,
+ 0x1E150,
+ 0x1E2C0,
+ 0x1E2FA,
+ 0x1E2FF,
+ 0x1E300,
+ 0x1E800,
+ 0x1E8C5,
+ 0x1E8C7,
+ 0x1E8D7,
+ 0x1E900,
+ 0x1E94C,
+ 0x1E950,
+ 0x1E95A,
+ 0x1E95E,
+ 0x1E960,
+ 0x1EC71,
+ 0x1ECB5,
+ 0x1ED01,
+ 0x1ED3E,
+ 0x1EE00,
+ 0x1EE04,
+ 0x1EE05,
+ 0x1EE20,
+ 0x1EE21,
+ 0x1EE23,
+ 0x1EE24,
+ 0x1EE25,
+ 0x1EE27,
+ 0x1EE28,
+ 0x1EE29,
+ 0x1EE33,
+ 0x1EE34,
+ 0x1EE38,
+ 0x1EE39,
+ 0x1EE3A,
+ 0x1EE3B,
+ 0x1EE3C,
+ 0x1EE42,
+ 0x1EE43,
+ 0x1EE47,
+ 0x1EE48,
+ 0x1EE49,
+ 0x1EE4A,
+ 0x1EE4B,
+ 0x1EE4C,
+ 0x1EE4D,
+ 0x1EE50,
+ 0x1EE51,
+ 0x1EE53,
+ 0x1EE54,
+ 0x1EE55,
+ 0x1EE57,
+ 0x1EE58,
+ 0x1EE59,
+ 0x1EE5A,
+ 0x1EE5B,
+ 0x1EE5C,
+ 0x1EE5D,
+ 0x1EE5E,
+ 0x1EE5F,
+ 0x1EE60,
+ 0x1EE61,
+ 0x1EE63,
+ 0x1EE64,
+ 0x1EE65,
+ 0x1EE67,
+ 0x1EE6B,
+ 0x1EE6C,
+ 0x1EE73,
+ 0x1EE74,
+ 0x1EE78,
+ 0x1EE79,
+ 0x1EE7D,
+ 0x1EE7E,
+ 0x1EE7F,
+ 0x1EE80,
+ 0x1EE8A,
+ 0x1EE8B,
+ 0x1EE9C,
+ 0x1EEA1,
+ 0x1EEA4,
+ 0x1EEA5,
+ 0x1EEAA,
+ 0x1EEAB,
+ 0x1EEBC,
+ 0x1EEF0,
+ 0x1EEF2,
+ 0x1F000,
+ 0x1F02C,
+ 0x1F030,
+ 0x1F094,
+ 0x1F0A0,
+ 0x1F0AF,
+ 0x1F0B1,
+ 0x1F0C0,
+ 0x1F0C1,
+ 0x1F0D0,
+ 0x1F0D1,
+ 0x1F0F6,
+ 0x1F100,
+ 0x1F1AE,
+ 0x1F1E6,
+ 0x1F203,
+ 0x1F210,
+ 0x1F23C,
+ 0x1F240,
+ 0x1F249,
+ 0x1F250,
+ 0x1F252,
+ 0x1F260,
+ 0x1F266,
+ 0x1F300,
+ 0x1F6D8,
+ 0x1F6E0,
+ 0x1F6ED,
+ 0x1F6F0,
+ 0x1F6FD,
+ 0x1F700,
+ 0x1F774,
+ 0x1F780,
+ 0x1F7D9,
+ 0x1F7E0,
+ 0x1F7EC,
+ 0x1F800,
+ 0x1F80C,
+ 0x1F810,
+ 0x1F848,
+ 0x1F850,
+ 0x1F85A,
+ 0x1F860,
+ 0x1F888,
+ 0x1F890,
+ 0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
+ 0x1F900,
+ 0x1F979,
+ 0x1F97A,
+ 0x1F9CC,
+ 0x1F9CD,
+ 0x1FA54,
+ 0x1FA60,
+ 0x1FA6E,
+ 0x1FA70,
+ 0x1FA75,
+ 0x1FA78,
+ 0x1FA7B,
+ 0x1FA80,
+ 0x1FA87,
+ 0x1FA90,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x2F800,
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B,
+ 0xE0001,
+ 0xE0002,
+ 0xE0020,
+ 0xE0080,
+ 0xE0100,
+ 0xE01F0
+};
+
+# endif /* ASCII/Latin1 */
+
+# if 'A' == 193 /* EBCDIC 1047 */ \
+ && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
+ && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
+
+static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 1047 */
+ 1361, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 0, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x5,
+ 0x6,
+ 0xB,
+ 0xE,
+ 0x15,
+ 0x16,
+ 0x25,
+ 0x26,
+ 0x40,
+ 0xFF,
+ 0x100,
+ 0x378,
+ 0x37A,
+ 0x380,
+ 0x384,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x58B,
+ 0x58D,
+ 0x590,
+ 0x591,
+ 0x5C8,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F5,
+ 0x600,
+ 0x61D,
+ 0x61E,
+ 0x70E,
+ 0x70F,
+ 0x74B,
+ 0x74D,
+ 0x7B2,
+ 0x7C0,
+ 0x7FB,
+ 0x7FD,
+ 0x82E,
+ 0x830,
+ 0x83F,
+ 0x840,
+ 0x85C,
+ 0x85E,
+ 0x85F,
+ 0x860,
+ 0x86B,
+ 0x8A0,
+ 0x8B5,
+ 0x8B6,
+ 0x8C8,
+ 0x8D3,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9DC,
+ 0x9DE,
+ 0x9DF,
+ 0x9E4,
+ 0x9E6,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA34,
+ 0xA35,
+ 0xA37,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA51,
+ 0xA52,
+ 0xA59,
+ 0xA5D,
+ 0xA5E,
+ 0xA5F,
+ 0xA66,
+ 0xA77,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF2,
+ 0xAF9,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB45,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5C,
+ 0xB5E,
+ 0xB5F,
+ 0xB64,
+ 0xB66,
+ 0xB78,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBFB,
+ 0xC00,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC58,
+ 0xC5B,
+ 0xC60,
+ 0xC64,
+ 0xC66,
+ 0xC70,
+ 0xC77,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCDE,
+ 0xCDF,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD45,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD50,
+ 0xD54,
+ 0xD64,
+ 0xD66,
+ 0xD80,
+ 0xD81,
+ 0xD84,
+ 0xD85,
+ 0xD97,
+ 0xD9A,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDE0,
+ 0xDE6,
+ 0xDF0,
+ 0xDF2,
+ 0xDF5,
+ 0xE01,
+ 0xE3B,
+ 0xE3F,
+ 0xE5C,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDC,
+ 0xEE0,
+ 0xF00,
+ 0xF48,
+ 0xF49,
+ 0xF6D,
+ 0xF71,
+ 0xF98,
+ 0xF99,
+ 0xFBD,
+ 0xFBE,
+ 0xFCD,
+ 0xFCE,
+ 0xFDB,
+ 0x1000,
+ 0x10C6,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x137D,
+ 0x1380,
+ 0x139A,
+ 0x13A0,
+ 0x13F6,
+ 0x13F8,
+ 0x13FE,
+ 0x1400,
+ 0x169D,
+ 0x16A0,
+ 0x16F9,
+ 0x1700,
+ 0x170D,
+ 0x170E,
+ 0x1715,
+ 0x1720,
+ 0x1737,
+ 0x1740,
+ 0x1754,
+ 0x1760,
+ 0x176D,
+ 0x176E,
+ 0x1771,
+ 0x1772,
+ 0x1774,
+ 0x1780,
+ 0x17DE,
+ 0x17E0,
+ 0x17EA,
+ 0x17F0,
+ 0x17FA,
+ 0x1800,
+ 0x180F,
+ 0x1810,
+ 0x181A,
+ 0x1820,
+ 0x1879,
+ 0x1880,
+ 0x18AB,
+ 0x18B0,
+ 0x18F6,
+ 0x1900,
+ 0x191F,
+ 0x1920,
+ 0x192C,
+ 0x1930,
+ 0x193C,
+ 0x1940,
+ 0x1941,
+ 0x1944,
+ 0x196E,
+ 0x1970,
+ 0x1975,
+ 0x1980,
+ 0x19AC,
+ 0x19B0,
+ 0x19CA,
+ 0x19D0,
+ 0x19DB,
+ 0x19DE,
+ 0x1A1C,
+ 0x1A1E,
+ 0x1A5F,
+ 0x1A60,
+ 0x1A7D,
+ 0x1A7F,
+ 0x1A8A,
+ 0x1A90,
+ 0x1A9A,
+ 0x1AA0,
+ 0x1AAE,
+ 0x1AB0,
+ 0x1AC1,
+ 0x1B00,
+ 0x1B4C,
+ 0x1B50,
+ 0x1B7D,
+ 0x1B80,
+ 0x1BF4,
+ 0x1BFC,
+ 0x1C38,
+ 0x1C3B,
+ 0x1C4A,
+ 0x1C4D,
+ 0x1C89,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC8,
+ 0x1CD0,
+ 0x1CFB,
+ 0x1D00,
+ 0x1DFA,
+ 0x1DFB,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F7E,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FD4,
+ 0x1FD6,
+ 0x1FDC,
+ 0x1FDD,
+ 0x1FF0,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FFF,
+ 0x2000,
+ 0x2065,
+ 0x2066,
+ 0x2072,
+ 0x2074,
+ 0x208F,
+ 0x2090,
+ 0x209D,
+ 0x20A0,
+ 0x20C0,
+ 0x20D0,
+ 0x20F1,
+ 0x2100,
+ 0x218C,
+ 0x2190,
+ 0x2427,
+ 0x2440,
+ 0x244B,
+ 0x2460,
+ 0x2B74,
+ 0x2B76,
+ 0x2B96,
+ 0x2B97,
+ 0x2C2F,
+ 0x2C30,
+ 0x2C5F,
+ 0x2C60,
+ 0x2CF4,
+ 0x2CF9,
+ 0x2D26,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D30,
+ 0x2D68,
+ 0x2D6F,
+ 0x2D71,
+ 0x2D7F,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x2DE0,
+ 0x2E53,
+ 0x2E80,
+ 0x2E9A,
+ 0x2E9B,
+ 0x2EF4,
+ 0x2F00,
+ 0x2FD6,
+ 0x2FF0,
+ 0x2FFC,
+ 0x3000,
+ 0x3040,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x3100,
+ 0x3105,
+ 0x3130,
+ 0x3131,
+ 0x318F,
+ 0x3190,
+ 0x31E4,
+ 0x31F0,
+ 0x321F,
+ 0x3220,
+ 0x9FFD,
+ 0xA000,
+ 0xA48D,
+ 0xA490,
+ 0xA4C7,
+ 0xA4D0,
+ 0xA62C,
+ 0xA640,
+ 0xA6F8,
+ 0xA700,
+ 0xA7C0,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
+ 0xA830,
+ 0xA83A,
+ 0xA840,
+ 0xA878,
+ 0xA880,
+ 0xA8C6,
+ 0xA8CE,
+ 0xA8DA,
+ 0xA8E0,
+ 0xA954,
+ 0xA95F,
+ 0xA97D,
+ 0xA980,
+ 0xA9CE,
+ 0xA9CF,
+ 0xA9DA,
+ 0xA9DE,
+ 0xA9FF,
+ 0xAA00,
+ 0xAA37,
+ 0xAA40,
+ 0xAA4E,
+ 0xAA50,
+ 0xAA5A,
+ 0xAA5C,
+ 0xAAC3,
+ 0xAADB,
+ 0xAAF7,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB30,
+ 0xAB6C,
+ 0xAB70,
+ 0xABEE,
+ 0xABF0,
+ 0xABFA,
+ 0xAC00,
+ 0xD7A4,
+ 0xD7B0,
+ 0xD7C7,
+ 0xD7CB,
+ 0xD7FC,
+ 0xF900,
+ 0xFA6E,
+ 0xFA70,
+ 0xFADA,
+ 0xFB00,
+ 0xFB07,
+ 0xFB13,
+ 0xFB18,
+ 0xFB1D,
+ 0xFB37,
+ 0xFB38,
+ 0xFB3D,
+ 0xFB3E,
+ 0xFB3F,
+ 0xFB40,
+ 0xFB42,
+ 0xFB43,
+ 0xFB45,
+ 0xFB46,
+ 0xFBC2,
+ 0xFBD3,
+ 0xFD40,
+ 0xFD50,
+ 0xFD90,
+ 0xFD92,
+ 0xFDC8,
+ 0xFDF0,
+ 0xFDFE,
+ 0xFE00,
+ 0xFE1A,
+ 0xFE20,
+ 0xFE53,
+ 0xFE54,
+ 0xFE67,
+ 0xFE68,
+ 0xFE6C,
+ 0xFE70,
+ 0xFE75,
+ 0xFE76,
+ 0xFEFD,
+ 0xFEFF,
+ 0xFF00,
+ 0xFF01,
+ 0xFFBF,
+ 0xFFC2,
+ 0xFFC8,
+ 0xFFCA,
+ 0xFFD0,
+ 0xFFD2,
+ 0xFFD8,
+ 0xFFDA,
+ 0xFFDD,
+ 0xFFE0,
+ 0xFFE7,
+ 0xFFE8,
+ 0xFFEF,
+ 0xFFF9,
+ 0xFFFE,
+ 0x10000,
+ 0x1000C,
+ 0x1000D,
+ 0x10027,
+ 0x10028,
+ 0x1003B,
+ 0x1003C,
+ 0x1003E,
+ 0x1003F,
+ 0x1004E,
+ 0x10050,
+ 0x1005E,
+ 0x10080,
+ 0x100FB,
+ 0x10100,
+ 0x10103,
+ 0x10107,
+ 0x10134,
+ 0x10137,
+ 0x1018F,
+ 0x10190,
+ 0x1019D,
+ 0x101A0,
+ 0x101A1,
+ 0x101D0,
+ 0x101FE,
+ 0x10280,
+ 0x1029D,
+ 0x102A0,
+ 0x102D1,
+ 0x102E0,
+ 0x102FC,
+ 0x10300,
+ 0x10324,
+ 0x1032D,
+ 0x1034B,
+ 0x10350,
+ 0x1037B,
+ 0x10380,
+ 0x1039E,
+ 0x1039F,
+ 0x103C4,
+ 0x103C8,
+ 0x103D6,
+ 0x10400,
+ 0x1049E,
+ 0x104A0,
+ 0x104AA,
+ 0x104B0,
+ 0x104D4,
+ 0x104D8,
+ 0x104FC,
+ 0x10500,
+ 0x10528,
+ 0x10530,
+ 0x10564,
+ 0x1056F,
+ 0x10570,
+ 0x10600,
+ 0x10737,
+ 0x10740,
+ 0x10756,
+ 0x10760,
+ 0x10768,
+ 0x10800,
+ 0x10806,
+ 0x10808,
+ 0x10809,
+ 0x1080A,
+ 0x10836,
+ 0x10837,
+ 0x10839,
+ 0x1083C,
+ 0x1083D,
+ 0x1083F,
+ 0x10856,
+ 0x10857,
+ 0x1089F,
+ 0x108A7,
+ 0x108B0,
+ 0x108E0,
+ 0x108F3,
+ 0x108F4,
+ 0x108F6,
+ 0x108FB,
+ 0x1091C,
+ 0x1091F,
+ 0x1093A,
+ 0x1093F,
+ 0x10940,
+ 0x10980,
+ 0x109B8,
+ 0x109BC,
+ 0x109D0,
+ 0x109D2,
+ 0x10A04,
+ 0x10A05,
+ 0x10A07,
+ 0x10A0C,
+ 0x10A14,
+ 0x10A15,
+ 0x10A18,
+ 0x10A19,
+ 0x10A36,
+ 0x10A38,
+ 0x10A3B,
+ 0x10A3F,
+ 0x10A49,
+ 0x10A50,
+ 0x10A59,
+ 0x10A60,
+ 0x10AA0,
+ 0x10AC0,
+ 0x10AE7,
+ 0x10AEB,
+ 0x10AF7,
+ 0x10B00,
+ 0x10B36,
+ 0x10B39,
+ 0x10B56,
+ 0x10B58,
+ 0x10B73,
+ 0x10B78,
+ 0x10B92,
+ 0x10B99,
+ 0x10B9D,
+ 0x10BA9,
+ 0x10BB0,
+ 0x10C00,
+ 0x10C49,
+ 0x10C80,
+ 0x10CB3,
+ 0x10CC0,
+ 0x10CF3,
+ 0x10CFA,
+ 0x10D28,
+ 0x10D30,
+ 0x10D3A,
+ 0x10E60,
+ 0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
+ 0x10F00,
+ 0x10F28,
+ 0x10F30,
+ 0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
+ 0x10FE0,
+ 0x10FF7,
+ 0x11000,
+ 0x1104E,
+ 0x11052,
+ 0x11070,
+ 0x1107F,
+ 0x110C2,
+ 0x110CD,
+ 0x110CE,
+ 0x110D0,
+ 0x110E9,
+ 0x110F0,
+ 0x110FA,
+ 0x11100,
+ 0x11135,
+ 0x11136,
+ 0x11148,
+ 0x11150,
+ 0x11177,
+ 0x11180,
+ 0x111E0,
+ 0x111E1,
+ 0x111F5,
+ 0x11200,
+ 0x11212,
+ 0x11213,
+ 0x1123F,
+ 0x11280,
+ 0x11287,
+ 0x11288,
+ 0x11289,
+ 0x1128A,
+ 0x1128E,
+ 0x1128F,
+ 0x1129E,
+ 0x1129F,
+ 0x112AA,
+ 0x112B0,
+ 0x112EB,
+ 0x112F0,
+ 0x112FA,
+ 0x11300,
+ 0x11304,
+ 0x11305,
+ 0x1130D,
+ 0x1130F,
+ 0x11311,
+ 0x11313,
+ 0x11329,
+ 0x1132A,
+ 0x11331,
+ 0x11332,
+ 0x11334,
+ 0x11335,
+ 0x1133A,
+ 0x1133B,
+ 0x11345,
+ 0x11347,
+ 0x11349,
+ 0x1134B,
+ 0x1134E,
+ 0x11350,
+ 0x11351,
+ 0x11357,
+ 0x11358,
+ 0x1135D,
+ 0x11364,
+ 0x11366,
+ 0x1136D,
+ 0x11370,
+ 0x11375,
+ 0x11400,
+ 0x1145C,
+ 0x1145D,
+ 0x11462,
+ 0x11480,
+ 0x114C8,
+ 0x114D0,
+ 0x114DA,
+ 0x11580,
+ 0x115B6,
+ 0x115B8,
+ 0x115DE,
+ 0x11600,
+ 0x11645,
+ 0x11650,
+ 0x1165A,
+ 0x11660,
+ 0x1166D,
+ 0x11680,
+ 0x116B9,
+ 0x116C0,
+ 0x116CA,
+ 0x11700,
+ 0x1171B,
+ 0x1171D,
+ 0x1172C,
+ 0x11730,
+ 0x11740,
+ 0x11800,
+ 0x1183C,
+ 0x118A0,
+ 0x118F3,
+ 0x118FF,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
+ 0x119A0,
+ 0x119A8,
+ 0x119AA,
+ 0x119D8,
+ 0x119DA,
+ 0x119E5,
+ 0x11A00,
+ 0x11A48,
+ 0x11A50,
+ 0x11AA3,
+ 0x11AC0,
+ 0x11AF9,
+ 0x11C00,
+ 0x11C09,
+ 0x11C0A,
+ 0x11C37,
+ 0x11C38,
+ 0x11C46,
+ 0x11C50,
+ 0x11C6D,
+ 0x11C70,
+ 0x11C90,
+ 0x11C92,
+ 0x11CA8,
+ 0x11CA9,
+ 0x11CB7,
+ 0x11D00,
+ 0x11D07,
+ 0x11D08,
+ 0x11D0A,
+ 0x11D0B,
+ 0x11D37,
+ 0x11D3A,
+ 0x11D3B,
+ 0x11D3C,
+ 0x11D3E,
+ 0x11D3F,
+ 0x11D48,
+ 0x11D50,
+ 0x11D5A,
+ 0x11D60,
+ 0x11D66,
+ 0x11D67,
+ 0x11D69,
+ 0x11D6A,
+ 0x11D8F,
+ 0x11D90,
+ 0x11D92,
+ 0x11D93,
+ 0x11D99,
+ 0x11DA0,
+ 0x11DAA,
+ 0x11EE0,
+ 0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
+ 0x11FC0,
+ 0x11FF2,
+ 0x11FFF,
+ 0x1239A,
+ 0x12400,
+ 0x1246F,
+ 0x12470,
+ 0x12475,
+ 0x12480,
+ 0x12544,
+ 0x13000,
+ 0x1342F,
+ 0x13430,
+ 0x13439,
+ 0x14400,
+ 0x14647,
+ 0x16800,
+ 0x16A39,
+ 0x16A40,
+ 0x16A5F,
+ 0x16A60,
+ 0x16A6A,
+ 0x16A6E,
+ 0x16A70,
+ 0x16AD0,
+ 0x16AEE,
+ 0x16AF0,
+ 0x16AF6,
+ 0x16B00,
+ 0x16B46,
+ 0x16B50,
+ 0x16B5A,
+ 0x16B5B,
+ 0x16B62,
+ 0x16B63,
+ 0x16B78,
+ 0x16B7D,
+ 0x16B90,
+ 0x16E40,
+ 0x16E9B,
+ 0x16F00,
+ 0x16F4B,
+ 0x16F4F,
+ 0x16F88,
+ 0x16F8F,
+ 0x16FA0,
+ 0x16FE0,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
+ 0x17000,
+ 0x187F8,
+ 0x18800,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
+ 0x1B000,
+ 0x1B11F,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x1B170,
+ 0x1B2FC,
+ 0x1BC00,
+ 0x1BC6B,
+ 0x1BC70,
+ 0x1BC7D,
+ 0x1BC80,
+ 0x1BC89,
+ 0x1BC90,
+ 0x1BC9A,
+ 0x1BC9C,
+ 0x1BCA4,
+ 0x1D000,
+ 0x1D0F6,
+ 0x1D100,
+ 0x1D127,
+ 0x1D129,
+ 0x1D1E9,
+ 0x1D200,
+ 0x1D246,
+ 0x1D2E0,
+ 0x1D2F4,
+ 0x1D300,
+ 0x1D357,
+ 0x1D360,
+ 0x1D379,
+ 0x1D400,
+ 0x1D455,
+ 0x1D456,
+ 0x1D49D,
+ 0x1D49E,
+ 0x1D4A0,
+ 0x1D4A2,
+ 0x1D4A3,
+ 0x1D4A5,
+ 0x1D4A7,
+ 0x1D4A9,
+ 0x1D4AD,
+ 0x1D4AE,
+ 0x1D4BA,
+ 0x1D4BB,
+ 0x1D4BC,
+ 0x1D4BD,
+ 0x1D4C4,
+ 0x1D4C5,
+ 0x1D506,
+ 0x1D507,
+ 0x1D50B,
+ 0x1D50D,
+ 0x1D515,
+ 0x1D516,
+ 0x1D51D,
+ 0x1D51E,
+ 0x1D53A,
+ 0x1D53B,
+ 0x1D53F,
+ 0x1D540,
+ 0x1D545,
+ 0x1D546,
+ 0x1D547,
+ 0x1D54A,
+ 0x1D551,
+ 0x1D552,
+ 0x1D6A6,
+ 0x1D6A8,
+ 0x1D7CC,
+ 0x1D7CE,
+ 0x1DA8C,
+ 0x1DA9B,
+ 0x1DAA0,
+ 0x1DAA1,
+ 0x1DAB0,
+ 0x1E000,
+ 0x1E007,
+ 0x1E008,
+ 0x1E019,
+ 0x1E01B,
+ 0x1E022,
+ 0x1E023,
+ 0x1E025,
+ 0x1E026,
+ 0x1E02B,
+ 0x1E100,
+ 0x1E12D,
+ 0x1E130,
+ 0x1E13E,
+ 0x1E140,
+ 0x1E14A,
+ 0x1E14E,
+ 0x1E150,
+ 0x1E2C0,
+ 0x1E2FA,
+ 0x1E2FF,
+ 0x1E300,
+ 0x1E800,
+ 0x1E8C5,
+ 0x1E8C7,
+ 0x1E8D7,
+ 0x1E900,
+ 0x1E94C,
+ 0x1E950,
+ 0x1E95A,
+ 0x1E95E,
+ 0x1E960,
+ 0x1EC71,
+ 0x1ECB5,
+ 0x1ED01,
+ 0x1ED3E,
+ 0x1EE00,
+ 0x1EE04,
+ 0x1EE05,
+ 0x1EE20,
+ 0x1EE21,
+ 0x1EE23,
+ 0x1EE24,
+ 0x1EE25,
+ 0x1EE27,
+ 0x1EE28,
+ 0x1EE29,
+ 0x1EE33,
+ 0x1EE34,
+ 0x1EE38,
+ 0x1EE39,
+ 0x1EE3A,
+ 0x1EE3B,
+ 0x1EE3C,
+ 0x1EE42,
+ 0x1EE43,
+ 0x1EE47,
+ 0x1EE48,
+ 0x1EE49,
+ 0x1EE4A,
+ 0x1EE4B,
+ 0x1EE4C,
+ 0x1EE4D,
+ 0x1EE50,
+ 0x1EE51,
+ 0x1EE53,
+ 0x1EE54,
+ 0x1EE55,
+ 0x1EE57,
+ 0x1EE58,
+ 0x1EE59,
+ 0x1EE5A,
+ 0x1EE5B,
+ 0x1EE5C,
+ 0x1EE5D,
+ 0x1EE5E,
+ 0x1EE5F,
+ 0x1EE60,
+ 0x1EE61,
+ 0x1EE63,
+ 0x1EE64,
+ 0x1EE65,
+ 0x1EE67,
+ 0x1EE6B,
+ 0x1EE6C,
+ 0x1EE73,
+ 0x1EE74,
+ 0x1EE78,
+ 0x1EE79,
+ 0x1EE7D,
+ 0x1EE7E,
+ 0x1EE7F,
+ 0x1EE80,
+ 0x1EE8A,
+ 0x1EE8B,
+ 0x1EE9C,
+ 0x1EEA1,
+ 0x1EEA4,
+ 0x1EEA5,
+ 0x1EEAA,
+ 0x1EEAB,
+ 0x1EEBC,
+ 0x1EEF0,
+ 0x1EEF2,
+ 0x1F000,
+ 0x1F02C,
+ 0x1F030,
+ 0x1F094,
+ 0x1F0A0,
+ 0x1F0AF,
+ 0x1F0B1,
+ 0x1F0C0,
+ 0x1F0C1,
+ 0x1F0D0,
+ 0x1F0D1,
+ 0x1F0F6,
+ 0x1F100,
+ 0x1F1AE,
+ 0x1F1E6,
+ 0x1F203,
+ 0x1F210,
+ 0x1F23C,
+ 0x1F240,
+ 0x1F249,
+ 0x1F250,
+ 0x1F252,
+ 0x1F260,
+ 0x1F266,
+ 0x1F300,
+ 0x1F6D8,
+ 0x1F6E0,
+ 0x1F6ED,
+ 0x1F6F0,
+ 0x1F6FD,
+ 0x1F700,
+ 0x1F774,
+ 0x1F780,
+ 0x1F7D9,
+ 0x1F7E0,
+ 0x1F7EC,
+ 0x1F800,
+ 0x1F80C,
+ 0x1F810,
+ 0x1F848,
+ 0x1F850,
+ 0x1F85A,
+ 0x1F860,
+ 0x1F888,
+ 0x1F890,
+ 0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
+ 0x1F900,
+ 0x1F979,
+ 0x1F97A,
+ 0x1F9CC,
+ 0x1F9CD,
+ 0x1FA54,
+ 0x1FA60,
+ 0x1FA6E,
+ 0x1FA70,
+ 0x1FA75,
+ 0x1FA78,
+ 0x1FA7B,
+ 0x1FA80,
+ 0x1FA87,
+ 0x1FA90,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x2F800,
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B,
+ 0xE0001,
+ 0xE0002,
+ 0xE0020,
+ 0xE0080,
+ 0xE0100,
+ 0xE01F0
+};
+
+# endif /* EBCDIC 1047 */
+
+# if 'A' == 193 /* EBCDIC 037 */ \
+ && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
+ && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
+
+static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 037 */
+ 1361, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 0, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x5,
+ 0x6,
+ 0xB,
+ 0xE,
+ 0x15,
+ 0x16,
+ 0x25,
+ 0x26,
+ 0x40,
+ 0xFF,
+ 0x100,
+ 0x378,
+ 0x37A,
+ 0x380,
+ 0x384,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x58B,
+ 0x58D,
+ 0x590,
+ 0x591,
+ 0x5C8,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F5,
+ 0x600,
+ 0x61D,
+ 0x61E,
+ 0x70E,
+ 0x70F,
+ 0x74B,
+ 0x74D,
+ 0x7B2,
+ 0x7C0,
+ 0x7FB,
+ 0x7FD,
+ 0x82E,
+ 0x830,
+ 0x83F,
+ 0x840,
+ 0x85C,
+ 0x85E,
+ 0x85F,
+ 0x860,
+ 0x86B,
+ 0x8A0,
+ 0x8B5,
+ 0x8B6,
+ 0x8C8,
+ 0x8D3,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9DC,
+ 0x9DE,
+ 0x9DF,
+ 0x9E4,
+ 0x9E6,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA34,
+ 0xA35,
+ 0xA37,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA51,
+ 0xA52,
+ 0xA59,
+ 0xA5D,
+ 0xA5E,
+ 0xA5F,
+ 0xA66,
+ 0xA77,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF2,
+ 0xAF9,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB45,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5C,
+ 0xB5E,
+ 0xB5F,
+ 0xB64,
+ 0xB66,
+ 0xB78,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBFB,
+ 0xC00,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC58,
+ 0xC5B,
+ 0xC60,
+ 0xC64,
+ 0xC66,
+ 0xC70,
+ 0xC77,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCDE,
+ 0xCDF,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD45,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD50,
+ 0xD54,
+ 0xD64,
+ 0xD66,
+ 0xD80,
+ 0xD81,
+ 0xD84,
+ 0xD85,
+ 0xD97,
+ 0xD9A,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDE0,
+ 0xDE6,
+ 0xDF0,
+ 0xDF2,
+ 0xDF5,
+ 0xE01,
+ 0xE3B,
+ 0xE3F,
+ 0xE5C,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDC,
+ 0xEE0,
+ 0xF00,
+ 0xF48,
+ 0xF49,
+ 0xF6D,
+ 0xF71,
+ 0xF98,
+ 0xF99,
+ 0xFBD,
+ 0xFBE,
+ 0xFCD,
+ 0xFCE,
+ 0xFDB,
+ 0x1000,
+ 0x10C6,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x137D,
+ 0x1380,
+ 0x139A,
+ 0x13A0,
+ 0x13F6,
+ 0x13F8,
+ 0x13FE,
+ 0x1400,
+ 0x169D,
+ 0x16A0,
+ 0x16F9,
+ 0x1700,
+ 0x170D,
+ 0x170E,
+ 0x1715,
+ 0x1720,
+ 0x1737,
+ 0x1740,
+ 0x1754,
+ 0x1760,
+ 0x176D,
+ 0x176E,
+ 0x1771,
+ 0x1772,
+ 0x1774,
+ 0x1780,
+ 0x17DE,
+ 0x17E0,
+ 0x17EA,
+ 0x17F0,
+ 0x17FA,
+ 0x1800,
+ 0x180F,
+ 0x1810,
+ 0x181A,
+ 0x1820,
+ 0x1879,
+ 0x1880,
+ 0x18AB,
+ 0x18B0,
+ 0x18F6,
+ 0x1900,
+ 0x191F,
+ 0x1920,
+ 0x192C,
+ 0x1930,
+ 0x193C,
+ 0x1940,
+ 0x1941,
+ 0x1944,
+ 0x196E,
+ 0x1970,
+ 0x1975,
+ 0x1980,
+ 0x19AC,
+ 0x19B0,
+ 0x19CA,
+ 0x19D0,
+ 0x19DB,
+ 0x19DE,
+ 0x1A1C,
+ 0x1A1E,
+ 0x1A5F,
+ 0x1A60,
+ 0x1A7D,
+ 0x1A7F,
+ 0x1A8A,
+ 0x1A90,
+ 0x1A9A,
+ 0x1AA0,
+ 0x1AAE,
+ 0x1AB0,
+ 0x1AC1,
+ 0x1B00,
+ 0x1B4C,
+ 0x1B50,
+ 0x1B7D,
+ 0x1B80,
+ 0x1BF4,
+ 0x1BFC,
+ 0x1C38,
+ 0x1C3B,
+ 0x1C4A,
+ 0x1C4D,
+ 0x1C89,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC8,
+ 0x1CD0,
+ 0x1CFB,
+ 0x1D00,
+ 0x1DFA,
+ 0x1DFB,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F7E,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FD4,
+ 0x1FD6,
+ 0x1FDC,
+ 0x1FDD,
+ 0x1FF0,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FFF,
+ 0x2000,
+ 0x2065,
+ 0x2066,
+ 0x2072,
+ 0x2074,
+ 0x208F,
+ 0x2090,
+ 0x209D,
+ 0x20A0,
+ 0x20C0,
+ 0x20D0,
+ 0x20F1,
+ 0x2100,
+ 0x218C,
+ 0x2190,
+ 0x2427,
+ 0x2440,
+ 0x244B,
+ 0x2460,
+ 0x2B74,
+ 0x2B76,
+ 0x2B96,
+ 0x2B97,
+ 0x2C2F,
+ 0x2C30,
+ 0x2C5F,
+ 0x2C60,
+ 0x2CF4,
+ 0x2CF9,
+ 0x2D26,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D30,
+ 0x2D68,
+ 0x2D6F,
+ 0x2D71,
+ 0x2D7F,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x2DE0,
+ 0x2E53,
+ 0x2E80,
+ 0x2E9A,
+ 0x2E9B,
+ 0x2EF4,
+ 0x2F00,
+ 0x2FD6,
+ 0x2FF0,
+ 0x2FFC,
+ 0x3000,
+ 0x3040,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x3100,
+ 0x3105,
+ 0x3130,
+ 0x3131,
+ 0x318F,
+ 0x3190,
+ 0x31E4,
+ 0x31F0,
+ 0x321F,
+ 0x3220,
+ 0x9FFD,
+ 0xA000,
+ 0xA48D,
+ 0xA490,
+ 0xA4C7,
+ 0xA4D0,
+ 0xA62C,
+ 0xA640,
+ 0xA6F8,
+ 0xA700,
+ 0xA7C0,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
+ 0xA830,
+ 0xA83A,
+ 0xA840,
+ 0xA878,
+ 0xA880,
+ 0xA8C6,
+ 0xA8CE,
+ 0xA8DA,
+ 0xA8E0,
+ 0xA954,
+ 0xA95F,
+ 0xA97D,
+ 0xA980,
+ 0xA9CE,
+ 0xA9CF,
+ 0xA9DA,
+ 0xA9DE,
+ 0xA9FF,
+ 0xAA00,
+ 0xAA37,
+ 0xAA40,
+ 0xAA4E,
+ 0xAA50,
+ 0xAA5A,
+ 0xAA5C,
+ 0xAAC3,
+ 0xAADB,
+ 0xAAF7,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB30,
+ 0xAB6C,
+ 0xAB70,
+ 0xABEE,
+ 0xABF0,
+ 0xABFA,
+ 0xAC00,
+ 0xD7A4,
+ 0xD7B0,
+ 0xD7C7,
+ 0xD7CB,
+ 0xD7FC,
+ 0xF900,
+ 0xFA6E,
+ 0xFA70,
+ 0xFADA,
+ 0xFB00,
+ 0xFB07,
+ 0xFB13,
+ 0xFB18,
+ 0xFB1D,
+ 0xFB37,
+ 0xFB38,
+ 0xFB3D,
+ 0xFB3E,
+ 0xFB3F,
+ 0xFB40,
+ 0xFB42,
+ 0xFB43,
+ 0xFB45,
+ 0xFB46,
+ 0xFBC2,
+ 0xFBD3,
+ 0xFD40,
+ 0xFD50,
+ 0xFD90,
+ 0xFD92,
+ 0xFDC8,
+ 0xFDF0,
+ 0xFDFE,
+ 0xFE00,
+ 0xFE1A,
+ 0xFE20,
+ 0xFE53,
+ 0xFE54,
+ 0xFE67,
+ 0xFE68,
+ 0xFE6C,
+ 0xFE70,
+ 0xFE75,
+ 0xFE76,
+ 0xFEFD,
+ 0xFEFF,
+ 0xFF00,
+ 0xFF01,
+ 0xFFBF,
+ 0xFFC2,
+ 0xFFC8,
+ 0xFFCA,
+ 0xFFD0,
+ 0xFFD2,
+ 0xFFD8,
+ 0xFFDA,
+ 0xFFDD,
+ 0xFFE0,
+ 0xFFE7,
+ 0xFFE8,
+ 0xFFEF,
+ 0xFFF9,
+ 0xFFFE,
+ 0x10000,
+ 0x1000C,
+ 0x1000D,
+ 0x10027,
+ 0x10028,
+ 0x1003B,
+ 0x1003C,
+ 0x1003E,
+ 0x1003F,
+ 0x1004E,
+ 0x10050,
+ 0x1005E,
+ 0x10080,
+ 0x100FB,
+ 0x10100,
+ 0x10103,
+ 0x10107,
+ 0x10134,
+ 0x10137,
+ 0x1018F,
+ 0x10190,
+ 0x1019D,
+ 0x101A0,
+ 0x101A1,
+ 0x101D0,
+ 0x101FE,
+ 0x10280,
+ 0x1029D,
+ 0x102A0,
+ 0x102D1,
+ 0x102E0,
+ 0x102FC,
+ 0x10300,
+ 0x10324,
+ 0x1032D,
+ 0x1034B,
+ 0x10350,
+ 0x1037B,
+ 0x10380,
+ 0x1039E,
+ 0x1039F,
+ 0x103C4,
+ 0x103C8,
+ 0x103D6,
+ 0x10400,
+ 0x1049E,
+ 0x104A0,
+ 0x104AA,
+ 0x104B0,
+ 0x104D4,
+ 0x104D8,
+ 0x104FC,
+ 0x10500,
+ 0x10528,
+ 0x10530,
+ 0x10564,
+ 0x1056F,
+ 0x10570,
+ 0x10600,
+ 0x10737,
+ 0x10740,
+ 0x10756,
+ 0x10760,
+ 0x10768,
+ 0x10800,
+ 0x10806,
+ 0x10808,
+ 0x10809,
+ 0x1080A,
+ 0x10836,
+ 0x10837,
+ 0x10839,
+ 0x1083C,
+ 0x1083D,
+ 0x1083F,
+ 0x10856,
+ 0x10857,
+ 0x1089F,
+ 0x108A7,
+ 0x108B0,
+ 0x108E0,
+ 0x108F3,
+ 0x108F4,
+ 0x108F6,
+ 0x108FB,
+ 0x1091C,
+ 0x1091F,
+ 0x1093A,
+ 0x1093F,
+ 0x10940,
+ 0x10980,
+ 0x109B8,
+ 0x109BC,
+ 0x109D0,
+ 0x109D2,
+ 0x10A04,
+ 0x10A05,
+ 0x10A07,
+ 0x10A0C,
+ 0x10A14,
+ 0x10A15,
+ 0x10A18,
+ 0x10A19,
+ 0x10A36,
+ 0x10A38,
+ 0x10A3B,
+ 0x10A3F,
+ 0x10A49,
+ 0x10A50,
+ 0x10A59,
+ 0x10A60,
+ 0x10AA0,
+ 0x10AC0,
+ 0x10AE7,
+ 0x10AEB,
+ 0x10AF7,
+ 0x10B00,
+ 0x10B36,
+ 0x10B39,
+ 0x10B56,
+ 0x10B58,
+ 0x10B73,
+ 0x10B78,
+ 0x10B92,
+ 0x10B99,
+ 0x10B9D,
+ 0x10BA9,
+ 0x10BB0,
+ 0x10C00,
+ 0x10C49,
+ 0x10C80,
+ 0x10CB3,
+ 0x10CC0,
+ 0x10CF3,
+ 0x10CFA,
+ 0x10D28,
+ 0x10D30,
+ 0x10D3A,
+ 0x10E60,
+ 0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
+ 0x10F00,
+ 0x10F28,
+ 0x10F30,
+ 0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
+ 0x10FE0,
+ 0x10FF7,
+ 0x11000,
+ 0x1104E,
+ 0x11052,
+ 0x11070,
+ 0x1107F,
+ 0x110C2,
+ 0x110CD,
+ 0x110CE,
+ 0x110D0,
+ 0x110E9,
+ 0x110F0,
+ 0x110FA,
+ 0x11100,
+ 0x11135,
+ 0x11136,
+ 0x11148,
+ 0x11150,
+ 0x11177,
+ 0x11180,
+ 0x111E0,
+ 0x111E1,
+ 0x111F5,
+ 0x11200,
+ 0x11212,
+ 0x11213,
+ 0x1123F,
+ 0x11280,
+ 0x11287,
+ 0x11288,
+ 0x11289,
+ 0x1128A,
+ 0x1128E,
+ 0x1128F,
+ 0x1129E,
+ 0x1129F,
+ 0x112AA,
+ 0x112B0,
+ 0x112EB,
+ 0x112F0,
+ 0x112FA,
+ 0x11300,
+ 0x11304,
+ 0x11305,
+ 0x1130D,
+ 0x1130F,
+ 0x11311,
+ 0x11313,
+ 0x11329,
+ 0x1132A,
+ 0x11331,
+ 0x11332,
+ 0x11334,
+ 0x11335,
+ 0x1133A,
+ 0x1133B,
+ 0x11345,
+ 0x11347,
+ 0x11349,
+ 0x1134B,
+ 0x1134E,
+ 0x11350,
+ 0x11351,
+ 0x11357,
+ 0x11358,
+ 0x1135D,
+ 0x11364,
+ 0x11366,
+ 0x1136D,
+ 0x11370,
+ 0x11375,
+ 0x11400,
+ 0x1145C,
+ 0x1145D,
+ 0x11462,
+ 0x11480,
+ 0x114C8,
+ 0x114D0,
+ 0x114DA,
+ 0x11580,
+ 0x115B6,
+ 0x115B8,
+ 0x115DE,
+ 0x11600,
+ 0x11645,
+ 0x11650,
+ 0x1165A,
+ 0x11660,
+ 0x1166D,
+ 0x11680,
+ 0x116B9,
+ 0x116C0,
+ 0x116CA,
+ 0x11700,
+ 0x1171B,
+ 0x1171D,
+ 0x1172C,
+ 0x11730,
+ 0x11740,
+ 0x11800,
+ 0x1183C,
+ 0x118A0,
+ 0x118F3,
+ 0x118FF,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
+ 0x119A0,
+ 0x119A8,
+ 0x119AA,
+ 0x119D8,
+ 0x119DA,
+ 0x119E5,
+ 0x11A00,
+ 0x11A48,
+ 0x11A50,
+ 0x11AA3,
+ 0x11AC0,
+ 0x11AF9,
+ 0x11C00,
+ 0x11C09,
+ 0x11C0A,
+ 0x11C37,
+ 0x11C38,
+ 0x11C46,
+ 0x11C50,
+ 0x11C6D,
+ 0x11C70,
+ 0x11C90,
+ 0x11C92,
+ 0x11CA8,
+ 0x11CA9,
+ 0x11CB7,
+ 0x11D00,
+ 0x11D07,
+ 0x11D08,
+ 0x11D0A,
+ 0x11D0B,
+ 0x11D37,
+ 0x11D3A,
+ 0x11D3B,
+ 0x11D3C,
+ 0x11D3E,
+ 0x11D3F,
+ 0x11D48,
+ 0x11D50,
+ 0x11D5A,
+ 0x11D60,
+ 0x11D66,
+ 0x11D67,
+ 0x11D69,
+ 0x11D6A,
+ 0x11D8F,
+ 0x11D90,
+ 0x11D92,
+ 0x11D93,
+ 0x11D99,
+ 0x11DA0,
+ 0x11DAA,
+ 0x11EE0,
+ 0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
+ 0x11FC0,
+ 0x11FF2,
+ 0x11FFF,
+ 0x1239A,
+ 0x12400,
+ 0x1246F,
+ 0x12470,
+ 0x12475,
+ 0x12480,
+ 0x12544,
+ 0x13000,
+ 0x1342F,
+ 0x13430,
+ 0x13439,
+ 0x14400,
+ 0x14647,
+ 0x16800,
+ 0x16A39,
+ 0x16A40,
+ 0x16A5F,
+ 0x16A60,
+ 0x16A6A,
+ 0x16A6E,
+ 0x16A70,
+ 0x16AD0,
+ 0x16AEE,
+ 0x16AF0,
+ 0x16AF6,
+ 0x16B00,
+ 0x16B46,
+ 0x16B50,
+ 0x16B5A,
+ 0x16B5B,
+ 0x16B62,
+ 0x16B63,
+ 0x16B78,
+ 0x16B7D,
+ 0x16B90,
+ 0x16E40,
+ 0x16E9B,
+ 0x16F00,
+ 0x16F4B,
+ 0x16F4F,
+ 0x16F88,
+ 0x16F8F,
+ 0x16FA0,
+ 0x16FE0,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
+ 0x17000,
+ 0x187F8,
+ 0x18800,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
+ 0x1B000,
+ 0x1B11F,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x1B170,
+ 0x1B2FC,
+ 0x1BC00,
+ 0x1BC6B,
+ 0x1BC70,
+ 0x1BC7D,
+ 0x1BC80,
+ 0x1BC89,
+ 0x1BC90,
+ 0x1BC9A,
+ 0x1BC9C,
+ 0x1BCA4,
+ 0x1D000,
+ 0x1D0F6,
+ 0x1D100,
+ 0x1D127,
+ 0x1D129,
+ 0x1D1E9,
+ 0x1D200,
+ 0x1D246,
+ 0x1D2E0,
+ 0x1D2F4,
+ 0x1D300,
+ 0x1D357,
+ 0x1D360,
+ 0x1D379,
+ 0x1D400,
+ 0x1D455,
+ 0x1D456,
+ 0x1D49D,
+ 0x1D49E,
+ 0x1D4A0,
+ 0x1D4A2,
+ 0x1D4A3,
+ 0x1D4A5,
+ 0x1D4A7,
+ 0x1D4A9,
+ 0x1D4AD,
+ 0x1D4AE,
+ 0x1D4BA,
+ 0x1D4BB,
+ 0x1D4BC,
+ 0x1D4BD,
+ 0x1D4C4,
+ 0x1D4C5,
+ 0x1D506,
+ 0x1D507,
+ 0x1D50B,
+ 0x1D50D,
+ 0x1D515,
+ 0x1D516,
+ 0x1D51D,
+ 0x1D51E,
+ 0x1D53A,
+ 0x1D53B,
+ 0x1D53F,
+ 0x1D540,
+ 0x1D545,
+ 0x1D546,
+ 0x1D547,
+ 0x1D54A,
+ 0x1D551,
+ 0x1D552,
+ 0x1D6A6,
+ 0x1D6A8,
+ 0x1D7CC,
+ 0x1D7CE,
+ 0x1DA8C,
+ 0x1DA9B,
+ 0x1DAA0,
+ 0x1DAA1,
+ 0x1DAB0,
+ 0x1E000,
+ 0x1E007,
+ 0x1E008,
+ 0x1E019,
+ 0x1E01B,
+ 0x1E022,
+ 0x1E023,
+ 0x1E025,
+ 0x1E026,
+ 0x1E02B,
+ 0x1E100,
+ 0x1E12D,
+ 0x1E130,
+ 0x1E13E,
+ 0x1E140,
+ 0x1E14A,
+ 0x1E14E,
+ 0x1E150,
+ 0x1E2C0,
+ 0x1E2FA,
+ 0x1E2FF,
+ 0x1E300,
+ 0x1E800,
+ 0x1E8C5,
+ 0x1E8C7,
+ 0x1E8D7,
+ 0x1E900,
+ 0x1E94C,
+ 0x1E950,
+ 0x1E95A,
+ 0x1E95E,
+ 0x1E960,
+ 0x1EC71,
+ 0x1ECB5,
+ 0x1ED01,
+ 0x1ED3E,
+ 0x1EE00,
+ 0x1EE04,
+ 0x1EE05,
+ 0x1EE20,
+ 0x1EE21,
+ 0x1EE23,
+ 0x1EE24,
+ 0x1EE25,
+ 0x1EE27,
+ 0x1EE28,
+ 0x1EE29,
+ 0x1EE33,
+ 0x1EE34,
+ 0x1EE38,
+ 0x1EE39,
+ 0x1EE3A,
+ 0x1EE3B,
+ 0x1EE3C,
+ 0x1EE42,
+ 0x1EE43,
+ 0x1EE47,
+ 0x1EE48,
+ 0x1EE49,
+ 0x1EE4A,
+ 0x1EE4B,
+ 0x1EE4C,
+ 0x1EE4D,
+ 0x1EE50,
+ 0x1EE51,
+ 0x1EE53,
+ 0x1EE54,
+ 0x1EE55,
+ 0x1EE57,
+ 0x1EE58,
+ 0x1EE59,
+ 0x1EE5A,
+ 0x1EE5B,
+ 0x1EE5C,
+ 0x1EE5D,
+ 0x1EE5E,
+ 0x1EE5F,
+ 0x1EE60,
+ 0x1EE61,
+ 0x1EE63,
+ 0x1EE64,
+ 0x1EE65,
+ 0x1EE67,
+ 0x1EE6B,
+ 0x1EE6C,
+ 0x1EE73,
+ 0x1EE74,
+ 0x1EE78,
+ 0x1EE79,
+ 0x1EE7D,
+ 0x1EE7E,
+ 0x1EE7F,
+ 0x1EE80,
+ 0x1EE8A,
+ 0x1EE8B,
+ 0x1EE9C,
+ 0x1EEA1,
+ 0x1EEA4,
+ 0x1EEA5,
+ 0x1EEAA,
+ 0x1EEAB,
+ 0x1EEBC,
+ 0x1EEF0,
+ 0x1EEF2,
+ 0x1F000,
+ 0x1F02C,
+ 0x1F030,
+ 0x1F094,
+ 0x1F0A0,
+ 0x1F0AF,
+ 0x1F0B1,
+ 0x1F0C0,
+ 0x1F0C1,
+ 0x1F0D0,
+ 0x1F0D1,
+ 0x1F0F6,
+ 0x1F100,
+ 0x1F1AE,
+ 0x1F1E6,
+ 0x1F203,
+ 0x1F210,
+ 0x1F23C,
+ 0x1F240,
+ 0x1F249,
+ 0x1F250,
+ 0x1F252,
+ 0x1F260,
+ 0x1F266,
+ 0x1F300,
+ 0x1F6D8,
+ 0x1F6E0,
+ 0x1F6ED,
+ 0x1F6F0,
+ 0x1F6FD,
+ 0x1F700,
+ 0x1F774,
+ 0x1F780,
+ 0x1F7D9,
+ 0x1F7E0,
+ 0x1F7EC,
+ 0x1F800,
+ 0x1F80C,
+ 0x1F810,
+ 0x1F848,
+ 0x1F850,
+ 0x1F85A,
+ 0x1F860,
+ 0x1F888,
+ 0x1F890,
+ 0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
+ 0x1F900,
+ 0x1F979,
+ 0x1F97A,
+ 0x1F9CC,
+ 0x1F9CD,
+ 0x1FA54,
+ 0x1FA60,
+ 0x1FA6E,
+ 0x1FA70,
+ 0x1FA75,
+ 0x1FA78,
+ 0x1FA7B,
+ 0x1FA80,
+ 0x1FA87,
+ 0x1FA90,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x2F800,
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B,
+ 0xE0001,
+ 0xE0002,
+ 0xE0020,
+ 0xE0080,
+ 0xE0100,
+ 0xE01F0
+};
+
+# endif /* EBCDIC 037 */
+
+# if 'A' == 65 /* ASCII/Latin1 */
+
+static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for ASCII/Latin1 */
+ 503, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0xA0,
+ 0xA1,
+ 0xA8,
+ 0xA9,
+ 0xAA,
+ 0xAB,
+ 0xAF,
+ 0xB0,
+ 0xB2,
+ 0xB6,
+ 0xB8,
+ 0xBB,
+ 0xBC,
+ 0xBF,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x17F,
+ 0x180,
+ 0x1C4,
+ 0x1CD,
+ 0x1F1,
+ 0x1F4,
+ 0x2B0,
+ 0x2B9,
+ 0x2D8,
+ 0x2DE,
+ 0x2E0,
+ 0x2E5,
+ 0x340,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x374,
+ 0x375,
+ 0x37A,
+ 0x37B,
+ 0x37E,
+ 0x37F,
+ 0x384,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x3D0,
+ 0x3D7,
+ 0x3F0,
+ 0x3F3,
+ 0x3F4,
+ 0x3F6,
+ 0x3F9,
+ 0x3FA,
+ 0x587,
+ 0x588,
+ 0x675,
+ 0x679,
+ 0x958,
+ 0x960,
+ 0x9DC,
+ 0x9DE,
+ 0x9DF,
+ 0x9E0,
+ 0xA33,
+ 0xA34,
+ 0xA36,
+ 0xA37,
+ 0xA59,
+ 0xA5C,
+ 0xA5E,
+ 0xA5F,
+ 0xB5C,
+ 0xB5E,
+ 0xE33,
+ 0xE34,
+ 0xEB3,
+ 0xEB4,
+ 0xEDC,
+ 0xEDE,
+ 0xF0C,
+ 0xF0D,
+ 0xF43,
+ 0xF44,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF77,
+ 0xF78,
+ 0xF79,
+ 0xF81,
+ 0xF82,
+ 0xF93,
+ 0xF94,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0x10FC,
+ 0x10FD,
+ 0x1D2C,
+ 0x1D2F,
+ 0x1D30,
+ 0x1D3B,
+ 0x1D3C,
+ 0x1D4E,
+ 0x1D4F,
+ 0x1D6B,
+ 0x1D78,
+ 0x1D79,
+ 0x1D9B,
+ 0x1DC0,
+ 0x1E9A,
+ 0x1E9C,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F7E,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD4,
+ 0x1FDB,
+ 0x1FDC,
+ 0x1FDD,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF0,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x1FFF,
+ 0x2000,
+ 0x200B,
+ 0x2011,
+ 0x2012,
+ 0x2017,
+ 0x2018,
+ 0x2024,
+ 0x2027,
+ 0x202F,
+ 0x2030,
+ 0x2033,
+ 0x2035,
+ 0x2036,
+ 0x2038,
+ 0x203C,
+ 0x203D,
+ 0x203E,
+ 0x203F,
+ 0x2047,
+ 0x204A,
+ 0x2057,
+ 0x2058,
+ 0x205F,
+ 0x2060,
+ 0x2070,
+ 0x2072,
+ 0x2074,
+ 0x208F,
+ 0x2090,
+ 0x209D,
+ 0x20A8,
+ 0x20A9,
+ 0x2100,
+ 0x2104,
+ 0x2105,
+ 0x2108,
+ 0x2109,
+ 0x2114,
+ 0x2115,
+ 0x2117,
+ 0x2119,
+ 0x211E,
+ 0x2120,
+ 0x2123,
+ 0x2124,
+ 0x2125,
+ 0x2126,
+ 0x2127,
+ 0x2128,
+ 0x2129,
+ 0x212A,
+ 0x212E,
+ 0x212F,
+ 0x2132,
+ 0x2133,
+ 0x213A,
+ 0x213B,
+ 0x2141,
+ 0x2145,
+ 0x214A,
+ 0x2150,
+ 0x2180,
+ 0x2189,
+ 0x218A,
+ 0x222C,
+ 0x222E,
+ 0x222F,
+ 0x2231,
+ 0x2460,
+ 0x24EB,
+ 0x2A0C,
+ 0x2A0D,
+ 0x2A74,
+ 0x2A77,
+ 0x2ADC,
+ 0x2ADD,
+ 0x2C7C,
+ 0x2C7E,
+ 0x2D6F,
+ 0x2D70,
+ 0x2E9F,
+ 0x2EA0,
+ 0x2EF3,
+ 0x2EF4,
+ 0x2F00,
+ 0x2FD6,
+ 0x3000,
+ 0x3001,
+ 0x3036,
+ 0x3037,
+ 0x3038,
+ 0x303B,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A0,
+ 0x30FF,
+ 0x3100,
+ 0x3131,
+ 0x3164,
+ 0x3165,
+ 0x318F,
+ 0x3192,
+ 0x31A0,
+ 0x3200,
+ 0x321F,
+ 0x3220,
+ 0x3248,
+ 0x3250,
+ 0x327F,
+ 0x3280,
+ 0x3400,
+ 0xA69C,
+ 0xA69E,
+ 0xA770,
+ 0xA771,
+ 0xA7F8,
+ 0xA7FA,
+ 0xAB5C,
+ 0xAB60,
+ 0xAB69,
+ 0xAB6A,
+ 0xF900,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0xFA6E,
+ 0xFA70,
+ 0xFADA,
+ 0xFB00,
+ 0xFB07,
+ 0xFB13,
+ 0xFB18,
+ 0xFB1D,
+ 0xFB1E,
+ 0xFB1F,
+ 0xFB37,
+ 0xFB38,
+ 0xFB3D,
+ 0xFB3E,
+ 0xFB3F,
+ 0xFB40,
+ 0xFB42,
+ 0xFB43,
+ 0xFB45,
+ 0xFB46,
+ 0xFBB2,
+ 0xFBD3,
+ 0xFD3E,
+ 0xFD50,
+ 0xFD90,
+ 0xFD92,
+ 0xFDC8,
+ 0xFDF0,
+ 0xFDFD,
+ 0xFE10,
+ 0xFE1A,
+ 0xFE30,
+ 0xFE45,
+ 0xFE47,
+ 0xFE53,
+ 0xFE54,
+ 0xFE67,
+ 0xFE68,
+ 0xFE6C,
+ 0xFE70,
+ 0xFE73,
+ 0xFE74,
+ 0xFE75,
+ 0xFE76,
+ 0xFEFD,
+ 0xFF01,
+ 0xFFA0,
+ 0xFFA1,
+ 0xFFBF,
+ 0xFFC2,
+ 0xFFC8,
+ 0xFFCA,
+ 0xFFD0,
+ 0xFFD2,
+ 0xFFD8,
+ 0xFFDA,
+ 0xFFDD,
+ 0xFFE0,
+ 0xFFE7,
+ 0xFFE8,
+ 0xFFEF,
+ 0x1D15E,
+ 0x1D165,
+ 0x1D1BB,
+ 0x1D1C1,
+ 0x1D400,
+ 0x1D455,
+ 0x1D456,
+ 0x1D49D,
+ 0x1D49E,
+ 0x1D4A0,
+ 0x1D4A2,
+ 0x1D4A3,
+ 0x1D4A5,
+ 0x1D4A7,
+ 0x1D4A9,
+ 0x1D4AD,
+ 0x1D4AE,
+ 0x1D4BA,
+ 0x1D4BB,
+ 0x1D4BC,
+ 0x1D4BD,
+ 0x1D4C4,
+ 0x1D4C5,
+ 0x1D506,
+ 0x1D507,
+ 0x1D50B,
+ 0x1D50D,
+ 0x1D515,
+ 0x1D516,
+ 0x1D51D,
+ 0x1D51E,
+ 0x1D53A,
+ 0x1D53B,
+ 0x1D53F,
+ 0x1D540,
+ 0x1D545,
+ 0x1D546,
+ 0x1D547,
+ 0x1D54A,
+ 0x1D551,
+ 0x1D552,
+ 0x1D6A6,
+ 0x1D6A8,
+ 0x1D7CC,
+ 0x1D7CE,
+ 0x1D800,
+ 0x1EE00,
+ 0x1EE04,
+ 0x1EE05,
+ 0x1EE20,
+ 0x1EE21,
+ 0x1EE23,
+ 0x1EE24,
+ 0x1EE25,
+ 0x1EE27,
+ 0x1EE28,
+ 0x1EE29,
+ 0x1EE33,
+ 0x1EE34,
+ 0x1EE38,
+ 0x1EE39,
+ 0x1EE3A,
+ 0x1EE3B,
+ 0x1EE3C,
+ 0x1EE42,
+ 0x1EE43,
+ 0x1EE47,
+ 0x1EE48,
+ 0x1EE49,
+ 0x1EE4A,
+ 0x1EE4B,
+ 0x1EE4C,
+ 0x1EE4D,
+ 0x1EE50,
+ 0x1EE51,
+ 0x1EE53,
+ 0x1EE54,
+ 0x1EE55,
+ 0x1EE57,
+ 0x1EE58,
+ 0x1EE59,
+ 0x1EE5A,
+ 0x1EE5B,
+ 0x1EE5C,
+ 0x1EE5D,
+ 0x1EE5E,
+ 0x1EE5F,
+ 0x1EE60,
+ 0x1EE61,
+ 0x1EE63,
+ 0x1EE64,
+ 0x1EE65,
+ 0x1EE67,
+ 0x1EE6B,
+ 0x1EE6C,
+ 0x1EE73,
+ 0x1EE74,
+ 0x1EE78,
+ 0x1EE79,
+ 0x1EE7D,
+ 0x1EE7E,
+ 0x1EE7F,
+ 0x1EE80,
+ 0x1EE8A,
+ 0x1EE8B,
+ 0x1EE9C,
+ 0x1EEA1,
+ 0x1EEA4,
+ 0x1EEA5,
+ 0x1EEAA,
+ 0x1EEAB,
+ 0x1EEBC,
+ 0x1F100,
+ 0x1F10B,
+ 0x1F110,
+ 0x1F12F,
+ 0x1F130,
+ 0x1F150,
+ 0x1F16A,
+ 0x1F16D,
+ 0x1F190,
+ 0x1F191,
+ 0x1F200,
+ 0x1F203,
+ 0x1F210,
+ 0x1F23C,
+ 0x1F240,
+ 0x1F249,
+ 0x1F250,
+ 0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x2F800,
+ 0x2FA1E
+};
+
+# endif /* ASCII/Latin1 */
+
+# if 'A' == 193 /* EBCDIC 1047 */ \
+ && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
+ && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
+
+static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for EBCDIC 1047 */
+ 509, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x41,
+ 0x42,
+ 0x9A,
+ 0x9C,
+ 0x9D,
+ 0x9E,
+ 0xA0,
+ 0xA1,
+ 0xB7,
+ 0xBA,
+ 0xBB,
+ 0xBD,
+ 0xBE,
+ 0xBF,
+ 0xDA,
+ 0xDB,
+ 0xEA,
+ 0xEB,
+ 0xFA,
+ 0xFB,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x17F,
+ 0x180,
+ 0x1C4,
+ 0x1CD,
+ 0x1F1,
+ 0x1F4,
+ 0x2B0,
+ 0x2B9,
+ 0x2D8,
+ 0x2DE,
+ 0x2E0,
+ 0x2E5,
+ 0x340,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x374,
+ 0x375,
+ 0x37A,
+ 0x37B,
+ 0x37E,
+ 0x37F,
+ 0x384,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x3D0,
+ 0x3D7,
+ 0x3F0,
+ 0x3F3,
+ 0x3F4,
+ 0x3F6,
+ 0x3F9,
+ 0x3FA,
+ 0x587,
+ 0x588,
+ 0x675,
+ 0x679,
+ 0x958,
+ 0x960,
+ 0x9DC,
+ 0x9DE,
+ 0x9DF,
+ 0x9E0,
+ 0xA33,
+ 0xA34,
+ 0xA36,
+ 0xA37,
+ 0xA59,
+ 0xA5C,
+ 0xA5E,
+ 0xA5F,
+ 0xB5C,
+ 0xB5E,
+ 0xE33,
+ 0xE34,
+ 0xEB3,
+ 0xEB4,
+ 0xEDC,
+ 0xEDE,
+ 0xF0C,
+ 0xF0D,
+ 0xF43,
+ 0xF44,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF77,
+ 0xF78,
+ 0xF79,
+ 0xF81,
+ 0xF82,
+ 0xF93,
+ 0xF94,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0x10FC,
+ 0x10FD,
+ 0x1D2C,
+ 0x1D2F,
+ 0x1D30,
+ 0x1D3B,
+ 0x1D3C,
+ 0x1D4E,
+ 0x1D4F,
+ 0x1D6B,
+ 0x1D78,
+ 0x1D79,
+ 0x1D9B,
+ 0x1DC0,
+ 0x1E9A,
+ 0x1E9C,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F7E,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD4,
+ 0x1FDB,
+ 0x1FDC,
+ 0x1FDD,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF0,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x1FFF,
+ 0x2000,
+ 0x200B,
+ 0x2011,
+ 0x2012,
+ 0x2017,
+ 0x2018,
+ 0x2024,
+ 0x2027,
+ 0x202F,
+ 0x2030,
+ 0x2033,
+ 0x2035,
+ 0x2036,
+ 0x2038,
+ 0x203C,
+ 0x203D,
+ 0x203E,
+ 0x203F,
+ 0x2047,
+ 0x204A,
+ 0x2057,
+ 0x2058,
+ 0x205F,
+ 0x2060,
+ 0x2070,
+ 0x2072,
+ 0x2074,
+ 0x208F,
+ 0x2090,
+ 0x209D,
+ 0x20A8,
+ 0x20A9,
+ 0x2100,
+ 0x2104,
+ 0x2105,
+ 0x2108,
+ 0x2109,
+ 0x2114,
+ 0x2115,
+ 0x2117,
+ 0x2119,
+ 0x211E,
+ 0x2120,
+ 0x2123,
+ 0x2124,
+ 0x2125,
+ 0x2126,
+ 0x2127,
+ 0x2128,
+ 0x2129,
+ 0x212A,
+ 0x212E,
+ 0x212F,
+ 0x2132,
+ 0x2133,
+ 0x213A,
+ 0x213B,
+ 0x2141,
+ 0x2145,
+ 0x214A,
+ 0x2150,
+ 0x2180,
+ 0x2189,
+ 0x218A,
+ 0x222C,
+ 0x222E,
+ 0x222F,
+ 0x2231,
+ 0x2460,
+ 0x24EB,
+ 0x2A0C,
+ 0x2A0D,
+ 0x2A74,
+ 0x2A77,
+ 0x2ADC,
+ 0x2ADD,
+ 0x2C7C,
+ 0x2C7E,
+ 0x2D6F,
+ 0x2D70,
+ 0x2E9F,
+ 0x2EA0,
+ 0x2EF3,
+ 0x2EF4,
+ 0x2F00,
+ 0x2FD6,
+ 0x3000,
+ 0x3001,
+ 0x3036,
+ 0x3037,
+ 0x3038,
+ 0x303B,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A0,
+ 0x30FF,
+ 0x3100,
+ 0x3131,
+ 0x3164,
+ 0x3165,
+ 0x318F,
+ 0x3192,
+ 0x31A0,
+ 0x3200,
+ 0x321F,
+ 0x3220,
+ 0x3248,
+ 0x3250,
+ 0x327F,
+ 0x3280,
+ 0x3400,
+ 0xA69C,
+ 0xA69E,
+ 0xA770,
+ 0xA771,
+ 0xA7F8,
+ 0xA7FA,
+ 0xAB5C,
+ 0xAB60,
+ 0xAB69,
+ 0xAB6A,
+ 0xF900,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0xFA6E,
+ 0xFA70,
+ 0xFADA,
+ 0xFB00,
+ 0xFB07,
+ 0xFB13,
+ 0xFB18,
+ 0xFB1D,
+ 0xFB1E,
+ 0xFB1F,
+ 0xFB37,
+ 0xFB38,
+ 0xFB3D,
+ 0xFB3E,
+ 0xFB3F,
+ 0xFB40,
+ 0xFB42,
+ 0xFB43,
+ 0xFB45,
+ 0xFB46,
+ 0xFBB2,
+ 0xFBD3,
+ 0xFD3E,
+ 0xFD50,
+ 0xFD90,
+ 0xFD92,
+ 0xFDC8,
+ 0xFDF0,
+ 0xFDFD,
+ 0xFE10,
+ 0xFE1A,
+ 0xFE30,
+ 0xFE45,
+ 0xFE47,
+ 0xFE53,
+ 0xFE54,
+ 0xFE67,
+ 0xFE68,
+ 0xFE6C,
+ 0xFE70,
+ 0xFE73,
+ 0xFE74,
+ 0xFE75,
+ 0xFE76,
+ 0xFEFD,
+ 0xFF01,
+ 0xFFA0,
+ 0xFFA1,
+ 0xFFBF,
+ 0xFFC2,
+ 0xFFC8,
+ 0xFFCA,
+ 0xFFD0,
+ 0xFFD2,
+ 0xFFD8,
+ 0xFFDA,
+ 0xFFDD,
+ 0xFFE0,
+ 0xFFE7,
+ 0xFFE8,
+ 0xFFEF,
+ 0x1D15E,
+ 0x1D165,
+ 0x1D1BB,
+ 0x1D1C1,
+ 0x1D400,
+ 0x1D455,
+ 0x1D456,
+ 0x1D49D,
+ 0x1D49E,
+ 0x1D4A0,
+ 0x1D4A2,
+ 0x1D4A3,
+ 0x1D4A5,
+ 0x1D4A7,
+ 0x1D4A9,
+ 0x1D4AD,
+ 0x1D4AE,
+ 0x1D4BA,
+ 0x1D4BB,
+ 0x1D4BC,
+ 0x1D4BD,
+ 0x1D4C4,
+ 0x1D4C5,
+ 0x1D506,
+ 0x1D507,
+ 0x1D50B,
+ 0x1D50D,
+ 0x1D515,
+ 0x1D516,
+ 0x1D51D,
+ 0x1D51E,
+ 0x1D53A,
+ 0x1D53B,
+ 0x1D53F,
+ 0x1D540,
+ 0x1D545,
+ 0x1D546,
+ 0x1D547,
+ 0x1D54A,
+ 0x1D551,
+ 0x1D552,
+ 0x1D6A6,
+ 0x1D6A8,
+ 0x1D7CC,
+ 0x1D7CE,
+ 0x1D800,
+ 0x1EE00,
+ 0x1EE04,
+ 0x1EE05,
+ 0x1EE20,
+ 0x1EE21,
+ 0x1EE23,
+ 0x1EE24,
+ 0x1EE25,
+ 0x1EE27,
+ 0x1EE28,
+ 0x1EE29,
+ 0x1EE33,
+ 0x1EE34,
+ 0x1EE38,
+ 0x1EE39,
+ 0x1EE3A,
+ 0x1EE3B,
+ 0x1EE3C,
+ 0x1EE42,
+ 0x1EE43,
+ 0x1EE47,
+ 0x1EE48,
+ 0x1EE49,
+ 0x1EE4A,
+ 0x1EE4B,
+ 0x1EE4C,
+ 0x1EE4D,
+ 0x1EE50,
+ 0x1EE51,
+ 0x1EE53,
+ 0x1EE54,
+ 0x1EE55,
+ 0x1EE57,
+ 0x1EE58,
+ 0x1EE59,
+ 0x1EE5A,
+ 0x1EE5B,
+ 0x1EE5C,
+ 0x1EE5D,
+ 0x1EE5E,
+ 0x1EE5F,
+ 0x1EE60,
+ 0x1EE61,
+ 0x1EE63,
+ 0x1EE64,
+ 0x1EE65,
+ 0x1EE67,
+ 0x1EE6B,
+ 0x1EE6C,
+ 0x1EE73,
+ 0x1EE74,
+ 0x1EE78,
+ 0x1EE79,
+ 0x1EE7D,
+ 0x1EE7E,
+ 0x1EE7F,
+ 0x1EE80,
+ 0x1EE8A,
+ 0x1EE8B,
+ 0x1EE9C,
+ 0x1EEA1,
+ 0x1EEA4,
+ 0x1EEA5,
+ 0x1EEAA,
+ 0x1EEAB,
+ 0x1EEBC,
+ 0x1F100,
+ 0x1F10B,
+ 0x1F110,
+ 0x1F12F,
+ 0x1F130,
+ 0x1F150,
+ 0x1F16A,
+ 0x1F16D,
+ 0x1F190,
+ 0x1F191,
+ 0x1F200,
+ 0x1F203,
+ 0x1F210,
+ 0x1F23C,
+ 0x1F240,
+ 0x1F249,
+ 0x1F250,
+ 0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x2F800,
+ 0x2FA1E
+};
+
+# endif /* EBCDIC 1047 */
+
+# if 'A' == 193 /* EBCDIC 037 */ \
+ && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
+ && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
+
+static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for EBCDIC 037 */
+ 507, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x41,
+ 0x42,
+ 0x9A,
+ 0x9C,
+ 0x9D,
+ 0x9E,
+ 0xA0,
+ 0xA1,
+ 0xB7,
+ 0xBA,
+ 0xBC,
+ 0xBF,
+ 0xDA,
+ 0xDB,
+ 0xEA,
+ 0xEB,
+ 0xFA,
+ 0xFB,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x17F,
+ 0x180,
+ 0x1C4,
+ 0x1CD,
+ 0x1F1,
+ 0x1F4,
+ 0x2B0,
+ 0x2B9,
+ 0x2D8,
+ 0x2DE,
+ 0x2E0,
+ 0x2E5,
+ 0x340,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x374,
+ 0x375,
+ 0x37A,
+ 0x37B,
+ 0x37E,
+ 0x37F,
+ 0x384,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x3D0,
+ 0x3D7,
+ 0x3F0,
+ 0x3F3,
+ 0x3F4,
+ 0x3F6,
+ 0x3F9,
+ 0x3FA,
+ 0x587,
+ 0x588,
+ 0x675,
+ 0x679,
+ 0x958,
+ 0x960,
+ 0x9DC,
+ 0x9DE,
+ 0x9DF,
+ 0x9E0,
+ 0xA33,
+ 0xA34,
+ 0xA36,
+ 0xA37,
+ 0xA59,
+ 0xA5C,
+ 0xA5E,
+ 0xA5F,
+ 0xB5C,
+ 0xB5E,
+ 0xE33,
+ 0xE34,
+ 0xEB3,
+ 0xEB4,
+ 0xEDC,
+ 0xEDE,
+ 0xF0C,
+ 0xF0D,
+ 0xF43,
+ 0xF44,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF77,
+ 0xF78,
+ 0xF79,
+ 0xF81,
+ 0xF82,
+ 0xF93,
+ 0xF94,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0x10FC,
+ 0x10FD,
+ 0x1D2C,
+ 0x1D2F,
+ 0x1D30,
+ 0x1D3B,
+ 0x1D3C,
+ 0x1D4E,
+ 0x1D4F,
+ 0x1D6B,
+ 0x1D78,
+ 0x1D79,
+ 0x1D9B,
+ 0x1DC0,
+ 0x1E9A,
+ 0x1E9C,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F7E,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD4,
+ 0x1FDB,
+ 0x1FDC,
+ 0x1FDD,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF0,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x1FFF,
+ 0x2000,
+ 0x200B,
+ 0x2011,
+ 0x2012,
+ 0x2017,
+ 0x2018,
+ 0x2024,
+ 0x2027,
+ 0x202F,
+ 0x2030,
+ 0x2033,
+ 0x2035,
+ 0x2036,
+ 0x2038,
+ 0x203C,
+ 0x203D,
+ 0x203E,
+ 0x203F,
+ 0x2047,
+ 0x204A,
+ 0x2057,
+ 0x2058,
+ 0x205F,
+ 0x2060,
+ 0x2070,
+ 0x2072,
+ 0x2074,
+ 0x208F,
+ 0x2090,
+ 0x209D,
+ 0x20A8,
+ 0x20A9,
+ 0x2100,
+ 0x2104,
+ 0x2105,
+ 0x2108,
+ 0x2109,
+ 0x2114,
+ 0x2115,
+ 0x2117,
+ 0x2119,
+ 0x211E,
+ 0x2120,
+ 0x2123,
+ 0x2124,
+ 0x2125,
+ 0x2126,
+ 0x2127,
+ 0x2128,
+ 0x2129,
+ 0x212A,
+ 0x212E,
+ 0x212F,
+ 0x2132,
+ 0x2133,
+ 0x213A,
+ 0x213B,
+ 0x2141,
+ 0x2145,
+ 0x214A,
+ 0x2150,
+ 0x2180,
+ 0x2189,
+ 0x218A,
+ 0x222C,
+ 0x222E,
+ 0x222F,
+ 0x2231,
+ 0x2460,
+ 0x24EB,
+ 0x2A0C,
+ 0x2A0D,
+ 0x2A74,
+ 0x2A77,
+ 0x2ADC,
+ 0x2ADD,
+ 0x2C7C,
+ 0x2C7E,
+ 0x2D6F,
+ 0x2D70,
+ 0x2E9F,
+ 0x2EA0,
+ 0x2EF3,
+ 0x2EF4,
+ 0x2F00,
+ 0x2FD6,
+ 0x3000,
+ 0x3001,
+ 0x3036,
+ 0x3037,
+ 0x3038,
+ 0x303B,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A0,
+ 0x30FF,
+ 0x3100,
+ 0x3131,
+ 0x3164,
+ 0x3165,
+ 0x318F,
+ 0x3192,
+ 0x31A0,
+ 0x3200,
+ 0x321F,
+ 0x3220,
+ 0x3248,
+ 0x3250,
+ 0x327F,
+ 0x3280,
+ 0x3400,
+ 0xA69C,
+ 0xA69E,
+ 0xA770,
+ 0xA771,
+ 0xA7F8,
+ 0xA7FA,
+ 0xAB5C,
+ 0xAB60,
+ 0xAB69,
+ 0xAB6A,
+ 0xF900,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0xFA6E,
+ 0xFA70,
+ 0xFADA,
+ 0xFB00,
+ 0xFB07,
+ 0xFB13,
+ 0xFB18,
+ 0xFB1D,
+ 0xFB1E,
+ 0xFB1F,
+ 0xFB37,
+ 0xFB38,
+ 0xFB3D,
+ 0xFB3E,
+ 0xFB3F,
+ 0xFB40,
+ 0xFB42,
+ 0xFB43,
+ 0xFB45,
+ 0xFB46,
+ 0xFBB2,
+ 0xFBD3,
+ 0xFD3E,
+ 0xFD50,
+ 0xFD90,
+ 0xFD92,
+ 0xFDC8,
+ 0xFDF0,
+ 0xFDFD,
+ 0xFE10,
+ 0xFE1A,
+ 0xFE30,
+ 0xFE45,
+ 0xFE47,
+ 0xFE53,
+ 0xFE54,
+ 0xFE67,
+ 0xFE68,
+ 0xFE6C,
+ 0xFE70,
+ 0xFE73,
+ 0xFE74,
+ 0xFE75,
+ 0xFE76,
+ 0xFEFD,
+ 0xFF01,
+ 0xFFA0,
+ 0xFFA1,
+ 0xFFBF,
+ 0xFFC2,
+ 0xFFC8,
+ 0xFFCA,
+ 0xFFD0,
+ 0xFFD2,
+ 0xFFD8,
+ 0xFFDA,
+ 0xFFDD,
+ 0xFFE0,
+ 0xFFE7,
+ 0xFFE8,
+ 0xFFEF,
+ 0x1D15E,
+ 0x1D165,
+ 0x1D1BB,
+ 0x1D1C1,
+ 0x1D400,
+ 0x1D455,
+ 0x1D456,
+ 0x1D49D,
+ 0x1D49E,
+ 0x1D4A0,
+ 0x1D4A2,
+ 0x1D4A3,
+ 0x1D4A5,
+ 0x1D4A7,
+ 0x1D4A9,
+ 0x1D4AD,
+ 0x1D4AE,
+ 0x1D4BA,
+ 0x1D4BB,
+ 0x1D4BC,
+ 0x1D4BD,
+ 0x1D4C4,
+ 0x1D4C5,
+ 0x1D506,
+ 0x1D507,
+ 0x1D50B,
+ 0x1D50D,
+ 0x1D515,
+ 0x1D516,
+ 0x1D51D,
+ 0x1D51E,
+ 0x1D53A,
+ 0x1D53B,
+ 0x1D53F,
+ 0x1D540,
+ 0x1D545,
+ 0x1D546,
+ 0x1D547,
+ 0x1D54A,
+ 0x1D551,
+ 0x1D552,
+ 0x1D6A6,
+ 0x1D6A8,
+ 0x1D7CC,
+ 0x1D7CE,
+ 0x1D800,
+ 0x1EE00,
+ 0x1EE04,
+ 0x1EE05,
+ 0x1EE20,
+ 0x1EE21,
+ 0x1EE23,
+ 0x1EE24,
+ 0x1EE25,
+ 0x1EE27,
+ 0x1EE28,
+ 0x1EE29,
+ 0x1EE33,
+ 0x1EE34,
+ 0x1EE38,
+ 0x1EE39,
+ 0x1EE3A,
+ 0x1EE3B,
+ 0x1EE3C,
+ 0x1EE42,
+ 0x1EE43,
+ 0x1EE47,
+ 0x1EE48,
+ 0x1EE49,
+ 0x1EE4A,
+ 0x1EE4B,
+ 0x1EE4C,
+ 0x1EE4D,
+ 0x1EE50,
+ 0x1EE51,
+ 0x1EE53,
+ 0x1EE54,
+ 0x1EE55,
+ 0x1EE57,
+ 0x1EE58,
+ 0x1EE59,
+ 0x1EE5A,
+ 0x1EE5B,
+ 0x1EE5C,
+ 0x1EE5D,
+ 0x1EE5E,
+ 0x1EE5F,
+ 0x1EE60,
+ 0x1EE61,
+ 0x1EE63,
+ 0x1EE64,
+ 0x1EE65,
+ 0x1EE67,
+ 0x1EE6B,
+ 0x1EE6C,
+ 0x1EE73,
+ 0x1EE74,
+ 0x1EE78,
+ 0x1EE79,
+ 0x1EE7D,
+ 0x1EE7E,
+ 0x1EE7F,
+ 0x1EE80,
+ 0x1EE8A,
+ 0x1EE8B,
+ 0x1EE9C,
+ 0x1EEA1,
+ 0x1EEA4,
+ 0x1EEA5,
+ 0x1EEAA,
+ 0x1EEAB,
+ 0x1EEBC,
+ 0x1F100,
+ 0x1F10B,
+ 0x1F110,
+ 0x1F12F,
+ 0x1F130,
+ 0x1F150,
+ 0x1F16A,
+ 0x1F16D,
+ 0x1F190,
+ 0x1F191,
+ 0x1F200,
+ 0x1F203,
+ 0x1F210,
+ 0x1F23C,
+ 0x1F240,
+ 0x1F249,
+ 0x1F250,
+ 0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x2F800,
+ 0x2FA1E
+};
+
+# endif /* EBCDIC 037 */
+
+# if 'A' == 65 /* ASCII/Latin1 */
+
+static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */
+ 691, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x9,
+ 0xE,
+ 0x20,
+ 0x27,
+ 0x28,
+ 0x2D,
+ 0x2F,
+ 0x30,
+ 0x3B,
+ 0x41,
+ 0x5B,
+ 0x5F,
+ 0x60,
+ 0x61,
+ 0x7B,
+ 0x7F,
+ 0x85,
+ 0x86,
+ 0xA1,
+ 0xA8,
+ 0xA9,
+ 0xAA,
+ 0xAB,
+ 0xAD,
+ 0xAE,
+ 0xAF,
+ 0xB0,
+ 0xB2,
+ 0xB6,
+ 0xB7,
+ 0xBB,
+ 0xBC,
+ 0xBF,
+ 0xC0,
+ 0xD7,
+ 0xD8,
+ 0xF7,
+ 0xF8,
+ 0x2C2,
+ 0x2C6,
+ 0x2D2,
+ 0x2D8,
+ 0x2DE,
+ 0x2E0,
+ 0x2E5,
+ 0x2EC,
+ 0x2ED,
+ 0x2EE,
+ 0x2EF,
+ 0x300,
+ 0x3F6,
+ 0x3F7,
+ 0x482,
+ 0x483,
+ 0x488,
+ 0x48A,
+ 0x55A,
+ 0x560,
+ 0x589,
+ 0x58A,
+ 0x58D,
+ 0x590,
+ 0x5BE,
+ 0x5BF,
+ 0x5C0,
+ 0x5C1,
+ 0x5C3,
+ 0x5C4,
+ 0x5C6,
+ 0x5C7,
+ 0x600,
+ 0x610,
+ 0x61B,
+ 0x61C,
+ 0x61E,
+ 0x620,
+ 0x66A,
+ 0x66E,
+ 0x6D4,
+ 0x6D5,
+ 0x6DD,
+ 0x6DF,
+ 0x6E9,
+ 0x6EA,
+ 0x700,
+ 0x70E,
+ 0x70F,
+ 0x710,
+ 0x7F6,
+ 0x7FA,
+ 0x7FE,
+ 0x800,
+ 0x830,
+ 0x83F,
+ 0x85E,
+ 0x85F,
+ 0x8E2,
+ 0x8E3,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x9F2,
+ 0x9FC,
+ 0x9FD,
+ 0x9FE,
+ 0xA76,
+ 0xA77,
+ 0xAF0,
+ 0xAF2,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB78,
+ 0xBF0,
+ 0xBFB,
+ 0xC77,
+ 0xC80,
+ 0xC84,
+ 0xC85,
+ 0xD4F,
+ 0xD50,
+ 0xD58,
+ 0xD5F,
+ 0xD70,
+ 0xD7A,
+ 0xDF4,
+ 0xDF5,
+ 0xE3F,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE5C,
+ 0xF01,
+ 0xF0B,
+ 0xF0D,
+ 0xF18,
+ 0xF1A,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF39,
+ 0xF3A,
+ 0xF3E,
+ 0xF85,
+ 0xF86,
+ 0xFBE,
+ 0xFC6,
+ 0xFC7,
+ 0xFCD,
+ 0xFCE,
+ 0xFDB,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10A0,
+ 0x10FB,
+ 0x10FC,
+ 0x1360,
+ 0x1369,
+ 0x1372,
+ 0x137D,
+ 0x1390,
+ 0x139A,
+ 0x1400,
+ 0x1401,
+ 0x166D,
+ 0x166F,
+ 0x1680,
+ 0x1681,
+ 0x169B,
+ 0x169D,
+ 0x16EB,
+ 0x16EE,
+ 0x1735,
+ 0x1737,
+ 0x17D4,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17F0,
+ 0x17FA,
+ 0x1800,
+ 0x180B,
+ 0x1940,
+ 0x1941,
+ 0x1944,
+ 0x1946,
+ 0x19DE,
+ 0x1A00,
+ 0x1A1E,
+ 0x1A20,
+ 0x1AA0,
+ 0x1AA7,
+ 0x1AA8,
+ 0x1AAE,
+ 0x1ABE,
+ 0x1ABF,
+ 0x1B5A,
+ 0x1B6B,
+ 0x1B74,
+ 0x1B7D,
+ 0x1BFC,
+ 0x1C00,
+ 0x1C3B,
+ 0x1C40,
+ 0x1C7E,
+ 0x1C80,
+ 0x1CC0,
+ 0x1CC8,
+ 0x1CD3,
+ 0x1CD4,
+ 0x2012,
+ 0x2017,
+ 0x2018,
+ 0x2019,
+ 0x201A,
+ 0x2024,
+ 0x2028,
+ 0x202A,
+ 0x2030,
+ 0x2033,
+ 0x2035,
+ 0x2036,
+ 0x2038,
+ 0x203C,
+ 0x203D,
+ 0x203E,
+ 0x2041,
+ 0x2047,
+ 0x204A,
+ 0x2054,
+ 0x2055,
+ 0x2057,
+ 0x2058,
+ 0x205F,
+ 0x20A0,
+ 0x20A8,
+ 0x20A9,
+ 0x20C0,
+ 0x20DD,
+ 0x20E1,
+ 0x20E2,
+ 0x20E5,
+ 0x2104,
+ 0x2105,
+ 0x2108,
+ 0x2109,
+ 0x2114,
+ 0x2115,
+ 0x2117,
+ 0x2118,
+ 0x211E,
+ 0x2120,
+ 0x2123,
+ 0x2124,
+ 0x2125,
+ 0x2126,
+ 0x2127,
+ 0x2128,
+ 0x2129,
+ 0x212A,
+ 0x213A,
+ 0x213B,
+ 0x2141,
+ 0x2145,
+ 0x214A,
+ 0x214E,
+ 0x214F,
+ 0x2150,
+ 0x218A,
+ 0x218C,
+ 0x2190,
+ 0x222C,
+ 0x222E,
+ 0x222F,
+ 0x2231,
+ 0x2329,
+ 0x232B,
+ 0x2427,
+ 0x2440,
+ 0x244B,
+ 0x24EB,
+ 0x2A0C,
+ 0x2A0D,
+ 0x2A74,
+ 0x2A77,
+ 0x2ADC,
+ 0x2ADD,
+ 0x2B74,
+ 0x2B76,
+ 0x2B96,
+ 0x2B97,
+ 0x2C00,
+ 0x2CE5,
+ 0x2CEB,
+ 0x2CF9,
+ 0x2D00,
+ 0x2D70,
+ 0x2D71,
+ 0x2E00,
+ 0x2E53,
+ 0x2E80,
+ 0x2E9A,
+ 0x2E9B,
+ 0x2E9F,
+ 0x2EA0,
+ 0x2EF3,
+ 0x2FF0,
+ 0x2FFC,
+ 0x3001,
+ 0x3005,
+ 0x3008,
+ 0x3021,
+ 0x3030,
+ 0x3031,
+ 0x3037,
+ 0x3038,
+ 0x303D,
+ 0x3040,
+ 0x3190,
+ 0x3192,
+ 0x31C0,
+ 0x31E4,
+ 0x3248,
+ 0x3250,
+ 0x327F,
+ 0x3280,
+ 0x4DC0,
+ 0x4E00,
+ 0xA490,
+ 0xA4C7,
+ 0xA4FE,
+ 0xA500,
+ 0xA60D,
+ 0xA610,
+ 0xA670,
+ 0xA674,
+ 0xA67E,
+ 0xA67F,
+ 0xA6F2,
+ 0xA6F8,
+ 0xA700,
+ 0xA717,
+ 0xA720,
+ 0xA722,
+ 0xA789,
+ 0xA78B,
+ 0xA828,
+ 0xA82C,
+ 0xA830,
+ 0xA83A,
+ 0xA874,
+ 0xA878,
+ 0xA8CE,
+ 0xA8D0,
+ 0xA8F8,
+ 0xA8FB,
+ 0xA8FC,
+ 0xA8FD,
+ 0xA92E,
+ 0xA930,
+ 0xA95F,
+ 0xA960,
+ 0xA9C1,
+ 0xA9CE,
+ 0xA9DE,
+ 0xA9E0,
+ 0xAA5C,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAADE,
+ 0xAAE0,
+ 0xAAF0,
+ 0xAAF2,
+ 0xAB5B,
+ 0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
+ 0xABEB,
+ 0xABEC,
+ 0xFBB2,
+ 0xFBC2,
+ 0xFD3E,
+ 0xFD40,
+ 0xFDFD,
+ 0xFDFE,
+ 0xFE45,
+ 0xFE47,
+ 0xFFF9,
+ 0xFFFE,
+ 0x10100,
+ 0x10103,
+ 0x10107,
+ 0x10134,
+ 0x10137,
+ 0x10140,
+ 0x10175,
+ 0x1018F,
+ 0x10190,
+ 0x1019D,
+ 0x101A0,
+ 0x101A1,
+ 0x101D0,
+ 0x101FD,
+ 0x102E1,
+ 0x102FC,
+ 0x10320,
+ 0x10324,
+ 0x1039F,
+ 0x103A0,
+ 0x103D0,
+ 0x103D1,
+ 0x1056F,
+ 0x10570,
+ 0x10857,
+ 0x10860,
+ 0x10877,
+ 0x10880,
+ 0x108A7,
+ 0x108B0,
+ 0x108FB,
+ 0x10900,
+ 0x10916,
+ 0x1091C,
+ 0x1091F,
+ 0x10920,
+ 0x1093F,
+ 0x10940,
+ 0x109BC,
+ 0x109BE,
+ 0x109C0,
+ 0x109D0,
+ 0x109D2,
+ 0x10A00,
+ 0x10A40,
+ 0x10A49,
+ 0x10A50,
+ 0x10A59,
+ 0x10A7D,
+ 0x10A80,
+ 0x10A9D,
+ 0x10AA0,
+ 0x10AC8,
+ 0x10AC9,
+ 0x10AEB,
+ 0x10AF7,
+ 0x10B39,
+ 0x10B40,
+ 0x10B58,
+ 0x10B60,
+ 0x10B78,
+ 0x10B80,
+ 0x10B99,
+ 0x10B9D,
+ 0x10BA9,
+ 0x10BB0,
+ 0x10CFA,
+ 0x10D00,
+ 0x10E60,
+ 0x10E7F,
+ 0x10EAD,
+ 0x10EAE,
+ 0x10F1D,
+ 0x10F27,
+ 0x10F51,
+ 0x10F5A,
+ 0x10FC5,
+ 0x10FCC,
+ 0x11047,
+ 0x1104E,
+ 0x11052,
+ 0x11066,
+ 0x110BB,
+ 0x110C2,
+ 0x110CD,
+ 0x110CE,
+ 0x11140,
+ 0x11144,
+ 0x11174,
+ 0x11176,
+ 0x111C5,
+ 0x111C9,
+ 0x111CD,
+ 0x111CE,
+ 0x111DB,
+ 0x111DC,
+ 0x111DD,
+ 0x111E0,
+ 0x111E1,
+ 0x111F5,
+ 0x11238,
+ 0x1123E,
+ 0x112A9,
+ 0x112AA,
+ 0x1144B,
+ 0x11450,
+ 0x1145A,
+ 0x1145C,
+ 0x1145D,
+ 0x1145E,
+ 0x114C6,
+ 0x114C7,
+ 0x115C1,
+ 0x115D8,
+ 0x11641,
+ 0x11644,
+ 0x11660,
+ 0x1166D,
+ 0x1173A,
+ 0x11740,
+ 0x1183B,
+ 0x1183C,
+ 0x118EA,
+ 0x118F3,
+ 0x11944,
+ 0x11947,
+ 0x119E2,
+ 0x119E3,
+ 0x11A3F,
+ 0x11A47,
+ 0x11A9A,
+ 0x11A9D,
+ 0x11A9E,
+ 0x11AA3,
+ 0x11C41,
+ 0x11C46,
+ 0x11C5A,
+ 0x11C6D,
+ 0x11C70,
+ 0x11C72,
+ 0x11EF7,
+ 0x11EF9,
+ 0x11FC0,
+ 0x11FF2,
+ 0x11FFF,
+ 0x12000,
+ 0x12470,
+ 0x12475,
+ 0x13430,
+ 0x13439,
+ 0x16A6E,
+ 0x16A70,
+ 0x16AF5,
+ 0x16AF6,
+ 0x16B37,
+ 0x16B40,
+ 0x16B44,
+ 0x16B46,
+ 0x16B5B,
+ 0x16B62,
+ 0x16E80,
+ 0x16E9B,
+ 0x16FE2,
+ 0x16FE3,
+ 0x1BC9C,
+ 0x1BC9D,
+ 0x1BC9F,
+ 0x1BCA0,
+ 0x1D000,
+ 0x1D0F6,
+ 0x1D100,
+ 0x1D127,
+ 0x1D129,
+ 0x1D15E,
+ 0x1D16A,
+ 0x1D16D,
+ 0x1D183,
+ 0x1D185,
+ 0x1D18C,
+ 0x1D1AA,
+ 0x1D1AE,
+ 0x1D1BB,
+ 0x1D1C1,
+ 0x1D1E9,
+ 0x1D200,
+ 0x1D242,
+ 0x1D245,
+ 0x1D246,
+ 0x1D2E0,
+ 0x1D2F4,
+ 0x1D300,
+ 0x1D357,
+ 0x1D360,
+ 0x1D379,
+ 0x1D800,
+ 0x1DA00,
+ 0x1DA37,
+ 0x1DA3B,
+ 0x1DA6D,
+ 0x1DA75,
+ 0x1DA76,
+ 0x1DA84,
+ 0x1DA85,
+ 0x1DA8C,
+ 0x1E14F,
+ 0x1E150,
+ 0x1E2FF,
+ 0x1E300,
+ 0x1E8C7,
+ 0x1E8D0,
+ 0x1E95E,
+ 0x1E960,
+ 0x1EC71,
+ 0x1ECB5,
+ 0x1ED01,
+ 0x1ED3E,
+ 0x1EEF0,
+ 0x1EEF2,
+ 0x1F000,
+ 0x1F02C,
+ 0x1F030,
+ 0x1F094,
+ 0x1F0A0,
+ 0x1F0AF,
+ 0x1F0B1,
+ 0x1F0C0,
+ 0x1F0C1,
+ 0x1F0D0,
+ 0x1F0D1,
+ 0x1F0F6,
+ 0x1F10B,
+ 0x1F110,
+ 0x1F12F,
+ 0x1F130,
+ 0x1F150,
+ 0x1F16A,
+ 0x1F16D,
+ 0x1F190,
+ 0x1F191,
+ 0x1F1AE,
+ 0x1F1E6,
+ 0x1F200,
+ 0x1F260,
+ 0x1F266,
+ 0x1F300,
+ 0x1F6D8,
+ 0x1F6E0,
+ 0x1F6ED,
+ 0x1F6F0,
+ 0x1F6FD,
+ 0x1F700,
+ 0x1F774,
+ 0x1F780,
+ 0x1F7D9,
+ 0x1F7E0,
+ 0x1F7EC,
+ 0x1F800,
+ 0x1F80C,
+ 0x1F810,
+ 0x1F848,
+ 0x1F850,
+ 0x1F85A,
+ 0x1F860,
+ 0x1F888,
+ 0x1F890,
+ 0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
+ 0x1F900,
+ 0x1F979,
+ 0x1F97A,
+ 0x1F9CC,
+ 0x1F9CD,
+ 0x1FA54,
+ 0x1FA60,
+ 0x1FA6E,
+ 0x1FA70,
+ 0x1FA75,
+ 0x1FA78,
+ 0x1FA7B,
+ 0x1FA80,
+ 0x1FA87,
+ 0x1FA90,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
+};
+
+# endif /* ASCII/Latin1 */
+
+# if 'A' == 193 /* EBCDIC 1047 */ \
+ && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
+ && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
+
+static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */
+ 705, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x5,
+ 0x6,
+ 0xB,
+ 0xE,
+ 0x15,
+ 0x16,
+ 0x25,
+ 0x26,
+ 0x40,
+ 0x41,
+ 0x4A,
+ 0x4B,
+ 0x4C,
+ 0x51,
+ 0x5A,
+ 0x60,
+ 0x61,
+ 0x62,
+ 0x6A,
+ 0x6D,
+ 0x6E,
+ 0x70,
+ 0x79,
+ 0x7A,
+ 0x7B,
+ 0x7D,
+ 0x7E,
+ 0x80,
+ 0x8A,
+ 0x8C,
+ 0x8F,
+ 0x91,
+ 0x9F,
+ 0xA0,
+ 0xA1,
+ 0xA2,
+ 0xAA,
+ 0xAC,
+ 0xAD,
+ 0xAE,
+ 0xAF,
+ 0xB3,
+ 0xB4,
+ 0xB7,
+ 0xBD,
+ 0xBE,
+ 0xBF,
+ 0xC1,
+ 0xD0,
+ 0xD1,
+ 0xE0,
+ 0xE2,
+ 0x2C2,
+ 0x2C6,
+ 0x2D2,
+ 0x2D8,
+ 0x2DE,
+ 0x2E0,
+ 0x2E5,
+ 0x2EC,
+ 0x2ED,
+ 0x2EE,
+ 0x2EF,
+ 0x300,
+ 0x3F6,
+ 0x3F7,
+ 0x482,
+ 0x483,
+ 0x488,
+ 0x48A,
+ 0x55A,
+ 0x560,
+ 0x589,
+ 0x58A,
+ 0x58D,
+ 0x590,
+ 0x5BE,
+ 0x5BF,
+ 0x5C0,
+ 0x5C1,
+ 0x5C3,
+ 0x5C4,
+ 0x5C6,
+ 0x5C7,
+ 0x600,
+ 0x610,
+ 0x61B,
+ 0x61C,
+ 0x61E,
+ 0x620,
+ 0x66A,
+ 0x66E,
+ 0x6D4,
+ 0x6D5,
+ 0x6DD,
+ 0x6DF,
+ 0x6E9,
+ 0x6EA,
+ 0x700,
+ 0x70E,
+ 0x70F,
+ 0x710,
+ 0x7F6,
+ 0x7FA,
+ 0x7FE,
+ 0x800,
+ 0x830,
+ 0x83F,
+ 0x85E,
+ 0x85F,
+ 0x8E2,
+ 0x8E3,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x9F2,
+ 0x9FC,
+ 0x9FD,
+ 0x9FE,
+ 0xA76,
+ 0xA77,
+ 0xAF0,
+ 0xAF2,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB78,
+ 0xBF0,
+ 0xBFB,
+ 0xC77,
+ 0xC80,
+ 0xC84,
+ 0xC85,
+ 0xD4F,
+ 0xD50,
+ 0xD58,
+ 0xD5F,
+ 0xD70,
+ 0xD7A,
+ 0xDF4,
+ 0xDF5,
+ 0xE3F,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE5C,
+ 0xF01,
+ 0xF0B,
+ 0xF0D,
+ 0xF18,
+ 0xF1A,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF39,
+ 0xF3A,
+ 0xF3E,
+ 0xF85,
+ 0xF86,
+ 0xFBE,
+ 0xFC6,
+ 0xFC7,
+ 0xFCD,
+ 0xFCE,
+ 0xFDB,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10A0,
+ 0x10FB,
+ 0x10FC,
+ 0x1360,
+ 0x1369,
+ 0x1372,
+ 0x137D,
+ 0x1390,
+ 0x139A,
+ 0x1400,
+ 0x1401,
+ 0x166D,
+ 0x166F,
+ 0x1680,
+ 0x1681,
+ 0x169B,
+ 0x169D,
+ 0x16EB,
+ 0x16EE,
+ 0x1735,
+ 0x1737,
+ 0x17D4,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17F0,
+ 0x17FA,
+ 0x1800,
+ 0x180B,
+ 0x1940,
+ 0x1941,
+ 0x1944,
+ 0x1946,
+ 0x19DE,
+ 0x1A00,
+ 0x1A1E,
+ 0x1A20,
+ 0x1AA0,
+ 0x1AA7,
+ 0x1AA8,
+ 0x1AAE,
+ 0x1ABE,
+ 0x1ABF,
+ 0x1B5A,
+ 0x1B6B,
+ 0x1B74,
+ 0x1B7D,
+ 0x1BFC,
+ 0x1C00,
+ 0x1C3B,
+ 0x1C40,
+ 0x1C7E,
+ 0x1C80,
+ 0x1CC0,
+ 0x1CC8,
+ 0x1CD3,
+ 0x1CD4,
+ 0x2012,
+ 0x2017,
+ 0x2018,
+ 0x2019,
+ 0x201A,
+ 0x2024,
+ 0x2028,
+ 0x202A,
+ 0x2030,
+ 0x2033,
+ 0x2035,
+ 0x2036,
+ 0x2038,
+ 0x203C,
+ 0x203D,
+ 0x203E,
+ 0x2041,
+ 0x2047,
+ 0x204A,
+ 0x2054,
+ 0x2055,
+ 0x2057,
+ 0x2058,
+ 0x205F,
+ 0x20A0,
+ 0x20A8,
+ 0x20A9,
+ 0x20C0,
+ 0x20DD,
+ 0x20E1,
+ 0x20E2,
+ 0x20E5,
+ 0x2104,
+ 0x2105,
+ 0x2108,
+ 0x2109,
+ 0x2114,
+ 0x2115,
+ 0x2117,
+ 0x2118,
+ 0x211E,
+ 0x2120,
+ 0x2123,
+ 0x2124,
+ 0x2125,
+ 0x2126,
+ 0x2127,
+ 0x2128,
+ 0x2129,
+ 0x212A,
+ 0x213A,
+ 0x213B,
+ 0x2141,
+ 0x2145,
+ 0x214A,
+ 0x214E,
+ 0x214F,
+ 0x2150,
+ 0x218A,
+ 0x218C,
+ 0x2190,
+ 0x222C,
+ 0x222E,
+ 0x222F,
+ 0x2231,
+ 0x2329,
+ 0x232B,
+ 0x2427,
+ 0x2440,
+ 0x244B,
+ 0x24EB,
+ 0x2A0C,
+ 0x2A0D,
+ 0x2A74,
+ 0x2A77,
+ 0x2ADC,
+ 0x2ADD,
+ 0x2B74,
+ 0x2B76,
+ 0x2B96,
+ 0x2B97,
+ 0x2C00,
+ 0x2CE5,
+ 0x2CEB,
+ 0x2CF9,
+ 0x2D00,
+ 0x2D70,
+ 0x2D71,
+ 0x2E00,
+ 0x2E53,
+ 0x2E80,
+ 0x2E9A,
+ 0x2E9B,
+ 0x2E9F,
+ 0x2EA0,
+ 0x2EF3,
+ 0x2FF0,
+ 0x2FFC,
+ 0x3001,
+ 0x3005,
+ 0x3008,
+ 0x3021,
+ 0x3030,
+ 0x3031,
+ 0x3037,
+ 0x3038,
+ 0x303D,
+ 0x3040,
+ 0x3190,
+ 0x3192,
+ 0x31C0,
+ 0x31E4,
+ 0x3248,
+ 0x3250,
+ 0x327F,
+ 0x3280,
+ 0x4DC0,
+ 0x4E00,
+ 0xA490,
+ 0xA4C7,
+ 0xA4FE,
+ 0xA500,
+ 0xA60D,
+ 0xA610,
+ 0xA670,
+ 0xA674,
+ 0xA67E,
+ 0xA67F,
+ 0xA6F2,
+ 0xA6F8,
+ 0xA700,
+ 0xA717,
+ 0xA720,
+ 0xA722,
+ 0xA789,
+ 0xA78B,
+ 0xA828,
+ 0xA82C,
+ 0xA830,
+ 0xA83A,
+ 0xA874,
+ 0xA878,
+ 0xA8CE,
+ 0xA8D0,
+ 0xA8F8,
+ 0xA8FB,
+ 0xA8FC,
+ 0xA8FD,
+ 0xA92E,
+ 0xA930,
+ 0xA95F,
+ 0xA960,
+ 0xA9C1,
+ 0xA9CE,
+ 0xA9DE,
+ 0xA9E0,
+ 0xAA5C,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAADE,
+ 0xAAE0,
+ 0xAAF0,
+ 0xAAF2,
+ 0xAB5B,
+ 0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
+ 0xABEB,
+ 0xABEC,
+ 0xFBB2,
+ 0xFBC2,
+ 0xFD3E,
+ 0xFD40,
+ 0xFDFD,
+ 0xFDFE,
+ 0xFE45,
+ 0xFE47,
+ 0xFFF9,
+ 0xFFFE,
+ 0x10100,
+ 0x10103,
+ 0x10107,
+ 0x10134,
+ 0x10137,
+ 0x10140,
+ 0x10175,
+ 0x1018F,
+ 0x10190,
+ 0x1019D,
+ 0x101A0,
+ 0x101A1,
+ 0x101D0,
+ 0x101FD,
+ 0x102E1,
+ 0x102FC,
+ 0x10320,
+ 0x10324,
+ 0x1039F,
+ 0x103A0,
+ 0x103D0,
+ 0x103D1,
+ 0x1056F,
+ 0x10570,
+ 0x10857,
+ 0x10860,
+ 0x10877,
+ 0x10880,
+ 0x108A7,
+ 0x108B0,
+ 0x108FB,
+ 0x10900,
+ 0x10916,
+ 0x1091C,
+ 0x1091F,
+ 0x10920,
+ 0x1093F,
+ 0x10940,
+ 0x109BC,
+ 0x109BE,
+ 0x109C0,
+ 0x109D0,
+ 0x109D2,
+ 0x10A00,
+ 0x10A40,
+ 0x10A49,
+ 0x10A50,
+ 0x10A59,
+ 0x10A7D,
+ 0x10A80,
+ 0x10A9D,
+ 0x10AA0,
+ 0x10AC8,
+ 0x10AC9,
+ 0x10AEB,
+ 0x10AF7,
+ 0x10B39,
+ 0x10B40,
+ 0x10B58,
+ 0x10B60,
+ 0x10B78,
+ 0x10B80,
+ 0x10B99,
+ 0x10B9D,
+ 0x10BA9,
+ 0x10BB0,
+ 0x10CFA,
+ 0x10D00,
+ 0x10E60,
+ 0x10E7F,
+ 0x10EAD,
+ 0x10EAE,
+ 0x10F1D,
+ 0x10F27,
+ 0x10F51,
+ 0x10F5A,
+ 0x10FC5,
+ 0x10FCC,
+ 0x11047,
+ 0x1104E,
+ 0x11052,
+ 0x11066,
+ 0x110BB,
+ 0x110C2,
+ 0x110CD,
+ 0x110CE,
+ 0x11140,
+ 0x11144,
+ 0x11174,
+ 0x11176,
+ 0x111C5,
+ 0x111C9,
+ 0x111CD,
+ 0x111CE,
+ 0x111DB,
+ 0x111DC,
+ 0x111DD,
+ 0x111E0,
+ 0x111E1,
+ 0x111F5,
+ 0x11238,
+ 0x1123E,
+ 0x112A9,
+ 0x112AA,
+ 0x1144B,
+ 0x11450,
+ 0x1145A,
+ 0x1145C,
+ 0x1145D,
+ 0x1145E,
+ 0x114C6,
+ 0x114C7,
+ 0x115C1,
+ 0x115D8,
+ 0x11641,
+ 0x11644,
+ 0x11660,
+ 0x1166D,
+ 0x1173A,
+ 0x11740,
+ 0x1183B,
+ 0x1183C,
+ 0x118EA,
+ 0x118F3,
+ 0x11944,
+ 0x11947,
+ 0x119E2,
+ 0x119E3,
+ 0x11A3F,
+ 0x11A47,
+ 0x11A9A,
+ 0x11A9D,
+ 0x11A9E,
+ 0x11AA3,
+ 0x11C41,
+ 0x11C46,
+ 0x11C5A,
+ 0x11C6D,
+ 0x11C70,
+ 0x11C72,
+ 0x11EF7,
+ 0x11EF9,
+ 0x11FC0,
+ 0x11FF2,
+ 0x11FFF,
+ 0x12000,
+ 0x12470,
+ 0x12475,
+ 0x13430,
+ 0x13439,
+ 0x16A6E,
+ 0x16A70,
+ 0x16AF5,
+ 0x16AF6,
+ 0x16B37,
+ 0x16B40,
+ 0x16B44,
+ 0x16B46,
+ 0x16B5B,
+ 0x16B62,
+ 0x16E80,
+ 0x16E9B,
+ 0x16FE2,
+ 0x16FE3,
+ 0x1BC9C,
+ 0x1BC9D,
+ 0x1BC9F,
+ 0x1BCA0,
+ 0x1D000,
+ 0x1D0F6,
+ 0x1D100,
+ 0x1D127,
+ 0x1D129,
+ 0x1D15E,
+ 0x1D16A,
+ 0x1D16D,
+ 0x1D183,
+ 0x1D185,
+ 0x1D18C,
+ 0x1D1AA,
+ 0x1D1AE,
+ 0x1D1BB,
+ 0x1D1C1,
+ 0x1D1E9,
+ 0x1D200,
+ 0x1D242,
+ 0x1D245,
+ 0x1D246,
+ 0x1D2E0,
+ 0x1D2F4,
+ 0x1D300,
+ 0x1D357,
+ 0x1D360,
+ 0x1D379,
+ 0x1D800,
+ 0x1DA00,
+ 0x1DA37,
+ 0x1DA3B,
+ 0x1DA6D,
+ 0x1DA75,
+ 0x1DA76,
+ 0x1DA84,
+ 0x1DA85,
+ 0x1DA8C,
+ 0x1E14F,
+ 0x1E150,
+ 0x1E2FF,
+ 0x1E300,
+ 0x1E8C7,
+ 0x1E8D0,
+ 0x1E95E,
+ 0x1E960,
+ 0x1EC71,
+ 0x1ECB5,
+ 0x1ED01,
+ 0x1ED3E,
+ 0x1EEF0,
+ 0x1EEF2,
+ 0x1F000,
+ 0x1F02C,
+ 0x1F030,
+ 0x1F094,
+ 0x1F0A0,
+ 0x1F0AF,
+ 0x1F0B1,
+ 0x1F0C0,
+ 0x1F0C1,
+ 0x1F0D0,
+ 0x1F0D1,
+ 0x1F0F6,
+ 0x1F10B,
+ 0x1F110,
+ 0x1F12F,
+ 0x1F130,
+ 0x1F150,
+ 0x1F16A,
+ 0x1F16D,
+ 0x1F190,
+ 0x1F191,
+ 0x1F1AE,
+ 0x1F1E6,
+ 0x1F200,
+ 0x1F260,
+ 0x1F266,
+ 0x1F300,
+ 0x1F6D8,
+ 0x1F6E0,
+ 0x1F6ED,
+ 0x1F6F0,
+ 0x1F6FD,
+ 0x1F700,
+ 0x1F774,
+ 0x1F780,
+ 0x1F7D9,
+ 0x1F7E0,
+ 0x1F7EC,
+ 0x1F800,
+ 0x1F80C,
+ 0x1F810,
+ 0x1F848,
+ 0x1F850,
+ 0x1F85A,
+ 0x1F860,
+ 0x1F888,
+ 0x1F890,
+ 0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
+ 0x1F900,
+ 0x1F979,
+ 0x1F97A,
+ 0x1F9CC,
+ 0x1F9CD,
+ 0x1FA54,
+ 0x1FA60,
+ 0x1FA6E,
+ 0x1FA70,
+ 0x1FA75,
+ 0x1FA78,
+ 0x1FA7B,
+ 0x1FA80,
+ 0x1FA87,
+ 0x1FA90,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
+};
+
+# endif /* EBCDIC 1047 */
+
+# if 'A' == 193 /* EBCDIC 037 */ \
+ && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
+ && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
+
+static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */
+ 703, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x5,
+ 0x6,
+ 0xB,
+ 0xE,
+ 0x15,
+ 0x16,
+ 0x25,
+ 0x26,
+ 0x40,
+ 0x41,
+ 0x4A,
+ 0x4B,
+ 0x4C,
+ 0x51,
+ 0x5A,
+ 0x60,
+ 0x61,
+ 0x62,
+ 0x6A,
+ 0x6D,
+ 0x6E,
+ 0x70,
+ 0x79,
+ 0x7A,
+ 0x7B,
+ 0x7D,
+ 0x7E,
+ 0x80,
+ 0x8A,
+ 0x8C,
+ 0x8F,
+ 0x91,
+ 0x9F,
+ 0xA0,
+ 0xA1,
+ 0xA2,
+ 0xAA,
+ 0xAC,
+ 0xAF,
+ 0xB3,
+ 0xB4,
+ 0xB7,
+ 0xBA,
+ 0xBC,
+ 0xBF,
+ 0xC1,
+ 0xD0,
+ 0xD1,
+ 0xE0,
+ 0xE2,
+ 0x2C2,
+ 0x2C6,
+ 0x2D2,
+ 0x2D8,
+ 0x2DE,
+ 0x2E0,
+ 0x2E5,
+ 0x2EC,
+ 0x2ED,
+ 0x2EE,
+ 0x2EF,
+ 0x300,
+ 0x3F6,
+ 0x3F7,
+ 0x482,
+ 0x483,
+ 0x488,
+ 0x48A,
+ 0x55A,
+ 0x560,
+ 0x589,
+ 0x58A,
+ 0x58D,
+ 0x590,
+ 0x5BE,
+ 0x5BF,
+ 0x5C0,
+ 0x5C1,
+ 0x5C3,
+ 0x5C4,
+ 0x5C6,
+ 0x5C7,
+ 0x600,
+ 0x610,
+ 0x61B,
+ 0x61C,
+ 0x61E,
+ 0x620,
+ 0x66A,
+ 0x66E,
+ 0x6D4,
+ 0x6D5,
+ 0x6DD,
+ 0x6DF,
+ 0x6E9,
+ 0x6EA,
+ 0x700,
+ 0x70E,
+ 0x70F,
+ 0x710,
+ 0x7F6,
+ 0x7FA,
+ 0x7FE,
+ 0x800,
+ 0x830,
+ 0x83F,
+ 0x85E,
+ 0x85F,
+ 0x8E2,
+ 0x8E3,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x9F2,
+ 0x9FC,
+ 0x9FD,
+ 0x9FE,
+ 0xA76,
+ 0xA77,
+ 0xAF0,
+ 0xAF2,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB78,
+ 0xBF0,
+ 0xBFB,
+ 0xC77,
+ 0xC80,
+ 0xC84,
+ 0xC85,
+ 0xD4F,
+ 0xD50,
+ 0xD58,
+ 0xD5F,
+ 0xD70,
+ 0xD7A,
+ 0xDF4,
+ 0xDF5,
+ 0xE3F,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE5C,
+ 0xF01,
+ 0xF0B,
+ 0xF0D,
+ 0xF18,
+ 0xF1A,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF39,
+ 0xF3A,
+ 0xF3E,
+ 0xF85,
+ 0xF86,
+ 0xFBE,
+ 0xFC6,
+ 0xFC7,
+ 0xFCD,
+ 0xFCE,
+ 0xFDB,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10A0,
+ 0x10FB,
+ 0x10FC,
+ 0x1360,
+ 0x1369,
+ 0x1372,
+ 0x137D,
+ 0x1390,
+ 0x139A,
+ 0x1400,
+ 0x1401,
+ 0x166D,
+ 0x166F,
+ 0x1680,
+ 0x1681,
+ 0x169B,
+ 0x169D,
+ 0x16EB,
+ 0x16EE,
+ 0x1735,
+ 0x1737,
+ 0x17D4,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17F0,
+ 0x17FA,
+ 0x1800,
+ 0x180B,
+ 0x1940,
+ 0x1941,
+ 0x1944,
+ 0x1946,
+ 0x19DE,
+ 0x1A00,
+ 0x1A1E,
+ 0x1A20,
+ 0x1AA0,
+ 0x1AA7,
+ 0x1AA8,
+ 0x1AAE,
+ 0x1ABE,
+ 0x1ABF,
+ 0x1B5A,
+ 0x1B6B,
+ 0x1B74,
+ 0x1B7D,
+ 0x1BFC,
+ 0x1C00,
+ 0x1C3B,
+ 0x1C40,
+ 0x1C7E,
+ 0x1C80,
+ 0x1CC0,
+ 0x1CC8,
+ 0x1CD3,
+ 0x1CD4,
+ 0x2012,
+ 0x2017,
+ 0x2018,
+ 0x2019,
+ 0x201A,
+ 0x2024,
+ 0x2028,
+ 0x202A,
+ 0x2030,
+ 0x2033,
+ 0x2035,
+ 0x2036,
+ 0x2038,
+ 0x203C,
+ 0x203D,
+ 0x203E,
+ 0x2041,
+ 0x2047,
+ 0x204A,
+ 0x2054,
+ 0x2055,
+ 0x2057,
+ 0x2058,
+ 0x205F,
+ 0x20A0,
+ 0x20A8,
+ 0x20A9,
+ 0x20C0,
+ 0x20DD,
+ 0x20E1,
+ 0x20E2,
+ 0x20E5,
+ 0x2104,
+ 0x2105,
+ 0x2108,
+ 0x2109,
+ 0x2114,
+ 0x2115,
+ 0x2117,
+ 0x2118,
+ 0x211E,
+ 0x2120,
+ 0x2123,
+ 0x2124,
+ 0x2125,
+ 0x2126,
+ 0x2127,
+ 0x2128,
+ 0x2129,
+ 0x212A,
+ 0x213A,
+ 0x213B,
+ 0x2141,
+ 0x2145,
+ 0x214A,
+ 0x214E,
+ 0x214F,
+ 0x2150,
+ 0x218A,
+ 0x218C,
+ 0x2190,
+ 0x222C,
+ 0x222E,
+ 0x222F,
+ 0x2231,
+ 0x2329,
+ 0x232B,
+ 0x2427,
+ 0x2440,
+ 0x244B,
+ 0x24EB,
+ 0x2A0C,
+ 0x2A0D,
+ 0x2A74,
+ 0x2A77,
+ 0x2ADC,
+ 0x2ADD,
+ 0x2B74,
+ 0x2B76,
+ 0x2B96,
+ 0x2B97,
+ 0x2C00,
+ 0x2CE5,
+ 0x2CEB,
+ 0x2CF9,
+ 0x2D00,
+ 0x2D70,
+ 0x2D71,
+ 0x2E00,
+ 0x2E53,
+ 0x2E80,
+ 0x2E9A,
+ 0x2E9B,
+ 0x2E9F,
+ 0x2EA0,
+ 0x2EF3,
+ 0x2FF0,
+ 0x2FFC,
+ 0x3001,
+ 0x3005,
+ 0x3008,
+ 0x3021,
+ 0x3030,
+ 0x3031,
+ 0x3037,
+ 0x3038,
+ 0x303D,
+ 0x3040,
+ 0x3190,
+ 0x3192,
+ 0x31C0,
+ 0x31E4,
+ 0x3248,
+ 0x3250,
+ 0x327F,
+ 0x3280,
+ 0x4DC0,
+ 0x4E00,
+ 0xA490,
+ 0xA4C7,
+ 0xA4FE,
+ 0xA500,
+ 0xA60D,
+ 0xA610,
+ 0xA670,
+ 0xA674,
+ 0xA67E,
+ 0xA67F,
+ 0xA6F2,
+ 0xA6F8,
+ 0xA700,
+ 0xA717,
+ 0xA720,
+ 0xA722,
+ 0xA789,
+ 0xA78B,
+ 0xA828,
+ 0xA82C,
+ 0xA830,
+ 0xA83A,
+ 0xA874,
+ 0xA878,
+ 0xA8CE,
+ 0xA8D0,
+ 0xA8F8,
+ 0xA8FB,
+ 0xA8FC,
+ 0xA8FD,
+ 0xA92E,
+ 0xA930,
+ 0xA95F,
+ 0xA960,
+ 0xA9C1,
+ 0xA9CE,
+ 0xA9DE,
+ 0xA9E0,
+ 0xAA5C,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAADE,
+ 0xAAE0,
+ 0xAAF0,
+ 0xAAF2,
+ 0xAB5B,
+ 0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
+ 0xABEB,
+ 0xABEC,
+ 0xFBB2,
+ 0xFBC2,
+ 0xFD3E,
+ 0xFD40,
+ 0xFDFD,
+ 0xFDFE,
+ 0xFE45,
+ 0xFE47,
+ 0xFFF9,
+ 0xFFFE,
+ 0x10100,
+ 0x10103,
+ 0x10107,
+ 0x10134,
+ 0x10137,
+ 0x10140,
+ 0x10175,
+ 0x1018F,
+ 0x10190,
+ 0x1019D,
+ 0x101A0,
+ 0x101A1,
+ 0x101D0,
+ 0x101FD,
+ 0x102E1,
+ 0x102FC,
+ 0x10320,
+ 0x10324,
+ 0x1039F,
+ 0x103A0,
+ 0x103D0,
+ 0x103D1,
+ 0x1056F,
+ 0x10570,
+ 0x10857,
+ 0x10860,
+ 0x10877,
+ 0x10880,
+ 0x108A7,
+ 0x108B0,
+ 0x108FB,
+ 0x10900,
+ 0x10916,
+ 0x1091C,
+ 0x1091F,
+ 0x10920,
+ 0x1093F,
+ 0x10940,
+ 0x109BC,
+ 0x109BE,
+ 0x109C0,
+ 0x109D0,
+ 0x109D2,
+ 0x10A00,
+ 0x10A40,
+ 0x10A49,
+ 0x10A50,
+ 0x10A59,
+ 0x10A7D,
+ 0x10A80,
+ 0x10A9D,
+ 0x10AA0,
+ 0x10AC8,
+ 0x10AC9,
+ 0x10AEB,
+ 0x10AF7,
+ 0x10B39,
+ 0x10B40,
+ 0x10B58,
+ 0x10B60,
+ 0x10B78,
+ 0x10B80,
+ 0x10B99,
+ 0x10B9D,
+ 0x10BA9,
+ 0x10BB0,
+ 0x10CFA,
+ 0x10D00,
+ 0x10E60,
+ 0x10E7F,
+ 0x10EAD,
+ 0x10EAE,
+ 0x10F1D,
+ 0x10F27,
+ 0x10F51,
+ 0x10F5A,
+ 0x10FC5,
+ 0x10FCC,
+ 0x11047,
+ 0x1104E,
+ 0x11052,
+ 0x11066,
+ 0x110BB,
+ 0x110C2,
+ 0x110CD,
+ 0x110CE,
+ 0x11140,
+ 0x11144,
+ 0x11174,
+ 0x11176,
+ 0x111C5,
+ 0x111C9,
+ 0x111CD,
+ 0x111CE,
+ 0x111DB,
+ 0x111DC,
+ 0x111DD,
+ 0x111E0,
+ 0x111E1,
+ 0x111F5,
+ 0x11238,
+ 0x1123E,
+ 0x112A9,
+ 0x112AA,
+ 0x1144B,
+ 0x11450,
+ 0x1145A,
+ 0x1145C,
+ 0x1145D,
+ 0x1145E,
+ 0x114C6,
+ 0x114C7,
+ 0x115C1,
+ 0x115D8,
+ 0x11641,
+ 0x11644,
+ 0x11660,
+ 0x1166D,
+ 0x1173A,
+ 0x11740,
+ 0x1183B,
+ 0x1183C,
+ 0x118EA,
+ 0x118F3,
+ 0x11944,
+ 0x11947,
+ 0x119E2,
+ 0x119E3,
+ 0x11A3F,
+ 0x11A47,
+ 0x11A9A,
+ 0x11A9D,
+ 0x11A9E,
+ 0x11AA3,
+ 0x11C41,
+ 0x11C46,
+ 0x11C5A,
+ 0x11C6D,
+ 0x11C70,
+ 0x11C72,
+ 0x11EF7,
+ 0x11EF9,
+ 0x11FC0,
+ 0x11FF2,
+ 0x11FFF,
+ 0x12000,
+ 0x12470,
+ 0x12475,
+ 0x13430,
+ 0x13439,
+ 0x16A6E,
+ 0x16A70,
+ 0x16AF5,
+ 0x16AF6,
+ 0x16B37,
+ 0x16B40,
+ 0x16B44,
+ 0x16B46,
+ 0x16B5B,
+ 0x16B62,
+ 0x16E80,
+ 0x16E9B,
+ 0x16FE2,
+ 0x16FE3,
+ 0x1BC9C,
+ 0x1BC9D,
+ 0x1BC9F,
+ 0x1BCA0,
+ 0x1D000,
+ 0x1D0F6,
+ 0x1D100,
+ 0x1D127,
+ 0x1D129,
+ 0x1D15E,
+ 0x1D16A,
+ 0x1D16D,
+ 0x1D183,
+ 0x1D185,
+ 0x1D18C,
+ 0x1D1AA,
+ 0x1D1AE,
+ 0x1D1BB,
+ 0x1D1C1,
+ 0x1D1E9,
+ 0x1D200,
+ 0x1D242,
+ 0x1D245,
+ 0x1D246,
+ 0x1D2E0,
+ 0x1D2F4,
+ 0x1D300,
+ 0x1D357,
+ 0x1D360,
+ 0x1D379,
+ 0x1D800,
+ 0x1DA00,
+ 0x1DA37,
+ 0x1DA3B,
+ 0x1DA6D,
+ 0x1DA75,
+ 0x1DA76,
+ 0x1DA84,
+ 0x1DA85,
+ 0x1DA8C,
+ 0x1E14F,
+ 0x1E150,
+ 0x1E2FF,
+ 0x1E300,
+ 0x1E8C7,
+ 0x1E8D0,
+ 0x1E95E,
+ 0x1E960,
+ 0x1EC71,
+ 0x1ECB5,
+ 0x1ED01,
+ 0x1ED3E,
+ 0x1EEF0,
+ 0x1EEF2,
+ 0x1F000,
+ 0x1F02C,
+ 0x1F030,
+ 0x1F094,
+ 0x1F0A0,
+ 0x1F0AF,
+ 0x1F0B1,
+ 0x1F0C0,
+ 0x1F0C1,
+ 0x1F0D0,
+ 0x1F0D1,
+ 0x1F0F6,
+ 0x1F10B,
+ 0x1F110,
+ 0x1F12F,
+ 0x1F130,
+ 0x1F150,
+ 0x1F16A,
+ 0x1F16D,
+ 0x1F190,
+ 0x1F191,
+ 0x1F1AE,
+ 0x1F1E6,
+ 0x1F200,
+ 0x1F260,
+ 0x1F266,
+ 0x1F300,
+ 0x1F6D8,
+ 0x1F6E0,
+ 0x1F6ED,
+ 0x1F6F0,
+ 0x1F6FD,
+ 0x1F700,
+ 0x1F774,
+ 0x1F780,
+ 0x1F7D9,
+ 0x1F7E0,
+ 0x1F7EC,
+ 0x1F800,
+ 0x1F80C,
+ 0x1F810,
+ 0x1F848,
+ 0x1F850,
+ 0x1F85A,
+ 0x1F860,
+ 0x1F888,
+ 0x1F890,
+ 0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
+ 0x1F900,
+ 0x1F979,
+ 0x1F97A,
+ 0x1F9CC,
+ 0x1F9CD,
+ 0x1FA54,
+ 0x1FA60,
+ 0x1FA6E,
+ 0x1FA70,
+ 0x1FA75,
+ 0x1FA78,
+ 0x1FA7B,
+ 0x1FA80,
+ 0x1FA87,
+ 0x1FA90,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
+};
+
+# endif /* EBCDIC 037 */
+
+static const UV UNI_IDENTIFIERTYPE__OBSOLETE_invlist[] = { /* for all charsets */
+ 207, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x18D,
+ 0x18E,
+ 0x1AA,
+ 0x1AC,
+ 0x1B9,
+ 0x1BC,
+ 0x1BE,
+ 0x1C0,
+ 0x1F6,
+ 0x1F8,
+ 0x21C,
+ 0x21E,
+ 0x277,
+ 0x278,
+ 0x27C,
+ 0x27D,
+ 0x29E,
+ 0x29F,
+ 0x363,
+ 0x374,
+ 0x376,
+ 0x378,
+ 0x37F,
+ 0x380,
+ 0x3D8,
+ 0x3E2,
+ 0x3F3,
+ 0x3F4,
+ 0x3F7,
+ 0x3F9,
+ 0x3FA,
+ 0x3FC,
+ 0x460,
+ 0x48A,
+ 0x500,
+ 0x510,
+ 0x52A,
+ 0x52E,
+ 0x5A2,
+ 0x5A3,
+ 0x5C5,
+ 0x5C7,
+ 0x640,
+ 0x641,
+ 0x66E,
+ 0x670,
+ 0x68E,
+ 0x68F,
+ 0x6A1,
+ 0x6A2,
+ 0x7E8,
+ 0x7EB,
+ 0x7FA,
+ 0x7FB,
+ 0x8AD,
+ 0x8B2,
+ 0x94E,
+ 0x94F,
+ 0x951,
+ 0x953,
+ 0x978,
+ 0x979,
+ 0x980,
+ 0x981,
+ 0x9FC,
+ 0x9FD,
+ 0xC00,
+ 0xC01,
+ 0xC34,
+ 0xC35,
+ 0xC58,
+ 0xC5A,
+ 0xC81,
+ 0xC82,
+ 0xCDE,
+ 0xCDF,
+ 0xD01,
+ 0xD02,
+ 0xD04,
+ 0xD05,
+ 0xD3B,
+ 0xD3D,
+ 0xD5F,
+ 0xD60,
+ 0xDE6,
+ 0xDF0,
+ 0x10A0,
+ 0x10C6,
+ 0x10F1,
+ 0x10F7,
+ 0x1100,
+ 0x115F,
+ 0x1161,
+ 0x1200,
+ 0x1369,
+ 0x1372,
+ 0x17A8,
+ 0x17A9,
+ 0x17D1,
+ 0x17D2,
+ 0x17D3,
+ 0x17D4,
+ 0x17D8,
+ 0x17D9,
+ 0x17DD,
+ 0x17DE,
+ 0x1AB0,
+ 0x1ABE,
+ 0x1C80,
+ 0x1C89,
+ 0x1CD0,
+ 0x1CFA,
+ 0x1DC0,
+ 0x1DC4,
+ 0x1DCE,
+ 0x1DCF,
+ 0x1DD1,
+ 0x1DE7,
+ 0x2056,
+ 0x2057,
+ 0x2058,
+ 0x205F,
+ 0x2127,
+ 0x2128,
+ 0x2132,
+ 0x2133,
+ 0x214E,
+ 0x2150,
+ 0x2180,
+ 0x2189,
+ 0x2C6D,
+ 0x2C77,
+ 0x2C7E,
+ 0x2C80,
+ 0x2D00,
+ 0x2D26,
+ 0x2DE0,
+ 0x2E17,
+ 0x2E2A,
+ 0x2E33,
+ 0x2E35,
+ 0x2E36,
+ 0x2E39,
+ 0x2E3A,
+ 0x301E,
+ 0x301F,
+ 0x302E,
+ 0x3030,
+ 0x312E,
+ 0x312F,
+ 0xA610,
+ 0xA613,
+ 0xA62A,
+ 0xA62C,
+ 0xA640,
+ 0xA66F,
+ 0xA670,
+ 0xA67C,
+ 0xA680,
+ 0xA69C,
+ 0xA69E,
+ 0xA6A0,
+ 0xA700,
+ 0xA708,
+ 0xA722,
+ 0xA770,
+ 0xA771,
+ 0xA788,
+ 0xA790,
+ 0xA792,
+ 0xA794,
+ 0xA7AA,
+ 0xA7AB,
+ 0xA7AE,
+ 0xA7B0,
+ 0xA7B2,
+ 0xA7F5,
+ 0xA7F8,
+ 0xA7FB,
+ 0xA800,
+ 0xA8E0,
+ 0xA900,
+ 0xA960,
+ 0xA97D,
+ 0xA9E0,
+ 0xA9E7,
+ 0xAB30,
+ 0xAB5B,
+ 0xAB64,
+ 0xAB66,
+ 0xD7B0,
+ 0xD7C7,
+ 0xD7CB,
+ 0xD7FC,
+ 0x10140,
+ 0x10175,
+ 0x101D0,
+ 0x101FE,
+ 0x102E0,
+ 0x102FC,
+ 0x16FE3,
+ 0x16FE4,
+ 0x1B000,
+ 0x1B11F,
+ 0x1D200,
+ 0x1D246
+};
+
+# if 'A' == 65 /* ASCII/Latin1 */
+
+static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for ASCII/Latin1 */
+ 733, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x30,
+ 0x3A,
+ 0x41,
+ 0x5B,
+ 0x5F,
+ 0x60,
+ 0x61,
+ 0x7B,
+ 0xC0,
+ 0xD7,
+ 0xD8,
+ 0xF7,
+ 0xF8,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x149,
+ 0x14A,
+ 0x17F,
+ 0x18F,
+ 0x190,
+ 0x1A0,
+ 0x1A2,
+ 0x1AF,
+ 0x1B1,
+ 0x1CD,
+ 0x1DD,
+ 0x1DE,
+ 0x1E4,
+ 0x1E6,
+ 0x1F1,
+ 0x1F4,
+ 0x1F6,
+ 0x1F8,
+ 0x21C,
+ 0x21E,
+ 0x220,
+ 0x226,
+ 0x234,
+ 0x259,
+ 0x25A,
+ 0x2BB,
+ 0x2BD,
+ 0x2EC,
+ 0x2ED,
+ 0x300,
+ 0x305,
+ 0x306,
+ 0x30D,
+ 0x30F,
+ 0x312,
+ 0x313,
+ 0x315,
+ 0x31B,
+ 0x31C,
+ 0x323,
+ 0x329,
+ 0x32D,
+ 0x32F,
+ 0x330,
+ 0x332,
+ 0x335,
+ 0x336,
+ 0x338,
+ 0x33A,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x346,
+ 0x37B,
+ 0x37E,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x3CF,
+ 0x3FC,
+ 0x460,
+ 0x48A,
+ 0x500,
+ 0x510,
+ 0x52A,
+ 0x52E,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x55A,
+ 0x561,
+ 0x587,
+ 0x5B4,
+ 0x5B5,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F3,
+ 0x620,
+ 0x640,
+ 0x641,
+ 0x656,
+ 0x660,
+ 0x66A,
+ 0x670,
+ 0x673,
+ 0x674,
+ 0x675,
+ 0x679,
+ 0x68E,
+ 0x68F,
+ 0x6A1,
+ 0x6A2,
+ 0x6D4,
+ 0x6D5,
+ 0x6D6,
+ 0x6E5,
+ 0x6E7,
+ 0x6EE,
+ 0x6FD,
+ 0x6FF,
+ 0x700,
+ 0x750,
+ 0x7B2,
+ 0x8A0,
+ 0x8AD,
+ 0x8B2,
+ 0x8B3,
+ 0x8B6,
+ 0x8C8,
+ 0x901,
+ 0x94E,
+ 0x94F,
+ 0x951,
+ 0x956,
+ 0x958,
+ 0x960,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x978,
+ 0x979,
+ 0x980,
+ 0x981,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9E0,
+ 0x9E4,
+ 0x9E6,
+ 0x9F2,
+ 0x9FE,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA33,
+ 0xA35,
+ 0xA36,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA5C,
+ 0xA5D,
+ 0xA66,
+ 0xA75,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF0,
+ 0xAFA,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB44,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5F,
+ 0xB62,
+ 0xB66,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBF0,
+ 0xC01,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC34,
+ 0xC35,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC60,
+ 0xC62,
+ 0xC66,
+ 0xC70,
+ 0xC80,
+ 0xC81,
+ 0xC82,
+ 0xC84,
+ 0xC85,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD01,
+ 0xD02,
+ 0xD04,
+ 0xD05,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD3B,
+ 0xD3D,
+ 0xD44,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD4F,
+ 0xD54,
+ 0xD58,
+ 0xD60,
+ 0xD62,
+ 0xD66,
+ 0xD70,
+ 0xD7A,
+ 0xD80,
+ 0xD82,
+ 0xD84,
+ 0xD85,
+ 0xD8F,
+ 0xD91,
+ 0xD97,
+ 0xD9A,
+ 0xDA6,
+ 0xDA7,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDDF,
+ 0xDF2,
+ 0xDF3,
+ 0xE01,
+ 0xE33,
+ 0xE34,
+ 0xE3B,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEB3,
+ 0xEB4,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDE,
+ 0xEE0,
+ 0xF00,
+ 0xF01,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF3E,
+ 0xF43,
+ 0xF44,
+ 0xF48,
+ 0xF49,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF6D,
+ 0xF71,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF7A,
+ 0xF81,
+ 0xF82,
+ 0xF85,
+ 0xF86,
+ 0xF93,
+ 0xF94,
+ 0xF98,
+ 0xF99,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0xFBD,
+ 0xFC6,
+ 0xFC7,
+ 0x1000,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x10F1,
+ 0x10F7,
+ 0x10FB,
+ 0x10FD,
+ 0x1100,
+ 0x1200,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x1360,
+ 0x1380,
+ 0x1390,
+ 0x1780,
+ 0x17A3,
+ 0x17A5,
+ 0x17A8,
+ 0x17A9,
+ 0x17B4,
+ 0x17B6,
+ 0x17CB,
+ 0x17D2,
+ 0x17D3,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17DD,
+ 0x17E0,
+ 0x17EA,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC0,
+ 0x1E00,
+ 0x1E9A,
+ 0x1E9E,
+ 0x1E9F,
+ 0x1EA0,
+ 0x1EFA,
+ 0x1F00,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD6,
+ 0x1FDB,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D80,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x3005,
+ 0x3008,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A1,
+ 0x30FB,
+ 0x30FC,
+ 0x30FF,
+ 0x3105,
+ 0x312E,
+ 0x312F,
+ 0x3130,
+ 0x31A0,
+ 0x31C0,
+ 0x3400,
+ 0x4DC0,
+ 0x4E00,
+ 0x9FFD,
+ 0xA67F,
+ 0xA680,
+ 0xA717,
+ 0xA720,
+ 0xA788,
+ 0xA789,
+ 0xA78D,
+ 0xA78E,
+ 0xA792,
+ 0xA794,
+ 0xA7AA,
+ 0xA7AB,
+ 0xA7AE,
+ 0xA7AF,
+ 0xA7B8,
+ 0xA7BA,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA9E7,
+ 0xA9FF,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAA80,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB66,
+ 0xAB68,
+ 0xAC00,
+ 0xD7A4,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0x11301,
+ 0x11302,
+ 0x11303,
+ 0x11304,
+ 0x1133B,
+ 0x1133D,
+ 0x16FF0,
+ 0x16FF2,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x30000,
+ 0x3134B
+};
+
+# endif /* ASCII/Latin1 */
+
+# if 'A' == 193 /* EBCDIC 1047 */ \
+ && '\\' == 224 && '[' == 173 && ']' == 189 && '{' == 192 && '}' == 208 \
+ && '^' == 95 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
+
+static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 1047 */
+ 763, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x42,
+ 0x4A,
+ 0x51,
+ 0x5A,
+ 0x62,
+ 0x6A,
+ 0x6D,
+ 0x6E,
+ 0x70,
+ 0x79,
+ 0x80,
+ 0x8A,
+ 0x8C,
+ 0x8F,
+ 0x91,
+ 0x9A,
+ 0x9C,
+ 0x9D,
+ 0x9E,
+ 0x9F,
+ 0xA2,
+ 0xAA,
+ 0xAC,
+ 0xAD,
+ 0xAE,
+ 0xAF,
+ 0xBA,
+ 0xBB,
+ 0xC1,
+ 0xCA,
+ 0xCB,
+ 0xD0,
+ 0xD1,
+ 0xDA,
+ 0xDB,
+ 0xE0,
+ 0xE2,
+ 0xEA,
+ 0xEB,
+ 0xFA,
+ 0xFB,
+ 0xFF,
+ 0x100,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x149,
+ 0x14A,
+ 0x17F,
+ 0x18F,
+ 0x190,
+ 0x1A0,
+ 0x1A2,
+ 0x1AF,
+ 0x1B1,
+ 0x1CD,
+ 0x1DD,
+ 0x1DE,
+ 0x1E4,
+ 0x1E6,
+ 0x1F1,
+ 0x1F4,
+ 0x1F6,
+ 0x1F8,
+ 0x21C,
+ 0x21E,
+ 0x220,
+ 0x226,
+ 0x234,
+ 0x259,
+ 0x25A,
+ 0x2BB,
+ 0x2BD,
+ 0x2EC,
+ 0x2ED,
+ 0x300,
+ 0x305,
+ 0x306,
+ 0x30D,
+ 0x30F,
+ 0x312,
+ 0x313,
+ 0x315,
+ 0x31B,
+ 0x31C,
+ 0x323,
+ 0x329,
+ 0x32D,
+ 0x32F,
+ 0x330,
+ 0x332,
+ 0x335,
+ 0x336,
+ 0x338,
+ 0x33A,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x346,
+ 0x37B,
+ 0x37E,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x3CF,
+ 0x3FC,
+ 0x460,
+ 0x48A,
+ 0x500,
+ 0x510,
+ 0x52A,
+ 0x52E,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x55A,
+ 0x561,
+ 0x587,
+ 0x5B4,
+ 0x5B5,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F3,
+ 0x620,
+ 0x640,
+ 0x641,
+ 0x656,
+ 0x660,
+ 0x66A,
+ 0x670,
+ 0x673,
+ 0x674,
+ 0x675,
+ 0x679,
+ 0x68E,
+ 0x68F,
+ 0x6A1,
+ 0x6A2,
+ 0x6D4,
+ 0x6D5,
+ 0x6D6,
+ 0x6E5,
+ 0x6E7,
+ 0x6EE,
+ 0x6FD,
+ 0x6FF,
+ 0x700,
+ 0x750,
+ 0x7B2,
+ 0x8A0,
+ 0x8AD,
+ 0x8B2,
+ 0x8B3,
+ 0x8B6,
+ 0x8C8,
+ 0x901,
+ 0x94E,
+ 0x94F,
+ 0x951,
+ 0x956,
+ 0x958,
+ 0x960,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x978,
+ 0x979,
+ 0x980,
+ 0x981,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9E0,
+ 0x9E4,
+ 0x9E6,
+ 0x9F2,
+ 0x9FE,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA33,
+ 0xA35,
+ 0xA36,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA5C,
+ 0xA5D,
+ 0xA66,
+ 0xA75,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF0,
+ 0xAFA,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB44,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5F,
+ 0xB62,
+ 0xB66,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBF0,
+ 0xC01,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC34,
+ 0xC35,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC60,
+ 0xC62,
+ 0xC66,
+ 0xC70,
+ 0xC80,
+ 0xC81,
+ 0xC82,
+ 0xC84,
+ 0xC85,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD01,
+ 0xD02,
+ 0xD04,
+ 0xD05,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD3B,
+ 0xD3D,
+ 0xD44,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD4F,
+ 0xD54,
+ 0xD58,
+ 0xD60,
+ 0xD62,
+ 0xD66,
+ 0xD70,
+ 0xD7A,
+ 0xD80,
+ 0xD82,
+ 0xD84,
+ 0xD85,
+ 0xD8F,
+ 0xD91,
+ 0xD97,
+ 0xD9A,
+ 0xDA6,
+ 0xDA7,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDDF,
+ 0xDF2,
+ 0xDF3,
+ 0xE01,
+ 0xE33,
+ 0xE34,
+ 0xE3B,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEB3,
+ 0xEB4,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDE,
+ 0xEE0,
+ 0xF00,
+ 0xF01,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF3E,
+ 0xF43,
+ 0xF44,
+ 0xF48,
+ 0xF49,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF6D,
+ 0xF71,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF7A,
+ 0xF81,
+ 0xF82,
+ 0xF85,
+ 0xF86,
+ 0xF93,
+ 0xF94,
+ 0xF98,
+ 0xF99,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0xFBD,
+ 0xFC6,
+ 0xFC7,
+ 0x1000,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x10F1,
+ 0x10F7,
+ 0x10FB,
+ 0x10FD,
+ 0x1100,
+ 0x1200,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x1360,
+ 0x1380,
+ 0x1390,
+ 0x1780,
+ 0x17A3,
+ 0x17A5,
+ 0x17A8,
+ 0x17A9,
+ 0x17B4,
+ 0x17B6,
+ 0x17CB,
+ 0x17D2,
+ 0x17D3,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17DD,
+ 0x17E0,
+ 0x17EA,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC0,
+ 0x1E00,
+ 0x1E9A,
+ 0x1E9E,
+ 0x1E9F,
+ 0x1EA0,
+ 0x1EFA,
+ 0x1F00,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD6,
+ 0x1FDB,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D80,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x3005,
+ 0x3008,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A1,
+ 0x30FB,
+ 0x30FC,
+ 0x30FF,
+ 0x3105,
+ 0x312E,
+ 0x312F,
+ 0x3130,
+ 0x31A0,
+ 0x31C0,
+ 0x3400,
+ 0x4DC0,
+ 0x4E00,
+ 0x9FFD,
+ 0xA67F,
+ 0xA680,
+ 0xA717,
+ 0xA720,
+ 0xA788,
+ 0xA789,
+ 0xA78D,
+ 0xA78E,
+ 0xA792,
+ 0xA794,
+ 0xA7AA,
+ 0xA7AB,
+ 0xA7AE,
+ 0xA7AF,
+ 0xA7B8,
+ 0xA7BA,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA9E7,
+ 0xA9FF,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAA80,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB66,
+ 0xAB68,
+ 0xAC00,
+ 0xD7A4,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0x11301,
+ 0x11302,
+ 0x11303,
+ 0x11304,
+ 0x1133B,
+ 0x1133D,
+ 0x16FF0,
+ 0x16FF2,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x30000,
+ 0x3134B
+};
+
+# endif /* EBCDIC 1047 */
+
+# if 'A' == 193 /* EBCDIC 037 */ \
+ && '\\' == 224 && '[' == 186 && ']' == 187 && '{' == 192 && '}' == 208 \
+ && '^' == 176 && '~' == 161 && '!' == 90 && '#' == 123 && '|' == 79 \
+ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
+
+static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 037 */
+ 759, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x42,
+ 0x4A,
+ 0x51,
+ 0x5A,
+ 0x62,
+ 0x6A,
+ 0x6D,
+ 0x6E,
+ 0x70,
+ 0x79,
+ 0x80,
+ 0x8A,
+ 0x8C,
+ 0x8F,
+ 0x91,
+ 0x9A,
+ 0x9C,
+ 0x9D,
+ 0x9E,
+ 0x9F,
+ 0xA2,
+ 0xAA,
+ 0xAC,
+ 0xAF,
+ 0xC1,
+ 0xCA,
+ 0xCB,
+ 0xD0,
+ 0xD1,
+ 0xDA,
+ 0xDB,
+ 0xE0,
+ 0xE2,
+ 0xEA,
+ 0xEB,
+ 0xFA,
+ 0xFB,
+ 0xFF,
+ 0x100,
+ 0x132,
+ 0x134,
+ 0x13F,
+ 0x141,
+ 0x149,
+ 0x14A,
+ 0x17F,
+ 0x18F,
+ 0x190,
+ 0x1A0,
+ 0x1A2,
+ 0x1AF,
+ 0x1B1,
+ 0x1CD,
+ 0x1DD,
+ 0x1DE,
+ 0x1E4,
+ 0x1E6,
+ 0x1F1,
+ 0x1F4,
+ 0x1F6,
+ 0x1F8,
+ 0x21C,
+ 0x21E,
+ 0x220,
+ 0x226,
+ 0x234,
+ 0x259,
+ 0x25A,
+ 0x2BB,
+ 0x2BD,
+ 0x2EC,
+ 0x2ED,
+ 0x300,
+ 0x305,
+ 0x306,
+ 0x30D,
+ 0x30F,
+ 0x312,
+ 0x313,
+ 0x315,
+ 0x31B,
+ 0x31C,
+ 0x323,
+ 0x329,
+ 0x32D,
+ 0x32F,
+ 0x330,
+ 0x332,
+ 0x335,
+ 0x336,
+ 0x338,
+ 0x33A,
+ 0x342,
+ 0x343,
+ 0x345,
+ 0x346,
+ 0x37B,
+ 0x37E,
+ 0x386,
+ 0x387,
+ 0x388,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x3CF,
+ 0x3FC,
+ 0x460,
+ 0x48A,
+ 0x500,
+ 0x510,
+ 0x52A,
+ 0x52E,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x55A,
+ 0x561,
+ 0x587,
+ 0x5B4,
+ 0x5B5,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F3,
+ 0x620,
+ 0x640,
+ 0x641,
+ 0x656,
+ 0x660,
+ 0x66A,
+ 0x670,
+ 0x673,
+ 0x674,
+ 0x675,
+ 0x679,
+ 0x68E,
+ 0x68F,
+ 0x6A1,
+ 0x6A2,
+ 0x6D4,
+ 0x6D5,
+ 0x6D6,
+ 0x6E5,
+ 0x6E7,
+ 0x6EE,
+ 0x6FD,
+ 0x6FF,
+ 0x700,
+ 0x750,
+ 0x7B2,
+ 0x8A0,
+ 0x8AD,
+ 0x8B2,
+ 0x8B3,
+ 0x8B6,
+ 0x8C8,
+ 0x901,
+ 0x94E,
+ 0x94F,
+ 0x951,
+ 0x956,
+ 0x958,
+ 0x960,
+ 0x964,
+ 0x966,
+ 0x970,
+ 0x971,
+ 0x978,
+ 0x979,
+ 0x980,
+ 0x981,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9E0,
+ 0x9E4,
+ 0x9E6,
+ 0x9F2,
+ 0x9FE,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA33,
+ 0xA35,
+ 0xA36,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA5C,
+ 0xA5D,
+ 0xA66,
+ 0xA75,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF0,
+ 0xAFA,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB44,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5F,
+ 0xB62,
+ 0xB66,
+ 0xB70,
+ 0xB71,
+ 0xB72,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBF0,
+ 0xC01,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC34,
+ 0xC35,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC60,
+ 0xC62,
+ 0xC66,
+ 0xC70,
+ 0xC80,
+ 0xC81,
+ 0xC82,
+ 0xC84,
+ 0xC85,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD01,
+ 0xD02,
+ 0xD04,
+ 0xD05,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD3B,
+ 0xD3D,
+ 0xD44,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD4F,
+ 0xD54,
+ 0xD58,
+ 0xD60,
+ 0xD62,
+ 0xD66,
+ 0xD70,
+ 0xD7A,
+ 0xD80,
+ 0xD82,
+ 0xD84,
+ 0xD85,
+ 0xD8F,
+ 0xD91,
+ 0xD97,
+ 0xD9A,
+ 0xDA6,
+ 0xDA7,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDDF,
+ 0xDF2,
+ 0xDF3,
+ 0xE01,
+ 0xE33,
+ 0xE34,
+ 0xE3B,
+ 0xE40,
+ 0xE4F,
+ 0xE50,
+ 0xE5A,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEB3,
+ 0xEB4,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDE,
+ 0xEE0,
+ 0xF00,
+ 0xF01,
+ 0xF20,
+ 0xF2A,
+ 0xF35,
+ 0xF36,
+ 0xF37,
+ 0xF38,
+ 0xF3E,
+ 0xF43,
+ 0xF44,
+ 0xF48,
+ 0xF49,
+ 0xF4D,
+ 0xF4E,
+ 0xF52,
+ 0xF53,
+ 0xF57,
+ 0xF58,
+ 0xF5C,
+ 0xF5D,
+ 0xF69,
+ 0xF6A,
+ 0xF6D,
+ 0xF71,
+ 0xF73,
+ 0xF74,
+ 0xF75,
+ 0xF7A,
+ 0xF81,
+ 0xF82,
+ 0xF85,
+ 0xF86,
+ 0xF93,
+ 0xF94,
+ 0xF98,
+ 0xF99,
+ 0xF9D,
+ 0xF9E,
+ 0xFA2,
+ 0xFA3,
+ 0xFA7,
+ 0xFA8,
+ 0xFAC,
+ 0xFAD,
+ 0xFB9,
+ 0xFBA,
+ 0xFBD,
+ 0xFC6,
+ 0xFC7,
+ 0x1000,
+ 0x104A,
+ 0x1050,
+ 0x109E,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x10F1,
+ 0x10F7,
+ 0x10FB,
+ 0x10FD,
+ 0x1100,
+ 0x1200,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x1360,
+ 0x1380,
+ 0x1390,
+ 0x1780,
+ 0x17A3,
+ 0x17A5,
+ 0x17A8,
+ 0x17A9,
+ 0x17B4,
+ 0x17B6,
+ 0x17CB,
+ 0x17D2,
+ 0x17D3,
+ 0x17D7,
+ 0x17D8,
+ 0x17DC,
+ 0x17DD,
+ 0x17E0,
+ 0x17EA,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC0,
+ 0x1E00,
+ 0x1E9A,
+ 0x1E9E,
+ 0x1E9F,
+ 0x1EA0,
+ 0x1EFA,
+ 0x1F00,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F71,
+ 0x1F72,
+ 0x1F73,
+ 0x1F74,
+ 0x1F75,
+ 0x1F76,
+ 0x1F77,
+ 0x1F78,
+ 0x1F79,
+ 0x1F7A,
+ 0x1F7B,
+ 0x1F7C,
+ 0x1F7D,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FBB,
+ 0x1FBC,
+ 0x1FBD,
+ 0x1FC2,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FC9,
+ 0x1FCA,
+ 0x1FCB,
+ 0x1FCC,
+ 0x1FCD,
+ 0x1FD0,
+ 0x1FD3,
+ 0x1FD6,
+ 0x1FDB,
+ 0x1FE0,
+ 0x1FE3,
+ 0x1FE4,
+ 0x1FEB,
+ 0x1FEC,
+ 0x1FED,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FF9,
+ 0x1FFA,
+ 0x1FFB,
+ 0x1FFC,
+ 0x1FFD,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D80,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x3005,
+ 0x3008,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x309B,
+ 0x309D,
+ 0x309F,
+ 0x30A1,
+ 0x30FB,
+ 0x30FC,
+ 0x30FF,
+ 0x3105,
+ 0x312E,
+ 0x312F,
+ 0x3130,
+ 0x31A0,
+ 0x31C0,
+ 0x3400,
+ 0x4DC0,
+ 0x4E00,
+ 0x9FFD,
+ 0xA67F,
+ 0xA680,
+ 0xA717,
+ 0xA720,
+ 0xA788,
+ 0xA789,
+ 0xA78D,
+ 0xA78E,
+ 0xA792,
+ 0xA794,
+ 0xA7AA,
+ 0xA7AB,
+ 0xA7AE,
+ 0xA7AF,
+ 0xA7B8,
+ 0xA7BA,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA9E7,
+ 0xA9FF,
+ 0xAA60,
+ 0xAA77,
+ 0xAA7A,
+ 0xAA80,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB66,
+ 0xAB68,
+ 0xAC00,
+ 0xD7A4,
+ 0xFA0E,
+ 0xFA10,
+ 0xFA11,
+ 0xFA12,
+ 0xFA13,
+ 0xFA15,
+ 0xFA1F,
+ 0xFA20,
+ 0xFA21,
+ 0xFA22,
+ 0xFA23,
+ 0xFA25,
+ 0xFA27,
+ 0xFA2A,
+ 0x11301,
+ 0x11302,
+ 0x11303,
+ 0x11304,
+ 0x1133B,
+ 0x1133D,
+ 0x16FF0,
+ 0x16FF2,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x20000,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x30000,
+ 0x3134B
+};
+
+# endif /* EBCDIC 037 */
+
+static const UV UNI_IDENTIFIERTYPE__TECHNICAL_invlist[] = { /* for all charsets */
+ 191, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x180,
+ 0x181,
+ 0x18D,
+ 0x18E,
+ 0x1AA,
+ 0x1AC,
+ 0x1BA,
+ 0x1BC,
+ 0x1BE,
+ 0x1BF,
+ 0x1C0,
+ 0x1C4,
+ 0x234,
+ 0x237,
+ 0x250,
+ 0x259,
+ 0x25A,
+ 0x2B0,
+ 0x2B9,
+ 0x2BB,
+ 0x2BD,
+ 0x2C2,
+ 0x2C6,
+ 0x2D2,
+ 0x2EE,
+ 0x2EF,
+ 0x30E,
+ 0x30F,
+ 0x312,
+ 0x313,
+ 0x315,
+ 0x316,
+ 0x317,
+ 0x31B,
+ 0x31C,
+ 0x321,
+ 0x329,
+ 0x32D,
+ 0x32F,
+ 0x330,
+ 0x333,
+ 0x334,
+ 0x337,
+ 0x338,
+ 0x33A,
+ 0x340,
+ 0x346,
+ 0x34F,
+ 0x350,
+ 0x358,
+ 0x359,
+ 0x363,
+ 0x3CF,
+ 0x3D0,
+ 0x3D7,
+ 0x3D8,
+ 0x3F3,
+ 0x3F4,
+ 0x484,
+ 0x488,
+ 0x560,
+ 0x561,
+ 0x588,
+ 0x589,
+ 0x5C7,
+ 0x5C8,
+ 0x740,
+ 0x74B,
+ 0x953,
+ 0x955,
+ 0xD04,
+ 0xD05,
+ 0xD81,
+ 0xD82,
+ 0xD8F,
+ 0xD91,
+ 0xDA6,
+ 0xDA7,
+ 0xDDF,
+ 0xDE0,
+ 0xDF3,
+ 0xDF4,
+ 0xF18,
+ 0xF1A,
+ 0x17CB,
+ 0x17D2,
+ 0x17DD,
+ 0x17DE,
+ 0x1ABF,
+ 0x1AC1,
+ 0x1D00,
+ 0x1D2C,
+ 0x1D2F,
+ 0x1D30,
+ 0x1D3B,
+ 0x1D3C,
+ 0x1D4E,
+ 0x1D4F,
+ 0x1D6B,
+ 0x1D78,
+ 0x1D79,
+ 0x1D9B,
+ 0x1DC0,
+ 0x1DFA,
+ 0x1DFB,
+ 0x1E00,
+ 0x1E9C,
+ 0x1E9E,
+ 0x1E9F,
+ 0x1EA0,
+ 0x1EFA,
+ 0x1F00,
+ 0x203F,
+ 0x2041,
+ 0x20D0,
+ 0x20F1,
+ 0x2118,
+ 0x2119,
+ 0x212E,
+ 0x212F,
+ 0x2180,
+ 0x2184,
+ 0x24EB,
+ 0x2500,
+ 0x2800,
+ 0x2900,
+ 0x2C60,
+ 0x2C68,
+ 0x2C77,
+ 0x2C7C,
+ 0x2CF0,
+ 0x2CF2,
+ 0x2E00,
+ 0x2E0E,
+ 0x3021,
+ 0x3030,
+ 0x3031,
+ 0x3036,
+ 0x303B,
+ 0x303D,
+ 0x31F0,
+ 0x3200,
+ 0x327F,
+ 0x3280,
+ 0x4DC0,
+ 0x4E00,
+ 0xA708,
+ 0xA717,
+ 0xA722,
+ 0xA730,
+ 0xA78E,
+ 0xA78F,
+ 0xA7AF,
+ 0xA7B0,
+ 0xA7BA,
+ 0xA7C0,
+ 0xA7FA,
+ 0xA7FB,
+ 0xAB68,
+ 0xAB69,
+ 0xFB1E,
+ 0xFB1F,
+ 0xFBB2,
+ 0xFBC2,
+ 0xFD3E,
+ 0xFD40,
+ 0xFDFD,
+ 0xFDFE,
+ 0xFE20,
+ 0xFE30,
+ 0xFE45,
+ 0xFE47,
+ 0xFE73,
+ 0xFE74,
+ 0x1D000,
+ 0x1D0F6,
+ 0x1D100,
+ 0x1D127,
+ 0x1D129,
+ 0x1D15E,
+ 0x1D165,
+ 0x1D173,
+ 0x1D17B,
+ 0x1D1BB,
+ 0x1D1C1,
+ 0x1D1E9,
+ 0x1D242,
+ 0x1D245,
+ 0x1D300,
+ 0x1D357
+};
+
+static const UV UNI_IDENTIFIERTYPE__UNCOMMONUSE_invlist[] = { /* for all charsets */
+ 153, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x181,
+ 0x18D,
+ 0x18E,
+ 0x18F,
+ 0x190,
+ 0x1A0,
+ 0x1A2,
+ 0x1AA,
+ 0x1AC,
+ 0x1AF,
+ 0x1B1,
+ 0x1B9,
+ 0x1BC,
+ 0x1BE,
+ 0x1DD,
+ 0x1DE,
+ 0x1E4,
+ 0x1E6,
+ 0x220,
+ 0x226,
+ 0x237,
+ 0x250,
+ 0x253,
+ 0x255,
+ 0x256,
+ 0x258,
+ 0x25B,
+ 0x25C,
+ 0x263,
+ 0x264,
+ 0x268,
+ 0x26A,
+ 0x272,
+ 0x273,
+ 0x289,
+ 0x28A,
+ 0x292,
+ 0x293,
+ 0x305,
+ 0x306,
+ 0x30D,
+ 0x30E,
+ 0x316,
+ 0x317,
+ 0x321,
+ 0x323,
+ 0x332,
+ 0x333,
+ 0x334,
+ 0x335,
+ 0x336,
+ 0x337,
+ 0x358,
+ 0x359,
+ 0x591,
+ 0x5B4,
+ 0x5B5,
+ 0x5BE,
+ 0x5BF,
+ 0x5C0,
+ 0x5C1,
+ 0x5C3,
+ 0x5C4,
+ 0x5C6,
+ 0x5C7,
+ 0x5C8,
+ 0x610,
+ 0x61B,
+ 0x656,
+ 0x660,
+ 0x6D6,
+ 0x6DD,
+ 0x6DF,
+ 0x6E5,
+ 0x6E7,
+ 0x6E9,
+ 0x6EA,
+ 0x6EE,
+ 0x8B3,
+ 0x8B5,
+ 0x8D3,
+ 0x8E2,
+ 0x8E3,
+ 0x901,
+ 0x955,
+ 0x956,
+ 0xA51,
+ 0xA52,
+ 0xA75,
+ 0xA76,
+ 0xAF9,
+ 0xAFA,
+ 0xB44,
+ 0xB45,
+ 0xB62,
+ 0xB64,
+ 0xC5A,
+ 0xC5B,
+ 0xC62,
+ 0xC64,
+ 0xD44,
+ 0xD45,
+ 0xD62,
+ 0xD64,
+ 0xD8F,
+ 0xD91,
+ 0xDA6,
+ 0xDA7,
+ 0xDDF,
+ 0xDE0,
+ 0xDF3,
+ 0xDF4,
+ 0xF39,
+ 0xF3A,
+ 0x18A9,
+ 0x18AA,
+ 0x2054,
+ 0x2055,
+ 0x218A,
+ 0x218C,
+ 0x2BEC,
+ 0x2BF0,
+ 0x2C68,
+ 0x2C6D,
+ 0xA66F,
+ 0xA670,
+ 0xA67C,
+ 0xA67E,
+ 0xA69E,
+ 0xA69F,
+ 0xA78B,
+ 0xA78D,
+ 0xA78F,
+ 0xA790,
+ 0xA7B2,
+ 0xA7B8,
+ 0xA8FC,
+ 0xA8FE,
+ 0xAB60,
+ 0xAB64,
+ 0xFB1E,
+ 0xFB1F,
+ 0xFE2E,
+ 0xFE30,
+ 0x16A40,
+ 0x16A5F,
+ 0x16A60,
+ 0x16A6A,
+ 0x1D1DE,
+ 0x1D1E9,
+ 0x1F54F,
+ 0x1F550
+};
+
+static const UV UNI_IDEO_invlist[] = { /* for all charsets */
+ 39, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
0x3006,
0x3008,
0x3021,
@@ -253476,21 +274676,25 @@ static const UV UNI_IDEO_invlist[] = { /* for all charsets */
0x3038,
0x303B,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xF900,
0xFA6E,
0xFA70,
0xFADA,
+ 0x16FE4,
+ 0x16FE5,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B170,
0x1B2FC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -253500,7 +274704,9 @@ static const UV UNI_IDEO_invlist[] = { /* for all charsets */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
static const UV UNI_IDEOGRAPHICSYMBOLS_invlist[] = { /* for all charsets */
@@ -253516,7 +274722,7 @@ static const UV UNI_IDEOGRAPHICSYMBOLS_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
- 1219, /* Number of elements */
+ 1245, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -253622,7 +274828,7 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -253773,7 +274979,7 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -254112,13 +275318,13 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -254142,8 +275348,8 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -254218,7 +275424,7 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -254387,12 +275593,18 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -254405,6 +275617,8 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -254456,7 +275670,7 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -254482,7 +275696,19 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -254531,6 +275757,8 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -254570,7 +275798,9 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -254728,7 +275958,7 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -254738,7 +275968,9 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* ASCII/Latin1 */
@@ -254749,7 +275981,7 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
- 1245, /* Number of elements */
+ 1271, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -254881,7 +276113,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -255032,7 +276264,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -255371,13 +276603,13 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -255401,8 +276633,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -255477,7 +276709,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -255646,12 +276878,18 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -255664,6 +276902,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -255715,7 +276955,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -255741,7 +276981,19 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -255790,6 +277042,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -255829,7 +277083,9 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -255987,7 +277243,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -255997,7 +277253,9 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 1047 */
@@ -256008,7 +277266,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
- 1241, /* Number of elements */
+ 1267, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -256136,7 +277394,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -256287,7 +277545,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -256626,13 +277884,13 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -256656,8 +277914,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -256732,7 +277990,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -256901,12 +278159,18 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -256919,6 +278183,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -256970,7 +278236,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -256996,7 +278262,19 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -257045,6 +278323,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -257084,7 +278364,9 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -257242,7 +278524,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -257252,7 +278534,9 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 037 */
@@ -263250,6 +284534,1385 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */
0x110000
};
+static const UV UNI_IN__13_invlist[] = { /* for all charsets */
+ 1372, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 0, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x378,
+ 0x37A,
+ 0x380,
+ 0x384,
+ 0x38B,
+ 0x38C,
+ 0x38D,
+ 0x38E,
+ 0x3A2,
+ 0x3A3,
+ 0x530,
+ 0x531,
+ 0x557,
+ 0x559,
+ 0x58B,
+ 0x58D,
+ 0x590,
+ 0x591,
+ 0x5C8,
+ 0x5D0,
+ 0x5EB,
+ 0x5EF,
+ 0x5F5,
+ 0x600,
+ 0x61D,
+ 0x61E,
+ 0x70E,
+ 0x70F,
+ 0x74B,
+ 0x74D,
+ 0x7B2,
+ 0x7C0,
+ 0x7FB,
+ 0x7FD,
+ 0x82E,
+ 0x830,
+ 0x83F,
+ 0x840,
+ 0x85C,
+ 0x85E,
+ 0x85F,
+ 0x860,
+ 0x86B,
+ 0x8A0,
+ 0x8B5,
+ 0x8B6,
+ 0x8C8,
+ 0x8D3,
+ 0x984,
+ 0x985,
+ 0x98D,
+ 0x98F,
+ 0x991,
+ 0x993,
+ 0x9A9,
+ 0x9AA,
+ 0x9B1,
+ 0x9B2,
+ 0x9B3,
+ 0x9B6,
+ 0x9BA,
+ 0x9BC,
+ 0x9C5,
+ 0x9C7,
+ 0x9C9,
+ 0x9CB,
+ 0x9CF,
+ 0x9D7,
+ 0x9D8,
+ 0x9DC,
+ 0x9DE,
+ 0x9DF,
+ 0x9E4,
+ 0x9E6,
+ 0x9FF,
+ 0xA01,
+ 0xA04,
+ 0xA05,
+ 0xA0B,
+ 0xA0F,
+ 0xA11,
+ 0xA13,
+ 0xA29,
+ 0xA2A,
+ 0xA31,
+ 0xA32,
+ 0xA34,
+ 0xA35,
+ 0xA37,
+ 0xA38,
+ 0xA3A,
+ 0xA3C,
+ 0xA3D,
+ 0xA3E,
+ 0xA43,
+ 0xA47,
+ 0xA49,
+ 0xA4B,
+ 0xA4E,
+ 0xA51,
+ 0xA52,
+ 0xA59,
+ 0xA5D,
+ 0xA5E,
+ 0xA5F,
+ 0xA66,
+ 0xA77,
+ 0xA81,
+ 0xA84,
+ 0xA85,
+ 0xA8E,
+ 0xA8F,
+ 0xA92,
+ 0xA93,
+ 0xAA9,
+ 0xAAA,
+ 0xAB1,
+ 0xAB2,
+ 0xAB4,
+ 0xAB5,
+ 0xABA,
+ 0xABC,
+ 0xAC6,
+ 0xAC7,
+ 0xACA,
+ 0xACB,
+ 0xACE,
+ 0xAD0,
+ 0xAD1,
+ 0xAE0,
+ 0xAE4,
+ 0xAE6,
+ 0xAF2,
+ 0xAF9,
+ 0xB00,
+ 0xB01,
+ 0xB04,
+ 0xB05,
+ 0xB0D,
+ 0xB0F,
+ 0xB11,
+ 0xB13,
+ 0xB29,
+ 0xB2A,
+ 0xB31,
+ 0xB32,
+ 0xB34,
+ 0xB35,
+ 0xB3A,
+ 0xB3C,
+ 0xB45,
+ 0xB47,
+ 0xB49,
+ 0xB4B,
+ 0xB4E,
+ 0xB55,
+ 0xB58,
+ 0xB5C,
+ 0xB5E,
+ 0xB5F,
+ 0xB64,
+ 0xB66,
+ 0xB78,
+ 0xB82,
+ 0xB84,
+ 0xB85,
+ 0xB8B,
+ 0xB8E,
+ 0xB91,
+ 0xB92,
+ 0xB96,
+ 0xB99,
+ 0xB9B,
+ 0xB9C,
+ 0xB9D,
+ 0xB9E,
+ 0xBA0,
+ 0xBA3,
+ 0xBA5,
+ 0xBA8,
+ 0xBAB,
+ 0xBAE,
+ 0xBBA,
+ 0xBBE,
+ 0xBC3,
+ 0xBC6,
+ 0xBC9,
+ 0xBCA,
+ 0xBCE,
+ 0xBD0,
+ 0xBD1,
+ 0xBD7,
+ 0xBD8,
+ 0xBE6,
+ 0xBFB,
+ 0xC00,
+ 0xC0D,
+ 0xC0E,
+ 0xC11,
+ 0xC12,
+ 0xC29,
+ 0xC2A,
+ 0xC3A,
+ 0xC3D,
+ 0xC45,
+ 0xC46,
+ 0xC49,
+ 0xC4A,
+ 0xC4E,
+ 0xC55,
+ 0xC57,
+ 0xC58,
+ 0xC5B,
+ 0xC60,
+ 0xC64,
+ 0xC66,
+ 0xC70,
+ 0xC77,
+ 0xC8D,
+ 0xC8E,
+ 0xC91,
+ 0xC92,
+ 0xCA9,
+ 0xCAA,
+ 0xCB4,
+ 0xCB5,
+ 0xCBA,
+ 0xCBC,
+ 0xCC5,
+ 0xCC6,
+ 0xCC9,
+ 0xCCA,
+ 0xCCE,
+ 0xCD5,
+ 0xCD7,
+ 0xCDE,
+ 0xCDF,
+ 0xCE0,
+ 0xCE4,
+ 0xCE6,
+ 0xCF0,
+ 0xCF1,
+ 0xCF3,
+ 0xD00,
+ 0xD0D,
+ 0xD0E,
+ 0xD11,
+ 0xD12,
+ 0xD45,
+ 0xD46,
+ 0xD49,
+ 0xD4A,
+ 0xD50,
+ 0xD54,
+ 0xD64,
+ 0xD66,
+ 0xD80,
+ 0xD81,
+ 0xD84,
+ 0xD85,
+ 0xD97,
+ 0xD9A,
+ 0xDB2,
+ 0xDB3,
+ 0xDBC,
+ 0xDBD,
+ 0xDBE,
+ 0xDC0,
+ 0xDC7,
+ 0xDCA,
+ 0xDCB,
+ 0xDCF,
+ 0xDD5,
+ 0xDD6,
+ 0xDD7,
+ 0xDD8,
+ 0xDE0,
+ 0xDE6,
+ 0xDF0,
+ 0xDF2,
+ 0xDF5,
+ 0xE01,
+ 0xE3B,
+ 0xE3F,
+ 0xE5C,
+ 0xE81,
+ 0xE83,
+ 0xE84,
+ 0xE85,
+ 0xE86,
+ 0xE8B,
+ 0xE8C,
+ 0xEA4,
+ 0xEA5,
+ 0xEA6,
+ 0xEA7,
+ 0xEBE,
+ 0xEC0,
+ 0xEC5,
+ 0xEC6,
+ 0xEC7,
+ 0xEC8,
+ 0xECE,
+ 0xED0,
+ 0xEDA,
+ 0xEDC,
+ 0xEE0,
+ 0xF00,
+ 0xF48,
+ 0xF49,
+ 0xF6D,
+ 0xF71,
+ 0xF98,
+ 0xF99,
+ 0xFBD,
+ 0xFBE,
+ 0xFCD,
+ 0xFCE,
+ 0xFDB,
+ 0x1000,
+ 0x10C6,
+ 0x10C7,
+ 0x10C8,
+ 0x10CD,
+ 0x10CE,
+ 0x10D0,
+ 0x1249,
+ 0x124A,
+ 0x124E,
+ 0x1250,
+ 0x1257,
+ 0x1258,
+ 0x1259,
+ 0x125A,
+ 0x125E,
+ 0x1260,
+ 0x1289,
+ 0x128A,
+ 0x128E,
+ 0x1290,
+ 0x12B1,
+ 0x12B2,
+ 0x12B6,
+ 0x12B8,
+ 0x12BF,
+ 0x12C0,
+ 0x12C1,
+ 0x12C2,
+ 0x12C6,
+ 0x12C8,
+ 0x12D7,
+ 0x12D8,
+ 0x1311,
+ 0x1312,
+ 0x1316,
+ 0x1318,
+ 0x135B,
+ 0x135D,
+ 0x137D,
+ 0x1380,
+ 0x139A,
+ 0x13A0,
+ 0x13F6,
+ 0x13F8,
+ 0x13FE,
+ 0x1400,
+ 0x169D,
+ 0x16A0,
+ 0x16F9,
+ 0x1700,
+ 0x170D,
+ 0x170E,
+ 0x1715,
+ 0x1720,
+ 0x1737,
+ 0x1740,
+ 0x1754,
+ 0x1760,
+ 0x176D,
+ 0x176E,
+ 0x1771,
+ 0x1772,
+ 0x1774,
+ 0x1780,
+ 0x17DE,
+ 0x17E0,
+ 0x17EA,
+ 0x17F0,
+ 0x17FA,
+ 0x1800,
+ 0x180F,
+ 0x1810,
+ 0x181A,
+ 0x1820,
+ 0x1879,
+ 0x1880,
+ 0x18AB,
+ 0x18B0,
+ 0x18F6,
+ 0x1900,
+ 0x191F,
+ 0x1920,
+ 0x192C,
+ 0x1930,
+ 0x193C,
+ 0x1940,
+ 0x1941,
+ 0x1944,
+ 0x196E,
+ 0x1970,
+ 0x1975,
+ 0x1980,
+ 0x19AC,
+ 0x19B0,
+ 0x19CA,
+ 0x19D0,
+ 0x19DB,
+ 0x19DE,
+ 0x1A1C,
+ 0x1A1E,
+ 0x1A5F,
+ 0x1A60,
+ 0x1A7D,
+ 0x1A7F,
+ 0x1A8A,
+ 0x1A90,
+ 0x1A9A,
+ 0x1AA0,
+ 0x1AAE,
+ 0x1AB0,
+ 0x1AC1,
+ 0x1B00,
+ 0x1B4C,
+ 0x1B50,
+ 0x1B7D,
+ 0x1B80,
+ 0x1BF4,
+ 0x1BFC,
+ 0x1C38,
+ 0x1C3B,
+ 0x1C4A,
+ 0x1C4D,
+ 0x1C89,
+ 0x1C90,
+ 0x1CBB,
+ 0x1CBD,
+ 0x1CC8,
+ 0x1CD0,
+ 0x1CFB,
+ 0x1D00,
+ 0x1DFA,
+ 0x1DFB,
+ 0x1F16,
+ 0x1F18,
+ 0x1F1E,
+ 0x1F20,
+ 0x1F46,
+ 0x1F48,
+ 0x1F4E,
+ 0x1F50,
+ 0x1F58,
+ 0x1F59,
+ 0x1F5A,
+ 0x1F5B,
+ 0x1F5C,
+ 0x1F5D,
+ 0x1F5E,
+ 0x1F5F,
+ 0x1F7E,
+ 0x1F80,
+ 0x1FB5,
+ 0x1FB6,
+ 0x1FC5,
+ 0x1FC6,
+ 0x1FD4,
+ 0x1FD6,
+ 0x1FDC,
+ 0x1FDD,
+ 0x1FF0,
+ 0x1FF2,
+ 0x1FF5,
+ 0x1FF6,
+ 0x1FFF,
+ 0x2000,
+ 0x2065,
+ 0x2066,
+ 0x2072,
+ 0x2074,
+ 0x208F,
+ 0x2090,
+ 0x209D,
+ 0x20A0,
+ 0x20C0,
+ 0x20D0,
+ 0x20F1,
+ 0x2100,
+ 0x218C,
+ 0x2190,
+ 0x2427,
+ 0x2440,
+ 0x244B,
+ 0x2460,
+ 0x2B74,
+ 0x2B76,
+ 0x2B96,
+ 0x2B97,
+ 0x2C2F,
+ 0x2C30,
+ 0x2C5F,
+ 0x2C60,
+ 0x2CF4,
+ 0x2CF9,
+ 0x2D26,
+ 0x2D27,
+ 0x2D28,
+ 0x2D2D,
+ 0x2D2E,
+ 0x2D30,
+ 0x2D68,
+ 0x2D6F,
+ 0x2D71,
+ 0x2D7F,
+ 0x2D97,
+ 0x2DA0,
+ 0x2DA7,
+ 0x2DA8,
+ 0x2DAF,
+ 0x2DB0,
+ 0x2DB7,
+ 0x2DB8,
+ 0x2DBF,
+ 0x2DC0,
+ 0x2DC7,
+ 0x2DC8,
+ 0x2DCF,
+ 0x2DD0,
+ 0x2DD7,
+ 0x2DD8,
+ 0x2DDF,
+ 0x2DE0,
+ 0x2E53,
+ 0x2E80,
+ 0x2E9A,
+ 0x2E9B,
+ 0x2EF4,
+ 0x2F00,
+ 0x2FD6,
+ 0x2FF0,
+ 0x2FFC,
+ 0x3000,
+ 0x3040,
+ 0x3041,
+ 0x3097,
+ 0x3099,
+ 0x3100,
+ 0x3105,
+ 0x3130,
+ 0x3131,
+ 0x318F,
+ 0x3190,
+ 0x31E4,
+ 0x31F0,
+ 0x321F,
+ 0x3220,
+ 0x9FFD,
+ 0xA000,
+ 0xA48D,
+ 0xA490,
+ 0xA4C7,
+ 0xA4D0,
+ 0xA62C,
+ 0xA640,
+ 0xA6F8,
+ 0xA700,
+ 0xA7C0,
+ 0xA7C2,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
+ 0xA830,
+ 0xA83A,
+ 0xA840,
+ 0xA878,
+ 0xA880,
+ 0xA8C6,
+ 0xA8CE,
+ 0xA8DA,
+ 0xA8E0,
+ 0xA954,
+ 0xA95F,
+ 0xA97D,
+ 0xA980,
+ 0xA9CE,
+ 0xA9CF,
+ 0xA9DA,
+ 0xA9DE,
+ 0xA9FF,
+ 0xAA00,
+ 0xAA37,
+ 0xAA40,
+ 0xAA4E,
+ 0xAA50,
+ 0xAA5A,
+ 0xAA5C,
+ 0xAAC3,
+ 0xAADB,
+ 0xAAF7,
+ 0xAB01,
+ 0xAB07,
+ 0xAB09,
+ 0xAB0F,
+ 0xAB11,
+ 0xAB17,
+ 0xAB20,
+ 0xAB27,
+ 0xAB28,
+ 0xAB2F,
+ 0xAB30,
+ 0xAB6C,
+ 0xAB70,
+ 0xABEE,
+ 0xABF0,
+ 0xABFA,
+ 0xAC00,
+ 0xD7A4,
+ 0xD7B0,
+ 0xD7C7,
+ 0xD7CB,
+ 0xD7FC,
+ 0xD800,
+ 0xFA6E,
+ 0xFA70,
+ 0xFADA,
+ 0xFB00,
+ 0xFB07,
+ 0xFB13,
+ 0xFB18,
+ 0xFB1D,
+ 0xFB37,
+ 0xFB38,
+ 0xFB3D,
+ 0xFB3E,
+ 0xFB3F,
+ 0xFB40,
+ 0xFB42,
+ 0xFB43,
+ 0xFB45,
+ 0xFB46,
+ 0xFBC2,
+ 0xFBD3,
+ 0xFD40,
+ 0xFD50,
+ 0xFD90,
+ 0xFD92,
+ 0xFDC8,
+ 0xFDD0,
+ 0xFDFE,
+ 0xFE00,
+ 0xFE1A,
+ 0xFE20,
+ 0xFE53,
+ 0xFE54,
+ 0xFE67,
+ 0xFE68,
+ 0xFE6C,
+ 0xFE70,
+ 0xFE75,
+ 0xFE76,
+ 0xFEFD,
+ 0xFEFF,
+ 0xFF00,
+ 0xFF01,
+ 0xFFBF,
+ 0xFFC2,
+ 0xFFC8,
+ 0xFFCA,
+ 0xFFD0,
+ 0xFFD2,
+ 0xFFD8,
+ 0xFFDA,
+ 0xFFDD,
+ 0xFFE0,
+ 0xFFE7,
+ 0xFFE8,
+ 0xFFEF,
+ 0xFFF9,
+ 0x1000C,
+ 0x1000D,
+ 0x10027,
+ 0x10028,
+ 0x1003B,
+ 0x1003C,
+ 0x1003E,
+ 0x1003F,
+ 0x1004E,
+ 0x10050,
+ 0x1005E,
+ 0x10080,
+ 0x100FB,
+ 0x10100,
+ 0x10103,
+ 0x10107,
+ 0x10134,
+ 0x10137,
+ 0x1018F,
+ 0x10190,
+ 0x1019D,
+ 0x101A0,
+ 0x101A1,
+ 0x101D0,
+ 0x101FE,
+ 0x10280,
+ 0x1029D,
+ 0x102A0,
+ 0x102D1,
+ 0x102E0,
+ 0x102FC,
+ 0x10300,
+ 0x10324,
+ 0x1032D,
+ 0x1034B,
+ 0x10350,
+ 0x1037B,
+ 0x10380,
+ 0x1039E,
+ 0x1039F,
+ 0x103C4,
+ 0x103C8,
+ 0x103D6,
+ 0x10400,
+ 0x1049E,
+ 0x104A0,
+ 0x104AA,
+ 0x104B0,
+ 0x104D4,
+ 0x104D8,
+ 0x104FC,
+ 0x10500,
+ 0x10528,
+ 0x10530,
+ 0x10564,
+ 0x1056F,
+ 0x10570,
+ 0x10600,
+ 0x10737,
+ 0x10740,
+ 0x10756,
+ 0x10760,
+ 0x10768,
+ 0x10800,
+ 0x10806,
+ 0x10808,
+ 0x10809,
+ 0x1080A,
+ 0x10836,
+ 0x10837,
+ 0x10839,
+ 0x1083C,
+ 0x1083D,
+ 0x1083F,
+ 0x10856,
+ 0x10857,
+ 0x1089F,
+ 0x108A7,
+ 0x108B0,
+ 0x108E0,
+ 0x108F3,
+ 0x108F4,
+ 0x108F6,
+ 0x108FB,
+ 0x1091C,
+ 0x1091F,
+ 0x1093A,
+ 0x1093F,
+ 0x10940,
+ 0x10980,
+ 0x109B8,
+ 0x109BC,
+ 0x109D0,
+ 0x109D2,
+ 0x10A04,
+ 0x10A05,
+ 0x10A07,
+ 0x10A0C,
+ 0x10A14,
+ 0x10A15,
+ 0x10A18,
+ 0x10A19,
+ 0x10A36,
+ 0x10A38,
+ 0x10A3B,
+ 0x10A3F,
+ 0x10A49,
+ 0x10A50,
+ 0x10A59,
+ 0x10A60,
+ 0x10AA0,
+ 0x10AC0,
+ 0x10AE7,
+ 0x10AEB,
+ 0x10AF7,
+ 0x10B00,
+ 0x10B36,
+ 0x10B39,
+ 0x10B56,
+ 0x10B58,
+ 0x10B73,
+ 0x10B78,
+ 0x10B92,
+ 0x10B99,
+ 0x10B9D,
+ 0x10BA9,
+ 0x10BB0,
+ 0x10C00,
+ 0x10C49,
+ 0x10C80,
+ 0x10CB3,
+ 0x10CC0,
+ 0x10CF3,
+ 0x10CFA,
+ 0x10D28,
+ 0x10D30,
+ 0x10D3A,
+ 0x10E60,
+ 0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
+ 0x10F00,
+ 0x10F28,
+ 0x10F30,
+ 0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
+ 0x10FE0,
+ 0x10FF7,
+ 0x11000,
+ 0x1104E,
+ 0x11052,
+ 0x11070,
+ 0x1107F,
+ 0x110C2,
+ 0x110CD,
+ 0x110CE,
+ 0x110D0,
+ 0x110E9,
+ 0x110F0,
+ 0x110FA,
+ 0x11100,
+ 0x11135,
+ 0x11136,
+ 0x11148,
+ 0x11150,
+ 0x11177,
+ 0x11180,
+ 0x111E0,
+ 0x111E1,
+ 0x111F5,
+ 0x11200,
+ 0x11212,
+ 0x11213,
+ 0x1123F,
+ 0x11280,
+ 0x11287,
+ 0x11288,
+ 0x11289,
+ 0x1128A,
+ 0x1128E,
+ 0x1128F,
+ 0x1129E,
+ 0x1129F,
+ 0x112AA,
+ 0x112B0,
+ 0x112EB,
+ 0x112F0,
+ 0x112FA,
+ 0x11300,
+ 0x11304,
+ 0x11305,
+ 0x1130D,
+ 0x1130F,
+ 0x11311,
+ 0x11313,
+ 0x11329,
+ 0x1132A,
+ 0x11331,
+ 0x11332,
+ 0x11334,
+ 0x11335,
+ 0x1133A,
+ 0x1133B,
+ 0x11345,
+ 0x11347,
+ 0x11349,
+ 0x1134B,
+ 0x1134E,
+ 0x11350,
+ 0x11351,
+ 0x11357,
+ 0x11358,
+ 0x1135D,
+ 0x11364,
+ 0x11366,
+ 0x1136D,
+ 0x11370,
+ 0x11375,
+ 0x11400,
+ 0x1145C,
+ 0x1145D,
+ 0x11462,
+ 0x11480,
+ 0x114C8,
+ 0x114D0,
+ 0x114DA,
+ 0x11580,
+ 0x115B6,
+ 0x115B8,
+ 0x115DE,
+ 0x11600,
+ 0x11645,
+ 0x11650,
+ 0x1165A,
+ 0x11660,
+ 0x1166D,
+ 0x11680,
+ 0x116B9,
+ 0x116C0,
+ 0x116CA,
+ 0x11700,
+ 0x1171B,
+ 0x1171D,
+ 0x1172C,
+ 0x11730,
+ 0x11740,
+ 0x11800,
+ 0x1183C,
+ 0x118A0,
+ 0x118F3,
+ 0x118FF,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
+ 0x119A0,
+ 0x119A8,
+ 0x119AA,
+ 0x119D8,
+ 0x119DA,
+ 0x119E5,
+ 0x11A00,
+ 0x11A48,
+ 0x11A50,
+ 0x11AA3,
+ 0x11AC0,
+ 0x11AF9,
+ 0x11C00,
+ 0x11C09,
+ 0x11C0A,
+ 0x11C37,
+ 0x11C38,
+ 0x11C46,
+ 0x11C50,
+ 0x11C6D,
+ 0x11C70,
+ 0x11C90,
+ 0x11C92,
+ 0x11CA8,
+ 0x11CA9,
+ 0x11CB7,
+ 0x11D00,
+ 0x11D07,
+ 0x11D08,
+ 0x11D0A,
+ 0x11D0B,
+ 0x11D37,
+ 0x11D3A,
+ 0x11D3B,
+ 0x11D3C,
+ 0x11D3E,
+ 0x11D3F,
+ 0x11D48,
+ 0x11D50,
+ 0x11D5A,
+ 0x11D60,
+ 0x11D66,
+ 0x11D67,
+ 0x11D69,
+ 0x11D6A,
+ 0x11D8F,
+ 0x11D90,
+ 0x11D92,
+ 0x11D93,
+ 0x11D99,
+ 0x11DA0,
+ 0x11DAA,
+ 0x11EE0,
+ 0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
+ 0x11FC0,
+ 0x11FF2,
+ 0x11FFF,
+ 0x1239A,
+ 0x12400,
+ 0x1246F,
+ 0x12470,
+ 0x12475,
+ 0x12480,
+ 0x12544,
+ 0x13000,
+ 0x1342F,
+ 0x13430,
+ 0x13439,
+ 0x14400,
+ 0x14647,
+ 0x16800,
+ 0x16A39,
+ 0x16A40,
+ 0x16A5F,
+ 0x16A60,
+ 0x16A6A,
+ 0x16A6E,
+ 0x16A70,
+ 0x16AD0,
+ 0x16AEE,
+ 0x16AF0,
+ 0x16AF6,
+ 0x16B00,
+ 0x16B46,
+ 0x16B50,
+ 0x16B5A,
+ 0x16B5B,
+ 0x16B62,
+ 0x16B63,
+ 0x16B78,
+ 0x16B7D,
+ 0x16B90,
+ 0x16E40,
+ 0x16E9B,
+ 0x16F00,
+ 0x16F4B,
+ 0x16F4F,
+ 0x16F88,
+ 0x16F8F,
+ 0x16FA0,
+ 0x16FE0,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
+ 0x17000,
+ 0x187F8,
+ 0x18800,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
+ 0x1B000,
+ 0x1B11F,
+ 0x1B150,
+ 0x1B153,
+ 0x1B164,
+ 0x1B168,
+ 0x1B170,
+ 0x1B2FC,
+ 0x1BC00,
+ 0x1BC6B,
+ 0x1BC70,
+ 0x1BC7D,
+ 0x1BC80,
+ 0x1BC89,
+ 0x1BC90,
+ 0x1BC9A,
+ 0x1BC9C,
+ 0x1BCA4,
+ 0x1D000,
+ 0x1D0F6,
+ 0x1D100,
+ 0x1D127,
+ 0x1D129,
+ 0x1D1E9,
+ 0x1D200,
+ 0x1D246,
+ 0x1D2E0,
+ 0x1D2F4,
+ 0x1D300,
+ 0x1D357,
+ 0x1D360,
+ 0x1D379,
+ 0x1D400,
+ 0x1D455,
+ 0x1D456,
+ 0x1D49D,
+ 0x1D49E,
+ 0x1D4A0,
+ 0x1D4A2,
+ 0x1D4A3,
+ 0x1D4A5,
+ 0x1D4A7,
+ 0x1D4A9,
+ 0x1D4AD,
+ 0x1D4AE,
+ 0x1D4BA,
+ 0x1D4BB,
+ 0x1D4BC,
+ 0x1D4BD,
+ 0x1D4C4,
+ 0x1D4C5,
+ 0x1D506,
+ 0x1D507,
+ 0x1D50B,
+ 0x1D50D,
+ 0x1D515,
+ 0x1D516,
+ 0x1D51D,
+ 0x1D51E,
+ 0x1D53A,
+ 0x1D53B,
+ 0x1D53F,
+ 0x1D540,
+ 0x1D545,
+ 0x1D546,
+ 0x1D547,
+ 0x1D54A,
+ 0x1D551,
+ 0x1D552,
+ 0x1D6A6,
+ 0x1D6A8,
+ 0x1D7CC,
+ 0x1D7CE,
+ 0x1DA8C,
+ 0x1DA9B,
+ 0x1DAA0,
+ 0x1DAA1,
+ 0x1DAB0,
+ 0x1E000,
+ 0x1E007,
+ 0x1E008,
+ 0x1E019,
+ 0x1E01B,
+ 0x1E022,
+ 0x1E023,
+ 0x1E025,
+ 0x1E026,
+ 0x1E02B,
+ 0x1E100,
+ 0x1E12D,
+ 0x1E130,
+ 0x1E13E,
+ 0x1E140,
+ 0x1E14A,
+ 0x1E14E,
+ 0x1E150,
+ 0x1E2C0,
+ 0x1E2FA,
+ 0x1E2FF,
+ 0x1E300,
+ 0x1E800,
+ 0x1E8C5,
+ 0x1E8C7,
+ 0x1E8D7,
+ 0x1E900,
+ 0x1E94C,
+ 0x1E950,
+ 0x1E95A,
+ 0x1E95E,
+ 0x1E960,
+ 0x1EC71,
+ 0x1ECB5,
+ 0x1ED01,
+ 0x1ED3E,
+ 0x1EE00,
+ 0x1EE04,
+ 0x1EE05,
+ 0x1EE20,
+ 0x1EE21,
+ 0x1EE23,
+ 0x1EE24,
+ 0x1EE25,
+ 0x1EE27,
+ 0x1EE28,
+ 0x1EE29,
+ 0x1EE33,
+ 0x1EE34,
+ 0x1EE38,
+ 0x1EE39,
+ 0x1EE3A,
+ 0x1EE3B,
+ 0x1EE3C,
+ 0x1EE42,
+ 0x1EE43,
+ 0x1EE47,
+ 0x1EE48,
+ 0x1EE49,
+ 0x1EE4A,
+ 0x1EE4B,
+ 0x1EE4C,
+ 0x1EE4D,
+ 0x1EE50,
+ 0x1EE51,
+ 0x1EE53,
+ 0x1EE54,
+ 0x1EE55,
+ 0x1EE57,
+ 0x1EE58,
+ 0x1EE59,
+ 0x1EE5A,
+ 0x1EE5B,
+ 0x1EE5C,
+ 0x1EE5D,
+ 0x1EE5E,
+ 0x1EE5F,
+ 0x1EE60,
+ 0x1EE61,
+ 0x1EE63,
+ 0x1EE64,
+ 0x1EE65,
+ 0x1EE67,
+ 0x1EE6B,
+ 0x1EE6C,
+ 0x1EE73,
+ 0x1EE74,
+ 0x1EE78,
+ 0x1EE79,
+ 0x1EE7D,
+ 0x1EE7E,
+ 0x1EE7F,
+ 0x1EE80,
+ 0x1EE8A,
+ 0x1EE8B,
+ 0x1EE9C,
+ 0x1EEA1,
+ 0x1EEA4,
+ 0x1EEA5,
+ 0x1EEAA,
+ 0x1EEAB,
+ 0x1EEBC,
+ 0x1EEF0,
+ 0x1EEF2,
+ 0x1F000,
+ 0x1F02C,
+ 0x1F030,
+ 0x1F094,
+ 0x1F0A0,
+ 0x1F0AF,
+ 0x1F0B1,
+ 0x1F0C0,
+ 0x1F0C1,
+ 0x1F0D0,
+ 0x1F0D1,
+ 0x1F0F6,
+ 0x1F100,
+ 0x1F1AE,
+ 0x1F1E6,
+ 0x1F203,
+ 0x1F210,
+ 0x1F23C,
+ 0x1F240,
+ 0x1F249,
+ 0x1F250,
+ 0x1F252,
+ 0x1F260,
+ 0x1F266,
+ 0x1F300,
+ 0x1F6D8,
+ 0x1F6E0,
+ 0x1F6ED,
+ 0x1F6F0,
+ 0x1F6FD,
+ 0x1F700,
+ 0x1F774,
+ 0x1F780,
+ 0x1F7D9,
+ 0x1F7E0,
+ 0x1F7EC,
+ 0x1F800,
+ 0x1F80C,
+ 0x1F810,
+ 0x1F848,
+ 0x1F850,
+ 0x1F85A,
+ 0x1F860,
+ 0x1F888,
+ 0x1F890,
+ 0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
+ 0x1F900,
+ 0x1F979,
+ 0x1F97A,
+ 0x1F9CC,
+ 0x1F9CD,
+ 0x1FA54,
+ 0x1FA60,
+ 0x1FA6E,
+ 0x1FA70,
+ 0x1FA75,
+ 0x1FA78,
+ 0x1FA7B,
+ 0x1FA80,
+ 0x1FA87,
+ 0x1FA90,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x1FFFE,
+ 0x2A6DE,
+ 0x2A700,
+ 0x2B735,
+ 0x2B740,
+ 0x2B81E,
+ 0x2B820,
+ 0x2CEA2,
+ 0x2CEB0,
+ 0x2EBE1,
+ 0x2F800,
+ 0x2FA1E,
+ 0x2FFFE,
+ 0x3134B,
+ 0x3FFFE,
+ 0x40000,
+ 0x4FFFE,
+ 0x50000,
+ 0x5FFFE,
+ 0x60000,
+ 0x6FFFE,
+ 0x70000,
+ 0x7FFFE,
+ 0x80000,
+ 0x8FFFE,
+ 0x90000,
+ 0x9FFFE,
+ 0xA0000,
+ 0xAFFFE,
+ 0xB0000,
+ 0xBFFFE,
+ 0xC0000,
+ 0xCFFFE,
+ 0xD0000,
+ 0xDFFFE,
+ 0xE0000,
+ 0xE0001,
+ 0xE0002,
+ 0xE0020,
+ 0xE0080,
+ 0xE0100,
+ 0xE01F0,
+ 0xEFFFE,
+ 0x110000
+};
+
static const UV UNI_IN__2_invlist[] = { /* for all charsets */
624, /* Number of elements */
148565664, /* Version and data structure type */
@@ -279705,6 +302368,16 @@ static const UV UNI_INCHEROKEE_invlist[] = { /* for all charsets */
0x1400
};
+static const UV UNI_INCHORASMIAN_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x10FB0,
+ 0x10FE0
+};
+
static const UV UNI_INCOPTIC_invlist[] = { /* for all charsets */
3, /* Number of elements */
148565664, /* Version and data structure type */
@@ -279765,6 +302438,16 @@ static const UV UNI_INDICSIYAQNUMBERS_invlist[] = { /* for all charsets */
0x1ECC0
};
+static const UV UNI_INDIVESAKURU_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x11900,
+ 0x11960
+};
+
static const UV UNI_INDOGRA_invlist[] = { /* for all charsets */
3, /* Number of elements */
148565664, /* Version and data structure type */
@@ -280055,6 +302738,16 @@ static const UV UNI_INKHAROSHTHI_invlist[] = { /* for all charsets */
0x10A60
};
+static const UV UNI_INKHITANSMALLSCRIPT_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x18B00,
+ 0x18D00
+};
+
static const UV UNI_INKHMER_invlist[] = { /* for all charsets */
3, /* Number of elements */
148565664, /* Version and data structure type */
@@ -280125,6 +302818,16 @@ static const UV UNI_INLINEARA_invlist[] = { /* for all charsets */
0x10780
};
+static const UV UNI_INLISU_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0xA4D0,
+ 0xA500
+};
+
static const UV UNI_INLYCIAN_invlist[] = { /* for all charsets */
3, /* Number of elements */
148565664, /* Version and data structure type */
@@ -280506,7 +303209,7 @@ static const UV UNI_INPAUCINHAU_invlist[] = { /* for all charsets */
};
static const UV UNI_INPC__BOTTOM_invlist[] = { /* for all charsets */
- 283, /* Number of elements */
+ 287, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -280663,6 +303366,8 @@ static const UV UNI_INPC__BOTTOM_invlist[] = { /* for all charsets */
0x1CEE,
0xA825,
0xA826,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C5,
0xA92B,
@@ -280755,6 +303460,8 @@ static const UV UNI_INPC__BOTTOM_invlist[] = { /* for all charsets */
0x11833,
0x11839,
0x1183B,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119E0,
@@ -280806,19 +303513,23 @@ static const UV UNI_INPC__BOTTOMANDLEFT_invlist[] = { /* for all charsets */
};
static const UV UNI_INPC__BOTTOMANDRIGHT_invlist[] = { /* for all charsets */
- 5, /* Number of elements */
+ 9, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
0x1B3B,
0x1B3C,
+ 0xA9BE,
+ 0xA9BF,
0xA9C0,
- 0xA9C1
+ 0xA9C1,
+ 0x11942,
+ 0x11943
};
static const UV UNI_INPC__LEFT_invlist[] = { /* for all charsets */
- 89, /* Number of elements */
+ 95, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -280883,6 +303594,8 @@ static const UV UNI_INPC__LEFT_invlist[] = { /* for all charsets */
0x1112D,
0x111B4,
0x111B5,
+ 0x111CE,
+ 0x111CF,
0x112E1,
0x112E2,
0x11347,
@@ -280903,6 +303616,10 @@ static const UV UNI_INPC__LEFT_invlist[] = { /* for all charsets */
0x11727,
0x1182D,
0x1182E,
+ 0x11935,
+ 0x11936,
+ 0x11937,
+ 0x11938,
0x119D2,
0x119D3,
0x119E4,
@@ -280914,7 +303631,7 @@ static const UV UNI_INPC__LEFT_invlist[] = { /* for all charsets */
};
static const UV UNI_INPC__LEFTANDRIGHT_invlist[] = { /* for all charsets */
- 27, /* Number of elements */
+ 29, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -280944,11 +303661,13 @@ static const UV UNI_INPC__LEFTANDRIGHT_invlist[] = { /* for all charsets */
0x114BE,
0x114BF,
0x115BA,
- 0x115BB
+ 0x115BB,
+ 0x11938,
+ 0x11939
};
static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */
- 413, /* Number of elements */
+ 421, /* 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 */
@@ -281019,7 +303738,7 @@ static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -281068,12 +303787,12 @@ static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */
0xD46,
0xD49,
0xD4A,
- 0xD4E,
+ 0xD4F,
0xD57,
0xD58,
0xD62,
0xD64,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -281120,8 +303839,6 @@ static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */
0x102B,
0x1039,
0x103A,
- 0x103C,
- 0x103D,
0x103F,
0x1056,
0x105A,
@@ -281207,6 +303924,8 @@ static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -281275,8 +303994,12 @@ static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */
0x11183,
0x111B3,
0x111C1,
+ 0x111C2,
+ 0x111C4,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111D0,
0x1122C,
0x11238,
0x1123E,
@@ -281318,11 +304041,17 @@ static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */
0x116AB,
0x116B8,
0x1171D,
- 0x1171E,
- 0x1171F,
0x1172C,
0x1182C,
0x1183B,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193E,
+ 0x1193F,
+ 0x11944,
0x119D1,
0x119D8,
0x119DA,
@@ -281332,12 +304061,10 @@ static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */
0x11A01,
0x11A0B,
0x11A33,
- 0x11A3A,
- 0x11A3B,
0x11A3F,
0x11A51,
0x11A5C,
- 0x11A8A,
+ 0x11A84,
0x11A99,
0x11C2F,
0x11C37,
@@ -281355,7 +304082,7 @@ static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */
0x11D3E,
0x11D3F,
0x11D45,
- 0x11D47,
+ 0x11D46,
0x11D48,
0x11D8A,
0x11D8F,
@@ -281384,7 +304111,7 @@ static const UV UNI_INPC__OVERSTRUCK_invlist[] = { /* for all charsets */
};
static const UV UNI_INPC__RIGHT_invlist[] = { /* for all charsets */
- 323, /* Number of elements */
+ 329, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -281571,8 +304298,6 @@ static const UV UNI_INPC__RIGHT_invlist[] = { /* for all charsets */
0xA984,
0xA9B4,
0xA9B6,
- 0xA9BE,
- 0xA9BF,
0xAA33,
0xAA34,
0xAA4D,
@@ -281683,6 +304408,12 @@ static const UV UNI_INPC__RIGHT_invlist[] = { /* for all charsets */
0x1182F,
0x11838,
0x11839,
+ 0x11930,
+ 0x11935,
+ 0x1193D,
+ 0x1193E,
+ 0x11940,
+ 0x11941,
0x119D1,
0x119D2,
0x119D3,
@@ -281703,6 +304434,8 @@ static const UV UNI_INPC__RIGHT_invlist[] = { /* for all charsets */
0x11CAA,
0x11CB4,
0x11CB5,
+ 0x11D46,
+ 0x11D47,
0x11D8A,
0x11D8F,
0x11D93,
@@ -281714,7 +304447,7 @@ static const UV UNI_INPC__RIGHT_invlist[] = { /* for all charsets */
};
static const UV UNI_INPC__TOP_invlist[] = { /* for all charsets */
- 371, /* Number of elements */
+ 387, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -281753,7 +304486,7 @@ static const UV UNI_INPC__TOP_invlist[] = { /* for all charsets */
0xB02,
0xB3F,
0xB40,
- 0xB56,
+ 0xB55,
0xB57,
0xB82,
0xB83,
@@ -281786,7 +304519,9 @@ static const UV UNI_INPC__TOP_invlist[] = { /* for all charsets */
0xD3B,
0xD3D,
0xD4D,
- 0xD4E,
+ 0xD4F,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -281993,8 +304728,12 @@ static const UV UNI_INPC__TOP_invlist[] = { /* for all charsets */
0x11182,
0x111BC,
0x111BF,
+ 0x111C2,
+ 0x111C4,
0x111CB,
0x111CC,
+ 0x111CF,
+ 0x111D0,
0x11230,
0x11232,
0x11234,
@@ -282049,6 +304788,12 @@ static const UV UNI_INPC__TOP_invlist[] = { /* for all charsets */
0x1172C,
0x11833,
0x11838,
+ 0x1193B,
+ 0x1193D,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119DA,
0x119DC,
0x11A01,
@@ -282057,10 +304802,14 @@ static const UV UNI_INPC__TOP_invlist[] = { /* for all charsets */
0x11A0A,
0x11A35,
0x11A39,
+ 0x11A3A,
+ 0x11A3B,
0x11A51,
0x11A52,
0x11A54,
0x11A57,
+ 0x11A84,
+ 0x11A8A,
0x11A96,
0x11A97,
0x11A98,
@@ -282111,6 +304860,18 @@ static const UV UNI_INPC__TOPANDBOTTOM_invlist[] = { /* for all charsets */
0x11130
};
+static const UV UNI_INPC__TOPANDBOTTOMANDLEFT_invlist[] = { /* for all charsets */
+ 5, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x103C,
+ 0x103D,
+ 0x1171E,
+ 0x1171F
+};
+
static const UV UNI_INPC__TOPANDBOTTOMANDRIGHT_invlist[] = { /* for all charsets */
3, /* Number of elements */
148565664, /* Version and data structure type */
@@ -282306,7 +305067,7 @@ static const UV UNI_INSC__AVAGRAHA_invlist[] = { /* for all charsets */
};
static const UV UNI_INSC__BINDU_invlist[] = { /* for all charsets */
- 107, /* Number of elements */
+ 113, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -282335,7 +305096,9 @@ static const UV UNI_INSC__BINDU_invlist[] = { /* for all charsets */
0xC83,
0xD00,
0xD03,
- 0xD82,
+ 0xD04,
+ 0xD05,
+ 0xD81,
0xD83,
0xE4D,
0xE4E,
@@ -282381,6 +305144,8 @@ static const UV UNI_INSC__BINDU_invlist[] = { /* for all charsets */
0x11102,
0x11180,
0x11182,
+ 0x111CF,
+ 0x111D0,
0x11234,
0x11235,
0x112DF,
@@ -282403,6 +305168,8 @@ static const UV UNI_INSC__BINDU_invlist[] = { /* for all charsets */
0x116AC,
0x11837,
0x11838,
+ 0x1193B,
+ 0x1193D,
0x119DE,
0x119DF,
0x11A35,
@@ -282462,7 +305229,7 @@ static const UV UNI_INSC__CANTILLATIONMARK_invlist[] = { /* for all charsets */
};
static const UV UNI_INSC__CONSONANT_invlist[] = { /* for all charsets */
- 299, /* Number of elements */
+ 307, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -282705,6 +305472,8 @@ static const UV UNI_INSC__CONSONANT_invlist[] = { /* for all charsets */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11155,
0x11173,
0x11191,
@@ -282749,6 +305518,12 @@ static const UV UNI_INSC__CONSONANT_invlist[] = { /* for all charsets */
0x1171B,
0x1180A,
0x1182C,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
0x119AE,
0x119D1,
0x11A0B,
@@ -282846,7 +305621,7 @@ static const UV UNI_INSC__CONSONANTKILLER_invlist[] = { /* for all charsets */
};
static const UV UNI_INSC__CONSONANTMEDIAL_invlist[] = { /* for all charsets */
- 25, /* Number of elements */
+ 29, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -282871,6 +305646,10 @@ static const UV UNI_INSC__CONSONANTMEDIAL_invlist[] = { /* for all charsets */
0xAA37,
0x1171D,
0x11720,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11943,
0x11A3B,
0x11A3F,
0x11D47,
@@ -283010,25 +305789,29 @@ static const UV UNI_INSC__CONSONANTPLACEHOLDER_invlist[] = { /* for EBCDIC 037
# endif /* EBCDIC 037 */
static const UV UNI_INSC__CONSONANTPRECEDINGREPHA_invlist[] = { /* for all charsets */
- 5, /* Number of elements */
+ 7, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
0xD4E,
0xD4F,
+ 0x11941,
+ 0x11942,
0x11D46,
0x11D47
};
static const UV UNI_INSC__CONSONANTPREFIXED_invlist[] = { /* for all charsets */
- 7, /* Number of elements */
+ 9, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
0x111C2,
0x111C4,
+ 0x1193F,
+ 0x11940,
0x11A3A,
0x11A3B,
0x11A84,
@@ -283084,7 +305867,7 @@ static const UV UNI_INSC__CONSONANTSUCCEEDINGREPHA_invlist[] = { /* for all cha
};
static const UV UNI_INSC__CONSONANTWITHSTACKER_invlist[] = { /* for all charsets */
- 7, /* Number of elements */
+ 9, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -283094,7 +305877,9 @@ static const UV UNI_INSC__CONSONANTWITHSTACKER_invlist[] = { /* for all charset
0x1CF5,
0x1CF7,
0x11003,
- 0x11005
+ 0x11005,
+ 0x11460,
+ 0x11462
};
static const UV UNI_INSC__GEMINATIONMARK_invlist[] = { /* for all charsets */
@@ -283112,7 +305897,7 @@ static const UV UNI_INSC__GEMINATIONMARK_invlist[] = { /* for all charsets */
};
static const UV UNI_INSC__INVISIBLESTACKER_invlist[] = { /* for all charsets */
- 23, /* Number of elements */
+ 25, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -283131,6 +305916,8 @@ static const UV UNI_INSC__INVISIBLESTACKER_invlist[] = { /* for all charsets */
0x10A40,
0x11133,
0x11134,
+ 0x1193E,
+ 0x1193F,
0x11A47,
0x11A48,
0x11A99,
@@ -283162,7 +305949,7 @@ static const UV UNI_INSC__NONJOINER_invlist[] = { /* for all charsets */
};
static const UV UNI_INSC__NUKTA_invlist[] = { /* for all charsets */
- 51, /* Number of elements */
+ 53, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -283215,6 +306002,8 @@ static const UV UNI_INSC__NUKTA_invlist[] = { /* for all charsets */
0x116B8,
0x1183A,
0x1183B,
+ 0x11943,
+ 0x11944,
0x11D42,
0x11D43
};
@@ -283222,7 +306011,7 @@ static const UV UNI_INSC__NUKTA_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_INSC__NUMBER_invlist[] = { /* for ASCII/Latin1 */
- 89, /* Number of elements */
+ 91, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -283309,6 +306098,8 @@ static const UV UNI_INSC__NUMBER_invlist[] = { /* for ASCII/Latin1 */
0x116CA,
0x11730,
0x1173C,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C6D,
0x11D50,
@@ -283325,7 +306116,7 @@ static const UV UNI_INSC__NUMBER_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_INSC__NUMBER_invlist[] = { /* for EBCDIC 1047 */
- 89, /* Number of elements */
+ 91, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -283412,6 +306203,8 @@ static const UV UNI_INSC__NUMBER_invlist[] = { /* for EBCDIC 1047 */
0x116CA,
0x11730,
0x1173C,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C6D,
0x11D50,
@@ -283428,7 +306221,7 @@ static const UV UNI_INSC__NUMBER_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_INSC__NUMBER_invlist[] = { /* for EBCDIC 037 */
- 89, /* Number of elements */
+ 91, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -283515,6 +306308,8 @@ static const UV UNI_INSC__NUMBER_invlist[] = { /* for EBCDIC 037 */
0x116CA,
0x11730,
0x1173C,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C6D,
0x11D50,
@@ -283538,7 +306333,7 @@ static const UV UNI_INSC__NUMBERJOINER_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */
- 627, /* Number of elements */
+ 643, /* 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 */
@@ -283673,7 +306468,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -283764,8 +306559,6 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -283783,7 +306576,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -283951,6 +306744,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */
0x25CD,
0xA800,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -284018,14 +306813,14 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11180,
0x111C4,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DA,
0x111E1,
0x111F5,
@@ -284082,7 +306877,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11481,
0x114C5,
0x114D0,
@@ -284109,6 +306904,22 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */
0x1173C,
0x11800,
0x1183B,
+ 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -284179,7 +306990,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */
- 627, /* Number of elements */
+ 643, /* 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 */
@@ -284314,7 +307125,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -284405,8 +307216,6 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -284424,7 +307233,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -284592,6 +307401,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */
0x25CD,
0xA800,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -284659,14 +307470,14 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11180,
0x111C4,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DA,
0x111E1,
0x111F5,
@@ -284723,7 +307534,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11481,
0x114C5,
0x114D0,
@@ -284750,6 +307561,22 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */
0x1173C,
0x11800,
0x1183B,
+ 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -284820,7 +307647,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */
- 627, /* Number of elements */
+ 643, /* 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 */
@@ -284955,7 +307782,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -285046,8 +307873,6 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -285065,7 +307890,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -285233,6 +308058,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */
0x25CD,
0xA800,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -285300,14 +308127,14 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11180,
0x111C4,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DA,
0x111E1,
0x111F5,
@@ -285364,7 +308191,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11481,
0x114C5,
0x114D0,
@@ -285391,6 +308218,22 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */
0x1173C,
0x11800,
0x1183B,
+ 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -285456,7 +308299,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */
# endif /* EBCDIC 037 */
static const UV UNI_INSC__PUREKILLER_invlist[] = { /* for all charsets */
- 39, /* Number of elements */
+ 43, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -285485,6 +308328,8 @@ static const UV UNI_INSC__PUREKILLER_invlist[] = { /* for all charsets */
0x1BAB,
0x1BF2,
0x1BF4,
+ 0xA82C,
+ 0xA82D,
0xA953,
0xA954,
0xABED,
@@ -285495,6 +308340,8 @@ static const UV UNI_INSC__PUREKILLER_invlist[] = { /* for all charsets */
0x112EB,
0x1172B,
0x1172C,
+ 0x1193D,
+ 0x1193E,
0x11A34,
0x11A35,
0x11D44,
@@ -285882,7 +308729,7 @@ static const UV UNI_INSC__VOWEL_invlist[] = { /* for all charsets */
};
static const UV UNI_INSC__VOWELDEPENDENT_invlist[] = { /* for all charsets */
- 259, /* Number of elements */
+ 265, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -285927,7 +308774,7 @@ static const UV UNI_INSC__VOWELDEPENDENT_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4D,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -286077,6 +308924,8 @@ static const UV UNI_INSC__VOWELDEPENDENT_invlist[] = { /* for all charsets */
0x111C0,
0x111CB,
0x111CD,
+ 0x111CE,
+ 0x111CF,
0x1122C,
0x11234,
0x112E0,
@@ -286111,6 +308960,10 @@ static const UV UNI_INSC__VOWELDEPENDENT_invlist[] = { /* for all charsets */
0x1172B,
0x1182C,
0x11837,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
0x119D1,
0x119D8,
0x119DA,
@@ -286148,7 +309001,7 @@ static const UV UNI_INSC__VOWELDEPENDENT_invlist[] = { /* for all charsets */
};
static const UV UNI_INSC__VOWELINDEPENDENT_invlist[] = { /* for all charsets */
- 171, /* Number of elements */
+ 175, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -286299,6 +309152,10 @@ static const UV UNI_INSC__VOWELINDEPENDENT_invlist[] = { /* for all charsets */
0x1168A,
0x11800,
0x1180A,
+ 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
0x119A0,
0x119A8,
0x119AA,
@@ -286325,16 +309182,6 @@ static const UV UNI_INSC__VOWELINDEPENDENT_invlist[] = { /* for all charsets */
0x11D6C
};
-static const UV UNI_INSHARADA_invlist[] = { /* for all charsets */
- 3, /* Number of elements */
- 148565664, /* Version and data structure type */
- 1, /* 0 if the list starts at 0;
- 1 if it starts at the element beyond 0 */
- 0x0,
- 0x11180,
- 0x111E0
-};
-
static const UV UNI_INSIDDHAM_invlist[] = { /* for all charsets */
3, /* Number of elements */
148565664, /* Version and data structure type */
@@ -286605,6 +309452,16 @@ static const UV UNI_INWARANGCITI_invlist[] = { /* for all charsets */
0x11900
};
+static const UV UNI_INYEZIDI_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x10E80,
+ 0x10EC0
+};
+
static const UV UNI_INZANABAZARSQUARE_invlist[] = { /* for all charsets */
3, /* Number of elements */
148565664, /* Version and data structure type */
@@ -286702,17 +309559,19 @@ static const UV UNI_JG__AFRICANNOON_invlist[] = { /* for all charsets */
};
static const UV UNI_JG__AFRICANQAF_invlist[] = { /* for all charsets */
- 3, /* Number of elements */
+ 5, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
0x8BC,
- 0x8BD
+ 0x8BD,
+ 0x8C4,
+ 0x8C5
};
static const UV UNI_JG__AIN_invlist[] = { /* for all charsets */
- 11, /* Number of elements */
+ 13, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -286726,7 +309585,9 @@ static const UV UNI_JG__AIN_invlist[] = { /* for all charsets */
0x75D,
0x760,
0x8B3,
- 0x8B4
+ 0x8B4,
+ 0x8C3,
+ 0x8C4
};
static const UV UNI_JG__ALAPH_invlist[] = { /* for all charsets */
@@ -286760,7 +309621,7 @@ static const UV UNI_JG__ALEF_invlist[] = { /* for all charsets */
};
static const UV UNI_JG__BEH_invlist[] = { /* for all charsets */
- 15, /* Number of elements */
+ 17, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -286778,7 +309639,9 @@ static const UV UNI_JG__BEH_invlist[] = { /* for all charsets */
0x8A0,
0x8A2,
0x8B6,
- 0x8B9
+ 0x8B9,
+ 0x8BE,
+ 0x8C1
};
static const UV UNI_JG__BETH_invlist[] = { /* for all charsets */
@@ -286898,7 +309761,7 @@ static const UV UNI_JG__FINALSEMKATH_invlist[] = { /* for all charsets */
};
static const UV UNI_JG__GAF_invlist[] = { /* for all charsets */
- 13, /* Number of elements */
+ 15, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -286914,7 +309777,9 @@ static const UV UNI_JG__GAF_invlist[] = { /* for all charsets */
0x762,
0x765,
0x8B0,
- 0x8B1
+ 0x8B1,
+ 0x8C2,
+ 0x8C3
};
static const UV UNI_JG__GAMAL_invlist[] = { /* for all charsets */
@@ -286930,7 +309795,7 @@ static const UV UNI_JG__GAMAL_invlist[] = { /* for all charsets */
};
static const UV UNI_JG__HAH_invlist[] = { /* for all charsets */
- 17, /* Number of elements */
+ 21, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -286950,7 +309815,11 @@ static const UV UNI_JG__HAH_invlist[] = { /* for all charsets */
0x77C,
0x77D,
0x8A2,
- 0x8A3
+ 0x8A3,
+ 0x8C1,
+ 0x8C2,
+ 0x8C5,
+ 0x8C7
};
static const UV UNI_JG__HAMZAONHEHGOAL_invlist[] = { /* for all charsets */
@@ -287082,7 +309951,7 @@ static const UV UNI_JG__KNOTTEDHEH_invlist[] = { /* for all charsets */
};
static const UV UNI_JG__LAM_invlist[] = { /* for all charsets */
- 9, /* Number of elements */
+ 11, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -287094,7 +309963,9 @@ static const UV UNI_JG__LAM_invlist[] = { /* for all charsets */
0x76A,
0x76B,
0x8A6,
- 0x8A7
+ 0x8A7,
+ 0x8C7,
+ 0x8C8
};
static const UV UNI_JG__LAMADH_invlist[] = { /* for all charsets */
@@ -287550,7 +310421,7 @@ static const UV UNI_JG__NOJOININGGROUP_invlist[] = { /* for all charsets */
0x8AE,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x10AC0,
0x10AC6,
0x10AC7,
@@ -287974,7 +310845,7 @@ static const UV UNI_JT__C_invlist[] = { /* for all charsets */
};
static const UV UNI_JT__D_invlist[] = { /* for all charsets */
- 129, /* Number of elements */
+ 145, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -288060,7 +310931,7 @@ static const UV UNI_JT__D_invlist[] = { /* for all charsets */
0x8B6,
0x8B9,
0x8BA,
- 0x8BE,
+ 0x8C8,
0x1807,
0x1808,
0x1820,
@@ -288105,12 +310976,28 @@ static const UV UNI_JT__D_invlist[] = { /* for all charsets */
0x10F45,
0x10F51,
0x10F54,
+ 0x10FB0,
+ 0x10FB1,
+ 0x10FB2,
+ 0x10FB4,
+ 0x10FB8,
+ 0x10FB9,
+ 0x10FBB,
+ 0x10FBD,
+ 0x10FBE,
+ 0x10FC0,
+ 0x10FC1,
+ 0x10FC2,
+ 0x10FC4,
+ 0x10FC5,
+ 0x10FCA,
+ 0x10FCB,
0x1E900,
0x1E944
};
static const UV UNI_JT__L_invlist[] = { /* for all charsets */
- 9, /* Number of elements */
+ 11, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -288122,11 +311009,13 @@ static const UV UNI_JT__L_invlist[] = { /* for all charsets */
0x10AD7,
0x10AD8,
0x10D00,
- 0x10D01
+ 0x10D01,
+ 0x10FCB,
+ 0x10FCC
};
static const UV UNI_JT__R_invlist[] = { /* for all charsets */
- 113, /* Number of elements */
+ 125, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -288195,6 +311084,8 @@ static const UV UNI_JT__R_invlist[] = { /* for all charsets */
0x84A,
0x854,
0x855,
+ 0x856,
+ 0x859,
0x867,
0x868,
0x869,
@@ -288242,13 +311133,23 @@ static const UV UNI_JT__R_invlist[] = { /* for all charsets */
0x10F33,
0x10F34,
0x10F54,
- 0x10F55
+ 0x10F55,
+ 0x10FB4,
+ 0x10FB7,
+ 0x10FB9,
+ 0x10FBB,
+ 0x10FBD,
+ 0x10FBE,
+ 0x10FC2,
+ 0x10FC4,
+ 0x10FC9,
+ 0x10FCA
};
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */
- 661, /* Number of elements */
+ 677, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -288375,7 +311276,7 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -288421,6 +311322,8 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -288534,7 +311437,7 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -288621,6 +311524,8 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C6,
0xA8E0,
@@ -288703,6 +311608,8 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11001,
@@ -288729,6 +311636,8 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -288799,6 +311708,12 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -288863,6 +311778,8 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */
0x16F50,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -288923,7 +311840,7 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */
- 661, /* Number of elements */
+ 677, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -289050,7 +311967,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -289096,6 +312013,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -289209,7 +312128,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -289296,6 +312215,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C6,
0xA8E0,
@@ -289378,6 +312299,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11001,
@@ -289404,6 +312327,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -289474,6 +312399,12 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -289538,6 +312469,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */
0x16F50,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -289598,7 +312531,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */
- 661, /* Number of elements */
+ 677, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -289725,7 +312658,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -289771,6 +312704,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -289884,7 +312819,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -289971,6 +312906,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C6,
0xA8E0,
@@ -290053,6 +312990,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11001,
@@ -290079,6 +313018,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -290149,6 +313090,12 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -290213,6 +313160,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */
0x16F50,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -290270,7 +313219,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
- 703, /* Number of elements */
+ 727, /* 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 */
@@ -290336,8 +313285,6 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
0x829,
0x82E,
0x840,
- 0x856,
- 0x859,
0x85C,
0x860,
0x861,
@@ -290350,7 +313297,7 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
0x8AE,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -290419,7 +313366,7 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -290465,6 +313412,8 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -290580,7 +313529,7 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -290667,6 +313616,8 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA873,
0xA8C4,
@@ -290765,10 +313716,22 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
0x10BAF,
0x10D00,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F30,
0x10F45,
0x10F46,
0x10F55,
+ 0x10FB0,
+ 0x10FB1,
+ 0x10FB2,
+ 0x10FB7,
+ 0x10FB8,
+ 0x10FC0,
+ 0x10FC1,
+ 0x10FC5,
+ 0x10FC9,
+ 0x10FCC,
0x11001,
0x11002,
0x11038,
@@ -290793,6 +313756,8 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -290863,6 +313828,12 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -290927,6 +313898,8 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
0x16F50,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -290987,7 +313960,7 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
- 703, /* Number of elements */
+ 727, /* 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 */
@@ -291053,8 +314026,6 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
0x829,
0x82E,
0x840,
- 0x856,
- 0x859,
0x85C,
0x860,
0x861,
@@ -291067,7 +314038,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
0x8AE,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -291136,7 +314107,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -291182,6 +314153,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -291297,7 +314270,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -291384,6 +314357,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA873,
0xA8C4,
@@ -291482,10 +314457,22 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
0x10BAF,
0x10D00,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F30,
0x10F45,
0x10F46,
0x10F55,
+ 0x10FB0,
+ 0x10FB1,
+ 0x10FB2,
+ 0x10FB7,
+ 0x10FB8,
+ 0x10FC0,
+ 0x10FC1,
+ 0x10FC5,
+ 0x10FC9,
+ 0x10FCC,
0x11001,
0x11002,
0x11038,
@@ -291510,6 +314497,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -291580,6 +314569,12 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -291644,6 +314639,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
0x16F50,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -291704,7 +314701,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */
- 703, /* Number of elements */
+ 727, /* 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 */
@@ -291770,8 +314767,6 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */
0x829,
0x82E,
0x840,
- 0x856,
- 0x859,
0x85C,
0x860,
0x861,
@@ -291784,7 +314779,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */
0x8AE,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -291853,7 +314848,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -291899,6 +314894,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -292014,7 +315011,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -292101,6 +315098,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA873,
0xA8C4,
@@ -292199,10 +315198,22 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */
0x10BAF,
0x10D00,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F30,
0x10F45,
0x10F46,
0x10F55,
+ 0x10FB0,
+ 0x10FB1,
+ 0x10FB2,
+ 0x10FB7,
+ 0x10FB8,
+ 0x10FC0,
+ 0x10FC1,
+ 0x10FC5,
+ 0x10FC9,
+ 0x10FCC,
0x11001,
0x11002,
0x11038,
@@ -292227,6 +315238,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -292297,6 +315310,12 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -292361,6 +315380,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */
0x16F50,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -292579,6 +315600,18 @@ static const UV UNI_KHOJ_invlist[] = { /* for all charsets */
0x1123F
};
+static const UV UNI_KITS_invlist[] = { /* for all charsets */
+ 5, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x16FE4,
+ 0x16FE5,
+ 0x18B00,
+ 0x18CD6
+};
+
static const UV UNI_KNDA_invlist[] = { /* for all charsets */
43, /* Number of elements */
148565664, /* Version and data structure type */
@@ -292648,7 +315681,7 @@ static const UV UNI_KTHI_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
- 1219, /* Number of elements */
+ 1245, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -292754,7 +315787,7 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -292905,7 +315938,7 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -293248,13 +316281,13 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -293278,8 +316311,8 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -293354,7 +316387,7 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -293521,12 +316554,18 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -293539,6 +316578,8 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -293590,7 +316631,7 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -293616,7 +316657,19 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -293665,6 +316718,8 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12480,
@@ -293702,7 +316757,9 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -293860,7 +316917,7 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -293870,7 +316927,9 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* ASCII/Latin1 */
@@ -293881,7 +316940,7 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
- 1245, /* Number of elements */
+ 1271, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -294013,7 +317072,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -294164,7 +317223,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -294507,13 +317566,13 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -294537,8 +317596,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -294613,7 +317672,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -294780,12 +317839,18 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -294798,6 +317863,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -294849,7 +317916,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -294875,7 +317942,19 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -294924,6 +318003,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12480,
@@ -294961,7 +318042,9 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -295119,7 +318202,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -295129,7 +318212,9 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 1047 */
@@ -295140,7 +318225,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
- 1241, /* Number of elements */
+ 1267, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -295268,7 +318353,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -295419,7 +318504,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -295762,13 +318847,13 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -295792,8 +318877,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -295868,7 +318953,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -296035,12 +319120,18 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -296053,6 +319144,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -296104,7 +319197,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -296130,7 +319223,19 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -296179,6 +319284,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12480,
@@ -296216,7 +319323,9 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -296374,7 +319483,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -296384,7 +319493,9 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 037 */
@@ -296654,7 +319765,7 @@ static const UV UNI_LATINEXTE_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_LATN_invlist[] = { /* for ASCII/Latin1 */
- 79, /* Number of elements */
+ 81, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -296715,13 +319826,15 @@ static const UV UNI_LATN_invlist[] = { /* for ASCII/Latin1 */
0x2189,
0x2C60,
0x2C80,
+ 0xA700,
+ 0xA708,
0xA722,
0xA788,
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA800,
0xA92E,
0xA92F,
@@ -296730,7 +319843,7 @@ static const UV UNI_LATN_invlist[] = { /* for ASCII/Latin1 */
0xAB5C,
0xAB65,
0xAB66,
- 0xAB68,
+ 0xAB6A,
0xFB00,
0xFB07,
0xFF21,
@@ -296747,7 +319860,7 @@ static const UV UNI_LATN_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_LATN_invlist[] = { /* for EBCDIC 1047 */
- 105, /* Number of elements */
+ 107, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -296834,13 +319947,15 @@ static const UV UNI_LATN_invlist[] = { /* for EBCDIC 1047 */
0x2189,
0x2C60,
0x2C80,
+ 0xA700,
+ 0xA708,
0xA722,
0xA788,
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA800,
0xA92E,
0xA92F,
@@ -296849,7 +319964,7 @@ static const UV UNI_LATN_invlist[] = { /* for EBCDIC 1047 */
0xAB5C,
0xAB65,
0xAB66,
- 0xAB68,
+ 0xAB6A,
0xFB00,
0xFB07,
0xFF21,
@@ -296866,7 +319981,7 @@ static const UV UNI_LATN_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_LATN_invlist[] = { /* for EBCDIC 037 */
- 101, /* Number of elements */
+ 103, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -296949,13 +320064,15 @@ static const UV UNI_LATN_invlist[] = { /* for EBCDIC 037 */
0x2189,
0x2C60,
0x2C80,
+ 0xA700,
+ 0xA708,
0xA722,
0xA788,
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA800,
0xA92E,
0xA92F,
@@ -296964,7 +320081,7 @@ static const UV UNI_LATN_invlist[] = { /* for EBCDIC 037 */
0xAB5C,
0xAB65,
0xAB66,
- 0xAB68,
+ 0xAB6A,
0xFB00,
0xFB07,
0xFF21,
@@ -297686,7 +320803,7 @@ static const UV UNI_LB__AI_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
- 1511, /* Number of elements */
+ 1541, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -297814,7 +320931,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8E2,
0x8E3,
0x904,
@@ -297979,7 +321096,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -298441,7 +321558,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -298497,6 +321614,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0x2E4C,
0x2E4D,
0x2E4E,
+ 0x2E50,
+ 0x2E53,
0x4DC0,
0x4E00,
0xA4D0,
@@ -298520,8 +321639,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -298582,7 +321701,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABE3,
0xFB00,
@@ -298628,7 +321747,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -298741,12 +321860,18 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0x10D24,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F46,
0x10F51,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11003,
@@ -298767,6 +321892,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -298834,7 +321961,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0x1145D,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -298862,7 +321989,19 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0x118EA,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -298919,6 +322058,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0x11EF3,
0x11EF7,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FDD,
0x11FE1,
@@ -298971,6 +322112,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0x16F51,
0x16F93,
0x16FA0,
+ 0x18B00,
+ 0x18CD6,
0x1BC00,
0x1BC6B,
0x1BC70,
@@ -299200,7 +322343,11 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
0x1F900,
0x1F90C,
0x1FA00,
- 0x1FA54
+ 0x1FA54,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* ASCII/Latin1 */
@@ -299211,7 +322358,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
- 1539, /* Number of elements */
+ 1569, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -299367,7 +322514,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8E2,
0x8E3,
0x904,
@@ -299532,7 +322679,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -299994,7 +323141,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -300050,6 +323197,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0x2E4C,
0x2E4D,
0x2E4E,
+ 0x2E50,
+ 0x2E53,
0x4DC0,
0x4E00,
0xA4D0,
@@ -300073,8 +323222,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -300135,7 +323284,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABE3,
0xFB00,
@@ -300181,7 +323330,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -300294,12 +323443,18 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0x10D24,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F46,
0x10F51,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11003,
@@ -300320,6 +323475,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -300387,7 +323544,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0x1145D,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -300415,7 +323572,19 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0x118EA,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -300472,6 +323641,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0x11EF3,
0x11EF7,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FDD,
0x11FE1,
@@ -300524,6 +323695,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0x16F51,
0x16F93,
0x16FA0,
+ 0x18B00,
+ 0x18CD6,
0x1BC00,
0x1BC6B,
0x1BC70,
@@ -300753,7 +323926,11 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
0x1F900,
0x1F90C,
0x1FA00,
- 0x1FA54
+ 0x1FA54,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* EBCDIC 1047 */
@@ -300764,7 +323941,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
- 1535, /* Number of elements */
+ 1565, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -300916,7 +324093,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8E2,
0x8E3,
0x904,
@@ -301081,7 +324258,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -301543,7 +324720,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -301599,6 +324776,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0x2E4C,
0x2E4D,
0x2E4E,
+ 0x2E50,
+ 0x2E53,
0x4DC0,
0x4E00,
0xA4D0,
@@ -301622,8 +324801,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -301684,7 +324863,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABE3,
0xFB00,
@@ -301730,7 +324909,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -301843,12 +325022,18 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0x10D24,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F46,
0x10F51,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11003,
@@ -301869,6 +325054,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11174,
@@ -301936,7 +325123,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0x1145D,
0x1145E,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -301964,7 +325151,19 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0x118EA,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -302021,6 +325220,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0x11EF3,
0x11EF7,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FDD,
0x11FE1,
@@ -302073,6 +325274,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0x16F51,
0x16F93,
0x16FA0,
+ 0x18B00,
+ 0x18CD6,
0x1BC00,
0x1BC6B,
0x1BC70,
@@ -302302,7 +325505,11 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */
0x1F900,
0x1F90C,
0x1FA00,
- 0x1FA54
+ 0x1FA54,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* EBCDIC 037 */
@@ -302322,7 +325529,7 @@ static const UV UNI_LB__B2_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_LB__BA_invlist[] = { /* for ASCII/Latin1 */
- 193, /* Number of elements */
+ 197, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -302463,6 +325670,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for ASCII/Latin1 */
0x10AF6,
0x10B39,
0x10B40,
+ 0x10EAD,
+ 0x10EAE,
0x11047,
0x11049,
0x110BE,
@@ -302483,7 +325692,7 @@ static const UV UNI_LB__BA_invlist[] = { /* for ASCII/Latin1 */
0x112AA,
0x1144B,
0x1144F,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x115C2,
0x115C4,
@@ -302493,6 +325702,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for ASCII/Latin1 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11947,
0x11A41,
0x11A45,
0x11A9A,
@@ -302529,7 +325740,7 @@ static const UV UNI_LB__BA_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 1047 */
- 193, /* Number of elements */
+ 197, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -302670,6 +325881,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 1047 */
0x10AF6,
0x10B39,
0x10B40,
+ 0x10EAD,
+ 0x10EAE,
0x11047,
0x11049,
0x110BE,
@@ -302690,7 +325903,7 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 1047 */
0x112AA,
0x1144B,
0x1144F,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x115C2,
0x115C4,
@@ -302700,6 +325913,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 1047 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11947,
0x11A41,
0x11A45,
0x11A9A,
@@ -302736,7 +325951,7 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 037 */
- 193, /* Number of elements */
+ 197, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -302877,6 +326092,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 037 */
0x10AF6,
0x10B39,
0x10B40,
+ 0x10EAD,
+ 0x10EAE,
0x11047,
0x11049,
0x110BE,
@@ -302897,7 +326114,7 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 037 */
0x112AA,
0x1144B,
0x1144F,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x115C2,
0x115C4,
@@ -302907,6 +326124,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 037 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11947,
0x11A41,
0x11A45,
0x11A9A,
@@ -303792,7 +327011,7 @@ static const UV UNI_LB__CL_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */
- 538, /* Number of elements */
+ 556, /* 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 */
@@ -303926,7 +327145,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -303980,7 +327199,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */
0xD58,
0xD62,
0xD64,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -304039,7 +327258,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -304106,6 +327325,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -304164,6 +327385,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -304188,6 +327411,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */
0x111C1,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111D0,
0x1122C,
0x11238,
0x1123E,
@@ -304230,6 +327455,16 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */
0x116B8,
0x1182C,
0x1183B,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
0x119D1,
0x119D8,
0x119DA,
@@ -304284,6 +327519,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -304344,7 +327581,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */
- 542, /* Number of elements */
+ 560, /* 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 */
@@ -304482,7 +327719,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -304536,7 +327773,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */
0xD58,
0xD62,
0xD64,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -304595,7 +327832,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -304662,6 +327899,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -304720,6 +327959,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -304744,6 +327985,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */
0x111C1,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111D0,
0x1122C,
0x11238,
0x1123E,
@@ -304786,6 +328029,16 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */
0x116B8,
0x1182C,
0x1183B,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
0x119D1,
0x119D8,
0x119DA,
@@ -304840,6 +328093,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -304900,7 +328155,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */
- 542, /* Number of elements */
+ 560, /* 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 */
@@ -305038,7 +328293,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -305092,7 +328347,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */
0xD58,
0xD62,
0xD64,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -305151,7 +328406,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -305218,6 +328473,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -305276,6 +328533,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -305300,6 +328559,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */
0x111C1,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111D0,
0x1122C,
0x11238,
0x1123E,
@@ -305342,6 +328603,16 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */
0x116B8,
0x1182C,
0x1183B,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
0x119D1,
0x119D8,
0x119DA,
@@ -305396,6 +328667,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1BCA0,
@@ -305552,96 +328825,6 @@ static const UV UNI_LB__CR_invlist[] = { /* for EBCDIC 037 */
# endif /* EBCDIC 037 */
-static const UV UNI_LB__EB_invlist[] = { /* for all charsets */
- 73, /* Number of elements */
- 148565664, /* Version and data structure type */
- 1, /* 0 if the list starts at 0;
- 1 if it starts at the element beyond 0 */
- 0x0,
- 0x261D,
- 0x261E,
- 0x26F9,
- 0x26FA,
- 0x270A,
- 0x270E,
- 0x1F385,
- 0x1F386,
- 0x1F3C2,
- 0x1F3C5,
- 0x1F3C7,
- 0x1F3C8,
- 0x1F3CA,
- 0x1F3CD,
- 0x1F442,
- 0x1F444,
- 0x1F446,
- 0x1F451,
- 0x1F466,
- 0x1F479,
- 0x1F47C,
- 0x1F47D,
- 0x1F481,
- 0x1F484,
- 0x1F485,
- 0x1F488,
- 0x1F48F,
- 0x1F490,
- 0x1F491,
- 0x1F492,
- 0x1F4AA,
- 0x1F4AB,
- 0x1F574,
- 0x1F576,
- 0x1F57A,
- 0x1F57B,
- 0x1F590,
- 0x1F591,
- 0x1F595,
- 0x1F597,
- 0x1F645,
- 0x1F648,
- 0x1F64B,
- 0x1F650,
- 0x1F6A3,
- 0x1F6A4,
- 0x1F6B4,
- 0x1F6B7,
- 0x1F6C0,
- 0x1F6C1,
- 0x1F6CC,
- 0x1F6CD,
- 0x1F90F,
- 0x1F910,
- 0x1F918,
- 0x1F920,
- 0x1F926,
- 0x1F927,
- 0x1F930,
- 0x1F93A,
- 0x1F93C,
- 0x1F93F,
- 0x1F9B5,
- 0x1F9B7,
- 0x1F9B8,
- 0x1F9BA,
- 0x1F9BB,
- 0x1F9BC,
- 0x1F9CD,
- 0x1F9D0,
- 0x1F9D1,
- 0x1F9DE
-};
-
-static const UV UNI_LB__EM_invlist[] = { /* for all charsets */
- 3, /* Number of elements */
- 148565664, /* Version and data structure type */
- 1, /* 0 if the list starts at 0;
- 1 if it starts at the element beyond 0 */
- 0x0,
- 0x1F3FB,
- 0x1F400
-};
-
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_LB__EX_invlist[] = { /* for ASCII/Latin1 */
@@ -305831,7 +329014,7 @@ static const UV UNI_LB__EX_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_LB__GL_invlist[] = { /* for ASCII/Latin1 */
- 25, /* Number of elements */
+ 27, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -305859,7 +329042,9 @@ static const UV UNI_LB__GL_invlist[] = { /* for ASCII/Latin1 */
0x202F,
0x2030,
0x13430,
- 0x13437
+ 0x13437,
+ 0x16FE4,
+ 0x16FE5
};
# endif /* ASCII/Latin1 */
@@ -305870,7 +329055,7 @@ static const UV UNI_LB__GL_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_LB__GL_invlist[] = { /* for EBCDIC 1047 */
- 25, /* Number of elements */
+ 27, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -305898,7 +329083,9 @@ static const UV UNI_LB__GL_invlist[] = { /* for EBCDIC 1047 */
0x202F,
0x2030,
0x13430,
- 0x13437
+ 0x13437,
+ 0x16FE4,
+ 0x16FE5
};
# endif /* EBCDIC 1047 */
@@ -305909,7 +329096,7 @@ static const UV UNI_LB__GL_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_LB__GL_invlist[] = { /* for EBCDIC 037 */
- 25, /* Number of elements */
+ 27, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -305937,7 +329124,9 @@ static const UV UNI_LB__GL_invlist[] = { /* for EBCDIC 037 */
0x202F,
0x2030,
0x13430,
- 0x13437
+ 0x13437,
+ 0x16FE4,
+ 0x16FE5
};
# endif /* EBCDIC 037 */
@@ -307631,7 +330820,7 @@ static const UV UNI_LB__HY_invlist[] = { /* for EBCDIC 037 */
# endif /* EBCDIC 037 */
static const UV UNI_LB__ID_invlist[] = { /* for all charsets */
- 327, /* Number of elements */
+ 331, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -307757,8 +330946,6 @@ static const UV UNI_LB__ID_invlist[] = { /* for all charsets */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x3200,
0x321F,
@@ -307831,7 +331018,9 @@ static const UV UNI_LB__ID_invlist[] = { /* for all charsets */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18B00,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B170,
@@ -307934,7 +331123,7 @@ static const UV UNI_LB__ID_invlist[] = { /* for all charsets */
0x1F890,
0x1F8AE,
0x1F900,
- 0x1F90C,
+ 0x1F90D,
0x1F90F,
0x1F910,
0x1F918,
@@ -307945,6 +331134,8 @@ static const UV UNI_LB__ID_invlist[] = { /* for all charsets */
0x1F93A,
0x1F93C,
0x1F93F,
+ 0x1F977,
+ 0x1F978,
0x1F9B5,
0x1F9B7,
0x1F9B8,
@@ -307957,6 +331148,8 @@ static const UV UNI_LB__ID_invlist[] = { /* for all charsets */
0x1F9DE,
0x1FA00,
0x1FA54,
+ 0x1FB00,
+ 0x1FC00,
0x1FFFE,
0x20000,
0x2FFFE,
@@ -308227,7 +331420,7 @@ static const UV UNI_LB__NS_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_LB__NU_invlist[] = { /* for ASCII/Latin1 */
- 119, /* Number of elements */
+ 123, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -308332,6 +331525,8 @@ static const UV UNI_LB__NU_invlist[] = { /* for ASCII/Latin1 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -308349,7 +331544,9 @@ static const UV UNI_LB__NU_invlist[] = { /* for ASCII/Latin1 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* ASCII/Latin1 */
@@ -308360,7 +331557,7 @@ static const UV UNI_LB__NU_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 1047 */
- 119, /* Number of elements */
+ 123, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -308465,6 +331662,8 @@ static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 1047 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -308482,7 +331681,9 @@ static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 1047 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 1047 */
@@ -308493,7 +331694,7 @@ static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 037 */
- 119, /* Number of elements */
+ 123, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -308598,6 +331799,8 @@ static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 037 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -308615,7 +331818,9 @@ static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 037 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 037 */
@@ -309851,7 +333056,7 @@ static const UV UNI_LB__WJ_invlist[] = { /* for all charsets */
};
static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
- 1240, /* Number of elements */
+ 1266, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -309902,7 +333107,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x984,
0x985,
@@ -310011,7 +333216,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -310100,8 +333305,6 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -310115,7 +333318,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -310288,7 +333491,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -310361,7 +333564,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -310396,7 +333599,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -310416,8 +333619,6 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
@@ -310432,9 +333633,9 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -310474,7 +333675,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -310562,7 +333763,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -310681,10 +333882,18 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -310702,12 +333911,10 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -310760,11 +333967,9 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -310794,7 +333999,21 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -310849,6 +334068,8 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -310896,11 +334117,15 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -311084,6 +334309,12 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */
0x1EEF0,
0x1EEF2,
0x1F000,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
+ 0x1FC00,
0x1FFFE,
0x20000,
0x2FFFE,
@@ -311226,17 +334457,29 @@ static const UV UNI_LINEARBSYLLABARY_invlist[] = { /* for all charsets */
};
static const UV UNI_LISU_invlist[] = { /* for all charsets */
- 3, /* Number of elements */
+ 5, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
0xA4D0,
- 0xA500
+ 0xA500,
+ 0x11FB0,
+ 0x11FB1
+};
+
+static const UV UNI_LISUSUP_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x11FB0,
+ 0x11FC0
};
static const UV UNI_LM_invlist[] = { /* for all charsets */
- 121, /* Number of elements */
+ 123, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -311345,6 +334588,8 @@ static const UV UNI_LM_invlist[] = { /* for all charsets */
0xAAF5,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xFF70,
0xFF71,
0xFF9E,
@@ -311366,7 +334611,7 @@ static const UV UNI_LM_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
- 953, /* Number of elements */
+ 979, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -311420,7 +334665,7 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -311571,7 +334816,7 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -311798,13 +335043,13 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA015,
0xA016,
@@ -312051,12 +335296,18 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
0x10C49,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -312069,6 +335320,8 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -312120,7 +335373,7 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -312144,7 +335397,19 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
0x11800,
0x1182C,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -312193,6 +335458,8 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12480,
@@ -312220,7 +335487,9 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -312312,7 +335581,7 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -312322,7 +335591,9 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* ASCII/Latin1 */
@@ -312333,7 +335604,7 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
- 951, /* Number of elements */
+ 977, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -312385,7 +335656,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -312536,7 +335807,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -312763,13 +336034,13 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA015,
0xA016,
@@ -313016,12 +336287,18 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
0x10C49,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -313034,6 +336311,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -313085,7 +336364,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -313109,7 +336388,19 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
0x11800,
0x1182C,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -313158,6 +336449,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12480,
@@ -313185,7 +336478,9 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -313277,7 +336572,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -313287,7 +336582,9 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 1047 */
@@ -313298,7 +336595,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
- 951, /* Number of elements */
+ 977, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -313350,7 +336647,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -313501,7 +336798,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -313728,13 +337025,13 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA015,
0xA016,
@@ -313981,12 +337278,18 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
0x10C49,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -313999,6 +337302,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -314050,7 +337355,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -314074,7 +337379,19 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
0x11800,
0x1182C,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -314123,6 +337440,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12480,
@@ -314150,7 +337469,9 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -314242,7 +337563,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -314252,7 +337573,9 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 037 */
@@ -314312,7 +337635,7 @@ static const UV UNI_LYDI_invlist[] = { /* for all charsets */
};
static const UV UNI_M_invlist[] = { /* for all charsets */
- 561, /* Number of elements */
+ 581, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -314433,7 +337756,7 @@ static const UV UNI_M_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -314487,7 +337810,7 @@ static const UV UNI_M_invlist[] = { /* for all charsets */
0xD58,
0xD62,
0xD64,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -314582,7 +337905,7 @@ static const UV UNI_M_invlist[] = { /* for all charsets */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -314639,6 +337962,8 @@ static const UV UNI_M_invlist[] = { /* for all charsets */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -314709,6 +338034,8 @@ static const UV UNI_M_invlist[] = { /* for all charsets */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -314733,6 +338060,8 @@ static const UV UNI_M_invlist[] = { /* for all charsets */
0x111C1,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111D0,
0x1122C,
0x11238,
0x1123E,
@@ -314777,6 +338106,16 @@ static const UV UNI_M_invlist[] = { /* for all charsets */
0x1172C,
0x1182C,
0x1183B,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
0x119D1,
0x119D8,
0x119DA,
@@ -314831,6 +338170,10 @@ static const UV UNI_M_invlist[] = { /* for all charsets */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1D165,
@@ -315860,7 +339203,7 @@ static const UV UNI_MAYANNUMERALS_invlist[] = { /* for all charsets */
};
static const UV UNI_MC_invlist[] = { /* for all charsets */
- 337, /* Number of elements */
+ 351, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -316103,6 +339446,8 @@ static const UV UNI_MC_invlist[] = { /* for all charsets */
0x111B6,
0x111BF,
0x111C1,
+ 0x111CE,
+ 0x111CF,
0x1122C,
0x1122F,
0x11232,
@@ -316165,6 +339510,16 @@ static const UV UNI_MC_invlist[] = { /* for all charsets */
0x1182F,
0x11838,
0x11839,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193D,
+ 0x1193E,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11943,
0x119D1,
0x119D4,
0x119DC,
@@ -316197,6 +339552,8 @@ static const UV UNI_MC_invlist[] = { /* for all charsets */
0x11EF7,
0x16F51,
0x16F88,
+ 0x16FF0,
+ 0x16FF2,
0x1D165,
0x1D167,
0x1D16D,
@@ -316352,7 +339709,7 @@ static const UV UNI_MISCTECHNICAL_invlist[] = { /* for all charsets */
};
static const UV UNI_MLYM_invlist[] = { /* for all charsets */
- 25, /* Number of elements */
+ 23, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -316362,8 +339719,6 @@ static const UV UNI_MLYM_invlist[] = { /* for all charsets */
0x964,
0x966,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -316384,7 +339739,7 @@ static const UV UNI_MLYM_invlist[] = { /* for all charsets */
};
static const UV UNI_MN_invlist[] = { /* for all charsets */
- 637, /* Number of elements */
+ 655, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -316505,7 +339860,7 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */
0xB45,
0xB4D,
0xB4E,
- 0xB56,
+ 0xB55,
0xB57,
0xB62,
0xB64,
@@ -316551,6 +339906,8 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */
0xD4E,
0xD62,
0xD64,
+ 0xD81,
+ 0xD82,
0xDCA,
0xDCB,
0xDD2,
@@ -316665,6 +340022,8 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */
0x1A80,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B04,
0x1B34,
@@ -316745,6 +340104,8 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */
0xA80C,
0xA825,
0xA827,
+ 0xA82C,
+ 0xA82D,
0xA8C4,
0xA8C6,
0xA8E0,
@@ -316823,6 +340184,8 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11001,
@@ -316849,6 +340212,8 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */
0x111BF,
0x111C9,
0x111CD,
+ 0x111CF,
+ 0x111D0,
0x1122F,
0x11232,
0x11234,
@@ -316919,6 +340284,12 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */
0x11838,
0x11839,
0x1183B,
+ 0x1193B,
+ 0x1193D,
+ 0x1193E,
+ 0x1193F,
+ 0x11943,
+ 0x11944,
0x119D4,
0x119D8,
0x119DA,
@@ -316981,6 +340352,8 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */
0x16F50,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
0x1BC9D,
0x1BC9F,
0x1D167,
@@ -317188,7 +340561,7 @@ static const UV UNI_MYMR_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_N_invlist[] = { /* for ASCII/Latin1 */
- 261, /* Number of elements */
+ 267, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -317385,6 +340758,8 @@ static const UV UNI_N_invlist[] = { /* for ASCII/Latin1 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x11052,
0x11070,
0x110F0,
@@ -317409,6 +340784,8 @@ static const UV UNI_N_invlist[] = { /* for ASCII/Latin1 */
0x1173C,
0x118E0,
0x118F3,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C6D,
0x11D50,
@@ -317452,7 +340829,9 @@ static const UV UNI_N_invlist[] = { /* for ASCII/Latin1 */
0x1ED2F,
0x1ED3E,
0x1F100,
- 0x1F10D
+ 0x1F10D,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* ASCII/Latin1 */
@@ -317463,7 +340842,7 @@ static const UV UNI_N_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_N_invlist[] = { /* for EBCDIC 1047 */
- 261, /* Number of elements */
+ 267, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -317660,6 +341039,8 @@ static const UV UNI_N_invlist[] = { /* for EBCDIC 1047 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x11052,
0x11070,
0x110F0,
@@ -317684,6 +341065,8 @@ static const UV UNI_N_invlist[] = { /* for EBCDIC 1047 */
0x1173C,
0x118E0,
0x118F3,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C6D,
0x11D50,
@@ -317727,7 +341110,9 @@ static const UV UNI_N_invlist[] = { /* for EBCDIC 1047 */
0x1ED2F,
0x1ED3E,
0x1F100,
- 0x1F10D
+ 0x1F10D,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 1047 */
@@ -317738,7 +341123,7 @@ static const UV UNI_N_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_N_invlist[] = { /* for EBCDIC 037 */
- 261, /* Number of elements */
+ 267, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -317935,6 +341320,8 @@ static const UV UNI_N_invlist[] = { /* for EBCDIC 037 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x11052,
0x11070,
0x110F0,
@@ -317959,6 +341346,8 @@ static const UV UNI_N_invlist[] = { /* for EBCDIC 037 */
0x1173C,
0x118E0,
0x118F3,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C6D,
0x11D50,
@@ -318002,7 +341391,9 @@ static const UV UNI_N_invlist[] = { /* for EBCDIC 037 */
0x1ED2F,
0x1ED3E,
0x1F100,
- 0x1F10D
+ 0x1F10D,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 037 */
@@ -318044,7 +341435,7 @@ static const UV UNI_NARB_invlist[] = { /* for all charsets */
};
static const UV UNI_NB_invlist[] = { /* for all charsets */
- 108, /* Number of elements */
+ 110, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -318073,10 +341464,10 @@ static const UV UNI_NB_invlist[] = { /* for all charsets */
0x10C80,
0x10D40,
0x10E60,
- 0x10E80,
+ 0x10EC0,
0x10F00,
0x10F70,
- 0x10FE0,
+ 0x10FB0,
0x11250,
0x11280,
0x11380,
@@ -318089,7 +341480,7 @@ static const UV UNI_NB_invlist[] = { /* for all charsets */
0x11800,
0x11850,
0x118A0,
- 0x11900,
+ 0x11960,
0x119A0,
0x11AB0,
0x11AC0,
@@ -318100,7 +341491,7 @@ static const UV UNI_NB_invlist[] = { /* for all charsets */
0x11DB0,
0x11EE0,
0x11F00,
- 0x11FC0,
+ 0x11FB0,
0x12550,
0x13000,
0x13440,
@@ -318115,7 +341506,7 @@ static const UV UNI_NB_invlist[] = { /* for all charsets */
0x16F00,
0x16FA0,
0x16FE0,
- 0x18B00,
+ 0x18D90,
0x1B000,
0x1B300,
0x1BC00,
@@ -318143,13 +341534,15 @@ static const UV UNI_NB_invlist[] = { /* for all charsets */
0x1EE00,
0x1EF00,
0x1F000,
- 0x1FB00,
+ 0x1FC00,
0x20000,
0x2A6E0,
0x2A700,
0x2EBF0,
0x2F800,
0x2FA20,
+ 0x30000,
+ 0x31350,
0xE0000,
0xE0080,
0xE0100,
@@ -318171,21 +341564,19 @@ static const UV UNI_NBAT_invlist[] = { /* for all charsets */
};
static const UV UNI_NEWA_invlist[] = { /* for all charsets */
- 7, /* Number of elements */
+ 5, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460
+ 0x11462
};
static const UV UNI_NFCQC__M_invlist[] = { /* for all charsets */
- 83, /* Number of elements */
+ 85, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -318271,11 +341662,13 @@ static const UV UNI_NFCQC__M_invlist[] = { /* for all charsets */
0x114BD,
0x114BE,
0x115AF,
- 0x115B0
+ 0x115B0,
+ 0x11930,
+ 0x11931
};
static const UV UNI_NFCQC__Y_invlist[] = { /* for all charsets */
- 223, /* Number of elements */
+ 225, /* 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 */
@@ -318496,6 +341889,8 @@ static const UV UNI_NFCQC__Y_invlist[] = { /* for all charsets */
0x114BE,
0x115AF,
0x115B0,
+ 0x11930,
+ 0x11931,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -318507,7 +341902,7 @@ static const UV UNI_NFCQC__Y_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NFDQC__Y_invlist[] = { /* for ASCII/Latin1 */
- 463, /* Number of elements */
+ 465, /* 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 */
@@ -318968,6 +342363,8 @@ static const UV UNI_NFDQC__Y_invlist[] = { /* for ASCII/Latin1 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -318984,7 +342381,7 @@ static const UV UNI_NFDQC__Y_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NFDQC__Y_invlist[] = { /* for EBCDIC 1047 */
- 467, /* Number of elements */
+ 469, /* 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 */
@@ -319449,6 +342846,8 @@ static const UV UNI_NFDQC__Y_invlist[] = { /* for EBCDIC 1047 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -319465,7 +342864,7 @@ static const UV UNI_NFDQC__Y_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NFDQC__Y_invlist[] = { /* for EBCDIC 037 */
- 467, /* Number of elements */
+ 469, /* 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 */
@@ -319930,6 +343329,8 @@ static const UV UNI_NFDQC__Y_invlist[] = { /* for EBCDIC 037 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -319943,7 +343344,7 @@ static const UV UNI_NFDQC__Y_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NFKCQC__N_invlist[] = { /* for ASCII/Latin1 */
- 497, /* Number of elements */
+ 501, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -320238,6 +343639,8 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for ASCII/Latin1 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xF900,
0xFA0E,
0xFA10,
@@ -320442,6 +343845,8 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for ASCII/Latin1 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -320454,7 +343859,7 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 1047 */
- 503, /* Number of elements */
+ 507, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -320755,6 +344160,8 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 1047 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xF900,
0xFA0E,
0xFA10,
@@ -320959,6 +344366,8 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 1047 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -320971,7 +344380,7 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 037 */
- 501, /* Number of elements */
+ 505, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -321270,6 +344679,8 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 037 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xF900,
0xFA0E,
0xFA10,
@@ -321474,6 +344885,8 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 037 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -321483,7 +344896,7 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NFKCQC__Y_invlist[] = { /* for ASCII/Latin1 */
- 571, /* Number of elements */
+ 577, /* 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 */
@@ -321836,6 +345249,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for ASCII/Latin1 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xF900,
0xFA0E,
0xFA10,
@@ -321926,6 +345341,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for ASCII/Latin1 */
0x114BE,
0x115AF,
0x115B0,
+ 0x11930,
+ 0x11931,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -322056,6 +345473,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for ASCII/Latin1 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -322068,7 +345487,7 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 1047 */
- 577, /* Number of elements */
+ 583, /* 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 */
@@ -322427,6 +345846,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 1047 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xF900,
0xFA0E,
0xFA10,
@@ -322517,6 +345938,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 1047 */
0x114BE,
0x115AF,
0x115B0,
+ 0x11930,
+ 0x11931,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -322647,6 +346070,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 1047 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -322659,7 +346084,7 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 037 */
- 575, /* Number of elements */
+ 581, /* 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 */
@@ -323016,6 +346441,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 037 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xF900,
0xFA0E,
0xFA10,
@@ -323106,6 +346533,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 037 */
0x114BE,
0x115AF,
0x115B0,
+ 0x11930,
+ 0x11931,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -323236,6 +346665,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 037 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -323245,7 +346676,7 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NFKDQC__N_invlist[] = { /* for ASCII/Latin1 */
- 779, /* Number of elements */
+ 785, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -323804,6 +347235,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for ASCII/Latin1 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xAC00,
0xD7A4,
0xF900,
@@ -323896,6 +347329,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for ASCII/Latin1 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -324026,6 +347461,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for ASCII/Latin1 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -324038,7 +347475,7 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 1047 */
- 777, /* Number of elements */
+ 783, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -324595,6 +348032,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 1047 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xAC00,
0xD7A4,
0xF900,
@@ -324687,6 +348126,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 1047 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -324817,6 +348258,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 1047 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -324829,7 +348272,7 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 037 */
- 779, /* Number of elements */
+ 785, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -325388,6 +348831,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 037 */
0xA7FA,
0xAB5C,
0xAB60,
+ 0xAB69,
+ 0xAB6A,
0xAC00,
0xD7A4,
0xF900,
@@ -325480,6 +348925,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 037 */
0x114BF,
0x115BA,
0x115BC,
+ 0x11938,
+ 0x11939,
0x1D15E,
0x1D165,
0x1D1BB,
@@ -325610,6 +349057,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 037 */
0x1F249,
0x1F250,
0x1F252,
+ 0x1FBF0,
+ 0x1FBFA,
0x2F800,
0x2FA1E
};
@@ -325663,7 +349112,7 @@ static const UV UNI_NL_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NO_invlist[] = { /* for ASCII/Latin1 */
- 141, /* Number of elements */
+ 143, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -325774,6 +349223,8 @@ static const UV UNI_NO_invlist[] = { /* for ASCII/Latin1 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x11052,
0x11066,
0x111E1,
@@ -325818,7 +349269,7 @@ static const UV UNI_NO_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NO_invlist[] = { /* for EBCDIC 1047 */
- 143, /* Number of elements */
+ 145, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -325931,6 +349382,8 @@ static const UV UNI_NO_invlist[] = { /* for EBCDIC 1047 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x11052,
0x11066,
0x111E1,
@@ -325975,7 +349428,7 @@ static const UV UNI_NO_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NO_invlist[] = { /* for EBCDIC 037 */
- 143, /* Number of elements */
+ 145, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -326088,6 +349541,8 @@ static const UV UNI_NO_invlist[] = { /* for EBCDIC 037 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x11052,
0x11066,
0x111E1,
@@ -326307,7 +349762,7 @@ static const UV UNI_NT__DI_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NT__NU_invlist[] = { /* for ASCII/Latin1 */
- 301, /* Number of elements */
+ 303, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -326544,6 +349999,8 @@ static const UV UNI_NT__NU_invlist[] = { /* for ASCII/Latin1 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x1105B,
0x11066,
0x111E1,
@@ -326622,7 +350079,7 @@ static const UV UNI_NT__NU_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NT__NU_invlist[] = { /* for EBCDIC 1047 */
- 301, /* Number of elements */
+ 303, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -326859,6 +350316,8 @@ static const UV UNI_NT__NU_invlist[] = { /* for EBCDIC 1047 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x1105B,
0x11066,
0x111E1,
@@ -326937,7 +350396,7 @@ static const UV UNI_NT__NU_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NT__NU_invlist[] = { /* for EBCDIC 037 */
- 301, /* Number of elements */
+ 303, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -327174,6 +350633,8 @@ static const UV UNI_NT__NU_invlist[] = { /* for EBCDIC 037 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x1105B,
0x11066,
0x111E1,
@@ -327269,7 +350730,7 @@ static const UV UNI_NV___MINUS_1_SLASH_2_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NV__0_invlist[] = { /* for ASCII/Latin1 */
- 159, /* Number of elements */
+ 163, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -327398,6 +350859,8 @@ static const UV UNI_NV__0_invlist[] = { /* for ASCII/Latin1 */
0x11731,
0x118E0,
0x118E1,
+ 0x11950,
+ 0x11951,
0x11C50,
0x11C51,
0x11D50,
@@ -327431,7 +350894,9 @@ static const UV UNI_NV__0_invlist[] = { /* for ASCII/Latin1 */
0x1F100,
0x1F102,
0x1F10B,
- 0x1F10D
+ 0x1F10D,
+ 0x1FBF0,
+ 0x1FBF1
};
# endif /* ASCII/Latin1 */
@@ -327442,7 +350907,7 @@ static const UV UNI_NV__0_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 1047 */
- 159, /* Number of elements */
+ 163, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -327571,6 +351036,8 @@ static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 1047 */
0x11731,
0x118E0,
0x118E1,
+ 0x11950,
+ 0x11951,
0x11C50,
0x11C51,
0x11D50,
@@ -327604,7 +351071,9 @@ static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 1047 */
0x1F100,
0x1F102,
0x1F10B,
- 0x1F10D
+ 0x1F10D,
+ 0x1FBF0,
+ 0x1FBF1
};
# endif /* EBCDIC 1047 */
@@ -327615,7 +351084,7 @@ static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 037 */
- 159, /* Number of elements */
+ 163, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -327744,6 +351213,8 @@ static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 037 */
0x11731,
0x118E0,
0x118E1,
+ 0x11950,
+ 0x11951,
0x11C50,
0x11C51,
0x11D50,
@@ -327777,7 +351248,9 @@ static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 037 */
0x1F100,
0x1F102,
0x1F10B,
- 0x1F10D
+ 0x1F10D,
+ 0x1FBF0,
+ 0x1FBF1
};
# endif /* EBCDIC 037 */
@@ -327785,7 +351258,7 @@ static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NV__1_invlist[] = { /* for ASCII/Latin1 */
- 269, /* Number of elements */
+ 275, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -327966,6 +351439,8 @@ static const UV UNI_NV__1_invlist[] = { /* for ASCII/Latin1 */
0x10F1E,
0x10F51,
0x10F52,
+ 0x10FC5,
+ 0x10FC6,
0x11052,
0x11053,
0x11067,
@@ -327992,6 +351467,8 @@ static const UV UNI_NV__1_invlist[] = { /* for ASCII/Latin1 */
0x11732,
0x118E1,
0x118E2,
+ 0x11951,
+ 0x11952,
0x11C51,
0x11C52,
0x11C5A,
@@ -328056,6 +351533,8 @@ static const UV UNI_NV__1_invlist[] = { /* for ASCII/Latin1 */
0x1ED02,
0x1F102,
0x1F103,
+ 0x1FBF1,
+ 0x1FBF2,
0x2092A,
0x2092B
};
@@ -328068,7 +351547,7 @@ static const UV UNI_NV__1_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 1047 */
- 269, /* Number of elements */
+ 275, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -328249,6 +351728,8 @@ static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 1047 */
0x10F1E,
0x10F51,
0x10F52,
+ 0x10FC5,
+ 0x10FC6,
0x11052,
0x11053,
0x11067,
@@ -328275,6 +351756,8 @@ static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 1047 */
0x11732,
0x118E1,
0x118E2,
+ 0x11951,
+ 0x11952,
0x11C51,
0x11C52,
0x11C5A,
@@ -328339,6 +351822,8 @@ static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 1047 */
0x1ED02,
0x1F102,
0x1F103,
+ 0x1FBF1,
+ 0x1FBF2,
0x2092A,
0x2092B
};
@@ -328351,7 +351836,7 @@ static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 037 */
- 269, /* Number of elements */
+ 275, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -328532,6 +352017,8 @@ static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 037 */
0x10F1E,
0x10F51,
0x10F52,
+ 0x10FC5,
+ 0x10FC6,
0x11052,
0x11053,
0x11067,
@@ -328558,6 +352045,8 @@ static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 037 */
0x11732,
0x118E1,
0x118E2,
+ 0x11951,
+ 0x11952,
0x11C51,
0x11C52,
0x11C5A,
@@ -328622,6 +352111,8 @@ static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 037 */
0x1ED02,
0x1F102,
0x1F103,
+ 0x1FBF1,
+ 0x1FBF2,
0x2092A,
0x2092B
};
@@ -329105,7 +352596,7 @@ static const UV UNI_NV__1_SLASH_9_invlist[] = { /* for all charsets */
};
static const UV UNI_NV__10_invlist[] = { /* for all charsets */
- 115, /* Number of elements */
+ 117, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -329200,6 +352691,8 @@ static const UV UNI_NV__10_invlist[] = { /* for all charsets */
0x10F23,
0x10F52,
0x10F53,
+ 0x10FC9,
+ 0x10FCA,
0x1105B,
0x1105C,
0x111EA,
@@ -329227,7 +352720,7 @@ static const UV UNI_NV__10_invlist[] = { /* for all charsets */
};
static const UV UNI_NV__100_invlist[] = { /* for all charsets */
- 69, /* Number of elements */
+ 71, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -329288,6 +352781,8 @@ static const UV UNI_NV__100_invlist[] = { /* for all charsets */
0x10F26,
0x10F54,
0x10F55,
+ 0x10FCB,
+ 0x10FCC,
0x11064,
0x11065,
0x111F3,
@@ -329709,7 +353204,7 @@ static const UV UNI_NV__19_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NV__2_invlist[] = { /* for ASCII/Latin1 */
- 267, /* Number of elements */
+ 273, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -329880,6 +353375,8 @@ static const UV UNI_NV__2_invlist[] = { /* for ASCII/Latin1 */
0x10E62,
0x10F1E,
0x10F1F,
+ 0x10FC6,
+ 0x10FC7,
0x11053,
0x11054,
0x11068,
@@ -329906,6 +353403,8 @@ static const UV UNI_NV__2_invlist[] = { /* for ASCII/Latin1 */
0x11733,
0x118E2,
0x118E3,
+ 0x11952,
+ 0x11953,
0x11C52,
0x11C53,
0x11C5B,
@@ -329978,6 +353477,8 @@ static const UV UNI_NV__2_invlist[] = { /* for ASCII/Latin1 */
0x1ED30,
0x1F103,
0x1F104,
+ 0x1FBF2,
+ 0x1FBF3,
0x22390,
0x22391
};
@@ -329990,7 +353491,7 @@ static const UV UNI_NV__2_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 1047 */
- 267, /* Number of elements */
+ 273, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -330161,6 +353662,8 @@ static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 1047 */
0x10E62,
0x10F1E,
0x10F1F,
+ 0x10FC6,
+ 0x10FC7,
0x11053,
0x11054,
0x11068,
@@ -330187,6 +353690,8 @@ static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 1047 */
0x11733,
0x118E2,
0x118E3,
+ 0x11952,
+ 0x11953,
0x11C52,
0x11C53,
0x11C5B,
@@ -330259,6 +353764,8 @@ static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 1047 */
0x1ED30,
0x1F103,
0x1F104,
+ 0x1FBF2,
+ 0x1FBF3,
0x22390,
0x22391
};
@@ -330271,7 +353778,7 @@ static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 037 */
- 267, /* Number of elements */
+ 273, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -330442,6 +353949,8 @@ static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 037 */
0x10E62,
0x10F1E,
0x10F1F,
+ 0x10FC6,
+ 0x10FC7,
0x11053,
0x11054,
0x11068,
@@ -330468,6 +353977,8 @@ static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 037 */
0x11733,
0x118E2,
0x118E3,
+ 0x11952,
+ 0x11953,
0x11C52,
0x11C53,
0x11C5B,
@@ -330540,6 +354051,8 @@ static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 037 */
0x1ED30,
0x1F103,
0x1F104,
+ 0x1FBF2,
+ 0x1FBF3,
0x22390,
0x22391
};
@@ -330579,7 +354092,7 @@ static const UV UNI_NV__2_SLASH_5_invlist[] = { /* for all charsets */
};
static const UV UNI_NV__20_invlist[] = { /* for all charsets */
- 71, /* Number of elements */
+ 73, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -330638,6 +354151,8 @@ static const UV UNI_NV__20_invlist[] = { /* for all charsets */
0x10F24,
0x10F53,
0x10F54,
+ 0x10FCA,
+ 0x10FCB,
0x1105C,
0x1105D,
0x111EB,
@@ -330835,7 +354350,7 @@ static const UV UNI_NV__29_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NV__3_invlist[] = { /* for ASCII/Latin1 */
- 261, /* Number of elements */
+ 267, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -330994,6 +354509,8 @@ static const UV UNI_NV__3_invlist[] = { /* for ASCII/Latin1 */
0x10E63,
0x10F1F,
0x10F20,
+ 0x10FC7,
+ 0x10FC8,
0x11054,
0x11055,
0x11069,
@@ -331020,6 +354537,8 @@ static const UV UNI_NV__3_invlist[] = { /* for ASCII/Latin1 */
0x11734,
0x118E3,
0x118E4,
+ 0x11953,
+ 0x11954,
0x11C53,
0x11C54,
0x11C5C,
@@ -331092,6 +354611,8 @@ static const UV UNI_NV__3_invlist[] = { /* for ASCII/Latin1 */
0x1ED31,
0x1F104,
0x1F105,
+ 0x1FBF3,
+ 0x1FBF4,
0x20AFD,
0x20AFE,
0x20B19,
@@ -331110,7 +354631,7 @@ static const UV UNI_NV__3_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 1047 */
- 261, /* Number of elements */
+ 267, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -331269,6 +354790,8 @@ static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 1047 */
0x10E63,
0x10F1F,
0x10F20,
+ 0x10FC7,
+ 0x10FC8,
0x11054,
0x11055,
0x11069,
@@ -331295,6 +354818,8 @@ static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 1047 */
0x11734,
0x118E3,
0x118E4,
+ 0x11953,
+ 0x11954,
0x11C53,
0x11C54,
0x11C5C,
@@ -331367,6 +354892,8 @@ static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 1047 */
0x1ED31,
0x1F104,
0x1F105,
+ 0x1FBF3,
+ 0x1FBF4,
0x20AFD,
0x20AFE,
0x20B19,
@@ -331385,7 +354912,7 @@ static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 037 */
- 261, /* Number of elements */
+ 267, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -331544,6 +355071,8 @@ static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 037 */
0x10E63,
0x10F1F,
0x10F20,
+ 0x10FC7,
+ 0x10FC8,
0x11054,
0x11055,
0x11069,
@@ -331570,6 +355099,8 @@ static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 037 */
0x11734,
0x118E3,
0x118E4,
+ 0x11953,
+ 0x11954,
0x11C53,
0x11C54,
0x11C5C,
@@ -331642,6 +355173,8 @@ static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 037 */
0x1ED31,
0x1F104,
0x1F105,
+ 0x1FBF3,
+ 0x1FBF4,
0x20AFD,
0x20AFE,
0x20B19,
@@ -332035,7 +355568,7 @@ static const UV UNI_NV__39_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NV__4_invlist[] = { /* for ASCII/Latin1 */
- 247, /* Number of elements */
+ 253, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -332182,6 +355715,8 @@ static const UV UNI_NV__4_invlist[] = { /* for ASCII/Latin1 */
0x10E64,
0x10F20,
0x10F21,
+ 0x10FC8,
+ 0x10FC9,
0x11055,
0x11056,
0x1106A,
@@ -332208,6 +355743,8 @@ static const UV UNI_NV__4_invlist[] = { /* for ASCII/Latin1 */
0x11735,
0x118E4,
0x118E5,
+ 0x11954,
+ 0x11955,
0x11C54,
0x11C55,
0x11C5D,
@@ -332280,6 +355817,8 @@ static const UV UNI_NV__4_invlist[] = { /* for ASCII/Latin1 */
0x1ED32,
0x1F105,
0x1F106,
+ 0x1FBF4,
+ 0x1FBF5,
0x20064,
0x20065,
0x200E2,
@@ -332296,7 +355835,7 @@ static const UV UNI_NV__4_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 1047 */
- 247, /* Number of elements */
+ 253, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -332443,6 +355982,8 @@ static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 1047 */
0x10E64,
0x10F20,
0x10F21,
+ 0x10FC8,
+ 0x10FC9,
0x11055,
0x11056,
0x1106A,
@@ -332469,6 +356010,8 @@ static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 1047 */
0x11735,
0x118E4,
0x118E5,
+ 0x11954,
+ 0x11955,
0x11C54,
0x11C55,
0x11C5D,
@@ -332541,6 +356084,8 @@ static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 1047 */
0x1ED32,
0x1F105,
0x1F106,
+ 0x1FBF4,
+ 0x1FBF5,
0x20064,
0x20065,
0x200E2,
@@ -332557,7 +356102,7 @@ static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 037 */
- 247, /* Number of elements */
+ 253, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -332704,6 +356249,8 @@ static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 037 */
0x10E64,
0x10F20,
0x10F21,
+ 0x10FC8,
+ 0x10FC9,
0x11055,
0x11056,
0x1106A,
@@ -332730,6 +356277,8 @@ static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 037 */
0x11735,
0x118E4,
0x118E5,
+ 0x11954,
+ 0x11955,
0x11C54,
0x11C55,
0x11C5D,
@@ -332802,6 +356351,8 @@ static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 037 */
0x1ED32,
0x1F105,
0x1F106,
+ 0x1FBF4,
+ 0x1FBF5,
0x20064,
0x20065,
0x200E2,
@@ -333033,7 +356584,7 @@ static const UV UNI_NV__49_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NV__5_invlist[] = { /* for ASCII/Latin1 */
- 253, /* Number of elements */
+ 257, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -333216,6 +356767,8 @@ static const UV UNI_NV__5_invlist[] = { /* for ASCII/Latin1 */
0x11736,
0x118E5,
0x118E6,
+ 0x11955,
+ 0x11956,
0x11C55,
0x11C56,
0x11C5E,
@@ -333288,6 +356841,8 @@ static const UV UNI_NV__5_invlist[] = { /* for ASCII/Latin1 */
0x1ED33,
0x1F106,
0x1F107,
+ 0x1FBF5,
+ 0x1FBF6,
0x20121,
0x20122
};
@@ -333300,7 +356855,7 @@ static const UV UNI_NV__5_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 1047 */
- 253, /* Number of elements */
+ 257, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -333483,6 +357038,8 @@ static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 1047 */
0x11736,
0x118E5,
0x118E6,
+ 0x11955,
+ 0x11956,
0x11C55,
0x11C56,
0x11C5E,
@@ -333555,6 +357112,8 @@ static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 1047 */
0x1ED33,
0x1F106,
0x1F107,
+ 0x1FBF5,
+ 0x1FBF6,
0x20121,
0x20122
};
@@ -333567,7 +357126,7 @@ static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 037 */
- 253, /* Number of elements */
+ 257, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -333750,6 +357309,8 @@ static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 037 */
0x11736,
0x118E5,
0x118E6,
+ 0x11955,
+ 0x11956,
0x11C55,
0x11C56,
0x11C5E,
@@ -333822,6 +357383,8 @@ static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 037 */
0x1ED33,
0x1F106,
0x1F107,
+ 0x1FBF5,
+ 0x1FBF6,
0x20121,
0x20122
};
@@ -334023,7 +357586,7 @@ static const UV UNI_NV__500000_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NV__6_invlist[] = { /* for ASCII/Latin1 */
- 223, /* Number of elements */
+ 227, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -334186,6 +357749,8 @@ static const UV UNI_NV__6_invlist[] = { /* for ASCII/Latin1 */
0x11737,
0x118E6,
0x118E7,
+ 0x11956,
+ 0x11957,
0x11C56,
0x11C57,
0x11C5F,
@@ -334248,6 +357813,8 @@ static const UV UNI_NV__6_invlist[] = { /* for ASCII/Latin1 */
0x1ED34,
0x1F107,
0x1F108,
+ 0x1FBF6,
+ 0x1FBF7,
0x20AEA,
0x20AEB
};
@@ -334260,7 +357827,7 @@ static const UV UNI_NV__6_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 1047 */
- 223, /* Number of elements */
+ 227, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -334423,6 +357990,8 @@ static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 1047 */
0x11737,
0x118E6,
0x118E7,
+ 0x11956,
+ 0x11957,
0x11C56,
0x11C57,
0x11C5F,
@@ -334485,6 +358054,8 @@ static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 1047 */
0x1ED34,
0x1F107,
0x1F108,
+ 0x1FBF6,
+ 0x1FBF7,
0x20AEA,
0x20AEB
};
@@ -334497,7 +358068,7 @@ static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 037 */
- 223, /* Number of elements */
+ 227, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -334660,6 +358231,8 @@ static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 037 */
0x11737,
0x118E6,
0x118E7,
+ 0x11956,
+ 0x11957,
0x11C56,
0x11C57,
0x11C5F,
@@ -334722,6 +358295,8 @@ static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 037 */
0x1ED34,
0x1F107,
0x1F108,
+ 0x1FBF6,
+ 0x1FBF7,
0x20AEA,
0x20AEB
};
@@ -334829,7 +358404,7 @@ static const UV UNI_NV__600000_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NV__7_invlist[] = { /* for ASCII/Latin1 */
- 217, /* Number of elements */
+ 221, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -334988,6 +358563,8 @@ static const UV UNI_NV__7_invlist[] = { /* for ASCII/Latin1 */
0x11738,
0x118E7,
0x118E8,
+ 0x11957,
+ 0x11958,
0x11C57,
0x11C58,
0x11C60,
@@ -335048,6 +358625,8 @@ static const UV UNI_NV__7_invlist[] = { /* for ASCII/Latin1 */
0x1ED35,
0x1F108,
0x1F109,
+ 0x1FBF7,
+ 0x1FBF8,
0x20001,
0x20002
};
@@ -335060,7 +358639,7 @@ static const UV UNI_NV__7_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 1047 */
- 217, /* Number of elements */
+ 221, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -335219,6 +358798,8 @@ static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 1047 */
0x11738,
0x118E7,
0x118E8,
+ 0x11957,
+ 0x11958,
0x11C57,
0x11C58,
0x11C60,
@@ -335279,6 +358860,8 @@ static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 1047 */
0x1ED35,
0x1F108,
0x1F109,
+ 0x1FBF7,
+ 0x1FBF8,
0x20001,
0x20002
};
@@ -335291,7 +358874,7 @@ static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 037 */
- 217, /* Number of elements */
+ 221, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -335450,6 +359033,8 @@ static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 037 */
0x11738,
0x118E7,
0x118E8,
+ 0x11957,
+ 0x11958,
0x11C57,
0x11C58,
0x11C60,
@@ -335510,6 +359095,8 @@ static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 037 */
0x1ED35,
0x1F108,
0x1F109,
+ 0x1FBF7,
+ 0x1FBF8,
0x20001,
0x20002
};
@@ -335645,7 +359232,7 @@ static const UV UNI_NV__700000_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NV__8_invlist[] = { /* for ASCII/Latin1 */
- 211, /* Number of elements */
+ 215, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -335800,6 +359387,8 @@ static const UV UNI_NV__8_invlist[] = { /* for ASCII/Latin1 */
0x11739,
0x118E8,
0x118E9,
+ 0x11958,
+ 0x11959,
0x11C58,
0x11C59,
0x11C61,
@@ -335859,7 +359448,9 @@ static const UV UNI_NV__8_invlist[] = { /* for ASCII/Latin1 */
0x1ED35,
0x1ED36,
0x1F109,
- 0x1F10A
+ 0x1F10A,
+ 0x1FBF8,
+ 0x1FBF9
};
# endif /* ASCII/Latin1 */
@@ -335870,7 +359461,7 @@ static const UV UNI_NV__8_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 1047 */
- 211, /* Number of elements */
+ 215, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -336025,6 +359616,8 @@ static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 1047 */
0x11739,
0x118E8,
0x118E9,
+ 0x11958,
+ 0x11959,
0x11C58,
0x11C59,
0x11C61,
@@ -336084,7 +359677,9 @@ static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 1047 */
0x1ED35,
0x1ED36,
0x1F109,
- 0x1F10A
+ 0x1F10A,
+ 0x1FBF8,
+ 0x1FBF9
};
# endif /* EBCDIC 1047 */
@@ -336095,7 +359690,7 @@ static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 037 */
- 211, /* Number of elements */
+ 215, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -336250,6 +359845,8 @@ static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 037 */
0x11739,
0x118E8,
0x118E9,
+ 0x11958,
+ 0x11959,
0x11C58,
0x11C59,
0x11C61,
@@ -336309,7 +359906,9 @@ static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 037 */
0x1ED35,
0x1ED36,
0x1F109,
- 0x1F10A
+ 0x1F10A,
+ 0x1FBF8,
+ 0x1FBF9
};
# endif /* EBCDIC 037 */
@@ -336411,7 +360010,7 @@ static const UV UNI_NV__800000_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NV__9_invlist[] = { /* for ASCII/Latin1 */
- 215, /* Number of elements */
+ 219, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -336568,6 +360167,8 @@ static const UV UNI_NV__9_invlist[] = { /* for ASCII/Latin1 */
0x1173A,
0x118E9,
0x118EA,
+ 0x11959,
+ 0x1195A,
0x11C59,
0x11C5A,
0x11C62,
@@ -336628,6 +360229,8 @@ static const UV UNI_NV__9_invlist[] = { /* for ASCII/Latin1 */
0x1ED37,
0x1F10A,
0x1F10B,
+ 0x1FBF9,
+ 0x1FBFA,
0x2F890,
0x2F891
};
@@ -336640,7 +360243,7 @@ static const UV UNI_NV__9_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 1047 */
- 215, /* Number of elements */
+ 219, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -336797,6 +360400,8 @@ static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 1047 */
0x1173A,
0x118E9,
0x118EA,
+ 0x11959,
+ 0x1195A,
0x11C59,
0x11C5A,
0x11C62,
@@ -336857,6 +360462,8 @@ static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 1047 */
0x1ED37,
0x1F10A,
0x1F10B,
+ 0x1FBF9,
+ 0x1FBFA,
0x2F890,
0x2F891
};
@@ -336869,7 +360476,7 @@ static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 037 */
- 215, /* Number of elements */
+ 219, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -337026,6 +360633,8 @@ static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 037 */
0x1173A,
0x118E9,
0x118EA,
+ 0x11959,
+ 0x1195A,
0x11C59,
0x11C5A,
0x11C62,
@@ -337086,6 +360695,8 @@ static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 037 */
0x1ED37,
0x1F10A,
0x1F10B,
+ 0x1FBF9,
+ 0x1FBFA,
0x2F890,
0x2F891
};
@@ -337201,7 +360812,7 @@ static const UV UNI_NV__900000_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_NV__NAN_invlist[] = { /* for ASCII/Latin1 */
- 405, /* Number of elements */
+ 411, /* 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 */
@@ -337510,6 +361121,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for ASCII/Latin1 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x11052,
0x11070,
0x110F0,
@@ -337534,6 +361147,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for ASCII/Latin1 */
0x1173C,
0x118E0,
0x118F3,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C6D,
0x11D50,
@@ -337578,6 +361193,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for ASCII/Latin1 */
0x1ED3E,
0x1F100,
0x1F10D,
+ 0x1FBF0,
+ 0x1FBFA,
0x20001,
0x20002,
0x20064,
@@ -337620,7 +361237,7 @@ static const UV UNI_NV__NAN_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 1047 */
- 405, /* Number of elements */
+ 411, /* 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 */
@@ -337929,6 +361546,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 1047 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x11052,
0x11070,
0x110F0,
@@ -337953,6 +361572,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 1047 */
0x1173C,
0x118E0,
0x118F3,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C6D,
0x11D50,
@@ -337997,6 +361618,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 1047 */
0x1ED3E,
0x1F100,
0x1F10D,
+ 0x1FBF0,
+ 0x1FBFA,
0x20001,
0x20002,
0x20064,
@@ -338039,7 +361662,7 @@ static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 037 */
- 405, /* Number of elements */
+ 411, /* 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 */
@@ -338348,6 +361971,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 037 */
0x10F27,
0x10F51,
0x10F55,
+ 0x10FC5,
+ 0x10FCC,
0x11052,
0x11070,
0x110F0,
@@ -338372,6 +361997,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 037 */
0x1173C,
0x118E0,
0x118F3,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C6D,
0x11D50,
@@ -338416,6 +362043,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 037 */
0x1ED3E,
0x1F100,
0x1F10D,
+ 0x1FBF0,
+ 0x1FBFA,
0x20001,
0x20002,
0x20064,
@@ -338532,7 +362161,7 @@ static const UV UNI_ORYA_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -338583,7 +362212,7 @@ static const UV UNI_OTTOMANSIYAQNUMBERS_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */
- 365, /* Number of elements */
+ 371, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -338768,6 +362397,8 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */
0x2E2F,
0x2E30,
0x2E50,
+ 0x2E52,
+ 0x2E53,
0x3001,
0x3004,
0x3008,
@@ -338874,6 +362505,8 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */
0x10B40,
0x10B99,
0x10B9D,
+ 0x10EAD,
+ 0x10EAE,
0x10F55,
0x10F5A,
0x11047,
@@ -338900,7 +362533,7 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */
0x112AA,
0x1144B,
0x11450,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x1145D,
0x1145E,
@@ -338916,6 +362549,8 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */
0x1173F,
0x1183B,
0x1183C,
+ 0x11944,
+ 0x11947,
0x119E2,
0x119E3,
0x11A3F,
@@ -338962,7 +362597,7 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */
- 373, /* Number of elements */
+ 379, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -339155,6 +362790,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */
0x2E2F,
0x2E30,
0x2E50,
+ 0x2E52,
+ 0x2E53,
0x3001,
0x3004,
0x3008,
@@ -339261,6 +362898,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */
0x10B40,
0x10B99,
0x10B9D,
+ 0x10EAD,
+ 0x10EAE,
0x10F55,
0x10F5A,
0x11047,
@@ -339287,7 +362926,7 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */
0x112AA,
0x1144B,
0x11450,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x1145D,
0x1145E,
@@ -339303,6 +362942,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */
0x1173F,
0x1183B,
0x1183C,
+ 0x11944,
+ 0x11947,
0x119E2,
0x119E3,
0x11A3F,
@@ -339349,7 +362990,7 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */
- 371, /* Number of elements */
+ 377, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -339540,6 +363181,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */
0x2E2F,
0x2E30,
0x2E50,
+ 0x2E52,
+ 0x2E53,
0x3001,
0x3004,
0x3008,
@@ -339646,6 +363289,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */
0x10B40,
0x10B99,
0x10B9D,
+ 0x10EAD,
+ 0x10EAE,
0x10F55,
0x10F5A,
0x11047,
@@ -339672,7 +363317,7 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */
0x112AA,
0x1144B,
0x11450,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x1145D,
0x1145E,
@@ -339688,6 +363333,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */
0x1173F,
0x1183B,
0x1183C,
+ 0x11944,
+ 0x11947,
0x119E2,
0x119E3,
0x11A3F,
@@ -340065,7 +363712,7 @@ static const UV UNI_PCM_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_PD_invlist[] = { /* for ASCII/Latin1 */
- 35, /* Number of elements */
+ 37, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -340103,7 +363750,9 @@ static const UV UNI_PD_invlist[] = { /* for ASCII/Latin1 */
0xFE63,
0xFE64,
0xFF0D,
- 0xFF0E
+ 0xFF0E,
+ 0x10EAD,
+ 0x10EAE
};
# endif /* ASCII/Latin1 */
@@ -340114,7 +363763,7 @@ static const UV UNI_PD_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_PD_invlist[] = { /* for EBCDIC 1047 */
- 35, /* Number of elements */
+ 37, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -340152,7 +363801,9 @@ static const UV UNI_PD_invlist[] = { /* for EBCDIC 1047 */
0xFE63,
0xFE64,
0xFF0D,
- 0xFF0E
+ 0xFF0E,
+ 0x10EAD,
+ 0x10EAE
};
# endif /* EBCDIC 1047 */
@@ -340163,7 +363814,7 @@ static const UV UNI_PD_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_PD_invlist[] = { /* for EBCDIC 037 */
- 35, /* Number of elements */
+ 37, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -340201,7 +363852,9 @@ static const UV UNI_PD_invlist[] = { /* for EBCDIC 037 */
0xFE63,
0xFE64,
0xFF0D,
- 0xFF0E
+ 0xFF0E,
+ 0x10EAD,
+ 0x10EAE
};
# endif /* EBCDIC 037 */
@@ -340999,7 +364652,7 @@ static const UV UNI_PLAYINGCARDS_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */
- 359, /* Number of elements */
+ 363, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -341180,6 +364833,8 @@ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */
0x2E42,
0x2E43,
0x2E50,
+ 0x2E52,
+ 0x2E53,
0x3001,
0x3004,
0x303D,
@@ -341310,7 +364965,7 @@ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */
0x112AA,
0x1144B,
0x11450,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x1145D,
0x1145E,
@@ -341326,6 +364981,8 @@ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */
0x1173F,
0x1183B,
0x1183C,
+ 0x11944,
+ 0x11947,
0x119E2,
0x119E3,
0x11A3F,
@@ -341372,7 +365029,7 @@ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */
- 363, /* Number of elements */
+ 367, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -341557,6 +365214,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */
0x2E42,
0x2E43,
0x2E50,
+ 0x2E52,
+ 0x2E53,
0x3001,
0x3004,
0x303D,
@@ -341687,7 +365346,7 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */
0x112AA,
0x1144B,
0x11450,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x1145D,
0x1145E,
@@ -341703,6 +365362,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */
0x1173F,
0x1183B,
0x1183C,
+ 0x11944,
+ 0x11947,
0x119E2,
0x119E3,
0x11A3F,
@@ -341749,7 +365410,7 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_PO_invlist[] = { /* for EBCDIC 037 */
- 363, /* Number of elements */
+ 367, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -341934,6 +365595,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 037 */
0x2E42,
0x2E43,
0x2E50,
+ 0x2E52,
+ 0x2E53,
0x3001,
0x3004,
0x303D,
@@ -342064,7 +365727,7 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 037 */
0x112AA,
0x1144B,
0x11450,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x1145D,
0x1145E,
@@ -342080,6 +365743,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 037 */
0x1173F,
0x1183B,
0x1183C,
+ 0x11944,
+ 0x11947,
0x119E2,
0x119E3,
0x11A3F,
@@ -342635,7 +366300,7 @@ static const UV UNI_PUA_invlist[] = { /* for all charsets */
};
static const UV UNI_QAAI_invlist[] = { /* for all charsets */
- 35, /* Number of elements */
+ 37, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -342649,8 +366314,10 @@ static const UV UNI_QAAI_invlist[] = { /* for all charsets */
0x953,
0x955,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1DC2,
+ 0x1DF8,
+ 0x1DF9,
0x1DFA,
0x1DFB,
0x1E00,
@@ -342875,7 +366542,7 @@ static const UV UNI_RUNR_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */
- 453, /* Number of elements */
+ 459, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -343080,10 +366747,12 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0x2E9A,
0x2E9B,
@@ -343140,6 +366809,8 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */
0xAA7A,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFB29,
0xFB2A,
0xFBB2,
@@ -343179,7 +366850,7 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */
0x1018C,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -343272,10 +366943,8 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */
0x1F0D0,
0x1F0D1,
0x1F0F6,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F10D,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -343287,11 +366956,11 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -343308,30 +366977,34 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* ASCII/Latin1 */
@@ -343342,7 +367015,7 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */
- 459, /* Number of elements */
+ 465, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -343553,10 +367226,12 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0x2E9A,
0x2E9B,
@@ -343613,6 +367288,8 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */
0xAA7A,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFB29,
0xFB2A,
0xFBB2,
@@ -343652,7 +367329,7 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */
0x1018C,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -343745,10 +367422,8 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */
0x1F0D0,
0x1F0D1,
0x1F0F6,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F10D,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -343760,11 +367435,11 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -343781,30 +367456,34 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* EBCDIC 1047 */
@@ -343815,7 +367494,7 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */
- 457, /* Number of elements */
+ 463, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -344024,10 +367703,12 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0x2E9A,
0x2E9B,
@@ -344084,6 +367765,8 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */
0xAA7A,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFB29,
0xFB2A,
0xFBB2,
@@ -344123,7 +367806,7 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */
0x1018C,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -344216,10 +367899,8 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */
0x1F0D0,
0x1F0D1,
0x1F0F6,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F10D,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -344231,11 +367912,11 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -344252,30 +367933,34 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* EBCDIC 037 */
@@ -344689,7 +368374,7 @@ static const UV UNI_SB__CL_invlist[] = { /* for EBCDIC 037 */
# endif /* EBCDIC 037 */
static const UV UNI_SB__EX_invlist[] = { /* for all charsets */
- 567, /* Number of elements */
+ 587, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -344810,7 +368495,7 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -344864,7 +368549,7 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */
0xD58,
0xD62,
0xD64,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -344959,7 +368644,7 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -345018,6 +368703,8 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -345090,6 +368777,8 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -345114,6 +368803,8 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */
0x111C1,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111D0,
0x1122C,
0x11238,
0x1123E,
@@ -345158,6 +368849,16 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */
0x1172C,
0x1182C,
0x1183B,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
0x119D1,
0x119D8,
0x119DA,
@@ -345212,6 +368913,10 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1D165,
@@ -345425,7 +369130,7 @@ static const UV UNI_SB__FO_invlist[] = { /* for EBCDIC 037 */
# endif /* EBCDIC 037 */
static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
- 1011, /* Number of elements */
+ 1039, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -345497,7 +369202,7 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -345648,7 +369353,7 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -345897,13 +369602,13 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -346000,6 +369705,8 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0xAB27,
0xAB28,
0xAB2F,
+ 0xAB69,
+ 0xAB6A,
0xABC0,
0xABE3,
0xAC00,
@@ -346154,12 +369861,18 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0x10C49,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -346172,6 +369885,8 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -346223,7 +369938,7 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -346247,7 +369962,19 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0x11800,
0x1182C,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -346296,6 +370023,8 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -346333,7 +370062,9 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -346429,7 +370160,7 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -346439,13 +370170,15 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_SB__LO_invlist[] = { /* for ASCII/Latin1 */
- 1293, /* Number of elements */
+ 1299, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -347660,12 +371393,18 @@ static const UV UNI_SB__LO_invlist[] = { /* for ASCII/Latin1 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xA7F8,
0xA7FB,
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -347752,7 +371491,7 @@ static const UV UNI_SB__LO_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 1047 */
- 1301, /* Number of elements */
+ 1307, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -348975,12 +372714,18 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 1047 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xA7F8,
0xA7FB,
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -349067,7 +372812,7 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 037 */
- 1301, /* Number of elements */
+ 1307, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -350290,12 +374035,18 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 037 */
0xA7C0,
0xA7C3,
0xA7C4,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7CB,
+ 0xA7F6,
+ 0xA7F7,
0xA7F8,
0xA7FB,
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB69,
0xAB70,
0xABC0,
0xFB00,
@@ -350379,7 +374130,7 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_SB__NU_invlist[] = { /* for ASCII/Latin1 */
- 121, /* Number of elements */
+ 125, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -350486,6 +374237,8 @@ static const UV UNI_SB__NU_invlist[] = { /* for ASCII/Latin1 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -350503,7 +374256,9 @@ static const UV UNI_SB__NU_invlist[] = { /* for ASCII/Latin1 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* ASCII/Latin1 */
@@ -350514,7 +374269,7 @@ static const UV UNI_SB__NU_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 1047 */
- 121, /* Number of elements */
+ 125, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -350621,6 +374376,8 @@ static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 1047 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -350638,7 +374395,9 @@ static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 1047 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 1047 */
@@ -350649,7 +374408,7 @@ static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 037 */
- 121, /* Number of elements */
+ 125, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -350756,6 +374515,8 @@ static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 037 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -350773,7 +374534,9 @@ static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 037 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 037 */
@@ -351087,7 +374850,7 @@ static const UV UNI_SB__SP_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_SB__ST_invlist[] = { /* for ASCII/Latin1 */
- 143, /* Number of elements */
+ 147, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -351212,6 +374975,10 @@ static const UV UNI_SB__ST_invlist[] = { /* for ASCII/Latin1 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
0x11A42,
0x11A44,
0x11A9B,
@@ -351244,7 +375011,7 @@ static const UV UNI_SB__ST_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 1047 */
- 143, /* Number of elements */
+ 147, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -351369,6 +375136,10 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 1047 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
0x11A42,
0x11A44,
0x11A9B,
@@ -351401,7 +375172,7 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 037 */
- 143, /* Number of elements */
+ 147, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -351526,6 +375297,10 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 037 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
0x11A42,
0x11A44,
0x11A9B,
@@ -351555,7 +375330,7 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_SB__UP_invlist[] = { /* for ASCII/Latin1 */
- 1285, /* Number of elements */
+ 1289, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -352761,7 +376536,11 @@ static const UV UNI_SB__UP_invlist[] = { /* for ASCII/Latin1 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -352854,7 +376633,7 @@ static const UV UNI_SB__UP_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 1047 */
- 1303, /* Number of elements */
+ 1307, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -354078,7 +377857,11 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 1047 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -354171,7 +377954,7 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 037 */
- 1299, /* Number of elements */
+ 1303, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -355391,7 +379174,11 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 037 */
0xA7C2,
0xA7C3,
0xA7C4,
- 0xA7C7,
+ 0xA7C8,
+ 0xA7C9,
+ 0xA7CA,
+ 0xA7F5,
+ 0xA7F6,
0xFF21,
0xFF3B,
0x10400,
@@ -355481,7 +379268,7 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
- 1579, /* Number of elements */
+ 1611, /* 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 */
@@ -355621,7 +379408,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x970,
0x971,
@@ -355736,7 +379523,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -355829,8 +379616,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -355848,7 +379633,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -356051,7 +379836,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x1AA7,
0x1AAC,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -356273,13 +380058,13 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -356305,9 +380090,11 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA876,
@@ -356361,7 +380148,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEE,
0xABF0,
@@ -356586,6 +380373,12 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
@@ -356594,6 +380387,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x10F51,
0x10F55,
0x10F5A,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -356615,7 +380410,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x11136,
0x11140,
0x11141,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -356623,8 +380418,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x11180,
0x111C7,
0x111C9,
- 0x111CE,
- 0x111D0,
0x111DB,
0x111DC,
0x111DD,
@@ -356687,7 +380480,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -356725,7 +380518,23 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11945,
+ 0x11946,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -356788,6 +380597,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -356835,11 +380646,15 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -357046,8 +380861,10 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x1F18A,
0x1F676,
0x1F679,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -357058,6 +380875,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -357074,7 +380893,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
- 1599, /* Number of elements */
+ 1631, /* 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 */
@@ -357234,7 +381053,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x970,
0x971,
@@ -357349,7 +381168,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -357442,8 +381261,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -357461,7 +381278,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -357664,7 +381481,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x1AA7,
0x1AAC,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -357886,13 +381703,13 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -357918,9 +381735,11 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA876,
@@ -357974,7 +381793,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEE,
0xABF0,
@@ -358199,6 +382018,12 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
@@ -358207,6 +382032,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x10F51,
0x10F55,
0x10F5A,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -358228,7 +382055,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x11136,
0x11140,
0x11141,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -358236,8 +382063,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x11180,
0x111C7,
0x111C9,
- 0x111CE,
- 0x111D0,
0x111DB,
0x111DC,
0x111DD,
@@ -358300,7 +382125,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -358338,7 +382163,23 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11945,
+ 0x11946,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -358401,6 +382242,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -358448,11 +382291,15 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -358659,8 +382506,10 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x1F18A,
0x1F676,
0x1F679,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -358671,6 +382520,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -358687,7 +382538,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
- 1597, /* Number of elements */
+ 1629, /* 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 */
@@ -358845,7 +382696,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x970,
0x971,
@@ -358960,7 +382811,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -359053,8 +382904,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -359072,7 +382921,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -359275,7 +383124,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x1AA7,
0x1AAC,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -359497,13 +383346,13 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -359529,9 +383378,11 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA876,
@@ -359585,7 +383436,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEE,
0xABF0,
@@ -359810,6 +383661,12 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
@@ -359818,6 +383675,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x10F51,
0x10F55,
0x10F5A,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -359839,7 +383698,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x11136,
0x11140,
0x11141,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -359847,8 +383706,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x11180,
0x111C7,
0x111C9,
- 0x111CE,
- 0x111D0,
0x111DB,
0x111DC,
0x111DD,
@@ -359911,7 +383768,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -359949,7 +383806,23 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11945,
+ 0x11946,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -360012,6 +383885,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -360059,11 +383934,15 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -360270,8 +384149,10 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x1F18A,
0x1F676,
0x1F679,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -360282,6 +384163,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -360513,7 +384396,7 @@ static const UV UNI_SC__ARAB_invlist[] = { /* for all charsets */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -360604,24 +384487,6 @@ static const UV UNI_SC__ARAB_invlist[] = { /* for all charsets */
0x1EEF2
};
-static const UV UNI_SC__ARMN_invlist[] = { /* for all charsets */
- 11, /* Number of elements */
- 148565664, /* Version and data structure type */
- 1, /* 0 if the list starts at 0;
- 1 if it starts at the element beyond 0 */
- 0x0,
- 0x531,
- 0x557,
- 0x559,
- 0x589,
- 0x58A,
- 0x58B,
- 0x58D,
- 0x590,
- 0xFB13,
- 0xFB18
-};
-
static const UV UNI_SC__BENG_invlist[] = { /* for all charsets */
29, /* Number of elements */
148565664, /* Version and data structure type */
@@ -360669,7 +384534,7 @@ static const UV UNI_SC__BOPO_invlist[] = { /* for all charsets */
0x3105,
0x3130,
0x31A0,
- 0x31BB
+ 0x31C0
};
static const UV UNI_SC__BUGI_invlist[] = { /* for all charsets */
@@ -360703,7 +384568,7 @@ static const UV UNI_SC__CAKM_invlist[] = { /* for all charsets */
0x11100,
0x11135,
0x11136,
- 0x11147
+ 0x11148
};
static const UV UNI_SC__COPT_invlist[] = { /* for all charsets */
@@ -361095,7 +384960,7 @@ static const UV UNI_SC__GURU_invlist[] = { /* for all charsets */
};
static const UV UNI_SC__HAN_invlist[] = { /* for all charsets */
- 35, /* Number of elements */
+ 39, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -361115,15 +384980,17 @@ static const UV UNI_SC__HAN_invlist[] = { /* for all charsets */
0x3038,
0x303C,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xF900,
0xFA6E,
0xFA70,
0xFADA,
+ 0x16FF0,
+ 0x16FF2,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -361133,7 +385000,9 @@ static const UV UNI_SC__HAN_invlist[] = { /* for all charsets */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
static const UV UNI_SC__HANG_invlist[] = { /* for all charsets */
@@ -361367,15 +385236,15 @@ static const UV UNI_SC__LATN_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA800,
0xAB30,
0xAB5B,
0xAB5C,
0xAB65,
0xAB66,
- 0xAB68,
+ 0xAB6A,
0xFB00,
0xFB07,
0xFF21,
@@ -361472,15 +385341,15 @@ static const UV UNI_SC__LATN_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA800,
0xAB30,
0xAB5B,
0xAB5C,
0xAB65,
0xAB66,
- 0xAB68,
+ 0xAB6A,
0xFB00,
0xFB07,
0xFF21,
@@ -361573,15 +385442,15 @@ static const UV UNI_SC__LATN_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA800,
0xAB30,
0xAB5B,
0xAB5C,
0xAB65,
0xAB66,
- 0xAB68,
+ 0xAB6A,
0xFB00,
0xFB07,
0xFF21,
@@ -361681,14 +385550,12 @@ static const UV UNI_SC__MANI_invlist[] = { /* for all charsets */
};
static const UV UNI_SC__MLYM_invlist[] = { /* for all charsets */
- 17, /* Number of elements */
+ 15, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -361810,7 +385677,7 @@ static const UV UNI_SC__ORYA_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -361871,7 +385738,7 @@ static const UV UNI_SC__QAAI_invlist[] = { /* for all charsets */
0x951,
0x955,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1CD0,
0x1CD3,
0x1CD4,
@@ -361931,14 +385798,12 @@ static const UV UNI_SC__ROHG_invlist[] = { /* for all charsets */
};
static const UV UNI_SC__SHRD_invlist[] = { /* for all charsets */
- 5, /* Number of elements */
+ 3, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0
};
@@ -361960,7 +385825,7 @@ static const UV UNI_SC__SINH_invlist[] = { /* for all charsets */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -362005,7 +385870,7 @@ static const UV UNI_SC__SYLO_invlist[] = { /* for all charsets */
1 if it starts at the element beyond 0 */
0x0,
0xA800,
- 0xA82C
+ 0xA82D
};
static const UV UNI_SC__SYRC_invlist[] = { /* for all charsets */
@@ -362172,6 +386037,20 @@ static const UV UNI_SC__TIRH_invlist[] = { /* for all charsets */
0x114DA
};
+static const UV UNI_SC__YEZI_invlist[] = { /* for all charsets */
+ 7, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2
+};
+
static const UV UNI_SC__YI_invlist[] = { /* for all charsets */
5, /* Number of elements */
148565664, /* Version and data structure type */
@@ -362187,7 +386066,7 @@ static const UV UNI_SC__YI_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */
- 344, /* Number of elements */
+ 346, /* 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 */
@@ -362219,8 +386098,6 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */
0x386,
0x387,
0x388,
- 0x589,
- 0x58A,
0x605,
0x606,
0x60C,
@@ -362297,10 +386174,10 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2E00,
- 0x2E50,
+ 0x2E53,
0x2FF0,
0x2FFC,
0x3000,
@@ -362345,6 +386222,8 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */
0xA9D0,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFD3E,
0xFD40,
0xFE10,
@@ -362380,7 +386259,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */
0x10137,
0x10140,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101D0,
0x101FD,
0x102E1,
@@ -362468,11 +386347,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F200,
0x1F201,
@@ -362486,11 +386361,11 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -362507,30 +386382,36 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0xE0001,
0xE0002,
0xE0020,
@@ -362545,7 +386426,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */
- 370, /* Number of elements */
+ 372, /* 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 */
@@ -362603,8 +386484,6 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */
0x386,
0x387,
0x388,
- 0x589,
- 0x58A,
0x605,
0x606,
0x60C,
@@ -362681,10 +386560,10 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2E00,
- 0x2E50,
+ 0x2E53,
0x2FF0,
0x2FFC,
0x3000,
@@ -362729,6 +386608,8 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */
0xA9D0,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFD3E,
0xFD40,
0xFE10,
@@ -362764,7 +386645,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */
0x10137,
0x10140,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101D0,
0x101FD,
0x102E1,
@@ -362852,11 +386733,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F200,
0x1F201,
@@ -362870,11 +386747,11 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -362891,30 +386768,36 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0xE0001,
0xE0002,
0xE0020,
@@ -362929,7 +386812,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */
- 366, /* Number of elements */
+ 368, /* 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 */
@@ -362983,8 +386866,6 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */
0x386,
0x387,
0x388,
- 0x589,
- 0x58A,
0x605,
0x606,
0x60C,
@@ -363061,10 +386942,10 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2E00,
- 0x2E50,
+ 0x2E53,
0x2FF0,
0x2FFC,
0x3000,
@@ -363109,6 +386990,8 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */
0xA9D0,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFD3E,
0xFD40,
0xFE10,
@@ -363144,7 +387027,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */
0x10137,
0x10140,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101D0,
0x101FD,
0x102E1,
@@ -363232,11 +387115,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F200,
0x1F201,
@@ -363250,11 +387129,11 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -363271,30 +387150,36 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0xE0001,
0xE0002,
0xE0020,
@@ -363570,7 +387455,7 @@ static const UV UNI_SHORTHANDFORMATCONTROLS_invlist[] = { /* for all charsets *
};
static const UV UNI_SHRD_invlist[] = { /* for all charsets */
- 15, /* Number of elements */
+ 13, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -363586,8 +387471,6 @@ static const UV UNI_SHRD_invlist[] = { /* for all charsets */
0x1CE0,
0x1CE1,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0
};
@@ -363627,7 +387510,7 @@ static const UV UNI_SINH_invlist[] = { /* for all charsets */
0x0,
0x964,
0x966,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -363668,7 +387551,7 @@ static const UV UNI_SINHALAARCHAICNUMBERS_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_SK_invlist[] = { /* for ASCII/Latin1 */
- 59, /* Number of elements */
+ 61, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -363721,6 +387604,8 @@ static const UV UNI_SK_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFBB2,
0xFBC2,
0xFF3E,
@@ -363741,7 +387626,7 @@ static const UV UNI_SK_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_SK_invlist[] = { /* for EBCDIC 1047 */
- 57, /* Number of elements */
+ 59, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -363792,6 +387677,8 @@ static const UV UNI_SK_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFBB2,
0xFBC2,
0xFF3E,
@@ -363812,7 +387699,7 @@ static const UV UNI_SK_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_SK_invlist[] = { /* for EBCDIC 037 */
- 55, /* Number of elements */
+ 57, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -363861,6 +387748,8 @@ static const UV UNI_SK_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFBB2,
0xFBC2,
0xFF3E,
@@ -364328,7 +388217,7 @@ static const UV UNI_SMALLKANAEXT_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */
- 361, /* Number of elements */
+ 365, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -364493,10 +388382,12 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0x2E9A,
0x2E9B,
@@ -364562,7 +388453,7 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */
0x1018C,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -364631,10 +388522,8 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */
0x1F0D0,
0x1F0D1,
0x1F0F6,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F10D,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -364648,11 +388537,11 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */
0x1F300,
0x1F3FB,
0x1F400,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -364669,30 +388558,34 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* ASCII/Latin1 */
@@ -364703,7 +388596,7 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */
- 361, /* Number of elements */
+ 365, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -364868,10 +388761,12 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0x2E9A,
0x2E9B,
@@ -364937,7 +388832,7 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */
0x1018C,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -365006,10 +388901,8 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */
0x1F0D0,
0x1F0D1,
0x1F0F6,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F10D,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -365023,11 +388916,11 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */
0x1F300,
0x1F3FB,
0x1F400,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -365044,30 +388937,34 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* EBCDIC 1047 */
@@ -365078,7 +388975,7 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */
- 361, /* Number of elements */
+ 365, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -365243,10 +389140,12 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2CE5,
0x2CEB,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0x2E9A,
0x2E9B,
@@ -365312,7 +389211,7 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */
0x1018C,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -365381,10 +389280,8 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */
0x1F0D0,
0x1F0D1,
0x1F0F6,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F10D,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -365398,11 +389295,11 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */
0x1F300,
0x1F3FB,
0x1F400,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -365419,30 +389316,34 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB
};
# endif /* EBCDIC 037 */
@@ -365504,7 +389405,7 @@ static const UV UNI_SPECIALS_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_STERM_invlist[] = { /* for ASCII/Latin1 */
- 149, /* Number of elements */
+ 153, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -365635,6 +389536,10 @@ static const UV UNI_STERM_invlist[] = { /* for ASCII/Latin1 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
0x11A42,
0x11A44,
0x11A9B,
@@ -365667,7 +389572,7 @@ static const UV UNI_STERM_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_STERM_invlist[] = { /* for EBCDIC 1047 */
- 149, /* Number of elements */
+ 153, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -365798,6 +389703,10 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 1047 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
0x11A42,
0x11A44,
0x11A9B,
@@ -365830,7 +389739,7 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_STERM_invlist[] = { /* for EBCDIC 037 */
- 149, /* Number of elements */
+ 153, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -365961,6 +389870,10 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 037 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
0x11A42,
0x11A44,
0x11A9B,
@@ -366120,7 +390033,7 @@ static const UV UNI_SYLO_invlist[] = { /* for all charsets */
0x9E6,
0x9F0,
0xA800,
- 0xA82C
+ 0xA82D
};
static const UV UNI_SYMBOLSANDPICTOGRAPHSEXTA_invlist[] = { /* for all charsets */
@@ -366133,8 +390046,18 @@ static const UV UNI_SYMBOLSANDPICTOGRAPHSEXTA_invlist[] = { /* for all charsets
0x1FB00
};
+static const UV UNI_SYMBOLSFORLEGACYCOMPUTING_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x1FB00,
+ 0x1FC00
+};
+
static const UV UNI_SYRC_invlist[] = { /* for all charsets */
- 21, /* Number of elements */
+ 23, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -366158,7 +390081,9 @@ static const UV UNI_SYRC_invlist[] = { /* for all charsets */
0x74D,
0x750,
0x860,
- 0x86B
+ 0x86B,
+ 0x1DF8,
+ 0x1DF9
};
static const UV UNI_SYRIACSUP_invlist[] = { /* for all charsets */
@@ -366322,7 +390247,7 @@ static const UV UNI_TAML_invlist[] = { /* for all charsets */
};
static const UV UNI_TANG_invlist[] = { /* for all charsets */
- 7, /* Number of elements */
+ 9, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -366332,7 +390257,9 @@ static const UV UNI_TANG_invlist[] = { /* for all charsets */
0x17000,
0x187F8,
0x18800,
- 0x18AF3
+ 0x18B00,
+ 0x18D00,
+ 0x18D09
};
static const UV UNI_TANGUTCOMPONENTS_invlist[] = { /* for all charsets */
@@ -366345,6 +390272,16 @@ static const UV UNI_TANGUTCOMPONENTS_invlist[] = { /* for all charsets */
0x18B00
};
+static const UV UNI_TANGUTSUP_invlist[] = { /* for all charsets */
+ 3, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x18D00,
+ 0x18D90
+};
+
static const UV UNI_TAVT_invlist[] = { /* for all charsets */
5, /* Number of elements */
148565664, /* Version and data structure type */
@@ -366400,7 +390337,7 @@ static const UV UNI_TELU_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_TERM_invlist[] = { /* for ASCII/Latin1 */
- 205, /* Number of elements */
+ 209, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -366571,7 +390508,7 @@ static const UV UNI_TERM_invlist[] = { /* for ASCII/Latin1 */
0x112AA,
0x1144B,
0x1144E,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x115C2,
0x115C6,
@@ -366581,6 +390518,10 @@ static const UV UNI_TERM_invlist[] = { /* for ASCII/Latin1 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
0x11A42,
0x11A44,
0x11A9B,
@@ -366619,7 +390560,7 @@ static const UV UNI_TERM_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_TERM_invlist[] = { /* for EBCDIC 1047 */
- 207, /* Number of elements */
+ 211, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -366792,7 +390733,7 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 1047 */
0x112AA,
0x1144B,
0x1144E,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x115C2,
0x115C6,
@@ -366802,6 +390743,10 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 1047 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
0x11A42,
0x11A44,
0x11A9B,
@@ -366840,7 +390785,7 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_TERM_invlist[] = { /* for EBCDIC 037 */
- 207, /* Number of elements */
+ 211, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -367013,7 +390958,7 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 037 */
0x112AA,
0x1144B,
0x1144E,
- 0x1145B,
+ 0x1145A,
0x1145C,
0x115C2,
0x115C6,
@@ -367023,6 +390968,10 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 037 */
0x11643,
0x1173C,
0x1173F,
+ 0x11944,
+ 0x11945,
+ 0x11946,
+ 0x11947,
0x11A42,
0x11A44,
0x11A9B,
@@ -367202,15 +391151,15 @@ static const UV UNI_UGAR_invlist[] = { /* for all charsets */
};
static const UV UNI_UIDEO_invlist[] = { /* for all charsets */
- 29, /* Number of elements */
+ 31, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
0x0,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xFA0E,
0xFA10,
0xFA11,
@@ -367226,7 +391175,7 @@ static const UV UNI_UIDEO_invlist[] = { /* for all charsets */
0xFA27,
0xFA2A,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -367234,7 +391183,9 @@ static const UV UNI_UIDEO_invlist[] = { /* for all charsets */
0x2B820,
0x2CEA2,
0x2CEB0,
- 0x2EBE1
+ 0x2EBE1,
+ 0x30000,
+ 0x3134B
};
static const UV UNI_VAI_invlist[] = { /* for all charsets */
@@ -367270,7 +391221,7 @@ static const UV UNI_VERTICALFORMS_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_VO__R_invlist[] = { /* for ASCII/Latin1 */
- 173, /* Number of elements */
+ 177, /* 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 */
@@ -367379,12 +391330,16 @@ static const UV UNI_VO__R_invlist[] = { /* for ASCII/Latin1 */
0x2B30,
0x2B50,
0x2B5A,
+ 0x2B97,
+ 0x2B98,
0x2BB8,
0x2BD2,
0x2BD3,
0x2BEC,
0x2BF0,
0x2C00,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0xA4D0,
0xA960,
@@ -367426,7 +391381,7 @@ static const UV UNI_VO__R_invlist[] = { /* for ASCII/Latin1 */
0x14400,
0x14680,
0x16FE0,
- 0x18B00,
+ 0x18D90,
0x1B000,
0x1B300,
0x1D000,
@@ -367438,7 +391393,7 @@ static const UV UNI_VO__R_invlist[] = { /* for ASCII/Latin1 */
0x1F000,
0x1F800,
0x1F900,
- 0x1FAA0,
+ 0x1FB00,
0x20000,
0x2FFFE,
0x30000,
@@ -367457,7 +391412,7 @@ static const UV UNI_VO__R_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 1047 */
- 171, /* Number of elements */
+ 175, /* 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 */
@@ -367564,12 +391519,16 @@ static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 1047 */
0x2B30,
0x2B50,
0x2B5A,
+ 0x2B97,
+ 0x2B98,
0x2BB8,
0x2BD2,
0x2BD3,
0x2BEC,
0x2BF0,
0x2C00,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0xA4D0,
0xA960,
@@ -367611,7 +391570,7 @@ static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 1047 */
0x14400,
0x14680,
0x16FE0,
- 0x18B00,
+ 0x18D90,
0x1B000,
0x1B300,
0x1D000,
@@ -367623,7 +391582,7 @@ static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 1047 */
0x1F000,
0x1F800,
0x1F900,
- 0x1FAA0,
+ 0x1FB00,
0x20000,
0x2FFFE,
0x30000,
@@ -367642,7 +391601,7 @@ static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 037 */
- 171, /* Number of elements */
+ 175, /* 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 */
@@ -367749,12 +391708,16 @@ static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 037 */
0x2B30,
0x2B50,
0x2B5A,
+ 0x2B97,
+ 0x2B98,
0x2BB8,
0x2BD2,
0x2BD3,
0x2BEC,
0x2BF0,
0x2C00,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0xA4D0,
0xA960,
@@ -367796,7 +391759,7 @@ static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 037 */
0x14400,
0x14680,
0x16FE0,
- 0x18B00,
+ 0x18D90,
0x1B000,
0x1B300,
0x1D000,
@@ -367808,7 +391771,7 @@ static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 037 */
0x1F000,
0x1F800,
0x1F900,
- 0x1FAA0,
+ 0x1FB00,
0x20000,
0x2FFFE,
0x30000,
@@ -367936,7 +391899,7 @@ static const UV UNI_VO__TU_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_VO__U_invlist[] = { /* for ASCII/Latin1 */
- 251, /* Number of elements */
+ 255, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -368047,12 +392010,16 @@ static const UV UNI_VO__U_invlist[] = { /* for ASCII/Latin1 */
0x2B30,
0x2B50,
0x2B5A,
+ 0x2B97,
+ 0x2B98,
0x2BB8,
0x2BD2,
0x2BD3,
0x2BEC,
0x2BF0,
0x2C00,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0x3001,
0x3003,
@@ -368168,7 +392135,7 @@ static const UV UNI_VO__U_invlist[] = { /* for ASCII/Latin1 */
0x14400,
0x14680,
0x16FE0,
- 0x18B00,
+ 0x18D90,
0x1B000,
0x1B300,
0x1D000,
@@ -368182,7 +392149,7 @@ static const UV UNI_VO__U_invlist[] = { /* for ASCII/Latin1 */
0x1F202,
0x1F800,
0x1F900,
- 0x1FAA0,
+ 0x1FB00,
0x20000,
0x2FFFE,
0x30000,
@@ -368201,7 +392168,7 @@ static const UV UNI_VO__U_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 1047 */
- 249, /* Number of elements */
+ 253, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -368310,12 +392277,16 @@ static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 1047 */
0x2B30,
0x2B50,
0x2B5A,
+ 0x2B97,
+ 0x2B98,
0x2BB8,
0x2BD2,
0x2BD3,
0x2BEC,
0x2BF0,
0x2C00,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0x3001,
0x3003,
@@ -368431,7 +392402,7 @@ static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 1047 */
0x14400,
0x14680,
0x16FE0,
- 0x18B00,
+ 0x18D90,
0x1B000,
0x1B300,
0x1D000,
@@ -368445,7 +392416,7 @@ static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 1047 */
0x1F202,
0x1F800,
0x1F900,
- 0x1FAA0,
+ 0x1FB00,
0x20000,
0x2FFFE,
0x30000,
@@ -368464,7 +392435,7 @@ static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 037 */
- 249, /* Number of elements */
+ 253, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -368573,12 +392544,16 @@ static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 037 */
0x2B30,
0x2B50,
0x2B5A,
+ 0x2B97,
+ 0x2B98,
0x2BB8,
0x2BD2,
0x2BD3,
0x2BEC,
0x2BF0,
0x2C00,
+ 0x2E50,
+ 0x2E52,
0x2E80,
0x3001,
0x3003,
@@ -368694,7 +392669,7 @@ static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 037 */
0x14400,
0x14680,
0x16FE0,
- 0x18B00,
+ 0x18D90,
0x1B000,
0x1B300,
0x1D000,
@@ -368708,7 +392683,7 @@ static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 037 */
0x1F202,
0x1F800,
0x1F900,
- 0x1FAA0,
+ 0x1FB00,
0x20000,
0x2FFFE,
0x30000,
@@ -368897,7 +392872,7 @@ static const UV UNI_WB__EX_invlist[] = { /* for EBCDIC 037 */
# endif /* EBCDIC 037 */
static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */
- 569, /* Number of elements */
+ 589, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -369018,7 +392993,7 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB62,
0xB64,
@@ -369072,7 +393047,7 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */
0xD58,
0xD62,
0xD64,
- 0xD82,
+ 0xD81,
0xD84,
0xDCA,
0xDCB,
@@ -369167,7 +393142,7 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */
0x1A7F,
0x1A80,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B05,
0x1B34,
@@ -369226,6 +393201,8 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */
0xA80C,
0xA823,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA880,
0xA882,
0xA8B4,
@@ -369298,6 +393275,8 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */
0x10AE7,
0x10D24,
0x10D28,
+ 0x10EAB,
+ 0x10EAD,
0x10F46,
0x10F51,
0x11000,
@@ -369322,6 +393301,8 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */
0x111C1,
0x111C9,
0x111CD,
+ 0x111CE,
+ 0x111D0,
0x1122C,
0x11238,
0x1123E,
@@ -369366,6 +393347,16 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */
0x1172C,
0x1182C,
0x1183B,
+ 0x11930,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
+ 0x11944,
0x119D1,
0x119D8,
0x119DA,
@@ -369420,6 +393411,10 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */
0x16F88,
0x16F8F,
0x16F93,
+ 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1BC9D,
0x1BC9F,
0x1D165,
@@ -369659,7 +393654,7 @@ static const UV UNI_WB__KA_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
- 1075, /* Number of elements */
+ 1095, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -369681,8 +393676,6 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0xF8,
0x2D8,
0x2DE,
- 0x2E5,
- 0x2EC,
0x300,
0x370,
0x375,
@@ -369709,13 +393702,13 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0x531,
0x557,
0x559,
- 0x55A,
- 0x55B,
0x55D,
0x55E,
0x55F,
0x560,
0x589,
+ 0x58A,
+ 0x58B,
0x5F3,
0x5F4,
0x620,
@@ -369763,7 +393756,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -369914,7 +393907,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -370185,7 +394178,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0xA000,
0xA48D,
0xA4D0,
@@ -370202,11 +394195,11 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0xA69E,
0xA6A0,
0xA6F0,
- 0xA717,
+ 0xA708,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -370255,7 +394248,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -370406,12 +394399,18 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -370424,6 +394423,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -370475,7 +394476,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -370499,7 +394500,19 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -370548,6 +394561,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -370748,7 +394763,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
- 1101, /* Number of elements */
+ 1121, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -370796,8 +394811,6 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0x100,
0x2D8,
0x2DE,
- 0x2E5,
- 0x2EC,
0x300,
0x370,
0x375,
@@ -370824,13 +394837,13 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0x531,
0x557,
0x559,
- 0x55A,
- 0x55B,
0x55D,
0x55E,
0x55F,
0x560,
0x589,
+ 0x58A,
+ 0x58B,
0x5F3,
0x5F4,
0x620,
@@ -370878,7 +394891,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -371029,7 +395042,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -371300,7 +395313,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0xA000,
0xA48D,
0xA4D0,
@@ -371317,11 +395330,11 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0xA69E,
0xA6A0,
0xA6F0,
- 0xA717,
+ 0xA708,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -371370,7 +395383,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -371521,12 +395534,18 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -371539,6 +395558,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -371590,7 +395611,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -371614,7 +395635,19 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -371663,6 +395696,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -371863,7 +395898,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
- 1097, /* Number of elements */
+ 1117, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -371907,8 +395942,6 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0x100,
0x2D8,
0x2DE,
- 0x2E5,
- 0x2EC,
0x300,
0x370,
0x375,
@@ -371935,13 +395968,13 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0x531,
0x557,
0x559,
- 0x55A,
- 0x55B,
0x55D,
0x55E,
0x55F,
0x560,
0x589,
+ 0x58A,
+ 0x58B,
0x5F3,
0x5F4,
0x620,
@@ -371989,7 +396022,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -372140,7 +396173,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -372411,7 +396444,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0xA000,
0xA48D,
0xA4D0,
@@ -372428,11 +396461,11 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0xA69E,
0xA6A0,
0xA6F0,
- 0xA717,
+ 0xA708,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -372481,7 +396514,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -372632,12 +396665,18 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -372650,6 +396689,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -372701,7 +396742,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -372725,7 +396766,19 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -372774,6 +396827,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -373049,7 +397104,7 @@ static const UV UNI_WB__MB_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_WB__ML_invlist[] = { /* for ASCII/Latin1 */
- 17, /* Number of elements */
+ 19, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -373060,6 +397115,8 @@ static const UV UNI_WB__ML_invlist[] = { /* for ASCII/Latin1 */
0xB8,
0x387,
0x388,
+ 0x55F,
+ 0x560,
0x5F4,
0x5F5,
0x2027,
@@ -373080,7 +397137,7 @@ static const UV UNI_WB__ML_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_WB__ML_invlist[] = { /* for EBCDIC 1047 */
- 17, /* Number of elements */
+ 19, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -373091,6 +397148,8 @@ static const UV UNI_WB__ML_invlist[] = { /* for EBCDIC 1047 */
0xB4,
0x387,
0x388,
+ 0x55F,
+ 0x560,
0x5F4,
0x5F5,
0x2027,
@@ -373111,7 +397170,7 @@ static const UV UNI_WB__ML_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_WB__ML_invlist[] = { /* for EBCDIC 037 */
- 17, /* Number of elements */
+ 19, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -373122,6 +397181,8 @@ static const UV UNI_WB__ML_invlist[] = { /* for EBCDIC 037 */
0xB4,
0x387,
0x388,
+ 0x55F,
+ 0x560,
0x5F4,
0x5F5,
0x2027,
@@ -373325,7 +397386,7 @@ static const UV UNI_WB__NL_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_WB__NU_invlist[] = { /* for ASCII/Latin1 */
- 121, /* Number of elements */
+ 125, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -373432,6 +397493,8 @@ static const UV UNI_WB__NU_invlist[] = { /* for ASCII/Latin1 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -373449,7 +397512,9 @@ static const UV UNI_WB__NU_invlist[] = { /* for ASCII/Latin1 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* ASCII/Latin1 */
@@ -373460,7 +397525,7 @@ static const UV UNI_WB__NU_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 1047 */
- 121, /* Number of elements */
+ 125, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -373567,6 +397632,8 @@ static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 1047 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -373584,7 +397651,9 @@ static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 1047 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 1047 */
@@ -373595,7 +397664,7 @@ static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 037 */
- 121, /* Number of elements */
+ 125, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -373702,6 +397771,8 @@ static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 037 */
0x1173A,
0x118E0,
0x118EA,
+ 0x11950,
+ 0x1195A,
0x11C50,
0x11C5A,
0x11D50,
@@ -373719,7 +397790,9 @@ static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 037 */
0x1E2F0,
0x1E2FA,
0x1E950,
- 0x1E95A
+ 0x1E95A,
+ 0x1FBF0,
+ 0x1FBFA
};
# endif /* EBCDIC 037 */
@@ -373853,7 +397926,7 @@ static const UV UNI_WB__WSEGSPACE_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
- 1465, /* Number of elements */
+ 1487, /* 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 */
@@ -373897,8 +397970,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0xF8,
0x2D8,
0x2DE,
- 0x2E5,
- 0x2EC,
0x375,
0x376,
0x378,
@@ -373919,13 +397990,9 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x531,
0x557,
0x559,
- 0x55A,
- 0x55B,
0x55D,
0x55E,
- 0x55F,
- 0x560,
- 0x58A,
+ 0x58B,
0x591,
0x5BE,
0x5BF,
@@ -373983,7 +398050,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x964,
0x966,
@@ -374100,7 +398167,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -374193,8 +398260,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -374212,7 +398277,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -374401,7 +398466,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x1A90,
0x1A9A,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -374587,7 +398652,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x32D0,
@@ -374608,12 +398673,14 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0xA67E,
0xA67F,
0xA6F2,
- 0xA717,
+ 0xA708,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -374671,7 +398738,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -374880,12 +398947,20 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -374907,7 +398982,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -374916,7 +398991,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -374975,7 +399050,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -375007,7 +399082,21 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -375068,6 +399157,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -375111,7 +399202,9 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1B000,
0x1B001,
0x1B164,
@@ -375316,6 +399409,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
0x1F200,
0x1F3FB,
0x1F400,
+ 0x1FBF0,
+ 0x1FBFA,
0xE0001,
0xE0002,
0xE0020,
@@ -375332,7 +399427,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
- 1489, /* Number of elements */
+ 1511, /* 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 */
@@ -375400,8 +399495,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x100,
0x2D8,
0x2DE,
- 0x2E5,
- 0x2EC,
0x375,
0x376,
0x378,
@@ -375422,13 +399515,9 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x531,
0x557,
0x559,
- 0x55A,
- 0x55B,
0x55D,
0x55E,
- 0x55F,
- 0x560,
- 0x58A,
+ 0x58B,
0x591,
0x5BE,
0x5BF,
@@ -375486,7 +399575,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x964,
0x966,
@@ -375603,7 +399692,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -375696,8 +399785,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -375715,7 +399802,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -375904,7 +399991,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x1A90,
0x1A9A,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -376090,7 +400177,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x32D0,
@@ -376111,12 +400198,14 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0xA67E,
0xA67F,
0xA6F2,
- 0xA717,
+ 0xA708,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -376174,7 +400263,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -376383,12 +400472,20 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -376410,7 +400507,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -376419,7 +400516,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -376478,7 +400575,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -376510,7 +400607,21 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -376571,6 +400682,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -376614,7 +400727,9 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1B000,
0x1B001,
0x1B164,
@@ -376819,6 +400934,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
0x1F200,
0x1F3FB,
0x1F400,
+ 0x1FBF0,
+ 0x1FBFA,
0xE0001,
0xE0002,
0xE0020,
@@ -376835,7 +400952,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
- 1485, /* Number of elements */
+ 1507, /* 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 */
@@ -376899,8 +401016,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x100,
0x2D8,
0x2DE,
- 0x2E5,
- 0x2EC,
0x375,
0x376,
0x378,
@@ -376921,13 +401036,9 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x531,
0x557,
0x559,
- 0x55A,
- 0x55B,
0x55D,
0x55E,
- 0x55F,
- 0x560,
- 0x58A,
+ 0x58B,
0x591,
0x5BE,
0x5BF,
@@ -376985,7 +401096,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x964,
0x966,
@@ -377102,7 +401213,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -377195,8 +401306,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -377214,7 +401323,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -377403,7 +401512,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x1A90,
0x1A9A,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -377589,7 +401698,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x32D0,
@@ -377610,12 +401719,14 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0xA67E,
0xA67F,
0xA6F2,
- 0xA717,
+ 0xA708,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -377673,7 +401784,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -377882,12 +401993,20 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -377909,7 +402028,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -377918,7 +402037,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -377977,7 +402096,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -378009,7 +402128,21 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -378070,6 +402203,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -378113,7 +402248,9 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x1B000,
0x1B001,
0x1B164,
@@ -378318,6 +402455,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */
0x1F200,
0x1F3FB,
0x1F400,
+ 0x1FBF0,
+ 0x1FBFA,
0xE0001,
0xE0002,
0xE0020,
@@ -378343,7 +402482,7 @@ static const UV UNI_WCHO_invlist[] = { /* for all charsets */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
- 1441, /* Number of elements */
+ 1475, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -378453,7 +402592,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -378572,7 +402711,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -378665,8 +402804,6 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -378684,7 +402821,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -378886,6 +403023,8 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -379053,13 +403192,13 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -379081,9 +403220,11 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -379135,7 +403276,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -379344,12 +403485,20 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -379367,7 +403516,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -379376,7 +403525,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -379435,7 +403584,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -379469,7 +403618,21 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -379530,6 +403693,8 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -379571,11 +403736,15 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -379774,8 +403943,10 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -379786,6 +403957,8 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -379798,7 +403971,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
- 1465, /* Number of elements */
+ 1499, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -379932,7 +404105,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -380051,7 +404224,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -380144,8 +404317,6 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -380163,7 +404334,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -380365,6 +404536,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -380532,13 +404705,13 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -380560,9 +404733,11 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -380614,7 +404789,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -380823,12 +404998,20 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -380846,7 +405029,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -380855,7 +405038,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -380914,7 +405097,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -380948,7 +405131,21 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -381009,6 +405206,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -381050,11 +405249,15 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -381253,8 +405456,10 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -381265,6 +405470,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -381277,7 +405484,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
- 1461, /* Number of elements */
+ 1495, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -381407,7 +405614,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x8E2,
0x8E3,
@@ -381526,7 +405733,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -381619,8 +405826,6 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -381638,7 +405843,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0xD70,
0xD7A,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -381840,6 +406045,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x1AA8,
0x1AB0,
0x1ABE,
+ 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -382007,13 +406214,13 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -382035,9 +406242,11 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA828,
+ 0xA82C,
+ 0xA82D,
0xA840,
0xA874,
0xA880,
@@ -382089,7 +406298,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABEB,
0xABEC,
@@ -382298,12 +406507,20 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x10D28,
0x10D30,
0x10D3A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAD,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F51,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11000,
@@ -382321,7 +406538,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x11136,
0x11140,
0x11144,
- 0x11147,
+ 0x11148,
0x11150,
0x11174,
0x11176,
@@ -382330,7 +406547,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x111C5,
0x111C9,
0x111CD,
- 0x111D0,
+ 0x111CE,
0x111DB,
0x111DC,
0x111DD,
@@ -382389,7 +406606,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x11450,
0x1145A,
0x1145E,
- 0x11460,
+ 0x11462,
0x11480,
0x114C6,
0x114C7,
@@ -382423,7 +406640,21 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118EA,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11944,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -382484,6 +406715,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x11DAA,
0x11EE0,
0x11EF7,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -382525,11 +406758,15 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x16FE0,
0x16FE2,
0x16FE3,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -382728,8 +406965,10 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x1EEAA,
0x1EEAB,
0x1EEBC,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -382740,6 +406979,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0100,
0xE01F0
};
@@ -382749,7 +406990,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
- 1233, /* Number of elements */
+ 1259, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -382855,7 +407096,7 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -383006,7 +407247,7 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -383345,13 +407586,13 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -383375,8 +407616,8 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -383451,7 +407692,7 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -383634,12 +407875,18 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -383652,6 +407899,8 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -383703,7 +407952,7 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -383729,7 +407978,19 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -383778,6 +408039,8 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -383817,7 +408080,9 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -383975,7 +408240,7 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -383985,7 +408250,9 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* ASCII/Latin1 */
@@ -383996,7 +408263,7 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
- 1259, /* Number of elements */
+ 1285, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -384128,7 +408395,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -384279,7 +408546,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -384618,13 +408885,13 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -384648,8 +408915,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -384724,7 +408991,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -384907,12 +409174,18 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -384925,6 +409198,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -384976,7 +409251,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -385002,7 +409277,19 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -385051,6 +409338,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -385090,7 +409379,9 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -385248,7 +409539,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -385258,7 +409549,9 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 1047 */
@@ -385269,7 +409562,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
- 1255, /* Number of elements */
+ 1281, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -385397,7 +409690,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x904,
0x93A,
0x93D,
@@ -385548,7 +409841,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0xCE2,
0xCF1,
0xCF3,
- 0xD05,
+ 0xD04,
0xD0D,
0xD0E,
0xD11,
@@ -385887,13 +410180,13 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0x3131,
0x318F,
0x31A0,
- 0x31BB,
+ 0x31C0,
0x31F0,
0x3200,
0x3400,
- 0x4DB6,
+ 0x4DC0,
0x4E00,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA4D0,
@@ -385917,8 +410210,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0xA78B,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
+ 0xA7CB,
+ 0xA7F5,
0xA802,
0xA803,
0xA806,
@@ -385993,7 +410286,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0xAB30,
0xAB5B,
0xAB5C,
- 0xAB68,
+ 0xAB6A,
0xAB70,
0xABE3,
0xAC00,
@@ -386176,12 +410469,18 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0x10CF3,
0x10D00,
0x10D24,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F1D,
0x10F27,
0x10F28,
0x10F30,
0x10F46,
+ 0x10FB0,
+ 0x10FC5,
0x10FE0,
0x10FF7,
0x11003,
@@ -386194,6 +410493,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0x11127,
0x11144,
0x11145,
+ 0x11147,
+ 0x11148,
0x11150,
0x11173,
0x11176,
@@ -386245,7 +410546,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0x11447,
0x1144B,
0x1145F,
- 0x11460,
+ 0x11462,
0x11480,
0x114B0,
0x114C4,
@@ -386271,7 +410572,19 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0x118A0,
0x118E0,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11930,
+ 0x1193F,
+ 0x11940,
+ 0x11941,
+ 0x11942,
0x119A0,
0x119A8,
0x119AA,
@@ -386320,6 +410633,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0x11D99,
0x11EE0,
0x11EF3,
+ 0x11FB0,
+ 0x11FB1,
0x12000,
0x1239A,
0x12400,
@@ -386359,7 +410674,9 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -386517,7 +410834,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0x1EEAB,
0x1EEBC,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -386527,7 +410844,9 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */
0x2CEB0,
0x2EBE1,
0x2F800,
- 0x2FA1E
+ 0x2FA1E,
+ 0x30000,
+ 0x3134B
};
# endif /* EBCDIC 037 */
@@ -386560,6 +410879,28 @@ static const UV UNI_XSUX_invlist[] = { /* for all charsets */
0x12544
};
+static const UV UNI_YEZI_invlist[] = { /* for all charsets */
+ 15, /* Number of elements */
+ 148565664, /* Version and data structure type */
+ 1, /* 0 if the list starts at 0;
+ 1 if it starts at the element beyond 0 */
+ 0x0,
+ 0x60C,
+ 0x60D,
+ 0x61B,
+ 0x61C,
+ 0x61F,
+ 0x620,
+ 0x660,
+ 0x66A,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2
+};
+
static const UV UNI_YI_invlist[] = { /* for all charsets */
15, /* Number of elements */
148565664, /* Version and data structure type */
@@ -386811,7 +411152,7 @@ static const UV UNI_ZS_invlist[] = { /* for EBCDIC 037 */
# if 'A' == 65 /* ASCII/Latin1 */
static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */
- 292, /* Number of elements */
+ 296, /* 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 */
@@ -386891,12 +411232,12 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2E00,
0x2E43,
0x2E44,
- 0x2E50,
+ 0x2E53,
0x2FF0,
0x2FFC,
0x3000,
@@ -386925,12 +411266,14 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */
0x3400,
0x4DC0,
0x4E00,
- 0xA700,
+ 0xA708,
0xA722,
0xA788,
0xA78B,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFD3E,
0xFD40,
0xFE10,
@@ -386958,7 +411301,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */
0xFFF9,
0xFFFE,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101D0,
0x101FD,
0x16FE2,
@@ -387042,11 +411385,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F200,
0x1F201,
@@ -387058,11 +411397,11 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -387079,30 +411418,36 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0xE0001,
0xE0002,
0xE0020,
@@ -387117,7 +411462,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21
static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */
- 318, /* Number of elements */
+ 322, /* 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 */
@@ -387223,12 +411568,12 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2E00,
0x2E43,
0x2E44,
- 0x2E50,
+ 0x2E53,
0x2FF0,
0x2FFC,
0x3000,
@@ -387257,12 +411602,14 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */
0x3400,
0x4DC0,
0x4E00,
- 0xA700,
+ 0xA708,
0xA722,
0xA788,
0xA78B,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFD3E,
0xFD40,
0xFE10,
@@ -387290,7 +411637,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */
0xFFF9,
0xFFFE,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101D0,
0x101FD,
0x16FE2,
@@ -387374,11 +411721,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F200,
0x1F201,
@@ -387390,11 +411733,11 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -387411,30 +411754,36 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0xE0001,
0xE0002,
0xE0020,
@@ -387449,7 +411798,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */
&& '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37
static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */
- 314, /* Number of elements */
+ 318, /* 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 */
@@ -387551,12 +411900,12 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C00,
0x2E00,
0x2E43,
0x2E44,
- 0x2E50,
+ 0x2E53,
0x2FF0,
0x2FFC,
0x3000,
@@ -387585,12 +411934,14 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */
0x3400,
0x4DC0,
0x4E00,
- 0xA700,
+ 0xA708,
0xA722,
0xA788,
0xA78B,
0xAB5B,
0xAB5C,
+ 0xAB6A,
+ 0xAB6C,
0xFD3E,
0xFD40,
0xFE10,
@@ -387618,7 +411969,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */
0xFFF9,
0xFFFE,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101D0,
0x101FD,
0x16FE2,
@@ -387702,11 +412053,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F200,
0x1F201,
@@ -387718,11 +412065,11 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -387739,30 +412086,36 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0xE0001,
0xE0002,
0xE0020,
@@ -387772,7 +412125,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */
# endif /* EBCDIC 037 */
static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
- 1328, /* Number of elements */
+ 1350, /* Number of elements */
148565664, /* Version and data structure type */
1, /* 0 if the list starts at 0;
1 if it starts at the element beyond 0 */
@@ -387823,7 +412176,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x8A0,
0x8B5,
0x8B6,
- 0x8BE,
+ 0x8C8,
0x8D3,
0x984,
0x985,
@@ -387932,7 +412285,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0xB49,
0xB4B,
0xB4E,
- 0xB56,
+ 0xB55,
0xB58,
0xB5C,
0xB5E,
@@ -388021,8 +412374,6 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0xCF1,
0xCF3,
0xD00,
- 0xD04,
- 0xD05,
0xD0D,
0xD0E,
0xD11,
@@ -388036,7 +412387,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0xD64,
0xD66,
0xD80,
- 0xD82,
+ 0xD81,
0xD84,
0xD85,
0xD97,
@@ -388209,7 +412560,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x1AA0,
0x1AAE,
0x1AB0,
- 0x1ABF,
+ 0x1AC1,
0x1B00,
0x1B4C,
0x1B50,
@@ -388284,7 +412635,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x2B74,
0x2B76,
0x2B96,
- 0x2B98,
+ 0x2B97,
0x2C2F,
0x2C30,
0x2C5F,
@@ -388319,7 +412670,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x2DD8,
0x2DDF,
0x2DE0,
- 0x2E50,
+ 0x2E53,
0x2E80,
0x2E9A,
0x2E9B,
@@ -388339,15 +412690,11 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x3131,
0x318F,
0x3190,
- 0x31BB,
- 0x31C0,
0x31E4,
0x31F0,
0x321F,
0x3220,
- 0x4DB6,
- 0x4DC0,
- 0x9FF0,
+ 0x9FFD,
0xA000,
0xA48D,
0xA490,
@@ -388359,9 +412706,9 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0xA700,
0xA7C0,
0xA7C2,
- 0xA7C7,
- 0xA7F7,
- 0xA82C,
+ 0xA7CB,
+ 0xA7F5,
+ 0xA82D,
0xA830,
0xA83A,
0xA840,
@@ -388401,7 +412748,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0xAB28,
0xAB2F,
0xAB30,
- 0xAB68,
+ 0xAB6C,
0xAB70,
0xABEE,
0xABF0,
@@ -388491,7 +412838,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x10137,
0x1018F,
0x10190,
- 0x1019C,
+ 0x1019D,
0x101A0,
0x101A1,
0x101D0,
@@ -388610,10 +412957,18 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x10D3A,
0x10E60,
0x10E7F,
+ 0x10E80,
+ 0x10EAA,
+ 0x10EAB,
+ 0x10EAE,
+ 0x10EB0,
+ 0x10EB2,
0x10F00,
0x10F28,
0x10F30,
0x10F5A,
+ 0x10FB0,
+ 0x10FCC,
0x10FE0,
0x10FF7,
0x11000,
@@ -388631,12 +412986,10 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x11100,
0x11135,
0x11136,
- 0x11147,
+ 0x11148,
0x11150,
0x11177,
0x11180,
- 0x111CE,
- 0x111D0,
0x111E0,
0x111E1,
0x111F5,
@@ -388689,11 +413042,9 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x11370,
0x11375,
0x11400,
- 0x1145A,
- 0x1145B,
0x1145C,
0x1145D,
- 0x11460,
+ 0x11462,
0x11480,
0x114C8,
0x114D0,
@@ -388723,7 +413074,21 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x118A0,
0x118F3,
0x118FF,
- 0x11900,
+ 0x11907,
+ 0x11909,
+ 0x1190A,
+ 0x1190C,
+ 0x11914,
+ 0x11915,
+ 0x11917,
+ 0x11918,
+ 0x11936,
+ 0x11937,
+ 0x11939,
+ 0x1193B,
+ 0x11947,
+ 0x11950,
+ 0x1195A,
0x119A0,
0x119A8,
0x119AA,
@@ -388778,6 +413143,8 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x11DAA,
0x11EE0,
0x11EF9,
+ 0x11FB0,
+ 0x11FB1,
0x11FC0,
0x11FF2,
0x11FFF,
@@ -388825,11 +413192,15 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x16F8F,
0x16FA0,
0x16FE0,
- 0x16FE4,
+ 0x16FE5,
+ 0x16FF0,
+ 0x16FF2,
0x17000,
0x187F8,
0x18800,
- 0x18AF3,
+ 0x18CD6,
+ 0x18D00,
+ 0x18D09,
0x1B000,
0x1B11F,
0x1B150,
@@ -389025,11 +413396,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x1F0D1,
0x1F0F6,
0x1F100,
- 0x1F10D,
- 0x1F110,
- 0x1F16D,
- 0x1F170,
- 0x1F1AD,
+ 0x1F1AE,
0x1F1E6,
0x1F203,
0x1F210,
@@ -389041,11 +413408,11 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x1F260,
0x1F266,
0x1F300,
- 0x1F6D6,
+ 0x1F6D8,
0x1F6E0,
0x1F6ED,
0x1F6F0,
- 0x1F6FB,
+ 0x1F6FD,
0x1F700,
0x1F774,
0x1F780,
@@ -389062,32 +413429,38 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x1F888,
0x1F890,
0x1F8AE,
+ 0x1F8B0,
+ 0x1F8B2,
0x1F900,
- 0x1F90C,
- 0x1F90D,
- 0x1F972,
- 0x1F973,
- 0x1F977,
+ 0x1F979,
0x1F97A,
- 0x1F9A3,
- 0x1F9A5,
- 0x1F9AB,
- 0x1F9AE,
- 0x1F9CB,
+ 0x1F9CC,
0x1F9CD,
0x1FA54,
0x1FA60,
0x1FA6E,
0x1FA70,
- 0x1FA74,
+ 0x1FA75,
0x1FA78,
0x1FA7B,
0x1FA80,
- 0x1FA83,
+ 0x1FA87,
0x1FA90,
- 0x1FA96,
+ 0x1FAA9,
+ 0x1FAB0,
+ 0x1FAB7,
+ 0x1FAC0,
+ 0x1FAC3,
+ 0x1FAD0,
+ 0x1FAD7,
+ 0x1FB00,
+ 0x1FB93,
+ 0x1FB94,
+ 0x1FBCB,
+ 0x1FBF0,
+ 0x1FBFA,
0x20000,
- 0x2A6D7,
+ 0x2A6DE,
0x2A700,
0x2B735,
0x2B740,
@@ -389098,6 +413471,8 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */
0x2EBE1,
0x2F800,
0x2FA1E,
+ 0x30000,
+ 0x3134B,
0xE0001,
0xE0002,
0xE0020,
@@ -389246,17 +413621,22 @@ const char * const deprecated_property_msgs[] = {
"Supplanted by Line_Break property values; see www.unicode.org/reports/tr14"
};
+#endif /* (defined(PERL_IN_REGCOMP_C) && ! defined(PERL_IN_XSUB_RE)) */
+
+#if defined(PERL_IN_REGCOMP_C)
+
#define UNI_HYPHEN (UNI_HYPHEN_perl_aux + (MAX_UNI_KEYWORD_INDEX * 2))
#define UNI_LB__SG (UNI_LB__SG_perl_aux + (MAX_UNI_KEYWORD_INDEX * 1))
typedef enum {
- PERL_BIN_PLACEHOLDER = 0, /* So no real value is zero */
+ PERL_BIN_PLACEHOLDER = 0, /* So no real value is zero */
UNI_ADLM,
UNI_AEGEANNUMBERS,
UNI_AGE__10,
UNI_AGE__11,
UNI_AGE__12,
UNI_AGE__12_DOT_1,
+ UNI_AGE__13,
UNI_AGE__2,
UNI_AGE__2_DOT_1,
UNI_AGE__3,
@@ -389385,6 +413765,7 @@ typedef enum {
UNI_CCC__34,
UNI_CCC__35,
UNI_CCC__36,
+ UNI_CCC__6,
UNI_CCC__7,
UNI_CCC__8,
UNI_CCC__84,
@@ -389407,6 +413788,7 @@ typedef enum {
UNI_CHER,
UNI_CHEROKEESUP,
UNI_CHESSSYMBOLS,
+ UNI_CHRS,
UNI_CI,
UNI_CJK,
UNI_CJKCOMPAT,
@@ -389419,6 +413801,7 @@ typedef enum {
UNI_CJKEXTD,
UNI_CJKEXTE,
UNI_CJKEXTF,
+ UNI_CJKEXTG,
UNI_CJKRADICALSSUP,
UNI_CJKSTROKES,
UNI_CJKSYMBOLS,
@@ -389455,6 +413838,7 @@ typedef enum {
UNI_DIACRITICALSEXT,
UNI_DIACRITICALSFORSYMBOLS,
UNI_DIACRITICALSSUP,
+ UNI_DIAK,
UNI_DINGBATS,
UNI_DOGR,
UNI_DOMINO,
@@ -389485,20 +413869,26 @@ typedef enum {
UNI_EA__N,
UNI_EA__NA,
UNI_EA__W,
+ UNI_EBASE,
+ UNI_ECOMP,
UNI_EGYP,
UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS,
UNI_ELBA,
UNI_ELYM,
+ UNI_EMOD,
+ UNI_EMOJI,
UNI_EMOTICONS,
UNI_ENCLOSEDALPHANUM,
UNI_ENCLOSEDALPHANUMSUP,
UNI_ENCLOSEDCJK,
UNI_ENCLOSEDIDEOGRAPHICSUP,
+ UNI_EPRES,
UNI_ETHI,
UNI_ETHIOPICEXT,
UNI_ETHIOPICEXTA,
UNI_ETHIOPICSUP,
UNI_EXT,
+ UNI_EXTPICT,
UNI_GCB__CN,
UNI_GCB__EX,
UNI_GCB__L,
@@ -389541,6 +413931,19 @@ typedef enum {
UNI_HUNG,
UNI_HYPHEN_perl_aux,
UNI_IDC,
+ UNI_IDENTIFIERSTATUS__ALLOWED,
+ UNI_IDENTIFIERSTATUS__RESTRICTED,
+ UNI_IDENTIFIERTYPE__DEFAULTIGNORABLE,
+ UNI_IDENTIFIERTYPE__EXCLUSION,
+ UNI_IDENTIFIERTYPE__INCLUSION,
+ UNI_IDENTIFIERTYPE__LIMITEDUSE,
+ UNI_IDENTIFIERTYPE__NOTCHARACTER,
+ UNI_IDENTIFIERTYPE__NOTNFKC,
+ UNI_IDENTIFIERTYPE__NOTXID,
+ UNI_IDENTIFIERTYPE__OBSOLETE,
+ UNI_IDENTIFIERTYPE__RECOMMENDED,
+ UNI_IDENTIFIERTYPE__TECHNICAL,
+ UNI_IDENTIFIERTYPE__UNCOMMONUSE,
UNI_IDEO,
UNI_IDEOGRAPHICSYMBOLS,
UNI_IDS,
@@ -389567,12 +413970,14 @@ typedef enum {
UNI_INCHAKMA,
UNI_INCHAM,
UNI_INCHEROKEE,
+ UNI_INCHORASMIAN,
UNI_INCOPTIC,
UNI_INCUNEIFORM,
UNI_INCYRILLIC,
UNI_INDEVANAGARI,
UNI_INDICNUMBERFORMS,
UNI_INDICSIYAQNUMBERS,
+ UNI_INDIVESAKURU,
UNI_INDOGRA,
UNI_INDUPLOYAN,
UNI_INEGYPTIANHIEROGLYPHS,
@@ -389602,6 +414007,7 @@ typedef enum {
UNI_INKANNADA,
UNI_INKATAKANA,
UNI_INKHAROSHTHI,
+ UNI_INKHITANSMALLSCRIPT,
UNI_INKHMER,
UNI_INKHOJKI,
UNI_INKHUDAWADI,
@@ -389609,6 +414015,7 @@ typedef enum {
UNI_INLEPCHA,
UNI_INLIMBU,
UNI_INLINEARA,
+ UNI_INLISU,
UNI_INLYCIAN,
UNI_INLYDIAN,
UNI_INMAHAJANI,
@@ -389657,6 +414064,7 @@ typedef enum {
UNI_INPC__RIGHT,
UNI_INPC__TOP,
UNI_INPC__TOPANDBOTTOM,
+ UNI_INPC__TOPANDBOTTOMANDLEFT,
UNI_INPC__TOPANDBOTTOMANDRIGHT,
UNI_INPC__TOPANDLEFT,
UNI_INPC__TOPANDLEFTANDRIGHT,
@@ -389704,7 +414112,6 @@ typedef enum {
UNI_INSC__VOWEL,
UNI_INSC__VOWELDEPENDENT,
UNI_INSC__VOWELINDEPENDENT,
- UNI_INSHARADA,
UNI_INSIDDHAM,
UNI_INSINHALA,
UNI_INSOGDIAN,
@@ -389732,11 +414139,13 @@ typedef enum {
UNI_INVS,
UNI_INWANCHO,
UNI_INWARANGCITI,
+ UNI_INYEZIDI,
UNI_INZANABAZARSQUARE,
UNI_IN__10,
UNI_IN__11,
UNI_IN__12,
UNI_IN__12_DOT_1,
+ UNI_IN__13,
UNI_IN__1_DOT_1,
UNI_IN__2,
UNI_IN__2_DOT_1,
@@ -389881,6 +414290,7 @@ typedef enum {
UNI_KHMERSYMBOLS,
UNI_KHMR,
UNI_KHOJ,
+ UNI_KITS,
UNI_KNDA,
UNI_KTHI,
UNI_L,
@@ -389906,8 +414316,6 @@ typedef enum {
UNI_LB__CM,
UNI_LB__CP,
UNI_LB__CR,
- UNI_LB__EB,
- UNI_LB__EM,
UNI_LB__EX,
UNI_LB__GL,
UNI_LB__H2,
@@ -389941,6 +414349,7 @@ typedef enum {
UNI_LINEARBIDEOGRAMS,
UNI_LINEARBSYLLABARY,
UNI_LISU,
+ UNI_LISUSUP,
UNI_LM,
UNI_LO,
UNI_LOE,
@@ -390222,7 +414631,6 @@ typedef enum {
UNI_SC,
UNI_SC__ADLM,
UNI_SC__ARAB,
- UNI_SC__ARMN,
UNI_SC__BENG,
UNI_SC__BOPO,
UNI_SC__BUGI,
@@ -390285,6 +414693,7 @@ typedef enum {
UNI_SC__TGLG,
UNI_SC__THAA,
UNI_SC__TIRH,
+ UNI_SC__YEZI,
UNI_SC__YI,
UNI_SC__ZYYY,
UNI_SD,
@@ -390321,6 +414730,7 @@ typedef enum {
UNI_SUTTONSIGNWRITING,
UNI_SYLO,
UNI_SYMBOLSANDPICTOGRAPHSEXTA,
+ UNI_SYMBOLSFORLEGACYCOMPUTING,
UNI_SYRC,
UNI_SYRIACSUP,
UNI_TAGB,
@@ -390333,6 +414743,7 @@ typedef enum {
UNI_TAML,
UNI_TANG,
UNI_TANGUTCOMPONENTS,
+ UNI_TANGUTSUP,
UNI_TAVT,
UNI_TELU,
UNI_TERM,
@@ -390393,6 +414804,7 @@ typedef enum {
UNI_XPOSIXWORD,
UNI_XPOSIXXDIGIT,
UNI_XSUX,
+ UNI_YEZI,
UNI_YI,
UNI_YIJING,
UNI_YIRADICALS,
@@ -390412,7 +414824,6 @@ typedef enum {
UNI__PERL_IDSTART,
UNI__PERL_IS_IN_MULTI_CHAR_FOLD,
UNI__PERL_NCHAR,
- UNI__PERL_NON_FINAL_FOLDS,
UNI__PERL_PATWS,
UNI__PERL_PROBLEMATIC_LOCALE_FOLDEDS_START,
UNI__PERL_PROBLEMATIC_LOCALE_FOLDS,
@@ -390422,6 +414833,10 @@ typedef enum {
#define MAX_UNI_KEYWORD_INDEX UNI__PERL_SURROGATE
+#endif /* defined(PERL_IN_REGCOMP_C) */
+
+#if (defined(PERL_IN_REGCOMP_C) && ! defined(PERL_IN_XSUB_RE))
+
static const UV * const uni_prop_ptrs[] = {
NULL, /* Placeholder */
UNI_ADLM_invlist,
@@ -390430,6 +414845,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_AGE__11_invlist,
UNI_AGE__12_invlist,
UNI_AGE__12_DOT_1_invlist,
+ UNI_AGE__13_invlist,
UNI_AGE__2_invlist,
UNI_AGE__2_DOT_1_invlist,
UNI_AGE__3_invlist,
@@ -390558,6 +414974,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_CCC__34_invlist,
UNI_CCC__35_invlist,
UNI_CCC__36_invlist,
+ UNI_CCC__6_invlist,
UNI_CCC__7_invlist,
UNI_CCC__8_invlist,
UNI_CCC__84_invlist,
@@ -390580,6 +414997,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_CHER_invlist,
UNI_CHEROKEESUP_invlist,
UNI_CHESSSYMBOLS_invlist,
+ UNI_CHRS_invlist,
UNI_CI_invlist,
UNI_CJK_invlist,
UNI_CJKCOMPAT_invlist,
@@ -390592,6 +415010,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_CJKEXTD_invlist,
UNI_CJKEXTE_invlist,
UNI_CJKEXTF_invlist,
+ UNI_CJKEXTG_invlist,
UNI_CJKRADICALSSUP_invlist,
UNI_CJKSTROKES_invlist,
UNI_CJKSYMBOLS_invlist,
@@ -390628,6 +415047,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_DIACRITICALSEXT_invlist,
UNI_DIACRITICALSFORSYMBOLS_invlist,
UNI_DIACRITICALSSUP_invlist,
+ UNI_DIAK_invlist,
UNI_DINGBATS_invlist,
UNI_DOGR_invlist,
UNI_DOMINO_invlist,
@@ -390658,20 +415078,26 @@ static const UV * const uni_prop_ptrs[] = {
UNI_EA__N_invlist,
UNI_EA__NA_invlist,
UNI_EA__W_invlist,
+ UNI_EBASE_invlist,
+ UNI_ECOMP_invlist,
UNI_EGYP_invlist,
UNI_EGYPTIANHIEROGLYPHFORMATCONTROLS_invlist,
UNI_ELBA_invlist,
UNI_ELYM_invlist,
+ UNI_EMOD_invlist,
+ UNI_EMOJI_invlist,
UNI_EMOTICONS_invlist,
UNI_ENCLOSEDALPHANUM_invlist,
UNI_ENCLOSEDALPHANUMSUP_invlist,
UNI_ENCLOSEDCJK_invlist,
UNI_ENCLOSEDIDEOGRAPHICSUP_invlist,
+ UNI_EPRES_invlist,
UNI_ETHI_invlist,
UNI_ETHIOPICEXT_invlist,
UNI_ETHIOPICEXTA_invlist,
UNI_ETHIOPICSUP_invlist,
UNI_EXT_invlist,
+ UNI_EXTPICT_invlist,
UNI_GCB__CN_invlist,
UNI_GCB__EX_invlist,
UNI_GCB__L_invlist,
@@ -390714,6 +415140,19 @@ static const UV * const uni_prop_ptrs[] = {
UNI_HUNG_invlist,
UNI_HYPHEN_invlist,
UNI_IDC_invlist,
+ UNI_IDENTIFIERSTATUS__ALLOWED_invlist,
+ UNI_IDENTIFIERSTATUS__RESTRICTED_invlist,
+ UNI_IDENTIFIERTYPE__DEFAULTIGNORABLE_invlist,
+ UNI_IDENTIFIERTYPE__EXCLUSION_invlist,
+ UNI_IDENTIFIERTYPE__INCLUSION_invlist,
+ UNI_IDENTIFIERTYPE__LIMITEDUSE_invlist,
+ UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist,
+ UNI_IDENTIFIERTYPE__NOTNFKC_invlist,
+ UNI_IDENTIFIERTYPE__NOTXID_invlist,
+ UNI_IDENTIFIERTYPE__OBSOLETE_invlist,
+ UNI_IDENTIFIERTYPE__RECOMMENDED_invlist,
+ UNI_IDENTIFIERTYPE__TECHNICAL_invlist,
+ UNI_IDENTIFIERTYPE__UNCOMMONUSE_invlist,
UNI_IDEO_invlist,
UNI_IDEOGRAPHICSYMBOLS_invlist,
UNI_IDS_invlist,
@@ -390740,12 +415179,14 @@ static const UV * const uni_prop_ptrs[] = {
UNI_INCHAKMA_invlist,
UNI_INCHAM_invlist,
UNI_INCHEROKEE_invlist,
+ UNI_INCHORASMIAN_invlist,
UNI_INCOPTIC_invlist,
UNI_INCUNEIFORM_invlist,
UNI_INCYRILLIC_invlist,
UNI_INDEVANAGARI_invlist,
UNI_INDICNUMBERFORMS_invlist,
UNI_INDICSIYAQNUMBERS_invlist,
+ UNI_INDIVESAKURU_invlist,
UNI_INDOGRA_invlist,
UNI_INDUPLOYAN_invlist,
UNI_INEGYPTIANHIEROGLYPHS_invlist,
@@ -390775,6 +415216,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_INKANNADA_invlist,
UNI_INKATAKANA_invlist,
UNI_INKHAROSHTHI_invlist,
+ UNI_INKHITANSMALLSCRIPT_invlist,
UNI_INKHMER_invlist,
UNI_INKHOJKI_invlist,
UNI_INKHUDAWADI_invlist,
@@ -390782,6 +415224,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_INLEPCHA_invlist,
UNI_INLIMBU_invlist,
UNI_INLINEARA_invlist,
+ UNI_INLISU_invlist,
UNI_INLYCIAN_invlist,
UNI_INLYDIAN_invlist,
UNI_INMAHAJANI_invlist,
@@ -390830,6 +415273,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_INPC__RIGHT_invlist,
UNI_INPC__TOP_invlist,
UNI_INPC__TOPANDBOTTOM_invlist,
+ UNI_INPC__TOPANDBOTTOMANDLEFT_invlist,
UNI_INPC__TOPANDBOTTOMANDRIGHT_invlist,
UNI_INPC__TOPANDLEFT_invlist,
UNI_INPC__TOPANDLEFTANDRIGHT_invlist,
@@ -390877,7 +415321,6 @@ static const UV * const uni_prop_ptrs[] = {
UNI_INSC__VOWEL_invlist,
UNI_INSC__VOWELDEPENDENT_invlist,
UNI_INSC__VOWELINDEPENDENT_invlist,
- UNI_INSHARADA_invlist,
UNI_INSIDDHAM_invlist,
UNI_INSINHALA_invlist,
UNI_INSOGDIAN_invlist,
@@ -390905,11 +415348,13 @@ static const UV * const uni_prop_ptrs[] = {
UNI_INVS_invlist,
UNI_INWANCHO_invlist,
UNI_INWARANGCITI_invlist,
+ UNI_INYEZIDI_invlist,
UNI_INZANABAZARSQUARE_invlist,
UNI_IN__10_invlist,
UNI_IN__11_invlist,
UNI_IN__12_invlist,
UNI_IN__12_DOT_1_invlist,
+ UNI_IN__13_invlist,
UNI_IN__1_DOT_1_invlist,
UNI_IN__2_invlist,
UNI_IN__2_DOT_1_invlist,
@@ -391054,6 +415499,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_KHMERSYMBOLS_invlist,
UNI_KHMR_invlist,
UNI_KHOJ_invlist,
+ UNI_KITS_invlist,
UNI_KNDA_invlist,
UNI_KTHI_invlist,
UNI_L_invlist,
@@ -391079,8 +415525,6 @@ static const UV * const uni_prop_ptrs[] = {
UNI_LB__CM_invlist,
UNI_LB__CP_invlist,
UNI_LB__CR_invlist,
- UNI_LB__EB_invlist,
- UNI_LB__EM_invlist,
UNI_LB__EX_invlist,
UNI_LB__GL_invlist,
UNI_LB__H2_invlist,
@@ -391114,6 +415558,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_LINEARBIDEOGRAMS_invlist,
UNI_LINEARBSYLLABARY_invlist,
UNI_LISU_invlist,
+ UNI_LISUSUP_invlist,
UNI_LM_invlist,
UNI_LO_invlist,
UNI_LOE_invlist,
@@ -391395,7 +415840,6 @@ static const UV * const uni_prop_ptrs[] = {
UNI_SC_invlist,
UNI_SC__ADLM_invlist,
UNI_SC__ARAB_invlist,
- UNI_SC__ARMN_invlist,
UNI_SC__BENG_invlist,
UNI_SC__BOPO_invlist,
UNI_SC__BUGI_invlist,
@@ -391458,6 +415902,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_SC__TGLG_invlist,
UNI_SC__THAA_invlist,
UNI_SC__TIRH_invlist,
+ UNI_SC__YEZI_invlist,
UNI_SC__YI_invlist,
UNI_SC__ZYYY_invlist,
UNI_SD_invlist,
@@ -391494,6 +415939,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_SUTTONSIGNWRITING_invlist,
UNI_SYLO_invlist,
UNI_SYMBOLSANDPICTOGRAPHSEXTA_invlist,
+ UNI_SYMBOLSFORLEGACYCOMPUTING_invlist,
UNI_SYRC_invlist,
UNI_SYRIACSUP_invlist,
UNI_TAGB_invlist,
@@ -391506,6 +415952,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_TAML_invlist,
UNI_TANG_invlist,
UNI_TANGUTCOMPONENTS_invlist,
+ UNI_TANGUTSUP_invlist,
UNI_TAVT_invlist,
UNI_TELU_invlist,
UNI_TERM_invlist,
@@ -391566,6 +416013,7 @@ static const UV * const uni_prop_ptrs[] = {
UNI_XPOSIXWORD_invlist,
UNI_XPOSIXXDIGIT_invlist,
UNI_XSUX_invlist,
+ UNI_YEZI_invlist,
UNI_YI_invlist,
UNI_YIJING_invlist,
UNI_YIRADICALS_invlist,
@@ -391585,7 +416033,6 @@ static const UV * const uni_prop_ptrs[] = {
UNI__PERL_IDSTART_invlist,
UNI__PERL_IS_IN_MULTI_CHAR_FOLD_invlist,
UNI__PERL_NCHAR_invlist,
- UNI__PERL_NON_FINAL_FOLDS_invlist,
UNI__PERL_PATWS_invlist,
UNI__PERL_PROBLEMATIC_LOCALE_FOLDEDS_START_invlist,
UNI__PERL_PROBLEMATIC_LOCALE_FOLDS_invlist,
@@ -391593,6 +416040,10 @@ static const UV * const uni_prop_ptrs[] = {
UNI__PERL_SURROGATE_invlist
};
+#endif /* (defined(PERL_IN_REGCOMP_C) && ! defined(PERL_IN_XSUB_RE)) */
+
+#if defined(PERL_IN_REGCOMP_C)
+
/* Synonyms for perl properties */
#define UNI_AHEX UNI_POSIXXDIGIT
@@ -391636,6 +416087,10 @@ static const UV * const uni_prop_ptrs[] = {
#define UNI_XPERLSPACE UNI_XPOSIXSPACE
+#endif /* defined(PERL_IN_REGCOMP_C) */
+
+#if (defined(PERL_IN_REGCOMP_C) && ! defined(PERL_IN_XSUB_RE))
+
static const char * const UNI_age_values[] = {
"1.1",
"2.0",
@@ -391659,6 +416114,7 @@ static const char * const UNI_age_values[] = {
"11.0",
"12.0",
"12.1",
+ "13.0",
"NA",
"na",
"Unassigned",
@@ -391667,6 +416123,7 @@ static const char * const UNI_age_values[] = {
"V11_0",
"V12_0",
"V12_1",
+ "V13_0",
"V1_1",
"V2_0",
"V2_1",
@@ -391690,6 +416147,7 @@ static const char * const UNI_age_values[] = {
"v110",
"v120",
"v121",
+ "v130",
"v20",
"v21",
"v30",
@@ -391964,6 +416422,8 @@ static const char * const UNI_blk_values[] = {
"Chess Symbols",
"Chess_Symbols",
"chesssymbols",
+ "Chorasmian",
+ "chorasmian",
"CJK",
"cjk",
"CJK_Compat",
@@ -391998,6 +416458,8 @@ static const char * const UNI_blk_values[] = {
"cjkexte",
"CJK_Ext_F",
"cjkextf",
+ "CJK_Ext_G",
+ "cjkextg",
"CJK_Radicals_Sup",
"cjkradicalssup",
"CJK Radicals Supplement",
@@ -392032,6 +416494,9 @@ static const char * const UNI_blk_values[] = {
"CJK Unified Ideographs Extension F",
"CJK_Unified_Ideographs_Extension_F",
"cjkunifiedideographsextensionf",
+ "CJK Unified Ideographs Extension G",
+ "CJK_Unified_Ideographs_Extension_G",
+ "cjkunifiedideographsextensiong",
"Combining Diacritical Marks",
"Combining_Diacritical_Marks",
"combiningdiacriticalmarks",
@@ -392123,6 +416588,9 @@ static const char * const UNI_blk_values[] = {
"diacriticalssup",
"Dingbats",
"dingbats",
+ "Dives Akuru",
+ "Dives_Akuru",
+ "divesakuru",
"Dogra",
"dogra",
"Domino",
@@ -392348,6 +416816,9 @@ static const char * const UNI_blk_values[] = {
"kayahli",
"Kharoshthi",
"kharoshthi",
+ "Khitan Small Script",
+ "Khitan_Small_Script",
+ "khitansmallscript",
"Khmer",
"khmer",
"Khmer Symbols",
@@ -392414,6 +416885,11 @@ static const char * const UNI_blk_values[] = {
"linearbsyllabary",
"Lisu",
"lisu",
+ "Lisu_Sup",
+ "lisusup",
+ "Lisu Supplement",
+ "Lisu_Supplement",
+ "lisusupplement",
"Low Surrogates",
"Low_Surrogates",
"lowsurrogates",
@@ -392764,6 +417240,9 @@ static const char * const UNI_blk_values[] = {
"Symbols and Pictographs Extended-A",
"Symbols_And_Pictographs_Extended_A",
"symbolsandpictographsextendeda",
+ "Symbols for Legacy Computing",
+ "Symbols_For_Legacy_Computing",
+ "symbolsforlegacycomputing",
"Syriac",
"syriac",
"Syriac_Sup",
@@ -392805,6 +417284,11 @@ static const char * const UNI_blk_values[] = {
"Tangut Components",
"Tangut_Components",
"tangutcomponents",
+ "Tangut_Sup",
+ "tangutsup",
+ "Tangut Supplement",
+ "Tangut_Supplement",
+ "tangutsupplement",
"Telugu",
"telugu",
"Thaana",
@@ -392859,6 +417343,8 @@ static const char * const UNI_blk_values[] = {
"Warang Citi",
"Warang_Citi",
"warangciti",
+ "Yezidi",
+ "yezidi",
"Yijing",
"yijing",
"Yijing Hexagram Symbols",
@@ -392892,6 +417378,7 @@ static const char * const UNI_bpt_values[] = {
static const char * const UNI_ccc_values[] = {
"0",
"1",
+ "6",
"7",
"8",
"9",
@@ -393069,6 +417556,10 @@ static const char * const UNI_ccc_values[] = {
"doubleabove",
"Double_Below",
"doublebelow",
+ "HANR",
+ "hanr",
+ "Han_Reading",
+ "hanreading",
"Iota_Subscript",
"iotasubscript",
"IS",
@@ -393456,6 +417947,42 @@ static const char * const UNI_hst_values[] = {
NULL
};
+static const char * const UNI_identifierstatus_values[] = {
+ "Allowed",
+ "allowed",
+ "Restricted",
+ "restricted",
+ NULL
+};
+
+static const char * const UNI_identifiertype_values[] = {
+ "Default_Ignorable",
+ "defaultignorable",
+ "Deprecated",
+ "deprecated",
+ "Exclusion",
+ "exclusion",
+ "Inclusion",
+ "inclusion",
+ "Limited_Use",
+ "limiteduse",
+ "Not_Character",
+ "notcharacter",
+ "Not_NFKC",
+ "notnfkc",
+ "Not_XID",
+ "notxid",
+ "Obsolete",
+ "obsolete",
+ "Recommended",
+ "recommended",
+ "Technical",
+ "technical",
+ "Uncommon_Use",
+ "uncommonuse",
+ NULL
+};
+
static const char * const UNI_in_values[] = {
"1.1",
"2.0",
@@ -393479,12 +418006,14 @@ static const char * const UNI_in_values[] = {
"11.0",
"12.0",
"12.1",
+ "13.0",
"Unassigned",
"unassigned",
"V10_0",
"V11_0",
"V12_0",
"V12_1",
+ "V13_0",
"V2_0",
"V2_1",
"V3_0",
@@ -393506,6 +418035,7 @@ static const char * const UNI_in_values[] = {
"v110",
"v120",
"v121",
+ "v130",
"v20",
"v21",
"v30",
@@ -393547,6 +418077,8 @@ static const char * const UNI_inpc_values[] = {
"top",
"Top_And_Bottom",
"topandbottom",
+ "Top_And_Bottom_And_Left",
+ "topandbottomandleft",
"Top_And_Bottom_And_Right",
"topandbottomandright",
"Top_And_Left",
@@ -394382,6 +418914,10 @@ static const char * const UNI_sc_values[] = {
"cher",
"Cherokee",
"cherokee",
+ "Chorasmian",
+ "chorasmian",
+ "Chrs",
+ "chrs",
"Common",
"common",
"Copt",
@@ -394404,6 +418940,10 @@ static const char * const UNI_sc_values[] = {
"deva",
"Devanagari",
"devanagari",
+ "Diak",
+ "diak",
+ "Dives_Akuru",
+ "divesakuru",
"Dogr",
"dogr",
"Dogra",
@@ -394528,6 +419068,8 @@ static const char * const UNI_sc_values[] = {
"khar",
"Kharoshthi",
"kharoshthi",
+ "Khitan_Small_Script",
+ "khitansmallscript",
"Khmer",
"khmer",
"Khmr",
@@ -394538,6 +419080,8 @@ static const char * const UNI_sc_values[] = {
"khojki",
"Khudawadi",
"khudawadi",
+ "Kits",
+ "kits",
"Knda",
"knda",
"Kthi",
@@ -394884,6 +419428,10 @@ static const char * const UNI_sc_values[] = {
"xpeo",
"Xsux",
"xsux",
+ "Yezi",
+ "yezi",
+ "Yezidi",
+ "yezidi",
"Yi",
"yi",
"Yiii",
@@ -395020,6 +419568,8 @@ UNI_ea_values,
UNI_gc_values,
UNI_gcb_values,
UNI_hst_values,
+UNI_identifierstatus_values,
+UNI_identifiertype_values,
UNI_in_values,
UNI_inpc_values,
UNI_insc_values,
@@ -395062,7 +419612,13 @@ UNI_wb_values
#define UNI_dia_values_index UNI_ahex_values_index
#define UNI_dt_values_index 7
#define UNI_ea_values_index 8
+#define UNI_ebase_values_index UNI_ahex_values_index
+#define UNI_ecomp_values_index UNI_ahex_values_index
+#define UNI_emod_values_index UNI_ahex_values_index
+#define UNI_emoji_values_index UNI_ahex_values_index
+#define UNI_epres_values_index UNI_ahex_values_index
#define UNI_ext_values_index UNI_ahex_values_index
+#define UNI_extpict_values_index UNI_ahex_values_index
#define UNI_gc_values_index 9
#define UNI_gcb_values_index 10
#define UNI_grbase_values_index UNI_ahex_values_index
@@ -395071,44 +419627,46 @@ UNI_wb_values
#define UNI_hst_values_index 11
#define UNI_hyphen_values_index UNI_ahex_values_index
#define UNI_idc_values_index UNI_ahex_values_index
+#define UNI_identifierstatus_values_index 12
+#define UNI_identifiertype_values_index 13
#define UNI_ideo_values_index UNI_ahex_values_index
#define UNI_ids_values_index UNI_ahex_values_index
#define UNI_idsb_values_index UNI_ahex_values_index
#define UNI_idst_values_index UNI_ahex_values_index
-#define UNI_in_values_index 12
-#define UNI_inpc_values_index 13
-#define UNI_insc_values_index 14
-#define UNI_jg_values_index 15
+#define UNI_in_values_index 14
+#define UNI_inpc_values_index 15
+#define UNI_insc_values_index 16
+#define UNI_jg_values_index 17
#define UNI_joinc_values_index UNI_ahex_values_index
-#define UNI_jt_values_index 16
-#define UNI_lb_values_index 17
+#define UNI_jt_values_index 18
+#define UNI_lb_values_index 19
#define UNI_loe_values_index UNI_ahex_values_index
#define UNI_lower_values_index UNI_ahex_values_index
#define UNI_math_values_index UNI_ahex_values_index
#define UNI_nchar_values_index UNI_ahex_values_index
-#define UNI_nfcqc_values_index 18
-#define UNI_nfdqc_values_index 19
+#define UNI_nfcqc_values_index 20
+#define UNI_nfdqc_values_index 21
#define UNI_nfkcqc_values_index UNI_nfcqc_values_index
#define UNI_nfkdqc_values_index UNI_nfdqc_values_index
-#define UNI_nt_values_index 20
-#define UNI_nv_values_index 21
+#define UNI_nt_values_index 22
+#define UNI_nv_values_index 23
#define UNI_patsyn_values_index UNI_ahex_values_index
#define UNI_patws_values_index UNI_ahex_values_index
#define UNI_pcm_values_index UNI_ahex_values_index
#define UNI_qmark_values_index UNI_ahex_values_index
#define UNI_radical_values_index UNI_ahex_values_index
#define UNI_ri_values_index UNI_ahex_values_index
-#define UNI_sb_values_index 22
-#define UNI_sc_values_index 23
+#define UNI_sb_values_index 24
+#define UNI_sc_values_index 25
#define UNI_scx_values_index UNI_sc_values_index
#define UNI_sd_values_index UNI_ahex_values_index
#define UNI_sterm_values_index UNI_ahex_values_index
#define UNI_term_values_index UNI_ahex_values_index
#define UNI_uideo_values_index UNI_ahex_values_index
#define UNI_upper_values_index UNI_ahex_values_index
-#define UNI_vo_values_index 24
+#define UNI_vo_values_index 26
#define UNI_vs_values_index UNI_ahex_values_index
-#define UNI_wb_values_index 25
+#define UNI_wb_values_index 27
#define UNI_wspace_values_index UNI_ahex_values_index
#define UNI_xidc_values_index UNI_ahex_values_index
#define UNI_xids_values_index UNI_ahex_values_index
@@ -395124,27 +419682,27 @@ UNI_wb_values
#define GCB_Maybe_Emoji_NonBreak 4
static const U8 GCB_table[17][17] = {
- /* 'XPG' stands for 'XPG_XX'; 'edg' stands for 'EDGE'; u stands
- * for 'unused in this Unicode release (and the data in the row
- * or column are garbage) */
-/* XX CR CN EX L LF LV LVT PP RI SM T V XPG ZWJ edg u */
-/* XX */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1 },
-/* CR */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
-/* CN */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
-/* EX */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 3 },
-/* L */ { 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1 },
-/* LF */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
-/* LV */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1 },
-/* LVT*/ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1 },
-/* PP */ { 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 },
-/* RI */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 1 },
-/* SM */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1 },
-/* T */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1 },
-/* V */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1 },
-/* XPG*/ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1 },
-/* ZWJ*/ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 4, 0, 1, 0 },
-/* edg*/ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
-/* u */ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0 }
+ /* 'edg' stands for 'EDGE'; 'EPX' stands for 'ExtPict_XX'; u
+ * stands for 'unused in this Unicode release (and the data in
+ * its row and column are garbage) */
+/* XX CN CR edg EPX EX L LF LV LVT PP RI SM T V ZWJ u */
+/* XX */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1 },
+/* CN */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+/* CR */ { 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+/* edg*/ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+/* EPX*/ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1 },
+/* EX */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 3 },
+/* L */ { 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1 },
+/* LF */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+/* LV */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1 },
+/* LVT*/ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1 },
+/* PP */ { 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+/* RI */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 2, 0, 1, 1, 0, 1 },
+/* SM */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1 },
+/* T */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1 },
+/* V */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1 },
+/* ZWJ*/ { 1, 1, 1, 1, 4, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0 },
+/* u */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0 }
};
#define LB_NOBREAK 0
@@ -395158,48 +419716,51 @@ static const U8 GCB_table[17][17] = {
#define LB_RI_then_RI 15
#define LB_various_then_PO_or_PR 32
-static const U8 LB_table[39][39] = {
- /* 'edg' stands for 'EDGE' */
-/* AL BA BB B2 SY CR CP CL CM CB EB EM EX GL H2 H3 HL HY ID IS IN JL JT JV LF BK NL NS NU OP PO PR QU RI SP WJ ZWJ ZW edg */
-/* AL */ { 0, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 2, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
-/* BA */ {14, 0,14,14, 2, 0, 2, 2, 0, 1,14,14, 2,14,14,14,14, 0,14, 2,14,14,14,14, 0, 0, 0, 0,14,14,14,14, 0,14, 0, 0, 0, 0, 1 },
-/* BB */ { 0, 0, 0, 0, 2, 0, 2, 2, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
-/* B2 */ { 1, 0, 1, 2, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* SY */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 2, 1, 1, 1, 1, 0, 0, 0, 0,12, 1,33,33, 0, 1, 0, 0, 0, 0, 1 },
-/* CR */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
-/* CP */ { 0, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 2, 1, 1, 1, 1, 0, 0, 0, 2, 0, 1,33,33, 0, 1, 0, 0, 0, 0, 1 },
-/* CL */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 1, 1, 1, 1, 0, 0, 0, 2, 1, 1,33,33, 0, 1, 0, 0, 0, 0, 1 },
-/* CM */ { 3, 3, 3, 3, 3, 0, 3, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 0, 1 },
-/* CB */ { 1, 1, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* EB */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 0, 2, 0, 1, 1, 1, 0, 1, 2, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* EM */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* EX */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* GL */ { 0, 0, 0, 0, 2, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
-/* H2 */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* H3 */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* HL */ { 0, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 2, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
-/* HY */ {14, 0,14,14, 2, 0, 2, 2, 0, 1,14,14, 2,14,14,14,14, 0,14, 2,14,14,14,14, 0, 0, 0, 0,13,14,14,14, 0,14, 0, 0, 0, 0, 1 },
-/* ID */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* IS */ { 0, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 2, 1, 1, 1, 1, 0, 0, 0, 0,12, 1,33,33, 0, 1, 0, 0, 0, 0, 1 },
-/* IN */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* JL */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 0, 0, 1, 0, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* JT */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* JV */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* LF */ { 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, 1, 1, 1, 1, 1, 1 },
-/* BK */ { 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, 1, 1, 1, 1, 1, 1 },
-/* NL */ { 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, 1, 1, 1, 1, 1, 1 },
-/* NS */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* NU */ { 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
-/* OP */ { 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 1 },
-/* PO */ { 0, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0,10, 1, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* PR */ { 0, 0, 1, 1, 2, 0, 2, 2, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0,10, 1, 1, 0, 1, 0, 0, 0, 0, 1 },
-/* QU */ { 0, 0, 0, 0, 2, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
-/* RI */ { 1, 0, 1, 1, 2, 0, 2, 2, 0, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0,15, 0, 0, 0, 0, 1 },
-/* SP */ { 7, 7, 7, 7, 8, 0, 8, 8, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 8, 7, 0, 1 },
-/* WJ */ { 0, 0, 0, 0, 2, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
-/* ZWJ*/ { 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, 0, 0, 0, 0, 0, 0, 1 },
-/* ZW */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1 },
-/* edg*/ { 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, 0, 0, 0, 0, 0, 0, 0 }
+static const U8 LB_table[41][41] = {
+ /* 'EAO' stands for 'East_Asian_OP'; 'edg' stands for 'EDGE'; u stands for 'unused in this Unicode release (and the data in its row and
+ * column are garbage) */
+/* AL B2 BA BB BK CB CL CM CP CR EAO EB edg EM EX GL H2 H3 HL HY ID IN IS JL JT JV LF NL NS NU OP PO PR QU RI SP SY WJ ZW ZWJ u */
+/* AL */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* B2 */ { 1, 2, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* BA */ {14,14, 0,14, 0, 1, 2, 0, 2, 0, 14,14, 1,14, 2,14,14,14,14, 0,14,13, 2,14,14,14, 0, 0, 0,14,14,14,14, 0,14, 0, 2, 0, 0, 0, 2 },
+/* BB */ { 0, 0, 0, 0, 0, 1, 2, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2 },
+/* BK */ { 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, 1, 1, 1, 1, 1, 1, 1, 1 },
+/* CB */ { 1, 1, 1, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* CL */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 1,33,33, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* CM */ { 3, 3, 3, 3, 0, 3, 3, 0, 3, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 0, 3, 3 },
+/* CP */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 2, 0, 1,33,33, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* CR */ { 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, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+/* EAO*/ { 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2 },
+/* EB */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 0, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* edg*/ { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+/* EM */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* EX */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* GL */ { 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2 },
+/* H2 */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* H3 */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* HL */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* HY */ {14,14, 0,14, 0, 1, 2, 0, 2, 0, 14,14, 1,14, 2,14,14,14,14, 0,14,13, 2,14,14,14, 0, 0, 0,13,14,14,14, 0,14, 0, 2, 0, 0, 0, 2 },
+/* ID */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* IN */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* IS */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0,12, 1,33,33, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* JL */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* JT */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* JV */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* LF */ { 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, 1, 1, 1, 1, 1, 1, 1, 1 },
+/* NL */ { 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, 1, 1, 1, 1, 1, 1, 1, 1 },
+/* NS */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* NU */ { 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
+/* OP */ { 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2 },
+/* PO */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 0,10, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* PR */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,10, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* QU */ { 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2 },
+/* RI */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0,15, 0, 2, 0, 0, 0, 2 },
+/* SP */ { 7, 7, 7, 7, 0, 7, 8, 7, 8, 0, 7, 7, 1, 7, 8, 7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 8, 8, 0, 7, 8 },
+/* SY */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0,12, 1,33,33, 0, 1, 0, 2, 0, 0, 0, 2 },
+/* WJ */ { 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2 },
+/* ZW */ { 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1 },
+/* ZWJ*/ { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+/* u */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 1,33,33, 0, 1, 0, 2, 0, 0, 0, 2 }
};
#define WB_NOBREAK 0
@@ -395215,34 +419776,34 @@ static const U8 LB_table[39][39] = {
#define WB_RI_then_RI 16
static const U8 WB_table[23][23] = {
- /* 'Ext' stands for 'Extend'; 'XPG' stands for 'XPG_LE'; 'XPH' stands for 'XPG_XX';
- * 'edg' stands for 'EDGE'; 'hs' stands for 'Perl_Tailored_HSpace'; u stands for
- * 'unused in this Unicode release (and the data in the row or column are garbage)
- * */
-/* XX LE CR DQ Ext EX FO HL KA LF ML MN MB NL NU hs RI SQ XPG XPH ZWJ edg u */
-/* XX */ { 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 },
-/* LE */ { 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 9, 1, 9, 1, 0, 1, 1, 9, 1, 1, 0, 1, 1 },
-/* CR */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1 },
-/* DQ */ { 1, 1, 1, 1, 0, 1, 0, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 },
-/* Ext*/ { 3, 3, 1, 3, 0, 3, 0, 3, 3, 1, 3, 3, 3, 1, 3, 1, 3, 3, 3, 3, 0, 1, 3 },
-/* EX */ { 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1 },
-/* FO */ { 3, 3, 1, 3, 0, 3, 0, 3, 3, 1, 3, 3, 3, 1, 3, 1, 3, 3, 3, 3, 0, 1, 3 },
-/* HL */ { 1, 0, 1, 7, 0, 0, 0, 0, 1, 1, 9, 1, 9, 1, 0, 1, 1, 8, 0, 1, 0, 1, 1 },
-/* KA */ { 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 },
-/* LF */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1 },
-/* ML */ { 1,11, 1, 1, 0, 1, 0,11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 0, 1, 1 },
-/* MN */ { 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1,13, 1, 1, 1, 1, 1, 0, 1, 1 },
-/* MB */ { 1,11, 1, 1, 0, 1, 0,11, 1, 1, 1, 1, 1, 1,13, 1, 1, 1, 11, 1, 0, 1, 1 },
-/* NL */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1 },
-/* NU */ { 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1,15,15, 1, 0, 1, 1,15, 0, 1, 0, 1, 1 },
-/* hs */ { 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 2, 1, 1, 1, 1, 0, 1, 1 },
-/* RI */ { 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,16, 1, 1, 1, 0, 1, 1 },
-/* SQ */ { 1,11, 1, 1, 0, 1, 0,11, 1, 1, 1, 1, 1, 1,13, 1, 1, 1, 11, 1, 0, 1, 1 },
-/* XPG*/ { 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 9, 1, 9, 1, 0, 1, 1, 9, 0, 1, 0, 1, 1 },
-/* XPH*/ { 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 },
-/* ZWJ*/ { 3, 3, 1, 3, 0, 3, 0, 3, 3, 1, 3, 3, 3, 1, 3, 1, 3, 3, 0, 0, 0, 1, 0 },
-/* edg*/ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
-/* u */ { 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0 }
+ /* 'edg' stands for 'EDGE'; 'EPL' stands for 'ExtPict_LE'; 'EPX' stands for
+ * 'ExtPict_XX'; 'Ext' stands for 'Extend'; 'hs' stands for 'Perl_Tailored_HSpace';
+ * u stands for 'unused in this Unicode release (and the data in its row and column
+ * are garbage) */
+/* XX CR DQ edg EPL EPX EX Ext FO HL hs KA LE LF MB ML MN NL NU RI SQ ZWJ u */
+/* XX */ { 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
+/* CR */ { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
+/* DQ */ { 1, 1, 1, 1, 1, 1, 1, 0, 0, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
+/* edg*/ { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
+/* EPL*/ { 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 9, 9, 1, 1, 0, 1, 9, 0, 1 },
+/* EPX*/ { 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
+/* EX */ { 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1 },
+/* Ext*/ { 3, 1, 3, 1, 3, 3, 3, 0, 0, 3, 1, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 0, 3 },
+/* FO */ { 3, 1, 3, 1, 3, 3, 3, 0, 0, 3, 1, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 0, 3 },
+/* HL */ { 1, 1, 7, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 9, 9, 1, 1, 0, 1, 8, 0, 1 },
+/* hs */ { 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 2, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1 },
+/* KA */ { 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
+/* LE */ { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 9, 9, 1, 1, 0, 1, 9, 0, 1 },
+/* LF */ { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
+/* MB */ { 1, 1, 1, 1, 11, 1, 1, 0, 0,11, 1, 1,11, 1, 1, 1, 1, 1,13, 1, 1, 0, 1 },
+/* ML */ { 1, 1, 1, 1, 11, 1, 1, 0, 0,11, 1, 1,11, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
+/* MN */ { 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,13, 1, 1, 0, 1 },
+/* NL */ { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
+/* NU */ { 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1,15, 1,15, 1, 0, 1,15, 0, 1 },
+/* RI */ { 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,16, 1, 0, 1 },
+/* SQ */ { 1, 1, 1, 1, 11, 1, 1, 0, 0,11, 1, 1,11, 1, 1, 1, 1, 1,13, 1, 1, 0, 1 },
+/* ZWJ*/ { 3, 1, 3, 1, 0, 0, 3, 0, 0, 3, 1, 3, 3, 1, 3, 3, 3, 1, 3, 3, 3, 0, 0 },
+/* u */ { 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0 }
};
#endif /* defined(PERL_IN_REGEXEC_C) */
@@ -395255,55 +419816,57 @@ static const U8 WB_table[23][23] = {
#define MAX_FOLD_FROMS 3
/* Generated from:
- * d34c77b7e7a94986cc82056919f4ffc1503b73091561e16bd8ef145ac0fd04c5 lib/Unicode/UCD.pm
- * 5e91b649379ec79af7cfb6b09410a24557cba4c6d733cd0a2b8a78a1448736d2 lib/unicore/ArabicShaping.txt
- * f5feb19cd084b2b1568fbc0f94f4b4b54941406e7fb36c7570f8352fd5022dbe lib/unicore/BidiBrackets.txt
- * e6cbd8ffe94f2e0fbfa6695d6c06c1e72eef7d3aa93cb6329d111285198b5e62 lib/unicore/BidiMirroring.txt
- * a28b205afe8625fffdb6544a5fe14cf02b91493d9900f07820fa2102a17548f7 lib/unicore/Blocks.txt
- * 9c772627c6ee77eea6a17b42927b8ee28ca05dc65d6a511062104baaf3d12294 lib/unicore/CaseFolding.txt
- * abc8394c5bde62453118b00c1c5842160a04d7fffb2e829ee5426b846596d081 lib/unicore/CompositionExclusions.txt
- * 2fc081011d8fabaf7cf4937732dd5a6d6a57e492c43f3adfeded513387ee0ec3 lib/unicore/DAge.txt
- * a6eb7a8671fb532fbd88c37fd7b20b5b2e7dbfc8b121f74c14abe2947db0da68 lib/unicore/DCoreProperties.txt
- * 92dcdda84142194a1596f22180fcdf8c0e7f86897f09cc9203c7dc636c549f5f lib/unicore/DNormalizationProps.txt
- * 904500178b2e752635bef27aaed3a2a3718a100bce35ff96b3890be7a8315d8f lib/unicore/EastAsianWidth.txt
- * 1989b03d93023d8f5cc33eebf0d2ea80c8bd8f8c97843059ea039acb582c2078 lib/unicore/EmojiData.txt
- * d7930c2a7318e66b4ba756d5e5b41fbc586c2ad43d450ae9d320a758510bae2e lib/unicore/EquivalentUnifiedIdeograph.txt
- * 8606af08712a8c18fe268d418e2e5a87eddee6e190cce4c2d5a76b4fadf035e8 lib/unicore/HangulSyllableType.txt
- * 49a1bf18b048454154881f6a8a605b5e2fc73e85fcc4df1cb26d52e8c2aeb9bf lib/unicore/IndicPositionalCategory.txt
- * 1b6f3ef6e00e5b2e2a93d2d3c954ca1cce368599c5f11874cd0f0ce222d4637b lib/unicore/IndicSyllabicCategory.txt
- * 285c5c1ae458bc3ccd6a1398a94d2d67ce6bc1d7fc0f098762836050345e9434 lib/unicore/Jamo.txt
- * 961f842fc70b5afd1d82c6645e68c10d1f701382aed38ae38cb2ff27f671903c lib/unicore/LineBreak.txt
- * ff61a0687d2f32c0dd1094254b8bde967883b43c2d4d50fd17531d498e41ab2c lib/unicore/NameAliases.txt
- * d3eb9a288ebeaf9de1237989f490705e287b6f610b59d2459fb1b7c2d8e39c39 lib/unicore/NamedSequences.txt
- * d30d3ee430cf3527449d024954f053e419fa4aa2246eb59e5cd8d621af0c4b3f lib/unicore/PropList.txt
- * efce54f7c715a332c19b3d14c6a0eea30c6cde91caf6ff0d21c755be933736f4 lib/unicore/PropValueAliases.txt
- * d3cc3f9f0b6a8f0b7ef1d6ef202675426c28f4a75de01fc69ed977a93a00982b lib/unicore/PropertyAliases.txt
- * 3746848c181b5dbc1e614dfac9b8a5e3568e6525c693ac14e692ac55dec57e91 lib/unicore/ScriptExtensions.txt
- * e6313a8edfd24f36c7a006fbcf1d1b7245b5dd009c6dde80441f0da08b822c43 lib/unicore/Scripts.txt
- * 817ce2e9edca8e075a153f54b8f3b020345e37652cd2bda9b1495c366af17e7e lib/unicore/SpecialCasing.txt
- * 93ab1acd8fd9d450463b50ae77eab151a7cda48f98b25b56baed8070f80fc936 lib/unicore/UnicodeData.txt
- * ec5ba64af58297a46de17848eb984d2b231adb304de92e9d0d3befdbf9dc2551 lib/unicore/VerticalOrientation.txt
- * 95bd55cf803b93eb0b4990cf0e1d70ede263b36412d9c6921fd6f15cef058961 lib/unicore/auxiliary/GCBTest.txt
- * 39d73448fd257e6082f83ddf4c8bf6feb191e85dc8fc56b1a8512482de5e3dea lib/unicore/auxiliary/GraphemeBreakProperty.txt
- * f385e70f79f5959ae66d64b00f4bda39db6cef78e5363a0cdd88db46eafc6c8f lib/unicore/auxiliary/LBTest.txt
- * 7d6c909af97d0ab545a132d412f6e4e65c7eb5158514a7feb9bf00bcd05875f9 lib/unicore/auxiliary/SBTest.txt
- * c47d674ef4170c46185bf56f7a4c6627f65f012295e0994f7dc4aea51f8fd8cf lib/unicore/auxiliary/SentenceBreakProperty.txt
- * 3e3320bbbe775de7f1a0b9a30021eb949116a9b05cb461c90596c5ecf1743831 lib/unicore/auxiliary/WBTest.txt
- * f221f89fe3bb3becc00de726d5694c4b7f464c316baff6d339b2ff3900bcb96c lib/unicore/auxiliary/WordBreakProperty.txt
- * db2c41c618bab54b00e58223ad11cec550f9b9fd1a471de236e660da92fe4870 lib/unicore/extracted/DBidiClass.txt
- * fecd8a1c49935d794c4c1012f4158aa536a13049a4c10d01aaf7b5f90f3b2cbc lib/unicore/extracted/DBinaryProperties.txt
- * db6f38fb4aa8b9181b5e6a9f320de9d5c2c9b5687116a619b3cb90138b025e0b lib/unicore/extracted/DCombiningClass.txt
- * 2524f69c175831fd84bfbaf13ea37992f41db167d728c51b1d0002c1d0b130b0 lib/unicore/extracted/DDecompositionType.txt
- * 16852301d54ae59b5cfe0daa6b8e17fb688ed055d59b2a5a11eaafc650cc9d30 lib/unicore/extracted/DEastAsianWidth.txt
- * 78f898b988049a5bea5039cea6ffe87a92596859ac660a6c438519b512fe2ee6 lib/unicore/extracted/DGeneralCategory.txt
- * 33441692403901287c834f96bd33b671133a6f74e2732c61a497608b9e434932 lib/unicore/extracted/DJoinGroup.txt
- * a792ac5ef602e3bace679cc96d7491701dcdb73d81c782253de88fdcc5e70e50 lib/unicore/extracted/DJoinType.txt
- * 78e2600e24fa7d5ab62117de50b382f8b31b08401c37a0782c38dacb340b64e7 lib/unicore/extracted/DLineBreak.txt
- * 1bde4ad73e271c6349fbd1972e54f38bba5cc1900c28f678e79b9e8909b31793 lib/unicore/extracted/DNumType.txt
- * 6278722699123f3890e4b1cc42011e96d8960e4958a3b93484361530983d2611 lib/unicore/extracted/DNumValues.txt
- * b3d90fc23817ea4e33e9a90107c0a6c7b23314efd5712905ed172624d5524693 lib/unicore/mktables
- * a712c758275b460d18fa77a26ed3589689bb3f69dcc1ea99b913e32db92a5cd2 lib/unicore/version
+ * d60b1a3dffe16c4aaaf3f00d21993bb320d05e9828b106182214764d4c69935c lib/Unicode/UCD.pm
+ * ce96627d4fc91b4fd886c409caeb9b76cf7bd345e12f05c6701add7f233f6437 lib/unicore/ArabicShaping.txt
+ * 0e69eef3da722cc104522d8372e86d5b86bb7afcc761b0c991e39e832294946d lib/unicore/BidiBrackets.txt
+ * a00d9d21585106a52113fb7b1d3d0373a5835be72e76862fb559ebddd474d70e lib/unicore/BidiMirroring.txt
+ * 81a82b6a9fcf1a9c12f588d7a1decd73a9afdc4cac95b0eb7e576e7942d6c19f lib/unicore/Blocks.txt
+ * 99d231d7c91688bbe8ca8ccebcc2f46b5b222f844babe4827295bae11e2abe5f lib/unicore/CaseFolding.txt
+ * 38badafd818d8405324fe298c0676be0c95186368c84b5368375fd871a645144 lib/unicore/CompositionExclusions.txt
+ * e779a443d3aa2a3166a15becaa2b737c922480e32c0453d5956093633555078f lib/unicore/DAge.txt
+ * a5d45f59b39deaab3c72ce8c1a2e212a5e086dff11b1f9d5bb0e352642e82248 lib/unicore/DCoreProperties.txt
+ * 3ac44e11c84bdaf6b207d2c2c20eed857ae17052393fc7f71b0fe951186ba906 lib/unicore/DNormalizationProps.txt
+ * 4f822ec7a9ebbb3138ad29bade8b9688d25b39c7a3c0b7431f01e7229e4fcb6e lib/unicore/EastAsianWidth.txt
+ * fc535aa1047a70105ab9a22c2b4c3f363a2ff02fe48ebbc5eeb9873b2752ff0b lib/unicore/EquivalentUnifiedIdeograph.txt
+ * b9c5158ce944d2fec57e0e4ecb716bdabfc3bdde73525f1772fe03f61a30d473 lib/unicore/HangulSyllableType.txt
+ * 36c1b2a626ff1fb23b8b21e6ea8712698f8ce668dded1cb48b8ddf6a6a1b04e9 lib/unicore/IdStatus.txt
+ * 4857c4ffa3898e6128b2d46b0a02e499a663fb91464a69ef3611096f01293acc lib/unicore/IdType.txt
+ * 69197b019fa5f2fb0d8c6ed1ed8acb9f2e8b5b8f45a947953ffa652f3bf54983 lib/unicore/IndicPositionalCategory.txt
+ * 6604e2f0fde7428675364aa0006bc686b79488dcc60ae8cb29800af2be3352e8 lib/unicore/IndicSyllabicCategory.txt
+ * 84ead63924aaa74b988b2eaf254a8733276ed108633ce2ef77a9ee1de7818162 lib/unicore/Jamo.txt
+ * d5abcd8f54c8a2aa912924c485ccf7f968ad98feaa303d8e9a29ad89172f1faf lib/unicore/LineBreak.txt
+ * 985128e8c8b2540233331d9b27d897d2c23bd5bcf1d05da960befce6efc59542 lib/unicore/NameAliases.txt
+ * 27282b8aa01d4d0c44aef436cb74195ae8639ffa187aeee4e6247af76febea76 lib/unicore/NamedSequences.txt
+ * 485b5a3ed25dbf1f94dfa5a9b69d8b4550ffd0c33045ccc55ccfd7c80b2a40cf lib/unicore/PropList.txt
+ * 6b3902e9268cd843fe65cbdea992108c9528343ec0679f800b96f356bb553e5a lib/unicore/PropValueAliases.txt
+ * 2bd5777847e3d6add3c7e5c0d1393ddcab89e5a0ac3ff498cb0c53041f0b86e4 lib/unicore/PropertyAliases.txt
+ * 03a61dc89422e44cc2b73e8e893321007880ab69e2a4d281c0f1bc29c602b9d0 lib/unicore/ScriptExtensions.txt
+ * 9a5ed1ec9b5f0d7147e9371ad792ab39203611af7637cff2aa4a5c663b172cde lib/unicore/Scripts.txt
+ * 6424312f1dc39b22e0ff9c0ffb13dfad424d9b03e6a6dc6bca941f6bf5ef1ffd lib/unicore/SpecialCasing.txt
+ * bdbffbbfc8ad4d3a6d01b5891510458f3d36f7170422af4ea2bed3211a73e8bb lib/unicore/UnicodeData.txt
+ * 160f41816234addb511901d5f21febd69574578dd93de6ef8153e35693325575 lib/unicore/VerticalOrientation.txt
+ * 32dfb37d21db530529a6ec3dc13d96f21f8e7c7faf7ff3db8a9760cd76cec81d lib/unicore/auxiliary/GCBTest.txt
+ * 2bd3c5e2d62701ff81fb3ec318e179a4618cabb1493b1e0dd2b4e7e56c5437c4 lib/unicore/auxiliary/GraphemeBreakProperty.txt
+ * c51fbebfa82a0f36473b44bfd71d5ef6cb6a1f81fb313375dc9a1910d79bb2b6 lib/unicore/auxiliary/LBTest.txt
+ * 80b0107750818d8f370bd120b6fe56b6855b60581f72affe8b60409a469b4b65 lib/unicore/auxiliary/SBTest.txt
+ * 09e3166ebab166ac630a227f77f4e794ebd433271abd5588f5a67e7f199c71ee lib/unicore/auxiliary/SentenceBreakProperty.txt
+ * bf5373ce28a5df06796c93dc159dd15a997bb2950c92704b40ae8190cfc3716d lib/unicore/auxiliary/WBTest.txt
+ * a2b7373cf2fe3fa3b26dbb53405ca849985f771ff47f1c61743978003ff80499 lib/unicore/auxiliary/WordBreakProperty.txt
+ * d2686f400a638c80775d7c662556fb8fa8dd3bbe4aa548d9d31624264c6e1bb1 lib/unicore/emoji/emoji.txt
+ * b827ae5da8c2b08947cc9a120a7b7fd2f1676fb160b508df78075381635b127c lib/unicore/extracted/DBidiClass.txt
+ * 6fdc5b5ef40444a8f0c772e6b67c00498d4216fe0c0fdf76744ce338f2ad3810 lib/unicore/extracted/DBinaryProperties.txt
+ * e14928a5bf6ad5958a80332bd42e96e14420080a95c660e5da29384e496755d0 lib/unicore/extracted/DCombiningClass.txt
+ * 579a03281fbe87b78d5d9a8523de4d255edd7e4ca6eab0e4c7729de97e9b89b1 lib/unicore/extracted/DDecompositionType.txt
+ * ad83c59b257e9d480ffd3001d4ac240c5fed7cb1919453e1c4e8877035256bcd lib/unicore/extracted/DEastAsianWidth.txt
+ * 4502f0969e4e6558c4b4c6ca4c23dad70b863d61dd3d5eed1a62a6c3c99fd570 lib/unicore/extracted/DGeneralCategory.txt
+ * 00bb88b89e2adb646f3177f9444e2d3192386b81a5de9556104b338274b253e1 lib/unicore/extracted/DJoinGroup.txt
+ * ac835b6e11a60c9820d3cf2d1cb0558dd68efb8f53f404a51632e4726690a6d7 lib/unicore/extracted/DJoinType.txt
+ * baba9dfc133e3cb770a89aaf0973b1341fa61c2da6c176baf6428898b3b568d8 lib/unicore/extracted/DLineBreak.txt
+ * 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
+ * 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
+ * ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables
+ * 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
* 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
- * 03e51b0f07beebd5da62ab943899aa4934eee1f792fa27c1fb638c33bf4ac6ea regen/mk_PL_charclass.pl
- * 61ea8132bb9ea5c637609e2d026b0b85ce17d6bec544c2f08ce411e6f65e8386 regen/mk_invlists.pl
+ * 6bbad21de0848e0236b02f34f5fa0edd3cdae9ba8173cc9469a5513936b9e728 regen/mk_PL_charclass.pl
+ * 7a7e778e903508b1c244a77bae57ec57606ab775bb5f81719dbb122eb66d4259 regen/mk_invlists.pl
* ex: set ro: */
diff --git a/gnu/usr.bin/perl/config_h.SH b/gnu/usr.bin/perl/config_h.SH
index ef135e2528d..08c5923ef81 100644
--- a/gnu/usr.bin/perl/config_h.SH
+++ b/gnu/usr.bin/perl/config_h.SH
@@ -381,7 +381,7 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
/* HAS_REGCOMP:
* This symbol, if defined, indicates that the regcomp() routine is
- * available to do some regular patern matching (usually on POSIX.2
+ * available to do some regular pattern matching (usually on POSIX.2
* conforming systems).
*/
#$d_regcomp HAS_REGCOMP /* POSIX.2 */
@@ -1491,6 +1491,10 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
/* HASATTRIBUTE_WARN_UNUSED_RESULT:
* Can we handle GCC attribute for warning on unused results
*/
+/* HASATTRIBUTE_ALWAYS_INLINE:
+ * Can we handle GCC attribute for functions that should always be
+ * inlined.
+ */
#$d_attribute_deprecated HASATTRIBUTE_DEPRECATED /**/
#$d_attribute_format HASATTRIBUTE_FORMAT /**/
#$d_printf_format_null PRINTF_FORMAT_NULL_OK /**/
@@ -1500,6 +1504,7 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
#$d_attribute_pure HASATTRIBUTE_PURE /**/
#$d_attribute_unused HASATTRIBUTE_UNUSED /**/
#$d_attribute_warn_unused_result HASATTRIBUTE_WARN_UNUSED_RESULT /**/
+#$d_attribute_always_inline HASATTRIBUTE_ALWAYS_INLINE /**/
/* HAS_BACKTRACE:
* This symbol, if defined, indicates that the backtrace() routine is
@@ -1939,6 +1944,10 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
* This symbol, if defined, indicates the availability of
* struct sockaddr_in6;
*/
+/* HAS_SOCKADDR_STORAGE:
+ * This symbol, if defined, indicates the availability of
+ * struct sockaddr_storage;
+ */
/* HAS_SIN6_SCOPE_ID:
* This symbol, if defined, indicates that the struct sockaddr_in6
* structure has a member called sin6_scope_id.
@@ -1963,6 +1972,7 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
#$d_sockpair HAS_SOCKETPAIR /**/
#$d_sockaddr_sa_len HAS_SOCKADDR_SA_LEN /**/
#$d_sockaddr_in6 HAS_SOCKADDR_IN6 /**/
+#$d_sockaddr_storage HAS_SOCKADDR_STORAGE /**/
#$d_sin6_scope_id HAS_SIN6_SCOPE_ID /**/
#$d_ip_mreq HAS_IP_MREQ /**/
#$d_ip_mreq_source HAS_IP_MREQ_SOURCE /**/
@@ -4231,11 +4241,11 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
#$use64bitall USE_64_BIT_ALL /**/
#endif
-/* USE_CBACKTRACE:
+/* USE_C_BACKTRACE:
* This symbol, if defined, indicates that Perl should
* be built with support for backtrace.
*/
-#$usecbacktrace USE_CBACKTRACE /**/
+#$usecbacktrace USE_C_BACKTRACE /**/
/* USE_DTRACE:
* This symbol, if defined, indicates that Perl should
@@ -5122,6 +5132,12 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
#$d_ttyname_r HAS_TTYNAME_R /**/
#define TTYNAME_R_PROTO $ttyname_r_proto /**/
+/* HAS_WCRTOMB:
+ * This symbol, if defined, indicates that the wcrtomb routine is
+ * available to convert a wide character into a multi-byte character.
+ */
+#$d_wcrtomb HAS_WCRTOMB /**/
+
/* I_MACH_CTHREADS:
* This symbol, if defined, indicates to the C program that it should
* include <mach/cthreads.h>.
diff --git a/gnu/usr.bin/perl/configpm b/gnu/usr.bin/perl/configpm
index ad22cc0fdd5..8c4bd14ffcf 100644
--- a/gnu/usr.bin/perl/configpm
+++ b/gnu/usr.bin/perl/configpm
@@ -860,6 +860,8 @@ open(CONFIG_POD, '>', $Config_POD) or die "Can't open $Config_POD: $!";
print CONFIG_POD <<'ENDOFTAIL';
=head1 NAME
+=for comment Generated by configpm. Any changes made here will be lost!
+
Config - access Perl configuration information
=head1 SYNOPSIS
@@ -1023,16 +1025,12 @@ sub process {
print CONFIG_POD <<EOF if $text;
=back
-=cut
-
EOF
print CONFIG_POD <<EOF;
=head2 $c
=over 4
-=cut
-
EOF
$text = 1;
}
@@ -1130,18 +1128,6 @@ my $orig_heavy_txt = "";
}
if ($orig_config_txt ne $config_txt or $orig_heavy_txt ne $heavy_txt) {
- # During the build don't look in /usr/local for libs or includes
- # but after, we want to let modules look there.
- my $install_heavy_txt = $heavy_txt;
- $install_heavy_txt =~ s,^(ccflags|cppflags)[^=]*='[^']+,$& -I/usr/local/include,gm;
- $install_heavy_txt =~ s,^(ldflags|lddlflags)[^=]*='[^']+,$& -L/usr/local/lib,gm;
-
- open INSTALL_CONFIG_HEAVY, ">", "$Config_heavy.install"
- or die "Can't open install $Config_heavy: $!\n";
- print INSTALL_CONFIG_HEAVY $install_heavy_txt;
- close INSTALL_CONFIG_HEAVY;
- print "updated install $Config_heavy\n";
-
open CONFIG, ">", $Config_PM or die "Can't open $Config_PM: $!\n";
open CONFIG_HEAVY, ">", $Config_heavy or die "Can't open $Config_heavy: $!\n";
print CONFIG $config_txt;
diff --git a/gnu/usr.bin/perl/configure.com b/gnu/usr.bin/perl/configure.com
index 1f3e73c681f..713e875d336 100644
--- a/gnu/usr.bin/perl/configure.com
+++ b/gnu/usr.bin/perl/configure.com
@@ -49,7 +49,7 @@ $ unlink_all_versions = "n"
$ builder = "MMK"
$ use_vmsdebug_perl = "n"
$ use64bitall = "n"
-$ use64bitint = "n"
+$ use64bitint = "y"
$ uselongdouble = "n"
$ uselargefiles = "y"
$ usestdstat = "n"
@@ -3373,7 +3373,6 @@ $ d_fp_classify = "define"
$ d_hypot = "define"
$ d_ilogb = "define"
$ d_isnan = "define"
-$ d_isnanl = "define"
$ d_isnormal = "define"
$ d_j0 = "define"
$ d_lgamma = "define"
@@ -3384,7 +3383,6 @@ $ d_lrint = "define"
$ d_lrintl = "define"
$ d_lround = "define"
$ d_lroundl = "define"
-$ d_nearbyint = "define"
$ d_nextafter = "define"
$ d_nexttoward = "define"
$ d_remainder = "define"
@@ -3417,7 +3415,6 @@ $ d_fp_classify = "undef"
$ d_hypot = "undef"
$ d_ilogb = "undef"
$ d_isnan = "undef"
-$ d_isnanl = "undef"
$ d_isnormal = "undef"
$ d_j0 = "undef"
$ d_lgamma = "undef"
@@ -3428,7 +3425,6 @@ $ d_lrint = "undef"
$ d_lrintl = "undef"
$ d_lround = "undef"
$ d_lroundl = "undef"
-$ d_nearbyint = "undef"
$ d_nextafter = "undef"
$ d_nexttoward = "undef"
$ d_remainder = "undef"
@@ -3898,6 +3894,12 @@ $ d_fd_set="define"
$ echo4 "Well, your system knows about the normal fd_set typedef..."
$ ENDIF
$!
+$! Check for stdint.h
+$!
+$ tmp = "stdint.h"
+$ GOSUB inhdr
+$ i_stdint = tmp
+$!
$! Check for inttypes.h
$!
$ tmp = "inttypes.h"
@@ -3933,6 +3935,23 @@ $ d_off64_t = "undef"
$ echo "You do not have off64_t."
$ ENDIF
$!
+$! Check to see if fpclassify exists
+$!
+$ OS
+$ WS "#if defined(__DECC) || defined(__DECCXX)"
+$ WS "#include <stdlib.h>"
+$ WS "#endif"
+$ WS "#include <math.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS "if (fpclassify(0.0) == FP_ZERO) exit(0);"
+$ WS "exit(1);"
+$ WS "}"
+$ CS
+$ tmp = "fpclassify"
+$ GOSUB inlibc
+$ d_fpclassify = tmp
+$!
$! Check to see if fpos64_t exists
$!
$ echo4 "Checking to see if you have fpos64_t..."
@@ -4222,6 +4241,170 @@ $ echo4 "Nope, since you don't even have fcntl()."
$ ENDIF
$ d_fcntl_can_lock = tmp
$!
+$! Check to see if isblank exists
+$!
+$ OS
+$ WS "#include <stdlib.h>"
+$ WS "#include <ctype.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS "int c = ' ';"
+$ WS "if(isblank(c))"
+$ WS " exit(EXIT_SUCCESS);"
+$ WS "else"
+$ WS " exit(EXIT_FAILURE);"
+$ WS "}"
+$ CS
+$ tmp = "isblank"
+$ GOSUB inlibc
+$ d_isblank = tmp
+$!
+$! Check to see if isless exists
+$!
+$ OS
+$ WS "#include <stdlib.h>"
+$ WS "#include <math.h>"
+$ WS "int main() { return isless(1.0, 2.0) ? EXIT_SUCCESS : EXIT_FAILURE; }"
+$ CS
+$ tmp = "isless"
+$ GOSUB inlibc
+$ d_isless = tmp
+$!
+$! Check to see if pre-C99 isnanl exists
+$!
+$ OS
+$ WS "#include <stdlib.h>"
+$ WS "#include <math.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS " long double x = NaN;
+$ WS " return isnanl(x) ? EXIT_SUCCESS : EXIT_FAILURE;
+$ WS "}"
+$ CS
+$ tmp = "isnanl"
+$ GOSUB inlibc
+$ d_isnanl = tmp
+$!
+$! Check to see if llrint exists
+$!
+$ OS
+$ WS "#include <stdlib.h>"
+$ WS "#include <math.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS " long long x = llrint(1.5);
+$ WS " return x == 2 ? EXIT_SUCCESS : EXIT_FAILURE;
+$ WS "}"
+$ CS
+$ tmp = "llrint"
+$ GOSUB inlibc
+$ d_llrint = tmp
+$!
+$! Check to see if llrintl exists
+$!
+$ OS
+$ WS "#include <stdlib.h>"
+$ WS "#include <math.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS " long long x = llrintl(1.5);
+$ WS " return x == 2 ? EXIT_SUCCESS : EXIT_FAILURE;
+$ WS "}"
+$ CS
+$ tmp = "llrintl"
+$ GOSUB inlibc
+$ d_llrintl = tmp
+$!
+$! Check to see if llround exists
+$!
+$ OS
+$ WS "#include <stdlib.h>"
+$ WS "#include <math.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS " long long x = llround(1.5);
+$ WS " return x == 2 ? EXIT_SUCCESS : EXIT_FAILURE;
+$ WS "}"
+$ CS
+$ tmp = "llround"
+$ GOSUB inlibc
+$ d_llround = tmp
+$!
+$! Check to see if llroundl exists
+$!
+$ OS
+$ WS "#include <stdlib.h>"
+$ WS "#include <math.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS " long long x = llroundl(1.5);
+$ WS " return x == 2 ? EXIT_SUCCESS : EXIT_FAILURE;
+$ WS "}"
+$ CS
+$ tmp = "llroundl"
+$ GOSUB inlibc
+$ d_llroundl = tmp
+$!
+$! Check to see if nearbyint exists
+$!
+$ OS
+$ WS "#include <stdlib.h>"
+$ WS "#include <math.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS " double x = llroundl(1.5);
+$ WS " return x == 2.0 ? EXIT_SUCCESS : EXIT_FAILURE;
+$ WS "}"
+$ CS
+$ tmp = "nearbyint"
+$ GOSUB inlibc
+$ d_nearbyint = tmp
+$!
+$! Check to see if round exists
+$!
+$ OS
+$ WS "#include <stdlib.h>"
+$ WS "#include <math.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS " double x = round(1.5);
+$ WS " return x == 2.0 ? EXIT_SUCCESS : EXIT_FAILURE;
+$ WS "}"
+$ CS
+$ tmp = "round"
+$ GOSUB inlibc
+$ d_round = tmp
+$!
+$! Check to see if scalbn exists
+$!
+$ OS
+$ WS "#include <stdlib.h>"
+$ WS "#include <math.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS " double x = scalbn(1.0, 3);
+$ WS " return x == 8.0 ? EXIT_SUCCESS : EXIT_FAILURE;
+$ WS "}"
+$ CS
+$ tmp = "scalbn"
+$ GOSUB inlibc
+$ d_scalbn = tmp
+$!
+$! Check to see if scalbnl exists
+$!
+$ OS
+$ WS "#include <stdlib.h>"
+$ WS "#include <math.h>"
+$ WS "int main()"
+$ WS "{"
+$ WS " long double x = scalbn(1.0, 3);
+$ WS " return x == 8.0 ? EXIT_SUCCESS : EXIT_FAILURE;
+$ WS "}"
+$ CS
+$ tmp = "scalbnl"
+$ GOSUB inlibc
+$ d_scalbnl = tmp
+$!
$! Check for memrchr
$!
$ OS
@@ -4340,7 +4523,7 @@ $ WS "#include <string.h>"
$ WS "int main()"
$ WS "{"
$ WS "long double result;"
-$ WS "result = strtold(""123123"", NULL, 10);"
+$ WS "result = strtold(""123123"", NULL);"
$ WS "exit(0);"
$ WS "}"
$ CS
@@ -5941,6 +6124,7 @@ $ WC "d_asinh='" + d_asinh + "'"
$ WC "d_atanh='" + d_atanh + "'"
$ WC "d_atolf='" + d_atolf + "'"
$ WC "d_atoll='" + d_atoll + "'"
+$ WC "d_attribute_always_inline='undef'"
$ WC "d_attribute_format='" + d_attribut + "'"
$ WC "d_attribute_deprecated='undef'"
$ WC "d_attribute_malloc='undef'"
@@ -6061,7 +6245,7 @@ $ WC "d_fp_classify='undef'"
$ WC "d_fp_classl='undef'"
$ WC "d_fpathconf='" + d_fpathconf + "'"
$ WC "d_fpclass='undef'"
-$ WC "d_fpclassify='undef'"
+$ WC "d_fpclassify='" + d_fpclassify + "'"
$ WC "d_fpclassl='undef'"
$ WC "d_fpgetround='undef'"
$ WC "d_fpos64_t='" + d_fpos64_t + "'"
@@ -6134,12 +6318,12 @@ $ WC "d_ip_mreq_source='undef'"
$ WC "d_ipv6_mreq='define'"
$ WC "d_ipv6_mreq_source='undef'"
$ WC "d_isascii='define'"
-$ WC "d_isblank='undef'"
+$ WC "d_isblank='" + d_isblank + "'"
$ WC "d_isfinite='undef'"
$ WC "d_isfinitel='undef'"
$ WC "d_isinf='undef'"
$ WC "d_isinfl='undef'"
-$ WC "d_isless='undef'"
+$ WC "d_isless='" + d_isless + "'"
$ WC "d_isnan='" + d_isnan + "'"
$ WC "d_isnanl='" + d_isnanl + "'"
$ WC "d_isnormal='" + d_isnormal + "'"
@@ -6152,10 +6336,10 @@ $ WC "d_ldexpl='" + d_ldexpl + "'"
$ WC "d_lgamma='" + d_lgamma + "'"
$ WC "d_libm_lib_version='undef'"
$ WC "d_link='" + d_link + "'"
-$ WC "d_llrint='undef'"
-$ WC "d_llrintl='undef'"
-$ WC "d_llround='undef'"
-$ WC "d_llroundl='undef'"
+$ WC "d_llrint='" + d_llrint + "'"
+$ WC "d_llrintl='" + d_llrintl + "'"
+$ WC "d_llround='" + d_llround + "'"
+$ WC "d_llroundl='" + d_llroundl + "'"
$ WC "d_llseek='undef'"
$ WC "d_localeconv_l='undef'"
$ WC "d_localtime64='undef'"
@@ -6220,7 +6404,7 @@ $ WC "d_nan='undef'"
$ WC "d_nanosleep='" + d_nanosleep + "'"
$ WC "d_ndbm='undef'"
$ WC "d_ndbm_h_uses_prototypes='undef'"
-$ WC "d_nearbyint='undef'"
+$ WC "d_nearbyint='" + d_nearbyint + "'"
$ WC "d_nextafter='" + d_nextafter + "'"
$ WC "d_nexttoward='" + d_nexttoward + "'"
$ WC "d_nice='define'"
@@ -6279,10 +6463,10 @@ $ WC "d_rename='define'"
$ WC "d_rewinddir='define'"
$ WC "d_rint='" + d_rint + "'"
$ WC "d_rmdir='define'"
-$ WC "d_round='undef'"
+$ WC "d_round='" + d_round + "'"
$ WC "d_sbrkproto='define'"
-$ WC "d_scalbn='undef'"
-$ WC "d_scalbnl='undef'"
+$ WC "d_scalbn='" + d_scalbn + "'"
+$ WC "d_scalbnl='" + d_scalbnl + "'"
$ WC "d_sched_yield='" + d_sched_yield + "'"
$ WC "d_scm_rights='undef'"
$ WC "d_seekdir='define'"
@@ -6353,6 +6537,7 @@ $ WC "d_sin6_scope_id='" + d_sin6_scope_id + "'"
$ WC "d_sitearch='define'"
$ WC "d_sockaddr_in6='define'"
$ WC "d_sockaddr_sa_len='" + d_sockaddr_sa_len + "'"
+$ WC "d_sockaddr_storage='undef'"
$ WC "d_sockatmark='undef'"
$ WC "d_sockatmarkproto='undef'"
$ WC "d_socket='" + d_socket + "'"
@@ -6450,6 +6635,7 @@ $ WC "d_voidtty='" + "'"
$ WC "d_vsnprintf='" + d_vsnprintf + "'"
$ WC "d_wait4='" + d_wait4 + "'"
$ WC "d_waitpid='define'"
+$ WC "d_wcrtomb='define'"
$ WC "d_wcscmp='define'"
$ WC "d_wcstombs='define'"
$ WC "d_wcsxfrm='define'"
@@ -6562,7 +6748,7 @@ $ WC "i_stdbool='define'"
$ ELSE
$ WC "i_stdbool='undef'"
$ ENDIF
-$ WC "i_stdint='undef'"
+$ WC "i_stdint='" + i_stdint + "'"
$ WC "i_stdlib='define'"
$ WC "i_sunmath='undef'"
$ WC "i_sysaccess='" + i_sysaccess + "'"
diff --git a/gnu/usr.bin/perl/cop.h b/gnu/usr.bin/perl/cop.h
index 29e6bfed8e0..e16875ad2cf 100644
--- a/gnu/usr.bin/perl/cop.h
+++ b/gnu/usr.bin/perl/cop.h
@@ -76,30 +76,31 @@ typedef struct jmpenv JMPENV;
/*
* PERL_FLEXIBLE_EXCEPTIONS
- *
+ *
* All the flexible exceptions code has been removed.
* See the following threads for details:
*
- * http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2004-07/msg00378.html
- *
+ * Message-Id: 20040713143217.GB1424@plum.flirble.org
+ * https://www.nntp.perl.org/group/perl.perl5.porters/2004/07/msg93041.html
+ *
* Joshua's original patches (which weren't applied) and discussion:
- *
+ *
* http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01396.html
* http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01489.html
* http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01491.html
* http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg01608.html
* http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg02144.html
* http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg02998.html
- *
+ *
* Chip's reworked patch and discussion:
- *
+ *
* http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1999-03/msg00520.html
- *
+ *
* The flaw in these patches (which went unnoticed at the time) was
* that they moved some code that could potentially die() out of the
* region protected by the setjmp()s. This caused exceptions within
* END blocks and such to not be handled by the correct setjmp().
- *
+ *
* The original patches that introduces flexible exceptions were:
*
* https://github.com/Perl/perl5/commit/312caa8e97f1c7ee342a9895c2f0e749625b4929
@@ -183,6 +184,8 @@ it has not been precomputed. Returns a mortal scalar copy of the value
associated with the key, or C<&PL_sv_placeholder> if there is no value
associated with the key.
+=for apidoc Amnh||COPHH_KEY_UTF8
+
=cut
*/
@@ -190,7 +193,7 @@ associated with the key.
Perl_refcounted_he_fetch_pvn(aTHX_ cophh, keypv, keylen, hash, flags)
/*
-=for apidoc Amx|SV *|cophh_fetch_pvs|const COPHH *cophh|"literal string" key|U32 flags
+=for apidoc Amx|SV *|cophh_fetch_pvs|const COPHH *cophh|"key"|U32 flags
Like L</cophh_fetch_pvn>, but takes a literal string instead
of a string/length pair, and no precomputed hash.
@@ -296,7 +299,7 @@ be stored with referential integrity, but will be coerced to strings.
Perl_refcounted_he_new_pvn(aTHX_ cophh, keypv, keylen, hash, value, flags)
/*
-=for apidoc Amx|COPHH *|cophh_store_pvs|const COPHH *cophh|"literal string" key|SV *value|U32 flags
+=for apidoc Amx|COPHH *|cophh_store_pvs|const 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.
@@ -353,7 +356,7 @@ hash of the key string, or zero if it has not been precomputed.
(SV *)NULL, flags)
/*
-=for apidoc Amx|COPHH *|cophh_delete_pvs|const COPHH *cophh|"literal string" key|U32 flags
+=for apidoc Amx|COPHH *|cophh_delete_pvs|const 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.
@@ -412,13 +415,19 @@ struct cop {
/* compile time state of %^H. See the comment in op.c for how this is
used to recreate a hash to return from caller. */
COPHH * cop_hints_hash;
+ /* for now just a bitmask stored here.
+ If we get sufficient features this may become a pointer.
+ How these flags are stored is subject to change without
+ notice. Use the macros to test for features.
+ */
+ U32 cop_features;
};
#ifdef USE_ITHREADS
# define CopFILE(c) ((c)->cop_file)
# define CopFILEGV(c) (CopFILE(c) \
? gv_fetchfile(CopFILE(c)) : NULL)
-
+
# ifdef NETWARE
# define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv))
# define CopFILE_setn(c,pv,l) ((c)->cop_file = savepvn((pv),(l)))
@@ -493,7 +502,7 @@ associated with the key.
cophh_fetch_pvn(CopHINTHASH_get(cop), keypv, keylen, hash, flags)
/*
-=for apidoc Am|SV *|cop_hints_fetch_pvs|const COP *cop|"literal string" key|U32 flags
+=for apidoc Am|SV *|cop_hints_fetch_pvs|const COP *cop|"key"|U32 flags
Like L</cop_hints_fetch_pvn>, but takes a literal string
instead of a string/length pair, and no precomputed hash.
@@ -541,6 +550,24 @@ be zero.
#define cop_hints_2hv(cop, flags) \
cophh_2hv(CopHINTHASH_get(cop), flags)
+/*
+=for apidoc Am|const char *|CopLABEL|COP *const cop
+
+Returns the label attached to a cop.
+
+=for apidoc Am|const char *|CopLABEL_len|COP *const cop|STRLEN *len
+
+Returns the label attached to a cop, and stores its length in bytes into
+C<*len>.
+
+=for apidoc Am|const char *|CopLABEL_len_flags|COP *const cop|STRLEN *len|U32 *flags
+
+Returns the label attached to a cop, and stores its length in bytes into
+C<*len>. Upon return, C<*flags> will be set to either C<SVf_UTF8> or 0.
+
+=cut
+*/
+
#define CopLABEL(c) Perl_cop_fetch_label(aTHX_ (c), NULL, NULL)
#define CopLABEL_len(c,len) Perl_cop_fetch_label(aTHX_ (c), len, NULL)
#define CopLABEL_len_flags(c,len,flags) Perl_cop_fetch_label(aTHX_ (c), len, flags)
@@ -567,6 +594,7 @@ be zero.
/* subroutine context */
struct block_sub {
OP * retop; /* op to execute on exit from sub */
+ I32 old_cxsubix; /* previous value of si_cxsubix */
/* Above here is the same for sub, format and eval. */
PAD *prevcomppad; /* the caller's PL_comppad */
CV * cv;
@@ -579,6 +607,7 @@ struct block_sub {
/* format context */
struct block_format {
OP * retop; /* op to execute on exit from sub */
+ I32 old_cxsubix; /* previous value of si_cxsubix */
/* Above here is the same for sub, format and eval. */
PAD *prevcomppad; /* the caller's PL_comppad */
CV * cv;
@@ -645,6 +674,7 @@ struct block_format {
/* eval context */
struct block_eval {
OP * retop; /* op to execute on exit from eval */
+ I32 old_cxsubix; /* previous value of si_cxsubix */
/* Above here is the same for sub, format and eval. */
SV * old_namesv;
OP * old_eval_root;
@@ -917,32 +947,32 @@ struct context {
#define CXINC (cxstack_ix < cxstack_max ? ++cxstack_ix : (cxstack_ix = cxinc()))
-/*
+/*
=head1 "Gimme" Values
*/
/*
-=for apidoc AmU||G_SCALAR
+=for apidoc AmnU||G_SCALAR
Used to indicate scalar context. See C<L</GIMME_V>>, C<L</GIMME>>, and
L<perlcall>.
-=for apidoc AmU||G_ARRAY
+=for apidoc AmnU||G_ARRAY
Used to indicate list context. See C<L</GIMME_V>>, C<L</GIMME>> and
L<perlcall>.
-=for apidoc AmU||G_VOID
+=for apidoc AmnU||G_VOID
Used to indicate void context. See C<L</GIMME_V>> and L<perlcall>.
-=for apidoc AmU||G_DISCARD
+=for apidoc AmnU||G_DISCARD
Indicates that arguments returned from a callback should be discarded. See
L<perlcall>.
-=for apidoc AmU||G_EVAL
+=for apidoc AmnU||G_EVAL
Used to force a Perl C<eval> wrapper around a callback. See
L<perlcall>.
-=for apidoc AmU||G_NOARGS
+=for apidoc AmnU||G_NOARGS
Indicates that no arguments are being sent to a callback. See
L<perlcall>.
@@ -956,23 +986,24 @@ L<perlcall>.
#define G_WANT 3
/* extra flags for Perl_call_* routines */
-#define G_DISCARD 4 /* Call FREETMPS.
+#define G_DISCARD 0x4 /* Call FREETMPS.
Don't change this without consulting the
hash actions codes defined in hv.h */
-#define G_EVAL 8 /* Assume eval {} around subroutine call. */
-#define G_NOARGS 16 /* Don't construct a @_ array. */
-#define G_KEEPERR 32 /* Warn for errors, don't overwrite $@ */
-#define G_NODEBUG 64 /* Disable debugging at toplevel. */
-#define G_METHOD 128 /* Calling method. */
-#define G_FAKINGEVAL 256 /* Faking an eval context for call_sv or
+#define G_EVAL 0x8 /* Assume eval {} around subroutine call. */
+#define G_NOARGS 0x10 /* Don't construct a @_ array. */
+#define G_KEEPERR 0x20 /* Warn for errors, don't overwrite $@ */
+#define G_NODEBUG 0x40 /* Disable debugging at toplevel. */
+#define G_METHOD 0x80 /* Calling method. */
+#define G_FAKINGEVAL 0x100 /* Faking an eval context for call_sv or
fold_constants. */
-#define G_UNDEF_FILL 512 /* Fill the stack with &PL_sv_undef
+#define G_UNDEF_FILL 0x200 /* Fill the stack with &PL_sv_undef
A special case for UNSHIFT in
Perl_magic_methcall(). */
-#define G_WRITING_TO_STDERR 1024 /* Perl_write_to_stderr() is calling
+#define G_WRITING_TO_STDERR 0x400 /* Perl_write_to_stderr() is calling
Perl_magic_methcall(). */
-#define G_RE_REPARSING 0x800 /* compiling a run-time /(?{..})/ */
-#define G_METHOD_NAMED 4096 /* calling named method, eg without :: or ' */
+#define G_RE_REPARSING 0x800 /* compiling a run-time /(?{..})/ */
+#define G_METHOD_NAMED 0x1000 /* calling named method, eg without :: or ' */
+#define G_RETHROW 0x2000 /* eval_sv(): re-throw any error */
/* flag bits for PL_in_eval */
#define EVAL_NULL 0 /* not in an eval */
@@ -985,6 +1016,8 @@ L<perlcall>.
/* Support for switching (stack and block) contexts.
* This ensures magic doesn't invalidate local stack and cx pointers.
+ * Which one to use (or add) is mostly, but not completely arbitrary: See
+ * http://nntp.perl.org/group/perl.perl5.porters/257169
*/
#define PERLSI_UNKNOWN -1
@@ -999,6 +1032,7 @@ L<perlcall>.
#define PERLSI_DIEHOOK 8
#define PERLSI_REQUIRE 9
#define PERLSI_MULTICALL 10
+#define PERLSI_REGCOMP 11
struct stackinfo {
AV * si_stack; /* stack for current runlevel */
@@ -1007,6 +1041,7 @@ struct stackinfo {
struct stackinfo * si_next;
I32 si_cxix; /* current context index */
I32 si_cxmax; /* maximum allocated index */
+ I32 si_cxsubix; /* topmost sub/eval/format */
I32 si_type; /* type of runlevel */
I32 si_markoff; /* offset where markstack begins for us.
* currently used only with DEBUGGING,
@@ -1053,6 +1088,7 @@ typedef struct stackinfo PERL_SI;
} \
next->si_type = type; \
next->si_cxix = -1; \
+ next->si_cxsubix = -1; \
PUSHSTACK_INIT_HWM(next); \
AvFILLp(next->si_stack) = 0; \
SWITCHSTACK(PL_curstack,next->si_stack); \
@@ -1098,17 +1134,17 @@ typedef struct stackinfo PERL_SI;
/*
=head1 Multicall Functions
-=for apidoc Ams||dMULTICALL
+=for apidoc Amns||dMULTICALL
Declare local variables for a multicall. See L<perlcall/LIGHTWEIGHT CALLBACKS>.
-=for apidoc Ams||PUSH_MULTICALL
+=for apidoc Ams||PUSH_MULTICALL|CV* the_cv
Opening bracket for a lightweight callback.
See L<perlcall/LIGHTWEIGHT CALLBACKS>.
-=for apidoc Ams||MULTICALL
+=for apidoc Amns||MULTICALL
Make a lightweight callback. See L<perlcall/LIGHTWEIGHT CALLBACKS>.
-=for apidoc Ams||POP_MULTICALL
+=for apidoc Amns||POP_MULTICALL
Closing bracket for a lightweight callback.
See L<perlcall/LIGHTWEIGHT CALLBACKS>.
diff --git a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar.pm b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar.pm
index 093579a6c29..af6786ee519 100644
--- a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar.pm
+++ b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar.pm
@@ -27,11 +27,11 @@ use vars qw[$DEBUG $error $VERSION $WARN $FOLLOW_SYMLINK $CHOWN $CHMOD
];
@ISA = qw[Exporter];
-@EXPORT = qw[ COMPRESS_GZIP COMPRESS_BZIP ];
+@EXPORT = qw[ COMPRESS_GZIP COMPRESS_BZIP COMPRESS_XZ ];
$DEBUG = 0;
$WARN = 1;
$FOLLOW_SYMLINK = 0;
-$VERSION = "2.32";
+$VERSION = "2.36";
$CHOWN = 1;
$CHMOD = 1;
$SAME_PERMISSIONS = $> == 0 ? 1 : 0;
@@ -76,6 +76,7 @@ Archive::Tar - module for manipulations of tar archives
$tar->write('files.tar'); # plain tar
$tar->write('files.tgz', COMPRESS_GZIP); # gzip compressed
$tar->write('files.tbz', COMPRESS_BZIP); # bzip2 compressed
+ $tar->write('files.txz', COMPRESS_XZ); # xz compressed
=head1 DESCRIPTION
@@ -147,12 +148,13 @@ backwards compatibility. Archive::Tar now looks at the file
magic to determine what class should be used to open the file
and will transparently Do The Right Thing.
-Archive::Tar will warn if you try to pass a bzip2 compressed file and the
-IO::Zlib / IO::Uncompress::Bunzip2 modules are not available and simply return.
+Archive::Tar will warn if you try to pass a bzip2 / xz compressed file and the
+IO::Uncompress::Bunzip2 / IO::Uncompress::UnXz are not available and simply return.
Note that you can currently B<not> pass a C<gzip> compressed
filehandle, which is not opened with C<IO::Zlib>, a C<bzip2> compressed
-filehandle, which is not opened with C<IO::Uncompress::Bunzip2>, nor a string
+filehandle, which is not opened with C<IO::Uncompress::Bunzip2>, a C<xz> compressed
+filehandle, which is not opened with C<IO::Uncompress::UnXz>, nor a string
containing the full archive information (either compressed or
uncompressed). These are worth while features, but not currently
implemented. See the C<TODO> section.
@@ -246,16 +248,40 @@ sub _get_handle {
return;
};
- ### read the first 4 bites of the file to figure out which class to
+ ### read the first 6 bytes of the file to figure out which class to
### use to open the file.
- sysread( $tmp, $magic, 4 );
+ sysread( $tmp, $magic, 6 );
close $tmp;
}
+ ### is it xz?
+ ### if you asked specifically for xz compression, or if we're in
+ ### read mode and the magic numbers add up, use xz
+ if( XZ and (
+ ($compress eq COMPRESS_XZ) or
+ ( MODE_READ->($mode) and $magic =~ XZ_MAGIC_NUM )
+ )
+ ) {
+ if( MODE_READ->($mode) ) {
+ $fh = IO::Uncompress::UnXz->new( $file ) or do {
+ $self->_error( qq[Could not read '$file': ] .
+ $IO::Uncompress::UnXz::UnXzError
+ );
+ return;
+ };
+ } else {
+ $fh = IO::Compress::Xz->new( $file ) or do {
+ $self->_error( qq[Could not write to '$file': ] .
+ $IO::Compress::Xz::XzError
+ );
+ return;
+ };
+ }
+
### is it bzip?
### if you asked specifically for bzip compression, or if we're in
### read mode and the magic numbers add up, use bzip
- if( BZIP and (
+ } elsif( BZIP and (
($compress eq COMPRESS_BZIP) or
( MODE_READ->($mode) and $magic =~ BZIP_MAGIC_NUM )
)
@@ -1246,8 +1272,8 @@ Write the in-memory archive to disk. The first argument can either
be the name of a file or a reference to an already open filehandle (a
GLOB reference).
-The second argument is used to indicate compression. You can either
-compress using C<gzip> or C<bzip2>. If you pass a digit, it's assumed
+The second argument is used to indicate compression. You can
+compress using C<gzip>, C<bzip2> or C<xz>. If you pass a digit, it's assumed
to be the C<gzip> compression level (between 1 and 9), but the use of
constants is preferred:
@@ -1257,10 +1283,13 @@ constants is preferred:
# write a bzip compressed file
$tar->write( 'out.tbz', COMPRESS_BZIP );
+ # write a xz compressed file
+ $tar->write( 'out.txz', COMPRESS_XZ );
+
Note that when you pass in a filehandle, the compression argument
is ignored, as all files are printed verbatim to your filehandle.
If you wish to enable compression with filehandles, use an
-C<IO::Zlib> or C<IO::Compress::Bzip2> filehandle instead.
+C<IO::Zlib>, C<IO::Compress::Bzip2> or C<IO::Compress::Xz> filehandle instead.
The third argument is an optional prefix. All files will be tucked
away in the directory you specify as prefix. So if you have files
@@ -1696,8 +1725,8 @@ Creates a tar file from the list of files provided. The first
argument can either be the name of the tar file to create or a
reference to an open file handle (e.g. a GLOB reference).
-The second argument is used to indicate compression. You can either
-compress using C<gzip> or C<bzip2>. If you pass a digit, it's assumed
+The second argument is used to indicate compression. You can
+compress using C<gzip>, C<bzip2> or C<xz>. If you pass a digit, it's assumed
to be the C<gzip> compression level (between 1 and 9), but the use of
constants is preferred:
@@ -1707,10 +1736,13 @@ constants is preferred:
# write a bzip compressed file
Archive::Tar->create_archive( 'out.tbz', COMPRESS_BZIP, @filelist );
+ # write a xz compressed file
+ Archive::Tar->create_archive( 'out.txz', COMPRESS_XZ, @filelist );
+
Note that when you pass in a filehandle, the compression argument
is ignored, as all files are printed verbatim to your filehandle.
If you wish to enable compression with filehandles, use an
-C<IO::Zlib> or C<IO::Compress::Bzip2> filehandle instead.
+C<IO::Zlib>, C<IO::Compress::Bzip2> or C<IO::Compress::Xz> filehandle instead.
The remaining arguments list the files to be included in the tar file.
These files must all exist. Any files which don't exist or can't be
@@ -1915,11 +1947,19 @@ Returns true if C<Archive::Tar> can extract C<bzip2> compressed archives
sub has_bzip2_support { return BZIP }
+=head2 $bool = Archive::Tar->has_xz_support
+
+Returns true if C<Archive::Tar> can extract C<xz> compressed archives
+
+=cut
+
+sub has_xz_support { return XZ }
+
=head2 Archive::Tar->can_handle_compressed_files
A simple checking routine, which will return true if C<Archive::Tar>
-is able to uncompress compressed archives on the fly with C<IO::Zlib>
-and C<IO::Compress::Bzip2> or false if not both are installed.
+is able to uncompress compressed archives on the fly with C<IO::Zlib>,
+C<IO::Compress::Bzip2> and C<IO::Compress::Xz> or false if not both are installed.
You can use this as a shortcut to determine whether C<Archive::Tar>
will do what you think before passing compressed archives to its
diff --git a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/Constant.pm b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/Constant.pm
index a48968d9e04..398c4799a5c 100644
--- a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/Constant.pm
+++ b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/Constant.pm
@@ -3,7 +3,7 @@ package Archive::Tar::Constant;
BEGIN {
require Exporter;
- $VERSION = '2.32';
+ $VERSION = '2.36';
@ISA = qw[Exporter];
require Time::Local if $^O eq "MacOS";
@@ -32,6 +32,7 @@ use constant BLOCK => 512;
use constant COMPRESS_GZIP => 9;
use constant COMPRESS_BZIP => 'bzip2';
+use constant COMPRESS_XZ => 'xz';
use constant BLOCK_SIZE => sub { my $n = int($_[0]/BLOCK); $n++ if $_[0] % BLOCK; $n * BLOCK };
use constant TAR_PAD => sub { my $x = shift || return; return "\0" x (BLOCK - ($x % BLOCK) ) };
@@ -58,7 +59,7 @@ use constant PACK => 'a100 a8 a8 a8 a12 a12 A8 a1 a100 a6 a2 a32 a32 a
use constant NAME_LENGTH => 100;
use constant PREFIX_LENGTH => 155;
-use constant TIME_OFFSET => ($^O eq "MacOS") ? Time::Local::timelocal(0,0,0,1,0,70) : 0;
+use constant TIME_OFFSET => ($^O eq "MacOS") ? Time::Local::timelocal(0,0,0,1,0,1970) : 0;
use constant MAGIC => "ustar";
use constant TAR_VERSION => "00";
use constant LONGLINK_NAME => '././@LongLink';
@@ -77,8 +78,16 @@ use constant BZIP => do { !$ENV{'PERL5_AT_NO_BZIP'} and
$ENV{'PERL5_AT_NO_BZIP'} || $@ ? 0 : 1
};
+ ### allow XZ to be turned off using ENV: DEBUG only
+use constant XZ => do { !$ENV{'PERL5_AT_NO_XZ'} and
+ eval { require IO::Compress::Xz;
+ require IO::Uncompress::UnXz; };
+ $ENV{'PERL5_AT_NO_XZ'} || $@ ? 0 : 1
+ };
+
use constant GZIP_MAGIC_NUM => qr/^(?:\037\213|\037\235)/;
use constant BZIP_MAGIC_NUM => qr/^BZh\d/;
+use constant XZ_MAGIC_NUM => qr/^\xFD\x37\x7A\x58\x5A\x00/;
use constant CAN_CHOWN => sub { ($> == 0 and $^O ne "MacOS" and $^O ne "MSWin32") };
use constant CAN_READLINK => ($^O ne 'MSWin32' and $^O !~ /RISC(?:[ _])?OS/i and $^O ne 'VMS');
diff --git a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/File.pm b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/File.pm
index 3efa3159d94..0887a923bd3 100644
--- a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/File.pm
+++ b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/File.pm
@@ -13,7 +13,7 @@ use Archive::Tar::Constant;
use vars qw[@ISA $VERSION];
#@ISA = qw[Archive::Tar];
-$VERSION = '2.32';
+$VERSION = '2.36';
### set value to 1 to oct() it during the unpack ###
diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/App/Cpan.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/App/Cpan.pm
index 80c3efec433..b563addf527 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/lib/App/Cpan.pm
+++ b/gnu/usr.bin/perl/cpan/CPAN/lib/App/Cpan.pm
@@ -6,7 +6,7 @@ use vars qw($VERSION);
use if $] < 5.008 => 'IO::Scalar';
-$VERSION = '1.672';
+$VERSION = '1.675';
=head1 NAME
@@ -414,13 +414,13 @@ sub _process_options
# if no arguments, just drop into the shell
if( 0 == @ARGV ) { CPAN::shell(); exit 0 }
- else
+ elsif (Getopt::Std::getopts(
+ join( '', @option_order ), \%options ))
{
- Getopt::Std::getopts(
- join( '', @option_order ), \%options );
\%options;
}
- }
+ else { exit 1 }
+}
sub _process_setup_options
{
@@ -431,8 +431,7 @@ sub _process_setup_options
$Method_table{j}[ $Method_table_index{code} ]->( $options->{j} );
delete $options->{j};
}
- else
- {
+ elsif ( ! $options->{h} ) { # h "ignores all of the other options and arguments"
# this is what CPAN.pm would do otherwise
local $CPAN::Be_Silent = 1;
CPAN::HandleConfig->load(
@@ -542,15 +541,23 @@ sub run
return $return_value;
}
+my $LEVEL;
{
package
Local::Null::Logger; # hide from PAUSE
+my @LOGLEVELS = qw(TRACE DEBUG INFO WARN ERROR FATAL);
+$LEVEL = uc($ENV{CPANSCRIPT_LOGLEVEL} || 'INFO');
+my %LL = map { $LOGLEVELS[$_] => $_ } 0..$#LOGLEVELS;
+unless (defined $LL{$LEVEL}){
+ warn "Unsupported loglevel '$LEVEL', setting to INFO";
+ $LEVEL = 'INFO';
+}
sub new { bless \ my $x, $_[0] }
sub AUTOLOAD {
my $autoload = our $AUTOLOAD;
$autoload =~ s/.*://;
- return if $autoload =~ /^(debug|trace)$/;
+ return if $LL{uc $autoload} < $LL{$LEVEL};
$CPAN::Frontend->mywarn(">($autoload): $_\n")
for split /[\r\n]+/, $_[1];
}
@@ -579,8 +586,6 @@ sub _init_logger
return $logger;
}
- my $LEVEL = $ENV{CPANSCRIPT_LOGLEVEL} || 'INFO';
-
Log::Log4perl::init( \ <<"HERE" );
log4perl.rootLogger=$LEVEL, A1
log4perl.appender.A1=Log::Log4perl::Appender::Screen
@@ -676,7 +681,7 @@ sub _hook_into_CPANpm_report
*CPAN::Shell::myprint = sub {
my($self,$what) = @_;
- $scalar .= $what;
+ $scalar .= $what if defined $what;
$self->print_ornamented($what,
$CPAN::Config->{colorize_print}||'bold blue on_white',
);
@@ -794,7 +799,14 @@ sub _turn_off_testing {
sub _print_help
{
$logger->info( "Use perldoc to read the documentation" );
- exec "perldoc $0";
+ my $HAVE_PERLDOC = eval { require Pod::Perldoc; 1; };
+ if ($HAVE_PERLDOC) {
+ system qq{"$^X" -e "require Pod::Perldoc; Pod::Perldoc->run()" $0};
+ exit;
+ } else {
+ warn "Please install Pod::Perldoc, maybe try 'cpan -i Pod::Perldoc'\n";
+ return HEY_IT_WORKED;
+ }
}
sub _print_version # -v
@@ -1698,3 +1710,10 @@ Copyright (c) 2001-2018, brian d foy, All Rights Reserved.
You may redistribute this under the same terms as Perl itself.
=cut
+
+# Local Variables:
+# mode: cperl
+# indent-tabs-mode: t
+# cperl-indent-level: 8
+# cperl-continued-statement-offset: 8
+# End:
diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN.pm
index 0c9b9f5b09f..2d87f47f8b9 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN.pm
+++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN.pm
@@ -2,7 +2,7 @@
# vim: ts=4 sts=4 sw=4:
use strict;
package CPAN;
-$CPAN::VERSION = '2.22';
+$CPAN::VERSION = '2.27';
$CPAN::VERSION =~ s/_//;
# we need to run chdir all over and we would get at wrong libraries
@@ -286,7 +286,10 @@ sub shell {
}
if (my $histfile = $CPAN::Config->{'histfile'}) {{
unless ($term->can("AddHistory")) {
- $CPAN::Frontend->mywarn("Terminal does not support AddHistory.\n\nTo fix enter> install Term::ReadLine::Perl\n\n");
+ $CPAN::Frontend->mywarn("Terminal does not support AddHistory.\n");
+ unless ($CPAN::META->has_inst('Term::ReadLine::Perl')) {
+ $CPAN::Frontend->mywarn("\nTo fix that, maybe try> install Term::ReadLine::Perl\n\n");
+ }
last;
}
$META->readhist($term,$histfile);
@@ -1028,7 +1031,10 @@ sub has_usable {
$usable = {
#
- # these subroutines die if they believe the installed version is unusable;
+ # most of these subroutines warn on the frontend, then
+ # die if the installed version is unusable for some
+ # reason; has_usable() then returns false when it caught
+ # an exception, otherwise returns true and caches that;
#
'CPAN::Meta' => [
sub {
@@ -1059,6 +1065,23 @@ sub has_usable {
},
],
+ 'CPAN::Reporter' => [
+ sub {
+ if (defined $CPAN::Reporter::VERSION
+ && CPAN::Version->vlt($CPAN::Reporter::VERSION, "1.2011")
+ ) {
+ delete $INC{"CPAN/Reporter.pm"};
+ }
+ require CPAN::Reporter;
+ unless (CPAN::Version->vge(CPAN::Reporter->VERSION, "1.2011")) {
+ for ("Will not use CPAN::Reporter, need version 1.2011\n") {
+ $CPAN::Frontend->mywarn($_);
+ die $_;
+ }
+ }
+ },
+ ],
+
LWP => [ # we frequently had "Can't locate object
# method "new" via package "LWP::UserAgent" at
# (eval 69) line 2006
@@ -1445,11 +1468,12 @@ sub set_perl5lib {
$ENV{PERL5LIB} = join $Config::Config{path_sep}, @dirs, @env;
} else {
my $cnt = keys %{$self->{is_tested}};
- $CPAN::Frontend->optprint('perl5lib', "Prepending blib/arch and blib/lib of ".
- "$cnt build dirs to PERL5LIB; ".
- "for '$for'\n"
+ my $newenv = join $Config::Config{path_sep}, @dirs, @env;
+ $CPAN::Frontend->optprint('perl5lib', sprintf ("Prepending blib/arch and blib/lib of ".
+ "%d build dirs to PERL5LIB, reaching size %d; ".
+ "for '%s'\n", $cnt, length($newenv), $for)
);
- $ENV{PERL5LIB} = join $Config::Config{path_sep}, @dirs, @env;
+ $ENV{PERL5LIB} = $newenv;
}
}}
@@ -2121,6 +2145,12 @@ where WORD is any valid config variable or a regular expression.
The following keys in the hash reference $CPAN::Config are
currently defined:
+ allow_installing_module_downgrades
+ allow or disallow installing module downgrades
+ allow_installing_outdated_dists
+ allow or disallow installing modules that are
+ indexed in the cpan index pointing to a distro
+ with a higher distro-version number
applypatch path to external prg
auto_commit commit all changes to config variables to disk
build_cache size of cache for directories to build modules
@@ -2134,7 +2164,8 @@ currently defined:
check_sigs if signatures should be verified
cleanup_after_install
remove build directory immediately after a
- successful install
+ successful install and remember that for the
+ duration of the session
colorize_debug Term::ANSIColor attributes for debugging output
colorize_output boolean if Term::ANSIColor should colorize output
colorize_print Term::ANSIColor attributes for normal output
@@ -2238,6 +2269,10 @@ currently defined:
CPAN::Reporter history)
unzip location of external program unzip
urllist arrayref to nearby CPAN sites (or equivalent locations)
+ urllist_ping_external
+ use external ping command when autoselecting mirrors
+ urllist_ping_verbose
+ increase verbosity when autoselecting mirrors
use_prompt_default set PERL_MM_USE_DEFAULT for configure/make/test/install
use_sqlite use CPAN::SQLite for metadata storage (fast and lean)
username your username if you CPAN server wants one
@@ -2378,11 +2413,48 @@ installed. It is only built and tested, and then kept in the list of
tested but uninstalled modules. As such, it is available during the
build of the dependent module by integrating the path to the
C<blib/arch> and C<blib/lib> directories in the environment variable
-PERL5LIB. If C<build_requires_install_policy> is set ti C<yes>, then
+PERL5LIB. If C<build_requires_install_policy> is set to C<yes>, then
both modules declared as C<requires> and those declared as
C<build_requires> are treated alike. By setting to C<ask/yes> or
C<ask/no>, CPAN.pm asks the user and sets the default accordingly.
+=head2 Configuration of the allow_installing_* parameters
+
+The C<allow_installing_*> parameters are evaluated during
+the C<make> phase. If set to C<yes>, they allow the testing and the installation of
+the current distro and otherwise have no effect. If set to C<no>, they
+may abort the build (preventing testing and installing), depending on the contents of the
+C<blib/> directory. The C<blib/> directory is the directory that holds
+all the files that would usually be installed in the C<install> phase.
+
+C<allow_installing_outdated_dists> compares the C<blib/> directory with the CPAN index.
+If it finds something there that belongs, according to the index, to a different
+dist, it aborts the current build.
+
+C<allow_installing_module_downgrades> compares the C<blib/> directory
+with already installed modules, actually their version numbers, as
+determined by ExtUtils::MakeMaker or equivalent. If a to-be-installed
+module would downgrade an already installed module, the current build
+is aborted.
+
+An interesting twist occurs when a distroprefs document demands the
+installation of an outdated dist via goto while
+C<allow_installing_outdated_dists> forbids it. Without additional
+provisions, this would let the C<allow_installing_outdated_dists>
+win and the distroprefs lose. So the proper arrangement in such a case
+is to write a second distroprefs document for the distro that C<goto>
+points to and overrule the C<cpanconfig> there. E.g.:
+
+ ---
+ match:
+ distribution: "^MAUKE/Keyword-Simple-0.04.tar.gz"
+ goto: "MAUKE/Keyword-Simple-0.03.tar.gz"
+ ---
+ match:
+ distribution: "^MAUKE/Keyword-Simple-0.03.tar.gz"
+ cpanconfig:
+ allow_installing_outdated_dists: yes
+
=head2 Configuration for individual distributions (I<Distroprefs>)
(B<Note:> This feature has been introduced in CPAN.pm 1.8854)
@@ -3922,6 +3994,25 @@ directory) or exit the CPAN shell, respectively. If you never start up
the CPAN shell, you probably also have to clean up the build directory
yourself.
+=item 19)
+
+How can I switch to sudo instead of local::lib?
+
+The following 5 environment veriables need to be reset to the previous
+values: PATH, PERL5LIB, PERL_LOCAL_LIB_ROOT, PERL_MB_OPT, PERL_MM_OPT;
+and these two CPAN.pm config variables must be reconfigured:
+make_install_make_command and mbuild_install_build_command. The five
+env variables have probably been overwritten in your $HOME/.bashrc or
+some equivalent. You either find them there and delete their traces
+and logout/login or you override them temporarily, depending on your
+exact desire. The two cpanpm config variables can be set with:
+
+ o conf init /install_.*_command/
+
+probably followed by
+
+ o conf commit
+
=back
=head1 COMPATIBILITY
diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Bundle.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Bundle.pm
index 3b4e93d8bf6..99c95ac4d6e 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Bundle.pm
+++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Bundle.pm
@@ -8,7 +8,7 @@ use CPAN::Module;
use vars qw(
$VERSION
);
-$VERSION = "5.5003";
+$VERSION = "5.5005";
sub look {
my $self = shift;
@@ -87,11 +87,11 @@ sub contains {
# Try to get at it in the cpan directory
$self->debug("no inst_file") if $CPAN::DEBUG;
my $cpan_file;
- $CPAN::Frontend->mydie("I don't know a bundle with ID $id\n") unless
+ $CPAN::Frontend->mydie("I don't know a bundle with ID '$id'\n") unless
$cpan_file = $self->cpan_file;
if ($cpan_file eq "N/A") {
- $CPAN::Frontend->mydie("Bundle $id not found on disk and not on CPAN.
- Maybe stale symlink? Maybe removed during session? Giving up.\n");
+ $CPAN::Frontend->mywarn("Bundle '$id' not found on disk and not on CPAN. Maybe stale symlink? Maybe removed during session?\n");
+ return;
}
my $dist = $CPAN::META->instance('CPAN::Distribution',
$self->cpan_file);
@@ -103,7 +103,12 @@ sub contains {
@me = split /::/, $self->id;
$me[-1] .= ".pm";
$me = File::Spec->catfile(@me);
- $from = $self->find_bundle_file($dist->{build_dir},join('/',@me));
+ my $build_dir;
+ unless ($build_dir = $dist->{build_dir}) {
+ $CPAN::Frontend->mywarn("Warning: cannot determine bundle content without a build_dir.\n");
+ return;
+ }
+ $from = $self->find_bundle_file($build_dir,join('/',@me));
$to = File::Spec->catfile($todir,$me);
File::Path::mkpath(File::Basename::dirname($to));
File::Copy::copy($from, $to)
@@ -238,6 +243,7 @@ Going to $meth that.
$self->debug("type[$type] s[$s]") if $CPAN::DEBUG;
my $obj = $CPAN::META->instance($type,$s);
$obj->{reqtype} = $self->{reqtype};
+ $obj->{viabundle} ||= { id => $id, reqtype => $self->{reqtype}, optional => !$self->{mandatory}};
# $obj->$meth();
# XXX should optional be based on whether bundle was optional? -- xdg, 2012-04-01
# A: Sure, what could demand otherwise? --andk, 2013-11-25
diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Distribution.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Distribution.pm
index 717c9aa0e45..34121085395 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Distribution.pm
+++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Distribution.pm
@@ -6,9 +6,12 @@ use Cwd qw(chdir);
use CPAN::Distroprefs;
use CPAN::InfoObj;
use File::Path ();
+use POSIX ":sys_wait_h";
@CPAN::Distribution::ISA = qw(CPAN::InfoObj);
use vars qw($VERSION);
-$VERSION = "2.22";
+$VERSION = "2.27";
+
+my $run_allow_installing_within_test = 1; # boolean; either in test or in install, there is no third option
# no prepare, because prepare is not a command on the shell command line
# TODO: clear instance cache on reload
@@ -317,6 +320,17 @@ sub called_for {
sub shortcut_get {
my ($self) = @_;
+ if (exists $self->{cleanup_after_install_done}) {
+ if ($self->{force_update}) {
+ delete $self->{cleanup_after_install_done};
+ } else {
+ my $id = $self->{CALLED_FOR} || $self->pretty_id;
+ return $self->success(
+ "Has already been *installed and cleaned up in the staging area* within this session, will not work on it again; if you really want to start over, try something like `force get $id`"
+ );
+ }
+ }
+
if (my $why = $self->check_disabled) {
$self->{unwrapped} = CPAN::Distrostatus->new("NO $why");
# XXX why is this goodbye() instead of just print/warn?
@@ -366,10 +380,12 @@ sub get {
$self->debug("checking goto id[$self->{ID}]") if $CPAN::DEBUG;
if (my $goto = $self->prefs->{goto}) {
+ $self->post_get();
return $self->goto($goto);
}
if ( defined( my $sc = $self->shortcut_get) ) {
+ $self->post_get();
return $sc;
}
@@ -388,15 +404,22 @@ sub get {
# is already checked in shortcut_get() -- xdg, 2012-04-05
unless ($self->{build_dir} && -d $self->{build_dir}) {
$self->get_file_onto_local_disk;
- return if $CPAN::Signal;
+ if ($CPAN::Signal){
+ $self->post_get();
+ return;
+ }
$self->check_integrity;
- return if $CPAN::Signal;
+ if ($CPAN::Signal){
+ $self->post_get();
+ return;
+ }
(my $packagedir,$local_file) = $self->run_preps_on_packagedir;
# XXX why is this check here? -- xdg, 2012-04-08
if (exists $self->{writemakefile} && ref $self->{writemakefile}
&& $self->{writemakefile}->can("failed") &&
$self->{writemakefile}->failed) {
#
+ $self->post_get();
return;
}
$packagedir ||= $self->{build_dir};
@@ -408,9 +431,13 @@ sub get {
# a $CPAN::Signal check -- xdg, 2012-04-05
if ($CPAN::Signal) {
$self->safe_chdir($sub_wd);
+ $self->post_get();
+ return;
+ }
+ unless ($self->patch){
+ $self->post_get();
return;
}
- return unless $self->patch;
$self->store_persistent_state;
$self->post_get();
@@ -529,9 +556,10 @@ See also http://rt.cpan.org/Ticket/Display.html?id=38932\n");
if (@readdir == 1 && -d $readdir[0]) {
$tdir_base = $readdir[0];
$from_dir = File::Spec->catdir(File::Spec->curdir,$readdir[0]);
+ my($mode) = (stat $from_dir)[2];
+ chmod $mode | 00755, $from_dir; # JONATHAN/Math-Calculus-TaylorSeries-0.1.tar.gz has 0644
my $dh2;
unless ($dh2 = DirHandle->new($from_dir)) {
- my($mode) = (stat $from_dir)[2];
my $why = sprintf
(
"Couldn't opendir '%s', mode '%o': %s",
@@ -554,10 +582,6 @@ See also http://rt.cpan.org/Ticket/Display.html?id=38932\n");
$from_dir = File::Spec->curdir;
@dirents = @readdir;
}
- eval { File::Path::mkpath $builddir; };
- if ($@) {
- $CPAN::Frontend->mydie("Cannot create directory $builddir: $@");
- }
my $packagedir;
my $eexist = ($CPAN::META->has_usable("Errno") && defined &Errno::EEXIST)
? &Errno::EEXIST : undef;
@@ -572,6 +596,8 @@ See also http://rt.cpan.org/Ticket/Display.html?id=38932\n");
my $f;
for $f (@dirents) { # is already without "." and ".."
my $from = File::Spec->catfile($from_dir,$f);
+ my($mode) = (stat $from)[2];
+ chmod $mode | 00755, $from if -d $from; # OTTO/Pod-Trial-LinkImg-0.005.tgz
my $to = File::Spec->catfile($packagedir,$f);
unless (File::Copy::move($from,$to)) {
my $err = $!;
@@ -1217,10 +1243,10 @@ sub untar_me {
sub unzip_me {
my($self,$ct) = @_;
$self->{archived} = "zip";
- if ($ct->unzip()) {
+ if (eval { $ct->unzip() }) {
$self->{unwrapped} = CPAN::Distrostatus->new("YES");
} else {
- $self->{unwrapped} = CPAN::Distrostatus->new("NO -- unzip failed");
+ $self->{unwrapped} = CPAN::Distrostatus->new("NO -- unzip failed during unzip");
}
return;
}
@@ -1637,23 +1663,28 @@ sub force {
"prefs",
"prefs_file",
"prefs_file_doc",
+ "cleanup_after_install_done",
],
make => [
"writemakefile",
"make",
"modulebuild",
"prereq_pm",
+ "cleanup_after_install_done",
],
test => [
"badtestcnt",
"make_test",
- ],
+ "cleanup_after_install_done",
+ ],
install => [
"install",
+ "cleanup_after_install_done",
],
unknown => [
"reqtype",
"yaml_content",
+ "cleanup_after_install_done",
],
);
my $methodmatch = 0;
@@ -1830,7 +1861,9 @@ sub prepare {
? $ENV{PERL5LIB}
: ($ENV{PERLLIB} || "");
local $ENV{PERL5OPT} = defined $ENV{PERL5OPT} ? $ENV{PERL5OPT} : "";
- local $ENV{PERL_USE_UNSAFE_INC} = exists $ENV{PERL_USE_UNSAFE_INC} ? $ENV{PERL_USE_UNSAFE_INC} : 1; # prepare
+ local $ENV{PERL_USE_UNSAFE_INC} =
+ exists $ENV{PERL_USE_UNSAFE_INC} && defined $ENV{PERL_USE_UNSAFE_INC}
+ ? $ENV{PERL_USE_UNSAFE_INC} : 1; # prepare
$CPAN::META->set_perl5lib;
local $ENV{MAKEFLAGS}; # protect us from outer make calls
@@ -1992,7 +2025,9 @@ sub prepare {
($output, $ret) = eval { CPAN::Reporter::record_command($system) };
if (! defined $output or $@) {
my $err = $@ || "Unknown error";
- $CPAN::Frontend->mywarn("Error while running PL phase: $err");
+ $CPAN::Frontend->mywarn("Error while running PL phase: $err\n");
+ $self->{writemakefile} = CPAN::Distrostatus
+ ->new("NO '$system' returned status $ret and no output");
return $self->goodbye("$system -- NOT OK");
}
CPAN::Reporter::grade_PL( $self, $system, $output, $ret );
@@ -2062,8 +2097,14 @@ sub make {
$self->pre_make();
+ if (exists $self->{cleanup_after_install_done}) {
+ $self->post_make();
+ return $self->get;
+ }
+
$self->debug("checking goto id[$self->{ID}]") if $CPAN::DEBUG;
if (my $goto = $self->prefs->{goto}) {
+ $self->post_make();
return $self->goto($goto);
}
# Emergency brake if they said install Pippi and get newest perl
@@ -2100,19 +2141,24 @@ is part of the perl-%s distribution. To install that, you need to run
));
$self->{make} = CPAN::Distrostatus->new("NO isa perl");
$CPAN::Frontend->mysleep(1);
+ $self->post_make();
return;
}
}
- $self->prepare
- or return;
+ unless ($self->prepare){
+ $self->post_make();
+ return;
+ }
if ( defined( my $sc = $self->shortcut_make) ) {
+ $self->post_make();
return $sc;
}
if ($CPAN::Signal) {
delete $self->{force_update};
+ $self->post_make();
return;
}
@@ -2121,6 +2167,7 @@ is part of the perl-%s distribution. To install that, you need to run
unless (chdir $builddir) {
$CPAN::Frontend->mywarn("Couldn't chdir to '$builddir': $!");
+ $self->post_make();
return;
}
@@ -2130,17 +2177,21 @@ is part of the perl-%s distribution. To install that, you need to run
? $ENV{PERL5LIB}
: ($ENV{PERLLIB} || "");
local $ENV{PERL5OPT} = defined $ENV{PERL5OPT} ? $ENV{PERL5OPT} : "";
- local $ENV{PERL_USE_UNSAFE_INC} = exists $ENV{PERL_USE_UNSAFE_INC} ? $ENV{PERL_USE_UNSAFE_INC} : 1; # make
+ local $ENV{PERL_USE_UNSAFE_INC} =
+ exists $ENV{PERL_USE_UNSAFE_INC} && defined $ENV{PERL_USE_UNSAFE_INC}
+ ? $ENV{PERL_USE_UNSAFE_INC} : 1; # make
$CPAN::META->set_perl5lib;
local $ENV{MAKEFLAGS}; # protect us from outer make calls
if ($CPAN::Signal) {
delete $self->{force_update};
+ $self->post_make();
return;
}
if ($^O eq 'MacOS') {
Mac::BuildTools::make($self);
+ $self->post_make();
return;
}
@@ -2151,16 +2202,23 @@ is part of the perl-%s distribution. To install that, you need to run
}
local @ENV{keys %env} = values %env;
my $satisfied = eval { $self->satisfy_requires };
- return $self->goodbye($@) if $@;
- return unless $satisfied ;
+ if ($@) {
+ return $self->goodbye($@);
+ }
+ unless ($satisfied){
+ $self->post_make();
+ return;
+ }
if ($CPAN::Signal) {
delete $self->{force_update};
+ $self->post_make();
return;
}
# need to chdir again, because $self->satisfy_requires might change the directory
unless (chdir $builddir) {
$CPAN::Frontend->mywarn("Couldn't chdir to '$builddir': $!");
+ $self->post_make();
return;
}
@@ -2794,12 +2852,16 @@ sub prereqs_for_slot {
if ($self->{CALLED_FOR} =~
/^(
CPAN::Meta::Requirements
+ |CPAN::DistnameInfo
|version
|parent
|ExtUtils::MakeMaker
|Test::Harness
)$/x) {
- $CPAN::Frontend->mywarn("Setting requirements to nil as a workaround\n");
+ $CPAN::Frontend->mywarn("Please install CPAN::Meta::Requirements ".
+ "as soon as possible; it is needed for a reliable operation of ".
+ "the cpan shell; setting requirements to nil for '$1' for now ".
+ "to prevent deadlock during bootstrapping\n");
return;
}
$before = " before $self->{CALLED_FOR}";
@@ -2956,7 +3018,8 @@ sub unsat_prereq {
next NEED;
}
} elsif (
- $self->{reqtype} =~ /^(r|c)$/
+ $self->{reqtype} # e.g. maybe we came via goto?
+ && $self->{reqtype} =~ /^(r|c)$/
&& ( exists $prereq_pm->{requires}{$need_module}
|| exists $prereq_pm->{opt_requires}{$need_module} )
&& $nmo
@@ -3531,21 +3594,31 @@ sub test {
$self->pre_test();
+ if (exists $self->{cleanup_after_install_done}) {
+ $self->post_test();
+ return $self->make;
+ }
+
$self->debug("checking goto id[$self->{ID}]") if $CPAN::DEBUG;
if (my $goto = $self->prefs->{goto}) {
+ $self->post_test();
return $self->goto($goto);
}
- $self->make
- or return;
+ unless ($self->make){
+ $self->post_test();
+ return;
+ }
if ( defined( my $sc = $self->shortcut_test ) ) {
+ $self->post_test();
return $sc;
}
if ($CPAN::Signal) {
- delete $self->{force_update};
- return;
+ delete $self->{force_update};
+ $self->post_test();
+ return;
}
# warn "XDEBUG: checking for notest: $self->{notest} $self";
my $make = $self->{modulebuild} ? "Build" : "make";
@@ -3555,12 +3628,26 @@ sub test {
: ($ENV{PERLLIB} || "");
local $ENV{PERL5OPT} = defined $ENV{PERL5OPT} ? $ENV{PERL5OPT} : "";
- local $ENV{PERL_USE_UNSAFE_INC} = exists $ENV{PERL_USE_UNSAFE_INC} ? $ENV{PERL_USE_UNSAFE_INC} : 1; # test
+ local $ENV{PERL_USE_UNSAFE_INC} =
+ exists $ENV{PERL_USE_UNSAFE_INC} && defined $ENV{PERL_USE_UNSAFE_INC}
+ ? $ENV{PERL_USE_UNSAFE_INC} : 1; # test
$CPAN::META->set_perl5lib;
local $ENV{MAKEFLAGS}; # protect us from outer make calls
local $ENV{PERL_MM_USE_DEFAULT} = 1 if $CPAN::Config->{use_prompt_default};
local $ENV{NONINTERACTIVE_TESTING} = 1 if $CPAN::Config->{use_prompt_default};
+ if ($run_allow_installing_within_test) {
+ my($allow_installing, $why) = $self->_allow_installing;
+ if (! $allow_installing) {
+ $CPAN::Frontend->mywarn("Testing/Installation stopped: $why\n");
+ $self->introduce_myself;
+ $self->{make_test} = CPAN::Distrostatus->new("NO -- testing/installation stopped due $why");
+ $CPAN::Frontend->mywarn(" [testing] -- NOT OK\n");
+ delete $self->{force_update};
+ $self->post_test();
+ return;
+ }
+ }
$CPAN::Frontend->myprint(sprintf "Running %s test for %s\n", $make, $self->pretty_id);
my $builddir = $self->dir or
@@ -3568,6 +3655,7 @@ sub test {
unless (chdir $builddir) {
$CPAN::Frontend->mywarn("Couldn't chdir to '$builddir': $!");
+ $self->post_test();
return;
}
@@ -3576,6 +3664,7 @@ sub test {
if ($^O eq 'MacOS') {
Mac::BuildTools::make_test($self);
+ $self->post_test();
return;
}
@@ -3587,9 +3676,10 @@ sub test {
# Test::Harness 3.0 self-tests, so that should be 'unless
# installing Test::Harness'
unless ($self->id eq $thm->distribution->id) {
- $CPAN::Frontend->mywarn(qq{The version of your Test::Harness is only
+ $CPAN::Frontend->mywarn(qq{The version of your Test::Harness is only
'$v', you need at least '2.62'. Please upgrade your Test::Harness.\n});
$self->{make_test} = CPAN::Distrostatus->new("NO Test::Harness too old");
+ $self->post_test();
return;
}
}
@@ -3611,12 +3701,14 @@ sub test {
$CPAN::META->is_tested($self->{build_dir},$self->{make_test}{TIME});
}
$CPAN::Frontend->myprint("Found prior test report -- OK\n");
+ $self->post_test();
return;
}
elsif ( $reports[-1]->{grade} =~ /^(?:FAIL|NA)$/ ) {
$self->{make_test} = CPAN::Distrostatus->new("NO");
$self->{badtestcnt}++;
$CPAN::Frontend->mywarn("Found prior test report -- NOT OK\n");
+ $self->post_test();
return;
}
}
@@ -3660,18 +3752,45 @@ sub test {
"testing without\n");
}
}
- if ($want_expect) {
- if ($self->_should_report('test')) {
- $CPAN::Frontend->mywarn("Reporting via CPAN::Reporter is currently ".
- "not supported when distroprefs specify ".
- "an interactive test\n");
+
+ FORK: {
+ my $pid = fork;
+ if (! defined $pid) { # contention
+ warn "Contention '$!', sleeping 2";
+ sleep 2;
+ redo FORK;
+ } elsif ($pid) { # parent
+ if ($^O eq "MSWin32") {
+ wait;
+ } else {
+ SUPERVISE: while (waitpid($pid, WNOHANG) <= 0) {
+ if ($CPAN::Signal) {
+ kill 9, -$pid;
+ }
+ sleep 1;
+ }
+ }
+ $tests_ok = !$?;
+ } else { # child
+ POSIX::setsid() unless $^O eq "MSWin32";
+ my $c_ok;
+ $|=1;
+ if ($want_expect) {
+ if ($self->_should_report('test')) {
+ $CPAN::Frontend->mywarn("Reporting via CPAN::Reporter is currently ".
+ "not supported when distroprefs specify ".
+ "an interactive test\n");
+ }
+ $c_ok = $self->_run_via_expect($system,'test',$expect_model) == 0;
+ } elsif ( $self->_should_report('test') ) {
+ $c_ok = CPAN::Reporter::test($self, $system);
+ } else {
+ $c_ok = system($system) == 0;
+ }
+ exit !$c_ok;
}
- $tests_ok = $self->_run_via_expect($system,'test',$expect_model) == 0;
- } elsif ( $self->_should_report('test') ) {
- $tests_ok = CPAN::Reporter::test($self, $system);
- } else {
- $tests_ok = system($system) == 0;
- }
+ } # FORK
+
$self->introduce_myself;
my $but = $self->_make_test_illuminate_prereqs();
if ( $tests_ok ) {
@@ -3679,6 +3798,7 @@ sub test {
$CPAN::Frontend->mywarn("Tests succeeded but $but\n");
$self->{make_test} = CPAN::Distrostatus->new("NO $but");
$self->store_persistent_state;
+ $self->post_test();
return $self->goodbye("[dependencies] -- NA");
}
$CPAN::Frontend->myprint(" $system -- OK\n");
@@ -3696,6 +3816,8 @@ sub test {
$self->{make_test} = CPAN::Distrostatus->new(
"NO but failure ignored because 'force' in effect"
);
+ } elsif ($CPAN::Signal) {
+ $self->{make_test} = CPAN::Distrostatus->new("NO -- Interrupted");
} else {
$self->{make_test} = CPAN::Distrostatus->new("NO");
}
@@ -3745,7 +3867,7 @@ sub _make_test_illuminate_prereqs {
if $CPAN::DEBUG;
} else {
push @prereq, $m
- if $m_obj->{mandatory};
+ unless $self->is_locally_optional(undef, $m);
}
}
my $but;
@@ -3895,7 +4017,12 @@ sub goto {
# and run where we left off
my($method) = (caller(1))[3];
- CPAN->instance("CPAN::Distribution",$goto)->$method();
+ my $goto_do = CPAN->instance("CPAN::Distribution",$goto);
+ $goto_do->called_for($self->called_for) unless $goto_do->called_for;
+ $goto_do->{mandatory} ||= $self->{mandatory};
+ $goto_do->{reqtype} ||= $self->{reqtype};
+ $goto_do->{coming_from} = $self->pretty_id;
+ $goto_do->$method();
CPAN::Queue->delete_first($goto);
# XXX delete_first returns undef; is that what this should return
# up the call stack, eg. return $sefl->goto($goto) -- xdg, 2012-04-04
@@ -3932,12 +4059,36 @@ sub shortcut_install {
return undef;
}
+#-> sub CPAN::Distribution::is_being_sponsored ;
+
+# returns true if we find a distro object in the queue that has
+# sponsored this one
+sub is_being_sponsored {
+ my($self) = @_;
+ my $iterator = CPAN::Queue->iterator;
+ QITEM: while (my $q = $iterator->()) {
+ my $s = $q->as_string;
+ my $obj = CPAN::Shell->expandany($s) or next QITEM;
+ my $type = ref $obj;
+ if ( $type eq 'CPAN::Distribution' ){
+ for my $module (sort keys %{$obj->{sponsored_mods} || {}}) {
+ return 1 if grep { $_ eq $module } $self->containsmods;
+ }
+ }
+ }
+ return 0;
+}
+
#-> sub CPAN::Distribution::install ;
sub install {
my($self) = @_;
$self->pre_install();
+ if (exists $self->{cleanup_after_install_done}) {
+ return $self->test;
+ }
+
$self->debug("checking goto id[$self->{ID}]") if $CPAN::DEBUG;
if (my $goto = $self->prefs->{goto}) {
$self->goto($goto);
@@ -4039,11 +4190,31 @@ sub install {
: ($ENV{PERLLIB} || "");
local $ENV{PERL5OPT} = defined $ENV{PERL5OPT} ? $ENV{PERL5OPT} : "";
- local $ENV{PERL_USE_UNSAFE_INC} = exists $ENV{PERL_USE_UNSAFE_INC} ? $ENV{PERL_USE_UNSAFE_INC} : 1; # install
+ local $ENV{PERL_USE_UNSAFE_INC} =
+ exists $ENV{PERL_USE_UNSAFE_INC} && defined $ENV{PERL_USE_UNSAFE_INC}
+ ? $ENV{PERL_USE_UNSAFE_INC} : 1; # install
$CPAN::META->set_perl5lib;
local $ENV{PERL_MM_USE_DEFAULT} = 1 if $CPAN::Config->{use_prompt_default};
local $ENV{NONINTERACTIVE_TESTING} = 1 if $CPAN::Config->{use_prompt_default};
+ my $install_env;
+ if ($self->prefs->{install}) {
+ $install_env = $self->prefs->{install}{env};
+ }
+ local @ENV{keys %$install_env} = values %$install_env if $install_env;
+
+ if (! $run_allow_installing_within_test) {
+ my($allow_installing, $why) = $self->_allow_installing;
+ if (! $allow_installing) {
+ $CPAN::Frontend->mywarn("Installation stopped: $why\n");
+ $self->introduce_myself;
+ $self->{install} = CPAN::Distrostatus->new("NO -- installation stopped due $why");
+ $CPAN::Frontend->mywarn(" $system -- NOT OK\n");
+ delete $self->{force_update};
+ $self->post_install();
+ return;
+ }
+ }
my($pipe) = FileHandle->new("$system $stderr |");
unless ($pipe) {
$CPAN::Frontend->mywarn("Can't execute $system: $!");
@@ -4069,7 +4240,8 @@ sub install {
$CPAN::META->is_installed($self->{build_dir});
$self->{install} = CPAN::Distrostatus->new("YES");
if ($CPAN::Config->{'cleanup_after_install'}
- && ! $self->is_dot_dist) {
+ && ! $self->is_dot_dist
+ && ! $self->is_being_sponsored) {
my $parent = File::Spec->catdir( $self->{build_dir}, File::Spec->updir );
chdir $parent or $CPAN::Frontend->mydie("Couldn't chdir to $parent: $!\n");
File::Path::rmtree($self->{build_dir});
@@ -4077,6 +4249,7 @@ sub install {
if (-e $yml) {
unlink $yml or $CPAN::Frontend->mydie("Couldn't unlink $yml: $!\n");
}
+ $self->{cleanup_after_install_done}=1;
}
} else {
$self->{install} = CPAN::Distrostatus->new("NO");
@@ -4113,6 +4286,162 @@ sub install {
return !! $close_ok;
}
+sub blib_pm_walk {
+ my @queue = grep { -e $_ } File::Spec->catdir("blib","lib"), File::Spec->catdir("blib","arch");
+ return sub {
+ LOOP: {
+ if (@queue) {
+ my $file = shift @queue;
+ if (-d $file) {
+ my $dh;
+ opendir $dh, $file or next;
+ my @newfiles = map {
+ my @ret;
+ my $maybedir = File::Spec->catdir($file, $_);
+ if (-d $maybedir) {
+ unless (File::Spec->catdir("blib","arch","auto") eq $maybedir) {
+ # prune the blib/arch/auto directory, no pm files there
+ @ret = $maybedir;
+ }
+ } elsif (/\.pm$/) {
+ my $mustbefile = File::Spec->catfile($file, $_);
+ if (-f $mustbefile) {
+ @ret = $mustbefile;
+ }
+ }
+ @ret;
+ } grep {
+ $_ ne "."
+ && $_ ne ".."
+ } readdir $dh;
+ push @queue, @newfiles;
+ redo LOOP;
+ } else {
+ return $file;
+ }
+ } else {
+ return;
+ }
+ }
+ };
+}
+
+sub _allow_installing {
+ my($self) = @_;
+ my $id = my $pretty_id = $self->pretty_id;
+ if ($self->{CALLED_FOR}) {
+ $id .= " (called for $self->{CALLED_FOR})";
+ }
+ my $allow_down = CPAN::HandleConfig->prefs_lookup($self,q{allow_installing_module_downgrades});
+ $allow_down ||= "ask/yes";
+ my $allow_outdd = CPAN::HandleConfig->prefs_lookup($self,q{allow_installing_outdated_dists});
+ $allow_outdd ||= "ask/yes";
+ return 1 if
+ $allow_down eq "yes"
+ && $allow_outdd eq "yes";
+ if (($allow_outdd ne "yes") && ! $CPAN::META->has_inst('CPAN::DistnameInfo')) {
+ return 1 if grep { $_ eq 'CPAN::DistnameInfo'} $self->containsmods;
+ if ($allow_outdd ne "yes") {
+ $CPAN::Frontend->mywarn("The current configuration of allow_installing_outdated_dists is '$allow_outdd', but for this option we would need 'CPAN::DistnameInfo' installed. Please install 'CPAN::DistnameInfo' as soon as possible. As long as we are not equipped with 'CPAN::DistnameInfo' this option does not take effect\n");
+ $allow_outdd = "yes";
+ }
+ }
+ return 1 if
+ $allow_down eq "yes"
+ && $allow_outdd eq "yes";
+ my($dist_version, $dist_dist);
+ if ($allow_outdd ne "yes"){
+ my $dni = CPAN::DistnameInfo->new($pretty_id);
+ $dist_version = $dni->version;
+ $dist_dist = $dni->dist;
+ }
+ my $iterator = blib_pm_walk();
+ my(@down,@outdd);
+ while (my $file = $iterator->()) {
+ my $version = CPAN::Module->parse_version($file);
+ my($volume, $directories, $pmfile) = File::Spec->splitpath( $file );
+ my @dirs = File::Spec->splitdir( $directories );
+ my(@blib_plus1) = splice @dirs, 0, 2;
+ my($pmpath) = File::Spec->catfile(grep { length($_) } @dirs, $pmfile);
+ unless ($allow_down eq "yes") {
+ if (my $inst_file = $self->_file_in_path($pmpath, \@INC)) {
+ my $inst_version = CPAN::Module->parse_version($inst_file);
+ my $cmp = CPAN::Version->vcmp($version, $inst_version);
+ if ($cmp) {
+ if ($cmp < 0) {
+ push @down, { pmpath => $pmpath, version => $version, inst_version => $inst_version };
+ }
+ }
+ if (@down) {
+ my $why = "allow_installing_module_downgrades: $id contains downgrading module(s) (e.g. '$down[0]{pmpath}' would downgrade installed '$down[0]{inst_version}' to '$down[0]{version}')";
+ if (my($default) = $allow_down =~ m|^ask/(.+)|) {
+ $default = "yes" unless $default =~ /^(y|n)/i;
+ my $answer = CPAN::Shell::colorable_makemaker_prompt
+ ("$why. Do you want to allow installing it?",
+ $default, "colorize_warn");
+ $allow_down = $answer =~ /^\s*y/i ? "yes" : "no";
+ }
+ if ($allow_down eq "no") {
+ return (0, $why);
+ }
+ }
+ }
+ }
+ unless ($allow_outdd eq "yes") {
+ my @pmpath = (@dirs, $pmfile);
+ $pmpath[-1] =~ s/\.pm$//;
+ my $mo = CPAN::Shell->expand("Module",join "::", grep { length($_) } @pmpath);
+ if ($mo) {
+ my $cpan_version = $mo->cpan_version;
+ my $is_lower = CPAN::Version->vlt($version, $cpan_version);
+ my $other_dist;
+ if (my $mo_dist = $mo->distribution) {
+ $other_dist = $mo_dist->pretty_id;
+ my $dni = CPAN::DistnameInfo->new($other_dist);
+ if ($dni->dist eq $dist_dist){
+ if (CPAN::Version->vgt($dni->version, $dist_version)) {
+ push @outdd, {
+ pmpath => $pmpath,
+ cpan_path => $dni->pathname,
+ dist_version => $dni->version,
+ dist_dist => $dni->dist,
+ };
+ }
+ }
+ }
+ }
+ if (@outdd && $allow_outdd ne "yes") {
+ my $why = "allow_installing_outdated_dists: $id contains module(s) that are indexed on the CPAN with a different distro: (e.g. '$outdd[0]{pmpath}' is indexed with '$outdd[0]{cpan_path}')";
+ if ($outdd[0]{dist_dist} eq $dist_dist) {
+ $why .= ", and this has a higher distribution-version, i.e. version '$outdd[0]{dist_version}' is higher than '$dist_version')";
+ }
+ if (my($default) = $allow_outdd =~ m|^ask/(.+)|) {
+ $default = "yes" unless $default =~ /^(y|n)/i;
+ my $answer = CPAN::Shell::colorable_makemaker_prompt
+ ("$why. Do you want to allow installing it?",
+ $default, "colorize_warn");
+ $allow_outdd = $answer =~ /^\s*y/i ? "yes" : "no";
+ }
+ if ($allow_outdd eq "no") {
+ return (0, $why);
+ }
+ }
+ }
+ }
+ return 1;
+}
+
+sub _file_in_path { # similar to CPAN::Module::_file_in_path
+ my($self,$pmpath,$incpath) = @_;
+ my($dir,@packpath);
+ foreach $dir (@$incpath) {
+ my $pmfile = File::Spec->catfile($dir,$pmpath);
+ if (-f $pmfile) {
+ return $pmfile;
+ }
+ }
+ return;
+}
sub introduce_myself {
my($self) = @_;
$CPAN::Frontend->myprint(sprintf(" %s\n",$self->pretty_id));
@@ -4361,6 +4690,8 @@ sub _should_report {
die "_should_report() requires a 'phase' argument"
if ! defined $phase;
+ return unless $CPAN::META->has_usable("CPAN::Reporter");
+
# configured
my $test_report = CPAN::HandleConfig->prefs_lookup($self,
q{test_report});
diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FTP.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FTP.pm
index 6d9800e31b1..1688a118e4c 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FTP.pm
+++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FTP.pm
@@ -15,7 +15,7 @@ use vars qw($connect_to_internet_ok $Ua $Thesite $ThesiteURL $Themethod);
use vars qw(
$VERSION
);
-$VERSION = "5.5011";
+$VERSION = "5.5012";
sub _plus_append_open {
my($fh, $file) = @_;
@@ -23,7 +23,7 @@ sub _plus_append_open {
mkpath $parent_dir;
my($cnt);
until (open $fh, "+>>$file") {
- next if $! == Errno::EAGAIN; # don't increment on EAGAIN
+ next if exists &Errno::EAGAIN && $! == &Errno::EAGAIN; # don't increment on EAGAIN
$CPAN::Frontend->mydie("Could not open '$file' after 10000 tries: $!") if ++$cnt > 100000;
sleep 0.0001;
mkpath $parent_dir;
@@ -34,6 +34,8 @@ sub _plus_append_open {
# if they want to rewrite, they need to pass in a filehandle
sub _ftp_statistics {
my($self,$fh) = @_;
+ my $ftpstats_size = $CPAN::Config->{ftpstats_size};
+ 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
@@ -120,18 +122,23 @@ sub _add_to_statistics {
my @debug;
@debug = $time if $sdebug;
my $fullstats = $self->_ftp_statistics($fh);
- close $fh;
+ close $fh if $fh && defined(fileno($fh));
$fullstats->{history} ||= [];
push @debug, scalar @{$fullstats->{history}} if $sdebug;
push @debug, time if $sdebug;
push @{$fullstats->{history}}, $stats;
# YAML.pm 0.62 is unacceptably slow with 999;
# YAML::Syck 0.82 has no noticable performance problem with 999;
- my $ftpstats_size = $CPAN::Config->{ftpstats_size} || 99;
+ my $ftpstats_size = $CPAN::Config->{ftpstats_size};
+ $ftpstats_size = 99 unless defined $ftpstats_size;
my $ftpstats_period = $CPAN::Config->{ftpstats_period} || 14;
while (
- @{$fullstats->{history}} > $ftpstats_size
- || $time - $fullstats->{history}[0]{start} > 86400*$ftpstats_period
+ @{$fullstats->{history} || []}
+ &&
+ (
+ @{$fullstats->{history}} > $ftpstats_size
+ || $time - $fullstats->{history}[0]{start} > 86400*$ftpstats_period
+ )
) {
shift @{$fullstats->{history}}
}
diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FirstTime.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FirstTime.pm
index 49fa8ab7b95..af4a6d77591 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FirstTime.pm
+++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FirstTime.pm
@@ -9,8 +9,9 @@ use File::Basename ();
use File::Path ();
use File::Spec ();
use CPAN::Mirrors ();
+use CPAN::Version ();
use vars qw($VERSION $auto_config);
-$VERSION = "5.5311";
+$VERSION = "5.5314";
=head1 NAME
@@ -37,6 +38,34 @@ my @podpara = split /\n\n/, <<'=back';
=over 2
+=item allow_installing_module_downgrades
+
+The CPAN shell can watch the C<blib/> directories that are built up
+before running C<make test> to determine whether the current
+distribution will end up with modules being overwritten with decreasing module version numbers. It
+can then let the build of this distro fail when it discovers a
+downgrade.
+
+Do you want to allow installing distros with decreasing module
+versions compared to what you have installed (yes, no, ask/yes,
+ask/no)?
+
+=item allow_installing_outdated_dists
+
+The CPAN shell can watch the C<blib/> directories that are built up
+before running C<make test> to determine whether the current
+distribution contains modules that are indexed with a distro with a
+higher distro-version number than the current one. It can
+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.
+
+Do you want to allow installing distros that are not indexed as the
+highest distro-version for all contained modules (yes, no, ask/yes,
+ask/no)?
+
=item auto_commit
Normally CPAN.pm keeps config variables in memory and changes need to
@@ -192,7 +221,8 @@ How many days shall we keep statistics about downloads?
=item ftpstats_size
Statistics about downloads are truncated by size and period
-simultaneously.
+simultaneously. Setting this to zero or negative disables download
+statistics.
How many items shall we keep in the statistics about downloads?
@@ -567,6 +597,23 @@ regardless of the history using "force".
Do you want to rely on the test report history (yes/no)?
+=item urllist_ping_external
+
+When automatic selection of the nearest cpan mirrors is performed,
+turn on the use of the external ping via Net::Ping::External. This is
+recommended in the case the local network has a transparent proxy.
+
+Do you want to use the external ping command when autoselecting
+mirrors?
+
+=item urllist_ping_verbose
+
+When automatic selection of the nearest cpan mirrors is performed,
+this option can be used to turn on verbosity during the selection
+process.
+
+Do you want to see verbosity turned on when autoselecting mirrors?
+
=item use_prompt_default
When this is true, CPAN will set PERL_MM_USE_DEFAULT to a true
@@ -1088,6 +1135,14 @@ sub init {
my_dflt_prompt(mbuild_install_arg => "", $matcher);
+ for my $o (qw(
+ allow_installing_outdated_dists
+ allow_installing_module_downgrades
+ )) {
+ my_prompt_loop($o => 'ask/no', $matcher,
+ 'yes|no|ask/yes|ask/no');
+ }
+
#
#== use_prompt_default
#
@@ -1263,6 +1318,12 @@ sub init {
# Allow matching but don't show during manual config
if ($matcher) {
+ if ("urllist_ping_external" =~ $matcher) {
+ my_yn_prompt(urllist_ping_external => 0, $matcher);
+ }
+ if ("urllist_ping_verbose" =~ $matcher) {
+ my_yn_prompt(urllist_ping_verbose => 0, $matcher);
+ }
if ("randomize_urllist" =~ $matcher) {
my_dflt_prompt(randomize_urllist => 0, $matcher);
}
@@ -1450,7 +1511,7 @@ sub _do_pick_mirrors {
$CPAN::Frontend->myprint($prompts{urls_intro});
# Only prompt for auto-pick if Net::Ping is new enough to do timings
my $_conf = 'n';
- if ( $CPAN::META->has_usable("Net::Ping") && Net::Ping->VERSION gt '2.13') {
+ if ( $CPAN::META->has_usable("Net::Ping") && CPAN::Version->vgt(Net::Ping->VERSION, '2.13')) {
$_conf = prompt($prompts{auto_pick}, "yes");
} else {
prompt("Autoselection disabled due to Net::Ping missing or insufficient. Please press ENTER");
@@ -1678,7 +1739,6 @@ sub my_yn_prompt {
my $default;
defined($default = $CPAN::Config->{$item}) or $default = $dflt;
- # $DB::single = 1;
if (!$auto_config && (!$m || $item =~ /$m/)) {
if (my $intro = $prompts{$item . "_intro"}) {
$CPAN::Frontend->myprint($intro);
@@ -1697,7 +1757,8 @@ sub my_prompt_loop {
my $ans;
if (!$auto_config && (!$m || $item =~ /$m/)) {
- $CPAN::Frontend->myprint($prompts{$item . "_intro"});
+ my $intro = $prompts{$item . "_intro"};
+ $CPAN::Frontend->myprint($intro) if defined $intro;
$CPAN::Frontend->myprint(" <$item>\n");
do { $ans = prompt($prompts{$item}, $default);
} until $ans =~ /$ok/;
@@ -1915,17 +1976,25 @@ sub auto_mirrored_by {
my $mirrors = CPAN::Mirrors->new($local);
my $cnt = 0;
+ my $callback_was_active = 0;
my @best = $mirrors->best_mirrors(
how_many => 3,
callback => sub {
+ $callback_was_active++;
$CPAN::Frontend->myprint(".");
if ($cnt++>60) { $cnt=0; $CPAN::Frontend->myprint("\n"); }
},
+ $CPAN::Config->{urllist_ping_external} ? (external_ping => 1) : (),
+ $CPAN::Config->{urllist_ping_verbose} ? (verbose => 1) : (),
);
- my $urllist = [ map { $_->http } @best ];
+ my $urllist = [
+ map { $_->http }
+ grep { $_ && ref $_ && $_->can('http') }
+ @best
+ ];
push @$urllist, grep { /^file:/ } @{$CPAN::Config->{urllist}};
- $CPAN::Frontend->myprint(" done!\n\n");
+ $CPAN::Frontend->myprint(" done!\n\n") if $callback_was_active;
return $urllist
}
diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/HandleConfig.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/HandleConfig.pm
index c72439f92cb..e24a969c11f 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/HandleConfig.pm
+++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/HandleConfig.pm
@@ -12,7 +12,7 @@ CPAN::HandleConfig - internal configuration handling for CPAN.pm
=cut
-$VERSION = "5.5008"; # see also CPAN::Config::VERSION at end of file
+$VERSION = "5.5011"; # see also CPAN::Config::VERSION at end of file
%can = (
commit => "Commit changes to disk",
@@ -33,6 +33,8 @@ $VERSION = "5.5008"; # see also CPAN::Config::VERSION at end of file
%keys = map { $_ => undef }
(
+ "allow_installing_module_downgrades",
+ "allow_installing_outdated_dists",
"applypatch",
"auto_commit",
"build_cache",
@@ -112,6 +114,8 @@ $VERSION = "5.5008"; # see also CPAN::Config::VERSION at end of file
"trust_test_report_history",
"unzip",
"urllist",
+ "urllist_ping_verbose",
+ "urllist_ping_external",
"use_prompt_default",
"use_sqlite",
"username",
@@ -124,6 +128,8 @@ $VERSION = "5.5008"; # see also CPAN::Config::VERSION at end of file
my %prefssupport = map { $_ => 1 }
(
+ "allow_installing_module_downgrades",
+ "allow_installing_outdated_dists",
"build_requires_install_policy",
"check_sigs",
"make",
@@ -751,7 +757,7 @@ sub prefs_lookup {
return $distro->prefs->{cpanconfig}{$what};
} else {
$CPAN::Frontend->mywarn("Warning: $what not yet officially ".
- "supported for distroprefs, doing a normal lookup");
+ "supported for distroprefs, doing a normal lookup\n");
return $CPAN::Config->{$what};
}
}
@@ -770,7 +776,7 @@ sub prefs_lookup {
use strict;
use vars qw($AUTOLOAD $VERSION);
- $VERSION = "5.5008";
+ $VERSION = "5.5011";
# formerly CPAN::HandleConfig was known as CPAN::Config
sub AUTOLOAD { ## no critic
diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Mirrors.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Mirrors.pm
index 29bb7216ffc..721ead2a85d 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Mirrors.pm
+++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Mirrors.pm
@@ -19,7 +19,7 @@ CPAN::Mirrors - Get CPAN mirror information and select a fast one
my( $m ) = @_;
printf "%s = %s\n", $m->hostname, $m->rtt
};
- $mirrors->get_mirrors_timings( \@mirrors, $seen, $callback );
+ $mirrors->get_mirrors_timings( \@mirrors, $seen, $callback, %args );
@mirrors = sort { $a->rtt <=> $b->rtt } @mirrors;
@@ -34,12 +34,13 @@ CPAN::Mirrors - Get CPAN mirror information and select a fast one
package CPAN::Mirrors;
use strict;
use vars qw($VERSION $urllist $silent);
-$VERSION = "2.21";
+$VERSION = "2.27";
use Carp;
use FileHandle;
use Fcntl ":flock";
use Net::Ping ();
+use CPAN::Version;
=item new( LOCAL_FILE_NAME )
@@ -82,7 +83,7 @@ Return a list of continents based on those defined in F<MIRRORED.BY>.
sub continents {
my ($self) = @_;
- return sort keys %{$self->{geography}};
+ return sort keys %{$self->{geography} || {}};
}
=item countries( [CONTINENTS] )
@@ -99,7 +100,7 @@ sub countries {
@continents = $self->continents unless @continents;
my @countries;
for my $c (@continents) {
- push @countries, sort keys %{ $self->{geography}{$c} };
+ push @countries, sort keys %{ $self->{geography}{$c} || {} };
}
return @countries;
}
@@ -165,22 +166,25 @@ dynamic DNS to give a close mirror.
=cut
-sub default_mirror { 'http://www.cpan.org/' }
+sub default_mirror {
+ CPAN::Mirrored::By->new({ http => 'http://www.cpan.org/'});
+}
=item best_mirrors
C<best_mirrors> checks for the best mirrors based on the list of
continents you pass, or, without that, all continents, as defined
by C<CPAN::Mirrored::By>. It pings each mirror, up to the value of
-C<how_many>. In list context, it returns up to C<how_many> mirror.
+C<how_many>. In list context, it returns up to C<how_many> mirrors.
In scalar context, it returns the single best mirror.
Arguments
- how_many - the number of mirrors to return. Default: 1
- callback - a callback for find_best_continents
- verbose - true or false on all the whining and moaning. Default: false
- continents - an array ref of the continents to check
+ how_many - the number of mirrors to return. Default: 1
+ callback - a callback for find_best_continents
+ verbose - true or false on all the whining and moaning. Default: false
+ continents - an array ref of the continents to check
+ external_ping - if true, use external ping via Net::Ping::External. Default: false
If you don't specify the continents, C<best_mirrors> calls
C<find_best_continents> to get the list of continents to check.
@@ -188,6 +192,9 @@ C<find_best_continents> to get the list of continents to check.
If you don't have L<Net::Ping> v2.13 or later, needed for timings,
this returns the default mirror.
+C<external_ping> should be set and then C<Net::Ping::External> needs
+to be installed, if the local network has a transparent proxy.
+
=cut
sub best_mirrors {
@@ -197,10 +204,12 @@ sub best_mirrors {
my $verbose = defined $args{verbose} ? $args{verbose} : 0;
my $continents = $args{continents} || [];
$continents = [$continents] unless ref $continents;
+ $args{external_ping} = 0 unless defined $args{external_ping};
+ my $external_ping = $args{external_ping};
# Old Net::Ping did not do timings at all
my $min_version = '2.13';
- unless( Net::Ping->VERSION gt $min_version ) {
+ unless( CPAN::Version->vgt(Net::Ping->VERSION, $min_version) ) {
carp sprintf "Net::Ping version is %s (< %s). Returning %s",
Net::Ping->VERSION, $min_version, $self->default_mirror;
return $self->default_mirror;
@@ -211,9 +220,10 @@ sub best_mirrors {
if ( ! @$continents ) {
print "Searching for the best continent ...\n" if $verbose;
my @best_continents = $self->find_best_continents(
- seen => $seen,
- verbose => $verbose,
- callback => $callback,
+ seen => $seen,
+ verbose => $verbose,
+ callback => $callback,
+ external_ping => $external_ping,
);
# Only add enough continents to find enough mirrors
@@ -225,12 +235,18 @@ sub best_mirrors {
}
}
+ return $self->default_mirror unless @$continents;
print "Scanning " . join(", ", @$continents) . " ...\n" if $verbose;
my $trial_mirrors = $self->get_n_random_mirrors_by_continents( 3 * $how_many, $continents->[0] );
- my $timings = $self->get_mirrors_timings( $trial_mirrors, $seen, $callback );
- return [] unless @$timings;
+ my $timings = $self->get_mirrors_timings(
+ $trial_mirrors,
+ $seen,
+ $callback,
+ %args,
+ );
+ return $self->default_mirror unless @$timings;
$how_many = @$timings if $how_many > @$timings;
@@ -268,7 +284,7 @@ sub get_n_random_mirrors_by_continents {
\@long_list;
}
-=item get_mirrors_timings( MIRROR_LIST, SEEN, CALLBACK );
+=item get_mirrors_timings( MIRROR_LIST, SEEN, CALLBACK, %ARGS );
Pings the listed mirrors and returns a list of mirrors sorted in
ascending ping times.
@@ -286,7 +302,7 @@ ping.
=cut
sub get_mirrors_timings {
- my( $self, $mirror_list, $seen, $callback ) = @_;
+ my( $self, $mirror_list, $seen, $callback, %args ) = @_;
$seen = {} unless defined $seen;
croak "The mirror list argument must be an array reference"
@@ -302,8 +318,9 @@ sub get_mirrors_timings {
next unless eval{ $m->http };
if( $self->_try_a_ping( $seen, $m, ) ) {
- my $ping = $m->ping;
+ my $ping = $m->ping(%args);
next unless defined $ping;
+ # printf "m %s ping %s\n", $m, $ping;
push @$timings, $m;
$callback->( $m ) if $callback;
}
@@ -367,20 +384,21 @@ value.
sub find_best_continents {
my ($self, %args) = @_;
- $args{n} ||= 3;
+ $args{n} ||= 3;
$args{verbose} = 0 unless defined $args{verbose};
$args{seen} = {} unless defined $args{seen};
croak "The seen argument must be a hash reference"
unless ref $args{seen} eq ref {};
$args{ping_cache_limit} = 24 * 60 * 60
- unless defined $args{ping_cache_time};
+ unless defined $args{ping_cache_limit};
croak "callback must be a subroutine"
if( defined $args{callback} and ref $args{callback} ne ref sub {} );
my %medians;
CONT: for my $c ( $self->continents ) {
- print "Testing $c\n" if $args{verbose};
my @mirrors = $self->mirrors( $self->countries($c) );
+ printf "Testing %s (%d mirrors)\n", $c, scalar @mirrors
+ if $args{verbose};
next CONT unless @mirrors;
my $n = (@mirrors < $args{n}) ? @mirrors : $args{n};
@@ -389,11 +407,18 @@ sub find_best_continents {
my $tries = 0;
RANDOM: while ( @mirrors && @tests < $n && $tries++ < 15 ) {
my $m = splice( @mirrors, int(rand(@mirrors)), 1 );
- if( $self->_try_a_ping( $args{seen}, $m, $args{ping_cache_limit} ) ) {
- $self->get_mirrors_timings( [ $m ], $args{seen}, $args{callback} );
+ if( $self->_try_a_ping(
+ $args{seen}, $m, $args{ping_cache_limit}
+ )) {
+ $self->get_mirrors_timings(
+ [ $m ],
+ $args{seen},
+ $args{callback},
+ %args,
+ );
next RANDOM unless defined $args{seen}{$m->hostname}->rtt;
}
- printf "\t%s -> %0.2f ms\n",
+ printf "(%s -> %0.2f ms)",
$m->hostname,
join ' ', 1000 * $args{seen}{$m->hostname}->rtt
if $args{verbose};
@@ -409,8 +434,12 @@ sub find_best_continents {
if ( $args{verbose} ) {
print "Median result by continent:\n";
- for my $c ( @best_cont ) {
- printf( " %4d ms %s\n", int($medians{$c}*1000+.5), $c );
+ if ( @best_cont ) {
+ for my $c ( @best_cont ) {
+ printf( " %7.2f ms %s\n", $medians{$c}*1000, $c );
+ }
+ } else {
+ print " **** No results found ****\n"
}
}
@@ -421,12 +450,14 @@ sub find_best_continents {
sub _try_a_ping {
my ($self, $seen, $mirror, $ping_cache_limit ) = @_;
- ( ! exists $seen->{$mirror->hostname} )
+ ( ! exists $seen->{$mirror->hostname}
or
- (
! defined $seen->{$mirror->hostname}->rtt
- or
- time - $seen->{$mirror->hostname}->rtt > $ping_cache_limit
+ or
+ ! defined $ping_cache_limit
+ or
+ time - $seen->{$mirror->hostname}->ping_time
+ > $ping_cache_limit
)
}
@@ -445,7 +476,13 @@ sub _get_median_ping_time {
}
};
- printf "\t-->median time: %0.2f ms\n", $median * 1000 if $verbose;
+ if ($verbose){
+ if ($median) {
+ printf " => median time: %.2f ms\n", $median * 1000
+ } else {
+ printf " => **** no median time ****\n";
+ }
+ }
return $median;
}
@@ -546,9 +583,17 @@ sub url {
}
sub ping {
- my $self = shift;
+ my($self, %args) = @_;
- my $ping = Net::Ping->new($^O eq 'VMS' ? 'icmp' : 'tcp', 1);
+ my $external_ping = $args{external_ping};
+ if ($external_ping) {
+ eval { require Net::Ping::External }
+ or die "Net::Ping::External required to use external ping command";
+ }
+ my $ping = Net::Ping->new(
+ $external_ping ? 'external' : $^O eq 'VMS' ? 'icmp' : 'tcp',
+ 1
+ );
my ($proto) = $self->url =~ m{^([^:]+)};
my $port = $proto eq 'http' ? 80 : 21;
return unless $port;
@@ -561,7 +606,11 @@ sub ping {
}
$ping->hires(1) if $ping->can('hires');
- my ($alive,$rtt) = $ping->ping($self->hostname);
+ my ($alive,$rtt) = eval { $ping->ping($self->hostname); };
+ my $verbose = $args{verbose};
+ if ($verbose && !$alive) {
+ printf "(host %s not alive)", $self->hostname;
+ }
$self->{rtt} = $alive ? $rtt : undef;
$self->{ping_time} = time;
diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Queue.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Queue.pm
index 8027d22d3b2..259e47e05f7 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Queue.pm
+++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Queue.pm
@@ -72,7 +72,7 @@ package CPAN::Queue;
# in CPAN::Distribution::rematein.
use vars qw{ @All $VERSION };
-$VERSION = "5.5002";
+$VERSION = "5.5003";
# CPAN::Queue::queue_item ;
sub queue_item {
@@ -207,6 +207,17 @@ sub reqtype_of {
return $best;
}
+sub iterator {
+ my $i = 0;
+ return sub {
+ until ($All[$i] || $i > $#All) {
+ $i++;
+ }
+ return if $i > $#All;
+ return $All[$i++]
+ };
+}
+
1;
__END__
diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Shell.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Shell.pm
index b5d88924df9..4140fb8af23 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Shell.pm
+++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Shell.pm
@@ -47,7 +47,7 @@ use vars qw(
"CPAN/Tarzip.pm",
"CPAN/Version.pm",
);
-$VERSION = "5.5008";
+$VERSION = "5.5009";
# record the initial timestamp for reload.
$reload = { map {$INC{$_} ? ($_,(stat $INC{$_})[9]) : ()} @relo };
@CPAN::Shell::ISA = qw(CPAN::Debug);
@@ -1611,9 +1611,10 @@ sub mydie {
# sub CPAN::Shell::colorable_makemaker_prompt ;
sub colorable_makemaker_prompt {
- my($foo,$bar) = @_;
+ my($foo,$bar,$ornament) = @_;
+ $ornament ||= "colorize_print";
if (CPAN::Shell->colorize_output) {
- my $ornament = $CPAN::Config->{colorize_print}||'bold blue on_white';
+ my $ornament = $CPAN::Config->{$ornament}||'bold blue on_white';
my $color_on = eval { Term::ANSIColor::color($ornament); } || "";
print $color_on;
}
@@ -1867,7 +1868,7 @@ to find objects with matching identifiers.
}
}
if (UNIVERSAL::can($obj, 'called_for')) {
- $obj->called_for($s);
+ $obj->called_for($s) unless $obj->called_for;
}
CPAN->debug(qq{pragma[@pragma]meth[$meth]}.
qq{ID[$obj->{ID}]}) if $CPAN::DEBUG;
diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Tarzip.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Tarzip.pm
index f585a01bf72..6517cb8fd72 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Tarzip.pm
+++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Tarzip.pm
@@ -4,7 +4,7 @@ use strict;
use vars qw($VERSION @ISA $BUGHUNTING);
use CPAN::Debug;
use File::Basename qw(basename);
-$VERSION = "5.5012";
+$VERSION = "5.5013";
# module is internal to CPAN.pm
@ISA = qw(CPAN::Debug); ## no critic
@@ -41,6 +41,11 @@ CPAN shell prompt to register it as external program.
bless $me, $class;
}
+sub _zlib_ok () {
+ $CPAN::META->has_inst("Compress::Zlib") or return;
+ Compress::Zlib->can('gzopen');
+}
+
sub _my_which {
my($what) = @_;
if ($CPAN::Config->{$what}) {
@@ -66,7 +71,7 @@ sub _my_which {
sub gzip {
my($self,$read) = @_;
my $write = $self->{FILE};
- if ($CPAN::META->has_inst("Compress::Zlib")) {
+ if (_zlib_ok) {
my($buffer,$fhw);
$fhw = FileHandle->new($read)
or $CPAN::Frontend->mydie("Could not open $read: $!");
@@ -89,7 +94,7 @@ sub gzip {
sub gunzip {
my($self,$write) = @_;
my $read = $self->{FILE};
- if ($CPAN::META->has_inst("Compress::Zlib")) {
+ if (_zlib_ok) {
my($buffer,$fhw);
$fhw = FileHandle->new(">$write")
or $CPAN::Frontend->mydie("Could not open >$write: $!");
@@ -120,7 +125,7 @@ sub gtest {
my($buffer,$len);
$len = 0;
my $gz = Compress::Bzip2::bzopen($read, "rb")
- or $CPAN::Frontend->mydie(sprintf("Cannot gzopen %s: %s\n",
+ or $CPAN::Frontend->mydie(sprintf("Cannot bzopen %s: %s\n",
$read,
$Compress::Bzip2::bzerrno));
while ($gz->bzread($buffer) > 0 ) {
@@ -135,7 +140,7 @@ sub gtest {
}
$gz->gzclose();
CPAN->debug("err[$err]success[$success]") if $CPAN::DEBUG;
- } elsif ( $read=~/\.(?:gz|tgz)$/ && $CPAN::META->has_inst("Compress::Zlib") ) {
+ } elsif ( $read=~/\.(?:gz|tgz)$/ && _zlib_ok ) {
# After I had reread the documentation in zlib.h, I discovered that
# uncompressed files do not lead to an gzerror (anymore?).
my($buffer,$len);
@@ -183,7 +188,7 @@ sub TIEHANDLE {
$CPAN::Frontend->mydie("Could not bzopen $file");
$self->{GZ} = $gz;
$class->debug("via Compress::Bzip2");
- } elsif ($file =~/\.(?:gz|tgz)$/ && $CPAN::META->has_inst("Compress::Zlib")) {
+ } elsif ($file =~/\.(?:gz|tgz)$/ && _zlib_ok) {
my $gz = Compress::Zlib::gzopen($file,"rb") or
$CPAN::Frontend->mydie("Could not gzopen $file");
$self->{GZ} = $gz;
@@ -260,7 +265,7 @@ sub untar {
} elsif (
$CPAN::META->has_usable("Archive::Tar")
&&
- $CPAN::META->has_inst("Compress::Zlib") ) {
+ _zlib_ok ) {
my $prefer_external_tar = $CPAN::Config->{prefer_external_tar};
unless (defined $prefer_external_tar) {
if ($^O =~ /(MSWin32|solaris)/) {
@@ -294,7 +299,7 @@ END_WARN
$foundAT = "nothing";
}
my $foundCZ;
- if ($CPAN::META->has_inst("Compress::Zlib")) {
+ if (_zlib_ok) {
$foundCZ = sprintf "'%s'", "Compress::Zlib::"->VERSION;
} elsif ($foundAT) {
$foundCZ = "nothing";
diff --git a/gnu/usr.bin/perl/cpan/CPAN/scripts/cpan b/gnu/usr.bin/perl/cpan/CPAN/scripts/cpan
index 0041b8ab203..4e900b00547 100644
--- a/gnu/usr.bin/perl/cpan/CPAN/scripts/cpan
+++ b/gnu/usr.bin/perl/cpan/CPAN/scripts/cpan
@@ -4,7 +4,12 @@ BEGIN { pop @INC if $INC[-1] eq '.' }
use strict;
use vars qw($VERSION);
-use App::Cpan '1.64';
+use App::Cpan;
+use CPAN::Version;
+my $minver = '1.64';
+if ( CPAN::Version->vlt($App::Cpan::VERSION, $minver) ) {
+ warn "WARNING: your version of App::Cpan is $App::Cpan::VERSION while we would expect at least $minver";
+}
$VERSION = '1.64';
my $rc = App::Cpan->run( @ARGV );
diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c
index aaf1b4005b0..137ba9f7d5d 100644
--- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c
+++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c
@@ -102,12 +102,16 @@ static
void* default_bzalloc ( void* opaque, Int32 items, Int32 size )
{
void* v = malloc ( items * size );
+ ((void)opaque); /* Silence unused parameter warning */
+
return v;
}
static
void default_bzfree ( void* opaque, void* addr )
{
+ ((void)opaque); /* Silence unused parameter warning */
+
if (addr != NULL) free ( addr );
}
diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/compress.c b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/compress.c
index 5dfa00231b0..84e1574c914 100644
--- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/compress.c
+++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/compress.c
@@ -258,6 +258,7 @@ void sendMTFValues ( EState* s )
UInt16* mtfv = s->mtfv;
+ ((void)nBytes); /* Silence variable ‘nBytes’ set but not used warning */
if (s->verbosity >= 3)
VPrintf3( " %d in block, %d after MTF & 1-2 coding, "
"%d+2 syms in use\n",
diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/decompress.c b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/decompress.c
index 5afd6515788..1a01f1d9f2f 100644
--- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/decompress.c
+++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/decompress.c
@@ -41,6 +41,7 @@ void makeMaps_d ( DState* s )
{ retVal = rrr; goto save_state_and_return; };
#define GET_BITS(lll,vvv,nnn) \
+ /* FALLTHROUGH */ \
case lll: s->state = lll; \
while (True) { \
if (s->bsLive >= nnn) { \
diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm
index ce2ac2a398b..2aa14188d7e 100644
--- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm
+++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm
@@ -11,7 +11,7 @@ use Carp ;
use bytes ;
our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD);
-$VERSION = '2.089';
+$VERSION = '2.093';
$XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/private/MakeUtil.pm b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/private/MakeUtil.pm
index 037782b9498..12fa26fd05f 100644
--- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/private/MakeUtil.pm
+++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/private/MakeUtil.pm
@@ -35,8 +35,7 @@ sub MY::libscan
my $path = shift;
return undef
- if $path =~ /^(?:RCS|CVS|SCCS|\.svn|_darcs)$/ ||
- $path =~ /(~|\.bak|_bak)$/ ||
+ if $path =~ /(~|\.bak|_bak)$/ ||
$path =~ /\..*\.sw(o|p)$/ ||
$path =~ /\B\.svn\b/;
diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/t/000prereq.t b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/t/000prereq.t
index 8f66d402d0c..c390e5529d8 100755
--- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/t/000prereq.t
+++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/t/000prereq.t
@@ -19,7 +19,7 @@ BEGIN
if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
- my $VERSION = '2.089';
+ my $VERSION = '2.093';
my @NAMES = qw(
);
diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm
index 4c369738981..cf7126b4238 100644
--- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm
+++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm
@@ -10,7 +10,7 @@ use warnings ;
use bytes ;
our ($VERSION, $XS_VERSION, @ISA, @EXPORT, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD, %DEFLATE_CONSTANTS, @DEFLATE_CONSTANTS);
-$VERSION = '2.084';
+$VERSION = '2.093';
$XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
@@ -1557,6 +1557,12 @@ C<IO::Compress::RawDeflate>.
All the I<zlib> constants are automatically imported when you make use
of I<Compress::Raw::Zlib>.
+=head1 SUPPORT
+
+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>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/private/MakeUtil.pm b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/private/MakeUtil.pm
index 037782b9498..12fa26fd05f 100644
--- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/private/MakeUtil.pm
+++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/private/MakeUtil.pm
@@ -35,8 +35,7 @@ sub MY::libscan
my $path = shift;
return undef
- if $path =~ /^(?:RCS|CVS|SCCS|\.svn|_darcs)$/ ||
- $path =~ /(~|\.bak|_bak)$/ ||
+ if $path =~ /(~|\.bak|_bak)$/ ||
$path =~ /\..*\.sw(o|p)$/ ||
$path =~ /\B\.svn\b/;
diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c
index a74194f86f8..52c648fa1bb 100644
--- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c
+++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c
@@ -190,8 +190,11 @@ local const config configuration_table[10] = {
* prev[] will be initialized on the fly.
*/
#define CLEAR_HASH(s) \
- s->head[s->hash_size-1] = NIL; \
- zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+ do { \
+ s->head[s->hash_size-1] = NIL; \
+ zmemzero((Bytef *)s->head, \
+ (unsigned)(s->hash_size-1)*sizeof(*s->head)); \
+ } while (0)
/* ===========================================================================
* Slide the hash table when sliding the window down (could be avoided with 32
diff --git a/gnu/usr.bin/perl/cpan/DB_File/DB_File.pm b/gnu/usr.bin/perl/cpan/DB_File/DB_File.pm
index 6ca1592aadc..a732ff41e09 100644
--- a/gnu/usr.bin/perl/cpan/DB_File/DB_File.pm
+++ b/gnu/usr.bin/perl/cpan/DB_File/DB_File.pm
@@ -2,7 +2,7 @@
#
# Written by Paul Marquess (pmqs@cpan.org)
#
-# Copyright (c) 1995-2018 Paul Marquess. All rights reserved.
+# Copyright (c) 1995-2020 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.
@@ -31,14 +31,14 @@ sub TIEHASH
my $pkg = shift ;
bless { VALID => {
- bsize => 1,
- ffactor => 1,
- nelem => 1,
- cachesize => 1,
- hash => 2,
- lorder => 1,
- },
- GOT => {}
+ bsize => 1,
+ ffactor => 1,
+ nelem => 1,
+ cachesize => 1,
+ hash => 2,
+ lorder => 1,
+ },
+ GOT => {}
}, $pkg ;
}
@@ -65,8 +65,8 @@ sub STORE
if ( $type )
{
- croak "Key '$key' not associated with a code reference"
- if $type == 2 && !ref $value && ref $value ne 'CODE';
+ croak "Key '$key' not associated with a code reference"
+ if $type == 2 && !ref $value && ref $value ne 'CODE';
$self->{GOT}{$key} = $value ;
return ;
}
@@ -122,9 +122,9 @@ sub TIEHASH
my $pkg = shift ;
bless { VALID => { map {$_, 1}
- qw( bval cachesize psize flags lorder reclen bfname )
- },
- GOT => {},
+ qw( bval cachesize psize flags lorder reclen bfname )
+ },
+ GOT => {},
}, $pkg ;
}
@@ -140,16 +140,16 @@ sub TIEHASH
my $pkg = shift ;
bless { VALID => {
- flags => 1,
- cachesize => 1,
- maxkeypage => 1,
- minkeypage => 1,
- psize => 1,
- compare => 2,
- prefix => 2,
- lorder => 1,
- },
- GOT => {},
+ flags => 1,
+ cachesize => 1,
+ maxkeypage => 1,
+ minkeypage => 1,
+ psize => 1,
+ compare => 2,
+ prefix => 2,
+ lorder => 1,
+ },
+ GOT => {},
}, $pkg ;
}
@@ -165,7 +165,7 @@ use Carp;
# Module not thread safe, so don't clone
sub CLONE_SKIP { 1 }
-$VERSION = "1.843" ;
+$VERSION = "1.853" ;
$VERSION = eval $VERSION; # needed for dev releases
{
@@ -203,34 +203,34 @@ push @ISA, qw(Tie::Hash Exporter);
@EXPORT = qw(
$DB_BTREE $DB_HASH $DB_RECNO
- BTREEMAGIC
- BTREEVERSION
- DB_LOCK
- DB_SHMEM
- DB_TXN
- HASHMAGIC
- HASHVERSION
- MAX_PAGE_NUMBER
- MAX_PAGE_OFFSET
- MAX_REC_NUMBER
- RET_ERROR
- RET_SPECIAL
- RET_SUCCESS
- R_CURSOR
- R_DUP
- R_FIRST
- R_FIXEDLEN
- R_IAFTER
- R_IBEFORE
- R_LAST
- R_NEXT
- R_NOKEY
- R_NOOVERWRITE
- R_PREV
- R_RECNOSYNC
- R_SETCURSOR
- R_SNAPSHOT
- __R_UNUSED
+ BTREEMAGIC
+ BTREEVERSION
+ DB_LOCK
+ DB_SHMEM
+ DB_TXN
+ HASHMAGIC
+ HASHVERSION
+ MAX_PAGE_NUMBER
+ MAX_PAGE_OFFSET
+ MAX_REC_NUMBER
+ RET_ERROR
+ RET_SPECIAL
+ RET_SUCCESS
+ R_CURSOR
+ R_DUP
+ R_FIRST
+ R_FIXEDLEN
+ R_IAFTER
+ R_IBEFORE
+ R_LAST
+ R_NEXT
+ R_NOKEY
+ R_NOOVERWRITE
+ R_PREV
+ R_RECNOSYNC
+ R_SETCURSOR
+ R_SNAPSHOT
+ __R_UNUSED
);
@@ -268,7 +268,7 @@ sub tie_hash_or_array
if defined $arg[1] ;
$arg[4] = tied %{ $arg[4] }
- if @arg >= 5 && ref $arg[4] && $arg[4] =~ /=HASH/ && tied %{ $arg[4] } ;
+ if @arg >= 5 && ref $arg[4] && $arg[4] =~ /=HASH/ && tied %{ $arg[4] } ;
$arg[2] = O_CREAT()|O_RDWR() if @arg >=3 && ! defined $arg[2];
$arg[3] = 0666 if @arg >=4 && ! defined $arg[3];
@@ -280,10 +280,10 @@ sub tie_hash_or_array
}
if ($db_version > 1 and defined $arg[4] and $arg[4] =~ /RECNO/ and
- $arg[1] and ! -e $arg[1]) {
- open(FH, ">$arg[1]") or return undef ;
- close FH ;
- chmod $arg[3] ? $arg[3] : 0666 , $arg[1] ;
+ $arg[1] and ! -e $arg[1]) {
+ open(FH, ">$arg[1]") or return undef ;
+ close FH ;
+ chmod $arg[3] ? $arg[3] : 0666 , $arg[1] ;
}
DoTie_($tieHASH, @arg) ;
@@ -325,9 +325,9 @@ sub STORESIZE
my $current_length = $self->length() ;
if ($length < $current_length) {
- my $key ;
+ my $key ;
for ($key = $current_length - 1 ; $key >= $length ; -- $key)
- { $self->del($key) }
+ { $self->del($key) }
}
elsif ($length > $current_length) {
$self->put($length-1, "") ;
@@ -340,8 +340,8 @@ sub SPLICE
my $self = shift;
my $offset = shift;
if (not defined $offset) {
- warnings::warnif('uninitialized', 'Use of uninitialized value in splice');
- $offset = 0;
+ warnings::warnif('uninitialized', 'Use of uninitialized value in splice');
+ $offset = 0;
}
my $has_length = @_;
@@ -358,47 +358,47 @@ sub SPLICE
# the array.'
#
if ($offset < 0) {
- my $new_offset = $size + $offset;
- if ($new_offset < 0) {
- die "Modification of non-creatable array value attempted, "
- . "subscript $offset";
- }
- $offset = $new_offset;
+ my $new_offset = $size + $offset;
+ if ($new_offset < 0) {
+ die "Modification of non-creatable array value attempted, "
+ . "subscript $offset";
+ }
+ $offset = $new_offset;
}
if (not defined $length) {
- warnings::warnif('uninitialized', 'Use of uninitialized value in splice');
- $length = 0;
+ warnings::warnif('uninitialized', 'Use of uninitialized value in splice');
+ $length = 0;
}
if ($offset > $size) {
- $offset = $size;
- warnings::warnif('misc', 'splice() offset past end of array')
+ $offset = $size;
+ warnings::warnif('misc', 'splice() offset past end of array')
if $has_length ? $splice_end_array : $splice_end_array_no_length;
}
# 'If LENGTH is omitted, removes everything from OFFSET onward.'
if (not defined $length) {
- $length = $size - $offset;
+ $length = $size - $offset;
}
# 'If LENGTH is negative, leave that many elements off the end of
# the array.'
#
if ($length < 0) {
- $length = $size - $offset + $length;
-
- if ($length < 0) {
- # The user must have specified a length bigger than the
- # length of the array passed in. But perl's splice()
- # doesn't catch this, it just behaves as for length=0.
- #
- $length = 0;
- }
+ $length = $size - $offset + $length;
+
+ if ($length < 0) {
+ # The user must have specified a length bigger than the
+ # length of the array passed in. But perl's splice()
+ # doesn't catch this, it just behaves as for length=0.
+ #
+ $length = 0;
+ }
}
if ($length > $size - $offset) {
- $length = $size - $offset;
+ $length = $size - $offset;
}
# $num_elems holds the current number of elements in the database.
@@ -409,94 +409,94 @@ sub SPLICE
#
my @removed = ();
foreach (0 .. $length - 1) {
- my $old;
- my $status = $self->get($offset, $old);
- if ($status != 0) {
- my $msg = "error from Berkeley DB on get($offset, \$old)";
- if ($status == 1) {
- $msg .= ' (no such element?)';
- }
- else {
- $msg .= ": error status $status";
- if (defined $! and $! ne '') {
- $msg .= ", message $!";
- }
- }
- die $msg;
- }
- push @removed, $old;
-
- $status = $self->del($offset);
- if ($status != 0) {
- my $msg = "error from Berkeley DB on del($offset)";
- if ($status == 1) {
- $msg .= ' (no such element?)';
- }
- else {
- $msg .= ": error status $status";
- if (defined $! and $! ne '') {
- $msg .= ", message $!";
- }
- }
- die $msg;
- }
-
- -- $num_elems;
+ my $old;
+ my $status = $self->get($offset, $old);
+ if ($status != 0) {
+ my $msg = "error from Berkeley DB on get($offset, \$old)";
+ if ($status == 1) {
+ $msg .= ' (no such element?)';
+ }
+ else {
+ $msg .= ": error status $status";
+ if (defined $! and $! ne '') {
+ $msg .= ", message $!";
+ }
+ }
+ die $msg;
+ }
+ push @removed, $old;
+
+ $status = $self->del($offset);
+ if ($status != 0) {
+ my $msg = "error from Berkeley DB on del($offset)";
+ if ($status == 1) {
+ $msg .= ' (no such element?)';
+ }
+ else {
+ $msg .= ": error status $status";
+ if (defined $! and $! ne '') {
+ $msg .= ", message $!";
+ }
+ }
+ die $msg;
+ }
+
+ -- $num_elems;
}
# ...'and replaces them with the elements of LIST, if any.'
my $pos = $offset;
while (defined (my $elem = shift @list)) {
- my $old_pos = $pos;
- my $status;
- if ($pos >= $num_elems) {
- $status = $self->put($pos, $elem);
- }
- else {
- $status = $self->put($pos, $elem, $self->R_IBEFORE);
- }
-
- if ($status != 0) {
- my $msg = "error from Berkeley DB on put($pos, $elem, ...)";
- if ($status == 1) {
- $msg .= ' (no such element?)';
- }
- else {
- $msg .= ", error status $status";
- if (defined $! and $! ne '') {
- $msg .= ", message $!";
- }
- }
- die $msg;
- }
-
- die "pos unexpectedly changed from $old_pos to $pos with R_IBEFORE"
- if $old_pos != $pos;
-
- ++ $pos;
- ++ $num_elems;
+ my $old_pos = $pos;
+ my $status;
+ if ($pos >= $num_elems) {
+ $status = $self->put($pos, $elem);
+ }
+ else {
+ $status = $self->put($pos, $elem, $self->R_IBEFORE);
+ }
+
+ if ($status != 0) {
+ my $msg = "error from Berkeley DB on put($pos, $elem, ...)";
+ if ($status == 1) {
+ $msg .= ' (no such element?)';
+ }
+ else {
+ $msg .= ", error status $status";
+ if (defined $! and $! ne '') {
+ $msg .= ", message $!";
+ }
+ }
+ die $msg;
+ }
+
+ die "pos unexpectedly changed from $old_pos to $pos with R_IBEFORE"
+ if $old_pos != $pos;
+
+ ++ $pos;
+ ++ $num_elems;
}
if (wantarray) {
- # 'In list context, returns the elements removed from the
- # array.'
- #
- return @removed;
+ # 'In list context, returns the elements removed from the
+ # array.'
+ #
+ return @removed;
}
elsif (defined wantarray and not wantarray) {
- # 'In scalar context, returns the last element removed, or
- # undef if no elements are removed.'
- #
- if (@removed) {
- my $last = pop @removed;
- return "$last";
- }
- else {
- return undef;
- }
+ # 'In scalar context, returns the last element removed, or
+ # undef if no elements are removed.'
+ #
+ if (@removed) {
+ my $last = pop @removed;
+ return "$last";
+ }
+ else {
+ return undef;
+ }
}
elsif (not defined wantarray) {
- # Void context
+ # Void context
}
else { die }
}
@@ -543,11 +543,11 @@ sub get_dup
my $db = shift ;
my $key = shift ;
- my $flag = shift ;
- my $value = 0 ;
+ my $flag = shift ;
+ my $value = 0 ;
my $origkey = $key ;
my $wantarray = wantarray ;
- my %values = () ;
+ my %values = () ;
my @values = () ;
my $counter = 0 ;
my $status = 0 ;
@@ -555,16 +555,16 @@ sub get_dup
# iterate through the database until either EOF ($status == 0)
# or a different key is encountered ($key ne $origkey).
for ($status = $db->seq($key, $value, R_CURSOR()) ;
- $status == 0 and $key eq $origkey ;
+ $status == 0 and $key eq $origkey ;
$status = $db->seq($key, $value, R_NEXT()) ) {
# save the value or count number of matches
if ($wantarray) {
- if ($flag)
+ if ($flag)
{ ++ $values{$value} }
- else
+ else
{ push (@values, $value) }
- }
+ }
else
{ ++ $counter }
@@ -692,7 +692,7 @@ like version 1. This feature allows B<DB_File> scripts that were built
with version 1 to be migrated to version 2 or greater without any changes.
If you want to make use of the new features available in Berkeley DB
-2.x or greater, use the Perl module B<BerkeleyDB> instead.
+2.x or greater, use the Perl module L<BerkeleyDB|https://metacpan.org/pod/BerkeleyDB> instead.
B<Note:> The database file format has changed multiple times in Berkeley
DB version 2, 3 and 4. If you cannot recreate your databases, you
@@ -753,7 +753,7 @@ C<ffactor>, C<hash>, C<lorder> and C<nelem>.
To change one of these elements, just assign to it like this:
- $DB_HASH->{'cachesize'} = 10000 ;
+ $DB_HASH->{'cachesize'} = 10000 ;
The three predefined variables $DB_HASH, $DB_BTREE and $DB_RECNO are
usually adequate for most applications. If you do need to create extra
@@ -809,12 +809,12 @@ to Perl subs. Below are templates for each of the subs:
my ($data) = @_ ;
...
# return the hash value for $data
- return $hash ;
+ return $hash ;
}
sub compare
{
- my ($key, $key2) = @_ ;
+ my ($key, $key2) = @_ ;
...
# return 0 if $key1 eq $key2
# -1 if $key1 lt $key2
@@ -824,7 +824,7 @@ to Perl subs. Below are templates for each of the subs:
sub prefix
{
- my ($key, $key2) = @_ ;
+ my ($key, $key2) = @_ ;
...
# return number of bytes of $key2 which are
# necessary to determine that it is greater than $key1
@@ -1041,7 +1041,7 @@ code:
$DB_BTREE->{'flags'} = R_DUP ;
tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE
- or die "Cannot open $filename: $!\n";
+ or die "Cannot open $filename: $!\n";
# Add some key/value pairs to the file
$h{'Wall'} = 'Larry' ;
@@ -1096,7 +1096,7 @@ Here is the script above rewritten using the C<seq> API method.
$DB_BTREE->{'flags'} = R_DUP ;
$x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE
- or die "Cannot open $filename: $!\n";
+ or die "Cannot open $filename: $!\n";
# Add some key/value pairs to the file
$h{'Wall'} = 'Larry' ;
@@ -1167,7 +1167,7 @@ this:
$DB_BTREE->{'flags'} = R_DUP ;
$x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE
- or die "Cannot open $filename: $!\n";
+ or die "Cannot open $filename: $!\n";
my $cnt = $x->get_dup("Wall") ;
print "Wall occurred $cnt times\n" ;
@@ -1177,13 +1177,13 @@ this:
print "There are $hash{'Brick'} Brick Walls\n" ;
my @list = sort $x->get_dup("Wall") ;
- print "Wall => [@list]\n" ;
+ print "Wall => [@list]\n" ;
@list = $x->get_dup("Smith") ;
- print "Smith => [@list]\n" ;
+ print "Smith => [@list]\n" ;
@list = $x->get_dup("Dog") ;
- print "Dog => [@list]\n" ;
+ print "Dog => [@list]\n" ;
and it will print:
@@ -1191,9 +1191,9 @@ and it will print:
Wall occurred 3 times
Larry is there
There are 2 Brick Walls
- Wall => [Brick Brick Larry]
- Smith => [John]
- Dog => []
+ Wall => [Brick Brick Larry]
+ Smith => [John]
+ Dog => []
=head2 The find_dup() Method
@@ -1217,7 +1217,7 @@ Assuming the database from the previous example:
$DB_BTREE->{'flags'} = R_DUP ;
$x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE
- or die "Cannot open $filename: $!\n";
+ or die "Cannot open $filename: $!\n";
$found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ;
print "Larry Wall is $found there\n" ;
@@ -1256,7 +1256,7 @@ Again assuming the existence of the C<tree> database
$DB_BTREE->{'flags'} = R_DUP ;
$x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE
- or die "Cannot open $filename: $!\n";
+ or die "Cannot open $filename: $!\n";
$x->del_dup("Wall", "Larry") ;
@@ -1321,10 +1321,10 @@ and print the first matching key/value pair given a partial key.
$key = $value = 0 ;
print "IN ORDER\n" ;
for ($st = $x->seq($key, $value, R_FIRST) ;
- $st == 0 ;
+ $st == 0 ;
$st = $x->seq($key, $value, R_NEXT) )
- { print "$key -> $value\n" }
+ { print "$key -> $value\n" }
print "\nPARTIAL MATCH\n" ;
@@ -1625,12 +1625,12 @@ Berkeley DB documentation.
To do this you need to store a copy of the object returned from the tie.
- $db = tie %hash, "DB_File", "filename" ;
+ $db = tie %hash, "DB_File", "filename" ;
Once you have done that, you can access the Berkeley DB API functions
as B<DB_File> methods directly like this:
- $db->put($key, $value, R_NOOVERWRITE) ;
+ $db->put($key, $value, R_NOOVERWRITE) ;
B<Important:> If you have saved a copy of the object returned from
C<tie>, the underlying database file will I<not> be closed until both
@@ -2012,11 +2012,11 @@ not be used.
=head2 Safe ways to lock a database
Starting with version 2.x, Berkeley DB has internal support for locking.
-The companion module to this one, B<BerkeleyDB>, provides an interface
+The companion module to this one, L<BerkeleyDB|https://metacpan.org/pod/BerkeleyDB>, provides an interface
to this locking functionality. If you are serious about locking
-Berkeley DB databases, I strongly recommend using B<BerkeleyDB>.
+Berkeley DB databases, I strongly recommend using L<BerkeleyDB|https://metacpan.org/pod/BerkeleyDB>.
-If using B<BerkeleyDB> isn't an option, there are a number of modules
+If using L<BerkeleyDB|https://metacpan.org/pod/BerkeleyDB> isn't an option, there are a number of modules
available on CPAN that can be used to implement locking. Each one
implements locking differently and has different goals in mind. It is
therefore worth knowing the difference, so that you can pick the right
@@ -2298,6 +2298,12 @@ version 1.85 of Berkeley DB.
I am sure there are bugs in the code. If you do find any, or can
suggest any enhancements, I would welcome your comments.
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/DB_File/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=DB_File>.
+
=head1 AVAILABILITY
B<DB_File> comes with the standard Perl source distribution. Look in
@@ -2307,11 +2313,11 @@ date, so the most recent version can always be found on CPAN (see
L<perlmodlib/CPAN> for details), in the directory
F<modules/by-module/DB_File>.
-This version of B<DB_File> will work with either version 1.x, 2.x or
-3.x of Berkeley DB, but is limited to the functionality provided by
-version 1.
+B<DB_File> is designed to work with any version of Berkeley DB, but is limited to the functionality provided by
+version 1. If you want to make use of the new features available in Berkeley DB
+2.x, or greater, use the Perl module L<BerkeleyDB|https://metacpan.org/pod/BerkeleyDB> instead.
-The official web site for Berkeley DB is F<http://www.oracle.com/technology/products/berkeley-db/db/index.html>.
+The official web site for Berkeley DB is L<http://www.oracle.com/technology/products/berkeley-db/db/index.html>.
All versions of Berkeley DB are available there.
Alternatively, Berkeley DB version 1 is available at your nearest CPAN
@@ -2319,7 +2325,7 @@ archive in F<src/misc/db.1.85.tar.gz>.
=head1 COPYRIGHT
-Copyright (c) 1995-2016 Paul Marquess. All rights reserved. This program
+Copyright (c) 1995-2020 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.
@@ -2328,7 +2334,7 @@ makes use of, namely Berkeley DB, is not. Berkeley DB has its own
copyright and its own license. Please take the time to read it.
Here are a few words taken from the Berkeley DB FAQ (at
-F<http://www.oracle.com/technology/products/berkeley-db/db/index.html>) regarding the license:
+L<http://www.oracle.com/technology/products/berkeley-db/db/index.html>) regarding the license:
Do I have to license DB to use it in Perl scripts?
diff --git a/gnu/usr.bin/perl/cpan/DB_File/DB_File.xs b/gnu/usr.bin/perl/cpan/DB_File/DB_File.xs
index 6e6e154ffd4..ab95369b25f 100644
--- a/gnu/usr.bin/perl/cpan/DB_File/DB_File.xs
+++ b/gnu/usr.bin/perl/cpan/DB_File/DB_File.xs
@@ -1,123 +1,123 @@
-/*
+/*
- DB_File.xs -- Perl 5 interface to Berkeley DB
+ DB_File.xs -- Perl 5 interface to Berkeley DB
Written by Paul Marquess <pmqs@cpan.org>
All comments/suggestions/problems are welcome
- Copyright (c) 1995-2018 Paul Marquess. All rights reserved.
+ Copyright (c) 1995-2020 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.
Changes:
- 0.1 - Initial Release
- 0.2 - No longer bombs out if dbopen returns an error.
- 0.3 - Added some support for multiple btree compares
- 1.0 - Complete support for multiple callbacks added.
- Fixed a problem with pushing a value onto an empty list.
- 1.01 - Fixed a SunOS core dump problem.
- The return value from TIEHASH wasn't set to NULL when
- dbopen returned an error.
- 1.02 - Use ALIAS to define TIEARRAY.
- Removed some redundant commented code.
- Merged OS2 code into the main distribution.
- Allow negative subscripts with RECNO interface.
- Changed the default flags to O_CREAT|O_RDWR
- 1.03 - Added EXISTS
- 1.04 - fixed a couple of bugs in hash_cb. Patches supplied by
- Dave Hammen, hammen@gothamcity.jsc.nasa.gov
- 1.05 - Added logic to allow prefix & hash types to be specified via
- Makefile.PL
- 1.06 - Minor namespace cleanup: Localized PrintBtree.
- 1.07 - Fixed bug with RECNO, where bval wasn't defaulting to "\n".
- 1.08 - No change to DB_File.xs
- 1.09 - Default mode for dbopen changed to 0666
- 1.10 - Fixed fd method so that it still returns -1 for
- in-memory files when db 1.86 is used.
- 1.11 - No change to DB_File.xs
- 1.12 - No change to DB_File.xs
- 1.13 - Tidied up a few casts.
- 1.14 - Made it illegal to tie an associative array to a RECNO
- database and an ordinary array to a HASH or BTREE database.
- 1.50 - Make work with both DB 1.x or DB 2.x
- 1.51 - Fixed a bug in mapping 1.x O_RDONLY flag to 2.x DB_RDONLY equivalent
- 1.52 - Patch from Gisle Aas <gisle@aas.no> to suppress "use of
- undefined value" warning with db_get and db_seq.
- 1.53 - Added DB_RENUMBER to flags for recno.
- 1.54 - Fixed bug in the fd method
- 1.55 - Fix for AIX from Jarkko Hietaniemi
- 1.56 - No change to DB_File.xs
- 1.57 - added the #undef op to allow building with Threads support.
- 1.58 - Fixed a problem with the use of sv_setpvn. When the
- size is specified as 0, it does a strlen on the data.
- This was ok for DB 1.x, but isn't for DB 2.x.
- 1.59 - No change to DB_File.xs
- 1.60 - Some code tidy up
- 1.61 - added flagSet macro for DB 2.5.x
- fixed typo in O_RDONLY test.
- 1.62 - No change to DB_File.xs
- 1.63 - Fix to alllow DB 2.6.x to build.
- 1.64 - Tidied up the 1.x to 2.x flags mapping code.
- Added a patch from Mark Kettenis <kettenis@wins.uva.nl>
- to fix a flag mapping problem with O_RDONLY on the Hurd
- 1.65 - Fixed a bug in the PUSH logic.
- Added BOOT check that using 2.3.4 or greater
- 1.66 - Added DBM filter code
- 1.67 - Backed off the use of newSVpvn.
- Fixed DBM Filter code for Perl 5.004.
- Fixed a small memory leak in the filter code.
- 1.68 - fixed backward compatibility bug with R_IAFTER & R_IBEFORE
- merged in the 5.005_58 changes
- 1.69 - fixed a bug in push -- DB_APPEND wasn't working properly.
- Fixed the R_SETCURSOR bug introduced in 1.68
- Added a new Perl variable $DB_File::db_ver
- 1.70 - Initialise $DB_File::db_ver and $DB_File::db_version with
- GV_ADD|GV_ADDMULT -- bug spotted by Nick Ing-Simmons.
- Added a BOOT check to test for equivalent versions of db.h &
- libdb.a/so.
- 1.71 - Support for Berkeley DB version 3.
- Support for Berkeley DB 2/3's backward compatibility mode.
- Rewrote push
- 1.72 - No change to DB_File.xs
- 1.73 - No change to DB_File.xs
- 1.74 - A call to open needed parenthesised to stop it clashing
- with a win32 macro.
- Added Perl core patches 7703 & 7801.
- 1.75 - Fixed Perl core patch 7703.
- Added support to allow DB_File to be built with
- Berkeley DB 3.2 -- btree_compare, btree_prefix and hash_cb
- needed to be changed.
- 1.76 - No change to DB_File.xs
- 1.77 - Tidied up a few types used in calling newSVpvn.
- 1.78 - Core patch 10335, 10372, 10534, 10549, 11051 included.
- 1.79 - NEXTKEY ignores the input key.
- Added lots of casts
- 1.800 - Moved backward compatibility code into ppport.h.
- Use the new constants code.
- 1.801 - No change to DB_File.xs
- 1.802 - No change to DB_File.xs
- 1.803 - FETCH, STORE & DELETE don't map the flags parameter
- into the equivalent Berkeley DB function anymore.
- 1.804 - no change.
- 1.805 - recursion detection added to the callbacks
- Support for 4.1.X added.
- Filter code can now cope with read-only $_
- 1.806 - recursion detection beefed up.
- 1.807 - no change
- 1.808 - leak fixed in ParseOpenInfo
- 1.809 - no change
- 1.810 - no change
- 1.811 - no change
- 1.812 - no change
- 1.813 - no change
- 1.814 - no change
- 1.814 - C++ casting fixes
+ 0.1 - Initial Release
+ 0.2 - No longer bombs out if dbopen returns an error.
+ 0.3 - Added some support for multiple btree compares
+ 1.0 - Complete support for multiple callbacks added.
+ Fixed a problem with pushing a value onto an empty list.
+ 1.01 - Fixed a SunOS core dump problem.
+ The return value from TIEHASH wasn't set to NULL when
+ dbopen returned an error.
+ 1.02 - Use ALIAS to define TIEARRAY.
+ Removed some redundant commented code.
+ Merged OS2 code into the main distribution.
+ Allow negative subscripts with RECNO interface.
+ Changed the default flags to O_CREAT|O_RDWR
+ 1.03 - Added EXISTS
+ 1.04 - fixed a couple of bugs in hash_cb. Patches supplied by
+ Dave Hammen, hammen@gothamcity.jsc.nasa.gov
+ 1.05 - Added logic to allow prefix & hash types to be specified via
+ Makefile.PL
+ 1.06 - Minor namespace cleanup: Localized PrintBtree.
+ 1.07 - Fixed bug with RECNO, where bval wasn't defaulting to "\n".
+ 1.08 - No change to DB_File.xs
+ 1.09 - Default mode for dbopen changed to 0666
+ 1.10 - Fixed fd method so that it still returns -1 for
+ in-memory files when db 1.86 is used.
+ 1.11 - No change to DB_File.xs
+ 1.12 - No change to DB_File.xs
+ 1.13 - Tidied up a few casts.
+ 1.14 - Made it illegal to tie an associative array to a RECNO
+ database and an ordinary array to a HASH or BTREE database.
+ 1.50 - Make work with both DB 1.x or DB 2.x
+ 1.51 - Fixed a bug in mapping 1.x O_RDONLY flag to 2.x DB_RDONLY equivalent
+ 1.52 - Patch from Gisle Aas <gisle@aas.no> to suppress "use of
+ undefined value" warning with db_get and db_seq.
+ 1.53 - Added DB_RENUMBER to flags for recno.
+ 1.54 - Fixed bug in the fd method
+ 1.55 - Fix for AIX from Jarkko Hietaniemi
+ 1.56 - No change to DB_File.xs
+ 1.57 - added the #undef op to allow building with Threads support.
+ 1.58 - Fixed a problem with the use of sv_setpvn. When the
+ size is specified as 0, it does a strlen on the data.
+ This was ok for DB 1.x, but isn't for DB 2.x.
+ 1.59 - No change to DB_File.xs
+ 1.60 - Some code tidy up
+ 1.61 - added flagSet macro for DB 2.5.x
+ fixed typo in O_RDONLY test.
+ 1.62 - No change to DB_File.xs
+ 1.63 - Fix to alllow DB 2.6.x to build.
+ 1.64 - Tidied up the 1.x to 2.x flags mapping code.
+ Added a patch from Mark Kettenis <kettenis@wins.uva.nl>
+ to fix a flag mapping problem with O_RDONLY on the Hurd
+ 1.65 - Fixed a bug in the PUSH logic.
+ Added BOOT check that using 2.3.4 or greater
+ 1.66 - Added DBM filter code
+ 1.67 - Backed off the use of newSVpvn.
+ Fixed DBM Filter code for Perl 5.004.
+ Fixed a small memory leak in the filter code.
+ 1.68 - fixed backward compatibility bug with R_IAFTER & R_IBEFORE
+ merged in the 5.005_58 changes
+ 1.69 - fixed a bug in push -- DB_APPEND wasn't working properly.
+ Fixed the R_SETCURSOR bug introduced in 1.68
+ Added a new Perl variable $DB_File::db_ver
+ 1.70 - Initialise $DB_File::db_ver and $DB_File::db_version with
+ GV_ADD|GV_ADDMULT -- bug spotted by Nick Ing-Simmons.
+ Added a BOOT check to test for equivalent versions of db.h &
+ libdb.a/so.
+ 1.71 - Support for Berkeley DB version 3.
+ Support for Berkeley DB 2/3's backward compatibility mode.
+ Rewrote push
+ 1.72 - No change to DB_File.xs
+ 1.73 - No change to DB_File.xs
+ 1.74 - A call to open needed parenthesised to stop it clashing
+ with a win32 macro.
+ Added Perl core patches 7703 & 7801.
+ 1.75 - Fixed Perl core patch 7703.
+ Added support to allow DB_File to be built with
+ Berkeley DB 3.2 -- btree_compare, btree_prefix and hash_cb
+ needed to be changed.
+ 1.76 - No change to DB_File.xs
+ 1.77 - Tidied up a few types used in calling newSVpvn.
+ 1.78 - Core patch 10335, 10372, 10534, 10549, 11051 included.
+ 1.79 - NEXTKEY ignores the input key.
+ Added lots of casts
+ 1.800 - Moved backward compatibility code into ppport.h.
+ Use the new constants code.
+ 1.801 - No change to DB_File.xs
+ 1.802 - No change to DB_File.xs
+ 1.803 - FETCH, STORE & DELETE don't map the flags parameter
+ into the equivalent Berkeley DB function anymore.
+ 1.804 - no change.
+ 1.805 - recursion detection added to the callbacks
+ Support for 4.1.X added.
+ Filter code can now cope with read-only $_
+ 1.806 - recursion detection beefed up.
+ 1.807 - no change
+ 1.808 - leak fixed in ParseOpenInfo
+ 1.809 - no change
+ 1.810 - no change
+ 1.811 - no change
+ 1.812 - no change
+ 1.813 - no change
+ 1.814 - no change
+ 1.814 - C++ casting fixes
*/
#define PERL_NO_GET_CONTEXT
-#include "EXTERN.h"
+#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
@@ -178,10 +178,10 @@ int DB_File___unused() { return 0; }
/* Ditto for dXSARGS. */
# undef dXSARGS
-# define dXSARGS \
- dSP; dMARK; \
- I32 ax = mark - PL_stack_base + 1; \
- I32 items = sp - mark
+# define dXSARGS \
+ dSP; dMARK; \
+ I32 ax = mark - PL_stack_base + 1; \
+ I32 items = sp - mark
# endif
@@ -191,7 +191,7 @@ int DB_File___unused() { return 0; }
#endif /* Perl >= 5.7 */
-#include <fcntl.h>
+#include <fcntl.h>
/* #define TRACE */
@@ -202,7 +202,7 @@ int DB_File___unused() { return 0; }
#endif
-#define DBT_clear(x) Zero(&x, 1, DBT) ;
+#define DBT_clear(x) Zero(&x, 1, DBT) ;
#ifdef DB_VERSION_MAJOR
@@ -226,7 +226,7 @@ int DB_File___unused() { return 0; }
# define AT_LEAST_DB_4_3
#endif
-#if DB_VERSION_MAJOR >= 6
+#if DB_VERSION_MAJOR >= 6
# define AT_LEAST_DB_6_0
#endif
@@ -239,23 +239,23 @@ int DB_File___unused() { return 0; }
#ifdef DB_Prefix_t
# undef DB_Prefix_t
#endif
-#define DB_Prefix_t size_t
+#define DB_Prefix_t size_t
#ifdef DB_Hash_t
# undef DB_Hash_t
#endif
-#define DB_Hash_t u_int32_t
+#define DB_Hash_t u_int32_t
/* DBTYPE stays the same */
/* HASHINFO, RECNOINFO and BTREEINFO map to DB_INFO */
#if DB_VERSION_MAJOR == 2
- typedef DB_INFO INFO ;
+ typedef DB_INFO INFO ;
#else /* DB_VERSION_MAJOR > 2 */
-# define DB_FIXEDLEN (0x8000)
+# define DB_FIXEDLEN (0x8000)
#endif /* DB_VERSION_MAJOR == 2 */
-/* version 2 has db_recno_t in place of recno_t */
-typedef db_recno_t recno_t;
+/* version 2 has db_recno_t in place of recno_t */
+typedef db_recno_t recno_t;
#define R_CURSOR DB_SET_RANGE
@@ -268,53 +268,53 @@ typedef db_recno_t recno_t;
#define R_PREV DB_PREV
#if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 5
-# define R_SETCURSOR 0x800000
+# define R_SETCURSOR 0x800000
#else
-# define R_SETCURSOR (DB_OPFLAGS_MASK)
+# define R_SETCURSOR (DB_OPFLAGS_MASK)
#endif
#define R_RECNOSYNC 0
-#define R_FIXEDLEN DB_FIXEDLEN
-#define R_DUP DB_DUP
-
-
-#define db_HA_hash h_hash
-#define db_HA_ffactor h_ffactor
-#define db_HA_nelem h_nelem
-#define db_HA_bsize db_pagesize
-#define db_HA_cachesize db_cachesize
-#define db_HA_lorder db_lorder
-
-#define db_BT_compare bt_compare
-#define db_BT_prefix bt_prefix
-#define db_BT_flags flags
-#define db_BT_psize db_pagesize
-#define db_BT_cachesize db_cachesize
-#define db_BT_lorder db_lorder
+#define R_FIXEDLEN DB_FIXEDLEN
+#define R_DUP DB_DUP
+
+
+#define db_HA_hash h_hash
+#define db_HA_ffactor h_ffactor
+#define db_HA_nelem h_nelem
+#define db_HA_bsize db_pagesize
+#define db_HA_cachesize db_cachesize
+#define db_HA_lorder db_lorder
+
+#define db_BT_compare bt_compare
+#define db_BT_prefix bt_prefix
+#define db_BT_flags flags
+#define db_BT_psize db_pagesize
+#define db_BT_cachesize db_cachesize
+#define db_BT_lorder db_lorder
#define db_BT_maxkeypage
#define db_BT_minkeypage
-#define db_RE_reclen re_len
-#define db_RE_flags flags
-#define db_RE_bval re_pad
-#define db_RE_bfname re_source
-#define db_RE_psize db_pagesize
-#define db_RE_cachesize db_cachesize
-#define db_RE_lorder db_lorder
+#define db_RE_reclen re_len
+#define db_RE_flags flags
+#define db_RE_bval re_pad
+#define db_RE_bfname re_source
+#define db_RE_psize db_pagesize
+#define db_RE_cachesize db_cachesize
+#define db_RE_lorder db_lorder
-#define TXN NULL,
+#define TXN NULL,
-#define do_SEQ(db, key, value, flag) (db->cursor->c_get)(db->cursor, &key, &value, flag)
+#define do_SEQ(db, key, value, flag) (db->cursor->c_get)(db->cursor, &key, &value, flag)
-#define DBT_flags(x) x.flags = 0
-#define DB_flags(x, v) x |= v
+#define DBT_flags(x) x.flags = 0
+#define DB_flags(x, v) x |= v
#if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 5
-# define flagSet(flags, bitmask) ((flags) & (bitmask))
+# define flagSet(flags, bitmask) ((flags) & (bitmask))
#else
-# define flagSet(flags, bitmask) (((flags) & DB_OPFLAGS_MASK) == (u_int)(bitmask))
+# define flagSet(flags, bitmask) (((flags) & DB_OPFLAGS_MASK) == (u_int)(bitmask))
#endif
#else /* db version 1.x */
@@ -323,55 +323,55 @@ typedef db_recno_t recno_t;
#define BERKELEY_DB_1_OR_2
typedef union INFO {
- HASHINFO hash ;
- RECNOINFO recno ;
- BTREEINFO btree ;
+ HASHINFO hash ;
+ RECNOINFO recno ;
+ BTREEINFO btree ;
} INFO ;
-#ifdef mDB_Prefix_t
+#ifdef mDB_Prefix_t
# ifdef DB_Prefix_t
# undef DB_Prefix_t
# endif
-# define DB_Prefix_t mDB_Prefix_t
+# define DB_Prefix_t mDB_Prefix_t
#endif
#ifdef mDB_Hash_t
# ifdef DB_Hash_t
# undef DB_Hash_t
# endif
-# define DB_Hash_t mDB_Hash_t
-#endif
-
-#define db_HA_hash hash.hash
-#define db_HA_ffactor hash.ffactor
-#define db_HA_nelem hash.nelem
-#define db_HA_bsize hash.bsize
-#define db_HA_cachesize hash.cachesize
-#define db_HA_lorder hash.lorder
-
-#define db_BT_compare btree.compare
-#define db_BT_prefix btree.prefix
-#define db_BT_flags btree.flags
-#define db_BT_psize btree.psize
-#define db_BT_cachesize btree.cachesize
-#define db_BT_lorder btree.lorder
+# define DB_Hash_t mDB_Hash_t
+#endif
+
+#define db_HA_hash hash.hash
+#define db_HA_ffactor hash.ffactor
+#define db_HA_nelem hash.nelem
+#define db_HA_bsize hash.bsize
+#define db_HA_cachesize hash.cachesize
+#define db_HA_lorder hash.lorder
+
+#define db_BT_compare btree.compare
+#define db_BT_prefix btree.prefix
+#define db_BT_flags btree.flags
+#define db_BT_psize btree.psize
+#define db_BT_cachesize btree.cachesize
+#define db_BT_lorder btree.lorder
#define db_BT_maxkeypage btree.maxkeypage
#define db_BT_minkeypage btree.minkeypage
-#define db_RE_reclen recno.reclen
-#define db_RE_flags recno.flags
-#define db_RE_bval recno.bval
-#define db_RE_bfname recno.bfname
-#define db_RE_psize recno.psize
-#define db_RE_cachesize recno.cachesize
-#define db_RE_lorder recno.lorder
+#define db_RE_reclen recno.reclen
+#define db_RE_flags recno.flags
+#define db_RE_bval recno.bval
+#define db_RE_bfname recno.bfname
+#define db_RE_psize recno.psize
+#define db_RE_cachesize recno.cachesize
+#define db_RE_lorder recno.lorder
-#define TXN
+#define TXN
-#define do_SEQ(db, key, value, flag) (db->dbp->seq)(db->dbp, &key, &value, flag)
-#define DBT_flags(x)
-#define DB_flags(x, v)
+#define do_SEQ(db, key, value, flag) (db->dbp->seq)(db->dbp, &key, &value, flag)
+#define DBT_flags(x)
+#define DB_flags(x, v)
#define flagSet(flags, bitmask) ((flags) & (bitmask))
#endif /* db version 1 */
@@ -387,16 +387,16 @@ typedef union INFO {
#ifdef DB_VERSION_MAJOR
#define db_DESTROY(db) (!db->aborted && ( db->cursor->c_close(db->cursor),\
- (db->dbp->close)(db->dbp, 0) ))
-#define db_close(db) ((db->dbp)->close)(db->dbp, 0)
-#define db_del(db, key, flags) (flagSet(flags, R_CURSOR) \
- ? ((db->cursor)->c_del)(db->cursor, 0) \
- : ((db->dbp)->del)(db->dbp, NULL, &key, flags) )
+ (db->dbp->close)(db->dbp, 0) ))
+#define db_close(db) ((db->dbp)->close)(db->dbp, 0)
+#define db_del(db, key, flags) (flagSet(flags, R_CURSOR) \
+ ? ((db->cursor)->c_del)(db->cursor, 0) \
+ : ((db->dbp)->del)(db->dbp, NULL, &key, flags) )
#else /* ! DB_VERSION_MAJOR */
#define db_DESTROY(db) (!db->aborted && ((db->dbp)->close)(db->dbp))
-#define db_close(db) ((db->dbp)->close)(db->dbp)
+#define db_close(db) ((db->dbp)->close)(db->dbp)
#define db_del(db, key, flags) ((db->dbp)->del)(db->dbp, &key, flags)
#define db_put(db, key, value, flags) ((db->dbp)->put)(db->dbp, &key, &value, flags)
@@ -406,61 +406,77 @@ typedef union INFO {
#define db_seq(db, key, value, flags) do_SEQ(db, key, value, flags)
typedef struct {
- DBTYPE type ;
- DB * dbp ;
- SV * compare ;
- bool in_compare ;
- SV * prefix ;
- bool in_prefix ;
- SV * hash ;
- bool in_hash ;
- bool aborted ;
- int in_memory ;
+ DBTYPE type ;
+ DB * dbp ;
+ SV * compare ;
+ bool in_compare ;
+ SV * prefix ;
+ bool in_prefix ;
+ SV * hash ;
+ bool in_hash ;
+ bool aborted ;
+ int in_memory ;
#ifdef BERKELEY_DB_1_OR_2
- INFO info ;
-#endif
+ INFO info ;
+#endif
#ifdef DB_VERSION_MAJOR
- DBC * cursor ;
+ DBC * cursor ;
#endif
- SV * filter_fetch_key ;
- SV * filter_store_key ;
- SV * filter_fetch_value ;
- SV * filter_store_value ;
- int filtering ;
+ SV * filter_fetch_key ;
+ SV * filter_store_key ;
+ SV * filter_fetch_value ;
+ SV * filter_store_value ;
+ int filtering ;
- } DB_File_type;
+ } DB_File_type;
typedef DB_File_type * DB_File ;
typedef DBT DBTKEY ;
#define my_sv_setpvn(sv, d, s) sv_setpvn(sv, (s ? d : (const char *)""), s)
-#define OutputValue(arg, name) \
- { if (RETVAL == 0) { \
- SvGETMAGIC(arg) ; \
- my_sv_setpvn(arg, (const char *)name.data, name.size) ; \
- TAINT; \
- SvTAINTED_on(arg); \
- SvUTF8_off(arg); \
- DBM_ckFilter(arg, filter_fetch_value,"filter_fetch_value") ; \
- } \
- }
-
-#define OutputKey(arg, name) \
- { if (RETVAL == 0) \
- { \
- SvGETMAGIC(arg) ; \
- if (db->type != DB_RECNO) { \
- my_sv_setpvn(arg, (const char *)name.data, name.size); \
- } \
- else \
- sv_setiv(arg, (I32)*(I32*)name.data - 1); \
- TAINT; \
- SvTAINTED_on(arg); \
- SvUTF8_off(arg); \
- DBM_ckFilter(arg, filter_fetch_key,"filter_fetch_key") ; \
- } \
- }
+#define OutputValue(arg, name) \
+ { if (RETVAL == 0) { \
+ SvGETMAGIC(arg) ; \
+ my_sv_setpvn(arg, (const char *)name.data, name.size) ; \
+ TAINT; \
+ SvTAINTED_on(arg); \
+ SvUTF8_off(arg); \
+ DBM_ckFilter(arg, filter_fetch_value,"filter_fetch_value") ; \
+ } \
+ }
+
+#define OutputKey(arg, name) \
+ { if (RETVAL == 0) \
+ { \
+ SvGETMAGIC(arg) ; \
+ if (db->type != DB_RECNO) { \
+ my_sv_setpvn(arg, (const char *)name.data, name.size); \
+ } \
+ else \
+ sv_setiv(arg, (I32)*(I32*)name.data - 1); \
+ TAINT; \
+ SvTAINTED_on(arg); \
+ SvUTF8_off(arg); \
+ DBM_ckFilter(arg, filter_fetch_key,"filter_fetch_key") ; \
+ } \
+ }
+
+/* Macro err_close only for use in croak_and_free */
+#ifdef BERKELEY_DB_1_OR_2 /* Berkeley DB Version 1 or 2 */
+# define err_close(r)
+#else
+# define err_close(r) db_close(r)
+#endif
+
+/* Macro croak_and_free only for use in ParseOpenInfo */
+#define croak_and_free(x) \
+ do \
+ { \
+ if (RETVAL->dbp) err_close(RETVAL) ; \
+ Safefree(RETVAL); \
+ croak(x); \
+ } while (0)
#define my_SvUV32(sv) ((u_int32_t)SvUV(sv))
@@ -473,18 +489,18 @@ extern void __getBerkeleyDBInfo(void);
#define MY_CXT_KEY "DB_File::_guts" XS_VERSION
typedef struct {
- recno_t x_Value;
- recno_t x_zero;
- DB_File x_CurrentDB;
- DBTKEY x_empty;
+ recno_t x_Value;
+ recno_t x_zero;
+ DB_File x_CurrentDB;
+ DBTKEY x_empty;
} my_cxt_t;
START_MY_CXT
-#define Value (MY_CXT.x_Value)
-#define zero (MY_CXT.x_zero)
-#define CurrentDB (MY_CXT.x_CurrentDB)
-#define empty (MY_CXT.x_empty)
+#define Value (MY_CXT.x_Value)
+#define zero (MY_CXT.x_zero)
+#define CurrentDB (MY_CXT.x_CurrentDB)
+#define empty (MY_CXT.x_empty)
#define ERR_BUFF "DB_File::Error"
@@ -495,52 +511,51 @@ static int
db_put(DB_File db, DBTKEY key, DBT value, u_int flags)
#else
db_put(db, key, value, flags)
-DB_File db ;
-DBTKEY key ;
-DBT value ;
-u_int flags ;
+DB_File db ;
+DBTKEY key ;
+DBT value ;
+u_int flags ;
#endif
{
int status ;
if (flagSet(flags, R_IAFTER) || flagSet(flags, R_IBEFORE)) {
DBC * temp_cursor ;
- DBT l_key, l_value;
-
+ DBT l_key, l_value;
+
#if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 6
if (((db->dbp)->cursor)(db->dbp, NULL, &temp_cursor) != 0)
#else
if (((db->dbp)->cursor)(db->dbp, NULL, &temp_cursor, 0) != 0)
#endif
- return (-1) ;
+ return (-1) ;
+
+ memset(&l_key, 0, sizeof(l_key));
+ l_key.data = key.data;
+ l_key.size = key.size;
+ memset(&l_value, 0, sizeof(l_value));
+ l_value.data = value.data;
+ l_value.size = value.size;
- memset(&l_key, 0, sizeof(l_key));
- l_key.data = key.data;
- l_key.size = key.size;
- memset(&l_value, 0, sizeof(l_value));
- l_value.data = value.data;
- l_value.size = value.size;
+ if ( temp_cursor->c_get(temp_cursor, &l_key, &l_value, DB_SET) != 0) {
+ (void)temp_cursor->c_close(temp_cursor);
+ return (-1);
+ }
- if ( temp_cursor->c_get(temp_cursor, &l_key, &l_value, DB_SET) != 0) {
- (void)temp_cursor->c_close(temp_cursor);
- return (-1);
- }
+ status = temp_cursor->c_put(temp_cursor, &key, &value, flags);
+ (void)temp_cursor->c_close(temp_cursor);
- status = temp_cursor->c_put(temp_cursor, &key, &value, flags);
- (void)temp_cursor->c_close(temp_cursor);
-
return (status) ;
- }
-
-
+ }
+
+
if (flagSet(flags, R_CURSOR)) {
- return ((db->cursor)->c_put)(db->cursor, &key, &value, DB_CURRENT);
+ return ((db->cursor)->c_put)(db->cursor, &key, &value, DB_CURRENT);
}
if (flagSet(flags, R_SETCURSOR)) {
- if ((db->dbp)->put(db->dbp, NULL, &key, &value, 0) != 0)
- return -1 ;
+ if ((db->dbp)->put(db->dbp, NULL, &key, &value, 0) != 0)
+ return -1 ;
return ((db->cursor)->c_get)(db->cursor, &key, &value, DB_SET_RANGE);
-
}
return ((db->dbp)->put)(db->dbp, NULL, &key, &value, flags) ;
@@ -576,7 +591,7 @@ size_t* locp;
btree_compare(DB * db, const DBT *key1, const DBT *key2)
#else
btree_compare(db, key1, key2)
-DB * db ;
+DB * db ;
const DBT * key1 ;
const DBT * key2 ;
#endif /* CAN_PROTOTYPE */
@@ -597,13 +612,13 @@ const DBT * key2 ;
{
#ifdef dTHX
dTHX;
-#endif
+#endif
dSP ;
dMY_CXT ;
void * data1, * data2 ;
int retval ;
int count ;
-
+
#ifdef AT_LEAST_DB_3_2
PERL_UNUSED_ARG(db);
#endif
@@ -620,15 +635,15 @@ const DBT * key2 ;
data2 = (char *) key2->data ;
#ifndef newSVpvn
- /* As newSVpv will assume that the data pointer is a null terminated C
- string if the size parameter is 0, make sure that data points to an
+ /* As newSVpv will assume that the data pointer is a null terminated C
+ string if the size parameter is 0, make sure that data points to an
empty string if the length is 0
*/
if (key1->size == 0)
- data1 = "" ;
+ data1 = "" ;
if (key2->size == 0)
data2 = "" ;
-#endif
+#endif
ENTER ;
SAVETMPS;
@@ -643,7 +658,7 @@ const DBT * key2 ;
PUSHs(sv_2mortal(newSVpvn((const char*)data2,key2->size)));
PUTBACK ;
- count = perl_call_sv(CurrentDB->compare, G_SCALAR);
+ count = perl_call_sv(CurrentDB->compare, G_SCALAR);
SPAGAIN ;
@@ -688,13 +703,13 @@ const DBT * key2 ;
{
#ifdef dTHX
dTHX;
-#endif
+#endif
dSP ;
dMY_CXT ;
char * data1, * data2 ;
int retval ;
int count ;
-
+
#ifdef AT_LEAST_DB_3_2
PERL_UNUSED_ARG(db);
#endif
@@ -708,15 +723,15 @@ const DBT * key2 ;
data2 = (char *) key2->data ;
#ifndef newSVpvn
- /* As newSVpv will assume that the data pointer is a null terminated C
- string if the size parameter is 0, make sure that data points to an
+ /* As newSVpv will assume that the data pointer is a null terminated C
+ string if the size parameter is 0, make sure that data points to an
empty string if the length is 0
*/
if (key1->size == 0)
data1 = "" ;
if (key2->size == 0)
data2 = "" ;
-#endif
+#endif
ENTER ;
SAVETMPS;
@@ -731,7 +746,7 @@ const DBT * key2 ;
PUSHs(sv_2mortal(newSVpvn(data2,key2->size)));
PUTBACK ;
- count = perl_call_sv(CurrentDB->prefix, G_SCALAR);
+ count = perl_call_sv(CurrentDB->prefix, G_SCALAR);
SPAGAIN ;
@@ -739,9 +754,9 @@ const DBT * key2 ;
tidyUp(CurrentDB);
croak ("DB_File btree_prefix: expected 1 return value from prefix sub, got %d\n", count) ;
}
-
+
retval = POPi ;
-
+
PUTBACK ;
FREETMPS ;
LEAVE ;
@@ -782,7 +797,7 @@ HASH_CB_SIZE_TYPE size ;
{
#ifdef dTHX
dTHX;
-#endif
+#endif
dSP ;
dMY_CXT;
int retval = 0;
@@ -800,7 +815,7 @@ HASH_CB_SIZE_TYPE size ;
#ifndef newSVpvn
if (size == 0)
data = "" ;
-#endif
+#endif
/* DGH - Next two lines added to fix corrupted stack problem */
ENTER ;
@@ -816,7 +831,7 @@ HASH_CB_SIZE_TYPE size ;
XPUSHs(sv_2mortal(newSVpvn((char*)data,size)));
PUTBACK ;
- count = perl_call_sv(CurrentDB->hash, G_SCALAR);
+ count = perl_call_sv(CurrentDB->hash, G_SCALAR);
SPAGAIN ;
@@ -845,7 +860,7 @@ db_errcall_cb(const char * db_errpfx, char * buffer)
{
#ifdef dTHX
dTHX;
-#endif
+#endif
SV * sv = perl_get_sv(ERR_BUFF, FALSE) ;
#ifdef AT_LEAST_DB_4_3
PERL_UNUSED_ARG(dbenv);
@@ -856,7 +871,7 @@ db_errcall_cb(const char * db_errpfx, char * buffer)
else
sv_setpv(sv, buffer) ;
}
-}
+}
#endif
#if defined(TRACE) && defined(BERKELEY_DB_1_OR_2)
@@ -870,8 +885,8 @@ INFO * hash ;
#endif
{
printf ("HASH Info\n") ;
- printf (" hash = %s\n",
- (hash->db_HA_hash != NULL ? "redefined" : "default")) ;
+ printf (" hash = %s\n",
+ (hash->db_HA_hash != NULL ? "redefined" : "default")) ;
printf (" bsize = %d\n", hash->db_HA_bsize) ;
printf (" ffactor = %d\n", hash->db_HA_ffactor) ;
printf (" nelem = %d\n", hash->db_HA_nelem) ;
@@ -907,10 +922,10 @@ INFO * btree ;
#endif
{
printf ("BTREE Info\n") ;
- printf (" compare = %s\n",
- (btree->db_BT_compare ? "redefined" : "default")) ;
- printf (" prefix = %s\n",
- (btree->db_BT_prefix ? "redefined" : "default")) ;
+ printf (" compare = %s\n",
+ (btree->db_BT_compare ? "redefined" : "default")) ;
+ printf (" prefix = %s\n",
+ (btree->db_BT_prefix ? "redefined" : "default")) ;
printf (" flags = %d\n", btree->db_BT_flags) ;
printf (" cachesize = %d\n", btree->db_BT_cachesize) ;
printf (" psize = %d\n", btree->db_BT_psize) ;
@@ -938,9 +953,9 @@ GetArrayLength(db)
DB_File db ;
#endif
{
- DBT key ;
- DBT value ;
- int RETVAL ;
+ DBT key ;
+ DBT value ;
+ int RETVAL ;
DBT_clear(key) ;
DBT_clear(value) ;
@@ -963,16 +978,16 @@ I32 value ;
#endif
{
if (value < 0) {
- /* Get the length of the array */
- I32 length = GetArrayLength(aTHX_ db) ;
+ /* Get the length of the array */
+ I32 length = GetArrayLength(aTHX_ db) ;
- /* check for attempt to write before start of array */
- if (length + value + 1 <= 0) {
+ /* check for attempt to write before start of array */
+ if (length + value + 1 <= 0) {
tidyUp(db);
- croak("Modification of non-creatable array value attempted, subscript %ld", (long)value) ;
- }
+ croak("Modification of non-creatable array value attempted, subscript %ld", (long)value) ;
+ }
- value = length + value + 1 ;
+ value = length + value + 1 ;
}
else
++ value ;
@@ -996,29 +1011,29 @@ SV * sv ;
#ifdef BERKELEY_DB_1_OR_2 /* Berkeley DB Version 1 or 2 */
- SV ** svp;
- HV * action ;
- DB_File RETVAL = (DB_File)safemalloc(sizeof(DB_File_type)) ;
- void * openinfo = NULL ;
- INFO * info = &RETVAL->info ;
- STRLEN n_a;
+ SV ** svp;
+ HV * action ;
+ DB_File RETVAL = (DB_File)safemalloc(sizeof(DB_File_type)) ;
+ void * openinfo = NULL ;
+ INFO * info = &RETVAL->info ;
+ STRLEN n_a;
dMY_CXT;
-#ifdef TRACE
- printf("In ParseOpenInfo name=[%s] flags=[%d] mode=[%d] SV NULL=[%d]\n",
- name, flags, mode, sv == NULL) ;
+#ifdef TRACE
+ printf("In ParseOpenInfo name=[%s] flags=[%d] mode=[%d] SV NULL=[%d]\n",
+ name, flags, mode, sv == NULL) ;
#endif
Zero(RETVAL, 1, DB_File_type) ;
/* Default to HASH */
RETVAL->filtering = 0 ;
- RETVAL->filter_fetch_key = RETVAL->filter_store_key =
+ RETVAL->filter_fetch_key = RETVAL->filter_store_key =
RETVAL->filter_fetch_value = RETVAL->filter_store_value =
RETVAL->hash = RETVAL->compare = RETVAL->prefix = NULL ;
RETVAL->type = DB_HASH ;
/* DGH - Next line added to avoid SEGV on existing hash DB */
- CurrentDB = RETVAL;
+ CurrentDB = RETVAL;
/* fd for 1.86 hash in memory files doesn't return -1 like 1.85 */
RETVAL->in_memory = (name == NULL) ;
@@ -1026,63 +1041,63 @@ SV * sv ;
if (sv)
{
if (! SvROK(sv) )
- croak ("type parameter is not a reference") ;
+ croak_and_free("type parameter is not a reference") ;
svp = hv_fetch( (HV*)SvRV(sv), "GOT", 3, FALSE) ;
if (svp && SvOK(*svp))
action = (HV*) SvRV(*svp) ;
- else
- croak("internal error") ;
+ else
+ croak_and_free("internal error") ;
if (sv_isa(sv, "DB_File::HASHINFO"))
{
- if (!isHASH)
- croak("DB_File can only tie an associative array to a DB_HASH database") ;
+ if (!isHASH)
+ croak_and_free("DB_File can only tie an associative array to a DB_HASH database") ;
RETVAL->type = DB_HASH ;
openinfo = (void*)info ;
-
- svp = hv_fetch(action, "hash", 4, FALSE);
+
+ svp = hv_fetch(action, "hash", 4, FALSE);
if (svp && SvOK(*svp))
{
info->db_HA_hash = hash_cb ;
- RETVAL->hash = newSVsv(*svp) ;
+ RETVAL->hash = newSVsv(*svp) ;
}
else
- info->db_HA_hash = NULL ;
+ info->db_HA_hash = NULL ;
- svp = hv_fetch(action, "ffactor", 7, FALSE);
- info->db_HA_ffactor = svp ? SvIV(*svp) : 0;
-
- svp = hv_fetch(action, "nelem", 5, FALSE);
- info->db_HA_nelem = svp ? SvIV(*svp) : 0;
-
- svp = hv_fetch(action, "bsize", 5, FALSE);
- info->db_HA_bsize = svp ? SvIV(*svp) : 0;
-
- svp = hv_fetch(action, "cachesize", 9, FALSE);
- info->db_HA_cachesize = svp ? SvIV(*svp) : 0;
-
- svp = hv_fetch(action, "lorder", 6, FALSE);
- info->db_HA_lorder = svp ? SvIV(*svp) : 0;
+ svp = hv_fetch(action, "ffactor", 7, FALSE);
+ info->db_HA_ffactor = svp ? SvIV(*svp) : 0;
+
+ svp = hv_fetch(action, "nelem", 5, FALSE);
+ info->db_HA_nelem = svp ? SvIV(*svp) : 0;
- PrintHash(info) ;
+ svp = hv_fetch(action, "bsize", 5, FALSE);
+ info->db_HA_bsize = svp ? SvIV(*svp) : 0;
+
+ svp = hv_fetch(action, "cachesize", 9, FALSE);
+ info->db_HA_cachesize = svp ? SvIV(*svp) : 0;
+
+ svp = hv_fetch(action, "lorder", 6, FALSE);
+ info->db_HA_lorder = svp ? SvIV(*svp) : 0;
+
+ PrintHash(info) ;
}
else if (sv_isa(sv, "DB_File::BTREEINFO"))
{
- if (!isHASH)
- croak("DB_File can only tie an associative array to a DB_BTREE database");
+ if (!isHASH)
+ croak_and_free("DB_File can only tie an associative array to a DB_BTREE database");
RETVAL->type = DB_BTREE ;
openinfo = (void*)info ;
-
+
svp = hv_fetch(action, "compare", 7, FALSE);
if (svp && SvOK(*svp))
{
info->db_BT_compare = btree_compare ;
- RETVAL->compare = newSVsv(*svp) ;
+ RETVAL->compare = newSVsv(*svp) ;
}
else
info->db_BT_compare = NULL ;
@@ -1091,127 +1106,127 @@ SV * sv ;
if (svp && SvOK(*svp))
{
info->db_BT_prefix = btree_prefix ;
- RETVAL->prefix = newSVsv(*svp) ;
+ RETVAL->prefix = newSVsv(*svp) ;
}
else
info->db_BT_prefix = NULL ;
svp = hv_fetch(action, "flags", 5, FALSE);
info->db_BT_flags = svp ? SvIV(*svp) : 0;
-
+
svp = hv_fetch(action, "cachesize", 9, FALSE);
info->db_BT_cachesize = svp ? SvIV(*svp) : 0;
-
+
#ifndef DB_VERSION_MAJOR
svp = hv_fetch(action, "minkeypage", 10, FALSE);
info->btree.minkeypage = svp ? SvIV(*svp) : 0;
-
+
svp = hv_fetch(action, "maxkeypage", 10, FALSE);
info->btree.maxkeypage = svp ? SvIV(*svp) : 0;
#endif
svp = hv_fetch(action, "psize", 5, FALSE);
info->db_BT_psize = svp ? SvIV(*svp) : 0;
-
+
svp = hv_fetch(action, "lorder", 6, FALSE);
info->db_BT_lorder = svp ? SvIV(*svp) : 0;
PrintBtree(info) ;
-
+
}
else if (sv_isa(sv, "DB_File::RECNOINFO"))
{
- if (isHASH)
- croak("DB_File can only tie an array to a DB_RECNO database");
+ if (isHASH)
+ croak_and_free("DB_File can only tie an array to a DB_RECNO database");
RETVAL->type = DB_RECNO ;
openinfo = (void *)info ;
- info->db_RE_flags = 0 ;
+ info->db_RE_flags = 0 ;
svp = hv_fetch(action, "flags", 5, FALSE);
info->db_RE_flags = (u_long) (svp ? SvIV(*svp) : 0);
-
+
svp = hv_fetch(action, "reclen", 6, FALSE);
info->db_RE_reclen = (size_t) (svp ? SvIV(*svp) : 0);
-
+
svp = hv_fetch(action, "cachesize", 9, FALSE);
info->db_RE_cachesize = (u_int) (svp ? SvIV(*svp) : 0);
-
+
svp = hv_fetch(action, "psize", 5, FALSE);
info->db_RE_psize = (u_int) (svp ? SvIV(*svp) : 0);
-
+
svp = hv_fetch(action, "lorder", 6, FALSE);
info->db_RE_lorder = (int) (svp ? SvIV(*svp) : 0);
#ifdef DB_VERSION_MAJOR
- info->re_source = name ;
- name = NULL ;
+ info->re_source = name ;
+ name = NULL ;
#endif
- svp = hv_fetch(action, "bfname", 6, FALSE);
+ svp = hv_fetch(action, "bfname", 6, FALSE);
if (svp && SvOK(*svp)) {
- char * ptr = SvPV(*svp,n_a) ;
+ char * ptr = SvPV(*svp,n_a) ;
#ifdef DB_VERSION_MAJOR
- name = (char*) n_a ? ptr : NULL ;
+ name = (char*) n_a ? ptr : NULL ;
#else
info->db_RE_bfname = (char*) (n_a ? ptr : NULL) ;
#endif
- }
- else
+ }
+ else
#ifdef DB_VERSION_MAJOR
- name = NULL ;
+ name = NULL ;
#else
- info->db_RE_bfname = NULL ;
+ info->db_RE_bfname = NULL ;
#endif
-
- svp = hv_fetch(action, "bval", 4, FALSE);
+
+ svp = hv_fetch(action, "bval", 4, FALSE);
#ifdef DB_VERSION_MAJOR
if (svp && SvOK(*svp))
{
- int value ;
+ int value ;
if (SvPOK(*svp))
- value = (int)*SvPV(*svp, n_a) ;
- else
- value = SvIV(*svp) ;
-
- if (info->flags & DB_FIXEDLEN) {
- info->re_pad = value ;
- info->flags |= DB_PAD ;
- }
- else {
- info->re_delim = value ;
- info->flags |= DB_DELIMITER ;
- }
+ value = (int)*SvPV(*svp, n_a) ;
+ else
+ value = SvIV(*svp) ;
+
+ if (info->flags & DB_FIXEDLEN) {
+ info->re_pad = value ;
+ info->flags |= DB_PAD ;
+ }
+ else {
+ info->re_delim = value ;
+ info->flags |= DB_DELIMITER ;
+ }
}
#else
if (svp && SvOK(*svp))
{
if (SvPOK(*svp))
- info->db_RE_bval = (u_char)*SvPV(*svp, n_a) ;
- else
- info->db_RE_bval = (u_char)(unsigned long) SvIV(*svp) ;
- DB_flags(info->flags, DB_DELIMITER) ;
+ info->db_RE_bval = (u_char)*SvPV(*svp, n_a) ;
+ else
+ info->db_RE_bval = (u_char)(unsigned long) SvIV(*svp) ;
+ DB_flags(info->flags, DB_DELIMITER) ;
}
else
- {
- if (info->db_RE_flags & R_FIXEDLEN)
+ {
+ if (info->db_RE_flags & R_FIXEDLEN)
info->db_RE_bval = (u_char) ' ' ;
- else
+ else
info->db_RE_bval = (u_char) '\n' ;
- DB_flags(info->flags, DB_DELIMITER) ;
- }
+ DB_flags(info->flags, DB_DELIMITER) ;
+ }
#endif
#ifdef DB_RENUMBER
- info->flags |= DB_RENUMBER ;
+ info->flags |= DB_RENUMBER ;
#endif
-
+
PrintRecno(info) ;
}
else
- croak("type is not of type DB_File::HASHINFO, DB_File::BTREEINFO or DB_File::RECNOINFO");
+ croak_and_free("type is not of type DB_File::HASHINFO, DB_File::BTREEINFO or DB_File::RECNOINFO");
}
@@ -1225,8 +1240,8 @@ SV * sv ;
#ifdef DB_VERSION_MAJOR
{
- int Flags = 0 ;
- int status ;
+ int Flags = 0 ;
+ int status ;
/* Map 1.x flags to 2.x flags */
if ((flags & O_CREAT) == O_CREAT)
@@ -1244,25 +1259,23 @@ SV * sv ;
Flags |= DB_TRUNCATE ;
#endif
- status = db_open(name, RETVAL->type, Flags, mode, NULL, (DB_INFO*)openinfo, &RETVAL->dbp) ;
+ status = db_open(name, RETVAL->type, Flags, mode, NULL, (DB_INFO*)openinfo, &RETVAL->dbp) ;
if (status == 0)
#if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 6
status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor) ;
#else
- status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor,
- 0) ;
+ status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor, 0) ;
#endif
if (status)
- RETVAL->dbp = NULL ;
-
+ RETVAL->dbp = NULL ;
}
#else
#if defined(DB_LIBRARY_COMPATIBILITY_API) && DB_VERSION_MAJOR > 2
- RETVAL->dbp = __db185_open(name, flags, mode, RETVAL->type, openinfo) ;
-#else
- RETVAL->dbp = dbopen(name, flags, mode, RETVAL->type, openinfo) ;
+ RETVAL->dbp = __db185_open(name, flags, mode, RETVAL->type, openinfo) ;
+#else
+ RETVAL->dbp = dbopen(name, flags, mode, RETVAL->type, openinfo) ;
#endif /* DB_LIBRARY_COMPATIBILITY_API */
#endif
@@ -1271,218 +1284,219 @@ SV * sv ;
#else /* Berkeley DB Version > 2 */
- SV ** svp;
- HV * action ;
- DB_File RETVAL = (DB_File)safemalloc(sizeof(DB_File_type)) ;
- DB * dbp ;
- STRLEN n_a;
- int status ;
+ SV ** svp;
+ HV * action ;
+ DB_File RETVAL = (DB_File)safemalloc(sizeof(DB_File_type)) ;
+ DB * dbp ;
+ STRLEN n_a;
+ int status ;
dMY_CXT;
-/* printf("In ParseOpenInfo name=[%s] flags=[%d] mode = [%d]\n", name, flags, mode) ; */
+ Trace(("In ParseOpenInfo name=[%s] flags=[%d] mode=[%d] SV NULL=[%d]\n",\
+ name, flags, mode, sv == NULL)) ;
Zero(RETVAL, 1, DB_File_type) ;
/* Default to HASH */
RETVAL->filtering = 0 ;
- RETVAL->filter_fetch_key = RETVAL->filter_store_key =
+ RETVAL->filter_fetch_key = RETVAL->filter_store_key =
RETVAL->filter_fetch_value = RETVAL->filter_store_value =
RETVAL->hash = RETVAL->compare = RETVAL->prefix = NULL ;
RETVAL->type = DB_HASH ;
/* DGH - Next line added to avoid SEGV on existing hash DB */
- CurrentDB = RETVAL;
+ CurrentDB = RETVAL;
/* fd for 1.86 hash in memory files doesn't return -1 like 1.85 */
RETVAL->in_memory = (name == NULL) ;
status = db_create(&RETVAL->dbp, NULL,0) ;
- /* printf("db_create returned %d %s\n", status, db_strerror(status)) ; */
+ Trace(("db_create returned %d %s\n", status, db_strerror(status))) ;
if (status) {
- RETVAL->dbp = NULL ;
+ RETVAL->dbp = NULL ;
return (RETVAL) ;
- }
+ }
dbp = RETVAL->dbp ;
#ifdef WANT_ERROR
- RETVAL->dbp->set_errcall(RETVAL->dbp, db_errcall_cb) ;
+ RETVAL->dbp->set_errcall(RETVAL->dbp, db_errcall_cb) ;
#endif
if (sv)
{
if (! SvROK(sv) )
- croak ("type parameter is not a reference") ;
+ croak_and_free("type parameter is not a reference") ;
svp = hv_fetch( (HV*)SvRV(sv), "GOT", 3, FALSE) ;
if (svp && SvOK(*svp))
action = (HV*) SvRV(*svp) ;
- else
- croak("internal error") ;
+ else
+ croak_and_free("internal error") ;
if (sv_isa(sv, "DB_File::HASHINFO"))
{
- if (!isHASH)
- croak("DB_File can only tie an associative array to a DB_HASH database") ;
+ if (!isHASH)
+ croak_and_free("DB_File can only tie an associative array to a DB_HASH database") ;
RETVAL->type = DB_HASH ;
-
- svp = hv_fetch(action, "hash", 4, FALSE);
+
+ svp = hv_fetch(action, "hash", 4, FALSE);
if (svp && SvOK(*svp))
{
- (void)dbp->set_h_hash(dbp, hash_cb) ;
- RETVAL->hash = newSVsv(*svp) ;
+ (void)dbp->set_h_hash(dbp, hash_cb) ;
+ RETVAL->hash = newSVsv(*svp) ;
}
svp = hv_fetch(action, "ffactor", 7, FALSE);
- if (svp)
- (void)dbp->set_h_ffactor(dbp, my_SvUV32(*svp)) ;
-
+ if (svp)
+ (void)dbp->set_h_ffactor(dbp, my_SvUV32(*svp)) ;
+
svp = hv_fetch(action, "nelem", 5, FALSE);
- if (svp)
+ if (svp)
(void)dbp->set_h_nelem(dbp, my_SvUV32(*svp)) ;
-
+
svp = hv_fetch(action, "bsize", 5, FALSE);
- if (svp)
+ if (svp)
(void)dbp->set_pagesize(dbp, my_SvUV32(*svp));
-
+
svp = hv_fetch(action, "cachesize", 9, FALSE);
- if (svp)
+ if (svp)
(void)dbp->set_cachesize(dbp, 0, my_SvUV32(*svp), 0) ;
-
+
svp = hv_fetch(action, "lorder", 6, FALSE);
- if (svp)
+ if (svp)
(void)dbp->set_lorder(dbp, (int)SvIV(*svp)) ;
- PrintHash(info) ;
+ PrintHash(info) ;
}
else if (sv_isa(sv, "DB_File::BTREEINFO"))
{
- if (!isHASH)
- croak("DB_File can only tie an associative array to a DB_BTREE database");
+ if (!isHASH)
+ croak_and_free("DB_File can only tie an associative array to a DB_BTREE database");
RETVAL->type = DB_BTREE ;
-
+
svp = hv_fetch(action, "compare", 7, FALSE);
if (svp && SvOK(*svp))
{
(void)dbp->set_bt_compare(dbp, btree_compare) ;
- RETVAL->compare = newSVsv(*svp) ;
+ RETVAL->compare = newSVsv(*svp) ;
}
svp = hv_fetch(action, "prefix", 6, FALSE);
if (svp && SvOK(*svp))
{
(void)dbp->set_bt_prefix(dbp, btree_prefix) ;
- RETVAL->prefix = newSVsv(*svp) ;
+ RETVAL->prefix = newSVsv(*svp) ;
}
svp = hv_fetch(action, "flags", 5, FALSE);
- if (svp)
- (void)dbp->set_flags(dbp, my_SvUV32(*svp)) ;
-
+ if (svp)
+ (void)dbp->set_flags(dbp, my_SvUV32(*svp)) ;
+
svp = hv_fetch(action, "cachesize", 9, FALSE);
- if (svp)
+ if (svp)
(void)dbp->set_cachesize(dbp, 0, my_SvUV32(*svp), 0) ;
-
+
svp = hv_fetch(action, "psize", 5, FALSE);
- if (svp)
+ if (svp)
(void)dbp->set_pagesize(dbp, my_SvUV32(*svp)) ;
-
+
svp = hv_fetch(action, "lorder", 6, FALSE);
- if (svp)
+ if (svp)
(void)dbp->set_lorder(dbp, (int)SvIV(*svp)) ;
- PrintBtree(info) ;
-
+ PrintBtree(info) ;
+
}
else if (sv_isa(sv, "DB_File::RECNOINFO"))
{
- int fixed = FALSE ;
+ int fixed = FALSE ;
- if (isHASH)
- croak("DB_File can only tie an array to a DB_RECNO database");
+ if (isHASH)
+ croak_and_free("DB_File can only tie an array to a DB_RECNO database");
RETVAL->type = DB_RECNO ;
- svp = hv_fetch(action, "flags", 5, FALSE);
- if (svp) {
- int flags = SvIV(*svp) ;
- /* remove FIXDLEN, if present */
- if (flags & DB_FIXEDLEN) {
- fixed = TRUE ;
- flags &= ~DB_FIXEDLEN ;
- }
- }
+ svp = hv_fetch(action, "flags", 5, FALSE);
+ if (svp) {
+ int flags = SvIV(*svp) ;
+ /* remove FIXDLEN, if present */
+ if (flags & DB_FIXEDLEN) {
+ fixed = TRUE ;
+ flags &= ~DB_FIXEDLEN ;
+ }
+ }
- svp = hv_fetch(action, "cachesize", 9, FALSE);
- if (svp) {
- status = dbp->set_cachesize(dbp, 0, my_SvUV32(*svp), 0) ;
- }
-
- svp = hv_fetch(action, "psize", 5, FALSE);
- if (svp) {
- status = dbp->set_pagesize(dbp, my_SvUV32(*svp)) ;
- }
-
- svp = hv_fetch(action, "lorder", 6, FALSE);
- if (svp) {
- status = dbp->set_lorder(dbp, (int)SvIV(*svp)) ;
- }
+ svp = hv_fetch(action, "cachesize", 9, FALSE);
+ if (svp) {
+ status = dbp->set_cachesize(dbp, 0, my_SvUV32(*svp), 0) ;
+ }
+
+ svp = hv_fetch(action, "psize", 5, FALSE);
+ if (svp) {
+ status = dbp->set_pagesize(dbp, my_SvUV32(*svp)) ;
+ }
+
+ svp = hv_fetch(action, "lorder", 6, FALSE);
+ if (svp) {
+ status = dbp->set_lorder(dbp, (int)SvIV(*svp)) ;
+ }
- svp = hv_fetch(action, "bval", 4, FALSE);
+ svp = hv_fetch(action, "bval", 4, FALSE);
if (svp && SvOK(*svp))
{
- int value ;
+ int value ;
if (SvPOK(*svp))
- value = (int)*SvPV(*svp, n_a) ;
- else
- value = (int)SvIV(*svp) ;
+ value = (int)*SvPV(*svp, n_a) ;
+ else
+ value = (int)SvIV(*svp) ;
- if (fixed) {
- (void)dbp->set_re_pad(dbp, value) ;
- }
- else {
- (void)dbp->set_re_delim(dbp, value) ;
- }
+ if (fixed) {
+ (void)dbp->set_re_pad(dbp, value) ;
+ }
+ else {
+ (void)dbp->set_re_delim(dbp, value) ;
+ }
}
- if (fixed) {
- svp = hv_fetch(action, "reclen", 6, FALSE);
- if (svp) {
- u_int32_t len = my_SvUV32(*svp) ;
- (void)dbp->set_re_len(dbp, len) ;
- }
- }
-
- if (name != NULL) {
- (void)dbp->set_re_source(dbp, name) ;
- name = NULL ;
- }
-
- svp = hv_fetch(action, "bfname", 6, FALSE);
+ if (fixed) {
+ svp = hv_fetch(action, "reclen", 6, FALSE);
+ if (svp) {
+ u_int32_t len = my_SvUV32(*svp) ;
+ (void)dbp->set_re_len(dbp, len) ;
+ }
+ }
+
+ if (name != NULL) {
+ (void)dbp->set_re_source(dbp, name) ;
+ name = NULL ;
+ }
+
+ svp = hv_fetch(action, "bfname", 6, FALSE);
if (svp && SvOK(*svp)) {
- char * ptr = SvPV(*svp,n_a) ;
- name = (char*) n_a ? ptr : NULL ;
- }
- else
- name = NULL ;
-
-
- (void)dbp->set_flags(dbp, (u_int32_t)DB_RENUMBER) ;
-
- if (flags){
- (void)dbp->set_flags(dbp, (u_int32_t)flags) ;
- }
+ char * ptr = SvPV(*svp,n_a) ;
+ name = (char*) n_a ? ptr : NULL ;
+ }
+ else
+ name = NULL ;
+
+
+ (void)dbp->set_flags(dbp, (u_int32_t)DB_RENUMBER) ;
+
+ if (flags){
+ (void)dbp->set_flags(dbp, (u_int32_t)flags) ;
+ }
PrintRecno(info) ;
}
else
- croak("type is not of type DB_File::HASHINFO, DB_File::BTREEINFO or DB_File::RECNOINFO");
+ croak_and_free("type is not of type DB_File::HASHINFO, DB_File::BTREEINFO or DB_File::RECNOINFO");
}
{
- u_int32_t Flags = 0 ;
- int status ;
+ u_int32_t Flags = 0 ;
+ int status ;
/* Map 1.x flags to 3.x flags */
if ((flags & O_CREAT) == O_CREAT)
@@ -1507,27 +1521,25 @@ SV * sv ;
#endif
#ifdef AT_LEAST_DB_4_1
- status = (RETVAL->dbp->open)(RETVAL->dbp, NULL, name, NULL, RETVAL->type,
- Flags, mode) ;
+ status = (RETVAL->dbp->open)(RETVAL->dbp, NULL, name, NULL, RETVAL->type,
+ Flags, mode) ;
#else
- status = (RETVAL->dbp->open)(RETVAL->dbp, name, NULL, RETVAL->type,
- Flags, mode) ;
+ status = (RETVAL->dbp->open)(RETVAL->dbp, name, NULL, RETVAL->type,
+ Flags, mode) ;
#endif
- /* printf("open returned %d %s\n", status, db_strerror(status)) ; */
+ Trace(("open returned %d %s\n", status, db_strerror(status))) ;
if (status == 0) {
- status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor,
- 0) ;
- /* printf("cursor returned %d %s\n", status, db_strerror(status)) ; */
- }
+ status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor, 0) ;
+ Trace(("cursor returned %d %s\n", status, db_strerror(status))) ;
+ }
if (status)
- {
- db_close(RETVAL); /* close **dbp handle to prevent mem.leak */
- RETVAL->dbp = NULL ;
- }
-
+ {
+ db_close(RETVAL); /* close **dbp handle to prevent mem.leak */
+ RETVAL->dbp = NULL ;
+ }
}
return (RETVAL) ;
@@ -1537,9 +1549,9 @@ SV * sv ;
} /* ParseOpenInfo */
-#include "constants.h"
+#include "constants.h"
-MODULE = DB_File PACKAGE = DB_File PREFIX = db_
+MODULE = DB_File PACKAGE = DB_File PREFIX = db_
INCLUDE: constants.xs
@@ -1547,17 +1559,17 @@ BOOT:
{
#ifdef dTHX
dTHX;
-#endif
+#endif
#ifdef WANT_ERROR
- SV * sv_err = perl_get_sv(ERR_BUFF, GV_ADD|GV_ADDMULTI) ;
+ SV * sv_err = perl_get_sv(ERR_BUFF, GV_ADD|GV_ADDMULTI) ;
#endif
MY_CXT_INIT;
#ifdef WANT_ERROR
PERL_UNUSED_VAR(sv_err); /* huh? we just retrieved it... */
#endif
__getBerkeleyDBInfo() ;
-
- DBT_clear(empty) ;
+
+ DBT_clear(empty) ;
empty.data = &zero ;
empty.size = sizeof(recno_t) ;
}
@@ -1566,161 +1578,162 @@ BOOT:
DB_File
db_DoTie_(isHASH, dbtype, name=undef, flags=O_CREAT|O_RDWR, mode=0666, type=DB_HASH)
- int isHASH
- char * dbtype
- int flags
- int mode
- CODE:
- {
- char * name = (char *) NULL ;
- SV * sv = (SV *) NULL ;
- STRLEN n_a;
-
- if (items >= 3 && SvOK(ST(2)))
- name = (char*) SvPV(ST(2), n_a) ;
-
- if (items == 6)
- sv = ST(5) ;
-
- RETVAL = ParseOpenInfo(aTHX_ isHASH, name, flags, mode, sv) ;
- Trace(("db_DoTie_ %p\n", RETVAL));
- if (RETVAL->dbp == NULL) {
- Safefree(RETVAL);
- RETVAL = NULL ;
- }
- }
- OUTPUT:
- RETVAL
+ int isHASH
+ char * dbtype
+ int flags
+ int mode
+ CODE:
+ {
+ char * name = (char *) NULL ;
+ SV * sv = (SV *) NULL ;
+ STRLEN n_a;
+ Trace(("In db_DoTie_\n"));
+
+ if (items >= 3 && SvOK(ST(2)))
+ name = (char*) SvPV(ST(2), n_a) ;
+
+ if (items == 6)
+ sv = ST(5) ;
+
+ RETVAL = ParseOpenInfo(aTHX_ isHASH, name, flags, mode, sv) ;
+ Trace(("db_DoTie_ %p\n", RETVAL));
+ if (RETVAL->dbp == NULL) {
+ Safefree(RETVAL);
+ RETVAL = NULL ;
+ }
+ }
+ OUTPUT:
+ RETVAL
int
db_DESTROY(db)
- DB_File db
- PREINIT:
- dMY_CXT;
- INIT:
- CurrentDB = db ;
- Trace(("DESTROY %p\n", db));
- CLEANUP:
- Trace(("DESTROY %p done\n", db));
- if (db->hash)
- SvREFCNT_dec(db->hash) ;
- if (db->compare)
- SvREFCNT_dec(db->compare) ;
- if (db->prefix)
- SvREFCNT_dec(db->prefix) ;
- if (db->filter_fetch_key)
- SvREFCNT_dec(db->filter_fetch_key) ;
- if (db->filter_store_key)
- SvREFCNT_dec(db->filter_store_key) ;
- if (db->filter_fetch_value)
- SvREFCNT_dec(db->filter_fetch_value) ;
- if (db->filter_store_value)
- SvREFCNT_dec(db->filter_store_value) ;
- safefree(db) ;
+ DB_File db
+ PREINIT:
+ dMY_CXT;
+ INIT:
+ CurrentDB = db ;
+ Trace(("DESTROY %p\n", db));
+ CLEANUP:
+ Trace(("DESTROY %p done\n", db));
+ if (db->hash)
+ SvREFCNT_dec(db->hash) ;
+ if (db->compare)
+ SvREFCNT_dec(db->compare) ;
+ if (db->prefix)
+ SvREFCNT_dec(db->prefix) ;
+ if (db->filter_fetch_key)
+ SvREFCNT_dec(db->filter_fetch_key) ;
+ if (db->filter_store_key)
+ SvREFCNT_dec(db->filter_store_key) ;
+ if (db->filter_fetch_value)
+ SvREFCNT_dec(db->filter_fetch_value) ;
+ if (db->filter_store_value)
+ SvREFCNT_dec(db->filter_store_value) ;
+ safefree(db) ;
#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
+ if (RETVAL > 0)
+ RETVAL = -1 ;
#endif
int
db_DELETE(db, key, flags=0)
- DB_File db
- DBTKEY key
- u_int flags
- PREINIT:
- dMY_CXT;
- INIT:
- (void)flags;
- CurrentDB = db ;
+ DB_File db
+ DBTKEY key
+ u_int flags
+ PREINIT:
+ dMY_CXT;
+ INIT:
+ (void)flags;
+ CurrentDB = db ;
int
db_EXISTS(db, key)
- DB_File db
- DBTKEY key
- PREINIT:
- dMY_CXT;
- CODE:
- {
- DBT value ;
-
- DBT_clear(value) ;
- CurrentDB = db ;
- RETVAL = (((db->dbp)->get)(db->dbp, TXN &key, &value, 0) == 0) ;
- }
- OUTPUT:
- RETVAL
+ DB_File db
+ DBTKEY key
+ PREINIT:
+ dMY_CXT;
+ CODE:
+ {
+ DBT value ;
+
+ DBT_clear(value) ;
+ CurrentDB = db ;
+ RETVAL = (((db->dbp)->get)(db->dbp, TXN &key, &value, 0) == 0) ;
+ }
+ OUTPUT:
+ RETVAL
void
db_FETCH(db, key, flags=0)
- DB_File db
- DBTKEY key
- u_int flags
- PREINIT:
- dMY_CXT ;
- int RETVAL ;
- CODE:
- {
- DBT value ;
-
- DBT_clear(value) ;
- CurrentDB = db ;
- RETVAL = db_get(db, key, value, flags) ;
- ST(0) = sv_newmortal();
- OutputValue(ST(0), value)
- }
+ DB_File db
+ DBTKEY key
+ u_int flags
+ PREINIT:
+ dMY_CXT ;
+ int RETVAL ;
+ CODE:
+ {
+ DBT value ;
+
+ DBT_clear(value) ;
+ CurrentDB = db ;
+ RETVAL = db_get(db, key, value, flags) ;
+ ST(0) = sv_newmortal();
+ OutputValue(ST(0), value)
+ }
int
db_STORE(db, key, value, flags=0)
- DB_File db
- DBTKEY key
- DBT value
- u_int flags
- PREINIT:
- dMY_CXT;
- INIT:
- (void)flags;
- CurrentDB = db ;
+ DB_File db
+ DBTKEY key
+ DBT value
+ u_int flags
+ PREINIT:
+ dMY_CXT;
+ INIT:
+ (void)flags;
+ CurrentDB = db ;
void
db_FIRSTKEY(db)
- DB_File db
- PREINIT:
- dMY_CXT ;
- int RETVAL ;
- CODE:
- {
- DBTKEY key ;
- DBT value ;
-
- DBT_clear(key) ;
- DBT_clear(value) ;
- CurrentDB = db ;
- RETVAL = do_SEQ(db, key, value, R_FIRST) ;
- ST(0) = sv_newmortal();
- OutputKey(ST(0), key) ;
- }
+ DB_File db
+ PREINIT:
+ dMY_CXT ;
+ int RETVAL ;
+ CODE:
+ {
+ DBTKEY key ;
+ DBT value ;
+
+ DBT_clear(key) ;
+ DBT_clear(value) ;
+ CurrentDB = db ;
+ RETVAL = do_SEQ(db, key, value, R_FIRST) ;
+ ST(0) = sv_newmortal();
+ OutputKey(ST(0), key) ;
+ }
void
db_NEXTKEY(db, key)
- DB_File db
- DBTKEY key = NO_INIT
- PREINIT:
- dMY_CXT ;
- int RETVAL ;
- CODE:
- {
- DBT value ;
-
- DBT_clear(key) ;
- DBT_clear(value) ;
- CurrentDB = db ;
- RETVAL = do_SEQ(db, key, value, R_NEXT) ;
- ST(0) = sv_newmortal();
- OutputKey(ST(0), key) ;
- }
+ DB_File db
+ DBTKEY key = NO_INIT
+ PREINIT:
+ dMY_CXT ;
+ int RETVAL ;
+ CODE:
+ {
+ DBT value ;
+
+ DBT_clear(key) ;
+ DBT_clear(value) ;
+ CurrentDB = db ;
+ RETVAL = do_SEQ(db, key, value, R_NEXT) ;
+ ST(0) = sv_newmortal();
+ OutputKey(ST(0), key) ;
+ }
#
# These would be nice for RECNO
@@ -1728,166 +1741,166 @@ db_NEXTKEY(db, key)
int
unshift(db, ...)
- DB_File db
- ALIAS: UNSHIFT = 1
- PREINIT:
- dMY_CXT;
- CODE:
- {
- DBTKEY key ;
- DBT value ;
- int i ;
- int One ;
- STRLEN n_a;
-
- DBT_clear(key) ;
- DBT_clear(value) ;
- CurrentDB = db ;
+ DB_File db
+ ALIAS: UNSHIFT = 1
+ PREINIT:
+ dMY_CXT;
+ CODE:
+ {
+ DBTKEY key ;
+ DBT value ;
+ int i ;
+ int One ;
+ STRLEN n_a;
+
+ DBT_clear(key) ;
+ DBT_clear(value) ;
+ CurrentDB = db ;
#ifdef DB_VERSION_MAJOR
- /* get the first value */
- RETVAL = do_SEQ(db, key, value, DB_FIRST) ;
- RETVAL = 0 ;
+ /* get the first value */
+ RETVAL = do_SEQ(db, key, value, DB_FIRST) ;
+ RETVAL = 0 ;
#else
- RETVAL = -1 ;
-#endif
- for (i = items-1 ; i > 0 ; --i)
- {
- DBM_ckFilter(ST(i), filter_store_value, "filter_store_value");
- value.data = SvPVbyte(ST(i), n_a) ;
- value.size = n_a ;
- One = 1 ;
- key.data = &One ;
- key.size = sizeof(int) ;
+ RETVAL = -1 ;
+#endif
+ for (i = items-1 ; i > 0 ; --i)
+ {
+ DBM_ckFilter(ST(i), filter_store_value, "filter_store_value");
+ value.data = SvPVbyte(ST(i), n_a) ;
+ value.size = n_a ;
+ One = 1 ;
+ key.data = &One ;
+ key.size = sizeof(int) ;
#ifdef DB_VERSION_MAJOR
- RETVAL = (db->cursor->c_put)(db->cursor, &key, &value, DB_BEFORE) ;
+ RETVAL = (db->cursor->c_put)(db->cursor, &key, &value, DB_BEFORE) ;
#else
- RETVAL = (db->dbp->put)(db->dbp, &key, &value, R_IBEFORE) ;
+ RETVAL = (db->dbp->put)(db->dbp, &key, &value, R_IBEFORE) ;
#endif
- if (RETVAL != 0)
- break;
- }
- }
- OUTPUT:
- RETVAL
+ if (RETVAL != 0)
+ break;
+ }
+ }
+ OUTPUT:
+ RETVAL
void
pop(db)
- DB_File db
- PREINIT:
- dMY_CXT;
- ALIAS: POP = 1
- PREINIT:
- I32 RETVAL;
- CODE:
- {
- DBTKEY key ;
- DBT value ;
-
- DBT_clear(key) ;
- DBT_clear(value) ;
- CurrentDB = db ;
-
- /* First get the final value */
- RETVAL = do_SEQ(db, key, value, R_LAST) ;
- ST(0) = sv_newmortal();
- /* Now delete it */
- if (RETVAL == 0)
- {
- /* the call to del will trash value, so take a copy now */
- OutputValue(ST(0), value) ;
- RETVAL = db_del(db, key, R_CURSOR) ;
- if (RETVAL != 0)
- sv_setsv(ST(0), &PL_sv_undef);
- }
- }
+ DB_File db
+ PREINIT:
+ dMY_CXT;
+ ALIAS: POP = 1
+ PREINIT:
+ I32 RETVAL;
+ CODE:
+ {
+ DBTKEY key ;
+ DBT value ;
+
+ DBT_clear(key) ;
+ DBT_clear(value) ;
+ CurrentDB = db ;
+
+ /* First get the final value */
+ RETVAL = do_SEQ(db, key, value, R_LAST) ;
+ ST(0) = sv_newmortal();
+ /* Now delete it */
+ if (RETVAL == 0)
+ {
+ /* the call to del will trash value, so take a copy now */
+ OutputValue(ST(0), value) ;
+ RETVAL = db_del(db, key, R_CURSOR) ;
+ if (RETVAL != 0)
+ sv_setsv(ST(0), &PL_sv_undef);
+ }
+ }
void
shift(db)
- DB_File db
- PREINIT:
- dMY_CXT;
- ALIAS: SHIFT = 1
- PREINIT:
- I32 RETVAL;
- CODE:
- {
- DBT value ;
- DBTKEY key ;
-
- DBT_clear(key) ;
- DBT_clear(value) ;
- CurrentDB = db ;
- /* get the first value */
- RETVAL = do_SEQ(db, key, value, R_FIRST) ;
- ST(0) = sv_newmortal();
- /* Now delete it */
- if (RETVAL == 0)
- {
- /* the call to del will trash value, so take a copy now */
- OutputValue(ST(0), value) ;
- RETVAL = db_del(db, key, R_CURSOR) ;
- if (RETVAL != 0)
- sv_setsv (ST(0), &PL_sv_undef) ;
- }
- }
+ DB_File db
+ PREINIT:
+ dMY_CXT;
+ ALIAS: SHIFT = 1
+ PREINIT:
+ I32 RETVAL;
+ CODE:
+ {
+ DBT value ;
+ DBTKEY key ;
+
+ DBT_clear(key) ;
+ DBT_clear(value) ;
+ CurrentDB = db ;
+ /* get the first value */
+ RETVAL = do_SEQ(db, key, value, R_FIRST) ;
+ ST(0) = sv_newmortal();
+ /* Now delete it */
+ if (RETVAL == 0)
+ {
+ /* the call to del will trash value, so take a copy now */
+ OutputValue(ST(0), value) ;
+ RETVAL = db_del(db, key, R_CURSOR) ;
+ if (RETVAL != 0)
+ sv_setsv (ST(0), &PL_sv_undef) ;
+ }
+ }
I32
push(db, ...)
- DB_File db
- PREINIT:
- dMY_CXT;
- ALIAS: PUSH = 1
- CODE:
- {
- DBTKEY key ;
- DBT value ;
- DB * Db = db->dbp ;
- int i ;
- STRLEN n_a;
- int keyval ;
-
- DBT_flags(key) ;
- DBT_flags(value) ;
- CurrentDB = db ;
- /* Set the Cursor to the Last element */
- RETVAL = do_SEQ(db, key, value, R_LAST) ;
-#ifndef DB_VERSION_MAJOR
- if (RETVAL >= 0)
-#endif
- {
- if (RETVAL == 0)
- keyval = *(int*)key.data ;
- else
- keyval = 0 ;
- for (i = 1 ; i < items ; ++i)
- {
- DBM_ckFilter(ST(i), filter_store_value, "filter_store_value");
- value.data = SvPVbyte(ST(i), n_a) ;
- value.size = n_a ;
- ++ keyval ;
- key.data = &keyval ;
- key.size = sizeof(int) ;
- RETVAL = (Db->put)(Db, TXN &key, &value, 0) ;
- if (RETVAL != 0)
- break;
- }
- }
- }
- OUTPUT:
- RETVAL
+ DB_File db
+ PREINIT:
+ dMY_CXT;
+ ALIAS: PUSH = 1
+ CODE:
+ {
+ DBTKEY key ;
+ DBT value ;
+ DB * Db = db->dbp ;
+ int i ;
+ STRLEN n_a;
+ int keyval ;
+
+ DBT_flags(key) ;
+ DBT_flags(value) ;
+ CurrentDB = db ;
+ /* Set the Cursor to the Last element */
+ RETVAL = do_SEQ(db, key, value, R_LAST) ;
+#ifndef DB_VERSION_MAJOR
+ if (RETVAL >= 0)
+#endif
+ {
+ if (RETVAL == 0)
+ keyval = *(int*)key.data ;
+ else
+ keyval = 0 ;
+ for (i = 1 ; i < items ; ++i)
+ {
+ DBM_ckFilter(ST(i), filter_store_value, "filter_store_value");
+ value.data = SvPVbyte(ST(i), n_a) ;
+ value.size = n_a ;
+ ++ keyval ;
+ key.data = &keyval ;
+ key.size = sizeof(int) ;
+ RETVAL = (Db->put)(Db, TXN &key, &value, 0) ;
+ if (RETVAL != 0)
+ break;
+ }
+ }
+ }
+ OUTPUT:
+ RETVAL
I32
length(db)
- DB_File db
- PREINIT:
- dMY_CXT;
- ALIAS: FETCHSIZE = 1
- CODE:
- CurrentDB = db ;
- RETVAL = GetArrayLength(aTHX_ db) ;
- OUTPUT:
- RETVAL
+ DB_File db
+ PREINIT:
+ dMY_CXT;
+ ALIAS: FETCHSIZE = 1
+ CODE:
+ CurrentDB = db ;
+ RETVAL = GetArrayLength(aTHX_ db) ;
+ OUTPUT:
+ RETVAL
#
@@ -1896,161 +1909,161 @@ length(db)
int
db_del(db, key, flags=0)
- DB_File db
- DBTKEY key
- u_int flags
- PREINIT:
- dMY_CXT;
- CODE:
- CurrentDB = db ;
- RETVAL = db_del(db, key, flags) ;
+ DB_File db
+ DBTKEY key
+ u_int flags
+ PREINIT:
+ dMY_CXT;
+ CODE:
+ CurrentDB = db ;
+ RETVAL = db_del(db, key, flags) ;
#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
- else if (RETVAL == DB_NOTFOUND)
- RETVAL = 1 ;
+ if (RETVAL > 0)
+ RETVAL = -1 ;
+ else if (RETVAL == DB_NOTFOUND)
+ RETVAL = 1 ;
#endif
- OUTPUT:
- RETVAL
+ OUTPUT:
+ RETVAL
int
db_get(db, key, value, flags=0)
- DB_File db
- DBTKEY key
- DBT value = NO_INIT
- u_int flags
- PREINIT:
- dMY_CXT;
- CODE:
- CurrentDB = db ;
- DBT_clear(value) ;
- RETVAL = db_get(db, key, value, flags) ;
+ DB_File db
+ DBTKEY key
+ DBT value = NO_INIT
+ u_int flags
+ PREINIT:
+ dMY_CXT;
+ CODE:
+ CurrentDB = db ;
+ DBT_clear(value) ;
+ RETVAL = db_get(db, key, value, flags) ;
#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
- else if (RETVAL == DB_NOTFOUND)
- RETVAL = 1 ;
+ if (RETVAL > 0)
+ RETVAL = -1 ;
+ else if (RETVAL == DB_NOTFOUND)
+ RETVAL = 1 ;
#endif
- OUTPUT:
- RETVAL
- value
+ OUTPUT:
+ RETVAL
+ value
int
db_put(db, key, value, flags=0)
- DB_File db
- DBTKEY key
- DBT value
- u_int flags
- PREINIT:
- dMY_CXT;
- CODE:
- CurrentDB = db ;
- RETVAL = db_put(db, key, value, flags) ;
+ DB_File db
+ DBTKEY key
+ DBT value
+ u_int flags
+ PREINIT:
+ dMY_CXT;
+ CODE:
+ CurrentDB = db ;
+ RETVAL = db_put(db, key, value, flags) ;
#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
- else if (RETVAL == DB_KEYEXIST)
- RETVAL = 1 ;
+ if (RETVAL > 0)
+ RETVAL = -1 ;
+ else if (RETVAL == DB_KEYEXIST)
+ RETVAL = 1 ;
#endif
- OUTPUT:
- RETVAL
- key if (flagSet(flags, R_IAFTER) || flagSet(flags, R_IBEFORE)) OutputKey(ST(1), key);
+ OUTPUT:
+ RETVAL
+ key if (flagSet(flags, R_IAFTER) || flagSet(flags, R_IBEFORE)) OutputKey(ST(1), key);
int
db_fd(db)
- DB_File db
- PREINIT:
- dMY_CXT ;
- CODE:
- CurrentDB = db ;
+ DB_File db
+ PREINIT:
+ dMY_CXT ;
+ CODE:
+ CurrentDB = db ;
#ifdef DB_VERSION_MAJOR
- RETVAL = -1 ;
- {
- int status = 0 ;
- status = (db->in_memory
- ? -1
- : ((db->dbp)->fd)(db->dbp, &RETVAL) ) ;
- if (status != 0)
- RETVAL = -1 ;
- }
+ RETVAL = -1 ;
+ {
+ int status = 0 ;
+ status = (db->in_memory
+ ? -1
+ : ((db->dbp)->fd)(db->dbp, &RETVAL) ) ;
+ if (status != 0)
+ RETVAL = -1 ;
+ }
#else
- RETVAL = (db->in_memory
- ? -1
- : ((db->dbp)->fd)(db->dbp) ) ;
+ RETVAL = (db->in_memory
+ ? -1
+ : ((db->dbp)->fd)(db->dbp) ) ;
#endif
- OUTPUT:
- RETVAL
+ OUTPUT:
+ RETVAL
int
db_sync(db, flags=0)
- DB_File db
- u_int flags
- PREINIT:
- dMY_CXT;
- CODE:
- CurrentDB = db ;
- RETVAL = db_sync(db, flags) ;
+ DB_File db
+ u_int flags
+ PREINIT:
+ dMY_CXT;
+ CODE:
+ CurrentDB = db ;
+ RETVAL = db_sync(db, flags) ;
#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
+ if (RETVAL > 0)
+ RETVAL = -1 ;
#endif
- OUTPUT:
- RETVAL
+ OUTPUT:
+ RETVAL
int
db_seq(db, key, value, flags)
- DB_File db
- DBTKEY key
- DBT value = NO_INIT
- u_int flags
- PREINIT:
- dMY_CXT;
- CODE:
- CurrentDB = db ;
- DBT_clear(value) ;
- RETVAL = db_seq(db, key, value, flags);
+ DB_File db
+ DBTKEY key
+ DBT value = NO_INIT
+ u_int flags
+ PREINIT:
+ dMY_CXT;
+ CODE:
+ CurrentDB = db ;
+ DBT_clear(value) ;
+ RETVAL = db_seq(db, key, value, flags);
#ifdef DB_VERSION_MAJOR
- if (RETVAL > 0)
- RETVAL = -1 ;
- else if (RETVAL == DB_NOTFOUND)
- RETVAL = 1 ;
+ if (RETVAL > 0)
+ RETVAL = -1 ;
+ else if (RETVAL == DB_NOTFOUND)
+ RETVAL = 1 ;
#endif
- OUTPUT:
- RETVAL
- key
- value
+ OUTPUT:
+ RETVAL
+ key
+ value
SV *
filter_fetch_key(db, code)
- DB_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- DBM_setFilter(db->filter_fetch_key, code) ;
+ DB_File db
+ SV * code
+ SV * RETVAL = &PL_sv_undef ;
+ CODE:
+ DBM_setFilter(db->filter_fetch_key, code) ;
SV *
filter_store_key(db, code)
- DB_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- DBM_setFilter(db->filter_store_key, code) ;
+ DB_File db
+ SV * code
+ SV * RETVAL = &PL_sv_undef ;
+ CODE:
+ DBM_setFilter(db->filter_store_key, code) ;
SV *
filter_fetch_value(db, code)
- DB_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- DBM_setFilter(db->filter_fetch_value, code) ;
+ DB_File db
+ SV * code
+ SV * RETVAL = &PL_sv_undef ;
+ CODE:
+ DBM_setFilter(db->filter_fetch_value, code) ;
SV *
filter_store_value(db, code)
- DB_File db
- SV * code
- SV * RETVAL = &PL_sv_undef ;
- CODE:
- DBM_setFilter(db->filter_store_value, code) ;
+ DB_File db
+ SV * code
+ SV * RETVAL = &PL_sv_undef ;
+ CODE:
+ DBM_setFilter(db->filter_store_value, code) ;
diff --git a/gnu/usr.bin/perl/cpan/DB_File/Makefile.PL b/gnu/usr.bin/perl/cpan/DB_File/Makefile.PL
index 03dbf964299..774c219f5a5 100644
--- a/gnu/usr.bin/perl/cpan/DB_File/Makefile.PL
+++ b/gnu/usr.bin/perl/cpan/DB_File/Makefile.PL
@@ -46,14 +46,14 @@ my $WALL = '' ;
my $CORE = $ENV{PERL_CORE} ? '' : '-D_NOT_CORE';
WriteMakefile(
- NAME => 'DB_File',
- LIBS => ["-L${LIB_DIR} $LIBS"],
- INC => "-I$INC_DIR",
- VERSION_FROM => 'DB_File.pm',
- XS_VERSION => eval MM->parse_version('DB_File.pm'),
- XSPROTOARG => '-noprototypes',
- DEFINE => "$CORE $OS2 $VER_INFO $COMPAT185 $WALL",
- OBJECT => 'version$(OBJ_EXT) DB_File$(OBJ_EXT)',
+ NAME => 'DB_File',
+ LIBS => ["-L${LIB_DIR} $LIBS"],
+ INC => "-I$INC_DIR",
+ VERSION_FROM => 'DB_File.pm',
+ XS_VERSION => eval MM->parse_version('DB_File.pm'),
+ XSPROTOARG => '-noprototypes',
+ DEFINE => "$CORE $OS2 $VER_INFO $COMPAT185 $WALL",
+ OBJECT => 'version$(OBJ_EXT) DB_File$(OBJ_EXT)',
((ExtUtils::MakeMaker->VERSION() gt '6.30')
? ('LICENSE' => 'perl')
: ()
@@ -69,46 +69,72 @@ WriteMakefile(
? (INSTALLDIRS => 'site')
: (INSTALLDIRS => 'perl'),
- #OPTIMIZE => '-g',
- 'depend' => { 'Makefile' => 'config.in',
+ #OPTIMIZE => '-g',
+ 'depend' => { 'Makefile' => 'config.in',
'version$(OBJ_EXT)' => 'version.c'},
- 'clean' => { FILES => 'constants.h constants.xs DB_File.pm.bak t/db-btree.t.bak t/db-hash.t.bak t/db-recno.t.bak t/pod.t.bak' },
- 'macro' => { my_files => "@files" },
+ 'clean' => { FILES => 'constants.h constants.xs DB_File.pm.bak t/db-btree.t.bak t/db-hash.t.bak t/db-recno.t.bak t/pod.t.bak' },
+ 'macro' => { my_files => "@files" },
'dist' => { COMPRESS => 'gzip', SUFFIX => 'gz',
- DIST_DEFAULT => 'MyDoubleCheck tardist'},
- );
+ DIST_DEFAULT => 'MyDoubleCheck tardist'},
+
+ ( eval { ExtUtils::MakeMaker->VERSION(6.46) }
+ ? ( META_MERGE => {
+
+ "meta-spec" => { version => 2 },
+
+ resources => {
+
+ bugtracker => {
+ web => 'https://github.com/pmqs/DB_File/issues'
+ },
+
+ homepage => 'https://github.com/pmqs/DB_File',
+
+ repository => {
+ type => 'git',
+ url => 'git://github.com/pmqs/DB_File.git',
+ web => 'https://github.com/pmqs/DB_File',
+ },
+ },
+ }
+ )
+ : ()
+ ),
+
+
+ );
my @names = qw(
- BTREEMAGIC
- BTREEVERSION
- DB_LOCK
- DB_SHMEM
- DB_TXN
- HASHMAGIC
- HASHVERSION
- MAX_PAGE_NUMBER
- MAX_PAGE_OFFSET
- MAX_REC_NUMBER
- RET_ERROR
- RET_SPECIAL
- RET_SUCCESS
- R_CURSOR
- R_DUP
- R_FIRST
- R_FIXEDLEN
- R_IAFTER
- R_IBEFORE
- R_LAST
- R_NEXT
- R_NOKEY
- R_NOOVERWRITE
- R_PREV
- R_RECNOSYNC
- R_SETCURSOR
- R_SNAPSHOT
- __R_UNUSED
- );
+ BTREEMAGIC
+ BTREEVERSION
+ DB_LOCK
+ DB_SHMEM
+ DB_TXN
+ HASHMAGIC
+ HASHVERSION
+ MAX_PAGE_NUMBER
+ MAX_PAGE_OFFSET
+ MAX_REC_NUMBER
+ RET_ERROR
+ RET_SPECIAL
+ RET_SUCCESS
+ R_CURSOR
+ R_DUP
+ R_FIRST
+ R_FIXEDLEN
+ R_IAFTER
+ R_IBEFORE
+ R_LAST
+ R_NEXT
+ R_NOKEY
+ R_NOOVERWRITE
+ R_PREV
+ R_RECNOSYNC
+ R_SETCURSOR
+ R_SNAPSHOT
+ __R_UNUSED
+ );
if (eval {require ExtUtils::Constant; 1}) {
# Check the constants above all appear in @EXPORT in DB_File.pm
@@ -171,9 +197,9 @@ sub MY::postamble { <<'EOM' } ;
MyDoubleCheck:
@echo Checking config.in is setup for a release
- @(grep "^LIB.*/usr/local/BerkeleyDB" config.in && \
- grep "^INCLUDE.*/usr/local/BerkeleyDB" config.in && \
- grep "^#DBNAME.*" config.in) >/dev/null || \
+ @(grep "^LIB.*/usr/local/BerkeleyDB" config.in && \
+ grep "^INCLUDE.*/usr/local/BerkeleyDB" config.in && \
+ grep "^#DBNAME.*" config.in) >/dev/null || \
(echo config.in needs fixing ; exit 1)
@echo config.in is ok
@echo
@@ -183,16 +209,16 @@ MyDoubleCheck:
@echo DB_File.xs is ok
@echo
@echo Checking for $$^W in files: $(my_files)
- @perl -ne ' \
- exit 1 if /^\s*local\s*\(\s*\$$\^W\s*\)/;' $(my_files) || \
- (echo found unexpected $$^W ; exit 1)
+ @perl -ne ' \
+ exit 1 if /^\s*local\s*\(\s*\$$\^W\s*\)/;' $(my_files) || \
+ (echo found unexpected $$^W ; exit 1)
@echo No $$^W found.
@echo
@echo Checking for 'use vars' in files: $(my_files)
- @perl -ne ' \
- exit 0 if /^__(DATA|END)__/; \
- exit 1 if /^\s*use\s+vars/;' $(my_files) || \
- (echo found unexpected "use vars"; exit 1)
+ @perl -ne ' \
+ exit 0 if /^__(DATA|END)__/; \
+ exit 1 if /^\s*use\s+vars/;' $(my_files) || \
+ (echo found unexpected "use vars"; exit 1)
@echo No 'use vars' found.
@echo
@echo All files are OK for a release.
@@ -223,24 +249,24 @@ sub ParseCONFIG
open(F, "$CONFIG") or die "Cannot open file $CONFIG: $!\n" ;
while (<F>) {
- s/^\s*|\s*$//g ;
- next if /^\s*$/ or /^\s*#/ ;
- s/\s*#\s*$// ;
-
- ($k, $v) = split(/\s+=\s+/, $_, 2) ;
- $k = uc $k ;
- if ($ValidOption{$k}) {
- delete $Parsed{$k} ;
- $Info{$k} = $v ;
- }
- else {
- push(@badkey, $k) ;
- }
+ s/^\s*|\s*$//g ;
+ next if /^\s*$/ or /^\s*#/ ;
+ s/\s*#\s*$// ;
+
+ ($k, $v) = split(/\s+=\s+/, $_, 2) ;
+ $k = uc $k ;
+ if ($ValidOption{$k}) {
+ delete $Parsed{$k} ;
+ $Info{$k} = $v ;
+ }
+ else {
+ push(@badkey, $k) ;
+ }
}
close F ;
print "Unknown keys in $CONFIG ignored [@badkey]\n"
- if @badkey ;
+ if @badkey ;
# check parsed values
my @missing = () ;
@@ -252,18 +278,18 @@ sub ParseCONFIG
$DB_NAME = $ENV{'DB_FILE_NAME'} || $Info{'DBNAME'} ;
$COMPAT185 = "-DCOMPAT185 -DDB_LIBRARY_COMPATIBILITY_API"
if (defined $ENV{'DB_FILE_COMPAT185'} &&
- $ENV{'DB_FILE_COMPAT185'} =~ /^\s*(on|true|1)\s*$/i) ||
- $Info{'COMPAT185'} =~ /^\s*(on|true|1)\s*$/i ;
+ $ENV{'DB_FILE_COMPAT185'} =~ /^\s*(on|true|1)\s*$/i) ||
+ $Info{'COMPAT185'} =~ /^\s*(on|true|1)\s*$/i ;
my $PREFIX = $Info{'PREFIX'} ;
my $HASH = $Info{'HASH'} ;
$VER_INFO = "-DmDB_Prefix_t=${PREFIX} -DmDB_Hash_t=${HASH}" ;
print <<EOM if 0 ;
- INCLUDE [$INC_DIR]
- LIB [$LIB_DIR]
- HASH [$HASH]
- PREFIX [$PREFIX]
+ INCLUDE [$INC_DIR]
+ LIB [$LIB_DIR]
+ HASH [$HASH]
+ PREFIX [$PREFIX]
DBNAME [$DB_NAME]
EOM
@@ -295,10 +321,10 @@ sub UpDowngrade
# From: warnings::warnif(x,y);
# To: $^W && carp(y); # warnif -- x
$warn_sub = sub {
- s/^(\s*)(no\s+warnings)/${1}local (\$^W) = 0; #$2/ ;
- s/^(\s*)(use\s+warnings)/${1}local (\$^W) = 1; #$2/ ;
+ s/^(\s*)(no\s+warnings)/${1}local (\$^W) = 0; #$2/ ;
+ s/^(\s*)(use\s+warnings)/${1}local (\$^W) = 1; #$2/ ;
- s/^(\s*)warnings::warnif\s*\((.*?)\s*,\s*(.*?)\)\s*;/${1}\$^W && carp($3); # warnif - $2/ ;
+ s/^(\s*)warnings::warnif\s*\((.*?)\s*,\s*(.*?)\)\s*;/${1}\$^W && carp($3); # warnif - $2/ ;
};
}
else {
@@ -310,14 +336,14 @@ sub UpDowngrade
# From: $^W && carp(y); # warnif -- x
# To: warnings::warnif(x,y);
$warn_sub = sub {
- s/^(\s*)local\s*\(\$\^W\)\s*=\s*\d+\s*;\s*#\s*((no|use)\s+warnings.*)/$1$2/ ;
- s/^(\s*)\$\^W\s+\&\&\s*carp\s*\((.*?)\)\s*;\s*#\s*warnif\s*-\s*(.*)/${1}warnings::warnif($3, $2);/ ;
+ s/^(\s*)local\s*\(\$\^W\)\s*=\s*\d+\s*;\s*#\s*((no|use)\s+warnings.*)/$1$2/ ;
+ s/^(\s*)\$\^W\s+\&\&\s*carp\s*\((.*?)\)\s*;\s*#\s*warnif\s*-\s*(.*)/${1}warnings::warnif($3, $2);/ ;
};
}
if ($] < 5.006000) {
$our_sub = sub {
- if ( /^(\s*)our\s+\(\s*([^)]+\s*)\)/ ) {
+ if ( /^(\s*)our\s+\(\s*([^)]+\s*)\)/ ) {
my $indent = $1;
my $vars = join ' ', split /\s*,\s*/, $2;
$_ = "${indent}use vars qw($vars);\n";
@@ -326,7 +352,7 @@ sub UpDowngrade
}
else {
$our_sub = sub {
- if ( /^(\s*)use\s+vars\s+qw\((.*?)\)/ ) {
+ if ( /^(\s*)use\s+vars\s+qw\((.*?)\)/ ) {
my $indent = $1;
my $vars = join ', ', split ' ', $2;
$_ = "${indent}our ($vars);\n";
@@ -349,11 +375,11 @@ sub doUpDown
while (<>)
{
- print, last if /^__(END|DATA)__/ ;
+ print, last if /^__(END|DATA)__/ ;
- &{ $our_sub }();
- &{ $warn_sub }();
- print ;
+ &{ $our_sub }();
+ &{ $warn_sub }();
+ print ;
}
return if eof ;
diff --git a/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.pm b/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.pm
index bc0fec720a1..2742a05e658 100644
--- a/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.pm
+++ b/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.pm
@@ -3,7 +3,7 @@ package Digest::MD5;
use strict;
use vars qw($VERSION @ISA @EXPORT_OK);
-$VERSION = '2.55';
+$VERSION = '2.55_01';
require Exporter;
*import = \&Exporter::import;
diff --git a/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.xs b/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.xs
index fda44bbe4a9..964d37fb0e5 100644
--- a/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.xs
+++ b/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.xs
@@ -39,8 +39,6 @@ extern "C" {
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
-#include <sys/types.h>
-#include <md5.h>
#ifdef __cplusplus
}
#endif
@@ -90,6 +88,46 @@ static MAGIC *THX_sv_magicext(pTHX_ SV *sv, SV *obj, int type,
# define SvPVbyte(sv, lp) (sv_utf8_downgrade((sv), 0), SvPV((sv), (lp)))
#endif
+/* Perl does not guarantee that U32 is exactly 32 bits. Some system
+ * has no integral type with exactly 32 bits. For instance, A Cray has
+ * short, int and long all at 64 bits so we need to apply this macro
+ * to reduce U32 values to 32 bits at appropriate places. If U32
+ * really does have 32 bits then this is a no-op.
+ */
+#if BYTEORDER > 0x4321 || defined(TRUNCATE_U32)
+ #define TO32(x) ((x) & 0xFFFFffff)
+ #define TRUNC32(x) ((x) &= 0xFFFFffff)
+#else
+ #define TO32(x) (x)
+ #define TRUNC32(x) /*nothing*/
+#endif
+
+/* The MD5 algorithm is defined in terms of little endian 32-bit
+ * values. The following macros (and functions) allow us to convert
+ * between native integers and such values.
+ */
+static void u2s(U32 u, U8* s)
+{
+ *s++ = (U8)(u & 0xFF);
+ *s++ = (U8)((u >> 8) & 0xFF);
+ *s++ = (U8)((u >> 16) & 0xFF);
+ *s = (U8)((u >> 24) & 0xFF);
+}
+
+#define s2u(s,u) ((u) = (U32)(*s) | \
+ ((U32)(*(s+1)) << 8) | \
+ ((U32)(*(s+2)) << 16) | \
+ ((U32)(*(s+3)) << 24))
+
+/* This structure keeps the current state of algorithm.
+ */
+typedef struct {
+ U32 A, B, C, D; /* current digest */
+ U32 bytes_low; /* counts bytes in message */
+ U32 bytes_high; /* turn it into a 64-bit counter */
+ U8 buffer[128]; /* collect complete 64 byte blocks */
+} MD5_CTX;
+
#if defined(USE_ITHREADS) && defined(MGf_DUP)
STATIC int dup_md5_ctx(pTHX_ MAGIC *mg, CLONE_PARAMS *params)
{
@@ -126,6 +164,300 @@ STATIC const struct {
};
#endif
+
+/* Padding is added at the end of the message in order to fill a
+ * complete 64 byte block (- 8 bytes for the message length). The
+ * padding is also the reason the buffer in MD5_CTX have to be
+ * 128 bytes.
+ */
+static const unsigned char PADDING[64] = {
+ 0x80, 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, 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
+};
+
+/* Constants for MD5Transform routine.
+ */
+#define S11 7
+#define S12 12
+#define S13 17
+#define S14 22
+#define S21 5
+#define S22 9
+#define S23 14
+#define S24 20
+#define S31 4
+#define S32 11
+#define S33 16
+#define S34 23
+#define S41 6
+#define S42 10
+#define S43 15
+#define S44 21
+
+/* F, G, H and I are basic MD5 functions.
+ */
+#define F(x, y, z) ((((x) & ((y) ^ (z))) ^ (z)))
+#define G(x, y, z) F(z, x, y)
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define I(x, y, z) ((y) ^ ((x) | (~z)))
+
+/* ROTATE_LEFT rotates x left n bits.
+ */
+#define ROTATE_LEFT(x, n) (((x) << (n) | ((x) >> (32-(n)))))
+
+/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
+ * Rotation is separate from addition to prevent recomputation.
+ */
+#define FF(a, b, c, d, s, ac) \
+ (a) += F ((b), (c), (d)) + (NEXTx) + (U32)(ac); \
+ TRUNC32((a)); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ TRUNC32((a));
+
+#define GG(a, b, c, d, x, s, ac) \
+ (a) += G ((b), (c), (d)) + X[x] + (U32)(ac); \
+ TRUNC32((a)); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ TRUNC32((a));
+
+#define HH(a, b, c, d, x, s, ac) \
+ (a) += H ((b), (c), (d)) + X[x] + (U32)(ac); \
+ TRUNC32((a)); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ TRUNC32((a));
+
+#define II(a, b, c, d, x, s, ac) \
+ (a) += I ((b), (c), (d)) + X[x] + (U32)(ac); \
+ TRUNC32((a)); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ TRUNC32((a));
+
+
+static void
+MD5Init(MD5_CTX *ctx)
+{
+ /* Start state */
+ ctx->A = 0x67452301;
+ ctx->B = 0xefcdab89;
+ ctx->C = 0x98badcfe;
+ ctx->D = 0x10325476;
+
+ /* message length */
+ ctx->bytes_low = ctx->bytes_high = 0;
+}
+
+
+static void
+MD5Transform(MD5_CTX* ctx, const U8* buf, STRLEN blocks)
+{
+#ifdef MD5_DEBUG
+ static int tcount = 0;
+#endif
+
+ U32 A = ctx->A;
+ U32 B = ctx->B;
+ U32 C = ctx->C;
+ U32 D = ctx->D;
+
+ do {
+ U32 a = A;
+ U32 b = B;
+ U32 c = C;
+ U32 d = D;
+
+ U32 X[16]; /* little-endian values, used in round 2-4 */
+ U32 *uptr = X;
+ U32 tmp;
+ #define NEXTx (s2u(buf,tmp), buf += 4, *uptr++ = tmp)
+
+#ifdef MD5_DEBUG
+ if (buf == ctx->buffer)
+ fprintf(stderr,"%5d: Transform ctx->buffer", ++tcount);
+ else
+ fprintf(stderr,"%5d: Transform %p (%d)", ++tcount, buf, blocks);
+
+ {
+ int i;
+ fprintf(stderr,"[");
+ for (i = 0; i < 16; i++) {
+ fprintf(stderr,"%x,", x[i]); /* FIXME */
+ }
+ fprintf(stderr,"]\n");
+ }
+#endif
+
+ /* Round 1 */
+ FF (a, b, c, d, S11, 0xd76aa478); /* 1 */
+ FF (d, a, b, c, S12, 0xe8c7b756); /* 2 */
+ FF (c, d, a, b, S13, 0x242070db); /* 3 */
+ FF (b, c, d, a, S14, 0xc1bdceee); /* 4 */
+ FF (a, b, c, d, S11, 0xf57c0faf); /* 5 */
+ FF (d, a, b, c, S12, 0x4787c62a); /* 6 */
+ FF (c, d, a, b, S13, 0xa8304613); /* 7 */
+ FF (b, c, d, a, S14, 0xfd469501); /* 8 */
+ FF (a, b, c, d, S11, 0x698098d8); /* 9 */
+ FF (d, a, b, c, S12, 0x8b44f7af); /* 10 */
+ FF (c, d, a, b, S13, 0xffff5bb1); /* 11 */
+ FF (b, c, d, a, S14, 0x895cd7be); /* 12 */
+ FF (a, b, c, d, S11, 0x6b901122); /* 13 */
+ FF (d, a, b, c, S12, 0xfd987193); /* 14 */
+ FF (c, d, a, b, S13, 0xa679438e); /* 15 */
+ FF (b, c, d, a, S14, 0x49b40821); /* 16 */
+
+ /* Round 2 */
+ GG (a, b, c, d, 1, S21, 0xf61e2562); /* 17 */
+ GG (d, a, b, c, 6, S22, 0xc040b340); /* 18 */
+ GG (c, d, a, b, 11, S23, 0x265e5a51); /* 19 */
+ GG (b, c, d, a, 0, S24, 0xe9b6c7aa); /* 20 */
+ GG (a, b, c, d, 5, S21, 0xd62f105d); /* 21 */
+ GG (d, a, b, c, 10, S22, 0x2441453); /* 22 */
+ GG (c, d, a, b, 15, S23, 0xd8a1e681); /* 23 */
+ GG (b, c, d, a, 4, S24, 0xe7d3fbc8); /* 24 */
+ GG (a, b, c, d, 9, S21, 0x21e1cde6); /* 25 */
+ GG (d, a, b, c, 14, S22, 0xc33707d6); /* 26 */
+ GG (c, d, a, b, 3, S23, 0xf4d50d87); /* 27 */
+ GG (b, c, d, a, 8, S24, 0x455a14ed); /* 28 */
+ GG (a, b, c, d, 13, S21, 0xa9e3e905); /* 29 */
+ GG (d, a, b, c, 2, S22, 0xfcefa3f8); /* 30 */
+ GG (c, d, a, b, 7, S23, 0x676f02d9); /* 31 */
+ GG (b, c, d, a, 12, S24, 0x8d2a4c8a); /* 32 */
+
+ /* Round 3 */
+ HH (a, b, c, d, 5, S31, 0xfffa3942); /* 33 */
+ HH (d, a, b, c, 8, S32, 0x8771f681); /* 34 */
+ HH (c, d, a, b, 11, S33, 0x6d9d6122); /* 35 */
+ HH (b, c, d, a, 14, S34, 0xfde5380c); /* 36 */
+ HH (a, b, c, d, 1, S31, 0xa4beea44); /* 37 */
+ HH (d, a, b, c, 4, S32, 0x4bdecfa9); /* 38 */
+ HH (c, d, a, b, 7, S33, 0xf6bb4b60); /* 39 */
+ HH (b, c, d, a, 10, S34, 0xbebfbc70); /* 40 */
+ HH (a, b, c, d, 13, S31, 0x289b7ec6); /* 41 */
+ HH (d, a, b, c, 0, S32, 0xeaa127fa); /* 42 */
+ HH (c, d, a, b, 3, S33, 0xd4ef3085); /* 43 */
+ HH (b, c, d, a, 6, S34, 0x4881d05); /* 44 */
+ HH (a, b, c, d, 9, S31, 0xd9d4d039); /* 45 */
+ HH (d, a, b, c, 12, S32, 0xe6db99e5); /* 46 */
+ HH (c, d, a, b, 15, S33, 0x1fa27cf8); /* 47 */
+ HH (b, c, d, a, 2, S34, 0xc4ac5665); /* 48 */
+
+ /* Round 4 */
+ II (a, b, c, d, 0, S41, 0xf4292244); /* 49 */
+ II (d, a, b, c, 7, S42, 0x432aff97); /* 50 */
+ II (c, d, a, b, 14, S43, 0xab9423a7); /* 51 */
+ II (b, c, d, a, 5, S44, 0xfc93a039); /* 52 */
+ II (a, b, c, d, 12, S41, 0x655b59c3); /* 53 */
+ II (d, a, b, c, 3, S42, 0x8f0ccc92); /* 54 */
+ II (c, d, a, b, 10, S43, 0xffeff47d); /* 55 */
+ II (b, c, d, a, 1, S44, 0x85845dd1); /* 56 */
+ II (a, b, c, d, 8, S41, 0x6fa87e4f); /* 57 */
+ II (d, a, b, c, 15, S42, 0xfe2ce6e0); /* 58 */
+ II (c, d, a, b, 6, S43, 0xa3014314); /* 59 */
+ II (b, c, d, a, 13, S44, 0x4e0811a1); /* 60 */
+ II (a, b, c, d, 4, S41, 0xf7537e82); /* 61 */
+ II (d, a, b, c, 11, S42, 0xbd3af235); /* 62 */
+ II (c, d, a, b, 2, S43, 0x2ad7d2bb); /* 63 */
+ II (b, c, d, a, 9, S44, 0xeb86d391); /* 64 */
+
+ A += a; TRUNC32(A);
+ B += b; TRUNC32(B);
+ C += c; TRUNC32(C);
+ D += d; TRUNC32(D);
+
+ } while (--blocks);
+ ctx->A = A;
+ ctx->B = B;
+ ctx->C = C;
+ ctx->D = D;
+}
+
+
+#ifdef MD5_DEBUG
+static char*
+ctx_dump(MD5_CTX* ctx)
+{
+ static char buf[1024];
+ sprintf(buf, "{A=%x,B=%x,C=%x,D=%x,%d,%d(%d)}",
+ ctx->A, ctx->B, ctx->C, ctx->D,
+ ctx->bytes_low, ctx->bytes_high, (ctx->bytes_low&0x3F));
+ return buf;
+}
+#endif
+
+
+static void
+MD5Update(MD5_CTX* ctx, const U8* buf, STRLEN len)
+{
+ STRLEN blocks;
+ STRLEN fill = ctx->bytes_low & 0x3F;
+
+#ifdef MD5_DEBUG
+ static int ucount = 0;
+ fprintf(stderr,"%5i: Update(%s, %p, %d)\n", ++ucount, ctx_dump(ctx),
+ buf, len);
+#endif
+
+ ctx->bytes_low += len;
+ if (ctx->bytes_low < len) /* wrap around */
+ ctx->bytes_high++;
+
+ if (fill) {
+ STRLEN missing = 64 - fill;
+ if (len < missing) {
+ Copy(buf, ctx->buffer + fill, len, U8);
+ return;
+ }
+ Copy(buf, ctx->buffer + fill, missing, U8);
+ MD5Transform(ctx, ctx->buffer, 1);
+ buf += missing;
+ len -= missing;
+ }
+
+ blocks = len >> 6;
+ if (blocks)
+ MD5Transform(ctx, buf, blocks);
+ if ( (len &= 0x3F)) {
+ Copy(buf + (blocks << 6), ctx->buffer, len, U8);
+ }
+}
+
+
+static void
+MD5Final(U8* digest, MD5_CTX *ctx)
+{
+ STRLEN fill = ctx->bytes_low & 0x3F;
+ STRLEN padlen = (fill < 56 ? 56 : 120) - fill;
+ U32 bits_low, bits_high;
+#ifdef MD5_DEBUG
+ fprintf(stderr," Final: %s\n", ctx_dump(ctx));
+#endif
+ Copy(PADDING, ctx->buffer + fill, padlen, U8);
+ fill += padlen;
+
+ bits_low = ctx->bytes_low << 3;
+ bits_high = (ctx->bytes_high << 3) | (ctx->bytes_low >> 29);
+ u2s(bits_low, ctx->buffer + fill); fill += 4;
+ u2s(bits_high, ctx->buffer + fill); fill += 4;
+
+ MD5Transform(ctx, ctx->buffer, fill >> 6);
+#ifdef MD5_DEBUG
+ fprintf(stderr," Result: %s\n", ctx_dump(ctx));
+#endif
+
+ u2s(ctx->A, digest);
+ u2s(ctx->B, digest+4);
+ u2s(ctx->C, digest+8);
+ u2s(ctx->D, digest+12);
+}
+
+#ifndef INT2PTR
+#define INT2PTR(any,d) (any)(d)
+#endif
+
static MD5_CTX* get_md5_ctx(pTHX_ SV* sv)
{
MAGIC *mg;
@@ -306,7 +638,7 @@ addfile(self, fh)
InputStream fh
PREINIT:
MD5_CTX* context = get_md5_ctx(aTHX_ self);
- STRLEN fill = (context->count >> 3) & (MD5_BLOCK_LENGTH - 1);
+ STRLEN fill = context->bytes_low & 0x3F;
#ifdef USE_HEAP_INSTEAD_OF_STACK
unsigned char* buffer;
#else
@@ -371,12 +703,14 @@ context(ctx, ...)
PPCODE:
if (items > 2) {
STRLEN len;
- ctx->count = SvUV(ST(1)) << 3;
+ unsigned long blocks = SvUV(ST(1));
unsigned char *buf = (unsigned char *)(SvPV(ST(2), len));
- ctx->state[0] = buf[ 0] | (buf[ 1]<<8) | (buf[ 2]<<16) | (buf[ 3]<<24);
- ctx->state[1] = buf[ 4] | (buf[ 5]<<8) | (buf[ 6]<<16) | (buf[ 7]<<24);
- ctx->state[2] = buf[ 8] | (buf[ 9]<<8) | (buf[10]<<16) | (buf[11]<<24);
- ctx->state[3] = buf[12] | (buf[13]<<8) | (buf[14]<<16) | (buf[15]<<24);
+ ctx->A = buf[ 0] | (buf[ 1]<<8) | (buf[ 2]<<16) | (buf[ 3]<<24);
+ ctx->B = buf[ 4] | (buf[ 5]<<8) | (buf[ 6]<<16) | (buf[ 7]<<24);
+ ctx->C = buf[ 8] | (buf[ 9]<<8) | (buf[10]<<16) | (buf[11]<<24);
+ ctx->D = buf[12] | (buf[13]<<8) | (buf[14]<<16) | (buf[15]<<24);
+ ctx->bytes_low = blocks << 6;
+ ctx->bytes_high = blocks >> 26;
if (items == 4) {
buf = (unsigned char *)(SvPV(ST(3), len));
MD5Update(ctx, buf, len);
@@ -386,20 +720,17 @@ context(ctx, ...)
XSRETURN(0);
}
- w=ctx->state[0]; out[ 0]=w; out[ 1]=(w>>8); out[ 2]=(w>>16); out[ 3]=(w>>24);
- w=ctx->state[1]; out[ 4]=w; out[ 5]=(w>>8); out[ 6]=(w>>16); out[ 7]=(w>>24);
- w=ctx->state[2]; out[ 8]=w; out[ 9]=(w>>8); out[10]=(w>>16); out[11]=(w>>24);
- w=ctx->state[3]; out[12]=w; out[13]=(w>>8); out[14]=(w>>16); out[15]=(w>>24);
+ w=ctx->A; out[ 0]=w; out[ 1]=(w>>8); out[ 2]=(w>>16); out[ 3]=(w>>24);
+ w=ctx->B; out[ 4]=w; out[ 5]=(w>>8); out[ 6]=(w>>16); out[ 7]=(w>>24);
+ w=ctx->C; out[ 8]=w; out[ 9]=(w>>8); out[10]=(w>>16); out[11]=(w>>24);
+ w=ctx->D; out[12]=w; out[13]=(w>>8); out[14]=(w>>16); out[15]=(w>>24);
EXTEND(SP, 3);
- ST(0) = sv_2mortal(newSViv((ctx->count >> 3)
- - ((ctx->count >> 3) % MD5_BLOCK_LENGTH)));
+ ST(0) = sv_2mortal(newSVuv(ctx->bytes_high << 26 |
+ ctx->bytes_low >> 6));
ST(1) = sv_2mortal(newSVpv(out, 16));
- ST(2) = sv_2mortal(newSVpv("",0));
- if (((ctx->count >> 3) & (MD5_BLOCK_LENGTH - 1)) != 0)
- ST(2) = sv_2mortal(newSVpv((char *)ctx->buffer,
- (ctx->count >> 3) & (MD5_BLOCK_LENGTH - 1)));
-
+ ST(2) = sv_2mortal(newSVpv((char *)ctx->buffer,
+ ctx->bytes_low & 0x3F));
XSRETURN(3);
void
diff --git a/gnu/usr.bin/perl/cpan/Digest-MD5/Makefile.PL b/gnu/usr.bin/perl/cpan/Digest-MD5/Makefile.PL
index 1015058bacd..76906d10463 100644
--- a/gnu/usr.bin/perl/cpan/Digest-MD5/Makefile.PL
+++ b/gnu/usr.bin/perl/cpan/Digest-MD5/Makefile.PL
@@ -5,7 +5,6 @@ use Config qw(%Config);
use ExtUtils::MakeMaker;
my @extra;
-push(@extra, DEFINE => "-DU32_ALIGNMENT_REQUIRED") unless free_u32_alignment();
push(@extra, INSTALLDIRS => 'perl') if $] >= 5.008 && $] < 5.012;
if ($^O eq 'VMS') {
@@ -39,119 +38,6 @@ WriteMakefile(
-sub free_u32_alignment
-{
- $|=1;
- if (exists $Config{d_u32align}) {
- print "Perl's config says that U32 access must ";
- print "not " unless $Config{d_u32align};
- print "be aligned.\n";
- return !$Config{d_u32align};
- }
-
- if ($^O eq 'VMS' || $^O eq 'MSWin32') {
- print "Assumes that $^O implies free alignment for U32 access.\n";
- return 1;
- }
-
- if ($^O eq 'hpux' && $Config{osvers} < 11.0) {
- print "Will not test for free alignment on older HP-UX.\n";
- return 0;
- }
-
- print "Testing alignment requirements for U32... ";
- open(ALIGN_TEST, ">u32align.c") or die "$!";
- print ALIGN_TEST <<'EOT'; close(ALIGN_TEST);
-/*--------------------------------------------------------------*/
-/* This program allocates a buffer of U8 (char) and then tries */
-/* to access it through a U32 pointer at every offset. The */
-/* program is expected to die with a bus error/seg fault for */
-/* machines that do not support unaligned integer read/write */
-/*--------------------------------------------------------------*/
-
-#include <stdio.h>
-#include "EXTERN.h"
-#include "perl.h"
-
-#ifdef printf
- #undef printf
-#endif
-
-int main(int argc, char** argv, char** env)
-{
-#if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
- volatile U8 buf[] = "\0\0\0\1\0\0\0\0";
- volatile U32 *up;
- int i;
-
- if (sizeof(U32) != 4) {
- printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
- exit(1);
- }
-
- fflush(stdout);
-
- for (i = 0; i < 4; i++) {
- up = (U32*)(buf + i);
- if (! ((*up == 1 << (8*i)) || /* big-endian */
- (*up == 1 << (8*(3-i))) /* little-endian */
- )
- )
- {
- printf("read failed (%x)\n", *up);
- exit(2);
- }
- }
-
- /* write test */
- for (i = 0; i < 4; i++) {
- up = (U32*)(buf + i);
- *up = 0xBeef;
- if (*up != 0xBeef) {
- printf("write failed (%x)\n", *up);
- exit(3);
- }
- }
-
- printf("no restrictions\n");
- exit(0);
-#else
- printf("unusual byteorder, playing safe\n");
- exit(1);
-#endif
- return 0;
-}
-/*--------------------------------------------------------------*/
-EOT
-
- my $cc_cmd = "$Config{cc} $Config{ccflags} -I$Config{archlibexp}/CORE";
- my $exe = "u32align$Config{exe_ext}";
- $cc_cmd .= " -o $exe";
- my $rc;
- $rc = system("$cc_cmd $Config{ldflags} u32align.c $Config{libs}");
- if ($rc) {
- print "Can't compile test program. Will ensure alignment to play safe.\n\n";
- unlink("u32align.c", $exe, "u32align$Config{obj_ext}");
- return 0;
- }
-
- $rc = system("./$exe");
- unlink("u32align.c", $exe, "u32align$Config{obj_ext}");
-
- return 1 unless $rc;
-
- if ($rc > 0x80) {
- (my $cp = $rc) >>= 8;
- print "Test program exit status was $cp\n";
- }
- if ($rc & 0x80) {
- $rc &= ~0x80;
- unlink("core") && print "Core dump deleted\n";
- }
- print "signal $rc\n" if $rc && $rc < 0x80;
- return 0;
-}
-
BEGIN {
# compatibility with older versions of MakeMaker
my $developer = -d ".git";
diff --git a/gnu/usr.bin/perl/cpan/Digest-MD5/t/files.t b/gnu/usr.bin/perl/cpan/Digest-MD5/t/files.t
index 728ceb130b8..ef64088c8c5 100755
--- a/gnu/usr.bin/perl/cpan/Digest-MD5/t/files.t
+++ b/gnu/usr.bin/perl/cpan/Digest-MD5/t/files.t
@@ -21,7 +21,7 @@ EOT
# This is the output of: 'md5sum README MD5.xs rfc1321.txt'
$EXPECT = <<EOT;
2f93400875dbb56f36691d5f69f3eba5 README
-641f5e20d5d53222c50ba99fbddabd15 MD5.xs
+5b8b4f96bc27a425501307c5461970db MD5.xs
754b9db19f79dbc4992f7166eb0f37ce rfc1321.txt
EOT
}
diff --git a/gnu/usr.bin/perl/cpan/Encode/Encode.pm b/gnu/usr.bin/perl/cpan/Encode/Encode.pm
index bc566879e30..de06ba149ea 100644
--- a/gnu/usr.bin/perl/cpan/Encode/Encode.pm
+++ b/gnu/usr.bin/perl/cpan/Encode/Encode.pm
@@ -1,5 +1,5 @@
#
-# $Id: Encode.pm,v 3.01 2019/03/13 00:25:25 dankogai Exp $
+# $Id: Encode.pm,v 3.06 2020/05/02 02:31:14 dankogai Exp $
#
package Encode;
use strict;
@@ -7,7 +7,7 @@ use warnings;
use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
our $VERSION;
BEGIN {
- $VERSION = sprintf "%d.%02d", q$Revision: 3.01 $ =~ /(\d+)/g;
+ $VERSION = sprintf "%d.%02d", q$Revision: 3.06 $ =~ /(\d+)/g;
require XSLoader;
XSLoader::load( __PACKAGE__, $VERSION );
}
@@ -65,7 +65,7 @@ require Encode::Config;
eval {
local $SIG{__DIE__};
local $SIG{__WARN__};
- local @INC = @INC;
+ local @INC = @INC || ();
pop @INC if $INC[-1] eq '.';
require Encode::ConfigLocal;
};
diff --git a/gnu/usr.bin/perl/cpan/Encode/Encode.xs b/gnu/usr.bin/perl/cpan/Encode/Encode.xs
index feeccd8752b..4baf2963aa4 100644
--- a/gnu/usr.bin/perl/cpan/Encode/Encode.xs
+++ b/gnu/usr.bin/perl/cpan/Encode/Encode.xs
@@ -1,5 +1,5 @@
/*
- $Id: Encode.xs,v 2.47 2019/03/13 00:26:18 dankogai Exp dankogai $
+ $Id: Encode.xs,v 2.48 2020/03/02 04:34:34 dankogai Exp $
*/
#define PERL_NO_GET_CONTEXT
@@ -231,7 +231,7 @@ encode_method(pTHX_ const encode_t * enc, const encpage_t * dir, SV * src, U8 *
if (dir == enc->f_utf8) {
STRLEN clen;
UV ch =
- utf8n_to_uvuni(s+slen, (tlen-sdone-slen),
+ utf8n_to_uvchr(s+slen, (tlen-sdone-slen),
&clen, UTF8_ALLOW_ANY|UTF8_CHECK_ONLY);
/* if non-representable multibyte prefix at end of current buffer - break*/
if (clen > tlen - sdone - slen) break;
@@ -982,6 +982,7 @@ ALIAS:
PREINIT:
SV *obj;
INIT:
+ PERL_UNUSED_VAR(ix);
SvGETMAGIC(encoding);
CODE:
if (!SvOK(encoding))
@@ -1003,6 +1004,7 @@ ALIAS:
PREINIT:
SV *obj;
INIT:
+ PERL_UNUSED_VAR(ix);
SvGETMAGIC(encoding);
CODE:
if (!SvOK(encoding))
diff --git a/gnu/usr.bin/perl/cpan/Encode/bin/enc2xs b/gnu/usr.bin/perl/cpan/Encode/bin/enc2xs
index 619b64b7573..1209baa9cdd 100644
--- a/gnu/usr.bin/perl/cpan/Encode/bin/enc2xs
+++ b/gnu/usr.bin/perl/cpan/Encode/bin/enc2xs
@@ -11,7 +11,7 @@ use warnings;
use Getopt::Std;
use Config;
my @orig_ARGV = @ARGV;
-our $VERSION = do { my @r = (q$Revision: 2.21 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+our $VERSION = do { my @r = (q$Revision: 2.23 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
# These may get re-ordered.
# RAW is a do_now as inserted by &enter
@@ -144,6 +144,7 @@ getopts('CM:SQqOo:f:n:v',\%opt);
$opt{M} and make_makefile_pl($opt{M}, @ARGV);
$opt{C} and make_configlocal_pm($opt{C}, @ARGV);
$opt{v} ||= $ENV{ENC2XS_VERBOSE};
+$opt{q} ||= $ENV{ENC2XS_NO_COMMENTS};
sub verbose {
print STDERR @_ if $opt{v};
@@ -914,24 +915,7 @@ sub decode_U
}
my @uname;
-sub char_names
-{
- my $s = do "unicore/Name.pl";
- die "char_names: unicore/Name.pl: $!\n" unless defined $s;
- pos($s) = 0;
- while ($s =~ /\G([0-9a-f]+)\t([0-9a-f]*)\t(.*?)\s*\n/igc)
- {
- my $name = $3;
- my $s = hex($1);
- last if $s >= 0x10000;
- my $e = length($2) ? hex($2) : $s;
- for (my $i = $s; $i <= $e; $i++)
- {
- $uname[$i] = $name;
-# print sprintf("U%04X $name\n",$i);
- }
- }
-}
+sub char_names{} # cf. https://rt.cpan.org/Ticket/Display.html?id=132471
sub output_ucm_page
{
diff --git a/gnu/usr.bin/perl/cpan/Encode/encoding.pm b/gnu/usr.bin/perl/cpan/Encode/encoding.pm
index c3f324d29fa..a01833451fc 100644
--- a/gnu/usr.bin/perl/cpan/Encode/encoding.pm
+++ b/gnu/usr.bin/perl/cpan/Encode/encoding.pm
@@ -1,6 +1,6 @@
-# $Id: encoding.pm,v 2.22 2018/02/11 05:32:03 dankogai Exp $
+# $Id: encoding.pm,v 3.00 2020/04/19 10:56:28 dankogai Exp $
package encoding;
-our $VERSION = sprintf "%d.%02d", q$Revision: 2.22 $ =~ /(\d+)/g;
+our $VERSION = sprintf "%d.%02d", q$Revision: 3.00 $ =~ /(\d+)/g;
use Encode;
use strict;
diff --git a/gnu/usr.bin/perl/cpan/Encode/lib/Encode/Guess.pm b/gnu/usr.bin/perl/cpan/Encode/lib/Encode/Guess.pm
index 41fc19b7991..87a725d9993 100644
--- a/gnu/usr.bin/perl/cpan/Encode/lib/Encode/Guess.pm
+++ b/gnu/usr.bin/perl/cpan/Encode/lib/Encode/Guess.pm
@@ -2,7 +2,7 @@ package Encode::Guess;
use strict;
use warnings;
use Encode qw(:fallbacks find_encoding);
-our $VERSION = do { my @r = ( q$Revision: 2.7 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
+our $VERSION = do { my @r = ( q$Revision: 2.8 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };
my $Canon = 'Guess';
use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG};
@@ -158,7 +158,7 @@ sub guess {
$nline++;
}
$try{ascii}
- or return "Encodings too ambiguous: ", join( " or ", keys %try );
+ or return "Encodings too ambiguous: " . join( " or ", keys %try );
return $try{ascii};
}
diff --git a/gnu/usr.bin/perl/cpan/Encode/t/enc_utf8.t b/gnu/usr.bin/perl/cpan/Encode/t/enc_utf8.t
index be7d487804c..ea8b80d2334 100755
--- a/gnu/usr.bin/perl/cpan/Encode/t/enc_utf8.t
+++ b/gnu/usr.bin/perl/cpan/Encode/t/enc_utf8.t
@@ -1,4 +1,4 @@
-# $Id: enc_utf8.t,v 2.5 2017/06/10 17:23:50 dankogai Exp $
+# $Id: enc_utf8.t,v 2.6 2019/12/25 09:23:21 dankogai Exp $
# This is the twin of enc_eucjp.t .
BEGIN {
@@ -8,21 +8,22 @@ BEGIN {
exit 0;
}
unless (find PerlIO::Layer 'perlio') {
- print "1..0 # Skip: PerlIO was not built\n";
- exit 0;
+ print "1..0 # Skip: PerlIO was not built\n";
+ exit 0;
}
if (ord("A") == 193) {
- print "1..0 # encoding pragma does not support EBCDIC platforms\n";
- exit(0);
+ print "1..0 # encoding pragma does not support EBCDIC platforms\n";
+ exit(0);
}
if ($] >= 5.025003 and !$Config{usecperl}){
- print "1..0 # Skip: Perl <=5.25.2 or cperl required\n";
- exit 0;
+ print "1..0 # Skip: Perl <=5.25.2 or cperl required\n";
+ exit 0;
}
}
no warnings "deprecated";
use encoding 'utf8';
+use warnings;
my @c = (127, 128, 255, 256);
diff --git a/gnu/usr.bin/perl/cpan/Encode/t/whatwg-aliases.json b/gnu/usr.bin/perl/cpan/Encode/t/whatwg-aliases.json
deleted file mode 100644
index 4307b0cc486..00000000000
--- a/gnu/usr.bin/perl/cpan/Encode/t/whatwg-aliases.json
+++ /dev/null
@@ -1,455 +0,0 @@
-[
- {
- "encodings": [
- {
- "labels": [
- "unicode-1-1-utf-8",
- "utf-8",
- "utf8"
- ],
- "name": "UTF-8"
- }
- ],
- "heading": "The Encoding"
- },
- {
- "encodings": [
- {
- "labels": [
- "866",
- "cp866",
- "csibm866",
- "ibm866"
- ],
- "name": "IBM866"
- },
- {
- "labels": [
- "csisolatin2",
- "iso-8859-2",
- "iso-ir-101",
- "iso8859-2",
- "iso88592",
- "iso_8859-2",
- "iso_8859-2:1987",
- "l2",
- "latin2"
- ],
- "name": "ISO-8859-2"
- },
- {
- "labels": [
- "csisolatin3",
- "iso-8859-3",
- "iso-ir-109",
- "iso8859-3",
- "iso88593",
- "iso_8859-3",
- "iso_8859-3:1988",
- "l3",
- "latin3"
- ],
- "name": "ISO-8859-3"
- },
- {
- "labels": [
- "csisolatin4",
- "iso-8859-4",
- "iso-ir-110",
- "iso8859-4",
- "iso88594",
- "iso_8859-4",
- "iso_8859-4:1988",
- "l4",
- "latin4"
- ],
- "name": "ISO-8859-4"
- },
- {
- "labels": [
- "csisolatincyrillic",
- "cyrillic",
- "iso-8859-5",
- "iso-ir-144",
- "iso8859-5",
- "iso88595",
- "iso_8859-5",
- "iso_8859-5:1988"
- ],
- "name": "ISO-8859-5"
- },
- {
- "labels": [
- "arabic",
- "asmo-708",
- "csiso88596e",
- "csiso88596i",
- "csisolatinarabic",
- "ecma-114",
- "iso-8859-6",
- "iso-8859-6-e",
- "iso-8859-6-i",
- "iso-ir-127",
- "iso8859-6",
- "iso88596",
- "iso_8859-6",
- "iso_8859-6:1987"
- ],
- "name": "ISO-8859-6"
- },
- {
- "labels": [
- "csisolatingreek",
- "ecma-118",
- "elot_928",
- "greek",
- "greek8",
- "iso-8859-7",
- "iso-ir-126",
- "iso8859-7",
- "iso88597",
- "iso_8859-7",
- "iso_8859-7:1987",
- "sun_eu_greek"
- ],
- "name": "ISO-8859-7"
- },
- {
- "labels": [
- "csiso88598e",
- "csisolatinhebrew",
- "hebrew",
- "iso-8859-8",
- "iso-8859-8-e",
- "iso-ir-138",
- "iso8859-8",
- "iso88598",
- "iso_8859-8",
- "iso_8859-8:1988",
- "visual"
- ],
- "name": "ISO-8859-8"
- },
- {
- "labels": [
- "csiso88598i",
- "iso-8859-8-i",
- "logical"
- ],
- "name": "ISO-8859-8-I"
- },
- {
- "labels": [
- "csisolatin6",
- "iso-8859-10",
- "iso-ir-157",
- "iso8859-10",
- "iso885910",
- "l6",
- "latin6"
- ],
- "name": "ISO-8859-10"
- },
- {
- "labels": [
- "iso-8859-13",
- "iso8859-13",
- "iso885913"
- ],
- "name": "ISO-8859-13"
- },
- {
- "labels": [
- "iso-8859-14",
- "iso8859-14",
- "iso885914"
- ],
- "name": "ISO-8859-14"
- },
- {
- "labels": [
- "csisolatin9",
- "iso-8859-15",
- "iso8859-15",
- "iso885915",
- "iso_8859-15",
- "l9"
- ],
- "name": "ISO-8859-15"
- },
- {
- "labels": [
- "iso-8859-16"
- ],
- "name": "ISO-8859-16"
- },
- {
- "labels": [
- "cskoi8r",
- "koi",
- "koi8",
- "koi8-r",
- "koi8_r"
- ],
- "name": "KOI8-R"
- },
- {
- "labels": [
- "koi8-ru",
- "koi8-u"
- ],
- "name": "KOI8-U"
- },
- {
- "labels": [
- "csmacintosh",
- "mac",
- "macintosh",
- "x-mac-roman"
- ],
- "name": "macintosh"
- },
- {
- "labels": [
- "dos-874",
- "iso-8859-11",
- "iso8859-11",
- "iso885911",
- "tis-620",
- "windows-874"
- ],
- "name": "windows-874"
- },
- {
- "labels": [
- "cp1250",
- "windows-1250",
- "x-cp1250"
- ],
- "name": "windows-1250"
- },
- {
- "labels": [
- "cp1251",
- "windows-1251",
- "x-cp1251"
- ],
- "name": "windows-1251"
- },
- {
- "labels": [
- "ansi_x3.4-1968",
- "ascii",
- "cp1252",
- "cp819",
- "csisolatin1",
- "ibm819",
- "iso-8859-1",
- "iso-ir-100",
- "iso8859-1",
- "iso88591",
- "iso_8859-1",
- "iso_8859-1:1987",
- "l1",
- "latin1",
- "us-ascii",
- "windows-1252",
- "x-cp1252"
- ],
- "name": "windows-1252"
- },
- {
- "labels": [
- "cp1253",
- "windows-1253",
- "x-cp1253"
- ],
- "name": "windows-1253"
- },
- {
- "labels": [
- "cp1254",
- "csisolatin5",
- "iso-8859-9",
- "iso-ir-148",
- "iso8859-9",
- "iso88599",
- "iso_8859-9",
- "iso_8859-9:1989",
- "l5",
- "latin5",
- "windows-1254",
- "x-cp1254"
- ],
- "name": "windows-1254"
- },
- {
- "labels": [
- "cp1255",
- "windows-1255",
- "x-cp1255"
- ],
- "name": "windows-1255"
- },
- {
- "labels": [
- "cp1256",
- "windows-1256",
- "x-cp1256"
- ],
- "name": "windows-1256"
- },
- {
- "labels": [
- "cp1257",
- "windows-1257",
- "x-cp1257"
- ],
- "name": "windows-1257"
- },
- {
- "labels": [
- "cp1258",
- "windows-1258",
- "x-cp1258"
- ],
- "name": "windows-1258"
- },
- {
- "labels": [
- "x-mac-cyrillic",
- "x-mac-ukrainian"
- ],
- "name": "x-mac-cyrillic"
- }
- ],
- "heading": "Legacy single-byte encodings"
- },
- {
- "encodings": [
- {
- "labels": [
- "chinese",
- "csgb2312",
- "csiso58gb231280",
- "gb2312",
- "gb_2312",
- "gb_2312-80",
- "gbk",
- "iso-ir-58",
- "x-gbk"
- ],
- "name": "GBK"
- },
- {
- "labels": [
- "gb18030"
- ],
- "name": "gb18030"
- }
- ],
- "heading": "Legacy multi-byte Chinese (simplified) encodings"
- },
- {
- "encodings": [
- {
- "labels": [
- "big5",
- "big5-hkscs",
- "cn-big5",
- "csbig5",
- "x-x-big5"
- ],
- "name": "Big5"
- }
- ],
- "heading": "Legacy multi-byte Chinese (traditional) encodings"
- },
- {
- "encodings": [
- {
- "labels": [
- "cseucpkdfmtjapanese",
- "euc-jp",
- "x-euc-jp"
- ],
- "name": "EUC-JP"
- },
- {
- "labels": [
- "csiso2022jp",
- "iso-2022-jp"
- ],
- "name": "ISO-2022-JP"
- },
- {
- "labels": [
- "csshiftjis",
- "ms932",
- "ms_kanji",
- "shift-jis",
- "shift_jis",
- "sjis",
- "windows-31j",
- "x-sjis"
- ],
- "name": "Shift_JIS"
- }
- ],
- "heading": "Legacy multi-byte Japanese encodings"
- },
- {
- "encodings": [
- {
- "labels": [
- "cseuckr",
- "csksc56011987",
- "euc-kr",
- "iso-ir-149",
- "korean",
- "ks_c_5601-1987",
- "ks_c_5601-1989",
- "ksc5601",
- "ksc_5601",
- "windows-949"
- ],
- "name": "EUC-KR"
- }
- ],
- "heading": "Legacy multi-byte Korean encodings"
- },
- {
- "encodings": [
- {
- "labels": [
- "csiso2022kr",
- "hz-gb-2312",
- "iso-2022-cn",
- "iso-2022-cn-ext",
- "iso-2022-kr"
- ],
- "name": "replacement"
- },
- {
- "labels": [
- "utf-16be"
- ],
- "name": "UTF-16BE"
- },
- {
- "labels": [
- "utf-16",
- "utf-16le"
- ],
- "name": "UTF-16LE"
- },
- {
- "labels": [
- "x-user-defined"
- ],
- "name": "x-user-defined"
- }
- ],
- "heading": "Legacy miscellaneous encodings"
- }
-]
diff --git a/gnu/usr.bin/perl/cpan/Encode/t/whatwg-aliases.t b/gnu/usr.bin/perl/cpan/Encode/t/whatwg-aliases.t
deleted file mode 100644
index ffc030bb757..00000000000
--- a/gnu/usr.bin/perl/cpan/Encode/t/whatwg-aliases.t
+++ /dev/null
@@ -1,66 +0,0 @@
-# This test checks aliases support based on the list in the
-# WHATWG Encoding Living Standard
-#
-# https://encoding.spec.whatwg.org/
-#
-# The input of this test is the file whatwg-aliases.json downloaded from
-# https://encoding.spec.whatwg.org/encodings.json
-#
-# To run:
-# AUTHOR_TESTING=1 prove -l t/whatwg-aliases.t
-
-
-use Test::More
- ($ENV{AUTHOR_TESTING} || $ENV{RELEASE_TESTING})
- ? 'no_plan'
- : (skip_all => 'For maintainers only');
-use Encode 'find_encoding';
-use JSON::PP 'decode_json';
-use File::Spec;
-use FindBin;
-
-my $encodings = decode_json(do {
- # https://encoding.spec.whatwg.org/encodings.json
- open my $f, '<', File::Spec->catdir($FindBin::Bin, 'whatwg-aliases.json');
- local $/;
- <$f>
-});
-
-my %IGNORE = map { $_ => '' } qw(
- replacement
- utf8
-);
-
-my %TODO = (
- 'ISO-8859-8-I' => 'Not supported',
- 'gb18030' => 'Not supported',
- '866' => 'Not supported',
- 'x-user-defined' => 'Not supported',
- # ...
-);
-
-for my $section (@$encodings) {
- for my $enc (@{$section->{encodings}}) {
-
- my $name = $enc->{name};
-
- next if exists $IGNORE{$name};
-
- local $TODO = $TODO{$name} if exists $TODO{$name};
-
- my $encoding = find_encoding($name);
- isa_ok($encoding, 'Encode::Encoding', $name);
-
- for my $label (@{$enc->{labels}}) {
- local $TODO = $TODO{$label} if exists $TODO{$label};
-
- my $e = find_encoding($label);
- if (isa_ok($e, 'Encode::Encoding', $label)) {
- next if exists $IGNORE{$label};
- is($e->name, $encoding->name, "$label ->name is $name")
- }
- }
- }
-}
-
-done_testing;
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm b/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm
index 7bcd941bd2a..047c007145e 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm
@@ -108,7 +108,6 @@ $INSTALL_QUIET = 1
$ENV{MAKEFLAGS} =~ /\b(s|silent|quiet)\b/);
my $Curdir = File::Spec->curdir;
-my $Perm_Dir = $ENV{PERL_CORE} ? 0770 : 0755;
sub _estr(@) {
return join "\n",'!' x 72,@_,'!' x 72,'';
@@ -800,7 +799,7 @@ sub install { #XXX OS-SPECIFIC
_chdir($cwd);
}
foreach my $targetdir (sort keys %check_dirs) {
- _mkpath( $targetdir, 0, $Perm_Dir, $verbose, $dry_run );
+ _mkpath( $targetdir, 0, 0755, $verbose, $dry_run );
}
foreach my $found (@found_files) {
my ($diff, $ffd, $origfile, $mode, $size, $atime, $mtime,
@@ -814,7 +813,7 @@ sub install { #XXX OS-SPECIFIC
$targetfile= _unlink_or_rename( $targetfile, 'tryhard', 'install' )
unless $dry_run;
} elsif ( ! -d $targetdir ) {
- _mkpath( $targetdir, 0, $Perm_Dir, $verbose, $dry_run );
+ _mkpath( $targetdir, 0, 0755, $verbose, $dry_run );
}
print "Installing $targetfile\n";
@@ -854,7 +853,7 @@ sub install { #XXX OS-SPECIFIC
if ($pack{'write'}) {
$dir = install_rooted_dir(dirname($pack{'write'}));
- _mkpath( $dir, 0, $Perm_Dir, $verbose, $dry_run );
+ _mkpath( $dir, 0, 0755, $verbose, $dry_run );
print "Writing $pack{'write'}\n" if $verbose;
$packlist->write(install_rooted_file($pack{'write'})) unless $dry_run;
}
@@ -1200,7 +1199,7 @@ environment variable will silence this output.
sub pm_to_blib {
my($fromto,$autodir,$pm_filter) = @_;
- _mkpath($autodir,0,$Perm_Dir) if defined $autodir;
+ _mkpath($autodir,0,0755) if defined $autodir;
while(my($from, $to) = each %$fromto) {
if( -f $to && -s $from == -s $to && -M $to < -M $from ) {
print "Skip $to (unchanged)\n" unless $INSTALL_QUIET;
@@ -1223,7 +1222,7 @@ sub pm_to_blib {
# we wont try hard here. its too likely to mess things up.
forceunlink($to);
} else {
- _mkpath(dirname($to),0,$Perm_Dir);
+ _mkpath(dirname($to),0,0755);
}
if ($need_filtering) {
run_filter($pm_filter, $from, $to);
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm
index 4924c81fbea..c5101c37b7d 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm
@@ -7,8 +7,8 @@ use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
@ISA = qw(Exporter);
@EXPORT = qw(cp rm_f rm_rf mv cat eqtime mkpath touch test_f test_d chmod
dos2unix);
-$VERSION = '7.34';
-$VERSION = eval $VERSION;
+$VERSION = '7.44';
+$VERSION =~ tr/_//d;
my $Is_VMS = $^O eq 'VMS';
my $Is_VMS_mode = $Is_VMS;
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
index 0323ed40fa7..484fa5b69d5 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm
@@ -10,8 +10,8 @@ our @ISA = qw(Exporter);
our @EXPORT = qw(test_harness pod2man perllocal_install uninstall
warn_if_old_packlist test_s cp_nonempty);
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
my $Is_VMS = $^O eq 'VMS';
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
index 700cb7347ab..deec54d2883 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
@@ -2,8 +2,8 @@ package ExtUtils::Liblist;
use strict;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
use File::Spec;
require ExtUtils::Liblist::Kid;
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
index a6da855862f..e040a899edb 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm
@@ -11,8 +11,8 @@ use 5.006;
use strict;
use warnings;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44_01';
+$VERSION =~ tr/_//d;
use ExtUtils::MakeMaker::Config;
use Cwd 'cwd';
@@ -49,8 +49,10 @@ sub _unix_os2_ext {
# $potential_libs
# this is a rewrite of Andy Dougherty's extliblist in perl
+ require Text::ParseWords;
+
my ( @searchpath ); # from "-L/path" entries in $potential_libs
- my ( @libpath ) = split " ", $Config{'libpth'} || '';
+ my ( @libpath ) = Text::ParseWords::quotewords( '\s+', 0, $Config{'libpth'} || '' );
my ( @ldloadlibs, @bsloadlibs, @extralibs, @ld_run_path, %ld_run_path_seen );
my ( @libs, %libs_seen );
my ( $fullname, @fullname );
@@ -63,7 +65,7 @@ sub _unix_os2_ext {
$potential_libs =~ s/(^|\s)(-F)\s*(\S+)/$1-Wl,$2 -Wl,$3/g;
}
- foreach my $thislib ( split ' ', $potential_libs ) {
+ foreach my $thislib ( Text::ParseWords::quotewords( '\s+', 0, $potential_libs) ) {
my ( $custom_name ) = '';
# Handle possible linker path arguments.
@@ -88,6 +90,7 @@ sub _unix_os2_ext {
$thislib = $self->catdir( $pwd, $thislib );
}
push( @searchpath, $thislib );
+ $thislib = qq{"$thislib"} if $thislib =~ / /; # protect spaces if there
push( @extralibs, "$ptype$thislib" );
push( @ldloadlibs, "$rtype$thislib" );
next;
@@ -171,6 +174,10 @@ sub _unix_os2_ext {
&& -f ( $fullname = "$thispth/lib$thislib.$Config_dlext" ) )
{
}
+ elsif ( $^O eq 'darwin' && require DynaLoader && defined &DynaLoader::dl_load_file
+ && DynaLoader::dl_load_file( $fullname = "$thispth/lib$thislib.$so", 0 ) )
+ {
+ }
elsif ( -f ( $fullname = "$thispth/$thislib$Config_libext" ) ) {
}
elsif ( -f ( $fullname = "$thispth/lib$thislib.dll$Config_libext" ) ) {
@@ -207,7 +214,8 @@ sub _unix_os2_ext {
# Now update library lists
# what do we know about this library...
- my $is_dyna = ( $fullname !~ /\Q$Config_libext\E\z/ );
+ # "Sounds like we should always assume it's a dynamic library on AIX."
+ my $is_dyna = $^O eq 'aix' ? 1 : ( $fullname !~ /\Q$Config_libext\E\z/ );
my $in_perl = ( $libs =~ /\B-l:?\Q${thislib}\E\b/s );
# include the path to the lib once in the dynamic linker path
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
index b2c360bca3a..f1ffa91849e 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
@@ -3,8 +3,8 @@ package ExtUtils::MM;
use strict;
use ExtUtils::MakeMaker::Config;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
require ExtUtils::Liblist;
require ExtUtils::MakeMaker;
@@ -23,9 +23,9 @@ ExtUtils::MM - OS adjusted ExtUtils::MakeMaker subclass
B<FOR INTERNAL USE ONLY>
-ExtUtils::MM is a subclass of ExtUtils::MakeMaker which automatically
+ExtUtils::MM is a subclass of L<ExtUtils::MakeMaker> which automatically
chooses the appropriate OS specific subclass for you
-(ie. ExtUils::MM_Unix, etc...).
+(ie. L<ExtUtils::MM_Unix>, etc...).
It also provides a convenient alias via the MM class (I didn't want
MakeMaker modules outside of ExtUtils/).
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm
index b114ee49d30..654e2213594 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm
@@ -1,8 +1,8 @@
package ExtUtils::MM_AIX;
use strict;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
use ExtUtils::MakeMaker::Config;
require ExtUtils::MM_Unix;
@@ -19,10 +19,10 @@ ExtUtils::MM_AIX - AIX specific subclass of ExtUtils::MM_Unix
=head1 DESCRIPTION
-This is a subclass of ExtUtils::MM_Unix which contains functionality for
+This is a subclass of L<ExtUtils::MM_Unix> which contains functionality for
AIX.
-Unless otherwise stated it works just like ExtUtils::MM_Unix
+Unless otherwise stated it works just like ExtUtils::MM_Unix.
=head2 Overridden methods
@@ -50,7 +50,9 @@ sub xs_dlsyms_ext {
sub xs_dlsyms_arg {
my($self, $file) = @_;
- return qq{-bE:${file}};
+ my $arg = qq{-bE:${file}};
+ $arg = '-Wl,'.$arg if $Config{lddlflags} =~ /-Wl,-bE:/;
+ return $arg;
}
sub init_others {
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
index f0106a44c9d..4f4b252c261 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
@@ -1,8 +1,8 @@
package ExtUtils::MM_Any;
use strict;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
use Carp;
use File::Spec;
@@ -46,7 +46,7 @@ ExtUtils::MM_Any is a superclass for the ExtUtils::MM_* set of
modules. It contains methods which are either inherently
cross-platform or are written in a cross-platform manner.
-Subclass off of ExtUtils::MM_Any I<and> ExtUtils::MM_Unix. This is a
+Subclass off of ExtUtils::MM_Any I<and> L<ExtUtils::MM_Unix>. This is a
temporary solution.
B<THIS MAY BE TEMPORARY!>
@@ -195,7 +195,7 @@ sub can_redirect_error {
my $is_dmake = $self->is_make_type('dmake');
-Returns true if C<<$self->make>> is the given type; possibilities are:
+Returns true if C<< $self->make >> is the given type; possibilities are:
gmake GNU make
dmake
@@ -1167,7 +1167,7 @@ MAKE_FRAG
$mm->_fix_metadata_before_conversion( \%metadata );
-Fixes errors in the metadata before it's handed off to CPAN::Meta for
+Fixes errors in the metadata before it's handed off to L<CPAN::Meta> for
conversion. This hopefully results in something that can be used further
on, no guarantee is made though.
@@ -2214,7 +2214,9 @@ sub init_INSTALL_from_INSTALL_BASE {
my $key = "INSTALL".$dir.$uc_thing;
$install{$key} ||=
- $self->catdir('$(INSTALL_BASE)', @{$map{$thing}});
+ ($thing =~ /^man.dir$/ and not $Config{lc $key})
+ ? 'none'
+ : $self->catdir('$(INSTALL_BASE)', @{$map{$thing}});
}
}
@@ -2416,7 +2418,7 @@ Initializes the macro definitions having to do with compiling and
linking used by tools_other() and places them in the $MM object.
If there is no description, its the same as the parameter to
-WriteMakefile() documented in ExtUtils::MakeMaker.
+WriteMakefile() documented in L<ExtUtils::MakeMaker>.
=cut
@@ -2767,7 +2769,7 @@ END
=head2 File::Spec wrappers
-ExtUtils::MM_Any is a subclass of File::Spec. The methods noted here
+ExtUtils::MM_Any is a subclass of L<File::Spec>. The methods noted here
override File::Spec.
@@ -2908,8 +2910,7 @@ sub libscan {
my($self,$path) = @_;
if ($path =~ m<^README\.pod$>i) {
- warn "WARNING: Older versions of ExtUtils::MakeMaker may errantly install $path as part of this distribution. It is recommended to avoid using this path in CPAN modules.\n"
- unless $ENV{PERL_CORE};
+ warn "WARNING: Older versions of ExtUtils::MakeMaker may errantly install $path as part of this distribution. It is recommended to avoid using this path in CPAN modules.\n";
return '';
}
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
index 6fb7911390c..d62a7d132f3 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
@@ -12,7 +12,7 @@ ExtUtils::MM_BeOS - methods to override UN*X behaviour in ExtUtils::MakeMaker
=head1 DESCRIPTION
-See ExtUtils::MM_Unix for a documentation of the methods provided
+See L<ExtUtils::MM_Unix> for a documentation of the methods provided
there. This package overrides the implementation of these methods, not
the semantics.
@@ -26,8 +26,8 @@ require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
=item os_flavor
@@ -58,6 +58,8 @@ sub init_linker {
=back
+=cut
+
1;
__END__
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
index 934e65f913d..2052c7c3aa3 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
@@ -9,8 +9,8 @@ require ExtUtils::MM_Unix;
require ExtUtils::MM_Win32;
our @ISA = qw( ExtUtils::MM_Unix );
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
=head1 NAME
@@ -23,7 +23,7 @@ ExtUtils::MM_Cygwin - methods to override UN*X behaviour in ExtUtils::MakeMaker
=head1 DESCRIPTION
-See ExtUtils::MM_Unix for a documentation of the methods provided there.
+See L<ExtUtils::MM_Unix> for a documentation of the methods provided there.
=over 4
@@ -86,7 +86,7 @@ sub init_linker {
if ($Config{useshrplib} eq 'true') {
my $libperl = '$(PERL_INC)' .'/'. "$Config{libperl}";
- if( $] >= 5.006002 ) {
+ if( "$]" >= 5.006002 ) {
$libperl =~ s/(dll\.)?a$/dll.a/;
}
$self->{PERL_ARCHIVE} = $libperl;
@@ -104,8 +104,8 @@ sub init_linker {
Determine whether a file is native to Cygwin by checking whether it
resides inside the Cygwin installation (using Windows paths). If so,
-use C<ExtUtils::MM_Unix> to determine if it may be a command.
-Otherwise use the tests from C<ExtUtils::MM_Win32>.
+use L<ExtUtils::MM_Unix> to determine if it may be a command.
+Otherwise use the tests from L<ExtUtils::MM_Win32>.
=cut
@@ -158,16 +158,6 @@ sub install {
$s;
}
-=item all_target
-
-Build man pages, too
-
-=cut
-
-sub all_target {
- ExtUtils::MM_Unix::all_target(shift);
-}
-
=back
=cut
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
index 33a8b199df3..d5c66deb895 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
@@ -2,8 +2,8 @@ package ExtUtils::MM_DOS;
use strict;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
@@ -21,10 +21,10 @@ ExtUtils::MM_DOS - DOS specific subclass of ExtUtils::MM_Unix
=head1 DESCRIPTION
-This is a subclass of ExtUtils::MM_Unix which contains functionality
+This is a subclass of L<ExtUtils::MM_Unix> which contains functionality
for DOS.
-Unless otherwise stated, it works just like ExtUtils::MM_Unix
+Unless otherwise stated, it works just like ExtUtils::MM_Unix.
=head2 Overridden methods
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm
index f5359dca095..9ca9d2c6214 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm
@@ -7,8 +7,8 @@ BEGIN {
our @ISA = qw( ExtUtils::MM_Unix );
}
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
=head1 NAME
@@ -21,7 +21,7 @@ ExtUtils::MM_Darwin - special behaviors for OS X
=head1 DESCRIPTION
-See L<ExtUtils::MM_Unix> for L<ExtUtils::MM_Any> for documentation on the
+See L<ExtUtils::MM_Unix> or L<ExtUtils::MM_Any> for documentation on the
methods overridden here.
=head2 Overridden Methods
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
index 5646ae33406..b10e3f9cfba 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
@@ -2,8 +2,8 @@ package ExtUtils::MM_MacOS;
use strict;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
sub new {
die 'MacOS Classic (MacPerl) is no longer supported by MakeMaker';
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
index c88c4fabe98..a9e2e1af542 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
@@ -10,7 +10,7 @@ ExtUtils::MM_NW5 - methods to override UN*X behaviour in ExtUtils::MakeMaker
=head1 DESCRIPTION
-See ExtUtils::MM_Unix for a documentation of the methods provided
+See L<ExtUtils::MM_Unix> for a documentation of the methods provided
there. This package overrides the implementation of these methods, not
the semantics.
@@ -22,8 +22,8 @@ use strict;
use ExtUtils::MakeMaker::Config;
use File::Basename;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
require ExtUtils::MM_Win32;
our @ISA = qw(ExtUtils::MM_Win32);
@@ -192,7 +192,7 @@ MAKE_FRAG
}
# Reconstruct the X.Y.Z version.
my $version = join '.', map { sprintf "%d", $_ }
- $] =~ /(\d)\.(\d{3})(\d{2})/;
+ "$]" =~ /(\d)\.(\d{3})(\d{2})/;
push @m, sprintf <<'EOF', $from, $version, $to, $exportlist;
$(LD) $(LDFLAGS) %s -desc "Perl %s Extension ($(BASEEXT)) XS_VERSION: $(XS_VERSION)" -nlmversion $(NLM_VERSION) -o %s $(MYEXTLIB) $(PERL_INC)\Main.lib -commandfile %s
$(CHMOD) 755 $@
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
index dfa6dca4916..300f091c351 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
@@ -5,8 +5,8 @@ use strict;
use ExtUtils::MakeMaker qw(neatvalue);
use File::Spec;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
@@ -24,7 +24,7 @@ ExtUtils::MM_OS2 - methods to override UN*X behaviour in ExtUtils::MakeMaker
=head1 DESCRIPTION
-See ExtUtils::MM_Unix for a documentation of the methods provided
+See L<ExtUtils::MM_Unix> for a documentation of the methods provided
there. This package overrides the implementation of these methods, not
the semantics.
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
index 362d7d920fb..3e6f6d06995 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
@@ -1,8 +1,8 @@
package ExtUtils::MM_QNX;
use strict;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
require ExtUtils::MM_Unix;
our @ISA = qw(ExtUtils::MM_Unix);
@@ -19,10 +19,10 @@ ExtUtils::MM_QNX - QNX specific subclass of ExtUtils::MM_Unix
=head1 DESCRIPTION
-This is a subclass of ExtUtils::MM_Unix which contains functionality for
+This is a subclass of L<ExtUtils::MM_Unix> which contains functionality for
QNX.
-Unless otherwise stated it works just like ExtUtils::MM_Unix
+Unless otherwise stated it works just like ExtUtils::MM_Unix.
=head2 Overridden methods
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm
index cc95c415e81..4201585e326 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm
@@ -1,8 +1,8 @@
package ExtUtils::MM_UWIN;
use strict;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
require ExtUtils::MM_Unix;
our @ISA = qw(ExtUtils::MM_Unix);
@@ -19,10 +19,10 @@ ExtUtils::MM_UWIN - U/WIN specific subclass of ExtUtils::MM_Unix
=head1 DESCRIPTION
-This is a subclass of ExtUtils::MM_Unix which contains functionality for
+This is a subclass of L<ExtUtils::MM_Unix> which contains functionality for
the AT&T U/WIN UNIX on Windows environment.
-Unless otherwise stated it works just like ExtUtils::MM_Unix
+Unless otherwise stated it works just like ExtUtils::MM_Unix.
=head2 Overridden methods
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
index 45ab3e85bc4..ce1292740f0 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
@@ -14,8 +14,8 @@ use ExtUtils::MakeMaker qw($Verbose neatvalue _sprintf562);
# If we make $VERSION an our variable parse_version() breaks
use vars qw($VERSION);
-$VERSION = '7.34';
-$VERSION = eval $VERSION; ## no critic [BuiltinFunctions::ProhibitStringyEval]
+$VERSION = '7.44';
+$VERSION =~ tr/_//d;
require ExtUtils::MM_Any;
our @ISA = qw(ExtUtils::MM_Any);
@@ -37,6 +37,10 @@ BEGIN {
grep( $^O eq $_, qw(bsdos interix dragonfly) )
);
$Is{Android} = $^O =~ /android/;
+ if ( $^O eq 'darwin' && $^X eq '/usr/bin/perl' ) {
+ my @osvers = split /\./, $Config{osvers};
+ $Is{ApplCor} = ( $osvers[0] >= 18 );
+ }
}
BEGIN {
@@ -54,15 +58,15 @@ ExtUtils::MM_Unix - methods used by ExtUtils::MakeMaker
=head1 SYNOPSIS
-C<require ExtUtils::MM_Unix;>
+ require ExtUtils::MM_Unix;
=head1 DESCRIPTION
The methods provided by this package are designed to be used in
-conjunction with ExtUtils::MakeMaker. When MakeMaker writes a
+conjunction with L<ExtUtils::MakeMaker>. When MakeMaker writes a
Makefile, it creates one or more objects that inherit their methods
-from a package C<MM>. MM itself doesn't provide any methods, but it
-ISA ExtUtils::MM_Unix class. The inheritance tree of MM lets operating
+from a package L<MM|ExtUtils::MM>. MM itself doesn't provide any methods, but
+it ISA ExtUtils::MM_Unix class. The inheritance tree of MM lets operating
specific packages take the responsibility for all the methods provided
by MM_Unix. We are trying to reduce the number of the necessary
overrides by defining rather primitive operations within
@@ -89,8 +93,8 @@ Not all of the methods below are overridable in a
Makefile.PL. Overridable methods are marked as (o). All methods are
overridable by a platform specific MM_*.pm file.
-Cross-platform methods are being moved into MM_Any. If you can't find
-something that used to be in here, look in MM_Any.
+Cross-platform methods are being moved into L<MM_Any|ExtUtils::MM_Any>.
+If you can't find something that used to be in here, look in MM_Any.
=cut
@@ -132,6 +136,10 @@ sub c_o {
my $command = '$(CCCMD)';
my $flags = '$(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE)';
+ if ( $Is{ApplCor} ) {
+ $flags =~ s/"-I(\$\(PERL_INC\))"/-iwithsysroot "$1"/;
+ }
+
if (my $cpp = $Config{cpprun}) {
my $cpp_cmd = $self->const_cccmd;
$cpp_cmd =~ s/^CCCMD\s*=\s*\$\(CC\)/$cpp/;
@@ -151,8 +159,11 @@ EOF
my @exts = qw(c cpp cxx cc);
push @exts, 'C' if !$Is{OS2} and !$Is{Win32} and !$Is{Dos}; #Case-specific
$m_o = $self->{XSMULTI} ? $self->xs_obj_opt('$*$(OBJ_EXT)') : '';
+ my $dbgout = $self->dbgoutflag;
for my $ext (@exts) {
- push @m, "\n.$ext\$(OBJ_EXT) :\n\t$command $flags \$*.$ext" . ( $m_o ? " $m_o" : '' ) . "\n";
+ push @m, "\n.$ext\$(OBJ_EXT) :\n\t$command $flags "
+ .($dbgout?"$dbgout ":'')
+ ."\$*.$ext" . ( $m_o ? " $m_o" : '' ) . "\n";
}
return join "", @m;
}
@@ -170,6 +181,16 @@ sub xs_obj_opt {
"-o $output_file";
}
+=item dbgoutflag
+
+Returns a CC flag that tells the CC to emit a separate debugging symbol file
+when compiling an object file.
+
+=cut
+
+sub dbgoutflag {
+ '';
+}
=item cflags (o)
@@ -462,12 +483,20 @@ MAN1PODS = ".$self->wraplist(sort keys %{$self->{MAN1PODS}})."
MAN3PODS = ".$self->wraplist(sort keys %{$self->{MAN3PODS}})."
";
+ push @m, q{
+SDKROOT := $(shell xcrun --show-sdk-path)
+PERL_SYSROOT = $(SDKROOT)
+} if $Is{ApplCor} && $self->{'PERL_INC'} =~ m!^/System/Library/Perl/!;
push @m, q{
# Where is the Config information that we are using/depend on
-CONFIGDEP = $(PERL_ARCHLIBDEP)$(DFSEP)Config.pm $(PERL_INCDEP)$(DFSEP)config.h
-} if -e $self->catfile( $self->{PERL_INC}, 'config.h' );
+CONFIGDEP = $(PERL_ARCHLIBDEP)$(DFSEP)Config.pm $(PERL_SYSROOT)$(PERL_INCDEP)$(DFSEP)config.h
+} if $Is{ApplCor};
+ push @m, q{
+# Where is the Config information that we are using/depend on
+CONFIGDEP = $(PERL_ARCHLIBDEP)$(DFSEP)Config.pm $(PERL_INCDEP)$(DFSEP)config.h
+} if -e $self->catfile( $self->{PERL_INC}, 'config.h' ) && !$Is{ApplCor};
push @m, qq{
# Where to build things
@@ -940,6 +969,7 @@ sub dynamic_lib {
my ($v, $d, $f) = File::Spec->splitpath($ext);
my @d = File::Spec->splitdir($d);
shift @d if $d[0] eq 'lib';
+ pop @d if $d[$#d] eq '';
my $instdir = $self->catdir('$(INST_ARCHLIB)', 'auto', @d, $f);
# Dynamic library names may need special handling.
@@ -1091,7 +1121,6 @@ Finds the executables PERL and FULLPERL
sub find_perl {
my($self, $ver, $names, $dirs, $trace) = @_;
-
if ($trace >= 2){
print "Looking for perl $ver by these names:
@$names
@@ -1244,12 +1273,15 @@ sub _fixin_replace_shebang {
my ( $self, $file, $line ) = @_;
# Now figure out the interpreter name.
- my ( $cmd, $arg ) = split ' ', $line, 2;
- $cmd =~ s!^.*/!!;
+ my ( $origcmd, $arg ) = split ' ', $line, 2;
+ (my $cmd = $origcmd) =~ s!^.*/!!;
# Now look (in reverse) for interpreter in absolute PATH (unless perl).
my $interpreter;
- if ( $cmd =~ m{^perl(?:\z|[^a-z])} ) {
+ if ( defined $ENV{PERL_MM_SHEBANG} && $ENV{PERL_MM_SHEBANG} eq "relocatable" ) {
+ $interpreter = "/usr/bin/env perl";
+ }
+ elsif ( $cmd =~ m{^perl(?:\z|[^a-z])} ) {
if ( $Config{startperl} =~ m,^\#!.*/perl, ) {
$interpreter = $Config{startperl};
$interpreter =~ s,^\#!,,;
@@ -1271,6 +1303,24 @@ sub _fixin_replace_shebang {
$interpreter = $maybefile;
}
}
+
+ # If the shebang is absolute and exists in PATH, but was not
+ # the first one found, leave it alone if it's actually the
+ # same file as first one. This avoids packages built on
+ # merged-/usr systems with /usr/bin before /bin in the path
+ # breaking when installed on systems without merged /usr
+ if ($origcmd ne $interpreter and $self->file_name_is_absolute($origcmd)) {
+ my $origdir = dirname($origcmd);
+ if ($self->maybe_command($origcmd) && grep { $_ eq $origdir } @absdirs) {
+ my ($odev, $oino) = stat $origcmd;
+ my ($idev, $iino) = stat $interpreter;
+ if ($odev == $idev && $oino == $iino) {
+ warn "$origcmd is the same as $interpreter, leaving alone"
+ if $Verbose;
+ $interpreter = $origcmd;
+ }
+ }
+ }
}
# Figure out how to invoke interpreter on this machine.
@@ -1456,12 +1506,13 @@ sub init_MANPODS {
foreach my $num (1,3) {
my $installdirs = uc $self->{INSTALLDIRS};
$installdirs = '' if $installdirs eq 'PERL';
- my $mandir = $self->_expand_macros(
- $self->{ "INSTALL${installdirs}MAN${num}DIR" } );
+ my @mandirs = File::Spec->splitdir( $self->_expand_macros(
+ $self->{ "INSTALL${installdirs}MAN${num}DIR" } ) );
+ my $mandir = pop @mandirs;
my $section = $num;
foreach ($num, "${num}p", "${num}pm", qw< l n o C L >, "L$num") {
- if ( $mandir =~ /\b(?:man|cat)$_$/ ) {
+ if ( $mandir =~ /^(?:man|cat)$_$/ ) {
$section = $_;
last;
}
@@ -2062,6 +2113,11 @@ sub init_PERL {
# already escaped spaces.
$self->{FULLPERL} =~ tr/"//d if $Is{VMS};
+ # `dmake` can fail for image (aka, executable) names which start with double-quotes
+ # * push quote inward by at least one character (or the drive prefix, if present)
+ # * including any initial directory separator preserves the `file_name_is_absolute` property
+ $self->{FULLPERL} =~ s/^"(\S(:\\|:)?)/$1"/ if $self->is_make_type('dmake');
+
# Little hack to get around VMS's find_perl putting "MCR" in front
# sometimes.
$self->{ABSPERL} = $self->{PERL};
@@ -2084,6 +2140,11 @@ sub init_PERL {
# already escaped spaces.
$self->{PERL} =~ tr/"//d if $Is{VMS};
+ # `dmake` can fail for image (aka, executable) names which start with double-quotes
+ # * push quote inward by at least one character (or the drive prefix, if present)
+ # * including any initial directory separator preserves the `file_name_is_absolute` property
+ $self->{PERL} =~ s/^"(\S(:\\|:)?)/$1"/ if $self->is_make_type('dmake');
+
# Are we building the core?
$self->{PERL_CORE} = $ENV{PERL_CORE} unless exists $self->{PERL_CORE};
$self->{PERL_CORE} = 0 unless defined $self->{PERL_CORE};
@@ -2153,8 +2214,7 @@ Called by init_main. Initializes PERL_*
sub init_PERM {
my($self) = shift;
- my $perm_dir = $self->{PERL_CORE} ? 770 : 755;
- $self->{PERM_DIR} = $perm_dir unless defined $self->{PERM_DIR};
+ $self->{PERM_DIR} = 755 unless defined $self->{PERM_DIR};
$self->{PERM_RW} = 644 unless defined $self->{PERM_RW};
$self->{PERM_RWX} = 755 unless defined $self->{PERM_RWX};
@@ -2188,6 +2248,7 @@ sub init_xs {
my ($v, $d, $f) = File::Spec->splitpath($ext);
my @d = File::Spec->splitdir($d);
shift @d if defined $d[0] and $d[0] eq 'lib';
+ pop @d if $d[$#d] eq '';
my $instdir = $self->catdir('$(INST_ARCHLIB)', 'auto', @d, $f);
my $instfile = $self->catfile($instdir, $f);
push @statics, "$instfile\$(LIB_EXT)";
@@ -2758,14 +2819,14 @@ sub _find_static_libs {
Called by a utility method of makeaperl. Checks whether a given file
is an XS library by seeing whether it defines any symbols starting
-with C<boot_>.
+with C<boot_> (with an optional leading underscore - needed on MacOS).
=cut
sub xs_static_lib_is_xs {
my ($self, $libfile) = @_;
my $devnull = File::Spec->devnull;
- return `nm $libfile 2>$devnull` =~ /\bboot_/;
+ return `nm $libfile 2>$devnull` =~ /\b_?boot_/;
}
=item makefile (o)
@@ -2892,7 +2953,7 @@ sub parse_abstract {
}
close $fh;
- if ( $pod_encoding and !( $] < 5.008 or !$Config{useperlio} ) ) {
+ if ( $pod_encoding and !( "$]" < 5.008 or !$Config{useperlio} ) ) {
# Have to wrap in an eval{} for when running under PERL_CORE
# Encode isn't available during build phase and parsing
# ABSTRACT isn't important there
@@ -2914,7 +2975,7 @@ It will return the string "undef" if it can't figure out what $VERSION
is. $VERSION should be for all to see, so C<our $VERSION> or plain $VERSION
are okay, but C<my $VERSION> is not.
-C<<package Foo VERSION>> is also checked for. The first version
+C<package Foo VERSION> is also checked for. The first version
declaration found is used, but this may change as it differs from how
Perl does it.
@@ -3171,7 +3232,7 @@ PPD_PERLVERS
}
my $archname = $Config{archname};
- if ($] >= 5.008) {
+ if ("$]" >= 5.008) {
# archname did not change from 5.6 to 5.8, but those versions may
# not be not binary compatible so now we append the part of the
# version that changes when binary compatibility may change
@@ -3288,9 +3349,11 @@ sub processPL {
my $m = '';
foreach my $plfile (sort keys %$pl_files) {
- my $list = ref($pl_files->{$plfile})
- ? $pl_files->{$plfile}
- : [$pl_files->{$plfile}];
+ my $targets = $pl_files->{$plfile};
+ my $list =
+ ref($targets) eq 'HASH' ? [ sort keys %$targets ] :
+ ref($targets) eq 'ARRAY' ? $pl_files->{$plfile} :
+ [$pl_files->{$plfile}];
foreach my $target (@$list) {
if( $Is{VMS} ) {
@@ -3314,13 +3377,27 @@ sub processPL {
$perlrun = 'PERLRUNINST';
}
+ my $extra_inputs = '';
+ if( ref($targets) eq 'HASH' ) {
+ my $inputs = ref($targets->{$target})
+ ? $targets->{$target}
+ : [$targets->{$target}];
+
+ for my $input (@$inputs) {
+ if( $Is{VMS} ) {
+ $input = vmsify($self->eliminate_macros($input));
+ }
+ $extra_inputs .= ' '.$input;
+ }
+ }
+
$m .= <<MAKE_FRAG;
pure_all :: $target
\$(NOECHO) \$(NOOP)
-$target :: $plfile $pm_dep
- \$($perlrun) $plfile $target
+$target :: $plfile $pm_dep $extra_inputs
+ \$($perlrun) $plfile $target $extra_inputs
MAKE_FRAG
}
@@ -3452,7 +3529,7 @@ sub escape_newlines {
=item max_exec_len
-Using POSIX::ARG_MAX. Otherwise falling back to 4096.
+Using L<POSIX>::ARG_MAX. Otherwise falling back to 4096.
=cut
@@ -3977,13 +4054,15 @@ sub xs_o {
my ($self) = @_;
return '' unless $self->needs_linking();
my $m_o = $self->{XSMULTI} ? $self->xs_obj_opt('$*$(OBJ_EXT)') : '';
+ my $dbgout = $self->dbgoutflag;
+ $dbgout = $dbgout ? "$dbgout " : '';
my $frag = '';
# dmake makes noise about ambiguous rule
- $frag .= sprintf <<'EOF', $m_o unless $self->is_make_type('dmake');
+ $frag .= sprintf <<'EOF', $dbgout, $m_o unless $self->is_make_type('dmake');
.xs$(OBJ_EXT) :
$(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc
$(MV) $*.xsc $*.c
- $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c %s
+ $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) %s$*.c %s
EOF
if ($self->{XSMULTI}) {
for my $ext ($self->_xs_list_basenames) {
@@ -3997,16 +4076,17 @@ EOF
$self->_xsbuild_replace_macro($cccmd, 'xs', $ext, 'INC');
my $define = '$(DEFINE)';
$self->_xsbuild_replace_macro($define, 'xs', $ext, 'DEFINE');
- # 1 2 3 4
- $frag .= _sprintf562 <<'EOF', $ext, $cccmd, $m_o, $define;
+ # 1 2 3 4 5
+ $frag .= _sprintf562 <<'EOF', $ext, $cccmd, $m_o, $define, $dbgout;
%1$s$(OBJ_EXT): %1$s.xs
$(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc
$(MV) $*.xsc $*.c
- %2$s $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) %4$s $*.c %3$s
+ %2$s $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) %4$s %5$s$*.c %3$s
EOF
}
}
+ $frag =~ s/"-I(\$\(PERL_INC\))"/-iwithsysroot "$1"/sg if $Is{ApplCor};
$frag;
}
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm
index b6fbccfe349..fbf5f9ee265 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm
@@ -15,8 +15,8 @@ BEGIN {
use File::Basename;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
@@ -38,7 +38,7 @@ ExtUtils::MM_VMS - methods to override UN*X behaviour in ExtUtils::MakeMaker
=head1 DESCRIPTION
-See ExtUtils::MM_Unix for a documentation of the methods provided
+See L<ExtUtils::MM_Unix> for a documentation of the methods provided
there. This package overrides the implementation of these methods, not
the semantics.
@@ -87,7 +87,7 @@ sub ext {
Those methods which override default MM_Unix methods are marked
"(override)", while methods unique to MM_VMS are marked "(specific)".
For overridden methods, documentation is limited to an explanation
-of why this method overrides the MM_Unix method; see the ExtUtils::MM_Unix
+of why this method overrides the MM_Unix method; see the L<ExtUtils::MM_Unix>
documentation for more details.
=over 4
@@ -251,7 +251,8 @@ sub find_perl {
=item _fixin_replace_shebang (override)
-Helper routine for MM->fixin(), overridden because there's no such thing as an
+Helper routine for L<< MM->fixin()|ExtUtils::MM_Unix/fixin >>, overridden
+because there's no such thing as an
actual shebang line that will be interpreted by the shell, so we just prepend
$Config{startperl} and preserve the shebang line argument for any switches it
may contain.
@@ -587,9 +588,10 @@ sub constants {
# Cleanup paths for directories in MMS macros.
foreach my $macro ( qw [
INST_BIN INST_SCRIPT INST_LIB INST_ARCHLIB
- PERL_LIB PERL_ARCHLIB
+ PERL_LIB PERL_ARCHLIB PERL_ARCHLIBDEP
PERL_INC PERL_SRC ],
- (map { 'INSTALL'.$_ } $self->installvars)
+ (map { 'INSTALL'.$_ } $self->installvars),
+ (map { 'DESTINSTALL'.$_ } $self->installvars)
)
{
next unless defined $self->{$macro};
@@ -1487,8 +1489,8 @@ uninstall_from_vendordirs ::
=item perldepend (override)
Use VMS-style syntax for files; it's cheaper to just do it directly here
-than to have the MM_Unix method call C<catfile> repeatedly. Also, if
-we have to rebuild Config.pm, use MM[SK] to do it.
+than to have the L<MM_Unix|ExtUtils::MM_Unix> method call C<catfile>
+repeatedly. Also, if we have to rebuild Config.pm, use MM[SK] to do it.
=cut
@@ -2081,7 +2083,7 @@ sub init_linker {
Eliminate the macros in the output to the MMS/MMK file.
-(File::Spec::VMS used to do this for us, but it's being removed)
+(L<File::Spec::VMS> used to do this for us, but it's being removed)
=cut
@@ -2120,7 +2122,7 @@ identically named elements of C<%$self>, and returns the result
as a file specification in Unix syntax.
NOTE: This is the canonical version of the method. The version in
-File::Spec::VMS is deprecated.
+L<File::Spec::VMS> is deprecated.
=cut
@@ -2182,7 +2184,7 @@ force fixpath() to consider the path to be a directory or false to force
it to be a file.
NOTE: This is the canonical version of the method. The version in
-File::Spec::VMS is deprecated.
+L<File::Spec::VMS> is deprecated.
=cut
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm
index 66c7ff74722..dea49e1a566 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm
@@ -1,8 +1,8 @@
package ExtUtils::MM_VOS;
use strict;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
require ExtUtils::MM_Unix;
our @ISA = qw(ExtUtils::MM_Unix);
@@ -19,10 +19,10 @@ ExtUtils::MM_VOS - VOS specific subclass of ExtUtils::MM_Unix
=head1 DESCRIPTION
-This is a subclass of ExtUtils::MM_Unix which contains functionality for
+This is a subclass of L<ExtUtils::MM_Unix> which contains functionality for
VOS.
-Unless otherwise stated it works just like ExtUtils::MM_Unix
+Unless otherwise stated it works just like ExtUtils::MM_Unix.
=head2 Overridden methods
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm
index 43c974d5b41..3db0f45260f 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm
@@ -13,7 +13,7 @@ ExtUtils::MM_Win32 - methods to override UN*X behaviour in ExtUtils::MakeMaker
=head1 DESCRIPTION
-See ExtUtils::MM_Unix for a documentation of the methods provided
+See L<ExtUtils::MM_Unix> for a documentation of the methods provided
there. This package overrides the implementation of these methods, not
the semantics.
@@ -27,8 +27,8 @@ use ExtUtils::MakeMaker qw(neatvalue _sprintf562);
require ExtUtils::MM_Any;
require ExtUtils::MM_Unix;
our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix );
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
$ENV{EMXSHELL} = 'sh'; # to run `commands`
@@ -77,7 +77,7 @@ Changes the path separator with .
sub replace_manpage_separator {
my($self,$man) = @_;
- $man =~ s,/+,.,g;
+ $man =~ s,[/\\]+,.,g;
$man;
}
@@ -143,7 +143,7 @@ sub init_tools {
$self->{DEV_NULL} ||= '> NUL';
$self->{FIXIN} ||= $self->{PERL_CORE} ?
- "\$(PERLRUN) $self->{PERL_SRC}\\win32\\bin\\pl2bat.pl" :
+ "\$(PERLRUN) -I$self->{PERL_SRC}\\cpan\\ExtUtils-PL2Bat\\lib $self->{PERL_SRC}\\win32\\bin\\pl2bat.pl" :
'pl2bat.bat';
$self->SUPER::init_tools;
@@ -506,7 +506,7 @@ sub quote_literal {
$text =~ s{\\\\"}{\\\\\\\\\\"}g; # \\" -> \\\\\"
$text =~ s{(?<!\\)\\"}{\\\\\\"}g; # \" -> \\\"
$text =~ s{(?<!\\)"}{\\"}g; # " -> \"
- $text = qq{"$text"} if $text =~ /[ \t]/;
+ $text = qq{"$text"} if $text =~ /[ \t#]/; # hash because gmake 4.2.1
# Apply the Command Prompt parsing rules (cmd.exe)
my @text = split /("[^"]*")/, $text;
@@ -595,6 +595,16 @@ sub os_flavor {
return('Win32');
}
+=item dbgoutflag
+
+Returns a CC flag that tells the CC to emit a separate debugging symbol file
+when compiling an object file.
+
+=cut
+
+sub dbgoutflag {
+ $MSVC ? '-Fd$(*).pdb' : '';
+}
=item cflags
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm
index 85a80c638b0..4220e52dc37 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm
@@ -2,8 +2,8 @@ package ExtUtils::MM_Win95;
use strict;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
require ExtUtils::MM_Win32;
our @ISA = qw(ExtUtils::MM_Win32);
@@ -21,7 +21,7 @@ ExtUtils::MM_Win95 - method to customize MakeMaker for Win9X
=head1 DESCRIPTION
-This is a subclass of ExtUtils::MM_Win32 containing changes necessary
+This is a subclass of L<ExtUtils::MM_Win32> containing changes necessary
to get MakeMaker playing nice with command.com and other Win9Xisms.
=head2 Overridden methods
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm
index a193f3a045c..957ab164592 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm
@@ -3,8 +3,8 @@ package ExtUtils::MY;
use strict;
require ExtUtils::MM;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
our @ISA = qw(ExtUtils::MM);
{
@@ -30,7 +30,7 @@ ExtUtils::MY - ExtUtils::MakeMaker subclass for customization
B<FOR INTERNAL USE ONLY>
-ExtUtils::MY is a subclass of ExtUtils::MM. Its provided in your
+ExtUtils::MY is a subclass of L<ExtUtils::MM>. Its provided in your
Makefile.PL for you to add and override MakeMaker functionality.
It also provides a convenient alias via the MY class.
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
index 90d9eac49c1..6dceb98be41 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
@@ -24,8 +24,8 @@ my %Recognized_Att_Keys;
our %macro_fsentity; # whether a macro is a filesystem name
our %macro_dep; # whether a macro is a dependency
-our $VERSION = '7.34';
-$VERSION = eval $VERSION; ## no critic [BuiltinFunctions::ProhibitStringyEval]
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
# Emulate something resembling CVS $Revision$
(our $Revision = $VERSION) =~ s{_}{};
@@ -316,7 +316,7 @@ sub full_setup {
PERLRUNINST PERL_CORE
PERM_DIR PERM_RW PERM_RWX MAGICXS
PL_FILES PM PM_FILTER PMLIBDIRS PMLIBPARENTDIRS POLLUTE
- PREREQ_FATAL PREREQ_PM PREREQ_PRINT PRINT_PREREQ
+ PREREQ_FATAL PREREQ_PM PREREQ_PRINT PRINT_PREREQ PUREPERL_ONLY
SIGN SKIP TEST_REQUIRES TYPEMAPS UNINST VERSION VERSION_FROM XS
XSBUILD XSMULTI XSOPT XSPROTOARG XS_VERSION
clean depend dist dynamic_lib linkext macro realclean tool_autosplit
@@ -398,7 +398,7 @@ sub full_setup {
);
# 5.5.3 doesn't have any concept of vendor libs
- push @Get_from_Config, qw( vendorarchexp vendorlibexp ) if $] >= 5.006;
+ push @Get_from_Config, qw( vendorarchexp vendorlibexp ) if "$]" >= 5.006;
foreach my $item (@attrib_help){
$Recognized_Att_Keys{$item} = 1;
@@ -534,7 +534,7 @@ sub new {
# simulate "use warnings FATAL => 'all'" for vintage perls
die @_;
};
- !$self->{MIN_PERL_VERSION} or $self->{MIN_PERL_VERSION} <= $]
+ !$self->{MIN_PERL_VERSION} or $self->{MIN_PERL_VERSION} <= "$]"
};
if (!$perl_version_ok) {
if (!defined $perl_version_ok) {
@@ -693,6 +693,7 @@ END
} else {
my $value = $self->{$key};
# not going to test in FS so only stripping start
+ $value =~ s/"// if $key =~ /PERL$/ and $self->is_make_type('dmake');
$value =~ s/^"// if $key =~ /PERL$/;
$value = $self->catdir("..", $value)
unless $self->file_name_is_absolute($value);
@@ -702,7 +703,8 @@ END
}
if ($self->{PARENT}) {
$self->{PARENT}->{CHILDREN}->{$newclass} = $self;
- foreach my $opt (qw(POLLUTE PERL_CORE LINKTYPE LD OPTIMIZE)) {
+ foreach my $opt (qw(POLLUTE PERL_CORE LINKTYPE AR FULL_AR CC CCFLAGS
+ OPTIMIZE LD LDDLFLAGS LDFLAGS PERL_ARCHLIB DESTDIR)) {
if (exists $self->{PARENT}->{$opt}
and not exists $self->{$opt})
{
@@ -1264,7 +1266,7 @@ sub write_file_via_tmp {
die "write_file_via_tmp: 2nd arg must be ref" unless ref $contents;
for my $chunk (@$contents) {
my $to_write = $chunk;
- utf8::encode $to_write if !$CAN_DECODE && $] > 5.008;
+ utf8::encode $to_write if !$CAN_DECODE && "$]" > 5.008;
print $fh "$to_write\n" or die "Can't write to MakeMaker.tmp: $!";
}
close $fh or die "Can't write to MakeMaker.tmp: $!";
@@ -1427,6 +1429,8 @@ seeks to handle all of these correctly. It is currently still not possible
to portably use Unicode characters in module names, because this requires
Perl to handle Unicode filenames, which is not yet the case on Windows.
+See L<ExtUtils::MakeMaker::FAQ> for details of the design and usage.
+
=head2 How To Write A Makefile.PL
See L<ExtUtils::MakeMaker::Tutorial>.
@@ -2599,6 +2603,20 @@ In this case the program will be run multiple times using each target file.
perl bin/foobar.PL bin/foobar1
perl bin/foobar.PL bin/foobar2
+If an output file depends on extra input files beside the script itself,
+a hash ref can be used in version 7.36 and above:
+
+ PL_FILES => { 'foo.PL' => {
+ 'foo.out' => 'foo.in',
+ 'bar.out' => [qw(bar1.in bar2.in)],
+ }
+
+In this case the extra input files will be passed to the program after
+the target file:
+
+ perl foo.PL foo.out foo.in
+ perl foo.PL bar.out bar1.in bar2.in
+
PL files are normally run B<after> pm_to_blib and include INST_LIB and
INST_ARCH in their C<@INC>, so the just built modules can be
accessed... unless the PL file is making a module (or anything else in
@@ -3023,7 +3041,8 @@ be linked.
=item postamble
-Anything put here will be passed to MY::postamble() if you have one.
+Anything put here will be passed to
+L<MY::postamble()|ExtUtils::MM_Any/postamble (o)> if you have one.
=item realclean
@@ -3070,7 +3089,7 @@ or you can edit the default by saying something like:
If you are running experiments with embedding perl as a library into
other applications, you might find MakeMaker is not sufficient. You'd
-better have a look at ExtUtils::Embed which is a collection of utilities
+better have a look at L<ExtUtils::Embed> which is a collection of utilities
for embedding.
If you still need a different solution, try to develop another
@@ -3134,7 +3153,7 @@ override or create an attribute you would say something like
=head2 Distribution Support
For authors of extensions MakeMaker provides several Makefile
-targets. Most of the support comes from the ExtUtils::Manifest module,
+targets. Most of the support comes from the L<ExtUtils::Manifest> module,
where additional documentation can be found.
=over 4
@@ -3142,13 +3161,13 @@ where additional documentation can be found.
=item make distcheck
reports which files are below the build directory but not in the
-MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
+MANIFEST file and vice versa. (See L<ExtUtils::Manifest/fullcheck> for
details)
=item make skipcheck
reports which files are skipped due to the entries in the
-C<MANIFEST.SKIP> file (See ExtUtils::Manifest::skipcheck() for
+C<MANIFEST.SKIP> file (See L<ExtUtils::Manifest/skipcheck> for
details)
=item make distclean
@@ -3165,7 +3184,7 @@ C<*.bak>, C<*.old> and C<*.orig>
=item make manifest
rewrites the MANIFEST file, adding all remaining files found (See
-ExtUtils::Manifest::mkmanifest() for details)
+L<ExtUtils::Manifest/mkmanifest> for details)
=item make distdir
@@ -3365,11 +3384,16 @@ Same as the PERL_CORE parameter. The parameter overrides this.
=head1 SEE ALSO
L<Module::Build> is a pure-Perl alternative to MakeMaker which does
-not rely on make or any other external utility. It is easier to
+not rely on make or any other external utility. It may be easier to
extend to suit your needs.
-L<Module::Install> is a wrapper around MakeMaker which adds features
-not normally available.
+L<Module::Build::Tiny> is a minimal pure-Perl alternative to MakeMaker
+that follows the Build.PL protocol of Module::Build but without its
+complexity and cruft, implementing only the installation of the module
+and leaving authoring to L<mbtiny> or other authoring tools.
+
+L<Module::Install> is a (now discouraged) wrapper around MakeMaker which
+adds features not normally available.
L<ExtUtils::ModuleMaker> and L<Module::Starter> are both modules to
help you setup your distribution.
@@ -3378,10 +3402,18 @@ L<CPAN::Meta> and L<CPAN::Meta::Spec> explain CPAN Meta files in detail.
L<File::ShareDir::Install> makes it easy to install static, sometimes
also referred to as 'shared' files. L<File::ShareDir> helps accessing
-the shared files after installation.
+the shared files after installation. L<Test::File::ShareDir> helps when
+writing tests to use the shared files both before and after installation.
+
+L<Dist::Zilla> is an authoring tool which allows great customization and
+extensibility of the author experience, relying on the existing install
+tools like ExtUtils::MakeMaker only for installation.
+
+L<Dist::Milla> is a Dist::Zilla bundle that greatly simplifies common
+usage.
-L<Dist::Zilla> makes it easy for the module author to create MakeMaker-based
-distributions with lots of bells and whistles.
+L<Minilla> is a minimal authoring tool that does the same things as
+Dist::Milla without the overhead of Dist::Zilla.
=head1 AUTHORS
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm
index 0d4f8b1e611..5c93f0afdfb 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm
@@ -2,8 +2,8 @@ package ExtUtils::MakeMaker::Config;
use strict;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
use Config ();
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod
index 0ceb4f766ec..a82c53b00c0 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod
@@ -1,7 +1,7 @@
package ExtUtils::MakeMaker::FAQ;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
1;
__END__
@@ -12,7 +12,7 @@ ExtUtils::MakeMaker::FAQ - Frequently Asked Questions About MakeMaker
=head1 DESCRIPTION
-FAQs, tricks and tips for C<ExtUtils::MakeMaker>.
+FAQs, tricks and tips for L<ExtUtils::MakeMaker>.
=head2 Module Installation
@@ -84,7 +84,8 @@ installation.
=item How do I keep from installing man pages?
Recent versions of MakeMaker will only install man pages on Unix-like
-operating systems.
+operating systems by default. To generate manpages on non-Unix operating
+systems, make the "manifypods" target.
For an individual module:
@@ -568,7 +569,7 @@ What most people need to know (superclasses on top.)
|
MY
-The object actually used is of the class MY which allows you to
+The object actually used is of the class L<MY|ExtUtils::MY> which allows you to
override bits of MakeMaker inside your Makefile.PL by declaring
MY::foo() methods.
@@ -599,24 +600,24 @@ NOTE: Yes, this is a mess. See
L<http://archive.develooper.com/makemaker@perl.org/msg00134.html>
for some history.
-NOTE: When ExtUtils::MM is loaded it chooses a superclass for MM from
+NOTE: When L<ExtUtils::MM> is loaded it chooses a superclass for MM from
amongst the ExtUtils::MM_* modules based on the current operating
system.
NOTE: ExtUtils::MM_{Current OS} represents one of the ExtUtils::MM_*
-modules except ExtUtils::MM_Any chosen based on your operating system.
+modules except L<ExtUtils::MM_Any> chosen based on your operating system.
NOTE: The main object used by MakeMaker is a PACK### object, *not*
-ExtUtils::MakeMaker. It is, effectively, a subclass of MY,
-ExtUtils::Makemaker, ExtUtils::Liblist and ExtUtils::MM_{Current OS}
+L<ExtUtils::MakeMaker>. It is, effectively, a subclass of L<MY|ExtUtils::MY>,
+L<ExtUtils::MakeMaker>, L<ExtUtils::Liblist> and ExtUtils::MM_{Current OS}
-NOTE: The methods in MY are simply copied into PACK### rather than
-MY being a superclass of PACK###. I don't remember the rationale.
+NOTE: The methods in L<MY|ExtUtils::MY> are simply copied into PACK### rather
+than MY being a superclass of PACK###. I don't remember the rationale.
-NOTE: ExtUtils::Liblist should be removed from the inheritance hiearchy
+NOTE: L<ExtUtils::Liblist> should be removed from the inheritance hiearchy
and simply be called as functions.
-NOTE: Modules like File::Spec and Exporter have been omitted for clarity.
+NOTE: Modules like L<File::Spec> and L<Exporter> have been omitted for clarity.
=head2 The MM_* hierarchy
@@ -631,12 +632,13 @@ NOTE: Modules like File::Spec and Exporter have been omitted for clarity.
| |
MM_Any
-NOTE: Each direct MM_Unix subclass is also an MM_Any subclass. This
+NOTE: Each direct L<MM_Unix|ExtUtils::MM_Unix> subclass is also an
+L<MM_Any|ExtUtils::MM_Any> subclass. This
is a temporary hack because MM_Unix overrides some MM_Any methods with
Unix specific code. It allows the non-Unix modules to see the
original MM_Any implementations.
-NOTE: Modules like File::Spec and Exporter have been omitted for clarity.
+NOTE: Modules like L<File::Spec> and L<Exporter> have been omitted for clarity.
=head1 PATCHING
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Locale.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Locale.pm
index 6d97df06f61..8931826b590 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Locale.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Locale.pm
@@ -1,8 +1,8 @@
package ExtUtils::MakeMaker::Locale;
use strict;
-our $VERSION = "7.34";
-$VERSION = eval $VERSION;
+our $VERSION = "7.44";
+$VERSION =~ tr/_//d;
use base 'Exporter';
our @EXPORT_OK = qw(
@@ -47,7 +47,10 @@ sub _init {
unless (defined &GetInputCP) {
eval {
require Win32;
- eval { Win32::GetConsoleCP() };
+ eval {
+ local $SIG{__WARN__} = sub {} if ( "$]" < 5.014 ); # suppress deprecation warning for inherited AUTOLOAD of Win32::GetConsoleCP()
+ Win32::GetConsoleCP();
+ };
# manually "import" it since Win32->import refuses
*GetInputCP = sub { &Win32::GetConsoleCP } if defined &Win32::GetConsoleCP;
*GetOutputCP = sub { &Win32::GetConsoleOutputCP } if defined &Win32::GetConsoleOutputCP;
@@ -96,6 +99,13 @@ sub _init {
$ENCODING_LOCALE ||= $ENCODING_CONSOLE_IN;
}
+ # Workaround of Encode < v2.71 for "cp65000" and "cp65001"
+ # The "cp65000" and "cp65001" aliases were added in [Encode v2.71](https://github.com/dankogai/p5-encode/commit/7874bd95aa10967a3b5dbae333d16bcd703ac6c6)
+ # via commit <https://github.com/dankogai/p5-encode/commit/84b9c1101d5251d37e226f80d1c6781718779047>.
+ # This will avoid test failures for Win32 machines using the UTF-7 or UTF-8 code pages.
+ $ENCODING_LOCALE = 'UTF-7' if $ENCODING_LOCALE && lc($ENCODING_LOCALE) eq "cp65000";
+ $ENCODING_LOCALE = 'utf-8-strict' if $ENCODING_LOCALE && lc($ENCODING_LOCALE) eq "cp65001";
+
if ($^O eq "darwin") {
$ENCODING_LOCALE_FS ||= "UTF-8";
}
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod
index b49e4448330..6365e4be665 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod
@@ -1,7 +1,7 @@
package ExtUtils::MakeMaker::Tutorial;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
=head1 NAME
@@ -205,7 +205,8 @@ L<perlmodstyle> gives stylistic help writing a module.
L<perlnewmod> gives more information about how to write a module.
There are modules to help you through the process of writing a module:
-L<ExtUtils::ModuleMaker>, L<Module::Install>, L<PAR>
+L<ExtUtils::ModuleMaker>, L<Module::Starter>, L<Minilla::Tutorial>,
+L<Dist::Milla::Tutorial>, L<Dist::Zilla::Starter>
=cut
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm
index c59be1eeee7..c94c855c54b 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm
@@ -15,8 +15,8 @@ use strict;
use vars qw(@ISA $VERSION $CLASS $STRICT $LAX *declare *qv);
-$VERSION = '7.34';
-$VERSION = eval $VERSION;
+$VERSION = '7.44';
+$VERSION =~ tr/_//d;
$CLASS = 'version';
{
@@ -35,7 +35,7 @@ $CLASS = 'version';
*version::_VERSION = \&ExtUtils::MakeMaker::version::vpp::_VERSION;
*version::vcmp = \&ExtUtils::MakeMaker::version::vpp::vcmp;
*version::new = \&ExtUtils::MakeMaker::version::vpp::new;
- if ($] >= 5.009000) {
+ if ("$]" >= 5.009000) {
no strict 'refs';
*version::stringify = \&ExtUtils::MakeMaker::version::vpp::stringify;
*{'version::(""'} = \&ExtUtils::MakeMaker::version::vpp::stringify;
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm
index f0eb14eacb4..7cfed5ba88a 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm
@@ -10,8 +10,8 @@ use strict;
use vars qw($VERSION $CLASS $STRICT $LAX);
-$VERSION = '7.34';
-$VERSION = eval $VERSION;
+$VERSION = '7.44';
+$VERSION =~ tr/_//d;
#--------------------------------------------------------------------------#
# Version regexp components
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm
index 0d4c1a20909..a11a950c1b6 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm
@@ -3,8 +3,8 @@ package ExtUtils::Mkbootstrap;
# There's just too much Dynaloader incest here to turn on strict vars.
use strict 'refs';
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
require Exporter;
our @ISA = ('Exporter');
@@ -84,7 +84,7 @@ ExtUtils::Mkbootstrap - make a bootstrap file for use by DynaLoader
=head1 SYNOPSIS
-C<Mkbootstrap>
+ Mkbootstrap
=head1 DESCRIPTION
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm
index 0ec5f9dbdfd..9279b6b7852 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm
@@ -10,8 +10,8 @@ use Config;
our @ISA = qw(Exporter);
our @EXPORT = qw(&Mksymlists);
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
sub Mksymlists {
my(%spec) = @_;
@@ -148,7 +148,7 @@ sub _write_win32 {
# linked to directly from C. GSAR 97-07-10
#bcc dropped in 5.16, so dont create useless extra symbols for export table
- unless($] >= 5.016) {
+ unless("$]" >= 5.016) {
if ($Config::Config{'cc'} =~ /^bcc/i) {
push @syms, "_$_", "$_ = _$_"
for (@{$data->{DL_VARS}}, @{$data->{FUNCLIST}});
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm
index 01b46ee45a5..1ccaf776a03 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm
@@ -3,8 +3,8 @@ package ExtUtils::testlib;
use strict;
use warnings;
-our $VERSION = '7.34';
-$VERSION = eval $VERSION;
+our $VERSION = '7.44';
+$VERSION =~ tr/_//d;
use Cwd;
use File::Spec;
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/MM_Unix.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/MM_Unix.t
index 388bc545cd2..62b291c770e 100755
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/MM_Unix.t
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/MM_Unix.t
@@ -12,7 +12,7 @@ BEGIN {
plan skip_all => 'Non-Unix platform';
}
else {
- plan tests => 113;
+ plan tests => 114;
}
}
@@ -150,8 +150,18 @@ is ($t->has_link_code(),1); is ($t->{HAS_LINK_CODE},1);
###############################################################################
# libscan
-is ($t->libscan('Readme.pod'), '', 'libscan excludes base Readme.pod');
-is ($t->libscan('README.pod'), '', 'libscan excludes base README.pod');
+{
+ # suppress noisy & unnecessary "WARNING: Older versions of ExtUtils::MakeMaker may errantly install README.pod..."
+ my @warnings = ();
+ local $SIG{__WARN__} = sub { push @warnings, shift; };
+ is ($t->libscan('Readme.pod'), '', 'libscan excludes base Readme.pod');
+ is ($t->libscan('README.pod'), '', 'libscan excludes base README.pod');
+ # verify that suppressed warnings are present
+ isnt (scalar(@warnings), 0);
+ if (scalar(@warnings)) {
+ note (sprintf('suppressed warnings: [ "%s" ]', do { my $s = join(q/" , "/, @warnings); $s =~ s/([^[:print:]])/sprintf('\x{%x}', ord($1))/egmsx; $s; }));
+ }
+}
is ($t->libscan('lib/Foo/README.pod'), 'lib/Foo/README.pod', 'libscan accepts README.pod in a subdirectory');
is ($t->libscan('foo/RCS/bar'), '', 'libscan on RCS');
is ($t->libscan('CVS/bar/car'), '', 'libscan on CVS');
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/PL_FILES.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/PL_FILES.t
index 51aed5e5d03..7e627db543c 100755
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/PL_FILES.t
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/PL_FILES.t
@@ -13,7 +13,7 @@ use ExtUtils::MM;
use Test::More
!MM->can_run(make()) && $ENV{PERL_CORE} && $Config{'usecrosscompile'}
? (skip_all => "cross-compiling and make not available")
- : (tests => 10);
+ : (tests => 12);
use File::Spec;
use File::Temp qw[tempdir];
use File::Path;
@@ -36,6 +36,8 @@ WriteMakefile(
NAME => 'PL::Module',
PL_FILES => { 'single.PL' => 'single.out',
'multi.PL' => [qw(1.out 2.out)],
+ 'single-in.PL' => { 'single-in.out' => 'single.in' },
+ 'multi-in.PL' => { 'multi-in.out' => [qw(1.in 2.in)] },
'Bar_pm.PL' => '$(INST_LIB)/PL/Bar.pm',
'Bar2.pm.PL' => 'Bar2.pm',
},
@@ -53,6 +55,11 @@ END
'multi.PL' => _gen_pl_files(),
'Bar_pm.PL' => _gen_pm_files(),
'Bar2.pm.PL' => _gen_pm_files(),
+ 'single-in.PL' => _gen_pm_files(1),
+ 'multi-in.PL' => _gen_pm_files(2),
+ 'single.in' => '',
+ '1.in' => '',
+ '2.in' => '',
'lib/PL/Foo.pm' => <<'END',
# Module to load to ensure PL_FILES have blib in @INC.
package PL::Foo;
@@ -76,7 +83,11 @@ cmp_ok( $?, '==', 0 );
my $make_out = run("$make");
is( $?, 0 ) || diag $make_out;
-foreach my $file (qw(single.out 1.out 2.out blib/lib/PL/Bar.pm blib/lib/PL/Bar2.pm)) {
+foreach my $file (qw(
+ single.out 1.out 2.out
+ single-in.out multi-in.out
+ blib/lib/PL/Bar.pm blib/lib/PL/Bar2.pm
+)) {
ok( -e $file, "$file was created" );
}
@@ -105,7 +116,8 @@ END
}
sub _gen_pm_files {
- my $test = <<'END';
+ my $inputs = (shift || 0) + 1;
+ my $test = sprintf <<'END', $inputs;
#!/usr/bin/perl -w
# Ensure we do NOT have blib in @INC when building a module
@@ -114,7 +126,7 @@ eval { require PL::Foo; };
# Had a bug where PL_FILES weren't sent the file to generate
die "argv empty\n" unless @ARGV;
-die "too many in argv: @ARGV\n" unless @ARGV == 1;
+die "wrong number in argv: @ARGV\n" unless @ARGV == %d;
my $file = $ARGV[0];
open OUT, ">$file" or die $!;
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/basic.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/basic.t
index 534bf219f6c..7c87c752128 100755
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/basic.t
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/basic.t
@@ -35,7 +35,11 @@ my $Is_VMS = $^O eq 'VMS';
my $OLD_CP; # crude but...
my $w32worked; # or whether we had to fallback to chcp
if ($^O eq "MSWin32") {
- eval { require Win32; $w32worked = $OLD_CP = Win32::GetConsoleCP() };
+ eval {
+ require Win32;
+ local $SIG{__WARN__} = sub {} if ( "$]" < 5.014 ); # suppress deprecation warning for inherited AUTOLOAD of Win32::GetConsoleCP()
+ $w32worked = $OLD_CP = Win32::GetConsoleCP();
+ };
$OLD_CP = $1 if !$w32worked and qx(chcp) =~ /(\d+)$/ and $? == 0;
if (defined $OLD_CP) {
if ($w32worked) {
@@ -128,7 +132,7 @@ like( $ppd_html, qr{^\s*<REQUIRE NAME="strict::" />}m, ' <REQUIRE>' );
unlike( $ppd_html, qr{^\s*<REQUIRE NAME="warnings::" />}m, 'no <REQUIRE> for build_require' );
my $archname = $Config{archname};
-if( $] >= 5.008 ) {
+if( "$]" >= 5.008 ) {
# XXX This is a copy of the internal logic, so it's not a great test
$archname .= "-$Config{PERL_REVISION}.$Config{PERL_VERSION}";
}
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/build_man.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/build_man.t
index b35c4c16bf9..d2ab550fb03 100755
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/build_man.t
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/build_man.t
@@ -7,7 +7,7 @@ BEGIN {
}
use strict;
-use Test::More tests => 46;
+use Test::More tests => 50;
use File::Spec;
use File::Temp qw[tempdir];
@@ -44,10 +44,21 @@ ok((my $stdout = tie *STDOUT, 'TieOut'), 'tie stdout');
{
local $Config{installman3dir} = File::Spec->catdir(qw(t lib));
- my $mm = WriteMakefile(
- NAME => 'Big::Dummy',
- VERSION_FROM => 'lib/Big/Dummy.pm',
- );
+ my $mm;
+ {
+ # suppress noisy & unnecessary "WARNING: Older versions of ExtUtils::MakeMaker may errantly install README.pod..."
+ my @warnings = ();
+ local $SIG{__WARN__} = sub { push @warnings, shift; };
+ $mm = WriteMakefile(
+ NAME => 'Big::Dummy',
+ VERSION_FROM => 'lib/Big/Dummy.pm',
+ );
+ # verify that suppressed warnings are present
+ isnt (scalar(@warnings), 0);
+ if (scalar(@warnings)) {
+ note (sprintf('suppressed warnings: [ "%s" ]', do { my $s = join(q/" , "/, @warnings); $s =~ s/([^[:print:]])/sprintf('\x{%x}', ord($1))/egmsx; $s; }));
+ }
+ }
my %got = %{ $mm->{MAN3PODS} };
# because value too OS-specific
my $delete_key = $^O eq 'VMS' ? '[.lib.Big]Dummy.pm' : 'lib/Big/Dummy.pm';
@@ -56,29 +67,62 @@ ok((my $stdout = tie *STDOUT, 'TieOut'), 'tie stdout');
}
{
- my $mm = WriteMakefile(
- NAME => 'Big::Dummy',
- VERSION_FROM => 'lib/Big/Dummy.pm',
- INSTALLMAN3DIR => 'none'
- );
+ my $mm;
+ {
+ # suppress noisy & unnecessary "WARNING: Older versions of ExtUtils::MakeMaker may errantly install README.pod..."
+ my @warnings = ();
+ local $SIG{__WARN__} = sub { push @warnings, shift; };
+ $mm = WriteMakefile(
+ NAME => 'Big::Dummy',
+ VERSION_FROM => 'lib/Big/Dummy.pm',
+ INSTALLMAN3DIR => 'none'
+ );
+ # verify that suppressed warnings are present
+ isnt (scalar(@warnings), 0);
+ if (scalar(@warnings)) {
+ note (sprintf('suppressed warnings: [ "%s" ]', do { my $s = join(q/" , "/, @warnings); $s =~ s/([^[:print:]])/sprintf('\x{%x}', ord($1))/egmsx; $s; }));
+ }
+ }
is_deeply $mm->{MAN3PODS}, {}, 'suppress man3pod with "none"';
}
{
- my $mm = WriteMakefile(
- NAME => 'Big::Dummy',
- VERSION_FROM => 'lib/Big/Dummy.pm',
- MAN3PODS => {}
- );
+ my $mm;
+ {
+ # suppress noisy & unnecessary "WARNING: Older versions of ExtUtils::MakeMaker may errantly install README.pod..."
+ my @warnings = ();
+ local $SIG{__WARN__} = sub { push @warnings, shift; };
+ $mm = WriteMakefile(
+ NAME => 'Big::Dummy',
+ VERSION_FROM => 'lib/Big/Dummy.pm',
+ MAN3PODS => {}
+ );
+ # verify that suppressed warnings are present
+ isnt (scalar(@warnings), 0);
+ if (scalar(@warnings)) {
+ note (sprintf('suppressed warnings: [ "%s" ]', do { my $s = join(q/" , "/, @warnings); $s =~ s/([^[:print:]])/sprintf('\x{%x}', ord($1))/egmsx; $s; }));
+ }
+ }
is_deeply $mm->{MAN3PODS}, {}, 'suppress man3pod with {}';
}
{
- my $mm = WriteMakefile(
- NAME => 'Big::Dummy',
- VERSION_FROM => 'lib/Big/Dummy.pm',
- MAN3PODS => { "Foo.pm" => "Foo.1" }
- );
+ my $mm;
+ {
+ # suppress noisy & unnecessary "WARNING: Older versions of ExtUtils::MakeMaker may errantly install README.pod..."
+ my @warnings = ();
+ local $SIG{__WARN__} = sub { push @warnings, shift; };
+ $mm = WriteMakefile(
+ NAME => 'Big::Dummy',
+ VERSION_FROM => 'lib/Big/Dummy.pm',
+ MAN3PODS => { "Foo.pm" => "Foo.1" }
+ );
+ # verify that suppressed warnings are present
+ isnt (scalar(@warnings), 0);
+ if (scalar(@warnings)) {
+ note (sprintf('suppressed warnings: [ "%s" ]', do { my $s = join(q/" , "/, @warnings); $s =~ s/([^[:print:]])/sprintf('\x{%x}', ord($1))/egmsx; $s; }));
+ }
+ }
is_deeply $mm->{MAN3PODS}, { "Foo.pm" => "Foo.1" }, 'override man3pod';
}
@@ -172,10 +216,10 @@ unlink $README;
INSTALLDIRS => $INSTALLDIRS,
);
- my $makefile = slurp('Makefile');
+ my $makefile = slurp($mm->{MAKEFILE});
- like $makefile, qr/^\QMAN1SECTION = 1pm\E$/xms, "Set MAN1SECTION";
- like $makefile, qr/^\QMAN3SECTION = 3pm\E$/xms, "Set MAN3SECTION";
+ like $makefile, qr/\QMAN1SECTION = 1pm\E/xms, "Set MAN1SECTION";
+ like $makefile, qr/\QMAN3SECTION = 3pm\E/xms, "Set MAN3SECTION";
like $makefile, qr/\Q$(POD2MAN) --section=$(MAN1SECTION) \E/,
"Set POD2MAN section to \$(MAN1SECTION)";
@@ -183,4 +227,3 @@ unlink $README;
"Set POD2MAN section to \$(MAN3SECTION)";
}
}
-
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Utils.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Utils.pm
index ce73b30b777..76c1ad5010d 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Utils.pm
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Utils.pm
@@ -407,7 +407,7 @@ sub hash2files {
$file = File::Spec->catfile(File::Spec->curdir, $prefix, split m{\/}, $file);
my $dir = dirname($file);
mkpath $dir;
- my $utf8 = ($] < 5.008 or !$Config{useperlio}) ? "" : ":utf8";
+ my $utf8 = ("$]" < 5.008 or !$Config{useperlio}) ? "" : ":utf8";
open(FILE, ">$utf8", $file) || die "Can't create $file: $!";
print FILE $text;
close FILE;
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/parse_version.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/parse_version.t
index 2dbd064c035..dc9919a5515 100755
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/parse_version.t
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/parse_version.t
@@ -53,7 +53,7 @@ if( $Has_Version ) {
$versions{q[$VERSION = v1.2.3]} = 'v1.2.3';
}
-if( $] >= 5.011001 ) {
+if( "$]" >= 5.011001 ) {
$versions{'package Foo 1.23;' } = '1.23';
$versions{'package Foo::Bar 1.23;' } = '1.23';
$versions{'package Foo v1.2.3;' } = 'v1.2.3';
@@ -81,7 +81,7 @@ our $VERSION = 2.34;
END
}
-if( $] >= 5.014 ) {
+if( "$]" >= 5.014 ) {
$versions{'package Foo 1.23 { }' } = '1.23';
$versions{'package Foo::Bar 1.23 { }' } = '1.23';
$versions{'package Foo v1.2.3 { }' } = 'v1.2.3';
@@ -110,7 +110,7 @@ our $VERSION = 2.34;
END
}
-if ( $] > 5.009 && $] < 5.012 ) {
+if ( "$]" < 5.012 ) {
delete $versions{'$VERSION = -1.0'};
}
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/unicode.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/unicode.t
index 557ac775404..14a0c8501b0 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/unicode.t
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/unicode.t
@@ -14,7 +14,7 @@ use File::Path;
use utf8;
BEGIN {
plan skip_all => 'Need perlio and perl 5.8+.'
- if $] < 5.008 or !$Config{useperlio};
+ if "$]" < 5.008 or !$Config{useperlio};
plan skip_all => 'cross-compiling and make not available'
if !MM->can_run(make()) && $ENV{PERL_CORE} && $Config{'usecrosscompile'};
@@ -76,7 +76,7 @@ END {
ok( chdir $DIRNAME, "chdir'd to $DIRNAME" ) ||
diag("chdir failed: $!");
-if ($] >= 5.008) {
+if ("$]" >= 5.008) {
eval { require ExtUtils::MakeMaker::Locale; };
note "ExtUtils::MakeMaker::Locale vars: $ExtUtils::MakeMaker::Locale::ENCODING_LOCALE;$ExtUtils::MakeMaker::Locale::ENCODING_LOCALE_FS;$ExtUtils::MakeMaker::Locale::ENCODING_CONSOLE_IN;$ExtUtils::MakeMaker::Locale::ENCODING_CONSOLE_OUT\n" unless $@;
note "Locale env vars: " . join(';', map {
diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/vstrings.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/vstrings.t
index 9f88399ebd8..63ef8e292bd 100644
--- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/vstrings.t
+++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/vstrings.t
@@ -93,7 +93,7 @@ sub run_test {
local $_;
SKIP: {
skip "No vstring test <5.8", 2
- if $] < 5.008 && $pkg eq 'BareV2String' && $descrip =~ m!^2-part!;
+ if "$]" < 5.008 && $pkg eq 'BareV2String' && $descrip =~ m!^2-part!;
my $warnings;
eval { $warnings = capture_make("Fake::$pkg" => $version); };
is($@, '', "$descrip not fatal") or skip "$descrip WM failed", 1;
diff --git a/gnu/usr.bin/perl/cpan/Getopt-Long/lib/Getopt/Long.pm b/gnu/usr.bin/perl/cpan/Getopt-Long/lib/Getopt/Long.pm
index 664c8b63c91..70ac4159565 100644
--- a/gnu/usr.bin/perl/cpan/Getopt-Long/lib/Getopt/Long.pm
+++ b/gnu/usr.bin/perl/cpan/Getopt-Long/lib/Getopt/Long.pm
@@ -4,8 +4,8 @@
# Author : Johan Vromans
# Created On : Tue Sep 11 15:00:12 1990
# Last Modified By: Johan Vromans
-# Last Modified On: Sat May 27 12:11:39 2017
-# Update Count : 1715
+# Last Modified On: Mon Aug 12 17:05:46 2019
+# Update Count : 1728
# Status : Released
################ Module Preamble ################
@@ -18,10 +18,10 @@ use warnings;
package Getopt::Long;
use vars qw($VERSION);
-$VERSION = 2.50;
+$VERSION = 2.51;
# For testing versions only.
use vars qw($VERSION_STRING);
-$VERSION_STRING = "2.50";
+$VERSION_STRING = "2.51";
use Exporter;
use vars qw(@ISA @EXPORT @EXPORT_OK);
@@ -303,7 +303,7 @@ sub GetOptionsFromArray(@) {
# Avoid some warnings if debugging.
local ($^W) = 0;
print STDERR
- ("Getopt::Long $Getopt::Long::VERSION ",
+ ("Getopt::Long $Getopt::Long::VERSION_STRING ",
"called from package \"$pkg\".",
"\n ",
"argv: ",
@@ -769,7 +769,7 @@ sub GetOptionsFromArray(@) {
}
# Finish.
- if ( @ret && $order == $PERMUTE ) {
+ if ( @ret && ( $order == $PERMUTE || $passthrough ) ) {
# Push back accumulated arguments
print STDERR ("=> restoring \"", join('" "', @ret), "\"\n")
if $debug;
@@ -805,10 +805,8 @@ sub ParseOptionSpec ($$) {
(
# Option name
(?: \w+[-\w]* )
- # Alias names, or "?"
- (?: \| (?: \? | \w[-\w]* ) )*
# Aliases
- (?: \| (?: [^-|!+=:][^|!+=:]* )? )*
+ (?: \| (?: . [^|!+=:]* )? )*
)?
(
# Either modifiers ...
@@ -1123,6 +1121,12 @@ sub FindOption ($$$$$) {
$optargtype = 3;
}
if(($optargtype == 0) && !$mand) {
+ if ( $type eq 'I' ) {
+ # Fake incremental type.
+ my @c = @$ctl;
+ $c[CTL_TYPE] = '+';
+ return (1, $opt, \@c, 1);
+ }
my $val
= defined($ctl->[CTL_DEFAULT]) ? $ctl->[CTL_DEFAULT]
: $type eq 's' ? ''
@@ -1541,7 +1545,7 @@ sub setup_pa_args($@) {
# Sneak way to know what version the user requested.
sub VERSION {
- $requested_version = $_[1];
+ $requested_version = $_[1] if @_ > 1;
shift->SUPER::VERSION(@_);
}
@@ -2269,8 +2273,7 @@ it will set variable C<$stdio>.
A special option 'name' C<< <> >> can be used to designate a subroutine
to handle non-option arguments. When GetOptions() encounters an
argument that does not look like an option, it will immediately call this
-subroutine and passes it one parameter: the argument name. Well, actually
-it is an object that stringifies to the argument name.
+subroutine and passes it one parameter: the argument name.
For example:
@@ -2733,8 +2736,10 @@ version 2.13.
use Getopt::Long;
GetOptions ("help|?"); # -help and -? will both set $opt_help
-Other characters that can't appear in Perl identifiers are also supported
-as aliases with Getopt::Long of at least version 2.39.
+Other characters that can't appear in Perl identifiers are also
+supported in aliases with Getopt::Long of at version 2.39. Note that
+the characters C<!>, C<|>, C<+>, C<=>, and C<:> can only appear as the
+first (or only) character of an alias.
As of version 2.32 Getopt::Long provides auto-help, a quick and easy way
to add the options --help and -? to your program, and handle them.
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/Makefile.PL b/gnu/usr.bin/perl/cpan/IO-Compress/Makefile.PL
index ca8cce49a22..d22a4c2b4bb 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/Makefile.PL
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/Makefile.PL
@@ -3,7 +3,7 @@
use strict ;
require 5.006 ;
-$::VERSION = '2.084' ;
+$::VERSION = '2.093' ;
use lib '.';
use private::MakeUtil;
@@ -42,7 +42,7 @@ WriteMakefile(
INSTALLDIRS => ($] >= 5.009 && $] < 5.011 ? 'perl' : 'site'),
- EXE_FILES => ['bin/zipdetails'],
+ EXE_FILES => ['bin/zipdetails', 'bin/streamzip'],
(
$] >= 5.009 && $] <= 5.011001 && ! $ENV{PERL_CORE}
@@ -50,11 +50,33 @@ WriteMakefile(
: ()
),
- META_MERGE => {
- no_index => {
- directory => [ 't', 'private' ],
- },
- },
+ ( eval { ExtUtils::MakeMaker->VERSION(6.46) }
+ ? ( META_MERGE => {
+
+ "meta-spec" => { version => 2 },
+
+ no_index => {
+ directory => [ 't', 'private' ],
+ },
+
+ resources => {
+
+ bugtracker => {
+ web => 'https://github.com/pmqs/IO-Compress/issues'
+ },
+
+ homepage => 'https://github.com/pmqs/IO-Compress',
+
+ repository => {
+ type => 'git',
+ url => 'git://github.com/pmqs/IO-Compress.git',
+ web => 'https://github.com/pmqs/IO-Compress',
+ },
+ },
+ }
+ )
+ : ()
+ ),
((ExtUtils::MakeMaker->VERSION() gt '6.30') ?
('LICENSE' => 'perl') : ()),
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/bin/zipdetails b/gnu/usr.bin/perl/cpan/IO-Compress/bin/zipdetails
index ac647b398a2..bff32a1c02e 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/bin/zipdetails
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/bin/zipdetails
@@ -139,7 +139,7 @@ my %Extras = (
# The Header ID mappings defined by Info-ZIP and third parties are:
- 0x0065, ['IBM S/390 attributes - uncompressed', undef],
+ 0x0065, ['IBM S/390 attributes - uncompressed', \&decodeMVS],
0x0066, ['IBM S/390 attributes - compressed', undef],
0x07c8, ['Info-ZIP Macintosh (old, J. Lee)', undef],
0x2605, ['ZipIt Macintosh (first version)', undef],
@@ -180,7 +180,7 @@ my %Extras = (
);
-my $VERSION = "1.09" ;
+my $VERSION = "1.11" ;
my $FH;
@@ -1201,7 +1201,7 @@ sub decode_Zip64
}
if (full32 $z64Data->[2] ) {
- out_VV " Offset to Central Dir";
+ out_VV " Offset to Local Dir";
}
if ($z64Data->[3] == 0xFFFF ) {
@@ -1463,6 +1463,24 @@ sub decode_NT_security
}
}
+sub decodeMVS
+{
+ my $len = shift;
+ my $context = shift;
+
+ # data in Big-Endian
+ myRead(my $data, $len);
+ my $ID = unpack("N", $data);
+
+ if ($ID == 0xE9F3F9F0)
+ {
+ out($data, " ID", "'Z390'");
+ substr($data, 0, 4) = '';
+ }
+
+ out($data, " Extra Payload", hexDump($data));
+}
+
sub printAes
{
my $context = shift ;
@@ -2062,7 +2080,7 @@ OPTIONS
-h display help
-v Verbose - output more stuff
-Copyright (c) 2011-2018 Paul Marquess. All rights reserved.
+Copyright (c) 2011-2019 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.
@@ -2157,6 +2175,11 @@ Error handling is still a work in progress. If the program encounters a
problem reading a zip file it is likely to terminate with an unhelpful
error message.
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
=head1 SEE ALSO
@@ -2182,7 +2205,7 @@ Paul Marquess F<pmqs@cpan.org>.
=head1 COPYRIGHT
-Copyright (c) 2011-2018 Paul Marquess. All rights reserved.
+Copyright (c) 2011-2019 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.
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/Compress/Zlib.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/Compress/Zlib.pm
index ce79d7d1132..4a0aae6c4bc 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/Compress/Zlib.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/Compress/Zlib.pm
@@ -7,17 +7,17 @@ use Carp ;
use IO::Handle ;
use Scalar::Util qw(dualvar);
-use IO::Compress::Base::Common 2.084 ;
-use Compress::Raw::Zlib 2.084 ;
-use IO::Compress::Gzip 2.084 ;
-use IO::Uncompress::Gunzip 2.084 ;
+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 strict ;
use warnings ;
use bytes ;
our ($VERSION, $XS_VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-$VERSION = '2.084';
+$VERSION = '2.093';
$XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
@@ -224,7 +224,7 @@ sub Compress::Zlib::gzFile::gzseek
my $gz = $self->[0] ;
my $status ;
- eval { $status = $gz->seek($offset, $whence) ; };
+ eval { local $SIG{__DIE__}; $status = $gz->seek($offset, $whence) ; };
if ($@)
{
my $error = $@;
@@ -461,7 +461,7 @@ sub inflate
package Compress::Zlib ;
-use IO::Compress::Gzip::Constants 2.084 ;
+use IO::Compress::Gzip::Constants 2.093 ;
sub memGzip($)
{
@@ -1467,6 +1467,12 @@ Returns the version of the zlib library.
All the I<zlib> constants are automatically imported when you make use
of I<Compress::Zlib>.
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm
index 623a2c671ac..a8a7762ce70 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm
@@ -4,12 +4,12 @@ use strict;
use warnings;
use bytes;
-use IO::Compress::Base::Common 2.084 qw(:Status);
+use IO::Compress::Base::Common 2.093 qw(:Status);
-use Compress::Raw::Bzip2 2.084 ;
+use Compress::Raw::Bzip2 2.093 ;
our ($VERSION);
-$VERSION = '2.084';
+$VERSION = '2.093';
sub mkCompObject
{
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm
index 8903287b106..140d29ff29f 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm
@@ -4,13 +4,13 @@ use strict;
use warnings;
use bytes;
-use IO::Compress::Base::Common 2.084 qw(:Status);
-use Compress::Raw::Zlib 2.084 qw( !crc32 !adler32 ) ;
+use IO::Compress::Base::Common 2.093 qw(:Status);
+use Compress::Raw::Zlib 2.093 qw( !crc32 !adler32 ) ;
require Exporter;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, @EXPORT, %DEFLATE_CONSTANTS);
-$VERSION = '2.084';
+$VERSION = '2.093';
@ISA = qw(Exporter);
@EXPORT_OK = @Compress::Raw::Zlib::DEFLATE_CONSTANTS;
%EXPORT_TAGS = %Compress::Raw::Zlib::DEFLATE_CONSTANTS;
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm
index ae23102a248..487cfa7b476 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm
@@ -4,10 +4,10 @@ use strict;
use warnings;
use bytes;
-use IO::Compress::Base::Common 2.084 qw(:Status);
+use IO::Compress::Base::Common 2.093 qw(:Status);
our ($VERSION);
-$VERSION = '2.084';
+$VERSION = '2.093';
sub mkCompObject
{
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base.pm
index 1e2a54ba397..f817d13b472 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base.pm
@@ -6,7 +6,7 @@ require 5.006 ;
use strict ;
use warnings;
-use IO::Compress::Base::Common 2.084 ;
+use IO::Compress::Base::Common 2.093 ;
use IO::File (); ;
use Scalar::Util ();
@@ -20,7 +20,7 @@ use Symbol();
our (@ISA, $VERSION);
@ISA = qw(IO::File Exporter);
-$VERSION = '2.084';
+$VERSION = '2.093';
#Can't locate object method "SWASHNEW" via package "utf8" (perhaps you forgot to load "utf8"?) at .../ext/Compress-Zlib/Gzip/blib/lib/Compress/Zlib/Common.pm line 16.
@@ -1021,6 +1021,12 @@ IO::Compress::Base - Base Class for IO::Compress modules
This module is not intended for direct use in application code. Its sole
purpose is to be sub-classed by IO::Compress modules.
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm
index 53232898c47..87af18b6de8 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm
@@ -11,7 +11,7 @@ use File::GlobMapper;
require Exporter;
our ($VERSION, @ISA, @EXPORT, %EXPORT_TAGS, $HAS_ENCODE);
@ISA = qw(Exporter);
-$VERSION = '2.084';
+$VERSION = '2.093';
@EXPORT = qw( isaFilehandle isaFilename isaScalar
whatIsInput whatIsOutput
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm
index 1c0d027abdc..13d3b4674df 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm
@@ -5,16 +5,16 @@ use warnings;
use bytes;
require Exporter ;
-use IO::Compress::Base 2.084 ;
+use IO::Compress::Base 2.093 ;
-use IO::Compress::Base::Common 2.084 qw();
-use IO::Compress::Adapter::Bzip2 2.084 ;
+use IO::Compress::Base::Common 2.093 qw();
+use IO::Compress::Adapter::Bzip2 2.093 ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $Bzip2Error);
-$VERSION = '2.084';
+$VERSION = '2.093';
$Bzip2Error = '';
@ISA = qw(IO::Compress::Base Exporter);
@@ -51,7 +51,7 @@ sub getExtraParams
{
my $self = shift ;
- use IO::Compress::Base::Common 2.084 qw(:Parse);
+ use IO::Compress::Base::Common 2.093 qw(:Parse);
return (
'blocksize100k' => [IO::Compress::Base::Common::Parse_unsigned, 1],
@@ -183,7 +183,6 @@ IO::Compress::Bzip2 - Write bzip2 files/buffers
binmode $z
fileno $z
close $z ;
-
=head1 DESCRIPTION
@@ -210,7 +209,8 @@ The functional interface needs Perl5.005 or better.
=head2 bzip2 $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<bzip2> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -223,7 +223,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -319,9 +319,9 @@ in C<$output_filename_or_reference> as a concatenated series of compressed data
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<bzip2>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<bzip2>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -389,6 +389,22 @@ Defaults to 0.
=head2 Examples
+Here are a few example that show the capabilities of the module.
+
+=head3 Streaming
+
+This very simple command line example demonstrates the streaming capabilities of the module.
+The code reads data from STDIN, compresses it, and writes the compressed data to STDOUT.
+
+ $ echo hello world | perl -MIO::Compress::Bzip2=bzip2 -e 'bzip2 \*STDIN => \*STDOUT' >output.bz2
+
+The special filename "-" can be used as a standin for both C<\*STDIN> and C<\*STDOUT>,
+so the above can be rewritten as
+
+ $ echo hello world | perl -MIO::Compress::Bzip2=bzip2 -e 'bzip2 "-" => "-"' >output.bz2
+
+=head3 Compressing a file from the filesystem
+
To read the contents of the file C<file1.txt> and write the compressed
data to the file C<file1.txt.bz2>.
@@ -400,6 +416,8 @@ data to the file C<file1.txt.bz2>.
bzip2 $input => "$input.bz2"
or die "bzip2 failed: $Bzip2Error\n";
+=head3 Reading from a Filehandle and writing to an in-memory buffer
+
To read from an existing Perl filehandle, C<$input>, and write the
compressed data to a buffer, C<$buffer>.
@@ -414,6 +432,8 @@ compressed data to a buffer, C<$buffer>.
bzip2 $input => \$buffer
or die "bzip2 failed: $Bzip2Error\n";
+=head3 Compressing multiple files
+
To compress all files in the directory "/my/home" that match "*.txt"
and store the compressed data in the same directory
@@ -488,7 +508,7 @@ return undef.
=head2 Constructor Options
-C<OPTS> is any combination of the following options:
+C<OPTS> is any combination of zero or more the following options:
=over 5
@@ -768,6 +788,12 @@ See L<IO::Compress::FAQ|IO::Compress::FAQ/"Apache::GZip Revisited">
See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP">
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
@@ -778,7 +804,7 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
L<Archive::Tar|Archive::Tar>,
L<IO::Zlib|IO::Zlib>
-The primary site for the bzip2 program is L<http://www.bzip.org>.
+The primary site for the bzip2 program is L<https://sourceware.org/bzip2/>.
See the module L<Compress::Bzip2|Compress::Bzip2>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Deflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Deflate.pm
index 1ca86c9331c..5ecac19b889 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Deflate.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Deflate.pm
@@ -8,16 +8,16 @@ use bytes;
require Exporter ;
-use IO::Compress::RawDeflate 2.084 ();
-use IO::Compress::Adapter::Deflate 2.084 ;
+use IO::Compress::RawDeflate 2.093 ();
+use IO::Compress::Adapter::Deflate 2.093 ;
-use IO::Compress::Zlib::Constants 2.084 ;
-use IO::Compress::Base::Common 2.084 qw();
+use IO::Compress::Zlib::Constants 2.093 ;
+use IO::Compress::Base::Common 2.093 qw();
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $DeflateError);
-$VERSION = '2.084';
+$VERSION = '2.093';
$DeflateError = '';
@ISA = qw(IO::Compress::RawDeflate Exporter);
@@ -212,7 +212,6 @@ IO::Compress::Deflate - Write RFC 1950 files/buffers
binmode $z
fileno $z
close $z ;
-
=head1 DESCRIPTION
@@ -239,7 +238,8 @@ The functional interface needs Perl5.005 or better.
=head2 deflate $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<deflate> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -252,7 +252,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -348,9 +348,9 @@ in C<$output_filename_or_reference> as a concatenated series of compressed data
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<deflate>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<deflate>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -418,6 +418,22 @@ Defaults to 0.
=head2 Examples
+Here are a few example that show the capabilities of the module.
+
+=head3 Streaming
+
+This very simple command line example demonstrates the streaming capabilities of the module.
+The code reads data from STDIN, compresses it, and writes the compressed data to STDOUT.
+
+ $ echo hello world | perl -MIO::Compress::Deflate=deflate -e 'deflate \*STDIN => \*STDOUT' >output.1950
+
+The special filename "-" can be used as a standin for both C<\*STDIN> and C<\*STDOUT>,
+so the above can be rewritten as
+
+ $ echo hello world | perl -MIO::Compress::Deflate=deflate -e 'deflate "-" => "-"' >output.1950
+
+=head3 Compressing a file from the filesystem
+
To read the contents of the file C<file1.txt> and write the compressed
data to the file C<file1.txt.1950>.
@@ -429,6 +445,8 @@ data to the file C<file1.txt.1950>.
deflate $input => "$input.1950"
or die "deflate failed: $DeflateError\n";
+=head3 Reading from a Filehandle and writing to an in-memory buffer
+
To read from an existing Perl filehandle, C<$input>, and write the
compressed data to a buffer, C<$buffer>.
@@ -443,6 +461,8 @@ compressed data to a buffer, C<$buffer>.
deflate $input => \$buffer
or die "deflate failed: $DeflateError\n";
+=head3 Compressing multiple files
+
To compress all files in the directory "/my/home" that match "*.txt"
and store the compressed data in the same directory
@@ -517,7 +537,7 @@ return undef.
=head2 Constructor Options
-C<OPTS> is any combination of the following options:
+C<OPTS> is any combination of zero or more the following options:
=over 5
@@ -892,6 +912,12 @@ See L<IO::Compress::FAQ|IO::Compress::FAQ/"Apache::GZip Revisited">
See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP">
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/FAQ.pod b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/FAQ.pod
index 1e66507aa2d..697f0f3d3b0 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/FAQ.pod
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/FAQ.pod
@@ -656,6 +656,12 @@ One final point -- obviously C<InputLength> can only be used whenever you
know the length of the compressed data beforehand, like here with a zip
file.
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs//issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip.pm
index 5302011a20d..3fd13695083 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip.pm
@@ -8,12 +8,12 @@ use bytes;
require Exporter ;
-use IO::Compress::RawDeflate 2.084 () ;
-use IO::Compress::Adapter::Deflate 2.084 ;
+use IO::Compress::RawDeflate 2.093 () ;
+use IO::Compress::Adapter::Deflate 2.093 ;
-use IO::Compress::Base::Common 2.084 qw(:Status );
-use IO::Compress::Gzip::Constants 2.084 ;
-use IO::Compress::Zlib::Extra 2.084 ;
+use IO::Compress::Base::Common 2.093 qw(:Status );
+use IO::Compress::Gzip::Constants 2.093 ;
+use IO::Compress::Zlib::Extra 2.093 ;
BEGIN
{
@@ -25,7 +25,7 @@ BEGIN
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $GzipError);
-$VERSION = '2.084';
+$VERSION = '2.093';
$GzipError = '' ;
@ISA = qw(IO::Compress::RawDeflate Exporter);
@@ -319,7 +319,6 @@ IO::Compress::Gzip - Write RFC 1952 files/buffers
binmode $z
fileno $z
close $z ;
-
=head1 DESCRIPTION
@@ -349,7 +348,8 @@ The functional interface needs Perl5.005 or better.
=head2 gzip $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<gzip> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -362,7 +362,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -466,9 +466,9 @@ in C<$output_filename_or_reference> as a concatenated series of compressed data
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<gzip>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<gzip>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -536,6 +536,22 @@ Defaults to 0.
=head2 Examples
+Here are a few example that show the capabilities of the module.
+
+=head3 Streaming
+
+This very simple command line example demonstrates the streaming capabilities of the module.
+The code reads data from STDIN, compresses it, and writes the compressed data to STDOUT.
+
+ $ echo hello world | perl -MIO::Compress::Gzip=gzip -e 'gzip \*STDIN => \*STDOUT' >output.gz
+
+The special filename "-" can be used as a standin for both C<\*STDIN> and C<\*STDOUT>,
+so the above can be rewritten as
+
+ $ echo hello world | perl -MIO::Compress::Gzip=gzip -e 'gzip "-" => "-"' >output.gz
+
+=head3 Compressing a file from the filesystem
+
To read the contents of the file C<file1.txt> and write the compressed
data to the file C<file1.txt.gz>.
@@ -547,6 +563,8 @@ data to the file C<file1.txt.gz>.
gzip $input => "$input.gz"
or die "gzip failed: $GzipError\n";
+=head3 Reading from a Filehandle and writing to an in-memory buffer
+
To read from an existing Perl filehandle, C<$input>, and write the
compressed data to a buffer, C<$buffer>.
@@ -561,6 +579,8 @@ compressed data to a buffer, C<$buffer>.
gzip $input => \$buffer
or die "gzip failed: $GzipError\n";
+=head3 Compressing multiple files
+
To compress all files in the directory "/my/home" that match "*.txt"
and store the compressed data in the same directory
@@ -635,7 +655,7 @@ return undef.
=head2 Constructor Options
-C<OPTS> is any combination of the following options:
+C<OPTS> is any combination of zero or more the following options:
=over 5
@@ -1204,6 +1224,12 @@ See L<IO::Compress::FAQ|IO::Compress::FAQ/"Apache::GZip Revisited">
See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP">
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Copress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Copress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm
index d1bd0c2bb2a..1d18fc4004c 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm
@@ -9,7 +9,7 @@ require Exporter;
our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names);
our ($GZIP_FNAME_INVALID_CHAR_RE, $GZIP_FCOMMENT_INVALID_CHAR_RE);
-$VERSION = '2.084';
+$VERSION = '2.093';
@ISA = qw(Exporter);
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm
index b2f38ff4021..c833f5e98b0 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm
@@ -6,15 +6,15 @@ use strict ;
use warnings;
use bytes;
-use IO::Compress::Base 2.084 ;
-use IO::Compress::Base::Common 2.084 qw(:Status );
-use IO::Compress::Adapter::Deflate 2.084 ;
+use IO::Compress::Base 2.093 ;
+use IO::Compress::Base::Common 2.093 qw(:Status );
+use IO::Compress::Adapter::Deflate 2.093 ;
require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %DEFLATE_CONSTANTS, %EXPORT_TAGS, $RawDeflateError);
-$VERSION = '2.084';
+$VERSION = '2.093';
$RawDeflateError = '';
@ISA = qw(IO::Compress::Base Exporter);
@@ -116,8 +116,8 @@ sub getExtraParams
return getZlibParams();
}
-use IO::Compress::Base::Common 2.084 qw(:Parse);
-use Compress::Raw::Zlib 2.084 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY);
+use IO::Compress::Base::Common 2.093 qw(:Parse);
+use Compress::Raw::Zlib 2.093 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY);
our %PARAMS = (
#'method' => [IO::Compress::Base::Common::Parse_unsigned, Z_DEFLATED],
'level' => [IO::Compress::Base::Common::Parse_signed, Z_DEFAULT_COMPRESSION],
@@ -265,7 +265,6 @@ IO::Compress::RawDeflate - Write RFC 1951 files/buffers
binmode $z
fileno $z
close $z ;
-
=head1 DESCRIPTION
@@ -295,7 +294,8 @@ The functional interface needs Perl5.005 or better.
=head2 rawdeflate $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<rawdeflate> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -308,7 +308,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -404,9 +404,9 @@ in C<$output_filename_or_reference> as a concatenated series of compressed data
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<rawdeflate>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<rawdeflate>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -474,6 +474,22 @@ Defaults to 0.
=head2 Examples
+Here are a few example that show the capabilities of the module.
+
+=head3 Streaming
+
+This very simple command line example demonstrates the streaming capabilities of the module.
+The code reads data from STDIN, compresses it, and writes the compressed data to STDOUT.
+
+ $ echo hello world | perl -MIO::Compress::RawDeflate=rawdeflate -e 'rawdeflate \*STDIN => \*STDOUT' >output.1951
+
+The special filename "-" can be used as a standin for both C<\*STDIN> and C<\*STDOUT>,
+so the above can be rewritten as
+
+ $ echo hello world | perl -MIO::Compress::RawDeflate=rawdeflate -e 'rawdeflate "-" => "-"' >output.1951
+
+=head3 Compressing a file from the filesystem
+
To read the contents of the file C<file1.txt> and write the compressed
data to the file C<file1.txt.1951>.
@@ -485,6 +501,8 @@ data to the file C<file1.txt.1951>.
rawdeflate $input => "$input.1951"
or die "rawdeflate failed: $RawDeflateError\n";
+=head3 Reading from a Filehandle and writing to an in-memory buffer
+
To read from an existing Perl filehandle, C<$input>, and write the
compressed data to a buffer, C<$buffer>.
@@ -499,6 +517,8 @@ compressed data to a buffer, C<$buffer>.
rawdeflate $input => \$buffer
or die "rawdeflate failed: $RawDeflateError\n";
+=head3 Compressing multiple files
+
To compress all files in the directory "/my/home" that match "*.txt"
and store the compressed data in the same directory
@@ -573,7 +593,7 @@ return undef.
=head2 Constructor Options
-C<OPTS> is any combination of the following options:
+C<OPTS> is any combination of zero or more the following options:
=over 5
@@ -948,6 +968,12 @@ See L<IO::Compress::FAQ|IO::Compress::FAQ/"Apache::GZip Revisited">
See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP">
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip.pm
index eabeef63e76..70b98b80d6e 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip.pm
@@ -4,30 +4,30 @@ use strict ;
use warnings;
use bytes;
-use IO::Compress::Base::Common 2.084 qw(:Status );
-use IO::Compress::RawDeflate 2.084 ();
-use IO::Compress::Adapter::Deflate 2.084 ;
-use IO::Compress::Adapter::Identity 2.084 ;
-use IO::Compress::Zlib::Extra 2.084 ;
-use IO::Compress::Zip::Constants 2.084 ;
+use IO::Compress::Base::Common 2.093 qw(:Status );
+use IO::Compress::RawDeflate 2.093 ();
+use IO::Compress::Adapter::Deflate 2.093 ;
+use IO::Compress::Adapter::Identity 2.093 ;
+use IO::Compress::Zlib::Extra 2.093 ;
+use IO::Compress::Zip::Constants 2.093 ;
use File::Spec();
use Config;
-use Compress::Raw::Zlib 2.084 ();
+use Compress::Raw::Zlib 2.093 ();
BEGIN
{
eval { require IO::Compress::Adapter::Bzip2 ;
- import IO::Compress::Adapter::Bzip2 2.084 ;
+ import IO::Compress::Adapter::Bzip2 2.093 ;
require IO::Compress::Bzip2 ;
- import IO::Compress::Bzip2 2.084 ;
+ import IO::Compress::Bzip2 2.093 ;
} ;
eval { require IO::Compress::Adapter::Lzma ;
- import IO::Compress::Adapter::Lzma 2.084 ;
+ import IO::Compress::Adapter::Lzma 2.093 ;
require IO::Compress::Lzma ;
- import IO::Compress::Lzma 2.084 ;
+ import IO::Compress::Lzma 2.093 ;
} ;
}
@@ -36,7 +36,7 @@ require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $ZipError);
-$VERSION = '2.084';
+$VERSION = '2.093';
$ZipError = '';
@ISA = qw(IO::Compress::RawDeflate Exporter);
@@ -246,13 +246,17 @@ sub mkHeader
&{ *$self->{ZipData}{FilterName} }() ;
}
-# if ( $param->getValue('utf8') ) {
-# require Encode ;
-# $filename = Encode::encode_utf8($filename)
-# if length $filename ;
-# $comment = Encode::encode_utf8($comment)
-# if length $comment ;
-# }
+ if ( $param->getValue('efs') && $] >= 5.008004) {
+ if (length $filename) {
+ utf8::downgrade($filename, 1)
+ or Carp::croak "Wide character in zip filename";
+ }
+
+ if (length $comment) {
+ utf8::downgrade($comment, 1)
+ or Carp::croak "Wide character in zip comment";
+ }
+ }
my $hdr = '';
@@ -325,8 +329,8 @@ sub mkHeader
$gpFlag |= ZIP_GP_FLAG_LZMA_EOS_PRESENT
if $method == ZIP_CM_LZMA ;
-# $gpFlag |= ZIP_GP_FLAG_LANGUAGE_ENCODING
-# if $param->getValue('utf8') && (length($filename) || length($comment));
+ $gpFlag |= ZIP_GP_FLAG_LANGUAGE_ENCODING
+ if $param->getValue('efs') && (length($filename) || length($comment));
my $version = $ZIP_CM_MIN_VERSIONS{$method};
$version = ZIP64_MIN_VERSION
@@ -682,7 +686,7 @@ our %PARAMS = (
'name' => [IO::Compress::Base::Common::Parse_any, ''],
'filtername'=> [IO::Compress::Base::Common::Parse_code, undef],
'canonicalname'=> [IO::Compress::Base::Common::Parse_boolean, 0],
-# 'utf8' => [IO::Compress::Base::Common::Parse_boolean, 0],
+ 'efs' => [IO::Compress::Base::Common::Parse_boolean, 0],
'time' => [IO::Compress::Base::Common::Parse_any, undef],
'extime' => [IO::Compress::Base::Common::Parse_any, undef],
'exunix2' => [IO::Compress::Base::Common::Parse_any, undef],
@@ -905,7 +909,6 @@ IO::Compress::Zip - Write zip files/buffers
binmode $z
fileno $z
close $z ;
-
=head1 DESCRIPTION
@@ -916,14 +919,18 @@ The primary purpose of this module is to provide streaming write access to
zip files and buffers. It is not a general-purpose file archiver. If that
is what you want, check out C<Archive::Zip> or C<Archive::Zip::SimpleZip>.
-At present three compression methods are supported by IO::Compress::Zip,
+At present the following compression methods are supported by IO::Compress::Zip,
namely Store (no compression at all), Deflate, Bzip2 and LZMA.
-Note that to create Bzip2 content, the module C<IO::Compress::Bzip2> must
-be installed.
+B<Note>
+
+=over 5
+
+=item * To use Bzip2 compression, the module C<IO::Compress::Bzip2> must be installed.
-Note that to create LZMA content, the module C<IO::Compress::Lzma> must
-be installed.
+=item * To use LZMA compression, the module C<IO::Compress::Lzma> must be installed.
+
+=back
For reading zip files/buffers, see the companion module
L<IO::Uncompress::Unzip|IO::Uncompress::Unzip>.
@@ -945,7 +952,8 @@ The functional interface needs Perl5.005 or better.
=head2 zip $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<zip> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -958,7 +966,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -1062,9 +1070,9 @@ in C<$output_filename_or_reference> as a distinct entry.
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<zip>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<zip>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -1132,6 +1140,50 @@ Defaults to 0.
=head2 Examples
+Here are a few example that show the capabilities of the module.
+
+=head3 Streaming
+
+This very simple command line example demonstrates the streaming capabilities of the module.
+The code reads data from STDIN, compresses it, and writes the compressed data to STDOUT.
+
+ $ echo hello world | perl -MIO::Compress::Zip=zip -e 'zip \*STDIN => \*STDOUT' >output.zip
+
+The special filename "-" can be used as a standin for both C<\*STDIN> and C<\*STDOUT>,
+so the above can be rewritten as
+
+ $ echo hello world | perl -MIO::Compress::Zip=zip -e 'zip "-" => "-"' >output.zip
+
+One problem with creating a zip archive directly from STDIN can be demonstrated by looking at
+the contents of the zip file, output.zip, that we have just created.
+
+ $ unzip -l output.zip
+ Archive: output.zip
+ Length Date Time Name
+ --------- ---------- ----- ----
+ 12 2019-08-16 22:21
+ --------- -------
+ 12 1 file
+
+The archive member (filename) used is the empty string.
+
+If that doesn't suit your needs, you can explicitly set the filename used
+in the zip archive by specifying the L<Name|"File Naming Options"> option, like so
+
+ echo hello world | perl -MIO::Compress::Zip=zip -e 'zip "-" => "-", Name => "hello.txt"' >output.zip
+
+Now the contents of the zip file looks like this
+
+ $ unzip -l output.zip
+ Archive: output.zip
+ Length Date Time Name
+ --------- ---------- ----- ----
+ 12 2019-08-16 22:22 hello.txt
+ --------- -------
+ 12 1 file
+
+=head3 Compressing a file from the filesystem
+
To read the contents of the file C<file1.txt> and write the compressed
data to the file C<file1.txt.zip>.
@@ -1143,6 +1195,8 @@ data to the file C<file1.txt.zip>.
zip $input => "$input.zip"
or die "zip failed: $ZipError\n";
+=head3 Reading from a Filehandle and writing to an in-memory buffer
+
To read from an existing Perl filehandle, C<$input>, and write the
compressed data to a buffer, C<$buffer>.
@@ -1157,6 +1211,8 @@ compressed data to a buffer, C<$buffer>.
zip $input => \$buffer
or die "zip failed: $ZipError\n";
+=head3 Compressing multiple files
+
To create a zip file, C<output.zip>, that contains the compressed contents
of the files C<alpha.txt> and C<beta.txt>
@@ -1235,7 +1291,7 @@ return undef.
=head2 Constructor Options
-C<OPTS> is any combination of the following options:
+C<OPTS> is any combination of zero or more the following options:
=over 5
@@ -1278,22 +1334,52 @@ to it. Otherwise the file pointer will not be moved.
This parameter defaults to 0.
+=back
+
+=head3 File Naming Options
+
+A quick bit of zip file terminology -- A zip archive consists of one or more I<archive members>, where each member has an associated
+filename, known as the I<archive member name>.
+
+The options listed in this section control how the I<archive member name> (or filename) is stored the zip archive.
+
+=over 5
+
=item C<< Name => $string >>
-Stores the contents of C<$string> in the zip filename header field.
+This option is used to explicitly set the I<archive member name> in
+the zip archive to C<$string>.
+Most of the time you don't need to make use of this option.
+By default when adding a filename to the zip archive, the I<archive member name> will match the filename.
+
+You should only need to use this option if you want the I<archive member name>
+to be different from the uncompressed filename or when the input is a filehandle or a buffer.
-If C<Name> is not specified and the C<$input> parameter is a filename, the
-value of C<$input> will be used for the zip filename header field.
+The default behaviour for what I<archive member name> is used when the C<Name> option
+is I<not> specified depends on the form of the C<$input> parameter:
+
+=over 5
-If C<Name> is not specified and the C<$input> parameter is not a filename,
-no zip filename field will be created.
+=item *
+
+If the C<$input> parameter is a filename, the
+value of C<$input> will be used for the I<archive member name> .
+
+=item *
+If the C<$input> parameter is not a filename,
+the I<archive member name> will be an empty string.
+
+=back
Note that both the C<CanonicalName> and C<FilterName> options
-can modify the value used for the zip filename header field.
+can modify the value used for the I<archive member name>.
+
+Also note that you should set the C<Efs> option to true if you are working
+with UTF8 filenames.
=item C<< CanonicalName => 0|1 >>
-This option controls whether the filename field in the zip header is
+This option controls whether the I<archive member name> is
I<normalized> into Unix format before being written to the zip file.
It is recommended that you enable this option unless you really need
@@ -1313,15 +1399,14 @@ This option defaults to B<false>.
=item C<< FilterName => sub { ... } >>
-This option allow the filename field in the zip header to be modified
+This option allow the I<archive member> name to be modified
before it is written to the zip file.
This option takes a parameter that must be a reference to a sub. On entry
to the sub the C<$_> variable will contain the name to be filtered. If no
filename is available C<$_> will contain an empty string.
-The value of C<$_> when the sub returns will be stored in the filename
-header field.
+The value of C<$_> when the sub returns will be used as the I<archive member name>.
Note that if C<CanonicalName> is enabled, a
normalized filename will be passed to the sub.
@@ -1343,6 +1428,167 @@ filenames before they are stored in C<$zipfile>.
FilterName => sub { s[^$dir/][] } ;
}
+=item C<< Efs => 0|1 >>
+
+This option controls setting of the "Language Encoding Flag" (EFS) in the zip
+archive. When set, the filename and comment fields for the zip archive MUST
+be valid UTF-8.
+
+If the string used for the filename and/or comment is not valid UTF-8 when this option
+is true, the script will die with a "wide character" error.
+
+Note that this option only works with Perl 5.8.4 or better.
+
+This option defaults to B<false>.
+
+=back
+
+=head3 Overall Zip Archive Structure
+
+=over 5
+
+=item C<< Minimal => 1|0 >>
+
+If specified, this option will disable the creation of all extra fields
+in the zip local and central headers. So the C<exTime>, C<exUnix2>,
+C<exUnixN>, C<ExtraFieldLocal> and C<ExtraFieldCentral> options will
+be ignored.
+
+This parameter defaults to 0.
+
+=item C<< Stream => 0|1 >>
+
+This option controls whether the zip file/buffer output is created in
+streaming mode.
+
+Note that when outputting to a file with streaming mode disabled (C<Stream>
+is 0), the output file must be seekable.
+
+The default is 1.
+
+=item C<< Zip64 => 0|1 >>
+
+Create a Zip64 zip file/buffer. This option is used if you want
+to store files larger than 4 Gig or store more than 64K files in a single
+zip archive.
+
+C<Zip64> will be automatically set, as needed, if working with the one-shot
+interface when the input is either a filename or a scalar reference.
+
+If you intend to manipulate the Zip64 zip files created with this module
+using an external zip/unzip, make sure that it supports Zip64.
+
+In particular, if you are using Info-Zip you need to have zip version 3.x
+or better to update a Zip64 archive and unzip version 6.x to read a zip64
+archive.
+
+The default is 0.
+
+=back
+
+=head3 Deflate Compression Options
+
+=over 5
+
+=item -Level
+
+Defines the compression level used by zlib. The value should either be
+a number between 0 and 9 (0 means no compression and 9 is maximum
+compression), or one of the symbolic constants defined below.
+
+ Z_NO_COMPRESSION
+ Z_BEST_SPEED
+ Z_BEST_COMPRESSION
+ Z_DEFAULT_COMPRESSION
+
+The default is Z_DEFAULT_COMPRESSION.
+
+Note, these constants are not imported by C<IO::Compress::Zip> by default.
+
+ use IO::Compress::Zip qw(:strategy);
+ use IO::Compress::Zip qw(:constants);
+ use IO::Compress::Zip qw(:all);
+
+=item -Strategy
+
+Defines the strategy used to tune the compression. Use one of the symbolic
+constants defined below.
+
+ Z_FILTERED
+ Z_HUFFMAN_ONLY
+ Z_RLE
+ Z_FIXED
+ Z_DEFAULT_STRATEGY
+
+The default is Z_DEFAULT_STRATEGY.
+
+=back
+
+=head3 Bzip2 Compression Options
+
+=over 5
+
+=item C<< BlockSize100K => number >>
+
+Specify the number of 100K blocks bzip2 uses during compression.
+
+Valid values are from 1 to 9, where 9 is best compression.
+
+This option is only valid if the C<Method> is ZIP_CM_BZIP2. It is ignored
+otherwise.
+
+The default is 1.
+
+=item C<< WorkFactor => number >>
+
+Specifies how much effort bzip2 should take before resorting to a slower
+fallback compression algorithm.
+
+Valid values range from 0 to 250, where 0 means use the default value 30.
+
+This option is only valid if the C<Method> is ZIP_CM_BZIP2. It is ignored
+otherwise.
+
+The default is 0.
+
+=back
+
+=head3 Lzma Compression Options
+
+=over 5
+
+=item C<< Preset => number >>
+
+Used to choose the LZMA compression preset.
+
+Valid values are 0-9 and C<LZMA_PRESET_DEFAULT>.
+
+0 is the fastest compression with the lowest memory usage and the lowest
+compression.
+
+9 is the slowest compression with the highest memory usage but with the best
+compression.
+
+This option is only valid if the C<Method> is ZIP_CM_LZMA. It is ignored
+otherwise.
+
+Defaults to C<LZMA_PRESET_DEFAULT> (6).
+
+=item C<< Extreme => 0|1 >>
+
+Makes LZMA compression a lot slower, but a small compression gain.
+
+This option is only valid if the C<Method> is ZIP_CM_LZMA. It is ignored
+otherwise.
+
+Defaults to 0.
+
+=back
+
+=head3 Other Options
+
+=over 5
+
=item C<< Time => $number >>
Sets the last modified time field in the zip header to $number.
@@ -1424,6 +1670,8 @@ By default no UnixN extra field is created.
Stores the contents of C<$comment> in the Central File Header of
the zip file.
+Set the C<Efs> option to true if you want to store a UTF8 comment.
+
By default, no comment field is written to the zip file.
=item C<< ZipComment => $comment >>
@@ -1458,34 +1706,6 @@ content when C<IO::Compress::Lzma> is not available.
The default method is ZIP_CM_DEFLATE.
-=item C<< Stream => 0|1 >>
-
-This option controls whether the zip file/buffer output is created in
-streaming mode.
-
-Note that when outputting to a file with streaming mode disabled (C<Stream>
-is 0), the output file must be seekable.
-
-The default is 1.
-
-=item C<< Zip64 => 0|1 >>
-
-Create a Zip64 zip file/buffer. This option is used if you want
-to store files larger than 4 Gig or store more than 64K files in a single
-zip archive.
-
-C<Zip64> will be automatically set, as needed, if working with the one-shot
-interface when the input is either a filename or a scalar reference.
-
-If you intend to manipulate the Zip64 zip files created with this module
-using an external zip/unzip, make sure that it supports Zip64.
-
-In particular, if you are using Info-Zip you need to have zip version 3.x
-or better to update a Zip64 archive and unzip version 6.x to read a zip64
-archive.
-
-The default is 0.
-
=item C<< TextFlag => 0|1 >>
This parameter controls the setting of a bit in the zip central header. It
@@ -1546,96 +1766,6 @@ If the C<Minimal> option is set to true, this option will be ignored.
The maximum size of an extra field 65535 bytes.
-=item C<< Minimal => 1|0 >>
-
-If specified, this option will disable the creation of all extra fields
-in the zip local and central headers. So the C<exTime>, C<exUnix2>,
-C<exUnixN>, C<ExtraFieldLocal> and C<ExtraFieldCentral> options will
-be ignored.
-
-This parameter defaults to 0.
-
-=item C<< BlockSize100K => number >>
-
-Specify the number of 100K blocks bzip2 uses during compression.
-
-Valid values are from 1 to 9, where 9 is best compression.
-
-This option is only valid if the C<Method> is ZIP_CM_BZIP2. It is ignored
-otherwise.
-
-The default is 1.
-
-=item C<< WorkFactor => number >>
-
-Specifies how much effort bzip2 should take before resorting to a slower
-fallback compression algorithm.
-
-Valid values range from 0 to 250, where 0 means use the default value 30.
-
-This option is only valid if the C<Method> is ZIP_CM_BZIP2. It is ignored
-otherwise.
-
-The default is 0.
-
-=item C<< Preset => number >>
-
-Used to choose the LZMA compression preset.
-
-Valid values are 0-9 and C<LZMA_PRESET_DEFAULT>.
-
-0 is the fastest compression with the lowest memory usage and the lowest
-compression.
-
-9 is the slowest compression with the highest memory usage but with the best
-compression.
-
-This option is only valid if the C<Method> is ZIP_CM_LZMA. It is ignored
-otherwise.
-
-Defaults to C<LZMA_PRESET_DEFAULT> (6).
-
-=item C<< Extreme => 0|1 >>
-
-Makes LZMA compression a lot slower, but a small compression gain.
-
-This option is only valid if the C<Method> is ZIP_CM_LZMA. It is ignored
-otherwise.
-
-Defaults to 0.
-
-=item -Level
-
-Defines the compression level used by zlib. The value should either be
-a number between 0 and 9 (0 means no compression and 9 is maximum
-compression), or one of the symbolic constants defined below.
-
- Z_NO_COMPRESSION
- Z_BEST_SPEED
- Z_BEST_COMPRESSION
- Z_DEFAULT_COMPRESSION
-
-The default is Z_DEFAULT_COMPRESSION.
-
-Note, these constants are not imported by C<IO::Compress::Zip> by default.
-
- use IO::Compress::Zip qw(:strategy);
- use IO::Compress::Zip qw(:constants);
- use IO::Compress::Zip qw(:all);
-
-=item -Strategy
-
-Defines the strategy used to tune the compression. Use one of the symbolic
-constants defined below.
-
- Z_FILTERED
- Z_HUFFMAN_ONLY
- Z_RLE
- Z_FIXED
- Z_DEFAULT_STRATEGY
-
-The default is Z_DEFAULT_STRATEGY.
-
=item C<< Strict => 0|1 >>
This is a placeholder option.
@@ -1918,6 +2048,12 @@ See L<IO::Compress::FAQ|IO::Compress::FAQ/"Apache::GZip Revisited">
See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP">
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm
index d28a6ae6861..edae0c29d27 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm
@@ -7,7 +7,7 @@ require Exporter;
our ($VERSION, @ISA, @EXPORT, %ZIP_CM_MIN_VERSIONS);
-$VERSION = '2.084';
+$VERSION = '2.093';
@ISA = qw(Exporter);
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm
index d0d053be95d..c2fecba974f 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm
@@ -9,7 +9,7 @@ require Exporter;
our ($VERSION, @ISA, @EXPORT);
-$VERSION = '2.084';
+$VERSION = '2.093';
@ISA = qw(Exporter);
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm
index a88adba273d..6e13d4fb2f1 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm
@@ -8,9 +8,9 @@ use bytes;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS);
-$VERSION = '2.084';
+$VERSION = '2.093';
-use IO::Compress::Gzip::Constants 2.084 ;
+use IO::Compress::Gzip::Constants 2.093 ;
sub ExtraFieldError
{
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm
index 1aa9a8c39b7..3fc176e5006 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm
@@ -4,12 +4,12 @@ use strict;
use warnings;
use bytes;
-use IO::Compress::Base::Common 2.084 qw(:Status);
+use IO::Compress::Base::Common 2.093 qw(:Status);
-use Compress::Raw::Bzip2 2.084 ;
+use Compress::Raw::Bzip2 2.093 ;
our ($VERSION, @ISA);
-$VERSION = '2.084';
+$VERSION = '2.093';
sub mkUncompObject
{
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm
index 5601599225f..c8622a59137 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm
@@ -4,14 +4,14 @@ use warnings;
use strict;
use bytes;
-use IO::Compress::Base::Common 2.084 qw(:Status);
+use IO::Compress::Base::Common 2.093 qw(:Status);
use IO::Compress::Zip::Constants ;
our ($VERSION);
-$VERSION = '2.084';
+$VERSION = '2.093';
-use Compress::Raw::Zlib 2.084 ();
+use Compress::Raw::Zlib 2.093 ();
sub mkUncompObject
{
@@ -139,7 +139,7 @@ sub reset
{
my $self = shift;
- $self->{CompSize} = 0;
+ $self->{CompSize}->reset();
$self->{UnCompSize} = 0;
$self->{CRC32} = Compress::Raw::Zlib::crc32('');
$self->{ADLER32} = Compress::Raw::Zlib::adler32('');
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm
index f51c64d7e54..a27af5ba8e7 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm
@@ -4,11 +4,11 @@ use strict;
use warnings;
use bytes;
-use IO::Compress::Base::Common 2.084 qw(:Status);
-use Compress::Raw::Zlib 2.084 qw(Z_OK Z_BUF_ERROR Z_STREAM_END Z_FINISH MAX_WBITS);
+use IO::Compress::Base::Common 2.093 qw(:Status);
+use Compress::Raw::Zlib 2.093 qw(Z_OK Z_BUF_ERROR Z_STREAM_END Z_FINISH MAX_WBITS);
our ($VERSION);
-$VERSION = '2.084';
+$VERSION = '2.093';
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm
index be464889ebb..6172737e26e 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm
@@ -6,22 +6,22 @@ use strict;
use warnings;
use bytes;
-use IO::Compress::Base::Common 2.084 ();
+use IO::Compress::Base::Common 2.093 ();
-use IO::Uncompress::Adapter::Inflate 2.084 ();
+use IO::Uncompress::Adapter::Inflate 2.093 ();
-use IO::Uncompress::Base 2.084 ;
-use IO::Uncompress::Gunzip 2.084 ;
-use IO::Uncompress::Inflate 2.084 ;
-use IO::Uncompress::RawInflate 2.084 ;
-use IO::Uncompress::Unzip 2.084 ;
+use IO::Uncompress::Base 2.093 ;
+use IO::Uncompress::Gunzip 2.093 ;
+use IO::Uncompress::Inflate 2.093 ;
+use IO::Uncompress::RawInflate 2.093 ;
+use IO::Uncompress::Unzip 2.093 ;
require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $AnyInflateError);
-$VERSION = '2.084';
+$VERSION = '2.093';
$AnyInflateError = '';
@ISA = qw(IO::Uncompress::Base Exporter);
@@ -48,7 +48,7 @@ sub anyinflate
sub getExtraParams
{
- use IO::Compress::Base::Common 2.084 qw(:Parse);
+ use IO::Compress::Base::Common 2.093 qw(:Parse);
return ( 'rawinflate' => [Parse_boolean, 0] ) ;
}
@@ -213,7 +213,8 @@ The functional interface needs Perl5.005 or better.
=head2 anyinflate $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<anyinflate> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -226,7 +227,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -323,9 +324,9 @@ files/buffers.
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<anyinflate>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<anyinflate>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -959,6 +960,12 @@ Same as doing this
See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP">
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm
index c6dfce536b4..251b7cf2632 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm
@@ -4,16 +4,16 @@ use strict;
use warnings;
use bytes;
-use IO::Compress::Base::Common 2.084 ();
+use IO::Compress::Base::Common 2.093 ();
-use IO::Uncompress::Base 2.084 ;
+use IO::Uncompress::Base 2.093 ;
require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $AnyUncompressError);
-$VERSION = '2.084';
+$VERSION = '2.093';
$AnyUncompressError = '';
@ISA = qw(IO::Uncompress::Base Exporter);
@@ -29,26 +29,30 @@ BEGIN
{
local @INC = @INC;
pop @INC if $INC[-1] eq '.';
- eval ' use IO::Uncompress::Adapter::Inflate 2.084 ;';
- eval ' use IO::Uncompress::Adapter::Bunzip2 2.084 ;';
- eval ' use IO::Uncompress::Adapter::LZO 2.084 ;';
- eval ' use IO::Uncompress::Adapter::Lzf 2.084 ;';
- eval ' use IO::Uncompress::Adapter::UnLzma 2.084 ;';
- eval ' use IO::Uncompress::Adapter::UnXz 2.084 ;';
+
+ # Don't trigger any __DIE__ Hooks.
+ local $SIG{__DIE__};
+
+ eval ' use IO::Uncompress::Adapter::Inflate 2.093 ;';
+ eval ' use IO::Uncompress::Adapter::Bunzip2 2.093 ;';
+ eval ' use IO::Uncompress::Adapter::LZO 2.093 ;';
+ eval ' use IO::Uncompress::Adapter::Lzf 2.093 ;';
+ eval ' use IO::Uncompress::Adapter::UnLzma 2.093 ;';
+ eval ' use IO::Uncompress::Adapter::UnXz 2.093 ;';
eval ' use IO::Uncompress::Adapter::UnZstd 2.083 ;';
- eval ' use IO::Uncompress::Adapter::UnLzip 2.084 ;';
-
- eval ' use IO::Uncompress::Bunzip2 2.084 ;';
- eval ' use IO::Uncompress::UnLzop 2.084 ;';
- eval ' use IO::Uncompress::Gunzip 2.084 ;';
- eval ' use IO::Uncompress::Inflate 2.084 ;';
- eval ' use IO::Uncompress::RawInflate 2.084 ;';
- eval ' use IO::Uncompress::Unzip 2.084 ;';
- eval ' use IO::Uncompress::UnLzf 2.084 ;';
- eval ' use IO::Uncompress::UnLzma 2.084 ;';
- eval ' use IO::Uncompress::UnXz 2.084 ;';
- eval ' use IO::Uncompress::UnZstd 2.084 ;';
- eval ' use IO::Uncompress::UnLzip 2.084 ;';
+ eval ' use IO::Uncompress::Adapter::UnLzip 2.093 ;';
+
+ eval ' use IO::Uncompress::Bunzip2 2.093 ;';
+ eval ' use IO::Uncompress::UnLzop 2.093 ;';
+ eval ' use IO::Uncompress::Gunzip 2.093 ;';
+ eval ' use IO::Uncompress::Inflate 2.093 ;';
+ eval ' use IO::Uncompress::RawInflate 2.093 ;';
+ eval ' use IO::Uncompress::Unzip 2.093 ;';
+ eval ' use IO::Uncompress::UnLzf 2.093 ;';
+ eval ' use IO::Uncompress::UnLzma 2.093 ;';
+ eval ' use IO::Uncompress::UnXz 2.093 ;';
+ eval ' use IO::Uncompress::UnZstd 2.093 ;';
+ eval ' use IO::Uncompress::UnLzip 2.093 ;';
}
@@ -266,7 +270,7 @@ __END__
=head1 NAME
-IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2 or lzop file/buffer
+IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2, xz, lzma, lzip, lzf or lzop file/buffer
=head1 SYNOPSIS
@@ -363,7 +367,8 @@ The functional interface needs Perl5.005 or better.
=head2 anyuncompress $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<anyuncompress> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -376,7 +381,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -473,9 +478,9 @@ files/buffers.
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<anyuncompress>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<anyuncompress>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -1044,6 +1049,12 @@ Same as doing this
=head1 EXAMPLES
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Base.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Base.pm
index 06fb04a81c9..b9901ca1fff 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Base.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Base.pm
@@ -9,12 +9,12 @@ our (@ISA, $VERSION, @EXPORT_OK, %EXPORT_TAGS);
@ISA = qw(IO::File Exporter);
-$VERSION = '2.084';
+$VERSION = '2.093';
use constant G_EOF => 0 ;
use constant G_ERR => -1 ;
-use IO::Compress::Base::Common 2.084 ;
+use IO::Compress::Base::Common 2.093 ;
use IO::File ;
use Symbol;
@@ -1010,6 +1010,9 @@ sub nextStream
$status == 1
or return $status ;
+ *$self->{Pending} = ''
+ if $self !~ /IO::Uncompress::RawInflate/ && ! *$self->{MultiStream};
+
*$self->{TotalInflatedBytesRead} = 0 ;
*$self->{LineNo} = $. = 0;
@@ -1050,6 +1053,10 @@ sub gotoNextStream
return 0;
}
+ # Not EOF, so Transparent mode kicks in now for trailing data
+ # Reset member name in case anyone calls getHeaderInfo()->{Name}
+ *$self->{Info} = { Name => undef, Type => 'plain' };
+
$self->clearError();
*$self->{Type} = 'plain';
*$self->{Plain} = 1;
@@ -1527,6 +1534,12 @@ IO::Uncompress::Base - Base Class for IO::Uncompress modules
This module is not intended for direct use in application code. Its sole
purpose is to be sub-classed by IO::Uncompress modules.
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm
index 7a84bcd15cb..8e805d4c9e2 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm
@@ -4,15 +4,15 @@ use strict ;
use warnings;
use bytes;
-use IO::Compress::Base::Common 2.084 qw(:Status );
+use IO::Compress::Base::Common 2.093 qw(:Status );
-use IO::Uncompress::Base 2.084 ;
-use IO::Uncompress::Adapter::Bunzip2 2.084 ;
+use IO::Uncompress::Base 2.093 ;
+use IO::Uncompress::Adapter::Bunzip2 2.093 ;
require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $Bunzip2Error);
-$VERSION = '2.084';
+$VERSION = '2.093';
$Bunzip2Error = '';
@ISA = qw(IO::Uncompress::Base Exporter);
@@ -209,7 +209,8 @@ The functional interface needs Perl5.005 or better.
=head2 bunzip2 $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<bunzip2> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -222,7 +223,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -319,9 +320,9 @@ files/buffers.
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<bunzip2>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<bunzip2>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -876,6 +877,12 @@ Same as doing this
See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP">
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
@@ -886,7 +893,7 @@ L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
L<Archive::Tar|Archive::Tar>,
L<IO::Zlib|IO::Zlib>
-The primary site for the bzip2 program is L<http://www.bzip.org>.
+The primary site for the bzip2 program is L<https://sourceware.org/bzip2/>.
See the module L<Compress::Bzip2|Compress::Bzip2>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm
index 46dd108341a..6e57e961184 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm
@@ -9,12 +9,12 @@ use strict ;
use warnings;
use bytes;
-use IO::Uncompress::RawInflate 2.084 ;
+use IO::Uncompress::RawInflate 2.093 ;
-use Compress::Raw::Zlib 2.084 () ;
-use IO::Compress::Base::Common 2.084 qw(:Status );
-use IO::Compress::Gzip::Constants 2.084 ;
-use IO::Compress::Zlib::Extra 2.084 ;
+use Compress::Raw::Zlib 2.093 () ;
+use IO::Compress::Base::Common 2.093 qw(:Status );
+use IO::Compress::Gzip::Constants 2.093 ;
+use IO::Compress::Zlib::Extra 2.093 ;
require Exporter ;
@@ -28,7 +28,7 @@ Exporter::export_ok_tags('all');
$GunzipError = '';
-$VERSION = '2.084';
+$VERSION = '2.093';
sub new
{
@@ -348,7 +348,8 @@ The functional interface needs Perl5.005 or better.
=head2 gunzip $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<gunzip> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -361,7 +362,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -458,9 +459,9 @@ files/buffers.
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<gunzip>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<gunzip>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -1082,6 +1083,12 @@ Same as doing this
See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP">
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm
index 4d89db5b195..993a1dddc89 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm
@@ -5,15 +5,15 @@ use strict ;
use warnings;
use bytes;
-use IO::Compress::Base::Common 2.084 qw(:Status );
-use IO::Compress::Zlib::Constants 2.084 ;
+use IO::Compress::Base::Common 2.093 qw(:Status );
+use IO::Compress::Zlib::Constants 2.093 ;
-use IO::Uncompress::RawInflate 2.084 ;
+use IO::Uncompress::RawInflate 2.093 ;
require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $InflateError);
-$VERSION = '2.084';
+$VERSION = '2.093';
$InflateError = '';
@ISA = qw(IO::Uncompress::RawInflate Exporter);
@@ -270,7 +270,8 @@ The functional interface needs Perl5.005 or better.
=head2 inflate $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<inflate> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -283,7 +284,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -380,9 +381,9 @@ files/buffers.
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<inflate>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<inflate>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -954,6 +955,12 @@ Same as doing this
See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP">
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm
index 63703cd9750..2fa318816ac 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm
@@ -5,16 +5,16 @@ use strict ;
use warnings;
use bytes;
-use Compress::Raw::Zlib 2.084 ;
-use IO::Compress::Base::Common 2.084 qw(:Status );
+use Compress::Raw::Zlib 2.093 ;
+use IO::Compress::Base::Common 2.093 qw(:Status );
-use IO::Uncompress::Base 2.084 ;
-use IO::Uncompress::Adapter::Inflate 2.084 ;
+use IO::Uncompress::Base 2.093 ;
+use IO::Uncompress::Adapter::Inflate 2.093 ;
require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $RawInflateError);
-$VERSION = '2.084';
+$VERSION = '2.093';
$RawInflateError = '';
@ISA = qw(IO::Uncompress::Base Exporter);
@@ -418,7 +418,8 @@ The functional interface needs Perl5.005 or better.
=head2 rawinflate $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<rawinflate> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -431,7 +432,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -528,9 +529,9 @@ files/buffers.
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<rawinflate>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<rawinflate>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -1082,6 +1083,12 @@ Same as doing this
See L<IO::Compress::FAQ|IO::Compress::FAQ/"Compressed files and Net::FTP">
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm
index 4e8a0d67c7a..856487f8fcd 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm
@@ -9,17 +9,20 @@ use warnings;
use bytes;
use IO::File;
-use IO::Uncompress::RawInflate 2.084 ;
-use IO::Compress::Base::Common 2.084 qw(:Status );
-use IO::Uncompress::Adapter::Inflate 2.084 ;
-use IO::Uncompress::Adapter::Identity 2.084 ;
-use IO::Compress::Zlib::Extra 2.084 ;
-use IO::Compress::Zip::Constants 2.084 ;
+use IO::Uncompress::RawInflate 2.093 ;
+use IO::Compress::Base::Common 2.093 qw(:Status );
+use IO::Uncompress::Adapter::Inflate 2.093 ;
+use IO::Uncompress::Adapter::Identity 2.093 ;
+use IO::Compress::Zlib::Extra 2.093 ;
+use IO::Compress::Zip::Constants 2.093 ;
-use Compress::Raw::Zlib 2.084 () ;
+use Compress::Raw::Zlib 2.093 () ;
BEGIN
{
+ # Don't trigger any __DIE__ Hooks.
+ local $SIG{__DIE__};
+
eval{ require IO::Uncompress::Adapter::Bunzip2 ;
import IO::Uncompress::Adapter::Bunzip2 } ;
eval{ require IO::Uncompress::Adapter::UnLzma ;
@@ -31,7 +34,7 @@ require Exporter ;
our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $UnzipError, %headerLookup);
-$VERSION = '2.084';
+$VERSION = '2.093';
$UnzipError = '';
@ISA = qw(IO::Uncompress::RawInflate Exporter);
@@ -70,6 +73,7 @@ sub getExtraParams
'name' => [IO::Compress::Base::Common::Parse_any, undef],
'stream' => [IO::Compress::Base::Common::Parse_boolean, 0],
+ 'efs' => [IO::Compress::Base::Common::Parse_boolean, 0],
# TODO - This means reading the central directory to get
# 1. the local header offsets
@@ -86,6 +90,7 @@ sub ckParams
$got->setValue('crc32' => 1);
*$self->{UnzipData}{Name} = $got->getValue('name');
+ *$self->{UnzipData}{efs} = $got->getValue('efs');
return 1;
}
@@ -551,6 +556,7 @@ sub _readZipHeader($)
my $extraField;
my @EXTRA = ();
my $streamingMode = ($gpFlag & ZIP_GP_FLAG_STREAMING_MASK) ? 1 : 0 ;
+ my $efs_flag = ($gpFlag & ZIP_GP_FLAG_LANGUAGE_ENCODING) ? 1 : 0;
return $self->HeaderError("Encrypted content not supported")
if $gpFlag & (ZIP_GP_FLAG_ENCRYPTED_MASK|ZIP_GP_FLAG_STRONG_ENCRYPTED_MASK);
@@ -565,6 +571,14 @@ sub _readZipHeader($)
{
$self->smartReadExact(\$filename, $filename_length)
or return $self->TruncatedHeader("Filename");
+
+ if (*$self->{UnzipData}{efs} && $efs_flag && $] >= 5.008004)
+ {
+ require Encode;
+ eval { $filename = Encode::decode_utf8($filename, 1) }
+ or Carp::croak "Zip Filename not UTF-8" ;
+ }
+
$keep .= $filename ;
}
@@ -705,6 +719,7 @@ sub _readZipHeader($)
'UncompressedLength' => $uncompressedLength ,
'CRC32' => $crc32 ,
'Name' => $filename,
+ 'efs' => $efs_flag, # language encoding flag
'Time' => _dosToUnixTime($lastModTime),
'Stream' => $streamingMode,
@@ -1107,7 +1122,8 @@ The functional interface needs Perl5.005 or better.
=head2 unzip $input_filename_or_reference => $output_filename_or_reference [, OPTS]
C<unzip> expects at least two parameters,
-C<$input_filename_or_reference> and C<$output_filename_or_reference>.
+C<$input_filename_or_reference> and C<$output_filename_or_reference>
+and zero or more optional parameters (see L</Optional Parameters>)
=head3 The C<$input_filename_or_reference> parameter
@@ -1120,7 +1136,7 @@ It can take one of the following forms:
=item A filename
-If the <$input_filename_or_reference> parameter is a simple scalar, it is
+If the C<$input_filename_or_reference> parameter is a simple scalar, it is
assumed to be a filename. This file will be opened for reading and the
input data will be read from it.
@@ -1217,9 +1233,9 @@ files/buffers.
=head2 Optional Parameters
-Unless specified below, the optional parameters for C<unzip>,
-C<OPTS>, are the same as those used with the OO interface defined in the
-L</"Constructor Options"> section below.
+The optional parameters for the one-shot function C<unzip>
+are (for the most part) identical to those used with the OO interface defined in the
+L</"Constructor Options"> section. The exceptions are listed below
=over 5
@@ -1431,6 +1447,18 @@ OPTS is a combination of the following options:
Open "membername" from the zip file for reading.
+=item C<< Efs => 0| 1 >>
+
+When this option is set to true AND the zip archive being read has
+the "Language Encoding Flag" (EFS) set, the member name is assumed to be encoded in UTF-8.
+
+If the member name in the zip archive is not valid UTF-8 when this optionn is true,
+the script will die with an error message.
+
+Note that this option only works with Perl 5.8.4 or better.
+
+This option defaults to B<false>.
+
=item C<< AutoClose => 0|1 >>
This option is only valid when the C<$input> parameter is a filehandle. If
@@ -1731,6 +1759,10 @@ Skips to the next compressed data stream in the input file/buffer. If a new
compressed data stream is found, the eof marker will be cleared and C<$.>
will be reset to 0.
+If trailing data is present immediately after the zip archive and the
+C<Transparent> option is enabled, this method will consider that trailing
+data to be another member of the zip archive.
+
Returns 1 if a new stream was found, 0 if none was found, and -1 if an
error was encountered.
@@ -1828,6 +1860,12 @@ to read a zip file and unzip its contents to disk.
The script is available from L<https://gist.github.com/eqhmcow/5389877>
+=head1 SUPPORT
+
+General feedback/questions/bug reports should be sent to
+L<https://github.com/pmqs/IO-Compress/issues> (preferred) or
+L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>.
+
=head1 SEE ALSO
L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Compress::Deflate>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzma>, L<IO::Uncompress::UnLzma>, L<IO::Compress::Xz>, L<IO::Uncompress::UnXz>, L<IO::Compress::Lzip>, L<IO::Uncompress::UnLzip>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Compress::Lzf>, L<IO::Uncompress::UnLzf>, L<IO::Compress::Zstd>, L<IO::Uncompress::UnZstd>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/private/MakeUtil.pm b/gnu/usr.bin/perl/cpan/IO-Compress/private/MakeUtil.pm
index 037782b9498..12fa26fd05f 100644
--- a/gnu/usr.bin/perl/cpan/IO-Compress/private/MakeUtil.pm
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/private/MakeUtil.pm
@@ -35,8 +35,7 @@ sub MY::libscan
my $path = shift;
return undef
- if $path =~ /^(?:RCS|CVS|SCCS|\.svn|_darcs)$/ ||
- $path =~ /(~|\.bak|_bak)$/ ||
+ if $path =~ /(~|\.bak|_bak)$/ ||
$path =~ /\..*\.sw(o|p)$/ ||
$path =~ /\B\.svn\b/;
diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/000prereq.t b/gnu/usr.bin/perl/cpan/IO-Compress/t/000prereq.t
index c3395464c49..9467cd37711 100755
--- a/gnu/usr.bin/perl/cpan/IO-Compress/t/000prereq.t
+++ b/gnu/usr.bin/perl/cpan/IO-Compress/t/000prereq.t
@@ -25,7 +25,7 @@ BEGIN
if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 };
- my $VERSION = '2.084';
+ my $VERSION = '2.093';
my @NAMES = qw(
Compress::Raw::Bzip2
Compress::Raw::Zlib
@@ -60,8 +60,7 @@ BEGIN
);
- my @OPT = qw(
-
+ my @OPT = qw(
);
plan tests => 1 + 2 + @NAMES + @OPT + $extra ;
diff --git a/gnu/usr.bin/perl/cpan/IPC-Cmd/lib/IPC/Cmd.pm b/gnu/usr.bin/perl/cpan/IPC-Cmd/lib/IPC/Cmd.pm
index 42cdd5990cb..88ed2955a9d 100644
--- a/gnu/usr.bin/perl/cpan/IPC-Cmd/lib/IPC/Cmd.pm
+++ b/gnu/usr.bin/perl/cpan/IPC-Cmd/lib/IPC/Cmd.pm
@@ -19,7 +19,7 @@ BEGIN {
$HAVE_MONOTONIC
];
- $VERSION = '1.02';
+ $VERSION = '1.04';
$VERBOSE = 0;
$DEBUG = 0;
$WARN = 1;
@@ -1204,7 +1204,7 @@ sub run_forked {
# which do setsid theirselves -- can't do anything
# with those)
- POSIX::setsid() || Carp::confess("Error running setsid: " . $!);
+ POSIX::setsid() == -1 and Carp::confess("Error running setsid: " . $!);
if ($opts->{'child_BEGIN'} && ref($opts->{'child_BEGIN'}) eq 'CODE') {
$opts->{'child_BEGIN'}->();
diff --git a/gnu/usr.bin/perl/cpan/JSON-PP/bin/json_pp b/gnu/usr.bin/perl/cpan/JSON-PP/bin/json_pp
index 5f956b1fc31..72b9db70f1f 100644
--- a/gnu/usr.bin/perl/cpan/JSON-PP/bin/json_pp
+++ b/gnu/usr.bin/perl/cpan/JSON-PP/bin/json_pp
@@ -3,6 +3,7 @@
BEGIN { pop @INC if $INC[-1] eq '.' }
use strict;
use Getopt::Long;
+use Encode ();
use JSON::PP ();
@@ -42,10 +43,17 @@ for my $opt (split /,/, $json_opt) {
my %F = (
'json' => sub {
my $json = JSON::PP->new;
+ my $enc =
+ /^\x00\x00\x00/s ? "utf-32be"
+ : /^\x00.\x00/s ? "utf-16be"
+ : /^.\x00\x00\x00/s ? "utf-32le"
+ : /^.\x00.\x00/s ? "utf-16le"
+ : "utf-8";
for my $key (keys %json_opt) {
+ next if $key eq 'utf8';
$json->$key($json_opt{$key});
}
- $json->decode( $_ );
+ $json->decode( Encode::decode($enc, $_) );
},
'eval' => sub {
my $v = eval "no strict;\n#line 1 \"input\"\n$_";
@@ -84,8 +92,11 @@ $F{$opt_from}
$T{$opt_to}
or die "$opt_from: not a valid toformat\n";
-local $/;
-$_ = <STDIN>;
+{
+ local $/;
+ binmode STDIN;
+ $_ = <STDIN>;
+}
$_ = $F{$opt_from}->();
$_ = $T{$opt_to}->();
@@ -163,7 +174,7 @@ options to JSON::PP
Acceptable options are:
ascii latin1 utf8 pretty indent space_before space_after relaxed canonical allow_nonref
- allow_singlequote allow_barekey allow_bignum loose escape_slash
+ allow_singlequote allow_barekey allow_bignum loose escape_slash indent_length
Multiple options must be separated by commas:
diff --git a/gnu/usr.bin/perl/cpan/JSON-PP/lib/JSON/PP.pm b/gnu/usr.bin/perl/cpan/JSON-PP/lib/JSON/PP.pm
index d8b7ab30656..9f083542851 100644
--- a/gnu/usr.bin/perl/cpan/JSON-PP/lib/JSON/PP.pm
+++ b/gnu/usr.bin/perl/cpan/JSON-PP/lib/JSON/PP.pm
@@ -14,7 +14,7 @@ use JSON::PP::Boolean;
use Carp ();
#use Devel::Peek;
-$JSON::PP::VERSION = '4.02';
+$JSON::PP::VERSION = '4.04';
@JSON::PP::EXPORT = qw(encode_json decode_json from_json to_json);
@@ -1773,7 +1773,7 @@ JSON::PP - JSON::XS compatible pure-Perl module.
=head1 VERSION
- 4.02
+ 4.04
=head1 DESCRIPTION
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/lib/Math/BigInt/FastCalc.pm b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/lib/Math/BigInt/FastCalc.pm
index 3e772e92a3e..4e903bd4f10 100644
--- a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/lib/Math/BigInt/FastCalc.pm
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/lib/Math/BigInt/FastCalc.pm
@@ -8,7 +8,7 @@ use Math::BigInt::Calc 1.999801;
our @ISA = qw< Math::BigInt::Calc >;
-our $VERSION = '0.5008';
+our $VERSION = '0.5009';
##############################################################################
# global constants, flags and accessory
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigFloat.pm b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigFloat.pm
index 8a92b5818da..f1d7a1a0a0a 100644
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigFloat.pm
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigFloat.pm
@@ -19,8 +19,9 @@ use warnings;
use Carp qw< carp croak >;
use Math::BigInt ();
-our $VERSION = '1.999816';
+our $VERSION = '1.999818';
+require Exporter;
our @ISA = qw/Math::BigInt/;
our @EXPORT_OK = qw/bpi/;
@@ -28,8 +29,6 @@ our @EXPORT_OK = qw/bpi/;
our ($AUTOLOAD, $accuracy, $precision, $div_scale, $round_mode, $rnd_mode,
$upgrade, $downgrade, $_trap_nan, $_trap_inf);
-my $class = "Math::BigFloat";
-
use overload
# overload key: with_assign
@@ -273,7 +272,7 @@ sub AUTOLOAD {
my $name = $AUTOLOAD;
$name =~ s/(.*):://; # split package
- my $c = $1 || $class;
+ my $c = $1 || __PACKAGE__;
no strict 'refs';
$c->import() if $IMPORT == 0;
if (!_method_alias($name)) {
@@ -418,7 +417,8 @@ sub new {
return $self;
}
- # Handle hexadecimal numbers.
+ # Handle hexadecimal numbers. We auto-detect hexadecimal numbers if they
+ # have a "0x" or "0X" prefix.
if ($wanted =~ /^\s*[+-]?0[Xx]/) {
$self = $class -> from_hex($wanted);
@@ -426,7 +426,42 @@ sub new {
return $self;
}
- # Handle binary numbers.
+ # Handle octal numbers. We auto-detect octal numbers if they have a "0"
+ # prefix and a binary exponent.
+
+ if ($wanted =~ /
+ ^
+ \s*
+
+ # sign
+ [+-]?
+
+ # prefix
+ 0
+
+ # significand using the octal digits 0..7
+ [0-7]+ (?: _ [0-7]+ )*
+ (?:
+ \.
+ (?: [0-7]+ (?: _ [0-7]+ )* )?
+ )?
+
+ # exponent (power of 2) using decimal digits
+ [Pp]
+ [+-]?
+ \d+ (?: _ \d+ )*
+
+ \s*
+ $
+ /x)
+ {
+ $self = $class -> from_oct($wanted);
+ $self->round(@r) unless @r >= 2 && !defined $r[0] && !defined $r[1];
+ return $self;
+ }
+
+ # Handle binary numbers. We auto-detect binary numbers if they have a "0b"
+ # or "0B" prefix.
if ($wanted =~ /^\s*[+-]?0[Bb]/) {
$self = $class -> from_bin($wanted);
@@ -781,6 +816,165 @@ sub from_bin {
return $self->bnan();
}
+sub from_ieee754 {
+ my $self = shift;
+ my $selfref = ref $self;
+ my $class = $selfref || $self;
+
+ # Don't modify constant (read-only) objects.
+
+ return if $selfref && $self->modify('from_ieee754');
+
+ my $in = shift; # input string (or raw bytes)
+ my $format = shift; # format ("binary32", "decimal64" etc.)
+ my $enc; # significand encoding (applies only to decimal)
+ my $k; # storage width in bits
+ my $b; # base
+
+ if ($format =~ /^binary(\d+)\z/) {
+ $k = $1;
+ $b = 2;
+ } elsif ($format =~ /^decimal(\d+)(dpd|bcd)?\z/) {
+ $k = $1;
+ $b = 10;
+ $enc = $2 || 'dpd'; # default is dencely-packed decimals (DPD)
+ } elsif ($format eq 'half') {
+ $k = 16;
+ $b = 2;
+ } elsif ($format eq 'single') {
+ $k = 32;
+ $b = 2;
+ } elsif ($format eq 'double') {
+ $k = 64;
+ $b = 2;
+ } elsif ($format eq 'quadruple') {
+ $k = 128;
+ $b = 2;
+ } elsif ($format eq 'octuple') {
+ $k = 256;
+ $b = 2;
+ } elsif ($format eq 'sexdecuple') {
+ $k = 512;
+ $b = 2;
+ }
+
+ if ($b == 2) {
+
+ # Get the parameters for this format.
+
+ my $p; # precision (in bits)
+ my $t; # number of bits in significand
+ my $w; # number of bits in exponent
+
+ if ($k == 16) { # binary16 (half-precision)
+ $p = 11;
+ $t = 10;
+ $w = 5;
+ } elsif ($k == 32) { # binary32 (single-precision)
+ $p = 24;
+ $t = 23;
+ $w = 8;
+ } elsif ($k == 64) { # binary64 (double-precision)
+ $p = 53;
+ $t = 52;
+ $w = 11;
+ } else { # binaryN (quadruple-precision and above)
+ if ($k < 128 || $k != 32 * sprintf('%.0f', $k / 32)) {
+ croak "Number of bits must be 16, 32, 64, or >= 128 and",
+ " a multiple of 32";
+ }
+ $p = $k - sprintf('%.0f', 4 * log($k) / log(2)) + 13;
+ $t = $p - 1;
+ $w = $k - $t - 1;
+ }
+
+ # The maximum exponent, minimum exponent, and exponent bias.
+
+ my $emax = Math::BigInt -> new(2) -> bpow($w - 1) -> bdec();
+ my $emin = 1 - $emax;
+ my $bias = $emax;
+
+ # Undefined input.
+
+ unless (defined $in) {
+ carp("Input is undefined");
+ return $self -> bzero();
+ }
+
+ # Make sure input string is a string of zeros and ones.
+
+ my $len = CORE::length $in;
+ if (8 * $len == $k) { # bytes
+ $in = unpack "B*", $in;
+ } elsif (4 * $len == $k) { # hexadecimal
+ if ($in =~ /([^\da-f])/i) {
+ croak "Illegal hexadecimal digit '$1'";
+ }
+ $in = unpack "B*", pack "H*", $in;
+ } elsif ($len == $k) { # bits
+ if ($in =~ /([^01])/) {
+ croak "Illegal binary digit '$1'";
+ }
+ } else {
+ croak "Unknown input -- $in";
+ }
+
+ # Split bit string into sign, exponent, and mantissa/significand.
+
+ my $sign = substr($in, 0, 1) eq '1' ? '-' : '+';
+ my $expo = $class -> from_bin(substr($in, 1, $w));
+ my $mant = $class -> from_bin(substr($in, $w + 1));
+
+ my $x;
+
+ $expo -> bsub($bias); # subtract bias
+
+ if ($expo < $emin) { # zero and subnormals
+ if ($mant == 0) { # zero
+ $x = $class -> bzero();
+ } else { # subnormals
+ # compute (1/$b)**(N) rather than ($b)**(-N)
+ $x = $class -> new("0.5"); # 1/$b
+ $x -> bpow($bias + $t - 1) -> bmul($mant);
+ $x -> bneg() if $sign eq '-';
+ }
+ }
+
+ elsif ($expo > $emax) { # inf and nan
+ if ($mant == 0) { # inf
+ $x = $class -> binf($sign);
+ } else { # nan
+ $x = $class -> bnan();
+ }
+ }
+
+ else { # normals
+ $mant = $class -> new(2) -> bpow($t) -> badd($mant);
+ if ($expo < $t) {
+ # compute (1/$b)**(N) rather than ($b)**(-N)
+ $x = $class -> new("0.5"); # 1/$b
+ $x -> bpow($t - $expo) -> bmul($mant);
+ } else {
+ $x = $class -> new(2);
+ $x -> bpow($expo - $t) -> bmul($mant);
+ }
+ $x -> bneg() if $sign eq '-';
+ }
+
+ if ($selfref) {
+ $self -> {sign} = $x -> {sign};
+ $self -> {_m} = $x -> {_m};
+ $self -> {_es} = $x -> {_es};
+ $self -> {_e} = $x -> {_e};
+ } else {
+ $self = $x;
+ }
+ return $self;
+ }
+
+ croak("The format '$format' is not yet supported.");
+}
+
sub bzero {
# create/assign '+0'
@@ -3023,7 +3217,7 @@ sub bsqrt {
return $x if $x->modify('bsqrt');
- return $x->bnan() if $x->{sign} !~ /^[+]/; # NaN, -inf or < 0
+ return $x->bnan() if $x->{sign} !~ /^\+/; # NaN, -inf or < 0
return $x if $x->{sign} eq '+inf'; # sqrt(inf) == inf
return $x->round($a, $p, $r) if $x->is_zero() || $x->is_one();
@@ -3783,7 +3977,7 @@ sub mantissa {
if ($x->{sign} !~ /^[+-]$/) {
my $s = $x->{sign};
- $s =~ s/^[+]//;
+ $s =~ s/^\+//;
return Math::BigInt->new($s, undef, undef); # -inf, +inf => +inf
}
my $m = Math::BigInt->new($LIB->_str($x->{_m}), undef, undef);
@@ -3798,7 +3992,7 @@ sub exponent {
if ($x->{sign} !~ /^[+-]$/) {
my $s = $x->{sign};
-$s =~ s/^[+-]//;
+ $s =~ s/^[+-]//;
return Math::BigInt->new($s, undef, undef); # -inf, +inf => +inf
}
Math::BigInt->new($x->{_es} . $LIB->_str($x->{_e}), undef, undef);
@@ -3810,9 +4004,9 @@ sub parts {
if ($x->{sign} !~ /^[+-]$/) {
my $s = $x->{sign};
-$s =~ s/^[+]//;
-my $se = $s;
-$se =~ s/^[-]//;
+ $s =~ s/^\+//;
+ my $se = $s;
+ $se =~ s/^-//;
return ($class->new($s), $class->new($se)); # +inf => inf and -inf, +inf => inf
}
my $m = Math::BigInt->bzero();
@@ -3981,9 +4175,9 @@ sub bstr {
}
my $es = '0';
-my $len = 1;
-my $cad = 0;
-my $dot = '.';
+ my $len = 1;
+ my $cad = 0;
+ my $dot = '.';
# $x is zero?
my $not_zero = !($x->{sign} eq '+' && $LIB->_is_zero($x->{_m}));
@@ -4007,8 +4201,8 @@ my $dot = '.';
} elsif ($e > 0) {
# expand with zeros
$es .= '0' x $e;
-$len += $e;
-$cad = 0;
+ $len += $e;
+ $cad = 0;
}
} # if not zero
@@ -4160,6 +4354,197 @@ sub to_bin {
return $x->{sign} eq '-' ? "-$str" : $str;
}
+sub to_ieee754 {
+ my $x = shift;
+ my $format = shift;
+ my $class = ref $x;
+
+ my $enc; # significand encoding (applies only to decimal)
+ my $k; # storage width in bits
+ my $b; # base
+
+ if ($format =~ /^binary(\d+)\z/) {
+ $k = $1;
+ $b = 2;
+ } elsif ($format =~ /^decimal(\d+)(dpd|bcd)?\z/) {
+ $k = $1;
+ $b = 10;
+ $enc = $2 || 'dpd'; # default is dencely-packed decimals (DPD)
+ } elsif ($format eq 'half') {
+ $k = 16;
+ $b = 2;
+ } elsif ($format eq 'single') {
+ $k = 32;
+ $b = 2;
+ } elsif ($format eq 'double') {
+ $k = 64;
+ $b = 2;
+ } elsif ($format eq 'quadruple') {
+ $k = 128;
+ $b = 2;
+ } elsif ($format eq 'octuple') {
+ $k = 256;
+ $b = 2;
+ } elsif ($format eq 'sexdecuple') {
+ $k = 512;
+ $b = 2;
+ }
+
+ if ($b == 2) {
+
+ # Get the parameters for this format.
+
+ my $p; # precision (in bits)
+ my $t; # number of bits in significand
+ my $w; # number of bits in exponent
+
+ if ($k == 16) { # binary16 (half-precision)
+ $p = 11;
+ $t = 10;
+ $w = 5;
+ } elsif ($k == 32) { # binary32 (single-precision)
+ $p = 24;
+ $t = 23;
+ $w = 8;
+ } elsif ($k == 64) { # binary64 (double-precision)
+ $p = 53;
+ $t = 52;
+ $w = 11;
+ } else { # binaryN (quadruple-precition and above)
+ if ($k < 128 || $k != 32 * sprintf('%.0f', $k / 32)) {
+ croak "Number of bits must be 16, 32, 64, or >= 128 and",
+ " a multiple of 32";
+ }
+ $p = $k - sprintf('%.0f', 4 * log($k) / log(2)) + 13;
+ $t = $p - 1;
+ $w = $k - $t - 1;
+ }
+
+ # The maximum exponent, minimum exponent, and exponent bias.
+
+ my $emax = $class -> new(2) -> bpow($w - 1) -> bdec();
+ my $emin = 1 - $emax;
+ my $bias = $emax;
+
+ # Get numerical sign, exponent, and mantissa/significand for bit
+ # string.
+
+ my $sign = 0;
+ my $expo;
+ my $mant;
+
+ if ($x -> is_nan()) { # nan
+ $sign = 1;
+ $expo = $emax -> copy() -> binc();
+ $mant = $class -> new(2) -> bpow($t - 1);
+ } elsif ($x -> is_inf()) { # inf
+ $sign = 1 if $x -> is_neg();
+ $expo = $emax -> copy() -> binc();
+ $mant = $class -> bzero();
+ } elsif ($x -> is_zero()) { # zero
+ $expo = $emin -> copy() -> bdec();
+ $mant = $class -> bzero();
+ } else { # normal and subnormal
+
+ $sign = 1 if $x -> is_neg();
+
+ # Now we need to compute the mantissa and exponent in base $b.
+
+ my $binv = $class -> new("0.5");
+ my $b = $class -> new(2);
+ my $one = $class -> bone();
+
+ # We start off by initializing the exponent to zero and the
+ # mantissa to the input value. Then we increase the mantissa and
+ # decrease the exponent, or vice versa, until the mantissa is in
+ # the desired range or we hit one of the limits for the exponent.
+
+ $mant = $x -> copy() -> babs();
+
+ # We need to find the base 2 exponent. First make an estimate of
+ # the base 2 exponent, before adjusting it below. We could skip
+ # this estimation and go straight to the while-loops below, but the
+ # loops are slow, especially when the final exponent is far from
+ # zero and even more so if the number of digits is large. This
+ # initial estimation speeds up the computation dramatically.
+ #
+ # log2($m * 10**$e) = log10($m + 10**$e) * log(10)/log(2)
+ # = (log10($m) + $e) * log(10)/log(2)
+ # = (log($m)/log(10) + $e) * log(10)/log(2)
+
+ my ($m, $e) = $x -> nparts();
+ my $ms = $m -> numify();
+ my $es = $e -> numify();
+
+ my $expo_est = (log(abs($ms))/log(10) + $es) * log(10)/log(2);
+ $expo_est = int($expo_est);
+
+ # Limit the exponent.
+
+ if ($expo_est > $emax) {
+ $expo_est = $emax;
+ } elsif ($expo_est < $emin) {
+ $expo_est = $emin;
+ }
+
+ # Don't multiply by a number raised to a negative exponent. This
+ # will cause a division, whose result is truncated to some fixed
+ # number of digits. Instead, multiply by the inverse number raised
+ # to a positive exponent.
+
+ $expo = $class -> new($expo_est);
+ if ($expo_est > 0) {
+ $mant -> bmul($binv -> copy() -> bpow($expo));
+ } elsif ($expo_est < 0) {
+ my $expo_abs = $expo -> copy() -> bneg();
+ $mant -> bmul($b -> copy() -> bpow($expo_abs));
+ }
+
+ # Final adjustment.
+
+ while ($mant >= $b && $expo <= $emax) {
+ $mant -> bmul($binv);
+ $expo -> binc();
+ }
+
+ while ($mant < $one && $expo >= $emin) {
+ $mant -> bmul($b);
+ $expo -> bdec();
+ }
+
+ # Encode as infinity, normal number or subnormal number?
+
+ if ($expo > $emax) { # overflow => infinity
+ $expo = $emax -> copy() -> binc();
+ $mant = $class -> bzero();
+ } elsif ($expo < $emin) { # subnormal number
+ my $const = $class -> new(2) -> bpow($t - 1);
+ $mant -> bmul($const);
+ $mant -> bfround(0);
+ } else { # normal number
+ $mant -> bdec(); # remove implicit leading bit
+ my $const = $class -> new(2) -> bpow($t);
+ $mant -> bmul($const) -> bfround(0);
+ }
+ }
+
+ $expo -> badd($bias); # add bias
+
+ my $signbit = "$sign";
+
+ my $mantbits = $mant -> to_bin();
+ $mantbits = ("0" x ($t - CORE::length($mantbits))) . $mantbits;
+
+ my $expobits = $expo -> to_bin();
+ $expobits = ("0" x ($w - CORE::length($expobits))) . $expobits;
+
+ my $bin = $signbit . $expobits . $mantbits;
+ return pack "B*", $bin;
+ }
+
+ croak("The format '$format' is not yet supported.");
+}
+
sub as_hex {
# return number as hexadecimal string (only for integers defined)
@@ -4231,7 +4616,7 @@ sub numify {
}
# Create a string and let Perl's atoi()/atof() handle the rest.
- return 0 + $x -> bsstr();
+ return 0 + $x -> bnstr();
}
###############################################################################
@@ -4242,7 +4627,7 @@ sub import {
my $class = shift;
my $l = scalar @_;
my $lib = '';
-my @a;
+ my @a;
my $lib_kind = 'try';
$IMPORT=1;
for (my $i = 0; $i < $l ; $i++) {
@@ -4314,7 +4699,7 @@ sub _len_to_steps {
# D = 50 => N => 42, so L = 40 and R = 50
my $l = 40;
-my $r = $d;
+ my $r = $d;
# Otherwise this does not work under -Mbignum and we do not yet have "no bignum;" :(
$l = $l->numify if ref($l);
@@ -4370,7 +4755,6 @@ sub _log {
$over->bmul($u);
$factor = $class->new(3); $f = $class->new(2);
- my $steps = 0;
$limit = $class->new("1E-". ($scale-1));
while (3 < 5) {
@@ -4717,7 +5101,6 @@ sub _pow {
$over = $u->copy();
$limit = $class->new("1E-". ($scale-1));
- #my $steps = 0;
while (3 < 5) {
# we calculate the next term, and add it to the last
# when the next term is below our limit, it won't affect the outcome
@@ -4731,8 +5114,6 @@ sub _pow {
$factor->binc();
last if $x->{sign} !~ /^[-+]$/;
-
- #$steps++;
}
if ($do_invert) {
@@ -4795,6 +5176,7 @@ Math::BigFloat - Arbitrary size floating point math package
$x = Math::BigFloat->from_oct('0377'); # ditto
$x = Math::BigFloat->from_bin('0b1.1001p-4'); # from binary
$x = Math::BigFloat->from_bin('0101'); # ditto
+ $x = Math::BigFloat->from_ieee754($b, "binary64"); # from IEEE-754 bytes
$x = Math::BigFloat->bzero(); # create a +0
$x = Math::BigFloat->bone(); # create a +1
$x = Math::BigFloat->bone('-'); # create a -1
@@ -4926,6 +5308,7 @@ Math::BigFloat - Arbitrary size floating point math package
$x->as_hex(); # as signed hexadecimal string with prefixed 0x
$x->as_bin(); # as signed binary string with prefixed 0b
$x->as_oct(); # as signed octal string with prefixed 0
+ $x->to_ieee754($format); # to bytes encoded according to IEEE 754-2008
# Other conversion methods
@@ -5106,6 +5489,17 @@ using decimal digits.
If called as an instance method, the value is assigned to the invocand.
+=item from_ieee754()
+
+Interpret the input as a value encoded as described in IEEE754-2008. The input
+can be given as a byte string, hex string or binary string. The input is
+assumed to be in big-endian byte-order.
+
+ # both $dbl and $mbf are 3.141592...
+ $bytes = "\x40\x09\x21\xfb\x54\x44\x2d\x18";
+ $dbl = unpack "d>", $bytes;
+ $mbf = Math::BigFloat -> from_ieee754($bytes, "binary64");
+
=item bpi()
print Math::BigFloat->bpi(100), "\n";
@@ -5225,6 +5619,29 @@ C<ref($x)-E<gt>new()> can parse to create an object.
In Math::BigFloat, C<as_float()> has the same effect as C<copy()>.
+=item to_ieee754()
+
+Encodes the invocand as a byte string in the given format as specified in IEEE
+754-2008. Note that the encoded value is the nearest possible representation of
+the value. This value might not be exactly the same as the value in the
+invocand.
+
+ # $x = 3.1415926535897932385
+ $x = Math::BigFloat -> bpi(30);
+
+ $b = $x -> to_ieee754("binary64"); # encode as 8 bytes
+ $h = unpack "H*", $b; # "400921fb54442d18"
+
+ # 3.141592653589793115997963...
+ $y = Math::BigFloat -> from_ieee754($h, "binary64");
+
+All binary formats in IEEE 754-2008 are accepted. For convenience, som aliases
+are recognized: "half" for "binary16", "single" for "binary32", "double" for
+"binary64", "quadruple" for "binary128", "octuple" for "binary256", and
+"sexdecuple" for "binary512".
+
+See also L<https://en.wikipedia.org/wiki/IEEE_754>.
+
=back
=head2 ACCURACY AND PRECISION
@@ -5552,11 +5969,11 @@ L<http://annocpan.org/dist/Math-BigInt>
=item * CPAN Ratings
-L<http://cpanratings.perl.org/dist/Math-BigInt>
+L<https://cpanratings.perl.org/dist/Math-BigInt>
-=item * Search CPAN
+=item * MetaCPAN
-L<http://search.cpan.org/dist/Math-BigInt/>
+L<https://metacpan.org/release/Math-BigInt>
=item * CPAN Testers Matrix
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt.pm b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt.pm
index a443cd4a5d4..185f8028350 100644
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt.pm
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt.pm
@@ -1,3 +1,5 @@
+# -*- coding: utf-8-unix -*-
+
package Math::BigInt;
#
@@ -20,14 +22,12 @@ use warnings;
use Carp qw< carp croak >;
-our $VERSION = '1.999816';
+our $VERSION = '1.999818';
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(objectify bgcd blcm);
-my $class = "Math::BigInt";
-
# Inside overload, the first arg is always an object. If the original code had
# it reversed (like $x = 2 * $y), then the third parameter is true.
# In some cases (like add, $x = $x + 2 is the same as $x = 2 + $x) this makes
@@ -232,9 +232,7 @@ my $LIB = 'Math::BigInt::Calc'; # module to do the low level math
# default is Calc.pm
my $IMPORT = 0; # was import() called yet?
# used to make require work
-my %WARN; # warn only once for low-level libs
my %CALLBACKS; # callbacks to notify on lib loads
-my $EMU_LIB = 'Math/BigInt/CalcEmu.pm'; # emulate low-level math
##############################################################################
# the old code had $rnd_mode, so we need to support it, too
@@ -1135,7 +1133,7 @@ sub bpi {
if (@_ == 1) {
# called like Math::BigInt::bpi(10);
$n = $self;
- $self = $class;
+ $self = __PACKAGE__;
}
$self = ref($self) if ref($self);
@@ -1234,6 +1232,24 @@ sub is_negative {
$x->{sign} =~ /^-/ ? 1 : 0; # -inf is negative, but NaN is not
}
+sub is_non_negative {
+ # Return true if argument is non-negative (>= 0).
+ my ($class, $x) = ref($_[0]) ? (undef,$_[0]) : objectify(1,@_);
+
+ return 1 if $x->{sign} =~ /^\+/;
+ return 1 if $x -> is_zero();
+ return 0;
+}
+
+sub is_non_positive {
+ # Return true if argument is non-positive (<= 0).
+ my ($class, $x) = ref($_[0]) ? (undef,$_[0]) : objectify(1,@_);
+
+ return 1 if $x->{sign} =~ /^\-/;
+ return 1 if $x -> is_zero();
+ return 0;
+}
+
sub is_odd {
# return true when arg (BINT or num_str) is odd, false for even
my ($class, $x) = ref($_[0]) ? (undef, $_[0]) : objectify(1, @_);
@@ -2354,7 +2370,7 @@ sub bmodpow {
$num->{value} = $value;
$num->{sign} = $sign;
- return $num;
+ return $num -> round(@r);
}
sub bpow {
@@ -2401,21 +2417,14 @@ sub bpow {
$r[3] = $y; # no push!
- # cases 0 ** Y, X ** 0, X ** 1, 1 ** Y are handled by Calc or Emu
-
- my $new_sign = '+';
- $new_sign = $y->is_odd() ? '-' : '+' if ($x->{sign} ne '+');
+ # 0 ** -y => ( 1 / (0 ** y)) => 1 / 0 => +inf
+ return $x->binf() if $y->is_negative() && $x->is_zero();
- # 0 ** -7 => ( 1 / (0 ** 7)) => 1 / 0 => +inf
- return $x->binf()
- if $y->{sign} eq '-' && $x->{sign} eq '+' && $LIB->_is_zero($x->{value});
# 1 ** -y => 1 / (1 ** |y|)
- # so do test for negative $y after above's clause
- return $x->bnan() if $y->{sign} eq '-' && !$LIB->_is_one($x->{value});
+ return $x->bzero() if $y->is_negative() && !$LIB->_is_one($x->{value});
$x->{value} = $LIB->_pow($x->{value}, $y->{value});
- $x->{sign} = $new_sign;
- $x->{sign} = '+' if $LIB->_is_zero($y->{value});
+ $x->{sign} = $x->is_negative() && $y->is_odd() ? '-' : '+';
$x->round(@r);
}
@@ -2483,7 +2492,7 @@ sub blog {
return $x;
}
- my ($rc, $exact) = $LIB->_log_int($x->{value}, $base->{value});
+ my ($rc) = $LIB->_log_int($x->{value}, $base->{value});
return $x->bnan() unless defined $rc; # not possible to take log?
$x->{value} = $rc;
$x->round(@r);
@@ -2602,6 +2611,126 @@ sub bnok {
$n->round(@r);
}
+sub buparrow {
+ my $a = shift;
+ my $y = $a -> uparrow(@_);
+ $a -> {value} = $y -> {value};
+ return $a;
+}
+
+sub uparrow {
+ # Knuth's up-arrow notation buparrow(a, n, b)
+ #
+ # The following is a simple, recursive implementation of the up-arrow
+ # notation, just to show the idea. Such implementations cause "Deep
+ # recursion on subroutine ..." warnings, so we use a faster, non-recursive
+ # algorithm below with @_ as a stack.
+ #
+ # sub buparrow {
+ # my ($a, $n, $b) = @_;
+ # return $a ** $b if $n == 1;
+ # return $a * $b if $n == 0;
+ # return 1 if $b == 0;
+ # return buparrow($a, $n - 1, buparrow($a, $n, $b - 1));
+ # }
+
+ my ($a, $b, $n) = @_;
+ my $class = ref $a;
+ croak("a must be non-negative") if $a < 0;
+ croak("n must be non-negative") if $n < 0;
+ croak("b must be non-negative") if $b < 0;
+
+ while (@_ >= 3) {
+
+ # return $a ** $b if $n == 1;
+
+ if ($_[-2] == 1) {
+ my ($a, $n, $b) = splice @_, -3;
+ push @_, $a ** $b;
+ next;
+ }
+
+ # return $a * $b if $n == 0;
+
+ if ($_[-2] == 0) {
+ my ($a, $n, $b) = splice @_, -3;
+ push @_, $a * $b;
+ next;
+ }
+
+ # return 1 if $b == 0;
+
+ if ($_[-1] == 0) {
+ splice @_, -3;
+ push @_, $class -> bone();
+ next;
+ }
+
+ # return buparrow($a, $n - 1, buparrow($a, $n, $b - 1));
+
+ my ($a, $n, $b) = splice @_, -3;
+ push @_, ($a, $n - 1,
+ $a, $n, $b - 1);
+
+ }
+
+ pop @_;
+}
+
+sub backermann {
+ my $m = shift;
+ my $y = $m -> ackermann(@_);
+ $m -> {value} = $y -> {value};
+ return $m;
+}
+
+sub ackermann {
+ # Ackermann's function ackermann(m, n)
+ #
+ # The following is a simple, recursive implementation of the ackermann
+ # function, just to show the idea. Such implementations cause "Deep
+ # recursion on subroutine ..." warnings, so we use a faster, non-recursive
+ # algorithm below with @_ as a stack.
+ #
+ # sub ackermann {
+ # my ($m, $n) = @_;
+ # return $n + 1 if $m == 0;
+ # return ackermann($m - 1, 1) if $m > 0 && $n == 0;
+ # return ackermann($m - 1, ackermann($m, $n - 1) if $m > 0 && $n > 0;
+ # }
+
+ my ($m, $n) = @_;
+ my $class = ref $m;
+ croak("m must be non-negative") if $m < 0;
+ croak("n must be non-negative") if $n < 0;
+
+ my $two = $class -> new("2");
+ my $three = $class -> new("3");
+ my $thirteen = $class -> new("13");
+
+ $n = pop;
+ $n = $class -> new($n) unless ref($n);
+ while (@_) {
+ my $m = pop;
+ if ($m > $three) {
+ push @_, (--$m) x $n;
+ while (--$m >= $three) {
+ push @_, $m;
+ }
+ $n = $thirteen;
+ } elsif ($m == $three) {
+ $n = $class -> bone() -> blsft($n + $three) -> bsub($three);
+ } elsif ($m == $two) {
+ $n -> bmul($two) -> badd($three);
+ } elsif ($m >= 0) {
+ $n -> badd($m) -> binc();
+ } else {
+ die "negative m!";
+ }
+ }
+ $n;
+}
+
sub bsin {
# Calculate sinus(x) to N digits. Unless upgrading is in effect, returns the
# result truncated to an integer.
@@ -2654,9 +2783,9 @@ sub batan {
return $upgrade->new($x)->batan(@r) if defined $upgrade;
# calculate the result and truncate it to integer
- my $t = Math::BigFloat->new($x)->batan(@r);
+ my $tmp = Math::BigFloat->new($x)->batan(@r);
- $x->{value} = $LIB->_new($x->as_int()->bstr());
+ $x->{value} = $LIB->_new($tmp->as_int()->bstr());
$x->round(@r);
}
@@ -2902,12 +3031,19 @@ sub blsft {
# (BINT or num_str, BINT or num_str) return BINT
# compute x << y, base n, y >= 0
- # set up parameters
- my ($class, $x, $y, $b, @r) = (ref($_[0]), @_);
+ my ($class, $x, $y, $b, @r);
- # objectify is costly, so avoid it
- if ((!ref($_[0])) || (ref($_[0]) ne ref($_[1]))) {
- ($class, $x, $y, $b, @r) = objectify(2, @_);
+ # Objectify the base only when it is defined, since an undefined base, as
+ # in $x->blsft(3) or $x->blog(3, undef) means use the default base 2.
+
+ if (!ref($_[0]) && $_[0] =~ /^[A-Za-z]|::/) {
+ # E.g., Math::BigInt->blog(256, 5, 2)
+ ($class, $x, $y, $b, @r) =
+ defined $_[3] ? objectify(3, @_) : objectify(2, @_);
+ } else {
+ # E.g., Math::BigInt::blog(256, 5, 2) or $x->blog(5, 2)
+ ($class, $x, $y, $b, @r) =
+ defined $_[2] ? objectify(3, @_) : objectify(2, @_);
}
return $x if $x -> modify('blsft');
@@ -2915,7 +3051,15 @@ sub blsft {
$y -> {sign} !~ /^[+-]$/);
return $x -> round(@r) if $y -> is_zero();
- $b = 2 if !defined $b;
+ $b = defined($b) ? $b -> numify() : 2;
+
+ # While some of the libraries support an arbitrarily large base, not all of
+ # them do, so rather than returning an incorrect result in those cases,
+ # disallow bases that don't work with all libraries.
+
+ my $uintmax = ~0;
+ croak("Base is too large.") if $b > $uintmax;
+
return $x -> bnan() if $b <= 0 || $y -> {sign} eq '-';
$x -> {value} = $LIB -> _lsft($x -> {value}, $y -> {value}, $b);
@@ -3146,7 +3290,7 @@ sub bround {
# do not return $x->bnorm(), but $x
my $x = shift;
- $x = $class->new($x) unless ref $x;
+ $x = __PACKAGE__->new($x) unless ref $x;
my ($scale, $mode) = $x->_scale_a(@_);
return $x if !defined $scale || $x->modify('bround'); # no-op
@@ -3264,7 +3408,7 @@ sub fround {
# Exists to make life easier for switch between MBF and MBI (should we
# autoload fxxx() like MBF does for bxxx()?)
my $x = shift;
- $x = $class->new($x) unless ref $x;
+ $x = __PACKAGE__->new($x) unless ref $x;
$x->bround(@_);
}
@@ -3356,6 +3500,31 @@ sub digit {
$LIB->_digit($x->{value}, $n || 0);
}
+sub bdigitsum {
+ # like digitsum(), but assigns the result to the invocand
+ my $x = shift;
+
+ return $x if $x -> is_nan();
+ return $x -> bnan() if $x -> is_inf();
+
+ $x -> {value} = $LIB -> _digitsum($x -> {value});
+ $x -> {sign} = '+';
+ return $x;
+}
+
+sub digitsum {
+ # compute sum of decimal digits and return it
+ my $x = shift;
+ my $class = ref $x;
+
+ return $class -> bnan() if $x -> is_nan();
+ return $class -> bnan() if $x -> is_inf();
+
+ my $y = $class -> bzero();
+ $y -> {value} = $LIB -> _digitsum($x -> {value});
+ return $y;
+}
+
sub length {
my ($class, $x) = ref($_[0]) ? (undef, $_[0]) : objectify(1, @_);
@@ -3652,7 +3821,7 @@ sub bdstr {
sub to_hex {
# return as hex string, with prefixed 0x
my $x = shift;
- $x = $class->new($x) if !ref($x);
+ $x = __PACKAGE__->new($x) if !ref($x);
return $x->bstr() if $x->{sign} !~ /^[+-]$/; # inf, nan etc
@@ -3663,7 +3832,7 @@ sub to_hex {
sub to_oct {
# return as octal string, with prefixed 0
my $x = shift;
- $x = $class->new($x) if !ref($x);
+ $x = __PACKAGE__->new($x) if !ref($x);
return $x->bstr() if $x->{sign} !~ /^[+-]$/; # inf, nan etc
@@ -3674,7 +3843,7 @@ sub to_oct {
sub to_bin {
# return as binary string, with prefixed 0b
my $x = shift;
- $x = $class->new($x) if !ref($x);
+ $x = __PACKAGE__->new($x) if !ref($x);
return $x->bstr() if $x->{sign} !~ /^[+-]$/; # inf, nan etc
@@ -3685,7 +3854,7 @@ sub to_bin {
sub to_bytes {
# return a byte string
my $x = shift;
- $x = $class->new($x) if !ref($x);
+ $x = __PACKAGE__->new($x) if !ref($x);
croak("to_bytes() requires a finite, non-negative integer")
if $x -> is_neg() || ! $x -> is_int();
@@ -3699,13 +3868,13 @@ sub to_bytes {
sub to_base {
# return a base anything string
my $x = shift;
- $x = $class->new($x) if !ref($x);
+ $x = __PACKAGE__->new($x) if !ref($x);
croak("the value to convert must be a finite, non-negative integer")
if $x -> is_neg() || !$x -> is_int();
my $base = shift;
- $base = $class->new($base) unless ref($base);
+ $base = __PACKAGE__->new($base) unless ref($base);
croak("the base must be a finite integer >= 2")
if $base < 2 || ! $base -> is_int();
@@ -3729,7 +3898,7 @@ sub to_base {
sub as_hex {
# return as hex string, with prefixed 0x
my $x = shift;
- $x = $class->new($x) if !ref($x);
+ $x = __PACKAGE__->new($x) if !ref($x);
return $x->bstr() if $x->{sign} !~ /^[+-]$/; # inf, nan etc
@@ -3740,7 +3909,7 @@ sub as_hex {
sub as_oct {
# return as octal string, with prefixed 0
my $x = shift;
- $x = $class->new($x) if !ref($x);
+ $x = __PACKAGE__->new($x) if !ref($x);
return $x->bstr() if $x->{sign} !~ /^[+-]$/; # inf, nan etc
@@ -3751,7 +3920,7 @@ sub as_oct {
sub as_bin {
# return as binary string, with prefixed 0b
my $x = shift;
- $x = $class->new($x) if !ref($x);
+ $x = __PACKAGE__->new($x) if !ref($x);
return $x->bstr() if $x->{sign} !~ /^[+-]$/; # inf, nan etc
@@ -3768,7 +3937,7 @@ sub as_bin {
sub numify {
# Make a Perl scalar number from a Math::BigInt object.
my $x = shift;
- $x = $class->new($x) unless ref $x;
+ $x = __PACKAGE__->new($x) unless ref $x;
if ($x -> is_nan()) {
require Math::Complex;
@@ -3817,7 +3986,7 @@ sub objectify {
# Check the context.
unless (wantarray) {
- croak("${class}::objectify() needs list context");
+ croak(__PACKAGE__ . "::objectify() needs list context");
}
# Get the number of arguments to objectify.
@@ -3935,10 +4104,9 @@ sub objectify {
sub import {
my $class = shift;
$IMPORT++; # remember we did import()
- my @a;
- my $l = scalar @_;
+ my @a; # unrecognized arguments
my $warn_or_die = 0; # 0 - no warn, 1 - warn, 2 - die
- for (my $i = 0; $i < $l ; $i++) {
+ for (my $i = 0; $i <= $#_ ; $i++) {
if ($_[$i] eq ':constant') {
# this causes overlord er load to step in
overload::constant
@@ -3951,7 +4119,9 @@ sub import {
} elsif ($_[$i] =~ /^(lib|try|only)\z/) {
# this causes a different low lib to take care...
$LIB = $_[$i+1] || '';
- # lib => 1 (warn on fallback), try => 0 (no warn), only => 2 (die on fallback)
+ # try => 0 (no warn)
+ # lib => 1 (warn on fallback)
+ # only => 2 (die on fallback)
$warn_or_die = 1 if $_[$i] eq 'lib';
$warn_or_die = 2 if $_[$i] eq 'only';
$i++;
@@ -3968,77 +4138,34 @@ sub import {
# try to load core math lib
my @c = split /\s*,\s*/, $LIB;
foreach (@c) {
- $_ =~ tr/a-zA-Z0-9://cd; # limit to sane characters
+ tr/a-zA-Z0-9://cd; # limit to sane characters
}
push @c, \'Calc' # if all fail, try these
if $warn_or_die < 2; # but not for "only"
- $LIB = ''; # signal error
+ $LIB = ''; # signal error
foreach my $l (@c) {
# fallback libraries are "marked" as \'string', extract string if nec.
my $lib = $l;
$lib = $$l if ref($l);
- next if ($lib || '') eq '';
+ next unless defined($lib) && CORE::length($lib);
$lib = 'Math::BigInt::'.$lib if $lib !~ /^Math::BigInt/i;
$lib =~ s/\.pm$//;
- if ($] < 5.006) {
- # Perl < 5.6.0 dies with "out of memory!" when eval("") and ':constant' is
- # used in the same script, or eval("") inside import().
- my @parts = split /::/, $lib; # Math::BigInt => Math BigInt
- my $file = pop @parts;
- $file .= '.pm'; # BigInt => BigInt.pm
- require File::Spec;
- $file = File::Spec->catfile (@parts, $file);
- eval {
- require "$file";
- $lib->import(@c);
- }
- } else {
- eval "use $lib qw/@c/;";
- }
+ my @parts = split /::/, $lib; # Math::BigInt => Math BigInt
+ $parts[-1] .= '.pm'; # BigInt => BigInt.pm
+ require File::Spec;
+ my $file = File::Spec->catfile(@parts);
+ eval { require $file; };
if ($@ eq '') {
- my $ok = 1;
- # loaded it ok, see if the api_version() is high enough
- if ($lib->can('api_version') && $lib->api_version() >= 1.0) {
- $ok = 0;
- # api_version matches, check if it really provides anything we need
- for my $method (qw/
- one two ten
- str num
- add mul div sub dec inc
- acmp len digit is_one is_zero is_even is_odd
- is_two is_ten
- zeros new copy check
- from_hex from_oct from_bin as_hex as_bin as_oct
- rsft lsft xor and or
- mod sqrt root fac pow modinv modpow log_int gcd
- /) {
- if (!$lib->can("_$method")) {
- if (($WARN{$lib} || 0) < 2) {
- carp("$lib is missing method '_$method'");
- $WARN{$lib} = 1; # still warn about the lib
- }
- $ok++;
- last;
- }
- }
- }
- if ($ok == 0) {
- $LIB = $lib;
- if ($warn_or_die > 0 && ref($l)) {
- my $msg = "Math::BigInt: couldn't load specified"
- . " math lib(s), fallback to $lib";
- carp($msg) if $warn_or_die == 1;
- croak($msg) if $warn_or_die == 2;
- }
- last; # found a usable one, break
- } else {
- if (($WARN{$lib} || 0) < 2) {
- my $ver = eval "\$$lib\::VERSION" || 'unknown';
- carp("Cannot load outdated $lib v$ver, please upgrade");
- $WARN{$lib} = 2; # never warn again
- }
+ $lib->import();
+ $LIB = $lib;
+ if ($warn_or_die > 0 && ref($l)) {
+ my $msg = "Math::BigInt: couldn't load specified"
+ . " math lib(s), fallback to $lib";
+ carp($msg) if $warn_or_die == 1;
+ croak($msg) if $warn_or_die == 2;
}
+ last; # found a usable one, break
}
}
if ($LIB eq '') {
@@ -4210,7 +4337,7 @@ sub _split {
sub _trailing_zeros {
# return the amount of trailing zeros in $x (as scalar)
my $x = shift;
- $x = $class->new($x) unless ref $x;
+ $x = __PACKAGE__->new($x) unless ref $x;
return 0 if $x->{sign} !~ /^[+-]$/; # NaN, inf, -inf etc
@@ -4423,6 +4550,8 @@ Math::BigInt - Arbitrary size integer/float math package
$x->blog($base); # logarithm of $x to base $base (e.g., base 2)
$x->bexp(); # calculate e ** $x where e is Euler's number
$x->bnok($y); # x over y (binomial coefficient n over k)
+ $x->buparrow($n, $y); # Knuth's up-arrow notation
+ $x->backermann($y); # the Ackermann function
$x->bsin(); # sine
$x->bcos(); # cosine
$x->batan(); # inverse tangent
@@ -4987,6 +5116,18 @@ neither positive nor negative.
Returns true if the invocand is negative and false otherwise. A C<NaN> is
neither positive nor negative.
+=item is_non_positive()
+
+ $x->is_non_positive(); # true if <= 0
+
+Returns true if the invocand is negative or zero.
+
+=item is_non_negative()
+
+ $x->is_non_negative(); # true if >= 0
+
+Returns true if the invocand is positive or zero.
+
=item is_odd()
$x->is_odd(); # true if odd, false for even
@@ -5292,6 +5433,38 @@ pseudo-code:
The behaviour is identical to the behaviour of the Maple and Mathematica
function for negative integers n, k.
+=item buparrow()
+
+=item uparrow()
+
+ $a -> buparrow($n, $b); # modifies $a
+ $x = $a -> uparrow($n, $b); # does not modify $a
+
+This method implements Knuth's up-arrow notation, where $n is a non-negative
+integer representing the number of up-arrows. $n = 0 gives multiplication, $n =
+1 gives exponentiation, $n = 2 gives tetration, $n = 3 gives hexation etc. The
+following illustrates the relation between the first values of $n.
+
+See L<https://en.wikipedia.org/wiki/Knuth%27s_up-arrow_notation>.
+
+=item backermann()
+
+=item ackermann()
+
+ $m -> backermann($n); # modifies $a
+ $x = $m -> ackermann($n); # does not modify $a
+
+This method implements the Ackermann function:
+
+ / n + 1 if m = 0
+ A(m, n) = | A(m-1, 1) if m > 0 and n = 0
+ \ A(m-1, A(m, n-1)) if m > 0 and n > 0
+
+Its value grows rapidly, even for small inputs. For example, A(4, 2) is an
+integer of 19729 decimal digits.
+
+See https://en.wikipedia.org/wiki/Ackermann_function
+
=item bsin()
my $x = Math::BigInt->new(1);
@@ -5590,6 +5763,18 @@ If you want $x to have a certain sign, use one of the following methods:
If C<$n> is negative, returns the digit counting from left.
+=item digitsum()
+
+ $x->digitsum();
+
+Computes the sum of the base 10 digits and returns it.
+
+=item bdigitsum()
+
+ $x->bdigitsum();
+
+Computes the sum of the base 10 digits and assigns the result to the invocand.
+
=item length()
$x->length();
@@ -6696,11 +6881,11 @@ L<http://annocpan.org/dist/Math-BigInt>
=item * CPAN Ratings
-L<http://cpanratings.perl.org/dist/Math-BigInt>
+L<https://cpanratings.perl.org/dist/Math-BigInt>
-=item * Search CPAN
+=item * MetaCPAN
-L<http://search.cpan.org/dist/Math-BigInt/>
+L<https://metacpan.org/release/Math-BigInt>
=item * CPAN Testers Matrix
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt/Calc.pm b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt/Calc.pm
index 2bb06a0976b..cd8f1ee44e6 100644
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt/Calc.pm
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt/Calc.pm
@@ -7,7 +7,7 @@ use warnings;
use Carp qw< carp croak >;
use Math::BigInt::Lib;
-our $VERSION = '1.999816';
+our $VERSION = '1.999818';
our @ISA = ('Math::BigInt::Lib');
@@ -35,9 +35,6 @@ our @ISA = ('Math::BigInt::Lib');
##############################################################################
# global constants, flags and accessory
-# announce that we are compatible with MBI v1.83 and up
-sub api_version () { 2; }
-
# constants for easier life
my ($BASE, $BASE_LEN, $RBASE, $MAX_VAL);
my ($AND_BITS, $XOR_BITS, $OR_BITS);
@@ -50,9 +47,7 @@ sub _base_len {
my ($class, $b, $int) = @_;
if (defined $b) {
- # avoid redefinitions
- undef &_mul;
- undef &_div;
+ no warnings "redefine";
if ($] >= 5.008 && $int && $b > 7) {
$BASE_LEN = $b;
@@ -403,13 +398,14 @@ sub _mul_use_mul {
my ($c, $xv, $yv) = @_;
if (@$yv == 1) {
- # shortcut for two very short numbers (improved by Nathan Zook)
- # works also if xv and yv are the same reference, and handles also $x == 0
+ # shortcut for two very short numbers (improved by Nathan Zook) works
+ # also if xv and yv are the same reference, and handles also $x == 0
if (@$xv == 1) {
if (($xv->[0] *= $yv->[0]) >= $BASE) {
- $xv->[0] = $xv->[0] - ($xv->[1] = int($xv->[0] * $RBASE)) * $BASE;
+ my $rem = $xv->[0] % $BASE;
+ $xv->[1] = ($xv->[0] - $rem) * $RBASE;
+ $xv->[0] = $rem;
}
- ;
return $xv;
}
# $x * 0 => 0
@@ -417,56 +413,44 @@ sub _mul_use_mul {
@$xv = (0);
return $xv;
}
+
# multiply a large number a by a single element one, so speed up
my $y = $yv->[0];
my $car = 0;
+ my $rem;
foreach my $i (@$xv) {
$i = $i * $y + $car;
- $car = int($i * $RBASE);
- $i -= $car * $BASE;
+ $rem = $i % $BASE;
+ $car = ($i - $rem) * $RBASE;
+ $i = $rem;
}
push @$xv, $car if $car != 0;
return $xv;
}
+
# shortcut for result $x == 0 => result = 0
return $xv if @$xv == 1 && $xv->[0] == 0;
# since multiplying $x with $x fails, make copy in this case
- $yv = [ @$xv ] if $xv == $yv; # same references?
+ $yv = $c->_copy($xv) if $xv == $yv; # same references?
my @prod = ();
- my ($prod, $car, $cty, $xi, $yi);
-
+ my ($prod, $rem, $car, $cty, $xi, $yi);
for $xi (@$xv) {
$car = 0;
$cty = 0;
-
- # slow variant
- # for $yi (@$yv)
- # {
- # $prod = $xi * $yi + ($prod[$cty] || 0) + $car;
- # $prod[$cty++] =
- # $prod - ($car = int($prod * RBASE)) * $BASE; # see USE_MUL
- # }
- # $prod[$cty] += $car if $car; # need really to check for 0?
- # $xi = shift @prod;
-
- # faster variant
# looping through this if $xi == 0 is silly - so optimize it away!
- $xi = (shift @prod || 0), next if $xi == 0;
+ $xi = (shift(@prod) || 0), next if $xi == 0;
for $yi (@$yv) {
$prod = $xi * $yi + ($prod[$cty] || 0) + $car;
- ## this is actually a tad slower
- ## $prod = $prod[$cty]; $prod += ($car + $xi * $yi); # no ||0 here
- $prod[$cty++] =
- $prod - ($car = int($prod * $RBASE)) * $BASE; # see USE_MUL
+ $rem = $prod % $BASE;
+ $car = int(($prod - $rem) * $RBASE);
+ $prod[$cty++] = $rem;
}
- $prod[$cty] += $car if $car; # need really to check for 0?
- $xi = shift @prod || 0; # || 0 makes v5.005_3 happy
+ $prod[$cty] += $car if $car; # need really to check for 0?
+ $xi = shift(@prod) || 0; # || 0 makes v5.005_3 happy
}
push @$xv, @prod;
- # can't have leading zeros
- # __strip_zeros($xv);
$xv;
}
@@ -478,11 +462,11 @@ sub _mul_use_div_64 {
my ($c, $xv, $yv) = @_;
use integer;
+
if (@$yv == 1) {
- # shortcut for two small numbers, also handles $x == 0
+ # shortcut for two very short numbers (improved by Nathan Zook) works
+ # also if xv and yv are the same reference, and handles also $x == 0
if (@$xv == 1) {
- # shortcut for two very short numbers (improved by Nathan Zook)
- # works also if xv and yv are the same reference, and handles also $x == 0
if (($xv->[0] *= $yv->[0]) >= $BASE) {
$xv->[0] =
$xv->[0] - ($xv->[1] = $xv->[0] / $BASE) * $BASE;
@@ -494,6 +478,7 @@ sub _mul_use_div_64 {
@$xv = (0);
return $xv;
}
+
# multiply a large number a by a single element one, so speed up
my $y = $yv->[0];
my $car = 0;
@@ -505,11 +490,12 @@ sub _mul_use_div_64 {
push @$xv, $car if $car != 0;
return $xv;
}
+
# shortcut for result $x == 0 => result = 0
- return $xv if ( ((@$xv == 1) && ($xv->[0] == 0)) );
+ return $xv if @$xv == 1 && $xv->[0] == 0;
# since multiplying $x with $x fails, make copy in this case
- $yv = $c->_copy($xv) if $xv == $yv; # same references?
+ $yv = $c->_copy($xv) if $xv == $yv; # same references?
my @prod = ();
my ($prod, $car, $cty, $xi, $yi);
@@ -517,13 +503,13 @@ sub _mul_use_div_64 {
$car = 0;
$cty = 0;
# looping through this if $xi == 0 is silly - so optimize it away!
- $xi = (shift @prod || 0), next if $xi == 0;
+ $xi = (shift(@prod) || 0), next if $xi == 0;
for $yi (@$yv) {
$prod = $xi * $yi + ($prod[$cty] || 0) + $car;
$prod[$cty++] = $prod - ($car = $prod / $BASE) * $BASE;
}
- $prod[$cty] += $car if $car; # need really to check for 0?
- $xi = shift @prod || 0; # || 0 makes v5.005_3 happy
+ $prod[$cty] += $car if $car; # need really to check for 0?
+ $xi = shift(@prod) || 0; # || 0 makes v5.005_3 happy
}
push @$xv, @prod;
$xv;
@@ -536,15 +522,14 @@ sub _mul_use_div {
my ($c, $xv, $yv) = @_;
if (@$yv == 1) {
- # shortcut for two small numbers, also handles $x == 0
+ # shortcut for two very short numbers (improved by Nathan Zook) works
+ # also if xv and yv are the same reference, and handles also $x == 0
if (@$xv == 1) {
- # shortcut for two very short numbers (improved by Nathan Zook)
- # works also if xv and yv are the same reference, and handles also $x == 0
if (($xv->[0] *= $yv->[0]) >= $BASE) {
- $xv->[0] =
- $xv->[0] - ($xv->[1] = int($xv->[0] / $BASE)) * $BASE;
+ my $rem = $xv->[0] % $BASE;
+ $xv->[1] = ($xv->[0] - $rem) / $BASE;
+ $xv->[0] = $rem;
}
- ;
return $xv;
}
# $x * 0 => 0
@@ -552,42 +537,44 @@ sub _mul_use_div {
@$xv = (0);
return $xv;
}
+
# multiply a large number a by a single element one, so speed up
my $y = $yv->[0];
my $car = 0;
+ my $rem;
foreach my $i (@$xv) {
$i = $i * $y + $car;
- $car = int($i / $BASE);
- $i -= $car * $BASE;
- # This (together with use integer;) does not work on 32-bit Perls
- #$i = $i * $y + $car; $i -= ($car = $i / $BASE) * $BASE;
+ $rem = $i % $BASE;
+ $car = ($i - $rem) / $BASE;
+ $i = $rem;
}
push @$xv, $car if $car != 0;
return $xv;
}
+
# shortcut for result $x == 0 => result = 0
- return $xv if ( ((@$xv == 1) && ($xv->[0] == 0)) );
+ return $xv if @$xv == 1 && $xv->[0] == 0;
# since multiplying $x with $x fails, make copy in this case
- $yv = $c->_copy($xv) if $xv == $yv; # same references?
+ $yv = $c->_copy($xv) if $xv == $yv; # same references?
my @prod = ();
- my ($prod, $car, $cty, $xi, $yi);
+ my ($prod, $rem, $car, $cty, $xi, $yi);
for $xi (@$xv) {
$car = 0;
$cty = 0;
# looping through this if $xi == 0 is silly - so optimize it away!
- $xi = (shift @prod || 0), next if $xi == 0;
+ $xi = (shift(@prod) || 0), next if $xi == 0;
for $yi (@$yv) {
$prod = $xi * $yi + ($prod[$cty] || 0) + $car;
- $prod[$cty++] = $prod - ($car = int($prod / $BASE)) * $BASE;
+ $rem = $prod % $BASE;
+ $car = ($prod - $rem) / $BASE;
+ $prod[$cty++] = $rem;
}
- $prod[$cty] += $car if $car; # need really to check for 0?
- $xi = shift @prod || 0; # || 0 makes v5.005_3 happy
+ $prod[$cty] += $car if $car; # need really to check for 0?
+ $xi = shift(@prod) || 0; # || 0 makes v5.005_3 happy
}
push @$xv, @prod;
- # can't have leading zeros
- # __strip_zeros($xv);
$xv;
}
@@ -595,28 +582,19 @@ sub _div_use_mul {
# ref to array, ref to array, modify first array and return remainder if
# in list context
- # see comments in _div_use_div() for more explanations
-
my ($c, $x, $yorg) = @_;
# the general div algorithm here is about O(N*N) and thus quite slow, so
# we first check for some special cases and use shortcuts to handle them.
- # This works, because we store the numbers in a chunked format where each
- # element contains 5..7 digits (depending on system).
-
# if both numbers have only one element:
if (@$x == 1 && @$yorg == 1) {
# shortcut, $yorg and $x are two small numbers
- if (wantarray) {
- my $rem = [ $x->[0] % $yorg->[0] ];
- bless $rem, $c;
- $x->[0] = int($x->[0] / $yorg->[0]);
- return ($x, $rem);
- } else {
- $x->[0] = int($x->[0] / $yorg->[0]);
- return $x;
- }
+ my $rem = [ $x->[0] % $yorg->[0] ];
+ bless $rem, $c;
+ $x->[0] = ($x->[0] - $rem->[0]) / $yorg->[0];
+ return ($x, $rem) if wantarray;
+ return $x;
}
# if x has more than one, but y has only one element:
@@ -631,120 +609,120 @@ sub _div_use_mul {
my $b;
while ($j-- > 0) {
$b = $r * $BASE + $x->[$j];
- $x->[$j] = int($b/$y);
$r = $b % $y;
+ $x->[$j] = ($b - $r) / $y;
}
- pop @$x if @$x > 1 && $x->[-1] == 0; # splice up a leading zero
+ pop(@$x) if @$x > 1 && $x->[-1] == 0; # remove any trailing zero
return ($x, $rem) if wantarray;
return $x;
}
# now x and y have more than one element
- # check whether y has more elements than x, if yet, the result will be 0
+ # check whether y has more elements than x, if so, the result is 0
if (@$yorg > @$x) {
my $rem;
- $rem = $c->_copy($x) if wantarray; # make copy
- @$x = 0; # set to 0
- return ($x, $rem) if wantarray; # including remainder?
- return $x; # only x, which is [0] now
+ $rem = $c->_copy($x) if wantarray; # make copy
+ @$x = 0; # set to 0
+ return ($x, $rem) if wantarray; # including remainder?
+ return $x; # only x, which is [0] now
}
+
# check whether the numbers have the same number of elements, in that case
# the result will fit into one element and can be computed efficiently
if (@$yorg == @$x) {
+ my $cmp = 0;
+ for (my $j = $#$x ; $j >= 0 ; --$j) {
+ last if $cmp = $x->[$j] - $yorg->[$j];
+ }
- # if $yorg has more digits than $x (it's leading element is longer than
- # the one from $x), the result will also be 0:
- if (length(int($yorg->[-1])) > length(int($x->[-1]))) {
- my $rem = $c->_copy($x) if wantarray; # make copy
- @$x = 0; # set to 0
- return ($x, $rem) if wantarray; # including remainder?
+ if ($cmp == 0) { # x = y
+ @$x = 1;
+ return $x, $c->_zero() if wantarray;
return $x;
}
- # now calculate $x / $yorg
- if (length(int($yorg->[-1])) == length(int($x->[-1]))) {
- # same length, so make full compare
- my $a = 0;
- my $j = @$x - 1;
- # manual way (abort if unequal, good for early ne)
- while ($j >= 0) {
- last if ($a = $x->[$j] - $yorg->[$j]);
- $j--;
- }
- # $a contains the result of the compare between X and Y
- # a < 0: x < y, a == 0: x == y, a > 0: x > y
- if ($a <= 0) {
- # a = 0 => x == y => rem 0
- # a < 0 => x < y => rem = x
- my $rem = $a == 0 ? $c->_zero() : $c->_copy($x);
- @$x = 0; # if $a < 0
- $x->[0] = 1 if $a == 0; # $x == $y
- return ($x, $rem) if wantarray;
- return $x;
+ if ($cmp < 0) { # x < y
+ if (wantarray) {
+ my $rem = $c->_copy($x);
+ @$x = 0;
+ return $x, $rem;
}
- # $x >= $y, so proceed normally
+ @$x = 0;
+ return $x;
}
}
# all other cases:
- my $y = $c->_copy($yorg); # always make copy to preserve
+ my $y = $c->_copy($yorg); # always make copy to preserve
- my ($car, $bar, $prd, $dd, $xi, $yi, @q, $v2, $v1, $tmp, $q, $u2, $u1, $u0);
-
- $car = $bar = $prd = 0;
- if (($dd = int($BASE / ($y->[-1] + 1))) != 1) {
- for $xi (@$x) {
+ my $tmp = $y->[-1] + 1;
+ my $rem = $BASE % $tmp;
+ my $dd = ($BASE - $rem) / $tmp;
+ if ($dd != 1) {
+ my $car = 0;
+ for my $xi (@$x) {
$xi = $xi * $dd + $car;
- $xi -= ($car = int($xi * $RBASE)) * $BASE; # see USE_MUL
+ $xi -= ($car = int($xi * $RBASE)) * $BASE; # see USE_MUL
}
push(@$x, $car);
$car = 0;
- for $yi (@$y) {
+ for my $yi (@$y) {
$yi = $yi * $dd + $car;
- $yi -= ($car = int($yi * $RBASE)) * $BASE; # see USE_MUL
+ $yi -= ($car = int($yi * $RBASE)) * $BASE; # see USE_MUL
}
} else {
push(@$x, 0);
}
- @q = ();
- ($v2, $v1) = @$y[-2, -1];
+
+ # @q will accumulate the final result, $q contains the current computed
+ # part of the final result
+
+ my @q = ();
+ my ($v2, $v1) = @$y[-2, -1];
$v2 = 0 unless $v2;
while ($#$x > $#$y) {
- ($u2, $u1, $u0) = @$x[-3 .. -1];
+ my ($u2, $u1, $u0) = @$x[-3 .. -1];
$u2 = 0 unless $u2;
#warn "oups v1 is 0, u0: $u0 $y->[-2] $y->[-1] l ",scalar @$y,"\n"
# if $v1 == 0;
- $q = (($u0 == $v1) ? $MAX_VAL : int(($u0 * $BASE + $u1) / $v1));
- --$q while ($v2 * $q > ($u0 * $BASE + $u1 - $q * $v1) * $BASE + $u2);
+ my $tmp = $u0 * $BASE + $u1;
+ my $rem = $tmp % $v1;
+ my $q = $u0 == $v1 ? $MAX_VAL : (($tmp - $rem) / $v1);
+ --$q while $v2 * $q > ($u0 * $BASE + $u1 - $q * $v1) * $BASE + $u2;
if ($q) {
- ($car, $bar) = (0, 0);
- for ($yi = 0, $xi = $#$x - $#$y-1; $yi <= $#$y; ++$yi, ++$xi) {
+ my $prd;
+ my ($car, $bar) = (0, 0);
+ for (my $yi = 0, my $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) {
$prd = $q * $y->[$yi] + $car;
- $prd -= ($car = int($prd * $RBASE)) * $BASE; # see USE_MUL
- $x->[$xi] += $BASE if ($bar = (($x->[$xi] -= $prd + $bar) < 0));
+ $prd -= ($car = int($prd * $RBASE)) * $BASE; # see USE_MUL
+ $x->[$xi] += $BASE if $bar = (($x->[$xi] -= $prd + $bar) < 0);
}
if ($x->[-1] < $car + $bar) {
$car = 0;
--$q;
- for ($yi = 0, $xi = $#$x - $#$y-1; $yi <= $#$y; ++$yi, ++$xi) {
+ for (my $yi = 0, my $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) {
$x->[$xi] -= $BASE
- if ($car = (($x->[$xi] += $y->[$yi] + $car) >= $BASE));
+ if $car = (($x->[$xi] += $y->[$yi] + $car) >= $BASE);
}
}
}
pop(@$x);
unshift(@q, $q);
}
+
if (wantarray) {
my $d = bless [], $c;
if ($dd != 1) {
- $car = 0;
- for $xi (reverse @$x) {
+ my $car = 0;
+ my ($prd, $rem);
+ for my $xi (reverse @$x) {
$prd = $car * $BASE + $xi;
- $car = $prd - ($tmp = int($prd / $dd)) * $dd; # see USE_MUL
- unshift(@$d, $tmp);
+ $rem = $prd % $dd;
+ $tmp = ($prd - $rem) / $dd;
+ $car = $rem;
+ unshift @$d, $tmp;
}
} else {
@$d = @$x;
@@ -762,29 +740,29 @@ sub _div_use_mul {
sub _div_use_div_64 {
# ref to array, ref to array, modify first array and return remainder if
# in list context
- # This version works on 64 bit integers
- my ($c, $x, $yorg) = @_;
+ # This version works on integers
use integer;
+
+ my ($c, $x, $yorg) = @_;
+
# the general div algorithm here is about O(N*N) and thus quite slow, so
# we first check for some special cases and use shortcuts to handle them.
- # This works, because we store the numbers in a chunked format where each
- # element contains 5..7 digits (depending on system).
-
# if both numbers have only one element:
if (@$x == 1 && @$yorg == 1) {
# shortcut, $yorg and $x are two small numbers
if (wantarray) {
my $rem = [ $x->[0] % $yorg->[0] ];
bless $rem, $c;
- $x->[0] = int($x->[0] / $yorg->[0]);
+ $x->[0] = $x->[0] / $yorg->[0];
return ($x, $rem);
} else {
- $x->[0] = int($x->[0] / $yorg->[0]);
+ $x->[0] = $x->[0] / $yorg->[0];
return $x;
}
}
+
# if x has more than one, but y has only one element:
if (@$yorg == 1) {
my $rem;
@@ -797,78 +775,67 @@ sub _div_use_div_64 {
my $b;
while ($j-- > 0) {
$b = $r * $BASE + $x->[$j];
- $x->[$j] = int($b/$y);
$r = $b % $y;
+ $x->[$j] = $b / $y;
}
- pop @$x if @$x > 1 && $x->[-1] == 0; # splice up a leading zero
+ pop(@$x) if @$x > 1 && $x->[-1] == 0; # remove any trailing zero
return ($x, $rem) if wantarray;
return $x;
}
+
# now x and y have more than one element
- # check whether y has more elements than x, if yet, the result will be 0
+ # check whether y has more elements than x, if so, the result is 0
if (@$yorg > @$x) {
my $rem;
- $rem = $c->_copy($x) if wantarray; # make copy
- @$x = 0; # set to 0
- return ($x, $rem) if wantarray; # including remainder?
- return $x; # only x, which is [0] now
+ $rem = $c->_copy($x) if wantarray; # make copy
+ @$x = 0; # set to 0
+ return ($x, $rem) if wantarray; # including remainder?
+ return $x; # only x, which is [0] now
}
+
# check whether the numbers have the same number of elements, in that case
# the result will fit into one element and can be computed efficiently
if (@$yorg == @$x) {
- my $rem;
- # if $yorg has more digits than $x (it's leading element is longer than
- # the one from $x), the result will also be 0:
- if (length(int($yorg->[-1])) > length(int($x->[-1]))) {
- $rem = $c->_copy($x) if wantarray; # make copy
- @$x = 0; # set to 0
- return ($x, $rem) if wantarray; # including remainder?
- return $x;
+ my $cmp = 0;
+ for (my $j = $#$x ; $j >= 0 ; --$j) {
+ last if $cmp = $x->[$j] - $yorg->[$j];
}
- # now calculate $x / $yorg
- if (length(int($yorg->[-1])) == length(int($x->[-1]))) {
- # same length, so make full compare
+ if ($cmp == 0) { # x = y
+ @$x = 1;
+ return $x, $c->_zero() if wantarray;
+ return $x;
+ }
- my $a = 0;
- my $j = @$x - 1;
- # manual way (abort if unequal, good for early ne)
- while ($j >= 0) {
- last if ($a = $x->[$j] - $yorg->[$j]);
- $j--;
- }
- # $a contains the result of the compare between X and Y
- # a < 0: x < y, a == 0: x == y, a > 0: x > y
- if ($a <= 0) {
- $rem = $c->_zero(); # a = 0 => x == y => rem 0
- $rem = $c->_copy($x) if $a != 0; # a < 0 => x < y => rem = x
- @$x = 0; # if $a < 0
- $x->[0] = 1 if $a == 0; # $x == $y
- return ($x, $rem) if wantarray; # including remainder?
- return $x;
+ if ($cmp < 0) { # x < y
+ if (wantarray) {
+ my $rem = $c->_copy($x);
+ @$x = 0;
+ return $x, $rem;
}
- # $x >= $y, so proceed normally
+ @$x = 0;
+ return $x;
}
}
# all other cases:
- my $y = $c->_copy($yorg); # always make copy to preserve
-
- my ($car, $bar, $prd, $dd, $xi, $yi, @q, $v2, $v1, $tmp, $q, $u2, $u1, $u0);
+ my $y = $c->_copy($yorg); # always make copy to preserve
- $car = $bar = $prd = 0;
- if (($dd = int($BASE / ($y->[-1] + 1))) != 1) {
- for $xi (@$x) {
+ my $tmp;
+ my $dd = $BASE / ($y->[-1] + 1);
+ if ($dd != 1) {
+ my $car = 0;
+ for my $xi (@$x) {
$xi = $xi * $dd + $car;
- $xi -= ($car = int($xi / $BASE)) * $BASE;
+ $xi -= ($car = $xi / $BASE) * $BASE;
}
push(@$x, $car);
$car = 0;
- for $yi (@$y) {
+ for my $yi (@$y) {
$yi = $yi * $dd + $car;
- $yi -= ($car = int($yi / $BASE)) * $BASE;
+ $yi -= ($car = $yi / $BASE) * $BASE;
}
} else {
push(@$x, 0);
@@ -877,43 +844,48 @@ sub _div_use_div_64 {
# @q will accumulate the final result, $q contains the current computed
# part of the final result
- @q = ();
- ($v2, $v1) = @$y[-2, -1];
+ my @q = ();
+ my ($v2, $v1) = @$y[-2, -1];
$v2 = 0 unless $v2;
while ($#$x > $#$y) {
- ($u2, $u1, $u0) = @$x[-3..-1];
+ my ($u2, $u1, $u0) = @$x[-3 .. -1];
$u2 = 0 unless $u2;
#warn "oups v1 is 0, u0: $u0 $y->[-2] $y->[-1] l ",scalar @$y,"\n"
# if $v1 == 0;
- $q = (($u0 == $v1) ? $MAX_VAL : int(($u0 * $BASE + $u1) / $v1));
- --$q while ($v2 * $q > ($u0 * $BASE +$ u1- $q*$v1) * $BASE + $u2);
+ my $tmp = $u0 * $BASE + $u1;
+ my $rem = $tmp % $v1;
+ my $q = $u0 == $v1 ? $MAX_VAL : (($tmp - $rem) / $v1);
+ --$q while $v2 * $q > ($u0 * $BASE + $u1 - $q * $v1) * $BASE + $u2;
if ($q) {
- ($car, $bar) = (0, 0);
- for ($yi = 0, $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) {
+ my $prd;
+ my ($car, $bar) = (0, 0);
+ for (my $yi = 0, my $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) {
$prd = $q * $y->[$yi] + $car;
$prd -= ($car = int($prd / $BASE)) * $BASE;
- $x->[$xi] += $BASE if ($bar = (($x->[$xi] -= $prd + $bar) < 0));
+ $x->[$xi] += $BASE if $bar = (($x->[$xi] -= $prd + $bar) < 0);
}
if ($x->[-1] < $car + $bar) {
$car = 0;
--$q;
- for ($yi = 0, $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) {
+ for (my $yi = 0, my $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) {
$x->[$xi] -= $BASE
- if ($car = (($x->[$xi] += $y->[$yi] + $car) >= $BASE));
+ if $car = (($x->[$xi] += $y->[$yi] + $car) >= $BASE);
}
}
}
pop(@$x);
unshift(@q, $q);
}
+
if (wantarray) {
my $d = bless [], $c;
if ($dd != 1) {
- $car = 0;
- for $xi (reverse @$x) {
+ my $car = 0;
+ my $prd;
+ for my $xi (reverse @$x) {
$prd = $car * $BASE + $xi;
- $car = $prd - ($tmp = int($prd / $dd)) * $dd;
- unshift(@$d, $tmp);
+ $car = $prd - ($tmp = $prd / $dd) * $dd;
+ unshift @$d, $tmp;
}
} else {
@$d = @$x;
@@ -931,27 +903,22 @@ sub _div_use_div_64 {
sub _div_use_div {
# ref to array, ref to array, modify first array and return remainder if
# in list context
+
my ($c, $x, $yorg) = @_;
# the general div algorithm here is about O(N*N) and thus quite slow, so
# we first check for some special cases and use shortcuts to handle them.
- # This works, because we store the numbers in a chunked format where each
- # element contains 5..7 digits (depending on system).
-
# if both numbers have only one element:
if (@$x == 1 && @$yorg == 1) {
# shortcut, $yorg and $x are two small numbers
- if (wantarray) {
- my $rem = [ $x->[0] % $yorg->[0] ];
- bless $rem, $c;
- $x->[0] = int($x->[0] / $yorg->[0]);
- return ($x, $rem);
- } else {
- $x->[0] = int($x->[0] / $yorg->[0]);
- return $x;
- }
+ my $rem = [ $x->[0] % $yorg->[0] ];
+ bless $rem, $c;
+ $x->[0] = ($x->[0] - $rem->[0]) / $yorg->[0];
+ return ($x, $rem) if wantarray;
+ return $x;
}
+
# if x has more than one, but y has only one element:
if (@$yorg == 1) {
my $rem;
@@ -964,80 +931,72 @@ sub _div_use_div {
my $b;
while ($j-- > 0) {
$b = $r * $BASE + $x->[$j];
- $x->[$j] = int($b/$y);
$r = $b % $y;
+ $x->[$j] = ($b - $r) / $y;
}
- pop @$x if @$x > 1 && $x->[-1] == 0; # splice up a leading zero
+ pop(@$x) if @$x > 1 && $x->[-1] == 0; # remove any trailing zero
return ($x, $rem) if wantarray;
return $x;
}
+
# now x and y have more than one element
- # check whether y has more elements than x, if yet, the result will be 0
+ # check whether y has more elements than x, if so, the result is 0
if (@$yorg > @$x) {
my $rem;
- $rem = $c->_copy($x) if wantarray; # make copy
- @$x = 0; # set to 0
- return ($x, $rem) if wantarray; # including remainder?
- return $x; # only x, which is [0] now
+ $rem = $c->_copy($x) if wantarray; # make copy
+ @$x = 0; # set to 0
+ return ($x, $rem) if wantarray; # including remainder?
+ return $x; # only x, which is [0] now
}
+
# check whether the numbers have the same number of elements, in that case
# the result will fit into one element and can be computed efficiently
if (@$yorg == @$x) {
- my $rem;
- # if $yorg has more digits than $x (it's leading element is longer than
- # the one from $x), the result will also be 0:
- if (length(int($yorg->[-1])) > length(int($x->[-1]))) {
- $rem = $c->_copy($x) if wantarray; # make copy
- @$x = 0; # set to 0
- return ($x, $rem) if wantarray; # including remainder?
- return $x;
+ my $cmp = 0;
+ for (my $j = $#$x ; $j >= 0 ; --$j) {
+ last if $cmp = $x->[$j] - $yorg->[$j];
}
- # now calculate $x / $yorg
- if (length(int($yorg->[-1])) == length(int($x->[-1]))) {
- # same length, so make full compare
+ if ($cmp == 0) { # x = y
+ @$x = 1;
+ return $x, $c->_zero() if wantarray;
+ return $x;
+ }
- my $a = 0;
- my $j = @$x - 1;
- # manual way (abort if unequal, good for early ne)
- while ($j >= 0) {
- last if ($a = $x->[$j] - $yorg->[$j]);
- $j--;
- }
- # $a contains the result of the compare between X and Y
- # a < 0: x < y, a == 0: x == y, a > 0: x > y
- if ($a <= 0) {
- $rem = $c->_zero(); # a = 0 => x == y => rem 0
- $rem = $c->_copy($x) if $a != 0; # a < 0 => x < y => rem = x
+ if ($cmp < 0) { # x < y
+ if (wantarray) {
+ my $rem = $c->_copy($x);
@$x = 0;
- $x->[0] = 0; # if $a < 0
- $x->[0] = 1 if $a == 0; # $x == $y
- return ($x, $rem) if wantarray; # including remainder?
- return $x;
+ return $x, $rem;
}
- # $x >= $y, so proceed normally
-
+ @$x = 0;
+ return $x;
}
}
# all other cases:
- my $y = $c->_copy($yorg); # always make copy to preserve
-
- my ($car, $bar, $prd, $dd, $xi, $yi, @q, $v2, $v1, @d, $tmp, $q, $u2, $u1, $u0);
+ my $y = $c->_copy($yorg); # always make copy to preserve
- $car = $bar = $prd = 0;
- if (($dd = int($BASE / ($y->[-1] + 1))) != 1) {
- for $xi (@$x) {
+ my $tmp = $y->[-1] + 1;
+ my $rem = $BASE % $tmp;
+ my $dd = ($BASE - $rem) / $tmp;
+ if ($dd != 1) {
+ my $car = 0;
+ for my $xi (@$x) {
$xi = $xi * $dd + $car;
- $xi -= ($car = int($xi / $BASE)) * $BASE;
+ $rem = $xi % $BASE;
+ $car = ($xi - $rem) / $BASE;
+ $xi = $rem;
}
push(@$x, $car);
$car = 0;
- for $yi (@$y) {
+ for my $yi (@$y) {
$yi = $yi * $dd + $car;
- $yi -= ($car = int($yi / $BASE)) * $BASE;
+ $rem = $yi % $BASE;
+ $car = ($yi - $rem) / $BASE;
+ $yi = $rem;
}
} else {
push(@$x, 0);
@@ -1046,43 +1005,52 @@ sub _div_use_div {
# @q will accumulate the final result, $q contains the current computed
# part of the final result
- @q = ();
- ($v2, $v1) = @$y[-2, -1];
+ my @q = ();
+ my ($v2, $v1) = @$y[-2, -1];
$v2 = 0 unless $v2;
while ($#$x > $#$y) {
- ($u2, $u1, $u0) = @$x[-3..-1];
+ my ($u2, $u1, $u0) = @$x[-3 .. -1];
$u2 = 0 unless $u2;
#warn "oups v1 is 0, u0: $u0 $y->[-2] $y->[-1] l ",scalar @$y,"\n"
# if $v1 == 0;
- $q = (($u0 == $v1) ? $MAX_VAL : int(($u0 * $BASE + $u1) / $v1));
- --$q while ($v2 * $q > ($u0 * $BASE + $u1 - $q * $v1) * $BASE + $u2);
+ my $tmp = $u0 * $BASE + $u1;
+ my $rem = $tmp % $v1;
+ my $q = $u0 == $v1 ? $MAX_VAL : (($tmp - $rem) / $v1);
+ --$q while $v2 * $q > ($u0 * $BASE + $u1 - $q * $v1) * $BASE + $u2;
if ($q) {
- ($car, $bar) = (0, 0);
- for ($yi = 0, $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) {
+ my $prd;
+ my ($car, $bar) = (0, 0);
+ for (my $yi = 0, my $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) {
$prd = $q * $y->[$yi] + $car;
- $prd -= ($car = int($prd / $BASE)) * $BASE;
- $x->[$xi] += $BASE if ($bar = (($x->[$xi] -= $prd + $bar) < 0));
+ $rem = $prd % $BASE;
+ $car = ($prd - $rem) / $BASE;
+ $prd -= $car * $BASE;
+ $x->[$xi] += $BASE if $bar = (($x->[$xi] -= $prd + $bar) < 0);
}
if ($x->[-1] < $car + $bar) {
$car = 0;
--$q;
- for ($yi = 0, $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) {
+ for (my $yi = 0, my $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) {
$x->[$xi] -= $BASE
- if ($car = (($x->[$xi] += $y->[$yi] + $car) >= $BASE));
+ if $car = (($x->[$xi] += $y->[$yi] + $car) >= $BASE);
}
}
}
pop(@$x);
unshift(@q, $q);
}
+
if (wantarray) {
my $d = bless [], $c;
if ($dd != 1) {
- $car = 0;
- for $xi (reverse @$x) {
+ my $car = 0;
+ my ($prd, $rem);
+ for my $xi (reverse @$x) {
$prd = $car * $BASE + $xi;
- $car = $prd - ($tmp = int($prd / $dd)) * $dd;
- unshift(@$d, $tmp);
+ $rem = $prd % $dd;
+ $tmp = ($prd - $rem) / $dd;
+ $car = $rem;
+ unshift @$d, $tmp;
}
} else {
@$d = @$x;
@@ -1385,7 +1353,7 @@ sub _rsft {
$dst++;
}
splice(@$x, $dst) if $dst > 0; # kill left-over array elems
- pop @$x if $x->[-1] == 0 && @$x > 1; # kill last element if 0
+ pop(@$x) if $x->[-1] == 0 && @$x > 1; # kill last element if 0
} # else rem == 0
$x;
}
@@ -1393,49 +1361,64 @@ sub _rsft {
sub _lsft {
my ($c, $x, $n, $b) = @_;
- return $x if $c->_is_zero($x);
-
- # Handle the special case when the base is a power of 10. Don't check
- # whether log($b)/log(10) is an integer, because log(1000)/log(10) is not
- # exactly 3.
-
- my $log10 = sprintf "%.0f", log($b) / log(10);
- if ($b == 10 ** $log10) {
- $b = 10;
- $n = $c->_mul($n, $c->_new($log10));
-
- # shortcut (faster) for shifting by 10) since we are in base 10eX
- # multiples of $BASE_LEN:
- my $src = @$x; # source
- my $len = $c->_num($n); # shift-len as normal int
- my $rem = $len % $BASE_LEN; # remainder to shift
- my $dst = $src + int($len / $BASE_LEN); # destination
- my $vd; # further speedup
- $x->[$src] = 0; # avoid first ||0 for speed
- my $z = '0' x $BASE_LEN;
- while ($src >= 0) {
- $vd = $x->[$src];
- $vd = $z . $vd;
- $vd = substr($vd, -$BASE_LEN + $rem, $BASE_LEN - $rem);
- $vd .= $src > 0 ? substr($z . $x->[$src - 1], -$BASE_LEN, $rem)
- : '0' x $rem;
- $vd = substr($vd, -$BASE_LEN, $BASE_LEN) if length($vd) > $BASE_LEN;
- $x->[$dst] = int($vd);
- $dst--;
- $src--;
+ return $x if $c->_is_zero($x) || $c->_is_zero($n);
+
+ # For backwards compatibility, allow the base $b to be a scalar.
+
+ $b = $c->_new($b) unless ref $b;
+
+ # If the base is a power of 10, use shifting, since the internal
+ # representation is in base 10eX.
+
+ my $bstr = $c->_str($b);
+ if ($bstr =~ /^1(0+)\z/) {
+
+ # Adjust $n so that we're shifting in base 10. Do this by multiplying
+ # $n by the base 10 logarithm of $b: $b ** $n = 10 ** (log10($b) * $n).
+
+ my $log10b = length($1);
+ $n = $c->_mul($c->_new($log10b), $n);
+ $n = $c->_num($n); # shift-len as normal int
+
+ # $q is the number of places to shift the elements within the array,
+ # and $r is the number of places to shift the values within the
+ # elements.
+
+ my $r = $n % $BASE_LEN;
+ my $q = ($n - $r) / $BASE_LEN;
+
+ # If we must shift the values within the elements ...
+
+ if ($r) {
+ my $i = @$x; # index
+ $x->[$i] = 0; # initialize most significant element
+ my $z = '0' x $BASE_LEN;
+ my $vd;
+ while ($i >= 0) {
+ $vd = $x->[$i];
+ $vd = $z . $vd;
+ $vd = substr($vd, $r - $BASE_LEN, $BASE_LEN - $r);
+ $vd .= $i > 0 ? substr($z . $x->[$i - 1], -$BASE_LEN, $r)
+ : '0' x $r;
+ $vd = substr($vd, -$BASE_LEN, $BASE_LEN) if length($vd) > $BASE_LEN;
+ $x->[$i] = int($vd); # e.g., "0...048" -> 48 etc.
+ $i--;
+ }
+
+ pop(@$x) if $x->[-1] == 0; # if most significant element is zero
}
- # set lowest parts to 0
- while ($dst >= 0) {
- $x->[$dst--] = 0;
+
+ # If we must shift the elements within the array ...
+
+ if ($q) {
+ unshift @$x, (0) x $q;
}
- # fix spurious last zero element
- splice @$x, -1 if $x->[-1] == 0;
- return $x;
+
} else {
- $b = $c->_new($b);
- #print $c->_str($b);
- return $c->_mul($x, $c->_pow($b, $n));
+ $x = $c->_mul($x, $c->_pow($b, $n));
}
+
+ return $x;
}
sub _pow {
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/Scalar.pm b/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/Scalar.pm
index 1bfd338d981..d703806bcce 100644
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/Scalar.pm
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/Scalar.pm
@@ -14,8 +14,6 @@ our @ISA = qw(Exporter);
our $VERSION = '0.13';
-sub api_version() { 1; }
-
##############################################################################
# global constants, flags and accessory
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbf.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbf.t
index 51377400c12..c8184cb8610 100755
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbf.t
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbf.t
@@ -3,7 +3,7 @@
use strict;
use warnings;
-use Test::More tests => 2818;
+use Test::More tests => 2830;
use lib 't';
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbi.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbi.t
index 7003104913e..7c24404738a 100755
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbi.t
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbi.t
@@ -3,7 +3,7 @@
use strict;
use warnings;
-use Test::More tests => 4026; # tests in require'd file
+use Test::More tests => 4038; # tests in require'd file
use lib 't';
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.inc b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.inc
index 4858e2e983f..af6e422e882 100644
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.inc
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.inc
@@ -37,7 +37,7 @@ while (<DATA>) {
$try = qq|\$x = $CLASS->new("$args[0]");|;
if ($f eq "bnorm") {
$try .= qq| \$x;|;
- } elsif ($f =~ /^is_(zero|one|odd|even|negative|positive|nan|int)$/) {
+ } elsif ($f =~ /^is_(zero|one|odd|even||(non_)?(negative|positive)|nan|int)$/) {
$try .= qq| \$x->$f();|;
} elsif ($f eq "is_inf") {
$try .= qq| \$x->is_inf("$args[1]");|;
@@ -2183,6 +2183,22 @@ NaN:0
-inf:1
+inf:0
+&is_non_positive
+0:1
+1:0
+-1:1
+NaN:0
+-inf:1
++inf:0
+
+&is_non_negative
+0:1
+1:1
+-1:0
+NaN:0
+-inf:0
++inf:1
+
&parts
0:0 0
1:1 0
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.t
index 992ee0416ad..8b0079fedc9 100755
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.t
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.t
@@ -3,7 +3,7 @@
use strict;
use warnings;
-use Test::More tests => 2818 # tests in require'd file
+use Test::More tests => 2830 # tests in require'd file
+ 19; # tests in this file
use Math::BigInt only => 'Calc';
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintc.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintc.t
index 517da4601da..f9c16d233b0 100755
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintc.t
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintc.t
@@ -3,7 +3,7 @@
use strict;
use warnings;
-use Test::More tests => 379;
+use Test::More tests => 460;
use Math::BigInt::Calc;
@@ -261,6 +261,27 @@ $y = $LIB->_new("45");
is($LIB->_str($LIB->_rsft($x, $y, 10)), 0,
qq|$LIB->_str($LIB->_rsft(\$x, \$y, 10)) = 0|);
+# _lsft() with large bases
+
+for my $xstr ("1", "2", "3") {
+ for my $nstr ("1", "2", "3") {
+ for my $bpow (25, 50, 75) {
+ my $bstr = "1" . ("0" x $bpow);
+ my $expected = $xstr . ("0" x ($bpow * $nstr));
+ my $xobj = $LIB->_new($xstr);
+ my $nobj = $LIB->_new($nstr);
+ my $bobj = $LIB->_new($bstr);
+
+ is($LIB->_str($LIB->_lsft($xobj, $nobj, $bobj)), $expected,
+ qq|$LIB->_str($LIB->_lsft($LIB->_new("$xstr"), |
+ . qq|$LIB->_new("$nstr"), |
+ . qq|$LIB->_new("$bstr")))|);
+ is($LIB->_str($nobj), $nstr, q|$n is unmodified|);
+ is($LIB->_str($bobj), $bstr, q|$b is unmodified|);
+ }
+ }
+}
+
# _acmp
$x = $LIB->_new("123456789");
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.inc b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.inc
index d98807f4bfd..9dd331ab175 100644
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.inc
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.inc
@@ -68,7 +68,7 @@ while (<DATA>) {
$try = qq|\$x = $CLASS->new("$args[0]");|;
if ($f eq "bnorm") {
$try = qq|\$x = $CLASS->bnorm("$args[0]");|;
- } elsif ($f =~ /^is_(zero|one|odd|even|negative|positive|nan|int)$/) {
+ } elsif ($f =~ /^is_(zero|one|odd|even|(non_)?(negative|positive)|nan|int)$/) {
$try .= " \$x->$f() || 0;";
} elsif ($f eq "is_inf") {
$try .= qq| \$x->is_inf("$args[1]");|;
@@ -787,17 +787,26 @@ SKIP: {
my @bl = $LIB->_base_len();
my $bl = $bl[5];
- $x = '1' x $bl . '0' x $bl . '1' x $bl . '0' x $bl;
+ # Compute the value.
+ $x = ('1' x $bl) . ('0' x $bl) . ('1' x $bl) . ('0' x $bl);
$y = '1' x (2 * $bl);
$x = $CLASS->new($x)->bmul($y);
- # result is 123..$bl . $bl x (3*bl-1) . $bl...321 . '0' x $bl
+
+ # Build the expected output.
$y = '';
- my $d = '';
- for (my $i = 1; $i <= $bl; $i++) {
- $y .= $i;
- $d = $i . $d;
+ if ($bl >= 2) {
+ $y .= '123456790' x int(($bl - 2) / 9);
+ $y .= substr '123456790', 0, ($bl - 2) % 9;
+ $y .= ($bl - 1) % 9;
+ }
+ $y .= ((($bl - 1) % 9) + 1) x ($bl * 3);
+ if ($bl >= 2) {
+ $y .= substr '098765432', -(($bl - 1) % 9);
+ $y .= '098765432' x int(($bl - 2) / 9);
}
- $y .= $bl x (3 * $bl - 1) . $d . '0' x $bl;
+ $y .= '1';
+ $y .= '0' x $bl;
+
is($x, $y, "testing number with a zero-hole of BASE_LEN_SMALL");
#########################################################################
@@ -1077,6 +1086,22 @@ invalid:0
-inf:0
invalid:0
+&is_non_negative
+0:1
+-1:0
+1:1
++inf:1
+-inf:0
+NaN:0
+
+&is_non_positive
+0:1
+-1:1
+1:0
++inf:0
+-inf:1
+NaN:0
+
&is_int
-inf:0
+inf:0
@@ -2850,9 +2875,9 @@ abc:12:NaN
-inf:NaN:NaN
#
-3:-inf:0
--3:-3:NaN
--3:-2:NaN
--3:-1:NaN
+-3:-3:0
+-3:-2:0
+-3:-1:0
-3:0:1
-3:1:-3
-3:2:9
@@ -2861,9 +2886,9 @@ abc:12:NaN
-3:NaN:NaN
#
-2:-inf:0
--2:-3:NaN
--2:-2:NaN
--2:-1:NaN
+-2:-3:0
+-2:-2:0
+-2:-1:0
-2:0:1
-2:1:-2
-2:2:4
@@ -2905,9 +2930,9 @@ abc:12:NaN
1:NaN:NaN
#
2:-inf:0
-2:-3:NaN
-2:-2:NaN
-2:-1:NaN
+2:-3:0
+2:-2:0
+2:-1:0
2:0:1
2:1:2
2:2:4
@@ -2916,9 +2941,9 @@ abc:12:NaN
2:NaN:NaN
#
3:-inf:0
-3:-3:NaN
-3:-2:NaN
-3:-1:NaN
+3:-3:0
+3:-2:0
+3:-1:0
3:0:1
3:1:3
3:2:9
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.t
index 1616064745f..7d05dc9e98f 100755
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.t
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.t
@@ -3,7 +3,7 @@
use strict;
use warnings;
-use Test::More tests => 4026 # tests in require'd file
+use Test::More tests => 4038 # tests in require'd file
+ 20; # tests in this file
use Math::BigInt only => 'Calc';
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/calling.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/calling.t
index be72db4a8dd..c3c9affebb2 100755
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/calling.t
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/calling.t
@@ -6,7 +6,7 @@ use strict;
use warnings;
use lib 't';
-my $VERSION = '1.999816'; # adjust manually to match latest release
+my $VERSION = '1.999818'; # adjust manually to match latest release
use Test::More tests => 5;
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbf.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbf.t
index 584ea675e7b..2f5d3fc1e79 100755
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbf.t
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbf.t
@@ -3,7 +3,7 @@
use strict;
use warnings;
-use Test::More tests => 2818 # tests in require'd file
+use Test::More tests => 2830 # tests in require'd file
+ 6; # tests in this file
use lib 't';
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbi.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbi.t
index 3ee6953afa2..97bcdee397e 100755
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbi.t
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbi.t
@@ -3,7 +3,7 @@
use strict;
use warnings;
-use Test::More tests => 4026 # tests in require'd file
+use Test::More tests => 4038 # tests in require'd file
+ 5; # tests in this file
use lib 't';
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.inc b/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.inc
index 9cdba4edfb6..d58376f2444 100644
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.inc
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.inc
@@ -80,7 +80,7 @@ while (<DATA>) {
$try = qq|\$x = $CLASS->new("$args[0]");|;
if ($f eq "bnorm") {
$try = qq|\$x = $CLASS->bnorm("$args[0]");|;
- } elsif ($f =~ /^is_(zero|one|odd|even|negative|positive|nan|int)$/) {
+ } elsif ($f =~ /^is_(zero|one|odd|even||(non_)?(negative|positive)|nan|int)$/) {
$try .= " \$x->$f();";
} elsif ($f =~ /^(to|as)_(hex|oct|bin)$/) {
$try .= " \$x->$f();";
@@ -304,6 +304,22 @@ NaNneg:0
-inf:0
NaNneg:0
+&is_non_negative
+0:1
+-1:0
+1:1
++inf:1
+-inf:0
+NaN:0
+
+&is_non_positive
+0:1
+-1:1
+1:0
++inf:0
+-inf:1
+NaN:0
+
&is_odd
abc:0
0:0
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.t
index b373ceb56ae..552c8ae5117 100755
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.t
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.t
@@ -3,7 +3,7 @@
use strict;
use warnings;
-use Test::More tests => 2196 # tests in require'd file
+use Test::More tests => 2208 # tests in require'd file
+ 2; # tests in this file
use Math::BigInt upgrade => 'Math::BigFloat';
diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/with_sub.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/with_sub.t
index ca789275124..0ce15d10cb9 100755
--- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/with_sub.t
+++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/with_sub.t
@@ -5,7 +5,7 @@
use strict;
use warnings;
-use Test::More tests => 2818 # tests in require'd file
+use Test::More tests => 2830 # tests in require'd file
+ 1; # tests in this file
use Math::BigFloat with => 'Math::BigInt::Subclass',
diff --git a/gnu/usr.bin/perl/cpan/Module-Load-Conditional/lib/Module/Load/Conditional.pm b/gnu/usr.bin/perl/cpan/Module-Load-Conditional/lib/Module/Load/Conditional.pm
index 89e22b57207..b0685d2ec12 100644
--- a/gnu/usr.bin/perl/cpan/Module-Load-Conditional/lib/Module/Load/Conditional.pm
+++ b/gnu/usr.bin/perl/cpan/Module-Load-Conditional/lib/Module/Load/Conditional.pm
@@ -22,7 +22,7 @@ BEGIN {
$FIND_VERSION $ERROR $CHECK_INC_HASH $FORCE_SAFE_INC ];
use Exporter;
@ISA = qw[Exporter];
- $VERSION = '0.68';
+ $VERSION = '0.70';
$VERBOSE = 0;
$DEPRECATED = 0;
$FIND_VERSION = 1;
@@ -259,13 +259,19 @@ sub check_install {
last DIR unless $FIND_VERSION;
### otherwise, the user wants us to find the version from files
- my $mod_info = Module::Metadata->new_from_handle( $fh, $filename );
- my $ver = $mod_info->version( $args->{module} );
- if( defined $ver ) {
- $href->{version} = $ver;
+ {
+ local $SIG{__WARN__} = sub {};
+ my $ver = eval {
+ my $mod_info = Module::Metadata->new_from_handle( $fh, $filename );
+ $mod_info->version( $args->{module} );
+ };
- last DIR;
+ if( defined $ver ) {
+ $href->{version} = $ver;
+
+ last DIR;
+ }
}
}
}
diff --git a/gnu/usr.bin/perl/cpan/Module-Metadata/lib/Module/Metadata.pm b/gnu/usr.bin/perl/cpan/Module-Metadata/lib/Module/Metadata.pm
index ecc535f03b0..0309d768ae8 100644
--- a/gnu/usr.bin/perl/cpan/Module-Metadata/lib/Module/Metadata.pm
+++ b/gnu/usr.bin/perl/cpan/Module-Metadata/lib/Module/Metadata.pm
@@ -1,6 +1,6 @@
# -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*-
# vim:ts=8:sw=2:et:sta:sts=2:tw=78
-package Module::Metadata; # git description: v1.000035-3-gaa51be1
+package Module::Metadata; # git description: v1.000036-4-g435a294
# ABSTRACT: Gather package and POD information from perl module files
# Adapted from Perl-licensed code originally distributed with
@@ -14,7 +14,7 @@ sub __clean_eval { eval $_[0] }
use strict;
use warnings;
-our $VERSION = '1.000036';
+our $VERSION = '1.000037';
use Carp qw/croak/;
use File::Spec;
@@ -383,7 +383,7 @@ sub _init {
my $handle = delete $props{handle};
my( %valid_props, @valid_props );
- @valid_props = qw( collect_pod inc );
+ @valid_props = qw( collect_pod inc decode_pod );
@valid_props{@valid_props} = delete( @props{@valid_props} );
warn "Unknown properties: @{[keys %props]}\n" if scalar( %props );
@@ -542,6 +542,7 @@ sub _parse_fh {
my $pod_sect = '';
my $pod_data = '';
my $in_end = 0;
+ my $encoding = '';
while (defined( my $line = <$fh> )) {
my $line_num = $.;
@@ -570,6 +571,9 @@ sub _parse_fh {
$pod_sect = $1;
}
elsif ( $self->{collect_pod} ) {
+ if ( $self->{decode_pod} && $line =~ /^=encoding ([\w-]+)/ ) {
+ $encoding = $1;
+ }
$pod_data .= "$line\n";
}
next;
@@ -658,6 +662,11 @@ sub _parse_fh {
$pod{$pod_sect} = $pod_data;
}
+ if ( $self->{decode_pod} && $encoding ) {
+ require Encode;
+ $_ = Encode::decode( $encoding, $_ ) for values %pod;
+ }
+
$self->{versions} = \%vers;
$self->{packages} = \@packages;
$self->{pod} = \%pod;
@@ -841,7 +850,7 @@ Module::Metadata - Gather package and POD information from perl module files
=head1 VERSION
-version 1.000036
+version 1.000037
=head1 SYNOPSIS
@@ -865,7 +874,7 @@ in the CPAN toolchain.
=head1 CLASS METHODS
-=head2 C<< new_from_file($filename, collect_pod => 1) >>
+=head2 C<< new_from_file($filename, collect_pod => 1, decode_pod => 1) >>
Constructs a C<Module::Metadata> object given the path to a file. Returns
undef if the filename does not exist.
@@ -878,7 +887,10 @@ If the file begins by an UTF-8, UTF-16BE or UTF-16LE byte-order mark, then
it is skipped before processing, and the content of the file is also decoded
appropriately starting from perl 5.8.
-=head2 C<< new_from_handle($handle, $filename, collect_pod => 1) >>
+Alternatively, if C<decode_pod> is set, it will decode the collected pod
+sections according to the C<=encoding> declaration.
+
+=head2 C<< new_from_handle($handle, $filename, collect_pod => 1, decode_pod => 1) >>
This works just like C<new_from_file>, except that a handle can be provided
as the first argument.
@@ -891,15 +903,15 @@ mandatory or undef will be returned.
You are responsible for setting the decoding layers on C<$handle> if
required.
-=head2 C<< new_from_module($module, collect_pod => 1, inc => \@dirs) >>
+=head2 C<< new_from_module($module, collect_pod => 1, inc => \@dirs, decode_pod => 1) >>
Constructs a C<Module::Metadata> object given a module or package name.
Returns undef if the module cannot be found.
-In addition to accepting the C<collect_pod> argument as described above,
-this method accepts a C<inc> argument which is a reference to an array of
-directories to search for the module. If none are given, the default is
-@INC.
+In addition to accepting the C<collect_pod> and C<decode_pod> arguments as
+described above, this method accepts a C<inc> argument which is a reference to
+an array of directories to search for the module. If none are given, the
+default is @INC.
If the file that contains the module begins by an UTF-8, UTF-16BE or
UTF-16LE byte-order mark, then it is skipped before processing, and the
@@ -1070,7 +1082,7 @@ assistance from David Golden (xdg) <dagolden@cpan.org>.
=head1 CONTRIBUTORS
-=for stopwords Karen Etheridge David Golden Vincent Pit Matt S Trout Chris Nehren Graham Knop Olivier Mengué Tomas Doran tokuhirom Christian Walde Tatsuhiko Miyagawa Peter Rabbitson Steve Hay Jerry D. Hedden Craig A. Berry Mitchell Steinbrunner Edward Zborowski Gareth Harper James Raspass 'BinGOs' Williams Josh Jore Kent Fredric
+=for stopwords Karen Etheridge David Golden Vincent Pit Matt S Trout Chris Nehren Tomas Doran Olivier Mengué Graham Knop tokuhirom Tatsuhiko Miyagawa Christian Walde Leon Timmermans Peter Rabbitson Steve Hay Jerry D. Hedden Craig A. Berry Mitchell Steinbrunner Edward Zborowski Gareth Harper James Raspass 'BinGOs' Williams Josh Jore Kent Fredric
=over 4
@@ -1096,7 +1108,7 @@ Chris Nehren <apeiron@cpan.org>
=item *
-Graham Knop <haarg@haarg.org>
+Tomas Doran <bobtfish@bobtfish.net>
=item *
@@ -1104,7 +1116,7 @@ Olivier Mengué <dolmen@cpan.org>
=item *
-Tomas Doran <bobtfish@bobtfish.net>
+Graham Knop <haarg@haarg.org>
=item *
@@ -1112,11 +1124,15 @@ tokuhirom <tokuhirom@gmail.com>
=item *
+Tatsuhiko Miyagawa <miyagawa@bulknews.net>
+
+=item *
+
Christian Walde <walde.christian@googlemail.com>
=item *
-Tatsuhiko Miyagawa <miyagawa@bulknews.net>
+Leon Timmermans <fawaka@gmail.com>
=item *
diff --git a/gnu/usr.bin/perl/cpan/Module-Metadata/t/metadata.t b/gnu/usr.bin/perl/cpan/Module-Metadata/t/metadata.t
index 0f2e414c7fc..3eea8d96663 100644
--- a/gnu/usr.bin/perl/cpan/Module-Metadata/t/metadata.t
+++ b/gnu/usr.bin/perl/cpan/Module-Metadata/t/metadata.t
@@ -3,6 +3,7 @@
use strict;
use warnings;
+use Encode 'decode';
use Test::More 0.82;
use IO::File;
use File::Spec;
@@ -16,7 +17,7 @@ use GeneratePackage;
my $tmpdir = GeneratePackage::tmpdir();
-plan tests => 71;
+plan tests => 72;
require_ok('Module::Metadata');
@@ -209,13 +210,15 @@ $VERSION = '0.01';
package Simple::Ex;
$VERSION = '0.02';
+=encoding UTF-8
+
=head1 NAME
Simple - It's easy.
=head1 AUTHOR
-Simple Simon
+Símple Simon
You can find me on the IRC channel
#simon on irc.perl.org.
@@ -270,7 +273,7 @@ You can find me on the IRC channel
my %expected = (
NAME => q|Simple - It's easy.|,
AUTHOR => <<'EXPECTED'
-Simple Simon
+Símple Simon
You can find me on the IRC channel
#simon on irc.perl.org.
@@ -282,6 +285,13 @@ EXPECTED
}
is( $pod{NAME}, $expected{NAME}, 'collected NAME pod section' );
is( $pod{AUTHOR}, $expected{AUTHOR}, 'collected AUTHOR pod section' );
+
+ my $pm_info2 = Module::Metadata->new_from_module(
+ 'Simple', inc => [ 'lib', @INC ], collect_pod => 1, decode_pod => 1 );
+ my $author = $pm_info2->pod( 'AUTHOR' );
+ $author =~ s/^\s+//;
+ $author =~ s/\s+$//;
+ is( $author, decode('UTF-8', $expected{AUTHOR} ), 'collected AUTHOR pod section in UTF-8' );
}
{
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Find.pm b/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Find.pm
deleted file mode 100644
index f258f26df68..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Find.pm
+++ /dev/null
@@ -1,553 +0,0 @@
-#############################################################################
-# Pod/Find.pm -- finds files containing POD documentation
-#
-# Author: Marek Rouchal <marekr@cpan.org>
-#
-# Copyright (C) 1999-2000 by Marek Rouchal (and borrowing code
-# from Nick Ing-Simmon's PodToHtml). All rights reserved.
-# This file is part of "PodParser". Pod::Find is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::Find;
-use strict;
-
-use vars qw($VERSION);
-$VERSION = '1.63'; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-use Carp;
-
-BEGIN {
- if ($] < 5.006) {
- require Symbol;
- import Symbol;
- }
-}
-
-#############################################################################
-
-=head1 NAME
-
-Pod::Find - find POD documents in directory trees
-
-=head1 SYNOPSIS
-
- use Pod::Find qw(pod_find simplify_name);
- my %pods = pod_find({ -verbose => 1, -inc => 1 });
- foreach(keys %pods) {
- print "found library POD `$pods{$_}' in $_\n";
- }
-
- print "podname=",simplify_name('a/b/c/mymodule.pod'),"\n";
-
- $location = pod_where( { -inc => 1 }, "Pod::Find" );
-
-=head1 DESCRIPTION
-
-B<NOTE: This module is considered legacy; modern Perl releases (5.18 and
-higher) are going to remove Pod-Parser from core and use L<Pod-Simple>
-for all things POD.>
-
-B<Pod::Find> provides a set of functions to locate POD files. Note that
-no function is exported by default to avoid pollution of your namespace,
-so be sure to specify them in the B<use> statement if you need them:
-
- use Pod::Find qw(pod_find);
-
-From this version on the typical SCM (software configuration management)
-directories are ignored. These are: RCS, CVS, SCCS, .svn, .hg, .git, .sync
-
-=cut
-
-#use diagnostics;
-use Exporter;
-use File::Spec;
-use File::Find;
-use Cwd qw(abs_path cwd);
-
-use vars qw(@ISA @EXPORT_OK $VERSION);
-@ISA = qw(Exporter);
-@EXPORT_OK = qw(&pod_find &simplify_name &pod_where &contains_pod);
-
-# package global variables
-my $SIMPLIFY_RX;
-
-=head2 C<pod_find( { %opts } , @directories )>
-
-The function B<pod_find> searches for POD documents in a given set of
-files and/or directories. It returns a hash with the file names as keys
-and the POD name as value. The POD name is derived from the file name
-and its position in the directory tree.
-
-E.g. when searching in F<$HOME/perl5lib>, the file
-F<$HOME/perl5lib/MyModule.pm> would get the POD name I<MyModule>,
-whereas F<$HOME/perl5lib/Myclass/Subclass.pm> would be
-I<Myclass::Subclass>. The name information can be used for POD
-translators.
-
-Only text files containing at least one valid POD command are found.
-
-A warning is printed if more than one POD file with the same POD name
-is found, e.g. F<CPAN.pm> in different directories. This usually
-indicates duplicate occurrences of modules in the I<@INC> search path.
-
-B<OPTIONS> The first argument for B<pod_find> may be a hash reference
-with options. The rest are either directories that are searched
-recursively or files. The POD names of files are the plain basenames
-with any Perl-like extension (.pm, .pl, .pod) stripped.
-
-=over 4
-
-=item C<-verbose =E<gt> 1>
-
-Print progress information while scanning.
-
-=item C<-perl =E<gt> 1>
-
-Apply Perl-specific heuristics to find the correct PODs. This includes
-stripping Perl-like extensions, omitting subdirectories that are numeric
-but do I<not> match the current Perl interpreter's version id, suppressing
-F<site_perl> as a module hierarchy name etc.
-
-=item C<-script =E<gt> 1>
-
-Search for PODs in the current Perl interpreter's installation
-B<scriptdir>. This is taken from the local L<Config|Config> module.
-
-=item C<-inc =E<gt> 1>
-
-Search for PODs in the current Perl interpreter's I<@INC> paths. This
-automatically considers paths specified in the C<PERL5LIB> environment
-as this is included in I<@INC> by the Perl interpreter itself.
-
-=back
-
-=cut
-
-# return a hash of the POD files found
-# first argument may be a hashref (options),
-# rest is a list of directories to search recursively
-sub pod_find
-{
- my %opts;
- if(ref $_[0]) {
- %opts = %{shift()};
- }
-
- $opts{-verbose} ||= 0;
- $opts{-perl} ||= 0;
-
- my (@search) = @_;
-
- if($opts{-script}) {
- require Config;
- push(@search, $Config::Config{scriptdir})
- if -d $Config::Config{scriptdir};
- $opts{-perl} = 1;
- }
-
- if($opts{-inc}) {
- if ($^O eq 'MacOS') {
- # tolerate '.', './some_dir' and '(../)+some_dir' on Mac OS
- my @new_INC = @INC;
- for (@new_INC) {
- if ( $_ eq '.' ) {
- $_ = ':';
- } elsif ( $_ =~ s{^((?:\.\./)+)}{':' x (length($1)/3)}e ) {
- $_ = ':'. $_;
- } else {
- $_ =~ s{^\./}{:};
- }
- }
- push(@search, grep($_ ne File::Spec->curdir, @new_INC));
- } else {
- my %seen;
- my $curdir = File::Spec->curdir;
- foreach(@INC) {
- next if $_ eq $curdir;
- my $path = abs_path($_);
- push(@search, $path) unless $seen{$path}++;
- }
- }
-
- $opts{-perl} = 1;
- }
-
- if($opts{-perl}) {
- require Config;
- # this code simplifies the POD name for Perl modules:
- # * remove "site_perl"
- # * remove e.g. "i586-linux" (from 'archname')
- # * remove e.g. 5.00503
- # * remove pod/ if followed by *.pod (e.g. in pod/perlfunc.pod)
-
- # Mac OS:
- # * remove ":?site_perl:"
- # * remove :?pod: if followed by *.pod (e.g. in :pod:perlfunc.pod)
-
- if ($^O eq 'MacOS') {
- $SIMPLIFY_RX =
- qq!^(?i:\:?site_perl\:|\:?pod\:(?=.*?\\.pod\\z))*!;
- } else {
- $SIMPLIFY_RX =
- qq!^(?i:site(_perl)?/|\Q$Config::Config{archname}\E/|\\d+\\.\\d+([_.]?\\d+)?/|pod/(?=.*?\\.pod\\z))*!;
- }
- }
-
- my %dirs_visited;
- my %pods;
- my %names;
- my $pwd = cwd();
-
- foreach my $try (@search) {
- unless(File::Spec->file_name_is_absolute($try)) {
- # make path absolute
- $try = File::Spec->catfile($pwd,$try);
- }
- # simplify path
- # on VMS canonpath will vmsify:[the.path], but File::Find::find
- # wants /unixy/paths
- if ($^O eq 'VMS') {
- $try = VMS::Filespec::unixify($try);
- }
- else {
- $try = File::Spec->canonpath($try);
- }
- my $name;
- if(-f $try) {
- if($name = _check_and_extract_name($try, $opts{-verbose})) {
- _check_for_duplicates($try, $name, \%names, \%pods);
- }
- next;
- }
- my $root_rx = $^O eq 'MacOS' ? qq!^\Q$try\E! : qq!^\Q$try\E/!;
- $root_rx=~ s|//$|/|; # remove trailing double slash
- File::Find::find( sub {
- my $item = $File::Find::name;
- if(-d) {
- if($item =~ m{/(?:RCS|CVS|SCCS|\.svn|\.hg|\.git|\.sync)$}) {
- $File::Find::prune = 1;
- return;
- }
- elsif($dirs_visited{$item}) {
- warn "Directory '$item' already seen, skipping.\n"
- if($opts{-verbose});
- $File::Find::prune = 1;
- return;
- }
- else {
- $dirs_visited{$item} = 1;
- }
- if($opts{-perl} && /^(\d+\.[\d_]+)\z/s && eval "$1" != $]) {
- $File::Find::prune = 1;
- warn "Perl $] version mismatch on $_, skipping.\n"
- if($opts{-verbose});
- }
- return;
- }
- if($name = _check_and_extract_name($item, $opts{-verbose}, $root_rx)) {
- _check_for_duplicates($item, $name, \%names, \%pods);
- }
- }, $try); # end of File::Find::find
- }
- chdir $pwd;
- return %pods;
-}
-
-sub _check_for_duplicates {
- my ($file, $name, $names_ref, $pods_ref) = @_;
- if($$names_ref{$name}) {
- warn "Duplicate POD found (shadowing?): $name ($file)\n";
- warn ' Already seen in ',
- join(' ', grep($$pods_ref{$_} eq $name, keys %$pods_ref)),"\n";
- }
- else {
- $$names_ref{$name} = 1;
- }
- return $$pods_ref{$file} = $name;
-}
-
-sub _check_and_extract_name {
- my ($file, $verbose, $root_rx) = @_;
-
- # check extension or executable flag
- # this involves testing the .bat extension on Win32!
- unless(-f $file && -T $file && ($file =~ /\.(pod|pm|plx?)\z/i || -x $file )) {
- return;
- }
-
- return unless contains_pod($file,$verbose);
-
- # strip non-significant path components
- # TODO what happens on e.g. Win32?
- my $name = $file;
- if(defined $root_rx) {
- $name =~ s/$root_rx//is;
- $name =~ s/$SIMPLIFY_RX//is if(defined $SIMPLIFY_RX);
- }
- else {
- if ($^O eq 'MacOS') {
- $name =~ s/^.*://s;
- } else {
- $name =~ s{^.*/}{}s;
- }
- }
- _simplify($name);
- $name =~ s{/+}{::}g;
- if ($^O eq 'MacOS') {
- $name =~ s{:+}{::}g; # : -> ::
- } else {
- $name =~ s{/+}{::}g; # / -> ::
- }
- return $name;
-}
-
-=head2 C<simplify_name( $str )>
-
-The function B<simplify_name> is equivalent to B<basename>, but also
-strips Perl-like extensions (.pm, .pl, .pod) and extensions like
-F<.bat>, F<.cmd> on Win32 and OS/2, or F<.com> on VMS, respectively.
-
-=cut
-
-# basic simplification of the POD name:
-# basename & strip extension
-sub simplify_name {
- my ($str) = @_;
- # remove all path components
- if ($^O eq 'MacOS') {
- $str =~ s/^.*://s;
- } else {
- $str =~ s{^.*/}{}s;
- }
- _simplify($str);
- return $str;
-}
-
-# internal sub only
-sub _simplify {
- # strip Perl's own extensions
- $_[0] =~ s/\.(pod|pm|plx?)\z//i;
- # strip meaningless extensions on Win32 and OS/2
- $_[0] =~ s/\.(bat|exe|cmd)\z//i if($^O =~ /mswin|os2/i);
- # strip meaningless extensions on VMS
- $_[0] =~ s/\.(com)\z//i if($^O eq 'VMS');
-}
-
-# contribution from Tim Jenness <t.jenness@jach.hawaii.edu>
-
-=head2 C<pod_where( { %opts }, $pod )>
-
-Returns the location of a pod document given a search directory
-and a module (e.g. C<File::Find>) or script (e.g. C<perldoc>) name.
-
-Options:
-
-=over 4
-
-=item C<-inc =E<gt> 1>
-
-Search @INC for the pod and also the C<scriptdir> defined in the
-L<Config|Config> module.
-
-=item C<-dirs =E<gt> [ $dir1, $dir2, ... ]>
-
-Reference to an array of search directories. These are searched in order
-before looking in C<@INC> (if B<-inc>). Current directory is used if
-none are specified.
-
-=item C<-verbose =E<gt> 1>
-
-List directories as they are searched
-
-=back
-
-Returns the full path of the first occurrence to the file.
-Package names (eg 'A::B') are automatically converted to directory
-names in the selected directory. (eg on unix 'A::B' is converted to
-'A/B'). Additionally, '.pm', '.pl' and '.pod' are appended to the
-search automatically if required.
-
-A subdirectory F<pod/> is also checked if it exists in any of the given
-search directories. This ensures that e.g. L<perlfunc|perlfunc> is
-found.
-
-It is assumed that if a module name is supplied, that that name
-matches the file name. Pods are not opened to check for the 'NAME'
-entry.
-
-A check is made to make sure that the file that is found does
-contain some pod documentation.
-
-=cut
-
-sub pod_where {
-
- # default options
- my %options = (
- '-inc' => 0,
- '-verbose' => 0,
- '-dirs' => [ File::Spec->curdir ],
- );
-
- # Check for an options hash as first argument
- if (defined $_[0] && ref($_[0]) eq 'HASH') {
- my $opt = shift;
-
- # Merge default options with supplied options
- %options = (%options, %$opt);
- }
-
- # Check usage
- carp 'Usage: pod_where({options}, $pod)' unless (scalar(@_));
-
- # Read argument
- my $pod = shift;
-
- # Split on :: and then join the name together using File::Spec
- my @parts = split (/::/, $pod);
-
- # Get full directory list
- my @search_dirs = @{ $options{'-dirs'} };
-
- if ($options{'-inc'}) {
-
- require Config;
-
- # Add @INC
- if ($^O eq 'MacOS' && $options{'-inc'}) {
- # tolerate '.', './some_dir' and '(../)+some_dir' on Mac OS
- my @new_INC = @INC;
- for (@new_INC) {
- if ( $_ eq '.' ) {
- $_ = ':';
- } elsif ( $_ =~ s{^((?:\.\./)+)}{':' x (length($1)/3)}e ) {
- $_ = ':'. $_;
- } else {
- $_ =~ s{^\./}{:};
- }
- }
- push (@search_dirs, @new_INC);
- } elsif ($options{'-inc'}) {
- push (@search_dirs, @INC);
- }
-
- # Add location of pod documentation for perl man pages (eg perlfunc)
- # This is a pod directory in the private install tree
- #my $perlpoddir = File::Spec->catdir($Config::Config{'installprivlib'},
- # 'pod');
- #push (@search_dirs, $perlpoddir)
- # if -d $perlpoddir;
-
- # Add location of binaries such as pod2text
- push (@search_dirs, $Config::Config{'scriptdir'})
- if -d $Config::Config{'scriptdir'};
- }
-
- warn 'Search path is: '.join(' ', @search_dirs)."\n"
- if $options{'-verbose'};
-
- # Loop over directories
- Dir: foreach my $dir ( @search_dirs ) {
-
- # Don't bother if can't find the directory
- if (-d $dir) {
- warn "Looking in directory $dir\n"
- if $options{'-verbose'};
-
- # Now concatenate this directory with the pod we are searching for
- my $fullname = File::Spec->catfile($dir, @parts);
- $fullname = VMS::Filespec::unixify($fullname) if $^O eq 'VMS';
- warn "Filename is now $fullname\n"
- if $options{'-verbose'};
-
- # Loop over possible extensions
- foreach my $ext ('', '.pod', '.pm', '.pl') {
- my $fullext = $fullname . $ext;
- if (-f $fullext &&
- contains_pod($fullext, $options{'-verbose'}) ) {
- warn "FOUND: $fullext\n" if $options{'-verbose'};
- return $fullext;
- }
- }
- } else {
- warn "Directory $dir does not exist\n"
- if $options{'-verbose'};
- next Dir;
- }
- # for some strange reason the path on MacOS/darwin/cygwin is
- # 'pods' not 'pod'
- # this could be the case also for other systems that
- # have a case-tolerant file system, but File::Spec
- # does not recognize 'darwin' yet. And cygwin also has "pods",
- # but is not case tolerant. Oh well...
- if((File::Spec->case_tolerant || $^O =~ /macos|darwin|cygwin/i)
- && -d File::Spec->catdir($dir,'pods')) {
- $dir = File::Spec->catdir($dir,'pods');
- redo Dir;
- }
- if(-d File::Spec->catdir($dir,'pod')) {
- $dir = File::Spec->catdir($dir,'pod');
- redo Dir;
- }
- }
- # No match;
- return;
-}
-
-=head2 C<contains_pod( $file , $verbose )>
-
-Returns true if the supplied filename (not POD module) contains some pod
-information.
-
-=cut
-
-sub contains_pod {
- my $file = shift;
- my $verbose = 0;
- $verbose = shift if @_;
-
- # check for one line of POD
- my $podfh;
- if ($] < 5.006) {
- $podfh = gensym();
- }
-
- unless(open($podfh,"<$file")) {
- warn "Error: $file is unreadable: $!\n";
- return;
- }
-
- local $/ = undef;
- my $pod = <$podfh>;
- close($podfh) || die "Error closing $file: $!\n";
- unless($pod =~ /^=(head\d|pod|over|item|cut)\b/m) {
- warn "No POD in $file, skipping.\n"
- if($verbose);
- return 0;
- }
-
- return 1;
-}
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Marek Rouchal E<lt>marekr@cpan.orgE<gt>,
-heavily borrowing code from Nick Ing-Simmons' PodToHtml.
-
-Tim Jenness E<lt>t.jenness@jach.hawaii.eduE<gt> provided
-C<pod_where> and C<contains_pod>.
-
-B<Pod::Find> is part of the L<Pod::Parser> distribution.
-
-=head1 SEE ALSO
-
-L<Pod::Parser>, L<Pod::Checker>, L<perldoc>
-
-=cut
-
-1;
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/InputObjects.pm b/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/InputObjects.pm
deleted file mode 100644
index c4d6fc24691..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/InputObjects.pm
+++ /dev/null
@@ -1,946 +0,0 @@
-#############################################################################
-# Pod/InputObjects.pm -- package which defines objects for input streams
-# and paragraphs and commands when parsing POD docs.
-#
-# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::InputObjects;
-use strict;
-
-use vars qw($VERSION);
-$VERSION = '1.63'; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-#############################################################################
-
-=head1 NAME
-
-Pod::InputObjects - objects representing POD input paragraphs, commands, etc.
-
-=head1 SYNOPSIS
-
- use Pod::InputObjects;
-
-=head1 REQUIRES
-
-perl5.004, Carp
-
-=head1 EXPORTS
-
-Nothing.
-
-=head1 DESCRIPTION
-
-B<NOTE: This module is considered legacy; modern Perl releases (5.18 and
-higher) are going to remove Pod-Parser from core and use L<Pod-Simple>
-for all things POD.>
-
-This module defines some basic input objects used by B<Pod::Parser> when
-reading and parsing POD text from an input source. The following objects
-are defined:
-
-=begin __PRIVATE__
-
-=over 4
-
-=item package B<Pod::InputSource>
-
-An object corresponding to a source of POD input text. It is mostly a
-wrapper around a filehandle or C<IO::Handle>-type object (or anything
-that implements the C<getline()> method) which keeps track of some
-additional information relevant to the parsing of PODs.
-
-=back
-
-=end __PRIVATE__
-
-=over 4
-
-=item package B<Pod::Paragraph>
-
-An object corresponding to a paragraph of POD input text. It may be a
-plain paragraph, a verbatim paragraph, or a command paragraph (see
-L<perlpod>).
-
-=item package B<Pod::InteriorSequence>
-
-An object corresponding to an interior sequence command from the POD
-input text (see L<perlpod>).
-
-=item package B<Pod::ParseTree>
-
-An object corresponding to a tree of parsed POD text. Each "node" in
-a parse-tree (or I<ptree>) is either a text-string or a reference to
-a B<Pod::InteriorSequence> object. The nodes appear in the parse-tree
-in the order in which they were parsed from left-to-right.
-
-=back
-
-Each of these input objects are described in further detail in the
-sections which follow.
-
-=cut
-
-#############################################################################
-
-package Pod::InputSource;
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head1 B<Pod::InputSource>
-
-This object corresponds to an input source or stream of POD
-documentation. When parsing PODs, it is necessary to associate and store
-certain context information with each input source. All of this
-information is kept together with the stream itself in one of these
-C<Pod::InputSource> objects. Each such object is merely a wrapper around
-an C<IO::Handle> object of some kind (or at least something that
-implements the C<getline()> method). They have the following
-methods/attributes:
-
-=end __PRIVATE__
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head2 B<new()>
-
- my $pod_input1 = Pod::InputSource->new(-handle => $filehandle);
- my $pod_input2 = new Pod::InputSource(-handle => $filehandle,
- -name => $name);
- my $pod_input3 = new Pod::InputSource(-handle => \*STDIN);
- my $pod_input4 = Pod::InputSource->new(-handle => \*STDIN,
- -name => "(STDIN)");
-
-This is a class method that constructs a C<Pod::InputSource> object and
-returns a reference to the new input source object. It takes one or more
-keyword arguments in the form of a hash. The keyword C<-handle> is
-required and designates the corresponding input handle. The keyword
-C<-name> is optional and specifies the name associated with the input
-handle (typically a file name).
-
-=end __PRIVATE__
-
-=cut
-
-sub new {
- ## Determine if we were called via an object-ref or a classname
- my $this = shift;
- my $class = ref($this) || $this;
-
- ## Any remaining arguments are treated as initial values for the
- ## hash that is used to represent this object. Note that we default
- ## certain values by specifying them *before* the arguments passed.
- ## If they are in the argument list, they will override the defaults.
- my $self = { -name => '(unknown)',
- -handle => undef,
- -was_cutting => 0,
- @_ };
-
- ## Bless ourselves into the desired class and perform any initialization
- bless $self, $class;
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head2 B<name()>
-
- my $filename = $pod_input->name();
- $pod_input->name($new_filename_to_use);
-
-This method gets/sets the name of the input source (usually a filename).
-If no argument is given, it returns a string containing the name of
-the input source; otherwise it sets the name of the input source to the
-contents of the given argument.
-
-=end __PRIVATE__
-
-=cut
-
-sub name {
- (@_ > 1) and $_[0]->{'-name'} = $_[1];
- return $_[0]->{'-name'};
-}
-
-## allow 'filename' as an alias for 'name'
-*filename = \&name;
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head2 B<handle()>
-
- my $handle = $pod_input->handle();
-
-Returns a reference to the handle object from which input is read (the
-one used to contructed this input source object).
-
-=end __PRIVATE__
-
-=cut
-
-sub handle {
- return $_[0]->{'-handle'};
-}
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head2 B<was_cutting()>
-
- print "Yes.\n" if ($pod_input->was_cutting());
-
-The value of the C<cutting> state (that the B<cutting()> method would
-have returned) immediately before any input was read from this input
-stream. After all input from this stream has been read, the C<cutting>
-state is restored to this value.
-
-=end __PRIVATE__
-
-=cut
-
-sub was_cutting {
- (@_ > 1) and $_[0]->{-was_cutting} = $_[1];
- return $_[0]->{-was_cutting};
-}
-
-##---------------------------------------------------------------------------
-
-#############################################################################
-
-package Pod::Paragraph;
-
-##---------------------------------------------------------------------------
-
-=head1 B<Pod::Paragraph>
-
-An object representing a paragraph of POD input text.
-It has the following methods/attributes:
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head2 Pod::Paragraph-E<gt>B<new()>
-
- my $pod_para1 = Pod::Paragraph->new(-text => $text);
- my $pod_para2 = Pod::Paragraph->new(-name => $cmd,
- -text => $text);
- my $pod_para3 = new Pod::Paragraph(-text => $text);
- my $pod_para4 = new Pod::Paragraph(-name => $cmd,
- -text => $text);
- my $pod_para5 = Pod::Paragraph->new(-name => $cmd,
- -text => $text,
- -file => $filename,
- -line => $line_number);
-
-This is a class method that constructs a C<Pod::Paragraph> object and
-returns a reference to the new paragraph object. It may be given one or
-two keyword arguments. The C<-text> keyword indicates the corresponding
-text of the POD paragraph. The C<-name> keyword indicates the name of
-the corresponding POD command, such as C<head1> or C<item> (it should
-I<not> contain the C<=> prefix); this is needed only if the POD
-paragraph corresponds to a command paragraph. The C<-file> and C<-line>
-keywords indicate the filename and line number corresponding to the
-beginning of the paragraph
-
-=cut
-
-sub new {
- ## Determine if we were called via an object-ref or a classname
- my $this = shift;
- my $class = ref($this) || $this;
-
- ## Any remaining arguments are treated as initial values for the
- ## hash that is used to represent this object. Note that we default
- ## certain values by specifying them *before* the arguments passed.
- ## If they are in the argument list, they will override the defaults.
- my $self = {
- -name => undef,
- -text => (@_ == 1) ? shift : undef,
- -file => '<unknown-file>',
- -line => 0,
- -prefix => '=',
- -separator => ' ',
- -ptree => [],
- @_
- };
-
- ## Bless ourselves into the desired class and perform any initialization
- bless $self, $class;
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<cmd_name()>
-
- my $para_cmd = $pod_para->cmd_name();
-
-If this paragraph is a command paragraph, then this method will return
-the name of the command (I<without> any leading C<=> prefix).
-
-=cut
-
-sub cmd_name {
- (@_ > 1) and $_[0]->{'-name'} = $_[1];
- return $_[0]->{'-name'};
-}
-
-## let name() be an alias for cmd_name()
-*name = \&cmd_name;
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<text()>
-
- my $para_text = $pod_para->text();
-
-This method will return the corresponding text of the paragraph.
-
-=cut
-
-sub text {
- (@_ > 1) and $_[0]->{'-text'} = $_[1];
- return $_[0]->{'-text'};
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<raw_text()>
-
- my $raw_pod_para = $pod_para->raw_text();
-
-This method will return the I<raw> text of the POD paragraph, exactly
-as it appeared in the input.
-
-=cut
-
-sub raw_text {
- return $_[0]->{'-text'} unless (defined $_[0]->{'-name'});
- return $_[0]->{'-prefix'} . $_[0]->{'-name'} .
- $_[0]->{'-separator'} . $_[0]->{'-text'};
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<cmd_prefix()>
-
- my $prefix = $pod_para->cmd_prefix();
-
-If this paragraph is a command paragraph, then this method will return
-the prefix used to denote the command (which should be the string "="
-or "==").
-
-=cut
-
-sub cmd_prefix {
- return $_[0]->{'-prefix'};
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<cmd_separator()>
-
- my $separator = $pod_para->cmd_separator();
-
-If this paragraph is a command paragraph, then this method will return
-the text used to separate the command name from the rest of the
-paragraph (if any).
-
-=cut
-
-sub cmd_separator {
- return $_[0]->{'-separator'};
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<parse_tree()>
-
- my $ptree = $pod_parser->parse_text( $pod_para->text() );
- $pod_para->parse_tree( $ptree );
- $ptree = $pod_para->parse_tree();
-
-This method will get/set the corresponding parse-tree of the paragraph's text.
-
-=cut
-
-sub parse_tree {
- (@_ > 1) and $_[0]->{'-ptree'} = $_[1];
- return $_[0]->{'-ptree'};
-}
-
-## let ptree() be an alias for parse_tree()
-*ptree = \&parse_tree;
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_para-E<gt>B<file_line()>
-
- my ($filename, $line_number) = $pod_para->file_line();
- my $position = $pod_para->file_line();
-
-Returns the current filename and line number for the paragraph
-object. If called in a list context, it returns a list of two
-elements: first the filename, then the line number. If called in
-a scalar context, it returns a string containing the filename, followed
-by a colon (':'), followed by the line number.
-
-=cut
-
-sub file_line {
- my @loc = ($_[0]->{'-file'} || '<unknown-file>',
- $_[0]->{'-line'} || 0);
- return (wantarray) ? @loc : join(':', @loc);
-}
-
-##---------------------------------------------------------------------------
-
-#############################################################################
-
-package Pod::InteriorSequence;
-
-##---------------------------------------------------------------------------
-
-=head1 B<Pod::InteriorSequence>
-
-An object representing a POD interior sequence command.
-It has the following methods/attributes:
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head2 Pod::InteriorSequence-E<gt>B<new()>
-
- my $pod_seq1 = Pod::InteriorSequence->new(-name => $cmd
- -ldelim => $delimiter);
- my $pod_seq2 = new Pod::InteriorSequence(-name => $cmd,
- -ldelim => $delimiter);
- my $pod_seq3 = new Pod::InteriorSequence(-name => $cmd,
- -ldelim => $delimiter,
- -file => $filename,
- -line => $line_number);
-
- my $pod_seq4 = new Pod::InteriorSequence(-name => $cmd, $ptree);
- my $pod_seq5 = new Pod::InteriorSequence($cmd, $ptree);
-
-This is a class method that constructs a C<Pod::InteriorSequence> object
-and returns a reference to the new interior sequence object. It should
-be given two keyword arguments. The C<-ldelim> keyword indicates the
-corresponding left-delimiter of the interior sequence (e.g. 'E<lt>').
-The C<-name> keyword indicates the name of the corresponding interior
-sequence command, such as C<I> or C<B> or C<C>. The C<-file> and
-C<-line> keywords indicate the filename and line number corresponding
-to the beginning of the interior sequence. If the C<$ptree> argument is
-given, it must be the last argument, and it must be either string, or
-else an array-ref suitable for passing to B<Pod::ParseTree::new> (or
-it may be a reference to a Pod::ParseTree object).
-
-=cut
-
-sub new {
- ## Determine if we were called via an object-ref or a classname
- my $this = shift;
- my $class = ref($this) || $this;
-
- ## See if first argument has no keyword
- if (((@_ <= 2) or (@_ % 2)) and $_[0] !~ /^-\w/) {
- ## Yup - need an implicit '-name' before first parameter
- unshift @_, '-name';
- }
-
- ## See if odd number of args
- if ((@_ % 2) != 0) {
- ## Yup - need an implicit '-ptree' before the last parameter
- splice @_, $#_, 0, '-ptree';
- }
-
- ## Any remaining arguments are treated as initial values for the
- ## hash that is used to represent this object. Note that we default
- ## certain values by specifying them *before* the arguments passed.
- ## If they are in the argument list, they will override the defaults.
- my $self = {
- -name => (@_ == 1) ? $_[0] : undef,
- -file => '<unknown-file>',
- -line => 0,
- -ldelim => '<',
- -rdelim => '>',
- @_
- };
-
- ## Initialize contents if they haven't been already
- my $ptree = $self->{'-ptree'} || new Pod::ParseTree();
- if ( ref $ptree =~ /^(ARRAY)?$/ ) {
- ## We have an array-ref, or a normal scalar. Pass it as an
- ## an argument to the ptree-constructor
- $ptree = new Pod::ParseTree($1 ? [$ptree] : $ptree);
- }
- $self->{'-ptree'} = $ptree;
-
- ## Bless ourselves into the desired class and perform any initialization
- bless $self, $class;
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<cmd_name()>
-
- my $seq_cmd = $pod_seq->cmd_name();
-
-The name of the interior sequence command.
-
-=cut
-
-sub cmd_name {
- (@_ > 1) and $_[0]->{'-name'} = $_[1];
- return $_[0]->{'-name'};
-}
-
-## let name() be an alias for cmd_name()
-*name = \&cmd_name;
-
-##---------------------------------------------------------------------------
-
-## Private subroutine to set the parent pointer of all the given
-## children that are interior-sequences to be $self
-
-sub _set_child2parent_links {
- my ($self, @children) = @_;
- ## Make sure any sequences know who their parent is
- for (@children) {
- next unless (length and ref and ref ne 'SCALAR');
- if (UNIVERSAL::isa($_, 'Pod::InteriorSequence') or
- UNIVERSAL::can($_, 'nested'))
- {
- $_->nested($self);
- }
- }
-}
-
-## Private subroutine to unset child->parent links
-
-sub _unset_child2parent_links {
- my $self = shift;
- $self->{'-parent_sequence'} = undef;
- my $ptree = $self->{'-ptree'};
- for (@$ptree) {
- next unless (length and ref and ref ne 'SCALAR');
- $_->_unset_child2parent_links()
- if UNIVERSAL::isa($_, 'Pod::InteriorSequence');
- }
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<prepend()>
-
- $pod_seq->prepend($text);
- $pod_seq1->prepend($pod_seq2);
-
-Prepends the given string or parse-tree or sequence object to the parse-tree
-of this interior sequence.
-
-=cut
-
-sub prepend {
- my $self = shift;
- $self->{'-ptree'}->prepend(@_);
- _set_child2parent_links($self, @_);
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<append()>
-
- $pod_seq->append($text);
- $pod_seq1->append($pod_seq2);
-
-Appends the given string or parse-tree or sequence object to the parse-tree
-of this interior sequence.
-
-=cut
-
-sub append {
- my $self = shift;
- $self->{'-ptree'}->append(@_);
- _set_child2parent_links($self, @_);
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<nested()>
-
- $outer_seq = $pod_seq->nested || print "not nested";
-
-If this interior sequence is nested inside of another interior
-sequence, then the outer/parent sequence that contains it is
-returned. Otherwise C<undef> is returned.
-
-=cut
-
-sub nested {
- my $self = shift;
- (@_ == 1) and $self->{'-parent_sequence'} = shift;
- return $self->{'-parent_sequence'} || undef;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<raw_text()>
-
- my $seq_raw_text = $pod_seq->raw_text();
-
-This method will return the I<raw> text of the POD interior sequence,
-exactly as it appeared in the input.
-
-=cut
-
-sub raw_text {
- my $self = shift;
- my $text = $self->{'-name'} . $self->{'-ldelim'};
- for ( $self->{'-ptree'}->children ) {
- $text .= (ref $_) ? $_->raw_text : $_;
- }
- $text .= $self->{'-rdelim'};
- return $text;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<left_delimiter()>
-
- my $ldelim = $pod_seq->left_delimiter();
-
-The leftmost delimiter beginning the argument text to the interior
-sequence (should be "<").
-
-=cut
-
-sub left_delimiter {
- (@_ > 1) and $_[0]->{'-ldelim'} = $_[1];
- return $_[0]->{'-ldelim'};
-}
-
-## let ldelim() be an alias for left_delimiter()
-*ldelim = \&left_delimiter;
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<right_delimiter()>
-
-The rightmost delimiter beginning the argument text to the interior
-sequence (should be ">").
-
-=cut
-
-sub right_delimiter {
- (@_ > 1) and $_[0]->{'-rdelim'} = $_[1];
- return $_[0]->{'-rdelim'};
-}
-
-## let rdelim() be an alias for right_delimiter()
-*rdelim = \&right_delimiter;
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<parse_tree()>
-
- my $ptree = $pod_parser->parse_text($paragraph_text);
- $pod_seq->parse_tree( $ptree );
- $ptree = $pod_seq->parse_tree();
-
-This method will get/set the corresponding parse-tree of the interior
-sequence's text.
-
-=cut
-
-sub parse_tree {
- (@_ > 1) and $_[0]->{'-ptree'} = $_[1];
- return $_[0]->{'-ptree'};
-}
-
-## let ptree() be an alias for parse_tree()
-*ptree = \&parse_tree;
-
-##---------------------------------------------------------------------------
-
-=head2 $pod_seq-E<gt>B<file_line()>
-
- my ($filename, $line_number) = $pod_seq->file_line();
- my $position = $pod_seq->file_line();
-
-Returns the current filename and line number for the interior sequence
-object. If called in a list context, it returns a list of two
-elements: first the filename, then the line number. If called in
-a scalar context, it returns a string containing the filename, followed
-by a colon (':'), followed by the line number.
-
-=cut
-
-sub file_line {
- my @loc = ($_[0]->{'-file'} || '<unknown-file>',
- $_[0]->{'-line'} || 0);
- return (wantarray) ? @loc : join(':', @loc);
-}
-
-##---------------------------------------------------------------------------
-
-=head2 Pod::InteriorSequence::B<DESTROY()>
-
-This method performs any necessary cleanup for the interior-sequence.
-If you override this method then it is B<imperative> that you invoke
-the parent method from within your own method, otherwise
-I<interior-sequence storage will not be reclaimed upon destruction!>
-
-=cut
-
-sub DESTROY {
- ## We need to get rid of all child->parent pointers throughout the
- ## tree so their reference counts will go to zero and they can be
- ## garbage-collected
- _unset_child2parent_links(@_);
-}
-
-##---------------------------------------------------------------------------
-
-#############################################################################
-
-package Pod::ParseTree;
-
-##---------------------------------------------------------------------------
-
-=head1 B<Pod::ParseTree>
-
-This object corresponds to a tree of parsed POD text. As POD text is
-scanned from left to right, it is parsed into an ordered list of
-text-strings and B<Pod::InteriorSequence> objects (in order of
-appearance). A B<Pod::ParseTree> object corresponds to this list of
-strings and sequences. Each interior sequence in the parse-tree may
-itself contain a parse-tree (since interior sequences may be nested).
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head2 Pod::ParseTree-E<gt>B<new()>
-
- my $ptree1 = Pod::ParseTree->new;
- my $ptree2 = new Pod::ParseTree;
- my $ptree4 = Pod::ParseTree->new($array_ref);
- my $ptree3 = new Pod::ParseTree($array_ref);
-
-This is a class method that constructs a C<Pod::Parse_tree> object and
-returns a reference to the new parse-tree. If a single-argument is given,
-it must be a reference to an array, and is used to initialize the root
-(top) of the parse tree.
-
-=cut
-
-sub new {
- ## Determine if we were called via an object-ref or a classname
- my $this = shift;
- my $class = ref($this) || $this;
-
- my $self = (@_ == 1 and ref $_[0]) ? $_[0] : [];
-
- ## Bless ourselves into the desired class and perform any initialization
- bless $self, $class;
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $ptree-E<gt>B<top()>
-
- my $top_node = $ptree->top();
- $ptree->top( $top_node );
- $ptree->top( @children );
-
-This method gets/sets the top node of the parse-tree. If no arguments are
-given, it returns the topmost node in the tree (the root), which is also
-a B<Pod::ParseTree>. If it is given a single argument that is a reference,
-then the reference is assumed to a parse-tree and becomes the new top node.
-Otherwise, if arguments are given, they are treated as the new list of
-children for the top node.
-
-=cut
-
-sub top {
- my $self = shift;
- if (@_ > 0) {
- @{ $self } = (@_ == 1 and ref $_[0]) ? ${ @_ } : @_;
- }
- return $self;
-}
-
-## let parse_tree() & ptree() be aliases for the 'top' method
-*parse_tree = *ptree = \&top;
-
-##---------------------------------------------------------------------------
-
-=head2 $ptree-E<gt>B<children()>
-
-This method gets/sets the children of the top node in the parse-tree.
-If no arguments are given, it returns the list (array) of children
-(each of which should be either a string or a B<Pod::InteriorSequence>.
-Otherwise, if arguments are given, they are treated as the new list of
-children for the top node.
-
-=cut
-
-sub children {
- my $self = shift;
- if (@_ > 0) {
- @{ $self } = (@_ == 1 and ref $_[0]) ? ${ @_ } : @_;
- }
- return @{ $self };
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $ptree-E<gt>B<prepend()>
-
-This method prepends the given text or parse-tree to the current parse-tree.
-If the first item on the parse-tree is text and the argument is also text,
-then the text is prepended to the first item (not added as a separate string).
-Otherwise the argument is added as a new string or parse-tree I<before>
-the current one.
-
-=cut
-
-use vars qw(@ptree); ## an alias used for performance reasons
-
-sub prepend {
- my $self = shift;
- local *ptree = $self;
- for (@_) {
- next unless length;
- if (@ptree && !(ref $ptree[0]) && !(ref $_)) {
- $ptree[0] = $_ . $ptree[0];
- }
- else {
- unshift @ptree, $_;
- }
- }
-}
-
-##---------------------------------------------------------------------------
-
-=head2 $ptree-E<gt>B<append()>
-
-This method appends the given text or parse-tree to the current parse-tree.
-If the last item on the parse-tree is text and the argument is also text,
-then the text is appended to the last item (not added as a separate string).
-Otherwise the argument is added as a new string or parse-tree I<after>
-the current one.
-
-=cut
-
-sub append {
- my $self = shift;
- local *ptree = $self;
- my $can_append = @ptree && !(ref $ptree[-1]);
- for (@_) {
- if (ref) {
- push @ptree, $_;
- }
- elsif(!length) {
- next;
- }
- elsif ($can_append) {
- $ptree[-1] .= $_;
- }
- else {
- push @ptree, $_;
- }
- }
-}
-
-=head2 $ptree-E<gt>B<raw_text()>
-
- my $ptree_raw_text = $ptree->raw_text();
-
-This method will return the I<raw> text of the POD parse-tree
-exactly as it appeared in the input.
-
-=cut
-
-sub raw_text {
- my $self = shift;
- my $text = '';
- for ( @$self ) {
- $text .= (ref $_) ? $_->raw_text : $_;
- }
- return $text;
-}
-
-##---------------------------------------------------------------------------
-
-## Private routines to set/unset child->parent links
-
-sub _unset_child2parent_links {
- my $self = shift;
- local *ptree = $self;
- for (@ptree) {
- next unless (defined and length and ref and ref ne 'SCALAR');
- $_->_unset_child2parent_links()
- if UNIVERSAL::isa($_, 'Pod::InteriorSequence');
- }
-}
-
-sub _set_child2parent_links {
- ## nothing to do, Pod::ParseTrees cant have parent pointers
-}
-
-=head2 Pod::ParseTree::B<DESTROY()>
-
-This method performs any necessary cleanup for the parse-tree.
-If you override this method then it is B<imperative>
-that you invoke the parent method from within your own method,
-otherwise I<parse-tree storage will not be reclaimed upon destruction!>
-
-=cut
-
-sub DESTROY {
- ## We need to get rid of all child->parent pointers throughout the
- ## tree so their reference counts will go to zero and they can be
- ## garbage-collected
- _unset_child2parent_links(@_);
-}
-
-#############################################################################
-
-=head1 SEE ALSO
-
-B<Pod::InputObjects> is part of the L<Pod::Parser> distribution.
-
-See L<Pod::Parser>, L<Pod::Select>
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt>
-
-=cut
-
-1;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/ParseUtils.pm b/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/ParseUtils.pm
deleted file mode 100644
index 2afd0cd420e..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/ParseUtils.pm
+++ /dev/null
@@ -1,861 +0,0 @@
-#############################################################################
-# Pod/ParseUtils.pm -- helpers for POD parsing and conversion
-#
-# Copyright (C) 1999-2000 by Marek Rouchal. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::ParseUtils;
-use strict;
-
-use vars qw($VERSION);
-$VERSION = '1.63'; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-=head1 NAME
-
-Pod::ParseUtils - helpers for POD parsing and conversion
-
-=head1 SYNOPSIS
-
- use Pod::ParseUtils;
-
- my $list = new Pod::List;
- my $link = Pod::Hyperlink->new('Pod::Parser');
-
-=head1 DESCRIPTION
-
-B<NOTE: This module is considered legacy; modern Perl releases (5.18 and
-higher) are going to remove Pod-Parser from core and use L<Pod-Simple>
-for all things POD.>
-
-B<Pod::ParseUtils> contains a few object-oriented helper packages for
-POD parsing and processing (i.e. in POD formatters and translators).
-
-=cut
-
-#-----------------------------------------------------------------------------
-# Pod::List
-#
-# class to hold POD list info (=over, =item, =back)
-#-----------------------------------------------------------------------------
-
-package Pod::List;
-
-use Carp;
-
-=head2 Pod::List
-
-B<Pod::List> can be used to hold information about POD lists
-(written as =over ... =item ... =back) for further processing.
-The following methods are available:
-
-=over 4
-
-=item Pod::List-E<gt>new()
-
-Create a new list object. Properties may be specified through a hash
-reference like this:
-
- my $list = Pod::List->new({ -start => $., -indent => 4 });
-
-See the individual methods/properties for details.
-
-=cut
-
-sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my %params = @_;
- my $self = {%params};
- bless $self, $class;
- $self->initialize();
- return $self;
-}
-
-sub initialize {
- my $self = shift;
- $self->{-file} ||= 'unknown';
- $self->{-start} ||= 'unknown';
- $self->{-indent} ||= 4; # perlpod: "should be the default"
- $self->{_items} = [];
- $self->{-type} ||= '';
-}
-
-=item $list-E<gt>file()
-
-Without argument, retrieves the file name the list is in. This must
-have been set before by either specifying B<-file> in the B<new()>
-method or by calling the B<file()> method with a scalar argument.
-
-=cut
-
-# The POD file name the list appears in
-sub file {
- return (@_ > 1) ? ($_[0]->{-file} = $_[1]) : $_[0]->{-file};
-}
-
-=item $list-E<gt>start()
-
-Without argument, retrieves the line number where the list started.
-This must have been set before by either specifying B<-start> in the
-B<new()> method or by calling the B<start()> method with a scalar
-argument.
-
-=cut
-
-# The line in the file the node appears
-sub start {
- return (@_ > 1) ? ($_[0]->{-start} = $_[1]) : $_[0]->{-start};
-}
-
-=item $list-E<gt>indent()
-
-Without argument, retrieves the indent level of the list as specified
-in C<=over n>. This must have been set before by either specifying
-B<-indent> in the B<new()> method or by calling the B<indent()> method
-with a scalar argument.
-
-=cut
-
-# indent level
-sub indent {
- return (@_ > 1) ? ($_[0]->{-indent} = $_[1]) : $_[0]->{-indent};
-}
-
-=item $list-E<gt>type()
-
-Without argument, retrieves the list type, which can be an arbitrary value,
-e.g. C<OL>, C<UL>, ... when thinking the HTML way.
-This must have been set before by either specifying
-B<-type> in the B<new()> method or by calling the B<type()> method
-with a scalar argument.
-
-=cut
-
-# The type of the list (UL, OL, ...)
-sub type {
- return (@_ > 1) ? ($_[0]->{-type} = $_[1]) : $_[0]->{-type};
-}
-
-=item $list-E<gt>rx()
-
-Without argument, retrieves a regular expression for simplifying the
-individual item strings once the list type has been determined. Usage:
-E.g. when converting to HTML, one might strip the leading number in
-an ordered list as C<E<lt>OLE<gt>> already prints numbers itself.
-This must have been set before by either specifying
-B<-rx> in the B<new()> method or by calling the B<rx()> method
-with a scalar argument.
-
-=cut
-
-# The regular expression to simplify the items
-sub rx {
- return (@_ > 1) ? ($_[0]->{-rx} = $_[1]) : $_[0]->{-rx};
-}
-
-=item $list-E<gt>item()
-
-Without argument, retrieves the array of the items in this list.
-The items may be represented by any scalar.
-If an argument has been given, it is pushed on the list of items.
-
-=cut
-
-# The individual =items of this list
-sub item {
- my ($self,$item) = @_;
- if(defined $item) {
- push(@{$self->{_items}}, $item);
- return $item;
- }
- else {
- return @{$self->{_items}};
- }
-}
-
-=item $list-E<gt>parent()
-
-Without argument, retrieves information about the parent holding this
-list, which is represented as an arbitrary scalar.
-This must have been set before by either specifying
-B<-parent> in the B<new()> method or by calling the B<parent()> method
-with a scalar argument.
-
-=cut
-
-# possibility for parsers/translators to store information about the
-# lists's parent object
-sub parent {
- return (@_ > 1) ? ($_[0]->{-parent} = $_[1]) : $_[0]->{-parent};
-}
-
-=item $list-E<gt>tag()
-
-Without argument, retrieves information about the list tag, which can be
-any scalar.
-This must have been set before by either specifying
-B<-tag> in the B<new()> method or by calling the B<tag()> method
-with a scalar argument.
-
-=back
-
-=cut
-
-# possibility for parsers/translators to store information about the
-# list's object
-sub tag {
- return (@_ > 1) ? ($_[0]->{-tag} = $_[1]) : $_[0]->{-tag};
-}
-
-#-----------------------------------------------------------------------------
-# Pod::Hyperlink
-#
-# class to manipulate POD hyperlinks (L<>)
-#-----------------------------------------------------------------------------
-
-package Pod::Hyperlink;
-
-=head2 Pod::Hyperlink
-
-B<Pod::Hyperlink> is a class for manipulation of POD hyperlinks. Usage:
-
- my $link = Pod::Hyperlink->new('alternative text|page/"section in page"');
-
-The B<Pod::Hyperlink> class is mainly designed to parse the contents of the
-C<LE<lt>...E<gt>> sequence, providing a simple interface for accessing the
-different parts of a POD hyperlink for further processing. It can also be
-used to construct hyperlinks.
-
-=over 4
-
-=item Pod::Hyperlink-E<gt>new()
-
-The B<new()> method can either be passed a set of key/value pairs or a single
-scalar value, namely the contents of a C<LE<lt>...E<gt>> sequence. An object
-of the class C<Pod::Hyperlink> is returned. The value C<undef> indicates a
-failure, the error message is stored in C<$@>.
-
-=cut
-
-use Carp;
-
-sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my $self = +{};
- bless $self, $class;
- $self->initialize();
- if(defined $_[0]) {
- if(ref($_[0])) {
- # called with a list of parameters
- %$self = %{$_[0]};
- $self->_construct_text();
- }
- else {
- # called with L<> contents
- return unless($self->parse($_[0]));
- }
- }
- return $self;
-}
-
-sub initialize {
- my $self = shift;
- $self->{-line} ||= 'undef';
- $self->{-file} ||= 'undef';
- $self->{-page} ||= '';
- $self->{-node} ||= '';
- $self->{-alttext} ||= '';
- $self->{-type} ||= 'undef';
- $self->{_warnings} = [];
-}
-
-=item $link-E<gt>parse($string)
-
-This method can be used to (re)parse a (new) hyperlink, i.e. the contents
-of a C<LE<lt>...E<gt>> sequence. The result is stored in the current object.
-Warnings are stored in the B<warnings> property.
-E.g. sections like C<LE<lt>open(2)E<gt>> are deprecated, as they do not point
-to Perl documents. C<LE<lt>DBI::foo(3p)E<gt>> is wrong as well, the manpage
-section can simply be dropped.
-
-=cut
-
-sub parse {
- my $self = shift;
- local($_) = $_[0];
- # syntax check the link and extract destination
- my ($alttext,$page,$node,$type,$quoted) = (undef,'','','',0);
-
- $self->{_warnings} = [];
-
- # collapse newlines with whitespace
- s/\s*\n+\s*/ /g;
-
- # strip leading/trailing whitespace
- if(s/^[\s\n]+//) {
- $self->warning('ignoring leading whitespace in link');
- }
- if(s/[\s\n]+$//) {
- $self->warning('ignoring trailing whitespace in link');
- }
- unless(length($_)) {
- _invalid_link('empty link');
- return;
- }
-
- ## Check for different possibilities. This is tedious and error-prone
- # we match all possibilities (alttext, page, section/item)
- #warn "DEBUG: link=$_\n";
-
- # only page
- # problem: a lot of people use (), or (1) or the like to indicate
- # man page sections. But this collides with L<func()> that is supposed
- # to point to an internal function...
- my $page_rx = '[\w.-]+(?:::[\w.-]+)*(?:[(](?:\d\w*|)[)]|)';
- # page name only
- if(/^($page_rx)$/o) {
- $page = $1;
- $type = 'page';
- }
- # alttext, page and "section"
- elsif(m{^(.*?)\s*[|]\s*($page_rx)\s*/\s*"(.+)"$}o) {
- ($alttext, $page, $node) = ($1, $2, $3);
- $type = 'section';
- $quoted = 1; #... therefore | and / are allowed
- }
- # alttext and page
- elsif(/^(.*?)\s*[|]\s*($page_rx)$/o) {
- ($alttext, $page) = ($1, $2);
- $type = 'page';
- }
- # alttext and "section"
- elsif(m{^(.*?)\s*[|]\s*(?:/\s*|)"(.+)"$}) {
- ($alttext, $node) = ($1,$2);
- $type = 'section';
- $quoted = 1;
- }
- # page and "section"
- elsif(m{^($page_rx)\s*/\s*"(.+)"$}o) {
- ($page, $node) = ($1, $2);
- $type = 'section';
- $quoted = 1;
- }
- # page and item
- elsif(m{^($page_rx)\s*/\s*(.+)$}o) {
- ($page, $node) = ($1, $2);
- $type = 'item';
- }
- # only "section"
- elsif(m{^/?"(.+)"$}) {
- $node = $1;
- $type = 'section';
- $quoted = 1;
- }
- # only item
- elsif(m{^\s*/(.+)$}) {
- $node = $1;
- $type = 'item';
- }
-
- # non-standard: Hyperlink with alt-text - doesn't remove protocol prefix, maybe it should?
- elsif(/^ \s* (.*?) \s* [|] \s* (\w+:[^:\s] [^\s|]*?) \s* $/ix) {
- ($alttext,$node) = ($1,$2);
- $type = 'hyperlink';
- }
-
- # non-standard: Hyperlink
- elsif(/^(\w+:[^:\s]\S*)$/i) {
- $node = $1;
- $type = 'hyperlink';
- }
- # alttext, page and item
- elsif(m{^(.*?)\s*[|]\s*($page_rx)\s*/\s*(.+)$}o) {
- ($alttext, $page, $node) = ($1, $2, $3);
- $type = 'item';
- }
- # alttext and item
- elsif(m{^(.*?)\s*[|]\s*/(.+)$}) {
- ($alttext, $node) = ($1,$2);
- }
- # must be an item or a "malformed" section (without "")
- else {
- $node = $_;
- $type = 'item';
- }
- # collapse whitespace in nodes
- $node =~ s/\s+/ /gs;
-
- # empty alternative text expands to node name
- if(defined $alttext) {
- if(!length($alttext)) {
- $alttext = $node || $page;
- }
- }
- else {
- $alttext = '';
- }
-
- if($page =~ /[(]\w*[)]$/) {
- $self->warning("(section) in '$page' deprecated");
- }
- if(!$quoted && $node =~ m{[|/]} && $type ne 'hyperlink') {
- $self->warning("node '$node' contains non-escaped | or /");
- }
- if($alttext =~ m{[|/]}) {
- $self->warning("alternative text '$node' contains non-escaped | or /");
- }
- $self->{-page} = $page;
- $self->{-node} = $node;
- $self->{-alttext} = $alttext;
- #warn "DEBUG: page=$page section=$section item=$item alttext=$alttext\n";
- $self->{-type} = $type;
- $self->_construct_text();
- 1;
-}
-
-sub _construct_text {
- my $self = shift;
- my $alttext = $self->alttext();
- my $type = $self->type();
- my $section = $self->node();
- my $page = $self->page();
- my $page_ext = '';
- $page =~ s/([(]\w*[)])$// && ($page_ext = $1);
- if($alttext) {
- $self->{_text} = $alttext;
- }
- elsif($type eq 'hyperlink') {
- $self->{_text} = $section;
- }
- else {
- $self->{_text} = ($section || '') .
- (($page && $section) ? ' in ' : '') .
- "$page$page_ext";
- }
- # for being marked up later
- # use the non-standard markers P<> and Q<>, so that the resulting
- # text can be parsed by the translators. It's their job to put
- # the correct hypertext around the linktext
- if($alttext) {
- $self->{_markup} = "Q<$alttext>";
- }
- elsif($type eq 'hyperlink') {
- $self->{_markup} = "Q<$section>";
- }
- else {
- $self->{_markup} = (!$section ? '' : "Q<$section>") .
- ($page ? ($section ? ' in ':'') . "P<$page>$page_ext" : '');
- }
-}
-
-=item $link-E<gt>markup($string)
-
-Set/retrieve the textual value of the link. This string contains special
-markers C<PE<lt>E<gt>> and C<QE<lt>E<gt>> that should be expanded by the
-translator's interior sequence expansion engine to the
-formatter-specific code to highlight/activate the hyperlink. The details
-have to be implemented in the translator.
-
-=cut
-
-#' retrieve/set markuped text
-sub markup {
- return (@_ > 1) ? ($_[0]->{_markup} = $_[1]) : $_[0]->{_markup};
-}
-
-=item $link-E<gt>text()
-
-This method returns the textual representation of the hyperlink as above,
-but without markers (read only). Depending on the link type this is one of
-the following alternatives (the + and * denote the portions of the text
-that are marked up):
-
- +perl+ L<perl>
- *$|* in +perlvar+ L<perlvar/$|>
- *OPTIONS* in +perldoc+ L<perldoc/"OPTIONS">
- *DESCRIPTION* L<"DESCRIPTION">
-
-=cut
-
-# The complete link's text
-sub text {
- return $_[0]->{_text};
-}
-
-=item $link-E<gt>warning()
-
-After parsing, this method returns any warnings encountered during the
-parsing process.
-
-=cut
-
-# Set/retrieve warnings
-sub warning {
- my $self = shift;
- if(@_) {
- push(@{$self->{_warnings}}, @_);
- return @_;
- }
- return @{$self->{_warnings}};
-}
-
-=item $link-E<gt>file()
-
-=item $link-E<gt>line()
-
-Just simple slots for storing information about the line and the file
-the link was encountered in. Has to be filled in manually.
-
-=cut
-
-# The line in the file the link appears
-sub line {
- return (@_ > 1) ? ($_[0]->{-line} = $_[1]) : $_[0]->{-line};
-}
-
-# The POD file name the link appears in
-sub file {
- return (@_ > 1) ? ($_[0]->{-file} = $_[1]) : $_[0]->{-file};
-}
-
-=item $link-E<gt>page()
-
-This method sets or returns the POD page this link points to.
-
-=cut
-
-# The POD page the link appears on
-sub page {
- if (@_ > 1) {
- $_[0]->{-page} = $_[1];
- $_[0]->_construct_text();
- }
- return $_[0]->{-page};
-}
-
-=item $link-E<gt>node()
-
-As above, but the destination node text of the link.
-
-=cut
-
-# The link destination
-sub node {
- if (@_ > 1) {
- $_[0]->{-node} = $_[1];
- $_[0]->_construct_text();
- }
- return $_[0]->{-node};
-}
-
-=item $link-E<gt>alttext()
-
-Sets or returns an alternative text specified in the link.
-
-=cut
-
-# Potential alternative text
-sub alttext {
- if (@_ > 1) {
- $_[0]->{-alttext} = $_[1];
- $_[0]->_construct_text();
- }
- return $_[0]->{-alttext};
-}
-
-=item $link-E<gt>type()
-
-The node type, either C<section> or C<item>. As an unofficial type,
-there is also C<hyperlink>, derived from e.g. C<LE<lt>http://perl.comE<gt>>
-
-=cut
-
-# The type: item or headn
-sub type {
- return (@_ > 1) ? ($_[0]->{-type} = $_[1]) : $_[0]->{-type};
-}
-
-=item $link-E<gt>link()
-
-Returns the link as contents of C<LE<lt>E<gt>>. Reciprocal to B<parse()>.
-
-=back
-
-=cut
-
-# The link itself
-sub link {
- my $self = shift;
- my $link = $self->page() || '';
- if($self->node()) {
- my $node = $self->node();
- $node =~ s/\|/E<verbar>/g;
- $node =~ s{/}{E<sol>}g;
- if($self->type() eq 'section') {
- $link .= ($link ? '/' : '') . '"' . $node . '"';
- }
- elsif($self->type() eq 'hyperlink') {
- $link = $self->node();
- }
- else { # item
- $link .= '/' . $node;
- }
- }
- if($self->alttext()) {
- my $text = $self->alttext();
- $text =~ s/\|/E<verbar>/g;
- $text =~ s{/}{E<sol>}g;
- $link = "$text|$link";
- }
- return $link;
-}
-
-sub _invalid_link {
- my ($msg) = @_;
- # this sets @_
- #eval { die "$msg\n" };
- #chomp $@;
- $@ = $msg; # this seems to work, too!
- return;
-}
-
-#-----------------------------------------------------------------------------
-# Pod::Cache
-#
-# class to hold POD page details
-#-----------------------------------------------------------------------------
-
-package Pod::Cache;
-
-=head2 Pod::Cache
-
-B<Pod::Cache> holds information about a set of POD documents,
-especially the nodes for hyperlinks.
-The following methods are available:
-
-=over 4
-
-=item Pod::Cache-E<gt>new()
-
-Create a new cache object. This object can hold an arbitrary number of
-POD documents of class Pod::Cache::Item.
-
-=cut
-
-sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my $self = [];
- bless $self, $class;
- return $self;
-}
-
-=item $cache-E<gt>item()
-
-Add a new item to the cache. Without arguments, this method returns a
-list of all cache elements.
-
-=cut
-
-sub item {
- my ($self,%param) = @_;
- if(%param) {
- my $item = Pod::Cache::Item->new(%param);
- push(@$self, $item);
- return $item;
- }
- else {
- return @{$self};
- }
-}
-
-=item $cache-E<gt>find_page($name)
-
-Look for a POD document named C<$name> in the cache. Returns the
-reference to the corresponding Pod::Cache::Item object or undef if
-not found.
-
-=back
-
-=cut
-
-sub find_page {
- my ($self,$page) = @_;
- foreach(@$self) {
- if($_->page() eq $page) {
- return $_;
- }
- }
- return;
-}
-
-package Pod::Cache::Item;
-
-=head2 Pod::Cache::Item
-
-B<Pod::Cache::Item> holds information about individual POD documents,
-that can be grouped in a Pod::Cache object.
-It is intended to hold information about the hyperlink nodes of POD
-documents.
-The following methods are available:
-
-=over 4
-
-=item Pod::Cache::Item-E<gt>new()
-
-Create a new object.
-
-=cut
-
-sub new {
- my $this = shift;
- my $class = ref($this) || $this;
- my %params = @_;
- my $self = {%params};
- bless $self, $class;
- $self->initialize();
- return $self;
-}
-
-sub initialize {
- my $self = shift;
- $self->{-nodes} = [] unless(defined $self->{-nodes});
-}
-
-=item $cacheitem-E<gt>page()
-
-Set/retrieve the POD document name (e.g. "Pod::Parser").
-
-=cut
-
-# The POD page
-sub page {
- return (@_ > 1) ? ($_[0]->{-page} = $_[1]) : $_[0]->{-page};
-}
-
-=item $cacheitem-E<gt>description()
-
-Set/retrieve the POD short description as found in the C<=head1 NAME>
-section.
-
-=cut
-
-# The POD description, taken out of NAME if present
-sub description {
- return (@_ > 1) ? ($_[0]->{-description} = $_[1]) : $_[0]->{-description};
-}
-
-=item $cacheitem-E<gt>path()
-
-Set/retrieve the POD file storage path.
-
-=cut
-
-# The file path
-sub path {
- return (@_ > 1) ? ($_[0]->{-path} = $_[1]) : $_[0]->{-path};
-}
-
-=item $cacheitem-E<gt>file()
-
-Set/retrieve the POD file name.
-
-=cut
-
-# The POD file name
-sub file {
- return (@_ > 1) ? ($_[0]->{-file} = $_[1]) : $_[0]->{-file};
-}
-
-=item $cacheitem-E<gt>nodes()
-
-Add a node (or a list of nodes) to the document's node list. Note that
-the order is kept, i.e. start with the first node and end with the last.
-If no argument is given, the current list of nodes is returned in the
-same order the nodes have been added.
-A node can be any scalar, but usually is a pair of node string and
-unique id for the C<find_node> method to work correctly.
-
-=cut
-
-# The POD nodes
-sub nodes {
- my ($self,@nodes) = @_;
- if(@nodes) {
- push(@{$self->{-nodes}}, @nodes);
- return @nodes;
- }
- else {
- return @{$self->{-nodes}};
- }
-}
-
-=item $cacheitem-E<gt>find_node($name)
-
-Look for a node or index entry named C<$name> in the object.
-Returns the unique id of the node (i.e. the second element of the array
-stored in the node array) or undef if not found.
-
-=cut
-
-sub find_node {
- my ($self,$node) = @_;
- my @search;
- push(@search, @{$self->{-nodes}}) if($self->{-nodes});
- push(@search, @{$self->{-idx}}) if($self->{-idx});
- foreach(@search) {
- if($_->[0] eq $node) {
- return $_->[1]; # id
- }
- }
- return;
-}
-
-=item $cacheitem-E<gt>idx()
-
-Add an index entry (or a list of them) to the document's index list. Note that
-the order is kept, i.e. start with the first node and end with the last.
-If no argument is given, the current list of index entries is returned in the
-same order the entries have been added.
-An index entry can be any scalar, but usually is a pair of string and
-unique id.
-
-=back
-
-=cut
-
-# The POD index entries
-sub idx {
- my ($self,@idx) = @_;
- if(@idx) {
- push(@{$self->{-idx}}, @idx);
- return @idx;
- }
- else {
- return @{$self->{-idx}};
- }
-}
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Marek Rouchal E<lt>marekr@cpan.orgE<gt>, borrowing
-a lot of things from L<pod2man> and L<pod2roff> as well as other POD
-processing tools by Tom Christiansen, Brad Appleton and Russ Allbery.
-
-B<Pod::ParseUtils> is part of the L<Pod::Parser> distribution.
-
-=head1 SEE ALSO
-
-L<pod2man>, L<pod2roff>, L<Pod::Parser>, L<Pod::Checker>,
-L<pod2html>
-
-=cut
-
-1;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Parser.pm b/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Parser.pm
deleted file mode 100644
index 63edcd2e197..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Parser.pm
+++ /dev/null
@@ -1,1836 +0,0 @@
-#############################################################################
-# Pod/Parser.pm -- package which defines a base class for parsing POD docs.
-#
-# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::Parser;
-use strict;
-
-## These "variables" are used as local "glob aliases" for performance
-use vars qw($VERSION @ISA %myData %myOpts @input_stack);
-$VERSION = '1.63'; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-#############################################################################
-
-=head1 NAME
-
-Pod::Parser - base class for creating POD filters and translators
-
-=head1 SYNOPSIS
-
- use Pod::Parser;
-
- package MyParser;
- @ISA = qw(Pod::Parser);
-
- sub command {
- my ($parser, $command, $paragraph, $line_num) = @_;
- ## Interpret the command and its text; sample actions might be:
- if ($command eq 'head1') { ... }
- elsif ($command eq 'head2') { ... }
- ## ... other commands and their actions
- my $out_fh = $parser->output_handle();
- my $expansion = $parser->interpolate($paragraph, $line_num);
- print $out_fh $expansion;
- }
-
- sub verbatim {
- my ($parser, $paragraph, $line_num) = @_;
- ## Format verbatim paragraph; sample actions might be:
- my $out_fh = $parser->output_handle();
- print $out_fh $paragraph;
- }
-
- sub textblock {
- my ($parser, $paragraph, $line_num) = @_;
- ## Translate/Format this block of text; sample actions might be:
- my $out_fh = $parser->output_handle();
- my $expansion = $parser->interpolate($paragraph, $line_num);
- print $out_fh $expansion;
- }
-
- sub interior_sequence {
- my ($parser, $seq_command, $seq_argument) = @_;
- ## Expand an interior sequence; sample actions might be:
- return "*$seq_argument*" if ($seq_command eq 'B');
- return "`$seq_argument'" if ($seq_command eq 'C');
- return "_${seq_argument}_'" if ($seq_command eq 'I');
- ## ... other sequence commands and their resulting text
- }
-
- package main;
-
- ## Create a parser object and have it parse file whose name was
- ## given on the command-line (use STDIN if no files were given).
- $parser = new MyParser();
- $parser->parse_from_filehandle(\*STDIN) if (@ARGV == 0);
- for (@ARGV) { $parser->parse_from_file($_); }
-
-=head1 REQUIRES
-
-perl5.005, Pod::InputObjects, Exporter, Symbol, Carp
-
-=head1 EXPORTS
-
-Nothing.
-
-=head1 DESCRIPTION
-
-B<NOTE: This module is considered legacy; modern Perl releases (5.18 and
-higher) are going to remove Pod-Parser from core and use L<Pod-Simple>
-for all things POD.>
-
-B<Pod::Parser> is a base class for creating POD filters and translators.
-It handles most of the effort involved with parsing the POD sections
-from an input stream, leaving subclasses free to be concerned only with
-performing the actual translation of text.
-
-B<Pod::Parser> parses PODs, and makes method calls to handle the various
-components of the POD. Subclasses of B<Pod::Parser> override these methods
-to translate the POD into whatever output format they desire.
-
-=head1 QUICK OVERVIEW
-
-To create a POD filter for translating POD documentation into some other
-format, you create a subclass of B<Pod::Parser> which typically overrides
-just the base class implementation for the following methods:
-
-=over 2
-
-=item *
-
-B<command()>
-
-=item *
-
-B<verbatim()>
-
-=item *
-
-B<textblock()>
-
-=item *
-
-B<interior_sequence()>
-
-=back
-
-You may also want to override the B<begin_input()> and B<end_input()>
-methods for your subclass (to perform any needed per-file and/or
-per-document initialization or cleanup).
-
-If you need to perform any preprocessing of input before it is parsed
-you may want to override one or more of B<preprocess_line()> and/or
-B<preprocess_paragraph()>.
-
-Sometimes it may be necessary to make more than one pass over the input
-files. If this is the case you have several options. You can make the
-first pass using B<Pod::Parser> and override your methods to store the
-intermediate results in memory somewhere for the B<end_pod()> method to
-process. You could use B<Pod::Parser> for several passes with an
-appropriate state variable to control the operation for each pass. If
-your input source can't be reset to start at the beginning, you can
-store it in some other structure as a string or an array and have that
-structure implement a B<getline()> method (which is all that
-B<parse_from_filehandle()> uses to read input).
-
-Feel free to add any member data fields you need to keep track of things
-like current font, indentation, horizontal or vertical position, or
-whatever else you like. Be sure to read L<"PRIVATE METHODS AND DATA">
-to avoid name collisions.
-
-For the most part, the B<Pod::Parser> base class should be able to
-do most of the input parsing for you and leave you free to worry about
-how to interpret the commands and translate the result.
-
-Note that all we have described here in this quick overview is the
-simplest most straightforward use of B<Pod::Parser> to do stream-based
-parsing. It is also possible to use the B<Pod::Parser::parse_text> function
-to do more sophisticated tree-based parsing. See L<"TREE-BASED PARSING">.
-
-=head1 PARSING OPTIONS
-
-A I<parse-option> is simply a named option of B<Pod::Parser> with a
-value that corresponds to a certain specified behavior. These various
-behaviors of B<Pod::Parser> may be enabled/disabled by setting
-or unsetting one or more I<parse-options> using the B<parseopts()> method.
-The set of currently accepted parse-options is as follows:
-
-=over 3
-
-=item B<-want_nonPODs> (default: unset)
-
-Normally (by default) B<Pod::Parser> will only provide access to
-the POD sections of the input. Input paragraphs that are not part
-of the POD-format documentation are not made available to the caller
-(not even using B<preprocess_paragraph()>). Setting this option to a
-non-empty, non-zero value will allow B<preprocess_paragraph()> to see
-non-POD sections of the input as well as POD sections. The B<cutting()>
-method can be used to determine if the corresponding paragraph is a POD
-paragraph, or some other input paragraph.
-
-=item B<-process_cut_cmd> (default: unset)
-
-Normally (by default) B<Pod::Parser> handles the C<=cut> POD directive
-by itself and does not pass it on to the caller for processing. Setting
-this option to a non-empty, non-zero value will cause B<Pod::Parser> to
-pass the C<=cut> directive to the caller just like any other POD command
-(and hence it may be processed by the B<command()> method).
-
-B<Pod::Parser> will still interpret the C<=cut> directive to mean that
-"cutting mode" has been (re)entered, but the caller will get a chance
-to capture the actual C<=cut> paragraph itself for whatever purpose
-it desires.
-
-=item B<-warnings> (default: unset)
-
-Normally (by default) B<Pod::Parser> recognizes a bare minimum of
-pod syntax errors and warnings and issues diagnostic messages
-for errors, but not for warnings. (Use B<Pod::Checker> to do more
-thorough checking of POD syntax.) Setting this option to a non-empty,
-non-zero value will cause B<Pod::Parser> to issue diagnostics for
-the few warnings it recognizes as well as the errors.
-
-=back
-
-Please see L<"parseopts()"> for a complete description of the interface
-for the setting and unsetting of parse-options.
-
-=cut
-
-#############################################################################
-
-#use diagnostics;
-use Pod::InputObjects;
-use Carp;
-use Exporter;
-BEGIN {
- if ($] < 5.006) {
- require Symbol;
- import Symbol;
- }
-}
-@ISA = qw(Exporter);
-
-#############################################################################
-
-=head1 RECOMMENDED SUBROUTINE/METHOD OVERRIDES
-
-B<Pod::Parser> provides several methods which most subclasses will probably
-want to override. These methods are as follows:
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head1 B<command()>
-
- $parser->command($cmd,$text,$line_num,$pod_para);
-
-This method should be overridden by subclasses to take the appropriate
-action when a POD command paragraph (denoted by a line beginning with
-"=") is encountered. When such a POD directive is seen in the input,
-this method is called and is passed:
-
-=over 3
-
-=item C<$cmd>
-
-the name of the command for this POD paragraph
-
-=item C<$text>
-
-the paragraph text for the given POD paragraph command.
-
-=item C<$line_num>
-
-the line-number of the beginning of the paragraph
-
-=item C<$pod_para>
-
-a reference to a C<Pod::Paragraph> object which contains further
-information about the paragraph command (see L<Pod::InputObjects>
-for details).
-
-=back
-
-B<Note> that this method I<is> called for C<=pod> paragraphs.
-
-The base class implementation of this method simply treats the raw POD
-command as normal block of paragraph text (invoking the B<textblock()>
-method with the command paragraph).
-
-=cut
-
-sub command {
- my ($self, $cmd, $text, $line_num, $pod_para) = @_;
- ## Just treat this like a textblock
- $self->textblock($pod_para->raw_text(), $line_num, $pod_para);
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<verbatim()>
-
- $parser->verbatim($text,$line_num,$pod_para);
-
-This method may be overridden by subclasses to take the appropriate
-action when a block of verbatim text is encountered. It is passed the
-following parameters:
-
-=over 3
-
-=item C<$text>
-
-the block of text for the verbatim paragraph
-
-=item C<$line_num>
-
-the line-number of the beginning of the paragraph
-
-=item C<$pod_para>
-
-a reference to a C<Pod::Paragraph> object which contains further
-information about the paragraph (see L<Pod::InputObjects>
-for details).
-
-=back
-
-The base class implementation of this method simply prints the textblock
-(unmodified) to the output filehandle.
-
-=cut
-
-sub verbatim {
- my ($self, $text, $line_num, $pod_para) = @_;
- my $out_fh = $self->{_OUTPUT};
- print $out_fh $text;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<textblock()>
-
- $parser->textblock($text,$line_num,$pod_para);
-
-This method may be overridden by subclasses to take the appropriate
-action when a normal block of POD text is encountered (although the base
-class method will usually do what you want). It is passed the following
-parameters:
-
-=over 3
-
-=item C<$text>
-
-the block of text for the a POD paragraph
-
-=item C<$line_num>
-
-the line-number of the beginning of the paragraph
-
-=item C<$pod_para>
-
-a reference to a C<Pod::Paragraph> object which contains further
-information about the paragraph (see L<Pod::InputObjects>
-for details).
-
-=back
-
-In order to process interior sequences, subclasses implementations of
-this method will probably want to invoke either B<interpolate()> or
-B<parse_text()>, passing it the text block C<$text>, and the corresponding
-line number in C<$line_num>, and then perform any desired processing upon
-the returned result.
-
-The base class implementation of this method simply prints the text block
-as it occurred in the input stream).
-
-=cut
-
-sub textblock {
- my ($self, $text, $line_num, $pod_para) = @_;
- my $out_fh = $self->{_OUTPUT};
- print $out_fh $self->interpolate($text, $line_num);
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<interior_sequence()>
-
- $parser->interior_sequence($seq_cmd,$seq_arg,$pod_seq);
-
-This method should be overridden by subclasses to take the appropriate
-action when an interior sequence is encountered. An interior sequence is
-an embedded command within a block of text which appears as a command
-name (usually a single uppercase character) followed immediately by a
-string of text which is enclosed in angle brackets. This method is
-passed the sequence command C<$seq_cmd> and the corresponding text
-C<$seq_arg>. It is invoked by the B<interpolate()> method for each interior
-sequence that occurs in the string that it is passed. It should return
-the desired text string to be used in place of the interior sequence.
-The C<$pod_seq> argument is a reference to a C<Pod::InteriorSequence>
-object which contains further information about the interior sequence.
-Please see L<Pod::InputObjects> for details if you need to access this
-additional information.
-
-Subclass implementations of this method may wish to invoke the
-B<nested()> method of C<$pod_seq> to see if it is nested inside
-some other interior-sequence (and if so, which kind).
-
-The base class implementation of the B<interior_sequence()> method
-simply returns the raw text of the interior sequence (as it occurred
-in the input) to the caller.
-
-=cut
-
-sub interior_sequence {
- my ($self, $seq_cmd, $seq_arg, $pod_seq) = @_;
- ## Just return the raw text of the interior sequence
- return $pod_seq->raw_text();
-}
-
-#############################################################################
-
-=head1 OPTIONAL SUBROUTINE/METHOD OVERRIDES
-
-B<Pod::Parser> provides several methods which subclasses may want to override
-to perform any special pre/post-processing. These methods do I<not> have to
-be overridden, but it may be useful for subclasses to take advantage of them.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head1 B<new()>
-
- my $parser = Pod::Parser->new();
-
-This is the constructor for B<Pod::Parser> and its subclasses. You
-I<do not> need to override this method! It is capable of constructing
-subclass objects as well as base class objects, provided you use
-any of the following constructor invocation styles:
-
- my $parser1 = MyParser->new();
- my $parser2 = new MyParser();
- my $parser3 = $parser2->new();
-
-where C<MyParser> is some subclass of B<Pod::Parser>.
-
-Using the syntax C<MyParser::new()> to invoke the constructor is I<not>
-recommended, but if you insist on being able to do this, then the
-subclass I<will> need to override the B<new()> constructor method. If
-you do override the constructor, you I<must> be sure to invoke the
-B<initialize()> method of the newly blessed object.
-
-Using any of the above invocations, the first argument to the
-constructor is always the corresponding package name (or object
-reference). No other arguments are required, but if desired, an
-associative array (or hash-table) my be passed to the B<new()>
-constructor, as in:
-
- my $parser1 = MyParser->new( MYDATA => $value1, MOREDATA => $value2 );
- my $parser2 = new MyParser( -myflag => 1 );
-
-All arguments passed to the B<new()> constructor will be treated as
-key/value pairs in a hash-table. The newly constructed object will be
-initialized by copying the contents of the given hash-table (which may
-have been empty). The B<new()> constructor for this class and all of its
-subclasses returns a blessed reference to the initialized object (hash-table).
-
-=cut
-
-sub new {
- ## Determine if we were called via an object-ref or a classname
- my ($this,%params) = @_;
- my $class = ref($this) || $this;
- ## Any remaining arguments are treated as initial values for the
- ## hash that is used to represent this object.
- my $self = { %params };
- ## Bless ourselves into the desired class and perform any initialization
- bless $self, $class;
- $self->initialize();
- return $self;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<initialize()>
-
- $parser->initialize();
-
-This method performs any necessary object initialization. It takes no
-arguments (other than the object instance of course, which is typically
-copied to a local variable named C<$self>). If subclasses override this
-method then they I<must> be sure to invoke C<$self-E<gt>SUPER::initialize()>.
-
-=cut
-
-sub initialize {
- #my $self = shift;
- #return;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<begin_pod()>
-
- $parser->begin_pod();
-
-This method is invoked at the beginning of processing for each POD
-document that is encountered in the input. Subclasses should override
-this method to perform any per-document initialization.
-
-=cut
-
-sub begin_pod {
- #my $self = shift;
- #return;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<begin_input()>
-
- $parser->begin_input();
-
-This method is invoked by B<parse_from_filehandle()> immediately I<before>
-processing input from a filehandle. The base class implementation does
-nothing, however, subclasses may override it to perform any per-file
-initializations.
-
-Note that if multiple files are parsed for a single POD document
-(perhaps the result of some future C<=include> directive) this method
-is invoked for every file that is parsed. If you wish to perform certain
-initializations once per document, then you should use B<begin_pod()>.
-
-=cut
-
-sub begin_input {
- #my $self = shift;
- #return;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<end_input()>
-
- $parser->end_input();
-
-This method is invoked by B<parse_from_filehandle()> immediately I<after>
-processing input from a filehandle. The base class implementation does
-nothing, however, subclasses may override it to perform any per-file
-cleanup actions.
-
-Please note that if multiple files are parsed for a single POD document
-(perhaps the result of some kind of C<=include> directive) this method
-is invoked for every file that is parsed. If you wish to perform certain
-cleanup actions once per document, then you should use B<end_pod()>.
-
-=cut
-
-sub end_input {
- #my $self = shift;
- #return;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<end_pod()>
-
- $parser->end_pod();
-
-This method is invoked at the end of processing for each POD document
-that is encountered in the input. Subclasses should override this method
-to perform any per-document finalization.
-
-=cut
-
-sub end_pod {
- #my $self = shift;
- #return;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<preprocess_line()>
-
- $textline = $parser->preprocess_line($text, $line_num);
-
-This method should be overridden by subclasses that wish to perform
-any kind of preprocessing for each I<line> of input (I<before> it has
-been determined whether or not it is part of a POD paragraph). The
-parameter C<$text> is the input line; and the parameter C<$line_num> is
-the line number of the corresponding text line.
-
-The value returned should correspond to the new text to use in its
-place. If the empty string or an undefined value is returned then no
-further processing will be performed for this line.
-
-Please note that the B<preprocess_line()> method is invoked I<before>
-the B<preprocess_paragraph()> method. After all (possibly preprocessed)
-lines in a paragraph have been assembled together and it has been
-determined that the paragraph is part of the POD documentation from one
-of the selected sections, then B<preprocess_paragraph()> is invoked.
-
-The base class implementation of this method returns the given text.
-
-=cut
-
-sub preprocess_line {
- my ($self, $text, $line_num) = @_;
- return $text;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<preprocess_paragraph()>
-
- $textblock = $parser->preprocess_paragraph($text, $line_num);
-
-This method should be overridden by subclasses that wish to perform any
-kind of preprocessing for each block (paragraph) of POD documentation
-that appears in the input stream. The parameter C<$text> is the POD
-paragraph from the input file; and the parameter C<$line_num> is the
-line number for the beginning of the corresponding paragraph.
-
-The value returned should correspond to the new text to use in its
-place If the empty string is returned or an undefined value is
-returned, then the given C<$text> is ignored (not processed).
-
-This method is invoked after gathering up all the lines in a paragraph
-and after determining the cutting state of the paragraph,
-but before trying to further parse or interpret them. After
-B<preprocess_paragraph()> returns, the current cutting state (which
-is returned by C<$self-E<gt>cutting()>) is examined. If it evaluates
-to true then input text (including the given C<$text>) is cut (not
-processed) until the next POD directive is encountered.
-
-Please note that the B<preprocess_line()> method is invoked I<before>
-the B<preprocess_paragraph()> method. After all (possibly preprocessed)
-lines in a paragraph have been assembled together and either it has been
-determined that the paragraph is part of the POD documentation from one
-of the selected sections or the C<-want_nonPODs> option is true,
-then B<preprocess_paragraph()> is invoked.
-
-The base class implementation of this method returns the given text.
-
-=cut
-
-sub preprocess_paragraph {
- my ($self, $text, $line_num) = @_;
- return $text;
-}
-
-#############################################################################
-
-=head1 METHODS FOR PARSING AND PROCESSING
-
-B<Pod::Parser> provides several methods to process input text. These
-methods typically won't need to be overridden (and in some cases they
-can't be overridden), but subclasses may want to invoke them to exploit
-their functionality.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head1 B<parse_text()>
-
- $ptree1 = $parser->parse_text($text, $line_num);
- $ptree2 = $parser->parse_text({%opts}, $text, $line_num);
- $ptree3 = $parser->parse_text(\%opts, $text, $line_num);
-
-This method is useful if you need to perform your own interpolation
-of interior sequences and can't rely upon B<interpolate> to expand
-them in simple bottom-up order.
-
-The parameter C<$text> is a string or block of text to be parsed
-for interior sequences; and the parameter C<$line_num> is the
-line number corresponding to the beginning of C<$text>.
-
-B<parse_text()> will parse the given text into a parse-tree of "nodes."
-and interior-sequences. Each "node" in the parse tree is either a
-text-string, or a B<Pod::InteriorSequence>. The result returned is a
-parse-tree of type B<Pod::ParseTree>. Please see L<Pod::InputObjects>
-for more information about B<Pod::InteriorSequence> and B<Pod::ParseTree>.
-
-If desired, an optional hash-ref may be specified as the first argument
-to customize certain aspects of the parse-tree that is created and
-returned. The set of recognized option keywords are:
-
-=over 3
-
-=item B<-expand_seq> =E<gt> I<code-ref>|I<method-name>
-
-Normally, the parse-tree returned by B<parse_text()> will contain an
-unexpanded C<Pod::InteriorSequence> object for each interior-sequence
-encountered. Specifying B<-expand_seq> tells B<parse_text()> to "expand"
-every interior-sequence it sees by invoking the referenced function
-(or named method of the parser object) and using the return value as the
-expanded result.
-
-If a subroutine reference was given, it is invoked as:
-
- &$code_ref( $parser, $sequence )
-
-and if a method-name was given, it is invoked as:
-
- $parser->method_name( $sequence )
-
-where C<$parser> is a reference to the parser object, and C<$sequence>
-is a reference to the interior-sequence object.
-[I<NOTE>: If the B<interior_sequence()> method is specified, then it is
-invoked according to the interface specified in L<"interior_sequence()">].
-
-=item B<-expand_text> =E<gt> I<code-ref>|I<method-name>
-
-Normally, the parse-tree returned by B<parse_text()> will contain a
-text-string for each contiguous sequence of characters outside of an
-interior-sequence. Specifying B<-expand_text> tells B<parse_text()> to
-"preprocess" every such text-string it sees by invoking the referenced
-function (or named method of the parser object) and using the return value
-as the preprocessed (or "expanded") result. [Note that if the result is
-an interior-sequence, then it will I<not> be expanded as specified by the
-B<-expand_seq> option; Any such recursive expansion needs to be handled by
-the specified callback routine.]
-
-If a subroutine reference was given, it is invoked as:
-
- &$code_ref( $parser, $text, $ptree_node )
-
-and if a method-name was given, it is invoked as:
-
- $parser->method_name( $text, $ptree_node )
-
-where C<$parser> is a reference to the parser object, C<$text> is the
-text-string encountered, and C<$ptree_node> is a reference to the current
-node in the parse-tree (usually an interior-sequence object or else the
-top-level node of the parse-tree).
-
-=item B<-expand_ptree> =E<gt> I<code-ref>|I<method-name>
-
-Rather than returning a C<Pod::ParseTree>, pass the parse-tree as an
-argument to the referenced subroutine (or named method of the parser
-object) and return the result instead of the parse-tree object.
-
-If a subroutine reference was given, it is invoked as:
-
- &$code_ref( $parser, $ptree )
-
-and if a method-name was given, it is invoked as:
-
- $parser->method_name( $ptree )
-
-where C<$parser> is a reference to the parser object, and C<$ptree>
-is a reference to the parse-tree object.
-
-=back
-
-=cut
-
-sub parse_text {
- my $self = shift;
- local $_ = '';
-
- ## Get options and set any defaults
- my %opts = (ref $_[0]) ? %{ shift() } : ();
- my $expand_seq = $opts{'-expand_seq'} || undef;
- my $expand_text = $opts{'-expand_text'} || undef;
- my $expand_ptree = $opts{'-expand_ptree'} || undef;
-
- my $text = shift;
- my $line = shift;
- my $file = $self->input_file();
- my $cmd = "";
-
- ## Convert method calls into closures, for our convenience
- my $xseq_sub = $expand_seq;
- my $xtext_sub = $expand_text;
- my $xptree_sub = $expand_ptree;
- if (defined $expand_seq and $expand_seq eq 'interior_sequence') {
- ## If 'interior_sequence' is the method to use, we have to pass
- ## more than just the sequence object, we also need to pass the
- ## sequence name and text.
- $xseq_sub = sub {
- my ($sself, $iseq) = @_;
- my $args = join('', $iseq->parse_tree->children);
- return $sself->interior_sequence($iseq->name, $args, $iseq);
- };
- }
- ref $xseq_sub or $xseq_sub = sub { shift()->$expand_seq(@_) };
- ref $xtext_sub or $xtext_sub = sub { shift()->$expand_text(@_) };
- ref $xptree_sub or $xptree_sub = sub { shift()->$expand_ptree(@_) };
-
- ## Keep track of the "current" interior sequence, and maintain a stack
- ## of "in progress" sequences.
- ##
- ## NOTE that we push our own "accumulator" at the very beginning of the
- ## stack. It's really a parse-tree, not a sequence; but it implements
- ## the methods we need so we can use it to gather-up all the sequences
- ## and strings we parse. Thus, by the end of our parsing, it should be
- ## the only thing left on our stack and all we have to do is return it!
- ##
- my $seq = Pod::ParseTree->new();
- my @seq_stack = ($seq);
- my ($ldelim, $rdelim) = ('', '');
-
- ## Iterate over all sequence starts text (NOTE: split with
- ## capturing parens keeps the delimiters)
- $_ = $text;
- my @tokens = split /([A-Z]<(?:<+(?:\r?\n|[ \t]))?)/;
- while ( @tokens ) {
- $_ = shift @tokens;
- ## Look for the beginning of a sequence
- if ( /^([A-Z])(<(?:<+(?:\r?\n|[ \t]))?)$/ ) {
- ## Push a new sequence onto the stack of those "in-progress"
- my $ldelim_orig;
- ($cmd, $ldelim_orig) = ($1, $2);
- ($ldelim = $ldelim_orig) =~ s/\s+$//;
- ($rdelim = $ldelim) =~ tr/</>/;
- $seq = Pod::InteriorSequence->new(
- -name => $cmd,
- -ldelim => $ldelim_orig, -rdelim => $rdelim,
- -file => $file, -line => $line
- );
- (@seq_stack > 1) and $seq->nested($seq_stack[-1]);
- push @seq_stack, $seq;
- }
- ## Look for sequence ending
- elsif ( @seq_stack > 1 ) {
- ## Make sure we match the right kind of closing delimiter
- my ($seq_end, $post_seq) = ('', '');
- if ( ($ldelim eq '<' and /\A(.*?)(>)/s)
- or /\A(.*?)(\s+$rdelim)/s )
- {
- ## Found end-of-sequence, capture the interior and the
- ## closing the delimiter, and put the rest back on the
- ## token-list
- $post_seq = substr($_, length($1) + length($2));
- ($_, $seq_end) = ($1, $2);
- (length $post_seq) and unshift @tokens, $post_seq;
- }
- if (length) {
- ## In the middle of a sequence, append this text to it, and
- ## don't forget to "expand" it if that's what the caller wanted
- $seq->append($expand_text ? &$xtext_sub($self,$_,$seq) : $_);
- $_ .= $seq_end;
- }
- if (length $seq_end) {
- ## End of current sequence, record terminating delimiter
- $seq->rdelim($seq_end);
- ## Pop it off the stack of "in progress" sequences
- pop @seq_stack;
- ## Append result to its parent in current parse tree
- $seq_stack[-1]->append($expand_seq ? &$xseq_sub($self,$seq)
- : $seq);
- ## Remember the current cmd-name and left-delimiter
- if(@seq_stack > 1) {
- $cmd = $seq_stack[-1]->name;
- $ldelim = $seq_stack[-1]->ldelim;
- $rdelim = $seq_stack[-1]->rdelim;
- } else {
- $cmd = $ldelim = $rdelim = '';
- }
- }
- }
- elsif (length) {
- ## In the middle of a sequence, append this text to it, and
- ## don't forget to "expand" it if that's what the caller wanted
- $seq->append($expand_text ? &$xtext_sub($self,$_,$seq) : $_);
- }
- ## Keep track of line count
- $line += /\n/;
- ## Remember the "current" sequence
- $seq = $seq_stack[-1];
- }
-
- ## Handle unterminated sequences
- my $errorsub = (@seq_stack > 1) ? $self->errorsub() : undef;
- while (@seq_stack > 1) {
- ($cmd, $file, $line) = ($seq->name, $seq->file_line);
- $ldelim = $seq->ldelim;
- ($rdelim = $ldelim) =~ tr/</>/;
- $rdelim =~ s/^(\S+)(\s*)$/$2$1/;
- pop @seq_stack;
- my $errmsg = "*** ERROR: unterminated ${cmd}${ldelim}...${rdelim}".
- " at line $line in file $file\n";
- (ref $errorsub) and &{$errorsub}($errmsg)
- or (defined $errorsub) and $self->$errorsub($errmsg)
- or carp($errmsg);
- $seq_stack[-1]->append($expand_seq ? &$xseq_sub($self,$seq) : $seq);
- $seq = $seq_stack[-1];
- }
-
- ## Return the resulting parse-tree
- my $ptree = (pop @seq_stack)->parse_tree;
- return $expand_ptree ? &$xptree_sub($self, $ptree) : $ptree;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<interpolate()>
-
- $textblock = $parser->interpolate($text, $line_num);
-
-This method translates all text (including any embedded interior sequences)
-in the given text string C<$text> and returns the interpolated result. The
-parameter C<$line_num> is the line number corresponding to the beginning
-of C<$text>.
-
-B<interpolate()> merely invokes a private method to recursively expand
-nested interior sequences in bottom-up order (innermost sequences are
-expanded first). If there is a need to expand nested sequences in
-some alternate order, use B<parse_text> instead.
-
-=cut
-
-sub interpolate {
- my($self, $text, $line_num) = @_;
- my %parse_opts = ( -expand_seq => 'interior_sequence' );
- my $ptree = $self->parse_text( \%parse_opts, $text, $line_num );
- return join '', $ptree->children();
-}
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head1 B<parse_paragraph()>
-
- $parser->parse_paragraph($text, $line_num);
-
-This method takes the text of a POD paragraph to be processed, along
-with its corresponding line number, and invokes the appropriate method
-(one of B<command()>, B<verbatim()>, or B<textblock()>).
-
-For performance reasons, this method is invoked directly without any
-dynamic lookup; Hence subclasses may I<not> override it!
-
-=end __PRIVATE__
-
-=cut
-
-sub parse_paragraph {
- my ($self, $text, $line_num) = @_;
- local *myData = $self; ## alias to avoid deref-ing overhead
- local *myOpts = ($myData{_PARSEOPTS} ||= {}); ## get parse-options
- local $_;
-
- ## See if we want to preprocess nonPOD paragraphs as well as POD ones.
- my $wantNonPods = $myOpts{'-want_nonPODs'};
-
- ## Update cutting status
- $myData{_CUTTING} = 0 if $text =~ /^={1,2}\S/;
-
- ## Perform any desired preprocessing if we wanted it this early
- $wantNonPods and $text = $self->preprocess_paragraph($text, $line_num);
-
- ## Ignore up until next POD directive if we are cutting
- return if $myData{_CUTTING};
-
- ## Now we know this is block of text in a POD section!
-
- ##-----------------------------------------------------------------
- ## This is a hook (hack ;-) for Pod::Select to do its thing without
- ## having to override methods, but also without Pod::Parser assuming
- ## $self is an instance of Pod::Select (if the _SELECTED_SECTIONS
- ## field exists then we assume there is an is_selected() method for
- ## us to invoke (calling $self->can('is_selected') could verify this
- ## but that is more overhead than I want to incur)
- ##-----------------------------------------------------------------
-
- ## Ignore this block if it isn't in one of the selected sections
- if (exists $myData{_SELECTED_SECTIONS}) {
- $self->is_selected($text) or return ($myData{_CUTTING} = 1);
- }
-
- ## If we haven't already, perform any desired preprocessing and
- ## then re-check the "cutting" state
- unless ($wantNonPods) {
- $text = $self->preprocess_paragraph($text, $line_num);
- return 1 unless ((defined $text) and (length $text));
- return 1 if ($myData{_CUTTING});
- }
-
- ## Look for one of the three types of paragraphs
- my ($pfx, $cmd, $arg, $sep) = ('', '', '', '');
- my $pod_para = undef;
- if ($text =~ /^(={1,2})(?=\S)/) {
- ## Looks like a command paragraph. Capture the command prefix used
- ## ("=" or "=="), as well as the command-name, its paragraph text,
- ## and whatever sequence of characters was used to separate them
- $pfx = $1;
- $_ = substr($text, length $pfx);
- ($cmd, $sep, $text) = split /(\s+)/, $_, 2;
- $sep = '' unless defined $sep;
- $text = '' unless defined $text;
- ## If this is a "cut" directive then we don't need to do anything
- ## except return to "cutting" mode.
- if ($cmd eq 'cut') {
- $myData{_CUTTING} = 1;
- return unless $myOpts{'-process_cut_cmd'};
- }
- }
- ## Save the attributes indicating how the command was specified.
- $pod_para = new Pod::Paragraph(
- -name => $cmd,
- -text => $text,
- -prefix => $pfx,
- -separator => $sep,
- -file => $myData{_INFILE},
- -line => $line_num
- );
- # ## Invoke appropriate callbacks
- # if (exists $myData{_CALLBACKS}) {
- # ## Look through the callback list, invoke callbacks,
- # ## then see if we need to do the default actions
- # ## (invoke_callbacks will return true if we do).
- # return 1 unless $self->invoke_callbacks($cmd, $text, $line_num, $pod_para);
- # }
-
- # If the last paragraph ended in whitespace, and we're not between verbatim blocks, carp
- if ($myData{_WHITESPACE} and $myOpts{'-warnings'}
- and not ($text =~ /^\s+/ and ($myData{_PREVIOUS}||"") eq "verbatim")) {
- my $errorsub = $self->errorsub();
- my $line = $line_num - 1;
- my $errmsg = "*** WARNING: line containing nothing but whitespace".
- " in paragraph at line $line in file $myData{_INFILE}\n";
- (ref $errorsub) and &{$errorsub}($errmsg)
- or (defined $errorsub) and $self->$errorsub($errmsg)
- or carp($errmsg);
- }
-
- if (length $cmd) {
- ## A command paragraph
- $self->command($cmd, $text, $line_num, $pod_para);
- $myData{_PREVIOUS} = $cmd;
- }
- elsif ($text =~ /^\s+/) {
- ## Indented text - must be a verbatim paragraph
- $self->verbatim($text, $line_num, $pod_para);
- $myData{_PREVIOUS} = "verbatim";
- }
- else {
- ## Looks like an ordinary block of text
- $self->textblock($text, $line_num, $pod_para);
- $myData{_PREVIOUS} = "textblock";
- }
-
- # Update the whitespace for the next time around
- #$myData{_WHITESPACE} = $text =~ /^[^\S\r\n]+\Z/m ? 1 : 0;
- $myData{_WHITESPACE} = $text =~ /^[^\S\r\n]+\r*\Z/m ? 1 : 0;
-
- return 1;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<parse_from_filehandle()>
-
- $parser->parse_from_filehandle($in_fh,$out_fh);
-
-This method takes an input filehandle (which is assumed to already be
-opened for reading) and reads the entire input stream looking for blocks
-(paragraphs) of POD documentation to be processed. If no first argument
-is given the default input filehandle C<STDIN> is used.
-
-The C<$in_fh> parameter may be any object that provides a B<getline()>
-method to retrieve a single line of input text (hence, an appropriate
-wrapper object could be used to parse PODs from a single string or an
-array of strings).
-
-Using C<$in_fh-E<gt>getline()>, input is read line-by-line and assembled
-into paragraphs or "blocks" (which are separated by lines containing
-nothing but whitespace). For each block of POD documentation
-encountered it will invoke a method to parse the given paragraph.
-
-If a second argument is given then it should correspond to a filehandle where
-output should be sent (otherwise the default output filehandle is
-C<STDOUT> if no output filehandle is currently in use).
-
-B<NOTE:> For performance reasons, this method caches the input stream at
-the top of the stack in a local variable. Any attempts by clients to
-change the stack contents during processing when in the midst executing
-of this method I<will not affect> the input stream used by the current
-invocation of this method.
-
-This method does I<not> usually need to be overridden by subclasses.
-
-=cut
-
-sub parse_from_filehandle {
- my $self = shift;
- my %opts = (ref $_[0] eq 'HASH') ? %{ shift() } : ();
- my ($in_fh, $out_fh) = @_;
- $in_fh = \*STDIN unless ($in_fh);
- local *myData = $self; ## alias to avoid deref-ing overhead
- local *myOpts = ($myData{_PARSEOPTS} ||= {}); ## get parse-options
- local $_;
-
- ## Put this stream at the top of the stack and do beginning-of-input
- ## processing. NOTE that $in_fh might be reset during this process.
- my $topstream = $self->_push_input_stream($in_fh, $out_fh);
- (exists $opts{-cutting}) and $self->cutting( $opts{-cutting} );
-
- ## Initialize line/paragraph
- my ($textline, $paragraph) = ('', '');
- my ($nlines, $plines) = (0, 0);
-
- ## Use <$fh> instead of $fh->getline where possible (for speed)
- $_ = ref $in_fh;
- my $tied_fh = (/^(?:GLOB|FileHandle|IO::\w+)$/ or tied $in_fh);
-
- ## Read paragraphs line-by-line
- while (defined ($textline = $tied_fh ? <$in_fh> : $in_fh->getline)) {
- $textline = $self->preprocess_line($textline, ++$nlines);
- next unless ((defined $textline) && (length $textline));
-
- if ((! length $paragraph) && ($textline =~ /^==/)) {
- ## '==' denotes a one-line command paragraph
- $paragraph = $textline;
- $plines = 1;
- $textline = '';
- } else {
- ## Append this line to the current paragraph
- $paragraph .= $textline;
- ++$plines;
- }
-
- ## See if this line is blank and ends the current paragraph.
- ## If it isn't, then keep iterating until it is.
- next unless (($textline =~ /^[^\S\r\n]*[\r\n]*$/)
- && (length $paragraph));
-
- ## Now process the paragraph
- parse_paragraph($self, $paragraph, ($nlines - $plines) + 1);
- $paragraph = '';
- $plines = 0;
- }
- ## Don't forget about the last paragraph in the file
- if (length $paragraph) {
- parse_paragraph($self, $paragraph, ($nlines - $plines) + 1)
- }
-
- ## Now pop the input stream off the top of the input stack.
- $self->_pop_input_stream();
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<parse_from_file()>
-
- $parser->parse_from_file($filename,$outfile);
-
-This method takes a filename and does the following:
-
-=over 2
-
-=item *
-
-opens the input and output files for reading
-(creating the appropriate filehandles)
-
-=item *
-
-invokes the B<parse_from_filehandle()> method passing it the
-corresponding input and output filehandles.
-
-=item *
-
-closes the input and output files.
-
-=back
-
-If the special input filename "", "-" or "<&STDIN" is given then the STDIN
-filehandle is used for input (and no open or close is performed). If no
-input filename is specified then "-" is implied. Filehandle references,
-or objects that support the regular IO operations (like C<E<lt>$fhE<gt>>
-or C<$fh-<Egt>getline>) are also accepted; the handles must already be
-opened.
-
-If a second argument is given then it should be the name of the desired
-output file. If the special output filename "-" or ">&STDOUT" is given
-then the STDOUT filehandle is used for output (and no open or close is
-performed). If the special output filename ">&STDERR" is given then the
-STDERR filehandle is used for output (and no open or close is
-performed). If no output filehandle is currently in use and no output
-filename is specified, then "-" is implied.
-Alternatively, filehandle references or objects that support the regular
-IO operations (like C<print>, e.g. L<IO::String>) are also accepted;
-the object must already be opened.
-
-This method does I<not> usually need to be overridden by subclasses.
-
-=cut
-
-sub parse_from_file {
- my $self = shift;
- my %opts = (ref $_[0] eq 'HASH') ? %{ shift() } : ();
- my ($infile, $outfile) = @_;
- my ($in_fh, $out_fh);
- if ($] < 5.006) {
- ($in_fh, $out_fh) = (gensym(), gensym());
- }
- my ($close_input, $close_output) = (0, 0);
- local *myData = $self;
- local *_;
-
- ## Is $infile a filename or a (possibly implied) filehandle
- if (defined $infile && ref $infile) {
- if (ref($infile) =~ /^(SCALAR|ARRAY|HASH|CODE|REF)$/) {
- croak "Input from $1 reference not supported!\n";
- }
- ## Must be a filehandle-ref (or else assume its a ref to an object
- ## that supports the common IO read operations).
- $myData{_INFILE} = ${$infile};
- $in_fh = $infile;
- }
- elsif (!defined($infile) || !length($infile) || ($infile eq '-')
- || ($infile =~ /^<&(?:STDIN|0)$/i))
- {
- ## Not a filename, just a string implying STDIN
- $infile ||= '-';
- $myData{_INFILE} = '<standard input>';
- $in_fh = \*STDIN;
- }
- else {
- ## We have a filename, open it for reading
- $myData{_INFILE} = $infile;
- open($in_fh, "< $infile") or
- croak "Can't open $infile for reading: $!\n";
- $close_input = 1;
- }
-
- ## NOTE: we need to be *very* careful when "defaulting" the output
- ## file. We only want to use a default if this is the beginning of
- ## the entire document (but *not* if this is an included file). We
- ## determine this by seeing if the input stream stack has been set-up
- ## already
-
- ## Is $outfile a filename, a (possibly implied) filehandle, maybe a ref?
- if (ref $outfile) {
- ## we need to check for ref() first, as other checks involve reading
- if (ref($outfile) =~ /^(ARRAY|HASH|CODE)$/) {
- croak "Output to $1 reference not supported!\n";
- }
- elsif (ref($outfile) eq 'SCALAR') {
-# # NOTE: IO::String isn't a part of the perl distribution,
-# # so probably we shouldn't support this case...
-# require IO::String;
-# $myData{_OUTFILE} = "$outfile";
-# $out_fh = IO::String->new($outfile);
- croak "Output to SCALAR reference not supported!\n";
- }
- else {
- ## Must be a filehandle-ref (or else assume its a ref to an
- ## object that supports the common IO write operations).
- $myData{_OUTFILE} = ${$outfile};
- $out_fh = $outfile;
- }
- }
- elsif (!defined($outfile) || !length($outfile) || ($outfile eq '-')
- || ($outfile =~ /^>&?(?:STDOUT|1)$/i))
- {
- if (defined $myData{_TOP_STREAM}) {
- $out_fh = $myData{_OUTPUT};
- }
- else {
- ## Not a filename, just a string implying STDOUT
- $outfile ||= '-';
- $myData{_OUTFILE} = '<standard output>';
- $out_fh = \*STDOUT;
- }
- }
- elsif ($outfile =~ /^>&(STDERR|2)$/i) {
- ## Not a filename, just a string implying STDERR
- $myData{_OUTFILE} = '<standard error>';
- $out_fh = \*STDERR;
- }
- else {
- ## We have a filename, open it for writing
- $myData{_OUTFILE} = $outfile;
- (-d $outfile) and croak "$outfile is a directory, not POD input!\n";
- open($out_fh, "> $outfile") or
- croak "Can't open $outfile for writing: $!\n";
- $close_output = 1;
- }
-
- ## Whew! That was a lot of work to set up reasonably/robust behavior
- ## in the case of a non-filename for reading and writing. Now we just
- ## have to parse the input and close the handles when we're finished.
- $self->parse_from_filehandle(\%opts, $in_fh, $out_fh);
-
- $close_input and
- close($in_fh) || croak "Can't close $infile after reading: $!\n";
- $close_output and
- close($out_fh) || croak "Can't close $outfile after writing: $!\n";
-}
-
-#############################################################################
-
-=head1 ACCESSOR METHODS
-
-Clients of B<Pod::Parser> should use the following methods to access
-instance data fields:
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head1 B<errorsub()>
-
- $parser->errorsub("method_name");
- $parser->errorsub(\&warn_user);
- $parser->errorsub(sub { print STDERR, @_ });
-
-Specifies the method or subroutine to use when printing error messages
-about POD syntax. The supplied method/subroutine I<must> return TRUE upon
-successful printing of the message. If C<undef> is given, then the B<carp>
-builtin is used to issue error messages (this is the default behavior).
-
- my $errorsub = $parser->errorsub()
- my $errmsg = "This is an error message!\n"
- (ref $errorsub) and &{$errorsub}($errmsg)
- or (defined $errorsub) and $parser->$errorsub($errmsg)
- or carp($errmsg);
-
-Returns a method name, or else a reference to the user-supplied subroutine
-used to print error messages. Returns C<undef> if the B<carp> builtin
-is used to issue error messages (this is the default behavior).
-
-=cut
-
-sub errorsub {
- return (@_ > 1) ? ($_[0]->{_ERRORSUB} = $_[1]) : $_[0]->{_ERRORSUB};
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<cutting()>
-
- $boolean = $parser->cutting();
-
-Returns the current C<cutting> state: a boolean-valued scalar which
-evaluates to true if text from the input file is currently being "cut"
-(meaning it is I<not> considered part of the POD document).
-
- $parser->cutting($boolean);
-
-Sets the current C<cutting> state to the given value and returns the
-result.
-
-=cut
-
-sub cutting {
- return (@_ > 1) ? ($_[0]->{_CUTTING} = $_[1]) : $_[0]->{_CUTTING};
-}
-
-##---------------------------------------------------------------------------
-
-##---------------------------------------------------------------------------
-
-=head1 B<parseopts()>
-
-When invoked with no additional arguments, B<parseopts> returns a hashtable
-of all the current parsing options.
-
- ## See if we are parsing non-POD sections as well as POD ones
- my %opts = $parser->parseopts();
- $opts{'-want_nonPODs}' and print "-want_nonPODs\n";
-
-When invoked using a single string, B<parseopts> treats the string as the
-name of a parse-option and returns its corresponding value if it exists
-(returns C<undef> if it doesn't).
-
- ## Did we ask to see '=cut' paragraphs?
- my $want_cut = $parser->parseopts('-process_cut_cmd');
- $want_cut and print "-process_cut_cmd\n";
-
-When invoked with multiple arguments, B<parseopts> treats them as
-key/value pairs and the specified parse-option names are set to the
-given values. Any unspecified parse-options are unaffected.
-
- ## Set them back to the default
- $parser->parseopts(-warnings => 0);
-
-When passed a single hash-ref, B<parseopts> uses that hash to completely
-reset the existing parse-options, all previous parse-option values
-are lost.
-
- ## Reset all options to default
- $parser->parseopts( { } );
-
-See L<"PARSING OPTIONS"> for more information on the name and meaning of each
-parse-option currently recognized.
-
-=cut
-
-sub parseopts {
- local *myData = shift;
- local *myOpts = ($myData{_PARSEOPTS} ||= {});
- return %myOpts if (@_ == 0);
- if (@_ == 1) {
- local $_ = shift;
- return ref($_) ? $myData{_PARSEOPTS} = $_ : $myOpts{$_};
- }
- my @newOpts = (%myOpts, @_);
- $myData{_PARSEOPTS} = { @newOpts };
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<output_file()>
-
- $fname = $parser->output_file();
-
-Returns the name of the output file being written.
-
-=cut
-
-sub output_file {
- return $_[0]->{_OUTFILE};
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<output_handle()>
-
- $fhandle = $parser->output_handle();
-
-Returns the output filehandle object.
-
-=cut
-
-sub output_handle {
- return $_[0]->{_OUTPUT};
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<input_file()>
-
- $fname = $parser->input_file();
-
-Returns the name of the input file being read.
-
-=cut
-
-sub input_file {
- return $_[0]->{_INFILE};
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<input_handle()>
-
- $fhandle = $parser->input_handle();
-
-Returns the current input filehandle object.
-
-=cut
-
-sub input_handle {
- return $_[0]->{_INPUT};
-}
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head1 B<input_streams()>
-
- $listref = $parser->input_streams();
-
-Returns a reference to an array which corresponds to the stack of all
-the input streams that are currently in the middle of being parsed.
-
-While parsing an input stream, it is possible to invoke
-B<parse_from_file()> or B<parse_from_filehandle()> to parse a new input
-stream and then return to parsing the previous input stream. Each input
-stream to be parsed is pushed onto the end of this input stack
-before any of its input is read. The input stream that is currently
-being parsed is always at the end (or top) of the input stack. When an
-input stream has been exhausted, it is popped off the end of the
-input stack.
-
-Each element on this input stack is a reference to C<Pod::InputSource>
-object. Please see L<Pod::InputObjects> for more details.
-
-This method might be invoked when printing diagnostic messages, for example,
-to obtain the name and line number of the all input files that are currently
-being processed.
-
-=end __PRIVATE__
-
-=cut
-
-sub input_streams {
- return $_[0]->{_INPUT_STREAMS};
-}
-
-##---------------------------------------------------------------------------
-
-=begin __PRIVATE__
-
-=head1 B<top_stream()>
-
- $hashref = $parser->top_stream();
-
-Returns a reference to the hash-table that represents the element
-that is currently at the top (end) of the input stream stack
-(see L<"input_streams()">). The return value will be the C<undef>
-if the input stack is empty.
-
-This method might be used when printing diagnostic messages, for example,
-to obtain the name and line number of the current input file.
-
-=end __PRIVATE__
-
-=cut
-
-sub top_stream {
- return $_[0]->{_TOP_STREAM} || undef;
-}
-
-#############################################################################
-
-=head1 PRIVATE METHODS AND DATA
-
-B<Pod::Parser> makes use of several internal methods and data fields
-which clients should not need to see or use. For the sake of avoiding
-name collisions for client data and methods, these methods and fields
-are briefly discussed here. Determined hackers may obtain further
-information about them by reading the B<Pod::Parser> source code.
-
-Private data fields are stored in the hash-object whose reference is
-returned by the B<new()> constructor for this class. The names of all
-private methods and data-fields used by B<Pod::Parser> begin with a
-prefix of "_" and match the regular expression C</^_\w+$/>.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=begin _PRIVATE_
-
-=head1 B<_push_input_stream()>
-
- $hashref = $parser->_push_input_stream($in_fh,$out_fh);
-
-This method will push the given input stream on the input stack and
-perform any necessary beginning-of-document or beginning-of-file
-processing. The argument C<$in_fh> is the input stream filehandle to
-push, and C<$out_fh> is the corresponding output filehandle to use (if
-it is not given or is undefined, then the current output stream is used,
-which defaults to standard output if it doesnt exist yet).
-
-The value returned will be reference to the hash-table that represents
-the new top of the input stream stack. I<Please Note> that it is
-possible for this method to use default values for the input and output
-file handles. If this happens, you will need to look at the C<INPUT>
-and C<OUTPUT> instance data members to determine their new values.
-
-=end _PRIVATE_
-
-=cut
-
-sub _push_input_stream {
- my ($self, $in_fh, $out_fh) = @_;
- local *myData = $self;
-
- ## Initialize stuff for the entire document if this is *not*
- ## an included file.
- ##
- ## NOTE: we need to be *very* careful when "defaulting" the output
- ## filehandle. We only want to use a default value if this is the
- ## beginning of the entire document (but *not* if this is an included
- ## file).
- unless (defined $myData{_TOP_STREAM}) {
- $out_fh = \*STDOUT unless (defined $out_fh);
- $myData{_CUTTING} = 1; ## current "cutting" state
- $myData{_INPUT_STREAMS} = []; ## stack of all input streams
- }
-
- ## Initialize input indicators
- $myData{_OUTFILE} = '(unknown)' unless (defined $myData{_OUTFILE});
- $myData{_OUTPUT} = $out_fh if (defined $out_fh);
- $in_fh = \*STDIN unless (defined $in_fh);
- $myData{_INFILE} = '(unknown)' unless (defined $myData{_INFILE});
- $myData{_INPUT} = $in_fh;
- my $input_top = $myData{_TOP_STREAM}
- = new Pod::InputSource(
- -name => $myData{_INFILE},
- -handle => $in_fh,
- -was_cutting => $myData{_CUTTING}
- );
- local *input_stack = $myData{_INPUT_STREAMS};
- push(@input_stack, $input_top);
-
- ## Perform beginning-of-document and/or beginning-of-input processing
- $self->begin_pod() if (@input_stack == 1);
- $self->begin_input();
-
- return $input_top;
-}
-
-##---------------------------------------------------------------------------
-
-=begin _PRIVATE_
-
-=head1 B<_pop_input_stream()>
-
- $hashref = $parser->_pop_input_stream();
-
-This takes no arguments. It will perform any necessary end-of-file or
-end-of-document processing and then pop the current input stream from
-the top of the input stack.
-
-The value returned will be reference to the hash-table that represents
-the new top of the input stream stack.
-
-=end _PRIVATE_
-
-=cut
-
-sub _pop_input_stream {
- my ($self) = @_;
- local *myData = $self;
- local *input_stack = $myData{_INPUT_STREAMS};
-
- ## Perform end-of-input and/or end-of-document processing
- $self->end_input() if (@input_stack > 0);
- $self->end_pod() if (@input_stack == 1);
-
- ## Restore cutting state to whatever it was before we started
- ## parsing this file.
- my $old_top = pop(@input_stack);
- $myData{_CUTTING} = $old_top->was_cutting();
-
- ## Don't forget to reset the input indicators
- my $input_top = undef;
- if (@input_stack > 0) {
- $input_top = $myData{_TOP_STREAM} = $input_stack[-1];
- $myData{_INFILE} = $input_top->name();
- $myData{_INPUT} = $input_top->handle();
- } else {
- delete $myData{_TOP_STREAM};
- delete $myData{_INPUT_STREAMS};
- }
-
- return $input_top;
-}
-
-#############################################################################
-
-=head1 TREE-BASED PARSING
-
-If straightforward stream-based parsing wont meet your needs (as is
-likely the case for tasks such as translating PODs into structured
-markup languages like HTML and XML) then you may need to take the
-tree-based approach. Rather than doing everything in one pass and
-calling the B<interpolate()> method to expand sequences into text, it
-may be desirable to instead create a parse-tree using the B<parse_text()>
-method to return a tree-like structure which may contain an ordered
-list of children (each of which may be a text-string, or a similar
-tree-like structure).
-
-Pay special attention to L<"METHODS FOR PARSING AND PROCESSING"> and
-to the objects described in L<Pod::InputObjects>. The former describes
-the gory details and parameters for how to customize and extend the
-parsing behavior of B<Pod::Parser>. B<Pod::InputObjects> provides
-several objects that may all be used interchangeably as parse-trees. The
-most obvious one is the B<Pod::ParseTree> object. It defines the basic
-interface and functionality that all things trying to be a POD parse-tree
-should do. A B<Pod::ParseTree> is defined such that each "node" may be a
-text-string, or a reference to another parse-tree. Each B<Pod::Paragraph>
-object and each B<Pod::InteriorSequence> object also supports the basic
-parse-tree interface.
-
-The B<parse_text()> method takes a given paragraph of text, and
-returns a parse-tree that contains one or more children, each of which
-may be a text-string, or an InteriorSequence object. There are also
-callback-options that may be passed to B<parse_text()> to customize
-the way it expands or transforms interior-sequences, as well as the
-returned result. These callbacks can be used to create a parse-tree
-with custom-made objects (which may or may not support the parse-tree
-interface, depending on how you choose to do it).
-
-If you wish to turn an entire POD document into a parse-tree, that process
-is fairly straightforward. The B<parse_text()> method is the key to doing
-this successfully. Every paragraph-callback (i.e. the polymorphic methods
-for B<command()>, B<verbatim()>, and B<textblock()> paragraphs) takes
-a B<Pod::Paragraph> object as an argument. Each paragraph object has a
-B<parse_tree()> method that can be used to get or set a corresponding
-parse-tree. So for each of those paragraph-callback methods, simply call
-B<parse_text()> with the options you desire, and then use the returned
-parse-tree to assign to the given paragraph object.
-
-That gives you a parse-tree for each paragraph - so now all you need is
-an ordered list of paragraphs. You can maintain that yourself as a data
-element in the object/hash. The most straightforward way would be simply
-to use an array-ref, with the desired set of custom "options" for each
-invocation of B<parse_text>. Let's assume the desired option-set is
-given by the hash C<%options>. Then we might do something like the
-following:
-
- package MyPodParserTree;
-
- @ISA = qw( Pod::Parser );
-
- ...
-
- sub begin_pod {
- my $self = shift;
- $self->{'-paragraphs'} = []; ## initialize paragraph list
- }
-
- sub command {
- my ($parser, $command, $paragraph, $line_num, $pod_para) = @_;
- my $ptree = $parser->parse_text({%options}, $paragraph, ...);
- $pod_para->parse_tree( $ptree );
- push @{ $self->{'-paragraphs'} }, $pod_para;
- }
-
- sub verbatim {
- my ($parser, $paragraph, $line_num, $pod_para) = @_;
- push @{ $self->{'-paragraphs'} }, $pod_para;
- }
-
- sub textblock {
- my ($parser, $paragraph, $line_num, $pod_para) = @_;
- my $ptree = $parser->parse_text({%options}, $paragraph, ...);
- $pod_para->parse_tree( $ptree );
- push @{ $self->{'-paragraphs'} }, $pod_para;
- }
-
- ...
-
- package main;
- ...
- my $parser = new MyPodParserTree(...);
- $parser->parse_from_file(...);
- my $paragraphs_ref = $parser->{'-paragraphs'};
-
-Of course, in this module-author's humble opinion, I'd be more inclined to
-use the existing B<Pod::ParseTree> object than a simple array. That way
-everything in it, paragraphs and sequences, all respond to the same core
-interface for all parse-tree nodes. The result would look something like:
-
- package MyPodParserTree2;
-
- ...
-
- sub begin_pod {
- my $self = shift;
- $self->{'-ptree'} = new Pod::ParseTree; ## initialize parse-tree
- }
-
- sub parse_tree {
- ## convenience method to get/set the parse-tree for the entire POD
- (@_ > 1) and $_[0]->{'-ptree'} = $_[1];
- return $_[0]->{'-ptree'};
- }
-
- sub command {
- my ($parser, $command, $paragraph, $line_num, $pod_para) = @_;
- my $ptree = $parser->parse_text({<<options>>}, $paragraph, ...);
- $pod_para->parse_tree( $ptree );
- $parser->parse_tree()->append( $pod_para );
- }
-
- sub verbatim {
- my ($parser, $paragraph, $line_num, $pod_para) = @_;
- $parser->parse_tree()->append( $pod_para );
- }
-
- sub textblock {
- my ($parser, $paragraph, $line_num, $pod_para) = @_;
- my $ptree = $parser->parse_text({<<options>>}, $paragraph, ...);
- $pod_para->parse_tree( $ptree );
- $parser->parse_tree()->append( $pod_para );
- }
-
- ...
-
- package main;
- ...
- my $parser = new MyPodParserTree2(...);
- $parser->parse_from_file(...);
- my $ptree = $parser->parse_tree;
- ...
-
-Now you have the entire POD document as one great big parse-tree. You
-can even use the B<-expand_seq> option to B<parse_text> to insert
-whole different kinds of objects. Just don't expect B<Pod::Parser>
-to know what to do with them after that. That will need to be in your
-code. Or, alternatively, you can insert any object you like so long as
-it conforms to the B<Pod::ParseTree> interface.
-
-One could use this to create subclasses of B<Pod::Paragraphs> and
-B<Pod::InteriorSequences> for specific commands (or to create your own
-custom node-types in the parse-tree) and add some kind of B<emit()>
-method to each custom node/subclass object in the tree. Then all you'd
-need to do is recursively walk the tree in the desired order, processing
-the children (most likely from left to right) by formatting them if
-they are text-strings, or by calling their B<emit()> method if they
-are objects/references.
-
-=head1 CAVEATS
-
-Please note that POD has the notion of "paragraphs": this is something
-starting I<after> a blank (read: empty) line, with the single exception
-of the file start, which is also starting a paragraph. That means that
-especially a command (e.g. C<=head1>) I<must> be preceded with a blank
-line; C<__END__> is I<not> a blank line.
-
-=head1 SEE ALSO
-
-L<Pod::InputObjects>, L<Pod::Select>
-
-B<Pod::InputObjects> defines POD input objects corresponding to
-command paragraphs, parse-trees, and interior-sequences.
-
-B<Pod::Select> is a subclass of B<Pod::Parser> which provides the ability
-to selectively include and/or exclude sections of a POD document from being
-translated based upon the current heading, subheading, subsubheading, etc.
-
-=for __PRIVATE__
-B<Pod::Callbacks> is a subclass of B<Pod::Parser> which gives its users
-the ability the employ I<callback functions> instead of, or in addition
-to, overriding methods of the base class.
-
-=for __PRIVATE__
-B<Pod::Select> and B<Pod::Callbacks> do not override any
-methods nor do they define any new methods with the same name. Because
-of this, they may I<both> be used (in combination) as a base class of
-the same subclass in order to combine their functionality without
-causing any namespace clashes due to multiple inheritance.
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt>
-
-Based on code for B<Pod::Text> written by
-Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
-
-=head1 LICENSE
-
-Pod-Parser is free software; you can redistribute it and/or modify it
-under the terms of the Artistic License distributed with Perl version
-5.000 or (at your option) any later version. Please refer to the
-Artistic License that came with your Perl distribution for more
-details. If your version of Perl was not distributed under the
-terms of the Artistic License, than you may distribute PodParser
-under the same terms as Perl itself.
-
-=cut
-
-1;
-# vim: ts=4 sw=4 et
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/PlainText.pm b/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/PlainText.pm
deleted file mode 100644
index 03252e93c71..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/PlainText.pm
+++ /dev/null
@@ -1,761 +0,0 @@
-# Pod::PlainText -- Convert POD data to formatted ASCII text.
-# $Id: Text.pm,v 2.1 1999/09/20 11:53:33 eagle Exp $
-#
-# Copyright 1999-2000 by Russ Allbery <rra@stanford.edu>
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# This module is intended to be a replacement for Pod::Text, and attempts to
-# match its output except for some specific circumstances where other
-# decisions seemed to produce better output. It uses Pod::Parser and is
-# designed to be very easy to subclass.
-
-############################################################################
-# Modules and declarations
-############################################################################
-
-package Pod::PlainText;
-use strict;
-
-require 5.005;
-
-use Carp qw(carp croak);
-use Pod::Select ();
-
-use vars qw(@ISA %ESCAPES $VERSION);
-
-# We inherit from Pod::Select instead of Pod::Parser so that we can be used
-# by Pod::Usage.
-@ISA = qw(Pod::Select);
-
-$VERSION = '2.07';
-
-BEGIN {
- if ($] < 5.006) {
- require Symbol;
- import Symbol;
- }
-}
-
-############################################################################
-# Table of supported E<> escapes
-############################################################################
-
-# This table is taken near verbatim from Pod::PlainText in Pod::Parser,
-# which got it near verbatim from the original Pod::Text. It is therefore
-# credited to Tom Christiansen, and I'm glad I didn't have to write it. :)
-%ESCAPES = (
- 'amp' => '&', # ampersand
- 'lt' => '<', # left chevron, less-than
- 'gt' => '>', # right chevron, greater-than
- 'quot' => '"', # double quote
-
- "Aacute" => "\xC1", # capital A, acute accent
- "aacute" => "\xE1", # small a, acute accent
- "Acirc" => "\xC2", # capital A, circumflex accent
- "acirc" => "\xE2", # small a, circumflex accent
- "AElig" => "\xC6", # capital AE diphthong (ligature)
- "aelig" => "\xE6", # small ae diphthong (ligature)
- "Agrave" => "\xC0", # capital A, grave accent
- "agrave" => "\xE0", # small a, grave accent
- "Aring" => "\xC5", # capital A, ring
- "aring" => "\xE5", # small a, ring
- "Atilde" => "\xC3", # capital A, tilde
- "atilde" => "\xE3", # small a, tilde
- "Auml" => "\xC4", # capital A, dieresis or umlaut mark
- "auml" => "\xE4", # small a, dieresis or umlaut mark
- "Ccedil" => "\xC7", # capital C, cedilla
- "ccedil" => "\xE7", # small c, cedilla
- "Eacute" => "\xC9", # capital E, acute accent
- "eacute" => "\xE9", # small e, acute accent
- "Ecirc" => "\xCA", # capital E, circumflex accent
- "ecirc" => "\xEA", # small e, circumflex accent
- "Egrave" => "\xC8", # capital E, grave accent
- "egrave" => "\xE8", # small e, grave accent
- "ETH" => "\xD0", # capital Eth, Icelandic
- "eth" => "\xF0", # small eth, Icelandic
- "Euml" => "\xCB", # capital E, dieresis or umlaut mark
- "euml" => "\xEB", # small e, dieresis or umlaut mark
- "Iacute" => "\xCD", # capital I, acute accent
- "iacute" => "\xED", # small i, acute accent
- "Icirc" => "\xCE", # capital I, circumflex accent
- "icirc" => "\xEE", # small i, circumflex accent
- "Igrave" => "\xCD", # capital I, grave accent
- "igrave" => "\xED", # small i, grave accent
- "Iuml" => "\xCF", # capital I, dieresis or umlaut mark
- "iuml" => "\xEF", # small i, dieresis or umlaut mark
- "Ntilde" => "\xD1", # capital N, tilde
- "ntilde" => "\xF1", # small n, tilde
- "Oacute" => "\xD3", # capital O, acute accent
- "oacute" => "\xF3", # small o, acute accent
- "Ocirc" => "\xD4", # capital O, circumflex accent
- "ocirc" => "\xF4", # small o, circumflex accent
- "Ograve" => "\xD2", # capital O, grave accent
- "ograve" => "\xF2", # small o, grave accent
- "Oslash" => "\xD8", # capital O, slash
- "oslash" => "\xF8", # small o, slash
- "Otilde" => "\xD5", # capital O, tilde
- "otilde" => "\xF5", # small o, tilde
- "Ouml" => "\xD6", # capital O, dieresis or umlaut mark
- "ouml" => "\xF6", # small o, dieresis or umlaut mark
- "szlig" => "\xDF", # small sharp s, German (sz ligature)
- "THORN" => "\xDE", # capital THORN, Icelandic
- "thorn" => "\xFE", # small thorn, Icelandic
- "Uacute" => "\xDA", # capital U, acute accent
- "uacute" => "\xFA", # small u, acute accent
- "Ucirc" => "\xDB", # capital U, circumflex accent
- "ucirc" => "\xFB", # small u, circumflex accent
- "Ugrave" => "\xD9", # capital U, grave accent
- "ugrave" => "\xF9", # small u, grave accent
- "Uuml" => "\xDC", # capital U, dieresis or umlaut mark
- "uuml" => "\xFC", # small u, dieresis or umlaut mark
- "Yacute" => "\xDD", # capital Y, acute accent
- "yacute" => "\xFD", # small y, acute accent
- "yuml" => "\xFF", # small y, dieresis or umlaut mark
-
- "lchevron" => "\xAB", # left chevron (double less than)
- "rchevron" => "\xBB", # right chevron (double greater than)
-);
-
-
-############################################################################
-# Initialization
-############################################################################
-
-# Initialize the object. Must be sure to call our parent initializer.
-sub initialize {
- my $self = shift;
-
- $$self{alt} = 0 unless defined $$self{alt};
- $$self{indent} = 4 unless defined $$self{indent};
- $$self{loose} = 0 unless defined $$self{loose};
- $$self{sentence} = 0 unless defined $$self{sentence};
- $$self{width} = 76 unless defined $$self{width};
-
- $$self{INDENTS} = []; # Stack of indentations.
- $$self{MARGIN} = $$self{indent}; # Current left margin in spaces.
-
- return $self->SUPER::initialize;
-}
-
-# pod2text and pod2man re-use the same parser on a list of files,
-# and will lose some information if some intermediate documents produce
-# unbalanced calls to begin_cmd/end_cmd.
-# via r1.4 of OpenBSD src/gnu/usr.bin/perl/lib/Pod/PlainText.pm
-sub begin_pod {
- my $self = shift;
-
- $$self{VERBATIM} = 0;
- $$self{EXCLUDE} = 0;
-
- return $self->SUPER::begin_pod(@_);
-}
-
-
-############################################################################
-# Core overrides
-############################################################################
-
-# Called for each command paragraph. Gets the command, the associated
-# paragraph, the line number, and a Pod::Paragraph object. Just dispatches
-# the command to a method named the same as the command. =cut is handled
-# internally by Pod::Parser.
-sub command {
- my $self = shift;
- my $command = shift;
- return if $command eq 'pod';
- return if ($$self{EXCLUDE} && $command ne 'end');
- if (defined $$self{ITEM}) {
- $self->item ("\n");
- local $_ = "\n";
- $self->output($_) if($command eq 'back');
- }
- $command = 'cmd_' . $command;
- return $self->$command (@_);
-}
-
-# Called for a verbatim paragraph. Gets the paragraph, the line number, and
-# a Pod::Paragraph object. Just output it verbatim, but with tabs converted
-# to spaces.
-sub verbatim {
- my $self = shift;
- return if $$self{EXCLUDE};
- $self->item if defined $$self{ITEM};
- local $_ = shift;
- return if /^\s*$/;
- s/^(\s*\S+)/(' ' x $$self{MARGIN}) . $1/gme;
- return $self->output($_);
-}
-
-# Called for a regular text block. Gets the paragraph, the line number, and
-# a Pod::Paragraph object. Perform interpolation and output the results.
-sub textblock {
- my $self = shift;
- return if $$self{EXCLUDE};
- if($$self{VERBATIM}) {
- $self->output($_[0]);
- return;
- }
- local $_ = shift;
- my $line = shift;
-
- # Perform a little magic to collapse multiple L<> references. This is
- # here mostly for backwards-compatibility. We'll just rewrite the whole
- # thing into actual text at this part, bypassing the whole internal
- # sequence parsing thing.
- s{
- (
- L< # A link of the form L</something>.
- /
- (
- [:\w]+ # The item has to be a simple word...
- (\(\))? # ...or simple function.
- )
- >
- (
- ,?\s+(and\s+)? # Allow lots of them, conjuncted.
- L<
- /
- (
- [:\w]+
- (\(\))?
- )
- >
- )+
- )
- } {
- local $_ = $1;
- s%L</([^>]+)>%$1%g;
- my @items = split /(?:,?\s+(?:and\s+)?)/;
- my $string = "the ";
- my $i;
- for ($i = 0; $i < @items; $i++) {
- $string .= $items[$i];
- $string .= ", " if @items > 2 && $i != $#items;
- $string .= " and " if ($i == $#items - 1);
- }
- $string .= " entries elsewhere in this document";
- $string;
- }gex;
-
- # Now actually interpolate and output the paragraph.
- $_ = $self->interpolate ($_, $line);
- s/\s*$/\n/s;
- if (defined $$self{ITEM}) {
- $self->item ($_ . "\n");
- } else {
- $self->output ($self->reformat ($_ . "\n"));
- }
-}
-
-# Called for an interior sequence. Gets the command, argument, and a
-# Pod::InteriorSequence object and is expected to return the resulting text.
-# Calls code, bold, italic, file, and link to handle those types of
-# sequences, and handles S<>, E<>, X<>, and Z<> directly.
-sub interior_sequence {
- my $self = shift;
- my $command = shift;
- local $_ = shift;
- return '' if ($command eq 'X' || $command eq 'Z');
-
- # Expand escapes into the actual character now, carping if invalid.
- if ($command eq 'E') {
- return $ESCAPES{$_} if defined $ESCAPES{$_};
- carp "Unknown escape: E<$_>";
- return "E<$_>";
- }
-
- # For all the other sequences, empty content produces no output.
- return if $_ eq '';
-
- # For S<>, compress all internal whitespace and then map spaces to \01.
- # When we output the text, we'll map this back.
- if ($command eq 'S') {
- s/\s{2,}/ /g;
- tr/ /\01/;
- return $_;
- }
-
- # Anything else needs to get dispatched to another method.
- if ($command eq 'B') { return $self->seq_b ($_) }
- elsif ($command eq 'C') { return $self->seq_c ($_) }
- elsif ($command eq 'F') { return $self->seq_f ($_) }
- elsif ($command eq 'I') { return $self->seq_i ($_) }
- elsif ($command eq 'L') { return $self->seq_l ($_) }
- else { carp "Unknown sequence $command<$_>" }
-}
-
-# Called for each paragraph that's actually part of the POD. We take
-# advantage of this opportunity to untabify the input.
-sub preprocess_paragraph {
- my $self = shift;
- local $_ = shift;
- 1 while s/^(.*?)(\t+)/$1 . ' ' x (length ($2) * 8 - length ($1) % 8)/me;
- return $_;
-}
-
-
-############################################################################
-# Command paragraphs
-############################################################################
-
-# All command paragraphs take the paragraph and the line number.
-
-# First level heading.
-sub cmd_head1 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//s;
- $_ = $self->interpolate ($_, shift);
- if ($$self{alt}) {
- $self->output ("\n==== $_ ====\n\n");
- } else {
- $_ .= "\n" if $$self{loose};
- $self->output ($_ . "\n");
- }
-}
-
-# Second level heading.
-sub cmd_head2 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//s;
- $_ = $self->interpolate ($_, shift);
- if ($$self{alt}) {
- $self->output ("\n== $_ ==\n\n");
- } else {
- $_ .= "\n" if $$self{loose};
- $self->output (' ' x ($$self{indent} / 2) . $_ . "\n");
- }
-}
-
-# third level heading - not strictly perlpodspec compliant
-sub cmd_head3 {
- my $self = shift;
- local $_ = shift;
- s/\s+$//s;
- $_ = $self->interpolate ($_, shift);
- if ($$self{alt}) {
- $self->output ("\n= $_ =\n");
- } else {
- $_ .= "\n" if $$self{loose};
- $self->output (' ' x ($$self{indent}) . $_ . "\n");
- }
-}
-
-# fourth level heading - not strictly perlpodspec compliant
-# just like head3
-*cmd_head4 = \&cmd_head3;
-
-# Start a list.
-sub cmd_over {
- my $self = shift;
- local $_ = shift;
- unless (/^[-+]?\d+\s+$/) { $_ = $$self{indent} }
- push (@{ $$self{INDENTS} }, $$self{MARGIN});
- $$self{MARGIN} += ($_ + 0);
-}
-
-# End a list.
-sub cmd_back {
- my $self = shift;
- $$self{MARGIN} = pop @{ $$self{INDENTS} };
- unless (defined $$self{MARGIN}) {
- carp 'Unmatched =back';
- $$self{MARGIN} = $$self{indent};
- }
-}
-
-# An individual list item.
-sub cmd_item {
- my $self = shift;
- if (defined $$self{ITEM}) { $self->item }
- local $_ = shift;
- s/\s+$//s;
- $$self{ITEM} = $self->interpolate ($_);
-}
-
-# Begin a block for a particular translator. Setting VERBATIM triggers
-# special handling in textblock().
-sub cmd_begin {
- my $self = shift;
- local $_ = shift;
- my ($kind) = /^(\S+)/ or return;
- if ($kind eq 'text') {
- $$self{VERBATIM} = 1;
- } else {
- $$self{EXCLUDE} = 1;
- }
-}
-
-# End a block for a particular translator. We assume that all =begin/=end
-# pairs are properly closed.
-sub cmd_end {
- my $self = shift;
- $$self{EXCLUDE} = 0;
- $$self{VERBATIM} = 0;
-}
-
-# One paragraph for a particular translator. Ignore it unless it's intended
-# for text, in which case we treat it as a verbatim text block.
-sub cmd_for {
- my $self = shift;
- local $_ = shift;
- my $line = shift;
- return unless s/^text\b[ \t]*\r?\n?//;
- $self->verbatim ($_, $line);
-}
-
-# just a dummy method for the time being
-sub cmd_encoding {
- return;
-}
-
-############################################################################
-# Interior sequences
-############################################################################
-
-# The simple formatting ones. These are here mostly so that subclasses can
-# override them and do more complicated things.
-sub seq_b { return $_[0]{alt} ? "``$_[1]''" : $_[1] }
-sub seq_c { return $_[0]{alt} ? "``$_[1]''" : "`$_[1]'" }
-sub seq_f { return $_[0]{alt} ? "\"$_[1]\"" : $_[1] }
-sub seq_i { return '*' . $_[1] . '*' }
-
-# The complicated one. Handle links. Since this is plain text, we can't
-# actually make any real links, so this is all to figure out what text we
-# print out.
-sub seq_l {
- my $self = shift;
- local $_ = shift;
-
- # Smash whitespace in case we were split across multiple lines.
- s/\s+/ /g;
-
- # If we were given any explicit text, just output it.
- if (/^([^|]+)\|/) { return $1 }
-
- # Okay, leading and trailing whitespace isn't important; get rid of it.
- s/^\s+//;
- s/\s+$//;
-
- # Default to using the whole content of the link entry as a section
- # name. Note that L<manpage/> forces a manpage interpretation, as does
- # something looking like L<manpage(section)>. The latter is an
- # enhancement over the original Pod::Text.
- my ($manpage, $section) = ('', $_);
- if (/^(?:https?|ftp|news):/) {
- # a URL
- return $_;
- } elsif (/^"\s*(.*?)\s*"$/) {
- $section = '"' . $1 . '"';
- } elsif (m/^[-:.\w]+(?:\(\S+\))?$/) {
- ($manpage, $section) = ($_, '');
- } elsif (m{/}) {
- ($manpage, $section) = split (/\s*\/\s*/, $_, 2);
- }
-
- my $text = '';
- # Now build the actual output text.
- if (!length $section) {
- $text = "the $manpage manpage" if length $manpage;
- } elsif ($section =~ /^[:\w]+(?:\(\))?/) {
- $text .= 'the ' . $section . ' entry';
- $text .= (length $manpage) ? " in the $manpage manpage"
- : ' elsewhere in this document';
- } else {
- $section =~ s/^\"\s*//;
- $section =~ s/\s*\"$//;
- $text .= 'the section on "' . $section . '"';
- $text .= " in the $manpage manpage" if length $manpage;
- }
- return $text;
-}
-
-
-############################################################################
-# List handling
-############################################################################
-
-# This method is called whenever an =item command is complete (in other
-# words, we've seen its associated paragraph or know for certain that it
-# doesn't have one). It gets the paragraph associated with the item as an
-# argument. If that argument is empty, just output the item tag; if it
-# contains a newline, output the item tag followed by the newline.
-# Otherwise, see if there's enough room for us to output the item tag in the
-# margin of the text or if we have to put it on a separate line.
-sub item {
- my $self = shift;
- local $_ = shift;
- my $tag = $$self{ITEM};
- unless (defined $tag) {
- carp 'item called without tag';
- return;
- }
- undef $$self{ITEM};
- my $indent = $$self{INDENTS}[-1];
- unless (defined $indent) { $indent = $$self{indent} }
- my $space = ' ' x $indent;
- $space =~ s/^ /:/ if $$self{alt};
- if (!$_ || /^\s+$/ || ($$self{MARGIN} - $indent < length ($tag) + 1)) {
- my $margin = $$self{MARGIN};
- $$self{MARGIN} = $indent;
- my $output = $self->reformat ($tag);
- $output =~ s/[\r\n]*$/\n/;
- $self->output ($output);
- $$self{MARGIN} = $margin;
- $self->output ($self->reformat ($_)) if /\S/;
- } else {
- $_ = $self->reformat ($_);
- s/^ /:/ if ($$self{alt} && $indent > 0);
- my $tagspace = ' ' x length $tag;
- s/^($space)$tagspace/$1$tag/ or carp 'Bizarre space in item';
- $self->output ($_);
- }
-}
-
-
-############################################################################
-# Output formatting
-############################################################################
-
-# Wrap a line, indenting by the current left margin. We can't use
-# Text::Wrap because it plays games with tabs. We can't use formline, even
-# though we'd really like to, because it screws up non-printing characters.
-# So we have to do the wrapping ourselves.
-sub wrap {
- my $self = shift;
- local $_ = shift;
- my $output = '';
- my $spaces = ' ' x $$self{MARGIN};
- my $width = $$self{width} - $$self{MARGIN};
- while (length > $width) {
- if (s/^([^\r\n]{0,$width})\s+// || s/^([^\r\n]{$width})//) {
- $output .= $spaces . $1 . "\n";
- } else {
- last;
- }
- }
- $output .= $spaces . $_;
- $output =~ s/\s+$/\n\n/;
- return $output;
-}
-
-# Reformat a paragraph of text for the current margin. Takes the text to
-# reformat and returns the formatted text.
-sub reformat {
- my $self = shift;
- local $_ = shift;
-
- # If we're trying to preserve two spaces after sentences, do some
- # munging to support that. Otherwise, smash all repeated whitespace.
- if ($$self{sentence}) {
- s/ +$//mg;
- s/\.\r?\n/. \n/g;
- s/[\r\n]+/ /g;
- s/ +/ /g;
- } else {
- s/\s+/ /g;
- }
- return $self->wrap($_);
-}
-
-# Output text to the output device.
-sub output { $_[1] =~ tr/\01/ /; print { $_[0]->output_handle } $_[1] }
-
-
-############################################################################
-# Backwards compatibility
-############################################################################
-
-# The old Pod::Text module did everything in a pod2text() function. This
-# tries to provide the same interface for legacy applications.
-sub pod2text {
- my @args;
-
- # This is really ugly; I hate doing option parsing in the middle of a
- # module. But the old Pod::Text module supported passing flags to its
- # entry function, so handle -a and -<number>.
- while ($_[0] =~ /^-/) {
- my $flag = shift;
- if ($flag eq '-a') { push (@args, alt => 1) }
- elsif ($flag =~ /^-(\d+)$/) { push (@args, width => $1) }
- else {
- unshift (@_, $flag);
- last;
- }
- }
-
- # Now that we know what arguments we're using, create the parser.
- my $parser = Pod::PlainText->new (@args);
-
- # If two arguments were given, the second argument is going to be a file
- # handle. That means we want to call parse_from_filehandle(), which
- # means we need to turn the first argument into a file handle. Magic
- # open will handle the <&STDIN case automagically.
- if (defined $_[1]) {
- my $infh;
- if ($] < 5.006) {
- $infh = gensym();
- }
- unless (open ($infh, $_[0])) {
- croak ("Can't open $_[0] for reading: $!\n");
- }
- $_[0] = $infh;
- return $parser->parse_from_filehandle (@_);
- } else {
- return $parser->parse_from_file (@_);
- }
-}
-
-
-############################################################################
-# Module return value and documentation
-############################################################################
-
-1;
-__END__
-
-=head1 NAME
-
-Pod::PlainText - Convert POD data to formatted ASCII text
-
-=head1 SYNOPSIS
-
- use Pod::PlainText;
- my $parser = Pod::PlainText->new (sentence => 0, width => 78);
-
- # Read POD from STDIN and write to STDOUT.
- $parser->parse_from_filehandle;
-
- # Read POD from file.pod and write to file.txt.
- $parser->parse_from_file ('file.pod', 'file.txt');
-
-=head1 DESCRIPTION
-
-B<NOTE: This module is considered legacy; modern Perl releases (5.18 and
-higher) are going to remove Pod-Parser from core and use L<Pod-Simple>
-for all things POD.>
-
-Pod::PlainText is a module that can convert documentation in the POD format (the
-preferred language for documenting Perl) into formatted ASCII. It uses no
-special formatting controls or codes whatsoever, and its output is therefore
-suitable for nearly any device.
-
-As a derived class from Pod::Parser, Pod::PlainText supports the same methods and
-interfaces. See L<Pod::Parser> for all the details; briefly, one creates a
-new parser with C<Pod::PlainText-E<gt>new()> and then calls either
-parse_from_filehandle() or parse_from_file().
-
-new() can take options, in the form of key/value pairs, that control the
-behavior of the parser. The currently recognized options are:
-
-=over 4
-
-=item alt
-
-If set to a true value, selects an alternate output format that, among other
-things, uses a different heading style and marks C<=item> entries with a
-colon in the left margin. Defaults to false.
-
-=item indent
-
-The number of spaces to indent regular text, and the default indentation for
-C<=over> blocks. Defaults to 4.
-
-=item loose
-
-If set to a true value, a blank line is printed after a C<=headN> headings.
-If set to false (the default), no blank line is printed after C<=headN>.
-This is the default because it's the expected formatting for manual pages;
-if you're formatting arbitrary text documents, setting this to true may
-result in more pleasing output.
-
-=item sentence
-
-If set to a true value, Pod::PlainText will assume that each sentence ends in two
-spaces, and will try to preserve that spacing. If set to false, all
-consecutive whitespace in non-verbatim paragraphs is compressed into a
-single space. Defaults to true.
-
-=item width
-
-The column at which to wrap text on the right-hand side. Defaults to 76.
-
-=back
-
-The standard Pod::Parser method parse_from_filehandle() takes up to two
-arguments, the first being the file handle to read POD from and the second
-being the file handle to write the formatted output to. The first defaults
-to STDIN if not given, and the second defaults to STDOUT. The method
-parse_from_file() is almost identical, except that its two arguments are the
-input and output disk files instead. See L<Pod::Parser> for the specific
-details.
-
-=head1 DIAGNOSTICS
-
-=over 4
-
-=item Bizarre space in item
-
-(W) Something has gone wrong in internal C<=item> processing. This message
-indicates a bug in Pod::PlainText; you should never see it.
-
-=item Can't open %s for reading: %s
-
-(F) Pod::PlainText was invoked via the compatibility mode pod2text() interface
-and the input file it was given could not be opened.
-
-=item Unknown escape: %s
-
-(W) The POD source contained an C<EE<lt>E<gt>> escape that Pod::PlainText didn't
-know about.
-
-=item Unknown sequence: %s
-
-(W) The POD source contained a non-standard internal sequence (something of
-the form C<XE<lt>E<gt>>) that Pod::PlainText didn't know about.
-
-=item Unmatched =back
-
-(W) Pod::PlainText encountered a C<=back> command that didn't correspond to an
-C<=over> command.
-
-=back
-
-=head1 RESTRICTIONS
-
-Embedded Ctrl-As (octal 001) in the input will be mapped to spaces on
-output, due to an internal implementation detail.
-
-=head1 NOTES
-
-This is a replacement for an earlier Pod::Text module written by Tom
-Christiansen. It has a revamped interface, since it now uses Pod::Parser,
-but an interface roughly compatible with the old Pod::Text::pod2text()
-function is still available. Please change to the new calling convention,
-though.
-
-The original Pod::Text contained code to do formatting via termcap
-sequences, although it wasn't turned on by default and it was problematic to
-get it to work at all. This rewrite doesn't even try to do that, but a
-subclass of it does. Look for L<Pod::Text::Termcap|Pod::Text::Termcap>.
-
-=head1 SEE ALSO
-
-B<Pod::PlainText> is part of the L<Pod::Parser> distribution.
-
-L<Pod::Parser|Pod::Parser>, L<Pod::Text::Termcap|Pod::Text::Termcap>,
-pod2text(1)
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Russ Allbery E<lt>rra@stanford.eduE<gt>, based I<very> heavily on the
-original Pod::Text by Tom Christiansen E<lt>tchrist@mox.perl.comE<gt> and
-its conversion to Pod::Parser by Brad Appleton
-E<lt>bradapp@enteract.comE<gt>.
-
-=cut
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Select.pm b/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Select.pm
deleted file mode 100644
index 70267e94ec0..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/lib/Pod/Select.pm
+++ /dev/null
@@ -1,756 +0,0 @@
-#############################################################################
-# Pod/Select.pm -- function to select portions of POD docs
-#
-# Copyright (C) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-package Pod::Select;
-use strict;
-
-use vars qw($VERSION @ISA @EXPORT $MAX_HEADING_LEVEL %myData @section_headings @selected_sections);
-$VERSION = '1.63'; ## Current version of this package
-require 5.005; ## requires this Perl version or later
-
-#############################################################################
-
-=head1 NAME
-
-Pod::Select, podselect() - extract selected sections of POD from input
-
-=head1 SYNOPSIS
-
- use Pod::Select;
-
- ## Select all the POD sections for each file in @filelist
- ## and print the result on standard output.
- podselect(@filelist);
-
- ## Same as above, but write to tmp.out
- podselect({-output => "tmp.out"}, @filelist):
-
- ## Select from the given filelist, only those POD sections that are
- ## within a 1st level section named any of: NAME, SYNOPSIS, OPTIONS.
- podselect({-sections => ["NAME|SYNOPSIS", "OPTIONS"]}, @filelist):
-
- ## Select the "DESCRIPTION" section of the PODs from STDIN and write
- ## the result to STDERR.
- podselect({-output => ">&STDERR", -sections => ["DESCRIPTION"]}, \*STDIN);
-
-or
-
- use Pod::Select;
-
- ## Create a parser object for selecting POD sections from the input
- $parser = new Pod::Select();
-
- ## Select all the POD sections for each file in @filelist
- ## and print the result to tmp.out.
- $parser->parse_from_file("<&STDIN", "tmp.out");
-
- ## Select from the given filelist, only those POD sections that are
- ## within a 1st level section named any of: NAME, SYNOPSIS, OPTIONS.
- $parser->select("NAME|SYNOPSIS", "OPTIONS");
- for (@filelist) { $parser->parse_from_file($_); }
-
- ## Select the "DESCRIPTION" and "SEE ALSO" sections of the PODs from
- ## STDIN and write the result to STDERR.
- $parser->select("DESCRIPTION");
- $parser->add_selection("SEE ALSO");
- $parser->parse_from_filehandle(\*STDIN, \*STDERR);
-
-=head1 REQUIRES
-
-perl5.005, Pod::Parser, Exporter, Carp
-
-=head1 EXPORTS
-
-podselect()
-
-=head1 DESCRIPTION
-
-B<NOTE: This module is considered legacy; modern Perl releases (5.18 and
-higher) are going to remove Pod-Parser from core and use L<Pod-Simple>
-for all things POD.>
-
-B<podselect()> is a function which will extract specified sections of
-pod documentation from an input stream. This ability is provided by the
-B<Pod::Select> module which is a subclass of B<Pod::Parser>.
-B<Pod::Select> provides a method named B<select()> to specify the set of
-POD sections to select for processing/printing. B<podselect()> merely
-creates a B<Pod::Select> object and then invokes the B<podselect()>
-followed by B<parse_from_file()>.
-
-=head1 SECTION SPECIFICATIONS
-
-B<podselect()> and B<Pod::Select::select()> may be given one or more
-"section specifications" to restrict the text processed to only the
-desired set of sections and their corresponding subsections. A section
-specification is a string containing one or more Perl-style regular
-expressions separated by forward slashes ("/"). If you need to use a
-forward slash literally within a section title you can escape it with a
-backslash ("\/").
-
-The formal syntax of a section specification is:
-
-=over 4
-
-=item *
-
-I<head1-title-regex>/I<head2-title-regex>/...
-
-=back
-
-Any omitted or empty regular expressions will default to ".*".
-Please note that each regular expression given is implicitly
-anchored by adding "^" and "$" to the beginning and end. Also, if a
-given regular expression starts with a "!" character, then the
-expression is I<negated> (so C<!foo> would match anything I<except>
-C<foo>).
-
-Some example section specifications follow.
-
-=over 4
-
-=item *
-
-Match the C<NAME> and C<SYNOPSIS> sections and all of their subsections:
-
-C<NAME|SYNOPSIS>
-
-=item *
-
-Match only the C<Question> and C<Answer> subsections of the C<DESCRIPTION>
-section:
-
-C<DESCRIPTION/Question|Answer>
-
-=item *
-
-Match the C<Comments> subsection of I<all> sections:
-
-C</Comments>
-
-=item *
-
-Match all subsections of C<DESCRIPTION> I<except> for C<Comments>:
-
-C<DESCRIPTION/!Comments>
-
-=item *
-
-Match the C<DESCRIPTION> section but do I<not> match any of its subsections:
-
-C<DESCRIPTION/!.+>
-
-=item *
-
-Match all top level sections but none of their subsections:
-
-C</!.+>
-
-=back
-
-=begin _NOT_IMPLEMENTED_
-
-=head1 RANGE SPECIFICATIONS
-
-B<podselect()> and B<Pod::Select::select()> may be given one or more
-"range specifications" to restrict the text processed to only the
-desired ranges of paragraphs in the desired set of sections. A range
-specification is a string containing a single Perl-style regular
-expression (a regex), or else two Perl-style regular expressions
-(regexs) separated by a ".." (Perl's "range" operator is "..").
-The regexs in a range specification are delimited by forward slashes
-("/"). If you need to use a forward slash literally within a regex you
-can escape it with a backslash ("\/").
-
-The formal syntax of a range specification is:
-
-=over 4
-
-=item *
-
-/I<start-range-regex>/[../I<end-range-regex>/]
-
-=back
-
-Where each the item inside square brackets (the ".." followed by the
-end-range-regex) is optional. Each "range-regex" is of the form:
-
- =cmd-expr text-expr
-
-Where I<cmd-expr> is intended to match the name of one or more POD
-commands, and I<text-expr> is intended to match the paragraph text for
-the command. If a range-regex is supposed to match a POD command, then
-the first character of the regex (the one after the initial '/')
-absolutely I<must> be a single '=' character; it may not be anything
-else (not even a regex meta-character) if it is supposed to match
-against the name of a POD command.
-
-If no I<=cmd-expr> is given then the text-expr will be matched against
-plain textblocks unless it is preceded by a space, in which case it is
-matched against verbatim text-blocks. If no I<text-expr> is given then
-only the command-portion of the paragraph is matched against.
-
-Note that these two expressions are each implicitly anchored. This
-means that when matching against the command-name, there will be an
-implicit '^' and '$' around the given I<=cmd-expr>; and when matching
-against the paragraph text there will be an implicit '\A' and '\Z'
-around the given I<text-expr>.
-
-Unlike with section-specs, the '!' character does I<not> have any special
-meaning (negation or otherwise) at the beginning of a range-spec!
-
-Some example range specifications follow.
-
-=over 4
-
-=item
-Match all C<=for html> paragraphs:
-
-C</=for html/>
-
-=item
-Match all paragraphs between C<=begin html> and C<=end html>
-(note that this will I<not> work correctly if such sections
-are nested):
-
-C</=begin html/../=end html/>
-
-=item
-Match all paragraphs between the given C<=item> name until the end of the
-current section:
-
-C</=item mine/../=head\d/>
-
-=item
-Match all paragraphs between the given C<=item> until the next item, or
-until the end of the itemized list (note that this will I<not> work as
-desired if the item contains an itemized list nested within it):
-
-C</=item mine/../=(item|back)/>
-
-=back
-
-=end _NOT_IMPLEMENTED_
-
-=cut
-
-#############################################################################
-
-#use diagnostics;
-use Carp;
-use Pod::Parser 1.04;
-
-@ISA = qw(Pod::Parser);
-@EXPORT = qw(&podselect);
-
-## Maximum number of heading levels supported for '=headN' directives
-*MAX_HEADING_LEVEL = \3;
-
-#############################################################################
-
-=head1 OBJECT METHODS
-
-The following methods are provided in this module. Each one takes a
-reference to the object itself as an implicit first parameter.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-## =begin _PRIVATE_
-##
-## =head1 B<_init_headings()>
-##
-## Initialize the current set of active section headings.
-##
-## =cut
-##
-## =end _PRIVATE_
-
-sub _init_headings {
- my $self = shift;
- local *myData = $self;
-
- ## Initialize current section heading titles if necessary
- unless (defined $myData{_SECTION_HEADINGS}) {
- local *section_headings = $myData{_SECTION_HEADINGS} = [];
- for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) {
- $section_headings[$i] = '';
- }
- }
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<curr_headings()>
-
- ($head1, $head2, $head3, ...) = $parser->curr_headings();
- $head1 = $parser->curr_headings(1);
-
-This method returns a list of the currently active section headings and
-subheadings in the document being parsed. The list of headings returned
-corresponds to the most recently parsed paragraph of the input.
-
-If an argument is given, it must correspond to the desired section
-heading number, in which case only the specified section heading is
-returned. If there is no current section heading at the specified
-level, then C<undef> is returned.
-
-=cut
-
-sub curr_headings {
- my $self = shift;
- $self->_init_headings() unless (defined $self->{_SECTION_HEADINGS});
- my @headings = @{ $self->{_SECTION_HEADINGS} };
- return (@_ > 0 and $_[0] =~ /^\d+$/) ? $headings[$_[0] - 1] : @headings;
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<select()>
-
- $parser->select($section_spec1,$section_spec2,...);
-
-This method is used to select the particular sections and subsections of
-POD documentation that are to be printed and/or processed. The existing
-set of selected sections is I<replaced> with the given set of sections.
-See B<add_selection()> for adding to the current set of selected
-sections.
-
-Each of the C<$section_spec> arguments should be a section specification
-as described in L<"SECTION SPECIFICATIONS">. The section specifications
-are parsed by this method and the resulting regular expressions are
-stored in the invoking object.
-
-If no C<$section_spec> arguments are given, then the existing set of
-selected sections is cleared out (which means C<all> sections will be
-processed).
-
-This method should I<not> normally be overridden by subclasses.
-
-=cut
-
-sub select {
- my ($self, @sections) = @_;
- local *myData = $self;
- local $_;
-
-### NEED TO DISCERN A SECTION-SPEC FROM A RANGE-SPEC (look for m{^/.+/$}?)
-
- ##---------------------------------------------------------------------
- ## The following is a blatant hack for backward compatibility, and for
- ## implementing add_selection(). If the *first* *argument* is the
- ## string "+", then the remaining section specifications are *added*
- ## to the current set of selections; otherwise the given section
- ## specifications will *replace* the current set of selections.
- ##
- ## This should probably be fixed someday, but for the present time,
- ## it seems incredibly unlikely that "+" would ever correspond to
- ## a legitimate section heading
- ##---------------------------------------------------------------------
- my $add = ($sections[0] eq '+') ? shift(@sections) : '';
-
- ## Reset the set of sections to use
- unless (@sections) {
- delete $myData{_SELECTED_SECTIONS} unless ($add);
- return;
- }
- $myData{_SELECTED_SECTIONS} = []
- unless ($add && exists $myData{_SELECTED_SECTIONS});
- local *selected_sections = $myData{_SELECTED_SECTIONS};
-
- ## Compile each spec
- for my $spec (@sections) {
- if ( defined($_ = _compile_section_spec($spec)) ) {
- ## Store them in our sections array
- push(@selected_sections, $_);
- }
- else {
- carp qq{Ignoring section spec "$spec"!\n};
- }
- }
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<add_selection()>
-
- $parser->add_selection($section_spec1,$section_spec2,...);
-
-This method is used to add to the currently selected sections and
-subsections of POD documentation that are to be printed and/or
-processed. See <select()> for replacing the currently selected sections.
-
-Each of the C<$section_spec> arguments should be a section specification
-as described in L<"SECTION SPECIFICATIONS">. The section specifications
-are parsed by this method and the resulting regular expressions are
-stored in the invoking object.
-
-This method should I<not> normally be overridden by subclasses.
-
-=cut
-
-sub add_selection {
- my $self = shift;
- return $self->select('+', @_);
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<clear_selections()>
-
- $parser->clear_selections();
-
-This method takes no arguments, it has the exact same effect as invoking
-<select()> with no arguments.
-
-=cut
-
-sub clear_selections {
- my $self = shift;
- return $self->select();
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<match_section()>
-
- $boolean = $parser->match_section($heading1,$heading2,...);
-
-Returns a value of true if the given section and subsection heading
-titles match any of the currently selected section specifications in
-effect from prior calls to B<select()> and B<add_selection()> (or if
-there are no explicitly selected/deselected sections).
-
-The arguments C<$heading1>, C<$heading2>, etc. are the heading titles of
-the corresponding sections, subsections, etc. to try and match. If
-C<$headingN> is omitted then it defaults to the current corresponding
-section heading title in the input.
-
-This method should I<not> normally be overridden by subclasses.
-
-=cut
-
-sub match_section {
- my $self = shift;
- my (@headings) = @_;
- local *myData = $self;
-
- ## Return true if no restrictions were explicitly specified
- my $selections = (exists $myData{_SELECTED_SECTIONS})
- ? $myData{_SELECTED_SECTIONS} : undef;
- return 1 unless ((defined $selections) && @{$selections});
-
- ## Default any unspecified sections to the current one
- my @current_headings = $self->curr_headings();
- for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) {
- (defined $headings[$i]) or $headings[$i] = $current_headings[$i];
- }
-
- ## Look for a match against the specified section expressions
- for my $section_spec ( @{$selections} ) {
- ##------------------------------------------------------
- ## Each portion of this spec must match in order for
- ## the spec to be matched. So we will start with a
- ## match-value of 'true' and logically 'and' it with
- ## the results of matching a given element of the spec.
- ##------------------------------------------------------
- my $match = 1;
- for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) {
- my $regex = $section_spec->[$i];
- my $negated = ($regex =~ s/^\!//);
- $match &= ($negated ? ($headings[$i] !~ /${regex}/)
- : ($headings[$i] =~ /${regex}/));
- last unless ($match);
- }
- return 1 if ($match);
- }
- return 0; ## no match
-}
-
-##---------------------------------------------------------------------------
-
-=head1 B<is_selected()>
-
- $boolean = $parser->is_selected($paragraph);
-
-This method is used to determine if the block of text given in
-C<$paragraph> falls within the currently selected set of POD sections
-and subsections to be printed or processed. This method is also
-responsible for keeping track of the current input section and
-subsections. It is assumed that C<$paragraph> is the most recently read
-(but not yet processed) input paragraph.
-
-The value returned will be true if the C<$paragraph> and the rest of the
-text in the same section as C<$paragraph> should be selected (included)
-for processing; otherwise a false value is returned.
-
-=cut
-
-sub is_selected {
- my ($self, $paragraph) = @_;
- local $_;
- local *myData = $self;
-
- $self->_init_headings() unless (defined $myData{_SECTION_HEADINGS});
-
- ## Keep track of current sections levels and headings
- $_ = $paragraph;
- if (/^=((?:sub)*)(?:head(?:ing)?|sec(?:tion)?)(\d*)\s+(.*?)\s*$/)
- {
- ## This is a section heading command
- my ($level, $heading) = ($2, $3);
- $level = 1 + (length($1) / 3) if ((! length $level) || (length $1));
- ## Reset the current section heading at this level
- $myData{_SECTION_HEADINGS}->[$level - 1] = $heading;
- ## Reset subsection headings of this one to empty
- for (my $i = $level; $i < $MAX_HEADING_LEVEL; ++$i) {
- $myData{_SECTION_HEADINGS}->[$i] = '';
- }
- }
-
- return $self->match_section();
-}
-
-#############################################################################
-
-=head1 EXPORTED FUNCTIONS
-
-The following functions are exported by this module. Please note that
-these are functions (not methods) and therefore C<do not> take an
-implicit first argument.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=head1 B<podselect()>
-
- podselect(\%options,@filelist);
-
-B<podselect> will print the raw (untranslated) POD paragraphs of all
-POD sections in the given input files specified by C<@filelist>
-according to the options given in C<\%options>.
-
-If any argument to B<podselect> is a reference to a hash
-(associative array) then the values with the following keys are
-processed as follows:
-
-=over 4
-
-=item B<-output>
-
-A string corresponding to the desired output file (or ">&STDOUT"
-or ">&STDERR"), or a filehandle to write on. The default is to use
-standard output.
-
-=item B<-sections>
-
-A reference to an array of sections specifications (as described in
-L<"SECTION SPECIFICATIONS">) which indicate the desired set of POD
-sections and subsections to be selected from input. If no section
-specifications are given, then all sections of the PODs are used.
-
-=begin _NOT_IMPLEMENTED_
-
-=item B<-ranges>
-
-A reference to an array of range specifications (as described in
-L<"RANGE SPECIFICATIONS">) which indicate the desired range of POD
-paragraphs to be selected from the desired input sections. If no range
-specifications are given, then all paragraphs of the desired sections
-are used.
-
-=end _NOT_IMPLEMENTED_
-
-=back
-
-All other arguments are optional and should correspond to filehandles to
-read from or the names of input files containing POD sections. A file name
-of "", "-" or "<&STDIN" will be interpreted to mean standard input (which
-is the default if no arguments are given).
-
-=cut
-
-sub podselect {
- my(@argv) = @_;
- my %defaults = ();
- my $pod_parser = new Pod::Select(%defaults);
- my $num_inputs = 0;
- my $output = '>&STDOUT';
- my %opts;
- local $_;
- for (@argv) {
- my $ref = ref($_);
- if ($ref && $ref eq 'HASH') {
- %opts = (%defaults, %{$_});
-
- ##-------------------------------------------------------------
- ## Need this for backward compatibility since we formerly used
- ## options that were all uppercase words rather than ones that
- ## looked like Unix command-line options.
- ## to be uppercase keywords)
- ##-------------------------------------------------------------
- %opts = map {
- my ($key, $val) = (lc $_, $opts{$_});
- $key =~ s/^(?=\w)/-/;
- $key =~ /^-se[cl]/ and $key = '-sections';
- #! $key eq '-range' and $key .= 's';
- ($key => $val);
- } (keys %opts);
-
- ## Process the options
- (exists $opts{'-output'}) and $output = $opts{'-output'};
-
- ## Select the desired sections
- $pod_parser->select(@{ $opts{'-sections'} })
- if ( (defined $opts{'-sections'})
- && ((ref $opts{'-sections'}) eq 'ARRAY') );
-
- #! ## Select the desired paragraph ranges
- #! $pod_parser->select(@{ $opts{'-ranges'} })
- #! if ( (defined $opts{'-ranges'})
- #! && ((ref $opts{'-ranges'}) eq 'ARRAY') );
- }
- elsif(!$ref || $ref eq 'GLOB') {
- $pod_parser->parse_from_file($_, $output);
- ++$num_inputs;
- }
- else {
- croak "Input from $ref reference not supported!\n";
- }
- }
- $pod_parser->parse_from_file('-') unless ($num_inputs > 0);
-}
-
-#############################################################################
-
-=head1 PRIVATE METHODS AND DATA
-
-B<Pod::Select> makes uses a number of internal methods and data fields
-which clients should not need to see or use. For the sake of avoiding
-name collisions with client data and methods, these methods and fields
-are briefly discussed here. Determined hackers may obtain further
-information about them by reading the B<Pod::Select> source code.
-
-Private data fields are stored in the hash-object whose reference is
-returned by the B<new()> constructor for this class. The names of all
-private methods and data-fields used by B<Pod::Select> begin with a
-prefix of "_" and match the regular expression C</^_\w+$/>.
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=begin _PRIVATE_
-
-=head1 B<_compile_section_spec()>
-
- $listref = $parser->_compile_section_spec($section_spec);
-
-This function (note it is a function and I<not> a method) takes a
-section specification (as described in L<"SECTION SPECIFICATIONS">)
-given in C<$section_sepc>, and compiles it into a list of regular
-expressions. If C<$section_spec> has no syntax errors, then a reference
-to the list (array) of corresponding regular expressions is returned;
-otherwise C<undef> is returned and an error message is printed (using
-B<carp>) for each invalid regex.
-
-=end _PRIVATE_
-
-=cut
-
-sub _compile_section_spec {
- my ($section_spec) = @_;
- my (@regexs, $negated);
-
- ## Compile the spec into a list of regexs
- local $_ = $section_spec;
- s{\\\\}{\001}g; ## handle escaped backward slashes
- s{\\/}{\002}g; ## handle escaped forward slashes
-
- ## Parse the regexs for the heading titles
- @regexs = split(/\//, $_, $MAX_HEADING_LEVEL);
-
- ## Set default regex for omitted levels
- for (my $i = 0; $i < $MAX_HEADING_LEVEL; ++$i) {
- $regexs[$i] = '.*' unless ((defined $regexs[$i])
- && (length $regexs[$i]));
- }
- ## Modify the regexs as needed and validate their syntax
- my $bad_regexs = 0;
- for (@regexs) {
- $_ .= '.+' if ($_ eq '!');
- s{\001}{\\\\}g; ## restore escaped backward slashes
- s{\002}{\\/}g; ## restore escaped forward slashes
- $negated = s/^\!//; ## check for negation
- eval "m{$_}"; ## check regex syntax
- if ($@) {
- ++$bad_regexs;
- carp qq{Bad regular expression /$_/ in "$section_spec": $@\n};
- }
- else {
- ## Add the forward and rear anchors (and put the negator back)
- $_ = '^' . $_ unless (/^\^/);
- $_ = $_ . '$' unless (/\$$/);
- $_ = '!' . $_ if ($negated);
- }
- }
- return (! $bad_regexs) ? [ @regexs ] : undef;
-}
-
-##---------------------------------------------------------------------------
-
-=begin _PRIVATE_
-
-=head2 $self->{_SECTION_HEADINGS}
-
-A reference to an array of the current section heading titles for each
-heading level (note that the first heading level title is at index 0).
-
-=end _PRIVATE_
-
-=cut
-
-##---------------------------------------------------------------------------
-
-=begin _PRIVATE_
-
-=head2 $self->{_SELECTED_SECTIONS}
-
-A reference to an array of references to arrays. Each subarray is a list
-of anchored regular expressions (preceded by a "!" if the expression is to
-be negated). The index of the expression in the subarray should correspond
-to the index of the heading title in C<$self-E<gt>{_SECTION_HEADINGS}>
-that it is to be matched against.
-
-=end _PRIVATE_
-
-=cut
-
-#############################################################################
-
-=head1 SEE ALSO
-
-L<Pod::Parser>
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt>
-
-Based on code for B<pod2text> written by
-Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
-
-B<Pod::Select> is part of the L<Pod::Parser> distribution.
-
-=cut
-
-1;
-# vim: ts=4 sw=4 et
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/scripts/podselect.PL b/gnu/usr.bin/perl/cpan/Pod-Parser/scripts/podselect.PL
deleted file mode 100644
index 16e2d985be6..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/scripts/podselect.PL
+++ /dev/null
@@ -1,143 +0,0 @@
-#!/usr/local/bin/perl
-
-use Config;
-use File::Basename qw(&basename &dirname);
-use Cwd;
-
-# List explicitly here the variables you want Configure to
-# generate. Metaconfig only looks for shell variables, so you
-# have to mention them as if they were shell variables, not
-# %Config entries. Thus you write
-# $startperl
-# to ensure Configure will look for $Config{startperl}.
-
-# This forces PL files to create target in same directory as PL file.
-# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
-chdir(dirname($0));
-$file = basename($0, '.PL');
-$file .= '.com' if $^O eq 'VMS';
-
-open OUT,">$file" or die "Can't create $file: $!";
-
-print "Extracting $file (with variable substitutions)\n";
-
-# In this section, perl variables will be expanded during extraction.
-# You can use $Config{...} to use Configure variables.
-
-print OUT <<"!GROK!THIS!";
-$Config{'startperl'}
- eval 'exec perl -S \$0 "\$@"'
- if 0;
-!GROK!THIS!
-
-# In the following, perl variables are not expanded during extraction.
-
-print OUT <<'!NO!SUBS!';
-
-#############################################################################
-# podselect -- command to invoke the podselect function in Pod::Select
-#
-# Copyright (c) 1996-2000 by Bradford Appleton. All rights reserved.
-# This file is part of "PodParser". PodParser is free software;
-# you can redistribute it and/or modify it under the same terms
-# as Perl itself.
-#############################################################################
-
-use strict;
-#use diagnostics;
-
-=head1 NAME
-
-podselect - print selected sections of pod documentation on standard output
-
-=head1 SYNOPSIS
-
-B<podselect> [B<-help>] [B<-man>] [B<-section>S< >I<section-spec>]
-[I<file>S< >...]
-
-=head1 OPTIONS AND ARGUMENTS
-
-=over 8
-
-=item B<-help>
-
-Print a brief help message and exit.
-
-=item B<-man>
-
-Print the manual page and exit.
-
-=item B<-section>S< >I<section-spec>
-
-Specify a section to include in the output.
-See L<Pod::Parser/"SECTION SPECIFICATIONS">
-for the format to use for I<section-spec>.
-This option may be given multiple times on the command line.
-
-=item I<file>
-
-The pathname of a file from which to select sections of pod
-documentation (defaults to standard input).
-
-=back
-
-=head1 DESCRIPTION
-
-B<podselect> will read the given input files looking for pod
-documentation and will print out (in raw pod format) all sections that
-match one ore more of the given section specifications. If no section
-specifications are given than all pod sections encountered are output.
-
-B<podselect> invokes the B<podselect()> function exported by B<Pod::Select>
-Please see L<Pod::Select/podselect()> for more details.
-
-=head1 SEE ALSO
-
-L<Pod::Parser> and L<Pod::Select>
-
-=head1 AUTHOR
-
-Please report bugs using L<http://rt.cpan.org>.
-
-Brad Appleton E<lt>bradapp@enteract.comE<gt>
-
-Based on code for B<Pod::Text::pod2text(1)> written by
-Tom Christiansen E<lt>tchrist@mox.perl.comE<gt>
-
-=cut
-
-use Pod::Select;
-use Pod::Usage;
-use Getopt::Long;
-
-## Define options
-my %options = (
- 'help' => 0,
- 'man' => 0,
- 'sections' => [],
-);
-
-## Parse options
-GetOptions(\%options, 'help', 'man', 'sections|select=s@') || pod2usage(2);
-pod2usage(1) if ($options{help});
-pod2usage(-verbose => 2) if ($options{man});
-
-## Dont default to STDIN if connected to a terminal
-pod2usage(2) if ((@ARGV == 0) && (-t STDIN));
-
-## Invoke podselect().
-if (@{ $options{'sections'} } > 0) {
- podselect({ -sections => $options{'sections'} }, @ARGV);
-}
-else {
- podselect(@ARGV);
-}
-
-
-!NO!SUBS!
-
-close OUT or die "Can't close $file: $!";
-chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
-exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
-chdir $origdir;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_bad_pod.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_bad_pod.xr
deleted file mode 100644
index c7907963d95..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_bad_pod.xr
+++ /dev/null
@@ -1,5 +0,0 @@
-=head foo
-
-bar baz.
-
-=cut
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_pod.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_pod.t
deleted file mode 100755
index 96cdb95bb17..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_pod.t
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env perl
-
-# Copyright (C) 2005 Joshua Hoblitt
-#
-# $Id$
-
-use strict;
-
-use Test::More tests => 2;
-
-use Pod::Find qw( contains_pod );
-
-{
- ok(contains_pod('t/pod/contains_pod.xr'), "contains pod");
-}
-
-{
- ok(contains_pod('t/pod/contains_bad_pod.xr'), "contains bad pod");
-}
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_pod.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_pod.xr
deleted file mode 100644
index b79591a95c4..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/contains_pod.xr
+++ /dev/null
@@ -1,5 +0,0 @@
-=head1 foo
-
-bar baz.
-
-=cut
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/empty.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/empty.xr
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/empty.xr
+++ /dev/null
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/emptycmd.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/emptycmd.t
deleted file mode 100755
index 53d1046345b..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/emptycmd.t
+++ /dev/null
@@ -1,21 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-__END__
-
-=pod
-
-= this is a test
-of the emergency
-broadcast system
-
-=cut
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/emptycmd.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/emptycmd.xr
deleted file mode 100644
index dd474a1a447..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/emptycmd.xr
+++ /dev/null
@@ -1,2 +0,0 @@
- = this is a test of the emergency broadcast system
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/find.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/find.t
deleted file mode 100755
index 90a57adaaca..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/find.t
+++ /dev/null
@@ -1,107 +0,0 @@
-# Testing of Pod::Find
-# Author: Marek Rouchal <marek@saftsack.fs.uni-bayreuth.de>
-
-$| = 1;
-
-BEGIN {
- if ($^O eq 'VMS') {
- print "1..0 # needs upstream patch from https://rt.cpan.org/Ticket/Display.html?id=55121";
- exit 0;
- }
-}
-
-use strict;
-use Test::More tests => 4;
-
-BEGIN {
- # 1. load successful
- use_ok('Pod::Find', qw(pod_find pod_where));
-}
-
-use File::Spec;
-
-require Cwd;
-my $THISDIR = Cwd::cwd();
-my $VERBOSE = $ENV{PERL_CORE} ? 0 : ($ENV{TEST_VERBOSE} || 0);
-my $lib_dir = File::Spec->catdir($THISDIR,'lib');
-
-if ($^O eq 'VMS') {
- $lib_dir = VMS::Filespec::unixify($lib_dir);
-}
-
-print "### 2. searching $lib_dir\n";
-my %pods = pod_find($lib_dir);
-my @results = values %pods;
-print "### found @results\n";
-my @compare = qw(
- Pod::Find
- Pod::InputObjects
- Pod::ParseUtils
- Pod::Parser
- Pod::PlainText
- Pod::Select
-);
-if (File::Spec->case_tolerant || $^O eq 'dos') {
- # must downcase before sorting
- map {$_ = lc $_} @compare;
- map {$_ = lc $_} @results;
-}
-my $compare = join(',', sort @compare);
-my $result = join(',', sort @results);
-is($result, $compare);
-
-print "### 3. searching for File::Find\n";
-$result = pod_where({ -inc => 1, -verbose => $VERBOSE }, 'File::Find')
- || 'undef - pod not found!';
-print "### found $result\n";
-
-require Config;
-$compare = $ENV{PERL_CORE} ?
- File::Spec->catfile(File::Spec->updir, File::Spec->updir, 'lib','File','Find.pm')
- : File::Spec->catfile($Config::Config{privlibexp},"File","Find.pm");
-my $resfile = _canon($result);
-my $cmpfile = _canon($compare);
-if($^O =~ /dos|win32/i && $resfile =~ /~\d(?=\\|$)/) {
- # we have ~1 short filenames
- $resfile = quotemeta($resfile);
- $resfile =~ s/\\~\d(?=\\|$)/[^\\\\]+/g;
- ok($cmpfile =~ /^$resfile$/, "pod_where found File::Find (with long filename matching)") ||
- diag("'$cmpfile' does not match /^$resfile\$/");
-} elsif($^O =~ /dos|win32/i && $cmpfile =~ /~\d(?=\\|$)/) {
- # we have ~1 short filenames
- $cmpfile = quotemeta($cmpfile);
- $cmpfile =~ s/\\~\d(?=\\|$)/[^\\\\]+/g;
- ok($resfile =~ /^$cmpfile$/, "pod_where found File::Find (with long filename matching)") ||
- diag("'$resfile' does not match /^$cmpfile\$/");
-} else {
- is($resfile,$cmpfile,"pod_where found File::Find");
-}
-
-# Search for a documentation pod rather than a module
-my $searchpod = 'Stuff';
-print "### 4. searching for $searchpod.pod\n";
-$result = pod_where(
- { -dirs => [ File::Spec->catdir( qw(t), 'pod', 'testpods', 'lib', 'Pod') ],
- -verbose => $VERBOSE }, $searchpod)
- || "undef - $searchpod.pod not found!";
-print "### found $result\n";
-
-$compare = File::Spec->catfile(
- qw(t), 'pod', 'testpods', 'lib', 'Pod' ,'Stuff.pm');
-is(_canon($result),_canon($compare));
-
-
-# make the path as generic as possible
-sub _canon
-{
- my ($path) = @_;
- $path = File::Spec->canonpath($path);
- my @comp = File::Spec->splitpath($path);
- my @dir = File::Spec->splitdir($comp[1]);
- $comp[1] = File::Spec->catdir(@dir);
- $path = File::Spec->catpath(@comp);
- $path = uc($path) if File::Spec->case_tolerant;
- print "### general path: $path\n" if $VERBOSE;
- $path;
-}
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/for.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/for.t
deleted file mode 100755
index 12ba3392c08..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/for.t
+++ /dev/null
@@ -1,59 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=pod
-
-This is a test
-
-=for theloveofpete
-You shouldn't see this
-or this
-or this
-
-=for text
-pod2text should see this
-and this
-and this
-
-and everything should see this!
-
-=begin text
-
-Similarly, this line ...
-
-and this one ...
-
-as well this one,
-
-should all be in pod2text output
-
-=end text
-
-Tweedley-deedley-dee, Im as happy as can be!
-Tweedley-deedley-dum, cuz youre my honey sugar plum!
-
-=begin atthebeginning
-
-But I expect to see neither hide ...
-
-nor tail ...
-
-of this text
-
-=end atthebeginning
-
-The rest of this should show up in everything.
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/for.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/for.xr
deleted file mode 100644
index b616bf2cb2b..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/for.xr
+++ /dev/null
@@ -1,21 +0,0 @@
- This is a test
-
- pod2text should see this
- and this
- and this
-
- and everything should see this!
-
-Similarly, this line ...
-
-and this one ...
-
-as well this one,
-
-should all be in pod2text output
-
- Tweedley-deedley-dee, Im as happy as can be! Tweedley-deedley-dum, cuz
- youre my honey sugar plum!
-
- The rest of this should show up in everything.
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/headings.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/headings.t
deleted file mode 100755
index 4688272231a..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/headings.t
+++ /dev/null
@@ -1,140 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-#################################################################
- use Pod::Usage;
- pod2usage( VERBOSE => 2, EXIT => 1 );
-
-=pod
-
-=head1 NAME
-
-B<rdb2pg> - insert an rdb table into a PostgreSQL database
-
-=head1 SYNOPSIS
-
-B<rdb2pg> [I<param>=I<value> ...]
-
-=head1 PARAMETERS
-
-B<rdb2pg> uses an IRAF-compatible parameter interface.
-A template parameter file is in F</proj/axaf/simul/lib/uparm/rdb2pg.par>.
-
-=over 4
-
-=item B<input> I<file>
-
-The B<RDB> file to insert into the database. If the given name
-is the string C<stdin>, it reads from the UNIX standard input stream.
-
-
-=back
-
-=head1 DESCRIPTION
-
-B<rdb2pg> will enter the data from an B<RDB> database into a
-PostgreSQL database table, optionally creating the database and the
-table if they do not exist. It automatically determines the
-PostgreSQL data type from the column definition in the B<RDB> file,
-but may be overriden via a series of definition files or directly
-via one of its parameters.
-
-The target database and table are specified by the C<db> and C<table>
-parameters. If they do not exist, and the C<createdb> parameter is
-set, they will be created. Table field definitions are determined
-in the following order:
-
-=cut
-
-#################################################################
-
-results in:
-
-
-#################################################################
-
- rdb2pg - insert an rdb table into a PostgreSQL database
-
- rdb2pg [*param*=*value* ...]
-
- rdb2pg uses an IRAF-compatible parameter interface. A template
- parameter file is in /proj/axaf/simul/lib/uparm/rdb2pg.par.
-
- The RDB file to insert into the database. If the given name is
- the string `stdin', it reads from the UNIX standard input
- stream.
-
- rdb2pg will enter the data from an RDB database into a
- PostgreSQL database table, optionally creating the database and
- the table if they do not exist. It automatically determines the
- PostgreSQL data type from the column definition in the RDB file,
- but may be overriden via a series of definition files or
- directly via one of its parameters.
-
- The target database and table are specified by the `db' and
- `table' parameters. If they do not exist, and the `createdb'
- parameter is set, they will be created. Table field definitions
- are determined in the following order:
-
-
-#################################################################
-
-while the original version of Text (using pod2text) gives
-
-#################################################################
-
-NAME
- rdb2pg - insert an rdb table into a PostgreSQL database
-
-SYNOPSIS
- rdb2pg [*param*=*value* ...]
-
-PARAMETERS
- rdb2pg uses an IRAF-compatible parameter interface. A template
- parameter file is in /proj/axaf/simul/lib/uparm/rdb2pg.par.
-
- input *file*
- The RDB file to insert into the database. If the given name
- is the string `stdin', it reads from the UNIX standard input
- stream.
-
-DESCRIPTION
- rdb2pg will enter the data from an RDB database into a
- PostgreSQL database table, optionally creating the database and
- the table if they do not exist. It automatically determines the
- PostgreSQL data type from the column definition in the RDB file,
- but may be overriden via a series of definition files or
- directly via one of its parameters.
-
- The target database and table are specified by the `db' and
- `table' parameters. If they do not exist, and the `createdb'
- parameter is set, they will be created. Table field definitions
- are determined in the following order:
-
-
-#################################################################
-
-
-Thanks for any help. If, as your email indicates, you've not much
-time to look at this, I can work around things by calling pod2text()
-directly using the official Text.pm.
-
-Diab
-
--------------
-Diab Jerius
-djerius@cfa.harvard.edu
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/headings.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/headings.xr
deleted file mode 100644
index f92efb5ecf5..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/headings.xr
+++ /dev/null
@@ -1,26 +0,0 @@
-NAME
- rdb2pg - insert an rdb table into a PostgreSQL database
-
-SYNOPSIS
- rdb2pg [*param*=*value* ...]
-
-PARAMETERS
- rdb2pg uses an IRAF-compatible parameter interface. A template parameter
- file is in /proj/axaf/simul/lib/uparm/rdb2pg.par.
-
- input *file*
- The RDB file to insert into the database. If the given name is the
- string `stdin', it reads from the UNIX standard input stream.
-
-DESCRIPTION
- rdb2pg will enter the data from an RDB database into a PostgreSQL
- database table, optionally creating the database and the table if they
- do not exist. It automatically determines the PostgreSQL data type from
- the column definition in the RDB file, but may be overriden via a series
- of definition files or directly via one of its parameters.
-
- The target database and table are specified by the `db' and `table'
- parameters. If they do not exist, and the `createdb' parameter is set,
- they will be created. Table field definitions are determined in the
- following order:
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/include.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/include.t
deleted file mode 100755
index 9edb47864ce..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/include.t
+++ /dev/null
@@ -1,36 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=pod
-
-This file tries to demonstrate a simple =include directive
-for pods. It is used as follows:
-
- =include filename
-
-where "filename" is expected to be an absolute pathname, or else
-reside be relative to the directory in which the current processed
-podfile resides, or be relative to the current directory.
-
-Lets try it out with the file "included.t" shall we.
-
-***THIS TEXT IS IMMEDIATELY BEFORE THE INCLUDE***
-
-=include included.t
-
-***THIS TEXT IS IMMEDIATELY AFTER THE INCLUDE***
-
-So how did we do???
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/include.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/include.xr
deleted file mode 100644
index 187653b741a..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/include.xr
+++ /dev/null
@@ -1,22 +0,0 @@
- This file tries to demonstrate a simple =include directive for pods. It
- is used as follows:
-
- =include filename
-
- where "filename" is expected to be an absolute pathname, or else reside
- be relative to the directory in which the current processed podfile
- resides, or be relative to the current directory.
-
- Lets try it out with the file "included.t" shall we.
-
- ***THIS TEXT IS IMMEDIATELY BEFORE THE INCLUDE***
-
-###### begin =include included.t #####
- This is the text of the included file named "included.t". It should
- appear in the final pod document from pod2xxx
-
-###### end =include included.t #####
- ***THIS TEXT IS IMMEDIATELY AFTER THE INCLUDE***
-
- So how did we do???
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/included.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/included.t
deleted file mode 100755
index d6e4a504311..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/included.t
+++ /dev/null
@@ -1,35 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-##------------------------------------------------------------
-# This file is =included by "include.t"
-#
-# This text should NOT be in the resultant pod document
-# because we havent seen an =xxx pod directive in this file!
-##------------------------------------------------------------
-
-=pod
-
-This is the text of the included file named "included.t".
-It should appear in the final pod document from pod2xxx
-
-=cut
-
-##------------------------------------------------------------
-# This text should NOT be in the resultant pod document
-# because it is *after* an =cut an no other pod directives
-# proceed it!
-##------------------------------------------------------------
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/included.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/included.xr
deleted file mode 100644
index 16a65cd3586..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/included.xr
+++ /dev/null
@@ -1,3 +0,0 @@
- This is the text of the included file named "included.t". It should
- appear in the final pod document from pod2xxx
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/lref.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/lref.t
deleted file mode 100755
index 33a0a7ca9f3..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/lref.t
+++ /dev/null
@@ -1,66 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=pod
-
-Try out I<LOTS> of different ways of specifying references:
-
-Reference the L<manpage/section>
-
-Reference the L<manpage / section>
-
-Reference the L<manpage/ section>
-
-Reference the L<manpage /section>
-
-Reference the L<"manpage/section">
-
-Reference the L<"manpage"/section>
-
-Reference the L<manpage/"section">
-
-Reference the L<manpage/
-section>
-
-Reference the L<manpage
-/section>
-
-Now try it using the new "|" stuff ...
-
-Reference the L<thistext|manpage/section>
-
-Reference the L<thistext | manpage / section>
-
-Reference the L<thistext| manpage/ section>
-
-Reference the L<thistext |manpage /section>
-
-Reference the L<thistext|
-"manpage/section">
-
-Reference the L<thistext
-|"manpage"/section>
-
-Reference the L<thistext|manpage/"section">
-
-Reference the L<thistext|
-manpage/
-section>
-
-Reference the L<thistext
-|manpage
-/section>
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/lref.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/lref.xr
deleted file mode 100644
index c287cf5a6d9..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/lref.xr
+++ /dev/null
@@ -1,40 +0,0 @@
- Try out *LOTS* of different ways of specifying references:
-
- Reference the the section entry in the manpage manpage
-
- Reference the the section entry in the manpage manpage
-
- Reference the the section entry in the manpage manpage
-
- Reference the the section entry in the manpage manpage
-
- Reference the the section on "manpage/section"
-
- Reference the the section entry in the "manpage" manpage
-
- Reference the the section on "section" in the manpage manpage
-
- Reference the the section entry in the manpage manpage
-
- Reference the the section entry in the manpage manpage
-
- Now try it using the new "|" stuff ...
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
- Reference the thistext
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/multiline_items.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/multiline_items.t
deleted file mode 100755
index 98ad34222eb..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/multiline_items.t
+++ /dev/null
@@ -1,31 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=head1 Test multiline item lists
-
-This is a test to ensure that multiline =item paragraphs
-get indented appropriately.
-
-=over 4
-
-=item This
-is
-a
-test.
-
-=back
-
-=cut
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/multiline_items.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/multiline_items.xr
deleted file mode 100644
index cda163b7f5b..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/multiline_items.xr
+++ /dev/null
@@ -1,6 +0,0 @@
-Test multiline item lists
- This is a test to ensure that multiline =item paragraphs get indented
- appropriately.
-
- This is a test.
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_items.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_items.t
deleted file mode 100755
index f60a67f1abb..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_items.t
+++ /dev/null
@@ -1,64 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=head1 Test nested item lists
-
-This is a test to ensure the nested =item paragraphs
-get indented appropriately.
-
-=over 2
-
-=item 1
-
-First section.
-
-=over 2
-
-=item a
-
-this is item a
-
-=item b
-
-this is item b
-
-=back
-
-=item 2
-
-Second section.
-
-=over 2
-
-=item a
-
-this is item a
-
-=item b
-
-this is item b
-
-=item c
-
-=item d
-
-This is item c & d.
-
-=back
-
-=back
-
-=cut
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_items.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_items.xr
deleted file mode 100644
index 30834e9ca62..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_items.xr
+++ /dev/null
@@ -1,19 +0,0 @@
-Test nested item lists
- This is a test to ensure the nested =item paragraphs get indented
- appropriately.
-
- 1 First section.
-
- a this is item a
-
- b this is item b
-
- 2 Second section.
-
- a this is item a
-
- b this is item b
-
- c
- d This is item c & d.
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_seqs.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_seqs.t
deleted file mode 100755
index 6f7ae67e997..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_seqs.t
+++ /dev/null
@@ -1,23 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=pod
-
-The statement: C<This is dog kind's I<finest> hour!> is a parody of a
-quotation from Winston Churchill.
-
-=cut
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_seqs.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_seqs.xr
deleted file mode 100644
index 4d2e09e499c..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/nested_seqs.xr
+++ /dev/null
@@ -1,3 +0,0 @@
- The statement: `This is dog kind's *finest* hour!' is a parody of a
- quotation from Winston Churchill.
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/oneline_cmds.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/oneline_cmds.t
deleted file mode 100755
index 65df35271be..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/oneline_cmds.t
+++ /dev/null
@@ -1,46 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-==head1 NAME
-B<rdb2pg> - insert an rdb table into a PostgreSQL database
-
-==head1 SYNOPSIS
-B<rdb2pg> [I<param>=I<value> ...]
-
-==head1 PARAMETERS
-B<rdb2pg> uses an IRAF-compatible parameter interface.
-A template parameter file is in F</proj/axaf/simul/lib/uparm/rdb2pg.par>.
-
-==over 4
-==item B<input> I<file>
-The B<RDB> file to insert into the database. If the given name
-is the string C<stdin>, it reads from the UNIX standard input stream.
-
-==back
-
-==head1 DESCRIPTION
-B<rdb2pg> will enter the data from an B<RDB> database into a
-PostgreSQL database table, optionally creating the database and the
-table if they do not exist. It automatically determines the
-PostgreSQL data type from the column definition in the B<RDB> file,
-but may be overriden via a series of definition files or directly
-via one of its parameters.
-
-The target database and table are specified by the C<db> and C<table>
-parameters. If they do not exist, and the C<createdb> parameter is
-set, they will be created. Table field definitions are determined
-in the following order:
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/oneline_cmds.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/oneline_cmds.xr
deleted file mode 100644
index f92efb5ecf5..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/oneline_cmds.xr
+++ /dev/null
@@ -1,26 +0,0 @@
-NAME
- rdb2pg - insert an rdb table into a PostgreSQL database
-
-SYNOPSIS
- rdb2pg [*param*=*value* ...]
-
-PARAMETERS
- rdb2pg uses an IRAF-compatible parameter interface. A template parameter
- file is in /proj/axaf/simul/lib/uparm/rdb2pg.par.
-
- input *file*
- The RDB file to insert into the database. If the given name is the
- string `stdin', it reads from the UNIX standard input stream.
-
-DESCRIPTION
- rdb2pg will enter the data from an RDB database into a PostgreSQL
- database table, optionally creating the database and the table if they
- do not exist. It automatically determines the PostgreSQL data type from
- the column definition in the RDB file, but may be overriden via a series
- of definition files or directly via one of its parameters.
-
- The target database and table are specified by the `db' and `table'
- parameters. If they do not exist, and the `createdb' parameter is set,
- they will be created. Table field definitions are determined in the
- following order:
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/podselect.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/podselect.t
deleted file mode 100755
index 2d8e6b4f585..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/podselect.t
+++ /dev/null
@@ -1,18 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-=include podselect.PL
-
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/podselect.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/podselect.xr
deleted file mode 100644
index 00b977491cd..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/podselect.xr
+++ /dev/null
@@ -1,44 +0,0 @@
-###### begin =include podselect.PL #####
-NAME
- podselect - print selected sections of pod documentation on standard
- output
-
-SYNOPSIS
- podselect [-help] [-man] [-section *section-spec*] [*file* ...]
-
-OPTIONS AND ARGUMENTS
- -help Print a brief help message and exit.
-
- -man Print the manual page and exit.
-
- -section *section-spec*
- Specify a section to include in the output. See the section on
- "SECTION SPECIFICATIONS" in the Pod::Parser manpage for the
- format to use for *section-spec*. This option may be given
- multiple times on the command line.
-
- *file* The pathname of a file from which to select sections of pod
- documentation (defaults to standard input).
-
-DESCRIPTION
- podselect will read the given input files looking for pod documentation
- and will print out (in raw pod format) all sections that match one ore
- more of the given section specifications. If no section specifications
- are given than all pod sections encountered are output.
-
- podselect invokes the podselect() function exported by Pod::Select
- Please see the podselect() entry in the Pod::Select manpage for more
- details.
-
-SEE ALSO
- the Pod::Parser manpage and the Pod::Select manpage
-
-AUTHOR
- Please report bugs using http://rt.cpan.org.
-
- Brad Appleton <bradapp@enteract.com>
-
- Based on code for Pod::Text::pod2text(1) written by Tom Christiansen
- <tchrist@mox.perl.com>
-
-###### end =include podselect.PL #####
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/selfcheck.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/selfcheck.t
deleted file mode 100644
index 17df68e301a..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/selfcheck.t
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/perl
-use Test::More;
-use File::Basename;
-use File::Spec;
-use strict;
-my $THISDIR;
-BEGIN {
- $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- eval {
- require "testpchk.pl";
- import TestPodChecker qw(testpodcheck);
- };
- warn $@ if $@;
-};
-
-my @pods;
-unless($Pod::Checker::VERSION && $Pod::Checker::VERSION > 1.40) {
- plan skip_all => "we do not have a good Pod::Checker around";
-} else {
- my $path = File::Spec->catfile($THISDIR,(File::Spec->updir()) x 2, 'lib', 'Pod', '*.pm');
- print "THISDIR=$THISDIR PATH=$path\n";
- @pods = glob($path);
- print "PODS=@pods\n";
- plan tests => scalar(@pods);
-}
-
-# test that our POD is correct!
-my $errs = 0;
-
-foreach my $pod (@pods) {
- my $out = File::Spec->catfile($THISDIR, basename($pod));
- $out =~ s{\.pm}{.OUT};
- my %options = ( -Out => $out );
- my $failmsg = testpodcheck(-In => $pod, -Out => $out, -Cmp => "$THISDIR/empty.xr");
- if($failmsg) {
- if(open(IN, "<$out")) {
- while(<IN>) {
- warn "podchecker: $_";
- }
- close(IN);
- } else {
- warn "Error: Cannot read output file $out: $!\n";
- }
- ok(0, $pod);
- $errs++;
- } else {
- ok(1, $pod);
- }
-}
-
-exit( ($errs == 0) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/special_seqs.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/special_seqs.t
deleted file mode 100755
index f1399ccf771..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/special_seqs.t
+++ /dev/null
@@ -1,46 +0,0 @@
-BEGIN {
- use File::Basename;
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testp2pt.pl";
- import TestPodIncPlainText;
-}
-
-my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash
-my $passed = testpodplaintext \%options, $0;
-exit( ($passed == 1) ? 0 : -1 ) unless $ENV{HARNESS_ACTIVE};
-
-
-__END__
-
-
-=pod
-
-This is a test to see if I can do not only C<$self> and C<method()>, but
-also C<< $self->method() >> and C<< $self->{FIELDNAME} >> and
-C<< $Foo <=> $Bar >> without resorting to escape sequences. If
-I want to refer to the right-shift operator I can do something
-like C<<< $x >> 3 >>> or even C<<<< $y >> 5 >>>>.
-
-Now for the grand finale of C<< $self->method()->{FIELDNAME} = {FOO=>BAR} >>.
-And I also want to make sure that newlines work like this
-C<<<
-$self->{FOOBAR} >> 3 and [$b => $a]->[$a <=> $b]
->>>
-
-Of course I should still be able to do all this I<with> escape sequences
-too: C<$self-E<gt>method()> and C<$self-E<gt>{FIELDNAME}> and C<{FOO=E<gt>BAR}>.
-
-Dont forget C<$self-E<gt>method()-E<gt>{FIELDNAME} = {FOO=E<gt>BAR}>.
-
-And make sure that C<0> works too!
-
-Now, if I use << or >> as my delimiters, then I have to use whitespace.
-So things like C<<$self->method()>> and C<<$self->{FIELDNAME}>> wont end
-up doing what you might expect since the first > will still terminate
-the first < seen.
-
-Lets make sure these work for empty ones too, like C<< >> and C<< >> >>
-(just to be obnoxious)
-
-=cut
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/special_seqs.xr b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/special_seqs.xr
deleted file mode 100644
index 4d6c55e5a18..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/special_seqs.xr
+++ /dev/null
@@ -1,25 +0,0 @@
- This is a test to see if I can do not only `$self' and `method()', but
- also `$self->method()' and `$self->{FIELDNAME}' and `$Foo <=> $Bar'
- without resorting to escape sequences. If I want to refer to the
- right-shift operator I can do something like `$x >> 3' or even `$y >>
- 5'.
-
- Now for the grand finale of `$self->method()->{FIELDNAME} = {FOO=>BAR}'.
- And I also want to make sure that newlines work like this
- `$self->{FOOBAR} >> 3 and [$b => $a]->[$a <=> $b]'
-
- Of course I should still be able to do all this *with* escape sequences
- too: `$self->method()' and `$self->{FIELDNAME}' and `{FOO=>BAR}'.
-
- Dont forget `$self->method()->{FIELDNAME} = {FOO=>BAR}'.
-
- And make sure that `0' works too!
-
- Now, if I use << or >> as my delimiters, then I have to use whitespace.
- So things like `<$self-'method()>> and `<$self-'{FIELDNAME}>> wont end
- up doing what you might expect since the first > will still terminate
- the first < seen.
-
- Lets make sure these work for empty ones too, like and `>>' (just to be
- obnoxious)
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testcmp.pl b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testcmp.pl
deleted file mode 100644
index b8592fcc2a8..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testcmp.pl
+++ /dev/null
@@ -1,94 +0,0 @@
-package TestCompare;
-
-use vars qw(@ISA @EXPORT $MYPKG);
-#use strict;
-#use diagnostics;
-use Carp;
-use Exporter;
-use File::Basename;
-use File::Spec;
-use FileHandle;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(&testcmp);
-$MYPKG = eval { (caller)[0] };
-
-##--------------------------------------------------------------------------
-
-=head1 NAME
-
-testcmp -- compare two files line-by-line
-
-=head1 SYNOPSIS
-
- $is_diff = testcmp($file1, $file2);
-
-or
-
- $is_diff = testcmp({-cmplines => \&mycmp}, $file1, $file2);
-
-=head2 DESCRIPTION
-
-Compare two text files line-by-line and return 0 if they are the
-same, 1 if they differ. Each of $file1 and $file2 may be a filenames,
-or a filehandles (in which case it must already be open for reading).
-
-If the first argument is a hashref, then the B<-cmplines> key in the
-hash may have a subroutine reference as its corresponding value.
-The referenced user-defined subroutine should be a line-comparator
-function that takes two pre-chomped text-lines as its arguments
-(the first is from $file1 and the second is from $file2). It should
-return 0 if it considers the two lines equivalent, and non-zero
-otherwise.
-
-=cut
-
-##--------------------------------------------------------------------------
-
-sub testcmp( $ $ ; $) {
- my %opts = ref($_[0]) eq 'HASH' ? %{shift()} : ();
- my ($file1, $file2) = @_;
- my ($fh1, $fh2) = ($file1, $file2);
- unless (ref $fh1) {
- $fh1 = FileHandle->new($file1, "r") or die "Can't open $file1: $!";
- }
- unless (ref $fh2) {
- $fh2 = FileHandle->new($file2, "r") or die "Can't open $file2: $!";
- }
-
- my $cmplines = $opts{'-cmplines'} || undef;
- my ($f1text, $f2text) = ("", "");
- my ($line, $diffs) = (0, 0);
-
- while ( defined($f1text) and defined($f2text) ) {
- defined($f1text = <$fh1>) and chomp($f1text);
- defined($f2text = <$fh2>) and chomp($f2text);
- ++$line;
- last unless ( defined($f1text) and defined($f2text) );
- # kill any extra line endings
- $f1text =~ s/[\r\n]+$//s;
- $f2text =~ s/[\r\n]+$//s;
- $diffs = (ref $cmplines) ? &$cmplines($f1text, $f2text)
- : ($f1text ne $f2text);
- last if $diffs;
- }
- close($fh1) unless (ref $file1);
- close($fh2) unless (ref $file2);
-
- $diffs = 1 if (defined($f1text) or defined($f2text));
- if ( defined($f1text) and defined($f2text) ) {
- ## these two lines must be different
- warn "$file1 and $file2 differ at line $line\n";
- }
- elsif (defined($f1text) and (! defined($f1text))) {
- ## file1 must be shorter
- warn "$file1 is shorter than $file2\n";
- }
- elsif (defined $f2text) {
- ## file2 must be longer
- warn "$file1 is shorter than $file2\n";
- }
- return $diffs;
-}
-
-1;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testp2pt.pl b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testp2pt.pl
deleted file mode 100644
index 4ed58446876..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testp2pt.pl
+++ /dev/null
@@ -1,192 +0,0 @@
-package TestPodIncPlainText;
-
-BEGIN {
- use File::Basename;
- use File::Spec;
- use Cwd qw(abs_path);
- push @INC, '..';
- my $THISDIR = abs_path(dirname $0);
- unshift @INC, $THISDIR;
- require "testcmp.pl";
- import TestCompare;
- my $PARENTDIR = dirname $THISDIR;
- push @INC, map { File::Spec->catfile($_, 'lib') } ($PARENTDIR, $THISDIR);
-}
-
-#use strict;
-#use diagnostics;
-use Carp;
-use Exporter;
-#use File::Compare;
-#use Cwd qw(abs_path);
-
-use vars qw($MYPKG @EXPORT @ISA);
-$MYPKG = eval { (caller)[0] };
-@EXPORT = qw(&testpodplaintext);
-BEGIN {
- require Pod::PlainText;
- @ISA = qw( Pod::PlainText );
- require VMS::Filespec if $^O eq 'VMS';
-}
-
-## Hardcode settings for TERMCAP and COLUMNS so we can try to get
-## reproducible results between environments
-@ENV{qw(TERMCAP COLUMNS)} = ('co=76:do=^J', 76);
-
-sub catfile(@) { File::Spec->catfile(@_); }
-
-my $INSTDIR = abs_path(dirname $0);
-$INSTDIR = VMS::Filespec::unixpath($INSTDIR) if $^O eq 'VMS';
-$INSTDIR =~ s#/$## if $^O eq 'VMS';
-$INSTDIR =~ s#:$## if $^O eq 'MacOS';
-$INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 'pod');
-$INSTDIR =~ s#:$## if $^O eq 'MacOS';
-$INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 't');
-my @PODINCDIRS = ( catfile($INSTDIR, 'lib', 'Pod'),
- catfile($INSTDIR, 'scripts'),
- catfile($INSTDIR, 'pod'),
- catfile($INSTDIR, 't', 'pod')
- );
-
-# FIXME - we should make the core capable of finding utilities built in
-# locations in ext.
-push @PODINCDIRS, catfile((File::Spec->updir()) x 2, 'pod') if $ENV{PERL_CORE};
-
-## Find the path to the file to =include
-sub findinclude {
- my $self = shift;
- my $incname = shift;
-
- ## See if its already found w/out any "searching;
- return $incname if (-r $incname);
-
- ## Need to search for it. Look in the following directories ...
- ## 1. the directory containing this pod file
- my $thispoddir = dirname $self->input_file;
- ## 2. the parent directory of the above
- my $parentdir = dirname $thispoddir;
- my @podincdirs = ($thispoddir, $parentdir, @PODINCDIRS);
-
- for (@podincdirs) {
- my $incfile = catfile($_, $incname);
- return $incfile if (-r $incfile);
- }
- warn("*** Can't find =include file $incname in @podincdirs\n");
- return "";
-}
-
-sub command {
- my $self = shift;
- my ($cmd, $text, $line_num, $pod_para) = @_;
- $cmd = '' unless (defined $cmd);
- local $_ = $text || '';
- my $out_fh = $self->output_handle;
-
- ## Defer to the superclass for everything except '=include'
- return $self->SUPER::command(@_) unless ($cmd eq "include");
-
- ## We have an '=include' command
- my $incdebug = 1; ## debugging
- my @incargs = split;
- if (@incargs == 0) {
- warn("*** No filename given for '=include'\n");
- return;
- }
- my $incfile = $self->findinclude(shift @incargs) or return;
- my $incbase = basename $incfile;
- print $out_fh "###### begin =include $incbase #####\n" if ($incdebug);
- $self->parse_from_file( {-cutting => 1}, $incfile );
- print $out_fh "###### end =include $incbase #####\n" if ($incdebug);
-}
-
-sub begin_input {
- $_[0]->{_INFILE} = VMS::Filespec::unixify($_[0]->{_INFILE}) if $^O eq 'VMS';
-}
-
-sub podinc2plaintext( $ $ ) {
- my ($infile, $outfile) = @_;
- local $_;
- my $text_parser = $MYPKG->new;
- $text_parser->parse_from_file($infile, $outfile);
-}
-
-sub testpodinc2plaintext( @ ) {
- my %args = @_;
- my $infile = $args{'-In'} || croak "No input file given!";
- my $outfile = $args{'-Out'} || croak "No output file given!";
- my $cmpfile = $args{'-Cmp'} || croak "No compare-result file given!";
-
- my $different = '';
- my $testname = basename $cmpfile, '.t', '.xr';
-
- unless (-e $cmpfile) {
- my $msg = "*** Can't find comparison file $cmpfile for testing $infile";
- warn "$msg\n";
- return $msg;
- }
-
- print "# Running testpodinc2plaintext for '$testname'...\n";
- ## Compare the output against the expected result
- podinc2plaintext($infile, $outfile);
- if ( testcmp($outfile, $cmpfile) ) {
- $different = "$outfile is different from $cmpfile";
- }
- else {
- unlink($outfile);
- }
- return $different;
-}
-
-sub testpodplaintext( @ ) {
- my %opts = (ref $_[0] eq 'HASH') ? %{shift()} : ();
- my @testpods = @_;
- my ($testname, $testdir) = ("", "");
- my ($podfile , $cmpfile) = ("", "");
- my ($outfile , $errfile) = ("", "");
- my $passes = 0;
- my $failed = 0;
- local $_;
-
- print "1..", scalar @testpods, "\n" unless ($opts{'-xrgen'});
-
- for $podfile (@testpods) {
- ($testname, $_) = fileparse($podfile);
- $testdir ||= $_;
- $testname =~ s/\.t$//;
- $cmpfile = $testdir . $testname . '.xr';
- $outfile = $testdir . $testname . '.OUT';
-
- if ($opts{'-xrgen'}) {
- if ($opts{'-force'} or ! -e $cmpfile) {
- ## Create the comparison file
- print "# Creating expected result for \"$testname\"" .
- " pod2plaintext test ...\n";
- podinc2plaintext($podfile, $cmpfile);
- }
- else {
- print "# File $cmpfile already exists" .
- " (use '-force' to regenerate it).\n";
- }
- next;
- }
-
- my $failmsg = testpodinc2plaintext
- -In => $podfile,
- -Out => $outfile,
- -Cmp => $cmpfile;
- if ($failmsg) {
- ++$failed;
- print "#\tFAILED. ($failmsg)\n";
- print "not ok ", $failed+$passes, "\n";
- }
- else {
- ++$passes;
- unlink($outfile);
- print "#\tPASSED.\n";
- print "ok ", $failed+$passes, "\n";
- }
- }
- return $passes;
-}
-
-1;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testpchk.pl b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testpchk.pl
deleted file mode 100644
index 0464a9a0fcf..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testpchk.pl
+++ /dev/null
@@ -1,130 +0,0 @@
-package TestPodChecker;
-
-BEGIN {
- use File::Basename;
- use File::Spec;
- push @INC, '..';
- my $THISDIR = dirname $0;
- unshift @INC, $THISDIR;
- require "testcmp.pl";
- import TestCompare;
- my $PARENTDIR = dirname $THISDIR;
- push @INC, map { File::Spec->catfile($_, 'lib') } ($PARENTDIR, $THISDIR);
- require VMS::Filespec if $^O eq 'VMS';
-}
-
-use Pod::Checker;
-use vars qw(@ISA @EXPORT $MYPKG);
-#use strict;
-#use diagnostics;
-use Carp;
-use Exporter;
-#use File::Compare;
-
-@ISA = qw(Exporter);
-@EXPORT = qw(&testpodchecker);
-@EXPORT_OK = qw(&testpodcheck);
-$MYPKG = eval { (caller)[0] };
-
-sub stripname( $ ) {
- local $_ = shift;
- return /(\w[.\w]*)\s*$/ ? $1 : $_;
-}
-
-sub msgcmp( $ $ ) {
- ## filter out platform-dependent aspects of error messages
- my ($line1, $line2) = @_;
- for ($line1, $line2) {
- ## remove filenames from error messages to avoid any
- ## filepath naming differences between OS platforms
- s/(at line \S+ in file) .*\W(\w+\.[tT])\s*$/$1 \L$2\E/;
- s/.*\W(\w+\.[tT]) (has \d+ pod syntax error)/\L$1\E $2/;
- }
- return ($line1 ne $line2);
-}
-
-sub testpodcheck( @ ) {
- my %args = @_;
- my $infile = $args{'-In'} || croak "No input file given!";
- my $outfile = $args{'-Out'} || croak "No output file given!";
- my $cmpfile = $args{'-Cmp'} || croak "No compare-result file given!";
-
- my $different = '';
- my $testname = basename $infile, '.t', '.xr';
-
- unless (-e $cmpfile) {
- my $msg = "*** Can't find comparison file $cmpfile for testing $infile";
- warn "$msg\n";
- return $msg;
- }
-
- print "# Running podchecker for '$testname'...\n";
- ## Compare the output against the expected result
- if ($^O eq 'VMS') {
- for ($infile, $outfile, $cmpfile) {
- $_ = VMS::Filespec::unixify($_) unless ref;
- }
- }
- podchecker($infile, $outfile);
- if ( testcmp({'-cmplines' => \&msgcmp}, $outfile, $cmpfile) ) {
- $different = "$outfile is different from $cmpfile";
- }
- else {
- unlink($outfile);
- }
- return $different;
-}
-
-sub testpodchecker( @ ) {
- my %opts = (ref $_[0] eq 'HASH') ? %{shift()} : ();
- my @testpods = @_;
- my ($testname, $testdir) = ("", "");
- my ($podfile, $cmpfile) = ("", "");
- my ($outfile, $errfile) = ("", "");
- my $passes = 0;
- my $failed = 0;
- local $_;
-
- print "1..", scalar @testpods, "\n" unless ($opts{'-xrgen'});
-
- for $podfile (@testpods) {
- ($testname, $_) = fileparse($podfile);
- $testdir ||= $_;
- $testname =~ s/\.t$//;
- $cmpfile = $testdir . $testname . '.xr';
- $outfile = $testdir . $testname . '.OUT';
-
- if ($opts{'-xrgen'}) {
- if ($opts{'-force'} or ! -e $cmpfile) {
- ## Create the comparison file
- print "# Creating expected result for \"$testname\"" .
- " podchecker test ...\n";
- podchecker($podfile, $cmpfile);
- }
- else {
- print "# File $cmpfile already exists" .
- " (use '-force' to regenerate it).\n";
- }
- next;
- }
-
- my $failmsg = testpodcheck
- -In => $podfile,
- -Out => $outfile,
- -Cmp => $cmpfile;
- if ($failmsg) {
- ++$failed;
- print "#\tFAILED. ($failmsg)\n";
- print "not ok ", $failed+$passes, "\n";
- }
- else {
- ++$passes;
- unlink($outfile);
- print "#\tPASSED.\n";
- print "ok ", $failed+$passes, "\n";
- }
- }
- return $passes;
-}
-
-1;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testpods/lib/Pod/Stuff.pm b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testpods/lib/Pod/Stuff.pm
deleted file mode 100644
index 00a719c6560..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/testpods/lib/Pod/Stuff.pm
+++ /dev/null
@@ -1,20 +0,0 @@
-=head1 NAME
-
-Pod::Stuff - dummy testing pod
-
-=head1 DESCRIPTION
-
-This isn't really anything, its just some dummy pod code.
-And stuff.
-
-Lots of stuff.
-
-=head2 STUFF
-
-For all your stuff [tm]
-
-Stuffit
-
-Mmmm, stuffed pizza bread.
-
-=cut
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/twice.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/twice.t
deleted file mode 100755
index ffb957dadda..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/pod/twice.t
+++ /dev/null
@@ -1,36 +0,0 @@
-use strict;
-use Test;
-use File::Spec;
-
-BEGIN { plan tests => 1 }
-
-use Pod::Parser;
-use Carp;
-$SIG{__DIE__} = \&Carp::confess;
-
-eval {require IO::String;};
-skip($@ ? 'no IO::String' : '', sub {
- {
- my $pod_string = 'some I<silly> text';
- my $handle = IO::String->new( \$pod_string );
- my $parser = Pod::Parser->new();
- $parser->parse_from_file( $0, $handle );
- }
- # free the reference
- {
- my $parser = Pod::Parser->new();
- $parser->parse_from_file( $0, File::Spec->devnull );
- }
- 1;
-});
-
-exit 0;
-
-__END__
-
-=head1 EXAMPLE
-
-This test makes sure the parse_from_file is re-entrant
-
-=cut
-
diff --git a/gnu/usr.bin/perl/cpan/Pod-Parser/t/unbalanced.t b/gnu/usr.bin/perl/cpan/Pod-Parser/t/unbalanced.t
deleted file mode 100644
index ad109952fed..00000000000
--- a/gnu/usr.bin/perl/cpan/Pod-Parser/t/unbalanced.t
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use warnings;
-
-use Pod::PlainText;
-use Test::More;
-
-my $invalid = q{
-=head1 One
-
-=begin foo
-
-Foo
-};
-
-my $valid = q{
-=head1 Two
-
-=begin bar
-
-Bar
-
-=end bar
-
-=head1 Three
-};
-
-
-my $parser = Pod::PlainText->new;
-
-my $out = '';
-open my $out_fh, '>', \$out or die "Couldn't open out: $!";
-
-{
- open my $fh, '<', \$invalid or die "Couldn't open invalid: $!";
- $parser->parse_from_filehandle($fh, $out_fh);
- close $fh;
-}
-
-{
- open my $fh, '<', \$valid or die "Couldn't open valid: $!";
- $parser->parse_from_filehandle($fh, $out_fh);
- close $fh;
-}
-
-close $out_fh;
-
-
-is $out, "One\nTwo\nThree\n", "Correctly parsed valid document";
-
-done_testing;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm b/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm
index 42ed4b49d54..bb6ffc83efb 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm
@@ -486,8 +486,6 @@ sub init_formatter_class_list {
$self->opt_M_with('Pod::Perldoc::ToPod'); # the always-there fallthru
$self->opt_o_with('text');
- $self->opt_o_with('man')
- if $ENV{TERM} && $ENV{TERM} !~ /dumb|emacs|none|unknown/i;
return;
}
diff --git a/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm b/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm
index d8e42b1703b..bfcb5c40ee6 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm
@@ -144,9 +144,7 @@ sub _get_podman_switches {
#
# See RT #77465
#
- # Then again, do *not* comment it out on OpenBSD:
- # mandoc handles UTF-8 input just fine.
- push @switches, 'utf8' => 1;
+ #push @switches, 'utf8' => 1;
$self->debug( "Pod::Man switches are [@switches]\n" );
@@ -211,6 +209,12 @@ sub _have_groff_with_utf8 {
$version ge $minimum_groff_version;
}
+sub _have_mandoc_with_utf8 {
+ my( $self ) = @_;
+
+ $self->_is_mandoc and not system 'mandoc -Tlocale -V > /dev/null 2>&1';
+ }
+
sub _collect_nroff_switches {
my( $self ) = shift;
@@ -223,10 +227,6 @@ sub _collect_nroff_switches {
push @render_switches, '-rLL=' . (int $c) . 'n' if $cols > 80;
}
- if( $self->_is_mandoc ) {
- push @render_switches, '-Owidth=' . $self->_get_columns;
- }
-
# I hear persistent reports that adding a -c switch to $render
# solves many people's problems. But I also hear that some mans
# don't have a -c switch, so that unconditionally adding it here
@@ -242,6 +242,7 @@ sub _get_device_switches {
if( $self->_is_nroff ) { qw() }
elsif( $self->_have_groff_with_utf8 ) { qw(-Kutf8 -Tutf8) }
elsif( $self->_is_ebcdic ) { qw(-Tcp1047) }
+ elsif( $self->_have_mandoc_with_utf8 ) { qw(-Tlocale) }
elsif( $self->_is_mandoc ) { qw() }
else { qw(-Tlatin1) }
}
@@ -357,9 +358,6 @@ sub _filter_through_nroff {
length $done
);
- # wait for it to exit
- waitpid( $pid, 0 );
-
if( $? ) {
$self->warn( "Error from pipe to $render!\n" );
$self->debug( 'Error: ' . do { local $/; <$err> } );
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pm
index 20924153b65..6c91b8ac1fb 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pm
@@ -18,7 +18,7 @@ use vars qw(
);
@ISA = ('Pod::Simple::BlackBox');
-$VERSION = '3.35';
+$VERSION = '3.40';
@Known_formatting_codes = qw(I B C L E F S X Z);
%Known_formatting_codes = map(($_=>1), @Known_formatting_codes);
@@ -74,6 +74,9 @@ else { # EBCDIC on early Perl. We know what the values are for the code
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
__PACKAGE__->_accessorize(
+ '_output_is_for_JustPod', # For use only by Pod::Simple::JustPod,
+ # If non-zero, don't expand Z<> E<> S<> L<>,
+ # and count how many brackets in format codes
'nbsp_for_S', # Whether to map S<...>'s to \xA0 characters
'source_filename', # Filename of the source, for use in warnings
'source_dead', # Whether to consider this parser's source dead
@@ -103,6 +106,8 @@ __PACKAGE__->_accessorize(
'preserve_whitespace', # whether to try to keep whitespace as-is
'strip_verbatim_indent', # What indent to strip from verbatim
+ 'expand_verbatim_tabs', # 0: preserve tabs in verbatim blocks
+ # n: expand tabs to stops every n columns
'parse_characters', # Whether parser should expect chars rather than octets
@@ -168,6 +173,7 @@ sub encoding {
BEGIN {
*pretty = \&Pod::Simple::BlackBox::pretty;
*stringify_lol = \&Pod::Simple::BlackBox::stringify_lol;
+ *my_qr = \&Pod::Simple::BlackBox::my_qr;
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ -219,11 +225,14 @@ sub new {
my $class = ref($_[0]) || $_[0];
#Carp::croak(__PACKAGE__ . " is a virtual base class -- see perldoc "
# . __PACKAGE__ );
- return bless {
+ my $obj = bless {
'accept_codes' => { map( ($_=>$_), @Known_formatting_codes ) },
'accept_directives' => { %Known_directives },
'accept_targets' => {},
}, $class;
+
+ $obj->expand_verbatim_tabs(8);
+ return $obj;
}
@@ -339,10 +348,9 @@ sub unaccept_targets {
# XXX Probably it is an error that the digit '9' is excluded from these re's.
# Broken for early Perls on EBCDIC
-my $xml_name_re = eval "qr/[^-.0-8:A-Z_a-z[:^ascii:]]/";
-if (! defined $xml_name_re) {
- $xml_name_re = qr/[\x00-\x2C\x2F\x39\x3B-\x40\x5B-\x5E\x60\x7B-\x7F]/;
-}
+my $xml_name_re = my_qr('[^-.0-8:A-Z_a-z[:^ascii:]]', '9');
+$xml_name_re = qr/[\x00-\x2C\x2F\x39\x3B-\x40\x5B-\x5E\x60\x7B-\x7F]/
+ unless $xml_name_re;
sub accept_code { shift->accept_codes(@_) } # alias
@@ -652,12 +660,13 @@ sub _make_treelet {
$treelet = $self->_treelet_from_formatting_codes(@_);
}
- if( $self->_remap_sequences($treelet) ) {
+ if( ! $self->{'_output_is_for_JustPod'} # Retain these as-is for pod output
+ && $self->_remap_sequences($treelet) )
+ {
$self->_treat_Zs($treelet); # Might as well nix these first
$self->_treat_Ls($treelet); # L has to precede E and S
$self->_treat_Es($treelet);
$self->_treat_Ss($treelet); # S has to come after E
-
$self->_wrap_up($treelet); # Nix X's and merge texties
} else {
@@ -1080,9 +1089,14 @@ sub _treat_Ls { # Process our dear dear friends, the L<...> sequences
# By here, $treelet->[$i] is definitely an L node
my $ell = $treelet->[$i];
- DEBUG > 1 and print STDERR "Ogling L node $ell\n";
+ DEBUG > 1 and print STDERR "Ogling L node " . pretty($ell) . "\n";
- # bitch if it's empty
+ # bitch if it's empty or is just '/'
+ if (@{$ell} == 3 and $ell->[2] =~ m!\A\s*/\s*\z!) {
+ $self->whine( $start_line, "L<> contains only '/'" );
+ $treelet->[$i] = 'L</>'; # just make it a text node
+ next; # and move on
+ }
if( @{$ell} == 2
or (@{$ell} == 3 and $ell->[2] eq '')
) {
@@ -1289,6 +1303,7 @@ sub _treat_Ls { # Process our dear dear friends, the L<...> sequences
$section_name = [splice @ell_content];
$section_name->[ 0] =~ s/^\"//s;
$section_name->[-1] =~ s/\"$//s;
+ $ell->[1]{'~tolerated'} = 1;
}
# Turn L<Foo Bar> into L</Foo Bar>.
@@ -1296,8 +1311,8 @@ sub _treat_Ls { # Process our dear dear friends, the L<...> sequences
and grep !ref($_) && m/ /s, @ell_content
) {
$section_name = [splice @ell_content];
+ $ell->[1]{'~deprecated'} = 1;
# That's support for the now-deprecated syntax.
- # (Maybe generate a warning eventually?)
# Note that it deliberately won't work on L<...|Foo Bar>
}
@@ -1347,7 +1362,7 @@ sub _treat_Ls { # Process our dear dear friends, the L<...> sequences
# And update children to be the link-text:
@$ell = (@$ell[0,1], defined($link_text) ? splice(@$link_text) : '');
- DEBUG > 2 and print STDERR "End of L-parsing for this node $treelet->[$i]\n";
+ DEBUG > 2 and print STDERR "End of L-parsing for this node " . pretty($treelet->[$i]) . "\n";
unshift @stack, $treelet->[$i]; # might as well recurse
}
@@ -1507,6 +1522,7 @@ sub _accessorize { # A simple-minded method-maker
$Carp::CarpLevel = 1, Carp::croak(
"Accessor usage: \$obj->$attrname() or \$obj->$attrname(\$new_value)"
) unless (@_ == 1 or @_ == 2) and ref $_[0];
+
(@_ == 1) ? $_[0]->{$attrname}
: ($_[0]->{$attrname} = $_[1]);
};
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pod b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pod
index 67a18df0d64..c569e979ae9 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pod
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pod
@@ -19,7 +19,11 @@ Be sure to read L</ENCODING> if your Pod contains non-ASCII characters.
Pod formatters can use Pod::Simple to parse Pod documents and render them into
plain text, HTML, or any number of other formats. Typically, such formatters
will be subclasses of Pod::Simple, and so they will inherit its methods, like
-C<parse_file>.
+C<parse_file>. But note that Pod::Simple doesn't understand and
+properly parse Perl itself, so if you have a file which contains a Perl
+program that has a multi-line quoted string which has lines that look
+like pod, Pod::Simple will treat them as pod. This can be avoided if
+the file makes these into indented here documents instead.
If you're reading this document just because you have a Pod-processing
subclass that you want to use, this document (plus the documentation for the
@@ -219,6 +223,21 @@ that you don't want I<any> lines indented. You can do something like this:
return undef;
});
+=item C<< $parser->expand_verbatim_tabs( I<n> ) >>
+
+Default: 8
+
+If after any stripping of indentation in verbatim blocks, there remain
+tabs, this method call indicates what to do with them. C<0>
+means leave them as tabs, any other number indicates that each tab is to
+be translated so as to have tab stops every C<n> columns.
+
+This is independent of other methods (except that it operates after any
+verbatim input stripping is done).
+
+Like the other methods, the input parameter is not checked for validity.
+C<undef> or containing non-digits has the same effect as 8.
+
=back
=head1 TERTIARY METHODS
@@ -390,8 +409,8 @@ This module is managed in an open GitHub repository,
L<https://github.com/perl-pod/pod-simple/>. Feel free to fork and contribute, or
to clone L<git://github.com/perl-pod/pod-simple.git> and send patches!
-Patches against Pod::Simple are welcome. Please send bug reports to
-<bug-pod-simple@rt.cpan.org>.
+Please use L<https://github.com/perl-pod/pod-simple/issues/new> to file a bug
+report.
=head1 COPYRIGHT AND DISCLAIMERS
@@ -419,6 +438,8 @@ Pod::Simple is maintained by:
=item * David E. Wheeler C<dwheeler@cpan.org>
+=item * Karl Williamson C<khw@cpan.org>
+
=back
Documentation has been contributed by:
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/BlackBox.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/BlackBox.pm
index 9fe3f702ef9..d115aee7e3e 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/BlackBox.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/BlackBox.pm
@@ -22,8 +22,36 @@ use integer; # vroom!
use strict;
use Carp ();
use vars qw($VERSION );
-$VERSION = '3.35';
+$VERSION = '3.40';
#use constant DEBUG => 7;
+
+sub my_qr ($$) {
+
+ # $1 is a pattern to compile and return. Older perls compile any
+ # syntactically valid property, even if it isn't legal. To cope with
+ # this, return an empty string unless the compiled pattern also
+ # successfully matches $2, which the caller furnishes.
+
+ my ($input_re, $should_match) = @_;
+ # XXX could have a third parameter $shouldnt_match for extra safety
+
+ my $use_utf8 = ($] le 5.006002) ? 'use utf8;' : "";
+
+ my $re = eval "no warnings; $use_utf8 qr/$input_re/";
+ #print STDERR __LINE__, ": $input_re: $@\n" if $@;
+ return "" if $@;
+
+ my $matches = eval "no warnings; $use_utf8 '$should_match' =~ /$re/";
+ #print STDERR __LINE__, ": $input_re: $@\n" if $@;
+ return "" if $@;
+
+ #print STDERR __LINE__, ": SUCCESS: $re\n" if $matches;
+ return $re if $matches;
+
+ #print STDERR __LINE__, ": $re: didn't match\n";
+ return "";
+}
+
BEGIN {
require Pod::Simple;
*DEBUG = \&Pod::Simple::DEBUG unless defined &DEBUG
@@ -32,8 +60,37 @@ BEGIN {
# Matches a character iff the character will have a different meaning
# if we choose CP1252 vs UTF-8 if there is no =encoding line.
# This is broken for early Perls on non-ASCII platforms.
-my $non_ascii_re = eval "qr/[[:^ascii:]]/";
-$non_ascii_re = qr/[\x80-\xFF]/ if ! defined $non_ascii_re;
+my $non_ascii_re = my_qr('[[:^ascii:]]', "\xB6");
+$non_ascii_re = qr/[\x80-\xFF]/ unless $non_ascii_re;
+
+# Use patterns understandable by Perl 5.6, if possible
+my $cs_re = my_qr('\p{IsCs}', "\x{D800}");
+my $cn_re = my_qr('\p{IsCn}', "\x{09E4}"); # <reserved> code point unlikely
+ # to get assigned
+my $rare_blocks_re = my_qr('[\p{InIPAExtensions}\p{InSpacingModifierLetters}]',
+ "\x{250}");
+$rare_blocks_re = my_qr('[\x{0250}-\x{02FF}]', "\x{250}") unless $rare_blocks_re;
+
+my $script_run_re = eval 'no warnings "experimental::script_run";
+ qr/(*script_run: ^ .* $ )/x';
+my $latin_re = my_qr('[\p{IsLatin}\p{IsInherited}\p{IsCommon}]', "\x{100}");
+unless ($latin_re) {
+ # This was machine generated to be the ranges of the union of the above
+ # three properties, with things that were undefined by Unicode 4.1 filling
+ # gaps. That is the version in use when Perl advanced enough to
+ # successfully compile and execute the above pattern.
+ $latin_re = my_qr('[\x00-\x{02E9}\x{02EC}-\x{0374}\x{037E}\x{0385}\x{0387}\x{0485}\x{0486}\x{0589}\x{060C}\x{061B}\x{061F}\x{0640}\x{064B}-\x{0655}\x{0670}\x{06DD}\x{0951}-\x{0954}\x{0964}\x{0965}\x{0E3F}\x{10FB}\x{16EB}-\x{16ED}\x{1735}\x{1736}\x{1802}\x{1803}\x{1805}\x{1D00}-\x{1D25}\x{1D2C}-\x{1D5C}\x{1D62}-\x{1D65}\x{1D6B}-\x{1D77}\x{1D79}-\x{1DBE}\x{1DC0}-\x{1EF9}\x{2000}-\x{2125}\x{2127}-\x{27FF}\x{2900}-\x{2B13}\x{2E00}-\x{2E1D}\x{2FF0}-\x{3004}\x{3006}\x{3008}-\x{3020}\x{302A}-\x{302D}\x{3030}-\x{3037}\x{303C}-\x{303F}\x{3099}-\x{309C}\x{30A0}\x{30FB}\x{30FC}\x{3190}-\x{319F}\x{31C0}-\x{31CF}\x{3220}-\x{325F}\x{327F}-\x{32CF}\x{3358}-\x{33FF}\x{4DC0}-\x{4DFF}\x{A700}-\x{A716}\x{FB00}-\x{FB06}\x{FD3E}\x{FD3F}\x{FE00}-\x{FE6B}\x{FEFF}-\x{FF65}\x{FF70}\x{FF9E}\x{FF9F}\x{FFE0}-\x{FFFD}\x{10100}-\x{1013F}\x{1D000}-\x{1D1DD}\x{1D300}-\x{1D7FF}]', "\x{100}");
+}
+
+my $every_char_is_latin_re = my_qr("^(?:$latin_re)*\\z", "A");
+
+# Latin script code points not in the first release of Unicode
+my $later_latin_re = my_qr('[^\P{IsLatin}\p{IsAge=1.1}]', "\x{1F6}");
+
+# If this perl doesn't have the Deprecated property, there's only one code
+# point in it that we need be concerned with.
+my $deprecated_re = my_qr('\p{IsDeprecated}', "\x{149}");
+$deprecated_re = qr/\x{149}/ unless $deprecated_re;
my $utf8_bom;
if (($] ge 5.007_003)) {
@@ -43,6 +100,11 @@ if (($] ge 5.007_003)) {
$utf8_bom = "\xEF\xBB\xBF"; # No EBCDIC BOM detection for early Perls.
}
+# This is used so that the 'content_seen' method doesn't return true on a
+# file that just happens to have a line that matches /^=[a-zA-z]/. Only if
+# there is a valid =foo line will we return that content was seen.
+my $seen_legal_directive = 0;
+
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sub parse_line { shift->parse_lines(@_) } # alias
@@ -57,10 +119,10 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
my $cut_handler = $self->{'cut_handler'};
my $wl_handler = $self->{'whiteline_handler'};
$self->{'line_count'} ||= 0;
-
+
my $scratch;
- DEBUG > 4 and
+ DEBUG > 4 and
print STDERR "# Parsing starting at line ", $self->{'line_count'}, ".\n";
DEBUG > 5 and
@@ -71,9 +133,17 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
# paragraph buffer. Because we need to defer processing of =over
# directives and verbatim paragraphs. We call _ponder_paragraph_buffer
# to process this.
-
+
$self->{'pod_para_count'} ||= 0;
+ # An attempt to match the pod portions of a line. This is not fool proof,
+ # but is good enough to serve as part of the heuristic for guessing the pod
+ # encoding if not specified.
+ my $format_codes = join "", '[', grep { / ^ [A-Za-z] $/x }
+ keys %{$self->{accept_codes}};
+ $format_codes .= ']';
+ my $pod_chars_re = qr/ ^ = [A-Za-z]+ | $format_codes < /x;
+
my $line;
foreach my $source_line (@_) {
if( $self->{'source_dead'} ) {
@@ -97,7 +167,7 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
($line = $source_line) =~ tr/\n\r//d;
# If we don't have two vars, we'll end up with that there
# tr/// modding the (potentially read-only) original source line!
-
+
} else {
DEBUG > 2 and print STDERR "First line: [$source_line]\n";
@@ -106,7 +176,7 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
$self->_handle_encoding_line( "=encoding utf8" );
delete $self->{'_processed_encoding'};
$line =~ tr/\n\r//d;
-
+
} elsif( $line =~ s/^\xFE\xFF//s ) {
DEBUG and print STDERR "Big-endian UTF-16 BOM seen. Aborting parsing.\n";
$self->scream(
@@ -130,7 +200,7 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
next;
# TODO: implement somehow?
-
+
} else {
DEBUG > 2 and print STDERR "First line is BOM-less.\n";
($line = $source_line) =~ tr/\n\r//d;
@@ -144,8 +214,8 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
my $encoding;
- # No =encoding line, and we are at the first line in the input that
- # contains a non-ascii byte, that is one whose meaning varies depending
+ # No =encoding line, and we are at the first pod line in the input that
+ # contains a non-ascii byte, that is, one whose meaning varies depending
# on whether the file is encoded in UTF-8 or CP1252, which are the two
# possibilities permitted by the pod spec. (ASCII is assumed if the
# file only contains ASCII bytes.) In order to process this line, we
@@ -162,22 +232,28 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
# without conflict. CP 1252 uses most of them for graphic characters.
#
# Note that all ASCII-range bytes represent their corresponding code
- # points in CP1252 and UTF-8. In ASCII platform UTF-8 all other code
- # points require multiple (non-ASCII) bytes to represent. (A separate
- # paragraph for EBCDIC is below.) The multi-byte representation is
- # quite structured. If we find an isolated byte that requires multiple
- # bytes to represent in UTF-8, we know that the encoding is not UTF-8.
- # If we find a sequence of bytes that violates the UTF-8 structure, we
- # also can presume the encoding isn't UTF-8, and hence must be 1252.
+ # points in both CP1252 and UTF-8. In ASCII platform UTF-8, all other
+ # code points require multiple (non-ASCII) bytes to represent. (A
+ # separate paragraph for EBCDIC is below.) The multi-byte
+ # representation is quite structured. If we find an isolated byte that
+ # would require multiple bytes to represent in UTF-8, we know that the
+ # encoding is not UTF-8. If we find a sequence of bytes that violates
+ # the UTF-8 structure, we also can presume the encoding isn't UTF-8, and
+ # hence must be 1252.
#
# But there are ambiguous cases where we could guess wrong. If so, the
# user will end up having to supply an =encoding line. We use all
# readily available information to improve our chances of guessing
# right. The odds of something not being UTF-8, but still passing a
# UTF-8 validity test go down very rapidly with increasing length of the
- # sequence. Therefore we look at all the maximal length non-ascii
- # sequences on the line. If any of the sequences can't be UTF-8, we
- # quit there and choose CP1252. If all could be UTF-8, we guess UTF-8.
+ # sequence. Therefore we look at all non-ascii sequences on the line.
+ # If any of the sequences can't be UTF-8, we quit there and choose
+ # CP1252. If all could be UTF-8, we see if any of the code points
+ # represented are unlikely to be in pod. If so, we guess CP1252. If
+ # not, we check if the line is all in the same script; if not guess
+ # CP1252; otherwise UTF-8. For perls that don't have convenient script
+ # run testing, see if there is both Latin and non-Latin. If so, CP1252,
+ # otherwise UTF-8.
#
# On EBCDIC platforms, the situation is somewhat different. In
# UTF-EBCDIC, not only do ASCII-range bytes represent their code points,
@@ -188,51 +264,188 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
# very unlikely to be in pod text. So if we encounter one of them, it
# means that it is quite likely CP1252 and not UTF-8. The net result is
# the same code below is used for both platforms.
- while ($line =~ m/($non_ascii_re+)/g) {
- my $non_ascii_seq = $1;
-
- if (length $non_ascii_seq == 1) {
- $encoding = 'CP1252';
- goto guessed;
- } elsif ($] ge 5.007_003) {
-
- # On Perls that have this function, we can see if the sequence is
- # valid UTF-8 or not.
- my $is_utf8;
- {
- no warnings 'utf8';
- $is_utf8 = utf8::decode($non_ascii_seq);
+ #
+ # XXX probably if the line has E<foo> that evaluates to illegal CP1252,
+ # then it is UTF-8. But we haven't processed E<> yet.
+
+ goto set_1252 if $] lt 5.006_000; # No UTF-8 on very early perls
+
+ my $copy;
+
+ no warnings 'utf8';
+
+ if ($] ge 5.007_003) {
+ $copy = $line;
+
+ # On perls that have this function, we can use it to easily see if the
+ # sequence is valid UTF-8 or not; if valid it turns on the UTF-8 flag
+ # needed below for script run detection
+ goto set_1252 if ! utf8::decode($copy);
+ }
+ elsif (ord("A") != 65) { # Early EBCDIC, assume UTF-8. What's a windows
+ # code page doing here anyway?
+ goto set_utf8;
+ }
+ else { # ASCII, no decode(): do it ourselves using the fundamental
+ # characteristics of UTF-8
+ use if $] le 5.006002, 'utf8';
+
+ my $char_ord;
+ my $needed; # How many continuation bytes to gobble up
+
+ # Initialize the translated line with a dummy character that will be
+ # deleted after everything else is done. This dummy makes sure that
+ # $copy will be in UTF-8. Doing it now avoids the bugs in early perls
+ # with upgrading in the middle
+ $copy = chr(0x100);
+
+ # Parse through the line
+ for (my $i = 0; $i < length $line; $i++) {
+ my $byte = substr($line, $i, 1);
+
+ # ASCII bytes are trivially dealt with
+ if ($byte !~ $non_ascii_re) {
+ $copy .= $byte;
+ next;
+ }
+
+ my $b_ord = ord $byte;
+
+ # Now figure out what this code point would be if the input is
+ # actually in UTF-8. If, in the process, we discover that it isn't
+ # well-formed UTF-8, we guess CP1252.
+ #
+ # Start the process. If it is UTF-8, we are at the first, start
+ # byte, of a multi-byte sequence. We look at this byte to figure
+ # out how many continuation bytes are needed, and to initialize the
+ # code point accumulator with the data from this byte.
+ #
+ # Normally the minimum continuation byte is 0x80, but in certain
+ # instances the minimum is a higher number. So the code below
+ # overrides this for those instances.
+ my $min_cont = 0x80;
+
+ if ($b_ord < 0xC2) { # A start byte < C2 is malformed
+ goto set_1252;
+ }
+ elsif ($b_ord <= 0xDF) {
+ $needed = 1;
+ $char_ord = $b_ord & 0x1F;
}
- if (! $is_utf8) {
- $encoding = 'CP1252';
- goto guessed;
+ elsif ($b_ord <= 0xEF) {
+ $min_cont = 0xA0 if $b_ord == 0xE0;
+ $needed = 2;
+ $char_ord = $b_ord & (0x1F >> 1);
}
- } elsif (ord("A") == 65) { # An early Perl, ASCII platform
-
- # Without utf8::decode, it's a lot harder to do a rigorous check
- # (though some early releases had a different function that
- # accomplished the same thing). Since these are ancient Perls, not
- # likely to be in use today, we take the easy way out, and look at
- # just the first two bytes of the sequence to see if they are the
- # start of a UTF-8 character. In ASCII UTF-8, continuation bytes
- # must be between 0x80 and 0xBF. Start bytes can range from 0xC2
- # through 0xFF, but anything above 0xF4 is not Unicode, and hence
- # extremely unlikely to be in a pod.
- if ($non_ascii_seq !~ /^[\xC2-\xF4][\x80-\xBF]/) {
- $encoding = 'CP1252';
- goto guessed;
+ elsif ($b_ord <= 0xF4) {
+ $min_cont = 0x90 if $b_ord == 0xF0;
+ $needed = 3;
+ $char_ord = $b_ord & (0x1F >> 2);
+ }
+ else { # F4 is the highest start byte for legal Unicode; higher is
+ # unlikely to be in pod.
+ goto set_1252;
}
- # We don't bother doing anything special for EBCDIC on early Perls.
- # If there is a solitary variant, CP1252 will be chosen; otherwise
- # UTF-8.
- }
- } # End of loop through all variant sequences on the line
+ # ? not enough continuation bytes available
+ goto set_1252 if $i + $needed >= length $line;
+
+ # Accumulate the ordinal of the character from the remaining
+ # (continuation) bytes.
+ while ($needed-- > 0) {
+ my $cont = substr($line, ++$i, 1);
+ $b_ord = ord $cont;
+ goto set_1252 if $b_ord < $min_cont || $b_ord > 0xBF;
+
+ # In all cases, any next continuation bytes all have the same
+ # minimum legal value
+ $min_cont = 0x80;
+
+ # Accumulate this byte's contribution to the code point
+ $char_ord <<= 6;
+ $char_ord |= ($b_ord & 0x3F);
+ }
+
+ # Here, the sequence that formed this code point was valid UTF-8,
+ # so add the completed character to the output
+ $copy .= chr $char_ord;
+ } # End of loop through line
+
+ # Delete the dummy first character
+ $copy = substr($copy, 1);
+ }
+
+ # Here, $copy is legal UTF-8.
+
+ # If it can't be legal CP1252, no need to look further. (These bytes
+ # aren't valid in CP1252.) This test could have been placed higher in
+ # the code, but it seemed wrong to set the encoding to UTF-8 without
+ # making sure that the very first instance is well-formed. But what if
+ # it isn't legal CP1252 either? We have to choose one or the other, and
+ # It seems safer to favor the single-byte encoding over the multi-byte.
+ goto set_utf8 if ord("A") == 65 && $line =~ /[\x81\x8D\x8F\x90\x9D]/;
+
+ # The C1 controls are not likely to appear in pod
+ goto set_1252 if ord("A") == 65 && $copy =~ /[\x80-\x9F]/;
+
+ # Nor are surrogates nor unassigned, nor deprecated.
+ DEBUG > 8 and print STDERR __LINE__, ": $copy: surrogate\n" if $copy =~ $cs_re;
+ goto set_1252 if $cs_re && $copy =~ $cs_re;
+ DEBUG > 8 and print STDERR __LINE__, ": $copy: unassigned\n" if $cn_re && $copy =~ $cn_re;
+ goto set_1252 if $cn_re && $copy =~ $cn_re;
+ DEBUG > 8 and print STDERR __LINE__, ": $copy: deprecated\n" if $copy =~ $deprecated_re;
+ goto set_1252 if $copy =~ $deprecated_re;
+
+ # Nor are rare code points. But this is hard to determine. khw
+ # believes that IPA characters and the modifier letters are unlikely to
+ # be in pod (and certainly very unlikely to be the in the first line in
+ # the pod containing non-ASCII)
+ DEBUG > 8 and print STDERR __LINE__, ": $copy: rare\n" if $copy =~ $rare_blocks_re;
+ goto set_1252 if $rare_blocks_re && $copy =~ $rare_blocks_re;
+
+ # The first Unicode version included essentially every Latin character
+ # in modern usage. So, a Latin character not in the first release will
+ # unlikely be in pod.
+ DEBUG > 8 and print STDERR __LINE__, ": $copy: later_latin\n" if $later_latin_re && $copy =~ $later_latin_re;
+ goto set_1252 if $later_latin_re && $copy =~ $later_latin_re;
+
+ # On perls that handle script runs, if the UTF-8 interpretation yields
+ # a single script, we guess UTF-8, otherwise just having a mixture of
+ # scripts is suspicious, so guess CP1252. We first strip off, as best
+ # we can, the ASCII characters that look like they are pod directives,
+ # as these would always show as mixed with non-Latin text.
+ $copy =~ s/$pod_chars_re//g;
+
+ if ($script_run_re) {
+ goto set_utf8 if $copy =~ $script_run_re;
+ DEBUG > 8 and print STDERR __LINE__, ": not script run\n";
+ goto set_1252;
+ }
+
+ # Even without script runs, but on recent enough perls and Unicodes, we
+ # can check if there is a mixture of both Latin and non-Latin. Again,
+ # having a mixture of scripts is suspicious, so assume CP1252
+
+ # If it's all non-Latin, there is no CP1252, as that is Latin
+ # characters and punct, etc.
+ DEBUG > 8 and print STDERR __LINE__, ": $copy: not latin\n" if $copy !~ $latin_re;
+ goto set_utf8 if $copy !~ $latin_re;
+
+ DEBUG > 8 and print STDERR __LINE__, ": $copy: all latin\n" if $copy =~ $every_char_is_latin_re;
+ goto set_utf8 if $copy =~ $every_char_is_latin_re;
+
+ DEBUG > 8 and print STDERR __LINE__, ": $copy: mixed\n";
+
+ set_1252:
+ DEBUG > 9 and print STDERR __LINE__, ": $copy: is 1252\n";
+ $encoding = 'CP1252';
+ goto done_set;
- # All sequences in the line could be UTF-8. Guess that.
+ set_utf8:
+ DEBUG > 9 and print STDERR __LINE__, ": $copy: is UTF-8\n";
$encoding = 'UTF-8';
- guessed:
+ done_set:
$self->_handle_encoding_line( "=encoding $encoding" );
delete $self->{'_processed_encoding'};
$self->{'_transcoder'} && $self->{'_transcoder'}->($line);
@@ -254,13 +467,13 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
$self->{'line_count'},
"=cut found outside a pod block. Skipping to next block."
);
-
+
## Before there were errata sections in the world, it was
## least-pessimal to abort processing the file. But now we can
## just barrel on thru (but still not start a pod block).
#splice @_;
#push @_, undef;
-
+
next;
} else {
$self->{'in_pod'} = $self->{'start_of_pod_block'}
@@ -273,7 +486,7 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
if $code_handler;
# Note: this may cause code to be processed out of order relative
# to pods, but in order relative to cuts.
-
+
# Note also that we haven't yet applied the transcoding to $line
# by time we call $code_handler!
@@ -284,11 +497,11 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
DEBUG > 1 and print STDERR "# Setting nextline to $1\n";
$self->{'line_count'} = $1 - 1;
}
-
+
next;
}
}
-
+
# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
# Else we're in pod mode:
@@ -308,12 +521,13 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
# ++$self->{'pod_para_count'};
$self->_ponder_paragraph_buffer();
# by now it's safe to consider the previous paragraph as done.
+ DEBUG > 6 and print STDERR "Processing any cut handler, line ${$self}{'line_count'}\n";
$cut_handler->(map $_, $line, $self->{'line_count'}, $self)
if $cut_handler;
# TODO: add to docs: Note: this may cause cuts to be processed out
# of order relative to pods, but in order relative to code.
-
+
} elsif($line =~ m/^(\s*)$/s) { # it's a blank line
if (defined $1 and $1 =~ /[^\S\r\n]/) { # it's a white line
$wl_handler->(map $_, $line, $self->{'line_count'}, $self)
@@ -324,29 +538,30 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
DEBUG > 1 and print STDERR "Saving blank line at line ${$self}{'line_count'}\n";
push @{$paras->[-1]}, $line;
} # otherwise it's not interesting
-
+
if(!$self->{'start_of_pod_block'} and !$self->{'last_was_blank'}) {
DEBUG > 1 and print STDERR "Noting para ends with blank line at ${$self}{'line_count'}\n";
}
-
+
$self->{'last_was_blank'} = 1;
-
+
} elsif($self->{'last_was_blank'}) { # A non-blank line starting a new para...
-
- if($line =~ m/^(=[a-zA-Z][a-zA-Z0-9]*)(?:\s+|$)(.*)/s) {
+
+ if($line =~ m/^(=[a-zA-Z][a-zA-Z0-9]*)(\s+|$)(.*)/s) {
# THIS IS THE ONE PLACE WHERE WE CONSTRUCT NEW DIRECTIVE OBJECTS
- my $new = [$1, {'start_line' => $self->{'line_count'}}, $2];
+ my $new = [$1, {'start_line' => $self->{'line_count'}}, $3];
+ $new->[1]{'~orig_spacer'} = $2 if $2 && $2 ne " ";
# Note that in "=head1 foo", the WS is lost.
# Example: ['=head1', {'start_line' => 123}, ' foo']
-
+
++$self->{'pod_para_count'};
-
+
$self->_ponder_paragraph_buffer();
# by now it's safe to consider the previous paragraph as done.
-
+
push @$paras, $new; # the new incipient paragraph
DEBUG > 1 and print STDERR "Starting new ${$paras}[-1][0] para at line ${$self}{'line_count'}\n";
-
+
} elsif($line =~ m/^\s/s) {
if(!$self->{'start_of_pod_block'} and @$paras and $paras->[-1][0] eq '~Verbatim') {
@@ -379,7 +594,7 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
}
$self->{'last_was_blank'} = $self->{'start_of_pod_block'} = 0;
}
-
+
} # ends the big while loop
DEBUG > 1 and print STDERR (pretty(@$paras), "\n");
@@ -390,7 +605,7 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines)
sub _handle_encoding_line {
my($self, $line) = @_;
-
+
return if $self->parse_characters;
# The point of this routine is to set $self->{'_transcoder'} as indicated.
@@ -492,7 +707,7 @@ sub _handle_encoding_line {
sub _handle_encoding_second_level {
# By time this is called, the encoding (if well formed) will already
- # have been acted one.
+ # have been acted on.
my($self, $para) = @_;
my @x = @$para;
my $content = join ' ', splice @x, 2;
@@ -500,7 +715,7 @@ sub _handle_encoding_second_level {
$content =~ s/\s+$//s;
DEBUG > 2 and print STDERR "Ogling encoding directive: =encoding $content\n";
-
+
if (defined($self->{'_processed_encoding'})) {
#if($content ne $self->{'_processed_encoding'}) {
# Could it happen?
@@ -518,14 +733,14 @@ sub _handle_encoding_second_level {
} else {
DEBUG > 2 and print STDERR " (Yup, it was successfully handled already.)\n";
}
-
+
} else {
# Otherwise it's a syntax error
$self->whine( $para->[1]{'start_line'},
"Invalid =encoding syntax: $content"
);
}
-
+
return;
}
@@ -542,7 +757,7 @@ sub _gen_errata {
return() unless $self->{'errata'} and keys %{$self->{'errata'}};
my @out;
-
+
foreach my $line (sort {$a <=> $b} keys %{$self->{'errata'}}) {
push @out,
['=item', {'start_line' => $m}, "Around line $line:"],
@@ -555,7 +770,7 @@ sub _gen_errata {
)
;
}
-
+
# TODO: report of unknown entities? unrenderable characters?
unshift @out,
@@ -569,7 +784,7 @@ sub _gen_errata {
['=over', {'start_line' => $m, 'errata' => 1}, ''],
;
- push @out,
+ push @out,
['=back', {'start_line' => $m, 'errata' => 1}, ''],
;
@@ -610,7 +825,7 @@ sub _ponder_paragraph_buffer {
# Document,
# Data, Para, Verbatim
# B, C, longdirname (TODO -- wha?), etc. for all directives
- #
+ #
my $self = $_[0];
my $paras;
@@ -624,11 +839,11 @@ sub _ponder_paragraph_buffer {
# We have something in our buffer. So apparently the document has started.
unless($self->{'doc_has_started'}) {
$self->{'doc_has_started'} = 1;
-
+
my $starting_contentless;
$starting_contentless =
(
- !@$curr_open
+ !@$curr_open
and @$paras and ! grep $_->[0] ne '~end', @$paras
# i.e., if the paras is all ~ends
)
@@ -637,7 +852,7 @@ sub _ponder_paragraph_buffer {
$starting_contentless ? 'contentless' : 'contentful',
" document\n"
;
-
+
$self->_handle_element_start(
($scratch = 'Document'),
{
@@ -649,15 +864,32 @@ sub _ponder_paragraph_buffer {
my($para, $para_type);
while(@$paras) {
- last if @$paras == 1 and
- ( $paras->[0][0] eq '=over' or $paras->[0][0] eq '~Verbatim'
- or $paras->[0][0] eq '=item' )
- ;
+
+ # If a directive, assume it's legal; subtract below if found not to be
+ $seen_legal_directive++ if $paras->[0][0] =~ /^=/;
+
+ last if @$paras == 1
+ and ( $paras->[0][0] eq '=over'
+ or $paras->[0][0] eq '=item'
+ or ($paras->[0][0] eq '~Verbatim' and $self->{'in_pod'}));
# Those're the three kinds of paragraphs that require lookahead.
# Actually, an "=item Foo" inside an <over type=text> region
# and any =item inside an <over type=block> region (rare)
# don't require any lookahead, but all others (bullets
# and numbers) do.
+ # The verbatim is different from the other two, because those might be
+ # like:
+ #
+ # =item
+ # ...
+ # =cut
+ # ...
+ # =item
+ #
+ # The =cut here finishes the paragraph but doesn't terminate the =over
+ # they should be in. (khw apologizes that he didn't comment at the time
+ # why the 'in_pod' works, and no longer remembers why, and doesn't think
+ # it is currently worth the effort to re-figure it out.)
# TODO: whinge about many kinds of directives in non-resolving =for regions?
# TODO: many? like what? =head1 etc?
@@ -667,7 +899,7 @@ sub _ponder_paragraph_buffer {
DEBUG > 1 and print STDERR "Pondering a $para_type paragraph, given the stack: (",
$self->_dump_curr_open(), ")\n";
-
+
if($para_type eq '=for') {
next if $self->_ponder_for($para,$curr_open,$paras);
@@ -704,7 +936,7 @@ sub _ponder_paragraph_buffer {
} else {
# All non-magical codes!!!
-
+
# Here we start using $para_type for our own twisted purposes, to
# mean how it should get treated, not as what the element name
# should be.
@@ -744,10 +976,10 @@ sub _ponder_paragraph_buffer {
;
next;
}
-
-
+
+
my $over_type = $over->[1]{'~type'};
-
+
if(!$over_type) {
# Shouldn't happen1
die "Typeless over in stack, starting at line "
@@ -772,7 +1004,7 @@ sub _ponder_paragraph_buffer {
my $item_type = $self->_get_item_type($para);
# That kills the content of the item if it's a number or bullet.
DEBUG and print STDERR " Item is of type ", $para->[0], " under $over_type\n";
-
+
if($item_type eq 'text') {
# Nothing special needs doing for 'text'
} elsif($item_type eq 'number' or $item_type eq 'bullet') {
@@ -788,16 +1020,16 @@ sub _ponder_paragraph_buffer {
} else {
die "Unhandled item type $item_type"; # should never happen
}
-
+
# =item-text thingies don't need any assimilation, it seems.
} elsif($over_type eq 'number') {
my $item_type = $self->_get_item_type($para);
# That kills the content of the item if it's a number or bullet.
DEBUG and print STDERR " Item is of type ", $para->[0], " under $over_type\n";
-
+
my $expected_value = ++ $curr_open->[-1][1]{'~counter'};
-
+
if($item_type eq 'bullet') {
# Hm, it's not numeric. Correct for this.
$para->[1]{'number'} = $expected_value;
@@ -822,7 +1054,7 @@ sub _ponder_paragraph_buffer {
} elsif($expected_value == $para->[1]{'number'}) {
DEBUG > 1 and print STDERR " Numeric item has the expected value of $expected_value\n";
-
+
} else {
DEBUG > 1 and print STDERR " Numeric item has ", $para->[1]{'number'},
" instead of the expected value of $expected_value\n";
@@ -833,7 +1065,7 @@ sub _ponder_paragraph_buffer {
);
$para->[1]{'number'} = $expected_value; # correcting!!
}
-
+
if(@$para == 2) {
# For the cases where we /didn't/ push to @$para
if($paras->[0][0] eq '~Para') {
@@ -850,13 +1082,13 @@ sub _ponder_paragraph_buffer {
my $item_type = $self->_get_item_type($para);
# That kills the content of the item if it's a number or bullet.
DEBUG and print STDERR " Item is of type ", $para->[0], " under $over_type\n";
-
+
if($item_type eq 'bullet') {
# as expected!
if( $para->[1]{'~_freaky_para_hack'} ) {
DEBUG and print STDERR "Accomodating '=item * Foo' tolerance hack.\n";
- push @$para, delete $para->[1]{'~_freaky_para_hack'};
+ push @$para, $para->[1]{'~_freaky_para_hack'};
}
} elsif($item_type eq 'number') {
@@ -925,6 +1157,7 @@ sub _ponder_paragraph_buffer {
DEBUG > 1 and print STDERR " Pondering known directive ${$para}[0] as $para_type\n";
} else {
# An unknown directive!
+ $seen_legal_directive--;
DEBUG > 1 and printf STDERR "Unhandled directive %s (Handled: %s)\n",
$para->[0], join(' ', sort keys %{$self->{'accept_directives'}} )
;
@@ -944,15 +1177,15 @@ sub _ponder_paragraph_buffer {
my @fors = grep $_->[0] eq '=for', @$curr_open;
DEBUG > 1 and print STDERR "Containing fors: ",
join(',', map $_->[1]{'target'}, @fors), "\n";
-
+
if(! @fors) {
DEBUG and print STDERR "Treating $para_type paragraph as such because stack has no =for's\n";
-
+
#} elsif(grep $_->[1]{'~resolve'}, @fors) {
#} elsif(not grep !$_->[1]{'~resolve'}, @fors) {
} elsif( $fors[-1][1]{'~resolve'} ) {
# Look to the immediately containing for
-
+
if($para_type eq 'Data') {
DEBUG and print STDERR "Treating Data paragraph as Plain/Verbatim because the containing =for ($fors[-1][1]{'target'}) is a resolver\n";
$para->[0] = 'Para';
@@ -971,7 +1204,7 @@ sub _ponder_paragraph_buffer {
if($para_type eq 'Plain') {
$self->_ponder_Plain($para);
} elsif($para_type eq 'Verbatim') {
- $self->_ponder_Verbatim($para);
+ $self->_ponder_Verbatim($para);
} elsif($para_type eq 'Data') {
$self->_ponder_Data($para);
} else {
@@ -985,11 +1218,12 @@ sub _ponder_paragraph_buffer {
DEBUG and print STDERR "\n", pretty($para), "\n";
# traverse the treelet (which might well be just one string scalar)
- $self->{'content_seen'} ||= 1;
+ $self->{'content_seen'} ||= 1 if $seen_legal_directive
+ && ! $self->{'~tried_gen_errata'};
$self->_traverse_treelet_bit(@$para);
}
}
-
+
return;
}
@@ -1024,9 +1258,9 @@ sub _ponder_for {
}
DEBUG > 1 and
print STDERR "Faking out a =for $target as a =begin $target / =end $target\n";
-
+
$para->[0] = 'Data';
-
+
unshift @$paras,
['=begin',
{'start_line' => $para->[1]{'start_line'}, '~really' => '=for'},
@@ -1038,7 +1272,7 @@ sub _ponder_for {
$target,
],
;
-
+
return 1;
}
@@ -1055,20 +1289,20 @@ sub _ponder_begin {
DEBUG and print STDERR "Ignoring targetless =begin\n";
return 1;
}
-
+
my ($target, $title) = $content =~ m/^(\S+)\s*(.*)$/;
$para->[1]{'title'} = $title if ($title);
$para->[1]{'target'} = $target; # without any ':'
$content = $target; # strip off the title
-
+
$content =~ s/^:!/!:/s;
my $neg; # whether this is a negation-match
$neg = 1 if $content =~ s/^!//s;
my $to_resolve; # whether to process formatting codes
$to_resolve = 1 if $content =~ s/^://s;
-
+
my $dont_ignore; # whether this target matches us
-
+
foreach my $target_name (
split(',', $content, -1),
$neg ? () : '*'
@@ -1076,7 +1310,7 @@ sub _ponder_begin {
DEBUG > 2 and
print STDERR " Considering whether =begin $content matches $target_name\n";
next unless $self->{'accept_targets'}{$target_name};
-
+
DEBUG > 2 and
print STDERR " It DOES match the acceptable target $target_name!\n";
$to_resolve = 1
@@ -1113,7 +1347,7 @@ sub _ponder_begin {
if(!$dont_ignore or scalar grep $_->[1]{'~ignore'}, @$curr_open) {
DEBUG > 1 and print STDERR "Ignoring ignorable =begin\n";
} else {
- $self->{'content_seen'} ||= 1;
+ $self->{'content_seen'} ||= 1 unless $self->{'~tried_gen_errata'};
$self->_handle_element_start((my $scratch='for'), $para->[1]);
}
@@ -1139,7 +1373,7 @@ sub _ponder_end {
DEBUG and print STDERR "Ignoring targetless =end\n";
return 1;
}
-
+
unless($content =~ m/^\S+$/) { # i.e., unless it's one word
$self->whine(
$para->[1]{'start_line'},
@@ -1149,7 +1383,7 @@ sub _ponder_end {
DEBUG and print STDERR "Ignoring mistargetted =end $content\n";
return 1;
}
-
+
unless(@$curr_open and $curr_open->[-1][0] eq '=for') {
$self->whine(
$para->[1]{'start_line'},
@@ -1159,11 +1393,11 @@ sub _ponder_end {
DEBUG and print STDERR "Ignoring mistargetted =end $content\n";
return 1;
}
-
+
unless($content eq $curr_open->[-1][1]{'target'}) {
$self->whine(
$para->[1]{'start_line'},
- "=end $content doesn't match =begin "
+ "=end $content doesn't match =begin "
. $curr_open->[-1][1]{'target'}
. ". (Stack: "
. $self->_dump_curr_open() . ')'
@@ -1180,22 +1414,22 @@ sub _ponder_end {
} else {
$curr_open->[-1][1]{'start_line'} = $para->[1]{'start_line'};
# what's that for?
-
- $self->{'content_seen'} ||= 1;
+
+ $self->{'content_seen'} ||= 1 unless $self->{'~tried_gen_errata'};
$self->_handle_element_end( my $scratch = 'for', $para->[1]);
}
DEBUG > 1 and print STDERR "Popping $curr_open->[-1][0] $curr_open->[-1][1]{'target'} because of =end $content\n";
pop @$curr_open;
return 1;
-}
+}
sub _ponder_doc_end {
my ($self,$para,$curr_open,$paras) = @_;
if(@$curr_open) { # Deal with things left open
DEBUG and print STDERR "Stack is nonempty at end-document: (",
$self->_dump_curr_open(), ")\n";
-
+
DEBUG > 9 and print STDERR "Stack: ", pretty($curr_open), "\n";
unshift @$paras, $self->_closers_for_all_curr_open;
# Make sure there is exactly one ~end in the parastack, at the end:
@@ -1205,11 +1439,11 @@ sub _ponder_doc_end {
# generate errata, and then another to be at the end
# when that loop back around to process the errata.
return 1;
-
+
} else {
DEBUG and print STDERR "Okay, stack is empty now.\n";
}
-
+
# Try generating errata section, if applicable
unless($self->{'~tried_gen_errata'}) {
$self->{'~tried_gen_errata'} = 1;
@@ -1220,7 +1454,7 @@ sub _ponder_doc_end {
return 1; # I.e., loop around again to process these fake-o paragraphs
}
}
-
+
splice @$paras; # Well, that's that for this paragraph buffer.
DEBUG and print STDERR "Throwing end-document event.\n";
@@ -1245,7 +1479,7 @@ sub _ponder_pod {
# The surrounding methods set content_seen, so let us remain consistent.
# I do not know why it was not here before -- should it not be here?
- # $self->{'content_seen'} ||= 1;
+ # $self->{'content_seen'} ||= 1 unless $self->{'~tried_gen_errata'};
return;
}
@@ -1278,8 +1512,9 @@ sub _ponder_over {
$para->[1]{'~type'} = $list_type;
push @$curr_open, $para;
# yes, we reuse the paragraph as a stack item
-
+
my $content = join ' ', splice @$para, 2;
+ $para->[1]{'~orig_content'} = $content;
my $overness;
if($content =~ m/^\s*$/s) {
$para->[1]{'indent'} = 4;
@@ -1301,13 +1536,13 @@ sub _ponder_over {
$para->[1]{'indent'} = 4;
}
DEBUG > 1 and print STDERR "=over found of type $list_type\n";
-
- $self->{'content_seen'} ||= 1;
+
+ $self->{'content_seen'} ||= 1 unless $self->{'~tried_gen_errata'};
$self->_handle_element_start((my $scratch = 'over-' . $list_type), $para->[1]);
return;
}
-
+
sub _ponder_back {
my ($self,$para,$curr_open,$paras) = @_;
# TODO: fire off </item-number> or </item-bullet> or </item-text> ??
@@ -1324,7 +1559,7 @@ sub _ponder_back {
DEBUG > 1 and print STDERR "=back happily closes matching =over\n";
# Expected case: we're closing the most recently opened thing
#my $over = pop @$curr_open;
- $self->{'content_seen'} ||= 1;
+ $self->{'content_seen'} ||= 1 unless $self->{'~tried_gen_errata'};
$self->_handle_element_end( my $scratch =
'over-' . ( (pop @$curr_open)->[1]{'~type'} ), $para->[1]
);
@@ -1354,10 +1589,10 @@ sub _ponder_item {
;
return 1;
}
-
-
+
+
my $over_type = $over->[1]{'~type'};
-
+
if(!$over_type) {
# Shouldn't happen1
die "Typeless over in stack, starting at line "
@@ -1382,7 +1617,7 @@ sub _ponder_item {
my $item_type = $self->_get_item_type($para);
# That kills the content of the item if it's a number or bullet.
DEBUG and print STDERR " Item is of type ", $para->[0], " under $over_type\n";
-
+
if($item_type eq 'text') {
# Nothing special needs doing for 'text'
} elsif($item_type eq 'number' or $item_type eq 'bullet') {
@@ -1398,16 +1633,16 @@ sub _ponder_item {
} else {
die "Unhandled item type $item_type"; # should never happen
}
-
+
# =item-text thingies don't need any assimilation, it seems.
} elsif($over_type eq 'number') {
my $item_type = $self->_get_item_type($para);
# That kills the content of the item if it's a number or bullet.
DEBUG and print STDERR " Item is of type ", $para->[0], " under $over_type\n";
-
+
my $expected_value = ++ $curr_open->[-1][1]{'~counter'};
-
+
if($item_type eq 'bullet') {
# Hm, it's not numeric. Correct for this.
$para->[1]{'number'} = $expected_value;
@@ -1432,7 +1667,7 @@ sub _ponder_item {
} elsif($expected_value == $para->[1]{'number'}) {
DEBUG > 1 and print STDERR " Numeric item has the expected value of $expected_value\n";
-
+
} else {
DEBUG > 1 and print STDERR " Numeric item has ", $para->[1]{'number'},
" instead of the expected value of $expected_value\n";
@@ -1443,7 +1678,7 @@ sub _ponder_item {
);
$para->[1]{'number'} = $expected_value; # correcting!!
}
-
+
if(@$para == 2) {
# For the cases where we /didn't/ push to @$para
if($paras->[0][0] eq '~Para') {
@@ -1460,13 +1695,13 @@ sub _ponder_item {
my $item_type = $self->_get_item_type($para);
# That kills the content of the item if it's a number or bullet.
DEBUG and print STDERR " Item is of type ", $para->[0], " under $over_type\n";
-
+
if($item_type eq 'bullet') {
# as expected!
if( $para->[1]{'~_freaky_para_hack'} ) {
DEBUG and print STDERR "Accomodating '=item * Foo' tolerance hack.\n";
- push @$para, delete $para->[1]{'~_freaky_para_hack'};
+ push @$para, $para->[1]{'~_freaky_para_hack'};
}
} elsif($item_type eq 'number') {
@@ -1533,30 +1768,44 @@ sub _ponder_Verbatim {
$para->[1]{'xml:space'} = 'preserve';
- my $indent = $self->strip_verbatim_indent;
- if ($indent && ref $indent eq 'CODE') {
- my @shifted = (shift @{$para}, shift @{$para});
- $indent = $indent->($para);
- unshift @{$para}, @shifted;
- }
-
- for(my $i = 2; $i < @$para; $i++) {
- foreach my $line ($para->[$i]) { # just for aliasing
- # Strip indentation.
- $line =~ s/^\Q$indent// if $indent
- && !($self->{accept_codes} && $self->{accept_codes}{VerbatimFormatted});
- while( $line =~
- # Sort of adapted from Text::Tabs -- yes, it's hardwired in that
- # tabs are at every EIGHTH column. For portability, it has to be
- # one setting everywhere, and 8th wins.
- s/^([^\t]*)(\t+)/$1.(" " x ((length($2)<<3)-(length($1)&7)))/e
- ) {}
+ unless ($self->{'_output_is_for_JustPod'}) {
+ # Fix illegal settings for expand_verbatim_tabs()
+ # This is because this module doesn't do input error checking, but khw
+ # doesn't want to add yet another instance of that.
+ $self->expand_verbatim_tabs(8)
+ if ! defined $self->expand_verbatim_tabs()
+ || $self->expand_verbatim_tabs() =~ /\D/;
+
+ my $indent = $self->strip_verbatim_indent;
+ if ($indent && ref $indent eq 'CODE') {
+ my @shifted = (shift @{$para}, shift @{$para});
+ $indent = $indent->($para);
+ unshift @{$para}, @shifted;
+ }
- # TODO: whinge about (or otherwise treat) unindented or overlong lines
+ for(my $i = 2; $i < @$para; $i++) {
+ foreach my $line ($para->[$i]) { # just for aliasing
+ # Strip indentation.
+ $line =~ s/^\Q$indent// if $indent;
+ next unless $self->expand_verbatim_tabs;
+
+ # This is commented out because of github issue #85, and the
+ # current maintainers don't know why it was there in the first
+ # place.
+ #&& !($self->{accept_codes} && $self->{accept_codes}{VerbatimFormatted});
+ while( $line =~
+ # Sort of adapted from Text::Tabs.
+ s/^([^\t]*)(\t+)/$1.(" " x ((length($2)
+ * $self->expand_verbatim_tabs)
+ -(length($1)&7)))/e
+ ) {}
+
+ # TODO: whinge about (or otherwise treat) unindented or overlong lines
+ }
}
}
-
+
# Now the VerbatimFormatted hoodoo...
if( $self->{'accept_codes'} and
$self->{'accept_codes'}{'VerbatimFormatted'}
@@ -1596,7 +1845,7 @@ sub _traverse_treelet_bit { # for use only by the routine above
my $scratch;
$self->_handle_element_start(($scratch=$name), shift @_);
-
+
while (@_) {
my $x = shift;
if (ref($x)) {
@@ -1606,7 +1855,7 @@ sub _traverse_treelet_bit { # for use only by the routine above
$self->_handle_text($x);
}
}
-
+
$self->_handle_element_end($scratch=$name);
return;
}
@@ -1651,7 +1900,7 @@ sub _closers_for_all_curr_open {
sub _verbatim_format {
my($it, $p) = @_;
-
+
my $formatting;
for(my $i = 2; $i < @$p; $i++) { # work backwards over the lines
@@ -1659,7 +1908,7 @@ sub _verbatim_format {
$p->[$i] .= "\n";
# Unlike with simple Verbatim blocks, we don't end up just doing
# a join("\n", ...) on the contents, so we have to append a
- # newline to ever line, and then nix the last one later.
+ # newline to every line, and then nix the last one later.
}
if( DEBUG > 4 ) {
@@ -1672,7 +1921,7 @@ sub _verbatim_format {
for(my $i = $#$p; $i > 2; $i--) {
# work backwards over the lines, except the first (#2)
-
+
#next unless $p->[$i] =~ m{^#:([ \^\/\%]*)\n?$}s
# and $p->[$i-1] !~ m{^#:[ \^\/\%]*\n?$}s;
# look at a formatty line preceding a nonformatty one
@@ -1680,7 +1929,7 @@ sub _verbatim_format {
if($p->[$i] =~ m{^#:([ \^\/\%]*)\n?$}s) {
DEBUG > 5 and print STDERR " It's a formatty line. ",
"Peeking at previous line ", $i-1, ": $$p[$i-1]: \n";
-
+
if( $p->[$i-1] =~ m{^#:[ \^\/\%]*\n?$}s ) {
DEBUG > 5 and print STDERR " Previous line is formatty! Skipping this one.\n";
next;
@@ -1696,11 +1945,11 @@ sub _verbatim_format {
# "^" to mean bold, "/" to mean underline, and "%" to mean bold italic.
# Example:
# What do you want? i like pie. [or whatever]
- # #:^^^^^^^^^^^^^^^^^ /////////////
-
+ # #:^^^^^^^^^^^^^^^^^ /////////////
+
DEBUG > 4 and print STDERR "_verbatim_format considers:\n<$p->[$i-1]>\n<$p->[$i]>\n";
-
+
$formatting = ' ' . $1;
$formatting =~ s/\s+$//s; # nix trailing whitespace
unless(length $formatting and $p->[$i-1] =~ m/\S/) { # no-op
@@ -1716,7 +1965,7 @@ sub _verbatim_format {
}
# Make $formatting and the previous line be exactly the same length,
# with $formatting having a " " as the last character.
-
+
DEBUG > 4 and print STDERR "Formatting <$formatting> on <", $p->[$i-1], ">\n";
@@ -1741,10 +1990,10 @@ sub _verbatim_format {
#print STDERR "Formatting <$new_line[-1][-1]> as $new_line[-1][0]\n";
}
}
- my @nixed =
+ my @nixed =
splice @$p, $i-1, 2, @new_line; # replace myself and the next line
DEBUG > 10 and print STDERR "Nixed count: ", scalar(@nixed), "\n";
-
+
DEBUG > 6 and print STDERR "New version of the above line is these tokens (",
scalar(@new_line), "):",
map( ref($_)?"<@$_> ":"<$_>", @new_line ), "\n";
@@ -1791,29 +2040,46 @@ sub _treelet_from_formatting_codes {
# [ 'B', {}, "pie" ],
# "!"
# ]
-
+ # This illustrates the general format of a treelet. It is an array:
+ # [0] is a scalar indicating its type. In the example above, the
+ # types are '~Top' and 'B'
+ # [1] is a hash of various flags about it, possibly empty
+ # [2] - [N] are an ordered list of the subcomponents of the treelet.
+ # Scalars are literal text, refs are sub-treelets, to
+ # arbitrary levels. Stringifying a treelet will recursively
+ # stringify the sub-treelets, concatentating everything
+ # together to form the exact text of the treelet.
+
my($self, $para, $start_line, $preserve_space) = @_;
-
+
my $treelet = ['~Top', {'start_line' => $start_line},];
-
+
unless ($preserve_space || $self->{'preserve_whitespace'}) {
$para =~ s/\s+/ /g; # collapse and trim all whitespace first.
$para =~ s/ $//;
$para =~ s/^ //;
}
-
+
# Only apparent problem the above code is that N<< >> turns into
# N<< >>. But then, word wrapping does that too! So don't do that!
-
+
+
+ # As a Start-code is encountered, the number of opening bracket '<'
+ # characters minus 1 is pushed onto @stack (so 0 means a single bracket,
+ # etc). When closing brackets are found in the text, at least this number
+ # (plus the 1) will be required to mean the Start-code is terminated. When
+ # those are found, @stack is popped.
my @stack;
+
my @lineage = ($treelet);
my $raw = ''; # raw content of L<> fcode before splitting/processing
# XXX 'raw' is not 100% accurate: all surrounding whitespace is condensed
- # into just 1 ' '. Is this the regex's doing or 'raw's?
+ # into just 1 ' '. Is this the regex's doing or 'raw's? Answer is it's
+ # the 'collapse and trim all whitespace first' lines just above.
my $inL = 0;
DEBUG > 4 and print STDERR "Paragraph:\n$para\n\n";
-
+
# Here begins our frightening tokenizer RE. The following regex matches
# text in four main parts:
#
@@ -1846,7 +2112,11 @@ sub _treelet_from_formatting_codes {
|
# Match multiple-bracket end codes. $3 gets the whitespace that
# should be discarded before an end bracket but kept in other cases
- # and $4 gets the end brackets themselves.
+ # and $4 gets the end brackets themselves. ($3 can be empty if the
+ # construct is empty, like C<< >>, and all the white-space has been
+ # gobbled up already, considered to be space after the opening
+ # bracket. In this case we use look-behind to verify that there are
+ # at least 2 spaces in a row before the ">".)
(\s+|(?<=\s\s))(>{2,})
|
(\s?>) # $5: simple end-codes
@@ -1872,23 +2142,48 @@ sub _treelet_from_formatting_codes {
) {
DEBUG > 4 and print STDERR "\nParagraphic tokenstack = (@stack)\n";
if(defined $1) {
+ my $bracket_count; # How many '<<<' in a row this has. Needed for
+ # Pod::Simple::JustPod
if(defined $2) {
DEBUG > 3 and print STDERR "Found complex start-text code \"$1\"\n";
- push @stack, length($2) + 1;
- # length of the necessary complex end-code string
+ $bracket_count = length($2) + 1;
+ push @stack, $bracket_count; # length of the necessary complex
+ # end-code string
} else {
DEBUG > 3 and print STDERR "Found simple start-text code \"$1\"\n";
push @stack, 0; # signal that we're looking for simple
+ $bracket_count = 1;
}
- push @lineage, [ substr($1,0,1), {}, ]; # new node object
- push @{ $lineage[-2] }, $lineage[-1];
- if ('L' eq substr($1,0,1)) {
- $raw = $inL ? $raw.$1 : ''; # reset raw content accumulator
- $inL = 1;
+ my $code = substr($1,0,1);
+ if ('L' eq $code) {
+ if ($inL) {
+ $raw .= $1;
+ $self->scream( $start_line,
+ 'Nested L<> are illegal. Pretending inner one is '
+ . 'X<...> so can continue looking for other errors.');
+ $code = "X";
+ }
+ else {
+ $raw = ""; # reset raw content accumulator
+ $inL = @stack;
+ }
} else {
$raw .= $1 if $inL;
}
-
+ push @lineage, [ $code, {}, ]; # new node object
+
+ # Tell Pod::Simple::JustPod how many brackets there were, but to save
+ # space, not in the most usual case of there was just 1. It can be
+ # inferred by the absence of this element. Similarly, if there is more
+ # than one bracket, extract the white space between the final bracket
+ # and the real beginning of the interior. Save that if it isn't just a
+ # single space
+ if ($self->{'_output_is_for_JustPod'} && $bracket_count > 1) {
+ $lineage[-1][1]{'~bracket_count'} = $bracket_count;
+ my $lspacer = substr($1, 1 + $bracket_count);
+ $lineage[-1][1]{'~lspacer'} = $lspacer if $lspacer ne " ";
+ }
+ push @{ $lineage[-2] }, $lineage[-1];
} elsif(defined $4) {
DEBUG > 3 and print STDERR "Found apparent complex end-text code \"$3$4\"\n";
# This is where it gets messy...
@@ -1917,20 +2212,35 @@ sub _treelet_from_formatting_codes {
}
#print STDERR "\nHOOBOY ", scalar(@{$lineage[-1]}), "!!!\n";
+ if ($3 ne " " && $self->{'_output_is_for_JustPod'}) {
+ if ($3 ne "") {
+ $lineage[-1][1]{'~rspacer'} = $3;
+ }
+ elsif ($lineage[-1][1]{'~lspacer'} eq " ") {
+
+ # Here we had something like C<< >> which was a false positive
+ delete $lineage[-1][1]{'~lspacer'};
+ }
+ else {
+ $lineage[-1][1]{'~rspacer'}
+ = substr($lineage[-1][1]{'~lspacer'}, -1, 1);
+ chop $lineage[-1][1]{'~lspacer'};
+ }
+ }
+
push @{ $lineage[-1] }, '' if 2 == @{ $lineage[-1] };
# Keep the element from being childless
-
- pop @stack;
- pop @lineage;
- unless (@stack) { # not in an L if there are no open fcodes
+ if ($inL == @stack) {
+ $lineage[-1][1]{'raw'} = $raw;
$inL = 0;
- if (ref $lineage[-1][-1] && $lineage[-1][-1][0] eq 'L') {
- $lineage[-1][-1][1]{'raw'} = $raw
- }
}
+
+ pop @stack;
+ pop @lineage;
+
$raw .= $3.$4 if $inL;
-
+
} elsif(defined $5) {
DEBUG > 3 and print STDERR "Found apparent simple end-text code \"$5\"\n";
@@ -1944,6 +2254,11 @@ sub _treelet_from_formatting_codes {
push @{ $lineage[-1] }, ''; # keep it from being really childless
}
+ if ($inL == @stack) {
+ $lineage[-1][1]{'raw'} = $raw;
+ $inL = 0;
+ }
+
pop @stack;
pop @lineage;
} else {
@@ -1951,12 +2266,6 @@ sub _treelet_from_formatting_codes {
push @{ $lineage[-1] }, $5;
}
- unless (@stack) { # not in an L if there are no open fcodes
- $inL = 0;
- if (ref $lineage[-1][-1] && $lineage[-1][-1][0] eq 'L') {
- $lineage[-1][-1][1]{'raw'} = $raw
- }
- }
$raw .= $5 if $inL;
} elsif(defined $6) {
@@ -1965,6 +2274,7 @@ sub _treelet_from_formatting_codes {
$raw .= $6 if $inL;
# XXX does not capture multiplace whitespaces -- 'raw' ends up with
# at most 1 leading/trailing whitespace, why not all of it?
+ # Answer, because we deliberately trimmed it above
} else {
# should never ever ever ever happen
@@ -2095,7 +2405,7 @@ sub pretty { # adopted from Class::Classless
# letters, but I don't know if it has always worked without bugs. It
# seemed safest just to list the characters.
# s<([^\x20\x21\x23\x27-\x3F\x41-\x5B\x5D-\x7E])>
- s<([^ !#'()*+,\-./0123456789:;\<=\>?ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\]^_`abcdefghijklmnopqrstuvwxyz{|}~])>
+ s<([^ !"#'()*+,\-./0123456789:;\<=\>?ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\]^_`abcdefghijklmnopqrstuvwxyz{|}~])>
<$pretty_form{$1} || '\\x{'.sprintf("%x", ord($1)).'}'>eg;
#<$pretty_form{$1} || '\\x'.(unpack("H2",$1))>eg;
qq{"$_"};
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Checker.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Checker.pm
index 83415f8e25e..2fef0305a5c 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Checker.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Checker.pm
@@ -9,7 +9,7 @@ use Carp ();
use Pod::Simple::Methody ();
use Pod::Simple ();
use vars qw( @ISA $VERSION );
-$VERSION = '3.35';
+$VERSION = '3.40';
@ISA = ('Pod::Simple::Methody');
BEGIN { *DEBUG = defined(&Pod::Simple::DEBUG)
? \&Pod::Simple::DEBUG
@@ -88,8 +88,10 @@ sub end_item_text { $_[0]->emit_par(-2) }
sub emit_par {
return unless $_[0]{'Errata_seen'};
my($self, $tweak_indent) = splice(@_,0,2);
- my $indent = ' ' x ( 2 * $self->{'Indent'} + ($tweak_indent||0) );
+ my $length = 2 * $self->{'Indent'} + ($tweak_indent||0);
+ my $indent = ' ' x ($length > 0 ? $length : 0);
# Yes, 'STRING' x NEGATIVE gives '', same as 'STRING' x 0
+ # 'Negative repeat count does nothing' since 5.22
$self->{'Thispara'} =~ s/$Pod::Simple::shy//g;
my $out = Text::Wrap::wrap($indent, $indent, $self->{'Thispara'} .= "\n");
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Debug.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Debug.pm
index 428cc723594..aaa5a887e6b 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Debug.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Debug.pm
@@ -2,7 +2,7 @@ require 5;
package Pod::Simple::Debug;
use strict;
use vars qw($VERSION );
-$VERSION = '3.35';
+$VERSION = '3.40';
sub import {
my($value,$variable);
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsText.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsText.pm
index 71bef5070be..bade6fcc472 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsText.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsText.pm
@@ -1,7 +1,7 @@
require 5;
package Pod::Simple::DumpAsText;
-$VERSION = '3.35';
+$VERSION = '3.40';
use Pod::Simple ();
BEGIN {@ISA = ('Pod::Simple')}
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsXML.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsXML.pm
index 9d84878cb78..6f0b7b18621 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsXML.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsXML.pm
@@ -1,7 +1,7 @@
require 5;
package Pod::Simple::DumpAsXML;
-$VERSION = '3.35';
+$VERSION = '3.40';
use Pod::Simple ();
BEGIN {@ISA = ('Pod::Simple')}
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTML.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTML.pm
index 9cdbed217e5..0219b979100 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTML.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTML.pm
@@ -9,7 +9,7 @@ use vars qw(
$Doctype_decl $Content_decl
);
@ISA = ('Pod::Simple::PullParser');
-$VERSION = '3.35';
+$VERSION = '3.40';
BEGIN {
if(defined &DEBUG) { } # no-op
elsif( defined &Pod::Simple::DEBUG ) { *DEBUG = \&Pod::Simple::DEBUG }
@@ -29,7 +29,7 @@ $LamePad = '' unless defined $LamePad;
$Linearization_Limit = 120 unless defined $Linearization_Limit;
# headings/items longer than that won't get an <a name="...">
-$Perldoc_URL_Prefix = 'http://search.cpan.org/perldoc?'
+$Perldoc_URL_Prefix = 'https://metacpan.org/pod/'
unless defined $Perldoc_URL_Prefix;
$Perldoc_URL_Postfix = ''
unless defined $Perldoc_URL_Postfix;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTMLBatch.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTMLBatch.pm
index 661266d0de4..227d6d3af0d 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTMLBatch.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTMLBatch.pm
@@ -5,7 +5,7 @@ use strict;
use vars qw( $VERSION $HTML_RENDER_CLASS $HTML_EXTENSION
$CSS $JAVASCRIPT $SLEEPY $SEARCH_CLASS @ISA
);
-$VERSION = '3.35';
+$VERSION = '3.40';
@ISA = (); # Yup, we're NOT a subclass of Pod::Simple::HTML!
# TODO: nocontents stylesheets. Strike some of the color variations?
@@ -720,22 +720,21 @@ sub _gen_css_wad {
}
# Now a few indexless variations:
- foreach my $variation (
- 'blkbluw', # black_with_blue_on_white
- 'whtpurk', # white_with_purple_on_black
- 'whtgrng', # white_with_green_on_grey
- 'grygrnw', # grey_with_green_on_white
- ) {
- my $outname = $variation;
+ for (my ($outfile, $variation) = each %{{
+ blkbluw => 'black_with_blue_on_white',
+ whtpurk => 'white_with_purple_on_black',
+ whtgrng => 'white_with_green_on_grey',
+ grygrnw => 'grey_with_green_on_white',
+ }}) {
my $this_css = join "\n",
- "/* This file is autogenerated. Do not edit. $outname */\n",
+ "/* This file is autogenerated. Do not edit. $outfile */\n",
"\@import url(\"./_$variation.css\");",
".indexgroup { display: none; }",
"\n",
;
- my $name = $outname;
+ my $name = $outfile;
$name =~ tr/-_/ /;
- $self->add_css( "_$outname.css", 0, $name, 0, 0, \$this_css);
+ $self->add_css( "_$outfile.css", 0, $name, 0, 0, \$this_css);
}
return;
@@ -1110,12 +1109,15 @@ Example:
=item $batchconv = Pod::Simple::HTMLBatch->new;
-This TODO
-
+This creates a new batch converter. The method doesn't take parameters.
+To change the converter's attributes, use the L<"/ACCESSOR METHODS">
+below.
=item $batchconv->batch_convert( I<indirs>, I<outdir> );
-this TODO
+This searches the directories given in I<indirs> and writes
+HTML files for each of these to a corresponding directory
+in I<outdir>. The directory I<outdir> must exist.
=item $batchconv->batch_convert( undef , ...);
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/LinkSection.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/LinkSection.pm
index 04612f202e9..b9ca19cdf93 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/LinkSection.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/LinkSection.pm
@@ -2,13 +2,11 @@
require 5;
package Pod::Simple::LinkSection;
# Based somewhat dimly on Array::Autojoin
-use vars qw($VERSION );
-$VERSION = '3.35';
use strict;
use Pod::Simple::BlackBox;
use vars qw($VERSION );
-$VERSION = '3.35';
+$VERSION = '3.40';
use overload( # So it'll stringify nice
'""' => \&Pod::Simple::BlackBox::stringify_lol,
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Methody.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Methody.pm
index 67b87067416..5bcee54d4f7 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Methody.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Methody.pm
@@ -4,7 +4,7 @@ package Pod::Simple::Methody;
use strict;
use Pod::Simple ();
use vars qw(@ISA $VERSION);
-$VERSION = '3.35';
+$VERSION = '3.40';
@ISA = ('Pod::Simple');
# Yes, we could use named variables, but I want this to be impose
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Progress.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Progress.pm
index 0c18a5b37d6..3d6f4031125 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Progress.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Progress.pm
@@ -1,7 +1,7 @@
require 5;
package Pod::Simple::Progress;
-$VERSION = '3.35';
+$VERSION = '3.40';
use strict;
# Objects of this class are used for noting progress of an
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParser.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParser.pm
index 7c326ec6aee..ceeb3f92504 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParser.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParser.pm
@@ -1,6 +1,6 @@
require 5;
package Pod::Simple::PullParser;
-$VERSION = '3.35';
+$VERSION = '3.40';
use Pod::Simple ();
BEGIN {@ISA = ('Pod::Simple')}
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserEndToken.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserEndToken.pm
index d3066a8e87c..d9ebdcbcf0e 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserEndToken.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserEndToken.pm
@@ -5,7 +5,7 @@ use Pod::Simple::PullParserToken ();
use strict;
use vars qw(@ISA $VERSION);
@ISA = ('Pod::Simple::PullParserToken');
-$VERSION = '3.35';
+$VERSION = '3.40';
sub new { # Class->new(tagname);
my $class = shift;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserStartToken.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserStartToken.pm
index d938e0adb21..61608fb466c 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserStartToken.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserStartToken.pm
@@ -5,7 +5,7 @@ use Pod::Simple::PullParserToken ();
use strict;
use vars qw(@ISA $VERSION);
@ISA = ('Pod::Simple::PullParserToken');
-$VERSION = '3.35';
+$VERSION = '3.40';
sub new { # Class->new(tagname, optional_attrhash);
my $class = shift;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserTextToken.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserTextToken.pm
index a11ce0fd92d..c8247a081e7 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserTextToken.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserTextToken.pm
@@ -5,7 +5,7 @@ use Pod::Simple::PullParserToken ();
use strict;
use vars qw(@ISA $VERSION);
@ISA = ('Pod::Simple::PullParserToken');
-$VERSION = '3.35';
+$VERSION = '3.40';
sub new { # Class->new(text);
my $class = shift;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserToken.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserToken.pm
index c6618168e6b..f14b5637cd4 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserToken.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserToken.pm
@@ -3,7 +3,7 @@ require 5;
package Pod::Simple::PullParserToken;
# Base class for tokens gotten from Pod::Simple::PullParser's $parser->get_token
@ISA = ();
-$VERSION = '3.35';
+$VERSION = '3.40';
use strict;
sub new { # Class->new('type', stuff...); ## Overridden in derived classes anyway
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/RTF.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/RTF.pm
index 153c3d3e287..ed0de149ae0 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/RTF.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/RTF.pm
@@ -8,24 +8,67 @@ package Pod::Simple::RTF;
use strict;
use vars qw($VERSION @ISA %Escape $WRAP %Tagmap);
-$VERSION = '3.35';
+$VERSION = '3.40';
use Pod::Simple::PullParser ();
BEGIN {@ISA = ('Pod::Simple::PullParser')}
use Carp ();
BEGIN { *DEBUG = \&Pod::Simple::DEBUG unless defined &DEBUG }
+sub to_uni ($) { # Convert native code point to Unicode
+ my $x = shift;
+
+ # Broken for early EBCDICs
+ $x = chr utf8::native_to_unicode(ord $x) if $] ge 5.007_003
+ && ord("A") != 65;
+ return $x;
+}
+
+# We escape out 'F' so that we can send RTF files thru the mail without the
+# slightest worry that paragraphs beginning with "From" will get munged.
+# We also escape '\', '{', '}', and '_'
+my $map_to_self = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEGHIJKLMNOPQRSTUVWXYZ[]^`abcdefghijklmnopqrstuvwxyz|~';
+
$WRAP = 1 unless defined $WRAP;
+%Escape = (
+
+ # Start with every character mapping to its hex equivalent
+ map( (chr($_) => sprintf("\\'%02x", $_)), 0 .. 0xFF),
+
+ # Override most ASCII printables with themselves (or on non-ASCII platforms,
+ # their ASCII values. This is because the output is UTF-16, which is always
+ # based on Unicode code points)
+ map( ( substr($map_to_self, $_, 1)
+ => to_uni(substr($map_to_self, $_, 1))), 0 .. length($map_to_self) - 1),
+
+ # And some refinements:
+ "\r" => "\n",
+ "\cj" => "\n",
+ "\n" => "\n\\line ",
+
+ "\t" => "\\tab ", # Tabs (altho theoretically raw \t's are okay)
+ "\f" => "\n\\page\n", # Formfeed
+ "-" => "\\_", # Turn plaintext '-' into a non-breaking hyphen
+ $Pod::Simple::nbsp => "\\~", # Latin-1 non-breaking space
+ $Pod::Simple::shy => "\\-", # Latin-1 soft (optional) hyphen
-# These are broken for early Perls on EBCDIC; they could be fixed to work
-# better there, but not worth it. These are part of a larger [...] class, so
-# are just the strings to substitute into it, as opposed to compiled patterns.
-my $cntrl = '[:cntrl:]';
-$cntrl = '\x00-\x1F\x7F' unless eval "qr/[$cntrl]/";
+ # CRAZY HACKS:
+ "\n" => "\\line\n",
+ "\r" => "\n",
+ "\cb" => "{\n\\cs21\\lang1024\\noproof ", # \\cf1
+ "\cc" => "}",
+);
-my $not_ascii = '[:^ascii:]';
-$not_ascii = '\x80-\xFF' unless eval "qr/[$not_ascii]/";
+# Generate a string of all the characters in %Escape that don't map to
+# themselves. First, one without the hyphen, then one with.
+my $escaped_sans_hyphen = "";
+$escaped_sans_hyphen .= $_ for grep { $_ ne $Escape{$_} && $_ ne '-' }
+ sort keys %Escape;
+my $escaped = "-$escaped_sans_hyphen";
+# Then convert to patterns
+$escaped_sans_hyphen = qr/[\Q$escaped_sans_hyphen \E]/;
+$escaped= qr/[\Q$escaped\E]/;
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -158,6 +201,13 @@ sub run {
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# Match something like an identifier. Prefer XID if available, then plain ID,
+# then just ASCII
+my $id_re = Pod::Simple::BlackBox::my_qr('[\'_\p{XIDS}][\'\p{XIDC}]+', "ab");
+$id_re = Pod::Simple::BlackBox::my_qr('[\'_\p{IDS}][\'\p{IDC}]+', "ab")
+ unless $id_re;
+$id_re = qr/['_a-zA-Z]['a-zA-Z0-9_]+/ unless $id_re;
+
sub do_middle { # the main work
my $self = $_[0];
my $fh = $self->{'output_fh'};
@@ -172,7 +222,7 @@ sub do_middle { # the main work
if( ($type = $token->type) eq 'text' ) {
if( $self->{'rtfverbatim'} ) {
DEBUG > 1 and print STDERR " $type " , $token->text, " in verbatim!\n";
- rtf_esc_codely($scratch = $token->text);
+ rtf_esc(0, $scratch = $token->text); # 0 => Don't escape hyphen
print $fh $scratch;
next;
}
@@ -195,13 +245,13 @@ sub do_middle { # the main work
|
# or starting alpha, but containing anything strange:
(?:
- [a-zA-Z'${not_ascii}]+[\$\@\:_<>\(\\\*]\S+
+ ${id_re}[\$\@\:_<>\(\\\*]\S+
)
)
/\cb$1\cc/xsg
;
- rtf_esc($scratch);
+ rtf_esc(1, $scratch); # 1 => escape hyphen
$scratch =~
s/(
[^\r\n]{65} # Snare 65 characters from a line
@@ -311,7 +361,7 @@ sub do_middle { # the main work
print $fh $token->attr('number'), ". \n";
} elsif ($tagname eq 'item-bullet') {
print $fh "\\'", ord("_"), "\n";
- #for funky testing: print $fh '', rtf_esc("\x{4E4B}\x{9053}");
+ #for funky testing: print $fh '', rtf_esc(1, "\x{4E4B}\x{9053}");
}
} elsif( $type eq 'end' ) {
@@ -465,7 +515,7 @@ sub doc_start {
# catches the most common case, at least
DEBUG and print STDERR "Title0: <$title>\n";
- $title = rtf_esc($title);
+ $title = rtf_esc(1, $title); # 1 => escape hyphen
DEBUG and print STDERR "Title1: <$title>\n";
$title = '\lang1024\noproof ' . $title
if $is_obviously_module_name;
@@ -489,90 +539,69 @@ END
#-------------------------------------------------------------------------
use integer;
-sub rtf_esc {
- my $x; # scratch
- if(!defined wantarray) { # void context: alter in-place!
- for(@_) {
- s/([F${cntrl}\-\\\{\}${not_ascii}])/$Escape{$1}/g; # ESCAPER
- s/([^\x00-\xFF])/'\\uc1\\u'.((ord($1)<32768)?ord($1):(ord($1)-65536)).'?'/eg;
- }
- return;
- } elsif(wantarray) { # return an array
- return map {; ($x = $_) =~
- s/([F${cntrl}\-\\\{\}${not_ascii}])/$Escape{$1}/g; # ESCAPER
- $x =~ s/([^\x00-\xFF])/'\\uc1\\u'.((ord($1)<32768)?ord($1):(ord($1)-65536)).'?'/eg;
- $x;
- } @_;
- } else { # return a single scalar
- ($x = ((@_ == 1) ? $_[0] : join '', @_)
- ) =~ s/([F${cntrl}\-\\\{\}${not_ascii}])/$Escape{$1}/g; # ESCAPER
- # Escape \, {, }, -, control chars, and 7f-ff.
- $x =~ s/([^\x00-\xFF])/'\\uc1\\u'.((ord($1)<32768)?ord($1):(ord($1)-65536)).'?'/eg;
+
+my $question_mark_code_points =
+ Pod::Simple::BlackBox::my_qr('([^\x00-\x{D7FF}\x{E000}-\x{10FFFF}])',
+ "\x{110000}");
+my $plane0 =
+ Pod::Simple::BlackBox::my_qr('([\x{100}-\x{FFFF}])', "\x{100}");
+my $other_unicode =
+ Pod::Simple::BlackBox::my_qr('([\x{10000}-\x{10FFFF}])', "\x{10000}");
+
+sub esc_uni($) {
+ use if $] le 5.006002, 'utf8';
+
+ my $x = shift;
+
+ # The output is expected to be UTF-16. Surrogates and above-Unicode get
+ # mapped to '?'
+ $x =~ s/$question_mark_code_points/?/g if $question_mark_code_points;
+
+ # Non-surrogate Plane 0 characters get mapped to their code points. But
+ # the standard calls for a 16bit SIGNED value.
+ $x =~ s/$plane0/'\\uc1\\u'.((ord($1)<32768)?ord($1):(ord($1)-65536)).'?'/eg
+ if $plane0;
+
+ # Use surrogate pairs for the rest
+ $x =~ s/$other_unicode/'\\uc1\\u' . ((ord($1) >> 10) + 0xD7C0 - 65536) . '\\u' . (((ord$1) & 0x03FF) + 0xDC00 - 65536) . '?'/eg if $other_unicode;
+
return $x;
- }
}
-sub rtf_esc_codely {
- # Doesn't change "-" to hard-hyphen, nor apply computerese style-smarts.
- # We don't want to change the "-" to hard-hyphen, because we want to
+sub rtf_esc ($$) {
+ # The parameter is true if we should escape hyphens
+ my $escape_re = ((shift) ? $escaped : $escaped_sans_hyphen);
+
+ # When false, it doesn't change "-" to hard-hyphen.
+ # We don't want to change the "-" to hard-hyphen, because we want to
# be able to paste this into a file and run it without there being
# dire screaming about the mysterious hard-hyphen character (which
# looks just like a normal dash character).
-
+ # XXX The comments used to claim that when false it didn't apply computerese
+ # style-smarts, but khw didn't see this actually
+
my $x; # scratch
if(!defined wantarray) { # void context: alter in-place!
for(@_) {
- s/([F${cntrl}\\\{\}${not_ascii}])/$Escape{$1}/g; # ESCAPER
- s/([^\x00-\xFF])/'\\uc1\\u'.((ord($1)<32768)?ord($1):(ord($1)-65536)).'?'/eg;
+ s/($escape_re)/$Escape{$1}/g; # ESCAPER
+ $_ = esc_uni($_);
}
return;
} elsif(wantarray) { # return an array
return map {; ($x = $_) =~
- s/([F${cntrl}\\\{\}${not_ascii}])/$Escape{$1}/g; # ESCAPER
- $x =~ s/([^\x00-\xFF])/'\\uc1\\u'.((ord($1)<32768)?ord($1):(ord($1)-65536)).'?'/eg;
+ s/($escape_re)/$Escape{$1}/g; # ESCAPER
+ $x = esc_uni($x);
$x;
} @_;
} else { # return a single scalar
($x = ((@_ == 1) ? $_[0] : join '', @_)
- ) =~ s/([F${cntrl}\\\{\}${not_ascii}])/$Escape{$1}/g; # ESCAPER
+ ) =~ s/($escape_re)/$Escape{$1}/g; # ESCAPER
# Escape \, {, }, -, control chars, and 7f-ff.
- $x =~ s/([^\x00-\xFF])/'\\uc1\\u'.((ord($1)<32768)?ord($1):(ord($1)-65536)).'?'/eg;
+ $x = esc_uni($x);
return $x;
}
}
-%Escape = (
- (($] lt 5.007_003) # Broken for non-ASCII on early Perls
- ? (map( (chr($_),chr($_)), # things not apparently needing escaping
- 0x20 .. 0x7E ),
- map( (chr($_),sprintf("\\'%02x", $_)), # apparently escapeworthy things
- 0x00 .. 0x1F, 0x5c, 0x7b, 0x7d, 0x7f .. 0xFF, 0x46))
- : (map( (chr(utf8::unicode_to_native($_)),chr(utf8::unicode_to_native($_))),
- 0x20 .. 0x7E ),
- map( (chr($_),sprintf("\\'%02x", utf8::unicode_to_native($_))),
- 0x00 .. 0x1F, 0x5c, 0x7b, 0x7d, 0x7f .. 0xFF, 0x46))),
-
- # We get to escape out 'F' so that we can send RTF files thru the mail
- # without the slightest worry that paragraphs beginning with "From"
- # will get munged.
-
- # And some refinements:
- "\r" => "\n",
- "\cj" => "\n",
- "\n" => "\n\\line ",
-
- "\t" => "\\tab ", # Tabs (altho theoretically raw \t's are okay)
- "\f" => "\n\\page\n", # Formfeed
- "-" => "\\_", # Turn plaintext '-' into a non-breaking hyphen
- $Pod::Simple::nbsp => "\\~", # Latin-1 non-breaking space
- $Pod::Simple::shy => "\\-", # Latin-1 soft (optional) hyphen
-
- # CRAZY HACKS:
- "\n" => "\\line\n",
- "\r" => "\n",
- "\cb" => "{\n\\cs21\\lang1024\\noproof ", # \\cf1
- "\cc" => "}",
-);
1;
__END__
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Search.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Search.pm
index df499cacf2d..a07d33b85ac 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Search.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Search.pm
@@ -3,7 +3,7 @@ package Pod::Simple::Search;
use strict;
use vars qw($VERSION $MAX_VERSION_WITHIN $SLEEPY);
-$VERSION = '3.35'; ## Current version of this package
+$VERSION = '3.40'; ## Current version of this package
BEGIN { *DEBUG = sub () {0} unless defined &DEBUG; } # set DEBUG level
use Carp ();
@@ -12,7 +12,6 @@ $SLEEPY = 1 if !defined $SLEEPY and $^O =~ /mswin|mac/i;
# flag to occasionally sleep for $SLEEPY - 1 seconds.
$MAX_VERSION_WITHIN ||= 60;
-my $IS_CASE_INSENSITIVE = -e uc __FILE__ && -e lc __FILE__;
#############################################################################
@@ -26,7 +25,7 @@ use Cwd qw( cwd );
__PACKAGE__->_accessorize( # Make my dumb accessor methods
'callback', 'progress', 'dir_prefix', 'inc', 'laborious', 'limit_glob',
'limit_re', 'shadows', 'verbose', 'name2path', 'path2name', 'recurse',
- 'ciseen'
+ 'ciseen', 'is_case_insensitive'
);
#==========================================================================
@@ -42,6 +41,7 @@ sub init {
$self->inc(1);
$self->recurse(1);
$self->verbose(DEBUG);
+ $self->is_case_insensitive(-e uc __FILE__ && -e lc __FILE__);
return $self;
}
@@ -130,12 +130,12 @@ sub _make_search_callback {
# Put the options in variables, for easy access
my( $laborious, $verbose, $shadows, $limit_re, $callback, $progress,
- $path2name, $name2path, $recurse, $ciseen) =
+ $path2name, $name2path, $recurse, $ciseen, $is_case_insensitive) =
map scalar($self->$_()),
qw(laborious verbose shadows limit_re callback progress
- path2name name2path recurse ciseen);
+ path2name name2path recurse ciseen is_case_insensitive);
my ($seen, $remember, $files_for);
- if ($IS_CASE_INSENSITIVE) {
+ if ($is_case_insensitive) {
$seen = sub { $ciseen->{ lc $_[0] } };
$remember = sub { $name2path->{ $_[0] } = $ciseen->{ lc $_[0] } = $_[1]; };
$files_for = sub { my $n = lc $_[0]; grep { lc $path2name->{$_} eq $n } %{ $path2name } };
@@ -259,7 +259,7 @@ sub _path2modname {
while(@m
and defined($x = lc( $m[0] ))
and( $x eq 'site_perl'
- or($x eq 'pod' and @m == 1 and $shortname =~ m{^perl.*\.pod$}s )
+ or($x =~ m/^pods?$/ and @m == 1 and $shortname =~ m{^perl.*\.pod$}s )
or $x =~ m{\\d+\\.z\\d+([_.]?\\d+)?} # if looks like a vernum
or $x eq lc( $Config::Config{'archname'} )
)) { shift @m }
@@ -546,7 +546,7 @@ sub _limit_glob_to_limit_re {
sub _actual_filenames {
my $dir = shift;
my $fn = lc shift;
- opendir my $dh, $dir or return;
+ opendir my ($dh), $dir or return;
return map { File::Spec->catdir($dir, $_) }
grep { lc $_ eq $fn } readdir $dh;
}
@@ -588,7 +588,7 @@ sub find {
my $fullext = $fullname . $ext;
if ( -f $fullext and $self->contains_pod($fullext) ) {
print "FOUND: $fullext\n" if $verbose;
- if (@parts > 1 && lc $parts[0] eq 'pod' && $IS_CASE_INSENSITIVE && $ext eq '.pod') {
+ if (@parts > 1 && lc $parts[0] eq 'pod' && $self->is_case_insensitive() && $ext eq '.pod') {
# Well, this file could be for a program (perldoc) but we actually
# want a module (Pod::Perldoc). So see if there is a .pm with the
# proper casing.
@@ -611,7 +611,7 @@ sub find {
}
# Case-insensitively Look for ./pod directories and slip them in.
- for my $subdir ( _actual_filenames($dir, 'pod') ) {
+ for my $subdir ( _actual_filenames($dir, 'pods'), _actual_filenames($dir, 'pod') ) {
if (-d $subdir) {
$verbose and print "Noticing $subdir and looking there...\n";
unshift @search_dirs, $subdir;
@@ -849,6 +849,20 @@ inspected too, and are noted in the pathname2podname return hash.
This attribute's default value is false; and normally you won't
need to turn it on.
+=item $search->is_case_insensitive( I<true-or-false> );
+
+Pod::Simple::Search will by default internally make an assumption
+based on the underlying filesystem where the class file is found
+whether it is case insensitive or not.
+
+If it is determined to be case insensitive, during survey() it may
+skip pod files/modules that happen to be equal to names it's already
+seen, ignoring case.
+
+However, it's possible to have distinct files in different directories
+that intentionally has the same name, just differing in case, that should
+be reported. Hence, you may force the behavior by setting this to true
+or false.
=item $search->limit_re( I<some-regxp> );
@@ -857,7 +871,6 @@ to limit the results just to items whose podnames match the given
regexp. Normally this option is not needed, and the more efficient
C<limit_glob> attribute is used instead.
-
=item $search->dir_prefix( I<some-string-value> );
Setting this attribute to a string value means that the searches should
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/SimpleTree.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/SimpleTree.pm
index bff5af84c4b..85dbabcd70e 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/SimpleTree.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/SimpleTree.pm
@@ -5,7 +5,7 @@ use strict;
use Carp ();
use Pod::Simple ();
use vars qw( $ATTR_PAD @ISA $VERSION $SORT_ATTRS);
-$VERSION = '3.35';
+$VERSION = '3.40';
BEGIN {
@ISA = ('Pod::Simple');
*DEBUG = \&Pod::Simple::DEBUG unless defined &DEBUG;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Subclassing.pod b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Subclassing.pod
index 88f85e86de2..f9cb09a52ef 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Subclassing.pod
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Subclassing.pod
@@ -98,9 +98,14 @@ nodes that represent preformatted text (from verbatim sections).
TODO intro... mention that events are supplied for implicits, like for
missing >'s
-
In the following section, we use XML to represent the event structure
-associated with a particular construct. That is, TODO
+associated with a particular construct. That is, an opening tag
+represents the element start, the attributes of that opening tag are
+the attributes given to the callback, and the closing tag represents
+the end element.
+
+Three callback methods must be supplied by a class extending
+L<Pod::Simple> to receive the corresponding event:
=over
@@ -112,8 +117,9 @@ associated with a particular construct. That is, TODO
=back
-TODO describe
-
+Here's the comprehensive list of values you can expect as
+I<element_name> in your implementation of C<_handle_element_start>
+and C<_handle_element_end>::
=over
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Text.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Text.pm
index 66e15f48cce..de50b510eae 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Text.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Text.pm
@@ -6,7 +6,7 @@ use Carp ();
use Pod::Simple::Methody ();
use Pod::Simple ();
use vars qw( @ISA $VERSION $FREAKYMODE);
-$VERSION = '3.35';
+$VERSION = '3.40';
@ISA = ('Pod::Simple::Methody');
BEGIN { *DEBUG = defined(&Pod::Simple::DEBUG)
? \&Pod::Simple::DEBUG
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TextContent.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TextContent.pm
index 980612b3132..ad4172b7a31 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TextContent.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TextContent.pm
@@ -6,7 +6,7 @@ use strict;
use Carp ();
use Pod::Simple ();
use vars qw( @ISA $VERSION );
-$VERSION = '3.35';
+$VERSION = '3.40';
@ISA = ('Pod::Simple');
sub new {
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TiedOutFH.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TiedOutFH.pm
index a7364dfa585..0dd12c412dd 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TiedOutFH.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TiedOutFH.pm
@@ -4,7 +4,7 @@ package Pod::Simple::TiedOutFH;
use Symbol ('gensym');
use Carp ();
use vars qw($VERSION );
-$VERSION = '3.35';
+$VERSION = '3.40';
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Transcode.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Transcode.pm
index a4bb29ffdb6..eb127022827 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Transcode.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Transcode.pm
@@ -3,7 +3,7 @@ require 5;
package Pod::Simple::Transcode;
use strict;
use vars qw($VERSION @ISA);
-$VERSION = '3.35';
+$VERSION = '3.40';
BEGIN {
if(defined &DEBUG) {;} # Okay
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeDumb.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeDumb.pm
index c2069056574..2b675ccb787 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeDumb.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeDumb.pm
@@ -5,7 +5,7 @@ require 5;
package Pod::Simple::TranscodeDumb;
use strict;
use vars qw($VERSION %Supported);
-$VERSION = '3.35';
+$VERSION = '3.40';
# This module basically pretends it knows how to transcode, except
# only for null-transcodings! We use this when Encode isn't
# available.
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeSmart.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeSmart.pm
index e4d4f7eb60e..99f55683ab3 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeSmart.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeSmart.pm
@@ -9,7 +9,7 @@ use strict;
use Pod::Simple;
require Encode;
use vars qw($VERSION );
-$VERSION = '3.35';
+$VERSION = '3.40';
sub is_dumb {0}
sub is_smart {1}
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XHTML.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XHTML.pm
index 8c2cf1a01ba..b9c6269bf98 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XHTML.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XHTML.pm
@@ -45,7 +45,7 @@ declare the output character set as UTF-8 before parsing, like so:
package Pod::Simple::XHTML;
use strict;
use vars qw( $VERSION @ISA $HAS_HTML_ENTITIES );
-$VERSION = '3.35';
+$VERSION = '3.40';
use Pod::Simple::Methody ();
@ISA = ('Pod::Simple::Methody');
@@ -92,7 +92,7 @@ the call to C<parse_file>:
In turning L<Foo::Bar> into http://whatever/Foo%3a%3aBar, what
to put before the "Foo%3a%3aBar". The default value is
-"http://search.cpan.org/perldoc?".
+"https://metacpan.org/pod/".
=head2 perldoc_url_postfix
@@ -247,7 +247,7 @@ sub new {
my $self = shift;
my $new = $self->SUPER::new(@_);
$new->{'output_fh'} ||= *STDOUT{IO};
- $new->perldoc_url_prefix('http://search.cpan.org/perldoc?');
+ $new->perldoc_url_prefix('https://metacpan.org/pod/');
$new->man_url_prefix('http://man.he.net/man');
$new->html_charset('ISO-8859-1');
$new->nix_X_codes(1);
@@ -685,8 +685,8 @@ sub emit {
Resolves a POD link target (typically a module or POD file name) and section
name to a URL. The resulting link will be returned for the above examples as:
- http://search.cpan.org/perldoc?Net::Ping#INSTALL
- http://search.cpan.org/perldoc?perlpodspec
+ https://metacpan.org/pod/Net::Ping#INSTALL
+ https://metacpan.org/pod/perlpodspec
#SYNOPSIS
Note that when there is only a section argument the URL will simply be a link
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XMLOutStream.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XMLOutStream.pm
index 62fe39549da..cb818a17409 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XMLOutStream.pm
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XMLOutStream.pm
@@ -5,7 +5,7 @@ use strict;
use Carp ();
use Pod::Simple ();
use vars qw( $ATTR_PAD @ISA $VERSION $SORT_ATTRS);
-$VERSION = '3.35';
+$VERSION = '3.40';
BEGIN {
@ISA = ('Pod::Simple');
*DEBUG = \&Pod::Simple::DEBUG unless defined &DEBUG;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/encod04.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/encod04.t
index 88727cca521..8f41f98a6cc 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/encod04.t
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/encod04.t
@@ -12,14 +12,14 @@ BEGIN {
use strict;
use Test;
BEGIN {
- if ($] lt 5.007_003) {
- plan tests => 5, todo => [4, 5]; # Need utf8::decode() to pass #5
- # and isn't available in this
- # release
- }
- else {
- plan tests => 5, todo => [4];
- }
+ plan tests => 6, todo => [];
+}
+
+# fail with the supplied diagnostic
+
+sub my_nok {
+ my ($diag) = @_;
+ ok (1, 0, $diag);
}
ok 1;
@@ -61,16 +61,13 @@ if( $guess ) {
if( grep m{Dash $dash}, @output_lines ) {
ok 1;
} else {
- ok 0;
- print STDERR "# failed to find expected control character in output\n"
+ my_nok "failed to find expected control character in output";
}
} else {
- ok 0;
- print STDERR "# parser guessed wrong encoding expected 'CP1252' got '$guess'\n";
+ my_nok "parser guessed wrong encoding expected 'CP1252' got '$guess'";
}
} else {
- ok 0;
- print STDERR "# parser failed to detect non-ASCII bytes in input\n";
+ my_nok "parser failed to detect non-ASCII bytes in input";
}
@@ -95,18 +92,18 @@ else {
if( $guess eq 'CP1252' ) {
ok 1;
} else {
- ok 0;
- print STDERR "# parser guessed wrong encoding expected 'CP1252' got '$guess'\n";
+ my_nok "parser guessed wrong encoding expected 'CP1252' got '$guess'";
}
} else {
- ok 0;
- print STDERR "# parser failed to detect non-ASCII bytes in input\n";
+ my_nok "parser failed to detect non-ASCII bytes in input";
}
}
-# Initial accented character followed by 'smart' apostrophe causes heuristic
-# to choose UTF8 (a somewhat contrived example)
+# Initial accented character (E acute) followed by 'smart' apostrophe is legal
+# CP1252, which should be preferred over UTF-8 because the latter
+# interpretation would be "JOS" . \N{LATIN SMALL LETTER TURNED ALPHA} . "S
+# PLACE", and that \N{} letter is an IPA one.
@output_lines = split m/[\r\n]+/, Pod::Simple::XMLOutStream->_out( qq{
@@ -127,12 +124,10 @@ else {
if( $guess eq 'CP1252' ) {
ok 1;
} else {
- ok 0;
- print STDERR "# parser guessed wrong encoding expected 'CP1252' got '$guess'\n";
+ my_nok "parser guessed wrong encoding expected 'CP1252' got '$guess'";
}
} else {
- ok 0;
- print STDERR "# parser failed to detect non-ASCII bytes in input\n";
+ my_nok "parser failed to detect non-ASCII bytes in input";
}
}
@@ -160,12 +155,40 @@ else {
if( $guess eq 'CP1252' ) {
ok 1;
} else {
- ok 0;
- print STDERR "# parser guessed wrong encoding expected 'CP1252' got '$guess'\n";
+ my_nok "parser guessed wrong encoding expected 'CP1252' got '$guess'";
+ }
+ } else {
+ my_nok "parser failed to detect non-ASCII bytes in input";
+ }
+}
+
+# The following is a real word example of something in CP1252 expressible in
+# UTF-8, but doesn't make sense in UTF-8, contributed by Bo Lindbergh.
+# Muvrarášša is a Sami word
+
+@output_lines = split m/[\r\n]+/, Pod::Simple::XMLOutStream->_out( qq{
+
+=head1 NAME
+
+Muvrar\xE1\x9A\x9Aa is a mountain in Norway
+
+=cut
+
+} );
+
+if (ord("A") != 65) { # ASCII-platform dependent test skipped on this platform
+ ok (1);
+}
+else {
+ ($guess) = "@output_lines" =~ m{Non-ASCII.*?Assuming ([\w-]+)};
+ if( $guess ) {
+ if( $guess eq 'CP1252' ) {
+ ok 1;
+ } else {
+ my_nok "parser guessed wrong encoding expected 'CP1252' got '$guess'";
}
} else {
- ok 0;
- print STDERR "# parser failed to detect non-ASCII bytes in input\n";
+ my_nok "parser failed to detect non-ASCII bytes in input";
}
}
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/html01.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/html01.t
index b4caa39dc66..8d8e528320d 100755
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/html01.t
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/html01.t
@@ -9,7 +9,7 @@ BEGIN {
use strict;
use Test;
-BEGIN { plan tests => 13 };
+BEGIN { plan tests => 14 };
#use Pod::Simple::Debug (10);
@@ -137,6 +137,16 @@ ok(
"\n<dl>\n<dt><a name=\"howdy\"\n>Foo</a></dt>\n</dl>\n",
);
+{ # Test that strip_verbatim_indent() works. github issue #i5
+ my $output;
+
+ my $obj = Pod::Simple::HTML->new;
+ $obj->strip_verbatim_indent(" ");
+ $obj->output_string(\$output);
+ $obj->parse_string_document("=pod\n\n First line\n 2nd line\n");
+ ok($output, qr!<pre>First line\n2nd line</pre>!s);
+}
+
print "# And one for the road...\n";
ok 1;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search20.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search20.t
index cbc3ac3fcf5..1b17c3b021a 100755
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search20.t
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search20.t
@@ -78,16 +78,16 @@ require $ascii_order;
{
my $names = join "|", sort ascii_order values %$where2name;
-skip $^O eq 'VMS' ? '-- case may or may not be preserved' : 0,
- $names,
- "Blorm|Suzzle|Zonk::Pronk|hinkhonk::Glunk|hinkhonk::Vliff|perlflif|perlthng|perlzuk|squaa|squaa::Glunk|squaa::Vliff|squaa::Wowo|zikzik";
+skip $^O eq 'VMS' ? '-- case may or may not be preserved' : 0,
+ $names,
+ "Blorm|Suzzle|Zonk::Pronk|hinkhonk::Glunk|hinkhonk::Vliff|perlflif|perlthng|perlzoned|perlzuk|squaa|squaa::Glunk|squaa::Vliff|squaa::Wowo|zikzik";
}
{
my $names = join "|", sort ascii_order keys %$name2where;
-skip $^O eq 'VMS' ? '-- case may or may not be preserved' : 0,
- $names,
- "Blorm|Suzzle|Zonk::Pronk|hinkhonk::Glunk|hinkhonk::Vliff|perlflif|perlthng|perlzuk|squaa|squaa::Glunk|squaa::Vliff|squaa::Wowo|zikzik";
+skip $^O eq 'VMS' ? '-- case may or may not be preserved' : 0,
+ $names,
+ "Blorm|Suzzle|Zonk::Pronk|hinkhonk::Glunk|hinkhonk::Vliff|perlflif|perlthng|perlzoned|perlzuk|squaa|squaa::Glunk|squaa::Vliff|squaa::Wowo|zikzik";
}
ok( ($name2where->{'squaa'} || 'huh???'), '/squaa\.pm$/');
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search22.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search22.t
index c6b33eea753..6fb498a3318 100755
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search22.t
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search22.t
@@ -8,7 +8,7 @@ BEGIN {
use strict;
use Pod::Simple::Search;
use Test;
-BEGIN { plan tests => 13 }
+BEGIN { plan tests => 15 }
print "# ", __FILE__,
": Testing the scanning of several docroots...\n";
@@ -80,17 +80,17 @@ require $ascii_order;
{
print "# won't show any shadows, since we're just looking at the name2where keys\n";
my $names = join "|", sort ascii_order keys %$name2where;
-skip $^O eq 'VMS' ? '-- case may or may not be preserved' : 0,
- $names,
- "Blorm|Suzzle|Zonk::Pronk|hinkhonk::Glunk|hinkhonk::Vliff|perlflif|perlthng|perlzuk|squaa|squaa::Glunk|squaa::Vliff|squaa::Wowo|zikzik";
+skip $^O eq 'VMS' ? '-- case may or may not be preserved' : 0,
+ $names,
+ "Blorm|Suzzle|Zonk::Pronk|hinkhonk::Glunk|hinkhonk::Vliff|perlflif|perlthng|perlzoned|perlzuk|squaa|squaa::Glunk|squaa::Vliff|squaa::Wowo|zikzik";
}
{
print "# but here we'll see shadowing:\n";
my $names = join "|", sort ascii_order values %$where2name;
-skip $^O eq 'VMS' ? '-- case may or may not be preserved' : 0,
- $names,
- "Blorm|Suzzle|Zonk::Pronk|hinkhonk::Glunk|hinkhonk::Glunk|hinkhonk::Vliff|hinkhonk::Vliff|perlflif|perlthng|perlthng|perlzuk|squaa|squaa::Glunk|squaa::Vliff|squaa::Vliff|squaa::Vliff|squaa::Wowo|zikzik";
+skip $^O eq 'VMS' ? '-- case may or may not be preserved' : 0,
+ $names,
+ "Blorm|Suzzle|Zonk::Pronk|hinkhonk::Glunk|hinkhonk::Glunk|hinkhonk::Vliff|hinkhonk::Vliff|perlflif|perlthng|perlthng|perlzoned|perlzuk|squaa|squaa::Glunk|squaa::Vliff|squaa::Vliff|squaa::Vliff|squaa::Wowo|zikzik";
my %count;
for(values %$where2name) { ++$count{$_} };
@@ -120,7 +120,9 @@ skip $^O eq 'VMS' ? '-- case may or may not be preserved' : 0,
($name2where->{'squaa::Wowo'} || 'huh???'),
'/testlib2/';
-
+my $in_pods = $x->find('perlzoned', $here2);
+ok $in_pods, qr{^\Q$here2\E};
+ok $in_pods, qr{perlzoned.pod$};
print "# OK, bye from ", __FILE__, "\n";
ok 1;
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search50.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search50.t
index 126f24a7b1e..0dc9d75a296 100755
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search50.t
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search50.t
@@ -23,6 +23,7 @@ ok $x->inc; # make sure inc=1 is the default
use Pod::Simple;
*pretty = \&Pod::Simple::BlackBox::pretty;
+*pretty = \&Pod::Simple::BlackBox::pretty; # avoid 'once' warning
my $found = 0;
$x->callback(sub {
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/whine.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/whine.t
index b33f0a91efa..4ac76e5bd3d 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/whine.t
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/whine.t
@@ -1,6 +1,6 @@
use strict;
use warnings;
-use Test::More tests => 4;
+use Test::More tests => 6;
{
package Pod::Simple::ErrorFinder;
@@ -51,3 +51,23 @@ sub errors { Pod::Simple::ErrorFinder->errors_for_input(@_) }
"warning for / in text part of L<>",
);
}
+
+{
+ my $input = "=pod\n\nnested LE<lt>E<sol>E<gt>: L<Nested L<http://foobar>|http://baz>\n";
+ my $errors = errors("$input");
+ is_deeply(
+ $errors,
+ { 3 => [ "Nested L<> are illegal. Pretending inner one is X<...> so can continue looking for other errors." ] },
+ "warning for nested L<>",
+ );
+}
+
+{
+ my $input = "=pod\n\nLE<lt>E<sol>E<gt> containing only slash: L< / >\n";
+ my $errors = errors("$input");
+ is_deeply(
+ $errors,
+ { 3 => [ "L<> contains only '/'" ] },
+ "warning for L< / > containing only a slash",
+ );
+}
diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/xhtml01.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/xhtml01.t
index 01e6f189b42..7ee08652162 100755
--- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/xhtml01.t
+++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/xhtml01.t
@@ -18,7 +18,7 @@ isa_ok ($parser, 'Pod::Simple::XHTML');
my $results;
-my $PERLDOC = "http://search.cpan.org/perldoc";
+my $PERLDOC = "https://metacpan.org/pod";
my $MANURL = "http://man.he.net/man";
initialize($parser, $results);
@@ -541,7 +541,7 @@ $parser->parse_string_document(<<'EOPOD');
A plain paragraph with a L<Newlines>.
EOPOD
is($results, <<"EOHTML", "Link entity in a paragraph");
-<p>A plain paragraph with a <a href="$PERLDOC?Newlines">Newlines</a>.</p>
+<p>A plain paragraph with a <a href="$PERLDOC/Newlines">Newlines</a>.</p>
EOHTML
@@ -552,7 +552,7 @@ $parser->parse_string_document(<<'EOPOD');
A plain paragraph with a L<perlport/Newlines>.
EOPOD
is($results, <<"EOHTML", "Link entity in a paragraph");
-<p>A plain paragraph with a <a href="$PERLDOC?perlport#Newlines">&quot;Newlines&quot; in perlport</a>.</p>
+<p>A plain paragraph with a <a href="$PERLDOC/perlport#Newlines">&quot;Newlines&quot; in perlport</a>.</p>
EOHTML
@@ -742,16 +742,16 @@ like $results, qr{\Q<meta http-equiv="Content-Type" content="text/html; charset=
# Test the link generation methods.
is $parser->resolve_pod_page_link('Net::Ping', 'INSTALL'),
- "$PERLDOC?Net::Ping#INSTALL",
+ "$PERLDOC/Net::Ping#INSTALL",
'POD link with fragment';
is $parser->resolve_pod_page_link('perlpodspec'),
- "$PERLDOC?perlpodspec", 'Simple POD link';
+ "$PERLDOC/perlpodspec", 'Simple POD link';
is $parser->resolve_pod_page_link(undef, 'SYNOPSIS'), '#SYNOPSIS',
'Simple fragment link';
is $parser->resolve_pod_page_link(undef, 'this that'), '#this-that',
'Fragment link with space';
is $parser->resolve_pod_page_link('perlpod', 'this that'),
- "$PERLDOC?perlpod#this-that",
+ "$PERLDOC/perlpod#this-that",
'POD link with fragment with space';
is $parser->resolve_man_page_link('crontab(5)', 'EXAMPLE CRON FILE'),
diff --git a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/testp2pt.pl b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/testp2pt.pl
index cd312453273..720575336c0 100644
--- a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/testp2pt.pl
+++ b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/testp2pt.pl
@@ -11,7 +11,7 @@ BEGIN {
unshift @INC, $THISDIR;
require "testcmp.pl";
import TestCompare;
- $PARENTDIR = dirname $THISDIR;
+ $PARENTDIR = File::Spec->catdir($THISDIR, File::Spec->updir());
push @INC, map { File::Spec->catfile($_, 'lib') } ($PARENTDIR, $THISDIR);
}
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/ListUtil.xs b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/ListUtil.xs
index 12f98cde192..5bccc88444d 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/ListUtil.xs
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/ListUtil.xs
@@ -2,6 +2,7 @@
* This program is free software; you can redistribute it and/or
* modify it under the same terms as Perl itself.
*/
+
#define PERL_NO_GET_CONTEXT /* we want efficiency */
#include <EXTERN.h>
#include <perl.h>
@@ -14,20 +15,35 @@
# include "ppport.h"
#endif
+/* For uniqnum, define ACTUAL_NVSIZE to be the number *
+ * of bytes that are actually used to store the NV */
+
+#if defined(USE_LONG_DOUBLE) && LDBL_MANT_DIG == 64
+# define ACTUAL_NVSIZE 10
+#else
+# define ACTUAL_NVSIZE NVSIZE
+#endif
+
+/* Detect "DoubleDouble" nvtype */
+
+#if defined(USE_LONG_DOUBLE) && LDBL_MANT_DIG == 106
+# define NV_IS_DOUBLEDOUBLE
+#endif
+
#ifndef PERL_VERSION_DECIMAL
# define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s)
#endif
#ifndef PERL_DECIMAL_VERSION
# define PERL_DECIMAL_VERSION \
- PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
+ PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
#endif
#ifndef PERL_VERSION_GE
# define PERL_VERSION_GE(r,v,s) \
- (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
+ (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
#endif
#ifndef PERL_VERSION_LE
# define PERL_VERSION_LE(r,v,s) \
- (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
+ (PERL_DECIMAL_VERSION <= PERL_VERSION_DECIMAL(r,v,s))
#endif
#if PERL_VERSION_GE(5,6,0)
@@ -72,6 +88,12 @@
#define sv_catpvn_flags(b,n,l,f) sv_catpvn(b,n,l)
#endif
+#if !PERL_VERSION_GE(5,8,0)
+static NV Perl_ceil(NV nv) {
+ return -Perl_floor(-nv);
+}
+#endif
+
/* Some platforms have strict exports. And before 5.7.3 cxinc (or Perl_cxinc)
was not exported. Therefore platforms like win32, VMS etc have problems
so we redefine it here -- GMB
@@ -124,6 +146,38 @@ my_sv_copypv(pTHX_ SV *const dsv, SV *const ssv)
# define SvNV_nomg SvNV
#endif
+#if PERL_VERSION_GE(5,16,0)
+# define HAVE_UNICODE_PACKAGE_NAMES
+
+# ifndef sv_sethek
+# define sv_sethek(a, b) Perl_sv_sethek(aTHX_ a, b)
+# endif
+
+# ifndef sv_ref
+# define sv_ref(dst, sv, ob) my_sv_ref(aTHX_ dst, sv, ob)
+static SV *
+my_sv_ref(pTHX_ SV *dst, const SV *sv, int ob)
+{
+ /* cargoculted from perl 5.22's sv.c */
+ if(!dst)
+ dst = sv_newmortal();
+
+ if(ob && SvOBJECT(sv)) {
+ if(HvNAME_get(SvSTASH(sv)))
+ sv_sethek(dst, HvNAME_HEK(SvSTASH(sv)));
+ else
+ sv_setpvs(dst, "__ANON__");
+ }
+ else {
+ const char *reftype = sv_reftype(sv, 0);
+ sv_setpv(dst, reftype);
+ }
+
+ return dst;
+}
+# endif
+#endif /* HAVE_UNICODE_PACKAGE_NAMES */
+
enum slu_accum {
ACC_IV,
ACC_NV,
@@ -143,6 +197,53 @@ static enum slu_accum accum_type(SV *sv) {
/* Magic for set_subname */
static MGVTBL subname_vtbl;
+static void MY_initrand(pTHX)
+{
+#if (PERL_VERSION < 9)
+ struct op dmy_op;
+ struct op *old_op = PL_op;
+
+ /* We call pp_rand here so that Drand01 get initialized if rand()
+ or srand() has not already been called
+ */
+ memzero((char*)(&dmy_op), sizeof(struct op));
+ /* we let pp_rand() borrow the TARG allocated for this XS sub */
+ dmy_op.op_targ = PL_op->op_targ;
+ PL_op = &dmy_op;
+ (void)*(PL_ppaddr[OP_RAND])(aTHX);
+ PL_op = old_op;
+#else
+ /* Initialize Drand01 if rand() or srand() has
+ not already been called
+ */
+ if(!PL_srand_called) {
+ (void)seedDrand01((Rand_seed_t)Perl_seed(aTHX));
+ PL_srand_called = TRUE;
+ }
+#endif
+}
+
+static double MY_callrand(pTHX_ CV *randcv)
+{
+ dSP;
+ double ret, dummy;
+
+ ENTER;
+ PUSHMARK(SP);
+ PUTBACK;
+
+ call_sv((SV *)randcv, G_SCALAR);
+
+ SPAGAIN;
+
+ ret = modf(POPn, &dummy); /* bound to < 1 */
+ if(ret < 0) ret += 1.0; /* bound to 0 <= ret < 1 */
+
+ LEAVE;
+
+ return ret;
+}
+
MODULE=List::Util PACKAGE=List::Util
void
@@ -344,9 +445,9 @@ CODE:
/* else fallthrough */
}
- /* fallthrough to NV now */
retnv = retiv;
accum = ACC_NV;
+ /* FALLTHROUGH */
case ACC_NV:
is_product ? (retnv *= slu_sv_value(sv))
: (retnv += slu_sv_value(sv));
@@ -419,10 +520,14 @@ void
reduce(block,...)
SV *block
PROTOTYPE: &@
+ALIAS:
+ reduce = 0
+ reductions = 1
CODE:
{
SV *ret = sv_newmortal();
int index;
+ AV *retvals;
GV *agv,*bgv,*gv;
HV *stash;
SV **args = &PL_stack_base[ax];
@@ -431,8 +536,12 @@ CODE:
if(cv == Nullcv)
croak("Not a subroutine reference");
- if(items <= 1)
- XSRETURN_UNDEF;
+ if(items <= 1) {
+ if(ix)
+ XSRETURN(0);
+ else
+ XSRETURN_UNDEF;
+ }
agv = gv_fetchpv("a", GV_ADD, SVt_PV);
bgv = gv_fetchpv("b", GV_ADD, SVt_PV);
@@ -440,6 +549,17 @@ CODE:
SAVESPTR(GvSV(bgv));
GvSV(agv) = ret;
SvSetMagicSV(ret, args[1]);
+
+ if(ix) {
+ /* Precreate an AV for return values; -1 for cv, -1 for top index */
+ retvals = newAV();
+ av_extend(retvals, items-1-1);
+
+ /* so if throw an exception they can be reclaimed */
+ SAVEFREESV(retvals);
+
+ av_push(retvals, newSVsv(ret));
+ }
#ifdef dMULTICALL
assert(cv);
if(!CvISXSUB(cv)) {
@@ -452,6 +572,8 @@ CODE:
GvSV(bgv) = args[index];
MULTICALL;
SvSetMagicSV(ret, *PL_stack_sp);
+ if(ix)
+ av_push(retvals, newSVsv(ret));
}
# ifdef PERL_HAS_BAD_MULTICALL_REFCOUNT
if(CvDEPTH(multicall_cv) > 1)
@@ -470,11 +592,26 @@ CODE:
call_sv((SV*)cv, G_SCALAR);
SvSetMagicSV(ret, *PL_stack_sp);
+ if(ix)
+ av_push(retvals, newSVsv(ret));
}
}
- ST(0) = ret;
- XSRETURN(1);
+ if(ix) {
+ int i;
+ SV **svs = AvARRAY(retvals);
+ /* steal the SVs from retvals */
+ for(i = 0; i < items-1; i++) {
+ ST(i) = sv_2mortal(svs[i]);
+ svs[i] = NULL;
+ }
+
+ XSRETURN(items-1);
+ }
+ else {
+ ST(0) = ret;
+ XSRETURN(1);
+ }
}
void
@@ -1105,31 +1242,17 @@ PROTOTYPE: @
CODE:
{
int index;
-#if (PERL_VERSION < 9)
- struct op dmy_op;
- struct op *old_op = PL_op;
+ SV *randsv = get_sv("List::Util::RAND", 0);
+ CV * const randcv = randsv && SvROK(randsv) && SvTYPE(SvRV(randsv)) == SVt_PVCV ?
+ (CV *)SvRV(randsv) : NULL;
- /* We call pp_rand here so that Drand01 get initialized if rand()
- or srand() has not already been called
- */
- memzero((char*)(&dmy_op), sizeof(struct op));
- /* we let pp_rand() borrow the TARG allocated for this XS sub */
- dmy_op.op_targ = PL_op->op_targ;
- PL_op = &dmy_op;
- (void)*(PL_ppaddr[OP_RAND])(aTHX);
- PL_op = old_op;
-#else
- /* Initialize Drand01 if rand() or srand() has
- not already been called
- */
- if(!PL_srand_called) {
- (void)seedDrand01((Rand_seed_t)Perl_seed(aTHX));
- PL_srand_called = TRUE;
- }
-#endif
+ if(!randcv)
+ MY_initrand(aTHX);
for (index = items ; index > 1 ; ) {
- int swap = (int)(Drand01() * (double)(index--));
+ int swap = (int)(
+ (randcv ? MY_callrand(aTHX_ randcv) : Drand01()) * (double)(index--)
+ );
SV *tmp = ST(swap);
ST(swap) = ST(index);
ST(index) = tmp;
@@ -1138,12 +1261,58 @@ CODE:
XSRETURN(items);
}
+void
+sample(...)
+PROTOTYPE: $@
+CODE:
+{
+ IV count = items ? SvUV(ST(0)) : 0;
+ IV reti = 0;
+ SV *randsv = get_sv("List::Util::RAND", 0);
+ CV * const randcv = randsv && SvROK(randsv) && SvTYPE(SvRV(randsv)) == SVt_PVCV ?
+ (CV *)SvRV(randsv) : NULL;
+
+ if(!count)
+ XSRETURN(0);
+
+ /* Now we've extracted count from ST(0) the rest of this logic will be a
+ * lot neater if we move the topmost item into ST(0) so we can just work
+ * within 0..items-1 */
+ ST(0) = POPs;
+ items--;
+
+ if(count > items)
+ count = items;
+
+ if(!randcv)
+ MY_initrand(aTHX);
+
+ /* Partition the stack into ST(0)..ST(reti-1) containing the sampled results
+ * and ST(reti)..ST(items-1) containing the remaining pending candidates
+ */
+ while(reti < count) {
+ int index = (int)(
+ (randcv ? MY_callrand(aTHX_ randcv) : Drand01()) * (double)(items - reti)
+ );
+
+ SV *selected = ST(reti + index);
+ /* preserve the element we're about to stomp on by putting it back into
+ * the pending partition */
+ ST(reti + index) = ST(reti);
+
+ ST(reti) = selected;
+ reti++;
+ }
+
+ XSRETURN(reti);
+}
+
void
uniq(...)
PROTOTYPE: @
ALIAS:
- uniqnum = 0
+ uniqint = 0
uniqstr = 1
uniq = 2
CODE:
@@ -1152,6 +1321,7 @@ CODE:
int index;
SV **args = &PL_stack_base[ax];
HV *seen;
+ int seen_undef = 0;
if(items == 0 || (items == 1 && !SvGAMAGIC(args[0]) && SvOK(args[0]))) {
/* Optimise for the case of the empty list or a defined nonmagic
@@ -1162,88 +1332,230 @@ CODE:
sv_2mortal((SV *)(seen = newHV()));
- if(ix == 0) {
- /* uniqnum */
- /* A temporary buffer for number stringification */
- SV *keysv = sv_newmortal();
-
- for(index = 0 ; index < items ; index++) {
- SV *arg = args[index];
+ for(index = 0 ; index < items ; index++) {
+ SV *arg = args[index];
#ifdef HV_FETCH_EMPTY_HE
- HE* he;
+ HE *he;
#endif
- if(SvGAMAGIC(arg))
- /* clone the value so we don't invoke magic again */
- arg = sv_mortalcopy(arg);
+ if(SvGAMAGIC(arg))
+ /* clone the value so we don't invoke magic again */
+ arg = sv_mortalcopy(arg);
- if(SvUOK(arg))
- sv_setpvf(keysv, "%" UVuf, SvUV(arg));
- else if(SvIOK(arg))
- sv_setpvf(keysv, "%" IVdf, SvIV(arg));
+ if(ix == 2 && !SvOK(arg)) {
+ /* special handling of undef for uniq() */
+ if(seen_undef)
+ continue;
+
+ seen_undef++;
+
+ if(GIMME_V == G_ARRAY)
+ ST(retcount) = arg;
+ retcount++;
+ continue;
+ }
+ if(ix == 0) {
+ /* uniqint */
+ /* coerce to integer */
+#if PERL_VERSION >= 8
+ /* int_amg only appeared in perl 5.8.0 */
+ if(SvAMAGIC(arg) && (arg = AMG_CALLun(arg, int)))
+ ; /* nothing to do */
else
- sv_setpvf(keysv, "%" NVgf, SvNV(arg));
+#endif
+ if(!SvOK(arg) || SvNOK(arg) || SvPOK(arg))
+ {
+ /* Convert undef, NVs and PVs into a well-behaved int */
+ NV nv = SvNV(arg);
+
+ if(nv > (NV)UV_MAX)
+ /* Too positive for UV - use NV */
+ arg = newSVnv(Perl_floor(nv));
+ else if(nv < (NV)IV_MIN)
+ /* Too negative for IV - use NV */
+ arg = newSVnv(Perl_ceil(nv));
+ else if(nv > 0 && (UV)nv > (UV)IV_MAX)
+ /* Too positive for IV - use UV */
+ arg = newSVuv(nv);
+ else
+ /* Must now fit into IV */
+ arg = newSViv(nv);
+
+ sv_2mortal(arg);
+ }
+ }
#ifdef HV_FETCH_EMPTY_HE
- he = (HE*) hv_common(seen, NULL, SvPVX(keysv), SvCUR(keysv), 0, HV_FETCH_LVALUE | HV_FETCH_EMPTY_HE, NULL, 0);
- if (HeVAL(he))
- continue;
+ he = (HE*) hv_common(seen, arg, NULL, 0, 0, HV_FETCH_LVALUE | HV_FETCH_EMPTY_HE, NULL, 0);
+ if (HeVAL(he))
+ continue;
- HeVAL(he) = &PL_sv_undef;
+ HeVAL(he) = &PL_sv_undef;
#else
- if(hv_exists(seen, SvPVX(keysv), SvCUR(keysv)))
- continue;
+ if (hv_exists_ent(seen, arg, 0))
+ continue;
- hv_store(seen, SvPVX(keysv), SvCUR(keysv), &PL_sv_yes, 0);
+ hv_store_ent(seen, arg, &PL_sv_yes, 0);
#endif
- if(GIMME_V == G_ARRAY)
- ST(retcount) = SvOK(arg) ? arg : sv_2mortal(newSViv(0));
- retcount++;
- }
+ if(GIMME_V == G_ARRAY)
+ ST(retcount) = SvOK(arg) ? arg : sv_2mortal(newSVpvn("", 0));
+ retcount++;
+ }
+
+ finish:
+ if(GIMME_V == G_ARRAY)
+ XSRETURN(retcount);
+ else
+ ST(0) = sv_2mortal(newSViv(retcount));
+}
+
+void
+uniqnum(...)
+PROTOTYPE: @
+CODE:
+{
+ int retcount = 0;
+ int index;
+ SV **args = &PL_stack_base[ax];
+ HV *seen;
+ /* A temporary buffer for number stringification */
+ SV *keysv = sv_newmortal();
+
+ if(items == 0 || (items == 1 && !SvGAMAGIC(args[0]) && SvOK(args[0]))) {
+ /* Optimise for the case of the empty list or a defined nonmagic
+ * singleton. Leave a singleton magical||undef for the regular case */
+ retcount = items;
+ goto finish;
}
- else {
- /* uniqstr or uniq */
- int seen_undef = 0;
- for(index = 0 ; index < items ; index++) {
- SV *arg = args[index];
+ sv_2mortal((SV *)(seen = newHV()));
+
+ for(index = 0 ; index < items ; index++) {
+ SV *arg = args[index];
+ NV nv_arg;
#ifdef HV_FETCH_EMPTY_HE
- HE *he;
+ HE* he;
#endif
- if(SvGAMAGIC(arg))
- /* clone the value so we don't invoke magic again */
- arg = sv_mortalcopy(arg);
+ if(SvGAMAGIC(arg))
+ /* clone the value so we don't invoke magic again */
+ arg = sv_mortalcopy(arg);
- if(ix == 2 && !SvOK(arg)) {
- /* special handling of undef for uniq() */
- if(seen_undef)
- continue;
+ if(SvOK(arg) && !(SvUOK(arg) || SvIOK(arg) || SvNOK(arg))) {
+#if PERL_VERSION >= 8
+ SvIV(arg); /* sets SVf_IOK/SVf_IsUV if it's an integer */
+#else
+ SvNV(arg); /* SvIV() sets SVf_IOK even on floats on 5.6 */
+#endif
+ }
+#if NVSIZE > IVSIZE /* $Config{nvsize} > $Config{ivsize} */
+ /* Avoid altering arg's flags */
+ if(SvUOK(arg)) nv_arg = (NV)SvUV(arg);
+ else if(SvIOK(arg)) nv_arg = (NV)SvIV(arg);
+ else nv_arg = SvNV(arg);
+
+ /* use 0 for all zeros */
+ if(nv_arg == 0) sv_setpvs(keysv, "0");
+
+ /* for NaN, use the platform's normal stringification */
+ else if (nv_arg != nv_arg) sv_setpvf(keysv, "%" NVgf, nv_arg);
+#ifdef NV_IS_DOUBLEDOUBLE
+ /* If the least significant double is zero, it could be either 0.0 *
+ * or -0.0. We therefore ignore the least significant double and *
+ * assign to keysv the bytes of the most significant double only. */
+ else if(nv_arg == (double)nv_arg) {
+ double double_arg = (double)nv_arg;
+ sv_setpvn(keysv, (char *) &double_arg, 8);
+ }
+#endif
+ else {
+ /* Use the byte structure of the NV. *
+ * ACTUAL_NVSIZE == sizeof(NV) minus the number of bytes *
+ * that are allocated but never used. (It is only the 10-byte *
+ * extended precision long double that allocates bytes that are *
+ * never used. For all other NV types ACTUAL_NVSIZE == sizeof(NV). */
+ sv_setpvn(keysv, (char *) &nv_arg, ACTUAL_NVSIZE);
+ }
+#else /* $Config{nvsize} == $Config{ivsize} == 8 */
+ if( SvIOK(arg) || !SvOK(arg) ) {
- seen_undef++;
+ /* It doesn't matter if SvUOK(arg) is TRUE */
+ IV iv = SvIV(arg);
- if(GIMME_V == G_ARRAY)
- ST(retcount) = arg;
- retcount++;
- continue;
+ /* use "0" for all zeros */
+ if(iv == 0) sv_setpvs(keysv, "0");
+
+ else {
+ int uok = SvUOK(arg);
+ int sign = ( iv > 0 || uok ) ? 1 : -1;
+
+ /* Set keysv to the bytes of SvNV(arg) if and only if the integer value *
+ * held by arg can be represented exactly as a double - ie if there are *
+ * no more than 51 bits between its least significant set bit and its *
+ * most significant set bit. *
+ * The neatest approach I could find was provided by roboticus at: *
+ * https://www.perlmonks.org/?node_id=11113490 *
+ * First, identify the lowest set bit and assign its value to an IV. *
+ * Note that this value will always be > 0, and always a power of 2. */
+ IV lowest_set = iv & -iv;
+
+ /* Second, shift it left 53 bits to get location of the first bit *
+ * beyond arg's highest "allowed" set bit. *
+ * NOTE: If lowest set bit is initially far enough left, then this left *
+ * shift operation will result in a value of 0, which is fine. *
+ * Then subtract 1 so that all of the ("allowed") bits below the set bit *
+ * are 1 && all other ("disallowed") bits are set to 0. *
+ * (If the value prior to subtraction was 0, then subtracting 1 will set *
+ * all bits - which is also fine.) */
+ UV valid_bits = (lowest_set << 53) - 1;
+
+ /* The value of arg can be exactly represented by a double unless one *
+ * or more of its "disallowed" bits are set - ie if iv & (~valid_bits) *
+ * is untrue. However, if (iv < 0 && !SvUOK(arg)) we need to multiply iv *
+ * by -1 prior to performing that '&' operation - so multiply iv by sign.*/
+ if( !((iv * sign) & (~valid_bits)) ) {
+ /* Avoid altering arg's flags */
+ nv_arg = uok ? (NV)SvUV(arg) : (NV)SvIV(arg);
+ sv_setpvn(keysv, (char *) &nv_arg, 8);
+ }
+ else {
+ /* Read in the bytes, rather than the numeric value of the IV/UV as *
+ * this is more efficient, despite having to sv_catpvn an extra byte.*/
+ sv_setpvn(keysv, (char *) &iv, 8);
+ /* We add an extra byte to distinguish between an IV/UV and an NV. *
+ * We also use that byte to distinguish between a -ve IV and a UV. */
+ if(uok) sv_catpvn(keysv, "U", 1);
+ else sv_catpvn(keysv, "I", 1);
+ }
}
+ }
+ else {
+ nv_arg = SvNV(arg);
+
+ /* for NaN, use the platform's normal stringification */
+ if (nv_arg != nv_arg) sv_setpvf(keysv, "%" NVgf, nv_arg);
+
+ /* use "0" for all zeros */
+ else if(nv_arg == 0) sv_setpvs(keysv, "0");
+ else sv_setpvn(keysv, (char *) &nv_arg, 8);
+ }
+#endif
#ifdef HV_FETCH_EMPTY_HE
- he = (HE*) hv_common(seen, arg, NULL, 0, 0, HV_FETCH_LVALUE | HV_FETCH_EMPTY_HE, NULL, 0);
- if (HeVAL(he))
- continue;
+ he = (HE*) hv_common(seen, NULL, SvPVX(keysv), SvCUR(keysv), 0, HV_FETCH_LVALUE | HV_FETCH_EMPTY_HE, NULL, 0);
+ if (HeVAL(he))
+ continue;
- HeVAL(he) = &PL_sv_undef;
+ HeVAL(he) = &PL_sv_undef;
#else
- if (hv_exists_ent(seen, arg, 0))
- continue;
+ if(hv_exists(seen, SvPVX(keysv), SvCUR(keysv)))
+ continue;
- hv_store_ent(seen, arg, &PL_sv_yes, 0);
+ hv_store(seen, SvPVX(keysv), SvCUR(keysv), &PL_sv_yes, 0);
#endif
- if(GIMME_V == G_ARRAY)
- ST(retcount) = SvOK(arg) ? arg : sv_2mortal(newSVpvn("", 0));
- retcount++;
- }
+ if(GIMME_V == G_ARRAY)
+ ST(retcount) = SvOK(arg) ? arg : sv_2mortal(newSViv(0));
+ retcount++;
}
finish:
@@ -1302,7 +1614,7 @@ CODE:
ST(0) = boolSV((SvPOK(sv) || SvPOKp(sv)) && (SvNIOK(sv) || SvNIOKp(sv)));
XSRETURN(1);
-char *
+SV *
blessed(sv)
SV *sv
PROTOTYPE: $
@@ -1312,8 +1624,12 @@ CODE:
if(!(SvROK(sv) && SvOBJECT(SvRV(sv))))
XSRETURN_UNDEF;
-
- RETVAL = (char*)sv_reftype(SvRV(sv),TRUE);
+#ifdef HAVE_UNICODE_PACKAGE_NAMES
+ RETVAL = newSVsv(sv_ref(NULL, SvRV(sv), TRUE));
+#else
+ RETVAL = newSV(0);
+ sv_setpv(RETVAL, sv_reftype(SvRV(sv), TRUE));
+#endif
}
OUTPUT:
RETVAL
@@ -1601,15 +1917,18 @@ PPCODE:
/* under debugger, provide information about sub location */
if (PL_DBsub && CvGV(cv)) {
HV* DBsub = GvHV(PL_DBsub);
- HE* old_data;
+ HE* old_data = NULL;
GV* oldgv = CvGV(cv);
HV* oldhv = GvSTASH(oldgv);
- SV* old_full_name = sv_2mortal(newSVpvn_flags(HvNAME(oldhv), HvNAMELEN_get(oldhv), HvNAMEUTF8(oldhv) ? SVf_UTF8 : 0));
- sv_catpvn(old_full_name, "::", 2);
- sv_catpvn_flags(old_full_name, GvNAME(oldgv), GvNAMELEN(oldgv), GvNAMEUTF8(oldgv) ? SV_CATUTF8 : SV_CATBYTES);
- old_data = hv_fetch_ent(DBsub, old_full_name, 0, 0);
+ if (oldhv) {
+ SV* old_full_name = sv_2mortal(newSVpvn_flags(HvNAME(oldhv), HvNAMELEN_get(oldhv), HvNAMEUTF8(oldhv) ? SVf_UTF8 : 0));
+ sv_catpvn(old_full_name, "::", 2);
+ sv_catpvn_flags(old_full_name, GvNAME(oldgv), GvNAMELEN(oldgv), GvNAMEUTF8(oldgv) ? SV_CATUTF8 : SV_CATBYTES);
+
+ old_data = hv_fetch_ent(DBsub, old_full_name, 0, 0);
+ }
if (old_data && HeVAL(old_data)) {
SV* new_full_name = sv_2mortal(newSVpvn_flags(HvNAME(stash), HvNAMELEN_get(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0));
@@ -1660,6 +1979,7 @@ subname(code)
PREINIT:
CV *cv;
GV *gv;
+ const char *stashname;
PPCODE:
if (!SvROK(code) && SvGMAGICAL(code))
mg_get(code);
@@ -1670,7 +1990,12 @@ PPCODE:
if(!(gv = CvGV(cv)))
XSRETURN(0);
- mPUSHs(newSVpvf("%s::%s", HvNAME(GvSTASH(gv)), GvNAME(gv)));
+ if(GvSTASH(gv))
+ stashname = HvNAME(GvSTASH(gv));
+ else
+ stashname = "__ANON__";
+
+ mPUSHs(newSVpvf("%s::%s", stashname, GvNAME(gv)));
XSRETURN(1);
BOOT:
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util.pm b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util.pm
index b650d3585ac..e582d608743 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util.pm
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util.pm
@@ -12,16 +12,20 @@ require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(
- all any first min max minstr maxstr none notall product reduce sum sum0 shuffle uniq uniqnum uniqstr
+ all any first min max minstr maxstr none notall product reduce reductions sum sum0
+ sample shuffle uniq uniqint uniqnum uniqstr
head tail pairs unpairs pairkeys pairvalues pairmap pairgrep pairfirst
);
-our $VERSION = "1.50";
+our $VERSION = "1.55";
our $XS_VERSION = $VERSION;
-$VERSION = eval $VERSION;
+$VERSION =~ tr/_//d;
require XSLoader;
XSLoader::load('List::Util', $XS_VERSION);
+# Used by shuffle()
+our $RAND;
+
sub import
{
my $pkg = caller;
@@ -38,6 +42,7 @@ sub import
# For objects returned by pairs()
sub List::Util::_Pair::key { shift->[0] }
sub List::Util::_Pair::value { shift->[1] }
+sub List::Util::_Pair::TO_JSON { [ @{+shift} ] }
=head1 NAME
@@ -46,13 +51,13 @@ List::Util - A selection of general-utility list subroutines
=head1 SYNOPSIS
use List::Util qw(
- reduce any all none notall first
+ reduce any all none notall first reductions
max maxstr min minstr product sum sum0
pairs unpairs pairkeys pairvalues pairfirst pairgrep pairmap
- shuffle uniq uniqnum uniqstr
+ shuffle uniq uniqint uniqnum uniqstr
);
=head1 DESCRIPTION
@@ -68,7 +73,8 @@ By default C<List::Util> does not export any subroutines.
=head1 LIST-REDUCTION FUNCTIONS
-The following set of functions all reduce a list down to a single value.
+The following set of functions all apply a given block of code to a list of
+values.
=cut
@@ -128,8 +134,28 @@ block that accumulates lengths by writing this instead as:
$total = reduce { $a + length $b } 0, @strings
-The remaining list-reduction functions are all specialisations of this generic
-idea.
+The other scalar-returning list reduction functions are all specialisations of
+this generic idea.
+
+=head2 reductions
+
+ @results = reductions { BLOCK } @list
+
+I<Since version 1.54.>
+
+Similar to C<reduce> except that it also returns the intermediate values along
+with the final result. As before, C<$a> is set to the first element of the
+given list, and the C<BLOCK> is then called once for remaining item in the
+list set into C<$b>, with the result being captured for return as well as
+becoming the new value for C<$a>.
+
+The returned list will begin with the initial value for C<$a>, followed by
+each return value from the block in order. The final value of the result will
+be identical to what the C<reduce> function would have returned given the same
+block and list.
+
+ reduce { "$a-$b" } "a".."d" # "a-b-c-d"
+ reductions { "$a-$b" } "a".."d" # "a", "a-b", "a-b-c", "a-b-c-d"
=head2 any
@@ -341,6 +367,9 @@ equivalent:
...
}
+Since version C<1.51> they also have a C<TO_JSON> method to ease
+serialisation.
+
=head2 unpairs
my @kvlist = unpairs @pairs
@@ -485,6 +514,25 @@ Returns the values of the input in a random order
@cards = shuffle 0..51 # 0..51 in a random order
+This function is affected by the C<$RAND> variable.
+
+=cut
+
+=head2 sample
+
+ my @items = sample $count, @values
+
+I<Since version 1.54.>
+
+Randomly select the given number of elements from the input list. Any given
+position in the input list will be selected at most once.
+
+If there are fewer than C<$count> items in the list then the function will
+return once all of them have been randomly selected; effectively the function
+behaves similarly to L</shuffle>.
+
+This function is affected by the C<$RAND> variable.
+
=head2 uniq
my @subset = uniq @values
@@ -505,6 +553,28 @@ string, and no warning will be produced. It is left as-is in the returned
list. Subsequent C<undef> values are still considered identical to the first,
and will be removed.
+=head2 uniqint
+
+ my @subset = uniqint @values
+
+I<Since version 1.55.>
+
+Filters a list of values to remove subsequent duplicates, as judged by an
+integer numerical equality test. Preserves the order of unique elements, and
+retains the first value of any duplicate set. Values in the returned list will
+be coerced into integers.
+
+ my $count = uniqint @values
+
+In scalar context, returns the number of elements that would have been
+returned as a list.
+
+Note that C<undef> is treated much as other numerical operations treat it; it
+compares equal to zero but additionally produces a warning if such warnings
+are enabled (C<use warnings 'uninitialized';>). In addition, an C<undef> in
+the returned list is coerced into a numerical zero, so that the entire list of
+values returned by C<uniqint> are well-behaved as integers.
+
=head2 uniqnum
my @subset = uniqnum @values
@@ -557,6 +627,8 @@ entire list of values returned by C<uniqstr> are well-behaved as strings.
my @values = head $size, @list;
+I<Since version 1.50.>
+
Returns the first C<$size> elements from C<@list>. If C<$size> is negative, returns
all but the last C<$size> elements from C<@list>.
@@ -570,6 +642,8 @@ all but the last C<$size> elements from C<@list>.
my @values = tail $size, @list;
+I<Since version 1.50.>
+
Returns the last C<$size> elements from C<@list>. If C<$size> is negative, returns
all but the first C<$size> elements from C<@list>.
@@ -579,6 +653,21 @@ all but the first C<$size> elements from C<@list>.
@result = tail -2, qw( foo bar baz );
# baz
+=head1 CONFIGURATION VARIABLES
+
+=head2 $RAND
+
+ local $List::Util::RAND = sub { ... };
+
+I<Since version 1.54.>
+
+This package variable is used by code which needs to generate random numbers
+(such as the L</shuffle> and L</sample> functions). If set to a CODE reference
+it provides an alternative to perl's builtin C<rand()> function. When a new
+random number is needed this function will be invoked with no arguments and is
+expected to return a floating-point value, of which only the fractional part
+will be used.
+
=head1 KNOWN BUGS
=head2 RT #95409
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util/XS.pm b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util/XS.pm
index c8c066f8256..88f663f0ec4 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util/XS.pm
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util/XS.pm
@@ -3,8 +3,8 @@ use strict;
use warnings;
use List::Util;
-our $VERSION = "1.50"; # FIXUP
-$VERSION = eval $VERSION; # FIXUP
+our $VERSION = "1.55"; # FIXUP
+$VERSION =~ tr/_//d; # FIXUP
1;
__END__
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Scalar/Util.pm b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Scalar/Util.pm
index 69821587059..a7345aad78a 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Scalar/Util.pm
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Scalar/Util.pm
@@ -17,8 +17,8 @@ our @EXPORT_OK = qw(
dualvar isdual isvstring looks_like_number openhandle readonly set_prototype
tainted
);
-our $VERSION = "1.50";
-$VERSION = eval $VERSION;
+our $VERSION = "1.55";
+$VERSION =~ tr/_//d;
require List::Util; # List::Util loads the XS
List::Util->VERSION( $VERSION ); # Ensure we got the right XS version (RT#100863)
@@ -134,6 +134,11 @@ is returned.
$obj = bless {}, "Foo";
$type = reftype $obj; # HASH
+Note that for internal reasons, all precompiled regexps (C<qr/.../>) are
+blessed references; thus C<ref()> returns the package name string C<"Regexp">
+on these but C<reftype()> will return the underlying C structure type of
+C<"REGEXP"> in all capitals.
+
=head2 weaken
weaken( $ref );
@@ -276,8 +281,8 @@ L<perlapi/looks_like_number>.
my $fh = openhandle( $fh );
-Returns C<$fh> itself if C<$fh> may be used as a filehandle and is open, or is
-is a tied handle. Otherwise C<undef> is returned.
+Returns C<$fh> itself, if C<$fh> may be used as a filehandle and is open, or if
+it is a tied handle. Otherwise C<undef> is returned.
$fh = openhandle(*STDIN); # \*STDIN
$fh = openhandle(\*STDIN); # \*STDIN
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Sub/Util.pm b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Sub/Util.pm
index edcc6544f6e..d7b59aebab8 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Sub/Util.pm
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Sub/Util.pm
@@ -15,8 +15,8 @@ our @EXPORT_OK = qw(
subname set_subname
);
-our $VERSION = "1.50";
-$VERSION = eval $VERSION;
+our $VERSION = "1.55";
+$VERSION =~ tr/_//d;
require List::Util; # as it has the XS
List::Util->VERSION( $VERSION ); # Ensure we got the right XS version (RT#100863)
@@ -95,8 +95,10 @@ I<Since version 1.40.>
Returns the name of the given C<$code> reference, if it has one. Normal named
subs will give a fully-qualified name consisting of the package and the
localname separated by C<::>. Anonymous code references will give C<__ANON__>
-as the localname. If a name has been set using L</set_subname>, this name will
-be returned instead.
+as the localname. If the package the code was compiled in has been deleted
+(e.g. using C<delete_package> from L<Symbol>), C<__ANON__> will be returned as
+the package name. If a name has been set using L</set_subname>, this name will be
+returned instead.
This function was inspired by C<sub_fullname> from L<Sub::Identify>. The
remaining functions that C<Sub::Identify> implements can easily be emulated
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/blessed.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/blessed.t
index 21d3a9ade49..49eb355ffc5 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/blessed.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/blessed.t
@@ -3,28 +3,28 @@
use strict;
use warnings;
-use Test::More tests => 11;
+use Test::More tests => 12;
use Scalar::Util qw(blessed);
my $t;
-ok(!defined blessed(undef), 'undef is not blessed');
-ok(!defined blessed(1), 'Numbers are not blessed');
-ok(!defined blessed('A'), 'Strings are not blessed');
-ok(!defined blessed({}), 'Unblessed HASH-ref');
-ok(!defined blessed([]), 'Unblessed ARRAY-ref');
-ok(!defined blessed(\$t), 'Unblessed SCALAR-ref');
+ok(!defined blessed(undef), 'undef is not blessed');
+ok(!defined blessed(1), 'Numbers are not blessed');
+ok(!defined blessed('A'), 'Strings are not blessed');
+ok(!defined blessed({}), 'Unblessed HASH-ref');
+ok(!defined blessed([]), 'Unblessed ARRAY-ref');
+ok(!defined blessed(\$t), 'Unblessed SCALAR-ref');
my $x;
$x = bless [], "ABC";
-is(blessed($x), "ABC", 'blessed ARRAY-ref');
+is(blessed($x), "ABC", 'blessed ARRAY-ref');
$x = bless {}, "DEF";
-is(blessed($x), "DEF", 'blessed HASH-ref');
+is(blessed($x), "DEF", 'blessed HASH-ref');
$x = bless {}, "0";
-cmp_ok(blessed($x), "eq", "0", 'blessed HASH-ref');
+cmp_ok(blessed($x), "eq", "0", 'blessed HASH-ref');
{
my $blessed = do {
@@ -46,3 +46,11 @@ cmp_ok(blessed($x), "eq", "0", 'blessed HASH-ref');
::is( ::blessed($obj), __PACKAGE__, "blessed on broken isa() and can()" );
}
+SKIP: {
+ # Unicode package names only supported in perl 5.16 onwards
+ skip "Unicode package names are not supported", 1 if $] < 5.016;
+
+ my $utf8_pack= "X\x{100}";
+ my $obj= bless {}, $utf8_pack;
+ ::is( ::blessed($obj), $utf8_pack, "blessed preserves utf8ness for utf8 class names" );
+}
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/dualvar.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/dualvar.t
index 08dff11778e..bd77c969b5a 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/dualvar.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/dualvar.t
@@ -5,8 +5,8 @@ use warnings;
use Scalar::Util ();
use Test::More (grep { /dualvar/ } @Scalar::Util::EXPORT_FAIL)
- ? (skip_all => 'dualvar requires XS version')
- : (tests => 41);
+ ? (skip_all => 'dualvar requires XS version')
+ : (tests => 41);
use Config;
Scalar::Util->import('dualvar');
@@ -15,44 +15,44 @@ Scalar::Util->import('isdual');
my $var;
$var = dualvar( 2.2,"string");
-ok( isdual($var), 'Is a dualvar');
-ok( $var == 2.2, 'Numeric value');
-ok( $var eq "string", 'String value');
+ok( isdual($var), 'Is a dualvar');
+ok( $var == 2.2, 'Numeric value');
+ok( $var eq "string", 'String value');
my $var2 = $var;
-ok( isdual($var2), 'Is a dualvar');
-ok( $var2 == 2.2, 'copy Numeric value');
-ok( $var2 eq "string", 'copy String value');
+ok( isdual($var2), 'Is a dualvar');
+ok( $var2 == 2.2, 'copy Numeric value');
+ok( $var2 eq "string", 'copy String value');
$var++;
-ok( ! isdual($var), 'No longer dualvar');
-ok( $var == 3.2, 'inc Numeric value');
-ok( $var ne "string", 'inc String value');
+ok( ! isdual($var), 'No longer dualvar');
+ok( $var == 3.2, 'inc Numeric value');
+ok( $var ne "string", 'inc String value');
my $numstr = "10.2";
my $numtmp = int($numstr); # use $numstr as an int
$var = dualvar($numstr, "");
-ok( isdual($var), 'Is a dualvar');
-ok( $var == $numstr, 'NV');
+ok( isdual($var), 'Is a dualvar');
+ok( $var == $numstr, 'NV');
SKIP: {
skip("dualvar with UV value known to fail with $]",3) if $] < 5.006_001;
my $bits = ($Config{'use64bitint'}) ? 63 : 31;
$var = dualvar(1<<$bits, "");
- ok( isdual($var), 'Is a dualvar');
- ok( $var == (1<<$bits), 'UV 1');
- ok( $var > 0, 'UV 2');
+ ok( isdual($var), 'Is a dualvar');
+ ok( $var == (1<<$bits), 'UV 1');
+ ok( $var > 0, 'UV 2');
}
# Create a dualvar "the old fashioned way"
$var = "10";
-ok( ! isdual($var), 'Not a dualvar');
+ok( ! isdual($var), 'Not a dualvar');
my $foo = $var + 0;
-ok( isdual($var), 'Is a dualvar');
+ok( isdual($var), 'Is a dualvar');
{
package Tied;
@@ -63,9 +63,9 @@ ok( isdual($var), 'Is a dualvar');
tie my $tied, 'Tied';
$var = dualvar($tied, "ok");
-ok(isdual($var), 'Is a dualvar');
-ok($var == 7.5, 'Tied num');
-ok($var eq 'ok', 'Tied str');
+ok(isdual($var), 'Is a dualvar');
+ok($var == 7.5, 'Tied num');
+ok($var eq 'ok', 'Tied str');
SKIP: {
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/first.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/first.t
index ba7726ae562..3f008e703c0 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/first.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/first.t
@@ -5,10 +5,10 @@ use warnings;
use List::Util qw(first);
use Test::More;
-plan tests => 22 + ($::PERL_ONLY ? 0 : 2);
+plan tests => 24;
my $v;
-ok(defined &first, 'defined');
+ok(defined &first, 'defined');
$v = first { 8 == ($_ - 1) } 9,4,5,6;
is($v, 9, 'one more than 8');
@@ -20,7 +20,7 @@ $v = first { 0 };
is($v, undef, 'no args');
$v = first { $_->[1] le "e" and "e" le $_->[2] }
- [qw(a b c)], [qw(d e f)], [qw(g h i)];
+ [qw(a b c)], [qw(d e f)], [qw(g h i)];
is_deeply($v, [qw(d e f)], 'reference args');
# Check that eval{} inside the block works correctly
@@ -89,11 +89,9 @@ SKIP: {
is(&Internals::SvREFCNT(\&huge), $refcnt, "Refcount unchanged");
}
-# The remainder of the tests are only relevant for the XS
-# implementation. The Perl-only implementation behaves differently
-# (and more flexibly) in a way that we can't emulate from XS.
-if (!$::PERL_ONLY) { SKIP: {
-
+# These tests are only relevant for the real multicall implementation. The
+# psuedo-multicall implementation behaves differently.
+SKIP: {
$List::Util::REAL_MULTICALL ||= 0; # Avoid use only once
skip("Poor man's MULTICALL can't cope", 2)
if !$List::Util::REAL_MULTICALL;
@@ -105,8 +103,7 @@ if (!$::PERL_ONLY) { SKIP: {
# Can we goto a subroutine?
eval {()=first{goto sub{}} 1,2;};
like($@, qr/^Can't goto subroutine from a sort sub/, "goto sub");
-
-} }
+}
use constant XSUBC_TRUE => 1;
use constant XSUBC_FALSE => 0;
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/isvstring.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/isvstring.t
index 9d345aa26fa..3649d41c59f 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/isvstring.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/isvstring.t
@@ -6,18 +6,18 @@ use warnings;
$|=1;
use Scalar::Util ();
use Test::More (grep { /isvstring/ } @Scalar::Util::EXPORT_FAIL)
- ? (skip_all => 'isvstring requires XS version')
- : (tests => 3);
+ ? (skip_all => 'isvstring requires XS version')
+ : (tests => 3);
Scalar::Util->import(qw[isvstring]);
my $vs = ord("A") == 193 ? 241.75.240 : 49.46.48;
-ok( $vs == "1.0", 'dotted num');
-ok( isvstring($vs), 'isvstring');
+ok( $vs == "1.0", 'dotted num');
+ok( isvstring($vs), 'isvstring');
my $sv = "1.0";
-ok( !isvstring($sv), 'not isvstring');
+ok( !isvstring($sv), 'not isvstring');
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/lln.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/lln.t
index df9ea3aea93..84583446716 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/lln.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/lln.t
@@ -10,18 +10,18 @@ foreach my $num (qw(1 -1 +1 1.0 +1.0 -1.0 -1.0e-12)) {
ok(looks_like_number($num), "'$num'");
}
-is(!!looks_like_number("Inf"), $] >= 5.006001, 'Inf');
-is(!!looks_like_number("Infinity"), $] >= 5.008, 'Infinity');
-is(!!looks_like_number("NaN"), $] >= 5.008, 'NaN');
-is(!!looks_like_number("foo"), '', 'foo');
-is(!!looks_like_number(undef), '', 'undef');
-is(!!looks_like_number({}), '', 'HASH Ref');
-is(!!looks_like_number([]), '', 'ARRAY Ref');
+is(!!looks_like_number("Inf"), $] >= 5.006001, 'Inf');
+is(!!looks_like_number("Infinity"), $] >= 5.008, 'Infinity');
+is(!!looks_like_number("NaN"), $] >= 5.008, 'NaN');
+is(!!looks_like_number("foo"), '', 'foo');
+is(!!looks_like_number(undef), '', 'undef');
+is(!!looks_like_number({}), '', 'HASH Ref');
+is(!!looks_like_number([]), '', 'ARRAY Ref');
use Math::BigInt;
my $bi = Math::BigInt->new('1234567890');
-is(!!looks_like_number($bi), 1, 'Math::BigInt');
-is(!!looks_like_number("$bi"), 1, 'Stringified Math::BigInt');
+is(!!looks_like_number($bi), 1, 'Math::BigInt');
+is(!!looks_like_number("$bi"), 1, 'Stringified Math::BigInt');
{ package Foo;
sub TIEHASH { bless {} }
@@ -29,9 +29,9 @@ sub FETCH { $_[1] }
}
my %foo;
tie %foo, 'Foo';
-is(!!looks_like_number($foo{'abc'}), '', 'Tied');
-is(!!looks_like_number($foo{'123'}), 1, 'Tied');
+is(!!looks_like_number($foo{'abc'}), '', 'Tied');
+is(!!looks_like_number($foo{'123'}), 1, 'Tied');
-is(!!looks_like_number("\x{1815}"), '', 'MONGOLIAN DIGIT FIVE');
+is(!!looks_like_number("\x{1815}"), '', 'MONGOLIAN DIGIT FIVE');
# We should copy some of perl core tests like t/base/num.t here
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/pair.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/pair.t
index e65123cc2c7..7d7a6a9bb59 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/pair.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/pair.t
@@ -3,8 +3,9 @@
use strict;
use warnings;
-use Test::More tests => 27;
+use Test::More tests => 29;
use List::Util qw(pairgrep pairfirst pairmap pairs unpairs pairkeys pairvalues);
+use Scalar::Util qw(blessed);
no warnings 'misc'; # avoid "Odd number of elements" warnings most of the time
@@ -104,6 +105,10 @@ is_deeply( [ pairs one => 1, two => ],
my @p = pairs one => 1, two => 2;
is( $p[0]->key, "one", 'pairs ->key' );
is( $p[0]->value, 1, 'pairs ->value' );
+ is_deeply( $p[0]->TO_JSON,
+ [ one => 1 ],
+ 'pairs ->TO_JSON' );
+ ok( !blessed($p[0]->TO_JSON) , 'pairs ->TO_JSON is not blessed' );
}
is_deeply( [ unpairs [ four => 4 ], [ five => 5 ], [ six => 6 ] ],
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/readonly.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/readonly.t
index c8e19ff4c85..1333adeb4fc 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/readonly.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/readonly.t
@@ -6,26 +6,26 @@ use warnings;
use Scalar::Util qw(readonly);
use Test::More tests => 11;
-ok( readonly(1), 'number constant');
+ok( readonly(1), 'number constant');
my $var = 2;
-ok( !readonly($var), 'number variable');
-is( $var, 2, 'no change to number variable');
+ok( !readonly($var), 'number variable');
+is( $var, 2, 'no change to number variable');
-ok( readonly("fred"), 'string constant');
+ok( readonly("fred"), 'string constant');
$var = "fred";
-ok( !readonly($var), 'string variable');
-is( $var, 'fred', 'no change to string variable');
+ok( !readonly($var), 'string variable');
+is( $var, 'fred', 'no change to string variable');
$var = \2;
-ok( !readonly($var), 'reference to constant');
-ok( readonly($$var), 'de-reference to constant');
+ok( !readonly($var), 'reference to constant');
+ok( readonly($$var), 'de-reference to constant');
-ok( !readonly(*STDOUT), 'glob');
+ok( !readonly(*STDOUT), 'glob');
sub try
{
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reduce.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reduce.t
index 848c34fb221..67fdbaac228 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reduce.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reduce.t
@@ -5,25 +5,25 @@ use warnings;
use List::Util qw(reduce min);
use Test::More;
-plan tests => 30 + ($::PERL_ONLY ? 0 : 2);
+plan tests => 33;
my $v = reduce {};
-is( $v, undef, 'no args');
+is( $v, undef, 'no args');
$v = reduce { $a / $b } 756,3,7,4;
-is( $v, 9, '4-arg divide');
+is( $v, 9, '4-arg divide');
$v = reduce { $a / $b } 6;
-is( $v, 6, 'one arg');
+is( $v, 6, 'one arg');
my @a = map { rand } 0 .. 20;
$v = reduce { $a < $b ? $a : $b } @a;
-is( $v, min(@a), 'min');
+is( $v, min(@a), 'min');
@a = map { pack("C", int(rand(256))) } 0 .. 20;
$v = reduce { $a . $b } @a;
-is( $v, join("",@a), 'concat');
+is( $v, join("",@a), 'concat');
sub add {
my($aa, $bb) = @_;
@@ -31,26 +31,26 @@ sub add {
}
$v = reduce { my $t="$a $b\n"; 0+add($a, $b) } 3, 2, 1;
-is( $v, 6, 'call sub');
+is( $v, 6, 'call sub');
# Check that eval{} inside the block works correctly
$v = reduce { eval { die }; $a + $b } 0,1,2,3,4;
-is( $v, 10, 'use eval{}');
+is( $v, 10, 'use eval{}');
$v = !defined eval { reduce { die if $b > 2; $a + $b } 0,1,2,3,4 };
ok($v, 'die');
sub foobar { reduce { (defined(wantarray) && !wantarray) ? $a+1 : 0 } 0,1,2,3 }
($v) = foobar();
-is( $v, 3, 'scalar context');
+is( $v, 3, 'scalar context');
sub add2 { $a + $b }
$v = reduce \&add2, 1,2,3;
-is( $v, 6, 'sub reference');
+is( $v, 6, 'sub reference');
$v = reduce { add2() } 3,4,5;
-is( $v, 12, 'call sub');
+is( $v, 12, 'call sub');
$v = reduce { eval "$a + $b" } 1,2,3;
@@ -125,11 +125,9 @@ SKIP: {
is($ok, '', 'Not a subroutine reference');
}
-# The remainder of the tests are only relevant for the XS
-# implementation. The Perl-only implementation behaves differently
-# (and more flexibly) in a way that we can't emulate from XS.
-if (!$::PERL_ONLY) { SKIP: {
-
+# These tests are only relevant for the real multicall implementation. The
+# psuedo-multicall implementation behaves differently.
+SKIP: {
$List::Util::REAL_MULTICALL ||= 0; # Avoid use only once
skip("Poor man's MULTICALL can't cope", 2)
if !$List::Util::REAL_MULTICALL;
@@ -141,8 +139,12 @@ if (!$::PERL_ONLY) { SKIP: {
# Can we goto a subroutine?
eval {()=reduce{goto sub{}} 1,2;};
like($@, qr/^Can't goto subroutine from a sort sub/, "goto sub");
+}
-} }
+{
+ my @ret = reduce { $a + $b } 1 .. 5;
+ is_deeply( \@ret, [ 15 ], 'reduce in list context yields only final answer' );
+}
# XSUB callback
use constant XSUBC => 42;
@@ -162,4 +164,4 @@ ok($@ =~ /^Not a subroutine reference/, 'check for code reference');
my @names = ("a\x{100}c", "d\x{101}efgh", 'ijk');
my $longest = reduce { length($a) > length($b) ? $a : $b } @names;
-is( length($longest), 6, 'missing SMG rt#121992');
+is( length($longest), 6, 'missing SMG rt#121992');
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/refaddr.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/refaddr.t
index 8d7c441bb32..91b6fa9ec68 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/refaddr.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/refaddr.t
@@ -64,9 +64,10 @@ foreach my $r ({}, \$t, [], \*F, sub {}) {
package FooBar;
-use overload '0+' => sub { 10 },
- '+' => sub { 10 + $_[1] },
- '""' => sub { "10" };
+use overload
+ '0+' => sub { 10 },
+ '+' => sub { 10 + $_[1] },
+ '""' => sub { "10" };
package MyTie;
@@ -85,21 +86,21 @@ use Scalar::Util qw(refaddr);
sub TIEHASH
{
- my $pkg = shift;
- return bless [ @_ ], $pkg;
+ my $pkg = shift;
+ return bless [ @_ ], $pkg;
}
sub FETCH
{
- my $self = shift;
- my $key = shift;
- my ($underlying) = @$self;
- return $underlying->{refaddr($key)};
+ my $self = shift;
+ my $key = shift;
+ my ($underlying) = @$self;
+ return $underlying->{refaddr($key)};
}
sub STORE
{
- my $self = shift;
- my $key = shift;
- my $value = shift;
- my ($underlying) = @$self;
- return ($underlying->{refaddr($key)} = $key);
+ my $self = shift;
+ my $key = shift;
+ my $value = shift;
+ my ($underlying) = @$self;
+ return ($underlying->{refaddr($key)} = $key);
}
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reftype.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reftype.t
index a40e41493b5..2fefd8fbef0 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reftype.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reftype.t
@@ -18,18 +18,18 @@ $s = undef; # SvTYPE($s) is SVt_RV, but SvROK($s) is false
my $t;
my @test = (
- [ undef, 1, 'number' ],
- [ undef, 'A', 'string' ],
- [ HASH => {}, 'HASH ref' ],
- [ ARRAY => [], 'ARRAY ref' ],
- [ SCALAR => \$t, 'SCALAR ref' ],
- [ SCALAR => \$s, 'SCALAR ref (but SVt_RV)' ],
- [ REF => \(\$t), 'REF ref' ],
- [ GLOB => \*F, 'tied GLOB ref' ],
- [ GLOB => gensym, 'GLOB ref' ],
- [ CODE => sub {}, 'CODE ref' ],
- [ IO => *STDIN{IO},'IO ref' ],
- [ $RE => qr/x/, 'REGEEXP' ],
+ [ undef, 1, 'number' ],
+ [ undef, 'A', 'string' ],
+ [ HASH => {}, 'HASH ref' ],
+ [ ARRAY => [], 'ARRAY ref' ],
+ [ SCALAR => \$t, 'SCALAR ref' ],
+ [ SCALAR => \$s, 'SCALAR ref (but SVt_RV)' ],
+ [ REF => \(\$t), 'REF ref' ],
+ [ GLOB => \*F, 'tied GLOB ref' ],
+ [ GLOB => gensym, 'GLOB ref' ],
+ [ CODE => sub {}, 'CODE ref' ],
+ [ IO => *STDIN{IO}, 'IO ref' ],
+ [ $RE => qr/x/, 'REGEEXP' ],
);
foreach my $test (@test) {
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/shuffle.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/shuffle.t
index dff963715dc..7135b5163ce 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/shuffle.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/shuffle.t
@@ -3,24 +3,35 @@
use strict;
use warnings;
-use Test::More tests => 6;
+use Test::More tests => 7;
use List::Util qw(shuffle);
my @r;
@r = shuffle();
-ok( !@r, 'no args');
+ok( !@r, 'no args');
@r = shuffle(9);
-is( 0+@r, 1, '1 in 1 out');
-is( $r[0], 9, 'one arg');
+is( 0+@r, 1, '1 in 1 out');
+is( $r[0], 9, 'one arg');
my @in = 1..100;
@r = shuffle(@in);
-is( 0+@r, 0+@in, 'arg count');
+is( 0+@r, 0+@in, 'arg count');
-isnt( "@r", "@in", 'result different to args');
+isnt( "@r", "@in", 'result different to args');
my @s = sort { $a <=> $b } @r;
-is( "@in", "@s", 'values');
+is( "@in", "@s", 'values');
+
+{
+ local $List::Util::RAND = sub { 4/10 }; # chosen by a fair die
+
+ @r = shuffle(1..10);
+ is_deeply(
+ [ shuffle(1..10) ],
+ [ shuffle(1..10) ],
+ 'rigged rand() yields predictable output'
+ );
+}
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/sum.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/sum.t
index e2c416df8c0..5247a37b004 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/sum.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/sum.t
@@ -9,7 +9,7 @@ use Config;
use List::Util qw(sum);
my $v = sum;
-is( $v, undef, 'no args');
+is( $v, undef, 'no args');
$v = sum(9);
is( $v, 9, 'one arg');
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/tainted.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/tainted.t
index fb83c86c327..1197b295869 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/tainted.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/tainted.t
@@ -13,10 +13,10 @@ my $var = 2;
ok( !tainted($var), 'known variable');
-ok( tainted($^X), 'interpreter variable');
+ok( tainted($^X), 'interpreter variable');
$var = $^X;
-ok( tainted($var), 'copy of interpreter variable');
+ok( tainted($var), 'copy of interpreter variable');
{
package Tainted;
diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/weak.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/weak.t
index 86ded9794fc..39a4167cd6a 100644
--- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/weak.t
+++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/weak.t
@@ -7,8 +7,8 @@ use Config;
use Scalar::Util ();
use Test::More ((grep { /weaken/ } @Scalar::Util::EXPORT_FAIL) and !$ENV{PERL_CORE})
- ? (skip_all => 'weaken requires XS version')
- : (tests => 28);
+ ? (skip_all => 'weaken requires XS version')
+ : (tests => 28);
Scalar::Util->import(qw(weaken unweaken isweak));
diff --git a/gnu/usr.bin/perl/cpan/Socket/Makefile.PL b/gnu/usr.bin/perl/cpan/Socket/Makefile.PL
index 5eab38080a9..b69f50c9c78 100644
--- a/gnu/usr.bin/perl/cpan/Socket/Makefile.PL
+++ b/gnu/usr.bin/perl/cpan/Socket/Makefile.PL
@@ -165,9 +165,9 @@ my @names = (
qw(
AF_802 AF_AAL AF_APPLETALK AF_CCITT AF_CHAOS AF_CTF AF_DATAKIT
AF_DECnet AF_DLI AF_ECMA AF_GOSIP AF_HYLINK AF_IMPLINK AF_INET AF_INET6
- AF_ISO AF_KEY AF_LAST AF_LAT AF_LINK AF_MAX AF_NBS AF_NIT AF_NS AF_OSI
- AF_OSINET AF_PUP AF_ROUTE AF_SNA AF_UNIX AF_UNSPEC AF_USER AF_WAN
- AF_X25
+ AF_ISO AF_KEY AF_LAST AF_LAT AF_LINK AF_LOCAL AF_MAX AF_NBS AF_NIT
+ AF_NS AF_OSI AF_OSINET AF_PUP AF_ROUTE AF_SNA AF_UNIX AF_UNSPEC AF_USER
+ AF_WAN AF_X25
AI_ADDRCONFIG AI_ALL AI_CANONIDN AI_CANONNAME AI_IDN
AI_IDN_ALLOW_UNASSIGNED AI_IDN_USE_STD3_ASCII_RULES AI_NUMERICHOST
@@ -203,9 +203,9 @@ my @names = (
PF_802 PF_AAL PF_APPLETALK PF_CCITT PF_CHAOS PF_CTF PF_DATAKIT
PF_DECnet PF_DLI PF_ECMA PF_GOSIP PF_HYLINK PF_IMPLINK PF_INET PF_INET6
- PF_ISO PF_KEY PF_LAST PF_LAT PF_LINK PF_MAX PF_NBS PF_NIT PF_NS PF_OSI
- PF_OSINET PF_PUP PF_ROUTE PF_SNA PF_UNIX PF_UNSPEC PF_USER PF_WAN
- PF_X25
+ PF_ISO PF_KEY PF_LAST PF_LAT PF_LINK PF_LOCAL PF_MAX PF_NBS PF_NIT
+ PF_NS PF_OSI PF_OSINET PF_PUP PF_ROUTE PF_SNA PF_UNIX PF_UNSPEC PF_USER
+ PF_WAN PF_X25
SCM_CONNECT SCM_CREDENTIALS SCM_CREDS SCM_TIMESTAMP
diff --git a/gnu/usr.bin/perl/cpan/Socket/Socket.pm b/gnu/usr.bin/perl/cpan/Socket/Socket.pm
index 370deef1036..2c6b5e45d04 100644
--- a/gnu/usr.bin/perl/cpan/Socket/Socket.pm
+++ b/gnu/usr.bin/perl/cpan/Socket/Socket.pm
@@ -3,7 +3,7 @@ package Socket;
use strict;
{ use 5.006001; }
-our $VERSION = '2.027';
+our $VERSION = '2.029';
=head1 NAME
diff --git a/gnu/usr.bin/perl/cpan/Socket/Socket.xs b/gnu/usr.bin/perl/cpan/Socket/Socket.xs
index b11ea751a7d..e46c93e1719 100644
--- a/gnu/usr.bin/perl/cpan/Socket/Socket.xs
+++ b/gnu/usr.bin/perl/cpan/Socket/Socket.xs
@@ -79,6 +79,25 @@ typedef int socklen_t;
#endif
+/*
+ * Under Windows, sockaddr_un is defined in afunix.h. Unfortunately
+ * MinGW and SDKs older than 10.0.17063.0 don't have it, so we have to
+ * define it here. Don't worry, it's portable. Windows has ironclad ABI
+ * stability guarantees which means that the definitions will *never*
+ * change.
+ */
+#ifndef UNIX_PATH_MAX
+
+#define UNIX_PATH_MAX 108
+
+struct sockaddr_un
+{
+ USHORT sun_family;
+ char sun_path[UNIX_PATH_MAX];
+};
+
+#endif
+
static int inet_pton(int af, const char *src, void *dst)
{
struct sockaddr_storage ss;
@@ -813,7 +832,7 @@ pack_sockaddr_un(pathname)
SV * pathname
CODE:
{
-#ifdef I_SYS_UN
+#if defined(I_SYS_UN) || defined(WIN32)
struct sockaddr_un sun_ad; /* fear using sun */
STRLEN len;
char * pathname_pv;
@@ -883,7 +902,7 @@ unpack_sockaddr_un(sun_sv)
SV * sun_sv
CODE:
{
-#ifdef I_SYS_UN
+#if defined(I_SYS_UN) || defined(WIN32)
struct sockaddr_un addr;
STRLEN sockaddrlen;
char * sun_ad;
diff --git a/gnu/usr.bin/perl/cpan/Sys-Syslog/Makefile.PL b/gnu/usr.bin/perl/cpan/Sys-Syslog/Makefile.PL
index c76963d0b96..d09ba69fc90 100644
--- a/gnu/usr.bin/perl/cpan/Sys-Syslog/Makefile.PL
+++ b/gnu/usr.bin/perl/cpan/Sys-Syslog/Makefile.PL
@@ -14,7 +14,7 @@ if ($] < 5.008) {
}
# create a lib/ dir in order to avoid warnings in Test::Distribution
-mkdir "lib", $ENV{PERL_CORE} ? 0770 : 0755;
+mkdir "lib", 0755;
# virtual paths given to EU::MM
my %virtual_path = ( 'Syslog.pm' => '$(INST_LIBDIR)/Syslog.pm' );
diff --git a/gnu/usr.bin/perl/cpan/Sys-Syslog/Syslog.pm b/gnu/usr.bin/perl/cpan/Sys-Syslog/Syslog.pm
index 96e8632f6e0..ebbac5db27b 100644
--- a/gnu/usr.bin/perl/cpan/Sys-Syslog/Syslog.pm
+++ b/gnu/usr.bin/perl/cpan/Sys-Syslog/Syslog.pm
@@ -15,7 +15,7 @@ require 5.005;
{ no strict 'vars';
- $VERSION = '0.35';
+ $VERSION = '0.36';
%EXPORT_TAGS = (
standard => [qw(openlog syslog closelog setlogmask)],
@@ -935,7 +935,7 @@ Sys::Syslog - Perl interface to the UNIX syslog(3) calls
=head1 VERSION
-This is the documentation of version 0.35
+This is the documentation of version 0.36
=head1 SYNOPSIS
diff --git a/gnu/usr.bin/perl/cpan/Term-ANSIColor/lib/Term/ANSIColor.pm b/gnu/usr.bin/perl/cpan/Term-ANSIColor/lib/Term/ANSIColor.pm
index 730124b7f6d..db329081406 100644
--- a/gnu/usr.bin/perl/cpan/Term-ANSIColor/lib/Term/ANSIColor.pm
+++ b/gnu/usr.bin/perl/cpan/Term-ANSIColor/lib/Term/ANSIColor.pm
@@ -1,17 +1,17 @@
# Color screen output using ANSI escape sequences.
#
-# Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2005, 2006, 2008, 2009, 2010,
-# 2011, 2012, 2013, 2014, 2015, 2016 Russ Allbery <rra@cpan.org>
-# Copyright 1996 Zenin
-# Copyright 2012 Kurt Starsinic <kstarsinic@gmail.com>
+# This module provides utility functions (in two different forms) for coloring
+# output with ANSI escape sequences.
#
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# PUSH/POP support submitted 2007 by openmethods.com voice solutions
+# This module is sometimes used in low-memory environments, so avoid use of
+# \d, \w, [:upper:], and similar constructs in the most important functions
+# (color, colored, AUTOLOAD, and the generated constant functions) since
+# loading the Unicode attribute files consumes a lot of memory.
#
# Ah, September, when the sysadmins turn colors and fall off the trees....
# -- Dave Van Domelen
+#
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
##############################################################################
# Modules and declarations
@@ -19,15 +19,15 @@
package Term::ANSIColor;
-use 5.006;
+use 5.008;
use strict;
use warnings;
# Also uses Carp but loads it on demand to reduce memory usage.
-use Exporter ();
+use Exporter;
-# use Exporter plus @ISA instead of use base for 5.6 compatibility.
+# use Exporter plus @ISA instead of use base to reduce memory usage.
## no critic (ClassHierarchies::ProhibitExplicitISA)
# Declare variables that should be set in BEGIN for robustness.
@@ -41,7 +41,7 @@ our $AUTOLOAD;
# against circular module loading (not that we load any modules, but
# consistency is good).
BEGIN {
- $VERSION = '4.06';
+ $VERSION = '5.01';
# All of the basic supported constants, used in %EXPORT_TAGS.
my @colorlist = qw(
@@ -173,7 +173,7 @@ for my $n (0 .. 23) {
# Reverse lookup. Alphabetically first name for a sequence is preferred.
our %ATTRIBUTES_R;
-for my $attr (reverse sort keys %ATTRIBUTES) {
+for my $attr (reverse(sort(keys(%ATTRIBUTES)))) {
$ATTRIBUTES_R{ $ATTRIBUTES{$attr} } = $attr;
}
@@ -188,17 +188,18 @@ for my $code (16 .. 255) {
# Import any custom colors set in the environment.
our %ALIASES;
-if (exists $ENV{ANSI_COLORS_ALIASES}) {
+if (exists($ENV{ANSI_COLORS_ALIASES})) {
my $spec = $ENV{ANSI_COLORS_ALIASES};
- $spec =~ s{\s+}{}xmsg;
+ $spec =~ s{ \A \s+ }{}xms;
+ $spec =~ s{ \s+ \z }{}xms;
# Error reporting here is an interesting question. Use warn rather than
# carp because carp would report the line of the use or require, which
# doesn't help anyone understand what's going on, whereas seeing this code
# will be more helpful.
## no critic (ErrorHandling::RequireCarping)
- for my $definition (split m{,}xms, $spec) {
- my ($new, $old) = split m{=}xms, $definition, 2;
+ for my $definition (split(m{\s*,\s*}xms, $spec)) {
+ my ($new, $old) = split(m{\s*=\s*}xms, $definition, 2);
if (!$new || !$old) {
warn qq{Bad color mapping "$definition"};
} else {
@@ -249,10 +250,10 @@ sub croak {
# called sub against the list of attributes, and if it's an all-caps version
# of one of them, we define the sub on the fly and then run it.
#
-# If the environment variable ANSI_COLORS_DISABLED is set to a true value,
-# just return the arguments without adding any escape sequences. This is to
-# make it easier to write scripts that also work on systems without any ANSI
-# support, like Windows consoles.
+# If the environment variable ANSI_COLORS_DISABLED is set to a true value, or
+# if the variable NO_COLOR is set, just return the arguments without adding
+# any escape sequences. This is to make it easier to write scripts that also
+# work on systems without any ANSI support, like Windows consoles.
#
# Avoid using character classes like [:upper:] and \w here, since they load
# Unicode character tables and consume a ton of memory. All of our constants
@@ -274,7 +275,7 @@ sub AUTOLOAD {
# If colors are disabled, just return the input. Do this without
# installing a sub for (marginal, unbenchmarked) speed.
- if ($ENV{ANSI_COLORS_DISABLED}) {
+ if ($ENV{ANSI_COLORS_DISABLED} || defined($ENV{NO_COLOR})) {
return join(q{}, @_);
}
@@ -296,7 +297,7 @@ sub AUTOLOAD {
## no critic (ValuesAndExpressions::ProhibitImplicitNewlines)
my $eval_result = eval qq{
sub $AUTOLOAD {
- if (\$ENV{ANSI_COLORS_DISABLED}) {
+ if (\$ENV{ANSI_COLORS_DISABLED} || defined(\$ENV{NO_COLOR})) {
return join(q{}, \@_);
} elsif (\$AUTOLOCAL && \@_) {
return PUSHCOLOR('$escape') . join(q{}, \@_) . POPCOLOR;
@@ -320,7 +321,6 @@ sub AUTOLOAD {
$@ = $eval_err;
# Dispatch to the newly-created sub.
- ## no critic (References::ProhibitDoubleSigils)
goto &$AUTOLOAD;
}
## use critic
@@ -393,25 +393,35 @@ sub LOCALCOLOR {
# Throws: Text exception for any invalid attribute
sub color {
my (@codes) = @_;
- @codes = map { split } @codes;
# Return the empty string if colors are disabled.
- if ($ENV{ANSI_COLORS_DISABLED}) {
+ if ($ENV{ANSI_COLORS_DISABLED} || defined($ENV{NO_COLOR})) {
return q{};
}
+ # Split on whitespace and expand aliases.
+ @codes = map { split } @codes;
+ @codes = map { defined($ALIASES{$_}) ? @{ $ALIASES{$_} } : $_ } @codes;
+
# Build the attribute string from semicolon-separated numbers.
+ ## no critic (RegularExpressions::ProhibitEnumeratedClasses)
my $attribute = q{};
for my $code (@codes) {
$code = lc($code);
if (defined($ATTRIBUTES{$code})) {
$attribute .= $ATTRIBUTES{$code} . q{;};
- } elsif (defined($ALIASES{$code})) {
- $attribute .= $ALIASES{$code} . q{;};
+ } elsif ($code =~ m{ \A (on_)? r([0-9]+) g([0-9]+) b([0-9]+) \z }xms) {
+ my ($r, $g, $b) = ($2 + 0, $3 + 0, $4 + 0);
+ if ($r > 255 || $g > 255 || $b > 255) {
+ croak("Invalid attribute name $code");
+ }
+ my $prefix = $1 ? '48' : '38';
+ $attribute .= "$prefix;2;$r;$g;$b;";
} else {
croak("Invalid attribute name $code");
}
}
+ ## use critic
# We added one too many semicolons for simplicity. Remove the last one.
chop($attribute);
@@ -444,20 +454,38 @@ sub uncolor {
croak("Bad escape sequence $escape");
}
- # Pull off 256-color codes (38;5;n or 48;5;n) as a unit.
- push(@nums, $attrs =~ m{ ( 0*[34]8;0*5;\d+ | \d+ ) (?: ; | \z ) }xmsg);
+ # Pull off 256-color codes (38;5;n or 48;5;n) and true color codes
+ # (38;2;n;n;n or 48;2;n;n;n) as a unit.
+ my $regex = qr{
+ (
+ 0*[34]8 ; 0*2 ; \d+ ; \d+ ; \d+
+ | 0*[34]8 ; 0*5 ; \d+
+ | \d+
+ )
+ (?: ; | \z )
+ }xms;
+ push(@nums, $attrs =~ m{$regex}xmsg);
}
# Now, walk the list of numbers and convert them to attribute names.
# Strip leading zeroes from any of the numbers. (xterm, at least, allows
# leading zeroes to be added to any number in an escape sequence.)
for my $num (@nums) {
- $num =~ s{ ( \A | ; ) 0+ (\d) }{$1$2}xmsg;
- my $name = $ATTRIBUTES_R{$num};
- if (!defined($name)) {
- croak("No name for escape sequence $num");
+ if ($num =~ m{ \A 0*([34])8 ; 0*2 ; (\d+) ; (\d+) ; (\d+) \z }xms) {
+ my ($r, $g, $b) = ($2 + 0, $3 + 0, $4 + 0);
+ if ($r > 255 || $g > 255 || $b > 255) {
+ croak("No name for escape sequence $num");
+ }
+ my $prefix = ($1 == 4) ? 'on_' : q{};
+ push(@result, "${prefix}r${r}g${g}b${b}");
+ } else {
+ $num =~ s{ ( \A | ; ) 0+ (\d) }{$1$2}xmsg;
+ my $name = $ATTRIBUTES_R{$num};
+ if (!defined($name)) {
+ croak("No name for escape sequence $num");
+ }
+ push(@result, $name);
}
- push(@result, $name);
}
# Return the attribute names.
@@ -484,7 +512,7 @@ sub colored {
my ($first, @rest) = @_;
my ($string, @codes);
if (ref($first) && ref($first) eq 'ARRAY') {
- @codes = @{$first};
+ @codes = @{$first};
$string = join(q{}, @rest);
} else {
$string = $first;
@@ -492,7 +520,7 @@ sub colored {
}
# Return the string unmolested if colors are disabled.
- if ($ENV{ANSI_COLORS_DISABLED}) {
+ if ($ENV{ANSI_COLORS_DISABLED} || defined($ENV{NO_COLOR})) {
return $string;
}
@@ -514,19 +542,20 @@ sub colored {
# Define a new color alias, or return the value of an existing alias.
#
# $alias - The color alias to define
-# $color - The standard color the alias will correspond to (optional)
+# @color - The color attributes the alias will correspond to (optional)
#
-# Returns: The standard color value of the alias
+# Returns: The standard color value of the alias as a string (may be multiple
+# attributes separated by spaces)
# undef if one argument was given and the alias was not recognized
# Throws: Text exceptions for invalid alias names, attempts to use a
# standard color name as an alias, or an unknown standard color name
sub coloralias {
- my ($alias, $color) = @_;
- if (!defined($color)) {
- if (!exists $ALIASES{$alias}) {
- return;
+ my ($alias, @color) = @_;
+ if (!@color) {
+ if (exists($ALIASES{$alias})) {
+ return join(q{ }, @{ $ALIASES{$alias} });
} else {
- return $ATTRIBUTES_R{ $ALIASES{$alias} };
+ return;
}
}
@@ -538,14 +567,23 @@ sub coloralias {
croak(qq{Invalid alias name "$alias"});
} elsif ($ATTRIBUTES{$alias}) {
croak(qq{Cannot alias standard color "$alias"});
- } elsif (!exists $ATTRIBUTES{$color}) {
- croak(qq{Invalid attribute name "$color"});
}
## use critic
+ # Split on whitespace and expand aliases.
+ @color = map { split } @color;
+ @color = map { defined($ALIASES{$_}) ? @{ $ALIASES{$_} } : $_ } @color;
+
+ # Check that all of the attributes are valid.
+ for my $attribute (@color) {
+ if (!exists($ATTRIBUTES{$attribute})) {
+ croak(qq{Invalid attribute name "$attribute"});
+ }
+ }
+
# Set the alias and return.
- $ALIASES{$alias} = $ATTRIBUTES{$color};
- return $color;
+ $ALIASES{$alias} = [@color];
+ return join(q{ }, @color);
}
# Given a string, strip the ANSI color codes out of that string and return the
@@ -574,9 +612,12 @@ sub colorvalid {
my (@codes) = @_;
@codes = map { split(q{ }, lc) } @codes;
for my $code (@codes) {
- if (!(defined($ATTRIBUTES{$code}) || defined($ALIASES{$code}))) {
- return;
+ next if defined($ATTRIBUTES{$code});
+ next if defined($ALIASES{$code});
+ if ($code =~ m{ \A (?: on_ )? r (\d+) g (\d+) b (\d+) \z }xms) {
+ next if ($1 <= 255 && $2 <= 255 && $3 <= 255);
}
+ return;
}
return 1;
}
@@ -599,7 +640,7 @@ command.com NT ESC Delvare SSH OpenSSH aixterm ECMA-048 Fraktur overlining
Zenin reimplemented Allbery PUSHCOLOR POPCOLOR LOCALCOLOR openmethods.com
openmethods.com. grey ATTR urxvt mistyped prepending Bareword filehandle
Cygwin Starsinic aterm rxvt CPAN RGB Solarized Whitespace alphanumerics
-undef
+undef CLICOLOR NNN GGG RRR
=head1 SYNOPSIS
@@ -617,8 +658,8 @@ undef
# Map escape sequences back to color names.
use Term::ANSIColor 1.04 qw(uncolor);
- my $names = uncolor('01;31');
- print join(q{ }, @{$names}), "\n";
+ my @names = uncolor('01;31');
+ print join(q{ }, @names), "\n";
# Strip all color escape sequences.
use Term::ANSIColor 2.01 qw(colorstrip);
@@ -666,16 +707,20 @@ other through constants. It also offers the utility functions uncolor(),
colorstrip(), colorvalid(), and coloralias(), which have to be explicitly
imported to be used (see L</SYNOPSIS>).
+If you are using Term::ANSIColor in a console command, consider supporting the
+CLICOLOR standard. See L</"Supporting CLICOLOR"> for more information.
+
See L</COMPATIBILITY> for the versions of Term::ANSIColor that introduced
particular features and the versions of Perl that included them.
=head2 Supported Colors
-Terminal emulators that support color divide into three types: ones that
-support only eight colors, ones that support sixteen, and ones that
-support 256. This module provides the ANSI escape codes for all of them.
-These colors are referred to as ANSI colors 0 through 7 (normal), 8
-through 15 (16-color), and 16 through 255 (256-color).
+Terminal emulators that support color divide into four types: ones that
+support only eight colors, ones that support sixteen, ones that support 256,
+and ones that support 24-bit color. This module provides the ANSI escape
+codes for all of them. These colors are referred to as ANSI colors 0 through
+7 (normal), 8 through 15 (16-color), 16 through 255 (256-color), and true
+color (called direct-color by B<xterm>).
Unfortunately, interpretation of colors 0 through 7 often depends on
whether the emulator supports eight colors or sixteen colors. Emulators
@@ -698,6 +743,16 @@ C<red> is color 1 and C<bright_red> is color 9. The same applies for
background colors: C<on_red> is the normal color and C<on_bright_red> is
the bright color. Capitalize these strings for the constant interface.
+There is unfortunately no way to know whether the current emulator
+supports more than eight colors, which makes the choice of colors
+difficult. The most conservative choice is to use only the regular
+colors, which are at least displayed on all emulators. However, they will
+appear dark in sixteen-color terminal emulators, including most common
+emulators in UNIX X environments. If you know the display is one of those
+emulators, you may wish to use the bright variants instead. Even better,
+offer the user a way to configure the colors for a given application to
+fit their terminal emulator.
+
For 256-color emulators, this module additionally provides C<ansi0>
through C<ansi15>, which are the same as colors 0 through 15 in
sixteen-color emulators but use the 256-color escape syntax, C<grey0>
@@ -711,15 +766,12 @@ completely on non-256-color terminals or may be misinterpreted and produce
random behavior. Additional attributes such as blink, italic, or bold may
not work with the 256-color palette.
-There is unfortunately no way to know whether the current emulator
-supports more than eight colors, which makes the choice of colors
-difficult. The most conservative choice is to use only the regular
-colors, which are at least displayed on all emulators. However, they will
-appear dark in sixteen-color terminal emulators, including most common
-emulators in UNIX X environments. If you know the display is one of those
-emulators, you may wish to use the bright variants instead. Even better,
-offer the user a way to configure the colors for a given application to
-fit their terminal emulator.
+For true color emulators, this module supports attributes of the form C<<
+rI<NNN>gI<NNN>bI<NNN> >> and C<< on_rI<NNN>gI<NNN>bI<NNN> >> for all values of
+I<NNN> between 0 and 255. These represent foreground and background colors,
+respectively, with the RGB values given by the I<NNN> numbers. These colors
+may be ignored completely on non-true-color terminals or may be misinterpreted
+and produce random behavior.
=head2 Function Interface
@@ -766,6 +818,12 @@ C<rgb000> or C<rgb515>. Similarly, the recognized background colors are:
plus C<on_rgbI<RGB>> for I<R>, I<G>, and I<B> values from 0 to 5.
+For true color terminals, the recognized foreground colors are C<<
+rI<RRR>gI<GGG>bI<BBB> >> for I<RRR>, I<GGG>, and I<BBB> values between 0 and
+255. Similarly, the recognized background colors are C<<
+on_rI<RRR>gI<GGG>bI<BBB> >> for I<RRR>, I<GGG>, and I<BBB> values between 0
+and 255.
+
For any of the above listed attributes, case is not significant.
Attributes, once set, last until they are unset (by printing the attribute
@@ -808,6 +866,13 @@ default background color for the next line. Programs like pagers can also
be confused by attributes that span lines. Normally you'll want to set
$Term::ANSIColor::EACHLINE to C<"\n"> to use this feature.
+Particularly consider setting $Term::ANSIColor::EACHLINE if you are
+interleaving output to standard output and standard error and you aren't
+flushing standard output (via autoflush() or setting C<$|>). If you don't,
+the code to reset the color may unexpectedly sit in the standard output buffer
+rather than going to the display, causing standard error output to appear in
+the wrong color.
+
=item uncolor(ESCAPE)
uncolor() performs the opposite translation as color(), turning escape
@@ -827,17 +892,26 @@ together in scalar context. Its arguments are not modified.
colorvalid() takes attribute strings the same as color() and returns true
if all attributes are known and false otherwise.
-=item coloralias(ALIAS[, ATTR])
+=item coloralias(ALIAS[, ATTR ...])
-If ATTR is specified, coloralias() sets up an alias of ALIAS for the
-standard color ATTR. From that point forward, ALIAS can be passed into
-color(), colored(), and colorvalid() and will have the same meaning as
-ATTR. One possible use of this facility is to give more meaningful names
-to the 256-color RGB colors. Only ASCII alphanumerics, C<.>, C<_>, and
-C<-> are allowed in alias names.
+If ATTR is specified, it is interpreted as a list of space-separated strings
+naming attributes or existing aliases. In this case, coloralias() sets up an
+alias of ALIAS for the set of attributes given by ATTR. From that point
+forward, ALIAS can be passed into color(), colored(), and colorvalid() and
+will have the same meaning as the sequence of attributes given in ATTR. One
+possible use of this facility is to give more meaningful names to the
+256-color RGB colors. Only ASCII alphanumerics, C<.>, C<_>, and C<-> are
+allowed in alias names.
-If ATTR is not specified, coloralias() returns the standard color name to
-which ALIAS is aliased, if any, or undef if ALIAS does not exist.
+If ATTR includes aliases, those aliases will be expanded at definition time
+and their values will be used to define the new alias. This means that if you
+define an alias A in terms of another alias B, and then later redefine alias
+B, the value of alias A will not change.
+
+If ATTR is not specified, coloralias() returns the standard attribute or
+attributes to which ALIAS is aliased, if any, or undef if ALIAS does not
+exist. If it is aliased to multiple attributes, the return value will be a
+single string and the attributes will be separated by spaces.
This is the same facility used by the ANSI_COLORS_ALIASES environment
variable (see L</ENVIRONMENT> below) but can be used at runtime, not just
@@ -904,6 +978,8 @@ to explicitly import at least C<RESET>, as in:
use Term::ANSIColor 4.00 qw(RESET :constants256);
+True color and aliases are not supported by the constant interface.
+
When using the constants, if you don't want to have to remember to add the
C<, RESET> at the end of each print line, you can set
$Term::ANSIColor::AUTORESET to a true value. Then, the display mode will
@@ -925,13 +1001,14 @@ over $Term::ANSIColor::AUTORESET, and the latter is ignored.
The subroutine interface has the advantage over the constants interface in
that only two subroutines are exported into your namespace, versus
-thirty-eight in the constants interface. On the flip side, the constants
-interface has the advantage of better compile time error checking, since
-misspelled names of colors or attributes in calls to color() and colored()
-won't be caught until runtime whereas misspelled names of constants will
-be caught at compile time. So, pollute your namespace with almost two
-dozen subroutines that you may not even use that often, or risk a silly
-bug by mistyping an attribute. Your choice, TMTOWTDI after all.
+thirty-eight in the constants interface, and aliases and true color attributes
+are supported. On the flip side, the constants interface has the advantage of
+better compile time error checking, since misspelled names of colors or
+attributes in calls to color() and colored() won't be caught until runtime
+whereas misspelled names of constants will be caught at compile time. So,
+pollute your namespace with almost two dozen subroutines that you may not even
+use that often, or risk a silly bug by mistyping an attribute. Your choice,
+TMTOWTDI after all.
=head2 The Color Stack
@@ -971,6 +1048,31 @@ PUSHCOLOR pushes the attributes set by its argument, which is normally a
string of color constants. It can't ask the terminal what the current
attributes are.
+=head2 Supporting CLICOLOR
+
+L<https://bixense.com/clicolors/> proposes a standard for enabling and
+disabling color output from console commands using two environment variables,
+CLICOLOR and CLICOLOR_FORCE. Term::ANSIColor cannot automatically support
+this standard, since the correct action depends on where the output is going
+and Term::ANSIColor may be used in a context where colors should always be
+generated even if CLICOLOR is set in the environment. But you can use the
+supported environment variable ANSI_COLORS_DISABLED to implement CLICOLOR in
+your own programs with code like this:
+
+ if (exists($ENV{CLICOLOR}) && $ENV{CLICOLOR} == 0) {
+ if (!$ENV{CLICOLOR_FORCE}) {
+ $ENV{ANSI_COLORS_DISABLED} = 1;
+ }
+ }
+
+If you are using the constant interface, be sure to include this code before
+you use any color constants (such as at the very top of your script), since
+this environment variable is only honored the first time a color constant is
+seen.
+
+Be aware that this will export ANSI_COLORS_DISABLED to any child processes of
+your program as well.
+
=head1 DIAGNOSTICS
=over 4
@@ -1070,9 +1172,10 @@ The format is:
ANSI_COLORS_ALIASES='newcolor1=oldcolor1,newcolor2=oldcolor2'
-Whitespace is ignored.
+Whitespace is ignored. The alias value can be a single attribute or a
+space-separated list of attributes.
-For example the L<Solarized|http://ethanschoonover.com/solarized> colors
+For example the L<Solarized|https://ethanschoonover.com/solarized> colors
can be mapped with:
ANSI_COLORS_ALIASES='\
@@ -1095,11 +1198,20 @@ coloralias() for an equivalent facility that can be used at runtime.
=item ANSI_COLORS_DISABLED
If this environment variable is set to a true value, all of the functions
-defined by this module (color(), colored(), and all of the constants not
-previously used in the program) will not output any escape sequences and
-instead will just return the empty string or pass through the original
-text as appropriate. This is intended to support easy use of scripts
-using this module on platforms that don't support ANSI escape sequences.
+defined by this module (color(), colored(), and all of the constants) will not
+output any escape sequences and instead will just return the empty string or
+pass through the original text as appropriate. This is intended to support
+easy use of scripts using this module on platforms that don't support ANSI
+escape sequences.
+
+=item NO_COLOR
+
+If this environment variable is set to any value, it suppresses generation of
+escape sequences the same as if ANSI_COLORS_DISABLED is set to a true value.
+This implements the L<https://no-color.org/> informal standard. Programs that
+want to enable color despite NO_COLOR being set will need to unset that
+environment variable before any constant or function provided by this module
+is used.
=back
@@ -1135,12 +1247,27 @@ $Term::ANSIColor::AUTOLOCAL was changed to take precedence over
$Term::ANSIColor::AUTORESET, rather than the other way around, in
Term::ANSIColor 4.00, included in Perl 5.17.8.
-C<ansi16> through C<ansi255>, as aliases for the C<rgb> and C<grey>
-colors, and the corresponding C<on_ansi> names and C<ANSI> and C<ON_ANSI>
-constants, were added in Term::ANSIColor 4.06.
+C<ansi16> through C<ansi255>, as aliases for the C<rgb> and C<grey> colors,
+and the corresponding C<on_ansi> names and C<ANSI> and C<ON_ANSI> constants
+were added in Term::ANSIColor 4.06, included in Perl 5.25.7.
+
+Support for true color (the C<rNNNgNNNbNNN> and C<on_rNNNgNNNbNNN>
+attributes), defining aliases in terms of other aliases, and aliases mapping
+to multiple attributes instead of only a single attribute was added in
+Term::ANSIColor 5.00.
+
+Support for NO_COLOR was added in Term::ANSIColor 5.01.
=head1 RESTRICTIONS
+Both colored() and many uses of the color constants will add the reset escape
+sequence after a newline. If a program mixes colored output to standard
+output with output to standard error, this can result in the standard error
+text having the wrong color because the reset escape sequence hasn't yet been
+flushed to the display (since standard output to a terminal is line-buffered
+by default). To avoid this, either set autoflush() on STDOUT or set
+$Term::ANSIColor::EACHLINE to C<"\n">.
+
It would be nice if one could leave off the commas around the constants
entirely and just say:
@@ -1210,18 +1337,20 @@ table. It is not believed to be fully supported by any of the terminals
listed, although it's displayed as green in the Linux console, but it is
reportedly supported by urxvt.
-Note that codes 6 (rapid blink) and 9 (strike-through) are specified in
-ANSI X3.64 and ECMA-048 but are not commonly supported by most displays
-and emulators and therefore aren't supported by this module at the present
-time. ECMA-048 also specifies a large number of other attributes,
-including a sequence of attributes for font changes, Fraktur characters,
-double-underlining, framing, circling, and overlining. As none of these
-attributes are widely supported or useful, they also aren't currently
-supported by this module.
+Note that codes 6 (rapid blink) and 9 (strike-through) are specified in ANSI
+X3.64 and ECMA-048 but are not commonly supported by most displays and
+emulators and therefore aren't supported by this module. ECMA-048 also
+specifies a large number of other attributes, including a sequence of
+attributes for font changes, Fraktur characters, double-underlining, framing,
+circling, and overlining. As none of these attributes are widely supported or
+useful, they also aren't currently supported by this module.
Most modern X terminal emulators support 256 colors. Known to not support
those colors are aterm, rxvt, Terminal.app, and TTY/VC.
+For information on true color support in various terminal emulators, see
+L<True Colour support|https://gist.github.com/XVilka/8346728>.
+
=head1 AUTHORS
Original idea (using constants) by Zenin, reimplemented using subs by Russ
@@ -1234,10 +1363,10 @@ voice solutions.
=head1 COPYRIGHT AND LICENSE
-Copyright 1996 Zenin
+Copyright 1996-1998, 2000-2002, 2005-2006, 2008-2018, 2020 Russ Allbery
+<rra@cpan.org>
-Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2005, 2006, 2008, 2009, 2010,
-2011, 2012, 2013, 2014, 2015, 2016 Russ Allbery <rra@cpan.org>
+Copyright 1996 Zenin
Copyright 2012 Kurt Starsinic <kstarsinic@gmail.com>
@@ -1254,7 +1383,7 @@ The CPAN module L<Term::Chrome> provides a different interface using
objects and operator overloading.
ECMA-048 is available on-line (at least at the time of this writing) at
-L<http://www.ecma-international.org/publications/standards/Ecma-048.htm>.
+L<https://www.ecma-international.org/publications/standards/Ecma-048.htm>.
ISO 6429 is available from ISO for a charge; the author of this module
does not own a copy of it. Since the source material for ISO 6429 was
@@ -1262,11 +1391,24 @@ ECMA-048 and the latter is available for free, there seems little reason
to obtain the ISO standard.
The 256-color control sequences are documented at
-L<http://invisible-island.net/xterm/ctlseqs/ctlseqs.html> (search for
+L<https://invisible-island.net/xterm/ctlseqs/ctlseqs.html> (search for
256-color).
+Information about true color support in various terminal emulators and test
+programs you can run to check the true color support in your terminal emulator
+are available at L<https://gist.github.com/XVilka/8346728>.
+
+L<CLICOLORS|https://bixense.com/clicolors/> and
+L<NO_COLOR|https://no-color.org/> are useful standards to be aware of, and
+ideally follow, for any application using color. Term::ANSIColor complies
+with the latter.
+
The current version of this module is always available from its web site
at L<https://www.eyrie.org/~eagle/software/ansicolor/>. It is also part
of the Perl core distribution as of 5.6.0.
=cut
+
+# Local Variables:
+# copyright-at-end-flag: t
+# End:
diff --git a/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/lib/Test/RRA.pm b/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/lib/Test/RRA.pm
index bcd653240f4..1d5e4db23d4 100644
--- a/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/lib/Test/RRA.pm
+++ b/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/lib/Test/RRA.pm
@@ -5,28 +5,46 @@
# by both C packages with Automake and by stand-alone Perl modules. See
# Test::RRA::Automake for additional functions specifically for C Automake
# distributions.
+#
+# SPDX-License-Identifier: MIT
package Test::RRA;
-use 5.006;
+use 5.008;
+use base qw(Exporter);
use strict;
use warnings;
-use Exporter;
+use Carp qw(croak);
use File::Temp;
-use Test::More;
-# For Perl 5.006 compatibility.
-## no critic (ClassHierarchies::ProhibitExplicitISA)
+# Abort if Test::More was loaded before Test::RRA to be sure that we get the
+# benefits of the Test::More probing below.
+if ($INC{'Test/More.pm'}) {
+ croak('Test::More loaded before Test::RRA');
+}
+
+# Red Hat's base perl package doesn't include Test::More (one has to install
+# the perl-core package in addition). Try to detect this and skip any Perl
+# tests if Test::More is not present. This relies on Test::RRA being included
+# before Test::More.
+eval {
+ require Test::More;
+ Test::More->import();
+};
+if ($@) {
+ print "1..0 # SKIP Test::More required for test\n"
+ or croak('Cannot write to stdout');
+ exit 0;
+}
# Declare variables that should be set in BEGIN for robustness.
-our (@EXPORT_OK, @ISA, $VERSION);
+our (@EXPORT_OK, $VERSION);
# Set $VERSION and everything export-related in a BEGIN block for robustness
# against circular module loading (not that we load any modules, but
# consistency is good).
BEGIN {
- @ISA = qw(Exporter);
@EXPORT_OK = qw(
is_file_contents skip_unless_author skip_unless_automated use_prereq
);
@@ -34,7 +52,7 @@ BEGIN {
# This version should match the corresponding rra-c-util release, but with
# two digits for the minor version, including a leading zero if necessary,
# so that it will sort properly.
- $VERSION = '6.02';
+ $VERSION = '8.01';
}
# Compare a string to the contents of a file, similar to the standard is()
@@ -59,22 +77,27 @@ sub is_file_contents {
return;
}
- # Otherwise, we show a diff, but only if we have IPC::System::Simple.
- eval { require IPC::System::Simple };
+ # Otherwise, we show a diff, but only if we have IPC::System::Simple and
+ # diff succeeds. Otherwise, we fall back on showing the full expected and
+ # seen output.
+ eval {
+ require IPC::System::Simple;
+
+ my $tmp = File::Temp->new();
+ my $tmpname = $tmp->filename;
+ print {$tmp} $got or BAIL_OUT("Cannot write to $tmpname: $!\n");
+ my @command = ('diff', '-u', $expected, $tmpname);
+ my $diff = IPC::System::Simple::capturex([0 .. 1], @command);
+ diag($diff);
+ };
if ($@) {
- ok(0, $message);
- return;
+ diag('Expected:');
+ diag($expected);
+ diag('Seen:');
+ diag($data);
}
- # They're not equal. Write out what we got so that we can run diff.
- my $tmp = File::Temp->new();
- my $tmpname = $tmp->filename;
- print {$tmp} $got or BAIL_OUT("Cannot write to $tmpname: $!\n");
- my @command = ('diff', '-u', $expected, $tmpname);
- my $diff = IPC::System::Simple::capturex([0 .. 1], @command);
- diag($diff);
-
- # Remove the temporary file and report failure.
+ # Report failure.
ok(0, $message);
return;
}
@@ -89,7 +112,7 @@ sub is_file_contents {
sub skip_unless_author {
my ($description) = @_;
if (!$ENV{AUTHOR_TESTING}) {
- plan skip_all => "$description only run for author";
+ plan(skip_all => "$description only run for author");
}
return;
}
@@ -108,7 +131,7 @@ sub skip_unless_automated {
for my $env (qw(AUTOMATED_TESTING RELEASE_TESTING AUTHOR_TESTING)) {
return if $ENV{$env};
}
- plan skip_all => "$description normally skipped";
+ plan(skip_all => "$description normally skipped");
return;
}
@@ -150,14 +173,14 @@ sub use_prereq {
use $module $version \@imports;
1;
};
- $error = $@;
+ $error = $@;
$sigdie = $SIG{__DIE__} || undef;
}
# If the use failed for any reason, skip the test.
if (!$result || $error) {
my $name = length($version) > 0 ? "$module $version" : $module;
- plan skip_all => "$name required for test";
+ plan(skip_all => "$name required for test");
}
# If the module set $SIG{__DIE__}, we cleared that via local. Restore it.
@@ -200,6 +223,14 @@ This module collects utility functions that are useful for Perl test scripts.
It assumes Russ Allbery's Perl module layout and test conventions and will
only be useful for other people if they use the same conventions.
+This module B<must> be loaded before Test::More or it will abort during
+import. It will skip the test (by printing a skip message to standard output
+and exiting with status 0, equivalent to C<plan skip_all>) during import if
+Test::More is not available. This allows tests written in Perl using this
+module to be skipped if run on a system with Perl but not Test::More, such as
+Red Hat systems with the C<perl> package but not the C<perl-core> package
+installed.
+
=head1 FUNCTIONS
None of these functions are imported by default. The ones used by a script
@@ -244,7 +275,9 @@ Russ Allbery <eagle@eyrie.org>
=head1 COPYRIGHT AND LICENSE
-Copyright 2013, 2014 The Board of Trustees of the Leland Stanford Junior
+Copyright 2016, 2018-2019 Russ Allbery <eagle@eyrie.org>
+
+Copyright 2013-2014 The Board of Trustees of the Leland Stanford Junior
University
Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -277,3 +310,7 @@ by the L<Lancaster
Consensus|https://github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/lancaster-consensus.md>.
=cut
+
+# Local Variables:
+# copyright-at-end-flag: t
+# End:
diff --git a/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/lib/Test/RRA/Config.pm b/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/lib/Test/RRA/Config.pm
index bdb31e60c0f..80a15739410 100644
--- a/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/lib/Test/RRA/Config.pm
+++ b/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/lib/Test/RRA/Config.pm
@@ -4,27 +4,25 @@
# configuration file to store some package-specific data. This module loads
# that configuration and provides the namespace for the configuration
# settings.
+#
+# SPDX-License-Identifier: MIT
package Test::RRA::Config;
-use 5.006;
+use 5.008;
+use base qw(Exporter);
use strict;
use warnings;
-# For Perl 5.006 compatibility.
-## no critic (ClassHierarchies::ProhibitExplicitISA)
-
-use Exporter;
use Test::More;
# Declare variables that should be set in BEGIN for robustness.
-our (@EXPORT_OK, @ISA, $VERSION);
+our (@EXPORT_OK, $VERSION);
# Set $VERSION and everything export-related in a BEGIN block for robustness
# against circular module loading (not that we load any modules, but
# consistency is good).
BEGIN {
- @ISA = qw(Exporter);
@EXPORT_OK = qw(
$COVERAGE_LEVEL @COVERAGE_SKIP_TESTS @CRITIC_IGNORE $LIBRARY_PATH
$MINIMUM_VERSION %MINIMUM_VERSION @MODULE_VERSION_IGNORE
@@ -34,7 +32,7 @@ BEGIN {
# This version should match the corresponding rra-c-util release, but with
# two digits for the minor version, including a leading zero if necessary,
# so that it will sort properly.
- $VERSION = '6.02';
+ $VERSION = '8.01';
}
# If C_TAP_BUILD or C_TAP_SOURCE are set in the environment, look for
@@ -185,9 +183,9 @@ Russ Allbery <eagle@eyrie.org>
=head1 COPYRIGHT AND LICENSE
-Copyright 2015, 2016 Russ Allbery <eagle@eyrie.org>
+Copyright 2015-2016, 2019 Russ Allbery <eagle@eyrie.org>
-Copyright 2013, 2014 The Board of Trustees of the Leland Stanford Junior
+Copyright 2013-2014 The Board of Trustees of the Leland Stanford Junior
University
Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -220,3 +218,7 @@ The C TAP Harness test driver and libraries for TAP-based C testing are
available from L<https://www.eyrie.org/~eagle/software/c-tap-harness/>.
=cut
+
+# Local Variables:
+# copyright-at-end-flag: t
+# End:
diff --git a/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/basic256.t b/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/basic256.t
index ae06d1ada5c..6f639f80cf6 100644
--- a/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/basic256.t
+++ b/gnu/usr.bin/perl/cpan/Term-ANSIColor/t/module/basic256.t
@@ -3,20 +3,21 @@
# Tests for 256-color support.
#
# Copyright 2012 Kurt Starsinic <kstarsinic@gmail.com>
-# Copyright 2012, 2013, 2016 Russ Allbery <rra@cpan.org>
+# Copyright 2012-2013, 2016, 2020 Russ Allbery <rra@cpan.org>
#
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
+use 5.008;
use strict;
use warnings;
-use Test::More tests => 94;
+use Test::More tests => 100;
# Load the module.
BEGIN {
delete $ENV{ANSI_COLORS_ALIASES};
delete $ENV{ANSI_COLORS_DISABLED};
+ delete $ENV{NO_COLOR};
use_ok('Term::ANSIColor', qw(:constants256 color uncolor colorvalid));
}
@@ -98,6 +99,16 @@ is(GREY0, q{}, '...and for GREY0');
is(GREY23, q{}, '...and for GREY23');
delete $ENV{ANSI_COLORS_DISABLED};
+# Do the same with NO_COLOR.
+local $ENV{NO_COLOR} = 0;
+is(ANSI0, q{}, 'NO_COLOR works for ANSI0');
+is(ANSI15, q{}, '...and for ANSI15');
+is(RGB000, q{}, '...and for RGB000');
+is(RGB555, q{}, '...and for RGB555');
+is(GREY0, q{}, '...and for GREY0');
+is(GREY23, q{}, '...and for GREY23');
+delete $ENV{NO_COLOR};
+
# Do the same for AUTORESET.
$Term::ANSIColor::AUTORESET = 1;
is((ANSI0 't'), "\e[38;5;0mt\e[0m", 'AUTORESET works for ANSI0');
diff --git a/gnu/usr.bin/perl/cpan/Term-ReadKey/META.yml b/gnu/usr.bin/perl/cpan/Term-ReadKey/META.yml
deleted file mode 100644
index 1e46f325428..00000000000
--- a/gnu/usr.bin/perl/cpan/Term-ReadKey/META.yml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-abstract: 'Change terminal modes, and perform non-blocking reads.'
-author:
- - 'Kenneth Albanowski'
- - 'Jonathan Stowe'
-build_requires:
- ExtUtils::MakeMaker: '6.58'
-configure_requires:
- ExtUtils::MakeMaker: '6.58'
-dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010'
-license: perl
-meta-spec:
- url: http://module-build.sourceforge.net/META-spec-v1.4.html
- version: '1.4'
-name: TermReadKey
-no_index:
- file:
- - Configure.pm
- package:
- - Configure
-provides:
- Term::ReadKey:
- file: ReadKey.pm.PL
- version: '2.38'
-resources:
- repository: https://github.com/jonathanstowe/TermReadKey.git
-version: '2.38'
-x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder.pm
index b61bd5024da..1a49b7a8e7c 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder.pm
@@ -4,7 +4,7 @@ use 5.006;
use strict;
use warnings;
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
BEGIN {
if( $] < 5.008 ) {
@@ -63,7 +63,8 @@ sub _add_ts_hooks {
$todo = ${"$cpkg\::TODO"} if $cpkg;
$todo = ${"$epkg\::TODO"} if $epkg && !$todo;
- return $e unless defined $todo;
+ return $e unless defined($todo);
+ return $e unless length($todo);
# Turn a diag into a todo diag
return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 'Test2::Event::Diag';
@@ -390,7 +391,7 @@ sub name {
sub reset { ## no critic (Subroutines::ProhibitBuiltinHomonyms)
my ($self, %params) = @_;
- Test2::API::test2_set_is_end(0);
+ Test2::API::test2_unset_is_end();
# We leave this a global because it has to be localized and localizing
# hash keys is just asking for pain. Also, it was documented.
@@ -695,7 +696,7 @@ sub _ok_debug {
my $self = shift;
my ($trace, $orig_name) = @_;
- my $is_todo = defined($self->todo);
+ my $is_todo = $self->in_todo;
my $msg = $is_todo ? "Failed (TODO)" : "Failed";
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Module.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Module.pm
index 1ca914dee65..6e550eb6f7f 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Module.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Module.pm
@@ -7,7 +7,7 @@ use Test::Builder;
require Exporter;
our @ISA = qw(Exporter);
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
=head1 NAME
@@ -172,4 +172,11 @@ sub builder {
return Test::Builder->new;
}
+=head1 SEE ALSO
+
+L<< Test2::Manual::Tooling::TestBuilder >> describes the improved
+options for writing testing modules provided by L<< Test2 >>.
+
+=cut
+
1;
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester.pm
index 469336d8755..da98e3d9a07 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester.pm
@@ -1,7 +1,7 @@
package Test::Builder::Tester;
use strict;
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
use Test::Builder;
use Symbol;
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm
index 0bf39c60d71..116e6057d85 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm
@@ -1,7 +1,7 @@
package Test::Builder::Tester::Color;
use strict;
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
require Test::Builder::Tester;
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/More.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/More.pm
index 473c86eba63..b2f82286b44 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/More.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/More.pm
@@ -17,7 +17,7 @@ sub _carp {
return warn @_, " at $file line $line\n";
}
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
use Test::Builder::Module;
our @ISA = qw(Test::Builder::Module);
@@ -1402,7 +1402,7 @@ You then know the thing you had todo is done and can remove the
TODO flag.
The nice part about todo tests, as opposed to simply commenting out a
-block of tests, is it's like having a programmatic todo list. You know
+block of tests, is that it is like having a programmatic todo list. You know
how much work is left to be done, you're aware of what bugs there are,
and you'll know immediately when they're fixed.
@@ -1848,7 +1848,7 @@ might get a "Wide character in print" warning. Using
C<< binmode STDOUT, ":utf8" >> will not fix it.
L<Test::Builder> (which powers
Test::More) duplicates STDOUT and STDERR. So any changes to them,
-including changing their output disciplines, will not be seem by
+including changing their output disciplines, will not be seen by
Test::More.
One work around is to apply encodings to STDOUT and STDERR as early
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Simple.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Simple.pm
index 9218173bc50..6ff8183b804 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Simple.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Simple.pm
@@ -4,7 +4,7 @@ use 5.006;
use strict;
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
use Test::Builder::Module;
our @ISA = qw(Test::Builder::Module);
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester.pm
index 19cbf665712..1cc7bd179e7 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester.pm
@@ -18,7 +18,7 @@ require Exporter;
use vars qw( @ISA @EXPORT );
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
@EXPORT = qw( run_tests check_tests check_test cmp_results show_space );
@ISA = qw( Exporter );
@@ -393,7 +393,7 @@ The easiest way to test is to do something like
}
);
-this will execute the is_mystyle_eq test, capturing it's results and
+this will execute the is_mystyle_eq test, capturing its results and
checking that they are what was expected.
You may need to examine the test results in a more flexible way, for
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Capture.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Capture.pm
index e28dbf83432..c5c454215f5 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Capture.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Capture.pm
@@ -2,7 +2,7 @@ use strict;
package Test::Tester::Capture;
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
use Test::Builder;
@@ -13,14 +13,8 @@ use vars qw( @ISA );
# Make Test::Tester::Capture thread-safe for ithreads.
BEGIN {
use Config;
- if( $] >= 5.008 && $Config{useithreads} ) {
- require threads::shared;
- threads::shared->import;
- }
- else {
- *share = sub { 0 };
- *lock = sub { 0 };
- }
+ *share = sub { 0 };
+ *lock = sub { 0 };
}
my $Curr_Test = 0; share($Curr_Test);
@@ -30,7 +24,7 @@ my $Prem_Diag = {diag => ""}; share($Curr_Test);
sub new
{
# Test::Tester::Capgture::new used to just return __PACKAGE__
- # because Test::Builder::new enforced it's singleton nature by
+ # because Test::Builder::new enforced its singleton nature by
# return __PACKAGE__. That has since changed, Test::Builder::new now
# returns a blessed has and around version 0.78, Test::Builder::todo
# started wanting to modify $self. To cope with this, we now return
@@ -229,7 +223,7 @@ Test::Tester::Capture - Help testing test modules built with Test::Builder
=head1 DESCRIPTION
This is a subclass of Test::Builder that overrides many of the methods so
-that they don't output anything. It also keeps track of it's own set of test
+that they don't output anything. It also keeps track of its own set of test
results so that you can use Test::Builder based modules to perform tests on
other Test::Builder based modules.
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm
index 7cf3c0f0b52..a86ef0616c8 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm
@@ -3,7 +3,7 @@ use strict;
package Test::Tester::CaptureRunner;
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
use Test::Tester::Capture;
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Delegate.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Delegate.pm
index ebfd4e21681..2036f2ebc28 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Delegate.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Delegate.pm
@@ -3,7 +3,7 @@ use warnings;
package Test::Tester::Delegate;
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
use Scalar::Util();
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/use/ok.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/use/ok.pm
index a81bbfb64a3..4113ef59c86 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/use/ok.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/use/ok.pm
@@ -1,7 +1,7 @@
package Test::use::ok;
use 5.005;
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
__END__
diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/ok.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/ok.pm
index 66dcad8635f..f3b394d9f69 100644
--- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/ok.pm
+++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/ok.pm
@@ -1,5 +1,5 @@
package ok;
-our $VERSION = '1.302162';
+our $VERSION = '1.302175';
use strict;
use Test::More ();
diff --git a/gnu/usr.bin/perl/cpan/Text-Balanced/lib/Text/Balanced.pm b/gnu/usr.bin/perl/cpan/Text-Balanced/lib/Text/Balanced.pm
index 4fbb1bc6315..f1a5780a0b9 100644
--- a/gnu/usr.bin/perl/cpan/Text-Balanced/lib/Text/Balanced.pm
+++ b/gnu/usr.bin/perl/cpan/Text-Balanced/lib/Text/Balanced.pm
@@ -1508,7 +1508,7 @@ C<extract_tagged> returns the complete text up to the point of failure.
If the string is "PARA", C<extract_tagged> returns only the first paragraph
after the tag (up to the first line that is either empty or contains
only whitespace characters).
-If the string is "", the default behaviour (i.e. failure) is reinstated.
+If the string is "", the the default behaviour (i.e. failure) is reinstated.
For example, suppose the start tag "/para" introduces a paragraph, which then
continues until the next "/endpara" tag or until another "/para" tag is
diff --git a/gnu/usr.bin/perl/cpan/Time-Piece/Piece.pm b/gnu/usr.bin/perl/cpan/Time-Piece/Piece.pm
index d5624636c6f..f5d87cd0316 100644
--- a/gnu/usr.bin/perl/cpan/Time-Piece/Piece.pm
+++ b/gnu/usr.bin/perl/cpan/Time-Piece/Piece.pm
@@ -19,7 +19,7 @@ our %EXPORT_TAGS = (
':override' => 'internal',
);
-our $VERSION = '1.33';
+our $VERSION = '1.3401';
XSLoader::load( 'Time::Piece', $VERSION );
@@ -126,6 +126,7 @@ sub _mktime {
if ($class->_is_time_struct($time)) {
my @new_time = @$time;
my @tm_parts = (@new_time[c_sec .. c_mon], $new_time[c_year]+1900);
+
$new_time[c_epoch] = $islocal ? timelocal(@tm_parts) : timegm(@tm_parts);
return wantarray ? @new_time : bless [@new_time[0..9], $islocal], $class;
@@ -805,8 +806,14 @@ sub use_locale {
#get locale month/day names from posix strftime (from Piece.xs)
my $locales = _get_localization();
- $locales->{PM} ||= '';
- $locales->{AM} ||= '';
+ #If AM and PM are the same, set both to ''
+ if ( !$locales->{PM}
+ || !$locales->{AM}
+ || ( $locales->{PM} eq $locales->{AM} ) )
+ {
+ $locales->{PM} = '';
+ $locales->{AM} = '';
+ }
$locales->{pm} = lc $locales->{PM};
$locales->{am} = lc $locales->{AM};
@@ -896,7 +903,7 @@ in perlfunc will still return what you expect.
The module actually implements most of an interface described by
Larry Wall on the perl5-porters mailing list here:
-L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2000-01/msg00241.html>
+L<https://www.nntp.perl.org/group/perl.perl5.porters/2000/01/msg5283.html>
=head1 USAGE
@@ -1152,6 +1159,14 @@ moves afoot to fix that in perl. Alternatively use 64 bit perl. Or if none
of those are options, use the L<DateTime> module which has support for years
well into the future and past.
+Also, the internal representation of Time::Piece->strftime deviates from the
+standard POSIX implementation in that is uses the epoch (instead of separate
+year, month, day parts). This change was added in version 1.30. If you must
+have a more traditional strftime (which will normally never calculate day
+light saving times correctly), you can pass the date parts from Time::Piece
+into the strftime function provided by the POSIX module
+(see strftime in L<POSIX> ).
+
=head1 AUTHOR
Matt Sergeant, matt@sergeant.org
diff --git a/gnu/usr.bin/perl/cpan/Time-Piece/Seconds.pm b/gnu/usr.bin/perl/cpan/Time-Piece/Seconds.pm
index 71a4bd27f29..6aa864d97ec 100644
--- a/gnu/usr.bin/perl/cpan/Time-Piece/Seconds.pm
+++ b/gnu/usr.bin/perl/cpan/Time-Piece/Seconds.pm
@@ -1,7 +1,7 @@
package Time::Seconds;
use strict;
-our $VERSION = '1.33';
+our $VERSION = '1.3401';
use Exporter 5.57 'import';
diff --git a/gnu/usr.bin/perl/cpan/Time-Piece/t/02core_dst.t b/gnu/usr.bin/perl/cpan/Time-Piece/t/02core_dst.t
index 3f54fff233c..f4433511195 100644
--- a/gnu/usr.bin/perl/cpan/Time-Piece/t/02core_dst.t
+++ b/gnu/usr.bin/perl/cpan/Time-Piece/t/02core_dst.t
@@ -1,4 +1,9 @@
-use Test::More tests => 56;
+use Test::More;
+
+# Skip if doing a regular install
+# Avoids mystery DST bugs [rt 128240], [GH40]
+plan skip_all => "DST tests not required for installation"
+ unless ( $ENV{AUTOMATED_TESTING} );
my $is_win32 = ($^O =~ /Win32/);
my $is_qnx = ($^O eq 'qnx');
@@ -121,7 +126,7 @@ cmp_ok($t->month_last_day, '==', 31); # test more
SKIP: {
skip "Extra tests for Linux, BSD only.", 8 unless $is_linux or $is_mac or $is_bsd;
- local $ENV{TZ} = "EST5EDT4";
+ local $ENV{TZ} = "EST5EDT4,M3.2.0/2,M11.1.0/2";
Time::Piece::_tzset();
my $lt = localtime(1373371631); #2013-07-09T12:07:11
cmp_ok(scalar($lt->tzoffset), 'eq', '-14400');
@@ -136,4 +141,4 @@ SKIP: {
is ($lt->strftime("%s"), 1357733231, 'Epoch output is the same with EST');
}
-
+done_testing(56);
diff --git a/gnu/usr.bin/perl/cpan/Win32/Win32.pm b/gnu/usr.bin/perl/cpan/Win32/Win32.pm
index 7b9ab455bea..5a197e9e9e3 100644
--- a/gnu/usr.bin/perl/cpan/Win32/Win32.pm
+++ b/gnu/usr.bin/perl/cpan/Win32/Win32.pm
@@ -8,7 +8,7 @@ package Win32;
require DynaLoader;
@ISA = qw|Exporter DynaLoader|;
- $VERSION = '0.52';
+ $VERSION = '0.53';
$XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
diff --git a/gnu/usr.bin/perl/cpan/Win32/Win32.xs b/gnu/usr.bin/perl/cpan/Win32/Win32.xs
index de3764edab5..03519cbc3ad 100644
--- a/gnu/usr.bin/perl/cpan/Win32/Win32.xs
+++ b/gnu/usr.bin/perl/cpan/Win32/Win32.xs
@@ -1,7 +1,9 @@
#define WIN32_LEAN_AND_MEAN
+#include <wchar.h>
#include <wctype.h>
#include <windows.h>
#include <shlobj.h>
+#include <wchar.h>
#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
@@ -114,7 +116,7 @@ typedef void (WINAPI *PFNGetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo);
* WORD type has been replaced by unsigned short because
* WORD is already used by Perl itself.
*/
-struct {
+struct g_osver_t {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
@@ -126,7 +128,7 @@ struct {
unsigned short wSuiteMask;
BYTE wProductType;
BYTE wReserved;
-} g_osver = {0, 0, 0, 0, 0, "", 0, 0, 0, 0, 0};
+} g_osver = {0, 0, 0, 0, 0, "", 0, 0, 0, 0, 0};
BOOL g_osver_ex = TRUE;
#define ONE_K_BUFSIZE 1024
@@ -201,7 +203,7 @@ wstr_to_sv(pTHX_ WCHAR *wstr)
* characters for the characters not in the ANSI codepage.
*/
SV*
-get_unicode_env(pTHX_ WCHAR *name)
+get_unicode_env(pTHX_ const WCHAR *name)
{
SV *sv = NULL;
void *env;
@@ -377,6 +379,7 @@ get_childenv(void)
void
free_childenv(void *d)
{
+ PERL_UNUSED_ARG(d);
}
# define PerlDir_mapA(dir) (dir)
@@ -388,7 +391,7 @@ XS(w32_ExpandEnvironmentStrings)
dXSARGS;
if (items != 1)
- croak("usage: Win32::ExpandEnvironmentStrings($String);\n");
+ croak("usage: Win32::ExpandEnvironmentStrings($String)");
if (IsWin2000()) {
WCHAR value[31*1024];
@@ -536,7 +539,7 @@ XS(w32_LookupAccountName)
if (items != 5)
croak("usage: Win32::LookupAccountName($system, $account, $domain, "
- "$sid, $sidtype);\n");
+ "$sid, $sidtype)");
SIDLen = sizeof(SID);
DomLen = sizeof(Domain);
@@ -570,7 +573,7 @@ XS(w32_LookupAccountSID)
BOOL bResult;
if (items != 5)
- croak("usage: Win32::LookupAccountSID($system, $sid, $account, $domain, $sidtype);\n");
+ croak("usage: Win32::LookupAccountSID($system, $sid, $account, $domain, $sidtype)");
sid = SvPV_nolen(ST(1));
if (IsValidSid(sid)) {
@@ -601,7 +604,7 @@ XS(w32_InitiateSystemShutdown)
if (items != 5)
croak("usage: Win32::InitiateSystemShutdown($machineName, $message, "
- "$timeOut, $forceClose, $reboot);\n");
+ "$timeOut, $forceClose, $reboot)");
machineName = SvPV_nolen(ST(0));
@@ -642,7 +645,7 @@ XS(w32_AbortSystemShutdown)
char *machineName;
if (items != 1)
- croak("usage: Win32::AbortSystemShutdown($machineName);\n");
+ croak("usage: Win32::AbortSystemShutdown($machineName)");
machineName = SvPV_nolen(ST(0));
@@ -680,7 +683,7 @@ XS(w32_MsgBox)
I32 result;
if (items < 1 || items > 3)
- croak("usage: Win32::MsgBox($message [, $flags [, $title]]);\n");
+ croak("usage: Win32::MsgBox($message [, $flags [, $title]])");
if (items > 1)
flags = (DWORD)SvIV(ST(1));
@@ -696,7 +699,7 @@ XS(w32_MsgBox)
Safefree(title);
}
else {
- char *title = "Perl";
+ const char *title = "Perl";
char *msg = SvPV_nolen(ST(0));
if (items > 2)
title = SvPV_nolen(ST(2));
@@ -787,6 +790,8 @@ XS(w32_UnregisterServer)
XS(w32_GetArchName)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetArchName()");
XSRETURN_PV(getenv("PROCESSOR_ARCHITECTURE"));
}
@@ -796,6 +801,8 @@ XS(w32_GetChipName)
SYSTEM_INFO sysinfo;
HMODULE module;
PFNGetNativeSystemInfo pfnGetNativeSystemInfo;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetChipName()");
Zero(&sysinfo,1,SYSTEM_INFO);
module = GetModuleHandle("kernel32.dll");
@@ -814,8 +821,11 @@ XS(w32_GuidGen)
dXSARGS;
GUID guid;
char szGUID[50] = {'\0'};
- HRESULT hr = CoCreateGuid(&guid);
+ HRESULT hr;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GuidGen()");
+ hr = CoCreateGuid(&guid);
if (SUCCEEDED(hr)) {
LPOLESTR pStr = NULL;
#ifdef __cplusplus
@@ -896,7 +906,7 @@ XS(w32_GetFolderPath)
SV *sv;
HKEY hkey;
HKEY root = HKEY_CURRENT_USER;
- WCHAR *name = NULL;
+ const WCHAR *name = NULL;
switch (folder) {
case CSIDL_ADMINTOOLS: name = L"Administrative Tools"; break;
@@ -997,7 +1007,7 @@ XS(w32_GetFileVersion)
char *data;
if (items != 1)
- croak("usage: Win32::GetFileVersion($filename)\n");
+ croak("usage: Win32::GetFileVersion($filename)");
filename = SvPV_nolen(ST(0));
size = GetFileVersionInfoSize(filename, &handle);
@@ -1048,7 +1058,9 @@ XS(w32_SetChildShowWindow)
* inside the thread_intern structure, the MSWin32 implementation
* lives in win32/win32.c in the core Perl distribution.
*/
- dXSARGS;
+ dSP;
+ I32 ax = POPMARK;
+ EXTEND(SP,1);
XSRETURN_UNDEF;
}
#endif
@@ -1056,8 +1068,12 @@ XS(w32_SetChildShowWindow)
XS(w32_GetCwd)
{
dXSARGS;
+ char* ptr;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetCwd()");
+
/* Make the host for current directory */
- char* ptr = PerlEnv_get_childdir();
+ ptr = PerlEnv_get_childdir();
/*
* If ptr != Nullch
* then it worked, set PV valid,
@@ -1108,6 +1124,8 @@ XS(w32_GetNextAvailDrive)
char ix = 'C';
char root[] = "_:\\";
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetNextAvailDrive()");
EXTEND(SP,1);
while (ix <= 'Z') {
root[0] = ix++;
@@ -1122,6 +1140,8 @@ XS(w32_GetNextAvailDrive)
XS(w32_GetLastError)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetLastError()");
EXTEND(SP,1);
XSRETURN_IV(GetLastError());
}
@@ -1138,6 +1158,8 @@ XS(w32_SetLastError)
XS(w32_LoginName)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::LoginName()");
EXTEND(SP,1);
if (IsWin2000()) {
WCHAR name[128];
@@ -1164,6 +1186,8 @@ XS(w32_NodeName)
dXSARGS;
char name[MAX_COMPUTERNAME_LENGTH+1];
DWORD size = sizeof(name);
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::NodeName()");
EXTEND(SP,1);
if (GetComputerName(name,&size)) {
/* size does NOT include NULL :-( */
@@ -1178,9 +1202,11 @@ XS(w32_DomainName)
{
dXSARGS;
HMODULE module = LoadLibrary("netapi32.dll");
- PFNNetApiBufferFree pfnNetApiBufferFree;
- PFNNetWkstaGetInfo pfnNetWkstaGetInfo;
+ PFNNetApiBufferFree pfnNetApiBufferFree = NULL;
+ PFNNetWkstaGetInfo pfnNetWkstaGetInfo = NULL;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::DomainName()");
if (module) {
GETPROC(NetApiBufferFree);
GETPROC(NetWkstaGetInfo);
@@ -1242,8 +1268,10 @@ XS(w32_FsType)
dXSARGS;
char fsname[256];
DWORD flags, filecomplen;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::FsType()");
if (GetVolumeInformation(NULL, NULL, 0, NULL, &filecomplen,
- &flags, fsname, sizeof(fsname))) {
+ &flags, fsname, sizeof(fsname))) {
if (GIMME_V == G_ARRAY) {
XPUSHs(sv_2mortal(newSVpvn(fsname,strlen(fsname))));
XPUSHs(sv_2mortal(newSViv(flags)));
@@ -1260,6 +1288,8 @@ XS(w32_FsType)
XS(w32_GetOSVersion)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetOSVersion()");
if (GIMME_V == G_SCALAR) {
XSRETURN_IV(g_osver.dwPlatformId);
@@ -1282,6 +1312,8 @@ XS(w32_GetOSVersion)
XS(w32_IsWinNT)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::IsWinNT()");
EXTEND(SP,1);
XSRETURN_IV(IsWinNT());
}
@@ -1289,6 +1321,8 @@ XS(w32_IsWinNT)
XS(w32_IsWin95)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::IsWin95()");
EXTEND(SP,1);
XSRETURN_IV(IsWin95());
}
@@ -1364,6 +1398,8 @@ XS(w32_GetTickCount)
{
dXSARGS;
DWORD msec = GetTickCount();
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetTickCount()");
EXTEND(SP,1);
if ((IV)msec > 0)
XSRETURN_IV(msec);
@@ -1525,7 +1561,7 @@ XS(w32_GetLongPathName)
WCHAR wide_path[MAX_PATH+1];
WCHAR *long_path;
- if (wcslen(wstr) < countof(wide_path)) {
+ if (wcslen(wstr) < (size_t)countof(wide_path)) {
wcscpy(wide_path, wstr);
long_path = my_longpathW(wide_path);
if (long_path) {
@@ -1619,6 +1655,8 @@ XS(w32_OutputDebugString)
XS(w32_GetCurrentProcessId)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetCurrentProcessId()");
EXTEND(SP,1);
XSRETURN_IV(GetCurrentProcessId());
}
@@ -1626,6 +1664,8 @@ XS(w32_GetCurrentProcessId)
XS(w32_GetCurrentThreadId)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetCurrentThreadId()");
EXTEND(SP,1);
XSRETURN_IV(GetCurrentThreadId());
}
@@ -1713,6 +1753,8 @@ XS(w32_GetProductInfo)
XS(w32_GetACP)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetACP()");
EXTEND(SP,1);
XSRETURN_IV(GetACP());
}
@@ -1720,6 +1762,8 @@ XS(w32_GetACP)
XS(w32_GetConsoleCP)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetConsoleCP()");
EXTEND(SP,1);
XSRETURN_IV(GetConsoleCP());
}
@@ -1727,6 +1771,8 @@ XS(w32_GetConsoleCP)
XS(w32_GetConsoleOutputCP)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetConsoleOutputCP()");
EXTEND(SP,1);
XSRETURN_IV(GetConsoleOutputCP());
}
@@ -1734,6 +1780,8 @@ XS(w32_GetConsoleOutputCP)
XS(w32_GetOEMCP)
{
dXSARGS;
+ if (items)
+ Perl_croak(aTHX_ "usage: Win32::GetOEMCP()");
EXTEND(SP,1);
XSRETURN_IV(GetOEMCP());
}
@@ -1764,7 +1812,7 @@ PROTOTYPES: DISABLE
BOOT:
{
- char *file = __FILE__;
+ const char *file = __FILE__;
if (g_osver.dwOSVersionInfoSize == 0) {
g_osver.dwOSVersionInfoSize = sizeof(g_osver);
diff --git a/gnu/usr.bin/perl/cpan/Win32API-File/File.pm b/gnu/usr.bin/perl/cpan/Win32API-File/File.pm
index 10c5d2ff662..804a7f6ea00 100644
--- a/gnu/usr.bin/perl/cpan/Win32API-File/File.pm
+++ b/gnu/usr.bin/perl/cpan/Win32API-File/File.pm
@@ -10,7 +10,7 @@ use Fcntl qw( O_RDONLY O_RDWR O_WRONLY O_APPEND O_BINARY O_TEXT );
use vars qw( $VERSION @ISA );
use vars qw( @EXPORT @EXPORT_OK @EXPORT_FAIL %EXPORT_TAGS );
-$VERSION= '0.1203';
+$VERSION= '0.1203_01';
use base qw( Exporter DynaLoader Tie::Handle IO::File );
diff --git a/gnu/usr.bin/perl/cpan/Win32API-File/File.xs b/gnu/usr.bin/perl/cpan/Win32API-File/File.xs
index 83971d00002..91978ff3128 100644
--- a/gnu/usr.bin/perl/cpan/Win32API-File/File.xs
+++ b/gnu/usr.bin/perl/cpan/Win32API-File/File.xs
@@ -14,6 +14,7 @@
#endif
#define WIN32_LEAN_AND_MEAN /* Tell windows.h to skip much */
+#include <wchar.h>
#include <windows.h>
#include <winioctl.h>
diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/Fatal.pm b/gnu/usr.bin/perl/cpan/autodie/lib/Fatal.pm
index 16e17434742..09abfb8536d 100644
--- a/gnu/usr.bin/perl/cpan/autodie/lib/Fatal.pm
+++ b/gnu/usr.bin/perl/cpan/autodie/lib/Fatal.pm
@@ -8,7 +8,7 @@ use strict;
use warnings;
use Tie::RefHash; # To cache subroutine refs
use Config;
-use Scalar::Util qw(set_prototype);
+use Scalar::Util qw(set_prototype looks_like_number);
use autodie::Util qw(
fill_protos
@@ -55,7 +55,7 @@ use constant ERROR_58_HINTS => q{Non-subroutine %s hints for %s are not supporte
use constant MIN_IPC_SYS_SIMPLE_VER => 0.12;
-our $VERSION = '2.29'; # VERSION: Generated by DZP::OurPkg::Version
+our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg::Version
our $Debug ||= 0;
@@ -165,6 +165,9 @@ my %TAGS = (
':2.27' => [qw(:default)],
':2.28' => [qw(:default)],
':2.29' => [qw(:default)],
+ ':2.30' => [qw(:default)],
+ ':2.31' => [qw(:default)],
+ ':2.32' => [qw(:default)],
);
@@ -580,7 +583,12 @@ sub unimport {
# Record the current sub to be reinstalled at end of scope
# and then restore the original (can be undef for "CORE::"
# subs)
- $reinstall_subs{$symbol} = \&$sub;
+
+ {
+ no strict 'refs'; ## no critic # to avoid: Can't use string (...) as a symbol ref ...
+ $reinstall_subs{$symbol} = \&$sub
+ if exists ${"${pkg}::"}{$symbol};
+ }
$uninstall_subs{$symbol} = $Original_user_sub{$sub};
}
@@ -1023,6 +1031,26 @@ sub _one_invocation {
};
}
+ if ($call eq 'CORE::kill') {
+
+ return qq[
+
+ my \$num_things = \@_ - $Returns_num_things_changed{$call};
+ my \$context = ! defined wantarray() ? 'void' : 'scalar';
+ my \$signal = \$_[0];
+ my \$retval = $call(@argv);
+ my \$sigzero = looks_like_number( \$signal ) && \$signal == 0;
+
+ if ( ( \$sigzero && \$context eq 'void' )
+ or ( ! \$sigzero && \$retval != \$num_things ) ) {
+
+ $die;
+ }
+
+ return \$retval;
+ ];
+ }
+
if (exists $Returns_num_things_changed{$call}) {
# Some things return the number of things changed (like
diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie.pm
index 5934c138ed0..8f62d670d80 100644
--- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie.pm
+++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie.pm
@@ -9,7 +9,7 @@ our $VERSION;
# ABSTRACT: Replace functions with ones that succeed or die with lexical scope
BEGIN {
- our $VERSION = '2.29'; # VERSION: Generated by DZP::OurPkg::Version
+ our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg::Version
}
use constant ERROR_WRONG_FATAL => q{
@@ -116,32 +116,6 @@ Exceptions produced by the C<autodie> pragma are members of the
L<autodie::exception> class. The preferred way to work with
these exceptions under Perl 5.10 is as follows:
- use feature qw(switch);
-
- eval {
- use autodie;
-
- open(my $fh, '<', $some_file);
-
- my @records = <$fh>;
-
- # Do things with @records...
-
- close($fh);
-
- };
-
- given ($@) {
- when (undef) { say "No error"; }
- when ('open') { say "Error from open"; }
- when (':io') { say "Non-open, IO error."; }
- when (':all') { say "All other autodie errors." }
- default { say "Not an autodie error at all." }
- }
-
-Under Perl 5.8, the C<given/when> structure is not available, so the
-following structure may be used:
-
eval {
use autodie;
@@ -268,7 +242,7 @@ C<system> and C<exec> with:
=head2 print
-The autodie pragma B<<does not check calls to C<print>>>.
+The autodie pragma B<does not check calls to C<print>Z<>>.
=head2 flock
@@ -370,6 +344,14 @@ any hints available.
See also L<Fatal/DIAGNOSTICS>.
+=head1 Tips and Tricks
+
+=head2 Importing autodie into another namespace than "caller"
+
+It is possible to import autodie into a different namespace by using
+L<Import::Into>. However, you have to pass a "caller depth" (rather
+than a package name) for this to work correctly.
+
=head1 BUGS
"Used only once" warnings can be generated when C<autodie> or C<Fatal>
diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception.pm
index 8743719cb84..d4c14f9f7d9 100644
--- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception.pm
+++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception.pm
@@ -4,7 +4,7 @@ use strict;
use warnings;
use Carp qw(croak);
-our $VERSION = '2.29002';
+our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version
# ABSTRACT: Exceptions from autodying functions.
our $DEBUG = 0;
diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception/system.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception/system.pm
index e6305fd42ea..b0e270c056a 100644
--- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception/system.pm
+++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception/system.pm
@@ -5,7 +5,7 @@ use warnings;
use parent 'autodie::exception';
use Carp qw(croak);
-our $VERSION = '2.29'; # VERSION: Generated by DZP::OurPkg:Version
+our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version
# ABSTRACT: Exceptions from autodying system().
diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/hints.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/hints.pm
index be9fbceb475..c3f83ed0ece 100644
--- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/hints.pm
+++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/hints.pm
@@ -5,7 +5,7 @@ use warnings;
use constant PERL58 => ( $] < 5.009 );
-our $VERSION = '2.29001';
+our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version
# ABSTRACT: Provide hints about user subroutines to autodie
@@ -121,7 +121,7 @@ other things. You can specify different hints for how
failure should be identified in scalar and list contexts.
These examples apply for use in the C<AUTODIE_HINTS> subroutine and when
-calling C<autodie::hints->set_hints_for()>.
+calling C<< autodie::hints->set_hints_for() >>.
The most common context-specific hints are:
diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/skip.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/skip.pm
index 9a048fe62f2..ad9706caa0f 100644
--- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/skip.pm
+++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/skip.pm
@@ -2,7 +2,7 @@ package autodie::skip;
use strict;
use warnings;
-our $VERSION = '2.29'; # VERSION
+our $VERSION = '2.32'; # VERSION
# This package exists purely so people can inherit from it,
# which isn't at all how roles are supposed to work, but it's
diff --git a/gnu/usr.bin/perl/cpan/autodie/t/version.t b/gnu/usr.bin/perl/cpan/autodie/t/version.t
index 7accf05dc0d..5fad742110b 100755
--- a/gnu/usr.bin/perl/cpan/autodie/t/version.t
+++ b/gnu/usr.bin/perl/cpan/autodie/t/version.t
@@ -5,6 +5,11 @@ use Test::More;
if (not $ENV{RELEASE_TESTING}) {
plan( skip_all => 'Release test. Set $ENV{RELEASE_TESTING} to true to run.');
}
+
+if( $ENV{AUTOMATED_TESTING} ) {
+ plan( skip_all => 'This test requires dzil and that is not supported on github actions');
+}
+
plan tests => 8;
# For the moment, we'd like all our versions to be the same.
@@ -18,6 +23,8 @@ require autodie::hints;
require autodie::exception;
require autodie::exception::system;
+diag(explain(\%ENV));
+
ok(defined($autodie::VERSION), 'autodie has a version');
ok(defined($autodie::exception::VERSION), 'autodie::exception has a version');
ok(defined($autodie::hints::VERSION), 'autodie::hints has a version');
diff --git a/gnu/usr.bin/perl/cpan/parent/lib/parent.pm b/gnu/usr.bin/perl/cpan/parent/lib/parent.pm
index 9bf99699c14..f2405efe7ee 100644
--- a/gnu/usr.bin/perl/cpan/parent/lib/parent.pm
+++ b/gnu/usr.bin/perl/cpan/parent/lib/parent.pm
@@ -1,7 +1,7 @@
package parent;
use strict;
-our $VERSION = '0.237';
+our $VERSION = '0.238';
sub import {
my $class = shift;
@@ -99,7 +99,15 @@ that had accumulated in it.
=head1 SEE ALSO
-L<base>
+=over 4
+
+=item L<base>
+
+=item L<parent::versioned>
+
+A fork of L<parent> that provides version checking in parent class modules.
+
+=back
=head1 AUTHORS AND CONTRIBUTORS
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pm b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pm
index b3645bc3cbb..c8016cf5233 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pm
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pm
@@ -2,6 +2,6 @@ use strict;
use warnings;
package perlfaq;
-our $VERSION = '5.20190126';
+our $VERSION = '5.20200523';
1;
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pod
index 3dd9f6c3c93..3b7345aa64a 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pod
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pod
@@ -4,7 +4,7 @@ perlfaq - Frequently asked questions about Perl
=head1 VERSION
-version 5.20190126
+version 5.20200523
=head1 DESCRIPTION
@@ -89,11 +89,11 @@ Which version of Perl should I use?
=item *
-What are Perl 4, Perl 5, or Perl 6?
+What are Perl 4, Perl 5, or Raku (Perl 6)?
=item *
-What is Perl 6?
+What is Raku (Perl 6)?
=item *
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq1.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq1.pod
index 4c023f8eb41..0ec9f16161c 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq1.pod
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq1.pod
@@ -4,7 +4,7 @@ perlfaq1 - General Questions About Perl
=head1 VERSION
-version 5.20190126
+version 5.20200523
=head1 DESCRIPTION
@@ -123,11 +123,11 @@ current stable release of Perl.
=back
-=head2 What are Perl 4, Perl 5, or Perl 6?
+=head2 What are Perl 4, Perl 5, or Raku (Perl 6)?
-In short, Perl 4 is the parent to both Perl 5 and Perl 6. Perl 5 is the older
-sibling, and though they are different languages, someone who knows one will
-spot many similarities in the other.
+In short, Perl 4 is the parent to both Perl 5 and Raku (formerly known as
+Perl 6). Perl 5 is the older sibling, and though they are different languages,
+someone who knows one will spot many similarities in the other.
The number after Perl (i.e. the 5 after Perl 5) is the major release
of the perl interpreter as well as the version of the language. Each
@@ -138,31 +138,30 @@ The current major release of Perl is Perl 5, first released in
1994. It can run scripts from the previous major release, Perl 4
(March 1991), but has significant differences.
-Perl 6 is a reinvention of Perl, it is a language in the same lineage but
-not compatible. The two are complementary, not mutually exclusive. Perl 6 is
-not meant to replace Perl 5, and vice versa. See L</"What is Perl 6?"> below
-to find out more.
+Raku is a reinvention of Perl, a language in the same lineage but
+not compatible. The two are complementary, not mutually exclusive. Raku is
+not meant to replace Perl, and vice versa. See L</"What is Raku (Perl 6)?">
+below to find out more.
See L<perlhist> for a history of Perl revisions.
-=head2 What is Perl 6?
+=head2 What is Raku (Perl 6)?
-Perl 6 was I<originally> described as the community's rewrite of Perl 5,
-however as the language evolved, it became clear that it is a separate
-language, but in the same language family as Perl 5.
+Raku (formerly known as Perl 6) was I<originally> described as the community's
+rewrite of Perl, however as the language evolved, it became clear that it is
+a separate language, but in the same language family as Perl.
-Perl 6 is not intended primarily as a replacement for Perl 5, but as its
-own thing - and libraries exist to allow you to call Perl 5 code from Perl
-6 programs and vice versa.
+Raku is not intended primarily as a replacement for Perl, but as its
+own thing - and libraries exist to allow you to call Perl code from Raku
+programs and vice versa.
-Contrary to popular belief, Perl 6 and Perl 5 peacefully coexist with one
-another. Perl 6 has proven to be a fascinating source of ideas for those
-using Perl 5 (the L<Moose> object system is a well-known example). There is
+Contrary to popular belief, Raku and Perl peacefully coexist with one
+another. Raku has proven to be a fascinating source of ideas for those
+using Perl (the L<Moose> object system is a well-known example). There is
overlap in the communities, and this overlap fosters the tradition of sharing
and borrowing that have been instrumental to Perl's success.
-If you want to learn more about Perl 6 read the Perl 6 developers
-page at L<http://www.perl6.org/> and get involved.
+For more about Raku see L<https://www.raku.org/>.
"We're really serious about reinventing everything that needs reinventing."
--Larry Wall
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq2.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq2.pod
index c039bdfd133..447ad087eb6 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq2.pod
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq2.pod
@@ -4,7 +4,7 @@ perlfaq2 - Obtaining and Learning about Perl
=head1 VERSION
-version 5.20190126
+version 5.20200523
=head1 DESCRIPTION
@@ -213,10 +213,9 @@ First, ensure that you've found an actual bug. Second, ensure you've
found an actual bug.
If you've found a bug with the perl interpreter or one of the modules
-in the standard library (those that come with Perl), you can use the
-L<perlbug> utility that comes with Perl (>= 5.004). It collects
-information about your installation to include with your message, then
-sends the message to the right place.
+in the standard library (those that come with Perl), you can submit a
+bug report to the GitHub issue tracker at
+L<https://github.com/Perl/perl5/issues>.
To determine if a module came with your version of Perl, you can
install and use the L<Module::CoreList> module. It has the information
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq3.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq3.pod
index df99fd8d878..481c3c94674 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq3.pod
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq3.pod
@@ -4,7 +4,7 @@ perlfaq3 - Programming Tools
=head1 VERSION
-version 5.20190126
+version 5.20200523
=head1 DESCRIPTION
@@ -300,8 +300,8 @@ L<http://www.ddj.com/184404522> , and "Profiling in Perl"
L<http://www.ddj.com/184404580> .
Perl.com has two interesting articles on profiling: "Profiling Perl",
-by Simon Cozens, L<http://www.perl.com/lpt/a/850> and "Debugging and
-Profiling mod_perl Applications", by Frank Wiles,
+by Simon Cozens, L<https://www.perl.com/pub/2004/06/25/profiling.html/>
+and "Debugging and Profiling mod_perl Applications", by Frank Wiles,
L<http://www.perl.com/pub/a/2006/02/09/debug_mod_perl.html> .
Randal L. Schwartz writes about profiling in "Speeding up Your Perl
@@ -340,7 +340,7 @@ Put that in your F<.exrc> file (replacing the caret characters
with control characters) and away you go. In insert mode, ^T is
for indenting, ^D is for undenting, and ^O is for blockdenting--as
it were. A more complete example, with comments, can be found at
-L<http://www.cpan.org/authors/id/TOMC/scripts/toms.exrc.gz>
+L<http://www.cpan.org/authors/id/T/TO/TOMC/scripts/toms.exrc.gz>
=head2 Is there an IDE or Windows Perl Editor?
@@ -497,7 +497,7 @@ L<http://www.vim.org/>
=item Vile
-L<http://dickey.his.com/vile/vile.html>
+L<http://invisible-island.net/vile/vile.html>
=back
@@ -558,7 +558,7 @@ are text editors for OS X that have a Perl sensitivity mode
=head2 Where can I get Perl macros for vi?
For a complete version of Tom Christiansen's vi configuration file,
-see L<http://www.cpan.org/authors/Tom_Christiansen/scripts/toms.exrc.gz> ,
+see L<http://www.cpan.org/authors/id/T/TO/TOMC/scripts/toms.exrc.gz> ,
the standard benchmark file for vi emulators. The file runs best with nvi,
the current version of vi out of Berkeley, which incidentally can be built
with an embedded Perl interpreter--see L<http://www.cpan.org/src/misc/> .
@@ -581,7 +581,7 @@ For CPerlMode, see L<http://www.emacswiki.org/cgi-bin/wiki/CPerlMode>
The Curses module from CPAN provides a dynamically loadable object
module interface to a curses library. A small demo can be found at the
-directory L<http://www.cpan.org/authors/Tom_Christiansen/scripts/rep.gz> ;
+directory L<http://www.cpan.org/authors/id/T/TO/TOMC/scripts/rep.gz> ;
this program repeats a command and updates the screen as needed, rendering
B<rep ps axu> similar to B<top>.
@@ -1066,7 +1066,7 @@ guides and references in L<perlfaq9> or in the CGI MetaFAQ:
L<http://www.perl.org/CGI_MetaFAQ.html>
-Looking in to L<Plack> and modern Perl web frameworks is highly recommended,
+Looking into L<https://plackperl.org> and modern Perl web frameworks is highly recommended,
though; web programming in Perl has evolved a long way from the old days of
simple CGI scripts.
@@ -1098,7 +1098,8 @@ XS support files.
Download the ExtUtils::Embed kit from CPAN and run `make test'. If
the tests pass, read the pods again and again and again. If they
-fail, see L<perlbug> and send a bug report with the output of
+fail, submit a bug report to L<https://github.com/Perl/perl5/issues>
+with the output of
C<make test TEST_VERBOSE=1> along with C<perl -V>.
=head2 When I tried to run my script, I got this message. What does it mean?
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq4.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq4.pod
index 55f9f6fd138..1a20aba2e71 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq4.pod
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq4.pod
@@ -4,7 +4,7 @@ perlfaq4 - Data Manipulation
=head1 VERSION
-version 5.20190126
+version 5.20200523
=head1 DESCRIPTION
@@ -1422,21 +1422,7 @@ Hearing the word "in" is an I<in>dication that you probably should have
used a hash, not a list or array, to store your data. Hashes are
designed to answer this question quickly and efficiently. Arrays aren't.
-That being said, there are several ways to approach this. In Perl 5.10
-and later, you can use the smart match operator to check that an item is
-contained in an array or a hash:
-
- use 5.010;
-
- if( $item ~~ @array ) {
- say "The array contains $item"
- }
-
- if( $item ~~ %hash ) {
- say "The hash contains $item"
- }
-
-With earlier versions of Perl, you have to do a bit more work. If you
+That being said, there are several ways to approach this. If you
are going to make this query many times over arbitrary string values,
the fastest way is probably to invert the original array and maintain a
hash whose keys are the first array's values:
@@ -1472,16 +1458,16 @@ of the original list or array. They only pay off if you have to test
multiple values against the same array.
If you are testing only once, the standard module L<List::Util> exports
-the function C<first> for this purpose. It works by stopping once it
+the function C<any> for this purpose. It works by stopping once it
finds the element. It's written in C for speed, and its Perl equivalent
looks like this subroutine:
- sub first (&@) {
+ sub any (&@) {
my $code = shift;
foreach (@_) {
- return $_ if &{$code}();
+ return 1 if $code->();
}
- undef;
+ return 0;
}
If speed is of little concern, the common idiom uses grep in scalar context
@@ -1514,19 +1500,6 @@ in either A or in B but not in both. Think of it as an xor operation.
=head2 How do I test whether two arrays or hashes are equal?
-With Perl 5.10 and later, the smart match operator can give you the answer
-with the least amount of work:
-
- use 5.010;
-
- if( @array1 ~~ @array2 ) {
- say "The arrays are the same";
- }
-
- if( %hash1 ~~ %hash2 ) # doesn't check values! {
- say "The hash keys are the same";
- }
-
The following code works for single-level arrays. It uses a
stringwise comparison, and does not distinguish defined versus
undefined empty strings. Modify if you have other needs.
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq5.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq5.pod
index aa7764b969d..a7fc0eabd12 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq5.pod
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq5.pod
@@ -4,7 +4,7 @@ perlfaq5 - Files and Formats
=head1 VERSION
-version 5.20190126
+version 5.20200523
=head1 DESCRIPTION
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq6.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq6.pod
index eeaad01e2b9..9a45f0e6703 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq6.pod
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq6.pod
@@ -4,7 +4,7 @@ perlfaq6 - Regular Expressions
=head1 VERSION
-version 5.20190126
+version 5.20200523
=head1 DESCRIPTION
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq7.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq7.pod
index c2014646cc2..a69e0536f08 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq7.pod
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq7.pod
@@ -4,7 +4,7 @@ perlfaq7 - General Perl Language Issues
=head1 VERSION
-version 5.20190126
+version 5.20200523
=head1 DESCRIPTION
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq8.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq8.pod
index d9418ed5039..8ee088a3594 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq8.pod
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq8.pod
@@ -4,7 +4,7 @@ perlfaq8 - System Interaction
=head1 VERSION
-version 5.20190126
+version 5.20200523
=head1 DESCRIPTION
@@ -1323,7 +1323,7 @@ settings. See the L<ExtUtils::Makemaker> documentation for more details.
(contributed by brian d foy)
If you know the directory already, you can add it to C<@INC> as you would
-for any other directory. You might <use lib> if you know the directory
+for any other directory. You might C<use lib> if you know the directory
at compile time:
use lib $directory;
@@ -1400,10 +1400,6 @@ environment variables, run-time switches, and in-code statements:
=back
-The last is particularly useful because it knows about machine-dependent
-architectures. The C<lib.pm> pragmatic module was first
-included with the 5.002 release of Perl.
-
=head2 Where are modules installed?
Modules are installed on a case-by-case basis (as provided by the methods
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq9.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq9.pod
index 4a6799c5894..15ca2d03b8b 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq9.pod
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq9.pod
@@ -4,7 +4,7 @@ perlfaq9 - Web, Email and Networking
=head1 VERSION
-version 5.20190126
+version 5.20200523
=head1 DESCRIPTION
@@ -78,7 +78,7 @@ Plack is like Ruby's Rack or Python's Paste for WSGI.
You could build a web site using L<Plack> and your own code,
but for anything other than a very basic web site, using a web framework
-(that uses L<Plack>) is a better option.
+(that uses L<https://plackperl.org>) is a better option.
=head2 How do I remove HTML from a string?
@@ -95,29 +95,30 @@ L<HTML::LinkExtor> or L<HTML::Parser>. You might even use
L<HTML::SimpleLinkExtor> as an example for something specifically
suited to your needs.
-You can use L<URI::Find> to extract URLs from an arbitrary text document.
+You can use L<URI::Find> or L<URL::Search> to extract URLs from an
+arbitrary text document.
=head2 How do I fetch an HTML file?
(contributed by brian d foy)
-Use the libwww-perl distribution. The L<LWP::Simple> module can fetch web
-resources and give their content back to you as a string:
+The core L<HTTP::Tiny> module can fetch web resources and give their
+content back to you as a string:
- use LWP::Simple qw(get);
+ use HTTP::Tiny;
- my $html = get( "http://www.example.com/index.html" );
+ my $ua = HTTP::Tiny->new;
+ my $html = $ua->get( "http://www.example.com/index.html" )->{content};
It can also store the resource directly in a file:
- use LWP::Simple qw(getstore);
+ $ua->mirror( "http://www.example.com/index.html", "foo.html" );
- getstore( "http://www.example.com/index.html", "foo.html" );
-
-If you need to do something more complicated, you can use
-L<LWP::UserAgent> module to create your own user-agent (e.g. browser)
-to get the job done. If you want to simulate an interactive web
-browser, you can use the L<WWW::Mechanize> module.
+If you need to do something more complicated, the L<HTTP::Tiny> object can
+be customized by setting attributes, or you can use L<LWP::UserAgent> from
+the libwww-perl distribution or L<Mojo::UserAgent> from the Mojolicious
+distribution to make common tasks easier. If you want to simulate an
+interactive web browser, you can use the L<WWW::Mechanize> module.
=head2 How do I automate an HTML form submission?
@@ -126,25 +127,26 @@ and forms or a web site, you can use L<WWW::Mechanize>. See its
documentation for all the details.
If you're submitting values using the GET method, create a URL and encode
-the form using the C<query_form> method:
+the form using the C<www_form_urlencode> method from L<HTTP::Tiny>:
+
+ use HTTP::Tiny;
- use LWP::Simple;
- use URI::URL;
+ my $ua = HTTP::Tiny->new;
- my $url = url('L<http://www.perl.com/cgi-bin/cpan_mod')>;
- $url->query_form(module => 'DB_File', readme => 1);
- $content = get($url);
+ my $query = $ua->www_form_urlencode([ q => 'DB_File', lucky => 1 ]);
+ my $url = "https://metacpan.org/search?$query";
+ my $content = $ua->get($url)->{content};
-If you're using the POST method, create your own user agent and encode
-the content appropriately.
+If you're using the POST method, the C<post_form> method will encode the
+content appropriately.
- use HTTP::Request::Common qw(POST);
- use LWP::UserAgent;
+ use HTTP::Tiny;
- my $ua = LWP::UserAgent->new();
- my $req = POST 'L<http://www.perl.com/cgi-bin/cpan_mod'>,
- [ module => 'DB_File', readme => 1 ];
- my $content = $ua->request($req)->as_string;
+ my $ua = HTTP::Tiny->new;
+
+ my $url = 'https://metacpan.org/search';
+ my $form = [ q => 'DB_File', lucky => 1 ];
+ my $content = $ua->post_form($url, $form)->{content};
=head2 How do I decode or create those %-encodings on the web?
X<URI> X<URI::Escape> X<RFC 2396>
@@ -287,26 +289,18 @@ your policy says it is. You really are best off asking the user.
=head2 How do I send email?
-Use the L<Email::MIME> and L<Email::Sender::Simple> modules, like so:
+Use the L<Email::Stuffer> module, like so:
# first, create your message
- my $message = Email::MIME->create(
- header_str => [
- From => 'you@example.com',
- To => 'friend@example.com',
- Subject => 'Happy birthday!',
- ],
- attributes => {
- encoding => 'quoted-printable',
- charset => 'utf-8',
- },
- body_str => "Happy birthday to you!\n",
- );
-
- use Email::Sender::Simple qw(sendmail);
- sendmail($message);
-
-By default, L<Email::Sender::Simple> will try `sendmail` first, if it exists
+ my $message = Email::Stuffer->from('you@example.com')
+ ->to('friend@example.com')
+ ->subject('Happy birthday!')
+ ->text_body("Happy birthday to you!\n");
+
+ $message->send_or_die;
+
+By default, L<Email::Sender::Simple> (the C<send> and C<send_or_die> methods
+use this under the hood) will try C<sendmail> first, if it exists
in your $PATH. This generally isn't the case. If there's a remote mail
server you use to send mail, consider investigating one of the Transport
classes. At time of writing, the available transports include:
@@ -326,14 +320,9 @@ uses TLS or SSL and can authenticate to the server via SASL.
=back
-Telling L<Email::Sender::Simple> to use your transport is straightforward.
+Telling L<Email::Stuffer> to use your transport is straightforward.
- sendmail(
- $message,
- {
- transport => $email_sender_transport_object,
- }
- );
+ $message->transport($email_sender_transport_object)->send_or_die;
=head2 How do I use MIME to make an attachment to a mail message?
@@ -342,6 +331,15 @@ objects themselves are parts and can be attached to other L<Email::MIME>
objects. Consult the L<Email::MIME> documentation for more information,
including all of the supported methods and examples of their use.
+L<Email::Stuffer> uses L<Email::MIME> under the hood to construct
+messages, and wraps the most common attachment tasks with the simple
+C<attach> and C<attach_file> methods.
+
+ Email::Stuffer->to('friend@example.com')
+ ->subject('The file')
+ ->attach_file('stuff.csv')
+ ->send_or_die;
+
=head2 How do I read email?
Use the L<Email::Folder> module, like so:
diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlglossary.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlglossary.pod
index 3fef83de0db..2e7eedad3c5 100644
--- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlglossary.pod
+++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlglossary.pod
@@ -7,7 +7,7 @@ perlglossary - Perl Glossary
=head1 VERSION
-version 5.20190126
+version 5.20200523
=head1 DESCRIPTION
diff --git a/gnu/usr.bin/perl/cpan/podlators/Makefile.PL b/gnu/usr.bin/perl/cpan/podlators/Makefile.PL
index a2008fefc71..ff76df5f9f7 100644
--- a/gnu/usr.bin/perl/cpan/podlators/Makefile.PL
+++ b/gnu/usr.bin/perl/cpan/podlators/Makefile.PL
@@ -4,7 +4,7 @@
# which only supports that build method, and because it is a dependency of
# other build systems like Module::Build.
#
-# Copyright 1999-2001, 2008, 2010, 2012, 2014-2016, 2018
+# Copyright 1999-2001, 2008, 2010, 2012, 2014-2016, 2018-2019
# Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
@@ -12,7 +12,7 @@
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-use 5.006;
+use 5.008;
use strict;
use warnings;
@@ -89,7 +89,7 @@ my %metadata = (
LICENSE => 'perl_5',
EXE_FILES => [scripts('pod2text', 'pod2man')],
VERSION_FROM => 'lib/Pod/Man.pm',
- MIN_PERL_VERSION => '5.006',
+ MIN_PERL_VERSION => '5.008',
# Use *.PL files to generate the driver scripts so that we get the correct
# invocation of Perl on non-UNIX platforms.
@@ -111,10 +111,7 @@ my %metadata = (
realclean => { FILES => scalar(scripts('pod2text', 'pod2man')) },
# Dependencies on other modules.
- PREREQ_PM => {
- 'Encode' => 0,
- 'Pod::Simple' => 3.06,
- },
+ PREREQ_PM => { 'Pod::Simple' => 3.06 },
# Older versions of ExtUtils::MakeMaker don't pick up nested test
# directories by default.
diff --git a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Man.pm b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Man.pm
index 71798c2533e..d7c029357a2 100644
--- a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Man.pm
+++ b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Man.pm
@@ -14,7 +14,7 @@
package Pod::Man;
-use 5.006;
+use 5.008;
use strict;
use warnings;
@@ -24,7 +24,9 @@ use vars qw(@ISA %ESCAPES $PREAMBLE $VERSION);
use Carp qw(carp croak);
use Pod::Simple ();
-# Conditionally import Encode and set $HAS_ENCODE if it is available.
+# Conditionally import Encode and set $HAS_ENCODE if it is available. This is
+# required to support building as part of Perl core, since podlators is built
+# before Encode is.
our $HAS_ENCODE;
BEGIN {
$HAS_ENCODE = eval { require Encode };
@@ -32,7 +34,7 @@ BEGIN {
@ISA = qw(Pod::Simple);
-$VERSION = '4.11';
+$VERSION = '4.14';
# Set the debugging level. If someone has inserted a debug function into this
# class already, use that. Otherwise, use any Pod::Simple debug function
@@ -245,13 +247,8 @@ sub init_quotes {
sub init_page {
my ($self) = @_;
- # We used to try first to get the version number from a local binary, but
- # we shouldn't need that any more. Get the version from the running Perl.
- # Work a little magic to handle subversions correctly under both the
- # pre-5.6 and the post-5.6 version numbering schemes.
- my @version = ($] =~ /^(\d+)\.(\d{3})(\d{0,3})$/);
- $version[2] ||= 0;
- $version[2] *= 10 ** (3 - length $version[2]);
+ # Get the version from the running Perl.
+ my @version = ($] =~ /^(\d+)\.(\d{3})(\d+)$/);
for (@version) { $_ += 0 }
my $version = join ('.', @version);
@@ -799,7 +796,7 @@ sub start_document {
eval {
my @options = (output => 1, details => 1);
my @layers = PerlIO::get_layers (*{$$self{output_fh}}, @options);
- if ($layers[-1] & PerlIO::F_UTF8 ()) {
+ if ($layers[-1] && ($layers[-1] & PerlIO::F_UTF8 ())) {
$$self{ENCODE} = 0;
}
}
@@ -903,8 +900,6 @@ sub devise_title {
$cut = $i + 1;
$cut++ if ($dirs[$i + 1] && $dirs[$i + 1] eq 'lib');
last;
- } elsif ($dirs[$i] eq 'lib' && $dirs[$i + 1] && $dirs[0] eq 'ext') {
- $cut = $i + 1;
}
}
if ($cut > 0) {
@@ -1883,7 +1878,9 @@ being the file to write the formatted output to.
You can also call parse_lines() to parse an array of lines or
parse_string_document() to parse a document already in memory. As with
parse_file(), parse_lines() and parse_string_document() default to sending
-their output to C<STDOUT> unless changed with the output_fh() method.
+their output to C<STDOUT> unless changed with the output_fh() method. Be
+aware that parse_lines() and parse_string_document() both expect raw bytes,
+not decoded characters.
To put the output from any parse method into a string instead of a file
handle, call the output_string() method instead of output_fh().
@@ -2014,7 +2011,7 @@ are mine).
=head1 COPYRIGHT AND LICENSE
-Copyright 1999-2010, 2012-2018 Russ Allbery <rra@cpan.org>
+Copyright 1999-2010, 2012-2019 Russ Allbery <rra@cpan.org>
Substantial contributions by Sean Burke <sburke@cpan.org>.
diff --git a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/ParseLink.pm b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/ParseLink.pm
index 0be5323973b..273c95847ac 100644
--- a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/ParseLink.pm
+++ b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/ParseLink.pm
@@ -13,7 +13,7 @@
package Pod::ParseLink;
-use 5.006;
+use 5.008;
use strict;
use warnings;
@@ -23,7 +23,7 @@ use Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(parselink);
-$VERSION = '4.11';
+$VERSION = '4.14';
##############################################################################
# Implementation
@@ -167,11 +167,11 @@ L<perlpodspec> for more information.
=head1 AUTHOR
-Russ Allbery <rra@cpan.org>.
+Russ Allbery <rra@cpan.org>
=head1 COPYRIGHT AND LICENSE
-Copyright 2001, 2008, 2009, 2014, 2018 Russ Allbery <rra@cpan.org>
+Copyright 2001, 2008, 2009, 2014, 2018-2019 Russ Allbery <rra@cpan.org>
This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself.
diff --git a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text.pm b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text.pm
index b05730ef476..56e6e78a86c 100644
--- a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text.pm
+++ b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text.pm
@@ -14,7 +14,7 @@
package Pod::Text;
-use 5.006;
+use 5.008;
use strict;
use warnings;
@@ -30,7 +30,7 @@ use Pod::Simple ();
# We have to export pod2text for backward compatibility.
@EXPORT = qw(pod2text);
-$VERSION = '4.11';
+$VERSION = '4.14';
# Ensure that $Pod::Simple::nbsp and $Pod::Simple::shy are available. Code
# taken from Pod::Simple 3.32, but was only added in 3.30.
@@ -39,16 +39,8 @@ if ($Pod::Simple::VERSION ge 3.30) {
$NBSP = $Pod::Simple::nbsp;
$SHY = $Pod::Simple::shy;
} else {
- if ($] ge 5.007_003) {
- $NBSP = chr utf8::unicode_to_native(0xA0);
- $SHY = chr utf8::unicode_to_native(0xAD);
- } elsif (Pod::Simple::ASCII) {
- $NBSP = "\xA0";
- $SHY = "\xAD";
- } else {
- $NBSP = "\x41";
- $SHY = "\xCA";
- }
+ $NBSP = chr utf8::unicode_to_native(0xA0);
+ $SHY = chr utf8::unicode_to_native(0xAD);
}
##############################################################################
@@ -247,7 +239,7 @@ sub wrap {
my $spaces = ' ' x $$self{MARGIN};
my $width = $$self{opt_width} - $$self{MARGIN};
while (length > $width) {
- if (s/^([^\n]{0,$width})\s+// || s/^([^\n]{$width})//) {
+ if (s/^([^\n]{0,$width})[ \t\n]+// || s/^([^\n]{$width})//) {
$output .= $spaces . $1 . "\n";
} else {
last;
@@ -265,14 +257,16 @@ sub reformat {
local $_ = shift;
# If we're trying to preserve two spaces after sentences, do some munging
- # to support that. Otherwise, smash all repeated whitespace.
+ # to support that. Otherwise, smash all repeated whitespace. Be careful
+ # not to use \s here, which in Unicode input may match non-breaking spaces
+ # that we don't want to smash.
if ($$self{opt_sentence}) {
s/ +$//mg;
s/\.\n/. \n/g;
s/\n/ /g;
s/ +/ /g;
} else {
- s/\s+/ /g;
+ s/[ \t\n]+/ /g;
}
return $self->wrap ($_);
}
@@ -333,15 +327,14 @@ sub start_document {
# When UTF-8 output is set, check whether our output file handle already
# has a PerlIO encoding layer set. If it does not, we'll need to encode
- # our output before printing it (handled in the output() sub). Wrap the
- # check in an eval to handle versions of Perl without PerlIO.
+ # our output before printing it (handled in the output() sub).
$$self{ENCODE} = 0;
if ($$self{opt_utf8}) {
$$self{ENCODE} = 1;
eval {
my @options = (output => 1, details => 1);
my $flag = (PerlIO::get_layers ($$self{output_fh}, @options))[-1];
- if ($flag & PerlIO::F_UTF8 ()) {
+ if ($flag && ($flag & PerlIO::F_UTF8 ())) {
$$self{ENCODE} = 0;
$$self{ENCODING} = 'UTF-8';
}
@@ -919,7 +912,9 @@ being the file to write the formatted output to.
You can also call parse_lines() to parse an array of lines or
parse_string_document() to parse a document already in memory. As with
parse_file(), parse_lines() and parse_string_document() default to sending
-their output to C<STDOUT> unless changed with the output_fh() method.
+their output to C<STDOUT> unless changed with the output_fh() method. Be
+aware that parse_lines() and parse_string_document() both expect raw bytes,
+not decoded characters.
To put the output from any parse method into a string instead of a file
handle, call the output_string() method instead of output_fh().
@@ -1006,7 +1001,7 @@ how to use Pod::Simple.
=head1 COPYRIGHT AND LICENSE
-Copyright 1999-2002, 2004, 2006, 2008-2009, 2012-2016, 2018 Russ Allbery
+Copyright 1999-2002, 2004, 2006, 2008-2009, 2012-2016, 2018-2019 Russ Allbery
<rra@cpan.org>
This program is free software; you may redistribute it and/or modify it
diff --git a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Color.pm b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Color.pm
index 8d956f2a5dd..5d47c5ecb3b 100644
--- a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Color.pm
+++ b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Color.pm
@@ -12,7 +12,7 @@
package Pod::Text::Color;
-use 5.006;
+use 5.008;
use strict;
use warnings;
@@ -23,7 +23,7 @@ use vars qw(@ISA $VERSION);
@ISA = qw(Pod::Text);
-$VERSION = '4.11';
+$VERSION = '4.14';
##############################################################################
# Overrides
@@ -97,9 +97,6 @@ sub wrap {
# $shortchar matches some sequence of $char ending in codes followed by
# whitespace or the end of the string. $longchar matches exactly $width
# $chars, used when we have to truncate and hard wrap.
- #
- # $shortchar and $longchar are created in a slightly odd way because the
- # construct ${char}{0,$width} didn't do the right thing until Perl 5.8.x.
my $code = '(?:\e\[[\d;]+m)';
my $char = "(?>$code*[^\\n])";
my $shortchar = '^(' . $char . "{0,$width}(?>$code*)" . ')(?:\s+|\z)';
@@ -185,7 +182,7 @@ Russ Allbery <rra@cpan.org>.
=head1 COPYRIGHT AND LICENSE
-Copyright 1999, 2001, 2004, 2006, 2008, 2009, 2018 Russ Allbery
+Copyright 1999, 2001, 2004, 2006, 2008, 2009, 2018-2019 Russ Allbery
<rra@cpan.org>
This program is free software; you may redistribute it and/or modify it
diff --git a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Overstrike.pm b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Overstrike.pm
index 92a3a9330e0..53bc6afef23 100644
--- a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Overstrike.pm
+++ b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Overstrike.pm
@@ -19,7 +19,7 @@
package Pod::Text::Overstrike;
-use 5.006;
+use 5.008;
use strict;
use warnings;
@@ -29,7 +29,7 @@ use Pod::Text ();
@ISA = qw(Pod::Text);
-$VERSION = '4.11';
+$VERSION = '4.14';
##############################################################################
# Overrides
@@ -185,7 +185,7 @@ created by Russ Allbery <rra@cpan.org>. Subsequently updated by Russ Allbery.
Copyright 2000 by Joe Smith <Joe.Smith@inwap.com>
-Copyright 2001, 2004, 2008, 2014, 2018 by Russ Allbery <rra@cpan.org>
+Copyright 2001, 2004, 2008, 2014, 2018-2019 by Russ Allbery <rra@cpan.org>
This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself.
diff --git a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Termcap.pm b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Termcap.pm
index d36ba4f518a..be218f0bf04 100644
--- a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Termcap.pm
+++ b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Text/Termcap.pm
@@ -12,7 +12,7 @@
package Pod::Text::Termcap;
-use 5.006;
+use 5.008;
use strict;
use warnings;
@@ -24,7 +24,7 @@ use vars qw(@ISA $VERSION);
@ISA = qw(Pod::Text);
-$VERSION = '4.11';
+$VERSION = '4.14';
##############################################################################
# Overrides
@@ -36,14 +36,6 @@ sub new {
my ($self, %args) = @_;
my ($ospeed, $term, $termios);
- # $ENV{HOME} is usually not set on Windows. The default Term::Cap path
- # may not work on Solaris.
- unless (exists $ENV{TERMPATH}) {
- my $home = exists $ENV{HOME} ? "$ENV{HOME}/.termcap:" : '';
- $ENV{TERMPATH} =
- "${home}/etc/termcap:/usr/share/misc/termcap:/usr/share/lib/termcap";
- }
-
# Fall back on a hard-coded terminal speed if POSIX::Termios isn't
# available (such as on VMS).
eval { $termios = POSIX::Termios->new };
@@ -80,10 +72,12 @@ sub new {
# Initialize Pod::Text.
$self = $self->SUPER::new (%args);
- # Fall back on the ANSI escape sequences if Term::Cap doesn't work.
- $$self{BOLD} = $bold || "\e[1m";
- $$self{UNDL} = $undl || "\e[4m";
- $$self{NORM} = $norm || "\e[m";
+ # If we were unable to get any of the formatting sequences, don't attempt
+ # that type of formatting. This will do weird things if bold or underline
+ # were available but normal wasn't, but hopefully that will never happen.
+ $$self{BOLD} = $bold || q{};
+ $$self{UNDL} = $undl || q{};
+ $$self{NORM} = $norm || q{};
return $self;
}
@@ -106,11 +100,19 @@ sub cmd_head2 {
sub cmd_b { my $self = shift; return "$$self{BOLD}$_[1]$$self{NORM}" }
sub cmd_i { my $self = shift; return "$$self{UNDL}$_[1]$$self{NORM}" }
+# Return a regex that matches a formatting sequence. This will only be valid
+# if we were able to get at least some termcap information.
+sub format_regex {
+ my ($self) = @_;
+ my @codes = ($self->{BOLD}, $self->{UNDL}, $self->{NORM});
+ return join(q{|}, map { $_ eq q{} ? () : "\Q$_\E" } @codes);
+}
+
# Analyze a single line and return any formatting codes in effect at the end
# of that line.
sub end_format {
my ($self, $line) = @_;
- my $pattern = "(\Q$$self{BOLD}\E|\Q$$self{UNDL}\E|\Q$$self{NORM}\E)";
+ my $pattern = "(" . $self->format_regex() . ")";
my $current;
while ($line =~ /$pattern/g) {
my $code = $1;
@@ -147,15 +149,17 @@ sub wrap {
my $spaces = ' ' x $$self{MARGIN};
my $width = $$self{opt_width} - $$self{MARGIN};
+ # If we were unable to find any termcap sequences, use Pod::Text wrapping.
+ if ($self->{BOLD} eq q{} && $self->{UNDL} eq q{} && $self->{NORM} eq q{}) {
+ return $self->SUPER::wrap($_);
+ }
+
# $code matches a single special sequence. $char matches any number of
# special sequences preceding a single character other than a newline.
# $shortchar matches some sequence of $char ending in codes followed by
# whitespace or the end of the string. $longchar matches exactly $width
# $chars, used when we have to truncate and hard wrap.
- #
- # $shortchar and $longchar are created in a slightly odd way because the
- # construct ${char}{0,$width} didn't do the right thing until Perl 5.8.x.
- my $code = "(?:\Q$$self{BOLD}\E|\Q$$self{UNDL}\E|\Q$$self{NORM}\E)";
+ my $code = "(?:" . $self->format_regex() . ")";
my $char = "(?>$code*[^\\n])";
my $shortchar = '^(' . $char . "{0,$width}(?>$code*)" . ')(?:\s+|\z)';
my $longchar = '^(' . $char . "{$width})";
@@ -225,34 +229,20 @@ text using the correct termcap escape sequences for the current terminal.
Apart from the format codes, it in all ways functions like Pod::Text. See
L<Pod::Text> for details and available options.
-=head1 ENVIRONMENT
-
-This module sets the TERMPATH environment variable globally to:
-
- $HOME/.termcap:/etc/termcap:/usr/share/misc/termcap:/usr/share/lib/termcap
-
-if it isn't already set. (The first entry is omitted if the HOME
-environment variable isn't set.) This is a (very old) workaround for
-problems finding termcap information on older versions of Solaris, and is
-not good module behavior. Please do not rely on this behavior; it may be
-dropped in a future release.
-
-=head1 NOTES
-
-This module uses Term::Cap to retrieve the formatting escape sequences for
-the current terminal, and falls back on the ECMA-48 (the same in this
-regard as ANSI X3.64 and ISO 6429, the escape codes also used by DEC VT100
-terminals) if the bold, underline, and reset codes aren't set in the
-termcap information.
+This module uses L<Term::Cap> to find the correct terminal settings. See the
+documentation of that module for how it finds terminal database information
+and how to override that behavior if necessary. If unable to find control
+strings for bold and underscore formatting, that formatting is skipped,
+resulting in the same output as Pod::Text.
=head1 AUTHOR
-Russ Allbery <rra@cpan.org>.
+Russ Allbery <rra@cpan.org>
=head1 COPYRIGHT AND LICENSE
-Copyright 1999, 2001-2002, 2004, 2006, 2008-2009, 2014-2015, 2018 Russ Allbery
-<rra@cpan.org>
+Copyright 1999, 2001-2002, 2004, 2006, 2008-2009, 2014-2015, 2018-2019 Russ
+Allbery <rra@cpan.org>
This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself.
diff --git a/gnu/usr.bin/perl/cpan/podlators/scripts/pod2man.PL b/gnu/usr.bin/perl/cpan/podlators/scripts/pod2man.PL
index cc6f955350d..d6e685d2010 100644
--- a/gnu/usr.bin/perl/cpan/podlators/scripts/pod2man.PL
+++ b/gnu/usr.bin/perl/cpan/podlators/scripts/pod2man.PL
@@ -4,7 +4,7 @@
# required for proper start-up code on non-UNIX platforms, and is used inside
# Perl core.
-use 5.006;
+use 5.008;
use strict;
use warnings;
@@ -71,13 +71,12 @@ my $stdin;
# Parse our options, trying to retain backward compatibility with pod2man but
# allowing short forms as well. --lax is currently ignored.
my %options;
-$options{utf8} = 1;
Getopt::Long::config ('bundling_override');
GetOptions (\%options, 'center|c=s', 'date|d=s', 'errors=s', 'fixed=s',
'fixedbold=s', 'fixeditalic=s', 'fixedbolditalic=s', 'help|h',
'lax|l', 'lquote=s', 'name|n=s', 'nourls', 'official|o',
'quotes|q=s', 'release|r=s', 'rquote=s', 'section|s=s', 'stderr',
- 'verbose|v', 'utf8|u!')
+ 'verbose|v', 'utf8|u')
or exit 1;
pod2usage (0) if $options{help};
@@ -127,7 +126,7 @@ exit $status;
__END__
=for stopwords
-en em --stderr stderr --no-utf8 UTF-8 overdo markup MT-LEVEL Allbery Solaris URL
+en em --stderr stderr --utf8 UTF-8 overdo markup MT-LEVEL Allbery Solaris URL
troff troff-specific formatters uppercased Christiansen --nourls UTC prepend
lquote rquote
@@ -142,7 +141,7 @@ pod2man [B<--center>=I<string>] [B<--date>=I<string>] [B<--errors>=I<style>]
[B<--fixedbolditalic>=I<font>] [B<--name>=I<name>] [B<--nourls>]
[B<--official>] [B<--release>=I<version>] [B<--section>=I<manext>]
[B<--quotes>=I<quotes>] [B<--lquote>=I<quote>] [B<--rquote>=I<quote>]
- [B<--stderr>] [B<--no-utf8>] [B<--verbose>] [I<input> [I<output>] ...]
+ [B<--stderr>] [B<--utf8>] [B<--verbose>] [I<input> [I<output>] ...]
pod2man B<--help>
@@ -345,10 +344,19 @@ to C<--errors=stderr> and is supported for backward compatibility.
=item B<-u>, B<--utf8>
-This option allows B<pod2man> to output literal UTF-8 characters.
-On OpenBSD, it is enabled by default and can be disabled with
-B<--no-utf8>, in which case non-ASCII characters are converted
-either to *roff escape sequences or to C<X>.
+By default, B<pod2man> produces the most conservative possible *roff
+output to try to ensure that it will work with as many different *roff
+implementations as possible. Many *roff implementations cannot handle
+non-ASCII characters, so this means all non-ASCII characters are converted
+either to a *roff escape sequence that tries to create a properly accented
+character (at least for troff output) or to C<X>.
+
+This option says to instead output literal UTF-8 characters. If your
+*roff implementation can handle it, this is the best output format to use
+and avoids corruption of documents containing non-ASCII characters.
+However, be warned that *roff source with literal UTF-8 characters is not
+supported by many implementations and may even result in segfaults and
+other bad behavior.
Be aware that, when using this option, the input encoding of your POD
source should be properly declared unless it's US-ASCII. Pod::Simple will
@@ -409,7 +417,7 @@ B<pod2man> by Larry Wall and Tom Christiansen.
=head1 COPYRIGHT AND LICENSE
-Copyright 1999-2001, 2004, 2006, 2008, 2010, 2012-2018 Russ Allbery
+Copyright 1999-2001, 2004, 2006, 2008, 2010, 2012-2019 Russ Allbery
<rra@cpan.org>
This program is free software; you may redistribute it and/or modify it
diff --git a/gnu/usr.bin/perl/cpan/podlators/scripts/pod2text.PL b/gnu/usr.bin/perl/cpan/podlators/scripts/pod2text.PL
index bae85741523..be06960ad76 100644
--- a/gnu/usr.bin/perl/cpan/podlators/scripts/pod2text.PL
+++ b/gnu/usr.bin/perl/cpan/podlators/scripts/pod2text.PL
@@ -4,7 +4,7 @@
# required for proper start-up code on non-UNIX platforms, and is used inside
# Perl core.
-use 5.006;
+use 5.008;
use strict;
use warnings;
@@ -346,7 +346,7 @@ Russ Allbery <rra@cpan.org>.
=head1 COPYRIGHT AND LICENSE
-Copyright 1999-2001, 2004, 2006, 2008, 2010, 2012-2018 Russ Allbery
+Copyright 1999-2001, 2004, 2006, 2008, 2010, 2012-2019 Russ Allbery
<rra@cpan.org>
This program is free software; you may redistribute it and/or modify it
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/docs/pod-spelling.t b/gnu/usr.bin/perl/cpan/podlators/t/docs/pod-spelling.t
index 94d75035bc6..819aa693314 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/docs/pod-spelling.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/docs/pod-spelling.t
@@ -6,6 +6,7 @@
# which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
#
# Written by Russ Allbery <eagle@eyrie.org>
+# Copyright 2019 Russ Allbery <eagle@eyrie.org>
# Copyright 2013-2014
# The Board of Trustees of the Leland Stanford Junior University
#
@@ -29,15 +30,16 @@
#
# SPDX-License-Identifier: MIT
-use 5.006;
+use 5.008;
use strict;
use warnings;
use lib 't/lib';
-use Test::More;
use Test::RRA qw(skip_unless_author use_prereq);
+use Test::More;
+
# Only run this test for the module author since the required stopwords are
# too sensitive to the exact spell-checking program and dictionary.
skip_unless_author('Spelling tests');
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/docs/pod.t b/gnu/usr.bin/perl/cpan/podlators/t/docs/pod.t
index 5fcfcdf77cf..e7d02316606 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/docs/pod.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/docs/pod.t
@@ -6,6 +6,7 @@
# which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
#
# Written by Russ Allbery <eagle@eyrie.org>
+# Copyright 2019 Russ Allbery <eagle@eyrie.org>
# Copyright 2012-2014
# The Board of Trustees of the Leland Stanford Junior University
#
@@ -29,15 +30,16 @@
#
# SPDX-License-Identifier: MIT
-use 5.006;
+use 5.008;
use strict;
use warnings;
use lib 't/lib';
-use Test::More;
use Test::RRA qw(skip_unless_automated use_prereq);
+use Test::More;
+
# Skip this test for normal user installs, although pod2man may still fail.
skip_unless_automated('POD syntax tests');
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/docs/synopsis.t b/gnu/usr.bin/perl/cpan/podlators/t/docs/synopsis.t
index 43a8354ba40..1a2fbf1af28 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/docs/synopsis.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/docs/synopsis.t
@@ -6,6 +6,7 @@
# which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
#
# Written by Russ Allbery <eagle@eyrie.org>
+# Copyright 2019 Russ Allbery <eagle@eyrie.org>
# Copyright 2013-2014
# The Board of Trustees of the Leland Stanford Junior University
#
@@ -29,15 +30,16 @@
#
# SPDX-License-Identifier: MIT
-use 5.006;
+use 5.008;
use strict;
use warnings;
use lib 't/lib';
+use Test::RRA qw(skip_unless_automated use_prereq);
+
use File::Spec;
use Test::More;
-use Test::RRA qw(skip_unless_automated use_prereq);
# Skip for normal user installs since this doesn't affect functionality.
skip_unless_automated('Synopsis syntax tests');
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/docs/urls.t b/gnu/usr.bin/perl/cpan/podlators/t/docs/urls.t
deleted file mode 100644
index a654c5453c2..00000000000
--- a/gnu/usr.bin/perl/cpan/podlators/t/docs/urls.t
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/perl
-#
-# Check URLs in source files.
-#
-# Examine all source files in a distribution for bad URL patterns and report
-# on files that fail this check. Currently, this just checks that all the
-# links to www.eyrie.org are https.
-#
-# The canonical version of this file is maintained in the rra-c-util package,
-# which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
-#
-# Copyright 2016 Russ Allbery <eagle@eyrie.org>
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# DEALINGS IN THE SOFTWARE.
-#
-# SPDX-License-Identifier: MIT
-
-use 5.006;
-use strict;
-use warnings;
-
-use lib 't/lib';
-
-use File::Find qw(find);
-use Test::More;
-use Test::RRA qw(skip_unless_automated);
-
-# Bad patterns to search for.
-my @BAD_REGEXES = (qr{ http:// \S+ [.]eyrie[.]org }xms);
-my @BAD_STRINGS = qw(rra@stanford.edu);
-
-# File or directory names to always skip.
-my %SKIP = map { $_ => 1 } qw(.git _build blib cover_db);
-
-# Only run this test during automated testing, since failure doesn't indicate
-# any user-noticable flaw in the package itself.
-skip_unless_automated('Documentation URL tests');
-
-# Scan files for bad URL patterns. This is meant to be run as the wanted
-# function from File::Find.
-sub check_file {
- my $filename = $_;
-
- # Ignore this check itself (or the non-Perl version of it). Ignore any
- # directories or binary files. Ignore and prune any skipped files.
- if ($SKIP{$filename}) {
- $File::Find::prune = 1;
- return;
- }
- return if -d $filename;
- return if !-T $filename;
- return if ($filename eq 'urls.t' || $filename eq 'urls-t');
-
- # Scan the file.
- open(my $fh, '<', $filename) or BAIL_OUT("Cannot open $File::Find::name");
- while (defined(my $line = <$fh>)) {
- for my $regex (@BAD_REGEXES) {
- if ($line =~ $regex) {
- ok(0, "$File::Find::name contains $regex");
- close($fh) or BAIL_OUT("Cannot close $File::Find::name");
- return;
- }
- }
- for my $string (@BAD_STRINGS) {
- if (index($line, $string) != -1) {
- ok(0, "$File::Find::name contains $string");
- close($fh) or BAIL_OUT("Cannot close $File::Find::name");
- return;
- }
- }
- }
- close($fh) or BAIL_OUT("Cannot close $File::Find::name");
- ok(1, $File::Find::name);
- return;
-}
-
-# Use File::Find to scan all files from the top of the directory.
-find(\&check_file, q{.});
-done_testing();
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/general/basic.t b/gnu/usr.bin/perl/cpan/podlators/t/general/basic.t
index 717e3762dfd..d4978bcf366 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/general/basic.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/general/basic.t
@@ -12,7 +12,7 @@
# the machinery to run small POD snippets through the specific formatter being
# tested should probably be used instead.
#
-# Copyright 2001-2002, 2004, 2006, 2009, 2012, 2014-2015, 2018
+# Copyright 2001-2002, 2004, 2006, 2009, 2012, 2014-2015, 2018-2019
# Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
@@ -20,7 +20,7 @@
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-use 5.006;
+use 5.008;
use strict;
use warnings;
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/general/filehandle.t b/gnu/usr.bin/perl/cpan/podlators/t/general/filehandle.t
index 42601a05878..3c5d753a480 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/general/filehandle.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/general/filehandle.t
@@ -6,14 +6,14 @@
# Pod::Man and Pod::Text had to implement it directly. Test to be sure it's
# working properly.
#
-# Copyright 2006, 2009, 2012, 2014-2016, 2018 Russ Allbery <rra@cpan.org>
+# Copyright 2006, 2009, 2012, 2014-2016, 2018-2019 Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
# under the same terms as Perl itself.
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-use 5.006;
+use 5.008;
use strict;
use warnings;
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/general/pod-parser.t b/gnu/usr.bin/perl/cpan/podlators/t/general/pod-parser.t
index 9c51aff87a4..c008499298e 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/general/pod-parser.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/general/pod-parser.t
@@ -2,14 +2,14 @@
#
# Tests for backward compatibility with Pod::Parser.
#
-# Copyright 2006, 2008-2009, 2012, 2015, 2018 by Russ Allbery <rra@cpan.org>
+# Copyright 2006, 2008-2009, 2012, 2015, 2018-2019 Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
# under the same terms as Perl itself.
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-use 5.006;
+use 5.008;
use strict;
use warnings;
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/Podlators.pm b/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/Podlators.pm
index 3ae940924e2..9254f26468e 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/Podlators.pm
+++ b/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/Podlators.pm
@@ -8,7 +8,7 @@
package Test::Podlators;
-use 5.006;
+use 5.008;
use strict;
use warnings;
@@ -91,7 +91,6 @@ sub _stderr_restore {
# For the format, see t/data/snippets/README.
#
# $path - Relative path to read test data from
-# $encoding - Encoding of snippet (UTF-8 if not specified)
#
# Returns: Reference to hash of test data with the following keys:
# name - Name of the test for status reporting
@@ -101,20 +100,18 @@ sub _stderr_restore {
# errors - Expected errors
# exception - Text of exception (with file and line stripped)
sub read_snippet {
- my ($path, $encoding) = @_;
+ my ($path) = @_;
$path = File::Spec->catfile('t', 'data', 'snippets', $path);
- $encoding ||= 'UTF-8';
my %data;
# Read the sections and store them in the %data hash.
my ($line, $section);
open(my $fh, '<', $path) or BAIL_OUT("cannot open $path: $!");
while (defined($line = <$fh>)) {
- $line = decode($encoding, $line);
if ($line =~ m{ \A \s* \[ (\S+) \] \s* \z }xms) {
$section = $1;
+ $data{$section} = q{};
} elsif ($section) {
- $data{$section} ||= q{};
$data{$section} .= $line;
}
}
@@ -248,11 +245,17 @@ sub slurp {
# $class - Class name of the formatter, as a string
# $snippet - Path to the snippet file defining the test
# $options_ref - Hash of options with the following keys:
-# encoding - Set to use a non-standard encoding
+# encoding - Expect the output to be in this non-standard encoding
sub test_snippet {
my ($class, $snippet, $options_ref) = @_;
- my $encoding = defined($options_ref) ? $options_ref->{encoding} : undef;
- my $data_ref = read_snippet($snippet, $encoding);
+ my $data_ref = read_snippet($snippet);
+
+ # Determine the encoding to expect for the output portion of the snippet.
+ my $encoding;
+ if (defined($options_ref)) {
+ $encoding = $options_ref->{encoding};
+ }
+ $encoding ||= 'UTF-8';
# Create the formatter object.
my $parser = $class->new(%{ $data_ref->{options} }, name => 'TEST');
@@ -277,9 +280,10 @@ sub test_snippet {
$got =~ s{ \n\s+ \z }{\n}xms;
# Check the output, errors, and any exception.
- is($got, $data_ref->{output}, "$data_ref->{name}: output");
- if ($data_ref->{errors}) {
- is($stderr, $data_ref->{errors}, "$data_ref->{name}: errors");
+ my $expected = decode($encoding, $data_ref->{output});
+ is($got, $expected, "$data_ref->{name}: output");
+ if ($data_ref->{errors} || $stderr) {
+ is($stderr, $data_ref->{errors} || q{}, "$data_ref->{name}: errors");
}
if ($data_ref->{exception} || $exception) {
if ($exception) {
@@ -299,11 +303,19 @@ sub test_snippet {
# $class - Class name of the formatter, as a string
# $snippet - Path to the snippet file defining the test
# $options_ref - Hash of options with the following keys:
+# encoding - Expect the snippet to be in this non-standard encoding
# perlio_utf8 - Set to 1 to set a PerlIO UTF-8 encoding on the output file
sub test_snippet_with_io {
my ($class, $snippet, $options_ref) = @_;
my $data_ref = read_snippet($snippet);
+ # Determine the encoding to expect for the output portion of the snippet.
+ my $encoding;
+ if (defined($options_ref)) {
+ $encoding = $options_ref->{encoding};
+ }
+ $encoding ||= 'UTF-8';
+
# Create the formatter object.
my $parser = $class->new(%{ $data_ref->{options} }, name => 'TEST');
isa_ok($parser, $class, 'Parser object');
@@ -317,7 +329,7 @@ sub test_snippet_with_io {
my $input_file = File::Spec->catfile('t', 'tmp', "tmp$$.pod");
open(my $input, '>', $input_file)
or BAIL_OUT("cannot create $input_file: $!");
- print {$input} encode('UTF-8', $data_ref->{input})
+ print {$input} $data_ref->{input}
or BAIL_OUT("cannot write to $input_file: $!");
close($input) or BAIL_OUT("cannot flush output to $input_file: $!");
@@ -336,20 +348,23 @@ sub test_snippet_with_io {
$parser->parse_from_file($input_file, $output);
close($output) or BAIL_OUT("cannot flush output to $output_file: $!");
- # Read back in the results, checking to ensure that we didn't output the
- # accent definitions if we wrote UTF-8 output.
+ # Read back in the results. For Pod::Man, also ensure that we didn't
+ # output the accent definitions if we wrote UTF-8 output.
open(my $results, '<', $output_file)
or BAIL_OUT("cannot open $output_file: $!");
my ($line, $saw_accents);
- while (defined($line = <$results>)) {
- $line = decode('UTF-8', $line);
- if ($line =~ m{ Accent [ ] mark [ ] definitions }xms) {
- $saw_accents = 1;
+ if ($class eq 'Pod::Man') {
+ while (defined($line = <$results>)) {
+ $line = decode('UTF-8', $line);
+ if ($line =~ m{ Accent [ ] mark [ ] definitions }xms) {
+ $saw_accents = 1;
+ }
+ last if $line =~ m{ \A [.]nh }xms;
}
- last if $line =~ m{ \A [.]nh }xms;
}
my $saw = do { local $/ = undef; <$results> };
$saw = decode('UTF-8', $saw);
+ $saw =~ s{ \n\s+ \z }{\n}xms;
close($results) or BAIL_OUT("cannot close output file: $!");
# Clean up.
@@ -357,12 +372,18 @@ sub test_snippet_with_io {
# Check the accent definitions and the output.
my $perlio = $options_ref->{perlio_utf8} ? ' (PerlIO)' : q{};
+ if ($class eq 'Pod::Man') {
+ is(
+ $saw_accents,
+ $data_ref->{options}{utf8} ? undef : 1,
+ "$data_ref->{name}: accent definitions$perlio"
+ );
+ }
is(
- $saw_accents,
- $data_ref->{options}{utf8} ? undef : 1,
- "$data_ref->{name}: accent definitions$perlio"
+ $saw,
+ decode($encoding, $data_ref->{output}),
+ "$data_ref->{name}: output$perlio"
);
- is($saw, $data_ref->{output}, "$data_ref->{name}: output$perlio");
return;
}
@@ -396,15 +417,12 @@ should be explicitly imported.
=over 4
-=item read_snippet(PATH[, ENCODING])
+=item read_snippet(PATH)
Read one test snippet from the provided relative file name and return it. The
path should be relative to F<t/data/snippets>. For the format, see
F<t/data/snippets/README>.
-ENCODING, if present, specifies the encoding of the snippet. If not given,
-the snippet is assumed to be encoded in C<UTF-8>.
-
The result will be a hash with the following keys:
=over 4
@@ -489,7 +507,7 @@ it, and checking the results. Results are reported with Test::More.
OPTIONS, if present, is a reference to a hash of options. Currently, only
one key is supported: C<encoding>, which, if set, specifies the encoding of
-the snippet.
+the output portion of the snippet.
=item test_snippet_with_io(CLASS, SNIPPET[, OPTIONS])
@@ -509,7 +527,7 @@ Russ Allbery <rra@cpan.org>
=head1 COPYRIGHT AND LICENSE
-Copyright 2015, 2016, 2018 Russ Allbery <rra@cpan.org>
+Copyright 2015-2016, 2018-2020 Russ Allbery <rra@cpan.org>
This program is free software; you may redistribute it and/or modify it
under the same terms as Perl itself.
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA.pm b/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA.pm
index cbfdc42603c..1d5e4db23d4 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA.pm
+++ b/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA.pm
@@ -10,25 +10,41 @@
package Test::RRA;
-use 5.006;
+use 5.008;
+use base qw(Exporter);
use strict;
use warnings;
-use Exporter;
+use Carp qw(croak);
use File::Temp;
-use Test::More;
-# For Perl 5.006 compatibility.
-## no critic (ClassHierarchies::ProhibitExplicitISA)
+# Abort if Test::More was loaded before Test::RRA to be sure that we get the
+# benefits of the Test::More probing below.
+if ($INC{'Test/More.pm'}) {
+ croak('Test::More loaded before Test::RRA');
+}
+
+# Red Hat's base perl package doesn't include Test::More (one has to install
+# the perl-core package in addition). Try to detect this and skip any Perl
+# tests if Test::More is not present. This relies on Test::RRA being included
+# before Test::More.
+eval {
+ require Test::More;
+ Test::More->import();
+};
+if ($@) {
+ print "1..0 # SKIP Test::More required for test\n"
+ or croak('Cannot write to stdout');
+ exit 0;
+}
# Declare variables that should be set in BEGIN for robustness.
-our (@EXPORT_OK, @ISA, $VERSION);
+our (@EXPORT_OK, $VERSION);
# Set $VERSION and everything export-related in a BEGIN block for robustness
# against circular module loading (not that we load any modules, but
# consistency is good).
BEGIN {
- @ISA = qw(Exporter);
@EXPORT_OK = qw(
is_file_contents skip_unless_author skip_unless_automated use_prereq
);
@@ -36,7 +52,7 @@ BEGIN {
# This version should match the corresponding rra-c-util release, but with
# two digits for the minor version, including a leading zero if necessary,
# so that it will sort properly.
- $VERSION = '7.01';
+ $VERSION = '8.01';
}
# Compare a string to the contents of a file, similar to the standard is()
@@ -61,22 +77,27 @@ sub is_file_contents {
return;
}
- # Otherwise, we show a diff, but only if we have IPC::System::Simple.
- eval { require IPC::System::Simple };
+ # Otherwise, we show a diff, but only if we have IPC::System::Simple and
+ # diff succeeds. Otherwise, we fall back on showing the full expected and
+ # seen output.
+ eval {
+ require IPC::System::Simple;
+
+ my $tmp = File::Temp->new();
+ my $tmpname = $tmp->filename;
+ print {$tmp} $got or BAIL_OUT("Cannot write to $tmpname: $!\n");
+ my @command = ('diff', '-u', $expected, $tmpname);
+ my $diff = IPC::System::Simple::capturex([0 .. 1], @command);
+ diag($diff);
+ };
if ($@) {
- ok(0, $message);
- return;
+ diag('Expected:');
+ diag($expected);
+ diag('Seen:');
+ diag($data);
}
- # They're not equal. Write out what we got so that we can run diff.
- my $tmp = File::Temp->new();
- my $tmpname = $tmp->filename;
- print {$tmp} $got or BAIL_OUT("Cannot write to $tmpname: $!\n");
- my @command = ('diff', '-u', $expected, $tmpname);
- my $diff = IPC::System::Simple::capturex([0 .. 1], @command);
- diag($diff);
-
- # Remove the temporary file and report failure.
+ # Report failure.
ok(0, $message);
return;
}
@@ -91,7 +112,7 @@ sub is_file_contents {
sub skip_unless_author {
my ($description) = @_;
if (!$ENV{AUTHOR_TESTING}) {
- plan skip_all => "$description only run for author";
+ plan(skip_all => "$description only run for author");
}
return;
}
@@ -110,7 +131,7 @@ sub skip_unless_automated {
for my $env (qw(AUTOMATED_TESTING RELEASE_TESTING AUTHOR_TESTING)) {
return if $ENV{$env};
}
- plan skip_all => "$description normally skipped";
+ plan(skip_all => "$description normally skipped");
return;
}
@@ -152,14 +173,14 @@ sub use_prereq {
use $module $version \@imports;
1;
};
- $error = $@;
+ $error = $@;
$sigdie = $SIG{__DIE__} || undef;
}
# If the use failed for any reason, skip the test.
if (!$result || $error) {
my $name = length($version) > 0 ? "$module $version" : $module;
- plan skip_all => "$name required for test";
+ plan(skip_all => "$name required for test");
}
# If the module set $SIG{__DIE__}, we cleared that via local. Restore it.
@@ -202,6 +223,14 @@ This module collects utility functions that are useful for Perl test scripts.
It assumes Russ Allbery's Perl module layout and test conventions and will
only be useful for other people if they use the same conventions.
+This module B<must> be loaded before Test::More or it will abort during
+import. It will skip the test (by printing a skip message to standard output
+and exiting with status 0, equivalent to C<plan skip_all>) during import if
+Test::More is not available. This allows tests written in Perl using this
+module to be skipped if run on a system with Perl but not Test::More, such as
+Red Hat systems with the C<perl> package but not the C<perl-core> package
+installed.
+
=head1 FUNCTIONS
None of these functions are imported by default. The ones used by a script
@@ -246,7 +275,9 @@ Russ Allbery <eagle@eyrie.org>
=head1 COPYRIGHT AND LICENSE
-Copyright 2013, 2014 The Board of Trustees of the Leland Stanford Junior
+Copyright 2016, 2018-2019 Russ Allbery <eagle@eyrie.org>
+
+Copyright 2013-2014 The Board of Trustees of the Leland Stanford Junior
University
Permission is hereby granted, free of charge, to any person obtaining a copy
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA/Config.pm b/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA/Config.pm
index b2f94466dd2..80a15739410 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA/Config.pm
+++ b/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA/Config.pm
@@ -9,24 +9,20 @@
package Test::RRA::Config;
-use 5.006;
+use 5.008;
+use base qw(Exporter);
use strict;
use warnings;
-# For Perl 5.006 compatibility.
-## no critic (ClassHierarchies::ProhibitExplicitISA)
-
-use Exporter;
use Test::More;
# Declare variables that should be set in BEGIN for robustness.
-our (@EXPORT_OK, @ISA, $VERSION);
+our (@EXPORT_OK, $VERSION);
# Set $VERSION and everything export-related in a BEGIN block for robustness
# against circular module loading (not that we load any modules, but
# consistency is good).
BEGIN {
- @ISA = qw(Exporter);
@EXPORT_OK = qw(
$COVERAGE_LEVEL @COVERAGE_SKIP_TESTS @CRITIC_IGNORE $LIBRARY_PATH
$MINIMUM_VERSION %MINIMUM_VERSION @MODULE_VERSION_IGNORE
@@ -36,7 +32,7 @@ BEGIN {
# This version should match the corresponding rra-c-util release, but with
# two digits for the minor version, including a leading zero if necessary,
# so that it will sort properly.
- $VERSION = '7.01';
+ $VERSION = '8.01';
}
# If C_TAP_BUILD or C_TAP_SOURCE are set in the environment, look for
@@ -187,9 +183,9 @@ Russ Allbery <eagle@eyrie.org>
=head1 COPYRIGHT AND LICENSE
-Copyright 2015, 2016 Russ Allbery <eagle@eyrie.org>
+Copyright 2015-2016, 2019 Russ Allbery <eagle@eyrie.org>
-Copyright 2013, 2014 The Board of Trustees of the Leland Stanford Junior
+Copyright 2013-2014 The Board of Trustees of the Leland Stanford Junior
University
Permission is hereby granted, free of charge, to any person obtaining a copy
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA/ModuleVersion.pm b/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA/ModuleVersion.pm
index 3b3d6742df9..fc8bfbc8de5 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA/ModuleVersion.pm
+++ b/gnu/usr.bin/perl/cpan/podlators/t/lib/Test/RRA/ModuleVersion.pm
@@ -8,32 +8,28 @@
package Test::RRA::ModuleVersion;
-use 5.006;
+use 5.008;
+use base qw(Exporter);
use strict;
use warnings;
-use Exporter;
use File::Find qw(find);
use Test::More;
use Test::RRA::Config qw(@MODULE_VERSION_IGNORE);
-# For Perl 5.006 compatibility.
-## no critic (ClassHierarchies::ProhibitExplicitISA)
-
# Declare variables that should be set in BEGIN for robustness.
-our (@EXPORT_OK, @ISA, $VERSION);
+our (@EXPORT_OK, $VERSION);
# Set $VERSION and everything export-related in a BEGIN block for robustness
# against circular module loading (not that we load any modules, but
# consistency is good).
BEGIN {
- @ISA = qw(Exporter);
@EXPORT_OK = qw(test_module_versions update_module_versions);
# This version should match the corresponding rra-c-util release, but with
# two digits for the minor version, including a leading zero if necessary,
# so that it will sort properly.
- $VERSION = '7.01';
+ $VERSION = '8.01';
}
# A regular expression matching the version string for a module using the
@@ -129,21 +125,23 @@ sub _module_version {
# Throws: Text exception on I/O failure or inability to find version
sub _update_module_version {
my ($file, $version) = @_;
- open(my $in, q{<}, $file) or die "$0: cannot open $file: $!\n";
- open(my $out, q{>}, "$file.new")
- or die "$0: cannot create $file.new: $!\n";
- # If the version starts with v, use it without quotes. Otherwise, quote
- # it to prevent removal of trailing zeroes.
- if ($version !~ m{ \A v }xms) {
- $version = "'$version'";
+ # The old-style syntax may require different quoting. If the version
+ # starts with v, use it without quotes. Otherwise, quote it to prevent
+ # removal of trailing zeroes.
+ my $old_version = $version;
+ if ($old_version !~ m{ \A v }xms) {
+ $old_version = "'$old_version'";
}
# Scan for the version and replace it.
+ open(my $in, q{<}, $file) or die "$0: cannot open $file: $!\n";
+ open(my $out, q{>}, "$file.new")
+ or die "$0: cannot create $file.new: $!\n";
SCAN:
while (defined(my $line = <$in>)) {
if ( $line =~ s{ $REGEX_VERSION_PACKAGE }{$1$version$3}xms
- || $line =~ s{ $REGEX_VERSION_OLD }{$1$version$3}xms)
+ || $line =~ s{ $REGEX_VERSION_OLD }{$1$old_version$3}xms)
{
print {$out} $line or die "$0: cannot write to $file.new: $!\n";
last SCAN;
@@ -153,8 +151,8 @@ sub _update_module_version {
# Copy the rest of the input file to the output file.
print {$out} <$in> or die "$0: cannot write to $file.new: $!\n";
- close($out) or die "$0: cannot flush $file.new: $!\n";
- close($in) or die "$0: error reading from $file: $!\n";
+ close($out) or die "$0: cannot flush $file.new: $!\n";
+ close($in) or die "$0: error reading from $file: $!\n";
# All done. Rename the new file over top of the old file.
rename("$file.new", $file)
@@ -267,7 +265,7 @@ Russ Allbery <eagle@eyrie.org>
=head1 COPYRIGHT AND LICENSE
-Copyright 2016 Russ Allbery <eagle@eyrie.org>
+Copyright 2016, 2018-2019 Russ Allbery <eagle@eyrie.org>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/man/devise-date.t b/gnu/usr.bin/perl/cpan/podlators/t/man/devise-date.t
index 129721323c6..4729e0bf0f5 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/man/devise-date.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/man/devise-date.t
@@ -3,16 +3,16 @@
# In order for MakeMaker to build in the core, nothing can use Fcntl which
# includes POSIX. devise_date()'s use of strftime() was replaced. This tests
# that it's identical. It also tests special handling of the POD_MAN_DATE
-# environment variable.
+# and SOURCE_DATE_EPOCH environment variables.
#
-# Copyright 2009, 2014-2015, 2018 Russ Allbery <rra@cpan.org>
+# Copyright 2009, 2014-2015, 2018-2019 Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
# under the same terms as Perl itself.
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-use 5.006;
+use 5.008;
use strict;
use warnings;
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/man/devise-title.t b/gnu/usr.bin/perl/cpan/podlators/t/man/devise-title.t
index a7e5e7b89d2..b2e82468b47 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/man/devise-title.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/man/devise-title.t
@@ -3,14 +3,14 @@
# Tests for the automatic determination of the manual page title if not
# specified via options to pod2man or the Pod::Man constructor.
#
-# Copyright 2015-2016, 2018 Russ Allbery <rra@cpan.org>
+# Copyright 2015-2016, 2018-2019 Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
# under the same terms as Perl itself.
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-use 5.006;
+use 5.008;
use strict;
use warnings;
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/man/empty.t b/gnu/usr.bin/perl/cpan/podlators/t/man/empty.t
index 4924fc8466a..cd0cfccc37d 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/man/empty.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/man/empty.t
@@ -2,14 +2,14 @@
#
# Test Pod::Man with a document that produces only errors.
#
-# Copyright 2013, 2016, 2018 Russ Allbery <rra@cpan.org>
+# Copyright 2013, 2016, 2018-2019 Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
# under the same terms as Perl itself.
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-use 5.006;
+use 5.008;
use strict;
use warnings;
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/man/heading.t b/gnu/usr.bin/perl/cpan/podlators/t/man/heading.t
index 9691446b6f6..f8964025e3f 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/man/heading.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/man/heading.t
@@ -2,7 +2,7 @@
#
# Additional tests for Pod::Man heading generation.
#
-# Copyright 2002, 2004, 2006, 2008-2009, 2012, 2015, 2018
+# Copyright 2002, 2004, 2006, 2008-2009, 2012, 2015, 2018-2019
# Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
@@ -10,7 +10,7 @@
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-use 5.006;
+use 5.008;
use strict;
use warnings;
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/man/no-encode.t b/gnu/usr.bin/perl/cpan/podlators/t/man/no-encode.t
index 15522a5d96a..199016217d2 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/man/no-encode.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/man/no-encode.t
@@ -3,22 +3,25 @@
# Test for graceful degradation to non-utf8 output without Encode module.
#
# Copyright 2016 Niko Tyni <ntyni@iki.fi>
-# Copyright 2016, 2018 Russ Allbery <rra@cpan.org>
+# Copyright 2016, 2018-2019 Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
# under the same terms as Perl itself.
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-use 5.006;
+use 5.008;
use strict;
use warnings;
-use Test::More tests => 6;
+use Test::More tests => 5;
-# Force the Encode module to be impossible to import.
+# Remove the record of the Encode module being loaded if it already was (it
+# may have been loaded before the test suite runs), and then make it
+# impossible to load it. This should be enough to trigger the fallback code
+# in Pod::Man.
BEGIN {
- ok(!$INC{'Encode.pm'}, 'Encode is not loaded yet');
+ delete $INC{'Encode.pm'};
my $reject_encode = sub {
if ($_[1] eq 'Encode.pm') {
die "refusing to load Encode\n";
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/man/utf8-io.t b/gnu/usr.bin/perl/cpan/podlators/t/man/utf8-io.t
index d1c950076b3..76e21b98f04 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/man/utf8-io.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/man/utf8-io.t
@@ -1,8 +1,8 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
#
# Test Pod::Man UTF-8 handling, with and without PerlIO.
#
-# Copyright 2002, 2004, 2006, 2008-2010, 2012, 2014-2015, 2018
+# Copyright 2002, 2004, 2006, 2008-2010, 2012, 2014-2015, 2018-2020
# Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
@@ -10,24 +10,15 @@
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-use 5.006;
+use 5.008;
use strict;
use warnings;
use lib 't/lib';
-use Test::More;
+use Test::More tests => 13;
use Test::Podlators qw(test_snippet_with_io);
-# UTF-8 support requires Perl 5.8 or later.
-BEGIN {
- if ($] < 5.008) {
- plan skip_all => 'Perl 5.8 required for UTF-8 support';
- } else {
- plan tests => 13;
- }
-}
-
# Load the module.
BEGIN {
use_ok('Pod::Man');
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/parselink/basic.t b/gnu/usr.bin/perl/cpan/podlators/t/parselink/basic.t
index 48fbb37f137..0f39e563976 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/parselink/basic.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/parselink/basic.t
@@ -1,122 +1,120 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
#
-# parselink.t -- Tests for Pod::ParseLink.
+# Tests for Pod::ParseLink.
#
-# Copyright 2001, 2009, 2018 by Russ Allbery <rra@cpan.org>
+# Copyright 2001, 2009, 2018, 2020 by Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
# under the same terms as Perl itself.
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-# The format of each entry in this array is the L<> text followed by the
-# five-element parse returned by parselink.
-our @TESTS = (
- [ 'foo',
- undef, 'foo', 'foo', undef, 'pod' ],
-
- [ 'foo|bar',
- 'foo', 'foo', 'bar', undef, 'pod' ],
-
- [ 'foo/bar',
- undef, '"bar" in foo', 'foo', 'bar', 'pod' ],
-
- [ 'foo/"baz boo"',
- undef, '"baz boo" in foo', 'foo', 'baz boo', 'pod' ],
-
- [ '/bar',
- undef, '"bar"', undef, 'bar', 'pod' ],
-
- [ '/"baz boo"',
- undef, '"baz boo"', undef, 'baz boo', 'pod' ],
-
- [ '/baz boo',
- undef, '"baz boo"', undef, 'baz boo', 'pod' ],
-
- [ 'foo bar/baz boo',
- undef, '"baz boo" in foo bar', 'foo bar', 'baz boo', 'pod' ],
-
- [ 'foo bar / baz boo',
- undef, '"baz boo" in foo bar', 'foo bar', 'baz boo', 'pod' ],
-
- [ "foo\nbar\nbaz\n/\nboo",
- undef, '"boo" in foo bar baz', 'foo bar baz', 'boo', 'pod' ],
-
- [ 'anchor|name/section',
- 'anchor', 'anchor', 'name', 'section', 'pod' ],
-
- [ '"boo var baz"',
- undef, '"boo var baz"', undef, 'boo var baz', 'pod' ],
-
- [ 'bar baz',
- undef, '"bar baz"', undef, 'bar baz', 'pod' ],
-
- [ '"boo bar baz / baz boo"',
- undef, '"boo bar baz / baz boo"', undef, 'boo bar baz / baz boo',
- 'pod' ],
-
- [ 'fooZ<>bar',
- undef, 'fooZ<>bar', 'fooZ<>bar', undef, 'pod' ],
-
- [ 'Testing I<italics>|foo/bar',
- 'Testing I<italics>', 'Testing I<italics>', 'foo', 'bar', 'pod' ],
-
- [ 'foo/I<Italic> text',
- undef, '"I<Italic> text" in foo', 'foo', 'I<Italic> text', 'pod' ],
-
- [ 'fooE<verbar>barZ<>/Section C<with> I<B<other> markup',
- undef, '"Section C<with> I<B<other> markup" in fooE<verbar>barZ<>',
- 'fooE<verbar>barZ<>', 'Section C<with> I<B<other> markup', 'pod' ],
-
- [ 'Nested L<http://www.perl.org/>|fooE<sol>bar',
- 'Nested L<http://www.perl.org/>', 'Nested L<http://www.perl.org/>',
- 'fooE<sol>bar', undef, 'pod' ],
-
- [ 'ls(1)',
- undef, 'ls(1)', 'ls(1)', undef, 'man' ],
-
- [ ' perlfunc(1)/open ',
- undef, '"open" in perlfunc(1)', 'perlfunc(1)', 'open', 'man' ],
-
- [ 'some manual page|perl(1)',
- 'some manual page', 'some manual page', 'perl(1)', undef, 'man' ],
-
- [ 'http://www.perl.org/',
- undef, 'http://www.perl.org/', 'http://www.perl.org/', undef, 'url' ],
-
- [ 'news:yld72axzc8.fsf@windlord.stanford.edu',
- undef, 'news:yld72axzc8.fsf@windlord.stanford.edu',
- 'news:yld72axzc8.fsf@windlord.stanford.edu', undef, 'url' ],
-
- [ 'link|http://www.perl.org/',
- 'link', 'link', 'http://www.perl.org/', undef, 'url' ],
-
- [ '0|http://www.perl.org/',
- '0', '0', 'http://www.perl.org/', undef, 'url' ],
+use 5.008;
+use strict;
+use warnings;
- [ '0|Pod::Parser',
- '0', '0', 'Pod::Parser', undef, 'pod' ],
-);
+use Test::More tests => 28;
BEGIN {
- chdir 't' if -d 't';
- unshift (@INC, '../blib/lib');
- $| = 1;
+ use_ok('Pod::ParseLink');
}
-use strict;
-
-use Test::More tests => 28;
-BEGIN { use_ok ('Pod::ParseLink') }
-
-# Used for reporting test failures.
-my @names = qw(text inferred name section type);
+# The format of each entry in this array is the L<> text followed by the
+# five-element parse returned by parselink.
+our @TESTS = (
+ ['foo' => (undef, 'foo', 'foo', undef, 'pod')],
+ ['foo|bar' => ('foo', 'foo', 'bar', undef, 'pod')],
+ ['foo/bar' => (undef, '"bar" in foo', 'foo', 'bar', 'pod')],
+ ['foo/"baz boo"' => (undef, '"baz boo" in foo', 'foo', 'baz boo', 'pod')],
+ ['/bar' => (undef, '"bar"', undef, 'bar', 'pod')],
+ ['/"baz boo"' => (undef, '"baz boo"', undef, 'baz boo', 'pod')],
+ ['/baz boo', => (undef, '"baz boo"', undef, 'baz boo', 'pod')],
+ [
+ 'foo bar/baz boo' =>
+ (undef, '"baz boo" in foo bar', 'foo bar', 'baz boo', 'pod')
+ ],
+ [
+ 'foo bar / baz boo' =>
+ (undef, '"baz boo" in foo bar', 'foo bar', 'baz boo', 'pod')
+ ],
+ [
+ "foo\nbar\nbaz\n/\nboo" =>
+ (undef, '"boo" in foo bar baz', 'foo bar baz', 'boo', 'pod')
+ ],
+ ['anchor|name/section' => qw(anchor anchor name section pod)],
+ ['"boo var baz"' => (undef, '"boo var baz"', undef, 'boo var baz', 'pod')],
+ ['bar baz' => (undef, '"bar baz"', undef, 'bar baz', 'pod')],
+ [
+ '"boo bar baz / baz boo"' => (
+ undef, '"boo bar baz / baz boo"',
+ undef, 'boo bar baz / baz boo',
+ 'pod',
+ )
+ ],
+ ['fooZ<>bar' => (undef, 'fooZ<>bar', 'fooZ<>bar', undef, 'pod')],
+ [
+ 'Testing I<italics>|foo/bar' =>
+ ('Testing I<italics>', 'Testing I<italics>', 'foo', 'bar', 'pod')
+ ],
+ [
+ 'foo/I<Italic> text' =>
+ (undef, '"I<Italic> text" in foo', 'foo', 'I<Italic> text', 'pod')
+ ],
+ [
+ 'fooE<verbar>barZ<>/Section C<with> I<B<other> markup' => (
+ undef,
+ '"Section C<with> I<B<other> markup" in fooE<verbar>barZ<>',
+ 'fooE<verbar>barZ<>',
+ 'Section C<with> I<B<other> markup',
+ 'pod',
+ )
+ ],
+ [
+ 'Nested L<http://www.perl.org/>|fooE<sol>bar' => (
+ 'Nested L<http://www.perl.org/>',
+ 'Nested L<http://www.perl.org/>',
+ 'fooE<sol>bar', undef, 'pod',
+ )
+ ],
+ ['ls(1)' => (undef, 'ls(1)', 'ls(1)', undef, 'man')],
+ [
+ ' perlfunc(1)/open ' =>
+ (undef, '"open" in perlfunc(1)', 'perlfunc(1)', 'open', 'man')
+ ],
+ [
+ 'some manual page|perl(1)' =>
+ ('some manual page', 'some manual page', 'perl(1)', undef, 'man')
+ ],
+ [
+ 'http://www.perl.org/' => (
+ undef, 'http://www.perl.org/', 'http://www.perl.org/', undef,
+ 'url',
+ )
+ ],
+ [
+ 'news:yld72axzc8.fsf@windlord.stanford.edu' => (
+ undef,
+ 'news:yld72axzc8.fsf@windlord.stanford.edu',
+ 'news:yld72axzc8.fsf@windlord.stanford.edu',
+ undef, 'url',
+ )
+ ],
+ [
+ 'link|http://www.perl.org/' =>
+ ('link', 'link', 'http://www.perl.org/', undef, 'url')
+ ],
+ [
+ '0|http://www.perl.org/' =>
+ ('0', '0', 'http://www.perl.org/', undef, 'url')
+ ],
+ ['0|Pod::Parser' => ('0', '0', 'Pod::Parser', undef, 'pod')],
+);
-for (@TESTS) {
- my @expected = @$_;
- my $link = shift @expected;
- my @results = parselink ($link);
- my $pretty = $link;
- $pretty =~ s/\n/\\n/g;
- is_deeply (\@results, \@expected, $pretty);
+# Run all of the tests.
+for my $test (@TESTS) {
+ my ($link, @expected) = @$test;
+ my @results = parselink($link);
+ my $pretty = $link;
+ $pretty =~ s{\n}{\\n}xmsg;
+ is_deeply(\@results, \@expected, $pretty);
}
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/style/minimum-version.t b/gnu/usr.bin/perl/cpan/podlators/t/style/minimum-version.t
index 7698c2babf1..861367de4ae 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/style/minimum-version.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/style/minimum-version.t
@@ -6,6 +6,7 @@
# which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
#
# Written by Russ Allbery <eagle@eyrie.org>
+# Copyright 2019 Russ Allbery <eagle@eyrie.org>
# Copyright 2013-2014
# The Board of Trustees of the Leland Stanford Junior University
#
@@ -29,16 +30,17 @@
#
# SPDX-License-Identifier: MIT
-use 5.006;
+use 5.008;
use strict;
use warnings;
use lib 't/lib';
-use Test::More;
use Test::RRA qw(skip_unless_automated use_prereq);
use Test::RRA::Config qw($MINIMUM_VERSION);
+use Test::More;
+
# Skip for normal user installs since this doesn't affect functionality.
skip_unless_automated('Minimum version tests');
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/style/module-version.t b/gnu/usr.bin/perl/cpan/podlators/t/style/module-version.t
index 80368cb02e1..035b596de51 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/style/module-version.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/style/module-version.t
@@ -11,16 +11,17 @@
#
# SPDX-License-Identifier: MIT
-use 5.006;
+use 5.008;
use strict;
use warnings;
use lib 't/lib';
-use Getopt::Long qw(GetOptions);
use Test::RRA qw(skip_unless_automated use_prereq);
use Test::RRA::ModuleVersion qw(test_module_versions update_module_versions);
+use Getopt::Long qw(GetOptions);
+
# If we have options, we're being run from the command line and always load
# our prerequisite modules. Otherwise, check if we have necessary
# prerequisites and should run as a test suite.
@@ -120,7 +121,7 @@ Russ Allbery <eagle@eyrie.org>
=head1 COPYRIGHT AND LICENSE
-Copyright 2014-2016 Russ Allbery <eagle@eyrie.org>
+Copyright 2014-2016, 2019 Russ Allbery <eagle@eyrie.org>
Copyright 2013-2014 The Board of Trustees of the Leland Stanford Junior
University
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/style/strict.t b/gnu/usr.bin/perl/cpan/podlators/t/style/strict.t
index a3d2a3e942c..a87c1fabca1 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/style/strict.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/style/strict.t
@@ -6,7 +6,7 @@
# which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
#
# Written by Russ Allbery <eagle@eyrie.org>
-# Copyright 2016 Russ Allbery <eagle@eyrie.org>
+# Copyright 2016, 2018-2019 Russ Allbery <eagle@eyrie.org>
# Copyright 2013-2014
# The Board of Trustees of the Leland Stanford Junior University
#
@@ -30,15 +30,16 @@
#
# SPDX-License-Identifier: MIT
-use 5.006;
+use 5.008;
use strict;
use warnings;
use lib 't/lib';
-use File::Spec;
use Test::RRA qw(skip_unless_automated use_prereq);
+use File::Spec;
+
# Skip for normal user installs since this doesn't affect functionality.
skip_unless_automated('Strictness tests');
@@ -46,15 +47,40 @@ skip_unless_automated('Strictness tests');
# use 5.012 or later automatically implies use strict.
use_prereq('Test::Strict', '0.25');
-# Test everything in the distribution directory except the Build and
-# Makefile.PL scripts generated by Module::Build. We also want to check use
-# warnings.
-$Test::Strict::TEST_SKIP = ['Build', 'Makefile.PL'];
+# Directories to exclude from checks.
+my %EXCLUDE = map { $_ => 1 } qw(.git blib);
+
+# Determine whether we want to check the given file or top-level directory.
+# Assume that the only interesting files at the top level are directories or
+# files ending in *.PL.
+#
+# $file - Name of the file or directory
+#
+# Returns: 1 if it should be checked, undef otherwise.
+sub should_check {
+ my ($file) = @_;
+ return if $EXCLUDE{$file};
+ return 1 if -d $file;
+ return 1 if $file =~ m{ [.] PL \z }xms;
+ return;
+}
+
+# Test::Strict (as of 0.47) doesn't have a way of excluding whole directories
+# from all_perl_files_ok and doesn't exclude .git, which results in false
+# positives if there are Perl files unpacked under .git (which is often the
+# case when using dgit). We therefore can't just point it at the root of the
+# module distribution and instead have to manually construct a list of
+# interesting files.
+opendir(my $rootdir, File::Spec->curdir)
+ or die "$0: cannot open current directory: $!\n";
+my @files = File::Spec->no_upwards(readdir($rootdir));
+closedir($rootdir) or die "$0: cannot close current directory: $!\n";
+my @to_check = grep { should_check($_) } @files;
+
+# Test the files and top-level directories we found, including checking for
+# use warnings.
$Test::Strict::TEST_WARNINGS = 1;
-all_perl_files_ok(File::Spec->curdir);
+all_perl_files_ok(@to_check);
# Hack to suppress "used only once" warnings.
-END {
- $Test::Strict::TEST_SKIP = [];
- $Test::Strict::TEST_WARNINGS = 0;
-}
+END { $Test::Strict::TEST_WARNINGS = 0 }
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/basic.t b/gnu/usr.bin/perl/cpan/podlators/t/text/basic.t
deleted file mode 100644
index 024cc0e0e7f..00000000000
--- a/gnu/usr.bin/perl/cpan/podlators/t/text/basic.t
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Additional specialized tests for Pod::Text.
-#
-# Copyright 2002, 2004, 2006-2009, 2012, 2018
-# Russ Allbery <rra@cpan.org>
-#
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-
-BEGIN {
- chdir 't' if -d 't';
- if ($ENV{PERL_CORE}) {
- @INC = '../lib';
- }
- unshift (@INC, '../blib/lib');
- $| = 1;
-}
-
-use strict;
-
-use Pod::Simple;
-use Test::More tests => 9;
-BEGIN { use_ok ('Pod::Text') }
-
-my $parser = Pod::Text->new;
-isa_ok ($parser, 'Pod::Text', 'Parser object');
-my $n = 1;
-while (<DATA>) {
- next until $_ eq "###\n";
- open (TMP, "> tmp$$.pod") or die "Cannot create tmp$$.pod: $!\n";
- while (<DATA>) {
- last if $_ eq "###\n";
- print TMP $_;
- }
- close TMP;
- open (OUT, "> out$$.tmp") or die "Cannot create out$$.tmp: $!\n";
- $parser->parse_from_file ("tmp$$.pod", \*OUT);
- close OUT;
- open (TMP, "out$$.tmp") or die "Cannot open out$$.tmp: $!\n";
- my $output;
- {
- local $/;
- $output = <TMP>;
- }
- close TMP;
- 1 while unlink ("tmp$$.pod", "out$$.tmp");
- my $expected = '';
- while (<DATA>) {
- last if $_ eq "###\n";
- $expected .= $_;
- }
- is ($output, $expected, "Output correct for test $n");
- $n++;
-}
-
-# Below the marker are bits of POD and corresponding expected text output.
-# This is used to test specific features or problems with Pod::Text. The
-# input and output are separated by lines containing only ###.
-
-__DATA__
-
-###
-=head1 PERIODS
-
-This C<.> should be quoted.
-###
-PERIODS
- This "." should be quoted.
-
-###
-
-###
-=head1 CE<lt>E<gt> WITH SPACES
-
-What does C<< this. >> end up looking like?
-###
-C<> WITH SPACES
- What does "this." end up looking like?
-
-###
-
-###
-=head1 Test of SE<lt>E<gt>
-
-This is some S< > whitespace.
-###
-Test of S<>
- This is some whitespace.
-
-###
-
-###
-=head1 Test of =for
-
-=for comment
-This won't be seen.
-
-Yes.
-
-=for text
-This should be seen.
-
-=for TEXT As should this.
-
-=for man
-But this shouldn't.
-
-Some more text.
-###
-Test of =for
- Yes.
-
-This should be seen.
-As should this.
- Some more text.
-
-###
-
-###
-=pod
-
-text
-
- line1
-
- line3
-###
- text
-
- line1
-
- line3
-
-###
-
-###
-=head1 LINK TO URL
-
-This is a L<link|http://www.example.com/> to a URL.
-###
-LINK TO URL
- This is a link <http://www.example.com/> to a URL.
-
-###
-
-###
-=head1 RT LINK
-
-L<[perl #12345]|https://rt.cpan.org/12345>
-###
-RT LINK
- [perl #12345] <https://rt.cpan.org/12345>
-
-###
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/color.t b/gnu/usr.bin/perl/cpan/podlators/t/text/color.t
index b7edd48a27b..aa75beeb057 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/text/color.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/text/color.t
@@ -2,13 +2,13 @@
#
# Test Pod::Text::Color behavior with various snippets.
#
-# Copyright 2002, 2004, 2006, 2009, 2012-2013, 2018
+# Copyright 2002, 2004, 2006, 2009, 2012-2013, 2018-2019
# Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
# under the same terms as Perl itself.
-use 5.006;
+use 5.008;
use strict;
use warnings;
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/empty.t b/gnu/usr.bin/perl/cpan/podlators/t/text/empty.t
deleted file mode 100644
index e03a03c4a38..00000000000
--- a/gnu/usr.bin/perl/cpan/podlators/t/text/empty.t
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Test Pod::Text with a document that produces only errors.
-#
-# Copyright 2013, 2018 Russ Allbery <rra@cpan.org>
-#
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-
-BEGIN {
- chdir 't' if -d 't';
- if ($ENV{PERL_CORE}) {
- @INC = '../lib';
- }
- unshift (@INC, '../blib/lib');
- $| = 1;
-}
-
-use strict;
-
-use Test::More tests => 8;
-BEGIN { use_ok ('Pod::Text') }
-
-# Set up Pod::Text to output to a string.
-my $parser = Pod::Text->new;
-isa_ok ($parser, 'Pod::Text');
-my $output;
-$parser->output_string (\$output);
-
-# Try a POD document where the only command is invalid. Be sure that we don't
-# get any warnings as well as any errors.
-local $SIG{__WARN__} = sub { die $_[0] };
-ok (eval { $parser->parse_string_document("=\xa0") },
- 'Parsed invalid document');
-is ($@, '', '...with no errors');
-SKIP: {
- skip 'Pod::Simple does not produce errors for invalid commands', 1
- if $output eq q{};
- like ($output, qr{POD ERRORS},
- '...and output contains a POD ERRORS section');
-}
-
-# Try with a document containing only =cut.
-ok (eval { $parser->parse_string_document("=cut") },
- 'Parsed invalid document');
-is ($@, '', '...with no errors');
-SKIP: {
- skip 'Pod::Simple does not produce errors for invalid commands', 1
- if $output eq q{};
- like ($output, qr{POD ERRORS},
- '...and output contains a POD ERRORS section');
-}
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/encoding.t b/gnu/usr.bin/perl/cpan/podlators/t/text/encoding.t
deleted file mode 100644
index 7a6b6f2801b..00000000000
--- a/gnu/usr.bin/perl/cpan/podlators/t/text/encoding.t
+++ /dev/null
@@ -1,158 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Test Pod::Text with various weird encoding combinations.
-#
-# Copyright 2002, 2004, 2006-2009, 2012, 2015, 2018
-# Russ Allbery <rra@cpan.org>
-#
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-
-BEGIN {
- chdir 't' if -d 't';
- if ($ENV{PERL_CORE}) {
- @INC = '../lib';
- }
- unshift (@INC, '../blib/lib');
- $| = 1;
-}
-
-use strict;
-
-use Test::More;
-
-# UTF-8 support requires Perl 5.8 or later.
-BEGIN {
- if ($] < 5.008) {
- plan skip_all => 'Perl 5.8 required for encoding support';
- } else {
- plan tests => 7;
- }
-}
-BEGIN { use_ok ('Pod::Text') }
-
-eval { binmode (\*DATA, ':raw') };
-eval { binmode (\*STDOUT, ':raw') };
-my $builder = Test::More->builder;
-eval { binmode ($builder->output, ':raw') };
-eval { binmode ($builder->failure_output, ':raw') };
-
-my $n = 1;
-while (<DATA>) {
- my %opts;
- next until $_ eq "###\n";
- my $parser = Pod::Text->new (%opts);
- isa_ok ($parser, 'Pod::Text', 'Parser object');
- open (TMP, "> tmp$$.pod") or die "Cannot create tmp$$.pod: $!\n";
- eval { binmode (\*TMP, ':raw') };
- while (<DATA>) {
- last if $_ eq "###\n";
- print TMP $_;
- }
- close TMP;
- open (OUT, "> out$$.tmp") or die "Cannot create out$$.tmp: $!\n";
- eval { binmode (\*OUT, ':raw') };
- $parser->parse_from_file ("tmp$$.pod", \*OUT);
- close OUT;
- open (TMP, "out$$.tmp") or die "Cannot open out$$.tmp: $!\n";
- eval { binmode (\*TMP, ':raw') };
- my $output;
- {
- local $/;
- $output = <TMP>;
- }
- close TMP;
- 1 while unlink ("tmp$$.pod", "out$$.tmp");
- my $expected = '';
- while (<DATA>) {
- last if $_ eq "###\n";
- $expected .= $_;
- }
- is ($output, $expected, "Output correct for test $n");
- $n++;
-}
-
-# Below the marker are bits of POD and corresponding expected text output.
-# This is used to test specific features or problems with Pod::Text. The
-# input and output are separated by lines containing only ###.
-
-__DATA__
-
-###
-=head1 Test of SE<lt>E<gt>
-
-This is S<some whitespace>.
-###
-Test of S<>
- This is some whitespace.
-
-###
-
-###
-=encoding utf-8
-
-=head1 I can eat glass
-
-=over 4
-
-=item Esperanto
-
-Mi povas manĝi vitron, ĝi ne damaĝas min.
-
-=item Braille
-
-⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞⠀⠙⠕⠑⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑
-
-=item Hindi
-
-मैं काँच खा सकता हूँ और मुझे उससे कोई चोट नहीं पहुंचती.
-
-=back
-
-See L<http://www.columbia.edu/kermit/utf8.html>
-###
-I can eat glass
- Esperanto
- Mi povas manĝi vitron, ĝi ne damaĝas min.
-
- Braille
- ⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞â
- €â ™â •â ‘⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑
-
- Hindi
- मैं काँच खा सकता हूँ और
- मुझे उससे कोई चोट नहीं
- पहुंचती.
-
- See <http://www.columbia.edu/kermit/utf8.html>
-
-###
-
-###
-=pod
-
-=head1 NAME
-
-This is the first ascii text
-
-=encoding utf8
-
-=over 4
-
-=item ⇒This is the first non-ascii text⇐
-
-This is the second ascii text
-
-=back
-
-=cut
-###
-NAME
- This is the first ascii text
-
- ⇒This is the first non-ascii text⇐
- This is the second ascii text
-
-###
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/options.t b/gnu/usr.bin/perl/cpan/podlators/t/text/options.t
deleted file mode 100644
index d191cf00f97..00000000000
--- a/gnu/usr.bin/perl/cpan/podlators/t/text/options.t
+++ /dev/null
@@ -1,368 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Additional tests for Pod::Text options.
-#
-# Copyright 2002, 2004, 2006, 2008-2009, 2012-2013, 2015, 2018
-# Russ Allbery <rra@cpan.org>
-#
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-
-BEGIN {
- chdir 't' if -d 't';
- if ($ENV{PERL_CORE}) {
- @INC = '../lib';
- }
- unshift (@INC, '../blib/lib');
- $| = 1;
-}
-
-use strict;
-
-use Test::More tests => 37;
-BEGIN { use_ok ('Pod::Text') }
-
-# Redirect stderr to a file.
-sub stderr_save {
- open (OLDERR, '>&STDERR') or die "Can't dup STDERR: $!\n";
- open (STDERR, "> out$$.err") or die "Can't redirect STDERR: $!\n";
-}
-
-# Restore stderr.
-sub stderr_restore {
- close STDERR;
- open (STDERR, '>&OLDERR') or die "Can't dup STDERR: $!\n";
- close OLDERR;
-}
-
-my $n = 1;
-while (<DATA>) {
- my %options;
- next until $_ eq "###\n";
- while (<DATA>) {
- last if $_ eq "###\n";
- my ($option, $value) = split;
- $options{$option} = $value;
- }
- open (TMP, "> tmp$$.pod") or die "Cannot create tmp$$.pod: $!\n";
- while (<DATA>) {
- last if $_ eq "###\n";
- print TMP $_;
- }
- close TMP;
- my $parser = Pod::Text->new (%options);
- isa_ok ($parser, 'Pod::Text', 'Parser object');
- open (OUT, "> out$$.tmp") or die "Cannot create out$$.tmp: $!\n";
- stderr_save;
- eval { $parser->parse_from_file ("tmp$$.pod", \*OUT) };
- my $exception = $@;
- stderr_restore;
- close OUT;
- open (TMP, "out$$.tmp") or die "Cannot open out$$.tmp: $!\n";
- my $output;
- {
- local $/;
- $output = <TMP>;
- }
- close TMP;
- 1 while unlink ("tmp$$.pod", "out$$.tmp");
- my $expected = '';
- while (<DATA>) {
- last if $_ eq "###\n";
- $expected .= $_;
- }
- is ($output, $expected, "Output correct for test $n");
- open (ERR, "out$$.err") or die "Cannot open out$$.err: $!\n";
- my $errors;
- {
- local $/;
- $errors = <ERR>;
- }
- close ERR;
- $errors =~ s/\Qtmp$$.pod/tmp.pod/g;
- 1 while unlink ("out$$.err");
- if ($exception) {
- $exception =~ s/ at .*//;
- $errors .= "EXCEPTION: $exception";
- }
- $expected = '';
- while (<DATA>) {
- last if $_ eq "###\n";
- $expected .= $_;
- }
- is ($errors, $expected, "Errors correct for test $n");
- $n++;
-}
-
-# Below the marker are bits of POD and corresponding expected text output.
-# This is used to test specific features or problems with Pod::Text. The
-# options, input, output, and errors are separated by lines containing only
-# ###.
-
-__DATA__
-
-###
-alt 1
-###
-=head1 SAMPLE
-
-=over 4
-
-=item F
-
-Paragraph.
-
-=item Bar
-
-=item B
-
-Paragraph.
-
-=item Longer
-
-Paragraph.
-
-=back
-
-###
-
-==== SAMPLE ====
-
-: F Paragraph.
-
-: Bar
-: B Paragraph.
-
-: Longer
- Paragraph.
-
-###
-###
-
-###
-margin 4
-###
-=head1 SAMPLE
-
-This is some body text that is long enough to be a paragraph that wraps,
-thereby testing margins with wrapped paragraphs.
-
- This is some verbatim text.
-
-=over 6
-
-=item Test
-
-This is a test of an indented paragraph.
-
-This is another indented paragraph.
-
-=back
-###
- SAMPLE
- This is some body text that is long enough to be a paragraph that
- wraps, thereby testing margins with wrapped paragraphs.
-
- This is some verbatim text.
-
- Test This is a test of an indented paragraph.
-
- This is another indented paragraph.
-
-###
-###
-
-###
-code 1
-###
-This is some random text.
-This is more random text.
-
-This is some random text.
-This is more random text.
-
-=head1 SAMPLE
-
-This is POD.
-
-=cut
-
-This is more random text.
-###
-This is some random text.
-This is more random text.
-
-This is some random text.
-This is more random text.
-
-SAMPLE
- This is POD.
-
-
-This is more random text.
-###
-###
-
-###
-sentence 1
-###
-=head1 EXAMPLE
-
-Whitespace around C<< this. >> must be ignored per perlpodspec. >>
-needs to eat all of the space in front of it.
-
-=cut
-###
-EXAMPLE
- Whitespace around "this." must be ignored per perlpodspec. >> needs to
- eat all of the space in front of it.
-
-###
-###
-
-###
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
- Foo Bar.
-
-NEXT
-POD ERRORS
- Hey! The above document had some coding errors, which are explained
- below:
-
- Around line 7:
- You forgot a '=back' before '=head1'
-
-###
-###
-
-###
-stderr 1
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
- Foo Bar.
-
-NEXT
-###
-tmp.pod around line 7: You forgot a '=back' before '=head1'
-###
-
-###
-nourls 1
-###
-=head1 URL suppression
-
-L<anchor|http://www.example.com/>
-###
-URL suppression
- anchor
-
-###
-###
-
-###
-errors stderr
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
- Foo Bar.
-
-NEXT
-###
-tmp.pod around line 7: You forgot a '=back' before '=head1'
-###
-
-###
-errors die
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
- Foo Bar.
-
-NEXT
-###
-tmp.pod around line 7: You forgot a '=back' before '=head1'
-EXCEPTION: POD document had syntax errors
-###
-
-###
-errors pod
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
- Foo Bar.
-
-NEXT
-POD ERRORS
- Hey! The above document had some coding errors, which are explained
- below:
-
- Around line 7:
- You forgot a '=back' before '=head1'
-
-###
-###
-
-###
-errors none
-###
-=over 4
-
-=item Foo
-
-Bar.
-
-=head1 NEXT
-###
- Foo Bar.
-
-NEXT
-###
-###
-
-###
-quotes <<<>>>
-###
-=head1 FOO C<BAR> BAZ
-
-Foo C<bar> baz.
-###
-FOO <<<BAR>>> BAZ
- Foo <<<bar>>> baz.
-
-###
-###
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/overstrike.t b/gnu/usr.bin/perl/cpan/podlators/t/text/overstrike.t
index 7433264cb3c..7cdaa538b2d 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/text/overstrike.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/text/overstrike.t
@@ -1,8 +1,8 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
#
-# Additional specialized tests for Pod::Text::Overstrike.
+# Test Pod::Text::Overstrike with various snippets.
#
-# Copyright 2002, 2004, 2006, 2009, 2012-2013, 2018
+# Copyright 2002, 2004, 2006, 2009, 2012-2013, 2018-2019
# Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
@@ -10,97 +10,23 @@
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-BEGIN {
- chdir 't' if -d 't';
- if ($ENV{PERL_CORE}) {
- @INC = '../lib';
- }
- unshift (@INC, '../blib/lib');
- $| = 1;
-}
-
+use 5.008;
use strict;
+use warnings;
-use Test::More tests => 4;
-BEGIN { use_ok ('Pod::Text::Overstrike') }
-
-my $parser = Pod::Text::Overstrike->new;
-isa_ok ($parser, 'Pod::Text::Overstrike', 'Parser module');
-my $n = 1;
-while (<DATA>) {
- next until $_ eq "###\n";
- open (TMP, "> tmp$$.pod") or die "Cannot create tmp$$.pod: $!\n";
- while (<DATA>) {
- last if $_ eq "###\n";
- print TMP $_;
- }
- close TMP;
- open (OUT, "> out$$.tmp") or die "Cannot create out$$.tmp: $!\n";
- $parser->parse_from_file ("tmp$$.pod", \*OUT);
- close OUT;
- open (TMP, "out$$.tmp") or die "Cannot open out$$.tmp: $!\n";
- my $output;
- {
- local $/;
- $output = <TMP>;
- }
- close TMP;
- 1 while unlink ("tmp$$.pod", "out$$.tmp");
- my $expected = '';
- while (<DATA>) {
- last if $_ eq "###\n";
- $expected .= $_;
- }
- is ($output, $expected, "Output correct for test $n");
- $n++;
-}
-
-# Below the marker are bits of POD and corresponding expected output. This is
-# used to test specific features or problems with Pod::Text::Termcap. The
-# input and output are separated by lines containing only ###.
-
-__DATA__
-
-###
-=head1 WRAPPING
-
-B<I<Do>> I<B<not>> B<I<include>> B<I<formatting codes when>> B<I<wrapping>>.
-###
-WWRRAAPPPPIINNGG
- DDoo _n_o_t iinncclluuddee ffoorrmmaattttiinngg  ccooddeess  wwhheenn wwrraappppiinngg.
-
-###
-
-###
-=head1 TAG WIDTH
-
-=over 10
+use lib 't/lib';
-=item 12345678
+use Test::More tests => 5;
+use Test::Podlators qw(test_snippet);
-A
-
-=item B<12345678>
-
-B
-
-=item 1Z<>
-
-C
-
-=item B<1>
-
-D
-
-=back
-###
-TTAAGG  WWIIDDTTHH
- 12345678 A
-
- 1122334455667788 B
-
- 1 C
+BEGIN {
+ use_ok('Pod::Text::Overstrike');
+}
- 11 D
+# List of snippets run by this test.
+my @snippets = qw(tag-width wrapping);
-###
+# Run all the tests.
+for my $snippet (@snippets) {
+ test_snippet('Pod::Text::Overstrike', "overstrike/$snippet");
+}
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/perlio.t b/gnu/usr.bin/perl/cpan/podlators/t/text/perlio.t
deleted file mode 100644
index 1b6523d328a..00000000000
--- a/gnu/usr.bin/perl/cpan/podlators/t/text/perlio.t
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Test Pod::Text with a PerlIO UTF-8 encoding layer.
-#
-# Copyright 2002, 2004, 2006-2010, 2012, 2014, 2018
-# Russ Allbery <rra@cpan.org>
-#
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-
-BEGIN {
- chdir 't' if -d 't';
- if ($ENV{PERL_CORE}) {
- @INC = '../lib';
- }
- unshift (@INC, '../blib/lib');
- $| = 1;
-}
-
-use strict;
-
-use Test::More;
-
-# UTF-8 support requires Perl 5.8 or later.
-BEGIN {
- if ($] < 5.008) {
- plan skip_all => 'Perl 5.8 required for UTF-8 support';
- } else {
- plan tests => 4;
- }
-}
-BEGIN { use_ok ('Pod::Text') }
-
-# Force UTF-8 on all relevant file handles. Hide this in a string eval so
-# that older versions of Perl don't croak and minimum-version tests still
-# pass.
-eval 'binmode (\*DATA, ":encoding(utf-8)")';
-eval 'binmode (\*STDOUT, ":encoding(utf-8)")';
-my $builder = Test::More->builder;
-eval 'binmode ($builder->output, ":encoding(utf-8)")';
-eval 'binmode ($builder->failure_output, ":encoding(utf-8)")';
-
-my $parser = Pod::Text->new (utf8 => 1);
-isa_ok ($parser, 'Pod::Text', 'Parser object');
-my $n = 1;
-while (<DATA>) {
- next until $_ eq "###\n";
- open (TMP, "> tmp$$.pod") or die "Cannot create tmp$$.pod: $!\n";
- eval 'binmode (\*TMP, ":encoding(utf-8)")';
- print TMP "=encoding UTF-8\n\n";
- while (<DATA>) {
- last if $_ eq "###\n";
- print TMP $_;
- }
- close TMP;
- open (OUT, "> out$$.tmp") or die "Cannot create out$$.tmp: $!\n";
- eval 'binmode (\*OUT, ":encoding(utf-8)")';
- $parser->parse_from_file ("tmp$$.pod", \*OUT);
- close OUT;
- open (TMP, "out$$.tmp") or die "Cannot open out$$.tmp: $!\n";
- eval 'binmode (\*TMP, ":encoding(utf-8)")';
- my $output;
- {
- local $/;
- $output = <TMP>;
- }
- close TMP;
- 1 while unlink ("tmp$$.pod", "out$$.tmp");
- my $expected = '';
- while (<DATA>) {
- last if $_ eq "###\n";
- $expected .= $_;
- }
- is ($output, $expected, "Output correct for test $n");
- $n++;
-}
-
-# Below the marker are bits of POD and corresponding expected text output.
-# This is used to test specific features or problems with Pod::Text. The
-# input and output are separated by lines containing only ###.
-
-__DATA__
-
-###
-=head1 Test of SE<lt>E<gt>
-
-This is S<some whitespace>.
-###
-Test of S<>
- This is some whitespace.
-
-###
-
-###
-=head1 I can eat glass
-
-=over 4
-
-=item Esperanto
-
-Mi povas manĝi vitron, ĝi ne damaĝas min.
-
-=item Braille
-
-⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞⠀⠙⠕⠑⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑
-
-=item Hindi
-
-मैं काँच खा सकता हूँ और मुझे उससे कोई चोट नहीं पहुंचती.
-
-=back
-
-See L<http://www.columbia.edu/kermit/utf8.html>
-###
-I can eat glass
- Esperanto
- Mi povas manĝi vitron, ĝi ne damaĝas min.
-
- Braille
- ⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞⠀⠙⠕⠑⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑
-
- Hindi
- मैं काँच खा सकता हूँ और मुझे उससे कोई चोट नहीं पहुंचती.
-
- See <http://www.columbia.edu/kermit/utf8.html>
-
-###
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/termcap.t b/gnu/usr.bin/perl/cpan/podlators/t/text/termcap.t
index 4a9893a9daa..598e0b56203 100644
--- a/gnu/usr.bin/perl/cpan/podlators/t/text/termcap.t
+++ b/gnu/usr.bin/perl/cpan/podlators/t/text/termcap.t
@@ -2,19 +2,21 @@
#
# Test Pod::Text::Termcap behavior with various snippets.
#
-# Copyright 2002, 2004, 2006, 2009, 2012-2014, 2018
+# Copyright 2002, 2004, 2006, 2009, 2012-2014, 2018-2019
# Russ Allbery <rra@cpan.org>
#
# This program is free software; you may redistribute it and/or modify it
# under the same terms as Perl itself.
+#
+# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-use 5.006;
+use 5.008;
use strict;
use warnings;
use lib 't/lib';
-use Test::More tests => 11;
+use Test::More tests => 15;
use Test::Podlators qw(test_snippet);
# Load the module.
@@ -28,6 +30,10 @@ $ENV{TERM} = 'xterm';
$ENV{TERMPATH} = File::Spec->catfile('t', 'data', 'termcap');
$ENV{TERMCAP} = 'xterm:co=#80:do=^J:md=\E[1m:us=\E[4m:me=\E[m';
+# Check the regex that matches a single formatting character.
+my $parser = Pod::Text::Termcap->new();
+is($parser->format_regex(), "\\\e\\[1m|\\\e\\[4m|\\\e\\[m", 'Character regex');
+
# List of snippets run by this test.
my @snippets = qw(escape-wrapping tag-width tag-wrapping width wrapping);
@@ -35,3 +41,15 @@ my @snippets = qw(escape-wrapping tag-width tag-wrapping width wrapping);
for my $snippet (@snippets) {
test_snippet('Pod::Text::Termcap', "termcap/$snippet");
}
+
+# Now test with an unknown terminal type.
+$ENV{TERM} = 'unknown';
+$ENV{TERMCAP} = 'unknown:co=#80:do=^J';
+test_snippet('Pod::Text::Termcap', 'termcap/term-unknown');
+
+# Test the character regex with a fake terminal type that only provides bold
+# and normal, not underline.
+$ENV{TERM} = 'fake-test-terminal';
+$ENV{TERMCAP} = 'fake-test-terminal:md=\E[1m:me=\E[m';
+$parser = Pod::Text::Termcap->new();
+is($parser->format_regex(), "\\\e\\[1m|\\\e\\[m", 'Limited character regex');
diff --git a/gnu/usr.bin/perl/cpan/podlators/t/text/utf8.t b/gnu/usr.bin/perl/cpan/podlators/t/text/utf8.t
deleted file mode 100644
index a04010ea101..00000000000
--- a/gnu/usr.bin/perl/cpan/podlators/t/text/utf8.t
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Test Pod::Text with UTF-8 input.
-#
-# Copyright 2002, 2004, 2006-2009, 2012, 2014, 2018
-# Russ Allbery <rra@cpan.org>
-#
-# This program is free software; you may redistribute it and/or modify it
-# under the same terms as Perl itself.
-#
-# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl
-
-BEGIN {
- chdir 't' if -d 't';
- if ($ENV{PERL_CORE}) {
- @INC = '../lib';
- }
- unshift (@INC, '../blib/lib');
- $| = 1;
-}
-
-use strict;
-
-use Test::More;
-
-# UTF-8 support requires Perl 5.8 or later.
-BEGIN {
- if ($] < 5.008) {
- plan skip_all => 'Perl 5.8 required for UTF-8 support';
- } else {
- plan tests => 4;
- }
-}
-BEGIN { use_ok ('Pod::Text') }
-
-# Force UTF-8 on all relevant file handles. Hide this in a string eval so
-# that older versions of Perl don't croak and minimum-version tests still
-# pass.
-eval 'binmode (\*DATA, ":encoding(utf-8)")';
-eval 'binmode (\*STDOUT, ":encoding(utf-8)")';
-my $builder = Test::More->builder;
-eval 'binmode ($builder->output, ":encoding(utf-8)")';
-eval 'binmode ($builder->failure_output, ":encoding(utf-8)")';
-
-my $parser = Pod::Text->new;
-isa_ok ($parser, 'Pod::Text', 'Parser object');
-my $n = 1;
-while (<DATA>) {
- next until $_ eq "###\n";
- open (TMP, "> tmp$$.pod") or die "Cannot create tmp$$.pod: $!\n";
- eval 'binmode (\*TMP, ":encoding(utf-8)")';
- print TMP "=encoding UTF-8\n\n";
- while (<DATA>) {
- last if $_ eq "###\n";
- print TMP $_;
- }
- close TMP;
- open (OUT, "> out$$.tmp") or die "Cannot create out$$.tmp: $!\n";
- $parser->parse_from_file ("tmp$$.pod", \*OUT);
- close OUT;
- open (TMP, "out$$.tmp") or die "Cannot open out$$.tmp: $!\n";
- eval 'binmode (\*TMP, ":encoding(utf-8)")';
- my $output;
- {
- local $/;
- $output = <TMP>;
- }
- close TMP;
- 1 while unlink ("tmp$$.pod", "out$$.tmp");
- my $expected = '';
- while (<DATA>) {
- last if $_ eq "###\n";
- $expected .= $_;
- }
- is ($output, $expected, "Output correct for test $n");
- $n++;
-}
-
-# Below the marker are bits of POD and corresponding expected text output.
-# This is used to test specific features or problems with Pod::Text. The
-# input and output are separated by lines containing only ###.
-
-__DATA__
-
-###
-=head1 Test of SE<lt>E<gt>
-
-This is S<some whitespace>.
-###
-Test of S<>
- This is some whitespace.
-
-###
-
-###
-=head1 I can eat glass
-
-=over 4
-
-=item Esperanto
-
-Mi povas manĝi vitron, ĝi ne damaĝas min.
-
-=item Braille
-
-⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞⠀⠙⠕⠑⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑
-
-=item Hindi
-
-मैं काँच खा सकता हूँ और मुझे उससे कोई चोट नहीं पहुंचती.
-
-=back
-
-See L<http://www.columbia.edu/kermit/utf8.html>
-###
-I can eat glass
- Esperanto
- Mi povas manĝi vitron, ĝi ne damaĝas min.
-
- Braille
- ⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀⠁⠝⠙⠀⠊⠞⠀⠙⠕⠑⠎⠝⠞⠀⠓⠥⠗⠞⠀⠍⠑
-
- Hindi
- मैं काँच खा सकता हूँ और मुझे उससे कोई चोट नहीं पहुंचती.
-
- See <http://www.columbia.edu/kermit/utf8.html>
-
-###
diff --git a/gnu/usr.bin/perl/cv.h b/gnu/usr.bin/perl/cv.h
index d50e320f167..9a169e865cf 100644
--- a/gnu/usr.bin/perl/cv.h
+++ b/gnu/usr.bin/perl/cv.h
@@ -18,7 +18,7 @@ struct xpvcv {
/*
=head1 Handy Values
-=for apidoc AmU||Nullcv
+=for apidoc ADmnU||Nullcv
Null CV pointer.
(deprecated - use C<(CV *)NULL> instead)
@@ -49,7 +49,7 @@ See L<perlguts/Autoloading with XSUBs>.
#define CvROOT(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_root_u.xcv_root
#define CvXSUB(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_root_u.xcv_xsub
#define CvXSUBANY(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_start_u.xcv_xsubany
-#define CvGV(sv) S_CvGV(aTHX_ (CV *)(sv))
+#define CvGV(sv) Perl_CvGV(aTHX_ (CV *)(sv))
#define CvGV_set(cv,gv) Perl_cvgv_set(aTHX_ cv, gv)
#define CvHASGV(cv) cBOOL(SvANY(cv)->xcv_gv_u.xcv_gv)
#define CvFILE(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_file
@@ -61,9 +61,9 @@ See L<perlguts/Autoloading with XSUBs>.
(CvFILE(sv) = CopFILE(cop), CvDYNFILE_off(sv))
#endif
#define CvFILEGV(sv) (gv_fetchfile(CvFILE(sv)))
-#define CvDEPTH(sv) (*S_CvDEPTHp((const CV *)sv))
+#define CvDEPTH(sv) (*Perl_CvDEPTH((const CV *)sv))
/* For use when you only have a XPVCV*, not a real CV*.
- Must be assert protected as in S_CvDEPTHp before use. */
+ Must be assert protected as in Perl_CvDEPTH before use. */
#define CvDEPTHunsafe(sv) ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_depth
/* these CvPADLIST/CvRESERVED asserts can be reverted one day, once stabilized */
diff --git a/gnu/usr.bin/perl/cygwin/cygwin.c b/gnu/usr.bin/perl/cygwin/cygwin.c
index fae90af0001..56094b9b950 100644
--- a/gnu/usr.bin/perl/cygwin/cygwin.c
+++ b/gnu/usr.bin/perl/cygwin/cygwin.c
@@ -112,8 +112,8 @@ do_spawn (char *cmd)
if (strBEGINs (cmd,"exec") && isSPACE (cmd[4]))
goto doshell;
for (s=cmd; *s && isALPHA (*s); s++) ; /* catch VAR=val gizmo */
- if (*s=='=')
- goto doshell;
+ if (*s=='=')
+ goto doshell;
for (s=cmd; *s; s++)
if (strchr (metachars,*s))
@@ -219,7 +219,7 @@ XS(Cygwin_cwd)
dXSARGS;
char *cwd;
- /* See http://rt.perl.org/rt3/Ticket/Display.html?id=38628
+ /* See https://github.com/Perl/perl5/issues/8345
There is Cwd->cwd() usage in the wild, and previous versions didn't die.
*/
if(items > 1)
@@ -302,7 +302,7 @@ XS(XS_Cygwin_win_to_posix_path)
*/
if (isutf8) {
int what = absolute_flag ? CCP_WIN_W_TO_POSIX : CCP_WIN_W_TO_POSIX | CCP_RELATIVE;
- int wlen = sizeof(wchar_t)*(len + 260 + 1001);
+ STRLEN wlen = sizeof(wchar_t)*(len + 260 + 1001);
wchar_t *wpath = (wchar_t *) safemalloc(sizeof(wchar_t)*len);
wchar_t *wbuf = (wchar_t *) safemalloc(wlen);
if (!IN_BYTES) {
@@ -333,7 +333,7 @@ XS(XS_Cygwin_win_to_posix_path)
}
/* utf16_to_utf8(*p, *d, bytlen, *newlen) */
posix_path = (char *) safemalloc(wlen*3);
- Perl_utf16_to_utf8(aTHX_ (U8*)&wpath, (U8*)posix_path, (I32)wlen*2, (I32*)&len);
+ Perl_utf16_to_utf8(aTHX_ (U8*)&wpath, (U8*)posix_path, wlen*2, &len);
/*
wlen = wcsrtombs(NULL, (const wchar_t **)&wbuf, wlen, NULL);
posix_path = (char *) safemalloc(wlen+1);
diff --git a/gnu/usr.bin/perl/dist/Data-Dumper/Dumper.pm b/gnu/usr.bin/perl/dist/Data-Dumper/Dumper.pm
index 4866af98612..4de79bbda40 100644
--- a/gnu/usr.bin/perl/dist/Data-Dumper/Dumper.pm
+++ b/gnu/usr.bin/perl/dist/Data-Dumper/Dumper.pm
@@ -10,7 +10,7 @@
package Data::Dumper;
BEGIN {
- $VERSION = '2.174'; # Don't forget to set version and release
+ $VERSION = '2.174_01'; # Don't forget to set version and release
} # date in POD below!
#$| = 1;
@@ -1467,7 +1467,7 @@ modify it under the same terms as Perl itself.
=head1 VERSION
-Version 2.174
+Version 2.174_01
=head1 SEE ALSO
diff --git a/gnu/usr.bin/perl/dist/Data-Dumper/Dumper.xs b/gnu/usr.bin/perl/dist/Data-Dumper/Dumper.xs
index a324cb6429b..65639aebf1a 100644
--- a/gnu/usr.bin/perl/dist/Data-Dumper/Dumper.xs
+++ b/gnu/usr.bin/perl/dist/Data-Dumper/Dumper.xs
@@ -808,12 +808,13 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
sv_catpvs(retval, "( ");
if (style->indent >= 2) {
blesspad = apad;
- apad = newSVsv(apad);
+ apad = sv_2mortal(newSVsv(apad));
sv_x(aTHX_ apad, " ", 1, blesslen+2);
}
}
ipad = sv_x(aTHX_ Nullsv, SvPVX_const(style->xpad), SvCUR(style->xpad), level+1);
+ sv_2mortal(ipad);
if (is_regex)
{
@@ -878,7 +879,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
realtype <= SVt_PVMG
#endif
) { /* scalar ref */
- SV * const namesv = newSVpvs("${");
+ SV * const namesv = sv_2mortal(newSVpvs("${"));
sv_catpvn(namesv, name, namelen);
sv_catpvs(namesv, "}");
if (realpack) { /* blessed */
@@ -892,7 +893,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
DD_dump(aTHX_ ival, SvPVX_const(namesv), SvCUR(namesv), retval, seenhv,
postav, level+1, apad, style);
}
- SvREFCNT_dec(namesv);
}
else if (realtype == SVt_PVGV) { /* glob ref */
SV * const namesv = newSVpvs("*{");
@@ -908,9 +908,10 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
SSize_t ix = 0;
const SSize_t ixmax = av_len((AV *)ival);
- SV * const ixsv = newSViv(0);
+ SV * const ixsv = sv_2mortal(newSViv(0));
/* allowing for a 24 char wide array index */
New(0, iname, namelen+28, char);
+ SAVEFREEPV(iname);
(void) strlcpy(iname, name, namelen+28);
inamelen = namelen;
if (name[0] == '@') {
@@ -940,7 +941,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
iname[inamelen++] = '-'; iname[inamelen++] = '>';
}
iname[inamelen++] = '['; iname[inamelen] = '\0';
- totpad = newSVsv(style->sep);
+ totpad = sv_2mortal(newSVsv(style->sep));
sv_catsv(totpad, style->pad);
sv_catsv(totpad, apad);
@@ -970,8 +971,12 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
}
sv_catsv(retval, totpad);
sv_catsv(retval, ipad);
+ ENTER;
+ SAVETMPS;
DD_dump(aTHX_ elem, iname, ilen, retval, seenhv, postav,
level+1, apad, style);
+ FREETMPS;
+ LEAVE;
if (ix < ixmax || (style->trailingcomma && style->indent >= 1))
sv_catpvs(retval, ",");
}
@@ -985,9 +990,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
sv_catpvs(retval, ")");
else
sv_catpvs(retval, "]");
- SvREFCNT_dec(ixsv);
- SvREFCNT_dec(totpad);
- Safefree(iname);
}
else if (realtype == SVt_PVHV) {
SV *totpad, *newapad;
@@ -997,7 +999,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
SV *hval;
AV *keys = NULL;
- SV * const iname = newSVpvn(name, namelen);
+ SV * const iname = newSVpvn_flags(name, namelen, SVs_TEMP);
if (name[0] == '%') {
sv_catpvs(retval, "(");
(SvPVX(iname))[0] = '$';
@@ -1021,7 +1023,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
sv_catpvs(iname, "->");
}
sv_catpvs(iname, "{");
- totpad = newSVsv(style->sep);
+ totpad = sv_2mortal(newSVsv(style->sep));
sv_catsv(totpad, style->pad);
sv_catsv(totpad, apad);
@@ -1117,6 +1119,10 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
sv_catsv(retval, totpad);
sv_catsv(retval, ipad);
+
+ ENTER;
+ SAVETMPS;
+
/* The (very)
old logic was first to check utf8 flag, and if utf8 always
call esc_q_utf8. This caused test to break under -Mutf8,
@@ -1143,6 +1149,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
else {
nticks = num_q(key, klen);
New(0, nkey_buffer, klen+nticks+3, char);
+ SAVEFREEPV(nkey_buffer);
nkey = nkey_buffer;
nkey[0] = '\'';
if (nticks)
@@ -1160,7 +1167,8 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
nlen = klen;
sv_catpvn(retval, nkey, klen);
}
- sname = newSVsv(iname);
+
+ sname = sv_2mortal(newSVsv(iname));
sv_catpvn(sname, nkey, nlen);
sv_catpvs(sname, "}");
@@ -1168,7 +1176,7 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
if (style->indent >= 2) {
char *extra;
STRLEN elen = 0;
- newapad = newSVsv(apad);
+ newapad = sv_2mortal(newSVsv(apad));
New(0, extra, klen+4+1, char);
while (elen < (klen+4))
extra[elen++] = ' ';
@@ -1181,10 +1189,9 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
DD_dump(aTHX_ hval, SvPVX_const(sname), SvCUR(sname), retval, seenhv,
postav, level+1, newapad, style);
- SvREFCNT_dec(sname);
- Safefree(nkey_buffer);
- if (style->indent >= 2)
- SvREFCNT_dec(newapad);
+
+ FREETMPS;
+ LEAVE;
}
if (i) {
SV *opad = sv_x(aTHX_ Nullsv, SvPVX_const(style->xpad),
@@ -1199,8 +1206,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
sv_catpvs(retval, ")");
else
sv_catpvs(retval, "}");
- SvREFCNT_dec(iname);
- SvREFCNT_dec(totpad);
}
else if (realtype == SVt_PVCV) {
if (style->deparse) {
@@ -1247,7 +1252,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
STRLEN plen, pticks;
if (style->indent >= 2) {
- SvREFCNT_dec(apad);
apad = blesspad;
}
sv_catpvs(retval, ", '");
@@ -1276,7 +1280,6 @@ DD_dump(pTHX_ SV *val, const char *name, STRLEN namelen, SV *retval, HV *seenhv,
sv_catpvs(retval, "()");
}
}
- SvREFCNT_dec(ipad);
}
else {
STRLEN i;
@@ -1541,7 +1544,7 @@ Data_Dumper_Dumpxs(href, ...)
seenhv = NULL;
name = sv_newmortal();
- retval = newSVpvs("");
+ retval = newSVpvs_flags("", SVs_TEMP);
if (SvROK(href)
&& (hv = (HV*)SvRV((SV*)href))
&& SvTYPE(hv) == SVt_PVHV) {
@@ -1613,12 +1616,13 @@ Data_Dumper_Dumpxs(href, ...)
style.sortkeys = &PL_sv_yes;
}
postav = newAV();
+ sv_2mortal((SV*)postav);
if (todumpav)
imax = av_len(todumpav);
else
imax = -1;
- valstr = newSVpvs("");
+ valstr = newSVpvs_flags("", SVs_TEMP);
for (i = 0; i <= imax; ++i) {
SV *newapad;
@@ -1670,20 +1674,21 @@ Data_Dumper_Dumpxs(href, ...)
if (style.indent >= 2 && !terse) {
SV * const tmpsv = sv_x(aTHX_ NULL, " ", 1, SvCUR(name)+3);
- newapad = newSVsv(apad);
+ newapad = sv_2mortal(newSVsv(apad));
sv_catsv(newapad, tmpsv);
SvREFCNT_dec(tmpsv);
}
else
newapad = apad;
+ ENTER;
+ SAVETMPS;
PUTBACK;
DD_dump(aTHX_ val, SvPVX_const(name), SvCUR(name), valstr, seenhv,
postav, 0, newapad, &style);
SPAGAIN;
-
- if (style.indent >= 2 && !terse)
- SvREFCNT_dec(newapad);
+ FREETMPS;
+ LEAVE;
postlen = av_len(postav);
if (postlen >= 0 || !terse) {
@@ -1714,13 +1719,11 @@ Data_Dumper_Dumpxs(href, ...)
}
SvPVCLEAR(valstr);
if (gimme == G_ARRAY) {
- XPUSHs(sv_2mortal(retval));
+ XPUSHs(retval);
if (i < imax) /* not the last time thro ? */
- retval = newSVpvs("");
+ retval = newSVpvs_flags("", SVs_TEMP);
}
}
- SvREFCNT_dec(postav);
- SvREFCNT_dec(valstr);
/* we defer croaking until here so that temporary SVs and
* buffers won't be leaked */
@@ -1732,7 +1735,7 @@ Data_Dumper_Dumpxs(href, ...)
else
croak("Call to new() method failed to return HASH ref");
if (gimme != G_ARRAY)
- XPUSHs(sv_2mortal(retval));
+ XPUSHs(retval);
}
SV *
diff --git a/gnu/usr.bin/perl/dist/Data-Dumper/t/dumper.t b/gnu/usr.bin/perl/dist/Data-Dumper/t/dumper.t
index 6a5d1479a14..bb01154fcc8 100755
--- a/gnu/usr.bin/perl/dist/Data-Dumper/t/dumper.t
+++ b/gnu/usr.bin/perl/dist/Data-Dumper/t/dumper.t
@@ -1784,9 +1784,15 @@ $WANT = change_glob_expectation(<<'EOT');
EOT
{
local $Data::Dumper::Useqq = 1;
- TEST (q(Data::Dumper->Dump([\@globs], ["globs"])), 'globs: Dump()');
- TEST (q(Data::Dumper->Dumpxs([\@globs], ["globs"])), 'globs: Dumpxs()')
- if $XS;
+ if (ord("A") == 65) {
+ TEST (q(Data::Dumper->Dump([\@globs], ["globs"])), 'globs: Dump()');
+ TEST (q(Data::Dumper->Dumpxs([\@globs], ["globs"])), 'globs: Dumpxs()')
+ if $XS;
+ }
+ else {
+ SKIP_TEST "ASCII-dependent test";
+ SKIP_TEST "ASCII-dependent test";
+ }
}
#############
$WANT = change_glob_expectation(<<'EOT');
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/PPPort_xs.PL b/gnu/usr.bin/perl/dist/Devel-PPPort/PPPort_xs.PL
deleted file mode 100644
index d00cffa81bf..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/PPPort_xs.PL
+++ /dev/null
@@ -1,128 +0,0 @@
-################################################################################
-#
-# PPPort_xs.PL -- generate RealPPPort.xs
-#
-################################################################################
-#
-# Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
-# Version 2.x, Copyright (C) 2001, Paul Marquess.
-# Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-#
-################################################################################
-
-use strict;
-$^W = 1;
-require "./parts/ppptools.pl";
-
-my %SECTION = (
- xshead => { code => '', header => "/* ---- code from __FILE__ ---- */" },
- xsinit => { code => '', header => "/* ---- code from __FILE__ ---- */" },
- xsmisc => { code => '', header => "/* ---- code from __FILE__ ---- */" },
- xsboot => { code => '', header => "/* ---- code from __FILE__ ---- */", indent => "\t" },
- xsubs => { code => '', header => <<ENDHEADER },
-##----------------------------------------------------------------------
-## XSUBs for testing the implementation in __FILE__
-##----------------------------------------------------------------------
-ENDHEADER
-);
-
-if (not exists $ENV{PERL_NO_GET_CONTEXT} or $ENV{PERL_NO_GET_CONTEXT}) {
-$SECTION{xshead}{code} .= <<END;
-#define PERL_NO_GET_CONTEXT
-END
-}
-
-my $file;
-my $sec;
-
-for $file (all_files_in_dir('parts/inc')) {
- my $spec = parse_partspec($file);
-
- my $msg = 0;
- for $sec (keys %SECTION) {
- if (exists $spec->{$sec}) {
- $msg++ or print "adding XS code from $file\n";
- if (exists $SECTION{$sec}{header}) {
- my $header = $SECTION{$sec}{header};
- $header =~ s/__FILE__/$file/g;
- $SECTION{$sec}{code} .= $header . "\n";
- }
- $SECTION{$sec}{code} .= $spec->{$sec} . "\n";
- }
- }
-}
-
-my $data = do { local $/; <DATA> };
-
-for $sec (keys %SECTION) {
- my $code = $SECTION{$sec}{code};
- if (exists $SECTION{$sec}{indent}) {
- $code =~ s/^/$SECTION{$sec}{indent}/gm;
- }
- $code =~ s/[\r\n]+$//;
- $data =~ s/^__\U$sec\E__$/$code/m;
-}
-
-open FH, ">RealPPPort.xs" or die "RealPPPort.xs: $!\n";
-print FH $data;
-close FH;
-
-exit 0;
-
-__DATA__
-/*******************************************************************************
-*
-* !!!!! Do NOT edit this file directly! -- Edit PPPort_xs.PL instead. !!!!!
-*
-* This file was automatically generated from the definition files in the
-* parts/inc/ subdirectory by PPPort_xs.PL. To learn more about how all this
-* works, please read the F<HACKERS> file that came with this distribution.
-*
-********************************************************************************
-*
-* Perl/Pollution/Portability
-*
-********************************************************************************
-*
-* Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
-* Version 2.x, Copyright (C) 2001, Paul Marquess.
-* Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the same terms as Perl itself.
-*
-*******************************************************************************/
-
-/* ========== BEGIN XSHEAD ================================================== */
-
-__XSHEAD__
-
-/* =========== END XSHEAD =================================================== */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-/* ========== BEGIN XSINIT ================================================== */
-
-__XSINIT__
-
-/* =========== END XSINIT =================================================== */
-
-#include "ppport.h"
-
-/* ========== BEGIN XSMISC ================================================== */
-
-__XSMISC__
-
-/* =========== END XSMISC =================================================== */
-
-MODULE = Devel::PPPort PACKAGE = Devel::PPPort
-
-BOOT:
-__XSBOOT__
-
-__XSUBS__
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/devel/mkapidoc.sh b/gnu/usr.bin/perl/dist/Devel-PPPort/devel/mkapidoc.sh
deleted file mode 100644
index ff96ccc6a64..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/devel/mkapidoc.sh
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/bin/bash
-################################################################################
-#
-# mkapidoc.sh -- generate apidoc.fnc from scanning the Perl source
-#
-################################################################################
-#
-# Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
-# Version 2.x, Copyright (C) 2001, Paul Marquess.
-# Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-#
-################################################################################
-
-function isperlroot
-{
- [ -f "$1/embed.fnc" ] && [ -f "$1/perl.h" ]
-}
-
-function usage
-{
- echo "USAGE: $0 [perlroot] [output-file] [embed.fnc]"
- exit 0
-}
-
-if [ -z "$1" ]; then
- if isperlroot "../../.."; then
- PERLROOT=../../..
- else
- PERLROOT=.
- fi
-else
- PERLROOT=$1
-fi
-
-if [ -z "$2" ]; then
- if [ -f "parts/apidoc.fnc" ]; then
- OUTPUT="parts/apidoc.fnc"
- else
- usage
- fi
-else
- OUTPUT=$2
-fi
-
-if [ -z "$3" ]; then
- if [ -f "parts/embed.fnc" ]; then
- EMBED="parts/embed.fnc"
- else
- usage
- fi
-else
- EMBED=$3
-fi
-
-if isperlroot $PERLROOT; then
- cat >$OUTPUT <<EOF
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-:
-: !!!! Do NOT edit this file directly! -- Edit devel/mkapidoc.sh instead. !!!!
-:
-: This file was automatically generated from the API documentation scattered
-: all over the Perl source code. To learn more about how all this works,
-: please read the F<HACKERS> file that came with this distribution.
-:
-::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
-:
-: This file lists all API functions/macros that are documented in the Perl
-: source code, but are not contained in F<embed.fnc>.
-:
-
-EOF
- grep -hr '^=for apidoc' $PERLROOT | sed -e 's/=for apidoc //' | grep '|' | sort | uniq \
- | perl -e'$f=pop;open(F,$f)||die"$f:$!";while(<F>){(split/\|/)[2]=~/(\w+)/;$h{$1}++}
- while(<>){s/[ \t]+$//;(split/\|/)[2]=~/(\w+)/;$h{$1}||print}' $EMBED >>$OUTPUT
-else
- usage
-fi
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5003070 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5003070
deleted file mode 100644
index 722f52f91f0..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5003070
+++ /dev/null
@@ -1,42 +0,0 @@
-5.003070
-HEf_SVKEY # E
-HeHASH # U
-HeKEY # U
-HeKLEN # U
-HeSVKEY # U
-HeSVKEY_force # U
-HeVAL # U
-cv_const_sv # U
-do_open # E (Perl_do_open)
-gv_efullname3 # U
-gv_fullname3 # U
-gv_stashpvn # E
-hv_delete_ent # U
-hv_exists_ent # U
-hv_fetch_ent # U
-hv_iterkeysv # E
-hv_ksplit # E
-hv_store_ent # U
-my_pclose # E (Perl_my_pclose)
-my_popen # E (Perl_my_popen)
-sv_gets # E (Perl_sv_gets)
-unsharepvn # E
-PERL_HASH # added by devel/scanprov
-PERL_INT_MAX # added by devel/scanprov
-PERL_INT_MIN # added by devel/scanprov
-PERL_LONG_MAX # added by devel/scanprov
-PERL_LONG_MIN # added by devel/scanprov
-PERL_QUAD_MAX # added by devel/scanprov
-PERL_QUAD_MIN # added by devel/scanprov
-PERL_SHORT_MAX # added by devel/scanprov
-PERL_SHORT_MIN # added by devel/scanprov
-PERL_UCHAR_MAX # added by devel/scanprov
-PERL_UCHAR_MIN # added by devel/scanprov
-PERL_UINT_MAX # added by devel/scanprov
-PERL_UINT_MIN # added by devel/scanprov
-PERL_ULONG_MAX # added by devel/scanprov
-PERL_ULONG_MIN # added by devel/scanprov
-PERL_UQUAD_MAX # added by devel/scanprov
-PERL_UQUAD_MIN # added by devel/scanprov
-PERL_USHORT_MAX # added by devel/scanprov
-PERL_USHORT_MIN # added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004010 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004010
deleted file mode 100644
index 8c298666039..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004010
+++ /dev/null
@@ -1 +0,0 @@
-5.004010
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004020 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004020
deleted file mode 100644
index 4b43fdf8e46..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004020
+++ /dev/null
@@ -1 +0,0 @@
-5.004020
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004030 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004030
deleted file mode 100644
index e45facbb1f9..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004030
+++ /dev/null
@@ -1 +0,0 @@
-5.004030
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004040 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004040
deleted file mode 100644
index 69ccd5d62c5..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004040
+++ /dev/null
@@ -1 +0,0 @@
-5.004040
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004050 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004050
deleted file mode 100644
index daf95d5f00c..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5004050
+++ /dev/null
@@ -1,42 +0,0 @@
-5.004050
-PL_na # E
-PL_sv_no # E
-PL_sv_undef # E
-PL_sv_yes # E
-SvGETMAGIC # U
-do_binmode # E
-my_bcopy # U
-newCONSTSUB # E
-newSVpvn # E
-save_aelem # U
-save_helem # U
-sv_catpv_mg # E
-sv_catpvn_mg # U
-sv_catsv_mg # U
-sv_setiv_mg # E
-sv_setpv_mg # E
-sv_setpvn_mg # E
-sv_setsv_mg # E
-sv_setuv_mg # E
-sv_usepvn_mg # U
-AvFILLp # added by devel/scanprov
-DEFSV # added by devel/scanprov
-ERRSV # added by devel/scanprov
-PL_compiling # added by devel/scanprov
-PL_curcop # added by devel/scanprov
-PL_curstash # added by devel/scanprov
-PL_debstash # added by devel/scanprov
-PL_defgv # added by devel/scanprov
-PL_diehook # added by devel/scanprov
-PL_dirty # added by devel/scanprov
-PL_errgv # added by devel/scanprov
-PL_perl_destruct_level # added by devel/scanprov
-PL_perldb # added by devel/scanprov
-PL_stack_base # added by devel/scanprov
-PL_stack_sp # added by devel/scanprov
-PL_stdingv # added by devel/scanprov
-PL_sv_arenaroot # added by devel/scanprov
-PL_tainted # added by devel/scanprov
-PL_tainting # added by devel/scanprov
-SAVE_DEFSV # added by devel/scanprov
-dTHR # added by devel/scanprov
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005010 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005010
deleted file mode 100644
index deebff5bf8a..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005010
+++ /dev/null
@@ -1 +0,0 @@
-5.005010
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005020 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005020
deleted file mode 100644
index d19ff2ae09e..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005020
+++ /dev/null
@@ -1 +0,0 @@
-5.005020
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005030 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005030
deleted file mode 100644
index f268c751dad..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005030
+++ /dev/null
@@ -1,4 +0,0 @@
-5.005030
-POPpx # E
-get_vtbl # E
-save_generic_svref # E
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005040 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005040
deleted file mode 100644
index 8a165c20337..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/base/5005040
+++ /dev/null
@@ -1 +0,0 @@
-5.005040
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5003070 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5003070
deleted file mode 100644
index df2f8476925..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5003070
+++ /dev/null
@@ -1,21 +0,0 @@
-5.003070
-HeHASH # U
-HeKEY # U
-HeKLEN # U
-HeSVKEY # U
-HeSVKEY_force # U
-HeVAL # U
-cv_const_sv # U
-do_open # E (Perl_do_open)
-gv_efullname3 # U
-gv_fullname3 # U
-hv_delete_ent # U
-hv_exists_ent # U
-hv_fetch_ent # U
-hv_iterkeysv # U
-hv_ksplit # U
-hv_store_ent # U
-my_pclose # E (Perl_my_pclose)
-my_popen # E (Perl_my_popen)
-sv_gets # E (Perl_sv_gets)
-unsharepvn # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004010 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004010
deleted file mode 100644
index 8c298666039..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004010
+++ /dev/null
@@ -1 +0,0 @@
-5.004010
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004020 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004020
deleted file mode 100644
index 4b43fdf8e46..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004020
+++ /dev/null
@@ -1 +0,0 @@
-5.004020
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004030 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004030
deleted file mode 100644
index e45facbb1f9..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004030
+++ /dev/null
@@ -1 +0,0 @@
-5.004030
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004040 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004040
deleted file mode 100644
index 69ccd5d62c5..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004040
+++ /dev/null
@@ -1 +0,0 @@
-5.004040
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004050 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004050
deleted file mode 100644
index 0f7a1f73fe5..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5004050
+++ /dev/null
@@ -1,7 +0,0 @@
-5.004050
-CopyD # E
-MoveD # E
-do_binmode # U
-my_bcopy # U
-save_aelem # U
-save_helem # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005010 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005010
deleted file mode 100644
index deebff5bf8a..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005010
+++ /dev/null
@@ -1 +0,0 @@
-5.005010
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005020 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005020
deleted file mode 100644
index d19ff2ae09e..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005020
+++ /dev/null
@@ -1 +0,0 @@
-5.005020
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005030 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005030
deleted file mode 100644
index 885afa0d233..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005030
+++ /dev/null
@@ -1,4 +0,0 @@
-5.005030
-POPpx # E
-get_vtbl # U
-save_generic_svref # U
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005040 b/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005040
deleted file mode 100644
index 8a165c20337..00000000000
--- a/gnu/usr.bin/perl/dist/Devel-PPPort/parts/todo/5005040
+++ /dev/null
@@ -1 +0,0 @@
-5.005040
diff --git a/gnu/usr.bin/perl/dist/Dumpvalue/lib/Dumpvalue.pm b/gnu/usr.bin/perl/dist/Dumpvalue/lib/Dumpvalue.pm
index eef9b27157b..5a0d58ade7a 100644
--- a/gnu/usr.bin/perl/dist/Dumpvalue/lib/Dumpvalue.pm
+++ b/gnu/usr.bin/perl/dist/Dumpvalue/lib/Dumpvalue.pm
@@ -1,7 +1,8 @@
use 5.006_001; # for (defined ref) and $#$v and our
package Dumpvalue;
use strict;
-our $VERSION = '1.18';
+use warnings;
+our $VERSION = '1.21';
our(%address, $stab, @stab, %stab, %subs);
sub ASCII { return ord('A') == 65; }
@@ -79,7 +80,7 @@ sub dumpValues {
my $self = shift;
local %address;
local $^W=0;
- (print "undef\n"), return unless defined $_[0];
+ (print "undef\n"), return if (@_ == 1 and not defined $_[0]);
$self->unwrap(\@_,0);
}
@@ -101,6 +102,7 @@ sub stringify {
my $tick = $self->{tick};
return 'undef' unless defined $_ or not $self->{printUndef};
+ $_ = '' if not defined $_;
return $_ . "" if ref \$_ eq 'GLOB';
{ no strict 'refs';
$_ = &{'overload::StrVal'}($_)
@@ -176,7 +178,7 @@ sub unwrap {
my $self = shift;
return if $DB::signal and $self->{stopDbSignal};
my ($v) = shift ;
- my ($s) = shift ; # extra no of spaces
+ my ($s) = shift || 0; # extra no of spaces
my $sp;
my (%v,@v,$address,$short,$fileno);
@@ -254,7 +256,7 @@ sub unwrap {
if ($#$v >= 0) {
$short = $sp . "0..$#{$v} " .
join(" ",
- map {exists $v->[$_] ? $self->stringify($v->[$_]) : "empty"} (0..$tArrayDepth)
+ map {defined $v->[$_] ? $self->stringify($v->[$_]) : "empty"} (0..$tArrayDepth)
) . "$shortmore";
} else {
$short = $sp . "empty array";
@@ -264,7 +266,7 @@ sub unwrap {
for my $num (0 .. $tArrayDepth) {
return if $DB::signal and $self->{stopDbSignal};
print "$sp$num ";
- if (exists $v->[$num]) {
+ if (defined $v->[$num]) {
$self->DumpElem($v->[$num], $s);
} else {
print "empty slot\n";
@@ -390,6 +392,7 @@ sub CvGV_name {
sub dumpsub {
my $self = shift;
my ($off,$sub) = @_;
+ $off ||= 0;
my $ini = $sub;
my $s;
$sub = $1 if $sub =~ /^\{\*(.*)\}$/;
@@ -419,17 +422,17 @@ sub dumpvars {
my $self = shift;
my ($package,@vars) = @_;
local(%address,$^W);
- my ($key,$val);
$package .= "::" unless $package =~ /::$/;
*stab = *main::;
while ($package =~ /(\w+?::)/g) {
- *stab = $ {stab}{$1};
+ *stab = defined ${stab}{$1} ? ${stab}{$1} : '';
}
$self->{TotalStrings} = 0;
$self->{Strings} = 0;
$self->{CompleteTotal} = 0;
- while (($key,$val) = each(%stab)) {
+ for my $k (keys %stab) {
+ my ($key,$val) = ($k, $stab{$k});
return if $DB::signal and $self->{stopDbSignal};
next if @vars && !grep( matchvar($key, $_), @vars );
if ($self->{usageOnly}) {
diff --git a/gnu/usr.bin/perl/dist/Dumpvalue/t/Dumpvalue.t b/gnu/usr.bin/perl/dist/Dumpvalue/t/Dumpvalue.t
index 7063dd984c8..ba8775126ee 100644
--- a/gnu/usr.bin/perl/dist/Dumpvalue/t/Dumpvalue.t
+++ b/gnu/usr.bin/perl/dist/Dumpvalue/t/Dumpvalue.t
@@ -16,6 +16,8 @@ BEGIN {
our ( $foo, @bar, %baz );
+use lib ("./t/lib");
+use TieOut;
use Test::More tests => 88;
use_ok( 'Dumpvalue' );
@@ -278,21 +280,3 @@ is( $out->read, "0 0..0 'two'\n", 'dumpValues worked on array ref' );
$d->dumpValues('one', 'two');
is( $out->read, "0..1 'one' 'two'\n", 'dumpValues worked on multiple values' );
-
-package TieOut;
-use overload '"' => sub { "overloaded!" };
-
-sub TIEHANDLE {
- my $class = shift;
- bless(\( my $ref), $class);
-}
-
-sub PRINT {
- my $self = shift;
- $$self .= join('', @_);
-}
-
-sub read {
- my $self = shift;
- return substr($$self, 0, length($$self), '');
-}
diff --git a/gnu/usr.bin/perl/dist/Exporter/lib/Exporter.pm b/gnu/usr.bin/perl/dist/Exporter/lib/Exporter.pm
index 0e8775db254..19d7645ac5a 100644
--- a/gnu/usr.bin/perl/dist/Exporter/lib/Exporter.pm
+++ b/gnu/usr.bin/perl/dist/Exporter/lib/Exporter.pm
@@ -9,7 +9,7 @@ require 5.006;
our $Debug = 0;
our $ExportLevel = 0;
our $Verbose ||= 0;
-our $VERSION = '5.73';
+our $VERSION = '5.74';
our (%Cache);
sub as_heavy {
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/Changes b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/Changes
index f780f4ddb73..bb7e565062a 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/Changes
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/Changes
@@ -1,5 +1,11 @@
Revision history for Perl extension ExtUtils::CBuilder.
+0.280234 - 2020-01-21
+
+ Update:
+
+ - Updated standalone module from blead.
+
0.280231 - 2019-03-31
Fixed:
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/LICENSE b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/LICENSE
index 6171f8bbe8a..1bffb0331f5 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/LICENSE
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/LICENSE
@@ -1,4 +1,4 @@
-This software is copyright (c) 2017 by Ken Williams.
+This software is copyright (c) 2020 by Ken Williams.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
@@ -12,7 +12,7 @@ b) the "Artistic License"
--- The GNU General Public License, Version 1, February 1989 ---
-This software is Copyright (c) 2017 by Ken Williams.
+This software is Copyright (c) 2020 by Ken Williams.
This is free software, licensed under:
@@ -272,7 +272,7 @@ That's all there is to it!
--- The Artistic License 1.0 ---
-This software is Copyright (c) 2017 by Ken Williams.
+This software is Copyright (c) 2020 by Ken Williams.
This is free software, licensed under:
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/Makefile.PL b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/Makefile.PL
index bc1ce75dd09..7dac2abac37 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/Makefile.PL
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/Makefile.PL
@@ -1,4 +1,4 @@
-# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.010.
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.012.
use strict;
use warnings;
@@ -29,7 +29,7 @@ my %WriteMakefileArgs = (
"TEST_REQUIRES" => {
"Test::More" => "0.47"
},
- "VERSION" => "0.280228",
+ "VERSION" => "0.280234",
"test" => {
"TESTS" => "t/*.t"
}
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder.pm
index e1a8b63f2a3..60b1662d58e 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder.pm
@@ -7,7 +7,7 @@ use Perl::OSType qw/os_type/;
use warnings;
use strict;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
our @ISA;
# We only use this once - don't waste a symbol table entry on it.
@@ -272,9 +272,9 @@ for VMS.
ExtUtils::CBuilder is maintained as part of the Perl 5 core. Please
submit any bug reports via the F<perlbug> tool included with Perl 5.
Bug reports will be included in the Perl 5 ticket system at
-L<http://rt.perl.org>.
+L<https://rt.perl.org>.
-The Perl 5 source code is available at <http://perl5.git.perl.org/perl.git>
+The Perl 5 source code is available at L<https://perl5.git.perl.org/perl.git>
and ExtUtils-CBuilder may be found in the F<dist/ExtUtils-CBuilder> directory
of the repository.
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm
index f69ff38fe46..638014352c6 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm
@@ -9,7 +9,7 @@ use Text::ParseWords;
use IPC::Cmd qw(can_run);
use File::Temp qw(tempfile);
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
# More details about C/C++ compilers:
# http://developers.sun.com/sunstudio/documentation/product/compiler.jsp
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Unix.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Unix.pm
index a37cfa0699a..e73933fea1f 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Unix.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Unix.pm
@@ -4,7 +4,7 @@ use warnings;
use strict;
use ExtUtils::CBuilder::Base;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
our @ISA = qw(ExtUtils::CBuilder::Base);
sub link_executable {
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm
index 145ebb58d2e..dc3e91b7b98 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/VMS.pm
@@ -4,7 +4,7 @@ use warnings;
use strict;
use ExtUtils::CBuilder::Base;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
our @ISA = qw(ExtUtils::CBuilder::Base);
use File::Spec::Functions qw(catfile catdir);
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows.pm
index c4420dc1d55..35093d16f12 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows.pm
@@ -8,7 +8,7 @@ use File::Spec;
use ExtUtils::CBuilder::Base;
use IO::File;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
our @ISA = qw(ExtUtils::CBuilder::Base);
=begin comment
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm
index 535629ea3c7..98bdb2d367f 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/BCC.pm
@@ -1,6 +1,6 @@
package ExtUtils::CBuilder::Platform::Windows::BCC;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
use strict;
use warnings;
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm
index 0355dd1356c..5854d57a8f3 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/GCC.pm
@@ -1,6 +1,6 @@
package ExtUtils::CBuilder::Platform::Windows::GCC;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
use warnings;
use strict;
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm
index 95b8644010d..6a9158020bd 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/Windows/MSVC.pm
@@ -1,6 +1,6 @@
package ExtUtils::CBuilder::Platform::Windows::MSVC;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
use warnings;
use strict;
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/aix.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/aix.pm
index 72787c723cd..8b1572d782a 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/aix.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/aix.pm
@@ -5,7 +5,7 @@ use strict;
use ExtUtils::CBuilder::Platform::Unix;
use File::Spec;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
sub need_prelink { 1 }
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/android.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/android.pm
index 70b02cf6139..70eb6cf9870 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/android.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/android.pm
@@ -6,7 +6,7 @@ use File::Spec;
use ExtUtils::CBuilder::Platform::Unix;
use Config;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
# The Android linker will not recognize symbols from
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/cygwin.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/cygwin.pm
index 4b72a7650af..40d93357ffe 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/cygwin.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/cygwin.pm
@@ -5,7 +5,7 @@ use strict;
use File::Spec;
use ExtUtils::CBuilder::Platform::Unix;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
# TODO: If a specific exe_file name is requested, if the exe created
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/darwin.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/darwin.pm
index 989b5e7b852..28deb76580e 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/darwin.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/darwin.pm
@@ -4,7 +4,7 @@ use warnings;
use strict;
use ExtUtils::CBuilder::Platform::Unix;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
sub compile {
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/dec_osf.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/dec_osf.pm
index 4cd12539d6c..1185f06344f 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/dec_osf.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/dec_osf.pm
@@ -5,7 +5,7 @@ use strict;
use ExtUtils::CBuilder::Platform::Unix;
use File::Spec;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
sub link_executable {
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/os2.pm b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/os2.pm
index 66a1c17f7d3..b9fae17c28f 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/os2.pm
+++ b/gnu/usr.bin/perl/dist/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Platform/os2.pm
@@ -4,7 +4,7 @@ use warnings;
use strict;
use ExtUtils::CBuilder::Platform::Unix;
-our $VERSION = '0.280231'; # VERSION
+our $VERSION = '0.280234'; # VERSION
our @ISA = qw(ExtUtils::CBuilder::Platform::Unix);
sub need_prelink { 1 }
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-ParseXS/lib/perlxs.pod b/gnu/usr.bin/perl/dist/ExtUtils-ParseXS/lib/perlxs.pod
index 1419ee0ddf9..4cc0d6824cd 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-ParseXS/lib/perlxs.pod
+++ b/gnu/usr.bin/perl/dist/ExtUtils-ParseXS/lib/perlxs.pod
@@ -79,6 +79,11 @@ Note: For some extensions, Dave Beazley's SWIG system may provide a
significantly more convenient mechanism for creating the extension
glue code. See L<http://www.swig.org/> for more information.
+For simple bindings to C libraries as well as other machine code libraries,
+consider instead using the much simpler
+L<libffi|http://sourceware.org/libffi/> interface via CPAN modules like
+L<FFI::Platypus> or L<FFI::Raw>.
+
=head2 On The Road
Many of the examples which follow will concentrate on creating an interface
@@ -1743,8 +1748,8 @@ example.
if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) )
$var = ($type)SvIV((SV*)SvRV( $arg ));
else{
- warn("${Package}::$func_name() -- " .
- "$var is not a blessed SV reference");
+ warn(\"${Package}::$func_name() -- \"
+ \"$var is not a blessed SV reference\");
XSRETURN_UNDEF;
}
@@ -1980,6 +1985,8 @@ all the data that needs to be interpreter-local.
Always place the START_MY_CXT macro directly after the declaration
of C<my_cxt_t>.
+=for apidoc Amnh||START_MY_CXT
+
=item MY_CXT_INIT
The MY_CXT_INIT macro initializes storage for the C<my_cxt_t> struct.
@@ -1989,11 +1996,15 @@ are maintaining multiple interpreters, it should be called once in each
interpreter instance, except for interpreters cloned from existing ones.
(But see L</MY_CXT_CLONE> below.)
+=for apidoc Amnh||MY_CXT_INIT
+
=item dMY_CXT
Use the dMY_CXT macro (a declaration) in all the functions that access
MY_CXT.
+=for apidoc Amnh||dMY_CXT
+
=item MY_CXT
Use the MY_CXT macro to access members of the C<my_cxt_t> struct. For
@@ -2014,6 +2025,14 @@ C<dMY_CXT> may be quite expensive to calculate, and to avoid the overhead
of invoking it in each function it is possible to pass the declaration
onto other functions using the C<aMY_CXT>/C<pMY_CXT> macros, eg
+=for apidoc Amnh||_aMY_CXT
+=for apidoc Amnh||aMY_CXT
+=for apidoc Amnh||aMY_CXT_
+=for apidoc Amnh||_pMY_CXT
+=for apidoc Amnh||pMY_CXT
+=for apidoc Amnh||pMY_CXT_
+=for apidoc Amnh||MY_CXT
+
void sub1() {
dMY_CXT;
MY_CXT.index = 1;
@@ -2036,6 +2055,8 @@ my_cxt_t structure. Calling C<MY_CXT_CLONE> (typically via the package's
C<CLONE()> function), causes a byte-for-byte copy of the structure to be
taken, and any future dMY_CXT will cause the copy to be accessed instead.
+=for apidoc Amnh||MY_CXT_CLONE
+
=item MY_CXT_INIT_INTERP(my_perl)
=item dMY_CXT_INTERP(my_perl)
diff --git a/gnu/usr.bin/perl/dist/ExtUtils-ParseXS/lib/perlxstut.pod b/gnu/usr.bin/perl/dist/ExtUtils-ParseXS/lib/perlxstut.pod
index ef154ad7311..f9fe9e76fe9 100644
--- a/gnu/usr.bin/perl/dist/ExtUtils-ParseXS/lib/perlxstut.pod
+++ b/gnu/usr.bin/perl/dist/ExtUtils-ParseXS/lib/perlxstut.pod
@@ -707,7 +707,7 @@ commands to build it.
=head2 Anatomy of .xs file
-The .xs file of L<"EXAMPLE 4"> contained some new elements. To understand
+The .xs file of L</EXAMPLE 4> contained some new elements. To understand
the meaning of these elements, pay attention to the line which reads
MODULE = Mytest2 PACKAGE = Mytest2
@@ -737,7 +737,7 @@ somewhat of an exception rather than the rule.
=head2 Getting the fat out of XSUBs
-In L<"EXAMPLE 4"> the second part of .xs file contained the following
+In L</EXAMPLE 4> the second part of .xs file contained the following
description of an XSUB:
double
diff --git a/gnu/usr.bin/perl/dist/Filter-Simple/lib/Filter/Simple.pm b/gnu/usr.bin/perl/dist/Filter-Simple/lib/Filter/Simple.pm
index 1dcf3c80bf7..924c2aecbd3 100644
--- a/gnu/usr.bin/perl/dist/Filter-Simple/lib/Filter/Simple.pm
+++ b/gnu/usr.bin/perl/dist/Filter-Simple/lib/Filter/Simple.pm
@@ -2,7 +2,7 @@ package Filter::Simple;
use Text::Balanced ':ALL';
-our $VERSION = '0.95';
+our $VERSION = '0.96';
use Filter::Util::Call;
use Carp;
@@ -70,6 +70,7 @@ my %extractor_for = (
my %selector_for = (
all => sub { my ($t)=@_; sub{ $_=$$_; $t->(@_); $_} },
executable=> sub { my ($t)=@_; sub{ref() ? $_=$$_ : $t->(@_); $_} },
+ executable_no_comments=> sub { my ($t)=@_; sub{ref() ? $_=$$_ : $t->(@_); $_} },
quotelike => sub { my ($t)=@_; sub{ref() && do{$_=$$_; $t->(@_)}; $_} },
regex => sub { my ($t)=@_;
sub{ref() or return $_;
diff --git a/gnu/usr.bin/perl/dist/I18N-LangTags/lib/I18N/LangTags.pm b/gnu/usr.bin/perl/dist/I18N-LangTags/lib/I18N/LangTags.pm
index 3358d602746..35751bce03a 100644
--- a/gnu/usr.bin/perl/dist/I18N-LangTags/lib/I18N/LangTags.pm
+++ b/gnu/usr.bin/perl/dist/I18N-LangTags/lib/I18N/LangTags.pm
@@ -18,7 +18,7 @@ our @EXPORT_OK = qw(is_language_tag same_language_tag
);
our %EXPORT_TAGS = ('ALL' => \@EXPORT_OK);
-our $VERSION = "0.43";
+our $VERSION = "0.44";
our %Panic;
sub uniq { my %seen; return grep(!($seen{$_}++), @_); } # a util function
@@ -844,28 +844,28 @@ language tags with their ASCII characters shifted into Plane 14.
* L<I18N::LangTags::List|I18N::LangTags::List>
-* RFC 3066, C<http://www.ietf.org/rfc/rfc3066.txt>, "Tags for the
+* RFC 3066, C<L<http://www.ietf.org/rfc/rfc3066.txt>>, "Tags for the
Identification of Languages". (Obsoletes RFC 1766)
-* RFC 2277, C<http://www.ietf.org/rfc/rfc2277.txt>, "IETF Policy on
+* RFC 2277, C<L<http://www.ietf.org/rfc/rfc2277.txt>>, "IETF Policy on
Character Sets and Languages".
-* RFC 2231, C<http://www.ietf.org/rfc/rfc2231.txt>, "MIME Parameter
+* RFC 2231, C<L<http://www.ietf.org/rfc/rfc2231.txt>>, "MIME Parameter
Value and Encoded Word Extensions: Character Sets, Languages, and
Continuations".
-* RFC 2482, C<http://www.ietf.org/rfc/rfc2482.txt>,
+* RFC 2482, C<L<http://www.ietf.org/rfc/rfc2482.txt>>,
"Language Tagging in Unicode Plain Text".
* Locale::Codes, in
-C<http://www.perl.com/CPAN/modules/by-module/Locale/>
+C<L<http://www.perl.com/CPAN/modules/by-module/Locale/>>
* ISO 639-2, "Codes for the representation of names of languages",
including two-letter and three-letter codes,
-C<http://www.loc.gov/standards/iso639-2/php/code_list.php>
+C<L<http://www.loc.gov/standards/iso639-2/php/code_list.php>>
* The IANA list of registered languages (hopefully up-to-date),
-C<http://www.iana.org/assignments/language-tags>
+C<L<http://www.iana.org/assignments/language-tags>>
=head1 COPYRIGHT
diff --git a/gnu/usr.bin/perl/dist/I18N-LangTags/lib/I18N/LangTags/Detect.pm b/gnu/usr.bin/perl/dist/I18N-LangTags/lib/I18N/LangTags/Detect.pm
index 16b91db3366..d7a0d46b832 100644
--- a/gnu/usr.bin/perl/dist/I18N-LangTags/lib/I18N/LangTags/Detect.pm
+++ b/gnu/usr.bin/perl/dist/I18N-LangTags/lib/I18N/LangTags/Detect.pm
@@ -11,7 +11,7 @@ our ( $MATCH_SUPERS, $USING_LANGUAGE_TAGS,
BEGIN { unless(defined &DEBUG) { *DEBUG = sub () {0} } }
# define the constant 'DEBUG' at compile-time
-our $VERSION = "1.07";
+our $VERSION = "1.08";
our @ISA = ();
use I18N::LangTags qw(alternate_language_tags locale2language_tag);
@@ -203,11 +203,13 @@ C<I18N::LangTags::implicate_supers(...)>, like so:
=head1 ENVIRONMENT
-This module looks for several environment variables, including
+This module looks at several environment variables:
REQUEST_METHOD, HTTP_ACCEPT_LANGUAGE,
LANGUAGE, LC_ALL, LC_MESSAGES, and LANG.
-It will also use the L<Win32::Locale> module, if it's installed.
+It will also use the L<Win32::Locale> module, if it's installed
+and IGNORE_WIN32_LOCALE is not set to a true value in the
+environment.
=head1 SEE ALSO
diff --git a/gnu/usr.bin/perl/dist/IO/IO.pm b/gnu/usr.bin/perl/dist/IO/IO.pm
index 44c4df84151..eacd4c2bd64 100644
--- a/gnu/usr.bin/perl/dist/IO/IO.pm
+++ b/gnu/usr.bin/perl/dist/IO/IO.pm
@@ -7,7 +7,7 @@ use Carp;
use strict;
use warnings;
-our $VERSION = "1.40";
+our $VERSION = "1.43";
XSLoader::load 'IO', $VERSION;
sub import {
@@ -53,7 +53,7 @@ in one go. The IO modules belonging to the core are:
Some other IO modules don't belong to the perl core but can be loaded
as well if they have been installed from CPAN. You can discover which
-ones exist by searching for "^IO::" on http://search.cpan.org.
+ones exist by searching for "^IO::" on L<http://search.cpan.org>.
For more information on any of these modules, please see its respective
documentation.
diff --git a/gnu/usr.bin/perl/dist/IO/IO.xs b/gnu/usr.bin/perl/dist/IO/IO.xs
index 8e857f8e2e8..68b7352c388 100644
--- a/gnu/usr.bin/perl/dist/IO/IO.xs
+++ b/gnu/usr.bin/perl/dist/IO/IO.xs
@@ -185,26 +185,6 @@ io_blocking(pTHX_ InputStream f, int block)
#endif
}
-static OP *
-io_pp_nextstate(pTHX)
-{
- dVAR;
- COP *old_curcop = PL_curcop;
- OP *next = PL_ppaddr[PL_op->op_type](aTHX);
- PL_curcop = old_curcop;
- return next;
-}
-
-static OP *
-io_ck_lineseq(pTHX_ OP *o)
-{
- OP *kid = cBINOPo->op_first;
- for (; kid; kid = OpSIBLING(kid))
- if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
- kid->op_ppaddr = io_pp_nextstate;
- return o;
-}
-
MODULE = IO PACKAGE = IO::Seekable PREFIX = f
@@ -558,16 +538,71 @@ fsync(arg)
OUTPUT:
RETVAL
-SV *
-_create_getline_subs(const char *code)
- CODE:
- OP *(*io_old_ck_lineseq)(pTHX_ OP *) = PL_check[OP_LINESEQ];
- PL_check[OP_LINESEQ] = io_ck_lineseq;
- RETVAL = SvREFCNT_inc(eval_pv(code,FALSE));
- PL_check[OP_LINESEQ] = io_old_ck_lineseq;
- OUTPUT:
- RETVAL
+# To make these two work correctly with the open pragma, the readline op
+# needs to pick up the lexical hints at the method's callsite. This doesn't
+# work in pure Perl, because the hints are read from the most recent nextstate,
+# and the nextstate of the Perl subroutines show *here* hold the lexical state
+# for the IO package.
+#
+# There's no clean way to implement this - this approach, while complex, seems
+# to be the most robust, and avoids manipulating external state (ie op checkers)
+#
+# sub getline {
+# @_ == 1 or croak 'usage: $io->getline()';
+# my $this = shift;
+# return scalar <$this>;
+# }
+#
+# sub getlines {
+# @_ == 1 or croak 'usage: $io->getlines()';
+# wantarray or
+# croak 'Can\'t call $io->getlines in a scalar context, use $io->getline';
+# my $this = shift;
+# return <$this>;
+# }
+
+# If this is deprecated, should it warn, and should it be removed at some point?
+# *gets = \&getline; # deprecated
+void
+getlines(...)
+ALIAS:
+ IO::Handle::getline = 1
+ IO::Handle::gets = 2
+INIT:
+ UNOP myop;
+ SV *io;
+ OP *was = PL_op;
+PPCODE:
+ if (items != 1)
+ Perl_croak(aTHX_ "usage: $io->%s()", ix ? "getline" : "getlines");
+ if (!ix && GIMME_V != G_ARRAY)
+ Perl_croak(aTHX_ "Can't call $io->getlines in a scalar context, use $io->getline");
+ Zero(&myop, 1, UNOP);
+ myop.op_flags = (ix ? OPf_WANT_SCALAR : OPf_WANT_LIST ) | OPf_STACKED;
+ myop.op_ppaddr = PL_ppaddr[OP_READLINE];
+ myop.op_type = OP_READLINE;
+ /* I don't know if we need this, but it's correct as far as the control flow
+ goes. However, if we *do* need it, do we need to set anything else up? */
+ myop.op_next = PL_op->op_next;
+ /* Sigh, because pp_readline calls pp_rv2gv, and *it* has this wonderful
+ state check for PL_op->op_type == OP_READLINE */
+ PL_op = (OP *) &myop;
+ io = ST(0);
+ /* Our target (which we need to provide, as we don't have a pad entry.
+ I think that this is only needed for G_SCALAR - maybe we can get away
+ with NULL for list context? */
+ PUSHs(sv_newmortal());
+ XPUSHs(io);
+ PUTBACK;
+ /* And effectively we get away with tail calling pp_readline, as it stacks
+ exactly the return value(s) we need to return. */
+ PL_ppaddr[OP_READLINE](aTHX);
+ PL_op = was;
+ /* And we don't want to reach the line
+ PL_stack_sp = sp;
+ that xsubpp adds after our body becase PL_stack_sp is correct, not sp */
+ return;
MODULE = IO PACKAGE = IO::Socket
diff --git a/gnu/usr.bin/perl/dist/IO/lib/IO/Dir.pm b/gnu/usr.bin/perl/dist/IO/lib/IO/Dir.pm
index e381880b449..3a14ca8983b 100644
--- a/gnu/usr.bin/perl/dist/IO/lib/IO/Dir.pm
+++ b/gnu/usr.bin/perl/dist/IO/lib/IO/Dir.pm
@@ -18,7 +18,7 @@ use File::stat;
use File::Spec;
our @ISA = qw(Tie::Hash Exporter);
-our $VERSION = "1.40";
+our $VERSION = "1.41";
our @EXPORT_OK = qw(DIR_UNLINK);
diff --git a/gnu/usr.bin/perl/dist/IO/lib/IO/File.pm b/gnu/usr.bin/perl/dist/IO/lib/IO/File.pm
index 137ba540295..cf51d9bf636 100644
--- a/gnu/usr.bin/perl/dist/IO/lib/IO/File.pm
+++ b/gnu/usr.bin/perl/dist/IO/lib/IO/File.pm
@@ -135,7 +135,7 @@ require Exporter;
our @ISA = qw(IO::Handle IO::Seekable Exporter);
-our $VERSION = "1.40";
+our $VERSION = "1.41";
our @EXPORT = @IO::Seekable::EXPORT;
diff --git a/gnu/usr.bin/perl/dist/IO/lib/IO/Handle.pm b/gnu/usr.bin/perl/dist/IO/lib/IO/Handle.pm
index a2570246452..45b6d4f5200 100644
--- a/gnu/usr.bin/perl/dist/IO/lib/IO/Handle.pm
+++ b/gnu/usr.bin/perl/dist/IO/lib/IO/Handle.pm
@@ -270,7 +270,7 @@ use IO (); # Load the XS module
require Exporter;
our @ISA = qw(Exporter);
-our $VERSION = "1.40";
+our $VERSION = "1.42";
our @EXPORT_OK = qw(
autoflush
@@ -431,26 +431,6 @@ sub say {
print $this @_;
}
-# Special XS wrapper to make them inherit lexical hints from the caller.
-_create_getline_subs( <<'END' ) or die $@;
-sub getline {
- @_ == 1 or croak 'usage: $io->getline()';
- my $this = shift;
- return scalar <$this>;
-}
-
-sub getlines {
- @_ == 1 or croak 'usage: $io->getlines()';
- wantarray or
- croak 'Can\'t call $io->getlines in a scalar context, use $io->getline';
- my $this = shift;
- return <$this>;
-}
-1; # return true for error checking
-END
-
-*gets = \&getline; # deprecated
-
sub truncate {
@_ == 2 or croak 'usage: $io->truncate(LEN)';
truncate($_[0], $_[1]);
diff --git a/gnu/usr.bin/perl/dist/IO/lib/IO/Pipe.pm b/gnu/usr.bin/perl/dist/IO/lib/IO/Pipe.pm
index e314c88d0e8..c3ceb862336 100644
--- a/gnu/usr.bin/perl/dist/IO/lib/IO/Pipe.pm
+++ b/gnu/usr.bin/perl/dist/IO/lib/IO/Pipe.pm
@@ -13,7 +13,7 @@ use strict;
use Carp;
use Symbol;
-our $VERSION = "1.40";
+our $VERSION = "1.41";
sub new {
my $type = shift;
diff --git a/gnu/usr.bin/perl/dist/IO/lib/IO/Poll.pm b/gnu/usr.bin/perl/dist/IO/lib/IO/Poll.pm
index 7aa1fb75148..3fe0179626f 100644
--- a/gnu/usr.bin/perl/dist/IO/lib/IO/Poll.pm
+++ b/gnu/usr.bin/perl/dist/IO/lib/IO/Poll.pm
@@ -12,7 +12,7 @@ use IO::Handle;
use Exporter ();
our @ISA = qw(Exporter);
-our $VERSION = "1.40";
+our $VERSION = "1.41";
our @EXPORT = qw( POLLIN
POLLOUT
diff --git a/gnu/usr.bin/perl/dist/IO/lib/IO/Seekable.pm b/gnu/usr.bin/perl/dist/IO/lib/IO/Seekable.pm
index 48f6dbeaf85..2370dcb89a0 100644
--- a/gnu/usr.bin/perl/dist/IO/lib/IO/Seekable.pm
+++ b/gnu/usr.bin/perl/dist/IO/lib/IO/Seekable.pm
@@ -106,7 +106,7 @@ require Exporter;
our @EXPORT = qw(SEEK_SET SEEK_CUR SEEK_END);
our @ISA = qw(Exporter);
-our $VERSION = "1.40";
+our $VERSION = "1.41";
sub seek {
@_ == 3 or croak 'usage: $io->seek(POS, WHENCE)';
diff --git a/gnu/usr.bin/perl/dist/IO/lib/IO/Select.pm b/gnu/usr.bin/perl/dist/IO/lib/IO/Select.pm
index 7d68feb7ab6..35a47ccbe05 100644
--- a/gnu/usr.bin/perl/dist/IO/lib/IO/Select.pm
+++ b/gnu/usr.bin/perl/dist/IO/lib/IO/Select.pm
@@ -10,7 +10,7 @@ use strict;
use warnings::register;
require Exporter;
-our $VERSION = "1.40";
+our $VERSION = "1.42";
our @ISA = qw(Exporter); # This is only so we can do version checking
@@ -57,7 +57,21 @@ sub _fileno
my($self, $f) = @_;
return unless defined $f;
$f = $f->[0] if ref($f) eq 'ARRAY';
- ($f =~ /^\d+$/) ? $f : fileno($f);
+ if($f =~ /^[0-9]+$/) { # plain file number
+ return $f;
+ }
+ elsif(defined(my $fd = fileno($f))) {
+ return $fd;
+ }
+ else {
+ # Neither a plain file number nor an opened filehandle; but maybe it was
+ # previously registered and has since been closed. ->remove still wants to
+ # know what fileno it had
+ foreach my $i ( FIRST_FD .. $#$self ) {
+ return $i - FIRST_FD if $self->[$i] == $f;
+ }
+ return undef;
+ }
}
sub _update
diff --git a/gnu/usr.bin/perl/dist/IO/lib/IO/Socket.pm b/gnu/usr.bin/perl/dist/IO/lib/IO/Socket.pm
index 1bf57ab826b..f10ac375328 100644
--- a/gnu/usr.bin/perl/dist/IO/lib/IO/Socket.pm
+++ b/gnu/usr.bin/perl/dist/IO/lib/IO/Socket.pm
@@ -23,7 +23,7 @@ require IO::Socket::UNIX if ($^O ne 'epoc' && $^O ne 'symbian');
our @ISA = qw(IO::Handle);
-our $VERSION = "1.40";
+our $VERSION = "1.43";
our @EXPORT_OK = qw(sockatmark);
@@ -82,7 +82,12 @@ sub socket {
${*$sock}{'io_socket_domain'} = $domain;
${*$sock}{'io_socket_type'} = $type;
- ${*$sock}{'io_socket_proto'} = $protocol;
+
+ # "A value of 0 for protocol will let the system select an
+ # appropriate protocol"
+ # so we need to look up what the system selected,
+ # not cache PF_UNSPEC.
+ ${*$sock}{'io_socket_proto'} = $protocol if $protocol;
$sock;
}
@@ -179,25 +184,25 @@ sub blocking {
#
# which is used to set blocking behaviour.
- # NOTE:
+ # NOTE:
# This is a little confusing, the perl keyword for this is
# 'blocking' but the OS level behaviour is 'non-blocking', probably
# because sockets are blocking by default.
# Therefore internally we have to reverse the semantics.
my $orig= !${*$sock}{io_sock_nonblocking};
-
+
return $orig unless @_;
my $block = shift;
-
+
if ( !$block != !$orig ) {
${*$sock}{io_sock_nonblocking} = $block ? 0 : 1;
ioctl($sock, 0x8004667e, pack("L!",${*$sock}{io_sock_nonblocking}))
or return undef;
}
-
- return $orig;
+
+ return $orig;
}
@@ -277,14 +282,24 @@ sub send {
@_ >= 2 && @_ <= 4 or croak 'usage: $sock->send(BUF, [FLAGS, [TO]])';
my $sock = $_[0];
my $flags = $_[2] || 0;
- my $peer = $_[3] || $sock->peername;
+ my $peer;
- croak 'send: Cannot determine peer address'
- unless(defined $peer);
+ if ($_[3]) {
+ # the caller explicitly requested a TO, so use it
+ # this is non-portable for "connected" UDP sockets
+ $peer = $_[3];
+ }
+ elsif (!defined getpeername($sock)) {
+ # we're not connected, so we require a peer from somewhere
+ $peer = $sock->peername;
+
+ croak 'send: Cannot determine peer address'
+ unless(defined $peer);
+ }
- my $r = defined(getpeername($sock))
- ? send($sock, $_[1], $flags)
- : send($sock, $_[1], $flags, $peer);
+ my $r = $peer
+ ? send($sock, $_[1], $flags, $peer)
+ : send($sock, $_[1], $flags);
# remember who we send to, if it was successful
${*$sock}{'io_socket_peername'} = $peer
@@ -386,185 +401,504 @@ IO::Socket - Object interface to socket communications
=head1 SYNOPSIS
- use IO::Socket;
+ use strict;
+ use warnings;
+
+ use IO::Socket qw(AF_INET AF_UNIX);
+
+ # create a new AF_INET socket
+ my $sock = IO::Socket->new(Domain => AF_INET);
+ # which is the same as
+ $sock = IO::Socket::INET->new();
+
+ # create a new AF_UNIX socket
+ $sock = IO::Socket->new(Domain => AF_UNIX);
+ # which is the same as
+ $sock = IO::Socket::UNIX->new();
=head1 DESCRIPTION
-C<IO::Socket> provides an object interface to creating and using sockets. It
-is built upon the L<IO::Handle> interface and inherits all the methods defined
-by L<IO::Handle>.
+C<IO::Socket> provides an object-oriented, L<IO::Handle>-based interface to
+creating and using sockets via L<Socket>, which provides a near one-to-one
+interface to the C socket library.
-C<IO::Socket> only defines methods for those operations which are common to all
-types of socket. Operations which are specified to a socket in a particular
-domain have methods defined in sub classes of C<IO::Socket>
+C<IO::Socket> is a base class that really only defines methods for those
+operations which are common to all types of sockets. Operations which are
+specific to a particular socket domain have methods defined in subclasses of
+C<IO::Socket>. See L<IO::Socket::INET>, L<IO::Socket::UNIX>, and
+L<IO::Socket::IP> for examples of such a subclass.
C<IO::Socket> will export all functions (and constants) defined by L<Socket>.
-=head1 CONSTRUCTOR
+=head1 CONSTRUCTOR ARGUMENTS
-=over 4
+Given that C<IO::Socket> doesn't have attributes in the traditional sense, the
+following arguments, rather than attributes, can be passed into the
+constructor.
-=item new ( [ARGS] )
+Constructor arguments should be passed in C<< Key => 'Value' >> pairs.
-Creates an C<IO::Socket>, which is a reference to a
-newly created symbol (see the C<Symbol> package). C<new>
-optionally takes arguments, these arguments are in key-value pairs.
-C<new> only looks for one key C<Domain> which tells new which domain
-the socket will be in. All other arguments will be passed to the
-configuration method of the package for that domain, See below.
+The only required argument is L<IO::Socket/"Domain">.
-B<NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE>
+=head2 Blocking
-As of VERSION 1.18 all IO::Socket objects have autoflush turned on
-by default. This was not the case with earlier releases.
+ my $sock = IO::Socket->new(..., Blocking => 1);
+ $sock = IO::Socket->new(..., Blocking => 0);
-B<NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE>
+If defined but false, the socket will be set to non-blocking mode. If not
+specified it defaults to C<1> (blocking mode).
-=back
+=head2 Domain
-=head1 METHODS
+ my $sock = IO::Socket->new(Domain => IO::Socket::AF_INET);
+ $sock = IO::Socket->new(Domain => IO::Socket::AF_UNIX);
-See L<perlfunc> for complete descriptions of each of the following
-supported C<IO::Socket> methods, which are just front ends for the
-corresponding built-in functions:
+The socket domain will define which subclass of C<IO::Socket> to use. The two
+options available along with this distribution are C<AF_INET> and C<AF_UNIX>.
- socket
- socketpair
- bind
- listen
- accept
- send
- recv
- peername (getpeername)
- sockname (getsockname)
- shutdown
+C<AF_INET> is for the internet address family of sockets and is handled via
+L<IO::Socket::INET>. C<AF_INET> sockets are bound to an internet address and
+port.
-Some methods take slightly different arguments to those defined in L<perlfunc>
-in attempt to make the interface more flexible. These are
+C<AF_UNIX> is for the unix domain socket and is handled via
+L<IO::Socket::UNIX>. C<AF_UNIX> sockets are bound to the file system as their
+address name space.
-=over 4
+This argument is B<required>. All other arguments are optional.
-=item accept([PKG])
+=head2 Listen
-perform the system call C<accept> on the socket and return a new
-object. The new object will be created in the same class as the listen
-socket, unless C<PKG> is specified. This object can be used to
-communicate with the client that was trying to connect.
+ my $sock = IO::Socket->new(..., Listen => 5);
-In a scalar context the new socket is returned, or undef upon
-failure. In a list context a two-element array is returned containing
-the new socket and the peer address; the list will be empty upon
-failure.
+Listen should be an integer value or left unset.
+
+If provided, this argument will place the socket into listening mode. New
+connections can then be accepted using the L<IO::Socket/"accept"> method. The
+value given is used as the C<listen(2)> queue size.
+
+If the C<Listen> argument is given, but false, the queue size will be set to
+5.
+
+=head2 Timeout
+
+ my $sock = IO::Socket->new(..., Timeout => 5);
+
+The timeout value, in seconds, for this socket connection. How exactly this
+value is utilized is defined in the socket domain subclasses that make use of
+the value.
+
+=head2 Type
+
+ my $sock = IO::Socket->new(..., Type => IO::Socket::SOCK_STREAM);
+
+The socket type that will be used. These are usually C<SOCK_STREAM>,
+C<SOCK_DGRAM>, or C<SOCK_RAW>. If this argument is left undefined an attempt
+will be made to infer the type from the service name.
+
+For example, you'll usually use C<SOCK_STREAM> with a C<tcp> connection and
+C<SOCK_DGRAM> with a C<udp> connection.
+
+=head1 CONSTRUCTORS
+
+C<IO::Socket> extends the L<IO::Handle> constructor.
+
+=head2 new
+
+ my $sock = IO::Socket->new();
+
+ # get a new IO::Socket::INET instance
+ $sock = IO::Socket->new(Domain => IO::Socket::AF_INET);
+ # get a new IO::Socket::UNIX instance
+ $sock = IO::Socket->new(Domain => IO::Socket::AF_UNIX);
-The timeout in the [PKG] can be specified as zero to effect a "poll",
-but you shouldn't do that because a new IO::Select object will be
-created behind the scenes just to do the single poll. This is
-horrendously inefficient. Use rather true select() with a zero
-timeout on the handle, or non-blocking IO.
+ # Domain is the only required argument
+ $sock = IO::Socket->new(
+ Domain => IO::Socket::AF_INET, # AF_INET, AF_UNIX
+ Type => IO::Socket::SOCK_STREAM, # SOCK_STREAM, SOCK_DGRAM, ...
+ Proto => 'tcp', # 'tcp', 'udp', IPPROTO_TCP, IPPROTO_UDP
+ # and so on...
+ );
-=item socketpair(DOMAIN, TYPE, PROTOCOL)
+Creates an C<IO::Socket>, which is a reference to a newly created symbol (see
+the L<Symbol> package). C<new> optionally takes arguments, these arguments
+are defined in L<IO::Socket/"CONSTRUCTOR ARGUMENTS">.
-Call C<socketpair> and return a list of two sockets created, or an
-empty list on failure.
+Any of the L<IO::Socket/"CONSTRUCTOR ARGUMENTS"> may be passed to the
+constructor, but if any arguments are provided, then one of them must be
+the L<IO::Socket/"Domain"> argument. The L<IO::Socket/"Domain"> argument can,
+by default, be either C<AF_INET> or C<AF_UNIX>. Other domains can be used if a
+proper subclass for the domain family is registered. All other arguments will
+be passed to the C<configuration> method of the package for that domain.
-=back
+=head1 METHODS
+
+C<IO::Socket> inherits all methods from L<IO::Handle> and implements the
+following new ones.
-Additional methods that are provided are:
+=head2 accept
-=over 4
+ my $client_sock = $sock->accept();
+ my $inet_sock = $sock->accept('IO::Socket::INET');
-=item atmark
+The accept method will perform the system call C<accept> on the socket and
+return a new object. The new object will be created in the same class as the
+listen socket, unless a specific package name is specified. This object can be
+used to communicate with the client that was trying to connect.
-True if the socket is currently positioned at the urgent data mark,
-false otherwise.
+This differs slightly from the C<accept> function in L<perlfunc>.
+
+In a scalar context the new socket is returned, or C<undef> upon
+failure. In a list context a two-element array is returned containing
+the new socket and the peer address; the list will be empty upon failure.
- use IO::Socket;
+=head2 atmark
- my $sock = IO::Socket::INET->new('some_server');
+ my $integer = $sock->atmark();
+ # read in some data on a given socket
+ my $data;
$sock->read($data, 1024) until $sock->atmark;
-Note: this is a reasonably new addition to the family of socket
-functions, so all systems may not support this yet. If it is
-unsupported by the system, an attempt to use this method will
-abort the program.
+ # or, export the function to use:
+ use IO::Socket 'sockatmark';
+ $sock->read($data, 1024) until sockatmark($sock);
-The atmark() functionality is also exportable as sockatmark() function:
+True if the socket is currently positioned at the urgent data mark, false
+otherwise. If your system doesn't yet implement C<sockatmark> this will throw
+an exception.
- use IO::Socket 'sockatmark';
+If your system does not support C<sockatmark>, the C<use> declaration will
+fail at compile time.
+
+=head2 autoflush
+
+ # by default, autoflush will be turned on when referenced
+ $sock->autoflush(); # turns on autoflush
+ # turn off autoflush
+ $sock->autoflush(0);
+ # turn on autoflush
+ $sock->autoflush(1);
-This allows for a more traditional use of sockatmark() as a procedural
-socket function. If your system does not support sockatmark(), the
-C<use> declaration will fail at compile time.
+This attribute isn't overridden from L<IO::Handle>'s implementation. However,
+since we turn it on by default, it's worth mentioning here.
-=item connected
+=head2 bind
+
+ use Socket qw(pack_sockaddr_in);
+ my $port = 3000;
+ my $ip_address = '0.0.0.0';
+ my $packed_addr = pack_sockaddr_in($port, $ip_address);
+ $sock->bind($packed_addr);
+
+Binds a network address to a socket, just as C<bind(2)> does. Returns true if
+it succeeded, false otherwise. You should provide a packed address of the
+appropriate type for the socket.
+
+=head2 connected
+
+ my $peer_addr = $sock->connected();
+ if ($peer_addr) {
+ say "We're connected to $peer_addr";
+ }
If the socket is in a connected state, the peer address is returned. If the
-socket is not in a connected state, undef is returned.
+socket is not in a connected state, C<undef> is returned.
-Note that connected() considers a half-open TCP socket to be "in a connected
-state". Specifically, connected() does not distinguish between the
+Note that this method considers a half-open TCP socket to be "in a connected
+state". Specifically, it does not distinguish between the
B<ESTABLISHED> and B<CLOSE-WAIT> TCP states; it returns the peer address,
-rather than undef, in either case. Thus, in general, connected() cannot
+rather than C<undef>, in either case. Thus, in general, it cannot
be used to reliably learn whether the peer has initiated a graceful shutdown
because in most cases (see below) the local TCP state machine remains in
-B<CLOSE-WAIT> until the local application calls shutdown() or close();
-only at that point does connected() return undef.
+B<CLOSE-WAIT> until the local application calls L<IO::Socket/"shutdown"> or
+C<close>. Only at that point does this function return C<undef>.
The "in most cases" hedge is because local TCP state machine behavior may
depend on the peer's socket options. In particular, if the peer socket has
-SO_LINGER enabled with a zero timeout, then the peer's close() will generate
-a RST segment, upon receipt of which the local TCP transitions immediately to
-B<CLOSED>, and in that state, connected() I<will> return undef.
+C<SO_LINGER> enabled with a zero timeout, then the peer's C<close> will
+generate a C<RST> segment. Upon receipt of that segment, the local TCP
+transitions immediately to B<CLOSED>, and in that state, this method I<will>
+return C<undef>.
+
+=head2 getsockopt
-=item protocol
+ my $value = $sock->getsockopt(SOL_SOCKET, SO_REUSEADDR);
+ my $buf = $socket->getsockopt(SOL_SOCKET, SO_RCVBUF);
+ say "Receive buffer is $buf bytes";
-Returns the numerical number for the protocol being used on the socket, if
-known. If the protocol is unknown, as with an AF_UNIX socket, zero
+Get an option associated with the socket. Levels other than C<SOL_SOCKET>
+may be specified here. As a convenience, this method will unpack a byte buffer
+of the correct size back into a number.
+
+=head2 listen
+
+ $sock->listen(5);
+
+Does the same thing that the C<listen(2)> system call does. Returns true if it
+succeeded, false otherwise. Listens to a socket with a given queue size.
+
+=head2 peername
+
+ my $sockaddr_in = $sock->peername();
+
+Returns the packed C<sockaddr> address of the other end of the socket
+connection. It calls C<getpeername>.
+
+
+=head2 protocol
+
+ my $proto = $sock->protocol();
+
+Returns the number for the protocol being used on the socket, if
+known. If the protocol is unknown, as with an C<AF_UNIX> socket, zero
is returned.
-=item sockdomain
+=head2 recv
+
+ my $buffer = "";
+ my $length = 1024;
+ my $flags = 0; # default. optional
+ $sock->recv($buffer, $length);
+ $sock->recv($buffer, $length, $flags);
+
+Similar in functionality to L<perlfunc/recv>.
+
+Receives a message on a socket. Attempts to receive C<$length> characters of
+data into C<$buffer> from the specified socket. C<$buffer> will be grown or
+shrunk to the length actually read. Takes the same flags as the system call of
+the same name. Returns the address of the sender if socket's protocol supports
+this; returns an empty string otherwise. If there's an error, returns
+C<undef>. This call is actually implemented in terms of the C<recvfrom(2)>
+system call.
-Returns the numerical number for the socket domain type. For example, for
-an AF_INET socket the value of &AF_INET will be returned.
+Flags are ORed together values, such as C<MSG_BCAST>, C<MSG_OOB>,
+C<MSG_TRUNC>. The default value for the flags is C<0>.
-=item sockopt(OPT [, VAL])
+The cached value of L<IO::Socket/"peername"> is updated with the result of
+C<recv>.
-Unified method to both set and get options in the SOL_SOCKET level. If called
-with one argument then getsockopt is called, otherwise setsockopt is called.
+B<Note:> In Perl v5.30 and newer, if the socket has been marked as C<:utf8>,
+C<recv> will throw an exception. The C<:encoding(...)> layer implicitly
+introduces the C<:utf8> layer. See L<perlfunc/binmode>.
-=item getsockopt(LEVEL, OPT)
+B<Note:> In Perl versions older than v5.30, depending on the status of the
+socket, either (8-bit) bytes or characters are received. By default all
+sockets operate on bytes, but for example if the socket has been changed
+using L<perlfunc/binmode> to operate with the C<:encoding(UTF-8)> I/O layer
+(see the L<perlfunc/open> pragma), the I/O will operate on UTF8-encoded
+Unicode characters, not bytes. Similarly for the C<:encoding> layer: in
+that case pretty much any characters can be read.
-Get option associated with the socket. Other levels than SOL_SOCKET
-may be specified here.
+=head2 send
-=item setsockopt(LEVEL, OPT, VAL)
+ my $message = "Hello, world!";
+ my $flags = 0; # defaults to zero
+ my $to = '0.0.0.0'; # optional destination
+ my $sent = $sock->send($message);
+ $sent = $sock->send($message, $flags);
+ $sent = $sock->send($message, $flags, $to);
-Set option associated with the socket. Other levels than SOL_SOCKET
-may be specified here.
+Similar in functionality to L<perlfunc/send>.
-=item socktype
+Sends a message on a socket. Attempts to send the scalar message to the
+socket. Takes the same flags as the system call of the same name. On
+unconnected sockets, you must specify a destination to send to, in which case
+it does a C<sendto(2)> syscall. Returns the number of characters sent, or
+C<undef> on error. The C<sendmsg(2)> syscall is currently unimplemented.
-Returns the numerical number for the socket type. For example, for
-a SOCK_STREAM socket the value of &SOCK_STREAM will be returned.
+The C<flags> option is optional and defaults to C<0>.
-=item timeout([VAL])
+After a successful send with C<$to>, further calls to C<send> on an
+unconnected socket without C<$to> will send to the same address, and C<$to>
+will be used as the result of L<IO::Socket/"peername">.
+
+B<Note:> In Perl v5.30 and newer, if the socket has been marked as C<:utf8>,
+C<send> will throw an exception. The C<:encoding(...)> layer implicitly
+introduces the C<:utf8> layer. See L<perlfunc/binmode>.
+
+B<Note:> In Perl versions older than v5.30, depending on the status of the
+socket, either (8-bit) bytes or characters are sent. By default all
+sockets operate on bytes, but for example if the socket has been changed
+using L<perlfunc/binmode> to operate with the C<:encoding(UTF-8)> I/O layer
+(see the L<perlfunc/open> pragma), the I/O will operate on UTF8-encoded
+Unicode characters, not bytes. Similarly for the C<:encoding> layer: in
+that case pretty much any characters can be sent.
+
+=head2 setsockopt
+
+ $sock->setsockopt(SOL_SOCKET, SO_REUSEADDR, 1);
+ $sock->setsockopt(SOL_SOCKET, SO_RCVBUF, 64*1024);
+
+Set option associated with the socket. Levels other than C<SOL_SOCKET>
+may be specified here. As a convenience, this method will convert a number
+into a packed byte buffer.
+
+=head2 shutdown
+
+ $sock->shutdown(SHUT_RD); # we stopped reading data
+ $sock->shutdown(SHUT_WR); # we stopped writing data
+ $sock->shutdown(SHUT_RDWR); # we stopped using this socket
+
+Shuts down a socket connection in the manner indicated by the value passed in,
+which has the same interpretation as in the syscall of the same name.
+
+This is useful with sockets when you want to tell the other side you're done
+writing but not done reading, or vice versa. It's also a more insistent form
+of C<close> because it also disables the file descriptor in any
+forked copies in other processes.
+
+Returns C<1> for success; on error, returns C<undef> if the socket is
+not a valid filehandle, or returns C<0> and sets C<$!> for any other failure.
+
+=head2 sockdomain
+
+ my $domain = $sock->sockdomain();
+
+Returns the number for the socket domain type. For example, for
+an C<AF_INET> socket the value of C<&AF_INET> will be returned.
+
+=head2 socket
+
+ my $sock = IO::Socket->new(); # no values given
+ # now let's actually get a socket with the socket method
+ # domain, type, and protocol are required
+ $sock = $sock->socket(AF_INET, SOCK_STREAM, 'tcp');
+
+Opens a socket of the specified kind and returns it. Domain, type, and
+protocol are specified the same as for the syscall of the same name.
+
+=head2 socketpair
+
+ my ($r, $w) = $sock->socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC);
+ ($r, $w) = IO::Socket::UNIX
+ ->socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC);
+
+Will return a list of two sockets created (read and write), or an empty list
+on failure.
+
+Differs slightly from C<socketpair> in L<perlfunc> in that the argument list
+is a bit simpler.
+
+=head2 sockname
+
+ my $packed_addr = $sock->sockname();
+
+Returns the packed C<sockaddr> address of this end of the connection. It's the
+same as C<getsockname(2)>.
+
+=head2 sockopt
+
+ my $value = $sock->sockopt(SO_REUSEADDR);
+ $sock->sockopt(SO_REUSEADDR, 1);
+
+Unified method to both set and get options in the C<SOL_SOCKET> level. If
+called with one argument then L<IO::Socket/"getsockopt"> is called, otherwise
+L<IO::Socket/"setsockopt"> is called.
+
+=head2 socktype
+
+ my $type = $sock->socktype();
+
+Returns the number for the socket type. For example, for
+a C<SOCK_STREAM> socket the value of C<&SOCK_STREAM> will be returned.
+
+=head2 timeout
+
+ my $seconds = $sock->timeout();
+ my $old_val = $sock->timeout(5); # set new and return old value
Set or get the timeout value (in seconds) associated with this socket.
If called without any arguments then the current setting is returned. If
called with an argument the current setting is changed and the previous
value returned.
-=back
+This method is available to all C<IO::Socket> implementations but may or may
+not be used by the individual domain subclasses.
+
+=head1 EXAMPLES
+
+Let's create a TCP server on C<localhost:3333>.
+
+ use strict;
+ use warnings;
+ use feature 'say';
+
+ use IO::Socket qw(AF_INET AF_UNIX SOCK_STREAM SHUT_WR);
+
+ my $server = IO::Socket->new(
+ Domain => AF_INET,
+ Type => SOCK_STREAM,
+ Proto => 'tcp',
+ LocalHost => '0.0.0.0',
+ LocalPort => 3333,
+ ReusePort => 1,
+ Listen => 5,
+ ) || die "Can't open socket: $@";
+ say "Waiting on 3333";
+
+ while (1) {
+ # waiting for a new client connection
+ my $client = $server->accept();
+
+ # get information about a newly connected client
+ my $client_address = $client->peerhost();
+ my $client_port = $client->peerport();
+ say "Connection from $client_address:$client_port";
+
+ # read up to 1024 characters from the connected client
+ my $data = "";
+ $client->recv($data, 1024);
+ say "received data: $data";
+
+ # write response data to the connected client
+ $data = "ok";
+ $client->send($data);
+
+ # notify client that response has been sent
+ $client->shutdown(SHUT_WR);
+ }
+
+ $server->close();
+
+A client for such a server could be
+
+ use strict;
+ use warnings;
+ use feature 'say';
+
+ use IO::Socket qw(AF_INET AF_UNIX SOCK_STREAM SHUT_WR);
+
+ my $client = IO::Socket->new(
+ Domain => AF_INET,
+ Type => SOCK_STREAM,
+ proto => 'tcp',
+ PeerPort => 3333,
+ PeerHost => '0.0.0.0',
+ ) || die "Can't open socket: $@";
+
+ say "Sending Hello World!";
+ my $size = $client->send("Hello World!");
+ say "Sent data of length: $size";
+
+ $client->shutdown(SHUT_WR);
+
+ my $buffer;
+ $client->recv($buffer, 1024);
+ say "Got back $buffer";
+
+ $client->close();
+
=head1 LIMITATIONS
-On some systems, for an IO::Socket object created with new_from_fd(),
-or created with accept() from such an object, the protocol(),
-sockdomain() and socktype() methods may return undef.
+On some systems, for an IO::Socket object created with C<new_from_fd>,
+or created with L<IO::Socket/"accept"> from such an object, the
+L<IO::Socket/"protocol">, L<IO::Socket/"sockdomain"> and
+L<IO::Socket/"socktype"> methods may return C<undef>.
=head1 SEE ALSO
-L<Socket>, L<IO::Handle>, L<IO::Socket::INET>, L<IO::Socket::UNIX>
+L<Socket>, L<IO::Handle>, L<IO::Socket::INET>, L<IO::Socket::UNIX>,
+L<IO::Socket::IP>
=head1 AUTHOR
diff --git a/gnu/usr.bin/perl/dist/IO/lib/IO/Socket/INET.pm b/gnu/usr.bin/perl/dist/IO/lib/IO/Socket/INET.pm
index 8b4373f2618..8688f375b5f 100644
--- a/gnu/usr.bin/perl/dist/IO/lib/IO/Socket/INET.pm
+++ b/gnu/usr.bin/perl/dist/IO/lib/IO/Socket/INET.pm
@@ -14,7 +14,7 @@ use Exporter;
use Errno;
our @ISA = qw(IO::Socket);
-our $VERSION = "1.40";
+our $VERSION = "1.41";
my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1;
diff --git a/gnu/usr.bin/perl/dist/IO/lib/IO/Socket/UNIX.pm b/gnu/usr.bin/perl/dist/IO/lib/IO/Socket/UNIX.pm
index ff38af0f634..04b36eaf74b 100644
--- a/gnu/usr.bin/perl/dist/IO/lib/IO/Socket/UNIX.pm
+++ b/gnu/usr.bin/perl/dist/IO/lib/IO/Socket/UNIX.pm
@@ -11,7 +11,7 @@ use IO::Socket;
use Carp;
our @ISA = qw(IO::Socket);
-our $VERSION = "1.40";
+our $VERSION = "1.41";
IO::Socket::UNIX->register_domain( AF_UNIX );
diff --git a/gnu/usr.bin/perl/dist/IO/t/cachepropagate-unix.t b/gnu/usr.bin/perl/dist/IO/t/cachepropagate-unix.t
index d1ba4880d23..e0dde1e2429 100644
--- a/gnu/usr.bin/perl/dist/IO/t/cachepropagate-unix.t
+++ b/gnu/usr.bin/perl/dist/IO/t/cachepropagate-unix.t
@@ -40,7 +40,19 @@ my $listener = IO::Socket::UNIX->new(Type => SOCK_STREAM,
ok(defined($listener), 'stream socket created');
my $p = $listener->protocol();
-ok(defined($p), 'protocol defined');
+{
+ # the value of protocol isn't well defined for AF_UNIX, when we
+ # create the socket we supply 0, which leaves it up to the implementation
+ # to select a protocol, so we (now) don't save a 0 protocol during socket
+ # creation. This test then breaks if the implementation doesn't support
+ # SO_SOCKET (at least on AF_UNIX).
+ # This specifically includes NetBSD, Darwin and cygwin.
+ # This is a TODO instead of a skip so if these ever implement SO_PROTOCOL
+ # we'll be notified about the passing TODO so the test can be updated.
+ local $TODO = "$^O doesn't support SO_PROTOCOL on AF_UNIX"
+ if $^O =~ /^(netbsd|darwin|cygwin|hpux|solaris|dragonfly|os390)$/;
+ ok(defined($p), 'protocol defined');
+}
my $d = $listener->sockdomain();
ok(defined($d), 'domain defined');
my $s = $listener->socktype();
@@ -90,7 +102,12 @@ SKIP: {
ok(defined($listener), 'datagram socket created');
$p = $listener->protocol();
- ok(defined($p), 'protocol defined');
+ {
+ # see comment above
+ local $TODO = "$^O doesn't support SO_PROTOCOL on AF_UNIX"
+ if $^O =~ /^(netbsd|darwin|cygwin|hpux|solaris|dragonfly|os390)$/;
+ ok(defined($p), 'protocol defined');
+ }
$d = $listener->sockdomain();
ok(defined($d), 'domain defined');
$s = $listener->socktype();
@@ -103,8 +120,6 @@ SKIP: {
skip "no Socket::SO_PROTOCOL", 1 if !defined(eval { Socket::SO_PROTOCOL });
skip "SO_PROTOCOL defined but not implemented", 1
if !defined $new->sockopt(Socket::SO_PROTOCOL);
- skip "SO_PROTOCOL returns chosen protocol on OpenBSD"
- if $^O eq 'openbsd';
is($new->protocol(), $p, 'protocol match');
}
SKIP: {
diff --git a/gnu/usr.bin/perl/dist/IO/t/io_poll.t b/gnu/usr.bin/perl/dist/IO/t/io_poll.t
index c58467c0bd9..ec32eb6ad96 100755
--- a/gnu/usr.bin/perl/dist/IO/t/io_poll.t
+++ b/gnu/usr.bin/perl/dist/IO/t/io_poll.t
@@ -1,10 +1,5 @@
#!./perl
-if ($^O eq 'mpeix') {
- print "1..0 # Skip: broken on MPE/iX\n";
- exit 0;
-}
-
select(STDERR); $| = 1;
select(STDOUT); $| = 1;
diff --git a/gnu/usr.bin/perl/dist/IO/t/io_sock.t b/gnu/usr.bin/perl/dist/IO/t/io_sock.t
index 37c8dad84e9..c7b9557e0bd 100755
--- a/gnu/usr.bin/perl/dist/IO/t/io_sock.t
+++ b/gnu/usr.bin/perl/dist/IO/t/io_sock.t
@@ -18,6 +18,7 @@ BEGIN {
elsif (!$can_fork) {
$reason = 'no fork';
}
+ $reason = q[Test out of sequence on windows] if $^O eq 'MSWin32' && $ENV{CONTINUOUS_INTEGRATION};
if ($reason) {
print "1..0 # Skip: $reason\n";
exit 0;
diff --git a/gnu/usr.bin/perl/dist/IO/t/io_utf8argv.t b/gnu/usr.bin/perl/dist/IO/t/io_utf8argv.t
index 89f726a7a70..b6370709f19 100644
--- a/gnu/usr.bin/perl/dist/IO/t/io_utf8argv.t
+++ b/gnu/usr.bin/perl/dist/IO/t/io_utf8argv.t
@@ -13,7 +13,7 @@ use utf8;
skip_all("EBCDIC platform; testing not core")
if $::IS_EBCDIC && ! $ENV{PERL_CORE};
-plan(tests => 2);
+plan(tests => 4);
my $bytes =
"\xce\x9c\xe1\xbd\xb7\xce\xb1\x20\xcf\x80\xe1\xbd\xb1\xcf\x80\xce".
@@ -31,10 +31,22 @@ print $fh $bytes;
close $fh or die "close: $!";
-use open ":std", ":utf8";
-
use IO::Handle;
+SKIP: {
+ skip("PERL_UNICODE set", 2)
+ if exists $ENV{PERL_UNICODE};
+
+ @ARGV = ('io_utf8argv') x 2;
+ is *ARGV->getline, $bytes,
+ 'getline (no open pragma) when magically opening ARGV';
+
+ is join('',*ARGV->getlines), $bytes,
+ 'getlines (no open pragma) when magically opening ARGV';
+}
+
+use open ":std", ":utf8";
+
@ARGV = ('io_utf8argv') x 2;
is *ARGV->getline, "Μία πάπια, μὰ ποιὰ πάπια;\n",
'getline respects open pragma when magically opening ARGV';
diff --git a/gnu/usr.bin/perl/dist/Locale-Maketext/ChangeLog b/gnu/usr.bin/perl/dist/Locale-Maketext/ChangeLog
index ac25aa6a8e3..d9b524f8ac0 100644
--- a/gnu/usr.bin/perl/dist/Locale-Maketext/ChangeLog
+++ b/gnu/usr.bin/perl/dist/Locale-Maketext/ChangeLog
@@ -1,5 +1,13 @@
Revision history for Perl suite Locale::Maketext
+2020-01-19
+ * Release 1.29 to CPAN
+ * Replace multiple 'use vars' by 'our'
+ * Sentences ending with a parenthetical phrase that ends
+ with an abbreviation such as 'etc.' still require a period
+ outside of the parentheses.
+ * Add L<> around links in pod
+
2016-07-25
* Release of 1.28 to CPAN
* Fix optional runtime load for CVE-2016-1238
@@ -155,7 +163,7 @@ Revision history for Perl suite Locale::Maketext
* Release 1.11_01
Fixed perlbug #33938
- http://rt.perl.org/rt3//Public/Bug/Display.html?id=3393
+ https://github.com/Perl/perl5/issues/2103
Started cleaning up source per Perl::Critic.
diff --git a/gnu/usr.bin/perl/dist/Module-CoreList/Changes b/gnu/usr.bin/perl/dist/Module-CoreList/Changes
index 5aed2f9a68a..7e78c75a112 100644
--- a/gnu/usr.bin/perl/dist/Module-CoreList/Changes
+++ b/gnu/usr.bin/perl/dist/Module-CoreList/Changes
@@ -1,6 +1,39 @@
+5.20210123
+ - Updated for v5.32.1
+
+5.20210120
+ - Updated for v5.33.6
+
+5.20201220
+ - Updated for v5.33.5
+
+5.20201120
+ - Updated for v5.33.4
+
+5.20201020
+ - Updated for v5.33.3
+
+5.20200920
+ - Updated for v5.33.2
+
+5.20200820
+ - Updated for v5.33.1
+
+5.20200717
+ - Updated for v5.33.0
+
+5.20200620
+ - Updated for v5.32.0
+
5.20200601_30
- Updated for v5.30.3
+5.20200601_28
+ - Updated for v5.28.3
+
+5.20200520
+ - Updated for v5.31.12
+
5.20200428
- Updated for v5.31.11
diff --git a/gnu/usr.bin/perl/dist/Module-CoreList/corelist b/gnu/usr.bin/perl/dist/Module-CoreList/corelist
index 3d2706a8298..f17d9fff60a 100644
--- a/gnu/usr.bin/perl/dist/Module-CoreList/corelist
+++ b/gnu/usr.bin/perl/dist/Module-CoreList/corelist
@@ -224,7 +224,15 @@ if ($Opts{diff}) {
my ($old_ver, $new_ver) = @ARGV;
my $old = numify_version($old_ver);
+ if ( !Module::CoreList->find_version($old) ) {
+ print "\nModule::CoreList has no info on perl $old_ver\n\n";
+ exit 1;
+ }
my $new = numify_version($new_ver);
+ if ( !Module::CoreList->find_version($new) ) {
+ print "\nModule::CoreList has no info on perl $new_ver\n\n";
+ exit 1;
+ }
my %diff = Module::CoreList::changes_between($old, $new);
diff --git a/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm b/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm
index de8edafb9e0..cd63e480adf 100644
--- a/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm
+++ b/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm
@@ -4,7 +4,7 @@ use strict;
our ( %released, %version, %families, %upstream, %bug_tracker, %deprecated, %delta );
use version;
-our $VERSION = '5.20200601_30';
+our $VERSION = '5.20210123';
sub PKG_PATTERN () { q#\A[a-zA-Z_][0-9a-zA-Z_]*(?:(::|')[0-9a-zA-Z_]+)*\z# }
sub _looks_like_invocant ($) { local $@; !!eval { $_[0]->isa(__PACKAGE__) } }
@@ -134,8 +134,8 @@ sub changes_between {
my $left_ver = shift;
my $right_ver = shift;
- my $left = $version{ $left_ver };
- my $right = $version{ $right_ver };
+ my $left = $version{ $left_ver } || {};
+ my $right = $version{ $right_ver } || {};
my %uniq = (%$left, %$right);
@@ -363,7 +363,17 @@ sub changes_between {
5.030002 => '2020-03-14',
5.031010 => '2020-03-20',
5.031011 => '2020-04-28',
+ 5.028003 => '2020-06-01',
5.030003 => '2020-06-01',
+ 5.032000 => '2020-06-20',
+ 5.033000 => '2020-07-17',
+ 5.033001 => '2020-08-20',
+ 5.033002 => '2020-09-20',
+ 5.033003 => '2020-10-20',
+ 5.033004 => '2020-11-20',
+ 5.033005 => '2020-12-20',
+ 5.033006 => '2021-01-20',
+ 5.032001 => '2021-01-23',
);
for my $version ( sort { $a <=> $b } keys %released ) {
@@ -12414,7 +12424,6 @@ for my $version ( sort { $a <=> $b } keys %released ) {
'Tie::File' => '1.02',
'Time::HiRes' => '1.9732',
'Win32API::File' => '0.1203',
- 'Win32API::File::inc::ExtUtils::Myconst2perl'=> '1',
'XS::APItest' => '0.80',
'autouse' => '1.11',
'bytes' => '1.05',
@@ -17461,6 +17470,17 @@ for my $version ( sort { $a <=> $b } keys %released ) {
removed => {
}
},
+ 5.028003 => {
+ delta_from => 5.028002,
+ changed => {
+ 'B::Op_private' => '5.028003',
+ 'Config' => '5.028003',
+ 'Module::CoreList' => '5.20200601_28',
+ 'Module::CoreList::Utils'=> '5.20200601_28',
+ },
+ removed => {
+ }
+ },
5.030003 => {
delta_from => 5.030002,
changed => {
@@ -17472,6 +17492,832 @@ for my $version ( sort { $a <=> $b } keys %released ) {
removed => {
}
},
+ 5.032000 => {
+ delta_from => 5.031011,
+ changed => {
+ 'B::Deparse' => '1.54',
+ 'B::Op_private' => '5.032000',
+ 'Benchmark' => '1.23',
+ 'Config' => '5.032',
+ 'Encode' => '3.06',
+ 'Encode::Guess' => '2.08',
+ 'File::Glob' => '1.33',
+ 'List::Util' => '1.55',
+ 'List::Util::XS' => '1.55',
+ 'Module::CoreList' => '5.20200620',
+ 'Module::CoreList::Utils'=> '5.20200620',
+ 'POSIX' => '1.94',
+ 'Scalar::Util' => '1.55',
+ 'Storable' => '3.21',
+ 'Sub::Util' => '1.55',
+ 'Thread::Queue' => '3.14',
+ 'Tie::Scalar' => '1.05',
+ '_charnames' => '1.48',
+ 'charnames' => '1.48',
+ 'encoding' => '3.00',
+ 'perlfaq' => '5.20200523',
+ 're' => '0.40',
+ 'threads' => '2.25',
+ },
+ removed => {
+ }
+ },
+ 5.033000 => {
+ delta_from => 5.032000,
+ changed => {
+ 'B::Op_private' => '5.033000',
+ 'Config' => '5.033',
+ 'Module::CoreList' => '5.20200717',
+ 'Module::CoreList::Utils'=> '5.20200717',
+ 'feature' => '1.59',
+ },
+ removed => {
+ }
+ },
+ 5.033001 => {
+ delta_from => 5.033,
+ changed => {
+ 'B' => '1.81',
+ 'B::Deparse' => '1.55',
+ 'B::Op_private' => '5.033001',
+ 'Config' => '5.033001',
+ 'Data::Dumper' => '2.175',
+ 'Devel::PPPort' => '3.60',
+ 'Devel::Peek' => '1.29',
+ 'DynaLoader' => '1.48',
+ 'Errno' => '1.31',
+ 'Exporter' => '5.75',
+ 'Exporter::Heavy' => '5.75',
+ 'ExtUtils::Miniperl' => '1.10',
+ 'ExtUtils::PL2Bat' => '0.002',
+ 'ExtUtils::ParseXS' => '3.41',
+ 'ExtUtils::ParseXS::Constants'=> '3.41',
+ 'ExtUtils::ParseXS::CountLines'=> '3.41',
+ 'ExtUtils::ParseXS::Eval'=> '3.41',
+ 'ExtUtils::ParseXS::Utilities'=> '3.41',
+ 'Fcntl' => '1.14',
+ 'File::Path' => '2.17',
+ 'Hash::Util' => '0.24',
+ 'Hash::Util::FieldHash' => '1.21',
+ 'IO' => '1.44',
+ 'IO::Socket' => '1.44',
+ 'IO::Socket::UNIX' => '1.42',
+ 'IPC::Msg' => '2.08',
+ 'IPC::Semaphore' => '2.08',
+ 'IPC::SharedMem' => '2.08',
+ 'IPC::SysV' => '2.08',
+ 'JSON::PP' => '4.05',
+ 'JSON::PP::Boolean' => '4.05',
+ 'Math::Complex' => '1.5902',
+ 'Module::CoreList' => '5.20200820',
+ 'Module::CoreList::Utils'=> '5.20200820',
+ 'Net::Ping' => '2.73_01',
+ 'POSIX' => '1.95',
+ 'PerlIO::mmap' => '0.017',
+ 'Pod::Usage' => '1.70',
+ 'Safe' => '2.42',
+ 'Socket' => '2.030',
+ 'Storable' => '3.22',
+ 'Time::HiRes' => '1.9765',
+ 'Unicode::Normalize' => '1.28',
+ 'XS::APItest' => '1.11',
+ 'XS::Typemap' => '0.18',
+ 'feature' => '1.60',
+ 'mro' => '1.24',
+ 'strict' => '1.12',
+ 'threads' => '2.26',
+ 'threads::shared' => '1.62',
+ 'warnings' => '1.48',
+ },
+ removed => {
+ 'Moped::Msg' => 1,
+ }
+ },
+ 5.033002 => {
+ delta_from => 5.033001,
+ changed => {
+ 'Archive::Tar' => '2.38',
+ 'Archive::Tar::Constant'=> '2.38',
+ 'Archive::Tar::File' => '2.38',
+ 'B::Op_private' => '5.033002',
+ 'Compress::Raw::Bzip2' => '2.096',
+ 'Compress::Raw::Zlib' => '2.096',
+ 'Compress::Zlib' => '2.096',
+ 'Config' => '5.033002',
+ 'DB_File' => '1.854',
+ 'Env' => '1.05',
+ 'Errno' => '1.32',
+ 'ExtUtils::Install' => '2.18',
+ 'ExtUtils::Installed' => '2.18',
+ 'ExtUtils::Packlist' => '2.18',
+ 'Filter::Util::Call' => '1.60',
+ 'IO::Compress::Adapter::Bzip2'=> '2.096',
+ 'IO::Compress::Adapter::Deflate'=> '2.096',
+ 'IO::Compress::Adapter::Identity'=> '2.096',
+ 'IO::Compress::Base' => '2.096',
+ 'IO::Compress::Base::Common'=> '2.096',
+ 'IO::Compress::Bzip2' => '2.096',
+ 'IO::Compress::Deflate' => '2.096',
+ 'IO::Compress::Gzip' => '2.096',
+ 'IO::Compress::Gzip::Constants'=> '2.096',
+ 'IO::Compress::RawDeflate'=> '2.096',
+ 'IO::Compress::Zip' => '2.096',
+ 'IO::Compress::Zip::Constants'=> '2.096',
+ 'IO::Compress::Zlib::Constants'=> '2.096',
+ 'IO::Compress::Zlib::Extra'=> '2.096',
+ 'IO::Socket::IP' => '0.41',
+ 'IO::Uncompress::Adapter::Bunzip2'=> '2.096',
+ 'IO::Uncompress::Adapter::Identity'=> '2.096',
+ 'IO::Uncompress::Adapter::Inflate'=> '2.096',
+ 'IO::Uncompress::AnyInflate'=> '2.096',
+ 'IO::Uncompress::AnyUncompress'=> '2.096',
+ 'IO::Uncompress::Base' => '2.096',
+ 'IO::Uncompress::Bunzip2'=> '2.096',
+ 'IO::Uncompress::Gunzip'=> '2.096',
+ 'IO::Uncompress::Inflate'=> '2.096',
+ 'IO::Uncompress::RawInflate'=> '2.096',
+ 'IO::Uncompress::Unzip' => '2.096',
+ 'IO::Zlib' => '1.11',
+ 'Module::CoreList' => '5.20200920',
+ 'Module::CoreList::Utils'=> '5.20200920',
+ 'Module::Load::Conditional'=> '0.74',
+ 'Opcode' => '1.48',
+ 'PerlIO::scalar' => '0.31',
+ 'Safe' => '2.43',
+ 'Test2' => '1.302181',
+ 'Test2::API' => '1.302181',
+ 'Test2::API::Breakage' => '1.302181',
+ 'Test2::API::Context' => '1.302181',
+ 'Test2::API::Instance' => '1.302181',
+ 'Test2::API::InterceptResult'=> '1.302181',
+ 'Test2::API::InterceptResult::Event'=> '1.302181',
+ 'Test2::API::InterceptResult::Facet'=> '1.302181',
+ 'Test2::API::InterceptResult::Hub'=> '1.302181',
+ 'Test2::API::InterceptResult::Squasher'=> '1.302181',
+ 'Test2::API::Stack' => '1.302181',
+ 'Test2::Event' => '1.302181',
+ 'Test2::Event::Bail' => '1.302181',
+ 'Test2::Event::Diag' => '1.302181',
+ 'Test2::Event::Encoding'=> '1.302181',
+ 'Test2::Event::Exception'=> '1.302181',
+ 'Test2::Event::Fail' => '1.302181',
+ 'Test2::Event::Generic' => '1.302181',
+ 'Test2::Event::Note' => '1.302181',
+ 'Test2::Event::Ok' => '1.302181',
+ 'Test2::Event::Pass' => '1.302181',
+ 'Test2::Event::Plan' => '1.302181',
+ 'Test2::Event::Skip' => '1.302181',
+ 'Test2::Event::Subtest' => '1.302181',
+ 'Test2::Event::TAP::Version'=> '1.302181',
+ 'Test2::Event::V2' => '1.302181',
+ 'Test2::Event::Waiting' => '1.302181',
+ 'Test2::EventFacet' => '1.302181',
+ 'Test2::EventFacet::About'=> '1.302181',
+ 'Test2::EventFacet::Amnesty'=> '1.302181',
+ 'Test2::EventFacet::Assert'=> '1.302181',
+ 'Test2::EventFacet::Control'=> '1.302181',
+ 'Test2::EventFacet::Error'=> '1.302181',
+ 'Test2::EventFacet::Hub'=> '1.302181',
+ 'Test2::EventFacet::Info'=> '1.302181',
+ 'Test2::EventFacet::Info::Table'=> '1.302181',
+ 'Test2::EventFacet::Meta'=> '1.302181',
+ 'Test2::EventFacet::Parent'=> '1.302181',
+ 'Test2::EventFacet::Plan'=> '1.302181',
+ 'Test2::EventFacet::Render'=> '1.302181',
+ 'Test2::EventFacet::Trace'=> '1.302181',
+ 'Test2::Formatter' => '1.302181',
+ 'Test2::Formatter::TAP' => '1.302181',
+ 'Test2::Hub' => '1.302181',
+ 'Test2::Hub::Interceptor'=> '1.302181',
+ 'Test2::Hub::Interceptor::Terminator'=> '1.302181',
+ 'Test2::Hub::Subtest' => '1.302181',
+ 'Test2::IPC' => '1.302181',
+ 'Test2::IPC::Driver' => '1.302181',
+ 'Test2::IPC::Driver::Files'=> '1.302181',
+ 'Test2::Tools::Tiny' => '1.302181',
+ 'Test2::Util' => '1.302181',
+ 'Test2::Util::ExternalMeta'=> '1.302181',
+ 'Test2::Util::Facets2Legacy'=> '1.302181',
+ 'Test2::Util::HashBase' => '1.302181',
+ 'Test2::Util::Trace' => '1.302181',
+ 'Test::Builder' => '1.302181',
+ 'Test::Builder::Formatter'=> '1.302181',
+ 'Test::Builder::Module' => '1.302181',
+ 'Test::Builder::Tester' => '1.302181',
+ 'Test::Builder::Tester::Color'=> '1.302181',
+ 'Test::Builder::TodoDiag'=> '1.302181',
+ 'Test::More' => '1.302181',
+ 'Test::Simple' => '1.302181',
+ 'Test::Tester' => '1.302181',
+ 'Test::Tester::Capture' => '1.302181',
+ 'Test::Tester::CaptureRunner'=> '1.302181',
+ 'Test::Tester::Delegate'=> '1.302181',
+ 'Test::use::ok' => '1.302181',
+ 'ok' => '1.302181',
+ 'overload' => '1.32',
+ },
+ removed => {
+ }
+ },
+ 5.033003 => {
+ delta_from => 5.033002,
+ changed => {
+ 'Amiga::ARexx' => '0.05',
+ 'App::Cpan' => '1.676',
+ 'B::Op_private' => '5.033003',
+ 'CPAN' => '2.28',
+ 'CPAN::FTP' => '5.5013',
+ 'CPAN::FirstTime' => '5.5315',
+ 'Config' => '5.033003',
+ 'DB_File' => '1.855',
+ 'Data::Dumper' => '2.176',
+ 'Devel::PPPort' => '3.62',
+ 'Devel::Peek' => '1.30',
+ 'Digest' => '1.19',
+ 'Digest::MD5' => '2.58',
+ 'Digest::base' => '1.19',
+ 'Digest::file' => '1.19',
+ 'Encode' => '3.07',
+ 'Encode::GSM0338' => '2.08',
+ 'Errno' => '1.33',
+ 'Exporter' => '5.76',
+ 'Exporter::Heavy' => '5.76',
+ 'ExtUtils::Command' => '7.48',
+ 'ExtUtils::Command::MM' => '7.48',
+ 'ExtUtils::Liblist' => '7.48',
+ 'ExtUtils::Liblist::Kid'=> '7.48',
+ 'ExtUtils::MM' => '7.48',
+ 'ExtUtils::MM_AIX' => '7.48',
+ 'ExtUtils::MM_Any' => '7.48',
+ 'ExtUtils::MM_BeOS' => '7.48',
+ 'ExtUtils::MM_Cygwin' => '7.48',
+ 'ExtUtils::MM_DOS' => '7.48',
+ 'ExtUtils::MM_Darwin' => '7.48',
+ 'ExtUtils::MM_MacOS' => '7.48',
+ 'ExtUtils::MM_NW5' => '7.48',
+ 'ExtUtils::MM_OS2' => '7.48',
+ 'ExtUtils::MM_OS390' => '7.48',
+ 'ExtUtils::MM_QNX' => '7.48',
+ 'ExtUtils::MM_UWIN' => '7.48',
+ 'ExtUtils::MM_Unix' => '7.48',
+ 'ExtUtils::MM_VMS' => '7.48',
+ 'ExtUtils::MM_VOS' => '7.48',
+ 'ExtUtils::MM_Win32' => '7.48',
+ 'ExtUtils::MM_Win95' => '7.48',
+ 'ExtUtils::MY' => '7.48',
+ 'ExtUtils::MakeMaker' => '7.48',
+ 'ExtUtils::MakeMaker::Config'=> '7.48',
+ 'ExtUtils::MakeMaker::Locale'=> '7.48',
+ 'ExtUtils::MakeMaker::version'=> '7.48',
+ 'ExtUtils::MakeMaker::version::regex'=> '7.48',
+ 'ExtUtils::Mkbootstrap' => '7.48',
+ 'ExtUtils::Mksymlists' => '7.48',
+ 'ExtUtils::PL2Bat' => '0.003',
+ 'ExtUtils::testlib' => '7.48',
+ 'File::Temp' => '0.2311',
+ 'FindBin' => '1.52',
+ 'Getopt::Long' => '2.52',
+ 'Getopt::Std' => '1.13',
+ 'I18N::LangTags' => '0.45',
+ 'MIME::Base64' => '3.16',
+ 'MIME::QuotedPrint' => '3.16',
+ 'Module::CoreList' => '5.20201020',
+ 'Module::CoreList::Utils'=> '5.20201020',
+ 'Module::Load' => '0.36',
+ 'Pod::Checker' => '1.74',
+ 'Pod::Simple' => '3.41',
+ 'Pod::Simple::BlackBox' => '3.41',
+ 'Pod::Simple::Checker' => '3.41',
+ 'Pod::Simple::Debug' => '3.41',
+ 'Pod::Simple::DumpAsText'=> '3.41',
+ 'Pod::Simple::DumpAsXML'=> '3.41',
+ 'Pod::Simple::HTML' => '3.41',
+ 'Pod::Simple::HTMLBatch'=> '3.41',
+ 'Pod::Simple::LinkSection'=> '3.41',
+ 'Pod::Simple::Methody' => '3.41',
+ 'Pod::Simple::Progress' => '3.41',
+ 'Pod::Simple::PullParser'=> '3.41',
+ 'Pod::Simple::PullParserEndToken'=> '3.41',
+ 'Pod::Simple::PullParserStartToken'=> '3.41',
+ 'Pod::Simple::PullParserTextToken'=> '3.41',
+ 'Pod::Simple::PullParserToken'=> '3.41',
+ 'Pod::Simple::RTF' => '3.41',
+ 'Pod::Simple::Search' => '3.41',
+ 'Pod::Simple::SimpleTree'=> '3.41',
+ 'Pod::Simple::Text' => '3.41',
+ 'Pod::Simple::TextContent'=> '3.41',
+ 'Pod::Simple::TiedOutFH'=> '3.41',
+ 'Pod::Simple::Transcode'=> '3.41',
+ 'Pod::Simple::TranscodeDumb'=> '3.41',
+ 'Pod::Simple::TranscodeSmart'=> '3.41',
+ 'Pod::Simple::XHTML' => '3.41',
+ 'Pod::Simple::XMLOutStream'=> '3.41',
+ 'Pod::Usage' => '2.01',
+ 'Storable' => '3.23',
+ 'Symbol' => '1.09',
+ 'Test2' => '1.302182',
+ 'Test2::API' => '1.302182',
+ 'Test2::API::Breakage' => '1.302182',
+ 'Test2::API::Context' => '1.302182',
+ 'Test2::API::Instance' => '1.302182',
+ 'Test2::API::InterceptResult'=> '1.302182',
+ 'Test2::API::InterceptResult::Event'=> '1.302182',
+ 'Test2::API::InterceptResult::Facet'=> '1.302182',
+ 'Test2::API::InterceptResult::Hub'=> '1.302182',
+ 'Test2::API::InterceptResult::Squasher'=> '1.302182',
+ 'Test2::API::Stack' => '1.302182',
+ 'Test2::Event' => '1.302182',
+ 'Test2::Event::Bail' => '1.302182',
+ 'Test2::Event::Diag' => '1.302182',
+ 'Test2::Event::Encoding'=> '1.302182',
+ 'Test2::Event::Exception'=> '1.302182',
+ 'Test2::Event::Fail' => '1.302182',
+ 'Test2::Event::Generic' => '1.302182',
+ 'Test2::Event::Note' => '1.302182',
+ 'Test2::Event::Ok' => '1.302182',
+ 'Test2::Event::Pass' => '1.302182',
+ 'Test2::Event::Plan' => '1.302182',
+ 'Test2::Event::Skip' => '1.302182',
+ 'Test2::Event::Subtest' => '1.302182',
+ 'Test2::Event::TAP::Version'=> '1.302182',
+ 'Test2::Event::V2' => '1.302182',
+ 'Test2::Event::Waiting' => '1.302182',
+ 'Test2::EventFacet' => '1.302182',
+ 'Test2::EventFacet::About'=> '1.302182',
+ 'Test2::EventFacet::Amnesty'=> '1.302182',
+ 'Test2::EventFacet::Assert'=> '1.302182',
+ 'Test2::EventFacet::Control'=> '1.302182',
+ 'Test2::EventFacet::Error'=> '1.302182',
+ 'Test2::EventFacet::Hub'=> '1.302182',
+ 'Test2::EventFacet::Info'=> '1.302182',
+ 'Test2::EventFacet::Info::Table'=> '1.302182',
+ 'Test2::EventFacet::Meta'=> '1.302182',
+ 'Test2::EventFacet::Parent'=> '1.302182',
+ 'Test2::EventFacet::Plan'=> '1.302182',
+ 'Test2::EventFacet::Render'=> '1.302182',
+ 'Test2::EventFacet::Trace'=> '1.302182',
+ 'Test2::Formatter' => '1.302182',
+ 'Test2::Formatter::TAP' => '1.302182',
+ 'Test2::Hub' => '1.302182',
+ 'Test2::Hub::Interceptor'=> '1.302182',
+ 'Test2::Hub::Interceptor::Terminator'=> '1.302182',
+ 'Test2::Hub::Subtest' => '1.302182',
+ 'Test2::IPC' => '1.302182',
+ 'Test2::IPC::Driver' => '1.302182',
+ 'Test2::IPC::Driver::Files'=> '1.302182',
+ 'Test2::Tools::Tiny' => '1.302182',
+ 'Test2::Util' => '1.302182',
+ 'Test2::Util::ExternalMeta'=> '1.302182',
+ 'Test2::Util::Facets2Legacy'=> '1.302182',
+ 'Test2::Util::HashBase' => '1.302182',
+ 'Test2::Util::Trace' => '1.302182',
+ 'Test::Builder' => '1.302182',
+ 'Test::Builder::Formatter'=> '1.302182',
+ 'Test::Builder::Module' => '1.302182',
+ 'Test::Builder::Tester' => '1.302182',
+ 'Test::Builder::Tester::Color'=> '1.302182',
+ 'Test::Builder::TodoDiag'=> '1.302182',
+ 'Test::More' => '1.302182',
+ 'Test::Simple' => '1.302182',
+ 'Test::Tester' => '1.302182',
+ 'Test::Tester::Capture' => '1.302182',
+ 'Test::Tester::CaptureRunner'=> '1.302182',
+ 'Test::Tester::Delegate'=> '1.302182',
+ 'Test::use::ok' => '1.302182',
+ 'Tie::RefHash' => '1.40',
+ 'Time::Local' => '1.30',
+ 'Unicode::Collate' => '1.29',
+ 'Unicode::Collate::CJK::Big5'=> '1.29',
+ 'Unicode::Collate::CJK::GB2312'=> '1.29',
+ 'Unicode::Collate::CJK::JISX0208'=> '1.29',
+ 'Unicode::Collate::CJK::Korean'=> '1.29',
+ 'Unicode::Collate::CJK::Pinyin'=> '1.29',
+ 'Unicode::Collate::CJK::Stroke'=> '1.29',
+ 'Unicode::Collate::CJK::Zhuyin'=> '1.29',
+ 'Unicode::Collate::Locale'=> '1.29',
+ 'Win32' => '0.54',
+ 'XS::APItest' => '1.12',
+ 'bytes' => '1.08',
+ 'experimental' => '0.022',
+ 'feature' => '1.61',
+ 'if' => '0.0609',
+ 'locale' => '1.10',
+ 'mro' => '1.25',
+ 'ok' => '1.302182',
+ 'overload' => '1.33',
+ 're' => '0.41',
+ 'subs' => '1.04',
+ 'utf8' => '1.24',
+ 'version' => '0.9928',
+ 'version::regex' => '0.9928',
+ },
+ removed => {
+ }
+ },
+ 5.033004 => {
+ delta_from => 5.033003,
+ changed => {
+ 'B' => '1.82',
+ 'B::Op_private' => '5.033004',
+ 'Config' => '5.033004',
+ 'Cwd' => '3.79',
+ 'ExtUtils::CBuilder' => '0.280235',
+ 'ExtUtils::CBuilder::Base'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::Unix'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::VMS'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::Windows'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::Windows::BCC'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::Windows::GCC'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::Windows::MSVC'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::aix'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::android'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::cygwin'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::darwin'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::dec_osf'=> '0.280235',
+ 'ExtUtils::CBuilder::Platform::os2'=> '0.280235',
+ 'ExtUtils::Command' => '7.56',
+ 'ExtUtils::Command::MM' => '7.56',
+ 'ExtUtils::Liblist' => '7.56',
+ 'ExtUtils::Liblist::Kid'=> '7.56',
+ 'ExtUtils::MM' => '7.56',
+ 'ExtUtils::MM_AIX' => '7.56',
+ 'ExtUtils::MM_Any' => '7.56',
+ 'ExtUtils::MM_BeOS' => '7.56',
+ 'ExtUtils::MM_Cygwin' => '7.56',
+ 'ExtUtils::MM_DOS' => '7.56',
+ 'ExtUtils::MM_Darwin' => '7.56',
+ 'ExtUtils::MM_MacOS' => '7.56',
+ 'ExtUtils::MM_NW5' => '7.56',
+ 'ExtUtils::MM_OS2' => '7.56',
+ 'ExtUtils::MM_OS390' => '7.56',
+ 'ExtUtils::MM_QNX' => '7.56',
+ 'ExtUtils::MM_UWIN' => '7.56',
+ 'ExtUtils::MM_Unix' => '7.56',
+ 'ExtUtils::MM_VMS' => '7.56',
+ 'ExtUtils::MM_VOS' => '7.56',
+ 'ExtUtils::MM_Win32' => '7.56',
+ 'ExtUtils::MM_Win95' => '7.56',
+ 'ExtUtils::MY' => '7.56',
+ 'ExtUtils::MakeMaker' => '7.56',
+ 'ExtUtils::MakeMaker::Config'=> '7.56',
+ 'ExtUtils::MakeMaker::Locale'=> '7.56',
+ 'ExtUtils::MakeMaker::version'=> '7.56',
+ 'ExtUtils::MakeMaker::version::regex'=> '7.56',
+ 'ExtUtils::Mkbootstrap' => '7.56',
+ 'ExtUtils::Mksymlists' => '7.56',
+ 'ExtUtils::testlib' => '7.56',
+ 'File::Fetch' => '1.00',
+ 'File::Path' => '2.18',
+ 'File::Spec' => '3.79',
+ 'File::Spec::AmigaOS' => '3.79',
+ 'File::Spec::Cygwin' => '3.79',
+ 'File::Spec::Epoc' => '3.79',
+ 'File::Spec::Functions' => '3.79',
+ 'File::Spec::Mac' => '3.79',
+ 'File::Spec::OS2' => '3.79',
+ 'File::Spec::Unix' => '3.79',
+ 'File::Spec::VMS' => '3.79',
+ 'IPC::Msg' => '2.09',
+ 'IPC::Semaphore' => '2.09',
+ 'IPC::SharedMem' => '2.09',
+ 'IPC::SysV' => '2.09',
+ 'Module::CoreList' => '5.20201120',
+ 'Module::CoreList::Utils'=> '5.20201120',
+ 'Net::Ping' => '2.74',
+ 'Pod::Html' => '1.26',
+ 'Pod::Simple' => '3.42',
+ 'Pod::Simple::BlackBox' => '3.42',
+ 'Pod::Simple::Checker' => '3.42',
+ 'Pod::Simple::Debug' => '3.42',
+ 'Pod::Simple::DumpAsText'=> '3.42',
+ 'Pod::Simple::DumpAsXML'=> '3.42',
+ 'Pod::Simple::HTML' => '3.42',
+ 'Pod::Simple::HTMLBatch'=> '3.42',
+ 'Pod::Simple::LinkSection'=> '3.42',
+ 'Pod::Simple::Methody' => '3.42',
+ 'Pod::Simple::Progress' => '3.42',
+ 'Pod::Simple::PullParser'=> '3.42',
+ 'Pod::Simple::PullParserEndToken'=> '3.42',
+ 'Pod::Simple::PullParserStartToken'=> '3.42',
+ 'Pod::Simple::PullParserTextToken'=> '3.42',
+ 'Pod::Simple::PullParserToken'=> '3.42',
+ 'Pod::Simple::RTF' => '3.42',
+ 'Pod::Simple::Search' => '3.42',
+ 'Pod::Simple::SimpleTree'=> '3.42',
+ 'Pod::Simple::Text' => '3.42',
+ 'Pod::Simple::TextContent'=> '3.42',
+ 'Pod::Simple::TiedOutFH'=> '3.42',
+ 'Pod::Simple::Transcode'=> '3.42',
+ 'Pod::Simple::TranscodeDumb'=> '3.42',
+ 'Pod::Simple::TranscodeSmart'=> '3.42',
+ 'Pod::Simple::XHTML' => '3.42',
+ 'Pod::Simple::XMLOutStream'=> '3.42',
+ 'Test2' => '1.302183',
+ 'Test2::API' => '1.302183',
+ 'Test2::API::Breakage' => '1.302183',
+ 'Test2::API::Context' => '1.302183',
+ 'Test2::API::Instance' => '1.302183',
+ 'Test2::API::InterceptResult'=> '1.302183',
+ 'Test2::API::InterceptResult::Event'=> '1.302183',
+ 'Test2::API::InterceptResult::Facet'=> '1.302183',
+ 'Test2::API::InterceptResult::Hub'=> '1.302183',
+ 'Test2::API::InterceptResult::Squasher'=> '1.302183',
+ 'Test2::API::Stack' => '1.302183',
+ 'Test2::Event' => '1.302183',
+ 'Test2::Event::Bail' => '1.302183',
+ 'Test2::Event::Diag' => '1.302183',
+ 'Test2::Event::Encoding'=> '1.302183',
+ 'Test2::Event::Exception'=> '1.302183',
+ 'Test2::Event::Fail' => '1.302183',
+ 'Test2::Event::Generic' => '1.302183',
+ 'Test2::Event::Note' => '1.302183',
+ 'Test2::Event::Ok' => '1.302183',
+ 'Test2::Event::Pass' => '1.302183',
+ 'Test2::Event::Plan' => '1.302183',
+ 'Test2::Event::Skip' => '1.302183',
+ 'Test2::Event::Subtest' => '1.302183',
+ 'Test2::Event::TAP::Version'=> '1.302183',
+ 'Test2::Event::V2' => '1.302183',
+ 'Test2::Event::Waiting' => '1.302183',
+ 'Test2::EventFacet' => '1.302183',
+ 'Test2::EventFacet::About'=> '1.302183',
+ 'Test2::EventFacet::Amnesty'=> '1.302183',
+ 'Test2::EventFacet::Assert'=> '1.302183',
+ 'Test2::EventFacet::Control'=> '1.302183',
+ 'Test2::EventFacet::Error'=> '1.302183',
+ 'Test2::EventFacet::Hub'=> '1.302183',
+ 'Test2::EventFacet::Info'=> '1.302183',
+ 'Test2::EventFacet::Info::Table'=> '1.302183',
+ 'Test2::EventFacet::Meta'=> '1.302183',
+ 'Test2::EventFacet::Parent'=> '1.302183',
+ 'Test2::EventFacet::Plan'=> '1.302183',
+ 'Test2::EventFacet::Render'=> '1.302183',
+ 'Test2::EventFacet::Trace'=> '1.302183',
+ 'Test2::Formatter' => '1.302183',
+ 'Test2::Formatter::TAP' => '1.302183',
+ 'Test2::Hub' => '1.302183',
+ 'Test2::Hub::Interceptor'=> '1.302183',
+ 'Test2::Hub::Interceptor::Terminator'=> '1.302183',
+ 'Test2::Hub::Subtest' => '1.302183',
+ 'Test2::IPC' => '1.302183',
+ 'Test2::IPC::Driver' => '1.302183',
+ 'Test2::IPC::Driver::Files'=> '1.302183',
+ 'Test2::Tools::Tiny' => '1.302183',
+ 'Test2::Util' => '1.302183',
+ 'Test2::Util::ExternalMeta'=> '1.302183',
+ 'Test2::Util::Facets2Legacy'=> '1.302183',
+ 'Test2::Util::HashBase' => '1.302183',
+ 'Test2::Util::Trace' => '1.302183',
+ 'Test::Builder' => '1.302183',
+ 'Test::Builder::Formatter'=> '1.302183',
+ 'Test::Builder::Module' => '1.302183',
+ 'Test::Builder::Tester' => '1.302183',
+ 'Test::Builder::Tester::Color'=> '1.302183',
+ 'Test::Builder::TodoDiag'=> '1.302183',
+ 'Test::More' => '1.302183',
+ 'Test::Simple' => '1.302183',
+ 'Test::Tester' => '1.302183',
+ 'Test::Tester::Capture' => '1.302183',
+ 'Test::Tester::CaptureRunner'=> '1.302183',
+ 'Test::Tester::Delegate'=> '1.302183',
+ 'Test::use::ok' => '1.302183',
+ 'XS::APItest' => '1.13',
+ 'ok' => '1.302183',
+ 'perlfaq' => '5.20201107',
+ },
+ removed => {
+ }
+ },
+ 5.033005 => {
+ delta_from => 5.033004,
+ changed => {
+ 'App::Prove' => '3.43',
+ 'App::Prove::State' => '3.43',
+ 'App::Prove::State::Result'=> '3.43',
+ 'App::Prove::State::Result::Test'=> '3.43',
+ 'B::Op_private' => '5.033005',
+ 'Carp' => '1.51',
+ 'Carp::Heavy' => '1.51',
+ 'Config' => '5.033005',
+ 'Config::Perl::V' => '0.33',
+ 'Cwd' => '3.80',
+ 'DynaLoader' => '1.49',
+ 'Encode' => '3.08',
+ 'Encode::GSM0338' => '2.09',
+ 'ExtUtils::Install' => '2.20',
+ 'ExtUtils::Installed' => '2.20',
+ 'ExtUtils::Packlist' => '2.20',
+ 'ExtUtils::ParseXS' => '3.42',
+ 'ExtUtils::ParseXS::Constants'=> '3.42',
+ 'ExtUtils::ParseXS::CountLines'=> '3.42',
+ 'ExtUtils::ParseXS::Eval'=> '3.42',
+ 'ExtUtils::ParseXS::Utilities'=> '3.42',
+ 'File::Copy' => '2.35',
+ 'File::Find' => '1.38',
+ 'File::Spec' => '3.80',
+ 'File::Spec::AmigaOS' => '3.80',
+ 'File::Spec::Cygwin' => '3.80',
+ 'File::Spec::Epoc' => '3.80',
+ 'File::Spec::Functions' => '3.80',
+ 'File::Spec::Mac' => '3.80',
+ 'File::Spec::OS2' => '3.80',
+ 'File::Spec::Unix' => '3.80',
+ 'File::Spec::VMS' => '3.80',
+ 'File::Spec::Win32' => '3.80',
+ 'Module::CoreList' => '5.20201220',
+ 'Module::CoreList::Utils'=> '5.20201220',
+ 'Net::Cmd' => '3.12',
+ 'Net::Config' => '3.12',
+ 'Net::Domain' => '3.12',
+ 'Net::FTP' => '3.12',
+ 'Net::FTP::A' => '3.12',
+ 'Net::FTP::E' => '3.12',
+ 'Net::FTP::I' => '3.12',
+ 'Net::FTP::L' => '3.12',
+ 'Net::FTP::dataconn' => '3.12',
+ 'Net::NNTP' => '3.12',
+ 'Net::Netrc' => '3.12',
+ 'Net::POP3' => '3.12',
+ 'Net::SMTP' => '3.12',
+ 'Net::Time' => '3.12',
+ 'ODBM_File' => '1.17',
+ 'Opcode' => '1.49',
+ 'POSIX' => '1.96',
+ 'PerlIO::via::QuotedPrint'=> '0.09',
+ 'TAP::Base' => '3.43',
+ 'TAP::Formatter::Base' => '3.43',
+ 'TAP::Formatter::Color' => '3.43',
+ 'TAP::Formatter::Console'=> '3.43',
+ 'TAP::Formatter::Console::ParallelSession'=> '3.43',
+ 'TAP::Formatter::Console::Session'=> '3.43',
+ 'TAP::Formatter::File' => '3.43',
+ 'TAP::Formatter::File::Session'=> '3.43',
+ 'TAP::Formatter::Session'=> '3.43',
+ 'TAP::Harness' => '3.43',
+ 'TAP::Harness::Env' => '3.43',
+ 'TAP::Object' => '3.43',
+ 'TAP::Parser' => '3.43',
+ 'TAP::Parser::Aggregator'=> '3.43',
+ 'TAP::Parser::Grammar' => '3.43',
+ 'TAP::Parser::Iterator' => '3.43',
+ 'TAP::Parser::Iterator::Array'=> '3.43',
+ 'TAP::Parser::Iterator::Process'=> '3.43',
+ 'TAP::Parser::Iterator::Stream'=> '3.43',
+ 'TAP::Parser::IteratorFactory'=> '3.43',
+ 'TAP::Parser::Multiplexer'=> '3.43',
+ 'TAP::Parser::Result' => '3.43',
+ 'TAP::Parser::Result::Bailout'=> '3.43',
+ 'TAP::Parser::Result::Comment'=> '3.43',
+ 'TAP::Parser::Result::Plan'=> '3.43',
+ 'TAP::Parser::Result::Pragma'=> '3.43',
+ 'TAP::Parser::Result::Test'=> '3.43',
+ 'TAP::Parser::Result::Unknown'=> '3.43',
+ 'TAP::Parser::Result::Version'=> '3.43',
+ 'TAP::Parser::Result::YAML'=> '3.43',
+ 'TAP::Parser::ResultFactory'=> '3.43',
+ 'TAP::Parser::Scheduler'=> '3.43',
+ 'TAP::Parser::Scheduler::Job'=> '3.43',
+ 'TAP::Parser::Scheduler::Spinner'=> '3.43',
+ 'TAP::Parser::Source' => '3.43',
+ 'TAP::Parser::SourceHandler'=> '3.43',
+ 'TAP::Parser::SourceHandler::Executable'=> '3.43',
+ 'TAP::Parser::SourceHandler::File'=> '3.43',
+ 'TAP::Parser::SourceHandler::Handle'=> '3.43',
+ 'TAP::Parser::SourceHandler::Perl'=> '3.43',
+ 'TAP::Parser::SourceHandler::RawTAP'=> '3.43',
+ 'TAP::Parser::YAMLish::Reader'=> '3.43',
+ 'TAP::Parser::YAMLish::Writer'=> '3.43',
+ 'Test::Harness' => '3.43',
+ 'Text::Balanced' => '2.04',
+ 'Time::HiRes' => '1.9766',
+ 'XS::APItest' => '1.14',
+ 'warnings' => '1.49',
+ },
+ removed => {
+ }
+ },
+ 5.033006 => {
+ delta_from => 5.033005,
+ changed => {
+ 'B::Op_private' => '5.033006',
+ 'Carp' => '1.52',
+ 'Carp::Heavy' => '1.52',
+ 'Compress::Raw::Bzip2' => '2.100',
+ 'Compress::Raw::Zlib' => '2.100',
+ 'Compress::Zlib' => '2.100',
+ 'Config' => '5.033006',
+ 'DynaLoader' => '1.50',
+ 'ExtUtils::Command' => '7.58',
+ 'ExtUtils::Command::MM' => '7.58',
+ 'ExtUtils::Liblist' => '7.58',
+ 'ExtUtils::Liblist::Kid'=> '7.58',
+ 'ExtUtils::MM' => '7.58',
+ 'ExtUtils::MM_AIX' => '7.58',
+ 'ExtUtils::MM_Any' => '7.58',
+ 'ExtUtils::MM_BeOS' => '7.58',
+ 'ExtUtils::MM_Cygwin' => '7.58',
+ 'ExtUtils::MM_DOS' => '7.58',
+ 'ExtUtils::MM_Darwin' => '7.58',
+ 'ExtUtils::MM_MacOS' => '7.58',
+ 'ExtUtils::MM_NW5' => '7.58',
+ 'ExtUtils::MM_OS2' => '7.58',
+ 'ExtUtils::MM_OS390' => '7.58',
+ 'ExtUtils::MM_QNX' => '7.58',
+ 'ExtUtils::MM_UWIN' => '7.58',
+ 'ExtUtils::MM_Unix' => '7.58',
+ 'ExtUtils::MM_VMS' => '7.58',
+ 'ExtUtils::MM_VOS' => '7.58',
+ 'ExtUtils::MM_Win32' => '7.58',
+ 'ExtUtils::MM_Win95' => '7.58',
+ 'ExtUtils::MY' => '7.58',
+ 'ExtUtils::MakeMaker' => '7.58',
+ 'ExtUtils::MakeMaker::Config'=> '7.58',
+ 'ExtUtils::MakeMaker::Locale'=> '7.58',
+ 'ExtUtils::MakeMaker::version'=> '7.58',
+ 'ExtUtils::MakeMaker::version::regex'=> '7.58',
+ 'ExtUtils::Manifest' => '1.73',
+ 'ExtUtils::Mkbootstrap' => '7.58',
+ 'ExtUtils::Mksymlists' => '7.58',
+ 'ExtUtils::testlib' => '7.58',
+ 'GDBM_File' => '1.19',
+ 'IO' => '1.45',
+ 'IO::Compress::Adapter::Bzip2'=> '2.100',
+ 'IO::Compress::Adapter::Deflate'=> '2.100',
+ 'IO::Compress::Adapter::Identity'=> '2.100',
+ 'IO::Compress::Base' => '2.100',
+ 'IO::Compress::Base::Common'=> '2.100',
+ 'IO::Compress::Bzip2' => '2.100',
+ 'IO::Compress::Deflate' => '2.100',
+ 'IO::Compress::Gzip' => '2.100',
+ 'IO::Compress::Gzip::Constants'=> '2.100',
+ 'IO::Compress::RawDeflate'=> '2.100',
+ 'IO::Compress::Zip' => '2.100',
+ 'IO::Compress::Zip::Constants'=> '2.100',
+ 'IO::Compress::Zlib::Constants'=> '2.100',
+ 'IO::Compress::Zlib::Extra'=> '2.100',
+ 'IO::Dir' => '1.45',
+ 'IO::File' => '1.45',
+ 'IO::Handle' => '1.45',
+ 'IO::Pipe' => '1.45',
+ 'IO::Poll' => '1.45',
+ 'IO::Seekable' => '1.45',
+ 'IO::Select' => '1.45',
+ 'IO::Socket' => '1.45',
+ 'IO::Socket::INET' => '1.45',
+ 'IO::Socket::UNIX' => '1.45',
+ 'IO::Uncompress::Adapter::Bunzip2'=> '2.100',
+ 'IO::Uncompress::Adapter::Identity'=> '2.100',
+ 'IO::Uncompress::Adapter::Inflate'=> '2.100',
+ 'IO::Uncompress::AnyInflate'=> '2.100',
+ 'IO::Uncompress::AnyUncompress'=> '2.100',
+ 'IO::Uncompress::Base' => '2.100',
+ 'IO::Uncompress::Bunzip2'=> '2.100',
+ 'IO::Uncompress::Gunzip'=> '2.100',
+ 'IO::Uncompress::Inflate'=> '2.100',
+ 'IO::Uncompress::RawInflate'=> '2.100',
+ 'IO::Uncompress::Unzip' => '2.100',
+ 'Module::CoreList' => '5.20210120',
+ 'Module::CoreList::Utils'=> '5.20210120',
+ 'Net::Cmd' => '3.13',
+ 'Net::Config' => '3.13',
+ 'Net::Domain' => '3.13',
+ 'Net::FTP' => '3.13',
+ 'Net::FTP::A' => '3.13',
+ 'Net::FTP::E' => '3.13',
+ 'Net::FTP::I' => '3.13',
+ 'Net::FTP::L' => '3.13',
+ 'Net::FTP::dataconn' => '3.13',
+ 'Net::NNTP' => '3.13',
+ 'Net::Netrc' => '3.13',
+ 'Net::POP3' => '3.13',
+ 'Net::SMTP' => '3.13',
+ 'Net::Time' => '3.13',
+ 'POSIX' => '1.97',
+ 'Socket' => '2.031',
+ 'XS::APItest' => '1.15',
+ 'feature' => '1.62',
+ 'warnings' => '1.50',
+ },
+ removed => {
+ }
+ },
+ 5.032001 => {
+ delta_from => 5.032000,
+ changed => {
+ 'B::Op_private' => '5.032001',
+ 'Config' => '5.032001',
+ 'Data::Dumper' => '2.174_01',
+ 'DynaLoader' => '1.47_01',
+ 'ExtUtils::Liblist::Kid'=> '7.44_01',
+ 'Module::CoreList' => '5.20210123',
+ 'Module::CoreList::Utils'=> '5.20210123',
+ 'Opcode' => '1.48',
+ 'Safe' => '2.41_01',
+ 'Win32API::File::inc::ExtUtils::Myconst2perl'=> '1',
+ },
+ removed => {
+ }
+ },
);
sub is_core
@@ -18572,6 +19418,13 @@ sub is_core
removed => {
}
},
+ 5.028003 => {
+ delta_from => 5.028002,
+ changed => {
+ },
+ removed => {
+ }
+ },
5.030003 => {
delta_from => 5.030002,
changed => {
@@ -18579,6 +19432,69 @@ sub is_core
removed => {
}
},
+ 5.032000 => {
+ delta_from => 5.031011,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033000 => {
+ delta_from => 5.032,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033001 => {
+ delta_from => 5.033000,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033002 => {
+ delta_from => 5.033001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033003 => {
+ delta_from => 5.033002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033004 => {
+ delta_from => 5.033003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033005 => {
+ delta_from => 5.033004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033006 => {
+ delta_from => 5.033005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.032001 => {
+ delta_from => 5.032,
+ changed => {
+ },
+ removed => {
+ }
+ },
);
%deprecated = _undelta(\%deprecated);
@@ -18802,12 +19718,8 @@ sub is_core
'PerlIO::via::QuotedPrint'=> 'cpan',
'Pod::Checker' => 'cpan',
'Pod::Escapes' => 'cpan',
- 'Pod::Find' => 'cpan',
- 'Pod::InputObjects' => 'cpan',
'Pod::Man' => 'cpan',
'Pod::ParseLink' => 'cpan',
- 'Pod::ParseUtils' => 'cpan',
- 'Pod::Parser' => 'cpan',
'Pod::Perldoc' => 'cpan',
'Pod::Perldoc::BaseTo' => 'cpan',
'Pod::Perldoc::GetOptsOO'=> 'cpan',
@@ -18821,8 +19733,6 @@ sub is_core
'Pod::Perldoc::ToText' => 'cpan',
'Pod::Perldoc::ToTk' => 'cpan',
'Pod::Perldoc::ToXml' => 'cpan',
- 'Pod::PlainText' => 'cpan',
- 'Pod::Select' => 'cpan',
'Pod::Simple' => 'cpan',
'Pod::Simple::BlackBox' => 'cpan',
'Pod::Simple::Checker' => 'cpan',
@@ -18832,6 +19742,7 @@ sub is_core
'Pod::Simple::HTML' => 'cpan',
'Pod::Simple::HTMLBatch'=> 'cpan',
'Pod::Simple::HTMLLegacy'=> 'cpan',
+ 'Pod::Simple::JustPod' => 'cpan',
'Pod::Simple::LinkSection'=> 'cpan',
'Pod::Simple::Methody' => 'cpan',
'Pod::Simple::Progress' => 'cpan',
@@ -18991,7 +19902,6 @@ sub is_core
'Unicode::Collate::Locale'=> 'cpan',
'Win32' => 'cpan',
'Win32API::File' => 'cpan',
- 'Win32API::File::inc::ExtUtils::Myconst2perl'=> 'cpan',
'autodie' => 'cpan',
'autodie::Scope::Guard' => 'cpan',
'autodie::Scope::GuardStack'=> 'cpan',
@@ -19069,13 +19979,13 @@ sub is_core
'Compress::Raw::Bzip2' => 'https://github.com/pmqs/Compress-Raw-Bzip2/issues',
'Compress::Raw::Zlib' => 'https://github.com/pmqs/Compress-Raw-Zlib/issues',
'Compress::Zlib' => 'https://github.com/pmqs/IO-Compress/issues',
- 'Config::Perl::V' => undef,
+ 'Config::Perl::V' => 'https://github.com/Tux/Config-Perl-V/issues',
'DB_File' => 'https://github.com/pmqs/DB_File/issues',
- 'Digest' => undef,
- 'Digest::MD5' => undef,
+ 'Digest' => 'https://github.com/Dual-Life/digest/issues',
+ 'Digest::MD5' => 'https://github.com/Dual-Life/digest-md5/issues',
'Digest::SHA' => undef,
- 'Digest::base' => undef,
- 'Digest::file' => undef,
+ 'Digest::base' => 'https://github.com/Dual-Life/digest/issues',
+ 'Digest::file' => 'https://github.com/Dual-Life/digest/issues',
'Encode' => undef,
'Encode::Alias' => undef,
'Encode::Byte' => undef,
@@ -19100,8 +20010,8 @@ sub is_core
'Encode::TW' => undef,
'Encode::Unicode' => undef,
'Encode::Unicode::UTF7' => undef,
- 'ExtUtils::Command' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::Command::MM' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::Command' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::Command::MM' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
'ExtUtils::Constant' => undef,
'ExtUtils::Constant::Base'=> undef,
'ExtUtils::Constant::ProxySubs'=> undef,
@@ -19109,36 +20019,36 @@ sub is_core
'ExtUtils::Constant::XS'=> undef,
'ExtUtils::Install' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-Install',
'ExtUtils::Installed' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-Install',
- 'ExtUtils::Liblist' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::Liblist::Kid'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_AIX' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_Any' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_BeOS' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_Cygwin' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_DOS' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_Darwin' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_MacOS' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_NW5' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_OS2' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_QNX' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_UWIN' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_Unix' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_VMS' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_VOS' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_Win32' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MM_Win95' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MY' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MakeMaker' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MakeMaker::Config'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MakeMaker::Locale'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MakeMaker::version'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::MakeMaker::version::regex'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::Liblist' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::Liblist::Kid'=> 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_AIX' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_Any' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_BeOS' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_Cygwin' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_DOS' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_Darwin' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_MacOS' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_NW5' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_OS2' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_QNX' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_UWIN' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_Unix' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_VMS' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_VOS' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_Win32' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MM_Win95' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MY' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MakeMaker' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MakeMaker::Config'=> 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MakeMaker::Locale'=> 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MakeMaker::version'=> 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::MakeMaker::version::regex'=> 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
'ExtUtils::Manifest' => 'http://github.com/Perl-Toolchain-Gang/ExtUtils-Manifest/issues',
- 'ExtUtils::Mkbootstrap' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
- 'ExtUtils::Mksymlists' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::Mkbootstrap' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::Mksymlists' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
'ExtUtils::Packlist' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-Install',
- 'ExtUtils::testlib' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
+ 'ExtUtils::testlib' => 'https://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
'Fatal' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
'File::Fetch' => undef,
'File::GlobMapper' => 'https://github.com/pmqs/IO-Compress/issues',
@@ -19173,7 +20083,7 @@ sub is_core
'IO::Uncompress::Inflate'=> 'https://github.com/pmqs/IO-Compress/issues',
'IO::Uncompress::RawInflate'=> 'https://github.com/pmqs/IO-Compress/issues',
'IO::Uncompress::Unzip' => 'https://github.com/pmqs/IO-Compress/issues',
- 'IO::Zlib' => undef,
+ 'IO::Zlib' => 'https://github.com/tomhughes/IO-Zlib/issues',
'IPC::Cmd' => undef,
'IPC::Msg' => undef,
'IPC::Semaphore' => undef,
@@ -19184,8 +20094,8 @@ sub is_core
'List::Util' => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Scalar-List-Utils',
'List::Util::XS' => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Scalar-List-Utils',
'Locale::Maketext::Simple'=> undef,
- 'MIME::Base64' => undef,
- 'MIME::QuotedPrint' => undef,
+ 'MIME::Base64' => 'https://github.com/Dual-Life/mime-base64/issues',
+ 'MIME::QuotedPrint' => 'https://github.com/Dual-Life/mime-base64/issues',
'Math::BigFloat' => undef,
'Math::BigFloat::Trace' => undef,
'Math::BigInt' => undef,
@@ -19229,12 +20139,8 @@ sub is_core
'PerlIO::via::QuotedPrint'=> undef,
'Pod::Checker' => undef,
'Pod::Escapes' => undef,
- 'Pod::Find' => undef,
- 'Pod::InputObjects' => undef,
'Pod::Man' => 'https://rt.cpan.org/Dist/Display.html?Name=podlators',
'Pod::ParseLink' => 'https://rt.cpan.org/Dist/Display.html?Name=podlators',
- 'Pod::ParseUtils' => undef,
- 'Pod::Parser' => undef,
'Pod::Perldoc' => undef,
'Pod::Perldoc::BaseTo' => undef,
'Pod::Perldoc::GetOptsOO'=> undef,
@@ -19248,8 +20154,6 @@ sub is_core
'Pod::Perldoc::ToText' => undef,
'Pod::Perldoc::ToTk' => undef,
'Pod::Perldoc::ToXml' => undef,
- 'Pod::PlainText' => undef,
- 'Pod::Select' => undef,
'Pod::Simple' => 'https://github.com/perl-pod/pod-simple/issues',
'Pod::Simple::BlackBox' => 'https://github.com/perl-pod/pod-simple/issues',
'Pod::Simple::Checker' => 'https://github.com/perl-pod/pod-simple/issues',
@@ -19259,6 +20163,7 @@ sub is_core
'Pod::Simple::HTML' => 'https://github.com/perl-pod/pod-simple/issues',
'Pod::Simple::HTMLBatch'=> 'https://github.com/perl-pod/pod-simple/issues',
'Pod::Simple::HTMLLegacy'=> 'https://github.com/perl-pod/pod-simple/issues',
+ 'Pod::Simple::JustPod' => 'https://github.com/perl-pod/pod-simple/issues',
'Pod::Simple::LinkSection'=> 'https://github.com/perl-pod/pod-simple/issues',
'Pod::Simple::Methody' => 'https://github.com/perl-pod/pod-simple/issues',
'Pod::Simple::Progress' => 'https://github.com/perl-pod/pod-simple/issues',
@@ -19282,7 +20187,7 @@ sub is_core
'Pod::Text::Color' => 'https://rt.cpan.org/Dist/Display.html?Name=podlators',
'Pod::Text::Overstrike' => 'https://rt.cpan.org/Dist/Display.html?Name=podlators',
'Pod::Text::Termcap' => 'https://rt.cpan.org/Dist/Display.html?Name=podlators',
- 'Pod::Usage' => undef,
+ 'Pod::Usage' => 'https://github.com/Dual-Life/Pod-Usage/issues',
'Scalar::Util' => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Scalar-List-Utils',
'Socket' => undef,
'Sub::Util' => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Scalar-List-Utils',
@@ -19403,7 +20308,7 @@ sub is_core
'Text::ParseWords' => undef,
'Text::Tabs' => undef,
'Text::Wrap' => undef,
- 'Tie::RefHash' => undef,
+ 'Tie::RefHash' => 'https://rt.cpan.org/Public/Dist/Display.html?Name=Tie-RefHash',
'Time::Local' => 'https://github.com/houseabsolute/Time-Local/issues',
'Time::Piece' => undef,
'Time::Seconds' => undef,
@@ -19418,7 +20323,6 @@ sub is_core
'Unicode::Collate::Locale'=> undef,
'Win32' => 'https://github.com/perl-libwin32/win32/issues',
'Win32API::File' => undef,
- 'Win32API::File::inc::ExtUtils::Myconst2perl'=> undef,
'autodie' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
'autodie::Scope::Guard' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
'autodie::Scope::GuardStack'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie',
diff --git a/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm b/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm
index c4be112b884..cd8929babfc 100644
--- a/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm
+++ b/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm
@@ -4,7 +4,7 @@ use strict;
use warnings;
use Module::CoreList;
-our $VERSION = '5.20200601_30';
+our $VERSION = '5.20210123';
our %utilities;
sub utilities {
@@ -1601,6 +1601,13 @@ my %delta = (
removed => {
}
},
+ 5.028003 => {
+ delta_from => 5.028002,
+ changed => {
+ },
+ removed => {
+ }
+ },
5.030003 => {
delta_from => 5.030002,
changed => {
@@ -1608,6 +1615,69 @@ my %delta = (
removed => {
}
},
+ 5.032000 => {
+ delta_from => 5.031011,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033000 => {
+ delta_from => 5.032,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033001 => {
+ delta_from => 5.033000,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033002 => {
+ delta_from => 5.033001,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033003 => {
+ delta_from => 5.033002,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033004 => {
+ delta_from => 5.033003,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033005 => {
+ delta_from => 5.033004,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.033006 => {
+ delta_from => 5.033005,
+ changed => {
+ },
+ removed => {
+ }
+ },
+ 5.032001 => {
+ delta_from => 5.032000,
+ changed => {
+ },
+ removed => {
+ }
+ },
);
%utilities = Module::CoreList::_undelta(\%delta);
diff --git a/gnu/usr.bin/perl/dist/Net-Ping/lib/Net/Ping.pm b/gnu/usr.bin/perl/dist/Net-Ping/lib/Net/Ping.pm
index dce735a0a0a..932fde51363 100644
--- a/gnu/usr.bin/perl/dist/Net-Ping/lib/Net/Ping.pm
+++ b/gnu/usr.bin/perl/dist/Net-Ping/lib/Net/Ping.pm
@@ -19,7 +19,7 @@ use Time::HiRes;
our @ISA = qw(Exporter);
our @EXPORT = qw(pingecho);
our @EXPORT_OK = qw(wakeonlan);
-our $VERSION = "2.71";
+our $VERSION = "2.72";
# Globals
diff --git a/gnu/usr.bin/perl/dist/Net-Ping/t/450_service.t b/gnu/usr.bin/perl/dist/Net-Ping/t/450_service.t
index fc8d758f077..5cf7445830d 100755
--- a/gnu/usr.bin/perl/dist/Net-Ping/t/450_service.t
+++ b/gnu/usr.bin/perl/dist/Net-Ping/t/450_service.t
@@ -78,8 +78,7 @@ is($p->ping("127.0.0.1"), 1, 'first port is reachable');
$p->{port_num} = $port2;
{
- local $TODO;
- $TODO = "Believed not to work on $^O" if $^O eq 'hpux' || $^O eq 'os390';
+ local $TODO = "Believed not to work on $^O" if $^O =~ /^(?:hpux|os390|freebsd)$/;
is($p->ping("127.0.0.1"), 1, 'second port is reachable');
}
@@ -127,12 +126,16 @@ $p->service_check(0);
# Try on the other port
$p->{port_num} = $port2;
-is($p->ping("127.0.0.1"), 1, "send SYN to second port") or diag ("ERRNO: $!");
+SKIP: {
+ skip "no localhost resolver on $^O", 2
+ unless Socket::getaddrinfo('localhost', &Socket::AF_INET);
+ is($p->ping("127.0.0.1"), 1, "send SYN to second port") or diag ("ERRNO: $!");
-{
- local $TODO;
- $TODO = "Believed not to work on $^O" if $^O eq 'hpux' || $^O eq 'MSWin32' || $^O eq 'os390';
+ {
+ local $TODO = "Believed not to work on $^O"
+ if $^O =~ /^(?:hpux|MSWin32|os390|freebsd)$/;
is($p->ack(), '127.0.0.1', 'IP should be reachable');
+ }
}
is($p->ack(), undef, 'No more sockets');
diff --git a/gnu/usr.bin/perl/dist/PathTools/lib/File/Spec/Win32.pm b/gnu/usr.bin/perl/dist/PathTools/lib/File/Spec/Win32.pm
index 59340104391..a3b89c3ff60 100644
--- a/gnu/usr.bin/perl/dist/PathTools/lib/File/Spec/Win32.pm
+++ b/gnu/usr.bin/perl/dist/PathTools/lib/File/Spec/Win32.pm
@@ -5,7 +5,7 @@ use strict;
use Cwd ();
require File::Spec::Unix;
-our $VERSION = '3.78';
+our $VERSION = '3.79';
$VERSION =~ tr/_//d;
our @ISA = qw(File::Spec::Unix);
@@ -84,7 +84,7 @@ sub tmpdir {
MSWin32 case-tolerance depends on GetVolumeInformation() $ouFsFlags == FS_CASE_SENSITIVE,
indicating the case significance when comparing file specifications.
Since XP FS_CASE_SENSITIVE is effectively disabled for the NT subsubsystem.
-See http://cygwin.com/ml/cygwin/2007-07/msg00891.html
+See L<http://cygwin.com/ml/cygwin/2007-07/msg00891.html>
Default: 1
=cut
diff --git a/gnu/usr.bin/perl/dist/Safe/Safe.pm b/gnu/usr.bin/perl/dist/Safe/Safe.pm
index e9f096713d1..6bc74540bee 100644
--- a/gnu/usr.bin/perl/dist/Safe/Safe.pm
+++ b/gnu/usr.bin/perl/dist/Safe/Safe.pm
@@ -3,7 +3,7 @@ package Safe;
use 5.003_11;
use Scalar::Util qw(reftype refaddr);
-$Safe::VERSION = "2.40";
+$Safe::VERSION = "2.41_01";
# *** Don't declare any lexicals above this point ***
#
@@ -543,6 +543,13 @@ outside the compartment) placed into the compartment. For example,
=head1 WARNING
+The Safe module does not implement an effective sandbox for
+evaluating untrusted code with the perl interpreter.
+
+Bugs in the perl interpreter that could be abused to bypass
+Safe restrictions are not treated as vulnerabilities. See
+L<perlsecpolicy> for additional information.
+
The authors make B<no warranty>, implied or otherwise, about the
suitability of this software for safety or security purposes.
@@ -753,7 +760,7 @@ any I<further> compilation that the already compiled code may try to perform.
This is particularly useful when applied to code references returned from reval().
(It also provides a kind of workaround for RT#60374: "Safe.pm sort {} bug with
--Dusethreads". See L<http://rt.perl.org/rt3//Public/Bug/Display.html?id=60374>
+-Dusethreads". See L<https://rt.perl.org/rt3//Public/Bug/Display.html?id=60374>
for I<much> more detail.)
=head2 wrap_code_refs_within (...)
diff --git a/gnu/usr.bin/perl/dist/SelfLoader/lib/SelfLoader.pm b/gnu/usr.bin/perl/dist/SelfLoader/lib/SelfLoader.pm
index 0034e5be333..daa3e6632ca 100644
--- a/gnu/usr.bin/perl/dist/SelfLoader/lib/SelfLoader.pm
+++ b/gnu/usr.bin/perl/dist/SelfLoader/lib/SelfLoader.pm
@@ -2,7 +2,7 @@ package SelfLoader;
use 5.008;
use strict;
use IO::Handle;
-our $VERSION = "1.25";
+our $VERSION = "1.26";
# The following bit of eval-magic is necessary to make this work on
# perls < 5.009005.
@@ -428,7 +428,7 @@ You should also have received a copy of the GNU General Public License
along with this program in the file named "Copying". If not, write to the
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
MA 02110-1301, USA or visit their web page on the internet at
-http://www.gnu.org/copyleft/gpl.html.
+L<http://www.gnu.org/copyleft/gpl.html>.
For those of you that choose to use the GNU General Public License,
my interpretation of the GNU General Public License is that no Perl
diff --git a/gnu/usr.bin/perl/dist/Storable/ChangeLog b/gnu/usr.bin/perl/dist/Storable/ChangeLog
index 04881992e21..bf353815a13 100644
--- a/gnu/usr.bin/perl/dist/Storable/ChangeLog
+++ b/gnu/usr.bin/perl/dist/Storable/ChangeLog
@@ -1,3 +1,34 @@
+2010-01-27 10:27:00 TonyC
+ version 3.20
+ * fix a format string and arguments for some debugging text
+ * linkify references to alternatives to Storable
+
+2020-01-27 11:01:00 TonyC
+ version 3.19
+ * add casts to match some I32 parameters to "%d" formats (#17339)
+ * fix dependencies in Makefile.PL -> META (#17422)
+ * make use of note() optional, this requires a newer version of
+ Test::More and there's a circular dependency between later
+ versions of Test::More and Storable (#17422)
+
+2019-11-19 07:59:39 TonyC
+ version 3.18
+ * update bug tracker to point at github (#17298)
+ * disallow vstring magic strings over 2GB-1 (#17306)
+ * mark some ASCII dependent tests as ASCII platform only
+
+2019-08-08 11:48:00 TonyC
+ version 3.17
+ * correct a data type to ensure the check for too large results from
+ STORABLE_freeze() are detected correctly (detected by Coverity)
+ * removed remains of stack size detection from the build process.
+ * moved CAN_FLOCK detection into XS to simplify the build process.
+
+2019-06-11 10:43:00 TonyC
+ version 3.16
+ * (perl #134179) fix self-referencing structures that include regexps
+ * bless regexps to preserve bless qr//, "Foo"
+
2019-04-23 16:00:00 xsawyerx
version 3.15
* Fix leaking.
@@ -341,7 +372,7 @@ Sat Mar 13 20:11:03 GMT 2004 Nicholas Clark <nick@ccl4.org>
Version 2.11
1. Storing restricted hashes in canonical order would SEGV. Fixed.
- 2. It was impossible to retrieve references to PL_sv_no and and
+ 2. It was impossible to retrieve references to PL_sv_no and
PL_sv_undef from STORABLE_thaw hooks.
3. restrict.t was failing on 5.8.0, due to 5.8.0's unique
implementation of restricted hashes using PL_sv_undef
diff --git a/gnu/usr.bin/perl/dist/Storable/Makefile.PL b/gnu/usr.bin/perl/dist/Storable/Makefile.PL
index 4a391255625..e03e141b9f4 100644
--- a/gnu/usr.bin/perl/dist/Storable/Makefile.PL
+++ b/gnu/usr.bin/perl/dist/Storable/Makefile.PL
@@ -10,43 +10,48 @@ use strict;
use warnings;
use ExtUtils::MakeMaker 6.31;
use Config;
-use File::Copy qw(move copy);
-use File::Spec;
-
-my $pm = { 'Storable.pm' => '$(INST_ARCHLIB)/Storable.pm' };
WriteMakefile(
NAME => 'Storable',
AUTHOR => 'Perl 5 Porters',
LICENSE => 'perl',
DISTNAME => "Storable",
-# We now ship this in t/
-# PREREQ_PM => { 'Test::More' => '0.41' },
- PL_FILES => { }, # prevent default behaviour
- PM => $pm,
- PREREQ_PM => { XSLoader => 0 },
+ PREREQ_PM =>
+ {
+ XSLoader => 0,
+ },
+ ( $ExtUtils::MakeMaker::VERSION >= 6.64 ?
+ (
+ CONFIGURE_REQUIRES => {
+ 'ExtUtils::MakeMaker' => '6.31',
+ },
+ BUILD_REQUIRES => {
+ 'ExtUtils::MakeMaker' => '6.31',
+ },
+ TEST_REQUIRES => {
+ 'Test::More' => '0.41',
+ },
+ )
+ : () ),
INSTALLDIRS => ($] >= 5.007 && $] < 5.012) ? 'perl' : 'site',
- VERSION_FROM => '__Storable__.pm',
- ABSTRACT_FROM => '__Storable__.pm',
+ VERSION_FROM => 'Storable.pm',
+ ABSTRACT_FROM => 'Storable.pm',
($ExtUtils::MakeMaker::VERSION > 6.45 ?
(META_MERGE => { resources =>
- { bugtracker => 'http://rt.perl.org/perlbug/' },
+ { bugtracker => 'https://github.com/Perl/perl5/issues' },
provides => {
'Storable' => {
- file => '__Storable__.pm',
- version => MM->parse_version('__Storable__.pm'),
+ file => 'Storable.pm',
+ version => MM->parse_version('Storable.pm'),
},
},
},
) : ()),
dist => { SUFFIX => 'gz', COMPRESS => 'gzip -f' },
- clean => { FILES => 'Storable-* Storable.pm lib' },
+ clean => { FILES => 'Storable-*' },
);
-# Unlink the .pm file included with the distribution
-1 while unlink "Storable.pm";
-
my $ivtype = $Config{ivtype};
# I don't know if the VMS folks ever supported long long on 5.6.x
@@ -67,16 +72,8 @@ in the Storable documentation for instructions on how to read your data.
EOM
}
-# compute the maximum stacksize, before and after linking
package MY;
-# FORCE finish of INST_DYNAMIC, avoid loading the old Storable (failed XS_VERSION check)
-sub xlinkext {
- my $s = shift->SUPER::linkext(@_);
- $s =~ s|( :: .*)| $1 FORCE stacksize|;
- $s
-}
-
sub depend {
"
@@ -87,13 +84,3 @@ release : dist
git push --tags
"
}
-
-sub postamble {
-'
-all :: Storable.pm
- $(NOECHO) $(NOOP)
-
-Storable.pm :: Storable.pm.PL __Storable__.pm
- $(PERLRUN) Storable.pm.PL
-'
-}
diff --git a/gnu/usr.bin/perl/dist/Storable/__Storable__.pm b/gnu/usr.bin/perl/dist/Storable/Storable.pm
index 92373712349..1a750f1ba56 100644
--- a/gnu/usr.bin/perl/dist/Storable/__Storable__.pm
+++ b/gnu/usr.bin/perl/dist/Storable/Storable.pm
@@ -8,7 +8,7 @@
# in the README file that comes with the distribution.
#
-require XSLoader;
+BEGIN { require XSLoader }
require Exporter;
package Storable;
@@ -27,7 +27,9 @@ our @EXPORT_OK = qw(
our ($canonical, $forgive_me);
-our $VERSION = '3.15';
+BEGIN {
+ our $VERSION = '3.21';
+}
our $recursion_limit;
our $recursion_limit_hash;
@@ -104,14 +106,12 @@ $Storable::flags = FLAGS_COMPAT;
$Storable::downgrade_restricted = 1;
$Storable::accept_future_minor = 1;
-XSLoader::load('Storable');
+BEGIN { XSLoader::load('Storable') };
#
# Determine whether locking is possible, but only when needed.
#
-sub CAN_FLOCK; # TEMPLATE - replaced by Storable.pm.PL
-
sub show_file_magic {
print <<EOM;
#
@@ -266,7 +266,7 @@ sub _store {
local *FILE;
if ($use_locking) {
open(FILE, ">>", $file) || logcroak "can't write into $file: $!";
- unless (&CAN_FLOCK) {
+ unless (CAN_FLOCK) {
logcarp
"Storable::lock_store: fcntl/flock emulation broken on $^O";
return undef;
@@ -410,7 +410,7 @@ sub _retrieve {
my $self;
my $da = $@; # Could be from exception handler
if ($use_locking) {
- unless (&CAN_FLOCK) {
+ unless (CAN_FLOCK) {
logcarp
"Storable::lock_store: fcntl/flock emulation broken on $^O";
return undef;
@@ -986,6 +986,9 @@ modifying C<$Storable::recursion_limit> and
C<$Storable::recursion_limit_hash> respectively. Either can be set to
C<-1> to prevent any depth checks, though this isn't recommended.
+If you want to test what the limits are, the F<stacksize> tool is
+included in the C<Storable> distribution.
+
=item *
You can create endless loops if the things you serialize via freeze()
@@ -1224,9 +1227,9 @@ See CVE-2015-1592 and its metasploit module.
If your application requires accepting data from untrusted sources,
you are best off with a less powerful and more-likely safe
serialization format and implementation. If your data is sufficiently
-simple, Cpanel::JSON::XS, Data::MessagePack or Serial are the best
-choices and offers maximum interoperability, but note that Serial is
-unsafe by default.
+simple, L<Cpanel::JSON::XS>, L<Data::MessagePack> or L<Sereal> are the best
+choices and offer maximum interoperability, but note that Sereal is
+L<unsafe by default|Sereal::Decoder/ROBUSTNESS>.
=head1 WARNING
diff --git a/gnu/usr.bin/perl/dist/Storable/Storable.pm.PL b/gnu/usr.bin/perl/dist/Storable/Storable.pm.PL
deleted file mode 100644
index df979c09a9b..00000000000
--- a/gnu/usr.bin/perl/dist/Storable/Storable.pm.PL
+++ /dev/null
@@ -1,35 +0,0 @@
-use strict;
-use warnings;
-
-use Config;
-
-my $template;
-{ # keep all the code in an external template to keep it easy to update
- local $/;
- open my $FROM, '<', '__Storable__.pm' or die $!;
- $template = <$FROM>;
- close $FROM or die $!;
-}
-
-sub CAN_FLOCK {
- return
- $Config{'d_flock'} ||
- $Config{'d_fcntl_can_lock'} ||
- $Config{'d_lockf'}
- ? 1 : 0;
-}
-
-my $CAN_FLOCK = CAN_FLOCK();
-
-# populate the sub and preserve it if used outside
-$template =~ s{^sub CAN_FLOCK;.*$}{sub CAN_FLOCK { ${CAN_FLOCK} } # computed by Storable.pm.PL}m;
-# alternatively we could remove the sub
-#$template =~ s{^sub CAN_FLOCK;.*$}{}m;
-# replace local function calls to hardcoded value
-$template =~ s{&CAN_FLOCK}{${CAN_FLOCK}}g;
-
-{
- open my $OUT, '>', 'Storable.pm' or die $!;
- print {$OUT} $template or die $!;
- close $OUT or die $!;
-}
diff --git a/gnu/usr.bin/perl/dist/Storable/Storable.xs b/gnu/usr.bin/perl/dist/Storable/Storable.xs
index ed729c94a66..4c4c268b156 100644
--- a/gnu/usr.bin/perl/dist/Storable/Storable.xs
+++ b/gnu/usr.bin/perl/dist/Storable/Storable.xs
@@ -104,6 +104,12 @@
# define strEQc(s,c) memEQ(s, ("" c ""), sizeof(c))
#endif
+#if defined(HAS_FLOCK) || defined(FCNTL_CAN_LOCK) && defined(HAS_LOCKF)
+#define CAN_FLOCK &PL_sv_yes
+#else
+#define CAN_FLOCK &PL_sv_no
+#endif
+
#ifdef DEBUGME
#ifndef DASSERT
@@ -726,8 +732,8 @@ static stcxt_t *Context_ptr = NULL;
STRLEN nsz = (STRLEN) round_mgrow((x)+msiz); \
STRLEN offset = mptr - mbase; \
ASSERT(!cxt->membuf_ro, ("mbase is not read-only")); \
- TRACEME(("** extending mbase from %ld to %ld bytes (wants %ld new)", \
- (long)msiz, nsz, (long)(x))); \
+ TRACEME(("** extending mbase from %lu to %lu bytes (wants %lu new)", \
+ (unsigned long)msiz, (unsigned long)nsz, (unsigned long)(x))); \
Renew(mbase, nsz, char); \
msiz = nsz; \
mptr = mbase + offset; \
@@ -2622,6 +2628,12 @@ static int store_scalar(pTHX_ stcxt_t *cxt, SV *sv)
/* The macro passes this by address, not value, and a lot of
called code assumes that it's 32 bits without checking. */
const SSize_t len = mg->mg_len;
+ /* we no longer accept vstrings over I32_SIZE-1, so don't emit
+ them, also, older Storables handle them badly.
+ */
+ if (len >= I32_MAX) {
+ CROAK(("vstring too large to freeze"));
+ }
STORE_PV_LEN((const char *)mg->mg_ptr,
len, SX_VSTRING, SX_LVSTRING);
}
@@ -3079,7 +3091,7 @@ static int store_hash(pTHX_ stcxt_t *cxt, HV *hv)
len = HEK_LEN(hek);
if (len == HEf_SVKEY) {
/* This is somewhat sick, but the internal APIs are
- * such that XS code could put one of these in in
+ * such that XS code could put one of these in
* a regular hash.
* Maybe we should be capable of storing one if
* found.
@@ -3431,7 +3443,7 @@ static int get_regexp(pTHX_ stcxt_t *cxt, SV* sv, SV **re, SV **flags) {
count = call_sv((SV*)cv, G_ARRAY);
SPAGAIN;
if (count < 2)
- CROAK(("re::regexp_pattern returned only %d results", count));
+ CROAK(("re::regexp_pattern returned only %d results", (int)count));
*flags = POPs;
SvREFCNT_inc(*flags);
*re = POPs;
@@ -3662,7 +3674,7 @@ static int store_hook(
SV *ref;
AV *av;
SV **ary;
- int count; /* really len3 + 1 */
+ IV count; /* really len3 + 1 */
unsigned char flags;
char *pv;
int i;
@@ -3752,7 +3764,7 @@ static int store_hook(
SvREFCNT_dec(ref); /* Reclaim temporary reference */
count = AvFILLp(av) + 1;
- TRACEME(("store_hook, array holds %d items", count));
+ TRACEME(("store_hook, array holds %" IVdf " items", count));
/*
* If they return an empty list, it means they wish to ignore the
@@ -3986,7 +3998,7 @@ static int store_hook(
*/
TRACEME(("SX_HOOK (recursed=%d) flags=0x%x "
- "class=%" IVdf " len=%" IVdf " len2=%" IVdf " len3=%d",
+ "class=%" IVdf " len=%" IVdf " len2=%" IVdf " len3=%" IVdf,
recursed, flags, (IV)classnum, (IV)len, (IV)len2, count-1));
/* SX_HOOK <flags> [<extra>] */
@@ -5931,15 +5943,22 @@ static SV *retrieve_lvstring(pTHX_ stcxt_t *cxt, const char *cname)
{
#ifdef SvVOK
char *s;
- I32 len;
+ U32 len;
SV *sv;
RLEN(len);
- TRACEME(("retrieve_lvstring (#%d), len = %" IVdf,
- (int)cxt->tagnum, (IV)len));
+ TRACEME(("retrieve_lvstring (#%d), len = %" UVuf,
+ (int)cxt->tagnum, (UV)len));
+
+ /* Since we'll no longer produce such large vstrings, reject them
+ here too.
+ */
+ if (len >= I32_MAX) {
+ CROAK(("vstring too large to fetch"));
+ }
New(10003, s, len+1, char);
- SAFEPVREAD(s, len, s);
+ SAFEPVREAD(s, (I32)len, s);
sv = retrieve(aTHX_ cxt, cname);
if (!sv) {
@@ -6808,8 +6827,7 @@ static SV *retrieve_regexp(pTHX_ stcxt_t *cxt, const char *cname) {
SV *sv;
dSP;
I32 count;
-
- PERL_UNUSED_ARG(cname);
+ HV *stash;
ENTER;
SAVETMPS;
@@ -6846,7 +6864,7 @@ static SV *retrieve_regexp(pTHX_ stcxt_t *cxt, const char *cname) {
SPAGAIN;
if (count != 1)
- CROAK(("Bad count %d calling _make_re", count));
+ CROAK(("Bad count %d calling _make_re", (int)count));
re_ref = POPs;
@@ -6857,6 +6875,8 @@ static SV *retrieve_regexp(pTHX_ stcxt_t *cxt, const char *cname) {
sv = SvRV(re_ref);
SvREFCNT_inc(sv);
+ stash = cname ? gv_stashpv(cname, GV_ADD) : 0;
+ SEEN_NN(sv, stash, 0);
FREETMPS;
LEAVE;
@@ -7793,6 +7813,8 @@ BOOT:
newCONSTSUB(stash, "BIN_MINOR", newSViv(STORABLE_BIN_MINOR));
newCONSTSUB(stash, "BIN_WRITE_MINOR", newSViv(STORABLE_BIN_WRITE_MINOR));
+ newCONSTSUB(stash, "CAN_FLOCK", CAN_FLOCK);
+
init_perinterp(aTHX);
gv_fetchpv("Storable::drop_utf8", GV_ADDMULTI, SVt_PV);
#ifdef DEBUGME
diff --git a/gnu/usr.bin/perl/dist/Storable/stacksize b/gnu/usr.bin/perl/dist/Storable/stacksize
index f93eccce1a6..289668448b3 100644
--- a/gnu/usr.bin/perl/dist/Storable/stacksize
+++ b/gnu/usr.bin/perl/dist/Storable/stacksize
@@ -161,7 +161,7 @@ my $max_depth_hash = $n;
# instead so a user setting of either variable more closely matches
# the limits the use sees.
-# be fairly aggressive in trimming this, smoke testing showed several
+# be fairly aggressive in trimming this, smoke testing showed
# several apparently random failures here, eg. working in one
# configuration, but not in a very similar configuration.
$max_depth = int(0.6 * $max_depth);
diff --git a/gnu/usr.bin/perl/dist/Storable/t/attach_errors.t b/gnu/usr.bin/perl/dist/Storable/t/attach_errors.t
index 0ed7c8d39f7..e2be39d73eb 100755
--- a/gnu/usr.bin/perl/dist/Storable/t/attach_errors.t
+++ b/gnu/usr.bin/perl/dist/Storable/t/attach_errors.t
@@ -94,7 +94,7 @@ use Storable ();
# Error 2
#
# If, for some reason, a STORABLE_attach object is accidentally stored
-# with references, this should be checked and and error should be throw.
+# with references, this should be checked and an error should be thrown.
diff --git a/gnu/usr.bin/perl/dist/Storable/t/recurse.t b/gnu/usr.bin/perl/dist/Storable/t/recurse.t
index b5967a072cc..6f821691ee5 100755
--- a/gnu/usr.bin/perl/dist/Storable/t/recurse.t
+++ b/gnu/usr.bin/perl/dist/Storable/t/recurse.t
@@ -347,7 +347,7 @@ sub MAX_DEPTH_HASH () { Storable::stack_depth_hash() }
eval {
my $t;
$t = [$t] for 1 .. MAX_DEPTH*2;
- note 'trying catching recursive aref stack overflow';
+ eval { note('trying catching recursive aref stack overflow') };
dclone $t;
};
like $@, qr/Max\. recursion depth with nested structures exceeded/,
@@ -362,7 +362,7 @@ else {
my $t;
# 35.000 will cause appveyor 64bit windows to fail earlier
$t = {1=>$t} for 1 .. MAX_DEPTH * 2;
- note 'trying catching recursive href stack overflow';
+ eval { note('trying catching recursive href stack overflow') };
dclone $t;
};
like $@, qr/Max\. recursion depth with nested structures exceeded/,
diff --git a/gnu/usr.bin/perl/dist/Thread-Queue/lib/Thread/Queue.pm b/gnu/usr.bin/perl/dist/Thread-Queue/lib/Thread/Queue.pm
index bcdf11db33d..731d0b2f457 100644
--- a/gnu/usr.bin/perl/dist/Thread-Queue/lib/Thread/Queue.pm
+++ b/gnu/usr.bin/perl/dist/Thread-Queue/lib/Thread/Queue.pm
@@ -3,7 +3,7 @@ package Thread::Queue;
use strict;
use warnings;
-our $VERSION = '3.13';
+our $VERSION = '3.14'; # remember to update version in POD!
$VERSION = eval $VERSION;
use threads::shared 1.21;
@@ -318,7 +318,7 @@ Thread::Queue - Thread-safe queues
=head1 VERSION
-This document describes Thread::Queue version 3.13
+This document describes Thread::Queue version 3.14
=head1 SYNOPSIS
@@ -547,7 +547,7 @@ VARIABLE"> the queue inside a local block:
=item ->peek(INDEX)
Returns an item from the queue without dequeuing anything. Defaults to the
-the head of queue (at index position 0) if no index is specified. Negative
+head of queue (at index position 0) if no index is specified. Negative
index values are supported as with L<arrays|perldata/"Subscripts"> (i.e., -1
is the end of the queue, -2 is next to last, and so on).
diff --git a/gnu/usr.bin/perl/dist/Tie-File/lib/Tie/File.pm b/gnu/usr.bin/perl/dist/Tie-File/lib/Tie/File.pm
index d546b81f44e..824789337be 100644
--- a/gnu/usr.bin/perl/dist/Tie-File/lib/Tie/File.pm
+++ b/gnu/usr.bin/perl/dist/Tie-File/lib/Tie/File.pm
@@ -1,13 +1,17 @@
-
package Tie::File;
+
require 5.005;
+
+use strict;
+use warnings;
+
use Carp ':DEFAULT', 'confess';
use POSIX 'SEEK_SET';
use Fcntl 'O_CREAT', 'O_RDWR', 'LOCK_EX', 'LOCK_SH', 'O_WRONLY', 'O_RDONLY';
sub O_ACCMODE () { O_RDONLY | O_RDWR | O_WRONLY }
-$VERSION = "1.02";
+our $VERSION = "1.06";
my $DEFAULT_MEMORY_SIZE = 1<<21; # 2 megabytes
my $DEFAULT_AUTODEFER_THRESHHOLD = 3; # 3 records
my $DEFAULT_AUTODEFER_FILELEN_THRESHHOLD = 65536; # 16 disk blocksful
@@ -16,6 +20,10 @@ my %good_opt = map {$_ => 1, "-$_" => 1}
qw(memory dw_size mode recsep discipline
autodefer autochomp autodefer_threshhold concurrent);
+our $DIAGNOSTIC = 0;
+our @OFF; # used as a temporary alias in some subroutines.
+our @H; # used as a temporary alias in _annotate_ad_history
+
sub TIEARRAY {
if (@_ % 2 != 0) {
croak "usage: tie \@array, $_[0], filename, [option => value]...";
@@ -747,7 +755,6 @@ sub _oadjust {
my $delta = 0;
my $delta_recs = 0;
my $prev_end = -1;
- my %newkeys;
for (@_) {
my ($pos, $nrecs, @data) = @$_;
@@ -757,7 +764,6 @@ sub _oadjust {
# to the first new one of this batch
for my $i ($prev_end+2 .. $pos - 1) {
$self->{offsets}[$i] += $delta;
- $newkey{$i} = $i + $delta_recs;
}
$prev_end = $pos + @data - 1; # last record moved on this pass
@@ -777,16 +783,6 @@ sub _oadjust {
$delta -= $oldlen;
}
-# # also this data has changed, so update it in the cache
-# for (0 .. $#data) {
-# $self->{cache}->update($pos + $_, $data[$_]);
-# }
-# if ($delta_recs) {
-# my @oldkeys = grep $_ >= $pos + @data, $self->{cache}->ckeys;
-# my @newkeys = map $_ + $delta_recs, @oldkeys;
-# $self->{cache}->rekey(\@oldkeys, \@newkeys);
-# }
-
# replace old offsets with new
splice @{$self->{offsets}}, $pos, $nrecs+1, @newoff;
# What if we just spliced out the end of the offsets table?
@@ -2003,7 +1999,7 @@ sub _nodes {
($self->[$i], $self->_nodes($i*2), $self->_nodes($i*2+1));
}
-"Cogito, ergo sum."; # don't forget to return a true value from the file
+1;
__END__
@@ -2013,13 +2009,13 @@ Tie::File - Access the lines of a disk file via a Perl array
=head1 SYNOPSIS
- # This file documents Tie::File version 0.98
use Tie::File;
tie @array, 'Tie::File', filename or die ...;
- $array[13] = 'blah'; # line 13 of the file is now 'blah'
- print $array[42]; # display line 42 of the file
+ $array[0] = 'blah'; # first line of the file is now 'blah'
+ # (line numbering starts at 0)
+ print $array[42]; # display line 43 of the file
$n_recs = @array; # how many records are in the file?
$#array -= 2; # chop two records off the end
@@ -2323,6 +2319,11 @@ internally. If you passed it a filehandle as above, you "own" the
filehandle, and are responsible for closing it after you have untied
the @array.
+Tie::File calls C<binmode> on filehandles that it opens internally,
+but not on filehandles passed in by the user. For consistency,
+especially if using the tied files cross-platform, you may wish to
+call C<binmode> on the filehandle prior to tying the file.
+
=head1 Deferred Writing
(This is an advanced feature. Skip this section on first reading.)
@@ -2365,7 +2366,7 @@ will be rewritten in a single pass.
(Actually, the preceding discussion is something of a fib. You don't
need to enable deferred writing to get good performance for this
common case, because C<Tie::File> will do it for you automatically
-unless you specifically tell it not to. See L<"Autodeferring">,
+unless you specifically tell it not to. See L</Autodeferring>,
below.)
Calling C<-E<gt>flush> returns the array to immediate-write mode. If
@@ -2517,7 +2518,7 @@ People sometimes point out that L<DB_File> will do something similar,
and ask why C<Tie::File> module is necessary.
There are a number of reasons that you might prefer C<Tie::File>.
-A list is available at C<http://perl.plover.com/TieFile/why-not-DB_File>.
+A list is available at C<L<http://perl.plover.com/TieFile/why-not-DB_File>>.
=head1 AUTHOR
diff --git a/gnu/usr.bin/perl/dist/Tie-File/t/00_version.t b/gnu/usr.bin/perl/dist/Tie-File/t/00_version.t
deleted file mode 100644
index 3a404ff38c2..00000000000
--- a/gnu/usr.bin/perl/dist/Tie-File/t/00_version.t
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/perl
-
-print "1..1\n";
-
-my $testversion = "1.02";
-use Tie::File;
-
-if ($Tie::File::VERSION != $testversion) {
- print STDERR "
-
-*** WHOA THERE!!! ***
-
-You seem to be running version $Tie::File::VERSION of the module
-against version $testversion of the test suite!
-
-None of the other test results will be reliable.
-";
- exit 1;
-}
-
-print "ok 1\n";
-
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/Changes b/gnu/usr.bin/perl/dist/Time-HiRes/Changes
index 55553585ba6..827baf3fd12 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/Changes
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/Changes
@@ -6,7 +6,7 @@ Revision history for the Perl extension Time::HiRes.
- make utime() available only if we have both fd and name setting
[RT #133030]
- Adjutst Makefile.PL for windows: the DEFINE() in Makefile.PL
- can't be be in sub init() because that sub isn't called on windows
+ can't be in sub init() because that sub isn't called on windows
- t/itimer.t: avoid race condition.
- don't truncate nanosec utime
- fallback/const-c.inc: Avoid compiler warning showing up on darwin.
@@ -985,7 +985,7 @@ Revision history for the Perl extension Time::HiRes.
- backward compatibility (pre-5.6.1) tweaks:
- define NV if no NVTYPE
- define IVdf if needed (note: the Devel::PPPort
- in 5.8.0 does not try hard hard enough since
+ in 5.8.0 does not try hard enough since
the IVSIZE might not be defined)
- define NVgf if needed
- grab the typemap from 5.8.0 for the NV stuff
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/HiRes.pm b/gnu/usr.bin/perl/dist/Time-HiRes/HiRes.pm
index 08eefc851fb..433ca31a057 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/HiRes.pm
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/HiRes.pm
@@ -11,46 +11,46 @@ our @ISA = qw(Exporter);
our @EXPORT = qw( );
# More or less this same list is in Makefile.PL. Should unify.
our @EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval
- getitimer setitimer nanosleep clock_gettime clock_getres
- clock clock_nanosleep
- CLOCKS_PER_SEC
- CLOCK_BOOTTIME
- CLOCK_HIGHRES
- CLOCK_MONOTONIC
- CLOCK_MONOTONIC_COARSE
- CLOCK_MONOTONIC_FAST
- CLOCK_MONOTONIC_PRECISE
- CLOCK_MONOTONIC_RAW
- CLOCK_PROCESS_CPUTIME_ID
- CLOCK_PROF
- CLOCK_REALTIME
- CLOCK_REALTIME_COARSE
- CLOCK_REALTIME_FAST
- CLOCK_REALTIME_PRECISE
- CLOCK_REALTIME_RAW
- CLOCK_SECOND
- CLOCK_SOFTTIME
- CLOCK_THREAD_CPUTIME_ID
- CLOCK_TIMEOFDAY
- CLOCK_UPTIME
- CLOCK_UPTIME_COARSE
- CLOCK_UPTIME_FAST
- CLOCK_UPTIME_PRECISE
- CLOCK_UPTIME_RAW
- CLOCK_VIRTUAL
- ITIMER_PROF
- ITIMER_REAL
- ITIMER_REALPROF
- ITIMER_VIRTUAL
- TIMER_ABSTIME
- d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer
- d_nanosleep d_clock_gettime d_clock_getres
- d_clock d_clock_nanosleep d_hires_stat
- d_futimens d_utimensat d_hires_utime
- stat lstat utime
- );
-
-our $VERSION = '1.9760';
+ getitimer setitimer nanosleep clock_gettime clock_getres
+ clock clock_nanosleep
+ CLOCKS_PER_SEC
+ CLOCK_BOOTTIME
+ CLOCK_HIGHRES
+ CLOCK_MONOTONIC
+ CLOCK_MONOTONIC_COARSE
+ CLOCK_MONOTONIC_FAST
+ CLOCK_MONOTONIC_PRECISE
+ CLOCK_MONOTONIC_RAW
+ CLOCK_PROCESS_CPUTIME_ID
+ CLOCK_PROF
+ CLOCK_REALTIME
+ CLOCK_REALTIME_COARSE
+ CLOCK_REALTIME_FAST
+ CLOCK_REALTIME_PRECISE
+ CLOCK_REALTIME_RAW
+ CLOCK_SECOND
+ CLOCK_SOFTTIME
+ CLOCK_THREAD_CPUTIME_ID
+ CLOCK_TIMEOFDAY
+ CLOCK_UPTIME
+ CLOCK_UPTIME_COARSE
+ CLOCK_UPTIME_FAST
+ CLOCK_UPTIME_PRECISE
+ CLOCK_UPTIME_RAW
+ CLOCK_VIRTUAL
+ ITIMER_PROF
+ ITIMER_REAL
+ ITIMER_REALPROF
+ ITIMER_VIRTUAL
+ TIMER_ABSTIME
+ d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer
+ d_nanosleep d_clock_gettime d_clock_getres
+ d_clock d_clock_nanosleep d_hires_stat
+ d_futimens d_utimensat d_hires_utime
+ stat lstat utime
+ );
+
+our $VERSION = '1.9764';
our $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
@@ -67,8 +67,8 @@ sub AUTOLOAD {
die "$error at $file line $line.\n";
}
{
- no strict 'refs';
- *$AUTOLOAD = sub { $val };
+ no strict 'refs';
+ *$AUTOLOAD = sub { $val };
}
goto &$AUTOLOAD;
}
@@ -76,17 +76,17 @@ sub AUTOLOAD {
sub import {
my $this = shift;
for my $i (@_) {
- if (($i eq 'clock_getres' && !&d_clock_getres) ||
- ($i eq 'clock_gettime' && !&d_clock_gettime) ||
- ($i eq 'clock_nanosleep' && !&d_clock_nanosleep) ||
- ($i eq 'clock' && !&d_clock) ||
- ($i eq 'nanosleep' && !&d_nanosleep) ||
- ($i eq 'usleep' && !&d_usleep) ||
- ($i eq 'utime' && !&d_hires_utime) ||
- ($i eq 'ualarm' && !&d_ualarm)) {
- require Carp;
- Carp::croak("Time::HiRes::$i(): unimplemented in this platform");
- }
+ if (($i eq 'clock_getres' && !&d_clock_getres) ||
+ ($i eq 'clock_gettime' && !&d_clock_gettime) ||
+ ($i eq 'clock_nanosleep' && !&d_clock_nanosleep) ||
+ ($i eq 'clock' && !&d_clock) ||
+ ($i eq 'nanosleep' && !&d_nanosleep) ||
+ ($i eq 'usleep' && !&d_usleep) ||
+ ($i eq 'utime' && !&d_hires_utime) ||
+ ($i eq 'ualarm' && !&d_ualarm)) {
+ require Carp;
+ Carp::croak("Time::HiRes::$i(): unimplemented in this platform");
+ }
}
Time::HiRes->export_to_level(1, $this, @_);
}
@@ -114,7 +114,7 @@ Time::HiRes - High resolution alarm, sleep, gettimeofday, interval timers
=head1 SYNOPSIS
use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep
- clock_gettime clock_getres clock_nanosleep clock
+ clock_gettime clock_getres clock_nanosleep clock
stat lstat utime);
usleep ($microseconds);
@@ -143,7 +143,7 @@ Time::HiRes - High resolution alarm, sleep, gettimeofday, interval timers
getitimer ($which);
use Time::HiRes qw( clock_gettime clock_getres clock_nanosleep
- ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF
+ ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF
ITIMER_REALPROF );
$realtime = clock_gettime(CLOCK_REALTIME);
@@ -221,8 +221,8 @@ Sleeps for the number of microseconds (millionths of a second)
specified. Returns the number of microseconds actually slept.
Can sleep for more than one second, unlike the C<usleep> system call.
Can also sleep for zero seconds, which often works like a I<thread yield>.
-See also C<Time::HiRes::usleep()>, C<Time::HiRes::sleep()>, and
-C<Time::HiRes::clock_nanosleep()>.
+See also L<C<Time::HiRes::sleep()>|/sleep ( $floating_seconds )>, and
+L<C<clock_nanosleep()>|/clock_nanosleep ( $which, $nanoseconds, $flags = 0)>.
Do not expect usleep() to be exact down to one microsecond.
@@ -232,8 +232,10 @@ Sleeps for the number of nanoseconds (1e9ths of a second) specified.
Returns the number of nanoseconds actually slept (accurate only to
microseconds, the nearest thousand of them). Can sleep for more than
one second. Can also sleep for zero seconds, which often works like
-a I<thread yield>. See also C<Time::HiRes::sleep()>,
-C<Time::HiRes::usleep()>, and C<Time::HiRes::clock_nanosleep()>.
+a I<thread yield>. See also
+L<C<Time::HiRes::sleep()>|/sleep ( $floating_seconds )>,
+L<C<Time::HiRes::usleep()>|/usleep ( $useconds )>, and
+L<C<clock_nanosleep()>|/clock_nanosleep ( $which, $nanoseconds, $flags = 0)>.
Do not expect nanosleep() to be exact down to one nanosecond.
Getting even accuracy of one thousand nanoseconds is good.
@@ -250,7 +252,7 @@ ualarm(0) will cancel an outstanding ualarm().
Note that the interaction between alarms and sleeps is unspecified.
-=item tv_interval
+=item tv_interval
tv_interval ( $ref_to_gettimeofday [, $ref_to_later_gettimeofday] )
@@ -356,7 +358,7 @@ delivered when the timer expires. C<SIGPROF> can interrupt system calls.
The semantics of interval timers for multithreaded programs are
system-specific, and some systems may support additional interval
timers. For example, it is unspecified which thread gets the signals.
-See your C<setitimer()> documentation.
+See your L<C<setitimer(2)>> documentation.
=item getitimer ( $which )
@@ -404,8 +406,10 @@ default to zero but C<TIMER_ABSTIME> can specified (must be exported
explicitly) which means that C<$nanoseconds> is not a time interval
(as is the default) but instead an absolute time. Can sleep for more
than one second. Can also sleep for zero seconds, which often works
-like a I<thread yield>. See also C<Time::HiRes::sleep()>,
-C<Time::HiRes::usleep()>, and C<Time::HiRes::nanosleep()>.
+like a I<thread yield>. See also
+L<C<Time::HiRes::sleep()>|/sleep ( $floating_seconds )>,
+L<C<Time::HiRes::usleep()>|/usleep ( $useconds )>, and
+L<C<Time::HiRes::nanosleep()>|/nanosleep ( $nanoseconds )>.
Do not expect clock_nanosleep() to be exact down to one nanosecond.
Getting even accuracy of one thousand nanoseconds is good.
@@ -515,7 +519,7 @@ Returns the number of files successfully changed.
# get seconds and microseconds since the epoch
($s, $usec) = gettimeofday();
- # measure elapsed time
+ # measure elapsed time
# (could also do by subtracting 2 gettimeofday return values)
$t0 = [gettimeofday];
# do bunch of stuff here
@@ -524,7 +528,7 @@ Returns the number of files successfully changed.
$t0_t1 = tv_interval $t0, $t1;
$elapsed = tv_interval ($t0, [gettimeofday]);
- $elapsed = tv_interval ($t0); # equivalent code
+ $elapsed = tv_interval ($t0); # equivalent code
#
# replacements for time, alarm and sleep that know about
@@ -650,9 +654,10 @@ gnukfreebsd seems to have non-functional futimens() and utimensat()
Perl modules L<BSD::Resource>, L<Time::TAI64>.
-Your system documentation for C<clock>, C<clock_gettime>,
-C<clock_getres>, C<clock_nanosleep>, C<clock_settime>, C<getitimer>,
-C<gettimeofday>, C<setitimer>, C<sleep>, C<stat>, C<ualarm>.
+Your system documentation for L<C<clock(3)>>, L<C<clock_gettime(2)>>,
+L<C<clock_getres(3)>>, L<C<clock_nanosleep(3)>>, L<C<clock_settime(2)>>,
+L<C<getitimer(2)>>, L<C<gettimeofday(2)>>, L<C<setitimer(2)>>, L<C<sleep(3)>>,
+L<C<stat(2)>>, L<C<ualarm(3)>>.
=head1 AUTHORS
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/HiRes.xs b/gnu/usr.bin/perl/dist/Time-HiRes/HiRes.xs
index 97e870c788f..80024728666 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/HiRes.xs
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/HiRes.xs
@@ -1,12 +1,12 @@
/*
- *
+ *
* Copyright (c) 1996-2002 Douglas E. Wegscheid. All rights reserved.
- *
+ *
* Copyright (c) 2002-2010 Jarkko Hietaniemi.
* All rights reserved.
*
* Copyright (C) 2011, 2012, 2013 Andrew Main (Zefram) <zefram@fysh.org>
- *
+ *
* This program is free software; you can redistribute it and/or modify
* it under the same terms as Perl itself.
*/
@@ -22,21 +22,21 @@ extern "C" {
# include "ppport.h"
#endif
#if defined(__CYGWIN__) && defined(HAS_W32API_WINDOWS_H)
-# include <w32api/windows.h>
-# define CYGWIN_WITH_W32API
+# include <w32api/windows.h>
+# define CYGWIN_WITH_W32API
#endif
#ifdef WIN32
-# include <time.h>
+# include <time.h>
#else
-# include <sys/time.h>
+# include <sys/time.h>
#endif
#ifdef HAS_SELECT
-# ifdef I_SYS_SELECT
-# include <sys/select.h>
-# endif
+# ifdef I_SYS_SELECT
+# include <sys/select.h>
+# endif
#endif
#if defined(TIME_HIRES_CLOCK_GETTIME_SYSCALL) || defined(TIME_HIRES_CLOCK_GETRES_SYSCALL)
-#include <syscall.h>
+# include <syscall.h>
#endif
#ifdef __cplusplus
}
@@ -44,29 +44,22 @@ extern "C" {
#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)
+ PERL_VERSION_DECIMAL(PERL_REVISION,PERL_VERSION,PERL_SUBVERSION)
#define PERL_VERSION_GE(r,v,s) \
- (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
+ (PERL_DECIMAL_VERSION >= PERL_VERSION_DECIMAL(r,v,s))
#ifndef GCC_DIAG_IGNORE
-# define GCC_DIAG_IGNORE(x)
-# define GCC_DIAG_RESTORE
+# define GCC_DIAG_IGNORE(x)
+# define GCC_DIAG_RESTORE
#endif
#ifndef GCC_DIAG_IGNORE_STMT
-# define GCC_DIAG_IGNORE_STMT(x) GCC_DIAG_IGNORE(x) NOOP
-# define GCC_DIAG_RESTORE_STMT GCC_DIAG_RESTORE NOOP
-#endif
-
-/* At least ppport.h 3.13 gets this wrong: one really cannot
- * have NVgf as anything else than "g" under Perl 5.6.x. */
-#if PERL_REVISION == 5 && PERL_VERSION == 6
-# undef NVgf
-# define NVgf "g"
+# define GCC_DIAG_IGNORE_STMT(x) GCC_DIAG_IGNORE(x) NOOP
+# define GCC_DIAG_RESTORE_STMT GCC_DIAG_RESTORE NOOP
#endif
#if PERL_VERSION_GE(5,7,3) && !PERL_VERSION_GE(5,10,1)
-# undef SAVEOP
-# define SAVEOP() SAVEVPTR(PL_op)
+# undef SAVEOP
+# define SAVEOP() SAVEVPTR(PL_op)
#endif
#define IV_1E6 1000000
@@ -78,14 +71,14 @@ extern "C" {
#define NV_1E9 1000000000.0
#ifndef PerlProc_pause
-# define PerlProc_pause() Pause()
+# define PerlProc_pause() Pause()
#endif
#ifdef HAS_PAUSE
-# define Pause pause
+# define Pause pause
#else
-# undef Pause /* In case perl.h did it already. */
-# define Pause() sleep(~0) /* Zzz for a long time. */
+# undef Pause /* In case perl.h did it already. */
+# define Pause() sleep(~0) /* Zzz for a long time. */
#endif
/* Though the cpp define ITIMER_VIRTUAL is available the functionality
@@ -93,9 +86,9 @@ extern "C" {
* Neither are ITIMER_PROF or ITIMER_REALPROF implemented. --jhi
*/
#if defined(__CYGWIN__) || defined(WIN32)
-# undef ITIMER_VIRTUAL
-# undef ITIMER_PROF
-# undef ITIMER_REALPROF
+# undef ITIMER_VIRTUAL
+# undef ITIMER_PROF
+# undef ITIMER_REALPROF
#endif
#ifndef TIME_HIRES_CLOCKID_T
@@ -106,37 +99,37 @@ typedef int clockid_t;
/* HP-UX has CLOCK_XXX values but as enums, not as defines.
* The only way to detect these would be to test compile for each. */
-# ifdef __hpux
+# ifdef __hpux
/* However, it seems that at least in HP-UX 11.31 ia64 there *are*
* defines for these, so let's try detecting them. */
-# ifndef CLOCK_REALTIME
-# define CLOCK_REALTIME CLOCK_REALTIME
-# define CLOCK_VIRTUAL CLOCK_VIRTUAL
-# define CLOCK_PROFILE CLOCK_PROFILE
-# endif
-# endif /* # ifdef __hpux */
+# ifndef CLOCK_REALTIME
+# define CLOCK_REALTIME CLOCK_REALTIME
+# define CLOCK_VIRTUAL CLOCK_VIRTUAL
+# define CLOCK_PROFILE CLOCK_PROFILE
+# endif
+# endif /* # ifdef __hpux */
#endif /* #if defined(TIME_HIRES_CLOCK_GETTIME) && defined(_STRUCT_ITIMERSPEC) */
#if defined(WIN32) || defined(CYGWIN_WITH_W32API)
-#ifndef HAS_GETTIMEOFDAY
-# define HAS_GETTIMEOFDAY
-#endif
+# ifndef HAS_GETTIMEOFDAY
+# define HAS_GETTIMEOFDAY
+# endif
/* shows up in winsock.h?
struct timeval {
- long tv_sec;
- long tv_usec;
+ long tv_sec;
+ long tv_usec;
}
*/
typedef union {
- unsigned __int64 ft_i64;
- FILETIME ft_val;
+ unsigned __int64 ft_i64;
+ FILETIME ft_val;
} FT_t;
-#define MY_CXT_KEY "Time::HiRes_" XS_VERSION
+# define MY_CXT_KEY "Time::HiRes_" XS_VERSION
typedef struct {
unsigned long run_count;
@@ -146,27 +139,35 @@ typedef struct {
unsigned __int64 reset_time;
} my_cxt_t;
+/* Visual C++ 2013 and older don't have the timespec structure */
+# if defined(_MSC_VER) && _MSC_VER < 1900
+struct timespec {
+ time_t tv_sec;
+ long tv_nsec;
+};
+# endif
+
START_MY_CXT
/* Number of 100 nanosecond units from 1/1/1601 to 1/1/1970 */
-#ifdef __GNUC__
-# define Const64(x) x##LL
-#else
-# define Const64(x) x##i64
-#endif
-#define EPOCH_BIAS Const64(116444736000000000)
-
-#ifdef Const64
-# ifdef __GNUC__
-# define IV_1E6LL 1000000LL /* Needed because of Const64() ##-appends LL (or i64). */
-# define IV_1E7LL 10000000LL
-# define IV_1E9LL 1000000000LL
-# else
-# define IV_1E6i64 1000000i64
-# define IV_1E7i64 10000000i64
-# define IV_1E9i64 1000000000i64
-# endif
-#endif
+# ifdef __GNUC__
+# define Const64(x) x##LL
+# else
+# define Const64(x) x##i64
+# endif
+# define EPOCH_BIAS Const64(116444736000000000)
+
+# ifdef Const64
+# ifdef __GNUC__
+# define IV_1E6LL 1000000LL /* Needed because of Const64() ##-appends LL (or i64). */
+# define IV_1E7LL 10000000LL
+# define IV_1E9LL 1000000000LL
+# else
+# define IV_1E6i64 1000000i64
+# define IV_1E7i64 10000000i64
+# define IV_1E9i64 1000000000i64
+# endif
+# endif
/* NOTE: This does not compute the timezone info (doing so can be expensive,
* and appears to be unsupported even by glibc) */
@@ -174,50 +175,82 @@ START_MY_CXT
/* dMY_CXT needs a Perl context and we don't want to call PERL_GET_CONTEXT
for performance reasons */
-#undef gettimeofday
-#define gettimeofday(tp, not_used) _gettimeofday(aTHX_ tp, not_used)
+# undef gettimeofday
+# define gettimeofday(tp, not_used) _gettimeofday(aTHX_ tp, not_used)
+
+# undef GetSystemTimePreciseAsFileTime
+# define GetSystemTimePreciseAsFileTime(out) _GetSystemTimePreciseAsFileTime(aTHX_ out)
+
+# undef clock_gettime
+# define clock_gettime(clock_id, tp) _clock_gettime(aTHX_ clock_id, tp)
+
+# undef clock_getres
+# define clock_getres(clock_id, tp) _clock_getres(clock_id, tp)
+
+# ifndef CLOCK_REALTIME
+# define CLOCK_REALTIME 1
+# define CLOCK_MONOTONIC 2
+# endif
/* If the performance counter delta drifts more than 0.5 seconds from the
* system time then we recalibrate to the system time. This means we may
* move *backwards* in time! */
-#define MAX_PERF_COUNTER_SKEW Const64(5000000) /* 0.5 seconds */
+# define MAX_PERF_COUNTER_SKEW Const64(5000000) /* 0.5 seconds */
/* Reset reading from the performance counter every five minutes.
* Many PC clocks just seem to be so bad. */
-#define MAX_PERF_COUNTER_TICKS Const64(300000000) /* 300 seconds */
+# define MAX_PERF_COUNTER_TICKS Const64(300000000) /* 300 seconds */
-static int
-_gettimeofday(pTHX_ struct timeval *tp, void *not_used)
+/*
+ * Windows 8 introduced GetSystemTimePreciseAsFileTime(), but currently we have
+ * to support older systems, so for now we provide our own implementation.
+ * In the future we will switch to the real deal.
+ */
+static void
+_GetSystemTimePreciseAsFileTime(pTHX_ FILETIME *out)
{
dMY_CXT;
-
- unsigned __int64 ticks;
FT_t ft;
- PERL_UNUSED_ARG(not_used);
if (MY_CXT.run_count++ == 0 ||
- MY_CXT.base_systime_as_filetime.ft_i64 > MY_CXT.reset_time) {
+ MY_CXT.base_systime_as_filetime.ft_i64 > MY_CXT.reset_time) {
+
QueryPerformanceFrequency((LARGE_INTEGER*)&MY_CXT.tick_frequency);
QueryPerformanceCounter((LARGE_INTEGER*)&MY_CXT.base_ticks);
GetSystemTimeAsFileTime(&MY_CXT.base_systime_as_filetime.ft_val);
ft.ft_i64 = MY_CXT.base_systime_as_filetime.ft_i64;
- MY_CXT.reset_time = ft.ft_i64 + MAX_PERF_COUNTER_TICKS;
+ MY_CXT.reset_time = ft.ft_i64 + MAX_PERF_COUNTER_TICKS;
}
else {
- __int64 diff;
+ __int64 diff;
+ unsigned __int64 ticks;
QueryPerformanceCounter((LARGE_INTEGER*)&ticks);
ticks -= MY_CXT.base_ticks;
ft.ft_i64 = MY_CXT.base_systime_as_filetime.ft_i64
+ Const64(IV_1E7) * (ticks / MY_CXT.tick_frequency)
+(Const64(IV_1E7) * (ticks % MY_CXT.tick_frequency)) / MY_CXT.tick_frequency;
- diff = ft.ft_i64 - MY_CXT.base_systime_as_filetime.ft_i64;
- if (diff < -MAX_PERF_COUNTER_SKEW || diff > MAX_PERF_COUNTER_SKEW) {
- MY_CXT.base_ticks += ticks;
+ diff = ft.ft_i64 - MY_CXT.base_systime_as_filetime.ft_i64;
+ if (diff < -MAX_PERF_COUNTER_SKEW || diff > MAX_PERF_COUNTER_SKEW) {
+ MY_CXT.base_ticks += ticks;
GetSystemTimeAsFileTime(&MY_CXT.base_systime_as_filetime.ft_val);
ft.ft_i64 = MY_CXT.base_systime_as_filetime.ft_i64;
- }
+ }
}
+ *out = ft.ft_val;
+
+ return;
+}
+
+static int
+_gettimeofday(pTHX_ struct timeval *tp, void *not_used)
+{
+ FT_t ft;
+
+ PERL_UNUSED_ARG(not_used);
+
+ GetSystemTimePreciseAsFileTime(&ft.ft_val);
+
/* seconds since epoch */
tp->tv_sec = (long)((ft.ft_i64 - EPOCH_BIAS) / Const64(IV_1E7));
@@ -226,54 +259,107 @@ _gettimeofday(pTHX_ struct timeval *tp, void *not_used)
return 0;
}
-#endif
-#if defined(WIN32) && !defined(ATLEASTFIVEOHOHFIVE)
-static unsigned int
-sleep(unsigned int t)
+static int
+_clock_gettime(pTHX_ clockid_t clock_id, struct timespec *tp)
{
- Sleep(t*1000);
+ FT_t ft;
+
+ switch (clock_id) {
+ case CLOCK_REALTIME: {
+ FT_t ft;
+
+ GetSystemTimePreciseAsFileTime(&ft.ft_val);
+ tp->tv_sec = (time_t)((ft.ft_i64 - EPOCH_BIAS) / IV_1E7);
+ tp->tv_nsec = (long)((ft.ft_i64 % IV_1E7) * 100);
+ break;
+ }
+ case CLOCK_MONOTONIC: {
+ unsigned __int64 freq, ticks;
+
+ QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
+ QueryPerformanceCounter((LARGE_INTEGER*)&ticks);
+
+ tp->tv_sec = (time_t)(ticks / freq);
+ tp->tv_nsec = (long)((IV_1E9 * (ticks % freq)) / freq);
+ break;
+ }
+ default:
+ errno = EINVAL;
+ return 1;
+ }
+
return 0;
}
-#endif
+
+static int
+_clock_getres(clockid_t clock_id, struct timespec *tp)
+{
+ unsigned __int64 freq, qpc_res_ns;
+
+ QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
+ qpc_res_ns = IV_1E9 > freq ? IV_1E9 / freq : 1;
+
+ switch (clock_id) {
+ case CLOCK_REALTIME:
+ tp->tv_sec = 0;
+ /* the resolution can't be smaller than 100ns because our implementation
+ * of CLOCK_REALTIME is using FILETIME internally */
+ tp->tv_nsec = (long)(qpc_res_ns > 100 ? qpc_res_ns : 100);
+ break;
+
+ case CLOCK_MONOTONIC:
+ tp->tv_sec = 0;
+ tp->tv_nsec = (long)qpc_res_ns;
+ break;
+
+ default:
+ errno = EINVAL;
+ return 1;
+ }
+
+ return 0;
+}
+
+#endif /* #if defined(WIN32) || defined(CYGWIN_WITH_W32API) */
#if !defined(HAS_GETTIMEOFDAY) && defined(VMS)
-#define HAS_GETTIMEOFDAY
-
-#include <lnmdef.h>
-#include <time.h> /* gettimeofday */
-#include <stdlib.h> /* qdiv */
-#include <starlet.h> /* sys$gettim */
-#include <descrip.h>
-#ifdef __VAX
-#include <lib$routines.h> /* lib$ediv() */
-#endif
+# define HAS_GETTIMEOFDAY
+
+# include <lnmdef.h>
+# include <time.h> /* gettimeofday */
+# include <stdlib.h> /* qdiv */
+# include <starlet.h> /* sys$gettim */
+# include <descrip.h>
+# ifdef __VAX
+# include <lib$routines.h> /* lib$ediv() */
+# endif
/*
VMS binary time is expressed in 100 nano-seconds since
system base time which is 17-NOV-1858 00:00:00.00
*/
-#define DIV_100NS_TO_SECS 10000000L
-#define DIV_100NS_TO_USECS 10L
+# define DIV_100NS_TO_SECS 10000000L
+# define DIV_100NS_TO_USECS 10L
-/*
+/*
gettimeofday is supposed to return times since the epoch
so need to determine this in terms of VMS base time
*/
static $DESCRIPTOR(dscepoch,"01-JAN-1970 00:00:00.00");
-#ifdef __VAX
+# ifdef __VAX
static long base_adjust[2]={0L,0L};
-#else
+# else
static __int64 base_adjust=0;
-#endif
+# endif
-/*
+/*
If we don't have gettimeofday, then likely we are on a VMS machine that
operates on local time rather than UTC...so we have to zone-adjust.
- This code gleefully swiped from VMS.C
+ This code gleefully swiped from VMS.C
*/
/* method used to handle UTC conversions:
@@ -282,115 +368,115 @@ static __int64 base_adjust=0;
static int gmtime_emulation_type;
/* number of secs to add to UTC POSIX-style time to get local time */
static long int utc_offset_secs;
-static struct dsc$descriptor_s fildevdsc =
- { 12, DSC$K_DTYPE_T, DSC$K_CLASS_S, "LNM$FILE_DEV" };
+static struct dsc$descriptor_s fildevdsc =
+ { 12, DSC$K_DTYPE_T, DSC$K_CLASS_S, "LNM$FILE_DEV" };
static struct dsc$descriptor_s *fildev[] = { &fildevdsc, NULL };
static time_t toutc_dst(time_t loc) {
- struct tm *rsltmp;
+ struct tm *rsltmp;
- if ((rsltmp = localtime(&loc)) == NULL) return -1;
- loc -= utc_offset_secs;
- if (rsltmp->tm_isdst) loc -= 3600;
- return loc;
+ if ((rsltmp = localtime(&loc)) == NULL) return -1;
+ loc -= utc_offset_secs;
+ if (rsltmp->tm_isdst) loc -= 3600;
+ return loc;
}
static time_t toloc_dst(time_t utc) {
- struct tm *rsltmp;
+ struct tm *rsltmp;
- utc += utc_offset_secs;
- if ((rsltmp = localtime(&utc)) == NULL) return -1;
- if (rsltmp->tm_isdst) utc += 3600;
- return utc;
+ utc += utc_offset_secs;
+ if ((rsltmp = localtime(&utc)) == NULL) return -1;
+ if (rsltmp->tm_isdst) utc += 3600;
+ return utc;
}
-#define _toutc(secs) ((secs) == (time_t) -1 ? (time_t) -1 : \
- ((gmtime_emulation_type || timezone_setup()), \
- (gmtime_emulation_type == 1 ? toutc_dst(secs) : \
- ((secs) - utc_offset_secs))))
+# define _toutc(secs) ((secs) == (time_t) -1 ? (time_t) -1 : \
+ ((gmtime_emulation_type || timezone_setup()), \
+ (gmtime_emulation_type == 1 ? toutc_dst(secs) : \
+ ((secs) - utc_offset_secs))))
-#define _toloc(secs) ((secs) == (time_t) -1 ? (time_t) -1 : \
- ((gmtime_emulation_type || timezone_setup()), \
- (gmtime_emulation_type == 1 ? toloc_dst(secs) : \
- ((secs) + utc_offset_secs))))
+# define _toloc(secs) ((secs) == (time_t) -1 ? (time_t) -1 : \
+ ((gmtime_emulation_type || timezone_setup()), \
+ (gmtime_emulation_type == 1 ? toloc_dst(secs) : \
+ ((secs) + utc_offset_secs))))
static int
-timezone_setup(void)
+timezone_setup(void)
{
- struct tm *tm_p;
-
- if (gmtime_emulation_type == 0) {
- int dstnow;
- time_t base = 15 * 86400; /* 15jan71; to avoid month/year ends between */
- /* results of calls to gmtime() and localtime() */
- /* for same &base */
+ struct tm *tm_p;
- gmtime_emulation_type++;
- if ((tm_p = gmtime(&base)) == NULL) { /* CRTL gmtime() is a fake */
- char off[LNM$C_NAMLENGTH+1];;
+ if (gmtime_emulation_type == 0) {
+ int dstnow;
+ time_t base = 15 * 86400; /* 15jan71; to avoid month/year ends between */
+ /* results of calls to gmtime() and localtime() */
+ /* for same &base */
- gmtime_emulation_type++;
- if (!Perl_vmstrnenv("SYS$TIMEZONE_DIFFERENTIAL",off,0,fildev,0)) {
gmtime_emulation_type++;
- utc_offset_secs = 0;
- Perl_warn(aTHX_ "no UTC offset information; assuming local time is UTC");
- }
- else { utc_offset_secs = atol(off); }
- }
- else { /* We've got a working gmtime() */
- struct tm gmt, local;
-
- gmt = *tm_p;
- tm_p = localtime(&base);
- local = *tm_p;
- utc_offset_secs = (local.tm_mday - gmt.tm_mday) * 86400;
- utc_offset_secs += (local.tm_hour - gmt.tm_hour) * 3600;
- utc_offset_secs += (local.tm_min - gmt.tm_min) * 60;
- utc_offset_secs += (local.tm_sec - gmt.tm_sec);
+ if ((tm_p = gmtime(&base)) == NULL) { /* CRTL gmtime() is a fake */
+ char off[LNM$C_NAMLENGTH+1];;
+
+ gmtime_emulation_type++;
+ if (!Perl_vmstrnenv("SYS$TIMEZONE_DIFFERENTIAL",off,0,fildev,0)) {
+ gmtime_emulation_type++;
+ utc_offset_secs = 0;
+ Perl_warn(aTHX_ "no UTC offset information; assuming local time is UTC");
+ }
+ else { utc_offset_secs = atol(off); }
+ }
+ else { /* We've got a working gmtime() */
+ struct tm gmt, local;
+
+ gmt = *tm_p;
+ tm_p = localtime(&base);
+ local = *tm_p;
+ utc_offset_secs = (local.tm_mday - gmt.tm_mday) * 86400;
+ utc_offset_secs += (local.tm_hour - gmt.tm_hour) * 3600;
+ utc_offset_secs += (local.tm_min - gmt.tm_min) * 60;
+ utc_offset_secs += (local.tm_sec - gmt.tm_sec);
+ }
}
- }
- return 1;
+ return 1;
}
int
gettimeofday (struct timeval *tp, void *tpz)
{
- long ret;
-#ifdef __VAX
- long quad[2];
- long quad1[2];
- long div_100ns_to_secs;
- long div_100ns_to_usecs;
- long quo,rem;
- long quo1,rem1;
-#else
- __int64 quad;
- __qdiv_t ans1,ans2;
-#endif
-/*
+ long ret;
+# ifdef __VAX
+ long quad[2];
+ long quad1[2];
+ long div_100ns_to_secs;
+ long div_100ns_to_usecs;
+ long quo,rem;
+ long quo1,rem1;
+# else
+ __int64 quad;
+ __qdiv_t ans1,ans2;
+# endif
+ /*
In case of error, tv_usec = 0 and tv_sec = VMS condition code.
The return from function is also set to -1.
This is not exactly as per the manual page.
-*/
+ */
- tp->tv_usec = 0;
+ tp->tv_usec = 0;
-#ifdef __VAX
- if (base_adjust[0]==0 && base_adjust[1]==0) {
-#else
- if (base_adjust==0) { /* Need to determine epoch adjustment */
-#endif
+# ifdef __VAX
+ if (base_adjust[0]==0 && base_adjust[1]==0) {
+# else
+ if (base_adjust==0) { /* Need to determine epoch adjustment */
+# endif
ret=sys$bintim(&dscepoch,&base_adjust);
if (1 != (ret &&1)) {
- tp->tv_sec = ret;
- return -1;
+ tp->tv_sec = ret;
+ return -1;
}
- }
+ }
- ret=sys$gettim(&quad); /* Get VMS system time */
- if ((1 && ret) == 1) {
-#ifdef __VAX
+ ret=sys$gettim(&quad); /* Get VMS system time */
+ if ((1 && ret) == 1) {
+# ifdef __VAX
quad[0] -= base_adjust[0]; /* convert to epoch offset */
quad[1] -= base_adjust[1]; /* convert 2nd half of quadword */
div_100ns_to_secs = DIV_100NS_TO_SECS;
@@ -401,27 +487,27 @@ gettimeofday (struct timeval *tp, void *tpz)
lib$ediv(&div_100ns_to_usecs,&quad1,&quo1,&rem1);
tp->tv_sec = quo; /* Whole seconds */
tp->tv_usec = quo1; /* Micro-seconds */
-#else
+# else
quad -= base_adjust; /* convert to epoch offset */
ans1=qdiv(quad,DIV_100NS_TO_SECS);
ans2=qdiv(ans1.rem,DIV_100NS_TO_USECS);
tp->tv_sec = ans1.quot; /* Whole seconds */
tp->tv_usec = ans2.quot; /* Micro-seconds */
-#endif
- } else {
+# endif
+ } else {
tp->tv_sec = ret;
return -1;
- }
-# ifdef VMSISH_TIME
-# ifdef RTL_USES_UTC
- if (VMSISH_TIME) tp->tv_sec = _toloc(tp->tv_sec);
-# else
- if (!VMSISH_TIME) tp->tv_sec = _toutc(tp->tv_sec);
-# endif
-# endif
- return 0;
+ }
+# ifdef VMSISH_TIME
+# ifdef RTL_USES_UTC
+ if (VMSISH_TIME) tp->tv_sec = _toloc(tp->tv_sec);
+# else
+ if (!VMSISH_TIME) tp->tv_sec = _toutc(tp->tv_sec);
+# endif
+# endif
+ return 0;
}
-#endif
+#endif /* #if !defined(HAS_GETTIMEOFDAY) && defined(VMS) */
/* Do not use H A S _ N A N O S L E E P
@@ -430,8 +516,8 @@ gettimeofday (struct timeval *tp, void *tpz)
* (We are part of the core perl now.)
* The TIME_HIRES_NANOSLEEP is set by Makefile.PL. */
#if !defined(HAS_USLEEP) && defined(TIME_HIRES_NANOSLEEP)
-#define HAS_USLEEP
-#define usleep hrt_usleep /* could conflict with ncurses for static build */
+# define HAS_USLEEP
+# define usleep hrt_usleep /* could conflict with ncurses for static build */
static void
hrt_usleep(unsigned long usec) /* This is used to emulate usleep. */
@@ -445,9 +531,9 @@ hrt_usleep(unsigned long usec) /* This is used to emulate usleep. */
#endif /* #if !defined(HAS_USLEEP) && defined(TIME_HIRES_NANOSLEEP) */
#if !defined(HAS_USLEEP) && defined(HAS_SELECT)
-#ifndef SELECT_IS_BROKEN
-#define HAS_USLEEP
-#define usleep hrt_usleep /* could conflict with ncurses for static build */
+# ifndef SELECT_IS_BROKEN
+# define HAS_USLEEP
+# define usleep hrt_usleep /* could conflict with ncurses for static build */
static void
hrt_usleep(unsigned long usec)
@@ -456,14 +542,14 @@ hrt_usleep(unsigned long usec)
tv.tv_sec = 0;
tv.tv_usec = usec;
select(0, (Select_fd_set_t)NULL, (Select_fd_set_t)NULL,
- (Select_fd_set_t)NULL, &tv);
+ (Select_fd_set_t)NULL, &tv);
}
-#endif
+# endif
#endif /* #if !defined(HAS_USLEEP) && defined(HAS_SELECT) */
#if !defined(HAS_USLEEP) && defined(WIN32)
-#define HAS_USLEEP
-#define usleep hrt_usleep /* could conflict with ncurses for static build */
+# define HAS_USLEEP
+# define usleep hrt_usleep /* could conflict with ncurses for static build */
static void
hrt_usleep(unsigned long usec)
@@ -475,8 +561,8 @@ hrt_usleep(unsigned long usec)
#endif /* #if !defined(HAS_USLEEP) && defined(WIN32) */
#if !defined(HAS_USLEEP) && defined(HAS_POLL)
-#define HAS_USLEEP
-#define usleep hrt_usleep /* could conflict with ncurses for static build */
+# define HAS_USLEEP
+# define usleep hrt_usleep /* could conflict with ncurses for static build */
static void
hrt_usleep(unsigned long usec)
@@ -492,34 +578,34 @@ hrt_usleep(unsigned long usec)
static int
hrt_ualarm_itimero(struct itimerval *oitv, int usec, int uinterval)
{
- struct itimerval itv;
- itv.it_value.tv_sec = usec / IV_1E6;
- itv.it_value.tv_usec = usec % IV_1E6;
- itv.it_interval.tv_sec = uinterval / IV_1E6;
- itv.it_interval.tv_usec = uinterval % IV_1E6;
- return setitimer(ITIMER_REAL, &itv, oitv);
+ struct itimerval itv;
+ itv.it_value.tv_sec = usec / IV_1E6;
+ itv.it_value.tv_usec = usec % IV_1E6;
+ itv.it_interval.tv_sec = uinterval / IV_1E6;
+ itv.it_interval.tv_usec = uinterval % IV_1E6;
+ return setitimer(ITIMER_REAL, &itv, oitv);
}
#endif /* #if !defined(HAS_UALARM) && defined(HAS_SETITIMER) */
#if !defined(HAS_UALARM) && defined(HAS_SETITIMER)
-#define HAS_UALARM
-#define ualarm hrt_ualarm_itimer /* could conflict with ncurses for static build */
+# define HAS_UALARM
+# define ualarm hrt_ualarm_itimer /* could conflict with ncurses for static build */
#endif
#if !defined(HAS_UALARM) && defined(VMS)
-#define HAS_UALARM
-#define ualarm vms_ualarm
+# define HAS_UALARM
+# define ualarm vms_ualarm
-#include <lib$routines.h>
-#include <ssdef.h>
-#include <starlet.h>
-#include <descrip.h>
-#include <signal.h>
-#include <jpidef.h>
-#include <psldef.h>
+# include <lib$routines.h>
+# include <ssdef.h>
+# include <starlet.h>
+# include <descrip.h>
+# include <signal.h>
+# include <jpidef.h>
+# include <psldef.h>
-#define VMSERR(s) (!((s)&1))
+# define VMSERR(s) (!((s)&1))
static void
us_to_VMS(useconds_t mseconds, unsigned long v[])
@@ -567,13 +653,13 @@ typedef struct _ualarm {
static int alarm_ef;
static Alarm *a0, alarm_base;
-#define UAL_NULL 0
-#define UAL_SET 1
-#define UAL_CLEAR 2
-#define UAL_ACTIVE 4
+# define UAL_NULL 0
+# define UAL_SET 1
+# define UAL_CLEAR 2
+# define UAL_ACTIVE 4
static void ualarm_AST(Alarm *a);
-static int
+static int
vms_ualarm(int mseconds, int interval)
{
Alarm *a, abase;
@@ -605,7 +691,7 @@ vms_ualarm(int mseconds, int interval)
a0->function = UAL_NULL;
}
itmlst[0].bufaddr = &asten;
-
+
iss = sys$getjpiw(0,0,0,itmlst,0,0,0);
if (VMSERR(iss)) lib$signal(iss);
if (!(asten&0x08)) return -1;
@@ -621,7 +707,7 @@ vms_ualarm(int mseconds, int interval)
if (interval) {
us_to_VMS(interval, a->interval);
a->repeat = 1;
- } else
+ } else
a->repeat = 0;
iss = sys$clref(alarm_ef);
@@ -633,7 +719,7 @@ vms_ualarm(int mseconds, int interval)
iss = sys$waitfr(alarm_ef);
if (VMSERR(iss)) lib$signal(iss);
- if (a->function == UAL_ACTIVE)
+ if (a->function == UAL_ACTIVE)
return VMS_to_us(a->remain);
else
return 0;
@@ -658,7 +744,7 @@ ualarm_AST(Alarm *a)
iss = lib$subx(a0->remain, now, a->remain);
if (VMSERR(iss)) lib$signal(iss);
- if (a->remain[1] & 0x80000000)
+ if (a->remain[1] & 0x80000000)
a->remain[0] = a->remain[1] = 0;
}
@@ -709,24 +795,24 @@ ualarm_AST(Alarm *a)
static int
myU2time(pTHX_ UV *ret)
{
- struct timeval Tp;
- int status;
- status = gettimeofday (&Tp, NULL);
- ret[0] = Tp.tv_sec;
- ret[1] = Tp.tv_usec;
- return status;
+ struct timeval Tp;
+ int status;
+ status = gettimeofday (&Tp, NULL);
+ ret[0] = Tp.tv_sec;
+ ret[1] = Tp.tv_usec;
+ return status;
}
static NV
myNVtime()
{
-#ifdef WIN32
- dTHX;
-#endif
- struct timeval Tp;
- int status;
- status = gettimeofday (&Tp, NULL);
- return status == 0 ? Tp.tv_sec + (Tp.tv_usec / NV_1E6) : -1.0;
+# ifdef WIN32
+ dTHX;
+# endif
+ struct timeval Tp;
+ int status;
+ status = gettimeofday (&Tp, NULL);
+ return status == 0 ? Tp.tv_sec + (Tp.tv_usec / NV_1E6) : -1.0;
}
#endif /* #ifdef HAS_GETTIMEOFDAY */
@@ -734,31 +820,31 @@ myNVtime()
static void
hrstatns(UV *atime_nsec, UV *mtime_nsec, UV *ctime_nsec)
{
- dTHX;
+ dTHX;
#if TIME_HIRES_STAT == 1
- *atime_nsec = PL_statcache.st_atimespec.tv_nsec;
- *mtime_nsec = PL_statcache.st_mtimespec.tv_nsec;
- *ctime_nsec = PL_statcache.st_ctimespec.tv_nsec;
+ *atime_nsec = PL_statcache.st_atimespec.tv_nsec;
+ *mtime_nsec = PL_statcache.st_mtimespec.tv_nsec;
+ *ctime_nsec = PL_statcache.st_ctimespec.tv_nsec;
#elif TIME_HIRES_STAT == 2
- *atime_nsec = PL_statcache.st_atimensec;
- *mtime_nsec = PL_statcache.st_mtimensec;
- *ctime_nsec = PL_statcache.st_ctimensec;
+ *atime_nsec = PL_statcache.st_atimensec;
+ *mtime_nsec = PL_statcache.st_mtimensec;
+ *ctime_nsec = PL_statcache.st_ctimensec;
#elif TIME_HIRES_STAT == 3
- *atime_nsec = PL_statcache.st_atime_n;
- *mtime_nsec = PL_statcache.st_mtime_n;
- *ctime_nsec = PL_statcache.st_ctime_n;
+ *atime_nsec = PL_statcache.st_atime_n;
+ *mtime_nsec = PL_statcache.st_mtime_n;
+ *ctime_nsec = PL_statcache.st_ctime_n;
#elif TIME_HIRES_STAT == 4
- *atime_nsec = PL_statcache.st_atim.tv_nsec;
- *mtime_nsec = PL_statcache.st_mtim.tv_nsec;
- *ctime_nsec = PL_statcache.st_ctim.tv_nsec;
+ *atime_nsec = PL_statcache.st_atim.tv_nsec;
+ *mtime_nsec = PL_statcache.st_mtim.tv_nsec;
+ *ctime_nsec = PL_statcache.st_ctim.tv_nsec;
#elif TIME_HIRES_STAT == 5
- *atime_nsec = PL_statcache.st_uatime * 1000;
- *mtime_nsec = PL_statcache.st_umtime * 1000;
- *ctime_nsec = PL_statcache.st_uctime * 1000;
+ *atime_nsec = PL_statcache.st_uatime * 1000;
+ *mtime_nsec = PL_statcache.st_umtime * 1000;
+ *ctime_nsec = PL_statcache.st_uctime * 1000;
#else /* !TIME_HIRES_STAT */
- *atime_nsec = 0;
- *mtime_nsec = 0;
- *ctime_nsec = 0;
+ *atime_nsec = 0;
+ *mtime_nsec = 0;
+ *ctime_nsec = 0;
#endif /* !TIME_HIRES_STAT */
}
@@ -770,157 +856,157 @@ hrstatns(UV *atime_nsec, UV *mtime_nsec, UV *ctime_nsec)
defined(TIME_HIRES_CLOCK_GETRES_EMULATION) || \
defined(TIME_HIRES_CLOCK_NANOSLEEP_EMULATION))
-#ifndef CLOCK_REALTIME
-# define CLOCK_REALTIME 0x01
-# define CLOCK_MONOTONIC 0x02
-#endif
+# ifndef CLOCK_REALTIME
+# define CLOCK_REALTIME 0x01
+# define CLOCK_MONOTONIC 0x02
+# endif
-#ifndef TIMER_ABSTIME
-# define TIMER_ABSTIME 0x01
-#endif
+# ifndef TIMER_ABSTIME
+# define TIMER_ABSTIME 0x01
+# endif
-#ifdef USE_ITHREADS
-# define PERL_DARWIN_MUTEX
-#endif
+# ifdef USE_ITHREADS
+# define PERL_DARWIN_MUTEX
+# endif
-#ifdef PERL_DARWIN_MUTEX
+# ifdef PERL_DARWIN_MUTEX
STATIC perl_mutex darwin_time_mutex;
-#endif
+# endif
-#include <mach/mach_time.h>
+# include <mach/mach_time.h>
static uint64_t absolute_time_init;
static mach_timebase_info_data_t timebase_info;
static struct timespec timespec_init;
static int darwin_time_init() {
- struct timeval tv;
- int success = 1;
-#ifdef PERL_DARWIN_MUTEX
- MUTEX_LOCK(&darwin_time_mutex);
-#endif
- if (absolute_time_init == 0) {
- /* mach_absolute_time() cannot fail */
- absolute_time_init = mach_absolute_time();
- success = mach_timebase_info(&timebase_info) == KERN_SUCCESS;
- if (success) {
- success = gettimeofday(&tv, NULL) == 0;
- if (success) {
- timespec_init.tv_sec = tv.tv_sec;
- timespec_init.tv_nsec = tv.tv_usec * 1000;
- }
+ struct timeval tv;
+ int success = 1;
+# ifdef PERL_DARWIN_MUTEX
+ MUTEX_LOCK(&darwin_time_mutex);
+# endif
+ if (absolute_time_init == 0) {
+ /* mach_absolute_time() cannot fail */
+ absolute_time_init = mach_absolute_time();
+ success = mach_timebase_info(&timebase_info) == KERN_SUCCESS;
+ if (success) {
+ success = gettimeofday(&tv, NULL) == 0;
+ if (success) {
+ timespec_init.tv_sec = tv.tv_sec;
+ timespec_init.tv_nsec = tv.tv_usec * 1000;
+ }
+ }
}
- }
-#ifdef PERL_DARWIN_MUTEX
- MUTEX_UNLOCK(&darwin_time_mutex);
-#endif
- return success;
+# ifdef PERL_DARWIN_MUTEX
+ MUTEX_UNLOCK(&darwin_time_mutex);
+# endif
+ return success;
}
-#ifdef TIME_HIRES_CLOCK_GETTIME_EMULATION
+# ifdef TIME_HIRES_CLOCK_GETTIME_EMULATION
static int th_clock_gettime(clockid_t clock_id, struct timespec *ts) {
- if (darwin_time_init() && timebase_info.denom) {
- switch (clock_id) {
- case CLOCK_REALTIME:
- {
- uint64_t nanos =
- ((mach_absolute_time() - absolute_time_init) *
- (uint64_t)timebase_info.numer) / (uint64_t)timebase_info.denom;
- ts->tv_sec = timespec_init.tv_sec + nanos / IV_1E9;
- ts->tv_nsec = timespec_init.tv_nsec + nanos % IV_1E9;
- return 0;
- }
-
- case CLOCK_MONOTONIC:
- {
- uint64_t nanos =
- (mach_absolute_time() *
- (uint64_t)timebase_info.numer) / (uint64_t)timebase_info.denom;
- ts->tv_sec = nanos / IV_1E9;
- ts->tv_nsec = nanos - ts->tv_sec * IV_1E9;
- return 0;
- }
-
- default:
- break;
+ if (darwin_time_init() && timebase_info.denom) {
+ switch (clock_id) {
+ case CLOCK_REALTIME:
+ {
+ uint64_t nanos =
+ ((mach_absolute_time() - absolute_time_init) *
+ (uint64_t)timebase_info.numer) / (uint64_t)timebase_info.denom;
+ ts->tv_sec = timespec_init.tv_sec + nanos / IV_1E9;
+ ts->tv_nsec = timespec_init.tv_nsec + nanos % IV_1E9;
+ return 0;
+ }
+
+ case CLOCK_MONOTONIC:
+ {
+ uint64_t nanos =
+ (mach_absolute_time() *
+ (uint64_t)timebase_info.numer) / (uint64_t)timebase_info.denom;
+ ts->tv_sec = nanos / IV_1E9;
+ ts->tv_nsec = nanos - ts->tv_sec * IV_1E9;
+ return 0;
+ }
+
+ default:
+ break;
+ }
}
- }
- SETERRNO(EINVAL, LIB_INVARG);
- return -1;
+ SETERRNO(EINVAL, LIB_INVARG);
+ return -1;
}
-#define clock_gettime(clock_id, ts) th_clock_gettime((clock_id), (ts))
+# define clock_gettime(clock_id, ts) th_clock_gettime((clock_id), (ts))
-#endif /* TIME_HIRES_CLOCK_GETTIME_EMULATION */
+# endif /* TIME_HIRES_CLOCK_GETTIME_EMULATION */
-#ifdef TIME_HIRES_CLOCK_GETRES_EMULATION
+# ifdef TIME_HIRES_CLOCK_GETRES_EMULATION
static int th_clock_getres(clockid_t clock_id, struct timespec *ts) {
- if (darwin_time_init() && timebase_info.denom) {
- switch (clock_id) {
- case CLOCK_REALTIME:
- case CLOCK_MONOTONIC:
- ts->tv_sec = 0;
- /* In newer kernels both the numer and denom are one,
- * resulting in conversion factor of one, which is of
- * course unrealistic. */
- ts->tv_nsec = timebase_info.numer / timebase_info.denom;
- return 0;
- default:
- break;
+ if (darwin_time_init() && timebase_info.denom) {
+ switch (clock_id) {
+ case CLOCK_REALTIME:
+ case CLOCK_MONOTONIC:
+ ts->tv_sec = 0;
+ /* In newer kernels both the numer and denom are one,
+ * resulting in conversion factor of one, which is of
+ * course unrealistic. */
+ ts->tv_nsec = timebase_info.numer / timebase_info.denom;
+ return 0;
+ default:
+ break;
+ }
}
- }
- SETERRNO(EINVAL, LIB_INVARG);
- return -1;
+ SETERRNO(EINVAL, LIB_INVARG);
+ return -1;
}
-#define clock_getres(clock_id, ts) th_clock_getres((clock_id), (ts))
-#endif /* TIME_HIRES_CLOCK_GETRES_EMULATION */
+# define clock_getres(clock_id, ts) th_clock_getres((clock_id), (ts))
+# endif /* TIME_HIRES_CLOCK_GETRES_EMULATION */
-#ifdef TIME_HIRES_CLOCK_NANOSLEEP_EMULATION
+# ifdef TIME_HIRES_CLOCK_NANOSLEEP_EMULATION
static int th_clock_nanosleep(clockid_t clock_id, int flags,
- const struct timespec *rqtp,
- struct timespec *rmtp) {
- if (darwin_time_init()) {
- switch (clock_id) {
- case CLOCK_REALTIME:
- case CLOCK_MONOTONIC:
- {
- uint64_t nanos = rqtp->tv_sec * IV_1E9 + rqtp->tv_nsec;
- int success;
- if ((flags & TIMER_ABSTIME)) {
- uint64_t back =
- timespec_init.tv_sec * IV_1E9 + timespec_init.tv_nsec;
- nanos = nanos > back ? nanos - back : 0;
- }
- success =
- mach_wait_until(mach_absolute_time() + nanos) == KERN_SUCCESS;
-
- /* In the relative sleep, the rmtp should be filled in with
- * the 'unused' part of the rqtp in case the sleep gets
- * interrupted by a signal. But it is unknown how signals
- * interact with mach_wait_until(). In the absolute sleep,
- * the rmtp should stay untouched. */
- rmtp->tv_sec = 0;
- rmtp->tv_nsec = 0;
-
- return success;
- }
+ const struct timespec *rqtp,
+ struct timespec *rmtp) {
+ if (darwin_time_init()) {
+ switch (clock_id) {
+ case CLOCK_REALTIME:
+ case CLOCK_MONOTONIC:
+ {
+ uint64_t nanos = rqtp->tv_sec * IV_1E9 + rqtp->tv_nsec;
+ int success;
+ if ((flags & TIMER_ABSTIME)) {
+ uint64_t back =
+ timespec_init.tv_sec * IV_1E9 + timespec_init.tv_nsec;
+ nanos = nanos > back ? nanos - back : 0;
+ }
+ success =
+ mach_wait_until(mach_absolute_time() + nanos) == KERN_SUCCESS;
+
+ /* In the relative sleep, the rmtp should be filled in with
+ * the 'unused' part of the rqtp in case the sleep gets
+ * interrupted by a signal. But it is unknown how signals
+ * interact with mach_wait_until(). In the absolute sleep,
+ * the rmtp should stay untouched. */
+ rmtp->tv_sec = 0;
+ rmtp->tv_nsec = 0;
+
+ return success;
+ }
- default:
- break;
+ default:
+ break;
+ }
}
- }
- SETERRNO(EINVAL, LIB_INVARG);
- return -1;
+ SETERRNO(EINVAL, LIB_INVARG);
+ return -1;
}
-#define clock_nanosleep(clock_id, flags, rqtp, rmtp) \
+# define clock_nanosleep(clock_id, flags, rqtp, rmtp) \
th_clock_nanosleep((clock_id), (flags), (rqtp), (rmtp))
-#endif /* TIME_HIRES_CLOCK_NANOSLEEP_EMULATION */
+# endif /* TIME_HIRES_CLOCK_NANOSLEEP_EMULATION */
#endif /* PERL_DARWIN */
@@ -937,25 +1023,25 @@ static int th_clock_nanosleep(clockid_t clock_id, int flags,
* are always available.
*/
#ifndef __has_builtin
-# define __has_builtin(x) 0 /* non-clang */
+# define __has_builtin(x) 0 /* non-clang */
#endif
#ifdef HAS_FUTIMENS
-# if defined(PERL_DARWIN) && __has_builtin(__builtin_available)
-# define FUTIMENS_AVAILABLE __builtin_available(macOS 10.13, *)
-# else
-# define FUTIMENS_AVAILABLE 1
-# endif
+# if defined(PERL_DARWIN) && __has_builtin(__builtin_available)
+# define FUTIMENS_AVAILABLE __builtin_available(macOS 10.13, *)
+# else
+# define FUTIMENS_AVAILABLE 1
+# endif
#else
-# define FUTIMENS_AVAILABLE 0
+# define FUTIMENS_AVAILABLE 0
#endif
#ifdef HAS_UTIMENSAT
-# if defined(PERL_DARWIN) && __has_builtin(__builtin_available)
-# define UTIMENSAT_AVAILABLE __builtin_available(macOS 10.13, *)
-# else
-# define UTIMENSAT_AVAILABLE 1
-# endif
+# if defined(PERL_DARWIN) && __has_builtin(__builtin_available)
+# define UTIMENSAT_AVAILABLE __builtin_available(macOS 10.13, *)
+# else
+# define UTIMENSAT_AVAILABLE 1
+# endif
#else
-# define UTIMENSAT_AVAILABLE 0
+# define UTIMENSAT_AVAILABLE 0
#endif
#include "const-c.inc"
@@ -976,23 +1062,23 @@ nanosleep_init(NV nsec,
static NV
nsec_without_unslept(struct timespec *sleepfor,
const struct timespec *unslept) {
- if (sleepfor->tv_sec >= unslept->tv_sec) {
- sleepfor->tv_sec -= unslept->tv_sec;
- if (sleepfor->tv_nsec >= unslept->tv_nsec) {
- sleepfor->tv_nsec -= unslept->tv_nsec;
- } else if (sleepfor->tv_sec > 0) {
- sleepfor->tv_sec--;
- sleepfor->tv_nsec += IV_1E9;
- sleepfor->tv_nsec -= unslept->tv_nsec;
+ if (sleepfor->tv_sec >= unslept->tv_sec) {
+ sleepfor->tv_sec -= unslept->tv_sec;
+ if (sleepfor->tv_nsec >= unslept->tv_nsec) {
+ sleepfor->tv_nsec -= unslept->tv_nsec;
+ } else if (sleepfor->tv_sec > 0) {
+ sleepfor->tv_sec--;
+ sleepfor->tv_nsec += IV_1E9;
+ sleepfor->tv_nsec -= unslept->tv_nsec;
+ } else {
+ sleepfor->tv_sec = 0;
+ sleepfor->tv_nsec = 0;
+ }
} else {
- sleepfor->tv_sec = 0;
- sleepfor->tv_nsec = 0;
+ sleepfor->tv_sec = 0;
+ sleepfor->tv_nsec = 0;
}
- } else {
- sleepfor->tv_sec = 0;
- sleepfor->tv_nsec = 0;
- }
- return ((NV)sleepfor->tv_sec) * NV_1E9 + ((NV)sleepfor->tv_nsec);
+ return ((NV)sleepfor->tv_sec) * NV_1E9 + ((NV)sleepfor->tv_nsec);
}
#endif
@@ -1000,17 +1086,17 @@ nsec_without_unslept(struct timespec *sleepfor,
/* In case Perl and/or Devel::PPPort are too old, minimally emulate
* IS_SAFE_PATHNAME() (which looks for zero bytes in the pathname). */
#ifndef IS_SAFE_PATHNAME
-#if PERL_VERSION >= 12 /* Perl_ck_warner is 5.10.0 -> */
-#ifdef WARN_SYSCALLS
-#define WARNEMUCAT WARN_SYSCALLS /* 5.22.0 -> */
-#else
-#define WARNEMUCAT WARN_MISC
-#endif
-#define WARNEMU(opname) Perl_ck_warner(aTHX_ packWARN(WARNEMUCAT), "Invalid \\0 character in pathname for %s",opname)
-#else
-#define WARNEMU(opname) Perl_warn(aTHX_ "Invalid \\0 character in pathname for %s",opname)
-#endif
-#define IS_SAFE_PATHNAME(pv, len, opname) (((len)>1)&&memchr((pv), 0, (len)-1)?(SETERRNO(ENOENT, LIB_INVARG),WARNEMU(opname),FALSE):(TRUE))
+# if PERL_VERSION >= 12 /* Perl_ck_warner is 5.10.0 -> */
+# ifdef WARN_SYSCALLS
+# define WARNEMUCAT WARN_SYSCALLS /* 5.22.0 -> */
+# else
+# define WARNEMUCAT WARN_MISC
+# endif
+# define WARNEMU(opname) Perl_ck_warner(aTHX_ packWARN(WARNEMUCAT), "Invalid \\0 character in pathname for %s",opname)
+# else
+# define WARNEMU(opname) Perl_warn(aTHX_ "Invalid \\0 character in pathname for %s",opname)
+# endif
+# define IS_SAFE_PATHNAME(pv, len, opname) (((len)>1)&&memchr((pv), 0, (len)-1)?(SETERRNO(ENOENT, LIB_INVARG),WARNEMU(opname),FALSE):(TRUE))
#endif
MODULE = Time::HiRes PACKAGE = Time::HiRes
@@ -1018,33 +1104,31 @@ MODULE = Time::HiRes PACKAGE = Time::HiRes
PROTOTYPES: ENABLE
BOOT:
-{
+ {
#ifdef MY_CXT_KEY
- MY_CXT_INIT;
+ MY_CXT_INIT;
#endif
-#ifdef ATLEASTFIVEOHOHFIVE
-# ifdef HAS_GETTIMEOFDAY
- {
- (void) hv_store(PL_modglobal, "Time::NVtime", 12,
- newSViv(PTR2IV(myNVtime)), 0);
- (void) hv_store(PL_modglobal, "Time::U2time", 12,
- newSViv(PTR2IV(myU2time)), 0);
- }
-# endif
+#ifdef HAS_GETTIMEOFDAY
+ {
+ (void) hv_store(PL_modglobal, "Time::NVtime", 12,
+ newSViv(PTR2IV(myNVtime)), 0);
+ (void) hv_store(PL_modglobal, "Time::U2time", 12,
+ newSViv(PTR2IV(myU2time)), 0);
+ }
#endif
#if defined(PERL_DARWIN)
# if defined(USE_ITHREADS) && defined(PERL_DARWIN_MUTEX)
- MUTEX_INIT(&darwin_time_mutex);
+ MUTEX_INIT(&darwin_time_mutex);
# endif
#endif
-}
+ }
#if defined(USE_ITHREADS) && defined(MY_CXT_KEY)
void
CLONE(...)
CODE:
- MY_CXT_CLONE;
+ MY_CXT_CLONE;
#endif
@@ -1054,122 +1138,125 @@ INCLUDE: const-xs.inc
NV
usleep(useconds)
- NV useconds
- PREINIT:
- struct timeval Ta, Tb;
- CODE:
- gettimeofday(&Ta, NULL);
- if (items > 0) {
- if (useconds >= NV_1E6) {
- IV seconds = (IV) (useconds / NV_1E6);
- /* If usleep() has been implemented using setitimer()
- * then this contortion is unnecessary-- but usleep()
- * may be implemented in some other way, so let's contort. */
- if (seconds) {
- sleep(seconds);
- useconds -= NV_1E6 * seconds;
- }
- } else if (useconds < 0.0)
- croak("Time::HiRes::usleep(%" NVgf
+ NV useconds
+ PREINIT:
+ struct timeval Ta, Tb;
+ CODE:
+ gettimeofday(&Ta, NULL);
+ if (items > 0) {
+ if (useconds >= NV_1E6) {
+ IV seconds = (IV) (useconds / NV_1E6);
+ /* If usleep() has been implemented using setitimer()
+ * then this contortion is unnecessary-- but usleep()
+ * may be implemented in some other way, so let's contort. */
+ if (seconds) {
+ sleep(seconds);
+ useconds -= NV_1E6 * seconds;
+ }
+ } else if (useconds < 0.0)
+ croak("Time::HiRes::usleep(%" NVgf
"): negative time not invented yet", useconds);
- usleep((U32)useconds);
- } else
- PerlProc_pause();
- gettimeofday(&Tb, NULL);
-#if 0
- printf("[%ld %ld] [%ld %ld]\n", Tb.tv_sec, Tb.tv_usec, Ta.tv_sec, Ta.tv_usec);
-#endif
- RETVAL = NV_1E6*(Tb.tv_sec-Ta.tv_sec)+(NV)((IV)Tb.tv_usec-(IV)Ta.tv_usec);
- OUTPUT:
- RETVAL
+ usleep((U32)useconds);
+ } else
+ PerlProc_pause();
-#if defined(TIME_HIRES_NANOSLEEP)
+ gettimeofday(&Tb, NULL);
+# if 0
+ printf("[%ld %ld] [%ld %ld]\n", Tb.tv_sec, Tb.tv_usec, Ta.tv_sec, Ta.tv_usec);
+# endif
+ RETVAL = NV_1E6*(Tb.tv_sec-Ta.tv_sec)+(NV)((IV)Tb.tv_usec-(IV)Ta.tv_usec);
+
+ OUTPUT:
+ RETVAL
+
+# if defined(TIME_HIRES_NANOSLEEP)
NV
nanosleep(nsec)
- NV nsec
- PREINIT:
- struct timespec sleepfor, unslept;
- CODE:
- if (nsec < 0.0)
- croak("Time::HiRes::nanosleep(%" NVgf
+ NV nsec
+ PREINIT:
+ struct timespec sleepfor, unslept;
+ CODE:
+ if (nsec < 0.0)
+ croak("Time::HiRes::nanosleep(%" NVgf
"): negative time not invented yet", nsec);
nanosleep_init(nsec, &sleepfor, &unslept);
- if (nanosleep(&sleepfor, &unslept) == 0) {
- RETVAL = nsec;
- } else {
+ if (nanosleep(&sleepfor, &unslept) == 0) {
+ RETVAL = nsec;
+ } else {
RETVAL = nsec_without_unslept(&sleepfor, &unslept);
- }
+ }
OUTPUT:
- RETVAL
+ RETVAL
-#else /* #if defined(TIME_HIRES_NANOSLEEP) */
+# else /* #if defined(TIME_HIRES_NANOSLEEP) */
NV
nanosleep(nsec)
- NV nsec
+ NV nsec
CODE:
- PERL_UNUSED_ARG(nsec);
+ PERL_UNUSED_ARG(nsec);
croak("Time::HiRes::nanosleep(): unimplemented in this platform");
RETVAL = 0.0;
OUTPUT:
- RETVAL
+ RETVAL
-#endif /* #if defined(TIME_HIRES_NANOSLEEP) */
+# endif /* #if defined(TIME_HIRES_NANOSLEEP) */
NV
sleep(...)
- PREINIT:
- struct timeval Ta, Tb;
- CODE:
- gettimeofday(&Ta, NULL);
- if (items > 0) {
- NV seconds = SvNV(ST(0));
- if (seconds >= 0.0) {
- UV useconds = (UV)(1E6 * (seconds - (UV)seconds));
- if (seconds >= 1.0)
- sleep((U32)seconds);
- if ((IV)useconds < 0) {
-#if defined(__sparc64__) && defined(__GNUC__)
- /* Sparc64 gcc 2.95.3 (e.g. on NetBSD) has a bug
- * where (0.5 - (UV)(0.5)) will under certain
- * circumstances (if the double is cast to UV more
- * than once?) evaluate to -0.5, instead of 0.5. */
- useconds = -(IV)useconds;
-#endif /* #if defined(__sparc64__) && defined(__GNUC__) */
- if ((IV)useconds < 0)
- croak("Time::HiRes::sleep(%" NVgf
- "): internal error: useconds < 0 (unsigned %" UVuf
- " signed %" IVdf ")",
- seconds, useconds, (IV)useconds);
- }
- usleep(useconds);
- } else
- croak("Time::HiRes::sleep(%" NVgf
+ PREINIT:
+ struct timeval Ta, Tb;
+ CODE:
+ gettimeofday(&Ta, NULL);
+ if (items > 0) {
+ NV seconds = SvNV(ST(0));
+ if (seconds >= 0.0) {
+ UV useconds = (UV)(1E6 * (seconds - (UV)seconds));
+ if (seconds >= 1.0)
+ sleep((U32)seconds);
+ if ((IV)useconds < 0) {
+# if defined(__sparc64__) && defined(__GNUC__)
+ /* Sparc64 gcc 2.95.3 (e.g. on NetBSD) has a bug
+ * where (0.5 - (UV)(0.5)) will under certain
+ * circumstances (if the double is cast to UV more
+ * than once?) evaluate to -0.5, instead of 0.5. */
+ useconds = -(IV)useconds;
+# endif /* #if defined(__sparc64__) && defined(__GNUC__) */
+ if ((IV)useconds < 0)
+ croak("Time::HiRes::sleep(%" NVgf
+ "): internal error: useconds < 0 (unsigned %" UVuf
+ " signed %" IVdf ")",
+ seconds, useconds, (IV)useconds);
+ }
+ usleep(useconds);
+ } else
+ croak("Time::HiRes::sleep(%" NVgf
"): negative time not invented yet", seconds);
- } else
- PerlProc_pause();
- gettimeofday(&Tb, NULL);
-#if 0
- printf("[%ld %ld] [%ld %ld]\n", Tb.tv_sec, Tb.tv_usec, Ta.tv_sec, Ta.tv_usec);
-#endif
- RETVAL = (NV)(Tb.tv_sec-Ta.tv_sec)+0.000001*(NV)(Tb.tv_usec-Ta.tv_usec);
+ } else
+ PerlProc_pause();
+
+ gettimeofday(&Tb, NULL);
+# if 0
+ printf("[%ld %ld] [%ld %ld]\n", Tb.tv_sec, Tb.tv_usec, Ta.tv_sec, Ta.tv_usec);
+# endif
+ RETVAL = (NV)(Tb.tv_sec-Ta.tv_sec)+0.000001*(NV)(Tb.tv_usec-Ta.tv_usec);
- OUTPUT:
- RETVAL
+ OUTPUT:
+ RETVAL
#else /* #if defined(HAS_USLEEP) && defined(HAS_GETTIMEOFDAY) */
NV
usleep(useconds)
- NV useconds
+ NV useconds
CODE:
- PERL_UNUSED_ARG(useconds);
+ PERL_UNUSED_ARG(useconds);
croak("Time::HiRes::usleep(): unimplemented in this platform");
RETVAL = 0.0;
OUTPUT:
- RETVAL
+ RETVAL
#endif /* #if defined(HAS_USLEEP) && defined(HAS_GETTIMEOFDAY) */
@@ -1177,241 +1264,204 @@ usleep(useconds)
IV
ualarm(useconds,uinterval=0)
- int useconds
- int uinterval
- CODE:
- if (useconds < 0 || uinterval < 0)
- croak("Time::HiRes::ualarm(%d, %d): negative time not invented yet", useconds, uinterval);
-#if defined(HAS_SETITIMER) && defined(ITIMER_REAL)
- {
- struct itimerval itv;
- if (hrt_ualarm_itimero(&itv, useconds, uinterval)) {
- /* To conform to ualarm's interface, we're actually ignoring
- an error here. */
- RETVAL = 0;
- } else {
- RETVAL = itv.it_value.tv_sec * IV_1E6 + itv.it_value.tv_usec;
- }
- }
-#else
- if (useconds >= IV_1E6 || uinterval >= IV_1E6)
- croak("Time::HiRes::ualarm(%d, %d): useconds or uinterval"
- " equal to or more than %" IVdf,
- useconds, uinterval, IV_1E6);
- RETVAL = ualarm(useconds, uinterval);
-#endif
+ int useconds
+ int uinterval
+ CODE:
+ if (useconds < 0 || uinterval < 0)
+ croak("Time::HiRes::ualarm(%d, %d): negative time not invented yet", useconds, uinterval);
+# if defined(HAS_SETITIMER) && defined(ITIMER_REAL)
+ {
+ struct itimerval itv;
+ if (hrt_ualarm_itimero(&itv, useconds, uinterval)) {
+ /* To conform to ualarm's interface, we're actually ignoring
+ an error here. */
+ RETVAL = 0;
+ } else {
+ RETVAL = itv.it_value.tv_sec * IV_1E6 + itv.it_value.tv_usec;
+ }
+ }
+# else
+ if (useconds >= IV_1E6 || uinterval >= IV_1E6)
+ croak("Time::HiRes::ualarm(%d, %d): useconds or uinterval"
+ " equal to or more than %" IVdf,
+ useconds, uinterval, IV_1E6);
+
+ RETVAL = ualarm(useconds, uinterval);
+# endif
- OUTPUT:
- RETVAL
+ OUTPUT:
+ RETVAL
NV
alarm(seconds,interval=0)
- NV seconds
- NV interval
- CODE:
- if (seconds < 0.0 || interval < 0.0)
- croak("Time::HiRes::alarm(%" NVgf ", %" NVgf
+ NV seconds
+ NV interval
+ CODE:
+ if (seconds < 0.0 || interval < 0.0)
+ croak("Time::HiRes::alarm(%" NVgf ", %" NVgf
"): negative time not invented yet", seconds, interval);
- {
- IV iseconds = (IV)seconds;
- IV iinterval = (IV)interval;
- NV fseconds = seconds - iseconds;
- NV finterval = interval - iinterval;
- IV useconds, uinterval;
- if (fseconds >= 1.0 || finterval >= 1.0)
- croak("Time::HiRes::alarm(%" NVgf ", %" NVgf
+
+ {
+ IV iseconds = (IV)seconds;
+ IV iinterval = (IV)interval;
+ NV fseconds = seconds - iseconds;
+ NV finterval = interval - iinterval;
+ IV useconds, uinterval;
+ if (fseconds >= 1.0 || finterval >= 1.0)
+ croak("Time::HiRes::alarm(%" NVgf ", %" NVgf
"): seconds or interval too large to split correctly",
seconds, interval);
- useconds = IV_1E6 * fseconds;
- uinterval = IV_1E6 * finterval;
-#if defined(HAS_SETITIMER) && defined(ITIMER_REAL)
- {
- struct itimerval nitv, oitv;
- nitv.it_value.tv_sec = iseconds;
- nitv.it_value.tv_usec = useconds;
- nitv.it_interval.tv_sec = iinterval;
- nitv.it_interval.tv_usec = uinterval;
- if (setitimer(ITIMER_REAL, &nitv, &oitv)) {
- /* To conform to alarm's interface, we're actually ignoring
- an error here. */
- RETVAL = 0;
- } else {
- RETVAL = oitv.it_value.tv_sec + ((NV)oitv.it_value.tv_usec) / NV_1E6;
- }
- }
-#else
- if (iseconds || iinterval)
- croak("Time::HiRes::alarm(%" NVgf ", %" NVgf
+
+ useconds = IV_1E6 * fseconds;
+ uinterval = IV_1E6 * finterval;
+# if defined(HAS_SETITIMER) && defined(ITIMER_REAL)
+ {
+ struct itimerval nitv, oitv;
+ nitv.it_value.tv_sec = iseconds;
+ nitv.it_value.tv_usec = useconds;
+ nitv.it_interval.tv_sec = iinterval;
+ nitv.it_interval.tv_usec = uinterval;
+ if (setitimer(ITIMER_REAL, &nitv, &oitv)) {
+ /* To conform to alarm's interface, we're actually ignoring
+ an error here. */
+ RETVAL = 0;
+ } else {
+ RETVAL = oitv.it_value.tv_sec + ((NV)oitv.it_value.tv_usec) / NV_1E6;
+ }
+ }
+# else
+ if (iseconds || iinterval)
+ croak("Time::HiRes::alarm(%" NVgf ", %" NVgf
"): seconds or interval equal to or more than 1.0 ",
seconds, interval);
- RETVAL = (NV)ualarm( useconds, uinterval ) / NV_1E6;
-#endif
- }
- OUTPUT:
- RETVAL
+ RETVAL = (NV)ualarm( useconds, uinterval ) / NV_1E6;
+# endif
+ }
-#else
+ OUTPUT:
+ RETVAL
+
+#else /* #ifdef HAS_UALARM */
int
ualarm(useconds,interval=0)
- int useconds
- int interval
+ int useconds
+ int interval
CODE:
- PERL_UNUSED_ARG(useconds);
- PERL_UNUSED_ARG(interval);
+ PERL_UNUSED_ARG(useconds);
+ PERL_UNUSED_ARG(interval);
croak("Time::HiRes::ualarm(): unimplemented in this platform");
- RETVAL = -1;
+ RETVAL = -1;
OUTPUT:
- RETVAL
+ RETVAL
NV
alarm(seconds,interval=0)
- NV seconds
- NV interval
+ NV seconds
+ NV interval
CODE:
- PERL_UNUSED_ARG(seconds);
- PERL_UNUSED_ARG(interval);
+ PERL_UNUSED_ARG(seconds);
+ PERL_UNUSED_ARG(interval);
croak("Time::HiRes::alarm(): unimplemented in this platform");
- RETVAL = 0.0;
+ RETVAL = 0.0;
OUTPUT:
- RETVAL
+ RETVAL
#endif /* #ifdef HAS_UALARM */
#ifdef HAS_GETTIMEOFDAY
-# ifdef MACOS_TRADITIONAL /* fix epoch TZ and use unsigned time_t */
-void
-gettimeofday()
- PREINIT:
- struct timeval Tp;
- struct timezone Tz;
- PPCODE:
- int status;
- status = gettimeofday (&Tp, &Tz);
-
- if (status == 0) {
- Tp.tv_sec += Tz.tz_minuteswest * 60; /* adjust for TZ */
- if (GIMME == G_ARRAY) {
- EXTEND(sp, 2);
- /* Mac OS (Classic) has unsigned time_t */
- PUSHs(sv_2mortal(newSVuv(Tp.tv_sec)));
- PUSHs(sv_2mortal(newSViv(Tp.tv_usec)));
- } else {
- EXTEND(sp, 1);
- PUSHs(sv_2mortal(newSVnv(Tp.tv_sec + (Tp.tv_usec / NV_1E6))));
- }
- }
-NV
-time()
- PREINIT:
- struct timeval Tp;
- struct timezone Tz;
- CODE:
- int status;
- status = gettimeofday (&Tp, &Tz);
- if (status == 0) {
- Tp.tv_sec += Tz.tz_minuteswest * 60; /* adjust for TZ */
- RETVAL = Tp.tv_sec + (Tp.tv_usec / NV_1E6);
- } else {
- RETVAL = -1.0;
- }
- OUTPUT:
- RETVAL
-
-# else /* MACOS_TRADITIONAL */
void
gettimeofday()
- PREINIT:
+ PREINIT:
struct timeval Tp;
- PPCODE:
- int status;
+ PPCODE:
+ int status;
status = gettimeofday (&Tp, NULL);
- if (status == 0) {
- if (GIMME == G_ARRAY) {
- EXTEND(sp, 2);
- PUSHs(sv_2mortal(newSViv(Tp.tv_sec)));
- PUSHs(sv_2mortal(newSViv(Tp.tv_usec)));
- } else {
- EXTEND(sp, 1);
- PUSHs(sv_2mortal(newSVnv(Tp.tv_sec + (Tp.tv_usec / NV_1E6))));
- }
+ if (status == 0) {
+ if (GIMME == G_ARRAY) {
+ EXTEND(sp, 2);
+ PUSHs(sv_2mortal(newSViv(Tp.tv_sec)));
+ PUSHs(sv_2mortal(newSViv(Tp.tv_usec)));
+ } else {
+ EXTEND(sp, 1);
+ PUSHs(sv_2mortal(newSVnv(Tp.tv_sec + (Tp.tv_usec / NV_1E6))));
+ }
}
NV
time()
- PREINIT:
+ PREINIT:
struct timeval Tp;
- CODE:
- int status;
+ CODE:
+ int status;
status = gettimeofday (&Tp, NULL);
- if (status == 0) {
+ if (status == 0) {
RETVAL = Tp.tv_sec + (Tp.tv_usec / NV_1E6);
- } else {
- RETVAL = -1.0;
- }
- OUTPUT:
- RETVAL
+ } else {
+ RETVAL = -1.0;
+ }
+ OUTPUT:
+ RETVAL
-# endif /* MACOS_TRADITIONAL */
#endif /* #ifdef HAS_GETTIMEOFDAY */
#if defined(HAS_GETITIMER) && defined(HAS_SETITIMER)
-#define TV2NV(tv) ((NV)((tv).tv_sec) + 0.000001 * (NV)((tv).tv_usec))
+# define TV2NV(tv) ((NV)((tv).tv_sec) + 0.000001 * (NV)((tv).tv_usec))
void
setitimer(which, seconds, interval = 0)
- int which
- NV seconds
- NV interval
+ int which
+ NV seconds
+ NV interval
PREINIT:
- struct itimerval newit;
- struct itimerval oldit;
+ struct itimerval newit;
+ struct itimerval oldit;
PPCODE:
- if (seconds < 0.0 || interval < 0.0)
- croak("Time::HiRes::setitimer(%" IVdf ", %" NVgf ", %" NVgf
+ if (seconds < 0.0 || interval < 0.0)
+ croak("Time::HiRes::setitimer(%" IVdf ", %" NVgf ", %" NVgf
"): negative time not invented yet",
(IV)which, seconds, interval);
- newit.it_value.tv_sec = (IV)seconds;
- newit.it_value.tv_usec =
- (IV)((seconds - (NV)newit.it_value.tv_sec) * NV_1E6);
- newit.it_interval.tv_sec = (IV)interval;
- newit.it_interval.tv_usec =
- (IV)((interval - (NV)newit.it_interval.tv_sec) * NV_1E6);
+ newit.it_value.tv_sec = (IV)seconds;
+ newit.it_value.tv_usec =
+ (IV)((seconds - (NV)newit.it_value.tv_sec) * NV_1E6);
+ newit.it_interval.tv_sec = (IV)interval;
+ newit.it_interval.tv_usec =
+ (IV)((interval - (NV)newit.it_interval.tv_sec) * NV_1E6);
/* on some platforms the 1st arg to setitimer is an enum, which
* causes -Wc++-compat to complain about passing an int instead
*/
GCC_DIAG_IGNORE_STMT(-Wc++-compat);
- if (setitimer(which, &newit, &oldit) == 0) {
- EXTEND(sp, 1);
- PUSHs(sv_2mortal(newSVnv(TV2NV(oldit.it_value))));
- if (GIMME == G_ARRAY) {
- EXTEND(sp, 1);
- PUSHs(sv_2mortal(newSVnv(TV2NV(oldit.it_interval))));
- }
- }
+ if (setitimer(which, &newit, &oldit) == 0) {
+ EXTEND(sp, 1);
+ PUSHs(sv_2mortal(newSVnv(TV2NV(oldit.it_value))));
+ if (GIMME == G_ARRAY) {
+ EXTEND(sp, 1);
+ PUSHs(sv_2mortal(newSVnv(TV2NV(oldit.it_interval))));
+ }
+ }
GCC_DIAG_RESTORE_STMT;
void
getitimer(which)
- int which
+ int which
PREINIT:
- struct itimerval nowit;
+ struct itimerval nowit;
PPCODE:
/* on some platforms the 1st arg to getitimer is an enum, which
* causes -Wc++-compat to complain about passing an int instead
*/
GCC_DIAG_IGNORE_STMT(-Wc++-compat);
- if (getitimer(which, &nowit) == 0) {
- EXTEND(sp, 1);
- PUSHs(sv_2mortal(newSVnv(TV2NV(nowit.it_value))));
- if (GIMME == G_ARRAY) {
- EXTEND(sp, 1);
- PUSHs(sv_2mortal(newSVnv(TV2NV(nowit.it_interval))));
- }
- }
+ if (getitimer(which, &nowit) == 0) {
+ EXTEND(sp, 1);
+ PUSHs(sv_2mortal(newSVnv(TV2NV(nowit.it_value))));
+ if (GIMME == G_ARRAY) {
+ EXTEND(sp, 1);
+ PUSHs(sv_2mortal(newSVnv(TV2NV(nowit.it_interval))));
+ }
+ }
GCC_DIAG_RESTORE_STMT;
#endif /* #if defined(HAS_GETITIMER) && defined(HAS_SETITIMER) */
@@ -1422,82 +1472,83 @@ I32
utime(accessed, modified, ...)
PROTOTYPE: $$@
PREINIT:
- SV* accessed;
- SV* modified;
- SV* file;
+ SV* accessed;
+ SV* modified;
+ SV* file;
- struct timespec utbuf[2];
- struct timespec *utbufp = utbuf;
- int tot;
+ struct timespec utbuf[2];
+ struct timespec *utbufp = utbuf;
+ int tot;
CODE:
- accessed = ST(0);
- modified = ST(1);
- items -= 2;
- tot = 0;
-
- if ( accessed == &PL_sv_undef && modified == &PL_sv_undef )
- utbufp = NULL;
- else {
- if (SvNV(accessed) < 0.0 || SvNV(modified) < 0.0)
- croak("Time::HiRes::utime(%" NVgf ", %" NVgf
- "): negative time not invented yet",
- SvNV(accessed), SvNV(modified));
- Zero(&utbuf, sizeof utbuf, char);
-
- utbuf[0].tv_sec = (Time_t)SvNV(accessed); /* time accessed */
- utbuf[0].tv_nsec = (long)(
- (SvNV(accessed) - (NV)utbuf[0].tv_sec)
- * NV_1E9 + (NV)0.5);
-
- utbuf[1].tv_sec = (Time_t)SvNV(modified); /* time modified */
- utbuf[1].tv_nsec = (long)(
- (SvNV(modified) - (NV)utbuf[1].tv_sec)
- * NV_1E9 + (NV)0.5);
- }
-
- while (items > 0) {
- file = POPs; items--;
-
- if (SvROK(file) && GvIO(SvRV(file)) && IoIFP(sv_2io(SvRV(file)))) {
- int fd = PerlIO_fileno(IoIFP(sv_2io(file)));
- if (fd < 0) {
- SETERRNO(EBADF,RMS_IFI);
- } else {
-#ifdef HAS_FUTIMENS
- if (FUTIMENS_AVAILABLE) {
- if (futimens(fd, utbufp) == 0) {
- tot++;
- }
- } else {
- croak("futimens unimplemented in this platform");
- }
-#else /* HAS_FUTIMENS */
- croak("futimens unimplemented in this platform");
-#endif /* HAS_FUTIMENS */
+ accessed = ST(0);
+ modified = ST(1);
+ items -= 2;
+ tot = 0;
+
+ if ( accessed == &PL_sv_undef && modified == &PL_sv_undef )
+ utbufp = NULL;
+ else {
+ if (SvNV(accessed) < 0.0 || SvNV(modified) < 0.0)
+ croak("Time::HiRes::utime(%" NVgf ", %" NVgf
+ "): negative time not invented yet",
+ SvNV(accessed), SvNV(modified));
+ Zero(&utbuf, sizeof utbuf, char);
+
+ utbuf[0].tv_sec = (Time_t)SvNV(accessed); /* time accessed */
+ utbuf[0].tv_nsec = (long)(
+ (SvNV(accessed) - (NV)utbuf[0].tv_sec)
+ * NV_1E9 + (NV)0.5);
+
+ utbuf[1].tv_sec = (Time_t)SvNV(modified); /* time modified */
+ utbuf[1].tv_nsec = (long)(
+ (SvNV(modified) - (NV)utbuf[1].tv_sec)
+ * NV_1E9 + (NV)0.5);
+ }
+
+ while (items > 0) {
+ file = POPs; items--;
+
+ if (SvROK(file) && GvIO(SvRV(file)) && IoIFP(sv_2io(SvRV(file)))) {
+ int fd = PerlIO_fileno(IoIFP(sv_2io(file)));
+ if (fd < 0) {
+ SETERRNO(EBADF,RMS_IFI);
+ } else {
+# ifdef HAS_FUTIMENS
+ if (FUTIMENS_AVAILABLE) {
+ if (futimens(fd, utbufp) == 0) {
+ tot++;
}
- }
- else {
-#ifdef HAS_UTIMENSAT
- if (UTIMENSAT_AVAILABLE) {
+ } else {
+ croak("futimens unimplemented in this platform");
+ }
+# else /* HAS_FUTIMENS */
+ croak("futimens unimplemented in this platform");
+# endif /* HAS_FUTIMENS */
+ }
+ }
+ else {
+# ifdef HAS_UTIMENSAT
+ if (UTIMENSAT_AVAILABLE) {
STRLEN len;
char * name = SvPV(file, len);
if (IS_SAFE_PATHNAME(name, len, "utime") &&
utimensat(AT_FDCWD, name, utbufp, 0) == 0) {
- tot++;
+
+ tot++;
}
- } else {
+ } else {
croak("utimensat unimplemented in this platform");
- }
-#else /* HAS_UTIMENSAT */
- croak("utimensat unimplemented in this platform");
-#endif /* HAS_UTIMENSAT */
- }
- } /* while items */
- RETVAL = tot;
+ }
+# else /* HAS_UTIMENSAT */
+ croak("utimensat unimplemented in this platform");
+# endif /* HAS_UTIMENSAT */
+ }
+ } /* while items */
+ RETVAL = tot;
OUTPUT:
- RETVAL
+ RETVAL
#else /* #if defined(TIME_HIRES_UTIME) */
@@ -1507,7 +1558,7 @@ utime(accessed, modified, ...)
croak("Time::HiRes::utime(): unimplemented in this platform");
RETVAL = 0;
OUTPUT:
- RETVAL
+ RETVAL
#endif /* #if defined(TIME_HIRES_UTIME) */
@@ -1515,32 +1566,32 @@ utime(accessed, modified, ...)
NV
clock_gettime(clock_id = CLOCK_REALTIME)
- clockid_t clock_id
+ clockid_t clock_id
PREINIT:
- struct timespec ts;
- int status = -1;
+ struct timespec ts;
+ int status = -1;
CODE:
-#ifdef TIME_HIRES_CLOCK_GETTIME_SYSCALL
- status = syscall(SYS_clock_gettime, clock_id, &ts);
-#else
- status = clock_gettime(clock_id, &ts);
-#endif
- RETVAL = status == 0 ? ts.tv_sec + (NV) ts.tv_nsec / NV_1E9 : -1;
+# ifdef TIME_HIRES_CLOCK_GETTIME_SYSCALL
+ status = syscall(SYS_clock_gettime, clock_id, &ts);
+# else
+ status = clock_gettime(clock_id, &ts);
+# endif
+ RETVAL = status == 0 ? ts.tv_sec + (NV) ts.tv_nsec / NV_1E9 : -1;
OUTPUT:
- RETVAL
+ RETVAL
#else /* if defined(TIME_HIRES_CLOCK_GETTIME) */
NV
clock_gettime(clock_id = 0)
- clockid_t clock_id
+ clockid_t clock_id
CODE:
- PERL_UNUSED_ARG(clock_id);
+ PERL_UNUSED_ARG(clock_id);
croak("Time::HiRes::clock_gettime(): unimplemented in this platform");
RETVAL = 0.0;
OUTPUT:
- RETVAL
+ RETVAL
#endif /* #if defined(TIME_HIRES_CLOCK_GETTIME) */
@@ -1548,32 +1599,32 @@ clock_gettime(clock_id = 0)
NV
clock_getres(clock_id = CLOCK_REALTIME)
- clockid_t clock_id
+ clockid_t clock_id
PREINIT:
- int status = -1;
- struct timespec ts;
+ int status = -1;
+ struct timespec ts;
CODE:
-#ifdef TIME_HIRES_CLOCK_GETRES_SYSCALL
- status = syscall(SYS_clock_getres, clock_id, &ts);
-#else
- status = clock_getres(clock_id, &ts);
-#endif
- RETVAL = status == 0 ? ts.tv_sec + (NV) ts.tv_nsec / NV_1E9 : -1;
+# ifdef TIME_HIRES_CLOCK_GETRES_SYSCALL
+ status = syscall(SYS_clock_getres, clock_id, &ts);
+# else
+ status = clock_getres(clock_id, &ts);
+# endif
+ RETVAL = status == 0 ? ts.tv_sec + (NV) ts.tv_nsec / NV_1E9 : -1;
OUTPUT:
- RETVAL
+ RETVAL
#else /* if defined(TIME_HIRES_CLOCK_GETRES) */
NV
clock_getres(clock_id = 0)
- clockid_t clock_id
+ clockid_t clock_id
CODE:
- PERL_UNUSED_ARG(clock_id);
+ PERL_UNUSED_ARG(clock_id);
croak("Time::HiRes::clock_getres(): unimplemented in this platform");
RETVAL = 0.0;
OUTPUT:
- RETVAL
+ RETVAL
#endif /* #if defined(TIME_HIRES_CLOCK_GETRES) */
@@ -1581,39 +1632,39 @@ clock_getres(clock_id = 0)
NV
clock_nanosleep(clock_id, nsec, flags = 0)
- clockid_t clock_id
- NV nsec
- int flags
+ clockid_t clock_id
+ NV nsec
+ int flags
PREINIT:
- struct timespec sleepfor, unslept;
+ struct timespec sleepfor, unslept;
CODE:
- if (nsec < 0.0)
- croak("Time::HiRes::clock_nanosleep(..., %" NVgf
+ if (nsec < 0.0)
+ croak("Time::HiRes::clock_nanosleep(..., %" NVgf
"): negative time not invented yet", nsec);
nanosleep_init(nsec, &sleepfor, &unslept);
- if (clock_nanosleep(clock_id, flags, &sleepfor, &unslept) == 0) {
- RETVAL = nsec;
- } else {
+ if (clock_nanosleep(clock_id, flags, &sleepfor, &unslept) == 0) {
+ RETVAL = nsec;
+ } else {
RETVAL = nsec_without_unslept(&sleepfor, &unslept);
- }
+ }
OUTPUT:
- RETVAL
+ RETVAL
#else /* if defined(TIME_HIRES_CLOCK_NANOSLEEP) && defined(TIMER_ABSTIME) */
NV
clock_nanosleep(clock_id, nsec, flags = 0)
- clockid_t clock_id
- NV nsec
- int flags
+ clockid_t clock_id
+ NV nsec
+ int flags
CODE:
- PERL_UNUSED_ARG(clock_id);
- PERL_UNUSED_ARG(nsec);
- PERL_UNUSED_ARG(flags);
+ PERL_UNUSED_ARG(clock_id);
+ PERL_UNUSED_ARG(nsec);
+ PERL_UNUSED_ARG(flags);
croak("Time::HiRes::clock_nanosleep(): unimplemented in this platform");
RETVAL = 0.0;
OUTPUT:
- RETVAL
+ RETVAL
#endif /* #if defined(TIME_HIRES_CLOCK_NANOSLEEP) && defined(TIMER_ABSTIME) */
@@ -1622,13 +1673,13 @@ clock_nanosleep(clock_id, nsec, flags = 0)
NV
clock()
PREINIT:
- clock_t clocks;
+ clock_t clocks;
CODE:
- clocks = clock();
- RETVAL = clocks == (clock_t) -1 ? (clock_t) -1 : (NV)clocks / (NV)CLOCKS_PER_SEC;
+ clocks = clock();
+ RETVAL = clocks == (clock_t) -1 ? (clock_t) -1 : (NV)clocks / (NV)CLOCKS_PER_SEC;
OUTPUT:
- RETVAL
+ RETVAL
#else /* if defined(TIME_HIRES_CLOCK) && defined(CLOCKS_PER_SEC) */
@@ -1638,7 +1689,7 @@ clock()
croak("Time::HiRes::clock(): unimplemented in this platform");
RETVAL = 0.0;
OUTPUT:
- RETVAL
+ RETVAL
#endif /* #if defined(TIME_HIRES_CLOCK) && defined(CLOCKS_PER_SEC) */
@@ -1646,39 +1697,39 @@ void
stat(...)
PROTOTYPE: ;$
PREINIT:
- OP fakeop;
- int nret;
+ OP fakeop;
+ int nret;
ALIAS:
- Time::HiRes::lstat = 1
+ Time::HiRes::lstat = 1
PPCODE:
- XPUSHs(sv_2mortal(newSVsv(items == 1 ? ST(0) : DEFSV)));
- PUTBACK;
- ENTER;
- PL_laststatval = -1;
- SAVEOP();
- Zero(&fakeop, 1, OP);
- fakeop.op_type = ix ? OP_LSTAT : OP_STAT;
- fakeop.op_ppaddr = PL_ppaddr[fakeop.op_type];
- fakeop.op_flags = GIMME_V == G_ARRAY ? OPf_WANT_LIST :
- GIMME_V == G_SCALAR ? OPf_WANT_SCALAR : OPf_WANT_VOID;
- PL_op = &fakeop;
- (void)fakeop.op_ppaddr(aTHX);
- SPAGAIN;
- LEAVE;
- nret = SP+1 - &ST(0);
- if (nret == 13) {
- UV atime = SvUV(ST( 8));
- UV mtime = SvUV(ST( 9));
- UV ctime = SvUV(ST(10));
- UV atime_nsec;
- UV mtime_nsec;
- UV ctime_nsec;
- hrstatns(&atime_nsec, &mtime_nsec, &ctime_nsec);
- if (atime_nsec)
- ST( 8) = sv_2mortal(newSVnv(atime + (NV) atime_nsec / NV_1E9));
- if (mtime_nsec)
- ST( 9) = sv_2mortal(newSVnv(mtime + (NV) mtime_nsec / NV_1E9));
- if (ctime_nsec)
- ST(10) = sv_2mortal(newSVnv(ctime + (NV) ctime_nsec / NV_1E9));
- }
- XSRETURN(nret);
+ XPUSHs(sv_2mortal(newSVsv(items == 1 ? ST(0) : DEFSV)));
+ PUTBACK;
+ ENTER;
+ PL_laststatval = -1;
+ SAVEOP();
+ Zero(&fakeop, 1, OP);
+ fakeop.op_type = ix ? OP_LSTAT : OP_STAT;
+ fakeop.op_ppaddr = PL_ppaddr[fakeop.op_type];
+ fakeop.op_flags = GIMME_V == G_ARRAY ? OPf_WANT_LIST :
+ GIMME_V == G_SCALAR ? OPf_WANT_SCALAR : OPf_WANT_VOID;
+ PL_op = &fakeop;
+ (void)fakeop.op_ppaddr(aTHX);
+ SPAGAIN;
+ LEAVE;
+ nret = SP+1 - &ST(0);
+ if (nret == 13) {
+ UV atime = SvUV(ST( 8));
+ UV mtime = SvUV(ST( 9));
+ UV ctime = SvUV(ST(10));
+ UV atime_nsec;
+ UV mtime_nsec;
+ UV ctime_nsec;
+ hrstatns(&atime_nsec, &mtime_nsec, &ctime_nsec);
+ if (atime_nsec)
+ ST( 8) = sv_2mortal(newSVnv(atime + (NV) atime_nsec / NV_1E9));
+ if (mtime_nsec)
+ ST( 9) = sv_2mortal(newSVnv(mtime + (NV) mtime_nsec / NV_1E9));
+ if (ctime_nsec)
+ ST(10) = sv_2mortal(newSVnv(ctime + (NV) ctime_nsec / NV_1E9));
+ }
+ XSRETURN(nret);
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/Makefile.PL b/gnu/usr.bin/perl/dist/Time-HiRes/Makefile.PL
index 4e7018a073d..b6350921a79 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/Makefile.PL
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/Makefile.PL
@@ -11,6 +11,8 @@ use Config;
use ExtUtils::MakeMaker;
use strict;
+use File::Spec;
+
my $VERBOSE = $ENV{VERBOSE};
my $DEFINE;
my $LIBS = [];
@@ -29,55 +31,6 @@ unless($ENV{PERL_CORE}) {
$ENV{PERL_CORE} = 1 if grep { $_ eq 'PERL_CORE=1' } @ARGV;
}
-# Perls 5.002 and 5.003 did not have File::Spec, fake what we need.
-
-sub my_dirsep {
- $^O eq 'VMS' ? '.' :
- $^O =~ /mswin32|netware|djgpp/i ? '\\' :
- $^O eq 'MacOS' ? ':'
- : '/';
-}
-
-sub my_catdir {
- shift;
- my $catdir = join(my_dirsep, @_);
- $^O eq 'VMS' ? "[$catdir]" : $catdir;
-}
-
-sub my_catfile {
- shift;
- return join(my_dirsep, @_) unless $^O eq 'VMS';
- my $file = pop;
- return my_catdir (undef, @_) . $file;
-}
-
-sub my_updir {
- shift;
- $^O eq 'VMS' ? "-" : "..";
-}
-
-BEGIN {
- eval { require File::Spec };
- if ($@) {
- *File::Spec::catdir = \&my_catdir;
- *File::Spec::updir = \&my_updir;
- *File::Spec::catfile = \&my_catfile;
- }
-}
-
-# Avoid 'used only once' warnings.
-my $nop1 = *File::Spec::catdir;
-my $nop2 = *File::Spec::updir;
-my $nop3 = *File::Spec::catfile;
-
-# if you have 5.004_03 (and some slightly older versions?), xsubpp
-# tries to generate line numbers in the C code generated from the .xs.
-# unfortunately, it is a little buggy around #ifdef'd code.
-# my choice is leave it in and have people with old perls complain
-# about the "Usage" bug, or leave it out and be unable to compile myself
-# without changing it, and then I'd always forget to change it before a
-# release. Sorry, Edward :)
-
sub try_compile_and_link {
my ($c, %args) = @_;
@@ -89,25 +42,25 @@ sub try_compile_and_link {
unlink("$tmp.c", "$tmp$obj_ext");
if (open(TMPC, '>', "$tmp.c")) {
- print TMPC $c;
- close(TMPC);
+ print TMPC $c;
+ close(TMPC);
- my $cccmd = $args{cccmd};
+ my $cccmd = $args{cccmd};
- my $errornull;
+ my $errornull;
- my $COREincdir;
+ my $COREincdir;
- if ($ENV{PERL_CORE}) {
- my $updir = File::Spec->updir;
- $COREincdir = File::Spec->catdir(($updir) x 2);
- } else {
- $COREincdir = File::Spec->catdir($Config{'archlibexp'}, 'CORE');
- }
+ if ($ENV{PERL_CORE}) {
+ my $updir = File::Spec->updir;
+ $COREincdir = File::Spec->catdir(($updir) x 2);
+ } else {
+ $COREincdir = File::Spec->catdir($Config{'archlibexp'}, 'CORE');
+ }
- if ($ENV{PERL_CORE}) {
- unless (-f File::Spec->catfile($COREincdir, "EXTERN.h")) {
- die <<__EOD__;
+ if ($ENV{PERL_CORE}) {
+ unless (-f File::Spec->catfile($COREincdir, "EXTERN.h")) {
+ die <<__EOD__;
Your environment variable PERL_CORE is '$ENV{PERL_CORE}' but there
is no EXTERN.h in $COREincdir.
Cannot continue, aborting.
@@ -115,62 +68,62 @@ __EOD__
}
}
- my $ccflags = $Config{'ccflags'} . ' ' . "-I$COREincdir"
- . ' -DPERL_NO_INLINE_FUNCTIONS';
+ my $ccflags = $Config{'ccflags'} . ' ' . "-I$COREincdir"
+ . ' -DPERL_NO_INLINE_FUNCTIONS';
- if ($^O eq 'VMS') {
+ if ($^O eq 'VMS') {
$cccmd = "$Config{'cc'} /include=($COREincdir) $tmp.c";
}
if ($args{silent} || !$VERBOSE) {
- $errornull = "2>/dev/null" unless defined $errornull;
- } else {
- $errornull = '';
- }
+ $errornull = "2>/dev/null" unless defined $errornull;
+ } else {
+ $errornull = '';
+ }
$cccmd = "$Config{'cc'} -o $tmp $ccflags $tmp.c @$LIBS $errornull"
- unless defined $cccmd;
+ unless defined $cccmd;
if ($^O eq 'VMS') {
- open( CMDFILE, '>', "$tmp.com" );
- print CMDFILE "\$ SET MESSAGE/NOFACILITY/NOSEVERITY/NOIDENT/NOTEXT\n";
- print CMDFILE "\$ $cccmd\n";
- print CMDFILE "\$ IF \$SEVERITY .NE. 1 THEN EXIT 44\n"; # escalate
- close CMDFILE;
- system("\@ $tmp.com");
- $ok = $?==0;
- for ("$tmp.c", "$tmp$obj_ext", "$tmp.com", "$tmp$Config{exe_ext}") {
- 1 while unlink $_;
- }
+ open( CMDFILE, '>', "$tmp.com" );
+ print CMDFILE "\$ SET MESSAGE/NOFACILITY/NOSEVERITY/NOIDENT/NOTEXT\n";
+ print CMDFILE "\$ $cccmd\n";
+ print CMDFILE "\$ IF \$SEVERITY .NE. 1 THEN EXIT 44\n"; # escalate
+ close CMDFILE;
+ system("\@ $tmp.com");
+ $ok = $?==0;
+ for ("$tmp.c", "$tmp$obj_ext", "$tmp.com", "$tmp$Config{exe_ext}") {
+ 1 while unlink $_;
+ }
}
else
{
- my $tmp_exe = "$tmp$ld_exeext";
- printf "cccmd = $cccmd\n" if $VERBOSE;
- my $res = system($cccmd);
- $ok = defined($res) && $res == 0 && -s $tmp_exe && -x _;
-
- if ( $ok && exists $args{run} && $args{run} && !$ENV{TIME_HIRES_DONT_RUN_PROBES} ) {
- my $tmp_exe =
- File::Spec->catfile(File::Spec->curdir, $tmp_exe);
- my @run = $tmp_exe;
- unshift @run, $Config{run} if $Config{run} && -e $Config{run};
- printf "Running $tmp_exe..." if $VERBOSE;
- if (system(@run) == 0) {
- $ok = 1;
- } else {
- $ok = 0;
- my $errno = $? >> 8;
- local $! = $errno;
- printf <<EOF;
+ my $tmp_exe = "$tmp$ld_exeext";
+ printf "cccmd = $cccmd\n" if $VERBOSE;
+ my $res = system($cccmd);
+ $ok = defined($res) && $res == 0 && -s $tmp_exe && -x _;
+
+ if ( $ok && exists $args{run} && $args{run} && !$ENV{TIME_HIRES_DONT_RUN_PROBES} ) {
+ my $tmp_exe =
+ File::Spec->catfile(File::Spec->curdir, $tmp_exe);
+ my @run = $tmp_exe;
+ unshift @run, $Config{run} if $Config{run} && -e $Config{run};
+ printf "Running $tmp_exe..." if $VERBOSE;
+ if (system(@run) == 0) {
+ $ok = 1;
+ } else {
+ $ok = 0;
+ my $errno = $? >> 8;
+ local $! = $errno;
+ printf <<EOF;
*** The test run of '$tmp_exe' failed: status $?
*** (the status means: errno = $errno or '$!')
*** DO NOT PANIC: this just means that *some* functionality will be missing.
EOF
- }
- }
- unlink("$tmp.c", $tmp_exe);
+ }
+ }
+ unlink("$tmp.c", $tmp_exe);
}
}
@@ -188,7 +141,7 @@ my $TIME_HEADERS = <<EOH;
# include <sys/time.h>
#endif
#ifdef I_SYS_SELECT
-# include <sys/select.h> /* struct timeval might be hidden in here */
+# include <sys/select.h> /* struct timeval might be hidden in here */
#endif
EOH
@@ -233,7 +186,7 @@ sub has_x {
int main(int argc, char** argv)
{
- $x;
+ $x;
}
EOM
return 0;
@@ -276,7 +229,7 @@ sub has_include {
#include <$inc>
int main(int argc, char** argv)
{
- return 0;
+ return 0;
}
EOM
return 0;
@@ -422,56 +375,56 @@ sub DEFINE {
my ($def, $val) = @_;
my $define = defined $val ? "$def=$val" : $def ;
unless ($DEFINE =~ /(?:^| )-D\Q$define\E(?: |$)/) {
- $DEFINE .= " -D$define";
+ $DEFINE .= " -D$define";
}
}
sub init {
my $hints = File::Spec->catfile("hints", "$^O.pl");
if (-f $hints) {
- print "Using hints $hints...\n";
- local $self;
- do "./$hints";
- if (exists $self->{LIBS}) {
- $LIBS = $self->{LIBS};
- print "Extra libraries: @$LIBS...\n";
- }
+ print "Using hints $hints...\n";
+ local $self;
+ do "./$hints";
+ if (exists $self->{LIBS}) {
+ $LIBS = $self->{LIBS};
+ print "Extra libraries: @$LIBS...\n";
+ }
}
$DEFINE = '';
if ($Config{d_syscall}) {
- print "Have syscall()... looking for syscall.h... ";
- if (has_include('syscall.h')) {
- $SYSCALL_H = 'syscall.h';
- } elsif (has_include('sys/syscall.h')) {
- $SYSCALL_H = 'sys/syscall.h';
- }
+ print "Have syscall()... looking for syscall.h... ";
+ if (has_include('syscall.h')) {
+ $SYSCALL_H = 'syscall.h';
+ } elsif (has_include('sys/syscall.h')) {
+ $SYSCALL_H = 'sys/syscall.h';
+ }
} else {
- print "No syscall()...\n";
+ print "No syscall()...\n";
}
if ($Config{d_syscall}) {
- if (defined $SYSCALL_H) {
- print "found <$SYSCALL_H>.\n";
- } else {
- print "NOT found.\n";
- }
+ if (defined $SYSCALL_H) {
+ print "found <$SYSCALL_H>.\n";
+ } else {
+ print "NOT found.\n";
+ }
}
print "Looking for gettimeofday()... ";
my $has_gettimeofday;
if (exists $Config{d_gettimeod}) {
- $has_gettimeofday++ if $Config{d_gettimeod};
+ $has_gettimeofday++ if $Config{d_gettimeod};
} elsif (has_gettimeofday()) {
- $DEFINE .= ' -DHAS_GETTIMEOFDAY';
- $has_gettimeofday++;
+ $DEFINE .= ' -DHAS_GETTIMEOFDAY';
+ $has_gettimeofday++;
}
if ($has_gettimeofday) {
- print "found.\n";
+ print "found.\n";
} else {
- die <<EOD
+ die <<EOD
Your operating system does not seem to have the gettimeofday() function.
(or, at least, I cannot find it)
@@ -496,7 +449,7 @@ EOD
if ($has_setitimer) {
print "found.\n";
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
print "Looking for getitimer()... ";
@@ -511,13 +464,13 @@ EOD
if ($has_getitimer) {
print "found.\n";
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
if ($has_setitimer && $has_getitimer) {
- print "You have interval timers (both setitimer and getitimer).\n";
+ print "You have interval timers (both setitimer and getitimer).\n";
} else {
- print "You do NOT have interval timers.\n";
+ print "You do NOT have interval timers.\n";
}
print "Looking for ualarm()... ";
@@ -526,74 +479,71 @@ EOD
$has_ualarm++ if $Config{d_ualarm};
} elsif (has_x ("ualarm (0, 0)")) {
$has_ualarm++;
- $DEFINE .= ' -DHAS_UALARM';
+ $DEFINE .= ' -DHAS_UALARM';
}
if ($has_ualarm) {
print "found.\n";
} else {
- print "NOT found.\n";
- if ($has_setitimer) {
- print "But you have setitimer().\n";
- print "We can make a Time::HiRes::ualarm().\n";
- }
+ print "NOT found.\n";
+ if ($has_setitimer) {
+ print "But you have setitimer().\n";
+ print "We can make a Time::HiRes::ualarm().\n";
+ }
}
print "Looking for usleep()... ";
my $has_usleep;
if (exists $Config{d_usleep}) {
- $has_usleep++ if $Config{d_usleep};
+ $has_usleep++ if $Config{d_usleep};
} elsif (has_x ("usleep (0)")) {
- $has_usleep++;
- $DEFINE .= ' -DHAS_USLEEP';
+ $has_usleep++;
+ $DEFINE .= ' -DHAS_USLEEP';
}
if ($has_usleep) {
- print "found.\n";
+ print "found.\n";
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
print "Let's see if you have select()... ";
if ($Config{'d_select'}) {
- print "found.\n";
- print "We can make a Time::HiRes::usleep().\n";
- } else {
- print "NOT found.\n";
- print "You won't have a Time::HiRes::usleep().\n";
- }
+ print "found.\n";
+ print "We can make a Time::HiRes::usleep().\n";
+ } else {
+ print "NOT found.\n";
+ print "You won't have a Time::HiRes::usleep().\n";
+ }
}
print "Looking for nanosleep()... ";
my $has_nanosleep;
if ($ENV{FORCE_NANOSLEEP_SCAN}) {
- print "forced scan... ";
- if (has_nanosleep()) {
- $has_nanosleep++;
- $DEFINE .= ' -DTIME_HIRES_NANOSLEEP';
- }
+ print "forced scan... ";
+ if (has_nanosleep()) {
+ $has_nanosleep++;
+ $DEFINE .= ' -DTIME_HIRES_NANOSLEEP';
+ }
}
elsif (exists $Config{d_nanosleep}) {
- print "believing \$Config{d_nanosleep}... ";
- if ($Config{d_nanosleep}) {
- $has_nanosleep++;
- $DEFINE .= ' -DTIME_HIRES_NANOSLEEP';
- }
- } elsif ($^O =~ /^(mpeix)$/) {
- # MPE/iX falsely finds nanosleep from its libc equivalent.
- print "skipping because in $^O... ";
+ print "believing \$Config{d_nanosleep}... ";
+ if ($Config{d_nanosleep}) {
+ $has_nanosleep++;
+ $DEFINE .= ' -DTIME_HIRES_NANOSLEEP';
+ }
} else {
- if (has_nanosleep()) {
- $has_nanosleep++;
- $DEFINE .= ' -DTIME_HIRES_NANOSLEEP';
- }
+ if (has_nanosleep()) {
+ $has_nanosleep++;
+ $DEFINE .= ' -DTIME_HIRES_NANOSLEEP';
+ }
}
if ($has_nanosleep) {
- print "found.\n";
+ print "found.\n";
print "You can mix subsecond sleeps with signals, if you want to.\n";
print "(It's still not portable, though.)\n";
} else {
- print "NOT found.\n";
- my $nt = ($^O eq 'os2' ? '' : 'not');
+ print "NOT found.\n";
+ my $nt = ($^O eq 'os2' ? '' : 'not');
print "You can$nt mix subsecond sleeps with signals.\n";
print "(It would not be portable anyway.)\n";
}
@@ -601,11 +551,11 @@ EOD
print "Looking for clockid_t... ";
my $has_clockid_t;
if (has_clockid_t()) {
- print "found.\n";
+ print "found.\n";
$has_clockid_t++;
- $DEFINE .= ' -DTIME_HIRES_CLOCKID_T';
+ $DEFINE .= ' -DTIME_HIRES_CLOCKID_T';
} else {
- print "NOT found, will use int.\n";
+ print "NOT found, will use int.\n";
}
print "Looking for clock_gettime()... ";
@@ -615,10 +565,10 @@ EOD
$has_clock_gettime++ if $Config{d_clock_gettime}; # Unlikely...
} elsif (has_clock_xxx('gettime')) {
$has_clock_gettime++;
- $DEFINE .= ' -DTIME_HIRES_CLOCK_GETTIME';
+ $DEFINE .= ' -DTIME_HIRES_CLOCK_GETTIME';
} elsif (defined $SYSCALL_H && has_clock_xxx_syscall('gettime')) {
$has_clock_gettime++;
- $DEFINE .= ' -DTIME_HIRES_CLOCK_GETTIME -DTIME_HIRES_CLOCK_GETTIME_SYSCALL';
+ $DEFINE .= ' -DTIME_HIRES_CLOCK_GETTIME -DTIME_HIRES_CLOCK_GETTIME_SYSCALL';
} elsif ($^O eq 'darwin') {
$has_clock_gettime_emulation++;
$has_clock_gettime++;
@@ -627,14 +577,14 @@ EOD
if ($has_clock_gettime) {
if ($DEFINE =~ /-DTIME_HIRES_CLOCK_GETTIME_SYSCALL/) {
- print "found (via syscall).\n";
- } elsif ($has_clock_gettime_emulation) {
- print "found (via emulation).\n";
- } else {
- print "found.\n";
- }
+ print "found (via syscall).\n";
+ } elsif ($has_clock_gettime_emulation) {
+ print "found (via emulation).\n";
+ } else {
+ print "found.\n";
+ }
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
print "Looking for clock_getres()... ";
@@ -644,10 +594,10 @@ EOD
$has_clock_getres++ if $Config{d_clock_getres}; # Unlikely...
} elsif (has_clock_xxx('getres')) {
$has_clock_getres++;
- $DEFINE .= ' -DTIME_HIRES_CLOCK_GETRES';
+ $DEFINE .= ' -DTIME_HIRES_CLOCK_GETRES';
} elsif (defined $SYSCALL_H && has_clock_xxx_syscall('getres')) {
$has_clock_getres++;
- $DEFINE .= ' -DTIME_HIRES_CLOCK_GETRES -DTIME_HIRES_CLOCK_GETRES_SYSCALL';
+ $DEFINE .= ' -DTIME_HIRES_CLOCK_GETRES -DTIME_HIRES_CLOCK_GETRES_SYSCALL';
} elsif ($^O eq 'darwin') {
$has_clock_getres_emulation++;
$has_clock_getres++;
@@ -656,14 +606,14 @@ EOD
if ($has_clock_getres) {
if ($DEFINE =~ /-DTIME_HIRES_CLOCK_GETRES_SYSCALL/) {
- print "found (via syscall).\n";
- } elsif ($has_clock_getres_emulation) {
- print "found (via emulation).\n";
- } else {
- print "found.\n";
- }
+ print "found (via syscall).\n";
+ } elsif ($has_clock_getres_emulation) {
+ print "found (via emulation).\n";
+ } else {
+ print "found.\n";
+ }
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
print "Looking for clock_nanosleep()... ";
@@ -673,21 +623,21 @@ EOD
$has_clock_nanosleep++ if $Config{d_clock_nanosleep}; # Unlikely...
} elsif (has_clock_nanosleep()) {
$has_clock_nanosleep++;
- $DEFINE .= ' -DTIME_HIRES_CLOCK_NANOSLEEP';
+ $DEFINE .= ' -DTIME_HIRES_CLOCK_NANOSLEEP';
} elsif ($^O eq 'darwin') {
$has_clock_nanosleep++;
$has_clock_nanosleep_emulation++;
- $DEFINE .= ' -DTIME_HIRES_CLOCK_NANOSLEEP -DTIME_HIRES_CLOCK_NANOSLEEP_EMULATION';
+ $DEFINE .= ' -DTIME_HIRES_CLOCK_NANOSLEEP -DTIME_HIRES_CLOCK_NANOSLEEP_EMULATION';
}
if ($has_clock_nanosleep) {
- if ($has_clock_nanosleep_emulation) {
- print "found (via emulation).\n";
- } else {
- print "found.\n";
- }
+ if ($has_clock_nanosleep_emulation) {
+ print "found (via emulation).\n";
+ } else {
+ print "found.\n";
+ }
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
print "Looking for clock()... ";
@@ -696,44 +646,44 @@ EOD
$has_clock++ if $Config{d_clock}; # Unlikely...
} elsif (has_clock()) {
$has_clock++;
- $DEFINE .= ' -DTIME_HIRES_CLOCK';
+ $DEFINE .= ' -DTIME_HIRES_CLOCK';
}
if ($has_clock) {
print "found.\n";
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
print "Looking for working futimens()... ";
my $has_futimens;
if (has_futimens()) {
$has_futimens++;
- $DEFINE .= ' -DHAS_FUTIMENS';
+ $DEFINE .= ' -DHAS_FUTIMENS';
}
if ($has_futimens) {
print "found.\n";
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
print "Looking for working utimensat()... ";
my $has_utimensat;
if (has_utimensat()) {
$has_utimensat++;
- $DEFINE .= ' -DHAS_UTIMENSAT';
+ $DEFINE .= ' -DHAS_UTIMENSAT';
}
if ($has_utimensat) {
print "found.\n";
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
my $has_hires_utime = ($has_futimens && $has_utimensat);
if ($has_hires_utime) {
- $DEFINE .= ' -DTIME_HIRES_UTIME';
+ $DEFINE .= ' -DTIME_HIRES_UTIME';
print "You seem to have subsecond timestamp setting.\n";
} else {
print "You do NOT seem to have subsecond timestamp setting.\n";
@@ -758,7 +708,7 @@ EOM
if ($has_stat_st_xtimespec) {
print "found.\n";
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
print "Trying struct stat st_atimensec...";
@@ -778,7 +728,7 @@ EOM
if ($has_stat_st_xtimensec) {
print "found.\n";
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
print "Trying struct stat st_atime_n...";
@@ -798,7 +748,7 @@ EOM
if ($has_stat_st_xtime_n) {
print "found.\n";
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
print "Trying struct stat st_atim.tv_nsec...";
@@ -818,7 +768,7 @@ EOM
if ($has_stat_st_xtim) {
print "found.\n";
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
print "Trying struct stat st_uatime...";
@@ -838,7 +788,7 @@ EOM
if ($has_stat_st_uxtime) {
print "found.\n";
} else {
- print "NOT found.\n";
+ print "NOT found.\n";
}
# See HiRes.xs hrstatns()
@@ -870,21 +820,21 @@ EOM
if ($^O eq 'cygwin') {
print "Looking for <w32api/windows.h>... ";
if (has_include('w32api/windows.h')) {
- $has_w32api_windows_h++;
- DEFINE('HAS_W32API_WINDOWS_H');
- }
+ $has_w32api_windows_h++;
+ DEFINE('HAS_W32API_WINDOWS_H');
+ }
if ($has_w32api_windows_h) {
- print "found.\n";
- } else {
- print "NOT found.\n";
- }
+ print "found.\n";
+ } else {
+ print "NOT found.\n";
+ }
}
if ($DEFINE) {
$DEFINE =~ s/^\s+//;
if (open(XDEFINE, '>', 'xdefine')) {
- print XDEFINE $DEFINE, "\n";
- close(XDEFINE);
+ print XDEFINE $DEFINE, "\n";
+ close(XDEFINE);
}
}
}
@@ -892,74 +842,82 @@ EOM
sub doMakefile {
my @makefileopts = ();
- if ($] >= 5.005) {
- push (@makefileopts,
- 'AUTHOR' => 'Jarkko Hietaniemi <jhi@iki.fi>',
- 'ABSTRACT_FROM' => 'HiRes.pm',
- );
- DEFINE('ATLEASTFIVEOHOHFIVE');
- }
DEFINE('USE_PPPORT_H') unless $ENV{PERL_CORE};
push (@makefileopts,
- 'NAME' => 'Time::HiRes',
- 'VERSION_FROM' => 'HiRes.pm', # finds $VERSION
- 'LIBS' => $LIBS, # e.g., '-lm'
- 'DEFINE' => $DEFINE, # e.g., '-DHAS_SOMETHING'
- 'XSOPT' => $XSOPT,
- # Do not even think about 'INC' => '-I/usr/ucbinclude',
- # Solaris will avenge.
- 'INC' => '', # e.g., '-I/usr/include/other'
- 'INSTALLDIRS' => ($] >= 5.008 && $] < 5.011 ? 'perl' : 'site'),
- 'PREREQ_PM' => {
- 'Carp' => 0,
- 'Config' => 0,
- 'Exporter' => 0,
- 'ExtUtils::MakeMaker' => 0,
- 'Test::More' => 0,
- 'XSLoader' => 0,
- 'strict' => 0,
- },
- 'dist' => {
- 'CI' => 'ci -l',
- 'COMPRESS' => 'gzip -9f',
- 'SUFFIX' => 'gz',
- },
+ 'NAME' => 'Time::HiRes',
+ 'AUTHOR' => 'Jarkko Hietaniemi <jhi@iki.fi>',
+ 'ABSTRACT_FROM' => 'HiRes.pm',
+ 'VERSION_FROM' => 'HiRes.pm', # finds $VERSION
+ 'LIBS' => $LIBS, # e.g., '-lm'
+ 'DEFINE' => $DEFINE, # e.g., '-DHAS_SOMETHING'
+ 'XSOPT' => $XSOPT,
+ # Do not even think about 'INC' => '-I/usr/ucbinclude',
+ # Solaris will avenge.
+ 'INC' => '', # e.g., '-I/usr/include/other'
+ 'INSTALLDIRS' => ($] >= 5.008 && $] < 5.011 ? 'perl' : 'site'),
+ 'PREREQ_PM' => {
+ 'Carp' => 0,
+ 'Config' => 0,
+ 'Exporter' => 0,
+ 'ExtUtils::MakeMaker' => 0,
+ 'Test::More' => 0,
+ 'XSLoader' => 0,
+ 'strict' => 0,
+ 'File::Spec' => 0,
+ },
+ 'dist' => {
+ 'CI' => 'ci -l',
+ 'COMPRESS' => 'gzip -9f',
+ 'SUFFIX' => 'gz',
+ },
clean => { FILES => "xdefine" },
realclean => { FILES=> 'const-c.inc const-xs.inc' },
);
if ($^O eq "MSWin32" && !(grep { /\ALD[A-Z]*=/ } @ARGV)) {
- my $libperl = $Config{libperl} || "";
- my $gccversion = $Config{gccversion} || "";
- if ($gccversion =~ /\A3\.4\.[0-9]+/ and $libperl =~ /\.lib\z/) {
- # Avoid broken linkage with ActivePerl, by linking directly
- # against the Perl DLL rather than the import library.
- (my $llibperl = "-l$libperl") =~ s/\.lib\z//;
- my $lddlflags = $Config{lddlflags} || "";
- my $ldflags = $Config{ldflags} || "";
- s/-L(?:".*?"|\S+)//g foreach $lddlflags, $ldflags;
- my $libdirs = join ' ',
- map { s/(?<!\\)((?:\\\\)*")/\\$1/g; qq[-L"$_"] }
- @Config{qw/bin sitebin/};
- push @makefileopts, macro => {
- LDDLFLAGS => "$lddlflags $libdirs $llibperl",
- LDFLAGS => "$ldflags $libdirs $llibperl",
- PERL_ARCHIVE => "",
- };
- }
+ my $libperl = $Config{libperl} || "";
+ my $gccversion = $Config{gccversion} || "";
+ if ($gccversion =~ /\A3\.4\.[0-9]+/ and $libperl =~ /\.lib\z/) {
+ # Avoid broken linkage with ActivePerl, by linking directly
+ # against the Perl DLL rather than the import library.
+ (my $llibperl = "-l$libperl") =~ s/\.lib\z//;
+ my $lddlflags = $Config{lddlflags} || "";
+ my $ldflags = $Config{ldflags} || "";
+ s/-L(?:".*?"|\S+)//g foreach $lddlflags, $ldflags;
+ my $libdirs = join ' ',
+ map { s/(?<!\\)((?:\\\\)*")/\\$1/g; qq[-L"$_"] }
+ @Config{qw/bin sitebin/};
+ push @makefileopts, macro => {
+ LDDLFLAGS => "$lddlflags $libdirs $llibperl",
+ LDFLAGS => "$ldflags $libdirs $llibperl",
+ PERL_ARCHIVE => "",
+ };
+ }
}
if ($ENV{PERL_CORE}) {
- push @makefileopts, MAN3PODS => {};
+ push @makefileopts, MAN3PODS => {};
}
if ($ExtUtils::MakeMaker::VERSION >= 6.48) {
- push @makefileopts, (MIN_PERL_VERSION => '5.006',);
+ push @makefileopts, (MIN_PERL_VERSION => '5.006',);
}
if ($ExtUtils::MakeMaker::VERSION >= 6.31) {
- push @makefileopts, (LICENSE => 'perl_5');
+ push @makefileopts, (LICENSE => 'perl_5');
+ }
+
+ if ($ExtUtils::MakeMaker::VERSION >= 6.46) {
+ push @makefileopts, (
+ META_MERGE => {
+ resources => {
+ repository => 'git://perl5.git.perl.org/perl.git',
+ bugtracker => 'https://rt.perl.org/rt3/',
+ homepage => "http://dev.perl.org/",
+ },
+ },
+ )
}
WriteMakefile(@makefileopts);
@@ -968,119 +926,122 @@ sub doMakefile {
sub doConstants {
if (eval {require ExtUtils::Constant; 1}) {
# More or less this same list is in HiRes.pm. Should unify.
- my @names = qw(
- CLOCKS_PER_SEC
- CLOCK_BOOTTIME
- CLOCK_HIGHRES
- CLOCK_MONOTONIC
- CLOCK_MONOTONIC_COARSE
- CLOCK_MONOTONIC_FAST
- CLOCK_MONOTONIC_PRECISE
- CLOCK_MONOTONIC_RAW
- CLOCK_PROF
- CLOCK_PROCESS_CPUTIME_ID
- CLOCK_REALTIME
- CLOCK_REALTIME_COARSE
- CLOCK_REALTIME_FAST
- CLOCK_REALTIME_PRECISE
- CLOCK_REALTIME_RAW
- CLOCK_SECOND
- CLOCK_SOFTTIME
- CLOCK_THREAD_CPUTIME_ID
- CLOCK_TIMEOFDAY
- CLOCK_UPTIME
- CLOCK_UPTIME_COARSE
- CLOCK_UPTIME_FAST
- CLOCK_UPTIME_PRECISE
- CLOCK_UPTIME_RAW
- CLOCK_VIRTUAL
- ITIMER_PROF
- ITIMER_REAL
- ITIMER_REALPROF
- ITIMER_VIRTUAL
- TIMER_ABSTIME
+ my @names = qw(
+ CLOCKS_PER_SEC
+ CLOCK_BOOTTIME
+ CLOCK_HIGHRES
+ CLOCK_MONOTONIC
+ CLOCK_MONOTONIC_COARSE
+ CLOCK_MONOTONIC_FAST
+ CLOCK_MONOTONIC_PRECISE
+ CLOCK_MONOTONIC_RAW
+ CLOCK_PROF
+ CLOCK_PROCESS_CPUTIME_ID
+ CLOCK_REALTIME
+ CLOCK_REALTIME_COARSE
+ CLOCK_REALTIME_FAST
+ CLOCK_REALTIME_PRECISE
+ CLOCK_REALTIME_RAW
+ CLOCK_SECOND
+ CLOCK_SOFTTIME
+ CLOCK_THREAD_CPUTIME_ID
+ CLOCK_TIMEOFDAY
+ CLOCK_UPTIME
+ CLOCK_UPTIME_COARSE
+ CLOCK_UPTIME_FAST
+ CLOCK_UPTIME_PRECISE
+ CLOCK_UPTIME_RAW
+ CLOCK_VIRTUAL
+ ITIMER_PROF
+ ITIMER_REAL
+ ITIMER_REALPROF
+ ITIMER_VIRTUAL
+ TIMER_ABSTIME
);
- foreach (qw (d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer
- d_nanosleep d_clock_gettime d_clock_getres
- d_clock d_clock_nanosleep d_hires_stat
+ foreach (qw (d_usleep d_ualarm d_gettimeofday d_getitimer d_setitimer
+ d_nanosleep d_clock_gettime d_clock_getres
+ d_clock d_clock_nanosleep d_hires_stat
d_futimens d_utimensat d_hires_utime)) {
- my $macro = $_;
- if ($macro =~ /^(d_nanosleep|d_clock)$/) {
- $macro =~ s/^d_(.+)/TIME_HIRES_\U$1/;
- } elsif ($macro =~ /^(d_hires_stat)$/) {
- my $d_hires_stat = $1 if ($DEFINE =~ /-DTIME_HIRES_STAT=(\d+)/);
+ my $macro = $_;
+ if ($macro =~ /^(d_nanosleep|d_clock)$/) {
+ $macro =~ s/^d_(.+)/TIME_HIRES_\U$1/;
+ } elsif ($macro =~ /^(d_hires_stat)$/) {
+ my $d_hires_stat = $1 if ($DEFINE =~ /-DTIME_HIRES_STAT=(\d+)/);
if (defined $d_hires_stat) {
push @names, {name => $_, macro => "TIME_HIRES_STAT", value => $d_hires_stat,
default => ["IV", "0"]};
next;
}
- } elsif ($macro =~ /^(d_hires_utime)$/) {
- my $d_hires_utime =
- ($DEFINE =~ /-DHAS_FUTIMENS/ ||
- $DEFINE =~ /-DHAS_UTIMENSAT/);
- push @names, {name => $_, macro => "TIME_HIRES_UTIME", value => $d_hires_utime,
- default => ["IV", "0"]};
- next;
- } elsif ($macro =~ /^(d_clock_gettime|d_clock_getres|d_clock_nanosleep)$/) {
- $macro =~ s/^d_(.+)/TIME_HIRES_\U$1/;
- my $val = ($DEFINE =~ /-D$macro\b/) ? 1 : 0;
- push @names, {name => $_, macro => $macro, value => $val,
- default => ["IV", "0"]};
- next;
- } else {
- $macro =~ s/^d_(.+)/HAS_\U$1/;
- }
- push @names, {name => $_, macro => $macro, value => 1,
- default => ["IV", "0"]};
- }
- ExtUtils::Constant::WriteConstants(
- NAME => 'Time::HiRes',
- NAMES => \@names,
- );
+ } elsif ($macro =~ /^(d_hires_utime)$/) {
+ my $d_hires_utime =
+ ($DEFINE =~ /-DHAS_FUTIMENS/ ||
+ $DEFINE =~ /-DHAS_UTIMENSAT/);
+ push @names, {name => $_, macro => "TIME_HIRES_UTIME", value => $d_hires_utime,
+ default => ["IV", "0"]};
+ next;
+ } elsif ($macro =~ /^(d_clock_gettime|d_clock_getres|d_clock_nanosleep)$/) {
+ $macro =~ s/^d_(.+)/TIME_HIRES_\U$1/;
+ my $val = ($DEFINE =~ /-D$macro\b/) ? 1 : 0;
+ push @names, {name => $_, macro => $macro, value => $val,
+ default => ["IV", "0"]};
+ next;
+ } else {
+ $macro =~ s/^d_(.+)/HAS_\U$1/;
+ }
+ push @names, {name => $_, macro => $macro, value => 1,
+ default => ["IV", "0"]};
+ }
+ ExtUtils::Constant::WriteConstants(
+ NAME => 'Time::HiRes',
+ NAMES => \@names,
+ );
} else {
my $file;
- foreach $file ('const-c.inc', 'const-xs.inc') {
- my $fallback = File::Spec->catfile('fallback', $file);
- local $/;
- open IN, '<', $fallback or die "Can't open $fallback: $!";
- open OUT, '>', $file or die "Can't open $file: $!";
- print OUT <IN> or die $!;
- close OUT or die "Can't close $file: $!";
- close IN or die "Can't close $fallback: $!";
- }
+ foreach $file ('const-c.inc', 'const-xs.inc') {
+ my $fallback = File::Spec->catfile('fallback', $file);
+ local $/;
+ open IN, '<', $fallback or die "Can't open $fallback: $!";
+ open OUT, '>', $file or die "Can't open $file: $!";
+ print OUT <IN> or die $!;
+ close OUT or die "Can't close $file: $!";
+ close IN or die "Can't close $fallback: $!";
+ }
}
}
sub main {
if (-f "xdefine" && !(@ARGV && $ARGV[0] =~ /^--(?:configure|force)$/)) {
- print qq[$0: The "xdefine" exists, skipping the configure step.\n];
- print qq[Use "$^X $0 --configure"\n];
- print qq[or: "$^X $0 --force\n];
- print qq[to force the configure step.\n];
+ print qq[$0: The "xdefine" exists, skipping the configure step.\n];
+ print qq[Use "$^X $0 --configure"\n];
+ print qq[or: "$^X $0 --force\n];
+ print qq[to force the configure step.\n];
} else {
- print "Configuring Time::HiRes...\n";
- 1 while unlink("define");
- if ($^O =~ /Win32/i) {
- DEFINE('SELECT_IS_BROKEN');
- $LIBS = [];
- print "System is $^O, skipping full configure...\n";
- open(XDEFINE, '>', 'xdefine') or die "$0: Cannot create xdefine: $!\n";
- close(XDEFINE);
- } else {
- init();
- }
- doMakefile;
- doConstants;
+ print "Configuring Time::HiRes...\n";
+ 1 while unlink("define");
+ if ($^O =~ /Win32/i) {
+ DEFINE('SELECT_IS_BROKEN');
+ # we provide our own implementations of those functions on win32
+ DEFINE('TIME_HIRES_CLOCK_GETTIME');
+ DEFINE('TIME_HIRES_CLOCK_GETRES');
+ $LIBS = [];
+ print "System is $^O, skipping full configure...\n";
+ open(XDEFINE, '>', 'xdefine') or die "$0: Cannot create xdefine: $!\n";
+ close(XDEFINE);
+ } else {
+ init();
+ }
+ doMakefile;
+ doConstants;
}
my $make = $Config{'make'} || "make";
unless (exists $ENV{PERL_CORE} && $ENV{PERL_CORE}) {
- print <<EOM;
+ print <<EOM;
Now you may issue '$make'. Do not forget also '$make test'.
EOM
if ($] == 5.008 &&
- ((exists $ENV{LC_ALL} && $ENV{LC_ALL} =~ /utf-?8/i) ||
- (exists $ENV{LC_CTYPE} && $ENV{LC_CTYPE} =~ /utf-?8/i) ||
- (exists $ENV{LANG} && $ENV{LANG} =~ /utf-?8/i))) {
+ ((exists $ENV{LC_ALL} && $ENV{LC_ALL} =~ /utf-?8/i) ||
+ (exists $ENV{LC_CTYPE} && $ENV{LC_CTYPE} =~ /utf-?8/i) ||
+ (exists $ENV{LANG} && $ENV{LANG} =~ /utf-?8/i))) {
print <<EOM;
NOTE: if you get an error like this (the Makefile line number may vary):
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/Watchdog.pm b/gnu/usr.bin/perl/dist/Time-HiRes/t/Watchdog.pm
index 44ec8081dea..a93ab4f9708 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/Watchdog.pm
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/Watchdog.pm
@@ -13,24 +13,24 @@ if ($Config{d_fork}) {
print("# I am the main process $$, starting the watchdog process...\n");
$watchdog_pid = fork();
if (defined $watchdog_pid) {
- if ($watchdog_pid == 0) { # We are the kid, set up the watchdog.
- my $ppid = getppid();
- print("# I am the watchdog process $$, sleeping for $waitfor seconds...\n");
- sleep($waitfor - 2); # Workaround for perlbug #49073
- sleep(2); # Wait for parent to exit
- if (kill(0, $ppid)) { # Check if parent still exists
- warn "\n$0: overall time allowed for tests (${waitfor}s) exceeded!\n";
- print("Terminating main process $ppid...\n");
- kill('KILL', $ppid);
- print("# This is the watchdog process $$, over and out.\n");
- }
- exit(0);
- } else {
- print("# The watchdog process $watchdog_pid launched, continuing testing...\n");
- $TheEnd = time() + $waitfor;
- }
+ if ($watchdog_pid == 0) { # We are the kid, set up the watchdog.
+ my $ppid = getppid();
+ print("# I am the watchdog process $$, sleeping for $waitfor seconds...\n");
+ sleep($waitfor - 2); # Workaround for perlbug #49073
+ sleep(2); # Wait for parent to exit
+ if (kill(0, $ppid)) { # Check if parent still exists
+ warn "\n$0: overall time allowed for tests (${waitfor}s) exceeded!\n";
+ print("Terminating main process $ppid...\n");
+ kill('KILL', $ppid);
+ print("# This is the watchdog process $$, over and out.\n");
+ }
+ exit(0);
+ } else {
+ print("# The watchdog process $watchdog_pid launched, continuing testing...\n");
+ $TheEnd = time() + $waitfor;
+ }
} else {
- warn "$0: fork failed: $!\n";
+ warn "$0: fork failed: $!\n";
}
} else {
print("# No watchdog process (need fork)\n");
@@ -38,16 +38,16 @@ if ($Config{d_fork}) {
END {
if ($watchdog_pid) { # Only in the main process.
- my $left = $TheEnd - time();
- printf("# I am the main process $$, terminating the watchdog process $watchdog_pid before it terminates me in %d seconds (testing took %d seconds).\n", $left, $waitfor - $left);
- if (kill(0, $watchdog_pid)) {
- local $? = 0;
- my $kill = kill('KILL', $watchdog_pid); # We are done, the watchdog can go.
- wait();
- printf("# kill KILL $watchdog_pid = %d\n", $kill);
- }
- unlink("ktrace.out"); # Used in BSD system call tracing.
- print("# All done.\n");
+ my $left = $TheEnd - time();
+ printf("# I am the main process $$, terminating the watchdog process $watchdog_pid before it terminates me in %d seconds (testing took %d seconds).\n", $left, $waitfor - $left);
+ if (kill(0, $watchdog_pid)) {
+ local $? = 0;
+ my $kill = kill('KILL', $watchdog_pid); # We are done, the watchdog can go.
+ wait();
+ printf("# kill KILL $watchdog_pid = %d\n", $kill);
+ }
+ unlink("ktrace.out"); # Used in BSD system call tracing.
+ print("# All done.\n");
}
}
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/alarm.t b/gnu/usr.bin/perl/dist/Time-HiRes/t/alarm.t
index af34d2a5619..6ebf380e1ff 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/alarm.t
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/alarm.t
@@ -10,23 +10,23 @@ use Config;
my $limit = 0.25; # 25% is acceptable slosh for testing timers
-my $xdefine = '';
+my $xdefine = '';
if (open(XDEFINE, "<", "xdefine")) {
chomp($xdefine = <XDEFINE> || "");
close(XDEFINE);
}
my $can_subsecond_alarm =
- defined &Time::HiRes::gettimeofday &&
- defined &Time::HiRes::ualarm &&
- defined &Time::HiRes::usleep &&
- ($Config{d_ualarm} || $xdefine =~ /-DHAS_UALARM/);
+ defined &Time::HiRes::gettimeofday &&
+ defined &Time::HiRes::ualarm &&
+ defined &Time::HiRes::usleep &&
+ ($Config{d_ualarm} || $xdefine =~ /-DHAS_UALARM/);
SKIP: {
skip "no subsecond alarm", 1 unless $can_subsecond_alarm;
eval { require POSIX };
my $use_sigaction =
- !$@ && defined &POSIX::sigaction && &POSIX::SIGALRM > 0;
+ !$@ && defined &POSIX::sigaction && &POSIX::SIGALRM > 0;
my ($r, $i, $not, $ok);
@@ -36,80 +36,80 @@ SKIP: {
$i = 5;
my $oldaction;
if ($use_sigaction) {
- $oldaction = new POSIX::SigAction;
- printf("# sigaction tick, ALRM = %d\n", &POSIX::SIGALRM);
+ $oldaction = new POSIX::SigAction;
+ printf("# sigaction tick, ALRM = %d\n", &POSIX::SIGALRM);
- # Perl's deferred signals may be too wimpy to break through
- # a restartable select(), so use POSIX::sigaction if available.
+ # Perl's deferred signals may be too wimpy to break through
+ # a restartable select(), so use POSIX::sigaction if available.
# In perl 5.6.2 you will get a likely bogus warning of
# "Use of uninitialized value in subroutine entry" from
# the following line.
- POSIX::sigaction(&POSIX::SIGALRM,
- POSIX::SigAction->new("tick"),
- $oldaction)
- or die "Error setting SIGALRM handler with sigaction: $!\n";
+ POSIX::sigaction(&POSIX::SIGALRM,
+ POSIX::SigAction->new("tick"),
+ $oldaction)
+ or die "Error setting SIGALRM handler with sigaction: $!\n";
} else {
- print("# SIG tick\n");
- $SIG{ALRM} = "tick";
+ print("# SIG tick\n");
+ $SIG{ALRM} = "tick";
}
# On VMS timers can not interrupt select.
if ($^O eq 'VMS') {
- $ok = "Skip: VMS select() does not get interrupted.";
+ $ok = "Skip: VMS select() does not get interrupted.";
} else {
- while ($i > 0) {
- Time::HiRes::alarm(0.3);
- select (undef, undef, undef, 3);
- my $ival = Time::HiRes::tv_interval ($r);
- print("# Select returned! $i $ival\n");
- printf("# %s\n", abs($ival/3 - 1));
- # Whether select() gets restarted after signals is
- # implementation dependent. If it is restarted, we
- # will get about 3.3 seconds: 3 from the select, 0.3
- # from the alarm. If this happens, let's just skip
- # this particular test. --jhi
- if (abs($ival/3.3 - 1) < $limit) {
- $ok = "Skip: your select() may get restarted by your SIGALRM (or just retry test)";
- undef $not;
- last;
- }
- my $exp = 0.3 * (5 - $i);
- if ($exp == 0) {
- $not = "while: divisor became zero";
- last;
- }
- # This test is more sensitive, so impose a softer limit.
- if (abs($ival/$exp - 1) > 4*$limit) {
- my $ratio = abs($ival/$exp);
- $not = "while: $exp sleep took $ival ratio $ratio";
- last;
- }
- $ok = $i;
- }
+ while ($i > 0) {
+ Time::HiRes::alarm(0.3);
+ select (undef, undef, undef, 3);
+ my $ival = Time::HiRes::tv_interval ($r);
+ print("# Select returned! $i $ival\n");
+ printf("# %s\n", abs($ival/3 - 1));
+ # Whether select() gets restarted after signals is
+ # implementation dependent. If it is restarted, we
+ # will get about 3.3 seconds: 3 from the select, 0.3
+ # from the alarm. If this happens, let's just skip
+ # this particular test. --jhi
+ if (abs($ival/3.3 - 1) < $limit) {
+ $ok = "Skip: your select() may get restarted by your SIGALRM (or just retry test)";
+ undef $not;
+ last;
+ }
+ my $exp = 0.3 * (5 - $i);
+ if ($exp == 0) {
+ $not = "while: divisor became zero";
+ last;
+ }
+ # This test is more sensitive, so impose a softer limit.
+ if (abs($ival/$exp - 1) > 4*$limit) {
+ my $ratio = abs($ival/$exp);
+ $not = "while: $exp sleep took $ival ratio $ratio";
+ last;
+ }
+ $ok = $i;
+ }
}
sub tick {
- $i--;
- my $ival = Time::HiRes::tv_interval ($r);
- print("# Tick! $i $ival\n");
- my $exp = 0.3 * (5 - $i);
- if ($exp == 0) {
- $not = "tick: divisor became zero";
- last;
- }
- # This test is more sensitive, so impose a softer limit.
- if (abs($ival/$exp - 1) > 4*$limit) {
- my $ratio = abs($ival/$exp);
- $not = "tick: $exp sleep took $ival ratio $ratio";
- $i = 0;
- }
+ $i--;
+ my $ival = Time::HiRes::tv_interval ($r);
+ print("# Tick! $i $ival\n");
+ my $exp = 0.3 * (5 - $i);
+ if ($exp == 0) {
+ $not = "tick: divisor became zero";
+ last;
+ }
+ # This test is more sensitive, so impose a softer limit.
+ if (abs($ival/$exp - 1) > 4*$limit) {
+ my $ratio = abs($ival/$exp);
+ $not = "tick: $exp sleep took $ival ratio $ratio";
+ $i = 0;
+ }
}
if ($use_sigaction) {
- POSIX::sigaction(&POSIX::SIGALRM, $oldaction);
+ POSIX::sigaction(&POSIX::SIGALRM, $oldaction);
} else {
- Time::HiRes::alarm(0); # can't cancel usig %SIG
+ Time::HiRes::alarm(0); # can't cancel usig %SIG
}
print("# $not\n");
@@ -120,7 +120,7 @@ SKIP: {
skip "no ualarm", 1 unless &Time::HiRes::d_ualarm;
eval { Time::HiRes::alarm(-3) };
like $@, qr/::alarm\(-3, 0\): negative time not invented yet/,
- "negative time error";
+ "negative time error";
}
# Find the loop size N (a for() loop 0..N-1)
@@ -139,22 +139,22 @@ SKIP: {
my $i;
N: {
do {
- my $t0 = Time::HiRes::time();
- for ($i = 0; $i < $DelayN; $i++) { }
- my $t1 = Time::HiRes::time();
- my $dt = $t1 - $t0;
- print("# N = $DelayN, t1 = $t1, t0 = $t0, dt = $dt\n");
- last N if $dt > $T;
- $DelayN *= 2;
+ my $t0 = Time::HiRes::time();
+ for ($i = 0; $i < $DelayN; $i++) { }
+ my $t1 = Time::HiRes::time();
+ my $dt = $t1 - $t0;
+ print("# N = $DelayN, t1 = $t1, t0 = $t0, dt = $dt\n");
+ last N if $dt > $T;
+ $DelayN *= 2;
} while (1);
}
# The time-burner which takes at least T (default 1) seconds.
my $Delay = sub {
- my $c = @_ ? shift : 1;
- my $n = $c * $DelayN;
- my $i;
- for ($i = 0; $i < $n; $i++) { }
+ my $c = @_ ? shift : 1;
+ my $n = $c * $DelayN;
+ my $i;
+ for ($i = 0; $i < $n; $i++) { }
};
# Next setup a periodic timer (the two-argument alarm() of
@@ -174,11 +174,11 @@ SKIP: {
# (We may well get $A + 1 alarms.)
$SIG{ALRM} = sub {
- $a++;
- printf("# Alarm $a - %s\n", Time::HiRes::time());
- Time::HiRes::alarm(0) if $a >= $A; # Disarm the alarm.
- $Delay->(2); # Try burning CPU at least for 2T seconds.
- };
+ $a++;
+ printf("# Alarm $a - %s\n", Time::HiRes::time());
+ Time::HiRes::alarm(0) if $a >= $A; # Disarm the alarm.
+ $Delay->(2); # Try burning CPU at least for 2T seconds.
+ };
Time::HiRes::alarm($T, $T); # Arm the alarm.
@@ -190,38 +190,38 @@ SKIP: {
SKIP: {
skip "no subsecond alarm", 6 unless $can_subsecond_alarm;
{
- my $alrm;
- $SIG{ALRM} = sub { $alrm++ };
- Time::HiRes::alarm(0.1);
- my $t0 = Time::HiRes::time();
- 1 while Time::HiRes::time() - $t0 <= 1;
- ok $alrm;
+ my $alrm;
+ $SIG{ALRM} = sub { $alrm++ };
+ Time::HiRes::alarm(0.1);
+ my $t0 = Time::HiRes::time();
+ 1 while Time::HiRes::time() - $t0 <= 1;
+ ok $alrm;
}
{
- my $alrm;
- $SIG{ALRM} = sub { $alrm++ };
- Time::HiRes::alarm(1.1);
- my $t0 = Time::HiRes::time();
- 1 while Time::HiRes::time() - $t0 <= 2;
- ok $alrm;
+ my $alrm;
+ $SIG{ALRM} = sub { $alrm++ };
+ Time::HiRes::alarm(1.1);
+ my $t0 = Time::HiRes::time();
+ 1 while Time::HiRes::time() - $t0 <= 2;
+ ok $alrm;
}
{
- my $alrm = 0;
- $SIG{ALRM} = sub { $alrm++ };
- my $got = Time::HiRes::alarm(2.7);
- ok $got == 0 or print("# $got\n");
+ my $alrm = 0;
+ $SIG{ALRM} = sub { $alrm++ };
+ my $got = Time::HiRes::alarm(2.7);
+ ok $got == 0 or print("# $got\n");
- my $t0 = Time::HiRes::time();
- 1 while Time::HiRes::time() - $t0 <= 1;
+ my $t0 = Time::HiRes::time();
+ 1 while Time::HiRes::time() - $t0 <= 1;
- $got = Time::HiRes::alarm(0);
- ok $got > 0 && $got < 1.8 or print("# $got\n");
+ $got = Time::HiRes::alarm(0);
+ ok $got > 0 && $got < 1.8 or print("# $got\n");
- ok $alrm == 0 or print("# $alrm\n");
+ ok $alrm == 0 or print("# $alrm\n");
- $got = Time::HiRes::alarm(0);
- ok $got == 0 or print("# $got\n");
+ $got = Time::HiRes::alarm(0);
+ ok $got == 0 or print("# $got\n");
}
}
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/clock.t b/gnu/usr.bin/perl/dist/Time-HiRes/t/clock.t
index 64478b015c5..810d63a272f 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/clock.t
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/clock.t
@@ -22,7 +22,7 @@ printf("# have_clock = %d\n", &Time::HiRes::d_clock);
# Ideally, we'd like to test that the timers are rather precise.
# However, if the system is busy, there are no guarantees on how
# quickly we will return. This limit used to be 10%, but that
-# was occasionally triggered falsely.
+# was occasionally triggered falsely.
# So let's try 25%.
# Another possibility might be to print "ok" if the test completes fine
# with (say) 10% slosh, "skip - system may have been busy?" if the test
@@ -33,31 +33,31 @@ my $limit = 0.25; # 25% is acceptable slosh for testing timers
SKIP: {
skip "no clock_gettime", 1
- unless &Time::HiRes::d_clock_gettime && has_symbol("CLOCK_REALTIME");
+ unless &Time::HiRes::d_clock_gettime && has_symbol("CLOCK_REALTIME");
my $ok = 0;
TRY: {
- for my $try (1..3) {
- print("# CLOCK_REALTIME: try = $try\n");
- my $t0 = Time::HiRes::clock_gettime(&CLOCK_REALTIME);
- my $T = 1.5;
- Time::HiRes::sleep($T);
- my $t1 = Time::HiRes::clock_gettime(&CLOCK_REALTIME);
- if ($t0 > 0 && $t1 > $t0) {
- print("# t1 = $t1, t0 = $t0\n");
- my $dt = $t1 - $t0;
- my $rt = abs(1 - $dt / $T);
- print("# dt = $dt, rt = $rt\n");
- if ($rt <= 2 * $limit) {
- $ok = 1;
- last TRY;
- }
- } else {
- print("# Error: t0 = $t0, t1 = $t1\n");
- }
- my $r = rand() + rand();
- printf("# Sleeping for %.6f seconds...\n", $r);
- Time::HiRes::sleep($r);
- }
+ for my $try (1..3) {
+ print("# CLOCK_REALTIME: try = $try\n");
+ my $t0 = Time::HiRes::clock_gettime(&CLOCK_REALTIME);
+ my $T = 1.5;
+ Time::HiRes::sleep($T);
+ my $t1 = Time::HiRes::clock_gettime(&CLOCK_REALTIME);
+ if ($t0 > 0 && $t1 > $t0) {
+ print("# t1 = $t1, t0 = $t0\n");
+ my $dt = $t1 - $t0;
+ my $rt = abs(1 - $dt / $T);
+ print("# dt = $dt, rt = $rt\n");
+ if ($rt <= 2 * $limit) {
+ $ok = 1;
+ last TRY;
+ }
+ } else {
+ print("# Error: t0 = $t0, t1 = $t1\n");
+ }
+ my $r = rand() + rand();
+ printf("# Sleeping for %.6f seconds...\n", $r);
+ Time::HiRes::sleep($r);
+ }
}
ok $ok;
}
@@ -70,7 +70,7 @@ SKIP: {
SKIP: {
skip "no clock_nanosleep", 1
- unless &Time::HiRes::d_clock_nanosleep && has_symbol("CLOCK_REALTIME");
+ unless &Time::HiRes::d_clock_nanosleep && has_symbol("CLOCK_REALTIME");
my $s = 1.5e9;
my $t = Time::HiRes::clock_nanosleep(&CLOCK_REALTIME, $s);
my $r = abs(1 - $t / $s);
@@ -79,7 +79,7 @@ SKIP: {
SKIP: {
skip "no clock", 1 unless &Time::HiRes::d_clock;
- skip "no CLOCKS_PER_SEC", 1 unless has_symbol("CLOCKS_PER_SEC");
+ skip "no CLOCKS_PER_SEC", 1 unless has_symbol("CLOCKS_PER_SEC");
my @clock = Time::HiRes::clock();
# If we have a relatively low precision clock() and we haven't seen much
# CPU usage thus far with clock(), we will want to have a bit longer delay.
@@ -89,13 +89,13 @@ SKIP: {
print("# clock = @clock\n");
for my $i (1..3) {
for (my $j = 0; $j < $delay; $j++) { }
- push @clock, Time::HiRes::clock();
- print("# clock = @clock\n");
+ push @clock, Time::HiRes::clock();
+ print("# clock = @clock\n");
}
ok $clock[0] >= 0 &&
- $clock[1] > $clock[0] &&
- $clock[2] > $clock[1] &&
- $clock[3] > $clock[2];
+ $clock[1] > $clock[0] &&
+ $clock[2] > $clock[1] &&
+ $clock[3] > $clock[2];
}
1;
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/gettimeofday.t b/gnu/usr.bin/perl/dist/Time-HiRes/t/gettimeofday.t
index 9f2fd7e9f7b..05cebbb0554 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/gettimeofday.t
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/gettimeofday.t
@@ -3,8 +3,8 @@ use strict;
BEGIN {
require Time::HiRes;
unless(&Time::HiRes::d_gettimeofday) {
- require Test::More;
- Test::More::plan(skip_all => "no gettimeofday()");
+ require Test::More;
+ Test::More::plan(skip_all => "no gettimeofday()");
}
}
@@ -21,7 +21,7 @@ sleep 1;
my @two = Time::HiRes::gettimeofday();
ok $two[0] > $one[0] || ($two[0] == $one[0] && $two[1] > $one[1])
- or print("# @two is not greater than @one\n");
+ or print("# @two is not greater than @one\n");
my $f = Time::HiRes::time();
ok $f > 850_000_000 or print("# $f too small\n");
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/itimer.t b/gnu/usr.bin/perl/dist/Time-HiRes/t/itimer.t
index 432b2244886..4e4ce6d10f8 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/itimer.t
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/itimer.t
@@ -13,15 +13,15 @@ use Config;
BEGIN {
require Time::HiRes;
unless(defined &Time::HiRes::setitimer
- && defined &Time::HiRes::getitimer
- && has_symbol('ITIMER_VIRTUAL')
- && $Config{sig_name} =~ m/\bVTALRM\b/
- && $^O ne 'nto' # nto: QNX 6 has the API but no implementation
- && $^O ne 'haiku' # haiku: has the API but no implementation
- && $^O ne 'gnu' # GNU/Hurd: has the API but no implementation
+ && defined &Time::HiRes::getitimer
+ && has_symbol('ITIMER_VIRTUAL')
+ && $Config{sig_name} =~ m/\bVTALRM\b/
+ && $^O ne 'nto' # nto: QNX 6 has the API but no implementation
+ && $^O ne 'haiku' # haiku: has the API but no implementation
+ && $^O ne 'gnu' # GNU/Hurd: has the API but no implementation
) {
- require Test::More;
- Test::More::plan(skip_all => "no itimer");
+ require Test::More;
+ Test::More::plan(skip_all => "no itimer");
}
}
@@ -37,7 +37,7 @@ my $r = [Time::HiRes::gettimeofday()];
$SIG{VTALRM} = sub {
$i ? $i-- : Time::HiRes::setitimer(&Time::HiRes::ITIMER_VIRTUAL, 0);
printf("# Tick! $i %s\n", Time::HiRes::tv_interval($r));
-};
+};
printf("# setitimer: %s\n", join(" ",
Time::HiRes::setitimer(&Time::HiRes::ITIMER_VIRTUAL, 0.5, 0.4)));
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/nanosleep.t b/gnu/usr.bin/perl/dist/Time-HiRes/t/nanosleep.t
index 98cc8d96708..ff056379dd9 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/nanosleep.t
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/nanosleep.t
@@ -3,8 +3,8 @@ use strict;
BEGIN {
require Time::HiRes;
unless(&Time::HiRes::d_nanosleep) {
- require Test::More;
- Test::More::plan(skip_all => "no nanosleep()");
+ require Test::More;
+ Test::More::plan(skip_all => "no nanosleep()");
}
}
@@ -14,7 +14,7 @@ use t::Watchdog;
eval { Time::HiRes::nanosleep(-5) };
like $@, qr/::nanosleep\(-5\): negative time not invented yet/,
- "negative time error";
+ "negative time error";
my $one = CORE::time;
Time::HiRes::nanosleep(10_000_000);
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/sleep.t b/gnu/usr.bin/perl/dist/Time-HiRes/t/sleep.t
index 0ab634072de..04516504a29 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/sleep.t
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/sleep.t
@@ -8,7 +8,7 @@ BEGIN { require_ok "Time::HiRes"; }
use Config;
-my $xdefine = '';
+my $xdefine = '';
if (open(XDEFINE, "<", "xdefine")) {
chomp($xdefine = <XDEFINE> || "");
close(XDEFINE);
@@ -22,11 +22,11 @@ my $can_subsecond_alarm =
eval { Time::HiRes::sleep(-1) };
like $@, qr/::sleep\(-1\): negative time not invented yet/,
- "negative time error";
+ "negative time error";
SKIP: {
skip "no subsecond alarm", 2 unless $can_subsecond_alarm;
- my $f = Time::HiRes::time;
+ my $f = Time::HiRes::time;
print("# time...$f\n");
ok 1;
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/stat.t b/gnu/usr.bin/perl/dist/Time-HiRes/t/stat.t
index d5e22acb46f..f2f8e877516 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/stat.t
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/stat.t
@@ -3,13 +3,13 @@ use strict;
BEGIN {
require Time::HiRes;
unless(&Time::HiRes::d_hires_stat) {
- require Test::More;
- Test::More::plan(skip_all => "no hi-res stat");
+ require Test::More;
+ Test::More::plan(skip_all => "no hi-res stat");
}
if($^O =~ /\A(?:cygwin|MSWin)/) {
- require Test::More;
- Test::More::plan(skip_all =>
- "$^O file timestamps not reliable enough for stat test");
+ require Test::More;
+ Test::More::plan(skip_all =>
+ "$^O file timestamps not reliable enough for stat test");
}
}
@@ -50,18 +50,18 @@ my $mi = 0;
my $ss = 0;
for (my $i = 1; $i < @atime; $i++) {
if ($atime[$i] >= $atime[$i-1]) {
- $ai++;
+ $ai++;
}
if ($atime[$i] > int($atime[$i])) {
- $ss++;
+ $ss++;
}
}
for (my $i = 1; $i < @mtime; $i++) {
if ($mtime[$i] >= $mtime[$i-1]) {
- $mi++;
+ $mi++;
}
if ($mtime[$i] > int($mtime[$i])) {
- $ss++;
+ $ss++;
}
}
print("# ai = $ai, mi = $mi, ss = $ss\n");
@@ -70,7 +70,7 @@ print("# ai = $ai, mi = $mi, ss = $ss\n");
SKIP: {
skip "no subsecond timestamps detected", 1 if $ss == 0;
ok $mi/(@mtime-1) >= 0.75 && $ai/(@atime-1) >= 0.75 &&
- $ss/(@mtime+@atime) >= 0.2;
+ $ss/(@mtime+@atime) >= 0.2;
}
my $targetname = "tgt$$";
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/time.t b/gnu/usr.bin/perl/dist/Time-HiRes/t/time.t
index 5db016f4cf2..ad42f47004b 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/time.t
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/time.t
@@ -10,14 +10,14 @@ SKIP: {
skip "no gettimeofday", 1 unless &Time::HiRes::d_gettimeofday;
my ($s, $n, $i) = (0);
for $i (1 .. 100) {
- $s += Time::HiRes::time() - CORE::time();
- $n++;
+ $s += Time::HiRes::time() - CORE::time();
+ $n++;
}
# $s should be, at worst, equal to $n
# (CORE::time() may be rounding down, up, or closest),
# but allow 10% of slop.
ok abs($s) / $n <= 1.10
- or print("# Time::HiRes::time() not close to CORE::time()\n");
+ or print("# Time::HiRes::time() not close to CORE::time()\n");
printf("# s = $s, n = $n, s/n = %s\n", abs($s)/$n);
}
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/ualarm.t b/gnu/usr.bin/perl/dist/Time-HiRes/t/ualarm.t
index 0f9a829a1ad..d478224cbe7 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/ualarm.t
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/ualarm.t
@@ -3,8 +3,8 @@ use strict;
BEGIN {
require Time::HiRes;
unless(&Time::HiRes::d_ualarm) {
- require Test::More;
- Test::More::plan(skip_all => "no ualarm()");
+ require Test::More;
+ Test::More::plan(skip_all => "no ualarm()");
}
}
@@ -25,7 +25,7 @@ SKIP: {
$tick = 0; Time::HiRes::ualarm(10_000); while ($tick == 0) { }
my $three = CORE::time;
ok $one == $two || $two == $three
- or print("# slept too long, $one $two $three\n");
+ or print("# slept too long, $one $two $three\n");
print("# tick = $tick, one = $one, two = $two, three = $three\n");
$tick = 0; Time::HiRes::ualarm(10_000, 10_000); while ($tick < 3) { }
@@ -36,7 +36,7 @@ SKIP: {
eval { Time::HiRes::ualarm(-4) };
like $@, qr/::ualarm\(-4, 0\): negative time not invented yet/,
- "negative time error";
+ "negative time error";
# Find the loop size N (a for() loop 0..N-1)
# that will take more than T seconds.
@@ -44,9 +44,9 @@ like $@, qr/::ualarm\(-4, 0\): negative time not invented yet/,
sub bellish { # Cheap emulation of a bell curve.
my ($min, $max) = @_;
my $rand = ($max - $min) / 5;
- my $sum = 0;
+ my $sum = 0;
for my $i (0..4) {
- $sum += rand($rand);
+ $sum += rand($rand);
}
return $min + $sum;
}
@@ -57,25 +57,25 @@ sub bellish { # Cheap emulation of a bell curve.
for my $n (100_000, 1_100_000, 2_200_000, 4_300_000) {
my $ok;
for my $retry (1..10) {
- my $alarmed = 0;
- local $SIG{ ALRM } = sub { $alarmed++ };
- my $t0 = Time::HiRes::time();
- print("# t0 = $t0\n");
- print("# ualarm($n)\n");
- Time::HiRes::ualarm($n); 1 while $alarmed == 0;
- my $t1 = Time::HiRes::time();
- print("# t1 = $t1\n");
- my $dt = $t1 - $t0;
- print("# dt = $dt\n");
- my $r = $dt / ($n/1e6);
- print("# r = $r\n");
- $ok =
- ($n < 1_000_000 || # Too much noise.
- ($r >= 0.8 && $r <= 1.6));
- last if $ok;
- my $nap = bellish(3, 15);
- printf("# Retrying in %.1f seconds...\n", $nap);
- Time::HiRes::sleep($nap);
+ my $alarmed = 0;
+ local $SIG{ ALRM } = sub { $alarmed++ };
+ my $t0 = Time::HiRes::time();
+ print("# t0 = $t0\n");
+ print("# ualarm($n)\n");
+ Time::HiRes::ualarm($n); 1 while $alarmed == 0;
+ my $t1 = Time::HiRes::time();
+ print("# t1 = $t1\n");
+ my $dt = $t1 - $t0;
+ print("# dt = $dt\n");
+ my $r = $dt / ($n/1e6);
+ print("# r = $r\n");
+ $ok =
+ ($n < 1_000_000 || # Too much noise.
+ ($r >= 0.8 && $r <= 1.6));
+ last if $ok;
+ my $nap = bellish(3, 15);
+ printf("# Retrying in %.1f seconds...\n", $nap);
+ Time::HiRes::sleep($nap);
}
ok $ok or print("# ualarm($n) close enough\n");
}
@@ -89,8 +89,8 @@ for my $n (100_000, 1_100_000, 2_200_000, 4_300_000) {
my($alrm, $t1);
do {
- $alrm = $alrm0;
- $t1 = Time::HiRes::time();
+ $alrm = $alrm0;
+ $t1 = Time::HiRes::time();
} while $t1 - $t0 <= 0.3;
my $got1 = Time::HiRes::ualarm(0);
@@ -101,9 +101,9 @@ for my $n (100_000, 1_100_000, 2_200_000, 4_300_000) {
print("# got1 = $got1\n");
ok $got0 == 0 or print("# $got0\n");
SKIP: {
- skip "alarm interval exceeded", 2 if $t1 - $t0 >= 0.5;
- ok $got1 > 0;
- ok $alrm == 0;
+ skip "alarm interval exceeded", 2 if $t1 - $t0 >= 0.5;
+ ok $got1 > 0;
+ ok $alrm == 0;
}
ok $got1 < 300_000;
my $got2 = Time::HiRes::ualarm(0);
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/usleep.t b/gnu/usr.bin/perl/dist/Time-HiRes/t/usleep.t
index bb66cbe62cb..396341dc083 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/usleep.t
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/usleep.t
@@ -3,8 +3,8 @@ use strict;
BEGIN {
require Time::HiRes;
unless(&Time::HiRes::d_usleep) {
- require Test::More;
- Test::More::plan(skip_all => "no usleep()");
+ require Test::More;
+ Test::More::plan(skip_all => "no usleep()");
}
}
@@ -14,7 +14,7 @@ use t::Watchdog;
eval { Time::HiRes::usleep(-2) };
like $@, qr/::usleep\(-2\): negative time not invented yet/,
- "negative time error";
+ "negative time error";
my $limit = 0.25; # 25% is acceptable slosh for testing timers
@@ -59,8 +59,8 @@ SKIP: {
$msg = "$td went by while sleeping $sleep, ratio $ratio.\n";
SKIP: {
- skip $msg, 1 unless $td < $sleep * (1 + $limit);
- ok $a < $limit or print("# $msg\n");
+ skip $msg, 1 unless $td < $sleep * (1 + $limit);
+ ok $a < $limit or print("# $msg\n");
}
$t0 = Time::HiRes::gettimeofday();
@@ -71,8 +71,8 @@ SKIP: {
$msg = "$td went by while sleeping $sleep, ratio $ratio.\n";
SKIP: {
- skip $msg, 1 unless $td < $sleep * (1 + $limit);
- ok $a < $limit or print("# $msg\n");
+ skip $msg, 1 unless $td < $sleep * (1 + $limit);
+ ok $a < $limit or print("# $msg\n");
}
}
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/t/utime.t b/gnu/usr.bin/perl/dist/Time-HiRes/t/utime.t
index bb4621a9207..e2399b8feb8 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/t/utime.t
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/t/utime.t
@@ -1,92 +1,92 @@
use strict;
sub has_subsecond_file_times {
- require File::Temp;
- require Time::HiRes;
- my ($fh, $filename) = File::Temp::tempfile( "Time-HiRes-utime-XXXXXXXXX" );
- use File::Basename qw[dirname];
- my $dirname = dirname($filename);
- require Cwd;
- $dirname = &Cwd::getcwd if $dirname eq '.';
- print("\n# Testing for subsecond file timestamps (mtime) in $dirname\n");
- close $fh;
- my @mtimes;
- for (1..2) {
- open $fh, '>', $filename;
- print $fh "foo";
+ require File::Temp;
+ require Time::HiRes;
+ my ($fh, $filename) = File::Temp::tempfile( "Time-HiRes-utime-XXXXXXXXX" );
+ use File::Basename qw[dirname];
+ my $dirname = dirname($filename);
+ require Cwd;
+ $dirname = &Cwd::getcwd if $dirname eq '.';
+ print("\n# Testing for subsecond file timestamps (mtime) in $dirname\n");
close $fh;
- push @mtimes, (Time::HiRes::stat($filename))[9];
- Time::HiRes::sleep(.1) if $_ == 1;
- }
- my $delta = $mtimes[1] - $mtimes[0];
- # print STDERR "mtimes = @mtimes, delta = $delta\n";
- unlink $filename;
- my $ok = $delta > 0 && $delta < 1;
- printf("# Subsecond file timestamps in $dirname: %s\n",
- $ok ? "OK" : "NO");
- return $ok;
+ my @mtimes;
+ for (1..2) {
+ open $fh, '>', $filename;
+ print $fh "foo";
+ close $fh;
+ push @mtimes, (Time::HiRes::stat($filename))[9];
+ Time::HiRes::sleep(.1) if $_ == 1;
+ }
+ my $delta = $mtimes[1] - $mtimes[0];
+ # print STDERR "mtimes = @mtimes, delta = $delta\n";
+ unlink $filename;
+ my $ok = $delta > 0 && $delta < 1;
+ printf("# Subsecond file timestamps in $dirname: %s\n",
+ $ok ? "OK" : "NO");
+ return $ok;
}
sub get_filesys_of_tempfile {
- require File::Temp;
- require Time::HiRes;
- my ($fh, $filename) = File::Temp::tempfile( "Time-HiRes-utime-XXXXXXXXX" );
- my $filesys;
- if (open(my $df, "df $filename |")) {
- my @fs;
- while (<$df>) {
- next if /^Filesystem/;
- chomp;
- push @fs, $_;
- }
- if (@fs == 1) {
- if (defined $fs[0] && length($fs[0])) {
- $filesys = $fs[0];
- } else {
- printf("# Got empty result from 'df'\n");
- }
+ require File::Temp;
+ require Time::HiRes;
+ my ($fh, $filename) = File::Temp::tempfile( "Time-HiRes-utime-XXXXXXXXX" );
+ my $filesys;
+ if (open(my $df, "df $filename |")) {
+ my @fs;
+ while (<$df>) {
+ next if /^Filesystem/;
+ chomp;
+ push @fs, $_;
+ }
+ if (@fs == 1) {
+ if (defined $fs[0] && length($fs[0])) {
+ $filesys = $fs[0];
+ } else {
+ printf("# Got empty result from 'df'\n");
+ }
+ } else {
+ printf("# Expected one result from 'df', got %d\n", scalar(@fs));
+ }
} else {
- printf("# Expected one result from 'df', got %d\n", scalar(@fs));
+ # Too noisy to show by default.
+ # Can fail for too many reasons.
+ print "# Failed to run 'df $filename |': $!\n";
}
- } else {
- # Too noisy to show by default.
- # Can fail for too many reasons.
- print "# Failed to run 'df $filename |': $!\n";
- }
- return $filesys;
+ return $filesys;
}
sub get_mount_of_filesys {
- my ($filesys) = @_;
- # netbsd has /sbin/mount
- local $ENV{PATH} = "$ENV{PATH}:/sbin" if $^O =~ /^(?:netbsd)$/;
- if (defined $filesys) {
- my @fs = split(' ', $filesys);
- if (open(my $mount, "mount |")) {
- while (<$mount>) {
- chomp;
- my @mnt = split(' ');
- if ($mnt[0] eq $fs[0]) {
- return $_;
+ my ($filesys) = @_;
+ # netbsd has /sbin/mount
+ local $ENV{PATH} = "$ENV{PATH}:/sbin" if $^O =~ /^(?:netbsd)$/;
+ if (defined $filesys) {
+ my @fs = split(' ', $filesys);
+ if (open(my $mount, "mount |")) {
+ while (<$mount>) {
+ chomp;
+ my @mnt = split(' ');
+ if ($mnt[0] eq $fs[0]) {
+ return $_;
+ }
+ }
+ } else {
+ # Too noisy to show by default.
+ # The mount(8) might not be in the PATH, for example.
+ # Or this might be a completely non-UNIX system.
+ # print "# Failed to run 'mount |': $!\n";
}
- }
- } else {
- # Too noisy to show by default.
- # The mount(8) might not be in the PATH, for example.
- # Or this might be a completely non-UNIX system.
- # print "# Failed to run 'mount |': $!\n";
}
- }
- return;
+ return;
}
sub get_mount_of_tempfile {
- return get_mount_of_filesys(get_filesys_of_tempfile());
+ return get_mount_of_filesys(get_filesys_of_tempfile());
}
sub tempfile_has_noatime_mount {
- my ($mount) = get_mount_of_tempfile();
- return $mount =~ /\bnoatime\b/;
+ my ($mount) = get_mount_of_tempfile();
+ return $mount =~ /\bnoatime\b/;
}
BEGIN {
@@ -94,21 +94,21 @@ BEGIN {
require Test::More;
require File::Temp;
unless(&Time::HiRes::d_hires_utime) {
- Test::More::plan(skip_all => "no hires_utime");
+ Test::More::plan(skip_all => "no hires_utime");
}
unless(&Time::HiRes::d_hires_stat) {
# Being able to read subsecond timestamps is a reasonable
- # prerequisite for being able to write them.
- Test::More::plan(skip_all => "no hires_stat");
+ # prerequisite for being able to write them.
+ Test::More::plan(skip_all => "no hires_stat");
}
unless (&Time::HiRes::d_futimens) {
- Test::More::plan(skip_all => "no futimens()");
+ Test::More::plan(skip_all => "no futimens()");
}
unless (&Time::HiRes::d_utimensat) {
- Test::More::plan(skip_all => "no utimensat()");
+ Test::More::plan(skip_all => "no utimensat()");
}
unless (has_subsecond_file_times()) {
- Test::More::plan(skip_all => "No subsecond file timestamps");
+ Test::More::plan(skip_all => "No subsecond file timestamps");
}
}
@@ -128,117 +128,117 @@ my $atime = 1.111111111;
my $mtime = 2.222222222;
if ($^O eq 'cygwin') {
- # Cygwin timestamps have less precision.
- $atime = 1.1111111;
- $mtime = 2.2222222;
+ # Cygwin timestamps have less precision.
+ $atime = 1.1111111;
+ $mtime = 2.2222222;
}
print "# \$^O = $^O, atime = $atime, mtime = $mtime\n";
my $skip_atime = $^O eq 'netbsd' && tempfile_has_noatime_mount();
if ($skip_atime) {
- printf("# Skipping atime tests because tempfiles seem to be in a filesystem mounted with 'noatime' ($^O)\n'");
+ printf("# Skipping atime tests because tempfiles seem to be in a filesystem mounted with 'noatime' ($^O)\n'");
}
print "# utime \$fh\n";
{
- my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
- is Time::HiRes::utime($atime, $mtime, $fh), 1, "One file changed";
- my ($got_atime, $got_mtime) = ( Time::HiRes::stat($filename) )[8, 9];
- SKIP: {
- skip("noatime mount", 1) if $skip_atime;
- is $got_atime, $atime, "atime set correctly";
- }
- is $got_mtime, $mtime, "mtime set correctly";
+ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
+ is Time::HiRes::utime($atime, $mtime, $fh), 1, "One file changed";
+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($filename) )[8, 9];
+ SKIP: {
+ skip("noatime mount", 1) if $skip_atime;
+ is $got_atime, $atime, "atime set correctly";
+ }
+ is $got_mtime, $mtime, "mtime set correctly";
};
print "#utime \$filename\n";
{
- my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
- is Time::HiRes::utime($atime, $mtime, $filename), 1, "One file changed";
- my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9];
- SKIP: {
- skip("noatime mount", 1) if $skip_atime;
- is $got_atime, $atime, "atime set correctly";
- }
- is $got_mtime, $mtime, "mtime set correctly";
+ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
+ is Time::HiRes::utime($atime, $mtime, $filename), 1, "One file changed";
+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9];
+ SKIP: {
+ skip("noatime mount", 1) if $skip_atime;
+ is $got_atime, $atime, "atime set correctly";
+ }
+ is $got_mtime, $mtime, "mtime set correctly";
};
print "#utime \$filename round-trip\n";
{
- my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
- # this fractional part is not exactly representable
- my $t = 1000000000.12345;
- is Time::HiRes::utime($t, $t, $filename), 1, "One file changed";
- my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9];
- is Time::HiRes::utime($got_atime, $got_mtime, $filename), 1, "One file changed";
- my ($got_atime2, $got_mtime2) = ( Time::HiRes::stat($fh) )[8, 9];
- is $got_atime, $got_atime2, "atime round trip ok";
- is $got_mtime, $got_mtime2, "mtime round trip ok";
+ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
+ # this fractional part is not exactly representable
+ my $t = 1000000000.12345;
+ is Time::HiRes::utime($t, $t, $filename), 1, "One file changed";
+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9];
+ is Time::HiRes::utime($got_atime, $got_mtime, $filename), 1, "One file changed";
+ my ($got_atime2, $got_mtime2) = ( Time::HiRes::stat($fh) )[8, 9];
+ is $got_atime, $got_atime2, "atime round trip ok";
+ is $got_mtime, $got_mtime2, "mtime round trip ok";
};
print "utime \$filename and \$fh\n";
{
- my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
- my ($fh2, $filename2) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
- is Time::HiRes::utime($atime, $mtime, $filename1, $fh2), 2, "Two files changed";
- {
- my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh1) )[8, 9];
- SKIP: {
- skip("noatime mount", 1) if $skip_atime;
- is $got_atime, $atime, "File 1 atime set correctly";
- }
- is $got_mtime, $mtime, "File 1 mtime set correctly";
- }
- {
- my ($got_atime, $got_mtime) = ( Time::HiRes::stat($filename2) )[8, 9];
- SKIP: {
- skip("noatime mount", 1) if $skip_atime;
- is $got_atime, $atime, "File 2 atime set correctly";
- }
- is $got_mtime, $mtime, "File 2 mtime set correctly";
- }
+ my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
+ my ($fh2, $filename2) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
+ is Time::HiRes::utime($atime, $mtime, $filename1, $fh2), 2, "Two files changed";
+ {
+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh1) )[8, 9];
+ SKIP: {
+ skip("noatime mount", 1) if $skip_atime;
+ is $got_atime, $atime, "File 1 atime set correctly";
+ }
+ is $got_mtime, $mtime, "File 1 mtime set correctly";
+ }
+ {
+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($filename2) )[8, 9];
+ SKIP: {
+ skip("noatime mount", 1) if $skip_atime;
+ is $got_atime, $atime, "File 2 atime set correctly";
+ }
+ is $got_mtime, $mtime, "File 2 mtime set correctly";
+ }
};
print "# utime undef sets time to now\n";
{
- my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
- my ($fh2, $filename2) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
-
- my $now = Time::HiRes::time;
- sleep(1);
- is Time::HiRes::utime(undef, undef, $filename1, $fh2), 2, "Two files changed";
-
- {
- my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh1) )[8, 9];
- SKIP: {
- skip("noatime mount", 1) if $skip_atime;
- cmp_ok $got_atime, '>=', $now, "File 1 atime set correctly";
- }
- cmp_ok $got_mtime, '>=', $now, "File 1 mtime set correctly";
- }
- {
- my ($got_atime, $got_mtime) = ( Time::HiRes::stat($filename2) )[8, 9];
- SKIP: {
- skip("noatime mount", 1) if $skip_atime;
- cmp_ok $got_atime, '>=', $now, "File 2 atime set correctly";
- }
- cmp_ok $got_mtime, '>=', $now, "File 2 mtime set correctly";
- }
+ my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
+ my ($fh2, $filename2) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 );
+
+ my $now = Time::HiRes::time;
+ sleep(1);
+ is Time::HiRes::utime(undef, undef, $filename1, $fh2), 2, "Two files changed";
+
+ {
+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh1) )[8, 9];
+ SKIP: {
+ skip("noatime mount", 1) if $skip_atime;
+ cmp_ok $got_atime, '>=', $now, "File 1 atime set correctly";
+ }
+ cmp_ok $got_mtime, '>=', $now, "File 1 mtime set correctly";
+ }
+ {
+ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($filename2) )[8, 9];
+ SKIP: {
+ skip("noatime mount", 1) if $skip_atime;
+ cmp_ok $got_atime, '>=', $now, "File 2 atime set correctly";
+ }
+ cmp_ok $got_mtime, '>=', $now, "File 2 mtime set correctly";
+ }
};
print "# negative atime dies\n";
{
- eval { Time::HiRes::utime(-4, $mtime) };
- like $@, qr/::utime\(-4, 2\.22222\): negative time not invented yet/,
- "negative time error";
+ eval { Time::HiRes::utime(-4, $mtime) };
+ like $@, qr/::utime\(-4, 2\.22222\): negative time not invented yet/,
+ "negative time error";
};
print "# negative mtime dies;\n";
{
- eval { Time::HiRes::utime($atime, -4) };
- like $@, qr/::utime\(1.11111, -4\): negative time not invented yet/,
- "negative time error";
+ eval { Time::HiRes::utime($atime, -4) };
+ like $@, qr/::utime\(1.11111, -4\): negative time not invented yet/,
+ "negative time error";
};
done_testing();
diff --git a/gnu/usr.bin/perl/dist/Time-HiRes/typemap b/gnu/usr.bin/perl/dist/Time-HiRes/typemap
index ffe60e3694a..2772c92582e 100644
--- a/gnu/usr.bin/perl/dist/Time-HiRes/typemap
+++ b/gnu/usr.bin/perl/dist/Time-HiRes/typemap
@@ -1,319 +1,319 @@
# basic C types
-int T_IV
-unsigned T_UV
-unsigned int T_UV
-long T_IV
-unsigned long T_UV
-short T_IV
-unsigned short T_UV
-char T_CHAR
-unsigned char T_U_CHAR
-char * T_PV
-unsigned char * T_PV
-const char * T_PV
-caddr_t T_PV
-wchar_t * T_PV
-wchar_t T_IV
-bool_t T_IV
-size_t T_UV
-ssize_t T_IV
-time_t T_NV
-unsigned long * T_OPAQUEPTR
-char ** T_PACKEDARRAY
-void * T_PTR
-Time_t * T_PV
-SV * T_SV
-SVREF T_SVREF
-AV * T_AVREF
-HV * T_HVREF
-CV * T_CVREF
+int T_IV
+unsigned T_UV
+unsigned int T_UV
+long T_IV
+unsigned long T_UV
+short T_IV
+unsigned short T_UV
+char T_CHAR
+unsigned char T_U_CHAR
+char * T_PV
+unsigned char * T_PV
+const char * T_PV
+caddr_t T_PV
+wchar_t * T_PV
+wchar_t T_IV
+bool_t T_IV
+size_t T_UV
+ssize_t T_IV
+time_t T_NV
+unsigned long * T_OPAQUEPTR
+char ** T_PACKEDARRAY
+void * T_PTR
+Time_t * T_PV
+SV * T_SV
+SVREF T_SVREF
+AV * T_AVREF
+HV * T_HVREF
+CV * T_CVREF
clockid_t T_IV
-IV T_IV
-UV T_UV
+IV T_IV
+UV T_UV
NV T_NV
-I32 T_IV
-I16 T_IV
-I8 T_IV
-STRLEN T_UV
-U32 T_U_LONG
-U16 T_U_SHORT
-U8 T_UV
-Result T_U_CHAR
-Boolean T_BOOL
+I32 T_IV
+I16 T_IV
+I8 T_IV
+STRLEN T_UV
+U32 T_U_LONG
+U16 T_U_SHORT
+U8 T_UV
+Result T_U_CHAR
+Boolean T_BOOL
float T_FLOAT
-double T_DOUBLE
-SysRet T_SYSRET
-SysRetLong T_SYSRET
-FILE * T_STDIO
-PerlIO * T_INOUT
-FileHandle T_PTROBJ
-InputStream T_IN
-InOutStream T_INOUT
-OutputStream T_OUT
-bool T_BOOL
+double T_DOUBLE
+SysRet T_SYSRET
+SysRetLong T_SYSRET
+FILE * T_STDIO
+PerlIO * T_INOUT
+FileHandle T_PTROBJ
+InputStream T_IN
+InOutStream T_INOUT
+OutputStream T_OUT
+bool T_BOOL
#############################################################################
INPUT
T_SV
- $var = $arg
+ $var = $arg
T_SVREF
- if (SvROK($arg))
- $var = (SV*)SvRV($arg);
- else
- Perl_croak(aTHX_ \"$var is not a reference\")
+ if (SvROK($arg))
+ $var = (SV*)SvRV($arg);
+ else
+ Perl_croak(aTHX_ \"$var is not a reference\")
T_AVREF
- if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV)
- $var = (AV*)SvRV($arg);
- else
- Perl_croak(aTHX_ \"$var is not an array reference\")
+ if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVAV)
+ $var = (AV*)SvRV($arg);
+ else
+ Perl_croak(aTHX_ \"$var is not an array reference\")
T_HVREF
- if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVHV)
- $var = (HV*)SvRV($arg);
- else
- Perl_croak(aTHX_ \"$var is not a hash reference\")
+ if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVHV)
+ $var = (HV*)SvRV($arg);
+ else
+ Perl_croak(aTHX_ \"$var is not a hash reference\")
T_CVREF
- if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVCV)
- $var = (CV*)SvRV($arg);
- else
- Perl_croak(aTHX_ \"$var is not a code reference\")
+ if (SvROK($arg) && SvTYPE(SvRV($arg))==SVt_PVCV)
+ $var = (CV*)SvRV($arg);
+ else
+ Perl_croak(aTHX_ \"$var is not a code reference\")
T_SYSRET
- $var NOT IMPLEMENTED
+ $var NOT IMPLEMENTED
T_UV
- $var = ($type)SvUV($arg)
+ $var = ($type)SvUV($arg)
T_IV
- $var = ($type)SvIV($arg)
+ $var = ($type)SvIV($arg)
T_INT
- $var = (int)SvIV($arg)
+ $var = (int)SvIV($arg)
T_ENUM
- $var = ($type)SvIV($arg)
+ $var = ($type)SvIV($arg)
T_BOOL
- $var = (bool)SvTRUE($arg)
+ $var = (bool)SvTRUE($arg)
T_U_INT
- $var = (unsigned int)SvUV($arg)
+ $var = (unsigned int)SvUV($arg)
T_SHORT
- $var = (short)SvIV($arg)
+ $var = (short)SvIV($arg)
T_U_SHORT
- $var = (unsigned short)SvUV($arg)
+ $var = (unsigned short)SvUV($arg)
T_LONG
- $var = (long)SvIV($arg)
+ $var = (long)SvIV($arg)
T_U_LONG
- $var = (unsigned long)SvUV($arg)
+ $var = (unsigned long)SvUV($arg)
T_CHAR
- $var = (char)*SvPV_nolen($arg)
+ $var = (char)*SvPV_nolen($arg)
T_U_CHAR
- $var = (unsigned char)SvUV($arg)
+ $var = (unsigned char)SvUV($arg)
T_FLOAT
- $var = (float)SvNV($arg)
+ $var = (float)SvNV($arg)
T_NV
- $var = ($type)SvNV($arg)
+ $var = ($type)SvNV($arg)
T_DOUBLE
- $var = (double)SvNV($arg)
+ $var = (double)SvNV($arg)
T_PV
- $var = ($type)SvPV_nolen($arg)
+ $var = ($type)SvPV_nolen($arg)
T_PTR
- $var = INT2PTR($type,SvIV($arg))
+ $var = INT2PTR($type,SvIV($arg))
T_PTRREF
- if (SvROK($arg)) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = INT2PTR($type,tmp);
- }
- else
- Perl_croak(aTHX_ \"$var is not a reference\")
+ if (SvROK($arg)) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type,tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"$var is not a reference\")
T_REF_IV_REF
- if (sv_isa($arg, \"${ntype}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = *INT2PTR($type *, tmp);
- }
- else
- Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = *INT2PTR($type *, tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
T_REF_IV_PTR
- if (sv_isa($arg, \"${ntype}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = INT2PTR($type, tmp);
- }
- else
- Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type, tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
T_PTROBJ
- if (sv_derived_from($arg, \"${ntype}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = INT2PTR($type,tmp);
- }
- else
- Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+ if (sv_derived_from($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type,tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
T_PTRDESC
- if (sv_isa($arg, \"${ntype}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- ${type}_desc = (\U${type}_DESC\E*) tmp;
- $var = ${type}_desc->ptr;
- }
- else
- Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ ${type}_desc = (\U${type}_DESC\E*) tmp;
+ $var = ${type}_desc->ptr;
+ }
+ else
+ Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
T_REFREF
- if (SvROK($arg)) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = *INT2PTR($type,tmp);
- }
- else
- Perl_croak(aTHX_ \"$var is not a reference\")
+ if (SvROK($arg)) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = *INT2PTR($type,tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"$var is not a reference\")
T_REFOBJ
- if (sv_isa($arg, \"${ntype}\")) {
- IV tmp = SvIV((SV*)SvRV($arg));
- $var = *INT2PTR($type,tmp);
- }
- else
- Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
+ if (sv_isa($arg, \"${ntype}\")) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = *INT2PTR($type,tmp);
+ }
+ else
+ Perl_croak(aTHX_ \"$var is not of type ${ntype}\")
T_OPAQUE
- $var = *($type *)SvPV_nolen($arg)
+ $var = *($type *)SvPV_nolen($arg)
T_OPAQUEPTR
- $var = ($type)SvPV_nolen($arg)
+ $var = ($type)SvPV_nolen($arg)
T_PACKED
- $var = XS_unpack_$ntype($arg)
+ $var = XS_unpack_$ntype($arg)
T_PACKEDARRAY
- $var = XS_unpack_$ntype($arg)
+ $var = XS_unpack_$ntype($arg)
T_CALLBACK
- $var = make_perl_cb_$type($arg)
+ $var = make_perl_cb_$type($arg)
T_ARRAY
- U32 ix_$var = $argoff;
- $var = $ntype(items -= $argoff);
- while (items--) {
- DO_ARRAY_ELEM;
- ix_$var++;
- }
- /* this is the number of elements in the array */
- ix_$var -= $argoff
+ U32 ix_$var = $argoff;
+ $var = $ntype(items -= $argoff);
+ while (items--) {
+ DO_ARRAY_ELEM;
+ ix_$var++;
+ }
+ /* this is the number of elements in the array */
+ ix_$var -= $argoff
T_STDIO
- $var = PerlIO_findFILE(IoIFP(sv_2io($arg)))
+ $var = PerlIO_findFILE(IoIFP(sv_2io($arg)))
T_IN
- $var = IoIFP(sv_2io($arg))
+ $var = IoIFP(sv_2io($arg))
T_INOUT
- $var = IoIFP(sv_2io($arg))
+ $var = IoIFP(sv_2io($arg))
T_OUT
- $var = IoOFP(sv_2io($arg))
+ $var = IoOFP(sv_2io($arg))
#############################################################################
OUTPUT
T_SV
- $arg = $var;
+ $arg = $var;
T_SVREF
- $arg = newRV((SV*)$var);
+ $arg = newRV((SV*)$var);
T_AVREF
- $arg = newRV((SV*)$var);
+ $arg = newRV((SV*)$var);
T_HVREF
- $arg = newRV((SV*)$var);
+ $arg = newRV((SV*)$var);
T_CVREF
- $arg = newRV((SV*)$var);
+ $arg = newRV((SV*)$var);
T_IV
- sv_setiv($arg, (IV)$var);
+ sv_setiv($arg, (IV)$var);
T_UV
- sv_setuv($arg, (UV)$var);
+ sv_setuv($arg, (UV)$var);
T_INT
- sv_setiv($arg, (IV)$var);
+ sv_setiv($arg, (IV)$var);
T_SYSRET
- if ($var != -1) {
- if ($var == 0)
- sv_setpvn($arg, "0 but true", 10);
- else
- sv_setiv($arg, (IV)$var);
- }
+ if ($var != -1) {
+ if ($var == 0)
+ sv_setpvn($arg, "0 but true", 10);
+ else
+ sv_setiv($arg, (IV)$var);
+ }
T_ENUM
- sv_setiv($arg, (IV)$var);
+ sv_setiv($arg, (IV)$var);
T_BOOL
- $arg = boolSV($var);
+ $arg = boolSV($var);
T_U_INT
- sv_setuv($arg, (UV)$var);
+ sv_setuv($arg, (UV)$var);
T_SHORT
- sv_setiv($arg, (IV)$var);
+ sv_setiv($arg, (IV)$var);
T_U_SHORT
- sv_setuv($arg, (UV)$var);
+ sv_setuv($arg, (UV)$var);
T_LONG
- sv_setiv($arg, (IV)$var);
+ sv_setiv($arg, (IV)$var);
T_U_LONG
- sv_setuv($arg, (UV)$var);
+ sv_setuv($arg, (UV)$var);
T_CHAR
- sv_setpvn($arg, (char *)&$var, 1);
+ sv_setpvn($arg, (char *)&$var, 1);
T_U_CHAR
- sv_setuv($arg, (UV)$var);
+ sv_setuv($arg, (UV)$var);
T_FLOAT
- sv_setnv($arg, (double)$var);
+ sv_setnv($arg, (double)$var);
T_NV
- sv_setnv($arg, (NV)$var);
+ sv_setnv($arg, (NV)$var);
T_DOUBLE
- sv_setnv($arg, (double)$var);
+ sv_setnv($arg, (double)$var);
T_PV
- sv_setpv((SV*)$arg, $var);
+ sv_setpv((SV*)$arg, $var);
T_PTR
- sv_setiv($arg, PTR2IV($var));
+ sv_setiv($arg, PTR2IV($var));
T_PTRREF
- sv_setref_pv($arg, Nullch, (void*)$var);
+ sv_setref_pv($arg, Nullch, (void*)$var);
T_REF_IV_REF
- sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var));
+ sv_setref_pv($arg, \"${ntype}\", (void*)new $ntype($var));
T_REF_IV_PTR
- sv_setref_pv($arg, \"${ntype}\", (void*)$var);
+ sv_setref_pv($arg, \"${ntype}\", (void*)$var);
T_PTROBJ
- sv_setref_pv($arg, \"${ntype}\", (void*)$var);
+ sv_setref_pv($arg, \"${ntype}\", (void*)$var);
T_PTRDESC
- sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var));
+ sv_setref_pv($arg, \"${ntype}\", (void*)new\U${type}_DESC\E($var));
T_REFREF
- NOT_IMPLEMENTED
+ NOT_IMPLEMENTED
T_REFOBJ
- NOT IMPLEMENTED
+ NOT IMPLEMENTED
T_OPAQUE
- sv_setpvn($arg, (char *)&$var, sizeof($var));
+ sv_setpvn($arg, (char *)&$var, sizeof($var));
T_OPAQUEPTR
- sv_setpvn($arg, (char *)$var, sizeof(*$var));
+ sv_setpvn($arg, (char *)$var, sizeof(*$var));
T_PACKED
- XS_pack_$ntype($arg, $var);
+ XS_pack_$ntype($arg, $var);
T_PACKEDARRAY
- XS_pack_$ntype($arg, $var, count_$ntype);
-T_DATAUNIT
- sv_setpvn($arg, $var.chp(), $var.size());
+ XS_pack_$ntype($arg, $var, count_$ntype);
+T_DATAUNIT
+ sv_setpvn($arg, $var.chp(), $var.size());
T_CALLBACK
- sv_setpvn($arg, $var.context.value().chp(),
- $var.context.value().size());
+ sv_setpvn($arg, $var.context.value().chp(),
+ $var.context.value().size());
T_ARRAY
- {
- U32 ix_$var;
- EXTEND(SP,size_$var);
- for (ix_$var = 0; ix_$var < size_$var; ix_$var++) {
- ST(ix_$var) = sv_newmortal();
- DO_ARRAY_ELEM
- }
+ {
+ U32 ix_$var;
+ EXTEND(SP,size_$var);
+ for (ix_$var = 0; ix_$var < size_$var; ix_$var++) {
+ ST(ix_$var) = sv_newmortal();
+ DO_ARRAY_ELEM
}
+ }
T_STDIO
- {
- GV *gv = (GV *)sv_newmortal();
- PerlIO *fp = PerlIO_importFILE($var,0);
- gv_init(gv, gv_stashpv("$Package",1),"__ANONIO__",10,0);
- if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) )
- sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
- else
- $arg = &PL_sv_undef;
- }
+ {
+ GV *gv = (GV *)sv_newmortal();
+ PerlIO *fp = PerlIO_importFILE($var,0);
+ gv_init(gv, gv_stashpv("$Package",1),"__ANONIO__",10,0);
+ if ( fp && do_open(gv, "+<&", 3, FALSE, 0, 0, fp) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
T_IN
- {
- GV *gv = (GV *)sv_newmortal();
- gv_init(gv, gv_stashpv("$Package",1),"__ANONIO__",10,0);
- if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) )
- sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
- else
- $arg = &PL_sv_undef;
- }
+ {
+ GV *gv = (GV *)sv_newmortal();
+ gv_init(gv, gv_stashpv("$Package",1),"__ANONIO__",10,0);
+ if ( do_open(gv, "<&", 2, FALSE, 0, 0, $var) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
T_INOUT
- {
- GV *gv = (GV *)sv_newmortal();
- gv_init(gv, gv_stashpv("$Package",1),"__ANONIO__",10,0);
- if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) )
- sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
- else
- $arg = &PL_sv_undef;
- }
+ {
+ GV *gv = (GV *)sv_newmortal();
+ gv_init(gv, gv_stashpv("$Package",1),"__ANONIO__",10,0);
+ if ( do_open(gv, "+<&", 3, FALSE, 0, 0, $var) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
T_OUT
- {
- GV *gv = (GV *)sv_newmortal();
- gv_init(gv, gv_stashpv("$Package",1),"__ANONIO__",10,0);
- if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
- sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
- else
- $arg = &PL_sv_undef;
- }
+ {
+ GV *gv = (GV *)sv_newmortal();
+ gv_init(gv, gv_stashpv("$Package",1),"__ANONIO__",10,0);
+ if ( do_open(gv, "+>&", 3, FALSE, 0, 0, $var) )
+ sv_setsv($arg, sv_bless(newRV((SV*)gv), gv_stashpv("$Package",1)));
+ else
+ $arg = &PL_sv_undef;
+ }
diff --git a/gnu/usr.bin/perl/dist/XSLoader/Makefile.PL b/gnu/usr.bin/perl/dist/XSLoader/Makefile.PL
index 69b52340bdf..c7cdbec7707 100644
--- a/gnu/usr.bin/perl/dist/XSLoader/Makefile.PL
+++ b/gnu/usr.bin/perl/dist/XSLoader/Makefile.PL
@@ -5,16 +5,24 @@
# - Fill in your dependencies in PREREQ_PM
# Alternatively, you can say the hell with this and use h2xs.
+use strict;
+use warnings;
+
use ExtUtils::MakeMaker;
use ExtUtils::MM_Unix;
+
eval 'use ExtUtils::MakeMaker::Coverage';
-$PACKAGE = 'XSLoader';
-($PACKAGE_FILE = $PACKAGE) =~ s|::|/|g;
-$LAST_API_CHANGE = 0;
+my $PACKAGE = 'XSLoader';
+(my $PACKAGE_FILE = $PACKAGE) =~ s|::|/|g;
+my $LAST_API_CHANGE = 0;
-$CURRENT_VERSION = ${$PACKAGE.'::VERSION'};
-$NEW_VERSION = ExtUtils::MM_Unix->parse_version("XSLoader_pm.PL");
+my $CURRENT_VERSION;
+{
+ no strict 'refs';
+ $CURRENT_VERSION = ${$PACKAGE.'::VERSION'};
+}
+my $NEW_VERSION = ExtUtils::MM_Unix->parse_version("XSLoader_pm.PL");
eval "require $PACKAGE";
diff --git a/gnu/usr.bin/perl/dist/threads-shared/lib/threads/shared.pm b/gnu/usr.bin/perl/dist/threads-shared/lib/threads/shared.pm
index 45ad1549791..bd0e4372cfd 100644
--- a/gnu/usr.bin/perl/dist/threads-shared/lib/threads/shared.pm
+++ b/gnu/usr.bin/perl/dist/threads-shared/lib/threads/shared.pm
@@ -8,7 +8,7 @@ use Config;
use Scalar::Util qw(reftype refaddr blessed);
-our $VERSION = '1.60'; # Please update the pod, too.
+our $VERSION = '1.61'; # Please update the pod, too.
my $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
@@ -196,7 +196,7 @@ threads::shared - Perl extension for sharing data structures between threads
=head1 VERSION
-This document describes threads::shared version 1.60
+This document describes threads::shared version 1.61
=head1 SYNOPSIS
diff --git a/gnu/usr.bin/perl/dist/threads-shared/shared.xs b/gnu/usr.bin/perl/dist/threads-shared/shared.xs
index 6cdf094d275..858c6d62fd8 100644
--- a/gnu/usr.bin/perl/dist/threads-shared/shared.xs
+++ b/gnu/usr.bin/perl/dist/threads-shared/shared.xs
@@ -818,12 +818,19 @@ sharedsv_scalar_store(pTHX_ SV *sv, SV *ssv)
SV *obj = SvRV(sv);
SV *sobj = Perl_sharedsv_find(aTHX_ obj);
if (sobj) {
+ SV* tmpref;
SHARED_CONTEXT;
- (void)SvUPGRADE(ssv, SVt_RV);
- sv_setsv_nomg(ssv, &PL_sv_undef);
+ /* Creating a tmp ref to sobj then assigning it to ssv ensures
+ * that any previous contents of ssv are correctly freed
+ * by sv_setsv(). Not sure if there is a better, API-legal way
+ * to achieve this */
+ tmpref = newSV_type(SVt_RV);
+ SvRV_set(tmpref, sobj);
+ SvROK_on(tmpref);
+ SvREFCNT_inc_simple_NN(sobj);
+ sv_setsv_nomg(ssv, tmpref);
+ SvREFCNT_dec_NN(tmpref);
- SvRV_set(ssv, SvREFCNT_inc(sobj));
- SvROK_on(ssv);
if (SvOBJECT(sobj)) {
/* Remove any old blessing */
SvREFCNT_dec(SvSTASH(sobj));
diff --git a/gnu/usr.bin/perl/dist/threads-shared/t/stress.t b/gnu/usr.bin/perl/dist/threads-shared/t/stress.t
index e3c1441288e..ccdeb0eaafd 100755
--- a/gnu/usr.bin/perl/dist/threads-shared/t/stress.t
+++ b/gnu/usr.bin/perl/dist/threads-shared/t/stress.t
@@ -12,7 +12,7 @@ BEGIN {
exit(0);
}
- # http://lists.alioth.debian.org/pipermail/perl-maintainers/2011-June/002285.html
+ # https://lists.alioth.debian.org/pipermail/perl-maintainers/2011-June/002285.html
# There _is_ TLS support on m68k, but this stress test is overwhelming
# for the hardware
if ($^O eq 'linux' && $Config{archname} =~ /^m68k/) {
@@ -83,7 +83,7 @@ use threads::shared;
print "# Looping for $busycount iterations should take about 0.025s\n";
}
- my $TIMEOUT = 600;
+ my $TIMEOUT = 60;
my $mutex = 1;
share($mutex);
@@ -179,7 +179,7 @@ use threads::shared;
} elsif ($timeouts) {
# Frequently fails under MSWin32 due to deadlocking bug in Windows
# hence test is TODO under MSWin32
- # http://rt.perl.org/rt3/Public/Bug/Display.html?id=41574
+ # https://rt.perl.org/rt3/Public/Bug/Display.html?id=41574
# http://support.microsoft.com/kb/175332
if ($^O eq 'MSWin32') {
print("not ok 1 # TODO - not reliable under MSWin32\n")
diff --git a/gnu/usr.bin/perl/dist/threads/lib/threads.pm b/gnu/usr.bin/perl/dist/threads/lib/threads.pm
index 1b99567ef23..ee201a2bea0 100644
--- a/gnu/usr.bin/perl/dist/threads/lib/threads.pm
+++ b/gnu/usr.bin/perl/dist/threads/lib/threads.pm
@@ -5,7 +5,7 @@ use 5.008;
use strict;
use warnings;
-our $VERSION = '2.22'; # remember to update version in POD!
+our $VERSION = '2.25'; # remember to update version in POD!
my $XS_VERSION = $VERSION;
$VERSION = eval $VERSION;
@@ -134,13 +134,13 @@ threads - Perl interpreter-based threads
=head1 VERSION
-This document describes threads version 2.21
+This document describes threads version 2.25
=head1 WARNING
The "interpreter-based threads" provided by Perl are not the fast, lightweight
system for multitasking that one might expect or hope for. Threads are
-implemented in a way that make them easy to misuse. Few people know how to
+implemented in a way that makes them easy to misuse. Few people know how to
use them correctly or will be able to provide help.
The use of interpreter-based threads in perl is officially
@@ -914,7 +914,7 @@ C<-E<gt>import()>) after any threads are started, and in such a way that no
other threads are started afterwards.
If the above does not work, or is not adequate for your application, then file
-a bug report on L<http://rt.cpan.org/Public/> against the problematic module.
+a bug report on L<https://rt.cpan.org/Public/> against the problematic module.
=item Memory consumption
@@ -1090,7 +1090,7 @@ determine whether your system supports it.
In prior perl versions, spawning threads with open directory handles would
crash the interpreter.
-L<[perl #75154]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75154>
+L<[perl #75154]|https://rt.perl.org/rt3/Public/Bug/Display.html?id=75154>
=item Detached threads and global destruction
@@ -1118,8 +1118,8 @@ unreferenced scalars. However, such warnings are harmless, and may safely be
ignored.
You can search for L<threads> related bug reports at
-L<http://rt.cpan.org/Public/>. If needed submit any new bugs, problems,
-patches, etc. to: L<http://rt.cpan.org/Public/Dist/Display.html?Name=threads>
+L<https://rt.cpan.org/Public/>. If needed submit any new bugs, problems,
+patches, etc. to: L<https://rt.cpan.org/Public/Dist/Display.html?Name=threads>
=back
@@ -1137,14 +1137,14 @@ L<https://github.com/Dual-Life/threads>
L<threads::shared>, L<perlthrtut>
-L<http://www.perl.com/pub/a/2002/06/11/threads.html> and
-L<http://www.perl.com/pub/a/2002/09/04/threads.html>
+L<https://www.perl.com/pub/a/2002/06/11/threads.html> and
+L<https://www.perl.com/pub/a/2002/09/04/threads.html>
Perl threads mailing list:
-L<http://lists.perl.org/list/ithreads.html>
+L<https://lists.perl.org/list/ithreads.html>
Stack size discussion:
-L<http://www.perlmonks.org/?node_id=532956>
+L<https://www.perlmonks.org/?node_id=532956>
Sample code in the I<examples> directory of this distribution on CPAN.
diff --git a/gnu/usr.bin/perl/dist/threads/threads.xs b/gnu/usr.bin/perl/dist/threads/threads.xs
index 3da9165c274..ab64dc0f845 100644
--- a/gnu/usr.bin/perl/dist/threads/threads.xs
+++ b/gnu/usr.bin/perl/dist/threads/threads.xs
@@ -676,7 +676,7 @@ S_ithread_run(void * arg)
}
/* At this point, the interpreter may have been freed, so call
- * free in the the context of of the 'main' interpreter which
+ * free in the context of the 'main' interpreter which
* can't have been freed due to the veto_cleanup mechanism.
*/
aTHX = MY_POOL.main_thread.interp;
diff --git a/gnu/usr.bin/perl/doio.c b/gnu/usr.bin/perl/doio.c
index 0cc4e554045..13d412a35e2 100644
--- a/gnu/usr.bin/perl/doio.c
+++ b/gnu/usr.bin/perl/doio.c
@@ -265,6 +265,21 @@ Perl_my_mkstemp_cloexec(char *templte)
#endif
}
+int
+Perl_my_mkostemp_cloexec(char *templte, int flags)
+{
+ dVAR;
+ PERL_ARGS_ASSERT_MY_MKOSTEMP_CLOEXEC;
+#if defined(O_CLOEXEC)
+ DO_ONEOPEN_EXPERIMENTING_CLOEXEC(
+ PL_strategy_mkstemp,
+ Perl_my_mkostemp(templte, flags | O_CLOEXEC),
+ Perl_my_mkostemp(templte, flags));
+#else
+ DO_ONEOPEN_THEN_CLOEXEC(Perl_my_mkostemp(templte, flags));
+#endif
+}
+
#ifdef HAS_PIPE
int
Perl_PerlProc_pipe_cloexec(pTHX_ int *pipefd)
@@ -369,7 +384,7 @@ S_openn_setup(pTHX_ GV *gv, char *mode, PerlIO **saveifp, PerlIO **saveofp,
else {
const int old_fd = PerlIO_fileno(IoIFP(io));
- if (old_fd >= 0 && old_fd <= PL_maxsysfd) {
+ if (inRANGE(old_fd, 0, PL_maxsysfd)) {
/* This is one of the original STD* handles */
*saveifp = IoIFP(io);
*saveofp = IoOFP(io);
@@ -759,7 +774,7 @@ Perl_do_open6(pTHX_ GV *gv, const char *oname, STRLEN len,
Perl_croak(aTHX_ "More than one argument to '>%c' open",IoTYPE_STD);
}
}
- else {
+ else {
if (num_svs) {
fp = PerlIO_openn(aTHX_ type,mode,-1,0,0,NULL,num_svs,svp);
}
@@ -1779,7 +1794,17 @@ Perl_io_close(pTHX_ IO *io, GV *gv, bool not_implicit, bool warn_on_fail)
if (IoIFP(io)) {
if (IoTYPE(io) == IoTYPE_PIPE) {
- const int status = PerlProc_pclose(IoIFP(io));
+ PerlIO *fh = IoIFP(io);
+ int status;
+
+ /* my_pclose() can propagate signals which might bypass any code
+ after the call here if the signal handler throws an exception.
+ This would leave the handle in the IO object and try to close it again
+ when the SV is destroyed on unwind or global destruction.
+ So NULL it early.
+ */
+ IoOFP(io) = IoIFP(io) = NULL;
+ status = PerlProc_pclose(fh);
if (not_implicit) {
STATUS_NATIVE_CHILD_SET(status);
retval = (STATUS_UNIX == 0);
@@ -2394,7 +2419,7 @@ Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
for (s = cmd; *s; s++) {
if (*s != ' ' && !isALPHA(*s) &&
- strchr("$&*(){}[]'\";\\|?<>~`\n",*s)) {
+ memCHRs("$&*(){}[]'\";\\|?<>~`\n",*s)) {
if (*s == '\n' && !s[1]) {
*s = '\0';
break;
@@ -2469,7 +2494,7 @@ Perl_apply(pTHX_ I32 type, SV **mark, SV **sp)
PERL_UNUSED_VAR(what); /* may not be used depending on compile options */
/* Doing this ahead of the switch statement preserves the old behaviour,
- where attempting to use kill as a taint test test would fail on
+ where attempting to use kill as a taint test would fail on
platforms where kill was not defined. */
#ifndef HAS_KILL
if (type == OP_KILL)
diff --git a/gnu/usr.bin/perl/doop.c b/gnu/usr.bin/perl/doop.c
index 54e35f10a68..0037c2458a6 100644
--- a/gnu/usr.bin/perl/doop.c
+++ b/gnu/usr.bin/perl/doop.c
@@ -22,6 +22,7 @@
#include "EXTERN.h"
#define PERL_IN_DOOP_C
#include "perl.h"
+#include "invlist_inline.h"
#ifndef PERL_MICRO
#include <signal.h>
@@ -29,25 +30,26 @@
/* Helper function for do_trans().
- * Handles non-utf8 cases(*) not involving the /c, /d, /s flags,
- * and where search and replacement charlists aren't identical.
- * (*) i.e. where the search and replacement charlists are non-utf8. sv may
- * or may not be utf8.
+ * Handles cases where the search and replacement charlists aren't UTF-8,
+ * aren't identical, and neither the /d nor /s flag is present.
+ *
+ * sv may or may not be utf8. Note that no code point above 255 can possibly
+ * be in the to-translate set
*/
STATIC Size_t
-S_do_trans_simple(pTHX_ SV * const sv)
+S_do_trans_simple(pTHX_ SV * const sv, const OPtrans_map * const tbl)
{
Size_t matches = 0;
STRLEN len;
U8 *s = (U8*)SvPV_nomg(sv,len);
U8 * const send = s+len;
- const OPtrans_map * const tbl = (OPtrans_map*)cPVOP->op_pv;
PERL_ARGS_ASSERT_DO_TRANS_SIMPLE;
-
- if (!tbl)
- Perl_croak(aTHX_ "panic: do_trans_simple line %d",__LINE__);
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "%s: %d: entering do_trans_simple:"
+ " input sv:\n",
+ __FILE__, __LINE__));
+ DEBUG_y(sv_dump(sv));
/* First, take care of non-UTF-8 input strings, because they're easy */
if (!SvUTF8(sv)) {
@@ -66,7 +68,10 @@ S_do_trans_simple(pTHX_ SV * const sv)
U8 *d;
U8 *dstart;
- /* Allow for expansion: $_="a".chr(400); tr/a/\xFE/, FE needs encoding */
+ /* Allow for worst-case expansion: Each input byte can become 2. For a
+ * given input character, this happens when it occupies a single byte
+ * under UTF-8, but is to be translated to something that occupies two:
+ * $_="a".chr(400); tr/a/\xFE/, FE needs encoding. */
if (grows)
Newx(d, len*2+1, U8);
else
@@ -100,33 +105,39 @@ S_do_trans_simple(pTHX_ SV * const sv)
SvUTF8_on(sv);
SvSETMAGIC(sv);
}
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "%s: %d: returning %zu\n",
+ __FILE__, __LINE__, matches));
+ DEBUG_y(sv_dump(sv));
return matches;
}
/* Helper function for do_trans().
- * Handles non-utf8 cases(*) where search and replacement charlists are
- * identical: so the string isn't modified, and only a count of modifiable
+ * Handles cases where the search and replacement charlists are identical and
+ * non-utf8: so the string isn't modified, and only a count of modifiable
* chars is needed.
- * Note that it doesn't handle /d or /s, since these modify the string
- * even if the replacement list is empty.
- * (*) i.e. where the search and replacement charlists are non-utf8. sv may
- * or may not be utf8.
+ *
+ * Note that it doesn't handle /d or /s, since these modify the string even if
+ * the replacement list is empty.
+ *
+ * sv may or may not be utf8. Note that no code point above 255 can possibly
+ * be in the to-translate set
*/
STATIC Size_t
-S_do_trans_count(pTHX_ SV * const sv)
+S_do_trans_count(pTHX_ SV * const sv, const OPtrans_map * const tbl)
{
STRLEN len;
const U8 *s = (const U8*)SvPV_nomg_const(sv, len);
const U8 * const send = s + len;
Size_t matches = 0;
- const OPtrans_map * const tbl = (OPtrans_map*)cPVOP->op_pv;
PERL_ARGS_ASSERT_DO_TRANS_COUNT;
- if (!tbl)
- Perl_croak(aTHX_ "panic: do_trans_count line %d",__LINE__);
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "%s: %d: entering do_trans_count:"
+ " input sv:\n",
+ __FILE__, __LINE__));
+ DEBUG_y(sv_dump(sv));
if (!SvUTF8(sv)) {
while (s < send) {
@@ -148,62 +159,80 @@ S_do_trans_count(pTHX_ SV * const sv)
}
}
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "%s: %d: count returning %zu\n",
+ __FILE__, __LINE__, matches));
return matches;
}
/* Helper function for do_trans().
- * Handles non-utf8 cases(*) involving the /c, /d, /s flags,
- * and where search and replacement charlists aren't identical.
- * (*) i.e. where the search and replacement charlists are non-utf8. sv may
- * or may not be utf8.
+ * Handles cases where the search and replacement charlists aren't identical
+ * and both are non-utf8, and one or both of /d, /s is specified.
+ *
+ * sv may or may not be utf8. Note that no code point above 255 can possibly
+ * be in the to-translate set
*/
STATIC Size_t
-S_do_trans_complex(pTHX_ SV * const sv)
+S_do_trans_complex(pTHX_ SV * const sv, const OPtrans_map * const tbl)
{
STRLEN len;
U8 *s = (U8*)SvPV_nomg(sv, len);
U8 * const send = s+len;
Size_t matches = 0;
- const OPtrans_map * const tbl = (OPtrans_map*)cPVOP->op_pv;
+ const bool complement = cBOOL(PL_op->op_private & OPpTRANS_COMPLEMENT);
PERL_ARGS_ASSERT_DO_TRANS_COMPLEX;
- if (!tbl)
- Perl_croak(aTHX_ "panic: do_trans_complex line %d",__LINE__);
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "%s: %d: entering do_trans_complex:"
+ " input sv:\n",
+ __FILE__, __LINE__));
+ DEBUG_y(sv_dump(sv));
if (!SvUTF8(sv)) {
U8 *d = s;
U8 * const dstart = d;
if (PL_op->op_private & OPpTRANS_SQUASH) {
- const U8* p = send;
+
+ /* What the mapping of the previous character was to. If the new
+ * character has the same mapping, it is squashed from the output
+ * (but still is included in the count) */
+ short previous_map = (short) TR_OOB;
+
while (s < send) {
- const short ch = tbl->map[*s];
- if (ch >= 0) {
- *d = (U8)ch;
- matches++;
- if (p != d - 1 || *p != *d)
- p = d++;
+ const short this_map = tbl->map[*s];
+ if (this_map >= 0) {
+ matches++;
+ if (this_map != previous_map) {
+ *d++ = (U8)this_map;
+ previous_map = this_map;
+ }
}
- else if (ch == -1) /* -1 is unmapped character */
- *d++ = *s;
- else if (ch == -2) /* -2 is delete character */
- matches++;
+ else {
+ if (this_map == (short) TR_UNMAPPED) {
+ *d++ = *s;
+ previous_map = (short) TR_OOB;
+ }
+ else {
+ assert(this_map == (short) TR_DELETE);
+ matches++;
+ }
+ }
+
s++;
}
}
- else {
+ else { /* Not to squash */
while (s < send) {
- const short ch = tbl->map[*s];
- if (ch >= 0) {
+ const short this_map = tbl->map[*s];
+ if (this_map >= 0) {
matches++;
- *d++ = (U8)ch;
+ *d++ = (U8)this_map;
}
- else if (ch == -1) /* -1 is unmapped character */
+ else if (this_map == (short) TR_UNMAPPED)
*d++ = *s;
- else if (ch == -2) /* -2 is delete character */
+ else if (this_map == (short) TR_DELETE)
matches++;
s++;
}
@@ -217,9 +246,17 @@ S_do_trans_complex(pTHX_ SV * const sv)
U8 *d;
U8 *dstart;
Size_t size = tbl->size;
- UV pch = 0xfeedface;
+
+ /* What the mapping of the previous character was to. If the new
+ * character has the same mapping, it is squashed from the output (but
+ * still is included in the count) */
+ UV pch = TR_OOB;
if (grows)
+ /* Allow for worst-case expansion: Each input byte can become 2.
+ * For a given input character, this happens when it occupies a
+ * single byte under UTF-8, but is to be translated to something
+ * that occupies two: */
Newx(d, len*2+1, U8);
else
d = s;
@@ -232,7 +269,11 @@ S_do_trans_complex(pTHX_ SV * const sv)
UV ch;
short sch;
- sch = tbl->map[comp >= size ? size : comp];
+ sch = (comp < size)
+ ? tbl->map[comp]
+ : (! complement)
+ ? (short) TR_UNMAPPED
+ : tbl->map[size];
if (sch >= 0) {
ch = (UV)sch;
@@ -245,20 +286,20 @@ S_do_trans_complex(pTHX_ SV * const sv)
s += len;
continue;
}
- else if (sch == -1) { /* -1 is unmapped character */
+ else if (sch == (short) TR_UNMAPPED) {
Move(s, d, len, U8);
d += len;
+ pch = TR_OOB;
}
- else if (sch == -2) /* -2 is delete character */
+ else if (sch == (short) TR_DELETE)
matches++;
else {
- assert(sch == -3); /* -3 is empty replacement */
+ assert(sch == (short) TR_R_EMPTY); /* empty replacement */
ch = comp;
goto replace;
}
s += len;
- pch = 0xfeedface;
}
if (grows) {
@@ -272,342 +313,277 @@ S_do_trans_complex(pTHX_ SV * const sv)
SvUTF8_on(sv);
}
SvSETMAGIC(sv);
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "%s: %d: returning %zu\n",
+ __FILE__, __LINE__, matches));
+ DEBUG_y(sv_dump(sv));
return matches;
}
/* Helper function for do_trans().
- * Handles utf8 cases(*) not involving the /c, /d, /s flags,
- * and where search and replacement charlists aren't identical.
- * (*) i.e. where the search or replacement charlists are utf8. sv may
- * or may not be utf8.
+ * Handles cases where an inversion map implementation is to be used and the
+ * search and replacement charlists are identical: so the string isn't
+ * modified, and only a count of modifiable chars is needed.
+ *
+ * Note that it doesn't handle /d nor /s, since these modify the string
+ * even if the replacement charlist is empty.
+ *
+ * sv may or may not be utf8.
*/
STATIC Size_t
-S_do_trans_simple_utf8(pTHX_ SV * const sv)
+S_do_trans_count_invmap(pTHX_ SV * const sv, AV * const invmap)
{
U8 *s;
U8 *send;
- U8 *d;
- U8 *start;
- U8 *dstart, *dend;
Size_t matches = 0;
- const bool grows = cBOOL(PL_op->op_private & OPpTRANS_GROWS);
STRLEN len;
- SV* const rv =
-#ifdef USE_ITHREADS
- PAD_SVl(cPADOP->op_padix);
-#else
- MUTABLE_SV(cSVOP->op_sv);
-#endif
- HV* const hv = MUTABLE_HV(SvRV(rv));
- SV* const * svp = hv_fetchs(hv, "NONE", FALSE);
- const UV none = svp ? SvUV(*svp) : 0x7fffffff;
- const UV extra = none + 1;
- UV final = 0;
- U8 hibit = 0;
-
- PERL_ARGS_ASSERT_DO_TRANS_SIMPLE_UTF8;
+ SV** const from_invlist_ptr = av_fetch(invmap, 0, TRUE);
+ SV** const to_invmap_ptr = av_fetch(invmap, 1, TRUE);
+ SV* from_invlist = *from_invlist_ptr;
+ SV* to_invmap_sv = *to_invmap_ptr;
+ UV* map = (UV *) SvPVX(to_invmap_sv);
+
+ PERL_ARGS_ASSERT_DO_TRANS_COUNT_INVMAP;
+
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "%s: %d:"
+ "entering do_trans_count_invmap:"
+ " input sv:\n",
+ __FILE__, __LINE__));
+ DEBUG_y(sv_dump(sv));
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "mapping:\n"));
+ DEBUG_y(invmap_dump(from_invlist, (UV *) SvPVX(to_invmap_sv)));
s = (U8*)SvPV_nomg(sv, len);
- if (!SvUTF8(sv)) {
- hibit = ! is_utf8_invariant_string(s, len);
- if (hibit) {
- s = bytes_to_utf8(s, &len);
- }
- }
+
send = s + len;
- start = s;
- svp = hv_fetchs(hv, "FINAL", FALSE);
- if (svp)
- final = SvUV(*svp);
+ while (s < send) {
+ UV from;
+ SSize_t i;
+ STRLEN s_len;
+
+ /* Get the code point of the next character in the string */
+ if (! SvUTF8(sv) || UTF8_IS_INVARIANT(*s)) {
+ from = *s;
+ s_len = 1;
+ }
+ else {
+ from = utf8_to_uvchr_buf(s, send, &s_len);
+ if (from == 0 && *s != '\0') {
+ _force_out_malformed_utf8_message(s, send, 0, /*die*/TRUE);
+ }
+ }
- if (grows) {
- /* d needs to be bigger than s, in case e.g. upgrading is required */
- Newx(d, len * 3 + UTF8_MAXBYTES, U8);
- dend = d + len * 3;
- dstart = d;
- }
- else {
- dstart = d = s;
- dend = d + len;
- }
+ /* Look the code point up in the data structure for this tr/// to get
+ * what it maps to */
+ i = _invlist_search(from_invlist, from);
+ assert(i >= 0);
- while (s < send) {
- const UV uv = swash_fetch(rv, s, TRUE);
- if (uv < none) {
- s += UTF8SKIP(s);
- matches++;
- d = uvchr_to_utf8(d, uv);
- }
- else if (uv == none) {
- const int i = UTF8SKIP(s);
- Move(s, d, i, U8);
- d += i;
- s += i;
- }
- else if (uv == extra) {
- s += UTF8SKIP(s);
- matches++;
- d = uvchr_to_utf8(d, final);
- }
- else
- s += UTF8SKIP(s);
-
- if (d > dend) {
- const STRLEN clen = d - dstart;
- const STRLEN nlen = dend - dstart + len + UTF8_MAXBYTES;
- if (!grows)
- Perl_croak(aTHX_ "panic: do_trans_simple_utf8 line %d",__LINE__);
- Renew(dstart, nlen + UTF8_MAXBYTES, U8);
- d = dstart + clen;
- dend = dstart + nlen;
- }
- }
- if (grows || hibit) {
- sv_setpvn(sv, (char*)dstart, d - dstart);
- Safefree(dstart);
- if (grows && hibit)
- Safefree(start);
- }
- else {
- *d = '\0';
- SvCUR_set(sv, d - dstart);
+ if (map[i] != (UV) TR_UNLISTED) {
+ matches++;
+ }
+
+ s += s_len;
}
- SvSETMAGIC(sv);
- SvUTF8_on(sv);
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "%s: %d: returning %zu\n",
+ __FILE__, __LINE__, matches));
return matches;
}
-
/* Helper function for do_trans().
- * Handles utf8 cases(*) where search and replacement charlists are
- * identical: so the string isn't modified, and only a count of modifiable
- * chars is needed.
- * Note that it doesn't handle /d or /s, since these modify the string
- * even if the replacement charlist is empty.
- * (*) i.e. where the search or replacement charlists are utf8. sv may
- * or may not be utf8.
+ * Handles cases where an inversion map implementation is to be used and the
+ * search and replacement charlists are either not identical or flags are
+ * present.
+ *
+ * sv may or may not be utf8.
*/
STATIC Size_t
-S_do_trans_count_utf8(pTHX_ SV * const sv)
+S_do_trans_invmap(pTHX_ SV * const sv, AV * const invmap)
{
- const U8 *s;
- const U8 *start = NULL;
- const U8 *send;
+ U8 *s;
+ U8 *send;
+ U8 *d;
+ U8 *s0;
+ U8 *d0;
Size_t matches = 0;
STRLEN len;
- SV* const rv =
-#ifdef USE_ITHREADS
- PAD_SVl(cPADOP->op_padix);
-#else
- MUTABLE_SV(cSVOP->op_sv);
-#endif
- HV* const hv = MUTABLE_HV(SvRV(rv));
- SV* const * const svp = hv_fetchs(hv, "NONE", FALSE);
- const UV none = svp ? SvUV(*svp) : 0x7fffffff;
- const UV extra = none + 1;
- U8 hibit = 0;
-
- PERL_ARGS_ASSERT_DO_TRANS_COUNT_UTF8;
+ SV** const from_invlist_ptr = av_fetch(invmap, 0, TRUE);
+ SV** const to_invmap_ptr = av_fetch(invmap, 1, TRUE);
+ SV** const to_expansion_ptr = av_fetch(invmap, 2, TRUE);
+ NV max_expansion = SvNV(*to_expansion_ptr);
+ SV* from_invlist = *from_invlist_ptr;
+ SV* to_invmap_sv = *to_invmap_ptr;
+ UV* map = (UV *) SvPVX(to_invmap_sv);
+ UV previous_map = TR_OOB;
+ const bool squash = cBOOL(PL_op->op_private & OPpTRANS_SQUASH);
+ const bool delete_unfound = cBOOL(PL_op->op_private & OPpTRANS_DELETE);
+ bool inplace = ! cBOOL(PL_op->op_private & OPpTRANS_GROWS);
+ const UV* from_array = invlist_array(from_invlist);
+ UV final_map = TR_OOB;
+ bool out_is_utf8 = cBOOL(SvUTF8(sv));
+ STRLEN s_len;
+
+ PERL_ARGS_ASSERT_DO_TRANS_INVMAP;
+
+ /* A third element in the array indicates that the replacement list was
+ * shorter than the search list, and this element contains the value to use
+ * for the items that don't correspond */
+ if (av_top_index(invmap) >= 3) {
+ SV** const final_map_ptr = av_fetch(invmap, 3, TRUE);
+ SV* const final_map_sv = *final_map_ptr;
+ final_map = SvUV(final_map_sv);
+ }
- s = (const U8*)SvPV_nomg_const(sv, len);
- if (!SvUTF8(sv)) {
- hibit = ! is_utf8_invariant_string(s, len);
- if (hibit) {
- start = s = bytes_to_utf8(s, &len);
- }
+ /* If there is something in the transliteration that could force the input
+ * to be changed to UTF-8, we don't know if we can do it in place, so
+ * assume cannot */
+ if (! out_is_utf8 && (PL_op->op_private & OPpTRANS_CAN_FORCE_UTF8)) {
+ inplace = FALSE;
+ if (max_expansion < 2) {
+ max_expansion = 2;
+ }
}
+
+ s = (U8*)SvPV_nomg(sv, len);
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "%s: %d: entering do_trans_invmap:"
+ " input sv:\n",
+ __FILE__, __LINE__));
+ DEBUG_y(sv_dump(sv));
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "mapping:\n"));
+ DEBUG_y(invmap_dump(from_invlist, map));
+
send = s + len;
+ s0 = s;
- while (s < send) {
- const UV uv = swash_fetch(rv, s, TRUE);
- if (uv < none || uv == extra)
- matches++;
- s += UTF8SKIP(s);
+ /* We know by now if there are some possible input strings whose
+ * transliterations are longer than the input. If none can, we just edit
+ * in place. */
+ if (inplace) {
+ d0 = d = s;
+ }
+ else {
+ /* Here, we can't edit in place. We have no idea how much, if any,
+ * this particular input string will grow. However, the compilation
+ * calculated the maximum expansion possible. Use that to allocate
+ * based on the worst case scenario. (First +1 is to round up; 2nd is
+ * for \0) */
+ Newx(d, (STRLEN) (len * max_expansion + 1 + 1), U8);
+ d0 = d;
}
- if (hibit)
- Safefree(start);
- return matches;
-}
+ restart:
+ /* Do the actual transliteration */
+ while (s < send) {
+ UV from;
+ UV to;
+ SSize_t i;
+ STRLEN s_len;
+
+ /* Get the code point of the next character in the string */
+ if (! SvUTF8(sv) || UTF8_IS_INVARIANT(*s)) {
+ from = *s;
+ s_len = 1;
+ }
+ else {
+ from = utf8_to_uvchr_buf(s, send, &s_len);
+ if (from == 0 && *s != '\0') {
+ _force_out_malformed_utf8_message(s, send, 0, /*die*/TRUE);
+ }
+ }
-/* Helper function for do_trans().
- * Handles utf8 cases(*) involving the /c, /d, /s flags,
- * and where search and replacement charlists aren't identical.
- * (*) i.e. where the search or replacement charlists are utf8. sv may
- * or may not be utf8.
- */
+ /* Look the code point up in the data structure for this tr/// to get
+ * what it maps to */
+ i = _invlist_search(from_invlist, from);
+ assert(i >= 0);
-STATIC Size_t
-S_do_trans_complex_utf8(pTHX_ SV * const sv)
-{
- U8 *start, *send;
- U8 *d;
- Size_t matches = 0;
- const bool squash = cBOOL(PL_op->op_private & OPpTRANS_SQUASH);
- const bool del = cBOOL(PL_op->op_private & OPpTRANS_DELETE);
- const bool grows = cBOOL(PL_op->op_private & OPpTRANS_GROWS);
- SV* const rv =
-#ifdef USE_ITHREADS
- PAD_SVl(cPADOP->op_padix);
-#else
- MUTABLE_SV(cSVOP->op_sv);
-#endif
- HV * const hv = MUTABLE_HV(SvRV(rv));
- SV * const *svp = hv_fetchs(hv, "NONE", FALSE);
- const UV none = svp ? SvUV(*svp) : 0x7fffffff;
- const UV extra = none + 1;
- UV final = 0;
- bool havefinal = FALSE;
- STRLEN len;
- U8 *dstart, *dend;
- U8 hibit = 0;
- U8 *s = (U8*)SvPV_nomg(sv, len);
+ to = map[i];
- PERL_ARGS_ASSERT_DO_TRANS_COMPLEX_UTF8;
+ if (to == (UV) TR_UNLISTED) { /* Just copy the unreplaced character */
+ if (UVCHR_IS_INVARIANT(from) || ! out_is_utf8) {
+ *d++ = (U8) from;
+ }
+ else if (SvUTF8(sv)) {
+ Move(s, d, s_len, U8);
+ d += s_len;
+ }
+ else { /* Convert to UTF-8 */
+ append_utf8_from_native_byte(*s, &d);
+ }
- if (!SvUTF8(sv)) {
- hibit = ! is_utf8_invariant_string(s, len);
- if (hibit) {
- s = bytes_to_utf8(s, &len);
+ previous_map = to;
+ s += s_len;
+ continue;
}
- }
- send = s + len;
- start = s;
- svp = hv_fetchs(hv, "FINAL", FALSE);
- if (svp) {
- final = SvUV(*svp);
- havefinal = TRUE;
- }
+ /* Everything else is counted as a match */
+ matches++;
- if (grows) {
- /* d needs to be bigger than s, in case e.g. upgrading is required */
- Newx(d, len * 3 + UTF8_MAXBYTES, U8);
- dend = d + len * 3;
- dstart = d;
- }
- else {
- dstart = d = s;
- dend = d + len;
- }
+ if (to == (UV) TR_SPECIAL_HANDLING) {
+ if (delete_unfound) {
+ s += s_len;
+ continue;
+ }
- if (squash) {
- UV puv = 0xfeedface;
- while (s < send) {
- UV uv = swash_fetch(rv, s, TRUE);
-
- if (d > dend) {
- const STRLEN clen = d - dstart;
- const STRLEN nlen = dend - dstart + len + UTF8_MAXBYTES;
- if (!grows)
- Perl_croak(aTHX_ "panic: do_trans_complex_utf8 line %d",__LINE__);
- Renew(dstart, nlen + UTF8_MAXBYTES, U8);
- d = dstart + clen;
- dend = dstart + nlen;
- }
- if (uv < none) {
- matches++;
- s += UTF8SKIP(s);
- if (uv != puv) {
- d = uvchr_to_utf8(d, uv);
- puv = uv;
- }
- continue;
- }
- else if (uv == none) { /* "none" is unmapped character */
- const int i = UTF8SKIP(s);
- Move(s, d, i, U8);
- d += i;
- s += i;
- puv = 0xfeedface;
- continue;
- }
- else if (uv == extra && !del) {
- matches++;
- if (havefinal) {
- s += UTF8SKIP(s);
- if (puv != final) {
- d = uvchr_to_utf8(d, final);
- puv = final;
- }
- }
- else {
- STRLEN len;
- uv = utf8n_to_uvchr(s, send - s, &len, UTF8_ALLOW_DEFAULT);
- if (uv != puv) {
- Move(s, d, len, U8);
- d += len;
- puv = uv;
- }
- s += len;
- }
- continue;
- }
- matches++; /* "none+1" is delete character */
- s += UTF8SKIP(s);
- }
- }
- else {
- while (s < send) {
- const UV uv = swash_fetch(rv, s, TRUE);
- if (d > dend) {
- const STRLEN clen = d - dstart;
- const STRLEN nlen = dend - dstart + len + UTF8_MAXBYTES;
- if (!grows)
- Perl_croak(aTHX_ "panic: do_trans_complex_utf8 line %d",__LINE__);
- Renew(dstart, nlen + UTF8_MAXBYTES, U8);
- d = dstart + clen;
- dend = dstart + nlen;
- }
- if (uv < none) {
- matches++;
- s += UTF8SKIP(s);
- d = uvchr_to_utf8(d, uv);
- continue;
- }
- else if (uv == none) { /* "none" is unmapped character */
- const int i = UTF8SKIP(s);
- Move(s, d, i, U8);
- d += i;
- s += i;
- continue;
- }
- else if (uv == extra && !del) {
- matches++;
- s += UTF8SKIP(s);
- d = uvchr_to_utf8(d, final);
- continue;
- }
- matches++; /* "none+1" is delete character */
- s += UTF8SKIP(s);
- }
+ /* Use the final character in the replacement list */
+ to = final_map;
+ }
+ else { /* Here the input code point is to be remapped. The actual
+ value is offset from the base of this entry */
+ to += from - from_array[i];
+ }
+
+ /* If copying all occurrences, or this is the first occurrence, copy it
+ * to the output */
+ if (! squash || to != previous_map) {
+ if (out_is_utf8) {
+ d = uvchr_to_utf8(d, to);
+ }
+ else {
+ if (to >= 256) { /* If need to convert to UTF-8, restart */
+ out_is_utf8 = TRUE;
+ s = s0;
+ d = d0;
+ matches = 0;
+ goto restart;
+ }
+ *d++ = (U8) to;
+ }
+ }
+
+ previous_map = to;
+ s += s_len;
}
- if (grows || hibit) {
- sv_setpvn(sv, (char*)dstart, d - dstart);
- Safefree(dstart);
- if (grows && hibit)
- Safefree(start);
+
+ s_len = 0;
+ s += s_len;
+ if (! inplace) {
+ sv_setpvn(sv, (char*)d0, d - d0);
+ Safefree(d0);
}
else {
*d = '\0';
- SvCUR_set(sv, d - dstart);
+ SvCUR_set(sv, d - d0);
+ }
+
+ if (! SvUTF8(sv) && out_is_utf8) {
+ SvUTF8_on(sv);
}
- SvUTF8_on(sv);
SvSETMAGIC(sv);
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "%s: %d: returning %zu\n",
+ __FILE__, __LINE__, matches));
+ DEBUG_y(sv_dump(sv));
return matches;
}
-
/* Execute a tr//. sv is the value to be translated, while PL_op
* should be an OP_TRANS or OP_TRANSR op, whose op_pv field contains a
- * translation table or whose op_sv field contains a swash.
+ * translation table or whose op_sv field contains an inversion map.
+ *
* Returns a count of number of characters translated
*/
@@ -616,31 +592,49 @@ Perl_do_trans(pTHX_ SV *sv)
{
STRLEN len;
const U8 flags = PL_op->op_private;
- const U8 hasutf = flags & (OPpTRANS_FROM_UTF | OPpTRANS_TO_UTF);
+ bool use_utf8_fcns = cBOOL(flags & OPpTRANS_USE_SVOP);
+ bool identical = cBOOL(flags & OPpTRANS_IDENTICAL);
PERL_ARGS_ASSERT_DO_TRANS;
- if (SvREADONLY(sv) && !(flags & OPpTRANS_IDENTICAL)) {
+ if (SvREADONLY(sv) && ! identical) {
Perl_croak_no_modify();
}
(void)SvPV_const(sv, len);
if (!len)
return 0;
- if (!(flags & OPpTRANS_IDENTICAL)) {
+ if (! identical) {
if (!SvPOKp(sv) || SvTHINKFIRST(sv))
(void)SvPV_force_nomg(sv, len);
(void)SvPOK_only_UTF8(sv);
}
- /* If we use only OPpTRANS_IDENTICAL to bypass the READONLY check,
- * we must also rely on it to choose the readonly strategy.
- */
- if (flags & OPpTRANS_IDENTICAL) {
- return hasutf ? do_trans_count_utf8(sv) : do_trans_count(sv);
- } else if (flags & (OPpTRANS_SQUASH|OPpTRANS_DELETE|OPpTRANS_COMPLEMENT)) {
- return hasutf ? do_trans_complex_utf8(sv) : do_trans_complex(sv);
- } else {
- return hasutf ? do_trans_simple_utf8(sv) : do_trans_simple(sv);
+ if (use_utf8_fcns) {
+ SV* const map =
+#ifdef USE_ITHREADS
+ PAD_SVl(cPADOP->op_padix);
+#else
+ MUTABLE_SV(cSVOP->op_sv);
+#endif
+
+ if (identical) {
+ return do_trans_count_invmap(sv, (AV *) map);
+ }
+ else {
+ return do_trans_invmap(sv, (AV *) map);
+ }
+ }
+ else {
+ const OPtrans_map * const map = (OPtrans_map*)cPVOP->op_pv;
+
+ if (identical) {
+ return do_trans_count(sv, map);
+ }
+ else if (flags & (OPpTRANS_SQUASH|OPpTRANS_DELETE|OPpTRANS_COMPLEMENT)) {
+ return do_trans_complex(sv, map);
+ }
+ else
+ return do_trans_simple(sv, map);
}
}
@@ -751,22 +745,19 @@ Perl_do_vecget(pTHX_ SV *sv, STRLEN offset, int size)
if (!s) {
s = (unsigned char *)"";
}
-
+
PERL_ARGS_ASSERT_DO_VECGET;
if (size < 1 || (size & (size-1))) /* size < 1 or not a power of two */
Perl_croak(aTHX_ "Illegal number of bits in vec");
if (SvUTF8(sv)) {
- if (Perl_sv_utf8_downgrade(aTHX_ sv, TRUE)) {
+ if (Perl_sv_utf8_downgrade_flags(aTHX_ sv, TRUE, 0)) {
/* PVX may have changed */
s = (unsigned char *) SvPV_flags(sv, srclen, svpv_flags);
}
else {
- Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
- "Use of strings with code points over 0xFF as"
- " arguments to vec is deprecated. This will"
- " be a fatal error in Perl 5.32");
+ Perl_croak(aTHX_ "Use of strings with code points over 0xFF as arguments to vec is forbidden");
}
}
@@ -934,10 +925,10 @@ Perl_do_vecset(pTHX_ SV *sv)
SV_GMAGIC | SV_UNDEF_RETURNS_NULL);
if (SvUTF8(targ)) {
/* This is handled by the SvPOK_only below...
- if (!Perl_sv_utf8_downgrade(aTHX_ targ, TRUE))
+ if (!Perl_sv_utf8_downgrade_flags(aTHX_ targ, TRUE, 0))
SvUTF8_off(targ);
*/
- (void) Perl_sv_utf8_downgrade(aTHX_ targ, TRUE);
+ (void) Perl_sv_utf8_downgrade_flags(aTHX_ targ, TRUE, 0);
}
(void)SvPOK_only(targ);
@@ -1008,11 +999,9 @@ Perl_do_vecset(pTHX_ SV *sv)
void
Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
{
-#ifdef LIBERAL
long *dl;
long *ll;
long *rl;
-#endif
char *dc;
STRLEN leftlen;
STRLEN rightlen;
@@ -1087,30 +1076,11 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
* on zeros without having to do it. In the case of '&', the result is
* zero, and the dangling portion is simply discarded. For '|' and '^', the
* result is the same as the other operand, so the dangling part is just
- * appended to the final result, unchanged. We currently accept above-FF
- * code points in the dangling portion, as that's how it has long worked,
- * and code depends on it staying that way. But it is now fatal for
- * above-FF to appear in the portion that does get operated on. Hence, any
- * above-FF must come only in the longer operand, and only in its dangling
- * portion. That means that at least one of the operands has to be
- * entirely non-UTF-8, and the length of that operand has to be before the
- * first above-FF in the other */
+ * appended to the final result, unchanged. As of perl-5.32, we no longer
+ * accept above-FF code points in the dangling portion.
+ */
if (left_utf8 || right_utf8) {
- if (left_utf8) {
- if (right_utf8 || rightlen > leftlen) {
- Perl_croak(aTHX_ FATAL_ABOVE_FF_MSG, PL_op_desc[optype]);
- }
- len = rightlen;
- }
- else if (right_utf8) {
- if (leftlen > rightlen) {
- Perl_croak(aTHX_ FATAL_ABOVE_FF_MSG, PL_op_desc[optype]);
- }
- len = leftlen;
- }
-
- Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
- DEPRECATED_ABOVE_FF_MSG, PL_op_desc[optype]);
+ Perl_croak(aTHX_ FATAL_ABOVE_FF_MSG, PL_op_desc[optype]);
}
else { /* Neither is UTF-8 */
len = MIN(leftlen, rightlen);
@@ -1120,7 +1090,6 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
lsave = lc;
rsave = rc;
- SvCUR_set(sv, len);
(void)SvPOK_only(sv);
if (SvOK(sv) || SvTYPE(sv) > SVt_PVMG) {
dc = SvPV_force_nomg_nolen(sv);
@@ -1136,12 +1105,12 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
sv_usepvn_flags(sv, dc, needlen, SV_HAS_TRAILING_NUL);
dc = SvPVX(sv); /* sv_usepvn() calls Renew() */
}
+ SvCUR_set(sv, len);
-#ifdef LIBERAL
if (len >= sizeof(long)*4 &&
- !((unsigned long)dc % sizeof(long)) &&
- !((unsigned long)lc % sizeof(long)) &&
- !((unsigned long)rc % sizeof(long))) /* It's almost always aligned... */
+ !(PTR2nat(dc) % sizeof(long)) &&
+ !(PTR2nat(lc) % sizeof(long)) &&
+ !(PTR2nat(rc) % sizeof(long))) /* It's almost always aligned... */
{
const STRLEN remainder = len % (sizeof(long)*4);
len /= (sizeof(long)*4);
@@ -1182,7 +1151,7 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
len = remainder;
}
-#endif
+
switch (optype) {
case OP_BIT_AND:
while (len--)
@@ -1200,13 +1169,13 @@ Perl_do_vop(pTHX_ I32 optype, SV *sv, SV *left, SV *right)
len = lensave;
if (rightlen > len) {
if (dc == rc)
- SvCUR(sv) = rightlen;
+ SvCUR_set(sv, rightlen);
else
sv_catpvn_nomg(sv, rsave + len, rightlen - len);
}
else if (leftlen > len) {
if (dc == lc)
- SvCUR(sv) = leftlen;
+ SvCUR_set(sv, leftlen);
else
sv_catpvn_nomg(sv, lsave + len, leftlen - len);
}
diff --git a/gnu/usr.bin/perl/dosish.h b/gnu/usr.bin/perl/dosish.h
index dff759b309d..5b2716046d7 100644
--- a/gnu/usr.bin/perl/dosish.h
+++ b/gnu/usr.bin/perl/dosish.h
@@ -51,7 +51,8 @@
# define PERL_SYS_TERM_BODY() \
HINTS_REFCNT_TERM; KEYWORD_PLUGIN_MUTEX_TERM; \
OP_CHECK_MUTEX_TERM; OP_REFCNT_TERM; PERLIO_TERM; \
- MALLOC_TERM; LOCALE_TERM; USER_PROP_MUTEX_TERM;
+ MALLOC_TERM; LOCALE_TERM; USER_PROP_MUTEX_TERM; \
+ ENV_TERM;
#endif
#define dXSUB_SYS dNOOP
@@ -71,8 +72,6 @@
*/
#if defined(WIN64) || defined(USE_LARGE_FILES)
# define Stat_t struct _stati64
-#elif defined(UNDER_CE)
-# define Stat_t struct xcestat
#else
# define Stat_t struct stat
#endif
diff --git a/gnu/usr.bin/perl/dquote.c b/gnu/usr.bin/perl/dquote.c
index bf5cf902a26..dcbd8c93ac0 100644
--- a/gnu/usr.bin/perl/dquote.c
+++ b/gnu/usr.bin/perl/dquote.c
@@ -8,106 +8,285 @@
#include "EXTERN.h"
#define PERL_IN_DQUOTE_C
#include "perl.h"
-#include "dquote_inline.h"
/* XXX Add documentation after final interface and behavior is decided */
-/* May want to show context for error, so would pass S_grok_bslash_c(pTHX_ const char* current, const char* start, const bool output_warning)
- U8 source = *current;
-*/
-char
-Perl_grok_bslash_c(pTHX_ const char source, const bool output_warning)
+bool
+Perl_grok_bslash_c(pTHX_ const char source,
+ U8 * result,
+ const char** message,
+ U32 * packed_warn)
{
-
- U8 result;
+ PERL_ARGS_ASSERT_GROK_BSLASH_C;
+
+ /* This returns TRUE if the \c? sequence is valid; FALSE otherwise. If it
+ * is valid, the sequence evaluates to a single character, which will be
+ * stored into *result.
+ *
+ * source is the character immediately after a '\c' sequence.
+ * result points to a char variable into which this function will store
+ * what the sequence evaluates to, if valid; unchanged otherwise.
+ * message A pointer to any warning or error message will be stored into
+ * this pointer; NULL if none.
+ * packed_warn if NULL on input asks that this routine display any warning
+ * messages. Otherwise, if the function found a warning, the
+ * packed warning categories will be stored into *packed_warn (and
+ * the corresponding message text into *message); 0 if none.
+ */
+
+ *message = NULL;
+ if (packed_warn) *packed_warn = 0;
if (! isPRINT_A(source)) {
- Perl_croak(aTHX_ "%s",
- "Character following \"\\c\" must be printable ASCII");
+ *message = "Character following \"\\c\" must be printable ASCII";
+ return FALSE;
}
- else if (source == '{') {
+
+ if (source == '{') {
const char control = toCTRL('{');
if (isPRINT_A(control)) {
/* diag_listed_as: Use "%s" instead of "%s" */
- Perl_croak(aTHX_ "Use \"%c\" instead of \"\\c{\"", control);
+ *message = Perl_form(aTHX_ "Use \"%c\" instead of \"\\c{\"", control);
}
else {
- Perl_croak(aTHX_ "Sequence \"\\c{\" invalid");
+ *message = "Sequence \"\\c{\" invalid";
}
+ return FALSE;
}
- result = toCTRL(source);
- if (output_warning && isPRINT_A(result)) {
+ *result = toCTRL(source);
+ if (isPRINT_A(*result) && ckWARN(WARN_SYNTAX)) {
U8 clearer[3];
U8 i = 0;
- if (! isWORDCHAR(result)) {
+ char format[] = "\"\\c%c\" is more clearly written simply as \"%s\"";
+
+ if (! isWORDCHAR(*result)) {
clearer[i++] = '\\';
}
- clearer[i++] = result;
+ clearer[i++] = *result;
clearer[i++] = '\0';
- Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
- "\"\\c%c\" is more clearly written simply as \"%s\"",
- source,
- clearer);
+ if (packed_warn) {
+ *message = Perl_form(aTHX_ format, source, clearer);
+ *packed_warn = packWARN(WARN_SYNTAX);
+ }
+ else {
+ Perl_warner(aTHX_ packWARN(WARN_SYNTAX), format, source, clearer);
+ }
+ }
+
+ return TRUE;
+}
+
+const char *
+Perl_form_alien_digit_msg(pTHX_
+ const U8 which, /* 8 or 16 */
+ const STRLEN valids_len, /* length of input before first bad char */
+ const char * const first_bad, /* Ptr to that bad char */
+ const char * const send, /* End of input string */
+ const bool UTF, /* Is it in UTF-8? */
+ const bool braced) /* Is it enclosed in {} */
+{
+ /* Generate a mortal SV containing an appropriate warning message about
+ * alien characters found in an octal or hex constant given by the inputs,
+ * and return a pointer to that SV's string. The message looks like:
+ *
+ * Non-hex character '?' terminates \x early. Resolved as "\x{...}"
+ *
+ */
+
+ /* The usual worst case scenario: 2 chars to display per byte, plus \x{}
+ * (leading zeros could take up more space, and the scalar will
+ * automatically grow if necessary). Space for NUL is added by the newSV()
+ * function */
+ SV * display_char = newSV(2 * UTF8_MAXBYTES + 4);
+ SV * message_sv = sv_newmortal();
+ char symbol;
+
+ PERL_ARGS_ASSERT_FORM_ALIEN_DIGIT_MSG;
+ assert(which == 8 || which == 16);
+
+ /* Calculate the display form of the character */
+ if ( UVCHR_IS_INVARIANT(*first_bad)
+ || (UTF && isUTF8_CHAR((U8 *) first_bad, (U8 *) send)))
+ {
+ pv_uni_display(display_char, (U8 *) first_bad, UTF8SKIP(first_bad),
+ (STRLEN) -1, UNI_DISPLAY_QQ);
+ }
+ else { /* Is not UTF-8, or is illegal UTF-8. Show just the one byte */
+
+ /* It also isn't a UTF-8 invariant character, so no display shortcuts
+ * are available. Use \\x{...} */
+ Perl_sv_setpvf(aTHX_ display_char, "\\x{%02x}", *first_bad);
+ }
+
+ /* Ready to start building the message */
+ sv_setpvs(message_sv, "Non-");
+ if (which == 8) {
+ sv_catpvs(message_sv, "octal");
+ if (braced) {
+ symbol = 'o';
+ }
+ else {
+ symbol = '0'; /* \008, for example */
+ }
+ }
+ else {
+ sv_catpvs(message_sv, "hex");
+ symbol = 'x';
+ }
+ sv_catpvs(message_sv, " character ");
+
+ if (isPRINT(*first_bad)) {
+ sv_catpvs(message_sv, "'");
+ }
+ sv_catsv(message_sv, display_char);
+ if (isPRINT(*first_bad)) {
+ sv_catpvs(message_sv, "'");
+ }
+ Perl_sv_catpvf(aTHX_ message_sv, " terminates \\%c early. Resolved as "
+ "\"\\%c", symbol, symbol);
+ if (braced) {
+ sv_catpvs(message_sv, "{");
+ }
+
+ /* Octal constants have an extra leading 0, but \0 already includes that */
+ if (symbol == 'o' && valids_len < 3) {
+ sv_catpvs(message_sv, "0");
+ }
+ if (valids_len == 0) { /* No legal digits at all */
+ sv_catpvs(message_sv, "00");
+ }
+ else if (valids_len == 1) { /* Just one is legal */
+ sv_catpvs(message_sv, "0");
+ }
+ sv_catpvn(message_sv, first_bad - valids_len, valids_len);
+
+ if (braced) {
+ sv_catpvs(message_sv, "}");
+ }
+ else {
+ sv_catsv(message_sv, display_char);
+ }
+ sv_catpvs(message_sv, "\"");
+
+ SvREFCNT_dec_NN(display_char);
+
+ return SvPVX_const(message_sv);
+}
+
+const char *
+Perl_form_cp_too_large_msg(pTHX_
+ const U8 which, /* 8 or 16 */
+ const char * string, /* NULL, or the text that is supposed to
+ represent a code point */
+ const Size_t len, /* length of 'string' if not NULL; else 0 */
+ const UV cp) /* 0 if 'string' not NULL; else the too-large
+ code point */
+{
+ /* Generate a mortal SV containing an appropriate warning message about
+ * code points that are too large for this system, given by the inputs,
+ * and return a pointer to that SV's string. Either the text of the string
+ * to be converted to a code point is input, or a code point itself. The
+ * former is needed to accurately represent something that overflows.
+ *
+ * The message looks like:
+ *
+ * Use of code point %s is not allowed; the permissible max is %s
+ *
+ */
+
+ SV * message_sv = sv_newmortal();
+ const char * format;
+ const char * prefix;
+
+ PERL_ARGS_ASSERT_FORM_CP_TOO_LARGE_MSG;
+ assert(which == 8 || which == 16);
+
+ /* One but not both must be non-zero */
+ assert((string != NULL) ^ (cp != 0));
+ assert((string == NULL) || len);
+
+ if (which == 8) {
+ format = "%" UVof;
+ prefix = "0";
+ }
+ else {
+ format = "%" UVXf;
+ prefix = "0x";
+ }
+
+ Perl_sv_setpvf(aTHX_ message_sv, "Use of code point %s", prefix);
+ if (string) {
+ Perl_sv_catpvf(aTHX_ message_sv, "%.*s", (int) len, string);
+ }
+ else {
+ Perl_sv_catpvf(aTHX_ message_sv, format, cp);
}
+ Perl_sv_catpvf(aTHX_ message_sv, " is not allowed; the permissible max is %s", prefix);
+ Perl_sv_catpvf(aTHX_ message_sv, format, MAX_LEGAL_CP);
- return result;
+ return SvPVX_const(message_sv);
}
bool
Perl_grok_bslash_o(pTHX_ char **s, const char * const send, UV *uv,
- const char** error_msg,
- const bool output_warning, const bool strict,
- const bool silence_non_portable,
+ const char** message,
+ U32 * packed_warn,
+ const bool strict,
+ const bool allow_UV_MAX,
const bool UTF)
{
/* Documentation to be supplied when interface nailed down finally
- * This returns FALSE if there is an error which the caller need not recover
- * from; otherwise TRUE. In either case the caller should look at *len [???].
- * It guarantees that the returned codepoint, *uv, when expressed as
- * utf8 bytes, would fit within the skipped "\o{...}" bytes.
- * On input:
+ * This returns FALSE if there is an error the caller should probably die
+ * from; otherwise TRUE.
* s is the address of a pointer to a string. **s is 'o', and the
* previous character was a backslash. At exit, *s will be advanced
* to the byte just after those absorbed by this function. Hence the
- * caller can continue parsing from there. In the case of an error,
- * this routine has generally positioned *s to point just to the right
- * of the first bad spot, so that a message that has a "<--" to mark
- * the spot will be correctly positioned.
+ * caller can continue parsing from there. In the case of an error
+ * when this function returns FALSE, continuing to parse is not an
+ * option, this routine has generally positioned *s to point just to
+ * the right of the first bad spot, so that a message that has a "<--"
+ * to mark the spot will be correctly positioned.
* send - 1 gives a limit in *s that this function is not permitted to
* look beyond. That is, the function may look at bytes only in the
* range *s..send-1
* uv points to a UV that will hold the output value, valid only if the
- * return from the function is TRUE
- * error_msg is a pointer that will be set to an internal buffer giving an
- * error message upon failure (the return is FALSE). Untouched if
- * function succeeds
- * output_warning says whether to output any warning messages, or suppress
- * them
+ * return from the function is TRUE; may be changed from the input
+ * value even when FALSE is returned.
+ * message A pointer to any warning or error message will be stored into
+ * this pointer; NULL if none.
+ * packed_warn if NULL on input asks that this routine display any warning
+ * messages. Otherwise, if the function found a warning, the packed
+ * warning categories will be stored into *packed_warn (and the
+ * corresponding message text into *message); 0 if none.
* strict is true if this should fail instead of warn if there are
* non-octal digits within the braces
- * silence_non_portable is true if to suppress warnings about the code
- * point returned being too large to fit on all platforms.
+ * allow_UV_MAX is true if this shouldn't fail if the input code point is
+ * UV_MAX, which is normally illegal, reserved for internal use.
* UTF is true iff the string *s is encoded in UTF-8.
*/
char* e;
STRLEN numbers_len;
I32 flags = PERL_SCAN_ALLOW_UNDERSCORES
- | PERL_SCAN_DISALLOW_PREFIX
- /* XXX Until the message is improved in grok_oct, handle errors
- * ourselves */
- | PERL_SCAN_SILENT_ILLDIGIT;
+ | PERL_SCAN_DISALLOW_PREFIX
+ | PERL_SCAN_SILENT_NON_PORTABLE
+ | PERL_SCAN_SILENT_ILLDIGIT
+ | PERL_SCAN_SILENT_OVERFLOW;
PERL_ARGS_ASSERT_GROK_BSLASH_O;
assert(*(*s - 1) == '\\');
assert(* *s == 'o');
+
+ *message = NULL;
+ if (packed_warn) *packed_warn = 0;
+
(*s)++;
if (send <= *s || **s != '{') {
- *error_msg = "Missing braces on \\o{}";
+ *message = "Missing braces on \\o{}";
return FALSE;
}
@@ -117,7 +296,7 @@ Perl_grok_bslash_o(pTHX_ char **s, const char * const send, UV *uv,
while (isOCTAL(**s)) { /* Position beyond the legal digits */
(*s)++;
}
- *error_msg = "Missing right brace on \\o{";
+ *message = "Missing right brace on \\o{}";
return FALSE;
}
@@ -125,33 +304,40 @@ Perl_grok_bslash_o(pTHX_ char **s, const char * const send, UV *uv,
sequence if not a digit) */
numbers_len = e - *s;
if (numbers_len == 0) {
- (*s)++; /* Move past the } */
- *error_msg = "Empty \\o{}";
+ (*s)++; /* Move past the '}' */
+ *message = "Empty \\o{}";
return FALSE;
}
- if (silence_non_portable) {
- flags |= PERL_SCAN_SILENT_NON_PORTABLE;
+ *uv = grok_oct(*s, &numbers_len, &flags, NULL);
+ if (UNLIKELY( (flags & PERL_SCAN_GREATER_THAN_UV_MAX)
+ || (! allow_UV_MAX && *uv == UV_MAX)))
+ {
+ *message = form_cp_too_large_msg(8, *s, numbers_len, 0);
+ *s = e + 1;
+ return FALSE;
}
- *uv = grok_oct(*s, &numbers_len, &flags, NULL);
/* Note that if has non-octal, will ignore everything starting with that up
* to the '}' */
-
if (numbers_len != (STRLEN) (e - *s)) {
+ *s += numbers_len;
if (strict) {
- *s += numbers_len;
*s += (UTF) ? UTF8_SAFE_SKIP(*s, send) : 1;
- *error_msg = "Non-octal character";
+ *message = "Non-octal character";
return FALSE;
}
- else if (output_warning) {
- Perl_ck_warner(aTHX_ packWARN(WARN_DIGIT),
- /* diag_listed_as: Non-octal character '%c'. Resolved as "%s" */
- "Non-octal character '%c'. Resolved as \"\\o{%.*s}\"",
- *(*s + numbers_len),
- (int) numbers_len,
- *s);
+
+ if (ckWARN(WARN_DIGIT)) {
+ const char * failure = form_alien_digit_msg(8, numbers_len, *s, send,
+ UTF, TRUE);
+ if (packed_warn) {
+ *message = failure;
+ *packed_warn = packWARN(WARN_DIGIT);
+ }
+ else {
+ Perl_warner(aTHX_ packWARN(WARN_DIGIT), "%s", failure);
+ }
}
}
@@ -162,15 +348,16 @@ Perl_grok_bslash_o(pTHX_ char **s, const char * const send, UV *uv,
}
bool
-Perl_grok_bslash_x(pTHX_ char **s, const char * const send, UV *uv,
- const char** error_msg,
- const bool output_warning, const bool strict,
- const bool silence_non_portable,
+Perl_grok_bslash_x(pTHX_ char ** s, const char * const send, UV *uv,
+ const char** message,
+ U32 * packed_warn,
+ const bool strict,
+ const bool allow_UV_MAX,
const bool UTF)
{
/* Documentation to be supplied when interface nailed down finally
- * This returns FALSE if there is an error which the caller need not recover
+ * This returns FALSE if there is an error the caller should probably die
* from; otherwise TRUE.
* It guarantees that the returned codepoint, *uv, when expressed as
* utf8 bytes, would fit within the skipped "\x{...}" bytes.
@@ -187,35 +374,43 @@ Perl_grok_bslash_x(pTHX_ char **s, const char * const send, UV *uv,
* look beyond. That is, the function may look at bytes only in the
* range *s..send-1
* uv points to a UV that will hold the output value, valid only if the
- * return from the function is TRUE
- * error_msg is a pointer that will be set to an internal buffer giving an
- * error message upon failure (the return is FALSE). Untouched if
- * function succeeds
- * output_warning says whether to output any warning messages, or suppress
- * them
+ * return from the function is TRUE; may be changed from the input
+ * value even when FALSE is returned.
+ * message A pointer to any warning or error message will be stored into
+ * this pointer; NULL if none.
+ * packed_warn if NULL on input asks that this routine display any warning
+ * messages. Otherwise, if the function found a warning, the packed
+ * warning categories will be stored into *packed_warn (and the
+ * corresponding message text into *message); 0 if none.
* strict is true if anything out of the ordinary should cause this to
* fail instead of warn or be silent. For example, it requires
* exactly 2 digits following the \x (when there are no braces).
* 3 digits could be a mistake, so is forbidden in this mode.
- * silence_non_portable is true if to suppress warnings about the code
- * point returned being too large to fit on all platforms.
+ * allow_UV_MAX is true if this shouldn't fail if the input code point is
+ * UV_MAX, which is normally illegal, reserved for internal use.
* UTF is true iff the string *s is encoded in UTF-8.
*/
char* e;
STRLEN numbers_len;
- I32 flags = PERL_SCAN_DISALLOW_PREFIX;
-
+ I32 flags = PERL_SCAN_DISALLOW_PREFIX
+ | PERL_SCAN_SILENT_ILLDIGIT
+ | PERL_SCAN_NOTIFY_ILLDIGIT
+ | PERL_SCAN_SILENT_NON_PORTABLE
+ | PERL_SCAN_SILENT_OVERFLOW;
PERL_ARGS_ASSERT_GROK_BSLASH_X;
assert(*(*s - 1) == '\\');
assert(* *s == 'x');
+ *message = NULL;
+ if (packed_warn) *packed_warn = 0;
+
(*s)++;
if (send <= *s) {
if (strict) {
- *error_msg = "Empty \\x";
+ *message = "Empty \\x";
return FALSE;
}
@@ -225,24 +420,34 @@ Perl_grok_bslash_x(pTHX_ char **s, const char * const send, UV *uv,
return TRUE;
}
- if (strict || ! output_warning) {
- flags |= PERL_SCAN_SILENT_ILLDIGIT;
- }
-
if (**s != '{') {
- STRLEN len = (strict) ? 3 : 2;
-
- *uv = grok_hex(*s, &len, &flags, NULL);
- *s += len;
- if (strict && len != 2) {
- if (len < 2) {
- *s += (UTF) ? UTF8_SAFE_SKIP(*s, send) : 1;
- *error_msg = "Non-hex character";
+ numbers_len = (strict) ? 3 : 2;
+
+ *uv = grok_hex(*s, &numbers_len, &flags, NULL);
+ *s += numbers_len;
+
+ if (numbers_len != 2 && (strict || (flags & PERL_SCAN_NOTIFY_ILLDIGIT))) {
+ if (numbers_len == 3) { /* numbers_len 3 only happens with strict */
+ *message = "Use \\x{...} for more than two hex characters";
+ return FALSE;
}
- else {
- *error_msg = "Use \\x{...} for more than two hex characters";
+ else if (strict) {
+ *s += (UTF) ? UTF8_SAFE_SKIP(*s, send) : 1;
+ *message = "Non-hex character";
+ return FALSE;
+ }
+ else if (ckWARN(WARN_DIGIT)) {
+ const char * failure = form_alien_digit_msg(16, numbers_len, *s,
+ send, UTF, FALSE);
+
+ if (! packed_warn) {
+ Perl_warner(aTHX_ packWARN(WARN_DIGIT), "%s", failure);
+ }
+ else {
+ *message = failure;
+ *packed_warn = packWARN(WARN_DIGIT);
+ }
}
- return FALSE;
}
return TRUE;
}
@@ -250,13 +455,10 @@ Perl_grok_bslash_x(pTHX_ char **s, const char * const send, UV *uv,
e = (char *) memchr(*s, '}', send - *s);
if (!e) {
(*s)++; /* Move past the '{' */
- while (isXDIGIT(**s)) { /* Position beyond the legal digits */
+ while (*s < send && isXDIGIT(**s)) { /* Position beyond legal digits */
(*s)++;
}
- /* XXX The corresponding message above for \o is just '\\o{'; other
- * messages for other constructs include the '}', so are inconsistent.
- */
- *error_msg = "Missing right brace on \\x{}";
+ *message = "Missing right brace on \\x{}";
return FALSE;
}
@@ -266,7 +468,7 @@ Perl_grok_bslash_x(pTHX_ char **s, const char * const send, UV *uv,
if (numbers_len == 0) {
if (strict) {
(*s)++; /* Move past the } */
- *error_msg = "Empty \\x{}";
+ *message = "Empty \\x{}";
return FALSE;
}
*s = e + 1;
@@ -275,19 +477,35 @@ Perl_grok_bslash_x(pTHX_ char **s, const char * const send, UV *uv,
}
flags |= PERL_SCAN_ALLOW_UNDERSCORES;
- if (silence_non_portable) {
- flags |= PERL_SCAN_SILENT_NON_PORTABLE;
- }
*uv = grok_hex(*s, &numbers_len, &flags, NULL);
- /* Note that if has non-hex, will ignore everything starting with that up
- * to the '}' */
+ if (UNLIKELY( (flags & PERL_SCAN_GREATER_THAN_UV_MAX)
+ || (! allow_UV_MAX && *uv == UV_MAX)))
+ {
+ *message = form_cp_too_large_msg(16, *s, numbers_len, 0);
+ *s = e + 1;
+ return FALSE;
+ }
- if (strict && numbers_len != (STRLEN) (e - *s)) {
+ if (numbers_len != (STRLEN) (e - *s)) {
*s += numbers_len;
- *s += (UTF) ? UTF8_SAFE_SKIP(*s, send) : 1;
- *error_msg = "Non-hex character";
- return FALSE;
+ if (strict) {
+ *s += (UTF) ? UTF8_SAFE_SKIP(*s, send) : 1;
+ *message = "Non-hex character";
+ return FALSE;
+ }
+
+ if (ckWARN(WARN_DIGIT)) {
+ const char * failure = form_alien_digit_msg(16, numbers_len, *s,
+ send, UTF, TRUE);
+ if (! packed_warn) {
+ Perl_warner(aTHX_ packWARN(WARN_DIGIT), "%s", failure);
+ }
+ else {
+ *message = failure;
+ *packed_warn = packWARN(WARN_DIGIT);
+ }
+ }
}
/* Return past the '}' */
diff --git a/gnu/usr.bin/perl/dquote_inline.h b/gnu/usr.bin/perl/dquote_inline.h
deleted file mode 100644
index f0ce9d6280e..00000000000
--- a/gnu/usr.bin/perl/dquote_inline.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* dquote_inline.h
- *
- * Copyright (C) 2015 by Larry Wall and others
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- */
-
-#ifndef PERL_DQUOTE_INLINE_H_ /* Guard against nested #inclusion */
-#define PERL_DQUOTE_INLINE_H_
-
-/*
- - regcurly - a little FSA that accepts {\d+,?\d*}
- Pulled from reg.c.
- */
-PERL_STATIC_INLINE I32
-S_regcurly(const char *s)
-{
- PERL_ARGS_ASSERT_REGCURLY;
-
- if (*s++ != '{')
- return FALSE;
- if (!isDIGIT(*s))
- return FALSE;
- while (isDIGIT(*s))
- s++;
- if (*s == ',') {
- s++;
- while (isDIGIT(*s))
- s++;
- }
-
- return *s == '}';
-}
-
-/* This is inline not for speed, but because it is so tiny */
-
-PERL_STATIC_INLINE char*
-S_form_short_octal_warning(pTHX_
- const char * const s, /* Points to first non-octal */
- const STRLEN len /* Length of octals string, so
- (s-len) points to first
- octal */
-)
-{
- /* Return a character string consisting of a warning message for when a
- * string constant in octal is weird, like "\078". */
-
- const char * sans_leading_zeros = s - len;
-
- PERL_ARGS_ASSERT_FORM_SHORT_OCTAL_WARNING;
-
- assert(*s == '8' || *s == '9');
-
- /* Remove the leading zeros, retaining one zero so won't be zero length */
- while (*sans_leading_zeros == '0') sans_leading_zeros++;
- if (sans_leading_zeros == s) {
- sans_leading_zeros--;
- }
-
- return Perl_form(aTHX_
- "'%.*s' resolved to '\\o{%.*s}%c'",
- (int) (len + 2), s - len - 1,
- (int) (s - sans_leading_zeros), sans_leading_zeros,
- *s);
-}
-#endif /* PERL_DQUOTE_INLINE_H_ */
diff --git a/gnu/usr.bin/perl/dump.c b/gnu/usr.bin/perl/dump.c
index 9de1941b5a2..f03c3f61533 100644
--- a/gnu/usr.bin/perl/dump.c
+++ b/gnu/usr.bin/perl/dump.c
@@ -132,6 +132,16 @@ sequences, whereas C<"%"> is not a particularly common character in patterns.
Returns a pointer to the escaped text as held by C<dsv>.
+=for apidoc Amnh||PERL_PV_ESCAPE_ALL
+=for apidoc Amnh||PERL_PV_ESCAPE_FIRSTCHAR
+=for apidoc Amnh||PERL_PV_ESCAPE_NOBACKSLASH
+=for apidoc Amnh||PERL_PV_ESCAPE_NOCLEAR
+=for apidoc Amnh||PERL_PV_ESCAPE_NONASCII
+=for apidoc Amnh||PERL_PV_ESCAPE_QUOTE
+=for apidoc Amnh||PERL_PV_ESCAPE_RE
+=for apidoc Amnh||PERL_PV_ESCAPE_UNI
+=for apidoc Amnh||PERL_PV_ESCAPE_UNI_DETECT
+
=cut
*/
#define PV_ESCAPE_OCTBUFSIZE 32
@@ -267,6 +277,10 @@ any quotes or ellipses.
Returns a pointer to the prettified text as held by C<dsv>.
+=for apidoc Amnh||PERL_PV_PRETTY_QUOTE
+=for apidoc Amnh||PERL_PV_PRETTY_LTGT
+=for apidoc Amnh||PERL_PV_PRETTY_ELLIPSES
+
=cut
*/
@@ -1004,6 +1018,26 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o)
S_opdump_indent(aTHX_ o, level, bar, file, "PARENT");
S_opdump_link(aTHX_ o, op_parent((OP*)o), file);
}
+ else if (!OpHAS_SIBLING(o)) {
+ bool ok = TRUE;
+ OP *p = o->op_sibparent;
+ if (!p || !(p->op_flags & OPf_KIDS))
+ ok = FALSE;
+ else {
+ OP *kid = cUNOPx(p)->op_first;
+ while (kid != o) {
+ kid = OpSIBLING(kid);
+ if (!kid) {
+ ok = FALSE;
+ break;
+ }
+ }
+ }
+ if (!ok) {
+ S_opdump_indent(aTHX_ o, level, bar, file,
+ "*** WILD PARENT 0x%p\n", p);
+ }
+ }
if (o->op_targ && optype != OP_NULL)
S_opdump_indent(aTHX_ o, level, bar, file, "TARG = %ld\n",
@@ -1271,13 +1305,13 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o)
case OP_TRANS:
case OP_TRANSR:
- if (o->op_private & (OPpTRANS_FROM_UTF | OPpTRANS_TO_UTF)) {
- /* utf8: table stored as a swash */
+ if (o->op_private & OPpTRANS_USE_SVOP) {
+ /* utf8: table stored as an inversion map */
#ifndef USE_ITHREADS
- /* with ITHREADS, swash is stored in the pad, and the right pad
+ /* with ITHREADS, it is stored in the pad, and the right pad
* may not be active here, so skip */
S_opdump_indent(aTHX_ o, level, bar, file,
- "SWASH = 0x%" UVxf "\n",
+ "INVMAP = 0x%" UVxf "\n",
PTR2UV(MUTABLE_SV(cSVOPo->op_sv)));
#endif
}
@@ -2952,11 +2986,10 @@ Perl_op_class(pTHX_ const OP *o)
* pointer to a table of shorts used to look up translations.
* Under utf8, however, a simple table isn't practical; instead,
* the OP is an SVOP (or, under threads, a PADOP),
- * and the SV is a reference to a swash
- * (i.e., an RV pointing to an HV).
+ * and the SV is an AV.
*/
return (!custom &&
- (o->op_private & (OPpTRANS_TO_UTF|OPpTRANS_FROM_UTF))
+ (o->op_private & OPpTRANS_USE_SVOP)
)
#if defined(USE_ITHREADS)
? OPclass_PADOP : OPclass_PVOP;
diff --git a/gnu/usr.bin/perl/ebcdic_tables.h b/gnu/usr.bin/perl/ebcdic_tables.h
index 4036114cb1f..cf1beeb85e2 100644
--- a/gnu/usr.bin/perl/ebcdic_tables.h
+++ b/gnu/usr.bin/perl/ebcdic_tables.h
@@ -12,7 +12,7 @@
* More info is in utfebcdic.h
*
* Some of the tables are adapted from
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* which requires this copyright notice:
Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
@@ -288,7 +288,7 @@ SOFTWARE.
/* The table below is adapted from
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
@@ -329,7 +329,7 @@ SOFTWARE.
/* The table below is adapted from
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
@@ -368,14 +368,15 @@ SOFTWARE.
/*N11=253*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
/*N12=276*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,299,
/*N13=299*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
-/*N14=322*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,299
+/*N14=322*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,345,
+/*N15=345*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,299
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22*/
};
# endif
/* The table below is adapted from
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
@@ -665,7 +666,7 @@ SOFTWARE.
/* The table below is adapted from
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
@@ -706,7 +707,7 @@ SOFTWARE.
/* The table below is adapted from
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
@@ -745,14 +746,15 @@ SOFTWARE.
/*N11=253*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
/*N12=276*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,299,
/*N13=299*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
-/*N14=322*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,299
+/*N14=322*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46,345,
+/*N15=345*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,299
/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22*/
};
# endif
/* The table below is adapted from
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
diff --git a/gnu/usr.bin/perl/embed.fnc b/gnu/usr.bin/perl/embed.fnc
index 0a61018b8df..589ab1a59cb 100644
--- a/gnu/usr.bin/perl/embed.fnc
+++ b/gnu/usr.bin/perl/embed.fnc
@@ -1,43 +1,179 @@
: BEGIN{die "You meant to run regen/embed.pl"} # Stop early if fed to perl.
:
-: This file is processed by regen/embed.pl and autodoc.pl
-: It is used to declare the interfaces to the functions defined by perl. All
-: non-static functions must have entries here. Static functions need not, but
-: there is benefit to declaring them here, as it generally handles the thread
-: context parameter invisibly, as well as making sure a PERL_ARGS_ASSERT_foo
-: macro is defined, which can save you debugging time.
+: WARNING: The meanings of some flags have been changed as of v5.31.0
:
-: Lines are of the form:
-: flags|return_type|function_name|arg1|arg2|...|argN
+: This file is known to be processed by regen/embed.pl, autodoc.pl,
+: makedef.pl, Devel::PPPort, and porting/diag.t.
:
-: A line may be continued on another by ending it with a backslash.
+: This file contains entries for various functions and macros defined by perl.
+: Each entry includes the name, parameters, and various attributes about it.
+: In most functions listed here, the name is a short name, and the function's
+: real name is the short one, prefixed by either 'Perl_' (for publicly visible
+: functions) or 'S_' (for internal-to-a-file static ones). In many instances a
+: macro is defined that is the name in this file, and which expands to call the
+: real (full) name, with any appropriate thread context paramaters, thus hiding
+: that detail from the typical code.
+:
+: Most macros listed here are the complete full name.
+:
+: All non-static functions defined by perl need to be listed in this file.
+: embed.pl uses the entries here to construct:
+: 1) proto.h to declare to the compiler the function interfaces; and
+: 2) embed.h to create short name macros
+:
+: Static functions internal to a file need not appear here, but there is
+: benefit to declaring them here, as it generally handles the thread context
+: parameter invisibly, as well as making sure a PERL_ARGS_ASSERT_foo macro is
+: defined, which can save you debugging time.
+:
+: Lines in this file are of the form:
+: flags|return_type|name|arg1|arg2|...|argN
+:
+: 'flags' is a string of single letters. Most of the flags are meaningful only
+: to embed.pl; some only to autodoc.pl, and others only to makedef.pl. The
+: comments here mostly don't include how Devel::PPPort or diag.t use them:
+:
+: A function taking no parameters will have no 'arg' elements.
+: A line may be continued onto the next by ending it with a backslash.
: Leading and trailing whitespace will be ignored in each component.
:
+: Most entries here have a macro created with the entry name. This presents
+: name space collision potentials which haven't been well thought out, but are
+: now documented here. In practice this has rarely been an issue. At least,
+: with a macro, the XS author can #undef it, unlike a function.
+:
: The default without flags is to declare a function for internal perl-core use
-: only, not visible to XS code nor to Perl extensions. Use the A and E flags to
-: modify this. Most non-static functions should have the 'p' flag to avoid
-: namespace clashes with programs that embed perl.
+: only. The short name is visible only when the PERL_CORE symbol is defined.
+: On some platforms, such as Linux and Darwin, all non-static functions
+: are currently externally visible. Because of this, and also for programs
+: that embed perl, most non-static functions should have the 'p' flag to avoid
+: namespace clashes.
+:
+: There are several advantages to using a macro instead of the full Perl_foo or
+: S_foo form: it hides the need to know if the called function requires a
+: thread context parameter or not, and the code using it is more readable
+: because of fewer parameters being visible. And if there is some bug in it
+: that gets fixed in a later release, ppport.h can be changed to automatically
+: backport the fixed version to modules. The only disadvantage khw can think
+: of is the namespace pollution one.
+:
+: Since we don't require a C compiler to support variadic macros (C99), the
+: macros can't be generated in such situations.
+:
+: WARNING: Any macro created in a header file is visible to XS code, unless
+: care is taken to wrap it within something like #ifdef PERL_CORE..#endif.
+: This has had to be done with things like MAX and MIN, but nearly everything
+: else has been created without regard to the namespace pollution problem.
+:
+: Here's what else you need to know about using this file with regards to name
+: space pollution:
+:
+: The A flag is used to make a function and its short name visible everywhere
+: on all platforms. This should be used to make it part of Perl's
+: API contract with XS developers. The documentation for these is
+: usually placed in perlapi. If no documentation exists, that fact
+: is also noted in perlapi.
+:
+: The C flag is used instead for functions and their short names that need to
+: be accessible everywhere, typically because they are called from a
+: publicly available macro or inline function, but they are not for
+: public use by themselves. The documentation for these is placed
+: in perlintern. If no documentation exists, that fact is also
+: noted in perlintern.
+:
+: These really need the 'p' flag to avoid name space collisions.
+:
+: Some of these have been constructed so that the wrapper macro
+: names begin with an underscore to lessen the chances of a name
+: collision. However, this is contrary to the C standard, and those
+: should be changed.
+:
+: The E flag is used instead for a function and its short name that is supposed
+: to be used only in the core, and in extensions compiled with the
+: PERL_EXT symbol defined. Again, on some platforms, the function
+: will be visible everywhere, so one of the 'p' or 'S' flags is
+: generally needed. Also note that an XS writer can always cheat
+: and pretend to be an extension by #defining PERL_EXT.
+:
+: The X flag is similar to the C flag in that the function (whose entry better
+: have the 'p' flag) is accessible everywhere on all platforms.
+: However the short name macro that normally gets generated is
+: suppressed outside the core. (Except it is also visible in
+: PERL_EXT extensions if the E flag is also specified.) This flag
+: is used for functions that are called from a public macro, the
+: name of which isn't derived from the function name. You'll have
+: to write the macro yourself, and from within it, refer to the
+: function in its full 'Perl_' form with any necessary thread
+: context parameter.
+:
+: Scattered around the perl source are lines of the form:
+:
+: =for apidoc name
+:
+: followed by pod for that function. The purpose of these is to tell
+: autodoc.pl where the documentation is for a function listed in this file. It
+: uses the prototype from here and the pod from there in generating the
+: documentation in perlapi or perlintern. The entries in this file that have
+: corresponding '=for apidoc' entries should have the 'd' flag set in this
+: file.
:
-: flags are single letters with following meanings:
+: There are also lines of this form scattered around:
:
-: A Available fully everywhere (usually part of the public API):
+: =for apidoc flags|return_type|name|arg1|arg2|...|argN
:
-: add entry to the list of exported symbols (unless x or m);
-: any doc entry goes in perlapi.pod rather than perlintern.pod. If no
-: documentation is furnished for this function, and M is also
-: specified, the function is not listed as part of the public API.
-: If M isn't specified, and no documentation is furnished, the
-: function is listed in perlapi as existing and being undocumented
-: makes '#define foo Perl_foo' scope not just for PERL_CORE/PERL_EXT
+: and with the same meanings as the lines in this file. These are for
+: documenting macros. The 'name' in any such line must not be the same as any
+: in this file (i.e., no redundant definitions), and one of the flags must be
+: 'm', indicating it is a macro. The lines following these are pod for the
+: respective macro. Since these are macros, the arguments need not be legal C
+: parameters. To indicate this to downstream software that inspects these
+: lines, there are a few conventions:
+: type should be the entire argument name if it names a type
+: cast should be the entire argument name if it is a cast
+: SP should be the entire argument name if it is the stack pointer SP
+: block should be the entire argument name if it is a C brace-enclosed block
:
-: If the function is only exported for use in a public
-: macro, see X.
+: The letters above are exact. For example, you have to have 't', 'y', 'p',
+: and 'e' literally. Here is an example:
+: =for apidoc Am|void|Newxc|void* ptr|int nitems|type|cast
:
-: a Allocates memory a la malloc/calloc. Also implies "R".
-: This should only be on functions which returns 'empty' memory
-: which has no other pointers to it, and which does not contain
-: any pointers to other things. So for example realloc() can't be
-: 'a'.
+: Additionally, an argument can be some word(s) enclosed in double quotes to
+: indicate that it has to be a string, instead of a const char * const, like this
+: =for apidoc Ama|SV*|newSVpvs|"string"
+:
+: If any argument or return value is not one of the above, and isn't a legal C
+: language one, the 'u' flag should be specified.
+:
+: Again, autodoc uses these lines to construct perlapi. 'return_type' in these
+: lines can be empty, unlike in this file.
+:
+: Devel::PPPort also looks at both this file and the '=for apidoc' lines. In
+: part it is to construct lists of functions that are or are not backported.
+:
+: makedef.pl uses this file for constructing the export list which lists the
+: symbols that should be available on all platforms.
+:
+: porting/diag.t checks some things for consistency based on this file.
+:
+: The remainder of these introductory comments detail all the possible flags:
+:
+: A Both long and short names are accessible fully everywhere (usually part
+: of the public API). If the function is not part of the public API,
+: instead use C, E, or X.
+:
+: add entry to the list of symbols available on all platforms
+: unless e or m are also specified;
+: any doc entry goes in perlapi.pod rather than perlintern.pod. If
+: there isn't a doc entry, autodoc.pl lists this in perlapi as
+: existing and being undocumented; unless x is also specified, in
+: which case it simply isn't listed.
+: makes the short name defined for everywhere, not just for
+: PERL_CORE/PERL_EXT
+:
+: a Allocates memory a la malloc/calloc. Also implies "R". This flag
+: should only be on a function which returns 'empty' memory which has no
+: other pointers to it, and which does not contain any pointers to other
+: things. So for example realloc() can't be 'a'.
:
: proto.h: add __attribute__malloc__
:
@@ -45,93 +181,182 @@
: kept only to not have to change legacy applications that call them. If
: there are no such legacy applications in a Perl installation for all
: functions flagged with this, the installation can run Configure with the
-: -Accflags='-DNO_MATHOMS' parameter to not even compile them. If there
-: is a macro form of this function that provides equivalent functionality
-: (using a different implementation), also specify the 'm' flag. The 'b'
-: functions are normally moved to mathoms.c, but if circumstances dictate
-: otherwise, they can be anywhere, provided the whole function is wrapped
-: with
-: #ifndef NO_MATHOMS
-: ...
-: #endif
+: -Accflags='-DNO_MATHOMS' parameter to not even compile them.
+:
+: Sometimes the function has been subsumed by a more general one (say, by
+: adding a flags parameter), and a macro exists with the original short
+: name API, and it calls the new function, bypassing this one, and the
+: original 'Perl_' form is being deprecated. In this case also specify
+: the 'M' flag.
+:
+: Without the M flag, these functions should be deprecated, and it is an
+: error to not also specify the 'D' flag.
+:
+: The 'b' functions are normally moved to mathoms.c, but if circumstances
+: dictate otherwise, they can be anywhere, provided the whole function is
+: wrapped with
+: #ifndef NO_MATHOMS
+: ...
+: #endif
:
: Note that this flag no longer automatically adds a 'Perl_' prefix to the
: name. Additionally specify 'p' to do that.
:
-: For functions, like wrappers, whose macro shortcut doesn't call the
-: function, but which, for whatever reason, aren't considered legacy-only,
-: use the 'o' flag
-:
: This flag effectively causes nothing to happen if the perl interpreter
-: is compiled with -DNO_MATHOMS; otherwise these happen:
-: add entry to the list of exported symbols;
+: is compiled with -DNO_MATHOMS (which causes any functions with this flag
+: to not be compiled); otherwise these happen:
+: add entry to the list of symbols available on all platforms;
: create PERL_ARGS_ASSERT_foo;
-: add embed.h entry (unless overridden by the 'm' flag)
+: add embed.h entry (unless overridden by the 'M' or 'o' flags)
+:
+: C Intended for core use only. This indicates to XS writers that they
+: shouldn't be using this function. Devel::PPPort informs them of this,
+: for example. Some functions have to be accessible everywhere even if
+: they are not intended for public use. An example is helper functions
+: that are called from inline ones that are publicly available.
+:
+: add entry to the list of symbols available on all platforms
+: unless e or m are also specified;
+: any doc entry goes in perlintern.pod rather than perlapi.pod. If
+: there isn't a doc entry, autodoc.pl lists this in perlintern as
+: existing and being undocumented
+: makes the short name defined for everywhere, not just for
+: PERL_CORE/PERL_EXT
:
: D Function is deprecated:
:
: proto.h: add __attribute__deprecated__
+: autodoc.pl adds a note to this effect in the doc entry
:
: d Function has documentation (somewhere) in the source:
:
-: enables 'no docs for foo" warning in autodoc.pl
+: enables 'no docs for foo" warning in autodoc.pl if the documentation
+: isn't found.
:
: E Visible to extensions included in the Perl core:
:
: in embed.h, change "#ifdef PERL_CORE"
: into "#if defined(PERL_CORE) || defined(PERL_EXT)"
:
-: To be usable from dynamically loaded extensions, either:
-: 1) must be static to its containing file ("i" or "s" flag); or
+: To be usable from dynamically loaded extensions, either:
+: 1) it must be static to its containing file ("i" or "s" flag); or
: 2) be combined with the "X" flag.
:
+: e Not exported
+:
+: suppress entry in the list of symbols available on all platforms
+:
: f Function takes a format string. If the function name =~ qr/strftime/
-: then its assumed to take a strftime-style format string as 1st arg;
-: otherwise it's assumed to be a printf style format string, varargs
-: (hence any entry that would otherwise go in embed.h is suppressed):
+: then it is assumed to take a strftime-style format string as the 1st
+: arg; otherwise it's assumed to take a printf style format string, not
+: necessarily the 1st arg. All the arguments following it (including
+: possibly '...') are assumed to be for the format.
:
+: embed.h: any entry in here is suppressed because of varargs
: proto.h: add __attribute__format__ (or ...null_ok__)
:
-: i Static inline: function in source code has a S_ prefix:
+: F Function has a '...' parameter, but don't assume it is a format. This
+: is to make sure that new functions with formats can't be added without
+: considering if they are format functions or not. A reason to use this
+: flag even on a format function is if the format would generate
+: error: format string argument is not a string type
:
-: proto.h: function is declared as S_foo rather than foo unless the 'p'
-: flag is also given in which case 'Perl_foo' is used,
-: PERL_STATIC_INLINE is added to declaration;
-: embed.h: "#define foo S_foo" or Perl_foo entries added
+: G Suppress empty PERL_ARGS_ASSERT_foo macro. Normally such a macro is
+: generated for all entries for functions 'foo' in this file. If there is
+: a pointer argument to 'foo', it needs to be declared in this file as
+: either NN or NULLOK, and the function definition must call its
+: corresponding PERL_ARGS_ASSERT_foo macro (a porting test ensures this)
+: which asserts at runtime (under DEBUGGING builds) that NN arguments are
+: not NULL. If there aren't NN arguments, use of this macro is optional.
+: Rarely, a function will define its own PERL_ARGS_ASSERT_foo macro, and
+: in those cases, adding this flag to its entry in this file will suppress
+: the normal one. It is not possible to suppress the generated macro if
+: it isn't optional, that is, if there is at least one NN argument.
:
-: M May change:
+: proto.h: PERL_ARGS_ASSERT macro is not defined unless the function
+: has NN arguments
:
-: any doc entry is marked that function may change. Also used to
-: suppress making a doc entry if it would just be a placeholder.
+: h Hide any documentation. This is used when the documentation is atypical
+: of the rest of perlapi and perlintern. In other words the item is
+: documented, but just not the standard way. One reason would be if there
+: are a bunch of macros which follow a common paradigm in their naming, so
+: rather than having an entry for each slight variation, there is an
+: overarchinge one. It is also used when the documentation is in another
+: pod, such as perlguts or warnings.h. This flag is useful for downstream
+: programs, such as Devel::PPPort.
:
-: m Implemented as a macro:
+: I This flag works exactly the same as 'i' but it also adds
+: __attribute__((always_inline)) or __forceinline if either of them is
+: supported by the compiler.
:
-: suppress proto.h entry unless 'b' also specified (actually, not
-: suppressed, but commented out)
-: suppress entry in the list of exported symbols
-: suppress embed.h entry
+: proto.h: function is declared as PERL_STATIC_FORCE_INLINE and
+: __attribute__always_inline__ is added
:
-: n Has no implicit interpreter/thread context argument:
+: i inline static. This is used for functions that the compiler is being
+: requested to inline. If the function is in a header file its
+: definition will be visible (unless guarded by #if..#endif) to all
+: XS code. (A typical guard will be that it is being included in a
+: particular C file(s) or in the perl core.) Therefore, all
+: non-guarded function should also have the 'p' flag specified to avoid
+: polluting the XS code name space. Otherwise an error is generated if
+: the 'S' flag is not also specified.
:
-: suppress the pTHX part of "foo(pTHX...)" in proto.h;
-: In the PERL_IMPLICIT_SYS branch of embed.h, generates
-: "#define foo Perl_foo", rather than
-: "#define foo(a,b,c) Perl_foo(aTHX_ a,b,c)
+: proto.h: function is declared as PERL_STATIC_INLINE
+:
+: m Implemented as a macro; there is no function associated with this name,
+: and hence no long Perl_ or S_ name. However, if the macro name itself
+: begins with 'Perl_', autodoc.pl will show a thread context parameter
+: unless the 'T' flag is specified.
+:
+: suppress proto.h entry (actually, not suppressed, but commented out)
+: suppress entry in the list of exported symbols available on all platforms
+: suppress embed.h entry, as the implementation should furnish the macro
+:
+: M The implementation is furnishing its own macro instead of relying on the
+: default short name macro that simply expands to call the real name
+: function. This is used if the parameters need to be cast from what the
+: caller has, or if there is a macro that bypasses this function (whose
+: long name is being retained for backward compatibility for those who
+: call it with that name). An example is when a new function is created
+: with an extra parameter and a wrapper macro is added that has the old
+: API, but calls the new one with the exta parameter set to a default.
+:
+: This flag requires the 'p' flag to be specified, as there would be no
+: need to do this if the function weren't publicly accessible before.
+:
+: The entry is processed based on the other flags, but the:
+: embed.h entry is suppressed
+:
+: N The name in the entry isn't strictly a name
+:
+: Normally, the name of the function or macro must contain all \w
+: characters, and a warning is raised otherwise. This flag suppresses
+: that warning, so that weird things can be documented
+:
+: n Has no arguments (used only in =for apidoc entries)
+:
+: The macro (it can't be a function) is used without any parameters nor
+: empty parentheses.
:
: O Has a perl_ compatibility macro.
:
-: The really OLD name for API funcs
+: The really OLD name for API funcs.
+:
+: autodoc.pl adds a note that the perl_ form of this function is
+: deprecated.
:
: o Has no Perl_foo or S_foo compatibility macro:
:
-: This can be used when you define a macro with this entry's name that
-: doesn't call the function specified by this entry. This is typically
-: done for a function that effectively just wraps another one, and where
-: the macro form calls the underlying function directly. For these, also
-: specify the 'm' flag. Legacy-only functions should instead use 'b'.
+: This is used for whatever reason to force the function to be called
+: with the long name. Perhaps there is a varargs issue. Use the 'M'
+: flag instead for wrapper macros, and legacy-only functions should
+: also use 'b'.
:
: embed.h: suppress "#define foo Perl_foo"
:
+: autodoc.pl adds a note that this function must be explicitly called as
+: Perl_$name with an aTHX_ parameter.
+:
: P Pure function:
:
: A pure function has no effects except the return value, and the return
@@ -158,21 +383,44 @@
:
: R Return value must not be ignored (also implied by 'a' and 'P' flags):
:
+: gcc has a bug (which they claim is a feature) in which casting the
+: result of one of these to (void) doesn't silence the warning that the
+: result is ignored.
+:
: proto.h: add __attribute__warn_unused_result__
:
: r Function never returns:
:
: proto.h: add __attribute__noreturn__
:
-: s Static function: function in source code has a S_ prefix:
+: S Static function: function in source code has a S_ prefix:
:
: proto.h: function is declared as S_foo rather than foo,
: STATIC is added to declaration;
: embed.h: "#define foo S_foo" entries added
:
-: U Suppress usage example in autogenerated documentation
+: s autodoc.pl adds a terminating semi-colon to the usage example in the
+: documentation.
+:
+: T Has no implicit interpreter/thread context argument:
+:
+: suppress the pTHX part of "foo(pTHX...)" in proto.h;
+: In the PERL_IMPLICIT_SYS branch of embed.h, generates
+: "#define foo Perl_foo", rather than
+: "#define foo(a,b,c) Perl_foo(aTHX_ a,b,c)
+:
+: u The macro's (it has to be a macro) return value or parameters are
+: unorthodox, and aren't in the list above of recognized weird ones. For
+: example, they aren't C parameters, or the macro expands to something
+: that isn't a symbol.
:
-: (currently no effect)
+: For example, the expansion of STR_WITH_LEN is a comma separated pair of
+: values, so would have this flag; or some macros take preprocessor
+: tokens, so would have this flag. This flag is an indication to
+: downstream tools, such as Devel::PPPort, that this requires special
+: handling.
+:
+: U autodoc.pl will not output a usage example
:
: W Add a _pDEPTH argument to function prototypes, and an _aDEPTH
: argument to the function calls. This means that under DEBUGGING
@@ -183,29 +431,32 @@
:
: X Explicitly exported:
:
-: add entry to the list of exported symbols, unless x or m
+: add entry to the list of symbols available on all platforms, unless e
+: or m
:
: This is often used for private functions that are used by public
: macros. In those cases the macros must use the long form of the
: name (Perl_blah(aTHX_ ...)).
:
-: x Not exported
-:
-: suppress entry in the list of exported symbols
+: x Experimental, may change:
:
-: (see also L<perlguts/Internal Functions> for those flags.)
+: any doc entry is marked that it may change. Also used to suppress
+: making a perlapi doc entry if it would just be a placeholder.
:
-: Pointer parameters that must not be passed NULLs should be prefixed with NN.
+: In this file, pointer parameters that must not be passed NULLs should be
+: prefixed with NN.
:
-: Pointer parameters that may be NULL should be prefixed with NULLOK. This has
-: no effect on output yet. It's a notation for the maintainers to know "I have
-: defined whether NULL is OK or not" rather than having neither NULL or NULLOK,
-: which is ambiguous.
+: And, pointer parameters that may be NULL should be prefixed with NULLOK.
+: This has no effect on output yet. It's a notation for the maintainers to
+: know "I have defined whether NULL is OK or not" rather than having neither
+: NULL or NULLOK, which is ambiguous.
:
-: Individual flags may be separated by whitespace.
+: Individual flags may be separated by non-tab whitespace.
+
+CipRTX |char * |mortal_getenv |NN const char * str
#if defined(PERL_IMPLICIT_SYS)
-Ano |PerlInterpreter*|perl_alloc_using \
+ATo |PerlInterpreter*|perl_alloc_using \
|NN struct IPerlMem *ipM \
|NN struct IPerlMem *ipMS \
|NN struct IPerlMem *ipMP \
@@ -216,18 +467,18 @@ Ano |PerlInterpreter*|perl_alloc_using \
|NN struct IPerlSock *ipS \
|NN struct IPerlProc *ipP
#endif
-Anod |PerlInterpreter* |perl_alloc
-Anod |void |perl_construct |NN PerlInterpreter *my_perl
-Anod |int |perl_destruct |NN PerlInterpreter *my_perl
-Anod |void |perl_free |NN PerlInterpreter *my_perl
-Anod |int |perl_run |NN PerlInterpreter *my_perl
-Anod |int |perl_parse |NN PerlInterpreter *my_perl|XSINIT_t xsinit \
+ATod |PerlInterpreter* |perl_alloc
+ATod |void |perl_construct |NN PerlInterpreter *my_perl
+ATod |int |perl_destruct |NN PerlInterpreter *my_perl
+ATod |void |perl_free |NN PerlInterpreter *my_perl
+ATod |int |perl_run |NN PerlInterpreter *my_perl
+ATod |int |perl_parse |NN PerlInterpreter *my_perl|XSINIT_t xsinit \
|int argc|NULLOK char** argv|NULLOK char** env
-AnpR |bool |doing_taint |int argc|NULLOK char** argv|NULLOK char** env
+ATpR |bool |doing_taint |int argc|NULLOK char** argv|NULLOK char** env
#if defined(USE_ITHREADS)
-Anod |PerlInterpreter*|perl_clone|NN PerlInterpreter *proto_perl|UV flags
+ATod |PerlInterpreter*|perl_clone|NN PerlInterpreter *proto_perl|UV flags
# if defined(PERL_IMPLICIT_SYS)
-Ano |PerlInterpreter*|perl_clone_using \
+ATo |PerlInterpreter*|perl_clone_using \
|NN PerlInterpreter *proto_perl \
|UV flags \
|NN struct IPerlMem* ipM \
@@ -242,20 +493,20 @@ Ano |PerlInterpreter*|perl_clone_using \
# endif
#endif
-Aanop |Malloc_t|malloc |MEM_SIZE nbytes
-Aanop |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size
-ARnop |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes
-Anop |Free_t |mfree |Malloc_t where
+AaTophd |Malloc_t|malloc |MEM_SIZE nbytes
+AaTophd |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size
+ARTophd |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes
+ATop |Free_t |mfree |Malloc_t where
#if defined(MYMALLOC)
-npR |MEM_SIZE|malloced_size |NN void *p
-npR |MEM_SIZE|malloc_good_size |size_t nbytes
+TpR |MEM_SIZE|malloced_size |NN void *p
+TpR |MEM_SIZE|malloc_good_size |size_t nbytes
#endif
#if defined(PERL_IN_MALLOC_C)
-sn |int |adjust_size_and_find_bucket |NN size_t *nbytes_p
+ST |int |adjust_size_and_find_bucket |NN size_t *nbytes_p
#endif
-AnpR |void* |get_context
-Anp |void |set_context |NN void *t
+ATpR |void* |get_context
+ATp |void |set_context |NN void *t
XEop |bool |try_amagic_bin |int method|int flags
XEop |bool |try_amagic_un |int method|int flags
@@ -270,7 +521,7 @@ Apd |OP* |op_linklist |NN OP *o
Apd |OP* |op_prepend_elem|I32 optype|NULLOK OP* first|NULLOK OP* last
: FIXME - this is only called by pp_chown. They should be merged.
p |I32 |apply |I32 type|NN SV** mark|NN SV** sp
-ApM |void |apply_attrs_string|NN const char *stashpv|NN CV *cv|NN const char *attrstr|STRLEN len
+Apx |void |apply_attrs_string|NN const char *stashpv|NN CV *cv|NN const char *attrstr|STRLEN len
Apd |void |av_clear |NN AV *av
Apd |SV* |av_delete |NN AV *av|SSize_t key|I32 flags
ApdR |bool |av_exists |NN AV *av|SSize_t key
@@ -284,21 +535,21 @@ ApdR |SSize_t|av_len |NN AV *av
ApdR |AV* |av_make |SSize_t size|NN SV **strp
p |SV* |av_nonelem |NN AV *av|SSize_t ix
Apd |SV* |av_pop |NN AV *av
-ApdoxM |void |av_create_and_push|NN AV **const avp|NN SV *const val
+Apdoex |void |av_create_and_push|NN AV **const avp|NN SV *const val
Apd |void |av_push |NN AV *av|NN SV *val
: Used in scope.c, and by Data::Alias
EXp |void |av_reify |NN AV *av
ApdR |SV* |av_shift |NN AV *av
Apd |SV** |av_store |NN AV *av|SSize_t key|NULLOK SV *val
-AidR |SSize_t|av_top_index |NN AV *av
-AmpdR |SSize_t|av_tindex |NN AV *av
+AidRp |SSize_t|av_top_index |NN AV *av
+AmdR |SSize_t|av_tindex |NN AV *av
Apd |void |av_undef |NN AV *av
-ApdoxM |SV** |av_create_and_unshift_one|NN AV **const avp|NN SV *const val
+Apdoex |SV** |av_create_and_unshift_one|NN AV **const avp|NN SV *const val
Apd |void |av_unshift |NN AV *av|SSize_t num
Apo |SV** |av_arylen_p |NN AV *av
Apo |IV* |av_iter_p |NN AV *av
#if defined(PERL_IN_AV_C)
-s |MAGIC* |get_aux_mg |NN AV *av
+S |MAGIC* |get_aux_mg |NN AV *av
#endif
: Used in perly.y
pR |OP* |bind_match |I32 type|NN OP *left|NN OP *right
@@ -307,7 +558,7 @@ ApdR |OP* |block_end |I32 floor|NULLOK OP* seq
ApR |U8 |block_gimme
: Used in perly.y
ApdR |int |block_start |int full
-Aodp |void |blockhook_register |NN BHK *hk
+Aodxp |void |blockhook_register |NN BHK *hk
: Used in perl.c
p |void |boot_core_UNIVERSAL
: Used in perl.c
@@ -317,10 +568,10 @@ Apd |const PERL_CONTEXT * |caller_cx|I32 level \
|NULLOK const PERL_CONTEXT **dbcxp
: Used in several source files
pR |bool |cando |Mode_t mode|bool effective|NN const Stat_t* statbufp
-ApRn |U32 |cast_ulong |NV f
-ApRn |I32 |cast_i32 |NV f
-ApRn |IV |cast_iv |NV f
-ApRn |UV |cast_uv |NV f
+ApRT |U32 |cast_ulong |NV f
+ApRT |I32 |cast_i32 |NV f
+ApRT |IV |cast_iv |NV f
+ApRT |UV |cast_uv |NV f
#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
ApR |I32 |my_chsize |int fd|Off_t length
#endif
@@ -329,60 +580,62 @@ p |const COP*|closest_cop |NN const COP *cop|NULLOK const OP *o \
: Used in perly.y
ApdR |OP* |op_convert_list |I32 optype|I32 flags|NULLOK OP* o
: Used in op.c and perl.c
-pM |void |create_eval_scope|NULLOK OP *retop|U32 flags
+px |void |create_eval_scope|NULLOK OP *retop|U32 flags
Aprd |void |croak_sv |NN SV *baseex
: croak()'s first parm can be NULL. Otherwise, mod_perl breaks.
Afprd |void |croak |NULLOK const char* pat|...
Aprd |void |vcroak |NULLOK const char* pat|NULLOK va_list* args
-Anprd |void |croak_no_modify
-Anprd |void |croak_xs_usage |NN const CV *const cv \
+ATprd |void |croak_no_modify
+ATprd |void |croak_xs_usage |NN const CV *const cv \
|NN const char *const params
-npr |void |croak_no_mem
-nprX |void |croak_popstack
-fnrp |void |croak_caller|NULLOK const char* pat|...
-fnprx |void |noperl_die|NN const char* pat|...
+Tpr |void |croak_no_mem
+TprX |void |croak_popstack
+fTrp |void |croak_caller|NULLOK const char* pat|...
+fTpre |void |noperl_die|NN const char* pat|...
#if defined(WIN32)
-norx |void |win32_croak_not_implemented|NN const char * fname
+Tore |void |win32_croak_not_implemented|NN const char * fname
#endif
#if defined(PERL_IMPLICIT_CONTEXT)
-Afnrp |void |croak_nocontext|NULLOK const char* pat|...
-Afnrp |OP* |die_nocontext |NULLOK const char* pat|...
-Afnp |void |deb_nocontext |NN const char* pat|...
-Afnp |char* |form_nocontext |NN const char* pat|...
-Anp |void |load_module_nocontext|U32 flags|NN SV* name|NULLOK SV* ver|...
-Afnp |SV* |mess_nocontext |NN const char* pat|...
-Afnp |void |warn_nocontext |NN const char* pat|...
-Afnp |void |warner_nocontext|U32 err|NN const char* pat|...
-Afnp |SV* |newSVpvf_nocontext|NN const char *const pat|...
-Afnp |void |sv_catpvf_nocontext|NN SV *const sv|NN const char *const pat|...
-Afnp |void |sv_setpvf_nocontext|NN SV *const sv|NN const char *const pat|...
-Afnp |void |sv_catpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
-Afnp |void |sv_setpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
-Abfnp |int |fprintf_nocontext|NN PerlIO *stream|NN const char *format|...
-Abfnp |int |printf_nocontext|NN const char *format|...
+AfTrp |void |croak_nocontext|NULLOK const char* pat|...
+AfTrp |OP* |die_nocontext |NULLOK const char* pat|...
+AfTp |void |deb_nocontext |NN const char* pat|...
+AfTp |char* |form_nocontext |NN const char* pat|...
+AFTp |void |load_module_nocontext|U32 flags|NN SV* name|NULLOK SV* ver|...
+AfTp |SV* |mess_nocontext |NN const char* pat|...
+AfTp |void |warn_nocontext |NN const char* pat|...
+AfTp |void |warner_nocontext|U32 err|NN const char* pat|...
+AfTp |SV* |newSVpvf_nocontext|NN const char *const pat|...
+AfTp |void |sv_catpvf_nocontext|NN SV *const sv|NN const char *const pat|...
+AfTp |void |sv_setpvf_nocontext|NN SV *const sv|NN const char *const pat|...
+AfTp |void |sv_catpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
+AfTp |void |sv_setpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|...
+AbfTpD |int |fprintf_nocontext|NN PerlIO *stream|NN const char *format|...
+AbfTpD |int |printf_nocontext|NN const char *format|...
#endif
: Used in pp.c
-p |SV * |core_prototype |NULLOK SV *sv|NN const char *name \
+pd |SV * |core_prototype |NULLOK SV *sv|NN const char *name \
|const int code|NULLOK int * const opnum
: Used in gv.c
p |OP * |coresub_op |NN SV *const coreargssv|const int code \
|const int opnum
: Used in sv.c
-EMXp |void |cv_ckproto_len_flags |NN const CV* cv|NULLOK const GV* gv\
+ExXp |void |cv_ckproto_len_flags |NN const CV* cv|NULLOK const GV* gv\
|NULLOK const char* p|const STRLEN len \
|const U32 flags
: Used in pp.c and pp_sys.c
ApdR |SV* |gv_const_sv |NN GV* gv
-ApdRn |SV* |cv_const_sv |NULLOK const CV *const cv
-pRn |SV* |cv_const_sv_or_av|NULLOK const CV *const cv
+ApdRT |SV* |cv_const_sv |NULLOK const CV *const cv
+pRT |SV* |cv_const_sv_or_av|NULLOK const CV *const cv
Apd |SV * |cv_name |NN CV *cv|NULLOK SV *sv|U32 flags
Apd |void |cv_undef |NN CV* cv
p |void |cv_undef_flags |NN CV* cv|U32 flags
-p |void |cv_forget_slab |NULLOK CV *cv
+pd |void |cv_forget_slab |NULLOK CV *cv
Ap |void |cx_dump |NN PERL_CONTEXT* cx
-Ap |SV* |filter_add |NULLOK filter_t funcp|NULLOK SV* datasv
+AiMp |GV * |CvGV |NN CV *sv
+AiMTp |I32 * |CvDEPTH |NN const CV * const sv
+Aphd |SV* |filter_add |NULLOK filter_t funcp|NULLOK SV* datasv
Ap |void |filter_del |NN filter_t funcp
-ApR |I32 |filter_read |int idx|NN SV *buf_sv|int maxlen
+ApRhd |I32 |filter_read |int idx|NN SV *buf_sv|int maxlen
ApPR |char** |get_op_descs
ApPR |char** |get_op_names
: FIXME discussion on p5p
@@ -401,31 +654,31 @@ Ap |I32 |debop |NN const OP* o
Ap |I32 |debstack
Ap |I32 |debstackptrs
pR |SV * |defelem_target |NN SV *sv|NULLOK MAGIC *mg
-Anp |char* |delimcpy |NN char* to|NN const char* toend|NN const char* from \
+ATp |char* |delimcpy |NN char* to|NN const char* toend|NN const char* from \
|NN const char* fromend|int delim|NN I32* retlen
-np |char* |delimcpy_no_escape|NN char* to|NN const char* toend \
+Tp |char* |delimcpy_no_escape|NN char* to|NN const char* toend \
|NN const char* from \
|NN const char* fromend|int delim \
|NN I32* retlen
: Used in op.c, perl.c
-pM |void |delete_eval_scope
+px |void |delete_eval_scope
Aprd |OP* |die_sv |NN SV *baseex
Afrpd |OP* |die |NULLOK const char* pat|...
: Used in util.c
pr |void |die_unwind |NN SV* msv
Ap |void |dounwind |I32 cxix
: FIXME
-pmb |bool|do_aexec |NULLOK SV* really|NN SV** mark|NN SV** sp
+pMb |bool|do_aexec |NULLOK SV* really|NN SV** mark|NN SV** sp
: Used in pp_sys.c
p |bool|do_aexec5 |NULLOK SV* really|NN SV** mark|NN SV** sp|int fd|int do_report
-Abp |int |do_binmode |NN PerlIO *fp|int iotype|int mode
+AbpD |int |do_binmode |NN PerlIO *fp|int iotype|int mode
: Used in pp.c
Ap |bool |do_close |NULLOK GV* gv|bool not_implicit
: Defined in doio.c, used only in pp_sys.c
p |bool |do_eof |NN GV* gv
#ifdef PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
-pm |bool|do_exec |NN const char* cmd
+pM |bool|do_exec |NN const char* cmd
#else
p |bool|do_exec |NN const char* cmd
#endif
@@ -439,8 +692,8 @@ Ap |int |do_spawn_nowait|NN char* cmd
p |bool|do_exec3 |NN const char *incmd|int fd|int do_report
#endif
#if defined(PERL_IN_DOIO_C)
-s |void |exec_failed |NN const char *cmd|int fd|int do_report
-s |bool |argvout_final |NN MAGIC *mg|NN IO *io|bool not_implicit
+S |void |exec_failed |NN const char *cmd|int fd|int do_report
+S |bool |argvout_final |NN MAGIC *mg|NN IO *io|bool not_implicit
#endif
#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
: Defined in doio.c, used only in pp_sys.c
@@ -461,13 +714,13 @@ Ap |void |do_join |NN SV *sv|NN SV *delim|NN SV **mark|NN SV **sp
: p |OP* |do_kv
: used in pp.c, pp_hot.c
pR |I32 |do_ncmp |NN SV *const left|NN SV *const right
-Apmb |bool |do_open |NN GV* gv|NN const char* name|I32 len|int as_raw \
+ApMb |bool |do_open |NN GV* gv|NN const char* name|I32 len|int as_raw \
|int rawmode|int rawperm|NULLOK PerlIO* supplied_fp
-Abp |bool |do_open9 |NN GV *gv|NN const char *name|I32 len|int as_raw \
+AbpD |bool |do_open9 |NN GV *gv|NN const char *name|I32 len|int as_raw \
|int rawmode|int rawperm|NULLOK PerlIO *supplied_fp \
|NN SV *svs|I32 num
-pn |void |setfd_cloexec|int fd
-pn |void |setfd_inhexec|int fd
+pT |void |setfd_cloexec|int fd
+pT |void |setfd_inhexec|int fd
p |void |setfd_cloexec_for_nonsysfd|int fd
p |void |setfd_inhexec_for_sysfd|int fd
p |void |setfd_cloexec_or_inhexec_by_sysfdness|int fd
@@ -475,7 +728,8 @@ pR |int |PerlLIO_dup_cloexec|int oldfd
p |int |PerlLIO_dup2_cloexec|int oldfd|int newfd
pR |int |PerlLIO_open_cloexec|NN const char *file|int flag
pR |int |PerlLIO_open3_cloexec|NN const char *file|int flag|int perm
-pnoR |int |my_mkstemp_cloexec|NN char *templte
+pToR |int |my_mkstemp_cloexec|NN char *templte
+pToR |int |my_mkostemp_cloexec|NN char *templte|int flags
#ifdef HAS_PIPE
pR |int |PerlProc_pipe_cloexec|NN int *pipefd
#endif
@@ -492,10 +746,10 @@ pR |int |PerlSock_socketpair_cloexec|int domain|int type|int protocol \
|NN int *pairfd
#endif
#if defined(PERL_IN_DOIO_C)
-s |IO * |openn_setup |NN GV *gv|NN char *mode|NN PerlIO **saveifp \
+S |IO * |openn_setup |NN GV *gv|NN char *mode|NN PerlIO **saveifp \
|NN PerlIO **saveofp|NN int *savefd \
|NN char *savetype
-s |bool |openn_cleanup |NN GV *gv|NN IO *io|NULLOK PerlIO *fp \
+S |bool |openn_cleanup |NN GV *gv|NN IO *io|NULLOK PerlIO *fp \
|NN char *mode|NN const char *oname \
|NULLOK PerlIO *saveifp|NULLOK PerlIO *saveofp \
|int savefd|char savetype|int writing \
@@ -506,9 +760,9 @@ Ap |bool |do_openn |NN GV *gv|NN const char *oname|I32 len \
|int as_raw|int rawmode|int rawperm \
|NULLOK PerlIO *supplied_fp|NULLOK SV **svp \
|I32 num
-Mp |bool |do_open_raw |NN GV *gv|NN const char *oname|STRLEN len \
+xp |bool |do_open_raw |NN GV *gv|NN const char *oname|STRLEN len \
|int rawmode|int rawperm|NULLOK Stat_t *statbufp
-Mp |bool |do_open6 |NN GV *gv|NN const char *oname|STRLEN len \
+xp |bool |do_open6 |NN GV *gv|NN const char *oname|STRLEN len \
|NULLOK PerlIO *supplied_fp|NULLOK SV **svp \
|U32 num
: Used in pp_hot.c and pp_sys.c
@@ -533,27 +787,28 @@ p |void |do_vop |I32 optype|NN SV* sv|NN SV* left|NN SV* right
: Used in perly.y
p |OP* |dofile |NN OP* term|I32 force_builtin
ApR |U8 |dowantarray
-Ap |void |dump_all
+Adp |void |dump_all
p |void |dump_all_perl |bool justperl
Ap |void |dump_eval
Ap |void |dump_form |NN const GV* gv
Ap |void |gv_dump |NULLOK GV* gv
Apd |OPclass|op_class |NULLOK const OP *o
-Ap |void |op_dump |NN const OP *o
+Apd |void |op_dump |NN const OP *o
Ap |void |pmop_dump |NULLOK PMOP* pm
-Ap |void |dump_packsubs |NN const HV* stash
+Apd |void |dump_packsubs |NN const HV* stash
p |void |dump_packsubs_perl |NN const HV* stash|bool justperl
Ap |void |dump_sub |NN const GV* gv
p |void |dump_sub_perl |NN const GV* gv|bool justperl
Apd |void |fbm_compile |NN SV* sv|U32 flags
ApdR |char* |fbm_instr |NN unsigned char* big|NN unsigned char* bigend \
|NN SV* littlestr|U32 flags
+pEXTR |const char *|cntrl_to_mnemonic|const U8 c
p |CV * |find_lexical_cv|PADOFFSET off
: Defined in util.c, used only in perl.c
p |char* |find_script |NN const char *scriptname|bool dosearch \
|NULLOK const char *const *const search_ext|I32 flags
#if defined(PERL_IN_OP_C)
-s |OP* |force_list |NULLOK OP* arg|bool nullit
+S |OP* |force_list |NULLOK OP* arg|bool nullit
i |OP* |op_integerize |NN OP *o
i |OP* |op_std_init |NN OP *o
#if defined(USE_ITHREADS)
@@ -562,27 +817,27 @@ i |void |op_relocate_sv |NN SV** svp|NN PADOFFSET* targp
i |OP* |newMETHOP_internal |I32 type|I32 flags|NULLOK OP* dynamic_meth \
|NULLOK SV* const_meth
: FIXME
-s |OP* |fold_constants |NN OP * const o
-s |OP* |traverse_op_tree|NN OP* top|NN OP* o
+S |OP* |fold_constants |NN OP * const o
+Sd |OP* |traverse_op_tree|NN OP* top|NN OP* o
#endif
Afpd |char* |form |NN const char* pat|...
Ap |char* |vform |NN const char* pat|NULLOK va_list* args
Ap |void |free_tmps
#if defined(PERL_IN_OP_C)
-s |OP* |gen_constant_list|NULLOK OP* o
+S |void |gen_constant_list|NULLOK OP* o
#endif
#if !defined(HAS_GETENV_LEN)
: Used in hv.c
p |char* |getenv_len |NN const char *env_elem|NN unsigned long *len
#endif
: Used in pp_ctl.c and pp_hot.c
-pox |void |get_db_sub |NULLOK SV **svp|NN CV *cv
+poe |void |get_db_sub |NULLOK SV **svp|NN CV *cv
Ap |void |gp_free |NULLOK GV* gv
Ap |GP* |gp_ref |NULLOK GP* gp
Ap |GV* |gv_add_by_type |NULLOK GV *gv|svtype type
-Apmb |GV* |gv_AVadd |NULLOK GV *gv
-Apmb |GV* |gv_HVadd |NULLOK GV *gv
-Apmb |GV* |gv_IOadd |NULLOK GV* gv
+ApMb |GV* |gv_AVadd |NULLOK GV *gv
+ApMb |GV* |gv_HVadd |NULLOK GV *gv
+ApMb |GV* |gv_IOadd |NULLOK GV* gv
AmR |GV* |gv_autoload4 |NULLOK HV* stash|NN const char* name \
|STRLEN len|I32 method
ApR |GV* |gv_autoload_sv |NULLOK HV* stash|NN SV* namesv|U32 flags
@@ -591,8 +846,8 @@ ApR |GV* |gv_autoload_pv |NULLOK HV* stash|NN const char* namepv \
ApR |GV* |gv_autoload_pvn |NULLOK HV* stash|NN const char* name \
|STRLEN len|U32 flags
Ap |void |gv_check |NN HV* stash
-Abp |void |gv_efullname |NN SV* sv|NN const GV* gv
-Apmb |void |gv_efullname3 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix
+AbpD |void |gv_efullname |NN SV* sv|NN const GV* gv
+ApMb |void |gv_efullname3 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix
Ap |void |gv_efullname4 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain
Ap |GV* |gv_fetchfile |NN const char* name
Ap |GV* |gv_fetchfile_flags|NN const char *const name|const STRLEN len\
@@ -612,40 +867,42 @@ Apd |GV* |gv_fetchmeth_pv_autoload |NULLOK HV* stash|NN const char* name \
|I32 level|U32 flags
Apd |GV* |gv_fetchmeth_pvn_autoload |NULLOK HV* stash|NN const char* name \
|STRLEN len|I32 level|U32 flags
-Apdmb |GV* |gv_fetchmethod |NN HV* stash|NN const char* name
+ApdMb |GV* |gv_fetchmethod |NN HV* stash|NN const char* name
Apd |GV* |gv_fetchmethod_autoload|NN HV* stash|NN const char* name \
|I32 autoload
-ApM |GV* |gv_fetchmethod_sv_flags|NN HV* stash|NN SV* namesv|U32 flags
-ApM |GV* |gv_fetchmethod_pv_flags|NN HV* stash|NN const char* name \
- |U32 flags
-ApM |GV* |gv_fetchmethod_pvn_flags|NN HV* stash|NN const char* name \
+Apx |GV* |gv_fetchmethod_sv_flags|NN HV* stash|NN SV* namesv|U32 flags
+Apx |GV* |gv_fetchmethod_pv_flags|NN HV* stash|NN const char* name \
+ |U32 flags
+Apx |GV* |gv_fetchmethod_pvn_flags|NN HV* stash|NN const char* name \
|const STRLEN len|U32 flags
Ap |GV* |gv_fetchpv |NN const char *nambeg|I32 add|const svtype sv_type
-Abp |void |gv_fullname |NN SV* sv|NN const GV* gv
-Apmb |void |gv_fullname3 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix
+AbpD |void |gv_fullname |NN SV* sv|NN const GV* gv
+ApMb |void |gv_fullname3 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix
Ap |void |gv_fullname4 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain
: Used in scope.c
-pMox |GP * |newGP |NN GV *const gv
+pxoe |GP * |newGP |NN GV *const gv
pX |void |cvgv_set |NN CV* cv|NULLOK GV* gv
poX |GV * |cvgv_from_hek |NN CV* cv
pX |void |cvstash_set |NN CV* cv|NULLOK HV* stash
Amd |void |gv_init |NN GV* gv|NULLOK HV* stash \
|NN const char* name|STRLEN len|int multi
-Ap |void |gv_init_sv |NN GV* gv|NULLOK HV* stash|NN SV* namesv|U32 flags
-Ap |void |gv_init_pv |NN GV* gv|NULLOK HV* stash|NN const char* name \
+Apd |void |gv_init_sv |NN GV* gv|NULLOK HV* stash|NN SV* namesv|U32 flags
+Apd |void |gv_init_pv |NN GV* gv|NULLOK HV* stash|NN const char* name \
|U32 flags
-Ap |void |gv_init_pvn |NN GV* gv|NULLOK HV* stash|NN const char* name \
+Apd |void |gv_init_pvn |NN GV* gv|NULLOK HV* stash|NN const char* name \
|STRLEN len|U32 flags
Ap |void |gv_name_set |NN GV* gv|NN const char *name|U32 len|U32 flags
-px |GV * |gv_override |NN const char * const name \
+pe |GV * |gv_override |NN const char * const name \
|const STRLEN len
-XMpd |void |gv_try_downgrade|NN GV* gv
+Xxpd |void |gv_try_downgrade|NN GV* gv
p |void |gv_setref |NN SV *const dstr|NN SV *const sstr
Apd |HV* |gv_stashpv |NN const char* name|I32 flags
Apd |HV* |gv_stashpvn |NN const char* name|U32 namelen|I32 flags
+#if defined(PERL_IN_GV_C) || defined(PERL_IN_UNIVERSAL_C)
+EpG |HV* |gv_stashsvpvn_cached |NULLOK SV *namesv|NULLOK const char* name|U32 namelen|I32 flags
+#endif
#if defined(PERL_IN_GV_C)
i |HV* |gv_stashpvn_internal |NN const char* name|U32 namelen|I32 flags
-i |HV* |gv_stashsvpvn_cached |NULLOK SV *namesv|NULLOK const char* name|U32 namelen|I32 flags
i |GV* |gv_fetchmeth_internal |NULLOK HV* stash|NULLOK SV* meth|NULLOK const char* name \
|STRLEN len|I32 level|U32 flags
#endif
@@ -654,14 +911,14 @@ Apd |void |hv_clear |NULLOK HV *hv
: used in SAVEHINTS() and op.c
ApdR |HV * |hv_copy_hints_hv|NULLOK HV *const ohv
Ap |void |hv_delayfree_ent|NN HV *hv|NULLOK HE *entry
-Abmdp |SV* |hv_delete |NULLOK HV *hv|NN const char *key|I32 klen \
+AbMdp |SV* |hv_delete |NULLOK HV *hv|NN const char *key|I32 klen \
|I32 flags
-Abmdp |SV* |hv_delete_ent |NULLOK HV *hv|NN SV *keysv|I32 flags|U32 hash
-AbmdRp |bool |hv_exists |NULLOK HV *hv|NN const char *key|I32 klen
-AbmdRp |bool |hv_exists_ent |NULLOK HV *hv|NN SV *keysv|U32 hash
-Abmdp |SV** |hv_fetch |NULLOK HV *hv|NN const char *key|I32 klen \
+AbMdp |SV* |hv_delete_ent |NULLOK HV *hv|NN SV *keysv|I32 flags|U32 hash
+AbMdRp |bool |hv_exists |NULLOK HV *hv|NN const char *key|I32 klen
+AbMdRp |bool |hv_exists_ent |NULLOK HV *hv|NN SV *keysv|U32 hash
+AbMdp |SV** |hv_fetch |NULLOK HV *hv|NN const char *key|I32 klen \
|I32 lval
-Abmdp |HE* |hv_fetch_ent |NULLOK HV *hv|NN SV *keysv|I32 lval|U32 hash
+AbMdp |HE* |hv_fetch_ent |NULLOK HV *hv|NN SV *keysv|I32 lval|U32 hash
Ap |void* |hv_common |NULLOK HV *hv|NULLOK SV *keysv \
|NULLOK const char* key|STRLEN klen|int flags \
|int action|NULLOK SV *val|U32 hash
@@ -673,14 +930,14 @@ Ap |void |hv_free_ent |NN HV *hv|NULLOK HE *entry
Apd |I32 |hv_iterinit |NN HV *hv
ApdR |char* |hv_iterkey |NN HE* entry|NN I32* retlen
ApdR |SV* |hv_iterkeysv |NN HE* entry
-ApdRbm |HE* |hv_iternext |NN HV *hv
+ApdRbM |HE* |hv_iternext |NN HV *hv
ApdR |SV* |hv_iternextsv |NN HV *hv|NN char **key|NN I32 *retlen
-ApMdR |HE* |hv_iternext_flags|NN HV *hv|I32 flags
+ApxdR |HE* |hv_iternext_flags|NN HV *hv|I32 flags
ApdR |SV* |hv_iterval |NN HV *hv|NN HE *entry
Ap |void |hv_ksplit |NN HV *hv|IV newmax
-Apdbm |void |hv_magic |NN HV *hv|NULLOK GV *gv|int how
+ApdbM |void |hv_magic |NN HV *hv|NULLOK GV *gv|int how
#if defined(PERL_IN_HV_C)
-s |SV * |refcounted_he_value |NN const struct refcounted_he *he
+S |SV * |refcounted_he_value |NN const struct refcounted_he *he
#endif
Xpd |HV * |refcounted_he_chain_2hv|NULLOK const struct refcounted_he *c|U32 flags
Xpd |SV * |refcounted_he_fetch_pvn|NULLOK const struct refcounted_he *chain \
@@ -703,30 +960,30 @@ Xpd |struct refcounted_he *|refcounted_he_new_sv \
|U32 hash|NULLOK SV *value|U32 flags
Xpd |void |refcounted_he_free|NULLOK struct refcounted_he *he
Xpd |struct refcounted_he *|refcounted_he_inc|NULLOK struct refcounted_he *he
-Apbmd |SV** |hv_store |NULLOK HV *hv|NULLOK const char *key \
+ApbMd |SV** |hv_store |NULLOK HV *hv|NULLOK const char *key \
|I32 klen|NULLOK SV *val|U32 hash
-Apbmd |HE* |hv_store_ent |NULLOK HV *hv|NULLOK SV *key|NULLOK SV *val\
+ApbMd |HE* |hv_store_ent |NULLOK HV *hv|NULLOK SV *key|NULLOK SV *val\
|U32 hash
-ApbmM |SV** |hv_store_flags |NULLOK HV *hv|NULLOK const char *key \
+ApbMx |SV** |hv_store_flags |NULLOK HV *hv|NULLOK const char *key \
|I32 klen|NULLOK SV *val|U32 hash|int flags
Amd |void |hv_undef |NULLOK HV *hv
poX |void |hv_undef_flags |NULLOK HV *hv|U32 flags
-AmP |I32 |ibcmp |NN const char* a|NN const char* b|I32 len
-Ainp |I32 |foldEQ |NN const char* a|NN const char* b|I32 len
-AmP |I32 |ibcmp_locale |NN const char* a|NN const char* b|I32 len
-Ainp |I32 |foldEQ_locale |NN const char* a|NN const char* b|I32 len
+AdmP |I32 |ibcmp |NN const char* a|NN const char* b|I32 len
+AdiTp |I32 |foldEQ |NN const char* a|NN const char* b|I32 len
+AdmP |I32 |ibcmp_locale |NN const char* a|NN const char* b|I32 len
+AiTpd |I32 |foldEQ_locale |NN const char* a|NN const char* b|I32 len
Am |I32 |ibcmp_utf8 |NN const char *s1|NULLOK char **pe1|UV l1 \
|bool u1|NN const char *s2|NULLOK char **pe2 \
|UV l2|bool u2
Amd |I32 |foldEQ_utf8 |NN const char *s1|NULLOK char **pe1|UV l1 \
|bool u1|NN const char *s2|NULLOK char **pe2 \
|UV l2|bool u2
-AMp |I32 |foldEQ_utf8_flags |NN const char *s1|NULLOK char **pe1|UV l1 \
+Cp |I32 |foldEQ_utf8_flags |NN const char *s1|NULLOK char **pe1|UV l1 \
|bool u1|NN const char *s2|NULLOK char **pe2 \
|UV l2|bool u2|U32 flags
-Ainp |I32 |foldEQ_latin1 |NN const char* a|NN const char* b|I32 len
+AiTp |I32 |foldEQ_latin1 |NN const char* a|NN const char* b|I32 len
#if defined(PERL_IN_DOIO_C)
-sR |bool |ingroup |Gid_t testgid|bool effective
+SR |bool |ingroup |Gid_t testgid|bool effective
#endif
: Used in toke.c
p |void |init_argv_symbols|int argc|NN char **argv
@@ -737,262 +994,184 @@ p |void |init_debugger
Ap |void |init_stacks
Ap |void |init_tm |NN struct tm *ptm
: Used in perly.y
-AbmnpPR |char* |instr |NN const char* big|NN const char* little
+AbMTpPRd|char* |instr |NN const char* big|NN const char* little
: Used in sv.c
p |bool |io_close |NN IO* io|NULLOK GV *gv \
|bool not_implicit|bool warn_on_fail
: Used in perly.y
pR |OP* |invert |NULLOK OP* cmd
+pR |OP* |cmpchain_start |I32 type|NULLOK OP* left \
+ |NULLOK OP* right
+pR |OP* |cmpchain_extend|I32 type|NN OP* ch|NULLOK OP* right
+pR |OP* |cmpchain_finish|NN OP* ch
ApR |I32 |is_lvalue_sub
: Used in cop.h
XopR |I32 |was_lvalue_sub
-ApMRnP |STRLEN |_is_utf8_char_helper|NN const U8 * const s|NN const U8 * e|const U32 flags
-AbDMpR |U32 |to_uni_upper_lc|U32 c
-AbDMpR |U32 |to_uni_title_lc|U32 c
-AbDMpR |U32 |to_uni_lower_lc|U32 c
-AbDMpR |bool |is_uni_alnum |UV c
-AbDMpR |bool |is_uni_alnumc |UV c
-AbDMpR |bool |is_uni_idfirst |UV c
-AbDMpR |bool |is_uni_alpha |UV c
-AbDMpPR |bool |is_uni_ascii |UV c
-AbDMpPR |bool |is_uni_blank |UV c
-AbDMpPR |bool |is_uni_space |UV c
-AbDMpPR |bool |is_uni_cntrl |UV c
-AbDMpR |bool |is_uni_graph |UV c
-AbDMpR |bool |is_uni_digit |UV c
-AbDMpR |bool |is_uni_upper |UV c
-AbDMpR |bool |is_uni_lower |UV c
-AbDMpR |bool |is_uni_print |UV c
-AbDMpR |bool |is_uni_punct |UV c
-AbDMpPR |bool |is_uni_xdigit |UV c
-AMp |UV |to_uni_upper |UV c|NN U8 *p|NN STRLEN *lenp
-AMp |UV |to_uni_title |UV c|NN U8 *p|NN STRLEN *lenp
-AbDMpR |bool |isIDFIRST_lazy |NN const char* p
-AbDMpR |bool |isALNUM_lazy |NN const char* p
+CpRTP |STRLEN |is_utf8_char_helper|NN const U8 * const s|NN const U8 * e|const U32 flags
+Cp |UV |to_uni_upper |UV c|NN U8 *p|NN STRLEN *lenp
+Cp |UV |to_uni_title |UV c|NN U8 *p|NN STRLEN *lenp
p |void |init_uniprops
#ifdef PERL_IN_UTF8_C
-snR |U8 |to_lower_latin1|const U8 c|NULLOK U8 *p|NULLOK STRLEN *lenp \
+STR |U8 |to_lower_latin1|const U8 c|NULLOK U8 *p|NULLOK STRLEN *lenp \
|const char dummy
# ifndef UV_IS_QUAD
-snR |int |is_utf8_cp_above_31_bits|NN const U8 * const s \
+STR |int |is_utf8_cp_above_31_bits|NN const U8 * const s \
|NN const U8 * const e \
|const bool consider_overlongs
# endif
#endif
-#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-EXnp |UV |_to_fold_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const unsigned int flags
-#endif
#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
p |UV |_to_upper_title_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const char S_or_s
#endif
-AMp |UV |to_uni_lower |UV c|NN U8 *p|NN STRLEN *lenp
-AMmp |UV |to_uni_fold |UV c|NN U8 *p|NN STRLEN *lenp
-AMp |UV |_to_uni_fold_flags|UV c|NN U8 *p|NN STRLEN *lenp|U8 flags
-AbDMpR |bool |is_uni_alnum_lc|UV c
-AbDMpR |bool |is_uni_alnumc_lc|UV c
-AbDMpR |bool |is_uni_idfirst_lc|UV c
-AMpR |bool |_is_uni_perl_idcont|UV c
-AMpR |bool |_is_uni_perl_idstart|UV c
-AbDMpR |bool |is_uni_alpha_lc|UV c
-AbDMpPR |bool |is_uni_ascii_lc|UV c
-AbDMpPR |bool |is_uni_space_lc|UV c
-AbDMpPR |bool |is_uni_blank_lc|UV c
-AbDMpPR |bool |is_uni_cntrl_lc|UV c
-AbDMpR |bool |is_uni_graph_lc|UV c
-AbDMpR |bool |is_uni_digit_lc|UV c
-AbDMpR |bool |is_uni_upper_lc|UV c
-AbDMpR |bool |is_uni_lower_lc|UV c
-AbDMpR |bool |is_uni_print_lc|UV c
-AbDMpR |bool |is_uni_punct_lc|UV c
-AbDMpPR |bool |is_uni_xdigit_lc|UV c
-AndmoR |bool |is_utf8_invariant_string|NN const U8* const s \
+Cp |UV |to_uni_lower |UV c|NN U8 *p|NN STRLEN *lenp
+Cm |UV |to_uni_fold |UV c|NN U8 *p|NN STRLEN *lenp
+Cp |UV |_to_uni_fold_flags|UV c|NN U8 *p|NN STRLEN *lenp|U8 flags
+CpR |bool |_is_uni_perl_idcont|UV c
+CpR |bool |_is_uni_perl_idstart|UV c
+ATdmoR |bool |is_utf8_invariant_string|NN const U8* const s \
|STRLEN len
-AnidR |bool |is_utf8_invariant_string_loc|NN const U8* const s \
+ATidRp |bool |is_utf8_invariant_string_loc|NN const U8* const s \
|STRLEN len \
|NULLOK const U8 ** ep
#ifndef EBCDIC
-AniR |unsigned int|_variant_byte_number|PERL_UINTMAX_T word
+CTiRp |unsigned int|variant_byte_number|PERL_UINTMAX_T word
#endif
#if defined(PERL_CORE) || defined(PERL_EXT)
-EinR |Size_t |variant_under_utf8_count|NN const U8* const s \
+EiTRd |Size_t |variant_under_utf8_count|NN const U8* const s \
|NN const U8* const e
#endif
-AmnpdRP |bool |is_ascii_string|NN const U8* const s|STRLEN len
-AmnpdRP |bool |is_invariant_string|NN const U8* const s|STRLEN len
+AmTdRP |bool |is_ascii_string|NN const U8* const s|STRLEN len
+AmTdRP |bool |is_invariant_string|NN const U8* const s|STRLEN len
#if defined(PERL_CORE) || defined (PERL_EXT)
-EXnidR |bool |is_utf8_non_invariant_string|NN const U8* const s \
+EXTidRp |bool |is_utf8_non_invariant_string|NN const U8* const s \
|STRLEN len
#endif
-AbnpdD |STRLEN |is_utf8_char |NN const U8 *s
-Abmnpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end
-AnidR |Size_t |isUTF8_CHAR|NN const U8 * const s0 \
+AbTpdD |STRLEN |is_utf8_char |NN const U8 *s
+AbMTpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end
+ATidRp |Size_t |isUTF8_CHAR|NN const U8 * const s0 \
|NN const U8 * const e
-AnidR |Size_t |isSTRICT_UTF8_CHAR |NN const U8 * const s0 \
+ATidRp |Size_t |isSTRICT_UTF8_CHAR |NN const U8 * const s0 \
|NN const U8 * const e
-AnidR |Size_t |isC9_STRICT_UTF8_CHAR |NN const U8 * const s0 \
+ATidRp |Size_t |isC9_STRICT_UTF8_CHAR |NN const U8 * const s0 \
|NN const U8 * const e
-AnmdpR |bool |is_utf8_string |NN const U8 *s|STRLEN len
-AnidR |bool |is_utf8_string_flags \
+ATmdR |bool |is_utf8_string |NN const U8 *s|STRLEN len
+ATidRp |bool |is_utf8_string_flags \
|NN const U8 *s|STRLEN len|const U32 flags
-AnmdpR |bool |is_strict_utf8_string|NN const U8 *s|STRLEN len
-AnmdpR |bool |is_c9strict_utf8_string|NN const U8 *s|STRLEN len
-Anpdmb |bool |is_utf8_string_loc \
+ATmdR |bool |is_strict_utf8_string|NN const U8 *s|STRLEN len
+ATmdR |bool |is_c9strict_utf8_string|NN const U8 *s|STRLEN len
+ATpdMb |bool |is_utf8_string_loc \
|NN const U8 *s|const STRLEN len|NN const U8 **ep
-Andm |bool |is_utf8_string_loc_flags \
+ATdm |bool |is_utf8_string_loc_flags \
|NN const U8 *s|STRLEN len|NN const U8 **ep \
|const U32 flags
-Andm |bool |is_strict_utf8_string_loc \
+ATdm |bool |is_strict_utf8_string_loc \
|NN const U8 *s|STRLEN len|NN const U8 **ep
-Andm |bool |is_c9strict_utf8_string_loc \
+ATdm |bool |is_c9strict_utf8_string_loc \
|NN const U8 *s|STRLEN len|NN const U8 **ep
-Anipd |bool |is_utf8_string_loclen \
+ATipd |bool |is_utf8_string_loclen \
|NN const U8 *s|STRLEN len|NULLOK const U8 **ep \
|NULLOK STRLEN *el
-Anid |bool |is_utf8_string_loclen_flags \
+ATidp |bool |is_utf8_string_loclen_flags \
|NN const U8 *s|STRLEN len|NULLOK const U8 **ep \
|NULLOK STRLEN *el|const U32 flags
-Anid |bool |is_strict_utf8_string_loclen \
+ATidp |bool |is_strict_utf8_string_loclen \
|NN const U8 *s|STRLEN len|NULLOK const U8 **ep \
|NULLOK STRLEN *el
-Anid |bool |is_c9strict_utf8_string_loclen \
+ATidp |bool |is_c9strict_utf8_string_loclen \
|NN const U8 *s|STRLEN len|NULLOK const U8 **ep \
|NULLOK STRLEN *el
-Amnd |bool |is_utf8_fixed_width_buf_flags \
+AmTd |bool |is_utf8_fixed_width_buf_flags \
|NN const U8 * const s|STRLEN len|const U32 flags
-Amnd |bool |is_utf8_fixed_width_buf_loc_flags \
+AmTd |bool |is_utf8_fixed_width_buf_loc_flags \
|NN const U8 * const s|STRLEN len \
|NULLOK const U8 **ep|const U32 flags
-Anid |bool |is_utf8_fixed_width_buf_loclen_flags \
+ATidp |bool |is_utf8_fixed_width_buf_loclen_flags \
|NN const U8 * const s|STRLEN len \
|NULLOK const U8 **ep|NULLOK STRLEN *el|const U32 flags
-AmndP |bool |is_utf8_valid_partial_char \
+AmTdP |bool |is_utf8_valid_partial_char \
|NN const U8 * const s|NN const U8 * const e
-AnidR |bool |is_utf8_valid_partial_char_flags \
+ATidRp |bool |is_utf8_valid_partial_char_flags \
|NN const U8 * const s|NN const U8 * const e|const U32 flags
-AMpR |bool |_is_uni_FOO|const U8 classnum|const UV c
-AMpR |bool |_is_utf8_FOO|U8 classnum|NN const U8 * const p \
- |NN const char * const name \
- |NN const char * const alternative \
- |const bool use_utf8|const bool use_locale \
- |NN const char * const file|const unsigned line
-AMpR |bool |_is_utf8_FOO_with_len|const U8 classnum|NN const U8 *p \
- |NN const U8 * const e
-AbDMpR |bool |is_utf8_alnum |NN const U8 *p
-AbDMpR |bool |is_utf8_alnumc |NN const U8 *p
-AbDMpR |bool |is_utf8_idfirst|NN const U8 *p
-AbDMpR |bool |is_utf8_xidfirst|NN const U8 *p
-AMpR |bool |_is_utf8_idcont|NN const U8 *p
-AMpR |bool |_is_utf8_idstart|NN const U8 *p
-AMpR |bool |_is_utf8_xidcont|NN const U8 *p
-AMpR |bool |_is_utf8_xidstart|NN const U8 *p
-AMpR |bool |_is_utf8_perl_idcont_with_len|NN const U8 *p \
- |NN const U8 * const e
-AMpR |bool |_is_utf8_perl_idstart_with_len|NN const U8 *p \
+CpR |bool |_is_uni_FOO|const U8 classnum|const UV c
+CpR |bool |_is_utf8_FOO|const U8 classnum|NN const U8 *p \
|NN const U8 * const e
-AbDMpR |bool |is_utf8_idcont |NN const U8 *p
-AbDMpR |bool |is_utf8_xidcont |NN const U8 *p
-AbDMpR |bool |is_utf8_alpha |NN const U8 *p
-AbDMpR |bool |is_utf8_ascii |NN const U8 *p
-AbDMpR |bool |is_utf8_blank |NN const U8 *p
-AbDMpR |bool |is_utf8_space |NN const U8 *p
-AbDMpR |bool |is_utf8_perl_space |NN const U8 *p
-AbDMpR |bool |is_utf8_perl_word |NN const U8 *p
-AbDMpR |bool |is_utf8_cntrl |NN const U8 *p
-AbDMpR |bool |is_utf8_digit |NN const U8 *p
-AbDMpR |bool |is_utf8_posix_digit |NN const U8 *p
-AbDMpR |bool |is_utf8_graph |NN const U8 *p
-AbDMpR |bool |is_utf8_upper |NN const U8 *p
-AbDMpR |bool |is_utf8_lower |NN const U8 *p
-AbDMpR |bool |is_utf8_print |NN const U8 *p
-AbDMpR |bool |is_utf8_punct |NN const U8 *p
-AbDMpR |bool |is_utf8_xdigit |NN const U8 *p
-AMpR |bool |_is_utf8_mark |NN const U8 *p
-AbDMpR |bool |is_utf8_mark |NN const U8 *p
+CpR |bool |_is_utf8_perl_idcont|NN const U8 *p|NN const U8 * const e
+CpR |bool |_is_utf8_perl_idstart|NN const U8 *p|NN const U8 * const e
+
#if defined(PERL_CORE) || defined(PERL_EXT)
EXdpR |bool |isSCRIPT_RUN |NN const U8 *s|NN const U8 *send \
|const bool utf8_target
#endif
: Used in perly.y
p |OP* |jmaybe |NN OP *o
-: Used in pp.c
+: Used in pp.c
pP |I32 |keyword |NN const char *name|I32 len|bool all_keywords
#if defined(PERL_IN_OP_C)
-s |void |inplace_aassign |NN OP* o
+S |void |inplace_aassign |NN OP* o
#endif
Ap |void |leave_scope |I32 base
p |void |notify_parser_that_changed_to_utf8
: Public lexer API
-AMpd |void |lex_start |NULLOK SV* line|NULLOK PerlIO *rsfp|U32 flags
-AMpd |bool |lex_bufutf8
-AMpd |char* |lex_grow_linestr|STRLEN len
-AMpd |void |lex_stuff_pvn |NN const char* pv|STRLEN len|U32 flags
-AMpd |void |lex_stuff_pv |NN const char* pv|U32 flags
-AMpd |void |lex_stuff_sv |NN SV* sv|U32 flags
-AMpd |void |lex_unstuff |NN char* ptr
-AMpd |void |lex_read_to |NN char* ptr
-AMpd |void |lex_discard_to |NN char* ptr
-AMpd |bool |lex_next_chunk |U32 flags
-AMpd |I32 |lex_peek_unichar|U32 flags
-AMpd |I32 |lex_read_unichar|U32 flags
-AMpd |void |lex_read_space |U32 flags
+Axpd |void |lex_start |NULLOK SV* line|NULLOK PerlIO *rsfp|U32 flags
+Axpd |bool |lex_bufutf8
+Axpd |char* |lex_grow_linestr|STRLEN len
+Axpd |void |lex_stuff_pvn |NN const char* pv|STRLEN len|U32 flags
+Axpd |void |lex_stuff_pv |NN const char* pv|U32 flags
+Axpd |void |lex_stuff_sv |NN SV* sv|U32 flags
+Axpd |void |lex_unstuff |NN char* ptr
+Axpd |void |lex_read_to |NN char* ptr
+Axpd |void |lex_discard_to |NN char* ptr
+Axpd |bool |lex_next_chunk |U32 flags
+Axpd |I32 |lex_peek_unichar|U32 flags
+Axpd |I32 |lex_read_unichar|U32 flags
+Axpd |void |lex_read_space |U32 flags
: Public parser API
-AMpd |OP* |parse_arithexpr|U32 flags
-AMpd |OP* |parse_termexpr |U32 flags
-AMpd |OP* |parse_listexpr |U32 flags
-AMpd |OP* |parse_fullexpr |U32 flags
-AMpd |OP* |parse_block |U32 flags
-AMpd |OP* |parse_barestmt |U32 flags
-AMpd |SV* |parse_label |U32 flags
-AMpd |OP* |parse_fullstmt |U32 flags
-AMpd |OP* |parse_stmtseq |U32 flags
+Axpd |OP* |parse_arithexpr|U32 flags
+Axpd |OP* |parse_termexpr |U32 flags
+Axpd |OP* |parse_listexpr |U32 flags
+Axpd |OP* |parse_fullexpr |U32 flags
+Axpd |OP* |parse_block |U32 flags
+Axpd |OP* |parse_barestmt |U32 flags
+Axpd |SV* |parse_label |U32 flags
+Axpd |OP* |parse_fullstmt |U32 flags
+Axpd |OP* |parse_stmtseq |U32 flags
+Axpd |OP* |parse_subsignature|U32 flags
: Used in various files
Apd |void |op_null |NN OP* o
: FIXME. Used by Data::Alias
EXp |void |op_clear |NN OP* o
Ap |void |op_refcnt_lock
Ap |void |op_refcnt_unlock
-Apdn |OP* |op_sibling_splice|NULLOK OP *parent|NULLOK OP *start \
+ApdT |OP* |op_sibling_splice|NULLOK OP *parent|NULLOK OP *start \
|int del_count|NULLOK OP* insert
-Apdn |OP* |op_parent|NN OP *o
+ApdT |OP* |op_parent|NN OP *o
#if defined(PERL_IN_OP_C)
-s |OP* |listkids |NULLOK OP* o
+S |OP* |listkids |NULLOK OP* o
#endif
p |OP* |list |NULLOK OP* o
-Apd |void |load_module|U32 flags|NN SV* name|NULLOK SV* ver|...
+AFpd |void |load_module|U32 flags|NN SV* name|NULLOK SV* ver|...
Ap |void |vload_module|U32 flags|NN SV* name|NULLOK SV* ver|NULLOK va_list* args
: Used in perly.y
p |OP* |localize |NN OP *o|I32 lex
ApdR |I32 |looks_like_number|NN SV *const sv
-Apd |UV |grok_bin |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_DQUOTE_C)
-EMpRX |bool |grok_bslash_x |NN char** s \
- |NN const char* const send \
- |NN UV* uv \
- |NN const char** error_msg \
- |const bool output_warning \
- |const bool strict \
- |const bool silence_non_portable \
- |const bool utf8
-EMpRX |char |grok_bslash_c |const char source|const bool output_warning
-EMpRX |bool |grok_bslash_o |NN char** s \
- |NN const char* const send \
- |NN UV* uv \
- |NN const char** error_msg \
- |const bool output_warning \
- |const bool strict \
- |const bool silence_non_portable \
- |const bool utf8
-EMiR |char*|form_short_octal_warning|NN const char * const s \
- |const STRLEN len
-EiRn |I32 |regcurly |NN const char *s
-#endif
-Apd |UV |grok_hex |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
+AMpd |UV |grok_hex |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
Apd |int |grok_infnan |NN const char** sp|NN const char *send
Apd |int |grok_number |NN const char *pv|STRLEN len|NULLOK UV *valuep
Apd |int |grok_number_flags|NN const char *pv|STRLEN len|NULLOK UV *valuep|U32 flags
ApdR |bool |grok_numeric_radix|NN const char **sp|NN const char *send
-Apd |UV |grok_oct |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
-EXpn |bool |grok_atoUV |NN const char* pv|NN UV* valptr|NULLOK const char** endptr
+ApMd |UV |grok_oct |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
+ApMd |UV |grok_bin |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result
+Cp |UV |grok_bin_oct_hex|NN const char* start \
+ |NN STRLEN* len_p \
+ |NN I32* flags \
+ |NULLOK NV *result \
+ |const unsigned shift \
+ |const U8 lookup_bit \
+ |const char prefix
+#ifdef PERL_IN_NUMERIC_C
+S |void |output_non_portable|const U8 shift
+#endif
+EXpdT |bool |grok_atoUV |NN const char* pv|NN UV* valptr|NULLOK const char** endptr
: These are all indirectly referenced by globals.c. This is somewhat annoying.
p |int |magic_clearenv |NN SV* sv|NN MAGIC* mg
p |int |magic_clear_all_env|NN SV* sv|NN MAGIC* mg
@@ -1054,16 +1233,16 @@ p |int |magic_setutf8 |NN SV* sv|NN MAGIC* mg
p |int |magic_set_all_env|NN SV* sv|NN MAGIC* mg
p |U32 |magic_sizepack |NN SV* sv|NN MAGIC* mg
p |int |magic_wipepack |NN SV* sv|NN MAGIC* mg
-pod |SV* |magic_methcall |NN SV *sv|NN const MAGIC *mg \
+Fpod |SV* |magic_methcall |NN SV *sv|NN const MAGIC *mg \
|NN SV *meth|U32 flags \
|U32 argc|...
Ap |I32 * |markstack_grow
#if defined(USE_LOCALE_COLLATE)
p |int |magic_setcollxfrm|NN SV* sv|NN MAGIC* mg
-pb |char* |mem_collxfrm |NN const char* input_string|STRLEN len|NN STRLEN* xlen
+pbD |char* |mem_collxfrm |NN const char* input_string|STRLEN len|NN STRLEN* xlen
: Defined in locale.c, used only in sv.c
# if defined(PERL_IN_LOCALE_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_MATHOMS_C)
-pM |char* |_mem_collxfrm |NN const char* input_string \
+p |char* |_mem_collxfrm |NN const char* input_string \
|STRLEN len \
|NN STRLEN* xlen \
|bool utf8
@@ -1083,8 +1262,8 @@ Apd |int |mg_copy |NN SV *sv|NN SV *nsv|NULLOK const char *key \
: Defined in mg.c, used only in scope.c
pd |void |mg_localize |NN SV* sv|NN SV* nsv|bool setmagic
Apd |SV* |sv_string_from_errnum|int errnum|NULLOK SV* tgtsv
-ApdRn |MAGIC* |mg_find |NULLOK const SV* sv|int type
-ApdRn |MAGIC* |mg_findext |NULLOK const SV* sv|int type|NULLOK const MGVTBL *vtbl
+ApdRT |MAGIC* |mg_find |NULLOK const SV* sv|int type
+ApdRT |MAGIC* |mg_findext |NULLOK const SV* sv|int type|NULLOK const MGVTBL *vtbl
: exported for re.pm
EXpR |MAGIC* |mg_find_mglob |NN SV* sv
Apd |int |mg_free |NN SV* sv
@@ -1092,49 +1271,49 @@ Apd |void |mg_free_type |NN SV* sv|int how
Apd |void |mg_freeext |NN SV* sv|int how|NULLOK const MGVTBL *vtbl
Apd |int |mg_get |NN SV* sv
ApdD |U32 |mg_length |NN SV* sv
-Apdn |void |mg_magical |NN SV* sv
+ApdT |void |mg_magical |NN SV* sv
Apd |int |mg_set |NN SV* sv
Ap |I32 |mg_size |NN SV* sv
-Apn |void |mini_mktime |NN struct tm *ptm
-AMmd |OP* |op_lvalue |NULLOK OP* o|I32 type
+ApT |void |mini_mktime |NN struct tm *ptm
+Axmd |OP* |op_lvalue |NULLOK OP* o|I32 type
poX |OP* |op_lvalue_flags|NULLOK OP* o|I32 type|U32 flags
-p |void |finalize_optree |NN OP* o
-p |void |optimize_optree|NN OP* o
+pd |void |finalize_optree |NN OP* o
+pd |void |optimize_optree|NN OP* o
#if defined(PERL_IN_OP_C)
-s |void |optimize_op |NN OP* o
-s |void |finalize_op |NN OP* o
-s |void |move_proto_attr|NN OP **proto|NN OP **attrs \
+S |void |optimize_op |NN OP* o
+S |void |finalize_op |NN OP* o
+S |void |move_proto_attr|NN OP **proto|NN OP **attrs \
|NN const GV *name|bool curstash
#endif
: Used in op.c and pp_sys.c
p |int |mode_from_discipline|NULLOK const char* s|STRLEN len
Ap |const char* |moreswitches |NN const char* s
Ap |NV |my_atof |NN const char *s
-AnpR |NV |my_strtod |NN const char * const s|NULLOK char ** e
-Apr |void |my_exit |U32 status
+ATdpR |NV |my_strtod |NN const char * const s|NULLOK char ** e
+Aprd |void |my_exit |U32 status
Apr |void |my_failure_exit
Ap |I32 |my_fflush_all
-Anp |Pid_t |my_fork
-Anp |void |atfork_lock
-Anp |void |atfork_unlock
-Apmb |I32 |my_lstat
+ATp |Pid_t |my_fork
+ATp |void |atfork_lock
+ATp |void |atfork_unlock
+ApMb |I32 |my_lstat
pX |I32 |my_lstat_flags |NULLOK const U32 flags
#if ! defined(HAS_MEMRCHR) && (defined(PERL_CORE) || defined(PERL_EXT))
-Exin |void * |my_memrchr |NN const char * s|const char c|const STRLEN len
+EeiT |void * |my_memrchr |NN const char * s|const char c|const STRLEN len
#endif
#if !defined(PERL_IMPLICIT_SYS)
Ap |I32 |my_pclose |NULLOK PerlIO* ptr
Ap |PerlIO*|my_popen |NN const char* cmd|NN const char* mode
#endif
Ap |PerlIO*|my_popen_list |NN const char* mode|int n|NN SV ** args
-Ap |void |my_setenv |NULLOK const char* nam|NULLOK const char* val
-Apmb |I32 |my_stat
+Apd |void |my_setenv |NULLOK const char* nam|NULLOK const char* val
+ApMb |I32 |my_stat
pX |I32 |my_stat_flags |NULLOK const U32 flags
Afp |char * |my_strftime |NN const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
: Used in pp_ctl.c
p |void |my_unexec
-AbDMnPR |UV |NATIVE_TO_NEED |const UV enc|const UV ch
-AbDMnPR |UV |ASCII_TO_NEED |const UV enc|const UV ch
+CbDTPR |UV |NATIVE_TO_NEED |const UV enc|const UV ch
+CbDTPR |UV |ASCII_TO_NEED |const UV enc|const UV ch
ApR |OP* |newANONLIST |NULLOK OP* o
ApR |OP* |newANONHASH |NULLOK OP* o
Ap |OP* |newANONSUB |I32 floor|NULLOK OP* proto|NULLOK OP* block
@@ -1148,7 +1327,7 @@ Ap |void |newFORM |I32 floor|NULLOK OP* o|NULLOK OP* block
ApdR |OP* |newFOROP |I32 flags|NULLOK OP* sv|NN OP* expr|NULLOK OP* block|NULLOK OP* cont
ApdR |OP* |newGIVENOP |NN OP* cond|NN OP* block|PADOFFSET defsv_off
ApdR |OP* |newLOGOP |I32 optype|I32 flags|NN OP *first|NN OP *other
-pM |LOGOP* |alloc_LOGOP |I32 type|NULLOK OP *first|NULLOK OP *other
+px |LOGOP* |alloc_LOGOP |I32 type|NULLOK OP *first|NULLOK OP *other
ApdR |OP* |newLOOPEX |I32 type|NN OP* label
ApdR |OP* |newLOOPOP |I32 flags|I32 debuggable|NULLOK OP* expr|NULLOK OP* block
ApdR |OP* |newNULLLIST
@@ -1157,7 +1336,7 @@ Ap |void |newPROG |NN OP* o
ApdR |OP* |newRANGE |I32 flags|NN OP* left|NN OP* right
ApdR |OP* |newSLICEOP |I32 flags|NULLOK OP* subscript|NULLOK OP* listop
ApdR |OP* |newSTATEOP |I32 flags|NULLOK char* label|NULLOK OP* o
-Apbm |CV* |newSUB |I32 floor|NULLOK OP* o|NULLOK OP* proto \
+ApbM |CV* |newSUB |I32 floor|NULLOK OP* o|NULLOK OP* proto \
|NULLOK OP* block
pd |CV * |newXS_len_flags|NULLOK const char *name|STRLEN len \
|NN XSUBADDR_t subaddr\
@@ -1165,12 +1344,12 @@ pd |CV * |newXS_len_flags|NULLOK const char *name|STRLEN len \
|NULLOK const char *const proto \
|NULLOK SV **const_svp|U32 flags
pX |CV * |newXS_deffile |NN const char *name|NN XSUBADDR_t subaddr
-ApM |CV * |newXS_flags |NULLOK const char *name|NN XSUBADDR_t subaddr\
+Apx |CV * |newXS_flags |NULLOK const char *name|NN XSUBADDR_t subaddr\
|NN const char *const filename \
|NULLOK const char *const proto|U32 flags
-Apd |CV* |newXS |NULLOK const char *name|NN XSUBADDR_t subaddr\
+ApdU |CV* |newXS |NULLOK const char *name|NN XSUBADDR_t subaddr\
|NN const char *filename
-ApmdbR |AV* |newAV
+ApMdbR |AV* |newAV
ApR |OP* |newAVREF |NN OP* o
ApdR |OP* |newBINOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last
ApR |OP* |newCVREF |I32 flags|NULLOK OP* o
@@ -1179,13 +1358,13 @@ Am |GV* |newGVgen |NN const char* pack
ApR |GV* |newGVgen_flags |NN const char* pack|U32 flags
ApR |OP* |newGVREF |I32 type|NULLOK OP* o
ApR |OP* |newHVREF |NN OP* o
-ApmdbR |HV* |newHV
+ApMdbR |HV* |newHV
ApR |HV* |newHVhv |NULLOK HV *hv
-ApRbm |IO* |newIO
+ApRbM |IO* |newIO
ApdR |OP* |newLISTOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last
-AMpdRn |PADNAME *|newPADNAMEouter|NN PADNAME *outer
-AMpdRn |PADNAME *|newPADNAMEpvn|NN const char *s|STRLEN len
-AMpdRn |PADNAMELIST *|newPADNAMELIST|size_t max
+AxpdRT |PADNAME *|newPADNAMEouter|NN PADNAME *outer
+AxpdRT |PADNAME *|newPADNAMEpvn|NN const char *s|STRLEN len
+AxpdRT |PADNAMELIST *|newPADNAMELIST|size_t max
#ifdef USE_ITHREADS
ApdR |OP* |newPADOP |I32 type|I32 flags|NN SV* sv
#endif
@@ -1210,8 +1389,8 @@ ApdR |SV* |newSVpv_share |NULLOK const char* s|U32 hash
AfpdR |SV* |newSVpvf |NN const char *const pat|...
ApR |SV* |vnewSVpvf |NN const char *const pat|NULLOK va_list *const args
Apd |SV* |newSVrv |NN SV *const rv|NULLOK const char *const classname
-ApmbdR |SV* |newSVsv |NULLOK SV *const old
-ApmdR |SV* |newSVsv_nomg |NULLOK SV *const old
+ApMbdR |SV* |newSVsv |NULLOK SV *const old
+AmdR |SV* |newSVsv_nomg |NULLOK SV *const old
ApR |SV* |newSVsv_flags |NULLOK SV *const old|I32 flags
ApdR |SV* |newSV_type |const svtype type
ApdR |OP* |newUNOP |I32 type|I32 flags|NULLOK OP* first
@@ -1236,7 +1415,7 @@ Apd |void |cv_set_call_checker_flags|NN CV *cv \
|NN Perl_call_checker ckfun \
|NN SV *ckobj|U32 ckflags
Apd |void |wrap_op_checker|Optype opcode|NN Perl_check_t new_checker|NN Perl_check_t *old_checker_p
-AMpd |void |wrap_keyword_plugin|NN Perl_keyword_plugin_t new_plugin|NN Perl_keyword_plugin_t *old_plugin_p
+Axpd |void |wrap_keyword_plugin|NN Perl_keyword_plugin_t new_plugin|NN Perl_keyword_plugin_t *old_plugin_p
ApR |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
Ap |char* |scan_vstring |NN const char *s|NN const char *const e \
|NN SV *sv
@@ -1253,15 +1432,10 @@ Apd |SV* |vstringify |NN SV *vs
Apd |int |vcmp |NN SV *lhv|NN SV *rhv
: Used in pp_hot.c and pp_sys.c
p |PerlIO*|nextargv |NN GV* gv|bool nomagicopen
-#ifdef HAS_MEMMEM
-AdnopP |char* |ninstr |NN const char* big|NN const char* bigend \
+AdMTpP |char* |ninstr |NN const char* big|NN const char* bigend \
|NN const char* little|NN const char* lend
-#else
-AdnpP |char* |ninstr |NN const char* big|NN const char* bigend \
- |NN const char* little|NN const char* lend
-#endif
Apd |void |op_free |NULLOK OP* arg
-Mp |OP* |op_unscope |NULLOK OP* o
+xp |OP* |op_unscope |NULLOK OP* o
#ifdef PERL_CORE
p |void |opslab_free |NN OPSLAB *slab
p |void |opslab_free_nopad|NN OPSLAB *slab
@@ -1275,7 +1449,7 @@ p |void |package_version|NN OP* v
p |PADOFFSET|allocmy |NN const char *const name|const STRLEN len\
|const U32 flags
#ifdef USE_ITHREADS
-AMp |PADOFFSET|alloccopstash|NN HV *hv
+Adxp |PADOFFSET|alloccopstash|NN HV *hv
#endif
: Used in perly.y
pR |OP* |oopsAV |NN OP* o
@@ -1286,12 +1460,12 @@ pR |OP* |oopsHV |NN OP* o
p |void |peep |NULLOK OP* o
p |void |rpeep |NULLOK OP* o
: Defined in doio.c, used only in pp_hot.c
-dopM |PerlIO*|start_glob |NN SV *tmpglob|NN IO *io
+dopx |PerlIO*|start_glob |NN SV *tmpglob|NN IO *io
Ap |void |reentrant_size
Ap |void |reentrant_init
Ap |void |reentrant_free
-Anp |void* |reentrant_retry|NN const char *f|...
+AFTp |void* |reentrant_retry|NN const char *f|...
: "Very" special - can't use the O flag for this one:
: (The rename from perl_atexit to Perl_call_atexit was in 864dbfa3ca8032ef)
@@ -1309,113 +1483,58 @@ ApdO |AV* |get_av |NN const char *name|I32 flags
ApdO |HV* |get_hv |NN const char *name|I32 flags
ApdO |CV* |get_cv |NN const char* name|I32 flags
Apd |CV* |get_cvn_flags |NN const char* name|STRLEN len|I32 flags
-Ando |const char*|Perl_setlocale|const int category|NULLOK const char* locale
+ATdo |const char*|Perl_setlocale|const int category|NULLOK const char* locale
#if defined(HAS_NL_LANGINFO) && defined(PERL_LANGINFO_H)
-Ando |const char*|Perl_langinfo|const nl_item item
+ATdo |const char*|Perl_langinfo|const nl_item item
#else
-Ando |const char*|Perl_langinfo|const int item
+ATdo |const char*|Perl_langinfo|const int item
#endif
-ApOM |int |init_i18nl10n |int printwarn
-AbpOM |int |init_i18nl14n |int printwarn
+CpO |int |init_i18nl10n |int printwarn
+CbpOD |int |init_i18nl14n |int printwarn
p |char* |my_strerror |const int errnum
-Xpn |void |_warn_problematic_locale
+XpT |void |_warn_problematic_locale
Xp |void |set_numeric_underlying
Xp |void |set_numeric_standard
Xp |bool |_is_in_locale_category|const bool compiling|const int category
-Apdn |void |switch_to_global_locale
-Apdn |bool |sync_locale
-ApMn |void |thread_locale_init
-ApMn |void |thread_locale_term
+ApdT |void |switch_to_global_locale
+ApdT |bool |sync_locale
+ApxT |void |thread_locale_init
+ApxT |void |thread_locale_term
ApdO |void |require_pv |NN const char* pv
-Abpd |void |pack_cat |NN SV *cat|NN const char *pat|NN const char *patend \
+AbpdM |void |pack_cat |NN SV *cat|NN const char *pat|NN const char *patend \
|NN SV **beglist|NN SV **endlist|NN SV ***next_in_list|U32 flags
-Apd |void |packlist |NN SV *cat|NN const char *pat|NN const char *patend|NN SV **beglist|NN SV **endlist
+Apd |void |packlist |NN SV *cat|NN const char *pat|NN const char *patend|NN SV **beglist|NN SV **endlist
#if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
-s |void |pidgone |Pid_t pid|int status
+S |void |pidgone |Pid_t pid|int status
#endif
: Used in perly.y
p |OP* |pmruntime |NN OP *o|NN OP *expr|NULLOK OP *repl \
|UV flags|I32 floor
#if defined(PERL_IN_OP_C)
-s |OP* |pmtrans |NN OP* o|NN OP* expr|NN OP* repl
+S |OP* |pmtrans |NN OP* o|NN OP* expr|NN OP* repl
#endif
+p |void |invmap_dump |NN SV* invlist|NN UV * map
Ap |void |pop_scope
Ap |void |push_scope
-Apmb |OP* |ref |NULLOK OP* o|I32 type
-#if defined(PERL_IN_OP_C)
-s |OP* |refkids |NULLOK OP* o|I32 type
-#endif
-Ap |void |regdump |NN const regexp* r
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PERL_C) || defined(PERL_IN_UTF8_C)
-EXpR |SV* |_new_invlist_C_array|NN const UV* const list
-EXMp |bool |_invlistEQ |NN SV* const a|NN SV* const b|const bool complement_b
+#if defined(PERL_IN_PERLY_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C)
+ApMb |OP* |ref |NULLOK OP* o|I32 type
#endif
-Ap |I32 |pregexec |NN REGEXP * const prog|NN char* stringarg \
- |NN char* strend|NN char* strbeg \
- |SSize_t minend |NN SV* screamer|U32 nosave
-Ap |void |pregfree |NULLOK REGEXP* r
-Ap |void |pregfree2 |NN REGEXP *rx
-: FIXME - is anything in re using this now?
-EXp |REGEXP*|reg_temp_copy |NULLOK REGEXP* dsv|NN REGEXP* ssv
-Ap |void |regfree_internal|NN REGEXP *const rx
-#if defined(USE_ITHREADS)
-Ap |void* |regdupe_internal|NN REGEXP * const r|NN CLONE_PARAMS* param
+#if defined(PERL_IN_OP_C)
+S |OP* |refkids |NULLOK OP* o|I32 type
#endif
-EXp |regexp_engine const *|current_re_engine
-Ap |REGEXP*|pregcomp |NN SV * const pattern|const U32 flags
-p |REGEXP*|re_op_compile |NULLOK SV ** const patternp \
- |int pat_count|NULLOK OP *expr \
- |NN const regexp_engine* eng \
- |NULLOK REGEXP *old_re \
- |NULLOK bool *is_bare_re \
- |const U32 rx_flags|const U32 pm_flags
-Ap |REGEXP*|re_compile |NN SV * const pattern|U32 orig_rx_flags
-Ap |char* |re_intuit_start|NN REGEXP * const rx \
- |NULLOK SV* sv \
- |NN const char* const strbeg \
- |NN char* strpos \
- |NN char* strend \
- |const U32 flags \
- |NULLOK re_scream_pos_data *data
-Ap |SV* |re_intuit_string|NN REGEXP *const r
-Ap |I32 |regexec_flags |NN REGEXP *const rx|NN char *stringarg \
- |NN char *strend|NN char *strbeg \
- |SSize_t minend|NN SV *sv \
- |NULLOK void *data|U32 flags
-ApR |regnode*|regnext |NULLOK regnode* p
-EXp |SV*|reg_named_buff |NN REGEXP * const rx|NULLOK SV * const key \
- |NULLOK SV * const value|const U32 flags
-EXp |SV*|reg_named_buff_iter |NN REGEXP * const rx|NULLOK const SV * const lastkey \
- |const U32 flags
-Ap |SV*|reg_named_buff_fetch |NN REGEXP * const rx|NN SV * const namesv|const U32 flags
-Ap |bool|reg_named_buff_exists |NN REGEXP * const rx|NN SV * const key|const U32 flags
-Ap |SV*|reg_named_buff_firstkey |NN REGEXP * const rx|const U32 flags
-Ap |SV*|reg_named_buff_nextkey |NN REGEXP * const rx|const U32 flags
-Ap |SV*|reg_named_buff_scalar |NN REGEXP * const rx|const U32 flags
-Ap |SV*|reg_named_buff_all |NN REGEXP * const rx|const U32 flags
-
-: FIXME - is anything in re using this now?
-EXp |void|reg_numbered_buff_fetch|NN REGEXP * const rx|const I32 paren|NULLOK SV * const sv
-: FIXME - is anything in re using this now?
-EXp |void|reg_numbered_buff_store|NN REGEXP * const rx|const I32 paren|NULLOK SV const * const value
-: FIXME - is anything in re using this now?
-EXp |I32|reg_numbered_buff_length|NN REGEXP * const rx|NN const SV * const sv|const I32 paren
-: FIXME - is anything in re using this now?
-EXp |SV*|reg_qr_package|NN REGEXP * const rx
-
-Anp |void |repeatcpy |NN char* to|NN const char* from|I32 len|IV count
-AdnpP |char* |rninstr |NN const char* big|NN const char* bigend \
+ATp |void |repeatcpy |NN char* to|NN const char* from|I32 len|IV count
+AdTpP |char* |rninstr |NN const char* big|NN const char* bigend \
|NN const char* little|NN const char* lend
-Ap |Sighandler_t|rsignal |int i|Sighandler_t t
+Apd |Sighandler_t|rsignal |int i|Sighandler_t t
: Used in pp_sys.c
p |int |rsignal_restore|int i|NULLOK Sigsave_t* t
: Used in pp_sys.c
p |int |rsignal_save |int i|Sighandler_t t1|NN Sigsave_t* save
Ap |Sighandler_t|rsignal_state|int i
#if defined(PERL_IN_PP_CTL_C)
-s |void |rxres_free |NN void** rsp
-s |void |rxres_restore |NN void **rsp|NN REGEXP *rx
+S |void |rxres_free |NN void** rsp
+S |void |rxres_restore |NN void **rsp|NN REGEXP *rx
#endif
: Used in pp_hot.c
p |void |rxres_save |NN void **rsp|NN REGEXP *rx
@@ -1424,7 +1543,7 @@ p |void |rxres_save |NN void **rsp|NN REGEXP *rx
p |I32 |same_dirent |NN const char* a|NN const char* b
#endif
Apda |char* |savepv |NULLOK const char* pv
-Apda |char* |savepvn |NULLOK const char* pv|I32 len
+Apda |char* |savepvn |NULLOK const char* pv|Size_t len
Apda |char* |savesharedpv |NULLOK const char* pv
: NULLOK only to suppress a compiler warning
@@ -1434,12 +1553,12 @@ Apda |char* |savesharedsvpv |NN SV *sv
Apda |char* |savesvpv |NN SV* sv
Ap |void |savestack_grow
Ap |void |savestack_grow_cnt |I32 need
-Amp |void |save_aelem |NN AV* av|SSize_t idx|NN SV **sptr
+Am |void |save_aelem |NN AV* av|SSize_t idx|NN SV **sptr
Ap |void |save_aelem_flags|NN AV* av|SSize_t idx|NN SV **sptr \
|const U32 flags
Ap |I32 |save_alloc |I32 size|I32 pad
-Ap |void |save_aptr |NN AV** aptr
-Ap |AV* |save_ary |NN GV* gv
+Apdh |void |save_aptr |NN AV** aptr
+Apdh |AV* |save_ary |NN GV* gv
Ap |void |save_bool |NN bool* boolp
Ap |void |save_clearsv |NN SV** svp
Ap |void |save_delete |NN HV *hv|NN char *key|I32 klen
@@ -1447,57 +1566,59 @@ Ap |void |save_hdelete |NN HV *hv|NN SV *keysv
Ap |void |save_adelete |NN AV *av|SSize_t key
Ap |void |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|NN void* p
Ap |void |save_destructor_x|DESTRUCTORFUNC_t f|NULLOK void* p
-Apmb |void |save_freesv |NULLOK SV* sv
+ApMb |void |save_freesv |NULLOK SV* sv
: Used in SAVEFREOP(), used in op.c, pp_ctl.c
-Apmb |void |save_freeop |NULLOK OP* o
-Apmb |void |save_freepv |NULLOK char* pv
+ApMb |void |save_freeop |NULLOK OP* o
+ApMb |void |save_freepv |NULLOK char* pv
Ap |void |save_generic_svref|NN SV** sptr
Ap |void |save_generic_pvref|NN char** str
Ap |void |save_shared_pvref|NN char** str
Adp |void |save_gp |NN GV* gv|I32 empty
-Ap |HV* |save_hash |NN GV* gv
+Apdh |HV* |save_hash |NN GV* gv
Ap |void |save_hints
-Amp |void |save_helem |NN HV *hv|NN SV *key|NN SV **sptr
+Am |void |save_helem |NN HV *hv|NN SV *key|NN SV **sptr
Ap |void |save_helem_flags|NN HV *hv|NN SV *key|NN SV **sptr|const U32 flags
-Ap |void |save_hptr |NN HV** hptr
+Apdh |void |save_hptr |NN HV** hptr
Ap |void |save_I16 |NN I16* intp
Ap |void |save_I32 |NN I32* intp
Ap |void |save_I8 |NN I8* bytep
Ap |void |save_int |NN int* intp
-Ap |void |save_item |NN SV* item
+Apdh |void |save_item |NN SV* item
Ap |void |save_iv |NN IV *ivp
-Abp |void |save_list |NN SV** sarg|I32 maxsarg
-Abp |void |save_long |NN long* longp
-Apmb |void |save_mortalizesv|NN SV* sv
-Abp |void |save_nogv |NN GV* gv
+AbpDdh |void |save_list |NN SV** sarg|I32 maxsarg
+AbpD |void |save_long |NN long* longp
+ApMb |void |save_mortalizesv|NN SV* sv
+AbpD |void |save_nogv |NN GV* gv
: Used in SAVEFREOP(), used in gv.c, op.c, perl.c, pp_ctl.c, pp_sort.c
-Apmb |void |save_op
-Ap |SV* |save_scalar |NN GV* gv
+ApMb |void |save_op
+Apdh |SV* |save_scalar |NN GV* gv
Ap |void |save_pptr |NN char** pptr
Ap |void |save_vptr |NN void *ptr
Ap |void |save_re_context
Ap |void |save_padsv_and_mortalize|PADOFFSET off
Ap |void |save_sptr |NN SV** sptr
Xp |void |save_strlen |NN STRLEN* ptr
-Ap |SV* |save_svref |NN SV** sptr
-AMpo |void |savetmps
+Apdh |SV* |save_svref |NN SV** sptr
+Axpo |void |savetmps
Ap |void |save_pushptr |NULLOK void *const ptr|const int type
Ap |void |save_pushi32ptr|const I32 i|NULLOK void *const ptr|const int type
: Used by SAVESWITCHSTACK() in pp.c
Ap |void |save_pushptrptr|NULLOK void *const ptr1 \
|NULLOK void *const ptr2|const int type
#if defined(PERL_IN_SCOPE_C)
-s |void |save_pushptri32ptr|NULLOK void *const ptr1|const I32 i \
+S |void |save_pushptri32ptr|NULLOK void *const ptr1|const I32 i \
|NULLOK void *const ptr2|const int type
#endif
+Xiop |I32 |TOPMARK
+Xiop |I32 |POPMARK
: Used in perly.y
p |OP* |sawparens |NULLOK OP* o
Apd |OP* |op_contextualize|NN OP* o|I32 context
: Used in perly.y
p |OP* |scalar |NULLOK OP* o
#if defined(PERL_IN_OP_C)
-s |OP* |scalarkids |NULLOK OP* o
-s |OP* |scalarseq |NULLOK OP* o
+S |OP* |scalarkids |NULLOK OP* o
+S |OP* |scalarseq |NULLOK OP* o
#endif
: Used in pp_ctl.c
p |OP* |scalarvoid |NN OP* o
@@ -1505,70 +1626,77 @@ Apd |NV |scan_bin |NN const char* start|STRLEN len|NN STRLEN* retlen
Apd |NV |scan_hex |NN const char* start|STRLEN len|NN STRLEN* retlen
Ap |char* |scan_num |NN const char* s|NN YYSTYPE *lvalp
Apd |NV |scan_oct |NN const char* start|STRLEN len|NN STRLEN* retlen
-AMpd |OP* |op_scope |NULLOK OP* o
+Axpd |OP* |op_scope |NULLOK OP* o
: Only used by perl.c/miniperl.c, but defined in caretx.c
-px |void |set_caret_X
+pe |void |set_caret_X
Apd |void |setdefout |NN GV* gv
Ap |HEK* |share_hek |NN const char* str|SSize_t len|U32 hash
-#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
+#ifdef PERL_USE_3ARG_SIGHANDLER
: Used in perl.c
-np |Signal_t |sighandler |int sig|NULLOK siginfo_t *info|NULLOK void *uap
-Anp |Signal_t |csighandler |int sig|NULLOK siginfo_t *info|NULLOK void *uap
+Tp |Signal_t |sighandler |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
+ATp |Signal_t |csighandler |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
#else
-np |Signal_t |sighandler |int sig
-Anp |Signal_t |csighandler |int sig
-#endif
+Tp |Signal_t |sighandler |int sig
+ATp |Signal_t |csighandler |int sig
+#endif
+Tp |Signal_t |sighandler1 |int sig
+ATp |Signal_t |csighandler1 |int sig
+Tp |Signal_t |sighandler3 |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
+ATp |Signal_t |csighandler3 |int sig|NULLOK Siginfo_t *info|NULLOK void *uap
+ATp |Signal_t |perly_sighandler |int sig|NULLOK Siginfo_t *info|NULLOK void *uap|bool safe
Ap |SV** |stack_grow |NN SV** sp|NN SV** p|SSize_t n
Ap |I32 |start_subparse |I32 is_format|U32 flags
Xp |void |init_named_cv |NN CV *cv|NN OP *nameop
: Used in pp_ctl.c
p |void |sub_crush_depth|NN CV* cv
-Apbmd |bool |sv_2bool |NN SV *const sv
+ApbMd |bool |sv_2bool |NN SV *const sv
Apd |bool |sv_2bool_flags |NN SV *sv|I32 flags
Apd |CV* |sv_2cv |NULLOK SV* sv|NN HV **const st|NN GV **const gvp \
|const I32 lref
Apd |IO* |sv_2io |NN SV *const sv
#if defined(PERL_IN_SV_C)
-s |bool |glob_2number |NN GV* const gv
+S |bool |glob_2number |NN GV* const gv
#endif
-Apmb |IV |sv_2iv |NN SV *sv
+ApMb |IV |sv_2iv |NN SV *sv
Apd |IV |sv_2iv_flags |NN SV *const sv|const I32 flags
Apd |SV* |sv_2mortal |NULLOK SV *const sv
Apd |NV |sv_2nv_flags |NN SV *const sv|const I32 flags
: Used in pp.c, pp_hot.c, sv.c
-pMd |SV* |sv_2num |NN SV *const sv
-Apmb |char* |sv_2pv |NN SV *sv|NULLOK STRLEN *lp
+pxd |SV* |sv_2num |NN SV *const sv
+ApMb |char* |sv_2pv |NN SV *sv|NULLOK STRLEN *lp
Apd |char* |sv_2pv_flags |NN SV *const sv|NULLOK STRLEN *const lp|const I32 flags
-Apd |char* |sv_2pvutf8 |NN SV *sv|NULLOK STRLEN *const lp
-Apd |char* |sv_2pvbyte |NN SV *sv|NULLOK STRLEN *const lp
-Abp |char* |sv_pvn_nomg |NN SV* sv|NULLOK STRLEN* lp
-Apmb |UV |sv_2uv |NN SV *sv
+ApdMb |char* |sv_2pvutf8 |NN SV *sv|NULLOK STRLEN *const lp
+Ap |char* |sv_2pvutf8_flags |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags
+ApdMb |char* |sv_2pvbyte |NN SV *sv|NULLOK STRLEN *const lp
+Ap |char* |sv_2pvbyte_flags |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags
+AbpD |char* |sv_pvn_nomg |NN SV* sv|NULLOK STRLEN* lp
+ApMb |UV |sv_2uv |NN SV *sv
Apd |UV |sv_2uv_flags |NN SV *const sv|const I32 flags
-Abpd |IV |sv_iv |NN SV* sv
-Abpd |UV |sv_uv |NN SV* sv
-Abpd |NV |sv_nv |NN SV* sv
-Abpd |char* |sv_pvn |NN SV *sv|NN STRLEN *lp
-Abpd |char* |sv_pvutf8n |NN SV *sv|NN STRLEN *lp
-Abpd |char* |sv_pvbyten |NN SV *sv|NN STRLEN *lp
+AbpdD |IV |sv_iv |NN SV* sv
+AbpdD |UV |sv_uv |NN SV* sv
+AbpdD |NV |sv_nv |NN SV* sv
+AbpdD |char* |sv_pvn |NN SV *sv|NN STRLEN *lp
+AbpdD |char* |sv_pvutf8n |NN SV *sv|NN STRLEN *lp
+AbpdD |char* |sv_pvbyten |NN SV *sv|NN STRLEN *lp
Apd |I32 |sv_true |NULLOK SV *const sv
#if defined(PERL_IN_SV_C)
-sd |void |sv_add_arena |NN char *const ptr|const U32 size \
+Sd |void |sv_add_arena |NN char *const ptr|const U32 size \
|const U32 flags
#endif
-Apdn |void |sv_backoff |NN SV *const sv
+ApdT |void |sv_backoff |NN SV *const sv
Apd |SV* |sv_bless |NN SV *const sv|NN HV *const stash
#if defined(PERL_DEBUG_READONLY_COW)
p |void |sv_buf_to_ro |NN SV *sv
# if defined(PERL_IN_SV_C)
-s |void |sv_buf_to_rw |NN SV *sv
+S |void |sv_buf_to_rw |NN SV *sv
# endif
#endif
Afpd |void |sv_catpvf |NN SV *const sv|NN const char *const pat|...
Apd |void |sv_vcatpvf |NN SV *const sv|NN const char *const pat \
|NULLOK va_list *const args
Apd |void |sv_catpv |NN SV *const sv|NULLOK const char* ptr
-Apmdb |void |sv_catpvn |NN SV *dsv|NN const char *sstr|STRLEN len
-Apmdb |void |sv_catsv |NN SV *dstr|NULLOK SV *sstr
+ApMdb |void |sv_catpvn |NN SV *dsv|NN const char *sstr|STRLEN len
+ApMdb |void |sv_catsv |NN SV *dstr|NULLOK SV *sstr
Apd |void |sv_chop |NN SV *const sv|NULLOK const char *const ptr
: Used only in perl.c
pd |I32 |sv_clean_all
@@ -1576,43 +1704,44 @@ pd |I32 |sv_clean_all
pd |void |sv_clean_objs
Apd |void |sv_clear |NN SV *const orig_sv
#if defined(PERL_IN_SV_C)
-s |bool |curse |NN SV * const sv|const bool check_refcnt
+S |bool |curse |NN SV * const sv|const bool check_refcnt
#endif
-Aopd |I32 |sv_cmp |NULLOK SV *const sv1|NULLOK SV *const sv2
+AMpd |I32 |sv_cmp |NULLOK SV *const sv1|NULLOK SV *const sv2
Apd |I32 |sv_cmp_flags |NULLOK SV *const sv1|NULLOK SV *const sv2 \
|const U32 flags
-Aopd |I32 |sv_cmp_locale |NULLOK SV *const sv1|NULLOK SV *const sv2
+AMpd |I32 |sv_cmp_locale |NULLOK SV *const sv1|NULLOK SV *const sv2
Apd |I32 |sv_cmp_locale_flags |NULLOK SV *const sv1 \
|NULLOK SV *const sv2|const U32 flags
#if defined(USE_LOCALE_COLLATE)
-Apbmd |char* |sv_collxfrm |NN SV *const sv|NN STRLEN *const nxp
+ApbMd |char* |sv_collxfrm |NN SV *const sv|NN STRLEN *const nxp
Apd |char* |sv_collxfrm_flags |NN SV *const sv|NN STRLEN *const nxp|I32 const flags
#endif
Apd |int |getcwd_sv |NN SV* sv
Apd |void |sv_dec |NULLOK SV *const sv
Apd |void |sv_dec_nomg |NULLOK SV *const sv
-Ap |void |sv_dump |NULLOK SV* sv
+Apd |void |sv_dump |NULLOK SV* sv
ApdR |bool |sv_derived_from|NN SV* sv|NN const char *const name
ApdR |bool |sv_derived_from_sv|NN SV* sv|NN SV *namesv|U32 flags
ApdR |bool |sv_derived_from_pv|NN SV* sv|NN const char *const name|U32 flags
ApdR |bool |sv_derived_from_pvn|NN SV* sv|NN const char *const name \
|const STRLEN len|U32 flags
+ApdRx |bool |sv_isa_sv |NN SV* sv|NN SV* namesv
ApdR |bool |sv_does |NN SV* sv|NN const char *const name
ApdR |bool |sv_does_sv |NN SV* sv|NN SV* namesv|U32 flags
ApdR |bool |sv_does_pv |NN SV* sv|NN const char *const name|U32 flags
ApdR |bool |sv_does_pvn |NN SV* sv|NN const char *const name|const STRLEN len \
|U32 flags
-Apbmd |I32 |sv_eq |NULLOK SV* sv1|NULLOK SV* sv2
+ApbMd |I32 |sv_eq |NULLOK SV* sv1|NULLOK SV* sv2
Apd |I32 |sv_eq_flags |NULLOK SV* sv1|NULLOK SV* sv2|const U32 flags
Apd |void |sv_free |NULLOK SV *const sv
-poMX |void |sv_free2 |NN SV *const sv|const U32 refcnt
+poxX |void |sv_free2 |NN SV *const sv|const U32 refcnt
: Used only in perl.c
pd |void |sv_free_arenas
Apd |char* |sv_gets |NN SV *const sv|NN PerlIO *const fp|I32 append
Apd |char* |sv_grow |NN SV *const sv|STRLEN newlen
Apd |void |sv_inc |NULLOK SV *const sv
Apd |void |sv_inc_nomg |NULLOK SV *const sv
-Apmdb |void |sv_insert |NN SV *const bigstr|const STRLEN offset \
+ApMdb |void |sv_insert |NN SV *const bigstr|const STRLEN offset \
|const STRLEN len|NN const char *const little \
|const STRLEN littlelen
Apd |void |sv_insert_flags|NN SV *const bigstr|const STRLEN offset|const STRLEN len \
@@ -1627,11 +1756,11 @@ Apd |void |sv_magic |NN SV *const sv|NULLOK SV *const obj|const int how \
Apd |MAGIC *|sv_magicext |NN SV *const sv|NULLOK SV *const obj|const int how \
|NULLOK const MGVTBL *const vtbl|NULLOK const char *const name \
|const I32 namlen
-Ein |bool |sv_only_taint_gmagic|NN SV *sv
+EiTp |bool |sv_only_taint_gmagic|NN SV *sv
: exported for re.pm
EXp |MAGIC *|sv_magicext_mglob|NN SV *sv
-ApdbmR |SV* |sv_mortalcopy |NULLOK SV *const oldsv
-XpR |SV* |sv_mortalcopy_flags|NULLOK SV *const oldsv|U32 flags
+ApdbMR |SV* |sv_mortalcopy |NULLOK SV *const oldsv
+ApdR |SV* |sv_mortalcopy_flags|NULLOK SV *const oldsv|U32 flags
ApdR |SV* |sv_newmortal
Apd |SV* |sv_newref |NULLOK SV *const sv
Ap |char* |sv_peek |NULLOK SV* sv
@@ -1641,7 +1770,7 @@ Apd |STRLEN |sv_pos_u2b_flags|NN SV *const sv|STRLEN uoffset \
Apd |void |sv_pos_b2u |NULLOK SV *const sv|NN I32 *const offsetp
Apd |STRLEN |sv_pos_b2u_flags|NN SV *const sv|STRLEN const offset \
|U32 flags
-Apmdb |char* |sv_pvn_force |NN SV* sv|NULLOK STRLEN* lp
+ApMdb |char* |sv_pvn_force |NN SV* sv|NULLOK STRLEN* lp
Apd |char* |sv_pvutf8n_force|NN SV *const sv|NULLOK STRLEN *const lp
Apd |char* |sv_pvbyten_force|NN SV *const sv|NULLOK STRLEN *const lp
Apd |char* |sv_recode_to_utf8 |NN SV* sv|NN SV *encoding
@@ -1657,7 +1786,7 @@ p |void |sv_resetpvn |NULLOK const char* s|STRLEN len \
Afpd |void |sv_setpvf |NN SV *const sv|NN const char *const pat|...
Apd |void |sv_vsetpvf |NN SV *const sv|NN const char *const pat|NULLOK va_list *const args
Apd |void |sv_setiv |NN SV *const sv|const IV num
-Apdb |void |sv_setpviv |NN SV *const sv|const IV num
+ApdbD |void |sv_setpviv |NN SV *const sv|const IV num
Apd |void |sv_setuv |NN SV *const sv|const UV num
Apd |void |sv_setnv |NN SV *const sv|const NV num
Apd |SV* |sv_setref_iv |NN SV *const rv|NULLOK const char *const classname|const IV iv
@@ -1671,16 +1800,16 @@ Apd |void |sv_setpv |NN SV *const sv|NULLOK const char *const ptr
Apd |void |sv_setpvn |NN SV *const sv|NULLOK const char *const ptr|const STRLEN len
Apd |char *|sv_setpv_bufsize|NN SV *const sv|const STRLEN cur|const STRLEN len
Xp |void |sv_sethek |NN SV *const sv|NULLOK const HEK *const hek
-Apmdb |void |sv_setsv |NN SV *dstr|NULLOK SV *sstr
-Apmdb |void |sv_taint |NN SV* sv
+ApMdb |void |sv_setsv |NN SV *dstr|NULLOK SV *sstr
+ApMdb |void |sv_taint |NN SV* sv
ApdR |bool |sv_tainted |NN SV *const sv
Apd |int |sv_unmagic |NN SV *const sv|const int type
Apd |int |sv_unmagicext |NN SV *const sv|const int type|NULLOK MGVTBL *vtbl
-Apdmb |void |sv_unref |NN SV* sv
+ApdMb |void |sv_unref |NN SV* sv
Apd |void |sv_unref_flags |NN SV *const ref|const U32 flags
Apd |void |sv_untaint |NN SV *const sv
Apd |void |sv_upgrade |NN SV *const sv|svtype new_type
-Apdmb |void |sv_usepvn |NN SV* sv|NULLOK char* ptr|STRLEN len
+ApdMb |void |sv_usepvn |NN SV* sv|NULLOK char* ptr|STRLEN len
Apd |void |sv_usepvn_flags|NN SV *const sv|NULLOK char* ptr|const STRLEN len\
|const U32 flags
Apd |void |sv_vcatpvfn |NN SV *const sv|NN const char *const pat|const STRLEN patlen \
@@ -1693,64 +1822,401 @@ Apd |void |sv_vsetpvfn |NN SV *const sv|NN const char *const pat|const STRLEN pa
|NULLOK va_list *const args|NULLOK SV **const svargs \
|const Size_t sv_count|NULLOK bool *const maybe_tainted
ApR |NV |str_to_version |NN SV *sv
-EXpRM |SV* |swash_init |NN const char* pkg|NN const char* name|NN SV* listsv|I32 minbits|I32 none
-EXpM |UV |swash_fetch |NN SV *swash|NN const U8 *ptr|bool do_utf8
-#ifdef PERL_IN_REGCOMP_C
-EiMR |SV* |add_cp_to_invlist |NULLOK SV* invlist|const UV cp
-EiMRn |bool |invlist_is_iterating|NN SV* const invlist
-#ifndef PERL_EXT_RE_BUILD
-EiMRn |UV* |_invlist_array_init |NN SV* const invlist|const bool will_have_0
-EiMRn |UV |invlist_max |NN SV* const invlist
-EsM |void |_append_range_to_invlist |NN SV* const invlist|const UV start|const UV end
-EsM |void |invlist_extend |NN SV* const invlist|const UV len
-EsM |void |invlist_replace_list_destroys_src|NN SV *dest|NN SV *src
-EiMRn |IV* |get_invlist_previous_index_addr|NN SV* invlist
-EiM |void |invlist_set_len|NN SV* const invlist|const UV len|const bool offset
-EiMn |void |invlist_set_previous_index|NN SV* const invlist|const IV index
-EiMRn |IV |invlist_previous_index|NN SV* const invlist
-EiMn |void |invlist_trim |NN SV* invlist
-EiM |void |invlist_clear |NN SV* invlist
-sM |void |initialize_invlist_guts|NN SV* invlist|const Size_t initial_size
-#endif
-EiMRn |STRLEN*|get_invlist_iter_addr |NN SV* invlist
-EiMn |void |invlist_iterinit|NN SV* invlist
-EsMRn |bool |invlist_iternext|NN SV* invlist|NN UV* start|NN UV* end
-EiMn |void |invlist_iterfinish|NN SV* invlist
-EiMRn |UV |invlist_highest|NN SV* const invlist
-EMRs |SV* |_make_exactf_invlist |NN RExC_state_t *pRExC_state \
- |NN regnode *node
-EsMR |SV* |invlist_contents|NN SV* const invlist \
+Ap |void |regdump |NN const regexp* r
+CiTop |struct regexp *|ReANY |NN const REGEXP * const re
+Ap |I32 |pregexec |NN REGEXP * const prog|NN char* stringarg \
+ |NN char* strend|NN char* strbeg \
+ |SSize_t minend |NN SV* screamer|U32 nosave
+Ap |void |pregfree |NULLOK REGEXP* r
+Ap |void |pregfree2 |NN REGEXP *rx
+: FIXME - is anything in re using this now?
+EXp |REGEXP*|reg_temp_copy |NULLOK REGEXP* dsv|NN REGEXP* ssv
+Ap |void |regfree_internal|NN REGEXP *const rx
+#if defined(USE_ITHREADS)
+Ap |void* |regdupe_internal|NN REGEXP * const r|NN CLONE_PARAMS* param
+#endif
+EXp |regexp_engine const *|current_re_engine
+Ap |REGEXP*|pregcomp |NN SV * const pattern|const U32 flags
+p |REGEXP*|re_op_compile |NULLOK SV ** const patternp \
+ |int pat_count|NULLOK OP *expr \
+ |NN const regexp_engine* eng \
+ |NULLOK REGEXP *old_re \
+ |NULLOK bool *is_bare_re \
+ |const U32 rx_flags|const U32 pm_flags
+Ap |REGEXP*|re_compile |NN SV * const pattern|U32 orig_rx_flags
+Cp |char* |re_intuit_start|NN REGEXP * const rx \
+ |NULLOK SV* sv \
+ |NN const char* const strbeg \
+ |NN char* strpos \
+ |NN char* strend \
+ |const U32 flags \
+ |NULLOK re_scream_pos_data *data
+Cp |SV* |re_intuit_string|NN REGEXP *const r
+Ap |I32 |regexec_flags |NN REGEXP *const rx|NN char *stringarg \
+ |NN char *strend|NN char *strbeg \
+ |SSize_t minend|NN SV *sv \
+ |NULLOK void *data|U32 flags
+ApR |regnode*|regnext |NULLOK regnode* p
+EXp |SV*|reg_named_buff |NN REGEXP * const rx|NULLOK SV * const key \
+ |NULLOK SV * const value|const U32 flags
+EXp |SV*|reg_named_buff_iter |NN REGEXP * const rx|NULLOK const SV * const lastkey \
+ |const U32 flags
+Ap |SV*|reg_named_buff_fetch |NN REGEXP * const rx|NN SV * const namesv|const U32 flags
+Ap |bool|reg_named_buff_exists |NN REGEXP * const rx|NN SV * const key|const U32 flags
+Ap |SV*|reg_named_buff_firstkey |NN REGEXP * const rx|const U32 flags
+Ap |SV*|reg_named_buff_nextkey |NN REGEXP * const rx|const U32 flags
+Ap |SV*|reg_named_buff_scalar |NN REGEXP * const rx|const U32 flags
+Ap |SV*|reg_named_buff_all |NN REGEXP * const rx|const U32 flags
+
+: FIXME - is anything in re using this now?
+EXp |void|reg_numbered_buff_fetch|NN REGEXP * const rx|const I32 paren|NULLOK SV * const sv
+: FIXME - is anything in re using this now?
+EXp |void|reg_numbered_buff_store|NN REGEXP * const rx|const I32 paren|NULLOK SV const * const value
+: FIXME - is anything in re using this now?
+EXp |I32|reg_numbered_buff_length|NN REGEXP * const rx|NN const SV * const sv|const I32 paren
+
+: FIXME - is anything in re using this now?
+EXp |SV*|reg_qr_package|NN REGEXP * const rx
+EXpRT |I16 |do_uniprop_match|NN const char * const key|const U16 key_len
+EXpRT |const char * const *|get_prop_values|const int table_index
+EXpR |SV * |get_prop_definition|const int table_index
+EXpRT |const char *|get_deprecated_property_msg|const Size_t warning_offset
+#if defined(PERL_IN_REGCOMP_C)
+EiRT |bool |invlist_is_iterating|NN SV* const invlist
+EiR |SV* |invlist_contents|NN SV* const invlist \
|const bool traditional_style
-EsRn |bool |new_regcurly |NN const char *s|NN const char *e
+EixRT |UV |invlist_lowest|NN SV* const invlist
+ESRT |bool |new_regcurly |NN const char *s|NN const char *e
+ERS |SV* |make_exactf_invlist |NN RExC_state_t *pRExC_state \
+ |NN regnode *node
+ES |regnode_offset|reg |NN RExC_state_t *pRExC_state \
+ |I32 paren|NN I32 *flagp|U32 depth
+ES |regnode_offset|regnode_guts|NN RExC_state_t *pRExC_state \
+ |const U8 op \
+ |const STRLEN extra_len \
+ |NN const char* const name
+ES |void |change_engine_size|NN RExC_state_t *pRExC_state|const Ptrdiff_t size
+ES |regnode_offset|reganode|NN RExC_state_t *pRExC_state|U8 op \
+ |U32 arg
+ES |regnode_offset|regpnode|NN RExC_state_t *pRExC_state|U8 op \
+ |NN SV * arg
+ES |regnode_offset|reg2Lanode|NN RExC_state_t *pRExC_state \
+ |const U8 op \
+ |const U32 arg1 \
+ |const I32 arg2
+ES |regnode_offset|regatom |NN RExC_state_t *pRExC_state \
+ |NN I32 *flagp|U32 depth
+ES |regnode_offset|regbranch |NN RExC_state_t *pRExC_state \
+ |NN I32 *flagp|I32 first|U32 depth
+ES |void |set_ANYOF_arg |NN RExC_state_t* const pRExC_state \
+ |NN regnode* const node \
+ |NULLOK SV* const cp_list \
+ |NULLOK SV* const runtime_defns \
+ |NULLOK SV* const only_utf8_locale_list
+ES |void |output_posix_warnings \
+ |NN RExC_state_t *pRExC_state \
+ |NN AV* posix_warnings
+EiT |Size_t |find_first_differing_byte_pos|NN const U8 * s1|NN const U8 * s2| const Size_t max
+ES |AV* |add_multi_match|NULLOK AV* multi_char_matches \
+ |NN SV* multi_string \
+ |const STRLEN cp_count
+ES |regnode_offset|regclass|NN RExC_state_t *pRExC_state \
+ |NN I32 *flagp|U32 depth|const bool stop_at_1 \
+ |bool allow_multi_fold \
+ |const bool silence_non_portable \
+ |const bool strict \
+ |bool optimizable \
+ |NULLOK SV** ret_invlist
+ES |SV * |parse_uniprop_string|NN const char * const name \
+ |Size_t name_len \
+ |const bool is_utf8 \
+ |const bool to_fold \
+ |const bool runtime \
+ |const bool deferrable \
+ |NULLOK AV ** strings \
+ |NN bool * user_defined_ptr \
+ |NN SV * msg \
+ |const STRLEN level
+ES |SV * |handle_user_defined_property|NN const char * name \
+ |const STRLEN name_len \
+ |const bool is_utf8 \
+ |const bool to_fold \
+ |const bool runtime \
+ |const bool deferrable \
+ |NN SV* contents \
+ |NN bool *user_defined_ptr \
+ |NN SV * msg \
+ |const STRLEN level
+ERS |REGEXP*|compile_wildcard|NN const char * subpattern|const STRLEN len\
+ |const bool ignore_case
+ES |I32 |execute_wildcard|NN REGEXP * const prog|NN char* stringarg \
+ |NN char* strend|NN char* strbeg \
+ |SSize_t minend |NN SV* screamer|U32 nosave
+ES |bool |handle_names_wildcard \
+ |NN const char * wname \
+ |const STRLEN wname_len \
+ |NN SV ** prop_definition \
+ |NN AV ** strings
+ES |void|add_above_Latin1_folds|NN RExC_state_t *pRExC_state|const U8 cp \
+ |NN SV** invlist
+ES |regnode_offset|handle_named_backref|NN RExC_state_t *pRExC_state \
+ |NN I32 *flagp \
+ |NN char * parse_start \
+ |char ch
+ESTR |unsigned int|regex_set_precedence|const U8 my_operator
+ES |regnode_offset|handle_regex_sets|NN RExC_state_t *pRExC_state \
+ |NULLOK SV ** return_invlist \
+ |NN I32 *flagp|U32 depth \
+ |NN char * const oregcomp_parse
+ES |void |set_regex_pv |NN RExC_state_t *pRExC_state|NN REGEXP *Rx
+# if defined(DEBUGGING) && defined(ENABLE_REGEX_SETS_DEBUGGING)
+ES |void |dump_regex_sets_structures \
+ |NN RExC_state_t *pRExC_state \
+ |NN AV * stack \
+ |const IV fence|NN AV * fence_stack
+# endif
+ES |void|parse_lparen_question_flags|NN RExC_state_t *pRExC_state
+ES |regnode_offset|reg_node|NN RExC_state_t *pRExC_state|U8 op
+ES |regnode_offset|regpiece|NN RExC_state_t *pRExC_state \
+ |NN I32 *flagp|U32 depth
+ES |bool |grok_bslash_N |NN RExC_state_t *pRExC_state \
+ |NULLOK regnode_offset* nodep \
+ |NULLOK UV *code_point_p \
+ |NULLOK int* cp_count \
+ |NN I32 *flagp \
+ |const bool strict \
+ |const U32 depth
+ES |void |reginsert |NN RExC_state_t *pRExC_state \
+ |const U8 op \
+ |const regnode_offset operand \
+ |const U32 depth
+ESR |bool |regtail |NN RExC_state_t * pRExC_state \
+ |NN const regnode_offset p \
+ |NN const regnode_offset val \
+ |const U32 depth
+ES |SV * |reg_scan_name |NN RExC_state_t *pRExC_state \
+ |U32 flags
+ES |U32 |join_exact |NN RExC_state_t *pRExC_state \
+ |NN regnode *scan|NN UV *min_subtract \
+ |NN bool *unfolded_multi_char \
+ |U32 flags|NULLOK regnode *val|U32 depth
+EST |U8 |compute_EXACTish|NN RExC_state_t *pRExC_state
+ES |void |nextchar |NN RExC_state_t *pRExC_state
+ES |void |skip_to_be_ignored_text|NN RExC_state_t *pRExC_state \
+ |NN char ** p \
+ |const bool force_to_xmod
+EiT |char * |reg_skipcomment|NN RExC_state_t *pRExC_state|NN char * p
+ES |void |scan_commit |NN const RExC_state_t *pRExC_state \
+ |NN struct scan_data_t *data \
+ |NN SSize_t *minlenp \
+ |int is_inf
+ES |void |populate_ANYOF_from_invlist|NN regnode *node|NN SV** invlist_ptr
+ES |void |ssc_anything |NN regnode_ssc *ssc
+ESRT |int |ssc_is_anything|NN const regnode_ssc *ssc
+ES |void |ssc_init |NN const RExC_state_t *pRExC_state \
+ |NN regnode_ssc *ssc
+ESRT |int |ssc_is_cp_posixl_init|NN const RExC_state_t *pRExC_state \
+ |NN const regnode_ssc *ssc
+ES |void |ssc_and |NN const RExC_state_t *pRExC_state \
+ |NN regnode_ssc *ssc \
+ |NN const regnode_charclass *and_with
+ES |void |ssc_or |NN const RExC_state_t *pRExC_state \
+ |NN regnode_ssc *ssc \
+ |NN const regnode_charclass *or_with
+ES |SV* |get_ANYOF_cp_list_for_ssc \
+ |NN const RExC_state_t *pRExC_state \
+ |NN const regnode_charclass* const node
+ES |void |ssc_intersection|NN regnode_ssc *ssc \
+ |NN SV* const invlist|const bool invert_2nd
+ES |void |ssc_union |NN regnode_ssc *ssc \
+ |NN SV* const invlist|const bool invert_2nd
+ES |void |ssc_add_range |NN regnode_ssc *ssc \
+ |UV const start|UV const end
+ES |void |ssc_cp_and |NN regnode_ssc *ssc \
+ |UV const cp
+EST |void |ssc_clear_locale|NN regnode_ssc *ssc
+ETS |bool |is_ssc_worth_it|NN const RExC_state_t * pRExC_state \
+ |NN const regnode_ssc * ssc
+ES |void |ssc_finalize |NN RExC_state_t *pRExC_state \
+ |NN regnode_ssc *ssc
+ES |SSize_t|study_chunk |NN RExC_state_t *pRExC_state \
+ |NN regnode **scanp|NN SSize_t *minlenp \
+ |NN SSize_t *deltap|NN regnode *last \
+ |NULLOK struct scan_data_t *data \
+ |I32 stopparen|U32 recursed_depth \
+ |NULLOK regnode_ssc *and_withp \
+ |U32 flags|U32 depth|bool was_mutate_ok
+ES |void |rck_elide_nothing|NN regnode *node
+ESR |SV * |get_ANYOFM_contents|NN const regnode * n
+ESRT |U32 |add_data |NN RExC_state_t* const pRExC_state \
+ |NN const char* const s|const U32 n
+frS |void |re_croak |bool utf8|NN const char* pat|...
+ES |int |handle_possible_posix \
+ |NN RExC_state_t *pRExC_state \
+ |NN const char* const s \
+ |NULLOK char ** updated_parse_ptr \
+ |NULLOK AV** posix_warnings \
+ |const bool check_only
+ES |I32 |make_trie |NN RExC_state_t *pRExC_state \
+ |NN regnode *startbranch|NN regnode *first \
+ |NN regnode *last|NN regnode *tail \
+ |U32 word_count|U32 flags|U32 depth
+ES |regnode *|construct_ahocorasick_from_trie|NN RExC_state_t *pRExC_state \
+ |NN regnode *source|U32 depth
+ETSR |int |edit_distance |NN const UV *src \
+ |NN const UV *tgt \
+ |const STRLEN x \
+ |const STRLEN y \
+ |const SSize_t maxDistance
+# ifdef DEBUGGING
+EFp |int |re_indentf |NN const char *fmt|U32 depth|...
+ES |void |regdump_intflags|NULLOK const char *lead| const U32 flags
+ES |void |regdump_extflags|NULLOK const char *lead| const U32 flags
+ES |const regnode*|dumpuntil|NN const regexp *r|NN const regnode *start \
+ |NN const regnode *node \
+ |NULLOK const regnode *last \
+ |NULLOK const regnode *plast \
+ |NN SV* sv|I32 indent|U32 depth
+ES |void |put_code_point |NN SV* sv|UV c
+ES |bool |put_charclass_bitmap_innards|NN SV* sv \
+ |NULLOK char* bitmap \
+ |NULLOK SV* nonbitmap_invlist \
+ |NULLOK SV* only_utf8_locale_invlist\
+ |NULLOK const regnode * const node \
+ |const U8 flags \
+ |const bool force_as_is_display
+ES |SV* |put_charclass_bitmap_innards_common \
+ |NN SV* invlist \
+ |NULLOK SV* posixes \
+ |NULLOK SV* only_utf8 \
+ |NULLOK SV* not_utf8 \
+ |NULLOK SV* only_utf8_locale \
+ |const bool invert
+ES |void |put_charclass_bitmap_innards_invlist \
+ |NN SV *sv \
+ |NN SV* invlist
+ES |void |put_range |NN SV* sv|UV start|const UV end \
+ |const bool allow_literals
+ES |void |dump_trie |NN const struct _reg_trie_data *trie\
+ |NULLOK HV* widecharmap|NN AV *revcharmap\
+ |U32 depth
+ES |void |dump_trie_interim_list|NN const struct _reg_trie_data *trie\
+ |NULLOK HV* widecharmap|NN AV *revcharmap\
+ |U32 next_alloc|U32 depth
+ES |void |dump_trie_interim_table|NN const struct _reg_trie_data *trie\
+ |NULLOK HV* widecharmap|NN AV *revcharmap\
+ |U32 next_alloc|U32 depth
+ESR |bool |regtail_study |NN RExC_state_t *pRExC_state \
+ |NN regnode_offset p|NN const regnode_offset val|U32 depth
+# endif
+# ifndef PERL_EXT_RE_BUILD
+EiRT |UV* |_invlist_array_init |NN SV* const invlist|const bool will_have_0
+EiRT |UV |invlist_max |NN SV* const invlist
+EiRT |IV* |get_invlist_previous_index_addr|NN SV* invlist
+EiT |void |invlist_set_previous_index|NN SV* const invlist|const IV index
+EiRT |IV |invlist_previous_index|NN SV* const invlist
+EiT |void |invlist_trim |NN SV* invlist
+Ei |void |invlist_clear |NN SV* invlist
+ES |void |_append_range_to_invlist |NN SV* const invlist|const UV start|const UV end
+ES |void |invlist_replace_list_destroys_src|NN SV *dest|NN SV *src
+S |void |initialize_invlist_guts|NN SV* invlist|const Size_t initial_size
+# endif
#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C)
-EXmM |void |_invlist_intersection |NN SV* const a|NN SV* const b|NN SV** i
-EXpM |void |_invlist_intersection_maybe_complement_2nd \
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DOOP_C) || defined(PERL_IN_OP_C)
+EiR |SV* |add_cp_to_invlist |NULLOK SV* invlist|const UV cp
+Ei |void |invlist_extend |NN SV* const invlist|const UV len
+Ei |void |invlist_set_len|NN SV* const invlist|const UV len|const bool offset
+EiRT |UV |invlist_highest|NN SV* const invlist
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DOOP_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_UTF8_C)
+m |void |_invlist_intersection |NN SV* const a|NN SV* const b|NN SV** i
+EXp |void |_invlist_intersection_maybe_complement_2nd \
|NULLOK SV* const a|NN SV* const b \
|const bool complement_b|NN SV** i
-EXmM |void |_invlist_union |NULLOK SV* const a|NN SV* const b|NN SV** output
-EXpM |void |_invlist_union_maybe_complement_2nd \
+Cm |void |_invlist_union |NULLOK SV* const a|NN SV* const b|NN SV** output
+EXp |void |_invlist_union_maybe_complement_2nd \
|NULLOK SV* const a|NN SV* const b \
|const bool complement_b|NN SV** output
-EXmM |void |_invlist_subtract|NN SV* const a|NN SV* const b|NN SV** result
-EXpM |void |_invlist_invert|NN SV* const invlist
-EXMpR |SV* |_new_invlist |IV initial_size
-EXMpR |SV* |_add_range_to_invlist |NULLOK SV* invlist|UV start|UV end
-EXMpR |SV* |_setup_canned_invlist|const STRLEN size|const UV element0|NN UV** other_elements_ptr
+m |void |_invlist_subtract|NN SV* const a|NN SV* const b|NN SV** result
+EXp |void |_invlist_invert|NN SV* const invlist
+EXpR |SV* |_new_invlist |IV initial_size
+EXpR |SV* |_add_range_to_invlist |NULLOK SV* invlist|UV start|UV end
+EXpR |SV* |_setup_canned_invlist|const STRLEN size|const UV element0|NN UV** other_elements_ptr
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DQUOTE_C) || defined(PERL_IN_TOKE_C)
+EpRX |bool |grok_bslash_x |NN char** s \
+ |NN const char* const send \
+ |NN UV* uv \
+ |NN const char** message \
+ |NULLOK U32 * packed_warn \
+ |const bool strict \
+ |const bool allow_UV_MAX \
+ |const bool utf8
+EpRX |bool |grok_bslash_c |const char source \
+ |NN U8 * result \
+ |NN const char** message \
+ |NULLOK U32 * packed_warn
+EpRX |bool |grok_bslash_o |NN char** s \
+ |NN const char* const send \
+ |NN UV* uv \
+ |NN const char** message \
+ |NULLOK U32 * packed_warn \
+ |const bool strict \
+ |const bool allow_UV_MAX \
+ |const bool utf8
+EpRX |const char *|form_alien_digit_msg|const U8 which \
+ |const STRLEN valids_len \
+ |NN const char * const first_bad\
+ |NN const char * const send \
+ |const bool UTF \
+ |const bool braced
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DQUOTE_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C)
+EpRX |const char *|form_cp_too_large_msg|const U8 which \
+ |NULLOK const char * string \
+ |const Size_t len \
+ |const UV cp
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C) || defined(PERL_IN_OP_C)
+EXp |void |_invlist_dump |NN PerlIO *file|I32 level \
+ |NN const char* const indent \
+ |NN SV* const invlist
#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_SV_C)
-EMpX |SV* |invlist_clone |NN SV* const invlist|NULLOK SV* newlist
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C)
+EiRT |STRLEN*|get_invlist_iter_addr |NN SV* invlist
+EiT |void |invlist_iterinit|NN SV* invlist
+EiRT |bool |invlist_iternext|NN SV* invlist|NN UV* start|NN UV* end
+EiT |void |invlist_iterfinish|NN SV* invlist
#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
-EiMRn |UV* |invlist_array |NN SV* const invlist
-EiMRn |bool |is_invlist |NULLOK SV* const invlist
-EiMRn |bool* |get_invlist_offset_addr|NN SV* invlist
-EiMRn |UV |_invlist_len |NN SV* const invlist
-EMiRn |bool |_invlist_contains_cp|NN SV* const invlist|const UV cp
-EXpMRn |SSize_t|_invlist_search |NN SV* const invlist|const UV cp
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PERL_C) || defined(PERL_IN_UTF8_C)
+EXpR |SV* |_new_invlist_C_array|NN const UV* const list
+EXp |bool |_invlistEQ |NN SV* const a|NN SV* const b|const bool complement_b
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UNIVERSAL_C)
+EiT |const char *|get_regex_charset_name|const U32 flags|NN STRLEN* const lenp
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) \
+ || defined(PERL_IN_PP_C) || defined(PERL_IN_OP_C) \
+ || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C) \
+ || defined(PERL_IN_DOOP_C)
+EiRT |UV* |invlist_array |NN SV* const invlist
+EiRT |bool |is_invlist |NULLOK SV* const invlist
+EiRT |bool* |get_invlist_offset_addr|NN SV* invlist
+EiRT |UV |_invlist_len |NN SV* const invlist
+EiRT |bool |_invlist_contains_cp|NN SV* const invlist|const UV cp
+EXpRT |SSize_t|_invlist_search |NN SV* const invlist|const UV cp
#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-EXpM |SV* |_get_regclass_nonbitmap_data \
+# ifndef PERL_EXT_RE_BUILD
+Ep |SV* |get_regclass_nonbitmap_data \
+ |NULLOK const regexp *prog \
+ |NN const struct regnode *node \
+ |bool doinit \
+ |NULLOK SV **listsvp \
+ |NULLOK SV **lonly_utf8_locale \
+ |NULLOK SV **output_invlist
+# else
+Ep |SV* |get_re_gclass_nonbitmap_data \
|NULLOK const regexp *prog \
|NN const struct regnode *node \
|bool doinit \
@@ -1758,73 +2224,169 @@ EXpM |SV* |_get_regclass_nonbitmap_data \
|NULLOK SV **lonly_utf8_locale \
|NULLOK SV **output_invlist
#endif
-#if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C)
-EXMp |void |_invlist_dump |NN PerlIO *file|I32 level \
- |NN const char* const indent \
- |NN SV* const invlist
+Ep |void |regprop |NULLOK const regexp *prog|NN SV* sv|NN const regnode* o|NULLOK const regmatch_info *reginfo \
+ |NULLOK const RExC_state_t *pRExC_state
+Efp |int |re_printf |NN const char *fmt|...
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C)
+ERp |bool |is_grapheme |NN const U8 * strbeg|NN const U8 * s|NN const U8 *strend|const UV cp
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
+EXTp |UV |_to_fold_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const unsigned int flags
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_SV_C)
+EpX |SV* |invlist_clone |NN SV* const invlist|NULLOK SV* newlist
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
+EiRT |bool |regcurly |NN const char *s
+#endif
+#if defined(PERL_IN_REGEXEC_C)
+ERS |bool |isFOO_utf8_lc |const U8 classnum|NN const U8* character|NN const U8* e
+ERTS |U8 * |find_next_masked|NN U8 * s \
+ |NN const U8 * send \
+ |const U8 byte|const U8 mask
+ERTS |U8 *|find_span_end |NN U8* s|NN const U8 * send|const U8 span_byte
+ERTS |U8 *|find_span_end_mask|NN U8 * s|NN const U8 * send \
+ |const U8 span_byte|const U8 mask
+ERS |SSize_t|regmatch |NN regmatch_info *reginfo|NN char *startpos|NN regnode *prog
+WERS |I32 |regrepeat |NN regexp *prog|NN char **startposp \
+ |NN const regnode *p \
+ |NN char *loceol \
+ |NN regmatch_info *const reginfo \
+ |I32 max
+ERS |bool |regtry |NN regmatch_info *reginfo|NN char **startposp
+ERS |bool |reginclass |NULLOK regexp * const prog \
+ |NN const regnode * const n \
+ |NN const U8 * const p \
+ |NN const U8 * const p_end \
+ |bool const utf8_target
+WES |CHECKPOINT|regcppush |NN const regexp *rex|I32 parenfloor\
+ |U32 maxopenparen
+WES |void |regcppop |NN regexp *rex|NN U32 *maxopenparen_p
+WES |void |regcp_restore |NN regexp *rex|I32 ix|NN U32 *maxopenparen_p
+ERST |U8* |reghop3 |NN U8 *s|SSize_t off|NN const U8 *lim
+ERST |U8* |reghop4 |NN U8 *s|SSize_t off|NN const U8 *llim \
+ |NN const U8 *rlim
+ERST |U8* |reghopmaybe3 |NN U8 *s|SSize_t off|NN const U8 * const lim
+ERS |char* |find_byclass |NN regexp * prog|NN const regnode *c \
+ |NN char *s|NN const char *strend \
+ |NULLOK regmatch_info *reginfo
+ES |void |to_utf8_substr |NN regexp * prog
+ES |bool |to_byte_substr |NN regexp * prog
+ERST |I32 |reg_check_named_buff_matched |NN const regexp *rex \
+ |NN const regnode *scan
+ESR |bool |isGCB |const GCB_enum before \
+ |const GCB_enum after \
+ |NN const U8 * const strbeg \
+ |NN const U8 * const curpos \
+ |const bool utf8_target
+ESR |GCB_enum|backup_one_GCB|NN const U8 * const strbeg \
+ |NN U8 ** curpos \
+ |const bool utf8_target
+ESR |bool |isLB |LB_enum before \
+ |LB_enum after \
+ |NN const U8 * const strbeg \
+ |NN const U8 * const curpos \
+ |NN const U8 * const strend \
+ |const bool utf8_target
+ESR |LB_enum|advance_one_LB |NN U8 ** curpos \
+ |NN const U8 * const strend \
+ |const bool utf8_target
+ESR |LB_enum|backup_one_LB |NN const U8 * const strbeg \
+ |NN U8 ** curpos \
+ |const bool utf8_target
+ESR |bool |isSB |SB_enum before \
+ |SB_enum after \
+ |NN const U8 * const strbeg \
+ |NN const U8 * const curpos \
+ |NN const U8 * const strend \
+ |const bool utf8_target
+ESR |SB_enum|advance_one_SB |NN U8 ** curpos \
+ |NN const U8 * const strend \
+ |const bool utf8_target
+ESR |SB_enum|backup_one_SB |NN const U8 * const strbeg \
+ |NN U8 ** curpos \
+ |const bool utf8_target
+ESR |bool |isWB |WB_enum previous \
+ |WB_enum before \
+ |WB_enum after \
+ |NN const U8 * const strbeg \
+ |NN const U8 * const curpos \
+ |NN const U8 * const strend \
+ |const bool utf8_target
+ESR |WB_enum|advance_one_WB |NN U8 ** curpos \
+ |NN const U8 * const strend \
+ |const bool utf8_target \
+ |const bool skip_Extend_Format
+ESR |WB_enum|backup_one_WB |NN WB_enum * previous \
+ |NN const U8 * const strbeg \
+ |NN U8 ** curpos \
+ |const bool utf8_target
+EiT |I32 |foldEQ_latin1_s2_folded|NN const char* a|NN const char* b|I32 len
+# ifdef DEBUGGING
+ES |void |dump_exec_pos |NN const char *locinput|NN const regnode *scan|NN const char *loc_regeol\
+ |NN const char *loc_bostr|NN const char *loc_reg_starttry|const bool do_utf8|const U32 depth
+ES |void |debug_start_match|NN const REGEXP *prog|const bool do_utf8\
+ |NN const char *start|NN const char *end\
+ |NN const char *blurb
+
+EFp |int |re_exec_indentf|NN const char *fmt|U32 depth|...
+# endif
#endif
+#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
+EXRp |bool |isFOO_lc |const U8 classnum|const U8 character
+#endif
+
Ap |void |taint_env
Ap |void |taint_proper |NULLOK const char* f|NN const char *const s
-EpM |char * |_byte_dump_string \
+EXp |char * |_byte_dump_string \
|NN const U8 * const start \
|const STRLEN len \
|const bool format
+
#if defined(PERL_IN_UTF8_C)
-inR |int |does_utf8_overflow|NN const U8 * const s \
+iTR |int |does_utf8_overflow|NN const U8 * const s \
|NN const U8 * e \
|const bool consider_overlongs
-inR |int |is_utf8_overlong_given_start_byte_ok|NN const U8 * const s \
+iTR |int |is_utf8_overlong_given_start_byte_ok|NN const U8 * const s \
|const STRLEN len
-inR |int |isFF_OVERLONG |NN const U8 * const s|const STRLEN len
-sMR |char * |unexpected_non_continuation_text \
+iTR |int |isFF_OVERLONG |NN const U8 * const s|const STRLEN len
+SR |char * |unexpected_non_continuation_text \
|NN const U8 * const s \
|STRLEN print_len \
|const STRLEN non_cont_byte_pos \
|const STRLEN expect_len
-s |void |warn_on_first_deprecated_use \
+#if 0 /* Not currently used, but may be needed in the future */
+S |void |warn_on_first_deprecated_use \
|NN const char * const name \
|NN const char * const alternative \
|const bool use_locale \
|NN const char * const file \
|const unsigned line
-s |U32 |check_and_deprecate \
- |NN const U8 * p \
- |NN const U8 ** e \
- |const unsigned type \
- |const bool use_locale \
- |NN const char * const file \
- |const unsigned line
-s |UV |_to_utf8_case |const UV uv1 \
+#endif
+S |UV |_to_utf8_case |const UV uv1 \
|NULLOK const U8 *p \
|NN U8* ustrp \
|NN STRLEN *lenp \
|NN SV *invlist \
- |NN const int * const invmap \
- |NULLOK const unsigned int * const * const aux_tables \
+ |NN const I32 * const invmap \
+ |NULLOK const U32 * const * const aux_tables \
|NULLOK const U8 * const aux_table_lengths \
|NN const char * const normal
-s |UV |turkic_fc |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
-s |UV |turkic_lc |NN const U8 * const p0|NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
-s |UV |turkic_uc |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
-#endif
-ApbmdD |UV |to_utf8_lower |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp |UV |_to_utf8_lower_flags|NN const U8 *p|NULLOK const U8* e \
- |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags \
- |NN const char * const file|const int line
-ApbmdD |UV |to_utf8_upper |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp |UV |_to_utf8_upper_flags |NN const U8 *p|NULLOK const U8 *e \
- |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags \
- |NN const char * const file|const int line
-ApbmdD |UV |to_utf8_title |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp |UV |_to_utf8_title_flags |NN const U8 *p|NULLOK const U8* e \
- |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags \
- |NN const char * const file|const int line
-ApbmdD |UV |to_utf8_fold |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp
-AMp |UV |_to_utf8_fold_flags|NN const U8 *p|NULLOK const U8 *e \
- |NN U8* ustrp|NULLOK STRLEN *lenp|U8 flags \
- |NN const char * const file|const int line
+S |UV |turkic_fc |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+S |UV |turkic_lc |NN const U8 * const p0|NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+S |UV |turkic_uc |NN const U8 * const p |NN const U8 * const e|NN U8* ustrp|NN STRLEN *lenp
+#endif
+Cp |UV |_to_utf8_lower_flags|NN const U8 *p|NULLOK const U8* e \
+ |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
+Cp |UV |_to_utf8_upper_flags |NN const U8 *p|NULLOK const U8 *e \
+ |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
+Cp |UV |_to_utf8_title_flags |NN const U8 *p|NULLOK const U8* e \
+ |NN U8* ustrp|NULLOK STRLEN *lenp|bool flags
+Cp |UV |_to_utf8_fold_flags|NN const U8 *p|NULLOK const U8 *e \
+ |NN U8* ustrp|NULLOK STRLEN *lenp|U8 flags
#if defined(PERL_IN_MG_C) || defined(PERL_IN_PP_C)
-pn |bool |translate_substr_offsets|STRLEN curlen|IV pos1_iv \
+pT |bool |translate_substr_offsets|STRLEN curlen|IV pos1_iv \
|bool pos1_is_uv|IV len_iv \
|bool len_is_uv|NN STRLEN *posp \
|NN STRLEN *lenp
@@ -1832,7 +2394,7 @@ pn |bool |translate_substr_offsets|STRLEN curlen|IV pos1_iv \
#if defined(UNLINK_ALL_VERSIONS)
Ap |I32 |unlnk |NN const char* f
#endif
-Abpd |SSize_t|unpack_str |NN const char *pat|NN const char *patend|NN const char *s \
+AbpdD |SSize_t|unpack_str |NN const char *pat|NN const char *patend|NN const char *s \
|NULLOK const char *strbeg|NN const char *strend|NULLOK char **new_s \
|I32 ocnt|U32 flags
Apd |SSize_t|unpackstring |NN const char *pat|NN const char *patend|NN const char *s \
@@ -1842,70 +2404,71 @@ Ap |void |unsharepvn |NULLOK const char* sv|I32 len|U32 hash
p |void |unshare_hek |NULLOK HEK* hek
: Used in perly.y
p |void |utilize |int aver|I32 floor|NULLOK OP* version|NN OP* idop|NULLOK OP* arg
-ApM |void |_force_out_malformed_utf8_message \
+Cp |void |_force_out_malformed_utf8_message \
|NN const U8 *const p|NN const U8 * const e|const U32 flags \
|const bool die_here
-EXp |U8* |utf16_to_utf8 |NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
-EXp |U8* |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen
+EXp |U8* |utf16_to_utf8 |NN U8* p|NN U8 *d|Size_t bytelen|NN Size_t *newlen
+EXp |U8* |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|Size_t bytelen|NN Size_t *newlen
AdpR |STRLEN |utf8_length |NN const U8* s|NN const U8 *e
AipdR |IV |utf8_distance |NN const U8 *a|NN const U8 *b
-AipdRn |U8* |utf8_hop |NN const U8 *s|SSize_t off
-AipdRn |U8* |utf8_hop_back|NN const U8 *s|SSize_t off|NN const U8 *start
-AipdRn |U8* |utf8_hop_forward|NN const U8 *s|SSize_t off|NN const U8 *end
-AipdRn |U8* |utf8_hop_safe |NN const U8 *s|SSize_t off|NN const U8 *start|NN const U8 *end
-ApMd |U8* |utf8_to_bytes |NN U8 *s|NN STRLEN *lenp
+AipdRT |U8* |utf8_hop |NN const U8 *s|SSize_t off
+AipdRT |U8* |utf8_hop_back|NN const U8 *s|SSize_t off|NN const U8 *start
+AipdRT |U8* |utf8_hop_forward|NN const U8 *s|SSize_t off|NN const U8 *end
+AipdRT |U8* |utf8_hop_safe |NN const U8 *s|SSize_t off|NN const U8 *start|NN const U8 *end
+Apxd |U8* |utf8_to_bytes |NN U8 *s|NN STRLEN *lenp
Apd |int |bytes_cmp_utf8 |NN const U8 *b|STRLEN blen|NN const U8 *u \
|STRLEN ulen
-AModp |U8* |bytes_from_utf8|NN const U8 *s|NN STRLEN *lenp|NN bool *is_utf8p
-AMnp |U8* |bytes_from_utf8_loc|NN const U8 *s \
+AMxdp |U8* |bytes_from_utf8|NN const U8 *s|NN STRLEN *lenp|NN bool *is_utf8p
+AxTp |U8* |bytes_from_utf8_loc|NN const U8 *s \
|NN STRLEN *lenp \
|NN bool *is_utf8p \
|NULLOK const U8 ** first_unconverted
-ApMd |U8* |bytes_to_utf8 |NN const U8 *s|NN STRLEN *lenp
-ApdD |UV |utf8_to_uvchr |NN const U8 *s|NULLOK STRLEN *retlen
-AbpdD |UV |utf8_to_uvuni |NN const U8 *s|NULLOK STRLEN *retlen
-AbpMD |UV |valid_utf8_to_uvuni |NN const U8 *s|NULLOK STRLEN *retlen
-Aopd |UV |utf8_to_uvchr_buf |NN const U8 *s|NN const U8 *send|NULLOK STRLEN *retlen
-ApdD |UV |utf8_to_uvuni_buf |NN const U8 *s|NN const U8 *send|NULLOK STRLEN *retlen
-pM |bool |check_utf8_print |NN const U8 *s|const STRLEN len
-
-Adnop |UV |utf8n_to_uvchr |NN const U8 *s \
+Apxd |U8* |bytes_to_utf8 |NN const U8 *s|NN STRLEN *lenp
+ApdDb |UV |utf8_to_uvchr |NN const U8 *s|NULLOK STRLEN *retlen
+CbpdD |UV |utf8_to_uvuni |NN const U8 *s|NULLOK STRLEN *retlen
+CbpD |UV |valid_utf8_to_uvuni |NN const U8 *s|NULLOK STRLEN *retlen
+AMpd |UV |utf8_to_uvchr_buf |NN const U8 *s|NN const U8 *send|NULLOK STRLEN *retlen
+Cip |UV |utf8_to_uvchr_buf_helper|NN const U8 *s|NN const U8 *send|NULLOK STRLEN *retlen
+CpdD |UV |utf8_to_uvuni_buf |NN const U8 *s|NN const U8 *send|NULLOK STRLEN *retlen
+p |bool |check_utf8_print |NN const U8 *s|const STRLEN len
+
+AdMTp |UV |utf8n_to_uvchr |NN const U8 *s \
|STRLEN curlen \
|NULLOK STRLEN *retlen \
|const U32 flags
-Adnop |UV |utf8n_to_uvchr_error|NN const U8 *s \
+AdMTp |UV |utf8n_to_uvchr_error|NN const U8 *s \
|STRLEN curlen \
|NULLOK STRLEN *retlen \
|const U32 flags \
|NULLOK U32 * errors
-AMndi |UV |utf8n_to_uvchr_msgs|NN const U8 *s \
+AxTdip |UV |utf8n_to_uvchr_msgs|NN const U8 *s \
|STRLEN curlen \
|NULLOK STRLEN *retlen \
|const U32 flags \
|NULLOK U32 * errors \
|NULLOK AV ** msgs
-AMnp |UV |_utf8n_to_uvchr_msgs_helper \
+CTp |UV |_utf8n_to_uvchr_msgs_helper \
|NN const U8 *s \
|STRLEN curlen \
|NULLOK STRLEN *retlen \
|const U32 flags \
|NULLOK U32 * errors \
|NULLOK AV ** msgs
-AipnR |UV |valid_utf8_to_uvchr |NN const U8 *s|NULLOK STRLEN *retlen
-Ap |UV |utf8n_to_uvuni|NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags
+CipTRd |UV |valid_utf8_to_uvchr |NN const U8 *s|NULLOK STRLEN *retlen
+CdbDp |UV |utf8n_to_uvuni|NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags
Adm |U8* |uvchr_to_utf8 |NN U8 *d|UV uv
-Ap |U8* |uvuni_to_utf8 |NN U8 *d|UV uv
+Cp |U8* |uvuni_to_utf8 |NN U8 *d|UV uv
Adm |U8* |uvchr_to_utf8_flags |NN U8 *d|UV uv|UV flags
-AdmM |U8* |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs
-Apod |U8* |uvoffuni_to_utf8_flags |NN U8 *d|UV uv|const UV flags
-ApM |U8* |uvoffuni_to_utf8_flags_msgs|NN U8 *d|UV uv|const UV flags|NULLOK HV** msgs
-Ap |U8* |uvuni_to_utf8_flags |NN U8 *d|UV uv|UV flags
+Admx |U8* |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs
+CMpd |U8* |uvoffuni_to_utf8_flags |NN U8 *d|UV uv|const UV flags
+Cp |U8* |uvoffuni_to_utf8_flags_msgs|NN U8 *d|UV uv|const UV flags|NULLOK HV** msgs
+CdpbD |U8* |uvuni_to_utf8_flags |NN U8 *d|UV uv|UV flags
Apd |char* |pv_uni_display |NN SV *dsv|NN const U8 *spv|STRLEN len|STRLEN pvlim|UV flags
ApdR |char* |sv_uni_display |NN SV *dsv|NN SV *ssv|STRLEN pvlim|UV flags
EXpR |Size_t |_inverse_folds |const UV cp \
- |NN unsigned int * first_folds_to \
- |NN const unsigned int ** remaining_folds_to
+ |NN U32 * first_folds_to \
+ |NN const U32 ** remaining_folds_to
: Used by Data::Alias
EXp |void |vivify_defelem |NN SV* sv
: Used in pp.c
@@ -1915,8 +2478,8 @@ p |I32 |wait4pid |Pid_t pid|NN int* statusp|int flags
: Used in locale.c and perl.c
p |U32 |parse_unicode_opts|NN const char **popt
Ap |U32 |seed
-Xpno |double |drand48_r |NN perl_drand48_t *random_state
-Xpno |void |drand48_init_r |NN perl_drand48_t *random_state|U32 seed
+XpTo |double |drand48_r |NN perl_drand48_t *random_state
+XpTo |void |drand48_init_r |NN perl_drand48_t *random_state|U32 seed
: Only used in perl.c
p |void |get_hash_seed |NN unsigned char * const seed_buffer
: Used in doio.c, pp_hot.c, pp_sys.c
@@ -1950,9 +2513,9 @@ Ap |I32 |whichsig_sv |NN SV* sigsv
Ap |I32 |whichsig_pv |NN const char* sig
Ap |I32 |whichsig_pvn |NN const char* sig|STRLEN len
: used to check for NULs in pathnames and other names
-AiR |bool |is_safe_syscall|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name
+AiRdp |bool |is_safe_syscall|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name
#ifdef PERL_CORE
-inR |bool |should_warn_nl|NN const char *pv
+iTR |bool |should_warn_nl|NN const char *pv
#endif
: Used in pp_ctl.c
p |void |write_to_stderr|NN SV* msv
@@ -1974,17 +2537,17 @@ p |void |parser_free_nexttoke_ops|NN yy_parser *parser \
|NN OPSLAB *slab
#endif
#if defined(PERL_IN_TOKE_C)
-s |int |yywarn |NN const char *const s|U32 flags
+S |int |yywarn |NN const char *const s|U32 flags
#endif
#if defined(MYMALLOC)
Ap |void |dump_mstats |NN const char* s
Ap |int |get_mstats |NN perl_mstats_t *buf|int buflen|int level
#endif
-Anpa |Malloc_t|safesysmalloc |MEM_SIZE nbytes
-Anpa |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
-AnpR |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
-Anp |Free_t |safesysfree |Malloc_t where
-Asrnx |void |croak_memory_wrap
+ATpa |Malloc_t|safesysmalloc |MEM_SIZE nbytes
+ATpa |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
+ATpR |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
+ATp |Free_t |safesysfree |Malloc_t where
+CrTp |void |croak_memory_wrap
#if defined(PERL_GLOBAL_STRUCT)
Ap |struct perl_vars *|GetVars
Ap |struct perl_vars*|init_global_struct
@@ -1996,31 +2559,31 @@ Afpd |void |sv_catpvf_mg |NN SV *const sv|NN const char *const pat|...
Apd |void |sv_vcatpvf_mg |NN SV *const sv|NN const char *const pat \
|NULLOK va_list *const args
Apd |void |sv_catpv_mg |NN SV *const sv|NULLOK const char *const ptr
-Apdbm |void |sv_catpvn_mg |NN SV *sv|NN const char *ptr|STRLEN len
-Apdbm |void |sv_catsv_mg |NN SV *dsv|NULLOK SV *ssv
+ApdbM |void |sv_catpvn_mg |NN SV *sv|NN const char *ptr|STRLEN len
+ApdbM |void |sv_catsv_mg |NN SV *dsv|NULLOK SV *ssv
Afpd |void |sv_setpvf_mg |NN SV *const sv|NN const char *const pat|...
Apd |void |sv_vsetpvf_mg |NN SV *const sv|NN const char *const pat \
|NULLOK va_list *const args
Apd |void |sv_setiv_mg |NN SV *const sv|const IV i
-Apdb |void |sv_setpviv_mg |NN SV *const sv|const IV iv
+ApdbD |void |sv_setpviv_mg |NN SV *const sv|const IV iv
Apd |void |sv_setuv_mg |NN SV *const sv|const UV u
Apd |void |sv_setnv_mg |NN SV *const sv|const NV num
Apd |void |sv_setpv_mg |NN SV *const sv|NULLOK const char *const ptr
Apd |void |sv_setpvn_mg |NN SV *const sv|NN const char *const ptr|const STRLEN len
Apd |void |sv_setsv_mg |NN SV *const dstr|NULLOK SV *const sstr
-Apdbm |void |sv_usepvn_mg |NN SV *sv|NULLOK char *ptr|STRLEN len
+ApdbM |void |sv_usepvn_mg |NN SV *sv|NULLOK char *ptr|STRLEN len
ApR |MGVTBL*|get_vtbl |int vtbl_id
Apd |char* |pv_display |NN SV *dsv|NN const char *pv|STRLEN cur|STRLEN len \
|STRLEN pvlim
Apd |char* |pv_escape |NULLOK SV *dsv|NN char const * const str\
|const STRLEN count|const STRLEN max\
|NULLOK STRLEN * const escaped\
- |const U32 flags
+ |const U32 flags
Apd |char* |pv_pretty |NN SV *dsv|NN char const * const str\
|const STRLEN count|const STRLEN max\
|NULLOK char const * const start_color\
|NULLOK char const * const end_color\
- |const U32 flags
+ |const U32 flags
Afp |void |dump_indent |I32 level|NN PerlIO *file|NN const char* pat|...
Ap |void |dump_vindent |I32 level|NN PerlIO *file|NN const char* pat \
|NULLOK va_list *args
@@ -2038,23 +2601,32 @@ Ap |void |do_sv_dump |I32 level|NN PerlIO *file|NULLOK SV *sv|I32 nest \
|I32 maxnest|bool dumpops|STRLEN pvlim
Ap |void |magic_dump |NULLOK const MAGIC *mg
Ap |void |reginitcolors
-ApdRmb |char* |sv_2pv_nolen |NN SV* sv
-ApdRmb |char* |sv_2pvutf8_nolen|NN SV* sv
-ApdRmb |char* |sv_2pvbyte_nolen|NN SV* sv
-ApmdbR |char* |sv_pv |NN SV *sv
-ApmdbR |char* |sv_pvutf8 |NN SV *sv
-ApmdbR |char* |sv_pvbyte |NN SV *sv
-Apmdb |STRLEN |sv_utf8_upgrade|NN SV *sv
+ApdRMb |char* |sv_2pv_nolen |NN SV* sv
+ApdRMb |char* |sv_2pvutf8_nolen|NN SV* sv
+ApdRMb |char* |sv_2pvbyte_nolen|NN SV* sv
+ApMdbR |char* |sv_pv |NN SV *sv
+ApMdbR |char* |sv_pvutf8 |NN SV *sv
+ApMdbR |char* |sv_pvbyte |NN SV *sv
+ApMdb |STRLEN |sv_utf8_upgrade|NN SV *sv
Amd |STRLEN |sv_utf8_upgrade_nomg|NN SV *sv
-Apd |bool |sv_utf8_downgrade|NN SV *const sv|const bool fail_ok
+ApdMb |bool |sv_utf8_downgrade|NN SV *const sv|const bool fail_ok
+Amd |bool |sv_utf8_downgrade_nomg|NN SV *const sv|const bool fail_ok
+Apd |bool |sv_utf8_downgrade_flags|NN SV *const sv|const bool fail_ok|const U32 flags
Apd |void |sv_utf8_encode |NN SV *const sv
Apd |bool |sv_utf8_decode |NN SV *const sv
-Apdmb |void |sv_force_normal|NN SV *sv
+ApdMb |void |sv_force_normal|NN SV *sv
Apd |void |sv_force_normal_flags|NN SV *const sv|const U32 flags
pX |SSize_t|tmps_grow_p |SSize_t ix
Apd |SV* |sv_rvweaken |NN SV *const sv
Apd |SV* |sv_rvunweaken |NN SV *const sv
-AnpMd |SV* |sv_get_backrefs|NN SV *const sv
+ATpxd |SV* |sv_get_backrefs|NN SV *const sv
+AiTMdp |SV * |SvREFCNT_inc |NULLOK SV *sv
+AiTMdp |SV * |SvREFCNT_inc_NN|NN SV *sv
+AiTMdp |void |SvREFCNT_inc_void|NULLOK SV *sv
+AiMdp |void |SvREFCNT_dec |NULLOK SV *sv
+AiMdp |void |SvREFCNT_dec_NN|NN SV *sv
+AiTp |void |SvAMAGIC_on |NN SV *sv
+AiTp |void |SvAMAGIC_off |NN SV *sv
: This is indirectly referenced by globals.c. This is somewhat annoying.
p |int |magic_killbackrefs|NN SV *sv|NN MAGIC *mg
Ap |OP* |newANONATTRSUB |I32 floor|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block
@@ -2081,9 +2653,9 @@ ApR |DIR* |dirp_dup |NULLOK DIR *const dp|NN CLONE_PARAMS *const param
ApR |GP* |gp_dup |NULLOK GP *const gp|NN CLONE_PARAMS *const param
ApR |MAGIC* |mg_dup |NULLOK MAGIC *mg|NN CLONE_PARAMS *const param
#if defined(PERL_IN_SV_C)
-s |SV ** |sv_dup_inc_multiple|NN SV *const *source|NN SV **dest \
+S |SV ** |sv_dup_inc_multiple|NN SV *const *source|NN SV **dest \
|SSize_t items|NN CLONE_PARAMS *const param
-sR |SV* |sv_dup_common |NN const SV *const sstr \
+SR |SV* |sv_dup_common |NN const SV *const sstr \
|NN CLONE_PARAMS *const param
#endif
ApR |SV* |sv_dup |NULLOK const SV *const sstr|NN CLONE_PARAMS *const param
@@ -2107,46 +2679,47 @@ Ap |void |sys_intern_dup |NN struct interp_intern* src|NN struct interp_intern*
# endif
#endif
-Amop |const XOP * |custom_op_xop |NN const OP *o
-AbpR |const char * |custom_op_name |NN const OP *o
-AbpR |const char * |custom_op_desc |NN const OP *o
+: The reason for the 'u' flag is that this passes "aTHX_ x" to its callee: not
+: a legal C parameter
+Admu |const XOP * |Perl_custom_op_xop |NN const OP *o
+AbpRdD |const char * |custom_op_name |NN const OP *o
+AbpRdD |const char * |custom_op_desc |NN const OP *o
pRX |XOPRETANY |custom_op_get_field |NN const OP *o|const xop_flags_enum field
-Aop |void |custom_op_register |NN Perl_ppaddr_t ppaddr \
+Adop |void |custom_op_register |NN Perl_ppaddr_t ppaddr \
|NN const XOP *xop
Adp |void |sv_nosharing |NULLOK SV *sv
-Adpbm |void |sv_nolocking |NULLOK SV *sv
+AdpbD |void |sv_nolocking |NULLOK SV *sv
Adp |bool |sv_destroyable |NULLOK SV *sv
-Adpb |void |sv_nounlocking |NULLOK SV *sv
+AdpbD |void |sv_nounlocking |NULLOK SV *sv
Adp |int |nothreadhook
p |void |init_constants
#if defined(PERL_IN_DOOP_C)
-sR |Size_t |do_trans_simple |NN SV * const sv
-sR |Size_t |do_trans_count |NN SV * const sv
-sR |Size_t |do_trans_complex |NN SV * const sv
-sR |Size_t |do_trans_simple_utf8 |NN SV * const sv
-sR |Size_t |do_trans_count_utf8 |NN SV * const sv
-sR |Size_t |do_trans_complex_utf8 |NN SV * const sv
+SR |Size_t |do_trans_simple |NN SV * const sv|NN const OPtrans_map * const tbl
+SR |Size_t |do_trans_count |NN SV * const sv|NN const OPtrans_map * const tbl
+SR |Size_t |do_trans_complex |NN SV * const sv|NN const OPtrans_map * const tbl
+SR |Size_t |do_trans_invmap |NN SV * const sv|NN AV * const map
+SR |Size_t |do_trans_count_invmap |NN SV * const sv|NN AV * const map
#endif
#if defined(PERL_IN_GV_C)
-s |void |gv_init_svtype |NN GV *gv|const svtype sv_type
-s |void |gv_magicalize_isa |NN GV *gv
-s |bool|parse_gv_stash_name|NN HV **stash|NN GV **gv \
+S |void |gv_init_svtype |NN GV *gv|const svtype sv_type
+S |void |gv_magicalize_isa |NN GV *gv
+S |bool|parse_gv_stash_name|NN HV **stash|NN GV **gv \
|NN const char **name|NN STRLEN *len \
|NN const char *nambeg|STRLEN full_len \
|const U32 is_utf8|const I32 add
-s |bool|find_default_stash|NN HV **stash|NN const char *name \
+S |bool|find_default_stash|NN HV **stash|NN const char *name \
|STRLEN len|const U32 is_utf8|const I32 add \
|const svtype sv_type
-s |bool|gv_magicalize|NN GV *gv|NN HV *stash|NN const char *name \
+S |bool|gv_magicalize|NN GV *gv|NN HV *stash|NN const char *name \
|STRLEN len \
|const svtype sv_type
-s |void|maybe_multimagic_gv|NN GV *gv|NN const char *name|const svtype sv_type
-s |bool|gv_is_in_main|NN const char *name|STRLEN len \
+S |void|maybe_multimagic_gv|NN GV *gv|NN const char *name|const svtype sv_type
+S |bool|gv_is_in_main|NN const char *name|STRLEN len \
|const U32 is_utf8
-s |void |require_tie_mod|NN GV *gv|NN const char varname \
+S |void |require_tie_mod|NN GV *gv|NN const char varname \
|NN const char * name|STRLEN len \
|const U32 flags
#endif
@@ -2156,526 +2729,223 @@ po |SV* |hfree_next_entry |NN HV *hv|NN STRLEN *indexp
#endif
#if defined(PERL_IN_HV_C)
-s |void |hsplit |NN HV *hv|STRLEN const oldsize|STRLEN newsize
-s |void |hv_free_entries|NN HV *hv
-s |SV* |hv_free_ent_ret|NN HV *hv|NN HE *entry
-sR |HE* |new_he
-sanR |HEK* |save_hek_flags |NN const char *str|I32 len|U32 hash|int flags
-sn |void |hv_magic_check |NN HV *hv|NN bool *needs_copy|NN bool *needs_store
-s |void |unshare_hek_or_pvn|NULLOK const HEK* hek|NULLOK const char* str|I32 len|U32 hash
-sR |HEK* |share_hek_flags|NN const char *str|STRLEN len|U32 hash|int flags
-rs |void |hv_notallowed |int flags|NN const char *key|I32 klen|NN const char *msg
-in |U32|ptr_hash|PTRV u
-s |struct xpvhv_aux*|hv_auxinit|NN HV *hv
-sn |struct xpvhv_aux*|hv_auxinit_internal|NN struct xpvhv_aux *iter
-sM |SV* |hv_delete_common|NULLOK HV *hv|NULLOK SV *keysv \
+S |void |hsplit |NN HV *hv|STRLEN const oldsize|STRLEN newsize
+S |void |hv_free_entries|NN HV *hv
+S |SV* |hv_free_ent_ret|NN HV *hv|NN HE *entry
+SR |HE* |new_he
+SaTR |HEK* |save_hek_flags |NN const char *str|I32 len|U32 hash|int flags
+ST |void |hv_magic_check |NN HV *hv|NN bool *needs_copy|NN bool *needs_store
+S |void |unshare_hek_or_pvn|NULLOK const HEK* hek|NULLOK const char* str|I32 len|U32 hash
+SR |HEK* |share_hek_flags|NN const char *str|STRLEN len|U32 hash|int flags
+rS |void |hv_notallowed |int flags|NN const char *key|I32 klen|NN const char *msg
+iT |U32|ptr_hash|PTRV u
+S |struct xpvhv_aux*|hv_auxinit|NN HV *hv
+ST |struct xpvhv_aux*|hv_auxinit_internal|NN struct xpvhv_aux *iter
+Sx |SV* |hv_delete_common|NULLOK HV *hv|NULLOK SV *keysv \
|NULLOK const char *key|STRLEN klen|int k_flags|I32 d_flags \
|U32 hash
-sM |void |clear_placeholders |NN HV *hv|U32 items
+Sx |void |clear_placeholders |NN HV *hv|U32 items
#endif
#if defined(PERL_IN_MG_C)
-s |void |save_magic_flags|I32 mgs_ix|NN SV *sv|U32 flags
-s |int |magic_methpack |NN SV *sv|NN const MAGIC *mg|NN SV *meth
-s |SV* |magic_methcall1|NN SV *sv|NN const MAGIC *mg \
+S |void |save_magic_flags|I32 mgs_ix|NN SV *sv|U32 flags
+S |int |magic_methpack |NN SV *sv|NN const MAGIC *mg|NN SV *meth
+S |SV* |magic_methcall1|NN SV *sv|NN const MAGIC *mg \
|NN SV *meth|U32 flags \
|int n|NULLOK SV *val
-s |void |restore_magic |NULLOK const void *p
-s |void |unwind_handler_stack|NULLOK const void *p
-s |void |fixup_errno_string|NN SV* sv
+S |void |restore_magic |NULLOK const void *p
+S |void |unwind_handler_stack|NULLOK const void *p
+S |void |fixup_errno_string|NN SV* sv
#endif
#if defined(PERL_IN_OP_C)
-sRn |bool |is_handle_constructor|NN const OP *o|I32 numargs
-sR |I32 |assignment_type|NULLOK const OP *o
-s |void |forget_pmop |NN PMOP *const o
-s |void |find_and_forget_pmops |NN OP *o
-s |void |cop_free |NN COP *cop
-s |OP* |modkids |NULLOK OP *o|I32 type
-s |OP* |scalarboolean |NN OP *o
-sR |OP* |search_const |NN OP *o
-sR |OP* |new_logop |I32 type|I32 flags|NN OP **firstp|NN OP **otherp
-s |void |simplify_sort |NN OP *o
-sRn |bool |scalar_mod_type|NULLOK const OP *o|I32 type
-s |OP * |my_kid |NULLOK OP *o|NULLOK OP *attrs|NN OP **imopsp
-s |OP * |dup_attrlist |NN OP *o
-s |void |apply_attrs |NN HV *stash|NN SV *target|NULLOK OP *attrs
-s |void |apply_attrs_my |NN HV *stash|NN OP *target|NULLOK OP *attrs|NN OP **imopsp
-s |void |bad_type_pv |I32 n|NN const char *t|NN const OP *o|NN const OP *kid
-s |void |bad_type_gv |I32 n|NN GV *gv|NN const OP *kid|NN const char *t
-s |void |no_bareword_allowed|NN OP *o
-sR |OP* |no_fh_allowed|NN OP *o
-sR |OP* |too_few_arguments_pv|NN OP *o|NN const char* name|U32 flags
-s |OP* |too_many_arguments_pv|NN OP *o|NN const char* name|U32 flags
-s |bool |looks_like_bool|NN const OP* o
-s |OP* |newGIVWHENOP |NULLOK OP* cond|NN OP *block \
+SRT |bool |is_handle_constructor|NN const OP *o|I32 numargs
+SR |I32 |assignment_type|NULLOK const OP *o
+S |void |forget_pmop |NN PMOP *const o
+S |void |find_and_forget_pmops |NN OP *o
+S |void |cop_free |NN COP *cop
+S |OP* |modkids |NULLOK OP *o|I32 type
+S |OP* |scalarboolean |NN OP *o
+SR |OP* |search_const |NN OP *o
+SR |OP* |new_logop |I32 type|I32 flags|NN OP **firstp|NN OP **otherp
+S |void |simplify_sort |NN OP *o
+SRT |bool |scalar_mod_type|NULLOK const OP *o|I32 type
+S |OP * |my_kid |NULLOK OP *o|NULLOK OP *attrs|NN OP **imopsp
+S |OP * |dup_attrlist |NN OP *o
+S |void |apply_attrs |NN HV *stash|NN SV *target|NULLOK OP *attrs
+S |void |apply_attrs_my |NN HV *stash|NN OP *target|NULLOK OP *attrs|NN OP **imopsp
+S |void |bad_type_pv |I32 n|NN const char *t|NN const OP *o|NN const OP *kid
+S |void |bad_type_gv |I32 n|NN GV *gv|NN const OP *kid|NN const char *t
+S |void |no_bareword_allowed|NN OP *o
+SR |OP* |no_fh_allowed|NN OP *o
+SR |OP* |too_few_arguments_pv|NN OP *o|NN const char* name|U32 flags
+S |OP* |too_many_arguments_pv|NN OP *o|NN const char* name|U32 flags
+S |bool |looks_like_bool|NN const OP* o
+S |OP* |newGIVWHENOP |NULLOK OP* cond|NN OP *block \
|I32 enter_opcode|I32 leave_opcode \
|PADOFFSET entertarg
-s |OP* |ref_array_or_hash|NULLOK OP* cond
-s |bool |process_special_blocks |I32 floor \
+S |OP* |ref_array_or_hash|NULLOK OP* cond
+S |bool |process_special_blocks |I32 floor \
|NN const char *const fullname\
|NN GV *const gv|NN CV *const cv
-s |void |clear_special_blocks |NN const char *const fullname\
+S |void |clear_special_blocks |NN const char *const fullname\
|NN GV *const gv|NN CV *const cv
#endif
XpR |void* |Slab_Alloc |size_t sz
Xp |void |Slab_Free |NN void *op
#if defined(PERL_DEBUG_READONLY_OPS)
# if defined(PERL_CORE)
-px |void |Slab_to_ro |NN OPSLAB *slab
-px |void |Slab_to_rw |NN OPSLAB *const slab
+pe |void |Slab_to_ro |NN OPSLAB *slab
+pe |void |Slab_to_rw |NN OPSLAB *const slab
# endif
: Used in OpREFCNT_inc() in sv.c
-poxM |OP * |op_refcnt_inc |NULLOK OP *o
+poex |OP * |op_refcnt_inc |NULLOK OP *o
: FIXME - can be static.
-poxM |PADOFFSET |op_refcnt_dec |NN OP *o
+poex |PADOFFSET |op_refcnt_dec |NN OP *o
#endif
#if defined(PERL_IN_PERL_C)
-s |void |find_beginning |NN SV* linestr_sv|NN PerlIO *rsfp
-s |void |forbid_setid |const char flag|const bool suidscript
-s |void |incpush |NN const char *const dir|STRLEN len \
+S |void |find_beginning |NN SV* linestr_sv|NN PerlIO *rsfp
+S |void |forbid_setid |const char flag|const bool suidscript
+S |void |incpush |NN const char *const dir|STRLEN len \
|U32 flags
-s |SV* |mayberelocate |NN const char *const dir|STRLEN len \
+S |SV* |mayberelocate |NN const char *const dir|STRLEN len \
|U32 flags
-s |void |incpush_use_sep|NN const char *p|STRLEN len|U32 flags
-s |void |init_interp
-s |void |init_ids
-s |void |init_main_stash
-s |void |init_perllib
-s |void |init_postdump_symbols|int argc|NN char **argv|NULLOK char **env
-s |void |init_predump_symbols
-rs |void |my_exit_jump
-s |void |nuke_stacks
-s |PerlIO *|open_script |NN const char *scriptname|bool dosearch \
+S |void |incpush_use_sep|NN const char *p|STRLEN len|U32 flags
+S |void |init_interp
+S |void |init_ids
+S |void |init_main_stash
+S |void |init_perllib
+S |void |init_postdump_symbols|int argc|NN char **argv|NULLOK char **env
+S |void |init_predump_symbols
+rS |void |my_exit_jump
+S |void |nuke_stacks
+S |PerlIO *|open_script |NN const char *scriptname|bool dosearch \
|NN bool *suidscript
-sr |void |usage
+Sr |void |usage
#ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
-so |void |validate_suid |NN PerlIO *rsfp
+So |void |validate_suid |NN PerlIO *rsfp
#endif
-sr |void |minus_v
+Sr |void |minus_v
-s |void* |parse_body |NULLOK char **env|XSINIT_t xsinit
-rs |void |run_body |I32 oldscope
+S |void* |parse_body |NULLOK char **env|XSINIT_t xsinit
+rS |void |run_body |I32 oldscope
# ifndef PERL_IS_MINIPERL
-s |SV * |incpush_if_exists|NN AV *const av|NN SV *dir|NN SV *const stem
+S |SV * |incpush_if_exists|NN AV *const av|NN SV *dir|NN SV *const stem
# endif
#endif
#if defined(PERL_IN_PP_C)
-s |size_t |do_chomp |NN SV *retval|NN SV *sv|bool chomping
-s |OP* |do_delete_local
-sR |SV* |refto |NN SV* sv
+S |size_t |do_chomp |NN SV *retval|NN SV *sv|bool chomping
+S |OP* |do_delete_local
+SR |SV* |refto |NN SV* sv
#endif
#if defined(PERL_IN_PP_C) || defined(PERL_IN_PP_HOT_C)
: Used in pp_hot.c
-pRxo |GV* |softref2xv |NN SV *const sv|NN const char *const what \
+pReo |GV* |softref2xv |NN SV *const sv|NN const char *const what \
|const svtype type|NN SV ***spp
+iTR |bool |lossless_NV_to_IV|const NV nv|NN IV * ivp
+#endif
+#if defined(PERL_IN_PP_HOT_C)
+IR |bool |should_we_output_Debug_r|NN regexp * prog
#endif
#if defined(PERL_IN_PP_PACK_C)
-s |SSize_t|unpack_rec |NN struct tempsym* symptr|NN const char *s \
+S |SSize_t|unpack_rec |NN struct tempsym* symptr|NN const char *s \
|NN const char *strbeg|NN const char *strend|NULLOK const char **new_s
-s |SV ** |pack_rec |NN SV *cat|NN struct tempsym* symptr|NN SV **beglist|NN SV **endlist
-s |SV* |mul128 |NN SV *sv|U8 m
-s |SSize_t|measure_struct |NN struct tempsym* symptr
-s |bool |next_symbol |NN struct tempsym* symptr
-sR |SV* |is_an_int |NN const char *s|STRLEN l
-s |int |div128 |NN SV *pnum|NN bool *done
-s |const char *|group_end |NN const char *patptr|NN const char *patend \
+S |SV ** |pack_rec |NN SV *cat|NN struct tempsym* symptr|NN SV **beglist|NN SV **endlist
+S |SV* |mul128 |NN SV *sv|U8 m
+S |SSize_t|measure_struct |NN struct tempsym* symptr
+S |bool |next_symbol |NN struct tempsym* symptr
+SR |SV* |is_an_int |NN const char *s|STRLEN l
+S |int |div128 |NN SV *pnum|NN bool *done
+S |const char *|group_end |NN const char *patptr|NN const char *patend \
|char ender
-sR |const char *|get_num |NN const char *patptr|NN SSize_t *lenptr
-ns |bool |need_utf8 |NN const char *pat|NN const char *patend
-ns |char |first_symbol |NN const char *pat|NN const char *patend
-sR |char * |sv_exp_grow |NN SV *sv|STRLEN needed
-snR |char * |my_bytes_to_utf8|NN const U8 *start|STRLEN len|NN char *dest \
- |const bool needs_swap
+SR |const char *|get_num |NN const char *patptr|NN SSize_t *lenptr
+TS |bool |need_utf8 |NN const char *pat|NN const char *patend
+TS |char |first_symbol |NN const char *pat|NN const char *patend
+SR |char * |sv_exp_grow |NN SV *sv|STRLEN needed
+STR |char * |my_bytes_to_utf8|NN const U8 *start|STRLEN len|NN char *dest \
+ |const bool needs_swap
#endif
#if defined(PERL_IN_PP_CTL_C)
-sR |OP* |docatch |Perl_ppaddr_t firstpp
-sR |OP* |dofindlabel |NN OP *o|NN const char *label|STRLEN len \
+SdR |OP* |docatch |Perl_ppaddr_t firstpp
+SR |OP* |dofindlabel |NN OP *o|NN const char *label|STRLEN len \
|U32 flags|NN OP **opstack|NN OP **oplimit
-s |MAGIC *|doparseform |NN SV *sv
-snR |bool |num_overflow |NV value|I32 fldsize|I32 frcsize
-sR |I32 |dopoptoeval |I32 startingblock
-sR |I32 |dopoptogivenfor|I32 startingblock
-sR |I32 |dopoptolabel |NN const char *label|STRLEN len|U32 flags
-sR |I32 |dopoptoloop |I32 startingblock
-sR |I32 |dopoptosub_at |NN const PERL_CONTEXT* cxstk|I32 startingblock
-sR |I32 |dopoptowhen |I32 startingblock
-s |void |save_lines |NULLOK AV *array|NN SV *sv
-s |bool |doeval_compile |U8 gimme \
+S |MAGIC *|doparseform |NN SV *sv
+STR |bool |num_overflow |NV value|I32 fldsize|I32 frcsize
+SR |I32 |dopoptoeval |I32 startingblock
+SR |I32 |dopoptogivenfor|I32 startingblock
+SR |I32 |dopoptolabel |NN const char *label|STRLEN len|U32 flags
+SR |I32 |dopoptoloop |I32 startingblock
+SR |I32 |dopoptosub_at |NN const PERL_CONTEXT* cxstk|I32 startingblock
+SR |I32 |dopoptowhen |I32 startingblock
+S |void |save_lines |NULLOK AV *array|NN SV *sv
+S |bool |doeval_compile |U8 gimme \
|NULLOK CV* outside|U32 seq|NULLOK HV* hh
-sR |PerlIO *|check_type_and_open|NN SV *name
+SR |PerlIO *|check_type_and_open|NN SV *name
#ifndef PERL_DISABLE_PMC
-sR |PerlIO *|doopen_pm |NN SV *name
-#endif
-iRn |bool |path_is_searchable|NN const char *name
-sR |I32 |run_user_filter|int idx|NN SV *buf_sv|int maxlen
-sR |PMOP* |make_matcher |NN REGEXP* re
-sR |bool |matcher_matches_sv|NN PMOP* matcher|NN SV* sv
-s |void |destroy_matcher|NN PMOP* matcher
-s |OP* |do_smartmatch |NULLOK HV* seen_this \
+SR |PerlIO *|doopen_pm |NN SV *name
+#endif
+iRT |bool |path_is_searchable|NN const char *name
+SR |I32 |run_user_filter|int idx|NN SV *buf_sv|int maxlen
+SR |PMOP* |make_matcher |NN REGEXP* re
+SR |bool |matcher_matches_sv|NN PMOP* matcher|NN SV* sv
+S |void |destroy_matcher|NN PMOP* matcher
+S |OP* |do_smartmatch |NULLOK HV* seen_this \
|NULLOK HV* seen_other|const bool copied
#endif
#if defined(PERL_IN_PP_HOT_C)
-s |void |do_oddball |NN SV **oddkey|NN SV **firstkey
+S |void |do_oddball |NN SV **oddkey|NN SV **firstkey
i |HV* |opmethod_stash |NN SV* meth
#endif
#if defined(PERL_IN_PP_SORT_C)
-s |I32 |sv_ncmp |NN SV *const a|NN SV *const b
-s |I32 |sv_i_ncmp |NN SV *const a|NN SV *const b
-s |I32 |amagic_ncmp |NN SV *const a|NN SV *const b
-s |I32 |amagic_i_ncmp |NN SV *const a|NN SV *const b
-s |I32 |amagic_cmp |NN SV *const str1|NN SV *const str2
+I |I32 |sv_ncmp |NN SV *const a|NN SV *const b
+I |I32 |sv_ncmp_desc |NN SV *const a|NN SV *const b
+I |I32 |sv_i_ncmp |NN SV *const a|NN SV *const b
+I |I32 |sv_i_ncmp_desc |NN SV *const a|NN SV *const b
+I |I32 |amagic_ncmp |NN SV *const a|NN SV *const b
+I |I32 |amagic_ncmp_desc |NN SV *const a|NN SV *const b
+I |I32 |amagic_i_ncmp |NN SV *const a|NN SV *const b
+I |I32 |amagic_i_ncmp_desc |NN SV *const a|NN SV *const b
+I |I32 |amagic_cmp |NN SV *const str1|NN SV *const str2
+I |I32 |amagic_cmp_desc |NN SV *const str1|NN SV *const str2
+I |I32 |cmp_desc |NN SV *const str1|NN SV *const str2
# ifdef USE_LOCALE_COLLATE
-s |I32 |amagic_cmp_locale|NN SV *const str1|NN SV *const str2
+I |I32 |amagic_cmp_locale |NN SV *const str1|NN SV *const str2
+I |I32 |amagic_cmp_locale_desc|NN SV *const str1|NN SV *const str2
+I |I32 |cmp_locale_desc|NN SV *const str1|NN SV *const str2
# endif
-s |I32 |sortcv |NN SV *const a|NN SV *const b
-s |I32 |sortcv_xsub |NN SV *const a|NN SV *const b
-s |I32 |sortcv_stacked |NN SV *const a|NN SV *const b
+S |I32 |sortcv |NN SV *const a|NN SV *const b
+S |I32 |sortcv_xsub |NN SV *const a|NN SV *const b
+S |I32 |sortcv_stacked |NN SV *const a|NN SV *const b
+I |void |sortsv_flags_impl |NULLOK SV** array|size_t num_elts|NN SVCOMPARE_t cmp|U32 flags
#endif
#if defined(PERL_IN_PP_SYS_C)
-s |OP* |doform |NN CV *cv|NN GV *gv|NULLOK OP *retop
+S |OP* |doform |NN CV *cv|NN GV *gv|NULLOK OP *retop
# if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-sR |int |dooneliner |NN const char *cmd|NN const char *filename
+SR |int |dooneliner |NN const char *cmd|NN const char *filename
# endif
-s |SV * |space_join_names_mortal|NULLOK char *const *array
+S |SV * |space_join_names_mortal|NULLOK char *const *array
#endif
-p |OP * |tied_method|NN SV *methname|NN SV **sp \
+Fp |OP * |tied_method|NN SV *methname|NN SV **sp \
|NN SV *const sv|NN const MAGIC *const mg \
|const U32 flags|U32 argc|...
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-Ep |void |regprop |NULLOK const regexp *prog|NN SV* sv|NN const regnode* o|NULLOK const regmatch_info *reginfo \
- |NULLOK const RExC_state_t *pRExC_state
-Ep |int |re_printf |NN const char *fmt|...
-#endif
-#if defined(PERL_IN_REGCOMP_C)
-Es |regnode_offset|reg |NN RExC_state_t *pRExC_state \
- |I32 paren|NN I32 *flagp|U32 depth
-Es |regnode_offset|regnode_guts|NN RExC_state_t *pRExC_state \
- |const U8 op \
- |const STRLEN extra_len \
- |NN const char* const name
-Es |void |change_engine_size|NN RExC_state_t *pRExC_state|const Ptrdiff_t size
-Es |regnode_offset|reganode|NN RExC_state_t *pRExC_state|U8 op \
- |U32 arg
-Es |regnode_offset|reg2Lanode|NN RExC_state_t *pRExC_state \
- |const U8 op \
- |const U32 arg1 \
- |const I32 arg2
-Es |regnode_offset|regatom |NN RExC_state_t *pRExC_state \
- |NN I32 *flagp|U32 depth
-Es |regnode_offset|regbranch |NN RExC_state_t *pRExC_state \
- |NN I32 *flagp|I32 first|U32 depth
-Es |void |set_ANYOF_arg |NN RExC_state_t* const pRExC_state \
- |NN regnode* const node \
- |NULLOK SV* const cp_list \
- |NULLOK SV* const runtime_defns \
- |NULLOK SV* const only_utf8_locale_list
-Es |void |output_posix_warnings \
- |NN RExC_state_t *pRExC_state \
- |NN AV* posix_warnings
-Es |AV* |add_multi_match|NULLOK AV* multi_char_matches \
- |NN SV* multi_string \
- |const STRLEN cp_count
-Es |regnode_offset|regclass|NN RExC_state_t *pRExC_state \
- |NN I32 *flagp|U32 depth|const bool stop_at_1 \
- |bool allow_multi_fold \
- |const bool silence_non_portable \
- |const bool strict \
- |bool optimizable \
- |NULLOK SV** ret_invlist
-Es |void|add_above_Latin1_folds|NN RExC_state_t *pRExC_state|const U8 cp \
- |NN SV** invlist
-Ei |regnode_offset|handle_named_backref|NN RExC_state_t *pRExC_state \
- |NN I32 *flagp \
- |NN char * parse_start \
- |char ch
-EsnR |unsigned int|regex_set_precedence|const U8 my_operator
-Es |regnode_offset|handle_regex_sets|NN RExC_state_t *pRExC_state \
- |NULLOK SV ** return_invlist \
- |NN I32 *flagp|U32 depth \
- |NN char * const oregcomp_parse
-Es |void |set_regex_pv |NN RExC_state_t *pRExC_state|NN REGEXP *Rx
-#if defined(DEBUGGING) && defined(ENABLE_REGEX_SETS_DEBUGGING)
-Es |void |dump_regex_sets_structures \
- |NN RExC_state_t *pRExC_state \
- |NN AV * stack \
- |const IV fence|NN AV * fence_stack
-#endif
-Es |void|parse_lparen_question_flags|NN RExC_state_t *pRExC_state
-Es |regnode_offset|reg_node|NN RExC_state_t *pRExC_state|U8 op
-Es |regnode_offset|regpiece|NN RExC_state_t *pRExC_state \
- |NN I32 *flagp|U32 depth
-Es |bool |grok_bslash_N |NN RExC_state_t *pRExC_state \
- |NULLOK regnode_offset* nodep \
- |NULLOK UV *code_point_p \
- |NULLOK int* cp_count \
- |NN I32 *flagp \
- |const bool strict \
- |const U32 depth
-Es |void |reginsert |NN RExC_state_t *pRExC_state \
- |const U8 op \
- |const regnode_offset operand \
- |const U32 depth
-EsR |bool |regtail |NN RExC_state_t * pRExC_state \
- |NN const regnode_offset p \
- |NN const regnode_offset val \
- |const U32 depth
-Es |SV * |reg_scan_name |NN RExC_state_t *pRExC_state \
- |U32 flags
-Es |U32 |join_exact |NN RExC_state_t *pRExC_state \
- |NN regnode *scan|NN UV *min_subtract \
- |NN bool *unfolded_multi_char \
- |U32 flags|NULLOK regnode *val|U32 depth
-Ein |U8 |compute_EXACTish|NN RExC_state_t *pRExC_state
-Es |void |nextchar |NN RExC_state_t *pRExC_state
-Es |void |skip_to_be_ignored_text|NN RExC_state_t *pRExC_state \
- |NN char ** p \
- |const bool force_to_xmod
-Ein |char * |reg_skipcomment|NN RExC_state_t *pRExC_state|NN char * p
-Es |void |scan_commit |NN const RExC_state_t *pRExC_state \
- |NN struct scan_data_t *data \
- |NN SSize_t *minlenp \
- |int is_inf
-Es |void |populate_ANYOF_from_invlist|NN regnode *node|NN SV** invlist_ptr
-Es |void |ssc_anything |NN regnode_ssc *ssc
-EsRn |int |ssc_is_anything|NN const regnode_ssc *ssc
-Es |void |ssc_init |NN const RExC_state_t *pRExC_state \
- |NN regnode_ssc *ssc
-EsRn |int |ssc_is_cp_posixl_init|NN const RExC_state_t *pRExC_state \
- |NN const regnode_ssc *ssc
-Es |void |ssc_and |NN const RExC_state_t *pRExC_state \
- |NN regnode_ssc *ssc \
- |NN const regnode_charclass *and_with
-Es |void |ssc_or |NN const RExC_state_t *pRExC_state \
- |NN regnode_ssc *ssc \
- |NN const regnode_charclass *or_with
-Es |SV* |get_ANYOF_cp_list_for_ssc \
- |NN const RExC_state_t *pRExC_state \
- |NN const regnode_charclass* const node
-Ei |void |ssc_intersection|NN regnode_ssc *ssc \
- |NN SV* const invlist|const bool invert_2nd
-Ei |void |ssc_union |NN regnode_ssc *ssc \
- |NN SV* const invlist|const bool invert_2nd
-Ei |void |ssc_add_range |NN regnode_ssc *ssc \
- |UV const start|UV const end
-Ei |void |ssc_cp_and |NN regnode_ssc *ssc \
- |UV const cp
-Ein |void |ssc_clear_locale|NN regnode_ssc *ssc
-Ens |bool |is_ssc_worth_it|NN const RExC_state_t * pRExC_state \
- |NN const regnode_ssc * ssc
-Es |void |ssc_finalize |NN RExC_state_t *pRExC_state \
- |NN regnode_ssc *ssc
-Es |SSize_t|study_chunk |NN RExC_state_t *pRExC_state \
- |NN regnode **scanp|NN SSize_t *minlenp \
- |NN SSize_t *deltap|NN regnode *last \
- |NULLOK struct scan_data_t *data \
- |I32 stopparen|U32 recursed_depth \
- |NULLOK regnode_ssc *and_withp \
- |U32 flags|U32 depth|bool was_mutate_ok
-Es |void |rck_elide_nothing|NN regnode *node
-EsR |SV * |get_ANYOFM_contents|NN const regnode * n
-EsRn |U32 |add_data |NN RExC_state_t* const pRExC_state \
- |NN const char* const s|const U32 n
-rs |void |re_croak2 |bool utf8|NN const char* pat1|NN const char* pat2|...
-Es |int |handle_possible_posix \
- |NN RExC_state_t *pRExC_state \
- |NN const char* const s \
- |NULLOK char ** updated_parse_ptr \
- |NULLOK AV** posix_warnings \
- |const bool check_only
-Es |I32 |make_trie |NN RExC_state_t *pRExC_state \
- |NN regnode *startbranch|NN regnode *first \
- |NN regnode *last|NN regnode *tail \
- |U32 word_count|U32 flags|U32 depth
-Es |regnode *|construct_ahocorasick_from_trie|NN RExC_state_t *pRExC_state \
- |NN regnode *source|U32 depth
-EnsR |const char *|cntrl_to_mnemonic|const U8 c
-EnsR |int |edit_distance |NN const UV *src \
- |NN const UV *tgt \
- |const STRLEN x \
- |const STRLEN y \
- |const SSize_t maxDistance
-EpX |SV * |parse_uniprop_string|NN const char * const name \
- |const Size_t name_len \
- |const bool is_utf8 \
- |const bool to_fold \
- |const bool runtime \
- |const bool deferrable \
- |NN bool * user_defined_ptr \
- |NN SV * msg \
- |const STRLEN level
-EXp |SV * |handle_user_defined_property|NN const char * name \
- |const STRLEN name_len \
- |const bool is_utf8 \
- |const bool to_fold \
- |const bool runtime \
- |const bool deferrable \
- |NN SV* contents \
- |NN bool *user_defined_ptr \
- |NN SV * msg \
- |const STRLEN level
-# ifdef DEBUGGING
-Ep |int |re_indentf |NN const char *fmt|U32 depth|...
-Es |void |regdump_intflags|NULLOK const char *lead| const U32 flags
-Es |void |regdump_extflags|NULLOK const char *lead| const U32 flags
-Es |const regnode*|dumpuntil|NN const regexp *r|NN const regnode *start \
- |NN const regnode *node \
- |NULLOK const regnode *last \
- |NULLOK const regnode *plast \
- |NN SV* sv|I32 indent|U32 depth
-Es |void |put_code_point |NN SV* sv|UV c
-Es |bool |put_charclass_bitmap_innards|NN SV* sv \
- |NULLOK char* bitmap \
- |NULLOK SV* nonbitmap_invlist \
- |NULLOK SV* only_utf8_locale_invlist\
- |NULLOK const regnode * const node \
- |const bool force_as_is_display
-Es |SV* |put_charclass_bitmap_innards_common \
- |NN SV* invlist \
- |NULLOK SV* posixes \
- |NULLOK SV* only_utf8 \
- |NULLOK SV* not_utf8 \
- |NULLOK SV* only_utf8_locale \
- |const bool invert
-Es |void |put_charclass_bitmap_innards_invlist \
- |NN SV *sv \
- |NN SV* invlist
-Es |void |put_range |NN SV* sv|UV start|const UV end \
- |const bool allow_literals
-Es |void |dump_trie |NN const struct _reg_trie_data *trie\
- |NULLOK HV* widecharmap|NN AV *revcharmap\
- |U32 depth
-Es |void |dump_trie_interim_list|NN const struct _reg_trie_data *trie\
- |NULLOK HV* widecharmap|NN AV *revcharmap\
- |U32 next_alloc|U32 depth
-Es |void |dump_trie_interim_table|NN const struct _reg_trie_data *trie\
- |NULLOK HV* widecharmap|NN AV *revcharmap\
- |U32 next_alloc|U32 depth
-EsR |bool |regtail_study |NN RExC_state_t *pRExC_state \
- |NN regnode_offset p|NN const regnode_offset val|U32 depth
-# endif
-#endif
-
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
-EXRpM |bool |isFOO_lc |const U8 classnum|const U8 character
-#endif
-
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C)
-ERp |bool |_is_grapheme |NN const U8 * strbeg|NN const U8 * s|NN const U8 *strend|const UV cp
-#endif
-
-#if defined(PERL_IN_REGEXEC_C)
-ERs |bool |isFOO_utf8_lc |const U8 classnum|NN const U8* character|NN const U8* e
-ERns |U8 * |find_next_masked|NN U8 * s \
- |NN const U8 * send \
- |const U8 byte|const U8 mask
-ERns |U8 *|find_span_end |NN U8* s|NN const U8 * send|const U8 span_byte
-ERns |U8 *|find_span_end_mask|NN U8 * s|NN const U8 * send \
- |const U8 span_byte|const U8 mask
-ERs |SSize_t|regmatch |NN regmatch_info *reginfo|NN char *startpos|NN regnode *prog
-WERs |I32 |regrepeat |NN regexp *prog|NN char **startposp \
- |NN const regnode *p \
- |NN char *loceol \
- |NN regmatch_info *const reginfo \
- |I32 max
-ERs |bool |regtry |NN regmatch_info *reginfo|NN char **startposp
-ERs |bool |reginclass |NULLOK regexp * const prog \
- |NN const regnode * const n \
- |NN const U8 * const p \
- |NN const U8 * const p_end \
- |bool const utf8_target
-WEs |CHECKPOINT|regcppush |NN const regexp *rex|I32 parenfloor\
- |U32 maxopenparen
-WEs |void |regcppop |NN regexp *rex|NN U32 *maxopenparen_p
-WEs |void |regcp_restore |NN regexp *rex|I32 ix|NN U32 *maxopenparen_p
-ERsn |U8* |reghop3 |NN U8 *s|SSize_t off|NN const U8 *lim
-ERsn |U8* |reghop4 |NN U8 *s|SSize_t off|NN const U8 *llim \
- |NN const U8 *rlim
-ERsn |U8* |reghopmaybe3 |NN U8 *s|SSize_t off|NN const U8 * const lim
-ERs |char* |find_byclass |NN regexp * prog|NN const regnode *c \
- |NN char *s|NN const char *strend \
- |NULLOK regmatch_info *reginfo
-Es |void |to_utf8_substr |NN regexp * prog
-Es |bool |to_byte_substr |NN regexp * prog
-ERsn |I32 |reg_check_named_buff_matched |NN const regexp *rex \
- |NN const regnode *scan
-EsR |bool |isGCB |const GCB_enum before \
- |const GCB_enum after \
- |NN const U8 * const strbeg \
- |NN const U8 * const curpos \
- |const bool utf8_target
-EsR |GCB_enum|backup_one_GCB|NN const U8 * const strbeg \
- |NN U8 ** curpos \
- |const bool utf8_target
-EsR |bool |isLB |LB_enum before \
- |LB_enum after \
- |NN const U8 * const strbeg \
- |NN const U8 * const curpos \
- |NN const U8 * const strend \
- |const bool utf8_target
-EsR |LB_enum|advance_one_LB |NN U8 ** curpos \
- |NN const U8 * const strend \
- |const bool utf8_target
-EsR |LB_enum|backup_one_LB |NN const U8 * const strbeg \
- |NN U8 ** curpos \
- |const bool utf8_target
-EsR |bool |isSB |SB_enum before \
- |SB_enum after \
- |NN const U8 * const strbeg \
- |NN const U8 * const curpos \
- |NN const U8 * const strend \
- |const bool utf8_target
-EsR |SB_enum|advance_one_SB |NN U8 ** curpos \
- |NN const U8 * const strend \
- |const bool utf8_target
-EsR |SB_enum|backup_one_SB |NN const U8 * const strbeg \
- |NN U8 ** curpos \
- |const bool utf8_target
-EsR |bool |isWB |WB_enum previous \
- |WB_enum before \
- |WB_enum after \
- |NN const U8 * const strbeg \
- |NN const U8 * const curpos \
- |NN const U8 * const strend \
- |const bool utf8_target
-EsR |WB_enum|advance_one_WB |NN U8 ** curpos \
- |NN const U8 * const strend \
- |const bool utf8_target \
- |const bool skip_Extend_Format
-EsR |WB_enum|backup_one_WB |NN WB_enum * previous \
- |NN const U8 * const strbeg \
- |NN U8 ** curpos \
- |const bool utf8_target
-Ein |I32 |foldEQ_latin1_s2_folded|NN const char* a|NN const char* b|I32 len
-# ifdef DEBUGGING
-Es |void |dump_exec_pos |NN const char *locinput|NN const regnode *scan|NN const char *loc_regeol\
- |NN const char *loc_bostr|NN const char *loc_reg_starttry|const bool do_utf8|const U32 depth
-Es |void |debug_start_match|NN const REGEXP *prog|const bool do_utf8\
- |NN const char *start|NN const char *end\
- |NN const char *blurb
-
-Ep |int |re_exec_indentf |NN const char *fmt|U32 depth|...
-# endif
-#endif
-
#if defined(PERL_IN_DUMP_C)
-s |CV* |deb_curcv |I32 ix
-s |void |debprof |NN const OP *o
-s |UV |sequence_num |NULLOK const OP *o
-s |SV* |pm_description |NN const PMOP *pm
+S |CV* |deb_curcv |I32 ix
+S |void |debprof |NN const OP *o
+S |UV |sequence_num |NULLOK const OP *o
+S |SV* |pm_description |NN const PMOP *pm
#endif
#if defined(PERL_IN_SCOPE_C)
-s |SV* |save_scalar_at |NN SV **sptr|const U32 flags
+S |SV* |save_scalar_at |NN SV **sptr|const U32 flags
#endif
#if defined(PERL_IN_GV_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_PAD_C) || defined(PERL_IN_OP_C)
@@ -2685,7 +2955,7 @@ po |void |sv_add_backref |NN SV *const tsv|NN SV *const sv
#if defined(PERL_IN_HV_C) || defined(PERL_IN_MG_C) || defined(PERL_IN_SV_C)
: Used in hv.c and mg.c
-poM |void |sv_kill_backrefs |NN SV *const sv|NULLOK AV *const av
+pox |void |sv_kill_backrefs |NN SV *const sv|NULLOK AV *const av
#endif
#if defined(PERL_IN_SV_C) || defined (PERL_IN_OP_C)
@@ -2696,46 +2966,46 @@ pR |SV * |varname |NULLOK const GV *const gv|const char gvtype \
pX |void |sv_del_backref |NN SV *const tsv|NN SV *const sv
#if defined(PERL_IN_SV_C)
-niR |char * |uiv_2buf |NN char *const buf|const IV iv|UV uv|const int is_uv|NN char **const peob
+TiR |char * |uiv_2buf |NN char *const buf|const IV iv|UV uv|const int is_uv|NN char **const peob
i |void |sv_unglob |NN SV *const sv|U32 flags
-s |const char *|sv_display |NN SV *const sv|NN char *tmpbuf|STRLEN tmpbuf_size
-s |void |not_a_number |NN SV *const sv
-s |void |not_incrementable |NN SV *const sv
-s |I32 |visit |NN SVFUNC_t f|const U32 flags|const U32 mask
+S |const char *|sv_display |NN SV *const sv|NN char *tmpbuf|STRLEN tmpbuf_size
+S |void |not_a_number |NN SV *const sv
+S |void |not_incrementable |NN SV *const sv
+S |I32 |visit |NN SVFUNC_t f|const U32 flags|const U32 mask
# ifdef DEBUGGING
-s |void |del_sv |NN SV *p
+S |void |del_sv |NN SV *p
# endif
# if !defined(NV_PRESERVES_UV)
# ifdef DEBUGGING
-s |int |sv_2iuv_non_preserve |NN SV *const sv|I32 numtype
+S |int |sv_2iuv_non_preserve |NN SV *const sv|I32 numtype
# else
-s |int |sv_2iuv_non_preserve |NN SV *const sv
+S |int |sv_2iuv_non_preserve |NN SV *const sv
# endif
# endif
-sR |STRLEN |expect_number |NN const char **const pattern
-sn |STRLEN |sv_pos_u2b_forwards|NN const U8 *const start \
+SR |STRLEN |expect_number |NN const char **const pattern
+ST |STRLEN |sv_pos_u2b_forwards|NN const U8 *const start \
|NN const U8 *const send|NN STRLEN *const uoffset \
|NN bool *const at_end
-sn |STRLEN |sv_pos_u2b_midway|NN const U8 *const start \
+ST |STRLEN |sv_pos_u2b_midway|NN const U8 *const start \
|NN const U8 *send|STRLEN uoffset|const STRLEN uend
-s |STRLEN |sv_pos_u2b_cached|NN SV *const sv|NN MAGIC **const mgp \
+S |STRLEN |sv_pos_u2b_cached|NN SV *const sv|NN MAGIC **const mgp \
|NN const U8 *const start|NN const U8 *const send \
|STRLEN uoffset|STRLEN uoffset0|STRLEN boffset0
-s |void |utf8_mg_len_cache_update|NN SV *const sv|NN MAGIC **const mgp \
+S |void |utf8_mg_len_cache_update|NN SV *const sv|NN MAGIC **const mgp \
|const STRLEN ulen
-s |void |utf8_mg_pos_cache_update|NN SV *const sv|NN MAGIC **const mgp \
+S |void |utf8_mg_pos_cache_update|NN SV *const sv|NN MAGIC **const mgp \
|const STRLEN byte|const STRLEN utf8|const STRLEN blen
-s |STRLEN |sv_pos_b2u_midway|NN const U8 *const s|NN const U8 *const target \
+S |STRLEN |sv_pos_b2u_midway|NN const U8 *const s|NN const U8 *const target \
|NN const U8 *end|STRLEN endu
-s |void |assert_uft8_cache_coherent|NN const char *const func \
+S |void |assert_uft8_cache_coherent|NN const char *const func \
|STRLEN from_cache|STRLEN real|NN SV *const sv
-sn |char * |F0convert |NV nv|NN char *const endbuf|NN STRLEN *const len
-s |SV * |more_sv
-s |bool |sv_2iuv_common |NN SV *const sv
-s |void |glob_assign_glob|NN SV *const dstr|NN SV *const sstr \
+ST |char * |F0convert |NV nv|NN char *const endbuf|NN STRLEN *const len
+S |SV * |more_sv
+S |bool |sv_2iuv_common |NN SV *const sv
+S |void |glob_assign_glob|NN SV *const dstr|NN SV *const sstr \
|const int dtype
-sRn |PTR_TBL_ENT_t *|ptr_table_find|NN PTR_TBL_t *const tbl|NULLOK const void *const sv
-s |void |anonymise_cv_maybe |NN GV *gv|NN CV *cv
+SRT |PTR_TBL_ENT_t *|ptr_table_find|NN PTR_TBL_t *const tbl|NULLOK const void *const sv
+S |void |anonymise_cv_maybe |NN GV *gv|NN CV *cv
#endif
: Used in sv.c and hv.c
@@ -2745,124 +3015,133 @@ EXpR |SV* |get_and_check_backslash_N_name|NN const char* s \
|NN const char* const e \
|const bool is_utf8 \
|NN const char** error_msg
+EXpR |HV* |load_charnames |NN SV * char_name \
+ |NN const char * context \
+ |const STRLEN context_len \
+ |NN const char ** error_msg
: For use ONLY in B::Hooks::Parser, by special dispensation
-EXpMR |char* |scan_str |NN char *start|int keep_quoted \
+EXpxR |char* |scan_str |NN char *start|int keep_quoted \
|int keep_delims|int re_reparse \
|NULLOK char **delimp
-EXpM |char* |scan_word |NN char *s|NN char *dest|STRLEN destlen \
+EXpx |char* |scan_word |NN char *s|NN char *dest|STRLEN destlen \
|int allow_package|NN STRLEN *slp
-EXpMR |char* |skipspace_flags|NN char *s|U32 flags
+EXpxR |char* |skipspace_flags|NN char *s|U32 flags
#if defined(PERL_IN_TOKE_C)
-s |void |check_uni
-s |void |force_next |I32 type
-s |char* |force_version |NN char *s|int guessing
-s |char* |force_strict_version |NN char *s
-s |char* |force_word |NN char *start|int token|int check_keyword \
+S |void |check_uni
+S |void |force_next |I32 type
+S |char* |force_version |NN char *s|int guessing
+S |char* |force_strict_version |NN char *s
+S |char* |force_word |NN char *start|int token|int check_keyword \
|int allow_pack
-s |SV* |tokeq |NN SV *sv
-sR |char* |scan_const |NN char *start
-sR |SV* |get_and_check_backslash_N_name_wrapper|NN const char* s \
+S |SV* |tokeq |NN SV *sv
+SR |char* |scan_const |NN char *start
+SR |SV* |get_and_check_backslash_N_name_wrapper|NN const char* s \
|NN const char* const e
-sR |char* |scan_formline |NN char *s
-sR |char* |scan_heredoc |NN char *s
-s |char* |scan_ident |NN char *s|NN char *dest \
+SR |char* |scan_formline |NN char *s
+SR |char* |scan_heredoc |NN char *s
+S |char* |scan_ident |NN char *s|NN char *dest \
|STRLEN destlen|I32 ck_uni
-sR |char* |scan_inputsymbol|NN char *start
-sR |char* |scan_pat |NN char *start|I32 type
-sR |char* |scan_subst |NN char *start
-sR |char* |scan_trans |NN char *start
-s |void |update_debugger_info|NULLOK SV *orig_sv \
+SR |char* |scan_inputsymbol|NN char *start
+SR |char* |scan_pat |NN char *start|I32 type
+SR |char* |scan_subst |NN char *start
+SR |char* |scan_trans |NN char *start
+S |void |update_debugger_info|NULLOK SV *orig_sv \
|NULLOK const char *const buf|STRLEN len
-sR |char* |swallow_bom |NN U8 *s
+SR |char* |swallow_bom |NN U8 *s
#ifndef PERL_NO_UTF16_FILTER
-s |I32 |utf16_textfilter|int idx|NN SV *sv|int maxlen
-s |U8* |add_utf16_textfilter|NN U8 *const s|bool reversed
+S |I32 |utf16_textfilter|int idx|NN SV *sv|int maxlen
+S |U8* |add_utf16_textfilter|NN U8 *const s|bool reversed
#endif
-s |void |checkcomma |NN const char *s|NN const char *name \
+S |void |checkcomma |NN const char *s|NN const char *name \
|NN const char *what
-s |void |force_ident |NN const char *s|int kind
-s |void |force_ident_maybe_lex|char pit
-s |void |incline |NN const char *s|NN const char *end
-s |int |intuit_method |NN char *s|NULLOK SV *ioname|NULLOK CV *cv
-s |int |intuit_more |NN char *s|NN char *e
-s |I32 |lop |I32 f|U8 x|NN char *s
-rs |void |missingterm |NULLOK char *s|STRLEN len
-s |void |no_op |NN const char *const what|NULLOK char *s
-s |int |pending_ident
-sR |I32 |sublex_done
-sR |I32 |sublex_push
-sR |I32 |sublex_start
-sR |char * |filter_gets |NN SV *sv|STRLEN append
-sR |HV * |find_in_my_stash|NN const char *pkgname|STRLEN len
-sR |char * |tokenize_use |int is_use|NN char *s
-so |SV* |new_constant |NULLOK const char *s|STRLEN len \
+S |void |force_ident |NN const char *s|int kind
+S |void |force_ident_maybe_lex|char pit
+S |void |incline |NN const char *s|NN const char *end
+S |int |intuit_method |NN char *s|NULLOK SV *ioname|NULLOK CV *cv
+S |int |intuit_more |NN char *s|NN char *e
+S |I32 |lop |I32 f|U8 x|NN char *s
+rS |void |missingterm |NULLOK char *s|STRLEN len
+S |void |no_op |NN const char *const what|NULLOK char *s
+S |int |pending_ident
+SR |I32 |sublex_done
+SR |I32 |sublex_push
+SR |I32 |sublex_start
+SR |char * |filter_gets |NN SV *sv|STRLEN append
+SR |HV * |find_in_my_stash|NN const char *pkgname|STRLEN len
+SR |char * |tokenize_use |int is_use|NN char *s
+So |SV* |new_constant |NULLOK const char *s|STRLEN len \
|NN const char *key|STRLEN keylen|NN SV *sv \
|NULLOK SV *pv|NULLOK const char *type \
|STRLEN typelen \
|NULLOK const char ** error_msg
-s |int |ao |int toketype
-s |void|parse_ident|NN char **s|NN char **d \
+S |int |ao |int toketype
+S |void|parse_ident|NN char **s|NN char **d \
|NN char * const e|int allow_package \
|bool is_utf8|bool check_dollar \
|bool tick_warn
# if defined(PERL_CR_FILTER)
-s |I32 |cr_textfilter |int idx|NULLOK SV *sv|int maxlen
-s |void |strip_return |NN SV *sv
+S |I32 |cr_textfilter |int idx|NULLOK SV *sv|int maxlen
+S |void |strip_return |NN SV *sv
# endif
# if defined(DEBUGGING)
-s |int |tokereport |I32 rv|NN const YYSTYPE* lvalp
-sf |void |printbuf |NN const char *const fmt|NN const char *const s
+S |int |tokereport |I32 rv|NN const YYSTYPE* lvalp
+Sf |void |printbuf |NN const char *const fmt|NN const char *const s
# endif
#endif
-EXMp |bool |validate_proto |NN SV *name|NULLOK SV *proto|bool warn \
+EdXxp |bool |validate_proto |NN SV *name|NULLOK SV *proto|bool warn \
|bool curstash
#if defined(PERL_IN_UNIVERSAL_C)
-s |bool |isa_lookup |NN HV *stash|NN const char * const name \
+SG |bool |isa_lookup |NULLOK HV *stash|NULLOK SV *namesv|NULLOK const char * name \
|STRLEN len|U32 flags
+SG |bool |sv_derived_from_svpvn |NULLOK SV *sv \
+ |NULLOK SV *namesv \
+ |NULLOK const char * name \
+ |const STRLEN len \
+ |U32 flags
#endif
#if defined(PERL_IN_LOCALE_C)
# ifdef USE_LOCALE
-sn |const char*|category_name |const int category
-s |const char*|switch_category_locale_to_template|const int switch_category|const int template_category|NULLOK const char * template_locale
-s |void |restore_switched_locale|const int category|NULLOK const char * const original_locale
+ST |const char*|category_name |const int category
+S |const char*|switch_category_locale_to_template|const int switch_category|const int template_category|NULLOK const char * template_locale
+S |void |restore_switched_locale|const int category|NULLOK const char * const original_locale
# endif
# ifdef HAS_NL_LANGINFO
-sn |const char*|my_nl_langinfo|const nl_item item|bool toggle
+ST |const char*|my_nl_langinfo|const nl_item item|bool toggle
# else
-sn |const char*|my_nl_langinfo|const int item|bool toggle
+ST |const char*|my_nl_langinfo|const int item|bool toggle
# endif
-inR |const char *|save_to_buffer|NULLOK const char * string \
+iTR |const char *|save_to_buffer|NULLOK const char * string \
|NULLOK char **buf \
|NN Size_t *buf_size \
|const Size_t offset
# if defined(USE_LOCALE)
-s |char* |stdize_locale |NN char* locs
-s |void |new_collate |NULLOK const char* newcoll
-s |void |new_ctype |NN const char* newctype
-s |void |set_numeric_radix|const bool use_locale
-s |void |new_numeric |NULLOK const char* newnum
+S |char* |stdize_locale |NN char* locs
+S |void |new_collate |NULLOK const char* newcoll
+S |void |new_ctype |NN const char* newctype
+S |void |set_numeric_radix|const bool use_locale
+S |void |new_numeric |NULLOK const char* newnum
# ifdef USE_POSIX_2008_LOCALE
-sn |const char*|emulate_setlocale|const int category \
+ST |const char*|emulate_setlocale|const int category \
|NULLOK const char* locale \
|unsigned int index \
|const bool is_index_valid
# endif
# ifdef WIN32
-s |char* |win32_setlocale|int category|NULLOK const char* locale
+S |char* |win32_setlocale|int category|NULLOK const char* locale
# endif
# ifdef DEBUGGING
-s |void |print_collxfrm_input_and_return \
+S |void |print_collxfrm_input_and_return \
|NN const char * const s \
|NN const char * const e \
|NULLOK const STRLEN * const xlen \
|const bool is_utf8
-s |void |print_bytes_for_locale |NN const char * const s \
+S |void |print_bytes_for_locale |NN const char * const s \
|NN const char * const e \
|const bool is_utf8
-snR |char * |setlocale_debug_string |const int category \
+STR |char * |setlocale_debug_string |const int category \
|NULLOK const char* const locale \
|NULLOK const char* const retval
# endif
@@ -2874,16 +3153,16 @@ snR |char * |setlocale_debug_string |const int category \
|| defined(PERL_IN_MG_C) \
|| defined (PERL_EXT_POSIX) \
|| defined (PERL_EXT_LANGINFO))
-ApM |bool |_is_cur_LC_category_utf8|int category
+Cp |bool |_is_cur_LC_category_utf8|int category
#endif
#if defined(PERL_IN_UTIL_C)
-s |SV* |mess_alloc
-s |SV * |with_queued_errors|NN SV *ex
-s |bool |invoke_exception_hook|NULLOK SV *ex|bool warn
+S |SV* |mess_alloc
+S |SV * |with_queued_errors|NN SV *ex
+S |bool |invoke_exception_hook|NULLOK SV *ex|bool warn
#if defined(PERL_MEM_LOG) && !defined(PERL_MEM_LOG_NOIMPL)
-sn |void |mem_log_common |enum mem_log_type mlt|const UV n|const UV typesize \
+ST |void |mem_log_common |enum mem_log_type mlt|const UV n|const UV typesize \
|NN const char *type_name|NULLOK const SV *sv \
|Malloc_t oldalloc|Malloc_t newalloc \
|NN const char *filename|const int linenumber \
@@ -2892,32 +3171,26 @@ sn |void |mem_log_common |enum mem_log_type mlt|const UV n|const UV typesize \
#endif
#if defined(PERL_MEM_LOG)
-pn |Malloc_t |mem_log_alloc |const UV nconst|UV typesize|NN const char *type_name|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
-pn |Malloc_t |mem_log_realloc |const UV n|const UV typesize|NN const char *type_name|Malloc_t oldalloc|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
-pn |Malloc_t |mem_log_free |Malloc_t oldalloc|NN const char *filename|const int linenumber|NN const char *funcname
+pT |Malloc_t |mem_log_alloc |const UV nconst|UV typesize|NN const char *type_name|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
+pT |Malloc_t |mem_log_realloc |const UV n|const UV typesize|NN const char *type_name|Malloc_t oldalloc|Malloc_t newalloc|NN const char *filename|const int linenumber|NN const char *funcname
+pT |Malloc_t |mem_log_free |Malloc_t oldalloc|NN const char *filename|const int linenumber|NN const char *funcname
#endif
#if defined(PERL_IN_UTF8_C)
-sR |HV * |new_msg_hv |NN const char * const message \
+SR |HV * |new_msg_hv |NN const char * const message \
|U32 categories \
|U32 flag
-sRM |UV |check_locale_boundary_crossing \
+SR |UV |check_locale_boundary_crossing \
|NN const U8* const p \
|const UV result \
|NN U8* const ustrp \
|NN STRLEN *lenp
iR |bool |is_utf8_common |NN const U8 *const p \
+ |NN const U8 *const e \
|NULLOK SV* const invlist
-iR |bool |is_utf8_common_with_len|NN const U8 *const p \
- |NN const U8 *const e \
- |NULLOK SV* const invlist
-sR |SV* |swatch_get |NN SV* swash|UV start|UV span
-sRM |U8* |swash_scan_list_line|NN U8* l|NN U8* const lend|NN UV* min \
- |NN UV* max|NN UV* val|const bool wants_value \
- |NN const U8* const typestr
#endif
-EXiMn |void |append_utf8_from_native_byte|const U8 byte|NN U8** dest
+EXiTp |void |append_utf8_from_native_byte|const U8 byte|NN U8** dest
Apd |void |sv_set_undef |NN SV *sv
Apd |void |sv_setsv_flags |NN SV *dstr|NULLOK SV *sstr|const I32 flags
@@ -2926,70 +3199,70 @@ Apd |void |sv_catpvn_flags|NN SV *const dstr|NN const char *sstr|const STRLEN le
Apd |void |sv_catpv_flags |NN SV *dstr|NN const char *sstr \
|const I32 flags
Apd |void |sv_catsv_flags |NN SV *const dsv|NULLOK SV *const ssv|const I32 flags
-Apmd |STRLEN |sv_utf8_upgrade_flags|NN SV *const sv|const I32 flags
-Ap |STRLEN |sv_utf8_upgrade_flags_grow|NN SV *const sv|const I32 flags|STRLEN extra
+Amd |STRLEN |sv_utf8_upgrade_flags|NN SV *const sv|const I32 flags
+Adp |STRLEN |sv_utf8_upgrade_flags_grow|NN SV *const sv|const I32 flags|STRLEN extra
Apd |char* |sv_pvn_force_flags|NN SV *const sv|NULLOK STRLEN *const lp|const I32 flags
-Apmb |void |sv_copypv |NN SV *const dsv|NN SV *const ssv
-Apmd |void |sv_copypv_nomg |NN SV *const dsv|NN SV *const ssv
+AdpMb |void |sv_copypv |NN SV *const dsv|NN SV *const ssv
+Amd |void |sv_copypv_nomg |NN SV *const dsv|NN SV *const ssv
Apd |void |sv_copypv_flags |NN SV *const dsv|NN SV *const ssv|const I32 flags
-Apo |char* |my_atof2 |NN const char *orig|NN NV* value
-Ap |char* |my_atof3 |NN const char *orig|NN NV* value|const STRLEN len
-Apn |int |my_socketpair |int family|int type|int protocol|int fd[2]
-Apn |int |my_dirfd |NULLOK DIR* dir
+Cpo |char* |my_atof2 |NN const char *orig|NN NV* value
+Cp |char* |my_atof3 |NN const char *orig|NN NV* value|const STRLEN len
+ApT |int |my_socketpair |int family|int type|int protocol|int fd[2]
+ApT |int |my_dirfd |NULLOK DIR* dir
#ifdef PERL_ANY_COW
-: Used in pp_hot.c and regexec.c
-pMXE |SV* |sv_setsv_cow |NULLOK SV* dstr|NN SV* sstr
+: Used in regexec.c
+pxXE |SV* |sv_setsv_cow |NULLOK SV* dstr|NN SV* sstr
#endif
Aop |const char *|PerlIO_context_layers|NULLOK const char *mode
#if defined(USE_PERLIO)
-Ap |int |PerlIO_close |NULLOK PerlIO *f
+Apdh |int |PerlIO_close |NULLOK PerlIO *f
Ap |int |PerlIO_fill |NULLOK PerlIO *f
-Ap |int |PerlIO_fileno |NULLOK PerlIO *f
-Ap |int |PerlIO_eof |NULLOK PerlIO *f
-Ap |int |PerlIO_error |NULLOK PerlIO *f
-Ap |int |PerlIO_flush |NULLOK PerlIO *f
-Ap |void |PerlIO_clearerr |NULLOK PerlIO *f
-Ap |void |PerlIO_set_cnt |NULLOK PerlIO *f|SSize_t cnt
-Ap |void |PerlIO_set_ptrcnt |NULLOK PerlIO *f|NULLOK STDCHAR *ptr \
+Apdh |int |PerlIO_fileno |NULLOK PerlIO *f
+Apdh |int |PerlIO_eof |NULLOK PerlIO *f
+Apdh |int |PerlIO_error |NULLOK PerlIO *f
+Apdh |int |PerlIO_flush |NULLOK PerlIO *f
+Apdh |void |PerlIO_clearerr |NULLOK PerlIO *f
+Apdh |void |PerlIO_set_cnt |NULLOK PerlIO *f|SSize_t cnt
+Apdh |void |PerlIO_set_ptrcnt |NULLOK PerlIO *f|NULLOK STDCHAR *ptr \
|SSize_t cnt
-Ap |void |PerlIO_setlinebuf |NULLOK PerlIO *f
-Ap |SSize_t|PerlIO_read |NULLOK PerlIO *f|NN void *vbuf \
+Apdh |void |PerlIO_setlinebuf |NULLOK PerlIO *f
+Apdh |SSize_t|PerlIO_read |NULLOK PerlIO *f|NN void *vbuf \
|Size_t count
-Ap |SSize_t|PerlIO_write |NULLOK PerlIO *f|NN const void *vbuf \
+Apdh |SSize_t|PerlIO_write |NULLOK PerlIO *f|NN const void *vbuf \
|Size_t count
Ap |SSize_t|PerlIO_unread |NULLOK PerlIO *f|NN const void *vbuf \
|Size_t count
-Ap |Off_t |PerlIO_tell |NULLOK PerlIO *f
-Ap |int |PerlIO_seek |NULLOK PerlIO *f|Off_t offset|int whence
+Apdh |Off_t |PerlIO_tell |NULLOK PerlIO *f
+Apdh |int |PerlIO_seek |NULLOK PerlIO *f|Off_t offset|int whence
Xp |void |PerlIO_save_errno |NULLOK PerlIO *f
Xp |void |PerlIO_restore_errno |NULLOK PerlIO *f
-Ap |STDCHAR *|PerlIO_get_base |NULLOK PerlIO *f
-Ap |STDCHAR *|PerlIO_get_ptr |NULLOK PerlIO *f
-ApR |SSize_t |PerlIO_get_bufsiz |NULLOK PerlIO *f
-ApR |SSize_t |PerlIO_get_cnt |NULLOK PerlIO *f
+Apdh |STDCHAR *|PerlIO_get_base |NULLOK PerlIO *f
+Apdh |STDCHAR *|PerlIO_get_ptr |NULLOK PerlIO *f
+ApRdh |SSize_t |PerlIO_get_bufsiz |NULLOK PerlIO *f
+ApRdh |SSize_t |PerlIO_get_cnt |NULLOK PerlIO *f
-ApR |PerlIO *|PerlIO_stdin
-ApR |PerlIO *|PerlIO_stdout
-ApR |PerlIO *|PerlIO_stderr
+ApRdh |PerlIO *|PerlIO_stdin
+ApRdh |PerlIO *|PerlIO_stdout
+ApRdh |PerlIO *|PerlIO_stderr
#endif /* USE_PERLIO */
: Only used in dump.c
p |void |deb_stack_all
#if defined(PERL_IN_DEB_C)
-s |void |deb_stack_n |NN SV** stack_base|I32 stack_min \
+S |void |deb_stack_n |NN SV** stack_base|I32 stack_min \
|I32 stack_max|I32 mark_min|I32 mark_max
#endif
: pad API
ApdR |PADLIST*|pad_new |int flags
#ifdef DEBUGGING
-pnX |void|set_padlist| NN CV * cv | NULLOK PADLIST * padlist
+pTX |void|set_padlist| NN CV * cv | NULLOK PADLIST * padlist
#endif
#if defined(PERL_IN_PAD_C)
-s |PADOFFSET|pad_alloc_name|NN PADNAME *name|U32 flags \
+Sd |PADOFFSET|pad_alloc_name|NN PADNAME *name|U32 flags \
|NULLOK HV *typestash|NULLOK HV *ourstash
#endif
Apd |PADOFFSET|pad_add_name_pvn|NN const char *namepv|STRLEN namelen\
@@ -3001,11 +3274,11 @@ Apd |PADOFFSET|pad_add_name_pv|NN const char *name\
Apd |PADOFFSET|pad_add_name_sv|NN SV *name\
|U32 flags|NULLOK HV *typestash\
|NULLOK HV *ourstash
-AMpd |PADOFFSET|pad_alloc |I32 optype|U32 tmptype
+Axpd |PADOFFSET|pad_alloc |I32 optype|U32 tmptype
Apd |PADOFFSET|pad_add_anon |NN CV* func|I32 optype
p |void |pad_add_weakref|NN CV* func
#if defined(PERL_IN_PAD_C)
-sd |void |pad_check_dup |NN PADNAME *name|U32 flags \
+Sd |void |pad_check_dup |NN PADNAME *name|U32 flags \
|NULLOK const HV *ourstash
#endif
Apd |PADOFFSET|pad_findmy_pvn|NN const char* namepv|STRLEN namelen|U32 flags
@@ -3014,7 +3287,7 @@ Apd |PADOFFSET|pad_findmy_sv|NN SV* name|U32 flags
ApdD |PADOFFSET|find_rundefsvoffset |
Apd |SV* |find_rundefsv |
#if defined(PERL_IN_PAD_C)
-sd |PADOFFSET|pad_findlex |NN const char *namepv|STRLEN namelen|U32 flags \
+Sd |PADOFFSET|pad_findlex |NN const char *namepv|STRLEN namelen|U32 flags \
|NN const CV* cv|U32 seq|int warn \
|NULLOK SV** out_capture \
|NN PADNAME** out_name|NN int *out_flags
@@ -3028,29 +3301,32 @@ Apd |U32 |intro_my
pd |OP * |pad_leavemy
pd |void |pad_swipe |PADOFFSET po|bool refadjust
#if defined(PERL_IN_PAD_C)
-sd |void |pad_reset
+Sd |void |pad_reset
#endif
-AMpd |void |pad_tidy |padtidy_type type
+Axpd |void |pad_tidy |padtidy_type type
pd |void |pad_free |PADOFFSET po
pd |void |do_dump_pad |I32 level|NN PerlIO *file|NULLOK PADLIST *padlist|int full
#if defined(PERL_IN_PAD_C)
# if defined(DEBUGGING)
-sd |void |cv_dump |NN const CV *cv|NN const char *title
+Sd |void |cv_dump |NN const CV *cv|NN const char *title
# endif
#endif
+#if defined(PERL_IN_PAD_C) || defined(PERL_IN_OP_C)
+iT |bool |PadnameIN_SCOPE|NN const PADNAME * const pn|const U32 seq
+#endif
Apd |CV* |cv_clone |NN CV* proto
p |CV* |cv_clone_into |NN CV* proto|NN CV *target
pd |void |pad_fixup_inner_anons|NN PADLIST *padlist|NN CV *old_cv|NN CV *new_cv
pdX |void |pad_push |NN PADLIST *padlist|int depth
-ApbdR |HV* |pad_compname_type|const PADOFFSET po
-AMpdRn |PADNAME *|padnamelist_fetch|NN PADNAMELIST *pnl|SSize_t key
+ApbdRM |HV* |pad_compname_type|const PADOFFSET po
+AxpdRT |PADNAME *|padnamelist_fetch|NN PADNAMELIST *pnl|SSize_t key
Xop |void |padnamelist_free|NN PADNAMELIST *pnl
-AMpd |PADNAME **|padnamelist_store|NN PADNAMELIST *pnl|SSize_t key \
+Axpd |PADNAME **|padnamelist_store|NN PADNAMELIST *pnl|SSize_t key \
|NULLOK PADNAME *val
Xop |void |padname_free |NN PADNAME *pn
#if defined(USE_ITHREADS)
pdR |PADNAME *|padname_dup |NN PADNAME *src|NN CLONE_PARAMS *param
-pR |PADNAMELIST *|padnamelist_dup|NN PADNAMELIST *srcpad \
+pdR |PADNAMELIST *|padnamelist_dup|NN PADNAMELIST *srcpad \
|NN CLONE_PARAMS *param
pdR |PADLIST *|padlist_dup |NN PADLIST *srcpad \
|NN CLONE_PARAMS *param
@@ -3074,21 +3350,21 @@ Apod |void |hv_assert |NN HV *hv
ApdR |SV* |hv_scalar |NN HV *hv
p |void |hv_pushkv |NN HV *hv|U32 flags
-ApdRM |SV* |hv_bucket_ratio|NN HV *hv
+ApdRx |SV* |hv_bucket_ratio|NN HV *hv
ApoR |I32* |hv_riter_p |NN HV *hv
ApoR |HE** |hv_eiter_p |NN HV *hv
Apo |void |hv_riter_set |NN HV *hv|I32 riter
Apo |void |hv_eiter_set |NN HV *hv|NULLOK HE *eiter
Ap |void |hv_rand_set |NN HV *hv|U32 new_xhv_rand
Ap |void |hv_name_set |NN HV *hv|NULLOK const char *name|U32 len|U32 flags
-p |void |hv_ename_add |NN HV *hv|NN const char *name|U32 len \
+pd |void |hv_ename_add |NN HV *hv|NN const char *name|U32 len \
|U32 flags
-p |void |hv_ename_delete|NN HV *hv|NN const char *name|U32 len \
+pd |void |hv_ename_delete|NN HV *hv|NN const char *name|U32 len \
|U32 flags
: Used in dump.c and hv.c
-poM |AV** |hv_backreferences_p |NN HV *hv
+pox |AV** |hv_backreferences_p |NN HV *hv
#if defined(PERL_IN_DUMP_C) || defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_SCOPE_C)
-poM |void |hv_kill_backrefs |NN HV *hv
+pox |void |hv_kill_backrefs |NN HV *hv
#endif
Apd |void |hv_clear_placeholders |NN HV *hv
XpoR |SSize_t*|hv_placeholders_p |NN HV *hv
@@ -3099,11 +3375,11 @@ Apo |void |hv_placeholders_set |NN HV *hv|I32 ph
p |SV* |magic_scalarpack|NN HV *hv|NN MAGIC *mg
#if defined(PERL_IN_SV_C)
-s |SV * |find_hash_subscript|NULLOK const HV *const hv \
+S |SV * |find_hash_subscript|NULLOK const HV *const hv \
|NN const SV *const val
-s |SSize_t|find_array_subscript|NULLOK const AV *const av \
+S |SSize_t|find_array_subscript|NULLOK const AV *const av \
|NN const SV *const val
-sMd |SV* |find_uninit_var|NULLOK const OP *const obase \
+Sxd |SV* |find_uninit_var|NULLOK const OP *const obase \
|NULLOK const SV *const uninit_sv|bool match \
|NN const char **desc_p
#endif
@@ -3117,26 +3393,26 @@ p |void |dump_sv_child |NN SV *sv
#endif
#ifdef PERL_DONT_CREATE_GVSV
-Apbm |GV* |gv_SVadd |NULLOK GV *gv
+ApbM |GV* |gv_SVadd |NULLOK GV *gv
#endif
#if defined(PERL_IN_UTIL_C)
-s |bool |ckwarn_common |U32 w
+S |bool |ckwarn_common |U32 w
#endif
ApoP |bool |ckwarn |U32 w
ApoP |bool |ckwarn_d |U32 w
: FIXME - exported for ByteLoader - public or private?
-XEopMR |STRLEN *|new_warnings_bitfield|NULLOK STRLEN *buffer \
+XEopxR |STRLEN *|new_warnings_bitfield|NULLOK STRLEN *buffer \
|NN const char *const bits|STRLEN size
-Apnodf |int |my_snprintf |NN char *buffer|const Size_t len|NN const char *format|...
-Apnod |int |my_vsnprintf |NN char *buffer|const Size_t len|NN const char *format|va_list ap
+AMpTdf |int |my_snprintf |NN char *buffer|const Size_t len|NN const char *format|...
+AMpTd |int |my_vsnprintf |NN char *buffer|const Size_t len|NN const char *format|va_list ap
#ifdef USE_QUADMATH
-Apnd |const char* |quadmath_format_single|NN const char* format
-Apnd |bool|quadmath_format_needed|NN const char* format
+pTd |bool |quadmath_format_valid|NN const char* format
+pTd |bool|quadmath_format_needed|NN const char* format
#endif
: Used in mg.c, sv.c
-px |void |my_clearenv
+pe |void |my_clearenv
#ifdef PERL_IMPLICIT_CONTEXT
#ifdef PERL_GLOBAL_STRUCT_PRIVATE
@@ -3147,50 +3423,50 @@ Apo |void* |my_cxt_init |NN int *indexp|size_t size
#endif
#endif
#if defined(PERL_IN_UTIL_C)
-so |void |xs_version_bootcheck|U32 items|U32 ax|NN const char *xs_p \
+So |void |xs_version_bootcheck|U32 items|U32 ax|NN const char *xs_p \
|STRLEN xs_len
#endif
-Xpon |I32 |xs_handshake |const U32 key|NN void * v_my_perl\
+FXpoT |I32 |xs_handshake |const U32 key|NN void * v_my_perl\
|NN const char * file| ...
Xp |void |xs_boot_epilog |const I32 ax
#ifndef HAS_STRLCAT
-Apnod |Size_t |my_strlcat |NULLOK char *dst|NULLOK const char *src|Size_t size
+ApTd |Size_t |my_strlcat |NULLOK char *dst|NULLOK const char *src|Size_t size
#endif
#ifndef HAS_STRLCPY
-Apnod |Size_t |my_strlcpy |NULLOK char *dst|NULLOK const char *src|Size_t size
+ApTd |Size_t |my_strlcpy |NULLOK char *dst|NULLOK const char *src|Size_t size
#endif
#ifndef HAS_STRNLEN
-Apnod |Size_t |my_strnlen |NN const char *str|Size_t maxlen
+AipTd |Size_t |my_strnlen |NN const char *str|Size_t maxlen
#endif
#ifndef HAS_MKOSTEMP
-pno |int |my_mkostemp |NN char *templte|int flags
+pTo |int |my_mkostemp |NN char *templte|int flags
#endif
#ifndef HAS_MKSTEMP
-pno |int |my_mkstemp |NN char *templte
+pTo |int |my_mkstemp |NN char *templte
#endif
-APpdn |bool |isinfnan |NV nv
-p |bool |isinfnansv |NN SV *sv
+APpdT |bool |isinfnan |NV nv
+pd |bool |isinfnansv |NN SV *sv
#if !defined(HAS_SIGNBIT)
-AMdnoP |int |Perl_signbit |NV f
+AxdToP |int |Perl_signbit |NV f
#endif
: Used by B
-XEMop |void |emulate_cop_io |NN const COP *const c|NN SV *const sv
+XExop |void |emulate_cop_io |NN const COP *const c|NN SV *const sv
: Used by SvRX and SvRXOK
-XEMop |REGEXP *|get_re_arg|NULLOK SV *sv
+XExop |REGEXP *|get_re_arg|NULLOK SV *sv
-Aop |SV* |mro_get_private_data|NN struct mro_meta *const smeta \
+Aopdh |SV* |mro_get_private_data|NN struct mro_meta *const smeta \
|NN const struct mro_alg *const which
-Aop |SV* |mro_set_private_data|NN struct mro_meta *const smeta \
+Aopdh |SV* |mro_set_private_data|NN struct mro_meta *const smeta \
|NN const struct mro_alg *const which \
|NN SV *const data
Aop |const struct mro_alg *|mro_get_from_name|NN SV *name
-Aop |void |mro_register |NN const struct mro_alg *mro
+Aopd |void |mro_register |NN const struct mro_alg *mro
Aop |void |mro_set_mro |NN struct mro_meta *const meta \
|NN SV *const name
: Used in HvMROMETA(), which is public.
@@ -3201,13 +3477,13 @@ p |struct mro_meta* |mro_meta_dup |NN struct mro_meta* smeta|NN CLONE_PARAMS* pa
#endif
Apd |AV* |mro_get_linear_isa|NN HV* stash
#if defined(PERL_IN_MRO_C)
-sd |AV* |mro_get_linear_isa_dfs|NN HV* stash|U32 level
-s |void |mro_clean_isarev|NN HV * const isa \
+Sd |AV* |mro_get_linear_isa_dfs|NN HV* stash|U32 level
+S |void |mro_clean_isarev|NN HV * const isa \
|NN const char * const name \
|const STRLEN len \
|NULLOK HV * const exceptions \
|U32 hash|U32 flags
-s |void |mro_gather_and_rename|NN HV * const stashes \
+S |void |mro_gather_and_rename|NN HV * const stashes \
|NN HV * const seen_stashes \
|NULLOK HV *stash \
|NULLOK HV *oldstash \
@@ -3216,35 +3492,31 @@ s |void |mro_gather_and_rename|NN HV * const stashes \
: Used in hv.c, mg.c, pp.c, sv.c
pd |void |mro_isa_changed_in|NN HV* stash
Apd |void |mro_method_changed_in |NN HV* stash
-pdx |void |mro_package_moved |NULLOK HV * const stash|NULLOK HV * const oldstash|NN const GV * const gv|U32 flags
+pde |void |mro_package_moved |NULLOK HV * const stash|NULLOK HV * const oldstash|NN const GV * const gv|U32 flags
: Only used in perl.c
p |void |boot_core_mro
-Apon |void |sys_init |NN int* argc|NN char*** argv
-Apon |void |sys_init3 |NN int* argc|NN char*** argv|NN char*** env
-Apon |void |sys_term
-ApoM |const char *|cop_fetch_label|NN COP *const cop \
+ApoT |void |sys_init |NN int* argc|NN char*** argv
+ApoT |void |sys_init3 |NN int* argc|NN char*** argv|NN char*** env
+ApoT |void |sys_term
+Apxd |const char *|cop_fetch_label|NN COP *const cop \
|NULLOK STRLEN *len|NULLOK U32 *flags
: Only used in op.c and the perl compiler
-ApoM |void|cop_store_label \
+Apxd |void|cop_store_label \
|NN COP *const cop|NN const char *label|STRLEN len|U32 flags
-xpo |int |keyword_plugin_standard|NN char* keyword_ptr|STRLEN keyword_len|NN OP** op_ptr
+epo |int |keyword_plugin_standard|NN char* keyword_ptr|STRLEN keyword_len|NN OP** op_ptr
#if defined(USE_ITHREADS)
# if defined(PERL_IN_SV_C)
-s |void |unreferenced_to_tmp_stack|NN AV *const unreferenced
+S |void |unreferenced_to_tmp_stack|NN AV *const unreferenced
# endif
-ARnop |CLONE_PARAMS *|clone_params_new|NN PerlInterpreter *const from \
+ARTop |CLONE_PARAMS *|clone_params_new|NN PerlInterpreter *const from \
|NN PerlInterpreter *const to
-Anop |void |clone_params_del|NN CLONE_PARAMS *param
+ATop |void |clone_params_del|NN CLONE_PARAMS *param
#endif
: Used in perl.c and toke.c
-op |void |populate_isa |NN const char *name|STRLEN len|...
-
-: Used in keywords.c and toke.c
-Xop |bool |feature_is_enabled|NN const char *const name \
- |STRLEN namelen
+Fop |void |populate_isa |NN const char *name|STRLEN len|...
: Some static inline functions need predeclaration because they are used
: inside other static inline functions.
@@ -3255,32 +3527,33 @@ Ei |STRLEN |sv_or_pv_pos_u2b|NN SV *sv|NN const char *pv|STRLEN pos \
Ap |void |clear_defarray |NN AV* av|bool abandon
-ApM |void |leave_adjust_stacks|NN SV **from_sp|NN SV **to_sp \
+Apx |void |leave_adjust_stacks|NN SV **from_sp|NN SV **to_sp \
|U8 gimme|int filter
#ifndef PERL_NO_INLINE_FUNCTIONS
-AiM |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix
-AiM |void |cx_popblock|NN PERL_CONTEXT *cx
-AiM |void |cx_topblock|NN PERL_CONTEXT *cx
-AiM |void |cx_pushsub |NN PERL_CONTEXT *cx|NN CV *cv \
+Aixp |U8 |gimme_V |
+Aixp |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix
+Aixp |void |cx_popblock|NN PERL_CONTEXT *cx
+Aixp |void |cx_topblock|NN PERL_CONTEXT *cx
+Aixp |void |cx_pushsub |NN PERL_CONTEXT *cx|NN CV *cv \
|NULLOK OP *retop|bool hasargs
-AiM |void |cx_popsub_common|NN PERL_CONTEXT *cx
-AiM |void |cx_popsub_args |NN PERL_CONTEXT *cx
-AiM |void |cx_popsub |NN PERL_CONTEXT *cx
-AiM |void |cx_pushformat |NN PERL_CONTEXT *cx|NN CV *cv \
+Aixp |void |cx_popsub_common|NN PERL_CONTEXT *cx
+Aixp |void |cx_popsub_args |NN PERL_CONTEXT *cx
+Aixp |void |cx_popsub |NN PERL_CONTEXT *cx
+Aixp |void |cx_pushformat |NN PERL_CONTEXT *cx|NN CV *cv \
|NULLOK OP *retop|NULLOK GV *gv
-AiM |void |cx_popformat |NN PERL_CONTEXT *cx
-AiM |void |cx_pusheval |NN PERL_CONTEXT *cx \
+Aixp |void |cx_popformat |NN PERL_CONTEXT *cx
+Aixp |void |cx_pusheval |NN PERL_CONTEXT *cx \
|NULLOK OP *retop|NULLOK SV *namesv
-AiM |void |cx_popeval |NN PERL_CONTEXT *cx
-AiM |void |cx_pushloop_plain|NN PERL_CONTEXT *cx
-AiM |void |cx_pushloop_for |NN PERL_CONTEXT *cx \
+Aixp |void |cx_popeval |NN PERL_CONTEXT *cx
+Aixp |void |cx_pushloop_plain|NN PERL_CONTEXT *cx
+Aixp |void |cx_pushloop_for |NN PERL_CONTEXT *cx \
|NN void *itervarp|NULLOK SV *itersave
-AiM |void |cx_poploop |NN PERL_CONTEXT *cx
-AiM |void |cx_pushwhen |NN PERL_CONTEXT *cx
-AiM |void |cx_popwhen |NN PERL_CONTEXT *cx
-AiM |void |cx_pushgiven |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv
-AiM |void |cx_popgiven |NN PERL_CONTEXT *cx
+Aixp |void |cx_poploop |NN PERL_CONTEXT *cx
+Aixp |void |cx_pushwhen |NN PERL_CONTEXT *cx
+Aixp |void |cx_popwhen |NN PERL_CONTEXT *cx
+Aixp |void |cx_pushgiven |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv
+Aixp |void |cx_popgiven |NN PERL_CONTEXT *cx
#endif
#ifdef USE_DTRACE
diff --git a/gnu/usr.bin/perl/embed.h b/gnu/usr.bin/perl/embed.h
index 5346ec58613..182b12aa937 100644
--- a/gnu/usr.bin/perl/embed.h
+++ b/gnu/usr.bin/perl/embed.h
@@ -27,25 +27,20 @@
/* Hide global symbols */
#define Gv_AMupdate(a,b) Perl_Gv_AMupdate(aTHX_ a,b)
+#define SvAMAGIC_off Perl_SvAMAGIC_off
+#define SvAMAGIC_on Perl_SvAMAGIC_on
#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)
#define _is_uni_perl_idstart(a) Perl__is_uni_perl_idstart(aTHX_ a)
-#define _is_utf8_FOO(a,b,c,d,e,f,g,h) Perl__is_utf8_FOO(aTHX_ a,b,c,d,e,f,g,h)
-#define _is_utf8_FOO_with_len(a,b,c) Perl__is_utf8_FOO_with_len(aTHX_ a,b,c)
-#define _is_utf8_char_helper Perl__is_utf8_char_helper
-#define _is_utf8_idcont(a) Perl__is_utf8_idcont(aTHX_ a)
-#define _is_utf8_idstart(a) Perl__is_utf8_idstart(aTHX_ a)
-#define _is_utf8_mark(a) Perl__is_utf8_mark(aTHX_ a)
-#define _is_utf8_perl_idcont_with_len(a,b) Perl__is_utf8_perl_idcont_with_len(aTHX_ a,b)
-#define _is_utf8_perl_idstart_with_len(a,b) Perl__is_utf8_perl_idstart_with_len(aTHX_ a,b)
-#define _is_utf8_xidcont(a) Perl__is_utf8_xidcont(aTHX_ a)
-#define _is_utf8_xidstart(a) Perl__is_utf8_xidstart(aTHX_ a)
+#define _is_utf8_FOO(a,b,c) Perl__is_utf8_FOO(aTHX_ a,b,c)
+#define _is_utf8_perl_idcont(a,b) Perl__is_utf8_perl_idcont(aTHX_ a,b)
+#define _is_utf8_perl_idstart(a,b) Perl__is_utf8_perl_idstart(aTHX_ a,b)
#define _to_uni_fold_flags(a,b,c,d) Perl__to_uni_fold_flags(aTHX_ a,b,c,d)
-#define _to_utf8_fold_flags(a,b,c,d,e,f,g) Perl__to_utf8_fold_flags(aTHX_ a,b,c,d,e,f,g)
-#define _to_utf8_lower_flags(a,b,c,d,e,f,g) Perl__to_utf8_lower_flags(aTHX_ a,b,c,d,e,f,g)
-#define _to_utf8_title_flags(a,b,c,d,e,f,g) Perl__to_utf8_title_flags(aTHX_ a,b,c,d,e,f,g)
-#define _to_utf8_upper_flags(a,b,c,d,e,f,g) Perl__to_utf8_upper_flags(aTHX_ a,b,c,d,e,f,g)
+#define _to_utf8_fold_flags(a,b,c,d,e) Perl__to_utf8_fold_flags(aTHX_ a,b,c,d,e)
+#define _to_utf8_lower_flags(a,b,c,d,e) Perl__to_utf8_lower_flags(aTHX_ a,b,c,d,e)
+#define _to_utf8_title_flags(a,b,c,d,e) Perl__to_utf8_title_flags(aTHX_ a,b,c,d,e)
+#define _to_utf8_upper_flags(a,b,c,d,e) Perl__to_utf8_upper_flags(aTHX_ a,b,c,d,e)
#define _utf8n_to_uvchr_msgs_helper Perl__utf8n_to_uvchr_msgs_helper
#define amagic_call(a,b,c,d) Perl_amagic_call(aTHX_ a,b,c,d)
#define amagic_deref_call(a,b) Perl_amagic_deref_call(aTHX_ a,b)
@@ -64,7 +59,7 @@
#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) S_av_top_index(aTHX_ a)
+#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)
@@ -92,13 +87,17 @@
#define ck_warner_d Perl_ck_warner_d
#endif
#define clear_defarray(a,b) Perl_clear_defarray(aTHX_ a,b)
+#define cop_fetch_label(a,b,c) Perl_cop_fetch_label(aTHX_ a,b,c)
+#define cop_store_label(a,b,c,d) Perl_cop_store_label(aTHX_ a,b,c,d)
#ifndef PERL_IMPLICIT_CONTEXT
#define croak Perl_croak
#endif
-#define croak_memory_wrap S_croak_memory_wrap
+#define croak_memory_wrap Perl_croak_memory_wrap
#define croak_no_modify Perl_croak_no_modify
#define croak_sv(a) Perl_croak_sv(aTHX_ a)
#define croak_xs_usage Perl_croak_xs_usage
+#define csighandler1 Perl_csighandler1
+#define csighandler3 Perl_csighandler3
#ifndef NO_MATHOMS
#define custom_op_desc(a) Perl_custom_op_desc(aTHX_ a)
#endif
@@ -189,13 +188,11 @@
#define getcwd_sv(a) Perl_getcwd_sv(aTHX_ a)
#define gp_free(a) Perl_gp_free(aTHX_ a)
#define gp_ref(a) Perl_gp_ref(aTHX_ a)
-#define grok_bin(a,b,c,d) Perl_grok_bin(aTHX_ a,b,c,d)
-#define grok_hex(a,b,c,d) Perl_grok_hex(aTHX_ a,b,c,d)
+#define grok_bin_oct_hex(a,b,c,d,e,f,g) Perl_grok_bin_oct_hex(aTHX_ a,b,c,d,e,f,g)
#define grok_infnan(a,b) Perl_grok_infnan(aTHX_ a,b)
#define grok_number(a,b,c) Perl_grok_number(aTHX_ a,b,c)
#define grok_number_flags(a,b,c,d) Perl_grok_number_flags(aTHX_ a,b,c,d)
#define grok_numeric_radix(a,b) Perl_grok_numeric_radix(aTHX_ a,b)
-#define grok_oct(a,b,c,d) Perl_grok_oct(aTHX_ a,b,c,d)
#define gv_add_by_type(a,b) Perl_gv_add_by_type(aTHX_ a,b)
#define gv_autoload_pv(a,b,c) Perl_gv_autoload_pv(aTHX_ a,b,c)
#define gv_autoload_pvn(a,b,c,d) Perl_gv_autoload_pvn(aTHX_ a,b,c,d)
@@ -259,184 +256,23 @@
#define init_stacks() Perl_init_stacks(aTHX)
#define init_tm(a) Perl_init_tm(aTHX_ a)
#define intro_my() Perl_intro_my(aTHX)
-#ifndef NO_MATHOMS
-#define isALNUM_lazy(a) Perl_isALNUM_lazy(aTHX_ a)
-#endif
-#define isC9_STRICT_UTF8_CHAR S_isC9_STRICT_UTF8_CHAR
-#ifndef NO_MATHOMS
-#define isIDFIRST_lazy(a) Perl_isIDFIRST_lazy(aTHX_ a)
-#endif
-#define isSTRICT_UTF8_CHAR S_isSTRICT_UTF8_CHAR
-#define isUTF8_CHAR S_isUTF8_CHAR
-#define is_c9strict_utf8_string_loclen S_is_c9strict_utf8_string_loclen
+#define isC9_STRICT_UTF8_CHAR Perl_isC9_STRICT_UTF8_CHAR
+#define isSTRICT_UTF8_CHAR Perl_isSTRICT_UTF8_CHAR
+#define isUTF8_CHAR Perl_isUTF8_CHAR
+#define is_c9strict_utf8_string_loclen Perl_is_c9strict_utf8_string_loclen
#define is_lvalue_sub() Perl_is_lvalue_sub(aTHX)
-#define is_safe_syscall(a,b,c,d) S_is_safe_syscall(aTHX_ a,b,c,d)
-#define is_strict_utf8_string_loclen S_is_strict_utf8_string_loclen
-#ifndef NO_MATHOMS
-#define is_uni_alnum(a) Perl_is_uni_alnum(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_alnum_lc(a) Perl_is_uni_alnum_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_alnumc(a) Perl_is_uni_alnumc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_alnumc_lc(a) Perl_is_uni_alnumc_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_alpha(a) Perl_is_uni_alpha(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_alpha_lc(a) Perl_is_uni_alpha_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_ascii(a) Perl_is_uni_ascii(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_ascii_lc(a) Perl_is_uni_ascii_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_blank(a) Perl_is_uni_blank(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_blank_lc(a) Perl_is_uni_blank_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_cntrl(a) Perl_is_uni_cntrl(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_cntrl_lc(a) Perl_is_uni_cntrl_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_digit(a) Perl_is_uni_digit(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_digit_lc(a) Perl_is_uni_digit_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_graph(a) Perl_is_uni_graph(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_graph_lc(a) Perl_is_uni_graph_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_idfirst(a) Perl_is_uni_idfirst(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_idfirst_lc(a) Perl_is_uni_idfirst_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_lower(a) Perl_is_uni_lower(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_lower_lc(a) Perl_is_uni_lower_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_print(a) Perl_is_uni_print(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_print_lc(a) Perl_is_uni_print_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_punct(a) Perl_is_uni_punct(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_punct_lc(a) Perl_is_uni_punct_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_space(a) Perl_is_uni_space(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_space_lc(a) Perl_is_uni_space_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_upper(a) Perl_is_uni_upper(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_upper_lc(a) Perl_is_uni_upper_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_xdigit(a) Perl_is_uni_xdigit(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_uni_xdigit_lc(a) Perl_is_uni_xdigit_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_alnum(a) Perl_is_utf8_alnum(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_alnumc(a) Perl_is_utf8_alnumc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_alpha(a) Perl_is_utf8_alpha(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_ascii(a) Perl_is_utf8_ascii(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_blank(a) Perl_is_utf8_blank(aTHX_ a)
-#endif
+#define is_safe_syscall(a,b,c,d) Perl_is_safe_syscall(aTHX_ a,b,c,d)
+#define is_strict_utf8_string_loclen Perl_is_strict_utf8_string_loclen
#ifndef NO_MATHOMS
#define is_utf8_char Perl_is_utf8_char
#endif
-#ifndef NO_MATHOMS
-#define is_utf8_cntrl(a) Perl_is_utf8_cntrl(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_digit(a) Perl_is_utf8_digit(aTHX_ a)
-#endif
-#define is_utf8_fixed_width_buf_loclen_flags S_is_utf8_fixed_width_buf_loclen_flags
-#ifndef NO_MATHOMS
-#define is_utf8_graph(a) Perl_is_utf8_graph(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_idcont(a) Perl_is_utf8_idcont(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_idfirst(a) Perl_is_utf8_idfirst(aTHX_ a)
-#endif
-#define is_utf8_invariant_string_loc S_is_utf8_invariant_string_loc
-#ifndef NO_MATHOMS
-#define is_utf8_lower(a) Perl_is_utf8_lower(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_mark(a) Perl_is_utf8_mark(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_perl_space(a) Perl_is_utf8_perl_space(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_perl_word(a) Perl_is_utf8_perl_word(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_posix_digit(a) Perl_is_utf8_posix_digit(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_print(a) Perl_is_utf8_print(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_punct(a) Perl_is_utf8_punct(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_space(a) Perl_is_utf8_space(aTHX_ a)
-#endif
-#define is_utf8_string_flags S_is_utf8_string_flags
+#define is_utf8_char_helper Perl_is_utf8_char_helper
+#define is_utf8_fixed_width_buf_loclen_flags Perl_is_utf8_fixed_width_buf_loclen_flags
+#define is_utf8_invariant_string_loc Perl_is_utf8_invariant_string_loc
+#define is_utf8_string_flags Perl_is_utf8_string_flags
#define is_utf8_string_loclen Perl_is_utf8_string_loclen
-#define is_utf8_string_loclen_flags S_is_utf8_string_loclen_flags
-#ifndef NO_MATHOMS
-#define is_utf8_upper(a) Perl_is_utf8_upper(aTHX_ a)
-#endif
-#define is_utf8_valid_partial_char_flags S_is_utf8_valid_partial_char_flags
-#ifndef NO_MATHOMS
-#define is_utf8_xdigit(a) Perl_is_utf8_xdigit(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_xidcont(a) Perl_is_utf8_xidcont(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
-#define is_utf8_xidfirst(a) Perl_is_utf8_xidfirst(aTHX_ a)
-#endif
+#define is_utf8_string_loclen_flags Perl_is_utf8_string_loclen_flags
+#define is_utf8_valid_partial_char_flags Perl_is_utf8_valid_partial_char_flags
#define isinfnan Perl_isinfnan
#define leave_adjust_stacks(a,b,c,d) Perl_leave_adjust_stacks(aTHX_ a,b,c,d)
#define leave_scope(a) Perl_leave_scope(aTHX_ a)
@@ -477,6 +313,7 @@
#define mg_size(a) Perl_mg_size(aTHX_ a)
#define mini_mktime Perl_mini_mktime
#define moreswitches(a) Perl_moreswitches(aTHX_ a)
+#define mortal_getenv Perl_mortal_getenv
#define mro_get_linear_isa(a) Perl_mro_get_linear_isa(aTHX_ a)
#define mro_method_changed_in(a) Perl_mro_method_changed_in(aTHX_ a)
#define my_atof(a) Perl_my_atof(aTHX_ a)
@@ -573,18 +410,12 @@
#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)
#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)
@@ -600,7 +431,9 @@
#define parse_label(a) Perl_parse_label(aTHX_ a)
#define parse_listexpr(a) Perl_parse_listexpr(aTHX_ a)
#define parse_stmtseq(a) Perl_parse_stmtseq(aTHX_ a)
+#define parse_subsignature(a) Perl_parse_subsignature(aTHX_ a)
#define parse_termexpr(a) Perl_parse_termexpr(aTHX_ a)
+#define perly_sighandler Perl_perly_sighandler
#define pmop_dump(a) Perl_pmop_dump(aTHX_ a)
#define pop_scope() Perl_pop_scope(aTHX)
#define pregcomp(a,b) Perl_pregcomp(aTHX_ a,b)
@@ -724,8 +557,8 @@
#define sv_2mortal(a) Perl_sv_2mortal(aTHX_ a)
#define sv_2nv_flags(a,b) Perl_sv_2nv_flags(aTHX_ a,b)
#define sv_2pv_flags(a,b,c) Perl_sv_2pv_flags(aTHX_ a,b,c)
-#define sv_2pvbyte(a,b) Perl_sv_2pvbyte(aTHX_ a,b)
-#define sv_2pvutf8(a,b) Perl_sv_2pvutf8(aTHX_ a,b)
+#define sv_2pvbyte_flags(a,b,c) Perl_sv_2pvbyte_flags(aTHX_ a,b,c)
+#define sv_2pvutf8_flags(a,b,c) Perl_sv_2pvutf8_flags(aTHX_ a,b,c)
#define sv_2uv_flags(a,b) Perl_sv_2uv_flags(aTHX_ a,b)
#define sv_backoff Perl_sv_backoff
#define sv_bless(a,b) Perl_sv_bless(aTHX_ a,b)
@@ -766,6 +599,7 @@
#define sv_inc_nomg(a) Perl_sv_inc_nomg(aTHX_ a)
#define sv_insert_flags(a,b,c,d,e,f) Perl_sv_insert_flags(aTHX_ a,b,c,d,e,f)
#define sv_isa(a,b) Perl_sv_isa(aTHX_ a,b)
+#define sv_isa_sv(a,b) Perl_sv_isa_sv(aTHX_ a,b)
#define sv_isobject(a) Perl_sv_isobject(aTHX_ a)
#ifndef NO_MATHOMS
#define sv_iv(a) Perl_sv_iv(aTHX_ a)
@@ -774,8 +608,12 @@
#define sv_len_utf8(a) Perl_sv_len_utf8(aTHX_ a)
#define sv_magic(a,b,c,d,e) Perl_sv_magic(aTHX_ a,b,c,d,e)
#define sv_magicext(a,b,c,d,e,f) Perl_sv_magicext(aTHX_ a,b,c,d,e,f)
+#define sv_mortalcopy_flags(a,b) Perl_sv_mortalcopy_flags(aTHX_ a,b)
#define sv_newmortal() Perl_sv_newmortal(aTHX)
#define sv_newref(a) Perl_sv_newref(aTHX_ a)
+#ifndef NO_MATHOMS
+#define sv_nolocking(a) Perl_sv_nolocking(aTHX_ a)
+#endif
#define sv_nosharing(a) Perl_sv_nosharing(aTHX_ a)
#ifndef NO_MATHOMS
#define sv_nounlocking(a) Perl_sv_nounlocking(aTHX_ a)
@@ -851,7 +689,7 @@
#define sv_upgrade(a,b) Perl_sv_upgrade(aTHX_ a,b)
#define sv_usepvn_flags(a,b,c,d) Perl_sv_usepvn_flags(aTHX_ a,b,c,d)
#define sv_utf8_decode(a) Perl_sv_utf8_decode(aTHX_ a)
-#define sv_utf8_downgrade(a,b) Perl_sv_utf8_downgrade(aTHX_ a,b)
+#define sv_utf8_downgrade_flags(a,b,c) Perl_sv_utf8_downgrade_flags(aTHX_ a,b,c)
#define sv_utf8_encode(a) Perl_sv_utf8_encode(aTHX_ a)
#define sv_utf8_upgrade_flags_grow(a,b,c) Perl_sv_utf8_upgrade_flags_grow(aTHX_ a,b,c)
#ifndef NO_MATHOMS
@@ -871,18 +709,9 @@
#define thread_locale_init Perl_thread_locale_init
#define thread_locale_term Perl_thread_locale_term
#define to_uni_lower(a,b,c) Perl_to_uni_lower(aTHX_ a,b,c)
-#ifndef NO_MATHOMS
-#define to_uni_lower_lc(a) Perl_to_uni_lower_lc(aTHX_ a)
-#endif
#define to_uni_title(a,b,c) Perl_to_uni_title(aTHX_ a,b,c)
-#ifndef NO_MATHOMS
-#define to_uni_title_lc(a) Perl_to_uni_title_lc(aTHX_ a)
-#endif
#define to_uni_upper(a,b,c) Perl_to_uni_upper(aTHX_ a,b,c)
#ifndef NO_MATHOMS
-#define to_uni_upper_lc(a) Perl_to_uni_upper_lc(aTHX_ a)
-#endif
-#ifndef NO_MATHOMS
#define unpack_str(a,b,c,d,e,f,g,h) Perl_unpack_str(aTHX_ a,b,c,d,e,f,g,h)
#endif
#define unpackstring(a,b,c,d,e) Perl_unpackstring(aTHX_ a,b,c,d,e)
@@ -895,16 +724,23 @@
#define utf8_hop_safe Perl_utf8_hop_safe
#define utf8_length(a,b) Perl_utf8_length(aTHX_ a,b)
#define utf8_to_bytes(a,b) Perl_utf8_to_bytes(aTHX_ a,b)
+#ifndef NO_MATHOMS
#define utf8_to_uvchr(a,b) Perl_utf8_to_uvchr(aTHX_ a,b)
+#endif
+#define utf8_to_uvchr_buf_helper(a,b,c) Perl_utf8_to_uvchr_buf_helper(aTHX_ a,b,c)
#ifndef NO_MATHOMS
#define utf8_to_uvuni(a,b) Perl_utf8_to_uvuni(aTHX_ a,b)
#endif
#define utf8_to_uvuni_buf(a,b,c) Perl_utf8_to_uvuni_buf(aTHX_ a,b,c)
-#define utf8n_to_uvchr_msgs S_utf8n_to_uvchr_msgs
+#define utf8n_to_uvchr_msgs Perl_utf8n_to_uvchr_msgs
+#ifndef NO_MATHOMS
#define utf8n_to_uvuni(a,b,c,d) Perl_utf8n_to_uvuni(aTHX_ a,b,c,d)
+#endif
#define uvoffuni_to_utf8_flags_msgs(a,b,c,d) Perl_uvoffuni_to_utf8_flags_msgs(aTHX_ a,b,c,d)
#define uvuni_to_utf8(a,b) Perl_uvuni_to_utf8(aTHX_ a,b)
+#ifndef NO_MATHOMS
#define uvuni_to_utf8_flags(a,b,c) Perl_uvuni_to_utf8_flags(aTHX_ a,b,c)
+#endif
#define valid_utf8_to_uvchr Perl_valid_utf8_to_uvchr
#ifndef NO_MATHOMS
#define valid_utf8_to_uvuni(a,b) Perl_valid_utf8_to_uvuni(aTHX_ a,b)
@@ -934,14 +770,20 @@
#define whichsig_sv(a) Perl_whichsig_sv(aTHX_ a)
#define wrap_keyword_plugin(a,b) Perl_wrap_keyword_plugin(aTHX_ a,b)
#define wrap_op_checker(a,b,c) Perl_wrap_op_checker(aTHX_ a,b,c)
-#if !(defined(HAS_MEMMEM))
-#define ninstr Perl_ninstr
-#endif
-#if !(defined(HAS_SIGACTION) && defined(SA_SIGINFO))
+#if !(defined(PERL_USE_3ARG_SIGHANDLER))
#define csighandler Perl_csighandler
#endif
#if !defined(EBCDIC)
-#define _variant_byte_number S__variant_byte_number
+#define variant_byte_number Perl_variant_byte_number
+#endif
+#if !defined(HAS_STRLCAT)
+#define my_strlcat Perl_my_strlcat
+#endif
+#if !defined(HAS_STRLCPY)
+#define my_strlcpy Perl_my_strlcpy
+#endif
+#if !defined(HAS_STRNLEN)
+#define my_strnlen Perl_my_strnlen
#endif
#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
#define my_chsize(a,b) Perl_my_chsize(aTHX_ a,b)
@@ -951,32 +793,30 @@
#define my_popen(a,b) Perl_my_popen(aTHX_ a,b)
#endif
#if !defined(PERL_NO_INLINE_FUNCTIONS)
-#define cx_popblock(a) S_cx_popblock(aTHX_ a)
-#define cx_popeval(a) S_cx_popeval(aTHX_ a)
-#define cx_popformat(a) S_cx_popformat(aTHX_ a)
-#define cx_popgiven(a) S_cx_popgiven(aTHX_ a)
-#define cx_poploop(a) S_cx_poploop(aTHX_ a)
-#define cx_popsub(a) S_cx_popsub(aTHX_ a)
-#define cx_popsub_args(a) S_cx_popsub_args(aTHX_ a)
-#define cx_popsub_common(a) S_cx_popsub_common(aTHX_ a)
-#define cx_popwhen(a) S_cx_popwhen(aTHX_ a)
-#define cx_pushblock(a,b,c,d) S_cx_pushblock(aTHX_ a,b,c,d)
-#define cx_pusheval(a,b,c) S_cx_pusheval(aTHX_ a,b,c)
-#define cx_pushformat(a,b,c,d) S_cx_pushformat(aTHX_ a,b,c,d)
-#define cx_pushgiven(a,b) S_cx_pushgiven(aTHX_ a,b)
-#define cx_pushloop_for(a,b,c) S_cx_pushloop_for(aTHX_ a,b,c)
-#define cx_pushloop_plain(a) S_cx_pushloop_plain(aTHX_ a)
-#define cx_pushsub(a,b,c,d) S_cx_pushsub(aTHX_ a,b,c,d)
-#define cx_pushwhen(a) S_cx_pushwhen(aTHX_ a)
-#define cx_topblock(a) S_cx_topblock(aTHX_ a)
+#define cx_popblock(a) Perl_cx_popblock(aTHX_ a)
+#define cx_popeval(a) Perl_cx_popeval(aTHX_ a)
+#define cx_popformat(a) Perl_cx_popformat(aTHX_ a)
+#define cx_popgiven(a) Perl_cx_popgiven(aTHX_ a)
+#define cx_poploop(a) Perl_cx_poploop(aTHX_ a)
+#define cx_popsub(a) Perl_cx_popsub(aTHX_ a)
+#define cx_popsub_args(a) Perl_cx_popsub_args(aTHX_ a)
+#define cx_popsub_common(a) Perl_cx_popsub_common(aTHX_ a)
+#define cx_popwhen(a) Perl_cx_popwhen(aTHX_ a)
+#define cx_pushblock(a,b,c,d) Perl_cx_pushblock(aTHX_ a,b,c,d)
+#define cx_pusheval(a,b,c) Perl_cx_pusheval(aTHX_ a,b,c)
+#define cx_pushformat(a,b,c,d) Perl_cx_pushformat(aTHX_ a,b,c,d)
+#define cx_pushgiven(a,b) Perl_cx_pushgiven(aTHX_ a,b)
+#define cx_pushloop_for(a,b,c) Perl_cx_pushloop_for(aTHX_ a,b,c)
+#define cx_pushloop_plain(a) Perl_cx_pushloop_plain(aTHX_ a)
+#define cx_pushsub(a,b,c,d) Perl_cx_pushsub(aTHX_ a,b,c,d)
+#define cx_pushwhen(a) Perl_cx_pushwhen(aTHX_ a)
+#define cx_topblock(a) Perl_cx_topblock(aTHX_ a)
+#define gimme_V() Perl_gimme_V(aTHX)
#endif
#if defined(DEBUGGING)
#define pad_setsv(a,b) Perl_pad_setsv(aTHX_ a,b)
#define pad_sv(a) Perl_pad_sv(aTHX_ a)
#endif
-#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
-#define csighandler Perl_csighandler
-#endif
#if defined(HAVE_INTERP_INTERN)
#define sys_intern_clear() Perl_sys_intern_clear(aTHX)
#define sys_intern_init() Perl_sys_intern_init(aTHX)
@@ -1014,6 +854,9 @@
#define warn_nocontext Perl_warn_nocontext
#define warner_nocontext Perl_warner_nocontext
#endif
+#if defined(PERL_USE_3ARG_SIGHANDLER)
+#define csighandler Perl_csighandler
+#endif
#if defined(UNLINK_ALL_VERSIONS)
#define unlnk(a) Perl_unlnk(aTHX_ a)
#endif
@@ -1071,10 +914,6 @@
#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(USE_QUADMATH)
-#define quadmath_format_needed Perl_quadmath_format_needed
-#define quadmath_format_single Perl_quadmath_format_single
-#endif
#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS)
#define do_aspawn(a,b,c) Perl_do_aspawn(aTHX_ a,b,c)
#define do_spawn(a) Perl_do_spawn(aTHX_ a)
@@ -1083,12 +922,18 @@
#if defined(PERL_CORE) || defined(PERL_EXT)
#define _byte_dump_string(a,b,c) Perl__byte_dump_string(aTHX_ a,b,c)
#define _inverse_folds(a,b,c) Perl__inverse_folds(aTHX_ a,b,c)
-#define append_utf8_from_native_byte S_append_utf8_from_native_byte
+#define append_utf8_from_native_byte Perl_append_utf8_from_native_byte
#define av_reify(a) Perl_av_reify(aTHX_ a)
+#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 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
+#define get_prop_definition(a) Perl_get_prop_definition(aTHX_ a)
+#define get_prop_values Perl_get_prop_values
#define grok_atoUV Perl_grok_atoUV
+#define load_charnames(a,b,c,d) Perl_load_charnames(aTHX_ a,b,c,d)
#define mg_find_mglob(a) Perl_mg_find_mglob(aTHX_ a)
#define multiconcat_stringify(a) Perl_multiconcat_stringify(aTHX_ a)
#define multideref_stringify(a,b) Perl_multideref_stringify(aTHX_ a,b)
@@ -1106,9 +951,7 @@
#define scan_word(a,b,c,d,e) Perl_scan_word(aTHX_ a,b,c,d,e)
#define skipspace_flags(a,b) Perl_skipspace_flags(aTHX_ a,b)
#define sv_magicext_mglob(a) Perl_sv_magicext_mglob(aTHX_ a)
-#define sv_only_taint_gmagic S_sv_only_taint_gmagic
-#define swash_fetch(a,b,c) Perl_swash_fetch(aTHX_ a,b,c)
-#define swash_init(a,b,c,d,e) Perl_swash_init(aTHX_ a,b,c,d,e)
+#define sv_only_taint_gmagic Perl_sv_only_taint_gmagic
#define utf16_to_utf8(a,b,c,d) Perl_utf16_to_utf8(aTHX_ a,b,c,d)
#define utf16_to_utf8_reversed(a,b,c,d) Perl_utf16_to_utf8_reversed(aTHX_ a,b,c,d)
#define validate_proto(a,b,c,d) Perl_validate_proto(aTHX_ a,b,c,d)
@@ -1117,20 +960,26 @@
# if ! defined(HAS_MEMRCHR) && (defined(PERL_CORE) || defined(PERL_EXT))
#define my_memrchr S_my_memrchr
# endif
+# if !(!defined(PERL_EXT_RE_BUILD))
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
+#define get_re_gclass_nonbitmap_data(a,b,c,d,e,f) Perl_get_re_gclass_nonbitmap_data(aTHX_ a,b,c,d,e,f)
+# endif
+# endif
# if !defined(PERL_EXT_RE_BUILD)
# if defined(PERL_IN_REGCOMP_C)
#define _append_range_to_invlist(a,b,c) S__append_range_to_invlist(aTHX_ a,b,c)
#define _invlist_array_init S__invlist_array_init
#define get_invlist_previous_index_addr S_get_invlist_previous_index_addr
#define invlist_clear(a) S_invlist_clear(aTHX_ a)
-#define invlist_extend(a,b) S_invlist_extend(aTHX_ a,b)
#define invlist_max S_invlist_max
#define invlist_previous_index S_invlist_previous_index
#define invlist_replace_list_destroys_src(a,b) S_invlist_replace_list_destroys_src(aTHX_ a,b)
-#define invlist_set_len(a,b,c) S_invlist_set_len(aTHX_ a,b,c)
#define invlist_set_previous_index S_invlist_set_previous_index
#define invlist_trim S_invlist_trim
# endif
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
+#define get_regclass_nonbitmap_data(a,b,c,d,e,f) Perl_get_regclass_nonbitmap_data(aTHX_ a,b,c,d,e,f)
+# endif
# endif
# if defined(DEBUGGING)
# if defined(PERL_IN_REGCOMP_C)
@@ -1138,7 +987,7 @@
#define dump_trie_interim_list(a,b,c,d,e) S_dump_trie_interim_list(aTHX_ a,b,c,d,e)
#define dump_trie_interim_table(a,b,c,d,e) S_dump_trie_interim_table(aTHX_ a,b,c,d,e)
#define dumpuntil(a,b,c,d,e,f,g,h) S_dumpuntil(aTHX_ a,b,c,d,e,f,g,h)
-#define put_charclass_bitmap_innards(a,b,c,d,e,f) S_put_charclass_bitmap_innards(aTHX_ a,b,c,d,e,f)
+#define put_charclass_bitmap_innards(a,b,c,d,e,f,g) S_put_charclass_bitmap_innards(aTHX_ a,b,c,d,e,f,g)
#define put_charclass_bitmap_innards_common(a,b,c,d,e,f) S_put_charclass_bitmap_innards_common(aTHX_ a,b,c,d,e,f)
#define put_charclass_bitmap_innards_invlist(a,b) S_put_charclass_bitmap_innards_invlist(aTHX_ a,b)
#define put_code_point(a,b) S_put_code_point(aTHX_ a,b)
@@ -1167,46 +1016,47 @@
#define sv_setsv_cow(a,b) Perl_sv_setsv_cow(aTHX_ a,b)
# endif
# if defined(PERL_CORE) || defined (PERL_EXT)
-#define is_utf8_non_invariant_string S_is_utf8_non_invariant_string
+#define is_utf8_non_invariant_string Perl_is_utf8_non_invariant_string
#define sv_or_pv_pos_u2b(a,b,c,d) S_sv_or_pv_pos_u2b(aTHX_ a,b,c,d)
# endif
# if defined(PERL_CORE) || defined(PERL_EXT)
#define isSCRIPT_RUN(a,b,c) Perl_isSCRIPT_RUN(aTHX_ a,b,c)
#define variant_under_utf8_count S_variant_under_utf8_count
# endif
+# if defined(PERL_IN_GV_C) || defined(PERL_IN_UNIVERSAL_C)
+#define gv_stashsvpvn_cached(a,b,c,d) Perl_gv_stashsvpvn_cached(aTHX_ a,b,c,d)
+# endif
# if defined(PERL_IN_REGCOMP_C)
-#define _make_exactf_invlist(a,b) S__make_exactf_invlist(aTHX_ a,b)
#define add_above_Latin1_folds(a,b,c) S_add_above_Latin1_folds(aTHX_ a,b,c)
-#define add_cp_to_invlist(a,b) S_add_cp_to_invlist(aTHX_ a,b)
#define add_data S_add_data
#define add_multi_match(a,b,c) S_add_multi_match(aTHX_ a,b,c)
#define change_engine_size(a,b) S_change_engine_size(aTHX_ a,b)
-#define cntrl_to_mnemonic S_cntrl_to_mnemonic
+#define compile_wildcard(a,b,c) S_compile_wildcard(aTHX_ a,b,c)
#define compute_EXACTish S_compute_EXACTish
#define construct_ahocorasick_from_trie(a,b,c) S_construct_ahocorasick_from_trie(aTHX_ a,b,c)
#define edit_distance S_edit_distance
+#define execute_wildcard(a,b,c,d,e,f,g) S_execute_wildcard(aTHX_ a,b,c,d,e,f,g)
+#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_invlist_iter_addr S_get_invlist_iter_addr
#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)
#define handle_possible_posix(a,b,c,d,e) S_handle_possible_posix(aTHX_ a,b,c,d,e)
#define handle_regex_sets(a,b,c,d,e) S_handle_regex_sets(aTHX_ a,b,c,d,e)
-#define handle_user_defined_property(a,b,c,d,e,f,g,h,i,j) Perl_handle_user_defined_property(aTHX_ a,b,c,d,e,f,g,h,i,j)
+#define handle_user_defined_property(a,b,c,d,e,f,g,h,i,j) S_handle_user_defined_property(aTHX_ a,b,c,d,e,f,g,h,i,j)
#define invlist_contents(a,b) S_invlist_contents(aTHX_ a,b)
-#define invlist_highest S_invlist_highest
#define invlist_is_iterating S_invlist_is_iterating
-#define invlist_iterfinish S_invlist_iterfinish
-#define invlist_iterinit S_invlist_iterinit
-#define invlist_iternext S_invlist_iternext
+#define invlist_lowest S_invlist_lowest
#define is_ssc_worth_it S_is_ssc_worth_it
#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)
-#define parse_uniprop_string(a,b,c,d,e,f,g,h,i) Perl_parse_uniprop_string(aTHX_ a,b,c,d,e,f,g,h,i)
+#define parse_uniprop_string(a,b,c,d,e,f,g,h,i,j) S_parse_uniprop_string(aTHX_ a,b,c,d,e,f,g,h,i,j)
#define populate_ANYOF_from_invlist(a,b) S_populate_ANYOF_from_invlist(aTHX_ a,b)
#define rck_elide_nothing(a) S_rck_elide_nothing(aTHX_ a)
#define reg(a,b,c,d) S_reg(aTHX_ a,b,c,d)
@@ -1222,6 +1072,7 @@
#define reginsert(a,b,c,d) S_reginsert(aTHX_ a,b,c,d)
#define regnode_guts(a,b,c,d) S_regnode_guts(aTHX_ a,b,c,d)
#define regpiece(a,b,c) S_regpiece(aTHX_ a,b,c)
+#define regpnode(a,b,c) S_regpnode(aTHX_ a,b,c)
#define regtail(a,b,c,d) S_regtail(aTHX_ a,b,c,d)
#define scan_commit(a,b,c,d) S_scan_commit(aTHX_ a,b,c,d)
#define set_ANYOF_arg(a,b,c,d,e) S_set_ANYOF_arg(aTHX_ a,b,c,d,e)
@@ -1241,21 +1092,52 @@
#define ssc_union(a,b,c) S_ssc_union(aTHX_ a,b,c)
#define study_chunk(a,b,c,d,e,f,g,h,i,j,k,l) S_study_chunk(aTHX_ a,b,c,d,e,f,g,h,i,j,k,l)
# endif
-# if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C)
+# if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C) || defined(PERL_IN_OP_C)
#define _invlist_dump(a,b,c,d) Perl__invlist_dump(aTHX_ a,b,c,d)
# endif
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DOOP_C) || defined(PERL_IN_OP_C)
+#define add_cp_to_invlist(a,b) S_add_cp_to_invlist(aTHX_ a,b)
+#define invlist_extend(a,b) S_invlist_extend(aTHX_ a,b)
+#define invlist_highest S_invlist_highest
+#define invlist_set_len(a,b,c) S_invlist_set_len(aTHX_ a,b,c)
+# endif
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DOOP_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_UTF8_C)
+#define _add_range_to_invlist(a,b,c) Perl__add_range_to_invlist(aTHX_ a,b,c)
+#define _invlist_intersection_maybe_complement_2nd(a,b,c,d) Perl__invlist_intersection_maybe_complement_2nd(aTHX_ a,b,c,d)
+#define _invlist_invert(a) Perl__invlist_invert(aTHX_ a)
+#define _invlist_union_maybe_complement_2nd(a,b,c,d) Perl__invlist_union_maybe_complement_2nd(aTHX_ a,b,c,d)
+#define _new_invlist(a) Perl__new_invlist(aTHX_ a)
+#define _setup_canned_invlist(a,b,c) Perl__setup_canned_invlist(aTHX_ a,b,c)
+# endif
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DQUOTE_C) || defined(PERL_IN_TOKE_C)
+#define form_alien_digit_msg(a,b,c,d,e,f) Perl_form_alien_digit_msg(aTHX_ a,b,c,d,e,f)
+#define grok_bslash_c(a,b,c,d) Perl_grok_bslash_c(aTHX_ a,b,c,d)
+#define grok_bslash_o(a,b,c,d,e,f,g,h) Perl_grok_bslash_o(aTHX_ a,b,c,d,e,f,g,h)
+#define grok_bslash_x(a,b,c,d,e,f,g,h) Perl_grok_bslash_x(aTHX_ a,b,c,d,e,f,g,h)
+# endif
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DQUOTE_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C)
+#define form_cp_too_large_msg(a,b,c,d) Perl_form_cp_too_large_msg(aTHX_ a,b,c,d)
+# endif
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C)
+#define get_invlist_iter_addr S_get_invlist_iter_addr
+#define invlist_iterfinish S_invlist_iterfinish
+#define invlist_iterinit S_invlist_iterinit
+#define invlist_iternext S_invlist_iternext
+# endif
# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PERL_C) || defined(PERL_IN_UTF8_C)
#define _invlistEQ(a,b,c) Perl__invlistEQ(aTHX_ a,b,c)
#define _new_invlist_C_array(a) Perl__new_invlist_C_array(aTHX_ a)
# endif
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UNIVERSAL_C)
+#define get_regex_charset_name S_get_regex_charset_name
+# endif
# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-#define _get_regclass_nonbitmap_data(a,b,c,d,e,f) Perl__get_regclass_nonbitmap_data(aTHX_ a,b,c,d,e,f)
#ifndef PERL_IMPLICIT_CONTEXT
#define re_printf Perl_re_printf
#endif
#define regprop(a,b,c,d,e) Perl_regprop(aTHX_ a,b,c,d,e)
# endif
-# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_PP_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C) || defined(PERL_IN_DOOP_C)
#define _invlist_contains_cp S__invlist_contains_cp
#define _invlist_len S__invlist_len
#define _invlist_search Perl__invlist_search
@@ -1263,24 +1145,18 @@
#define invlist_array S_invlist_array
#define is_invlist S_is_invlist
# endif
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C)
+#define is_grapheme(a,b,c,d) Perl_is_grapheme(aTHX_ a,b,c,d)
+# endif
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
+#define _to_fold_latin1 Perl__to_fold_latin1
+# endif
# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_SV_C)
#define invlist_clone(a,b) Perl_invlist_clone(aTHX_ a,b)
# endif
-# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_DQUOTE_C)
-#define form_short_octal_warning(a,b) S_form_short_octal_warning(aTHX_ a,b)
-#define grok_bslash_c(a,b) Perl_grok_bslash_c(aTHX_ a,b)
-#define grok_bslash_o(a,b,c,d,e,f,g,h) Perl_grok_bslash_o(aTHX_ a,b,c,d,e,f,g,h)
-#define grok_bslash_x(a,b,c,d,e,f,g,h) Perl_grok_bslash_x(aTHX_ a,b,c,d,e,f,g,h)
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
#define regcurly S_regcurly
# endif
-# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C)
-#define _add_range_to_invlist(a,b,c) Perl__add_range_to_invlist(aTHX_ a,b,c)
-#define _invlist_intersection_maybe_complement_2nd(a,b,c,d) Perl__invlist_intersection_maybe_complement_2nd(aTHX_ a,b,c,d)
-#define _invlist_invert(a) Perl__invlist_invert(aTHX_ a)
-#define _invlist_union_maybe_complement_2nd(a,b,c,d) Perl__invlist_union_maybe_complement_2nd(aTHX_ a,b,c,d)
-#define _new_invlist(a) Perl__new_invlist(aTHX_ a)
-#define _setup_canned_invlist(a,b,c) Perl__setup_canned_invlist(aTHX_ a,b,c)
-# endif
# if defined(PERL_IN_REGEXEC_C)
#define advance_one_LB(a,b,c) S_advance_one_LB(aTHX_ a,b,c)
#define advance_one_SB(a,b,c) S_advance_one_SB(aTHX_ a,b,c)
@@ -1313,15 +1189,9 @@
#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_TOKE_C)
-#define _is_grapheme(a,b,c,d) Perl__is_grapheme(aTHX_ a,b,c,d)
-# endif
# if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
#define isFOO_lc(a,b) Perl_isFOO_lc(aTHX_ a,b)
# endif
-# if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-#define _to_fold_latin1 Perl__to_fold_latin1
-# endif
#endif
#ifdef PERL_CORE
#define PerlLIO_dup2_cloexec(a,b) Perl_PerlLIO_dup2_cloexec(aTHX_ a,b)
@@ -1362,6 +1232,7 @@
#define ck_glob(a) Perl_ck_glob(aTHX_ a)
#define ck_grep(a) Perl_ck_grep(aTHX_ a)
#define ck_index(a) Perl_ck_index(aTHX_ a)
+#define ck_isa(a) Perl_ck_isa(aTHX_ a)
#define ck_join(a) Perl_ck_join(aTHX_ a)
#define ck_length(a) Perl_ck_length(aTHX_ a)
#define ck_lfun(a) Perl_ck_lfun(aTHX_ a)
@@ -1392,6 +1263,9 @@
#define ck_tell(a) Perl_ck_tell(aTHX_ a)
#define ck_trunc(a) Perl_ck_trunc(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)
+#define cmpchain_start(a,b,c) Perl_cmpchain_start(aTHX_ a,b,c)
#define core_prototype(a,b,c,d) Perl_core_prototype(aTHX_ a,b,c,d)
#define coresub_op(a,b,c) Perl_coresub_op(aTHX_ a,b,c)
#define create_eval_scope(a,b) Perl_create_eval_scope(aTHX_ a,b)
@@ -1449,6 +1323,7 @@
#define init_named_cv(a,b) Perl_init_named_cv(aTHX_ a,b)
#define init_uniprops() Perl_init_uniprops(aTHX)
#define invert(a) Perl_invert(aTHX_ a)
+#define invmap_dump(a,b) Perl_invmap_dump(aTHX_ a,b)
#define io_close(a,b,c,d) Perl_io_close(aTHX_ a,b,c,d)
#define isinfnansv(a) Perl_isinfnansv(aTHX_ a)
#define jmaybe(a) Perl_jmaybe(aTHX_ a)
@@ -1572,6 +1447,8 @@
#define setfd_cloexec_or_inhexec_by_sysfdness(a) Perl_setfd_cloexec_or_inhexec_by_sysfdness(aTHX_ a)
#define setfd_inhexec Perl_setfd_inhexec
#define setfd_inhexec_for_sysfd(a) Perl_setfd_inhexec_for_sysfd(aTHX_ a)
+#define sighandler1 Perl_sighandler1
+#define sighandler3 Perl_sighandler3
#define sub_crush_depth(a) Perl_sub_crush_depth(aTHX_ a)
#define sv_2num(a) Perl_sv_2num(aTHX_ a)
#define sv_clean_all() Perl_sv_clean_all(aTHX)
@@ -1579,7 +1456,6 @@
#define sv_del_backref(a,b) Perl_sv_del_backref(aTHX_ a,b)
#define sv_free_arenas() Perl_sv_free_arenas(aTHX)
#define sv_len_utf8_nomg(a) Perl_sv_len_utf8_nomg(aTHX_ a)
-#define sv_mortalcopy_flags(a,b) Perl_sv_mortalcopy_flags(aTHX_ a,b)
#define sv_resetpvn(a,b,c) Perl_sv_resetpvn(aTHX_ a,b,c)
#define sv_sethek(a,b) Perl_sv_sethek(aTHX_ a,b)
#ifndef PERL_IMPLICIT_CONTEXT
@@ -1611,12 +1487,12 @@
#define my_nl_langinfo S_my_nl_langinfo
# endif
# endif
-# if !(defined(HAS_SIGACTION) && defined(SA_SIGINFO))
-#define sighandler Perl_sighandler
-# endif
# if !(defined(PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION))
#define do_exec(a) Perl_do_exec(aTHX_ a)
# endif
+# if !(defined(PERL_USE_3ARG_SIGHANDLER))
+#define sighandler Perl_sighandler
+# endif
# if !(defined(_MSC_VER))
#define magic_regdatum_set(a,b) Perl_magic_regdatum_set(aTHX_ a,b)
# endif
@@ -1667,6 +1543,11 @@
# if !defined(WIN32)
#define do_exec3(a,b,c) Perl_do_exec3(aTHX_ a,b,c)
# endif
+# if 0 /* Not currently used, but may be needed in the future */
+# if defined(PERL_IN_UTF8_C)
+#define warn_on_first_deprecated_use(a,b,c,d,e) S_warn_on_first_deprecated_use(aTHX_ a,b,c,d,e)
+# endif
+# endif
# if defined (HAS_SOCKETPAIR) || (defined (HAS_SOCKET) && defined(SOCK_DGRAM) && defined(AF_INET) && defined(PF_INET))
#define PerlSock_socketpair_cloexec(a,b,c,d) Perl_PerlSock_socketpair_cloexec(aTHX_ a,b,c,d)
# endif
@@ -1710,9 +1591,6 @@
# if defined(HAS_PIPE)
#define PerlProc_pipe_cloexec(a) Perl_PerlProc_pipe_cloexec(aTHX_ a)
# endif
-# if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
-#define sighandler Perl_sighandler
-# endif
# if defined(HAS_SOCKET)
#define PerlSock_accept_cloexec(a,b,c) Perl_PerlSock_accept_cloexec(aTHX_ a,b,c)
#define PerlSock_socket_cloexec(a,b,c) Perl_PerlSock_socket_cloexec(aTHX_ a,b,c)
@@ -1758,12 +1636,11 @@
#define openn_setup(a,b,c,d,e,f) S_openn_setup(aTHX_ a,b,c,d,e,f)
# endif
# if defined(PERL_IN_DOOP_C)
-#define do_trans_complex(a) S_do_trans_complex(aTHX_ a)
-#define do_trans_complex_utf8(a) S_do_trans_complex_utf8(aTHX_ a)
-#define do_trans_count(a) S_do_trans_count(aTHX_ a)
-#define do_trans_count_utf8(a) S_do_trans_count_utf8(aTHX_ a)
-#define do_trans_simple(a) S_do_trans_simple(aTHX_ a)
-#define do_trans_simple_utf8(a) S_do_trans_simple_utf8(aTHX_ a)
+#define do_trans_complex(a,b) S_do_trans_complex(aTHX_ a,b)
+#define do_trans_count(a,b) S_do_trans_count(aTHX_ a,b)
+#define do_trans_count_invmap(a,b) S_do_trans_count_invmap(aTHX_ a,b)
+#define do_trans_invmap(a,b) S_do_trans_invmap(aTHX_ a,b)
+#define do_trans_simple(a,b) S_do_trans_simple(aTHX_ a,b)
# endif
# if defined(PERL_IN_DUMP_C)
#define deb_curcv(a) S_deb_curcv(aTHX_ a)
@@ -1779,7 +1656,6 @@
#define gv_magicalize(a,b,c,d,e) S_gv_magicalize(aTHX_ a,b,c,d,e)
#define gv_magicalize_isa(a) S_gv_magicalize_isa(aTHX_ a)
#define gv_stashpvn_internal(a,b,c) S_gv_stashpvn_internal(aTHX_ a,b,c)
-#define gv_stashsvpvn_cached(a,b,c,d) S_gv_stashsvpvn_cached(aTHX_ a,b,c,d)
#define maybe_multimagic_gv(a,b,c) S_maybe_multimagic_gv(aTHX_ a,b,c)
#define parse_gv_stash_name(a,b,c,d,e,f,g,h) S_parse_gv_stash_name(aTHX_ a,b,c,d,e,f,g,h)
#define require_tie_mod(a,b,c,d,e) S_require_tie_mod(aTHX_ a,b,c,d,e)
@@ -1844,6 +1720,9 @@
#define mro_gather_and_rename(a,b,c,d,e) S_mro_gather_and_rename(aTHX_ a,b,c,d,e)
#define mro_get_linear_isa_dfs(a,b) S_mro_get_linear_isa_dfs(aTHX_ a,b)
# endif
+# if defined(PERL_IN_NUMERIC_C)
+#define output_non_portable(a) S_output_non_portable(aTHX_ a)
+# endif
# if defined(PERL_IN_OP_C)
#define apply_attrs(a,b,c) S_apply_attrs(aTHX_ a,b,c)
#define apply_attrs_my(a,b,c,d) S_apply_attrs_my(aTHX_ a,b,c,d)
@@ -1900,6 +1779,9 @@
#define pad_findlex(a,b,c,d,e,f,g,h,i) S_pad_findlex(aTHX_ a,b,c,d,e,f,g,h,i)
#define pad_reset() S_pad_reset(aTHX)
# endif
+# if defined(PERL_IN_PAD_C) || defined(PERL_IN_OP_C)
+#define PadnameIN_SCOPE S_PadnameIN_SCOPE
+# endif
# if defined(PERL_IN_PERL_C)
#define find_beginning(a,b) S_find_beginning(aTHX_ a,b)
#define forbid_setid(a,b) S_forbid_setid(aTHX_ a,b)
@@ -1925,6 +1807,9 @@
#define do_delete_local() S_do_delete_local(aTHX)
#define refto(a) S_refto(aTHX_ a)
# endif
+# if defined(PERL_IN_PP_C) || defined(PERL_IN_PP_HOT_C)
+#define lossless_NV_to_IV S_lossless_NV_to_IV
+# endif
# if defined(PERL_IN_PP_CTL_C)
#define check_type_and_open(a) S_check_type_and_open(aTHX_ a)
#define destroy_matcher(a) S_destroy_matcher(aTHX_ a)
@@ -1951,6 +1836,7 @@
# if defined(PERL_IN_PP_HOT_C)
#define do_oddball(a,b) S_do_oddball(aTHX_ a,b)
#define opmethod_stash(a) S_opmethod_stash(aTHX_ a)
+#define should_we_output_Debug_r(a) S_should_we_output_Debug_r(aTHX_ a)
# endif
# if defined(PERL_IN_PP_PACK_C)
#define div128(a,b) S_div128(aTHX_ a,b)
@@ -1969,15 +1855,24 @@
# endif
# if defined(PERL_IN_PP_SORT_C)
#define amagic_cmp(a,b) S_amagic_cmp(aTHX_ a,b)
+#define amagic_cmp_desc(a,b) S_amagic_cmp_desc(aTHX_ a,b)
#define amagic_i_ncmp(a,b) S_amagic_i_ncmp(aTHX_ a,b)
+#define amagic_i_ncmp_desc(a,b) S_amagic_i_ncmp_desc(aTHX_ a,b)
#define amagic_ncmp(a,b) S_amagic_ncmp(aTHX_ a,b)
+#define amagic_ncmp_desc(a,b) S_amagic_ncmp_desc(aTHX_ a,b)
+#define cmp_desc(a,b) S_cmp_desc(aTHX_ a,b)
#define sortcv(a,b) S_sortcv(aTHX_ a,b)
#define sortcv_stacked(a,b) S_sortcv_stacked(aTHX_ a,b)
#define sortcv_xsub(a,b) S_sortcv_xsub(aTHX_ a,b)
+#define sortsv_flags_impl(a,b,c,d) S_sortsv_flags_impl(aTHX_ a,b,c,d)
#define sv_i_ncmp(a,b) S_sv_i_ncmp(aTHX_ a,b)
+#define sv_i_ncmp_desc(a,b) S_sv_i_ncmp_desc(aTHX_ a,b)
#define sv_ncmp(a,b) S_sv_ncmp(aTHX_ a,b)
+#define sv_ncmp_desc(a,b) S_sv_ncmp_desc(aTHX_ a,b)
# if defined(USE_LOCALE_COLLATE)
#define amagic_cmp_locale(a,b) S_amagic_cmp_locale(aTHX_ a,b)
+#define amagic_cmp_locale_desc(a,b) S_amagic_cmp_locale_desc(aTHX_ a,b)
+#define cmp_locale_desc(a,b) S_cmp_locale_desc(aTHX_ a,b)
# endif
# endif
# if defined(PERL_IN_PP_SYS_C)
@@ -2063,26 +1958,22 @@
#define yywarn(a,b) S_yywarn(aTHX_ a,b)
# endif
# if defined(PERL_IN_UNIVERSAL_C)
-#define isa_lookup(a,b,c,d) S_isa_lookup(aTHX_ a,b,c,d)
+#define isa_lookup(a,b,c,d,e) S_isa_lookup(aTHX_ a,b,c,d,e)
+#define sv_derived_from_svpvn(a,b,c,d,e) S_sv_derived_from_svpvn(aTHX_ a,b,c,d,e)
# endif
# if defined(PERL_IN_UTF8_C)
#define _to_utf8_case(a,b,c,d,e,f,g,h,i) S__to_utf8_case(aTHX_ a,b,c,d,e,f,g,h,i)
-#define check_and_deprecate(a,b,c,d,e,f) S_check_and_deprecate(aTHX_ a,b,c,d,e,f)
#define check_locale_boundary_crossing(a,b,c,d) S_check_locale_boundary_crossing(aTHX_ a,b,c,d)
#define does_utf8_overflow S_does_utf8_overflow
#define isFF_OVERLONG S_isFF_OVERLONG
-#define is_utf8_common(a,b) S_is_utf8_common(aTHX_ a,b)
-#define is_utf8_common_with_len(a,b,c) S_is_utf8_common_with_len(aTHX_ a,b,c)
+#define is_utf8_common(a,b,c) S_is_utf8_common(aTHX_ a,b,c)
#define is_utf8_overlong_given_start_byte_ok S_is_utf8_overlong_given_start_byte_ok
#define new_msg_hv(a,b,c) S_new_msg_hv(aTHX_ a,b,c)
-#define swash_scan_list_line(a,b,c,d,e,f,g) S_swash_scan_list_line(aTHX_ a,b,c,d,e,f,g)
-#define swatch_get(a,b,c) S_swatch_get(aTHX_ a,b,c)
#define to_lower_latin1 S_to_lower_latin1
#define turkic_fc(a,b,c,d) S_turkic_fc(aTHX_ a,b,c,d)
#define turkic_lc(a,b,c,d) S_turkic_lc(aTHX_ a,b,c,d)
#define turkic_uc(a,b,c,d) S_turkic_uc(aTHX_ a,b,c,d)
#define unexpected_non_continuation_text(a,b,c,d) S_unexpected_non_continuation_text(aTHX_ a,b,c,d)
-#define warn_on_first_deprecated_use(a,b,c,d,e) S_warn_on_first_deprecated_use(aTHX_ a,b,c,d,e)
# endif
# if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
#define _to_upper_title_latin1(a,b,c,d) Perl__to_upper_title_latin1(aTHX_ a,b,c,d)
@@ -2104,6 +1995,9 @@
# if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
#define pidgone(a,b) S_pidgone(aTHX_ a,b)
# endif
+# if defined(PERL_USE_3ARG_SIGHANDLER)
+#define sighandler Perl_sighandler
+# endif
# if defined(USE_C_BACKTRACE)
#define get_c_backtrace(a,b) Perl_get_c_backtrace(aTHX_ a,b)
# endif
@@ -2123,6 +2017,10 @@
#define PerlIO_restore_errno(a) Perl_PerlIO_restore_errno(aTHX_ a)
#define PerlIO_save_errno(a) Perl_PerlIO_save_errno(aTHX_ a)
# endif
+# if defined(USE_QUADMATH)
+#define quadmath_format_needed Perl_quadmath_format_needed
+#define quadmath_format_valid Perl_quadmath_format_valid
+# endif
# if defined(_MSC_VER)
#define magic_regdatum_set(a,b) Perl_magic_regdatum_set(aTHX_ a,b)
# endif
diff --git a/gnu/usr.bin/perl/embedvar.h b/gnu/usr.bin/perl/embedvar.h
index 35cf8f21915..de1aa999a81 100644
--- a/gnu/usr.bin/perl/embedvar.h
+++ b/gnu/usr.bin/perl/embedvar.h
@@ -40,6 +40,9 @@
# define vTHX PERL_GET_INTERP
# endif
+#define PL_AboveLatin1 (vTHX->IAboveLatin1)
+#define PL_Assigned_invlist (vTHX->IAssigned_invlist)
+#define PL_CCC_non0_non230 (vTHX->ICCC_non0_non230)
#define PL_DBcontrol (vTHX->IDBcontrol)
#define PL_DBcv (vTHX->IDBcv)
#define PL_DBgv (vTHX->IDBgv)
@@ -50,14 +53,28 @@
#define PL_DBtrace (vTHX->IDBtrace)
#define PL_Dir (vTHX->IDir)
#define PL_Env (vTHX->IEnv)
+#define PL_GCB_invlist (vTHX->IGCB_invlist)
+#define PL_HasMultiCharFold (vTHX->IHasMultiCharFold)
+#define PL_InBitmap (vTHX->IInBitmap)
+#define PL_InMultiCharFold (vTHX->IInMultiCharFold)
+#define PL_LB_invlist (vTHX->ILB_invlist)
#define PL_LIO (vTHX->ILIO)
+#define PL_Latin1 (vTHX->ILatin1)
#define PL_Mem (vTHX->IMem)
#define PL_MemParse (vTHX->IMemParse)
#define PL_MemShared (vTHX->IMemShared)
+#define PL_Posix_ptrs (vTHX->IPosix_ptrs)
+#define PL_Private_Use (vTHX->IPrivate_Use)
#define PL_Proc (vTHX->IProc)
+#define PL_SB_invlist (vTHX->ISB_invlist)
+#define PL_SCX_invlist (vTHX->ISCX_invlist)
#define PL_Sock (vTHX->ISock)
#define PL_StdIO (vTHX->IStdIO)
#define PL_Sv (vTHX->ISv)
+#define PL_TR_SPECIAL_HANDLING_UTF8 (vTHX->ITR_SPECIAL_HANDLING_UTF8)
+#define PL_UpperLatin1 (vTHX->IUpperLatin1)
+#define PL_WB_invlist (vTHX->IWB_invlist)
+#define PL_XPosix_ptrs (vTHX->IXPosix_ptrs)
#define PL_Xpv (vTHX->IXpv)
#define PL_an (vTHX->Ian)
#define PL_argvgv (vTHX->Iargvgv)
@@ -155,6 +172,7 @@
#define PL_in_clean_objs (vTHX->Iin_clean_objs)
#define PL_in_eval (vTHX->Iin_eval)
#define PL_in_load_module (vTHX->Iin_load_module)
+#define PL_in_some_fold (vTHX->Iin_some_fold)
#define PL_in_utf8_COLLATE_locale (vTHX->Iin_utf8_COLLATE_locale)
#define PL_in_utf8_CTYPE_locale (vTHX->Iin_utf8_CTYPE_locale)
#define PL_in_utf8_turkic_locale (vTHX->Iin_utf8_turkic_locale)
@@ -167,11 +185,6 @@
#define PL_langinfo_buf (vTHX->Ilanginfo_buf)
#define PL_langinfo_bufsize (vTHX->Ilanginfo_bufsize)
#define PL_last_in_gv (vTHX->Ilast_in_gv)
-#define PL_last_swash_hv (vTHX->Ilast_swash_hv)
-#define PL_last_swash_key (vTHX->Ilast_swash_key)
-#define PL_last_swash_klen (vTHX->Ilast_swash_klen)
-#define PL_last_swash_slen (vTHX->Ilast_swash_slen)
-#define PL_last_swash_tmps (vTHX->Ilast_swash_tmps)
#define PL_lastfd (vTHX->Ilastfd)
#define PL_lastgotoprobe (vTHX->Ilastgotoprobe)
#define PL_laststatval (vTHX->Ilaststatval)
@@ -190,6 +203,8 @@
#define PL_markstack_ptr (vTHX->Imarkstack_ptr)
#define PL_max_intro_pending (vTHX->Imax_intro_pending)
#define PL_maxsysfd (vTHX->Imaxsysfd)
+#define PL_mbrlen_ps (vTHX->Imbrlen_ps)
+#define PL_mbrtowc_ps (vTHX->Imbrtowc_ps)
#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)
@@ -272,15 +287,15 @@
#define PL_scopestack_max (vTHX->Iscopestack_max)
#define PL_scopestack_name (vTHX->Iscopestack_name)
#define PL_secondgv (vTHX->Isecondgv)
-#define PL_seen_deprecated_macro (vTHX->Iseen_deprecated_macro)
#define PL_setlocale_buf (vTHX->Isetlocale_buf)
#define PL_setlocale_bufsize (vTHX->Isetlocale_bufsize)
#define PL_sharehook (vTHX->Isharehook)
#define PL_sig_pending (vTHX->Isig_pending)
+#define PL_sighandler1p (vTHX->Isighandler1p)
+#define PL_sighandler3p (vTHX->Isighandler3p)
#define PL_sighandlerp (vTHX->Isighandlerp)
#define PL_signalhook (vTHX->Isignalhook)
#define PL_signals (vTHX->Isignals)
-#define PL_sort_RealCmp (vTHX->Isort_RealCmp)
#define PL_sortcop (vTHX->Isortcop)
#define PL_sortstash (vTHX->Isortstash)
#define PL_splitstr (vTHX->Isplitstr)
@@ -335,60 +350,46 @@
#define PL_unitcheckav_save (vTHX->Iunitcheckav_save)
#define PL_unlockhook (vTHX->Iunlockhook)
#define PL_unsafe (vTHX->Iunsafe)
+#define PL_utf8_charname_begin (vTHX->Iutf8_charname_begin)
+#define PL_utf8_charname_continue (vTHX->Iutf8_charname_continue)
+#define PL_utf8_foldclosures (vTHX->Iutf8_foldclosures)
+#define PL_utf8_idcont (vTHX->Iutf8_idcont)
+#define PL_utf8_idstart (vTHX->Iutf8_idstart)
+#define PL_utf8_mark (vTHX->Iutf8_mark)
+#define PL_utf8_perl_idcont (vTHX->Iutf8_perl_idcont)
+#define PL_utf8_perl_idstart (vTHX->Iutf8_perl_idstart)
+#define PL_utf8_tofold (vTHX->Iutf8_tofold)
+#define PL_utf8_tolower (vTHX->Iutf8_tolower)
+#define PL_utf8_tosimplefold (vTHX->Iutf8_tosimplefold)
+#define PL_utf8_totitle (vTHX->Iutf8_totitle)
+#define PL_utf8_toupper (vTHX->Iutf8_toupper)
+#define PL_utf8_xidcont (vTHX->Iutf8_xidcont)
+#define PL_utf8_xidstart (vTHX->Iutf8_xidstart)
#define PL_utf8cache (vTHX->Iutf8cache)
#define PL_utf8locale (vTHX->Iutf8locale)
#define PL_warn_locale (vTHX->Iwarn_locale)
#define PL_warnhook (vTHX->Iwarnhook)
#define PL_watchaddr (vTHX->Iwatchaddr)
#define PL_watchok (vTHX->Iwatchok)
+#define PL_wcrtomb_ps (vTHX->Iwcrtomb_ps)
#define PL_xsubfilename (vTHX->Ixsubfilename)
#endif /* MULTIPLICITY */
#if defined(PERL_GLOBAL_STRUCT)
-#define PL_AboveLatin1 (my_vars->GAboveLatin1)
-#define PL_GAboveLatin1 (my_vars->GAboveLatin1)
-#define PL_Assigned_invlist (my_vars->GAssigned_invlist)
-#define PL_GAssigned_invlist (my_vars->GAssigned_invlist)
-#define PL_CCC_non0_non230 (my_vars->GCCC_non0_non230)
-#define PL_GCCC_non0_non230 (my_vars->GCCC_non0_non230)
#define PL_C_locale_obj (my_vars->GC_locale_obj)
#define PL_GC_locale_obj (my_vars->GC_locale_obj)
-#define PL_GCB_invlist (my_vars->GGCB_invlist)
-#define PL_GGCB_invlist (my_vars->GGCB_invlist)
-#define PL_HasMultiCharFold (my_vars->GHasMultiCharFold)
-#define PL_GHasMultiCharFold (my_vars->GHasMultiCharFold)
-#define PL_InBitmap (my_vars->GInBitmap)
-#define PL_GInBitmap (my_vars->GInBitmap)
-#define PL_InMultiCharFold (my_vars->GInMultiCharFold)
-#define PL_GInMultiCharFold (my_vars->GInMultiCharFold)
-#define PL_LB_invlist (my_vars->GLB_invlist)
-#define PL_GLB_invlist (my_vars->GLB_invlist)
-#define PL_Latin1 (my_vars->GLatin1)
-#define PL_GLatin1 (my_vars->GLatin1)
-#define PL_NonFinalFold (my_vars->GNonFinalFold)
-#define PL_GNonFinalFold (my_vars->GNonFinalFold)
-#define PL_Posix_ptrs (my_vars->GPosix_ptrs)
-#define PL_GPosix_ptrs (my_vars->GPosix_ptrs)
-#define PL_Private_Use (my_vars->GPrivate_Use)
-#define PL_GPrivate_Use (my_vars->GPrivate_Use)
-#define PL_SB_invlist (my_vars->GSB_invlist)
-#define PL_GSB_invlist (my_vars->GSB_invlist)
-#define PL_SCX_invlist (my_vars->GSCX_invlist)
-#define PL_GSCX_invlist (my_vars->GSCX_invlist)
-#define PL_UpperLatin1 (my_vars->GUpperLatin1)
-#define PL_GUpperLatin1 (my_vars->GUpperLatin1)
-#define PL_WB_invlist (my_vars->GWB_invlist)
-#define PL_GWB_invlist (my_vars->GWB_invlist)
-#define PL_XPosix_ptrs (my_vars->GXPosix_ptrs)
-#define PL_GXPosix_ptrs (my_vars->GXPosix_ptrs)
#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)
@@ -397,6 +398,8 @@
#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)
@@ -409,8 +412,6 @@
#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_in_some_fold (my_vars->Gin_some_fold)
-#define PL_Gin_some_fold (my_vars->Gin_some_fold)
#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)
@@ -497,36 +498,6 @@
#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_utf8_charname_begin (my_vars->Gutf8_charname_begin)
-#define PL_Gutf8_charname_begin (my_vars->Gutf8_charname_begin)
-#define PL_utf8_charname_continue (my_vars->Gutf8_charname_continue)
-#define PL_Gutf8_charname_continue (my_vars->Gutf8_charname_continue)
-#define PL_utf8_foldclosures (my_vars->Gutf8_foldclosures)
-#define PL_Gutf8_foldclosures (my_vars->Gutf8_foldclosures)
-#define PL_utf8_idcont (my_vars->Gutf8_idcont)
-#define PL_Gutf8_idcont (my_vars->Gutf8_idcont)
-#define PL_utf8_idstart (my_vars->Gutf8_idstart)
-#define PL_Gutf8_idstart (my_vars->Gutf8_idstart)
-#define PL_utf8_mark (my_vars->Gutf8_mark)
-#define PL_Gutf8_mark (my_vars->Gutf8_mark)
-#define PL_utf8_perl_idcont (my_vars->Gutf8_perl_idcont)
-#define PL_Gutf8_perl_idcont (my_vars->Gutf8_perl_idcont)
-#define PL_utf8_perl_idstart (my_vars->Gutf8_perl_idstart)
-#define PL_Gutf8_perl_idstart (my_vars->Gutf8_perl_idstart)
-#define PL_utf8_tofold (my_vars->Gutf8_tofold)
-#define PL_Gutf8_tofold (my_vars->Gutf8_tofold)
-#define PL_utf8_tolower (my_vars->Gutf8_tolower)
-#define PL_Gutf8_tolower (my_vars->Gutf8_tolower)
-#define PL_utf8_tosimplefold (my_vars->Gutf8_tosimplefold)
-#define PL_Gutf8_tosimplefold (my_vars->Gutf8_tosimplefold)
-#define PL_utf8_totitle (my_vars->Gutf8_totitle)
-#define PL_Gutf8_totitle (my_vars->Gutf8_totitle)
-#define PL_utf8_toupper (my_vars->Gutf8_toupper)
-#define PL_Gutf8_toupper (my_vars->Gutf8_toupper)
-#define PL_utf8_xidcont (my_vars->Gutf8_xidcont)
-#define PL_Gutf8_xidcont (my_vars->Gutf8_xidcont)
-#define PL_utf8_xidstart (my_vars->Gutf8_xidstart)
-#define PL_Gutf8_xidstart (my_vars->Gutf8_xidstart)
#define PL_veto_cleanup (my_vars->Gveto_cleanup)
#define PL_Gveto_cleanup (my_vars->Gveto_cleanup)
#define PL_watch_pvx (my_vars->Gwatch_pvx)
diff --git a/gnu/usr.bin/perl/ext/B/B.pm b/gnu/usr.bin/perl/ext/B/B.pm
index 2d9b2d064d0..80c7f858eea 100644
--- a/gnu/usr.bin/perl/ext/B/B.pm
+++ b/gnu/usr.bin/perl/ext/B/B.pm
@@ -20,7 +20,7 @@ sub import {
# walkoptree comes from B.xs
BEGIN {
- $B::VERSION = '1.76';
+ $B::VERSION = '1.80';
@B::EXPORT_OK = ();
# Our BOOT code needs $VERSION set, and will append to @EXPORT_OK.
diff --git a/gnu/usr.bin/perl/ext/B/B.xs b/gnu/usr.bin/perl/ext/B/B.xs
index d8fc22a1fac..8a4126545bf 100644
--- a/gnu/usr.bin/perl/ext/B/B.xs
+++ b/gnu/usr.bin/perl/ext/B/B.xs
@@ -258,7 +258,7 @@ cstring(pTHX_ SV *sv, bool perlstyle)
sv_catpvs(sstr, "\\@");
else if (*s == '\\')
{
- if (strchr("nrftax\\",*(s+1)))
+ if (memCHRs("nrftaebx\\",*(s+1)))
sv_catpvn(sstr, s++, 2);
else
sv_catpvs(sstr, "\\\\");
@@ -1177,11 +1177,15 @@ string(o, cv)
break;
case OP_ARGCHECK:
- ret = Perl_newSVpvf(aTHX_ "%" IVdf ",%" IVdf, aux[0].iv, aux[1].iv);
- if (aux[2].iv)
- Perl_sv_catpvf(aTHX_ ret, ",%c", (char)aux[2].iv);
- ret = sv_2mortal(ret);
- break;
+ {
+ struct op_argcheck_aux *p = (struct op_argcheck_aux*)aux;
+ ret = Perl_newSVpvf(aTHX_ "%" IVdf ",%" IVdf,
+ p->params, p->opt_params);
+ if (p->slurpy)
+ Perl_sv_catpvf(aTHX_ ret, ",%c", p->slurpy);
+ ret = sv_2mortal(ret);
+ break;
+ }
default:
ret = sv_2mortal(newSVpvn("", 0));
@@ -1215,12 +1219,16 @@ aux_list(o, cv)
break;
case OP_ARGCHECK:
- EXTEND(SP, 3);
- PUSHs(sv_2mortal(newSViv(aux[0].iv)));
- PUSHs(sv_2mortal(newSViv(aux[1].iv)));
- PUSHs(sv_2mortal(aux[2].iv ? Perl_newSVpvf(aTHX_ "%c",
- (char)aux[2].iv) : &PL_sv_no));
- break;
+ {
+ struct op_argcheck_aux *p = (struct op_argcheck_aux*)aux;
+ EXTEND(SP, 3);
+ PUSHs(sv_2mortal(newSViv(p->params)));
+ PUSHs(sv_2mortal(newSViv(p->opt_params)));
+ PUSHs(sv_2mortal(p->slurpy
+ ? Perl_newSVpvf(aTHX_ "%c", p->slurpy)
+ : &PL_sv_no));
+ break;
+ }
case OP_MULTICONCAT:
{
diff --git a/gnu/usr.bin/perl/ext/B/t/b.t b/gnu/usr.bin/perl/ext/B/t/b.t
index e1279ff9355..aa67fd37558 100644
--- a/gnu/usr.bin/perl/ext/B/t/b.t
+++ b/gnu/usr.bin/perl/ext/B/t/b.t
@@ -290,7 +290,6 @@ is(B::opnumber("pp_null"), 0, "Testing opnumber with opname (pp_null)");
while (my ($test, $expect) = splice @tests, 0, 2) {
is(B::perlstring($test), $expect, "B::perlstring($expect)");
utf8::upgrade $test;
- $expect =~ s/\\b/sprintf("\\x{%x}", utf8::unicode_to_native(8))/eg;
$expect =~ s/\\([0-7]{3})/sprintf "\\x\{%x\}", oct $1/eg;
is(B::perlstring($test), $expect, "B::perlstring($expect) (Unicode)");
}
@@ -540,5 +539,19 @@ SKIP: {
is $sub2->PADLIST->outid, $sub1->PADLIST->outid, 'padlist outid';
}
+# GH #17301 aux_list() sometimes returned wrong #args
+
+{
+ my $big = ($Config::Config{uvsize} > 4);
+ my $self;
+ my $sub = $big
+ ? sub { $self->{h1}{h2}{h3}{h4}{h5}{h6}{h7}{h8}{h9} }
+ : sub { $self->{h1}{h2}{h3}{h4} };
+ my $cv = B::svref_2object($sub);
+ my $op = $cv->ROOT->first->first->next;
+ my @items = $op->aux_list($cv);
+ is +@items, $big ? 11 : 6, 'GH #17301';
+}
+
done_testing();
diff --git a/gnu/usr.bin/perl/ext/B/t/optree_concise.t b/gnu/usr.bin/perl/ext/B/t/optree_concise.t
index 1e2594703fe..86280ac4888 100755
--- a/gnu/usr.bin/perl/ext/B/t/optree_concise.t
+++ b/gnu/usr.bin/perl/ext/B/t/optree_concise.t
@@ -217,7 +217,7 @@ checkOptree ( name => 'cmdline invoke -basic works',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 7 <@> leave[1 ref] vKP/REFC ->(end)
-# 1 <0> enter ->2
+# 1 <0> enter v ->2
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
# 6 <@> sort vK ->7
# 3 <0> pushmark s ->4
@@ -225,7 +225,7 @@ checkOptree ( name => 'cmdline invoke -basic works',
# 4 <#> gv[*a] s ->5
EOT_EOT
# 7 <@> leave[1 ref] vKP/REFC ->(end)
-# 1 <0> enter ->2
+# 1 <0> enter v ->2
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
# 6 <@> sort vK ->7
# 3 <0> pushmark s ->4
@@ -241,7 +241,7 @@ checkOptree ( name => 'cmdline invoke -exec works',
bcopts => '-exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <0> enter
+1 <0> enter v
2 <;> nextstate(main 1 -e:1) v:>,<,%,{
3 <0> pushmark s
4 <#> gv[*a] s
@@ -249,7 +249,7 @@ checkOptree ( name => 'cmdline invoke -exec works',
6 <@> sort vK
7 <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <$> gv(*a) s
@@ -290,7 +290,7 @@ checkOptree
errs => ['Useless use of sort in void context at -e line 1.'],
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 2 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <#> gv[*a] s
@@ -298,7 +298,7 @@ checkOptree
# 6 <@> sort vK
# 7 <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 2 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <$> gv(*a) s
diff --git a/gnu/usr.bin/perl/ext/B/t/optree_misc.t b/gnu/usr.bin/perl/ext/B/t/optree_misc.t
index f8ff3ce9689..490abb33d4d 100644
--- a/gnu/usr.bin/perl/ext/B/t/optree_misc.t
+++ b/gnu/usr.bin/perl/ext/B/t/optree_misc.t
@@ -89,7 +89,7 @@ EONT_EONT
my $t = <<'EOT_EOT';
# 8 <@> leave[1 ref] vKP/REFC ->(end)
-# 1 <0> enter ->2
+# 1 <0> enter v ->2
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
# 7 <2> sassign vKS/2 ->8
# 5 <@> index[t2] sK/2 ->6
@@ -101,7 +101,7 @@ my $t = <<'EOT_EOT';
EOT_EOT
my $nt = <<'EONT_EONT';
# 8 <@> leave[1 ref] vKP/REFC ->(end)
-# 1 <0> enter ->2
+# 1 <0> enter v ->2
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
# 7 <2> sassign vKS/2 ->8
# 5 <@> index[t1] sK/2 ->6
diff --git a/gnu/usr.bin/perl/ext/B/t/optree_samples.t b/gnu/usr.bin/perl/ext/B/t/optree_samples.t
index 15b5799ce08..0a498a9e528 100755
--- a/gnu/usr.bin/perl/ext/B/t/optree_samples.t
+++ b/gnu/usr.bin/perl/ext/B/t/optree_samples.t
@@ -331,7 +331,7 @@ checkOptree ( name => '-exec -e foreach (1..10) {print qq{foo $_}}',
bcopts => '-exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 2 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <$> const[IV 1] s
@@ -350,7 +350,7 @@ checkOptree ( name => '-exec -e foreach (1..10) {print qq{foo $_}}',
# g <2> leaveloop vK/2
# h <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 2 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <$> const(IV 1) s
@@ -602,14 +602,14 @@ checkOptree ( name => '-e use constant j => qq{junk}; print j',
bcopts => '-exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 71 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <$> const[PV "junk"] s*/FOLD
# 5 <@> print vK
# 6 <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 71 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <$> const(PV "junk") s*/FOLD
diff --git a/gnu/usr.bin/perl/ext/B/t/optree_sort.t b/gnu/usr.bin/perl/ext/B/t/optree_sort.t
index 0b5897d575d..2c661f67650 100755
--- a/gnu/usr.bin/perl/ext/B/t/optree_sort.t
+++ b/gnu/usr.bin/perl/ext/B/t/optree_sort.t
@@ -46,7 +46,7 @@ checkOptree ( name => 'sort @a',
bcopts => '-exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <0> enter
+1 <0> enter v
2 <;> nextstate(main 1 -e:1) v:>,<,%,{
3 <0> pushmark s
4 <#> gv[*a] s
@@ -54,7 +54,7 @@ checkOptree ( name => 'sort @a',
6 <@> sort vK
7 <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <$> gv(*a) s
@@ -98,7 +98,7 @@ checkOptree ( name => '@a = sort @a',
bcopts => '-exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <0> enter
+1 <0> enter v
2 <;> nextstate(main 1 -e:1) v:>,<,%,{
3 <0> pushmark s
4 <0> pushmark s
@@ -107,7 +107,7 @@ checkOptree ( name => '@a = sort @a',
7 <@> sort lK/INPLACE
8 <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <0> pushmark s
@@ -155,7 +155,7 @@ checkOptree ( name => '@a = sort @a; reverse @a',
bcopts => '-exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <0> enter
+1 <0> enter v
2 <;> nextstate(main 1 -e:1) v:>,<,%,{
3 <0> pushmark s
4 <0> pushmark s
@@ -169,7 +169,7 @@ b <1> rv2av[t7] lK/1
c <@> reverse[t8] vK/1
d <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <0> pushmark s
@@ -219,7 +219,7 @@ checkOptree ( name => 'my @a; @a = sort @a',
bcopts => '-exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <0> enter
+1 <0> enter v
2 <;> nextstate(main 1 -e:1) v:>,<,%,{
3 <0> padav[@a:1,2] vM/LVINTRO
4 <;> nextstate(main 2 -e:1) v:>,<,%,{
@@ -229,7 +229,7 @@ checkOptree ( name => 'my @a; @a = sort @a',
8 <@> sort lK/INPLACE
9 <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
# 3 <0> padav[@a:1,2] vM/LVINTRO
# 4 <;> nextstate(main 2 -e:1) v:>,<,%,{
diff --git a/gnu/usr.bin/perl/ext/B/t/optree_varinit.t b/gnu/usr.bin/perl/ext/B/t/optree_varinit.t
index 5938048f3ab..8312df029d0 100755
--- a/gnu/usr.bin/perl/ext/B/t/optree_varinit.t
+++ b/gnu/usr.bin/perl/ext/B/t/optree_varinit.t
@@ -80,12 +80,12 @@ checkOptree ( name => 'my $a',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
# 4 <@> leave[1 ref] vKP/REFC ->(end)
-# 1 <0> enter ->2
+# 1 <0> enter v ->2
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
EOT_EOT
# 4 <@> leave[1 ref] vKP/REFC ->(end)
-# 1 <0> enter ->2
+# 1 <0> enter v ->2
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
# 3 <0> padsv[$a:1,2] vM/LVINTRO ->4
EONT_EONT
@@ -96,13 +96,13 @@ checkOptree ( name => 'our $a',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
3 <@> leave[1 ref] vKP/REFC ->(end)
-1 <0> enter ->2
+1 <0> enter v ->2
2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
- <1> rv2sv vK/OURINTR,1 ->3
- <#> gv[*a] s ->-
EOT_EOT
# 3 <@> leave[1 ref] vKP/REFC ->(end)
-# 1 <0> enter ->2
+# 1 <0> enter v ->2
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
# - <1> rv2sv vK/OURINTR,1 ->3
# - <$> gv(*a) s ->-
@@ -115,13 +115,13 @@ checkOptree ( name => 'local $c',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
4 <@> leave[1 ref] vKP/REFC ->(end)
-1 <0> enter ->2
+1 <0> enter v ->2
2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
- <1> ex-rv2sv vKM/LVINTRO,1 ->4
3 <#> gvsv[*c] s/LVINTRO ->4
EOT_EOT
# 4 <@> leave[1 ref] vKP/REFC ->(end)
-# 1 <0> enter ->2
+# 1 <0> enter v ->2
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
# - <1> ex-rv2sv vKM/LVINTRO,1 ->4
# 3 <$> gvsv(*c) s/LVINTRO ->4
@@ -201,14 +201,14 @@ checkOptree ( name => 'my $a=undef',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
6 <@> leave[1 ref] vKP/REFC ->(end)
-1 <0> enter ->2
+1 <0> enter v ->2
2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
5 <2> sassign vKS/2 ->6
3 <0> undef s ->4
4 <0> padsv[$a:1,2] sRM*/LVINTRO ->5
EOT_EOT
# 6 <@> leave[1 ref] vKP/REFC ->(end)
-# 1 <0> enter ->2
+# 1 <0> enter v ->2
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
# 5 <2> sassign vKS/2 ->6
# 3 <0> undef s ->4
@@ -222,7 +222,7 @@ checkOptree ( name => 'our $a=undef',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
6 <@> leave[1 ref] vKP/REFC ->(end)
-1 <0> enter ->2
+1 <0> enter v ->2
2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
5 <2> sassign vKS/2 ->6
3 <0> undef s ->4
@@ -230,7 +230,7 @@ checkOptree ( name => 'our $a=undef',
4 <#> gvsv[*a] s/OURINTR ->5
EOT_EOT
# 6 <@> leave[1 ref] vKP/REFC ->(end)
-# 1 <0> enter ->2
+# 1 <0> enter v ->2
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
# 5 <2> sassign vKS/2 ->6
# 3 <0> undef s ->4
@@ -246,7 +246,7 @@ checkOptree ( name => 'local $c=undef',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
6 <@> leave[1 ref] vKP/REFC ->(end)
-1 <0> enter ->2
+1 <0> enter v ->2
2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
5 <2> sassign vKS/2 ->6
3 <0> undef s ->4
@@ -254,7 +254,7 @@ checkOptree ( name => 'local $c=undef',
4 <#> gvsv[*c] s/LVINTRO ->5
EOT_EOT
# 6 <@> leave[1 ref] vKP/REFC ->(end)
-# 1 <0> enter ->2
+# 1 <0> enter v ->2
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3
# 5 <2> sassign vKS/2 ->6
# 3 <0> undef s ->4
@@ -323,14 +323,14 @@ checkOptree ( name => 'my $a=()',
bcopts => '-exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <0> enter
+1 <0> enter v
2 <;> nextstate(main 1 -e:1) v:>,<,%,{
3 <0> stub sP
4 <0> padsv[$a:1,2] sRM*/LVINTRO
5 <2> sassign vKS/2
6 <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
# 3 <0> stub sP
# 4 <0> padsv[$a:1,2] sRM*/LVINTRO
@@ -344,14 +344,14 @@ checkOptree ( name => 'our $a=()',
bcopts => '-exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <0> enter
+1 <0> enter v
2 <;> nextstate(main 1 -e:1) v:>,<,%,{
3 <0> stub sP
4 <#> gvsv[*a] s/OURINTR
5 <2> sassign vKS/2
6 <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
# 3 <0> stub sP
# 4 <$> gvsv(*a) s/OURINTR
@@ -366,14 +366,14 @@ checkOptree ( name => 'local $c=()',
bcopts => '-exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-1 <0> enter
+1 <0> enter v
2 <;> nextstate(main 1 -e:1) v:>,<,%,{
3 <0> stub sP
4 <#> gvsv[*c] s/LVINTRO
5 <2> sassign vKS/2
6 <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
# 3 <0> stub sP
# 4 <$> gvsv(*c) s/LVINTRO
@@ -387,14 +387,14 @@ checkOptree ( name => 'my ($a,$b)=()',
bcopts => '-exec',
strip_open_hints => 1,
expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <0> padrange[$a:1,2; $b:1,2] RM/LVINTRO,range=2
# 5 <2> aassign[t3] vKS
# 6 <@> leave[1 ref] vKP/REFC
EOT_EOT
-# 1 <0> enter
+# 1 <0> enter v
# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{
# 3 <0> pushmark s
# 4 <0> padrange[$a:1,2; $b:1,2] RM/LVINTRO,range=2
diff --git a/gnu/usr.bin/perl/ext/Devel-Peek/t/Peek.t b/gnu/usr.bin/perl/ext/Devel-Peek/t/Peek.t
index f3f781ac6bb..ef41b62c5a3 100755
--- a/gnu/usr.bin/perl/ext/Devel-Peek/t/Peek.t
+++ b/gnu/usr.bin/perl/ext/Devel-Peek/t/Peek.t
@@ -1029,7 +1029,7 @@ use constant {
unless ($Config{useithreads}) {
# These end up as copies in pads under ithreads, which rather defeats the
- # the point of what we're trying to test here.
+ # point of what we're trying to test here.
do_test('regular string constant', perl,
'SV = PV\\($ADDR\\) at $ADDR
@@ -1465,7 +1465,7 @@ dumpindent is 4 at -e line 1.
REFCNT = 1
|
2 +--enter OP(0xNNN) ===> 3 [nextstate 0xNNN]
- | FLAGS = (UNKNOWN,SLABBED,MORESIB)
+ | FLAGS = (VOID,SLABBED,MORESIB)
|
3 +--nextstate COP(0xNNN) ===> 4 [pushmark 0xNNN]
| FLAGS = (VOID,SLABBED,MORESIB)
diff --git a/gnu/usr.bin/perl/ext/DynaLoader/DynaLoader_pm.PL b/gnu/usr.bin/perl/ext/DynaLoader/DynaLoader_pm.PL
index 41e6f942191..49d449976a7 100644
--- a/gnu/usr.bin/perl/ext/DynaLoader/DynaLoader_pm.PL
+++ b/gnu/usr.bin/perl/ext/DynaLoader/DynaLoader_pm.PL
@@ -1,5 +1,8 @@
use Config;
+use strict;
+use warnings;
+
sub to_string {
my ($value) = @_;
$value =~ s/\\/\\\\/g;
@@ -85,7 +88,7 @@ package DynaLoader;
# Tim.Bunce@ig.co.uk, August 1994
BEGIN {
- $VERSION = '1.45';
+ $VERSION = '1.47_01';
}
EOT
@@ -127,6 +130,8 @@ else {
EOT
}
+my @dl_library_path;
+
print OUT expand_os_specific(<<'EOT');
<<$^O-eq-VMS>>
@@ -497,12 +502,20 @@ sub dl_findfile {
foreach $name (@names) {
my($file) = "$dir$dirsep$name";
print STDERR " checking in $dir for $name\n" if $dl_debug;
- $file = ($do_expand) ? dl_expandspec($file) : (-f $file && $file);
- #$file = _check_file($file);
- if ($file) {
+ if ($do_expand && ($file = dl_expandspec($file))) {
+ push @found, $file;
+ next arg; # no need to look any further
+ }
+ elsif (-f $file) {
push(@found, $file);
next arg; # no need to look any further
}
+ <<$^O-eq-darwin>>
+ elsif (dl_load_file($file, 0)) {
+ push @found, $file;
+ next arg; # no need to look any further
+ }
+ <</$^O-eq-darwin>>
}
}
}
diff --git a/gnu/usr.bin/perl/ext/DynaLoader/dl_aix.xs b/gnu/usr.bin/perl/ext/DynaLoader/dl_aix.xs
index 54a8e3db133..ce997a75154 100644
--- a/gnu/usr.bin/perl/ext/DynaLoader/dl_aix.xs
+++ b/gnu/usr.bin/perl/ext/DynaLoader/dl_aix.xs
@@ -320,7 +320,7 @@ static void caterr(char *s)
dMY_CXT;
char *p = s;
- while (*p >= '0' && *p <= '9')
+ while (isDIGIT(*p))
p++;
switch(atoi(s)) {
case L_ERROR_TOOMANY:
diff --git a/gnu/usr.bin/perl/ext/DynaLoader/dl_dlopen.xs b/gnu/usr.bin/perl/ext/DynaLoader/dl_dlopen.xs
index c9d164c7665..9c4db0dd9b2 100644
--- a/gnu/usr.bin/perl/ext/DynaLoader/dl_dlopen.xs
+++ b/gnu/usr.bin/perl/ext/DynaLoader/dl_dlopen.xs
@@ -73,6 +73,14 @@
dlerror the error message will be reset to a null pointer. The
SaveError function is used to save the error as soon as it happens.
+ Note that the POSIX standard does not require a per-thread buffer for
+ the error message, and so on multi-threaded builds, it can be overwritten
+ by another thread before SaveError accomplishes its task. Some systems do
+ have a per-thread buffer. The man page on your system should tell you.
+ If your code might be run on a system where this function is not thread
+ safe, you should protect your calls with mutexes. See "Dealing with Error
+ Messages" below.
+
Return Types
============
@@ -100,7 +108,7 @@
============================
In order to make the handling of dynamic linking errors as generic as
possible you should store any error messages associated with your
- implementation with the StoreError function.
+ implementation with the SaveError function.
In the case of SunOS the function dlerror returns the error message
associated with the last dynamic link error. As the SunOS dynamic
@@ -113,6 +121,10 @@
Note that SaveError() takes a printf format string. Use a "%s" as
the first parameter if the error may contain any % characters.
+ dlerror() may not be thread-safe on some systems; if this code is run on
+ any of those, a mutex should be added. khw (who added this comment) has no
+ idea which systems aren't thread-safe, but consider this possibility when
+ debugging.
*/
diff --git a/gnu/usr.bin/perl/ext/DynaLoader/t/DynaLoader.t b/gnu/usr.bin/perl/ext/DynaLoader/t/DynaLoader.t
index 7fe30b34972..bb836861ab9 100644
--- a/gnu/usr.bin/perl/ext/DynaLoader/t/DynaLoader.t
+++ b/gnu/usr.bin/perl/ext/DynaLoader/t/DynaLoader.t
@@ -124,7 +124,7 @@ SKIP: {
unless -d '/usr' && -f '/bin/ls';
skip( "dl_findfile test not always appropriate when cross-compiling", 1 )
if $Config{usecrosscompile};
- cmp_ok( scalar @files, '>=', 1, "array should contain one result result or more: libc => (@files)" );
+ cmp_ok( scalar @files, '>=', 1, "array should contain one result or more: libc => (@files)" );
}
# Now try to load well known XS modules
diff --git a/gnu/usr.bin/perl/ext/File-Find/lib/File/Find.pm b/gnu/usr.bin/perl/ext/File-Find/lib/File/Find.pm
index 5fb9ee02fe4..4c67e882a5e 100644
--- a/gnu/usr.bin/perl/ext/File-Find/lib/File/Find.pm
+++ b/gnu/usr.bin/perl/ext/File-Find/lib/File/Find.pm
@@ -3,7 +3,7 @@ use 5.006;
use strict;
use warnings;
use warnings::register;
-our $VERSION = '1.36';
+our $VERSION = '1.37';
require Exporter;
require Cwd;
diff --git a/gnu/usr.bin/perl/ext/File-Find/t/find.t b/gnu/usr.bin/perl/ext/File-Find/t/find.t
index b0e30eb4782..40d14db0c68 100644
--- a/gnu/usr.bin/perl/ext/File-Find/t/find.t
+++ b/gnu/usr.bin/perl/ext/File-Find/t/find.t
@@ -281,7 +281,9 @@ my %tb = map { $_ => 1 } @testing_basenames;
{
find(
{
- wanted => sub { ++$::count_tb if $tb{$_}; },
+ wanted => sub { s#\.$## if ($^O eq 'VMS' && $_ ne '.');
+ ++$::count_tb if $tb{$_};
+ },
$bad_option => undef,
},
File::Spec->curdir
@@ -296,7 +298,9 @@ my %tb = map { $_ => 1 } @testing_basenames;
{
finddepth(
{
- wanted => sub { ++$::count_tb if $tb{$_}; },
+ wanted => sub { s#\.$## if ($^O eq 'VMS' && $_ ne '.');
+ ++$::count_tb if $tb{$_};
+ },
$bad_option => undef,
$second_bad_option => undef,
},
@@ -1026,46 +1030,49 @@ if ($^O eq 'MSWin32') {
}
}
closedir $ROOT_DIR;
- my $created_file;
- unless (defined $expected_first_file) {
- $expected_first_file = '__perl_File_Find_test.tmp';
- open(F, ">", "/$expected_first_file") && close(F)
- or die "cannot create file in root directory: $!\n";
- $created_file = 1;
- }
+ SKIP:
+ {
+ my $created_file;
+ unless (defined $expected_first_file) {
+ $expected_first_file = '__perl_File_Find_test.tmp';
+ open(F, ">", "/$expected_first_file") && close(F)
+ or skip "cannot create file in root directory: $!", 8;
+ $created_file = 1;
+ }
- # Run F:F:f with/without no_chdir for each possible style of root path.
- # NB. If HOME were "/", then an inadvertent chdir('') would fluke the
- # expected result, so ensure it is something else:
- local $ENV{HOME} = $orig_dir;
- foreach my $no_chdir (0, 1) {
- foreach my $root_dir ("/", "\\", "$drive/", "$drive\\") {
- eval {
- File::Find::find({
- 'no_chdir' => $no_chdir,
- 'preprocess' => sub { return sort @_ },
- 'wanted' => sub {
- -f or return; # the first call is for $root_dir itself.
- my $got = $File::Find::name;
- my $exp = "$root_dir$expected_first_file";
- print "# no_chdir=$no_chdir $root_dir '$got'\n";
- is($got, $exp,
- "Win32: Run 'find' with 'no_chdir' set to $no_chdir" );
- die "done"; # do not process the entire drive!
- },
- }, $root_dir);
- };
- # If F:F:f did not die "done" then it did not Check() either.
- unless ($@ and $@ =~ /done/) {
- print "# no_chdir=$no_chdir $root_dir ",
- ($@ ? "error: $@" : "no files found"), "\n";
- ok(0, "Win32: 0");
+ # Run F:F:f with/without no_chdir for each possible style of root path.
+ # NB. If HOME were "/", then an inadvertent chdir('') would fluke the
+ # expected result, so ensure it is something else:
+ local $ENV{HOME} = $orig_dir;
+ foreach my $no_chdir (0, 1) {
+ foreach my $root_dir ("/", "\\", "$drive/", "$drive\\") {
+ eval {
+ File::Find::find({
+ 'no_chdir' => $no_chdir,
+ 'preprocess' => sub { return sort @_ },
+ 'wanted' => sub {
+ -f or return; # the first call is for $root_dir itself.
+ my $got = $File::Find::name;
+ my $exp = "$root_dir$expected_first_file";
+ print "# no_chdir=$no_chdir $root_dir '$got'\n";
+ is($got, $exp,
+ "Win32: Run 'find' with 'no_chdir' set to $no_chdir" );
+ die "done"; # do not process the entire drive!
+ },
+ }, $root_dir);
+ };
+ # If F:F:f did not die "done" then it did not Check() either.
+ unless ($@ and $@ =~ /done/) {
+ print "# no_chdir=$no_chdir $root_dir ",
+ ($@ ? "error: $@" : "no files found"), "\n";
+ ok(0, "Win32: 0");
+ }
}
}
- }
- if ($created_file) {
- unlink("/$expected_first_file")
- or warn "can't unlink /$expected_first_file: $!\n";
+ if ($created_file) {
+ unlink("/$expected_first_file")
+ or warn "can't unlink /$expected_first_file: $!\n";
+ }
}
}
diff --git a/gnu/usr.bin/perl/ext/File-Glob/Glob.pm b/gnu/usr.bin/perl/ext/File-Glob/Glob.pm
index 368a755f509..b7e71abcd3f 100644
--- a/gnu/usr.bin/perl/ext/File-Glob/Glob.pm
+++ b/gnu/usr.bin/perl/ext/File-Glob/Glob.pm
@@ -35,7 +35,7 @@ $EXPORT_TAGS{bsd_glob} = [@{$EXPORT_TAGS{glob}}];
@EXPORT_OK = (@{$EXPORT_TAGS{'glob'}}, 'csh_glob');
-$VERSION = '1.32';
+$VERSION = '1.33';
sub import {
require Exporter;
@@ -70,13 +70,6 @@ if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos)$/) {
$DEFAULT_FLAGS |= GLOB_NOCASE();
}
-# File::Glob::glob() removed in perl-5.30 because its prototype is different
-# from CORE::glob() (use bsd_glob() instead)
-sub glob {
- die "File::Glob::glob() was removed in perl 5.30. " .
- "Use File::Glob::bsd_glob() instead. $!";
-}
-
1;
__END__
diff --git a/gnu/usr.bin/perl/ext/File-Glob/bsd_glob.c b/gnu/usr.bin/perl/ext/File-Glob/bsd_glob.c
index 0d042b4afb5..b038dd117a3 100644
--- a/gnu/usr.bin/perl/ext/File-Glob/bsd_glob.c
+++ b/gnu/usr.bin/perl/ext/File-Glob/bsd_glob.c
@@ -457,7 +457,7 @@ globtilde(const Char *pattern, Char *patbuf, size_t patbuf_len, glob_t *pglob)
* first and then trying the password file
* or $USERPROFILE on DOSISH systems
*/
- if ((h = getenv("HOME")) == NULL) {
+ if ((h = PerlEnv_getenv("HOME")) == NULL) {
#ifdef HAS_PASSWD
struct passwd *pwd;
if ((pwd = getpwuid(getuid())) == NULL)
@@ -469,7 +469,7 @@ globtilde(const Char *pattern, Char *patbuf, size_t patbuf_len, glob_t *pglob)
* When no passwd file, fallback to the USERPROFILE
* environment variable on DOSish systems.
*/
- if ((h = getenv("USERPROFILE")) == NULL) {
+ if ((h = PerlEnv_getenv("USERPROFILE")) == NULL) {
return pattern;
}
#else
diff --git a/gnu/usr.bin/perl/ext/Hash-Util/lib/Hash/Util.pm b/gnu/usr.bin/perl/ext/Hash-Util/lib/Hash/Util.pm
index 1a9e9ac8103..4224239d91d 100644
--- a/gnu/usr.bin/perl/ext/Hash-Util/lib/Hash/Util.pm
+++ b/gnu/usr.bin/perl/ext/Hash-Util/lib/Hash/Util.pm
@@ -42,7 +42,7 @@ our @EXPORT_OK = qw(
BEGIN {
# make sure all our XS routines are available early so their prototypes
# are correctly applied in the following code.
- our $VERSION = '0.22';
+ our $VERSION = '0.23';
require XSLoader;
XSLoader::load();
}
@@ -115,7 +115,7 @@ Hash::Util - A selection of general-utility hash subroutines
lock_hash (%hash);
unlock_hash(%hash);
- my $hashes_are_randomised = hash_seed() != 0;
+ my $hashes_are_randomised = hash_seed() !~ /^\0+$/;
my $int_hash_value = hash_value( 'string' );
diff --git a/gnu/usr.bin/perl/ext/I18N-Langinfo/Langinfo.pm b/gnu/usr.bin/perl/ext/I18N-Langinfo/Langinfo.pm
index a0fc52a9f33..7206e1ce859 100644
--- a/gnu/usr.bin/perl/ext/I18N-Langinfo/Langinfo.pm
+++ b/gnu/usr.bin/perl/ext/I18N-Langinfo/Langinfo.pm
@@ -72,7 +72,7 @@ our @EXPORT_OK = qw(
YESSTR
);
-our $VERSION = '0.18';
+our $VERSION = '0.19';
XSLoader::load();
@@ -180,6 +180,8 @@ For the eras based on typically some ruler, such as the Japanese Emperor
=back
+=head2 For systems without C<nl_langinfo>
+
Starting in Perl 5.28, this module is available even on systems that lack a
native C<nl_langinfo>. On such systems, it uses various methods to construct
what that function, if present, would return. But there are potential
diff --git a/gnu/usr.bin/perl/ext/IPC-Open3/lib/IPC/Open3.pm b/gnu/usr.bin/perl/ext/IPC-Open3/lib/IPC/Open3.pm
index e5924a30a65..ce39d78f1ea 100644
--- a/gnu/usr.bin/perl/ext/IPC-Open3/lib/IPC/Open3.pm
+++ b/gnu/usr.bin/perl/ext/IPC-Open3/lib/IPC/Open3.pm
@@ -9,7 +9,7 @@ require Exporter;
use Carp;
use Symbol qw(gensym qualify);
-$VERSION = '1.20';
+$VERSION = '1.21';
@ISA = qw(Exporter);
@EXPORT = qw(open3);
@@ -19,37 +19,48 @@ IPC::Open3 - open a process for reading, writing, and error handling using open3
=head1 SYNOPSIS
- $pid = open3(\*CHLD_IN, \*CHLD_OUT, \*CHLD_ERR,
- 'some cmd and args', 'optarg', ...);
+ use Symbol 'gensym'; # vivify a separate handle for STDERR
+ my $pid = open3(my $chld_in, my $chld_out, my $chld_err = gensym,
+ 'some', 'cmd', 'and', 'args');
+ # or pass the command through the shell
+ my $pid = open3(my $chld_in, my $chld_out, my $chld_err = gensym,
+ 'some cmd and args');
- my($wtr, $rdr, $err);
- use Symbol 'gensym'; $err = gensym;
- $pid = open3($wtr, $rdr, $err,
- 'some cmd and args', 'optarg', ...);
+ # read from parent STDIN
+ # send STDOUT and STDERR to already open handle
+ open my $outfile, '>>', 'output.txt' or die "open failed: $!";
+ my $pid = open3('<&STDIN', $outfile, undef,
+ 'some', 'cmd', 'and', 'args');
+ # write to parent STDOUT and STDERR
+ my $pid = open3(my $chld_in, '>&STDOUT', '>&STDERR',
+ 'some', 'cmd', 'and', 'args');
+
+ # reap zombie and retrieve exit status
waitpid( $pid, 0 );
my $child_exit_status = $? >> 8;
=head1 DESCRIPTION
-Extremely similar to open2(), open3() spawns the given $cmd and
-connects CHLD_OUT for reading from the child, CHLD_IN for writing to
-the child, and CHLD_ERR for errors. If CHLD_ERR is false, or the
-same file descriptor as CHLD_OUT, then STDOUT and STDERR of the child
-are on the same filehandle (this means that an autovivified lexical
-cannot be used for the STDERR filehandle, see SYNOPSIS). The CHLD_IN
+Extremely similar to open2(), open3() spawns the given command and
+connects $chld_out for reading from the child, $chld_in for writing to
+the child, and $chld_err for errors. If $chld_err is false, or the
+same file descriptor as $chld_out, then STDOUT and STDERR of the child
+are on the same filehandle. This means that an autovivified lexical
+cannot be used for the STDERR filehandle, but gensym from L<Symbol> can
+be used to vivify a new glob reference, see L</SYNOPSIS>. The $chld_in
will have autoflush turned on.
-If CHLD_IN begins with C<< <& >>, then CHLD_IN will be closed in the
-parent, and the child will read from it directly. If CHLD_OUT or
-CHLD_ERR begins with C<< >& >>, then the child will send output
-directly to that filehandle. In both cases, there will be a dup(2)
-instead of a pipe(2) made.
+If $chld_in begins with C<< <& >>, then $chld_in will be closed in the
+parent, and the child will read from it directly. If $chld_out or
+$chld_err begins with C<< >& >>, then the child will send output
+directly to that filehandle. In both cases, there will be a L<dup(2)>
+instead of a L<pipe(2)> made.
-If either reader or writer is the null string, this will be replaced
-by an autogenerated filehandle. If so, you must pass a valid lvalue
-in the parameter slot so it can be overwritten in the caller, or
-an exception will be raised.
+If either reader or writer is the empty string or undefined, this will
+be replaced by an autogenerated filehandle. If so, you must pass a
+valid lvalue in the parameter slot so it can be overwritten in the
+caller, or an exception will be raised.
The filehandles may also be integers, in which case they are understood
as file descriptors.
@@ -57,15 +68,15 @@ as file descriptors.
open3() returns the process ID of the child process. It doesn't return on
failure: it just raises an exception matching C</^open3:/>. However,
C<exec> failures in the child (such as no such file or permission denied),
-are just reported to CHLD_ERR under Windows and OS/2, as it is not possible
+are just reported to $chld_err under Windows and OS/2, as it is not possible
to trap them.
-If the child process dies for any reason, the next write to CHLD_IN is
+If the child process dies for any reason, the next write to $chld_in is
likely to generate a SIGPIPE in the parent, which is fatal by default.
So you may wish to handle this signal.
Note if you specify C<-> as the command, in an analogous fashion to
-C<open(FOO, "-|")> the child process will just be the forked Perl
+C<open(my $fh, "-|")> the child process will just be the forked Perl
process rather than an external command. This feature isn't yet
supported on Win32 platforms.
@@ -78,14 +89,14 @@ processes. See L<perlfunc/waitpid> for more information.
If you try to read from the child's stdout writer and their stderr
writer, you'll have problems with blocking, which means you'll want
-to use select() or the IO::Select, which means you'd best use
+to use select() or L<IO::Select>, which means you'd best use
sysread() instead of readline() for normal stuff.
This is very dangerous, as you may block forever. It assumes it's
-going to talk to something like B<bc>, both writing to it and reading
+going to talk to something like L<bc(1)>, both writing to it and reading
from it. This is presumably safe because you "know" that commands
-like B<bc> will read a line at a time and output a line at a time.
-Programs like B<sort> that read their entire input stream first,
+like L<bc(1)> will read a line at a time and output a line at a time.
+Programs like L<sort(1)> that read their entire input stream first,
however, are quite apt to cause deadlock.
The big problem with this approach is that if you don't have control
diff --git a/gnu/usr.bin/perl/ext/NDBM_File/Makefile.PL b/gnu/usr.bin/perl/ext/NDBM_File/Makefile.PL
index 539a377488f..fe2cb407f57 100644
--- a/gnu/usr.bin/perl/ext/NDBM_File/Makefile.PL
+++ b/gnu/usr.bin/perl/ext/NDBM_File/Makefile.PL
@@ -1,7 +1,7 @@
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'NDBM_File',
- #LIBS => ["-L/usr/local/lib -lndbm", "-ldbm -lucb"],
+ LIBS => ["-L/usr/local/lib -lndbm", "-ldbm -lucb"],
XSPROTOARG => '-noprototypes', # XXX remove later?
VERSION_FROM => 'NDBM_File.pm',
);
diff --git a/gnu/usr.bin/perl/ext/Opcode/Opcode.pm b/gnu/usr.bin/perl/ext/Opcode/Opcode.pm
index 9d97ef15401..9351c3ba207 100644
--- a/gnu/usr.bin/perl/ext/Opcode/Opcode.pm
+++ b/gnu/usr.bin/perl/ext/Opcode/Opcode.pm
@@ -6,7 +6,7 @@ use strict;
our($VERSION, @ISA, @EXPORT_OK);
-$VERSION = "1.43";
+$VERSION = "1.48";
use Carp;
use Exporter ();
@@ -117,6 +117,13 @@ Safe modules for more typical uses.
=head1 WARNING
+The Opcode module does not implement an effective sandbox for
+evaluating untrusted code with the perl interpreter.
+
+Bugs in the perl interpreter that could be abused to bypass
+Opcode restrictions are not treated as vulnerabilities. See
+L<perlsecpolicy> for additional information.
+
The authors make B<no warranty>, implied or otherwise, about the
suitability of this software for safety or security purposes.
@@ -324,6 +331,7 @@ invert_opset function.
lt i_lt gt i_gt le i_le ge i_ge eq i_eq ne i_ne ncmp i_ncmp
slt sgt sle sge seq sne scmp
+ isa
substr vec stringify study pos length index rindex ord chr
@@ -344,6 +352,8 @@ invert_opset function.
method_super method_redir method_redir_super
-- XXX loops via recursion?
+ cmpchain_and cmpchain_dup
+
leaveeval -- needed for Safe to operate, is safe
without entereval
@@ -493,7 +503,7 @@ A handy tag name for a I<reasonable> default set of ops beyond the
:default optag. Like :default (and indeed all the other optags) its
current definition is unstable while development continues. It will change.
-The :browse tag represents the next step beyond :default. It it a
+The :browse tag represents the next step beyond :default. It is a
superset of the :default ops and adds :filesys_read the :sys_db.
The intent being that scripts can access more (possibly sensitive)
information about your system but not be able to change it.
diff --git a/gnu/usr.bin/perl/ext/Opcode/Opcode.xs b/gnu/usr.bin/perl/ext/Opcode/Opcode.xs
index 1401b25f1bb..121b14f8e37 100644
--- a/gnu/usr.bin/perl/ext/Opcode/Opcode.xs
+++ b/gnu/usr.bin/perl/ext/Opcode/Opcode.xs
@@ -360,7 +360,7 @@ CODE:
bitmap[len] = ~bitmap[len];
/* take care of extra bits beyond PL_maxo in last byte */
if (PL_maxo & 07)
- bitmap[opset_len-1] &= ~(0xFF << (PL_maxo & 0x07));
+ bitmap[opset_len-1] &= ~(char)(0xFF << (PL_maxo & 0x07));
}
ST(0) = opset;
diff --git a/gnu/usr.bin/perl/ext/POSIX/POSIX.xs b/gnu/usr.bin/perl/ext/POSIX/POSIX.xs
index 5b9bbc429b9..77bb829849c 100644
--- a/gnu/usr.bin/perl/ext/POSIX/POSIX.xs
+++ b/gnu/usr.bin/perl/ext/POSIX/POSIX.xs
@@ -1086,6 +1086,7 @@ static NV my_rint(NV x)
}
#endif
not_here("rint");
+ NOT_REACHED; /* NOTREACHED */
}
#endif
@@ -1541,22 +1542,14 @@ END_EXTERN_C
#define waitpid(a,b,c) not_here("waitpid")
#endif
-#ifndef HAS_MBLEN
-#ifndef mblen
+#if ! defined(HAS_MBLEN) && ! defined(HAS_MBRLEN)
#define mblen(a,b) not_here("mblen")
#endif
-#endif
-#ifndef HAS_MBSTOWCS
-#define mbstowcs(s, pwcs, n) not_here("mbstowcs")
-#endif
-#ifndef HAS_MBTOWC
+#if ! defined(HAS_MBTOWC) && ! defined(HAS_MBRTOWC)
#define mbtowc(pwc, s, n) not_here("mbtowc")
#endif
-#ifndef HAS_WCSTOMBS
-#define wcstombs(s, pwcs, n) not_here("wcstombs")
-#endif
#ifndef HAS_WCTOMB
-#define wctomb(s, wchar) not_here("wcstombs")
+#define wctomb(s, wchar) not_here("wctomb")
#endif
#if !defined(HAS_MBLEN) && !defined(HAS_MBSTOWCS) && !defined(HAS_MBTOWC) && !defined(HAS_WCSTOMBS) && !defined(HAS_WCTOMB)
/* If we don't have these functions, then we wouldn't have gotten a typedef
@@ -1758,7 +1751,7 @@ allocate_struct(pTHX_ SV *rv, const STRLEN size, const char *packname) {
* "write through" environment changes to the process environment.
*
* (c) Even the primary Perl interpreter won't update the CRT copy of the
- * the environment, only the Win32API copy (it calls win32_putenv()).
+ * environment, only the Win32API copy (it calls win32_putenv()).
*
* As with CPerlHost::Getenv() and CPerlHost::Putenv() themselves, it makes
* sense to only update the process environment when inside the main
@@ -1843,8 +1836,11 @@ new(packname = "POSIX::SigSet", ...)
sizeof(sigset_t),
packname);
sigemptyset(s);
- for (i = 1; i < items; i++)
- sigaddset(s, SvIV(ST(i)));
+ for (i = 1; i < items; i++) {
+ IV sig = SvIV(ST(i));
+ if (sigaddset(s, sig) < 0)
+ croak("POSIX::Sigset->new: failed to add signal %" IVdf, sig);
+ }
XSRETURN(1);
}
@@ -3052,6 +3048,8 @@ sigaction(sig, optaction, oldaction = 0)
/* Remember old disposition if desired. */
if (oldaction) {
+ int safe;
+
svp = hv_fetchs(oldaction, "HANDLER", TRUE);
if(!svp)
croak("Can't supply an oldaction without a HANDLER");
@@ -3082,24 +3080,55 @@ sigaction(sig, optaction, oldaction = 0)
svp = hv_fetchs(oldaction, "FLAGS", TRUE);
sv_setiv(*svp, oact.sa_flags);
- /* Get back whether the old handler used safe signals. */
+ /* Get back whether the old handler used safe signals;
+ * i.e. it used Perl_csighandler[13] rather than
+ * Perl_sighandler[13]
+ */
+ safe =
+#ifdef SA_SIGINFO
+ (oact.sa_flags & SA_SIGINFO)
+ ? ( oact.sa_sigaction == PL_csighandler3p
+#ifdef PERL_USE_3ARG_SIGHANDLER
+ || oact.sa_sigaction == PL_csighandlerp
+#endif
+ )
+ :
+#endif
+ ( oact.sa_handler == PL_csighandler1p
+#ifndef PERL_USE_3ARG_SIGHANDLER
+ || oact.sa_handler == PL_csighandlerp
+#endif
+ );
+
svp = hv_fetchs(oldaction, "SAFE", TRUE);
- sv_setiv(*svp,
- /* compare incompatible pointers by casting to integer */
- PTR2nat(oact.sa_handler) == PTR2nat(PL_csighandlerp));
+ sv_setiv(*svp, safe);
}
if (action) {
+ int safe;
+
+ /* Set up any desired flags. */
+ svp = hv_fetchs(action, "FLAGS", FALSE);
+ act.sa_flags = svp ? SvIV(*svp) : 0;
+
/* Safe signals use "csighandler", which vectors through the
PL_sighandlerp pointer when it's safe to do so.
(BTW, "csighandler" is very different from "sighandler".) */
svp = hv_fetchs(action, "SAFE", FALSE);
- act.sa_handler =
- DPTR2FPTR(
- void (*)(int),
- (*svp && SvTRUE(*svp))
- ? PL_csighandlerp : PL_sighandlerp
- );
+ safe = *svp && SvTRUE(*svp);
+#ifdef SA_SIGINFO
+ if (act.sa_flags & SA_SIGINFO) {
+ /* 3-arg handler */
+ act.sa_sigaction =
+ safe ? PL_csighandler3p : PL_sighandler3p;
+ }
+ else
+#endif
+ {
+ /* 1-arg handler */
+ act.sa_handler =
+ safe ? PL_csighandler1p : PL_sighandler1p;
+ }
/* Vector new Perl handler through %SIG.
(The core signal handlers read %SIG to dispatch.) */
@@ -3134,10 +3163,6 @@ sigaction(sig, optaction, oldaction = 0)
else
sigemptyset(& act.sa_mask);
- /* Set up any desired flags. */
- svp = hv_fetchs(action, "FLAGS", FALSE);
- act.sa_flags = svp ? SvIV(*svp) : 0;
-
/* Don't worry about cleaning up *sigsvp if this fails,
* because that means we tried to disposition a
* nonblockable signal, in which case *sigsvp is
@@ -3315,70 +3340,155 @@ write(fd, buffer, nbytes)
void
abort()
-#ifdef I_WCHAR
-# include <wchar.h>
+#if defined(HAS_MBRLEN) && (defined(USE_ITHREADS) || ! defined(HAS_MBLEN))
+# define USE_MBRLEN
+#else
+# undef USE_MBRLEN
#endif
int
-mblen(s, n)
- char * s
+mblen(s, n = ~0)
+ SV * s
size_t n
- PREINIT:
-#if defined(USE_ITHREADS) && defined(HAS_MBRLEN)
- mbstate_t ps;
-#endif
CODE:
-#if defined(USE_ITHREADS) && defined(HAS_MBRLEN)
- memset(&ps, 0, sizeof(ps)); /* Initialize state */
- RETVAL = mbrlen(s, n, &ps); /* Prefer reentrant version */
-#else
- /* This might prevent some races, but locales can be switched out
- * without locking, so this isn't a cure all */
- LOCALE_LOCK;
+ errno = 0;
- RETVAL = mblen(s, n);
- LOCALE_UNLOCK;
+ SvGETMAGIC(s);
+ if (! SvOK(s)) {
+#ifdef USE_MBRLEN
+ /* Initialize the shift state in PL_mbrlen_ps. The Standard says
+ * that should be all zeros. */
+ memzero(&PL_mbrlen_ps, sizeof(PL_mbrlen_ps));
+ RETVAL = 0;
+#else
+ LOCALE_LOCK;
+ RETVAL = mblen(NULL, 0);
+ LOCALE_UNLOCK;
#endif
+ }
+ else { /* Not resetting state */
+ SV * byte_s = sv_2mortal(newSVsv_nomg(s));
+ if (! sv_utf8_downgrade_nomg(byte_s, TRUE)) {
+ SETERRNO(EINVAL, LIB_INVARG);
+ RETVAL = -1;
+ }
+ else {
+ size_t len;
+ char * string = SvPV(byte_s, len);
+ if (n < len) len = n;
+#ifdef USE_MBRLEN
+ RETVAL = (SSize_t) mbrlen(string, len, &PL_mbrlen_ps);
+ if (RETVAL < 0) RETVAL = -1; /* Use mblen() ret code for
+ transparency */
+#else
+ /* Locking prevents races, but locales can be switched out
+ * without locking, so this isn't a cure all */
+ LOCALE_LOCK;
+ RETVAL = mblen(string, len);
+ LOCALE_UNLOCK;
+#endif
+ }
+ }
OUTPUT:
RETVAL
-size_t
-mbstowcs(s, pwcs, n)
- wchar_t * s
- char * pwcs
- size_t n
+#if defined(HAS_MBRTOWC) && (defined(USE_ITHREADS) || ! defined(HAS_MBTOWC))
+# define USE_MBRTOWC
+#else
+# undef USE_MBRTOWC
+#endif
int
-mbtowc(pwc, s, n)
- wchar_t * pwc
- char * s
+mbtowc(pwc, s, n = ~0)
+ SV * pwc
+ SV * s
size_t n
- PREINIT:
-#if defined(USE_ITHREADS) && defined(HAS_MBRTOWC)
- mbstate_t ps;
-#endif
CODE:
-#if defined(USE_ITHREADS) && defined(HAS_MBRTOWC)
- memset(&ps, 0, sizeof(ps));;
- PERL_UNUSED_RESULT(mbrtowc(pwc, NULL, 0, &ps));/* Reset any shift state */
errno = 0;
- RETVAL = mbrtowc(pwc, s, n, &ps); /* Prefer reentrant version */
+ SvGETMAGIC(s);
+ if (! SvOK(s)) { /* Initialize state */
+#ifdef USE_MBRTOWC
+ /* Initialize the shift state to all zeros in PL_mbrtowc_ps. */
+ memzero(&PL_mbrtowc_ps, sizeof(PL_mbrtowc_ps));
+ RETVAL = 0;
#else
- RETVAL = mbtowc(pwc, s, n);
+ LOCALE_LOCK;
+ RETVAL = mbtowc(NULL, NULL, 0);
+ LOCALE_UNLOCK;
#endif
+ }
+ else { /* Not resetting state */
+ wchar_t wc;
+ SV * byte_s = sv_2mortal(newSVsv_nomg(s));
+ if (! sv_utf8_downgrade_nomg(byte_s, TRUE)) {
+ SETERRNO(EINVAL, LIB_INVARG);
+ RETVAL = -1;
+ }
+ else {
+ size_t len;
+ char * string = SvPV(byte_s, len);
+ if (n < len) len = n;
+#ifdef USE_MBRTOWC
+ RETVAL = (SSize_t) mbrtowc(&wc, string, len, &PL_mbrtowc_ps);
+#else
+ /* Locking prevents races, but locales can be switched out
+ * without locking, so this isn't a cure all */
+ LOCALE_LOCK;
+ RETVAL = mbtowc(&wc, string, len);
+ LOCALE_UNLOCK;
+#endif
+ if (RETVAL >= 0) {
+ sv_setiv_mg(pwc, wc);
+ }
+ else { /* Use mbtowc() ret code for transparency */
+ RETVAL = -1;
+ }
+ }
+ }
OUTPUT:
RETVAL
-int
-wcstombs(s, pwcs, n)
- char * s
- wchar_t * pwcs
- size_t n
+#if defined(HAS_WCRTOMB) && (defined(USE_ITHREADS) || ! defined(HAS_WCTOMB))
+# define USE_WCRTOMB
+#else
+# undef USE_WCRTOMB
+#endif
int
wctomb(s, wchar)
- char * s
+ SV * s
wchar_t wchar
+ CODE:
+ errno = 0;
+ SvGETMAGIC(s);
+ if (s == &PL_sv_undef) {
+#ifdef USE_WCRTOMB
+ /* The man pages khw looked at are in agreement that this works.
+ * But probably memzero would too */
+ RETVAL = wcrtomb(NULL, L'\0', &PL_wcrtomb_ps);
+#else
+ LOCALE_LOCK;
+ RETVAL = wctomb(NULL, L'\0');
+ LOCALE_UNLOCK;
+#endif
+ }
+ else { /* Not resetting state */
+ char buffer[MB_LEN_MAX];
+#ifdef USE_WCRTOMB
+ RETVAL = wcrtomb(buffer, wchar, &PL_wcrtomb_ps);
+#else
+ /* Locking prevents races, but locales can be switched out without
+ * locking, so this isn't a cure all */
+ LOCALE_LOCK;
+ RETVAL = wctomb(buffer, wchar);
+ LOCALE_UNLOCK;
+#endif
+ if (RETVAL >= 0) {
+ sv_setpvn_mg(s, buffer, RETVAL);
+ }
+ }
+ OUTPUT:
+ RETVAL
int
strcoll(s1, s2)
@@ -3710,14 +3820,16 @@ char *
ctermid(s = 0)
char * s = 0;
CODE:
-#ifdef HAS_CTERMID_R
+#ifdef I_TERMIOS
+ /* On some systems L_ctermid is a #define; but not all; this code works
+ * for all cases (so far...) */
s = (char *) safemalloc((size_t) L_ctermid);
#endif
RETVAL = ctermid(s);
OUTPUT:
RETVAL
CLEANUP:
-#ifdef HAS_CTERMID_R
+#ifdef I_TERMIOS
Safefree(s);
#endif
diff --git a/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm b/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm
index 4de039410f4..6c4cc547ba2 100644
--- a/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm
+++ b/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm
@@ -4,7 +4,7 @@ use warnings;
our ($AUTOLOAD, %SIGRT);
-our $VERSION = '1.88';
+our $VERSION = '1.94';
require XSLoader;
diff --git a/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod b/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod
index e4f9a3d18fb..53209c9731e 100644
--- a/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod
+++ b/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod
@@ -468,7 +468,7 @@ integer value less than or equal to the numerical argument.
Returns the current floating point rounding mode, one of
- FE_TONEAREST FE_TOWARDZERO FE_UPWARD FE_UPWARD
+ FE_TONEAREST FE_TOWARDZERO FE_UPWARD FE_DOWNWARD
C<FE_TONEAREST> is like L</round>, C<FE_TOWARDZERO> is like L</trunc> [C99].
@@ -941,9 +941,11 @@ for creating hard links into files, see L<perlfunc/link>.
=item C<localeconv>
Get numeric formatting information. Returns a reference to a hash
-containing the current underlying locale's formatting values. Users of this function
-should also read L<perllocale>, which provides a comprehensive
-discussion of Perl locale handling, including
+containing the formatting values of the locale that currently underlies
+the program, regardless of whether or not it is called from within the
+scope of a S<C<use locale>>. Users of this function should also read
+L<perllocale>, which provides a comprehensive discussion of Perl locale
+handling, including
L<a section devoted to this function|perllocale/The localeconv function>.
Prior to Perl 5.28, or when operating in a non thread-safe environment,
it should not be used in a threaded application unless it's certain that
@@ -951,7 +953,7 @@ the underlying locale is C or POSIX. This is because it otherwise
changes the locale, which globally affects all threads simultaneously.
Windows platforms starting with Visual Studio 2005 are mostly
thread-safe, but use of this function in those prior to Visual Studio
-2015 can interefere with a thread that has called
+2015 can interfere with a thread that has called
L<perlapi/switch_to_global_locale>.
Here is how to query the database for the B<de> (Deutsch or German) locale.
@@ -1067,25 +1069,64 @@ Not implemented. C<malloc()> is C-specific. Perl does memory management transp
=item C<mblen>
-This is identical to the C function C<mblen()>.
-
-Core Perl does not have any support for the wide and multibyte
-characters of the C standards, except under UTF-8 locales, so this might
-be a rather useless function.
-
-However, Perl supports Unicode, see L<perluniintro>.
-
-=item C<mbstowcs>
-
-This is identical to the C function C<mbstowcs()>.
-
-See L</mblen>.
+This is the same as the C function C<mblen()> on unthreaded perls. On
+threaded perls, it transparently (almost) substitutes the more
+thread-safe L<C<mbrlen>(3)>, if available, instead of C<mblen>.
+
+Core Perl does not have any support for wide and multibyte locales,
+except Unicode UTF-8 locales. This function, in conjunction with
+L</mbtowc> and L</wctomb> may be used to roll your own decoding/encoding
+of other types of multi-byte locales.
+
+Use C<undef> as the first parameter to this function to get the effect
+of passing NULL as the first parameter to C<mblen>. This resets any
+shift state to its initial value. The return value is undefined if
+C<mbrlen> was substituted, so you should never rely on it.
+
+When the first parameter is a scalar containing a value that either is a
+PV string or can be forced into one, the return value is the number of
+bytes occupied by the first character of that string; or 0 if that first
+character is the wide NUL character; or negative if there is an error.
+This is based on the locale that currently underlies the program,
+regardless of whether or not the function is called from Perl code that
+is within the scope of S<C<use locale>>. Perl makes no attempt at
+hiding from your code any differences in the C<errno> setting between
+C<mblen> and C<mbrlen>. It does set C<errno> to 0 before calling them.
+
+The optional second parameter is ignored if it is larger than the
+actual length of the first parameter string.
=item C<mbtowc>
-This is identical to the C function C<mbtowc()>.
-
-See L</mblen>.
+This is the same as the C function C<mbtowc()> on unthreaded perls. On
+threaded perls, it transparently (almost) substitutes the more
+thread-safe L<C<mbrtowc>(3)>, if available, instead of C<mbtowc>.
+
+Core Perl does not have any support for wide and multibyte locales,
+except Unicode UTF-8 locales. This function, in conjunction with
+L</mblen> and L</wctomb> may be used to roll your own decoding/encoding
+of other types of multi-byte locales.
+
+The first parameter is a scalar into which, upon success, the wide
+character represented by the multi-byte string contained in the second
+parameter is stored. The optional third parameter is ignored if it is
+larger than the actual length of the second parameter string.
+
+Use C<undef> as the second parameter to this function to get the effect
+of passing NULL as the second parameter to C<mbtowc>. This resets any
+shift state to its initial value. The return value is undefined if
+C<mbrtowc> was substituted, so you should never rely on it.
+
+When the second parameter is a scalar containing a value that either is
+a PV string or can be forced into one, the return value is the number of
+bytes occupied by the first character of that string; or 0 if that first
+character is the wide NUL character; or negative if there is an error.
+This is based on the locale that currently underlies the program,
+regardless of whether or not the function is called from Perl code that
+is within the scope of S<C<use locale>>. Perl makes no attempt at
+hiding from your code any differences in the C<errno> setting between
+C<mbtowc> and C<mbrtowc>. It does set C<errno> to 0 before calling
+them.
=item C<memchr>
@@ -1451,14 +1492,19 @@ see L<perlfunc/eval>.
=item C<setlocale>
-WARNING! Do NOT use this function in a L<thread|threads>. The locale
-will change in all other threads at the same time, and should your
-thread get paused by the operating system, and another started, that
-thread will not have the locale it is expecting. On some platforms,
-there can be a race leading to segfaults if two threads call this
-function nearly simultaneously.
-
-Modifies and queries the program's underlying locale. Users of this
+WARNING! Prior to Perl 5.28 or on a system that does not support
+thread-safe locale operations, do NOT use this function in a
+L<thread|threads>. The locale will change in all other threads at the
+same time, and should your thread get paused by the operating system,
+and another started, that thread will not have the locale it is
+expecting. On some platforms, there can be a race leading to segfaults
+if two threads call this function nearly simultaneously. This warning
+does not apply on unthreaded builds, or on perls where
+C<${^SAFE_LOCALES}> exists and is non-zero; namely Perl 5.28 and later
+compiled to be locale-thread-safe.
+
+This function
+modifies and queries the program's underlying locale. Users of this
function should read L<perllocale>, whch provides a comprehensive
discussion of Perl locale handling, knowledge of which is necessary to
properly use this function. It contains
@@ -1466,7 +1512,9 @@ L<a section devoted to this function|perllocale/The setlocale function>.
The discussion here is merely a summary reference for C<setlocale()>.
Note that Perl itself is almost entirely unaffected by the locale
except within the scope of S<C<"use locale">>. (Exceptions are listed
-in L<perllocale/Not within the scope of "use locale">.)
+in L<perllocale/Not within the scope of "use locale">, and
+locale-dependent functions within the POSIX module ARE always affected
+by the current locale.)
The following examples assume
@@ -1816,10 +1864,11 @@ POSIX-compliant systems set C<$!> (C<$ERRNO>) to indicate a translation
error, so clear C<$!> before calling C<strtod>. However, non-POSIX systems
may not check for overflow, and therefore will never set C<$!>.
-C<strtod> respects any POSIX C<setlocale()> C<LC_TIME> settings,
+C<strtod> respects any POSIX C<setlocale()> C<LC_NUMERIC> settings,
regardless of whether or not it is called from Perl code that is within
-the scope of S<C<use locale>>. This means it should not be used in a
-threaded application unless it's certain that the underlying locale is C
+the scope of S<C<use locale>>. Prior to Perl 5.28, or when operating in
+a non thread-safe environment, it should not be used in a threaded
+application unless it's certain that the underlying locale is C
or POSIX. This is because it otherwise changes the locale, which
globally affects all threads simultaneously.
@@ -2004,6 +2053,7 @@ is no longer available; instead use L<File::Temp>.
=item C<tolower>
+This function has been removed as of v5.26.
This is identical to the C function, except that it can apply to a single
character or to a whole string, and currently operates as if the locale
always is "C". Consider using the C<lc()> function, see L<perlfunc/lc>,
@@ -2012,6 +2062,7 @@ strings.
=item C<toupper>
+This function has been removed as of v5.26.
This is similar to the C function, except that it can apply to a single
character or to a whole string, and currently operates as if the locale
always is "C". Consider using the C<uc()> function, see L<perlfunc/uc>,
@@ -2104,17 +2155,34 @@ builtin C<waitpid()> function, see L<perlfunc/waitpid>.
$pid = POSIX::waitpid( -1, POSIX::WNOHANG );
print "status = ", ($? / 256), "\n";
-=item C<wcstombs>
-
-This is identical to the C function C<wcstombs()>.
-
See L</mblen>.
=item C<wctomb>
-This is identical to the C function C<wctomb()>.
-
-See L</mblen>.
+This is the same as the C function C<wctomb()> on unthreaded perls. On
+threaded perls, it transparently (almost) substitutes the more
+thread-safe L<C<wcrtomb>(3)>, if available, instead of C<wctomb>.
+
+Core Perl does not have any support for wide and multibyte locales,
+except Unicode UTF-8 locales. This function, in conjunction with
+L</mblen> and L</mbtowc> may be used to roll your own decoding/encoding
+of other types of multi-byte locales.
+
+Use C<undef> as the first parameter to this function to get the effect
+of passing NULL as the first parameter to C<wctomb>. This resets any
+shift state to its initial value. The return value is undefined if
+C<wcrtomb> was substituted, so you should never rely on it.
+
+When the first parameter is a scalar, the code point contained in the
+scalar second parameter is converted into a multi-byte string and stored
+into the first parameter scalar. This is based on the locale that
+currently underlies the program, regardless of whether or not the
+function is called from Perl code that is within the scope of S<C<use
+locale>>. The return value is the number of bytes stored; or negative
+if the code point isn't representable in the current locale. Perl makes
+no attempt at hiding from your code any differences in the C<errno>
+setting between C<wctomb> and C<wcrtomb>. It does set C<errno> to 0
+before calling them.
=item C<write>
@@ -2257,6 +2325,9 @@ Create a set with C<SIGUSR1>.
$sigset = POSIX::SigSet->new( &POSIX::SIGUSR1 );
+Throws an error if any of the signals supplied cannot be added to the
+set.
+
=item C<addset>
Add a signal to a SigSet object.
diff --git a/gnu/usr.bin/perl/ext/POSIX/t/time.t b/gnu/usr.bin/perl/ext/POSIX/t/time.t
index 4b10eb83350..5e71d27f66b 100644
--- a/gnu/usr.bin/perl/ext/POSIX/t/time.t
+++ b/gnu/usr.bin/perl/ext/POSIX/t/time.t
@@ -52,11 +52,16 @@ is(asctime(POSIX::localtime(12345678)), ctime(12345678),
"asctime() and ctime() at 12345678");
# Careful! strftime() is locale sensitive. Let's take care of that
-my $orig_loc = 'C';
+my $orig_time_loc = 'C';
+my $orig_ctype_loc = 'C';
if (locales_enabled('LC_TIME')) {
- $orig_loc = setlocale(LC_TIME) || die "Cannot get locale information: $!";
+ $orig_time_loc = setlocale(LC_TIME) || die "Cannot get time locale information: $!";
setlocale(LC_TIME, "C") || die "Cannot setlocale() to C: $!";
}
+if (locales_enabled('LC_CTYPE')) {
+ $orig_ctype_loc = setlocale(LC_CTYPE) || die "Cannot get ctype locale information: $!";
+ setlocale(LC_CTYPE, "C") || die "Cannot setlocale() to C: $!";
+}
my $jan_16 = 15 * 86400;
is(ctime($jan_16), strftime("%a %b %d %H:%M:%S %Y\n", CORE::localtime($jan_16)),
"get ctime() equal to strftime()");
@@ -78,7 +83,10 @@ is(ord strftime($ss, POSIX::localtime(time)),
unlike($ss, qr/\w/, 'Still not internally UTF-8 encoded');
if (locales_enabled('LC_TIME')) {
- setlocale(LC_TIME, $orig_loc) || die "Cannot setlocale() back to orig: $!";
+ setlocale(LC_TIME, $orig_time_loc) || die "Cannot setlocale(LC_TIME) back to orig: $!";
+}
+if (locales_enabled('LC_CTYPE')) {
+ setlocale(LC_CTYPE, $orig_ctype_loc) || die "Cannot setlocale(LC_CTYPE) back to orig: $!";
}
# clock() seems to have different definitions of what it does between POSIX
diff --git a/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.pm b/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.pm
index 35ad712d0a1..daf44571880 100644
--- a/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.pm
+++ b/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.pm
@@ -1,7 +1,7 @@
package PerlIO::encoding;
use strict;
-our $VERSION = '0.27';
+our $VERSION = '0.28';
our $DEBUG = 0;
$DEBUG and warn __PACKAGE__, " called by ", join(", ", caller), "\n";
diff --git a/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.xs b/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.xs
index 941d7862666..9d98d878db2 100644
--- a/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.xs
+++ b/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.xs
@@ -361,7 +361,7 @@ PerlIOEncode_fill(pTHX_ PerlIO * f)
if (!SvPOKp(e->dataSV)) (void)SvPV_force_nolen(e->dataSV);
use -= SvCUR(e->dataSV);
PerlIO_set_ptrcnt(n, ptr+use, (avail-use));
- /* and as we did not take it it isn't pending */
+ /* and as we did not take it, it isn't pending */
SvCUR_set(e->dataSV,0);
} else {
/* Got nothing - assume partial character so we need some more */
diff --git a/gnu/usr.bin/perl/ext/PerlIO-encoding/t/encoding.t b/gnu/usr.bin/perl/ext/PerlIO-encoding/t/encoding.t
index 41cefcb1377..367b0cf4f21 100755
--- a/gnu/usr.bin/perl/ext/PerlIO-encoding/t/encoding.t
+++ b/gnu/usr.bin/perl/ext/PerlIO-encoding/t/encoding.t
@@ -207,13 +207,10 @@ package Globber {
# important.
# We need a double eval, as scope unwinding will close the handle,
# which croaks.
-# Under debugging builds with PERL_DESTRUCT_LEVEL set, we have to skip this
+# With PERL_DESTRUCT_LEVEL set, we have to skip this
# test, as it triggers bug #115692, resulting in string table warnings.
-require Config;
SKIP: {
-skip "produces string table warnings", 2
- if "@{[Config::non_bincompat_options()]}" =~ /\bDEBUGGING\b/
- && $ENV{PERL_DESTRUCT_LEVEL};
+skip "produces string table warnings", 2 if $ENV{PERL_DESTRUCT_LEVEL};
eval { eval {
open my $fh, ">:encoding(globber)", \$buf;
diff --git a/gnu/usr.bin/perl/ext/PerlIO-via/via.pm b/gnu/usr.bin/perl/ext/PerlIO-via/via.pm
index 30083feae80..84e54bbd5c4 100644
--- a/gnu/usr.bin/perl/ext/PerlIO-via/via.pm
+++ b/gnu/usr.bin/perl/ext/PerlIO-via/via.pm
@@ -1,5 +1,5 @@
package PerlIO::via;
-our $VERSION = '0.17';
+our $VERSION = '0.18';
require XSLoader;
XSLoader::load();
1;
diff --git a/gnu/usr.bin/perl/ext/PerlIO-via/via.xs b/gnu/usr.bin/perl/ext/PerlIO-via/via.xs
index d91c6855fcf..8456242bc04 100644
--- a/gnu/usr.bin/perl/ext/PerlIO-via/via.xs
+++ b/gnu/usr.bin/perl/ext/PerlIO-via/via.xs
@@ -134,8 +134,8 @@ PerlIOVia_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg,
{
IV code = PerlIOBase_pushed(aTHX_ f, mode, Nullsv, tab);
- if (SvTYPE(arg) >= SVt_PVMG
- && mg_findext(arg, PERL_MAGIC_ext, &PerlIOVia_tag)) {
+ if (arg && SvTYPE(arg) >= SVt_PVMG
+ && mg_findext(arg, PERL_MAGIC_ext, &PerlIOVia_tag)) {
return code;
}
diff --git a/gnu/usr.bin/perl/ext/Pod-Html/lib/Pod/Html.pm b/gnu/usr.bin/perl/ext/Pod-Html/lib/Pod/Html.pm
index 64cf376f3c9..71555e723ca 100644
--- a/gnu/usr.bin/perl/ext/Pod-Html/lib/Pod/Html.pm
+++ b/gnu/usr.bin/perl/ext/Pod-Html/lib/Pod/Html.pm
@@ -2,7 +2,7 @@ package Pod::Html;
use strict;
require Exporter;
-our $VERSION = 1.24;
+our $VERSION = 1.25;
our @ISA = qw(Exporter);
our @EXPORT = qw(pod2html htmlify);
our @EXPORT_OK = qw(anchorify relativize_url);
@@ -766,22 +766,29 @@ sub resolve_pod_page_link {
push @matches, $modname if $modname =~ /::\Q$to\E\z/;
}
+ # make it look like a path instead of a namespace
+ my $modloc = File::Spec->catfile(split(/::/, $to));
+
if ($#matches == -1) {
- warn "Cannot find \"$to\" in podpath: " .
- "cannot find suitable replacement path, cannot resolve link\n"
- unless $self->quiet;
+ warn "Cannot find file \"$modloc.*\" directly under podpath, " .
+ "cannot find suitable replacement: link remains unresolved.\n"
+ if $self->verbose;
return '';
} elsif ($#matches == 0) {
- warn "Cannot find \"$to\" in podpath: " .
- "using $matches[0] as replacement path to $to\n"
- unless $self->quiet;
$path = $self->pages->{$matches[0]};
+ my $matchloc = File::Spec->catfile(split(/::/, $path));
+ warn "Cannot find file \"$modloc.*\" directly under podpath, but ".
+ "I did find \"$matchloc.*\", so I'll assume that is what you ".
+ "meant to link to.\n"
+ if $self->verbose;
} else {
- warn "Cannot find \"$to\" in podpath: " .
- "more than one possible replacement path to $to, " .
- "using $matches[-1]\n" unless $self->quiet;
# Use [-1] so newer (higher numbered) perl PODs are used
+ # XXX currently, @matches isn't sorted so this is not true
$path = $self->pages->{$matches[-1]};
+ my $matchloc = File::Spec->catfile(split(/::/, $path));
+ warn "Cannot find file \"$modloc.*\" directly under podpath, but ".
+ "I did find \"$matchloc.*\" (among others), so I'll use that " .
+ "to resolve the link.\n" if $self->verbose;
}
} else {
$path = $self->pages->{$to};
diff --git a/gnu/usr.bin/perl/ext/Sys-Hostname/Hostname.pm b/gnu/usr.bin/perl/ext/Sys-Hostname/Hostname.pm
index 8b5dde14457..2284e1f81cc 100644
--- a/gnu/usr.bin/perl/ext/Sys-Hostname/Hostname.pm
+++ b/gnu/usr.bin/perl/ext/Sys-Hostname/Hostname.pm
@@ -16,7 +16,7 @@ use warnings ();
our $host;
BEGIN {
- $VERSION = '1.22';
+ $VERSION = '1.23';
{
local $SIG{__DIE__};
eval {
@@ -29,7 +29,7 @@ BEGIN {
sub hostname {
- @_ and warnings::warnif("deprecated", "hostname() doesn't accept any arguments. This will become fatal in Perl 5.32");
+ @_ and croak("hostname() does not accepts arguments (it used to silently discard any provided)");
# method 1 - we already know it
return $host if defined $host;
diff --git a/gnu/usr.bin/perl/ext/Tie-Hash-NamedCapture/NamedCapture.xs b/gnu/usr.bin/perl/ext/Tie-Hash-NamedCapture/NamedCapture.xs
deleted file mode 100644
index 7eaae5614d0..00000000000
--- a/gnu/usr.bin/perl/ext/Tie-Hash-NamedCapture/NamedCapture.xs
+++ /dev/null
@@ -1,131 +0,0 @@
-#define PERL_NO_GET_CONTEXT /* we want efficiency */
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-/* These are tightly coupled to the RXapif_* flags defined in regexp.h */
-#define UNDEF_FATAL 0x80000
-#define DISCARD 0x40000
-#define EXPECT_SHIFT 24
-#define ACTION_MASK 0x000FF
-
-#define FETCH_ALIAS (RXapif_FETCH | (2 << EXPECT_SHIFT))
-#define STORE_ALIAS (RXapif_STORE | (3 << EXPECT_SHIFT) | UNDEF_FATAL | DISCARD)
-#define DELETE_ALIAS (RXapif_DELETE | (2 << EXPECT_SHIFT) | UNDEF_FATAL)
-#define CLEAR_ALIAS (RXapif_CLEAR | (1 << EXPECT_SHIFT) | UNDEF_FATAL | DISCARD)
-#define EXISTS_ALIAS (RXapif_EXISTS | (2 << EXPECT_SHIFT))
-#define SCALAR_ALIAS (RXapif_SCALAR | (1 << EXPECT_SHIFT))
-
-MODULE = Tie::Hash::NamedCapture PACKAGE = Tie::Hash::NamedCapture
-PROTOTYPES: DISABLE
-
-void
-_tie_it(SV *sv)
- INIT:
- GV * const gv = (GV *)sv;
- HV * const hv = GvHVn(gv);
- SV *rv = newSV_type(SVt_RV);
- CODE:
- SvRV_set(rv, newSVuv(*GvNAME(gv) == '-' ? RXapif_ALL : RXapif_ONE));
- SvROK_on(rv);
- sv_bless(rv, GvSTASH(CvGV(cv)));
-
- sv_unmagic((SV *)hv, PERL_MAGIC_tied);
- sv_magic((SV *)hv, rv, PERL_MAGIC_tied, NULL, 0);
- SvREFCNT_dec(rv); /* As sv_magic increased it by one. */
-
-SV *
-TIEHASH(package, ...)
- const char *package;
- PREINIT:
- UV flag = RXapif_ONE;
- CODE:
- mark += 2;
- while(mark < sp) {
- STRLEN len;
- const char *p = SvPV_const(*mark, len);
- if(memEQs(p, len, "all"))
- flag = SvTRUE(mark[1]) ? RXapif_ALL : RXapif_ONE;
- mark += 2;
- }
- RETVAL = newSV_type(SVt_RV);
- sv_setuv(newSVrv(RETVAL, package), flag);
- OUTPUT:
- RETVAL
-
-void
-FETCH(...)
- ALIAS:
- Tie::Hash::NamedCapture::FETCH = FETCH_ALIAS
- Tie::Hash::NamedCapture::STORE = STORE_ALIAS
- Tie::Hash::NamedCapture::DELETE = DELETE_ALIAS
- Tie::Hash::NamedCapture::CLEAR = CLEAR_ALIAS
- Tie::Hash::NamedCapture::EXISTS = EXISTS_ALIAS
- Tie::Hash::NamedCapture::SCALAR = SCALAR_ALIAS
- PREINIT:
- REGEXP *const rx = PL_curpm ? PM_GETRE(PL_curpm) : NULL;
- U32 flags;
- SV *ret;
- const U32 action = ix & ACTION_MASK;
- const int expect = ix >> EXPECT_SHIFT;
- PPCODE:
- if (items != expect)
- croak_xs_usage(cv, expect == 2 ? "$key"
- : (expect == 3 ? "$key, $value"
- : ""));
-
- if (!rx || !SvROK(ST(0))) {
- if (ix & UNDEF_FATAL)
- Perl_croak_no_modify();
- else
- XSRETURN_UNDEF;
- }
-
- flags = (U32)SvUV(SvRV(MUTABLE_SV(ST(0))));
-
- PUTBACK;
- ret = RX_ENGINE(rx)->named_buff(aTHX_ (rx), expect >= 2 ? ST(1) : NULL,
- expect >= 3 ? ST(2) : NULL, flags | action);
- SPAGAIN;
-
- if (ix & DISCARD) {
- /* Called with G_DISCARD, so our return stack state is thrown away.
- Hence if we were returned anything, free it immediately. */
- SvREFCNT_dec(ret);
- } else {
- PUSHs(ret ? sv_2mortal(ret) : &PL_sv_undef);
- }
-
-void
-FIRSTKEY(...)
- ALIAS:
- Tie::Hash::NamedCapture::NEXTKEY = 1
- PREINIT:
- REGEXP *const rx = PL_curpm ? PM_GETRE(PL_curpm) : NULL;
- U32 flags;
- SV *ret;
- const int expect = ix ? 2 : 1;
- const U32 action = ix ? RXapif_NEXTKEY : RXapif_FIRSTKEY;
- PPCODE:
- if (items != expect)
- croak_xs_usage(cv, expect == 2 ? "$lastkey" : "");
-
- if (!rx || !SvROK(ST(0)))
- XSRETURN_UNDEF;
-
- flags = (U32)SvUV(SvRV(MUTABLE_SV(ST(0))));
-
- PUTBACK;
- ret = RX_ENGINE(rx)->named_buff_iter(aTHX_ (rx),
- expect >= 2 ? ST(1) : NULL,
- flags | action);
- SPAGAIN;
-
- PUSHs(ret ? sv_2mortal(ret) : &PL_sv_undef);
-
-void
-flags(...)
- PPCODE:
- EXTEND(SP, 2);
- mPUSHu(RXapif_ONE);
- mPUSHu(RXapif_ALL);
diff --git a/gnu/usr.bin/perl/ext/XS-APItest/APItest.pm b/gnu/usr.bin/perl/ext/XS-APItest/APItest.pm
index ba76d8f4da8..8d0a7fddac4 100644
--- a/gnu/usr.bin/perl/ext/XS-APItest/APItest.pm
+++ b/gnu/usr.bin/perl/ext/XS-APItest/APItest.pm
@@ -5,7 +5,7 @@ use strict;
use warnings;
use Carp;
-our $VERSION = '1.00';
+our $VERSION = '1.09';
require XSLoader;
@@ -40,7 +40,7 @@ sub import {
}
}
foreach (keys %{$exports||{}}) {
- next unless /\A(?:rpn|calcrpn|stufftest|swaptwostmts|looprest|scopelessblock|stmtasexpr|stmtsasexpr|loopblock|blockasexpr|swaplabel|labelconst|arrayfullexpr|arraylistexpr|arraytermexpr|arrayarithexpr|arrayexprflags|DEFSV|with_vars|join_with_space)\z/;
+ next unless /\A(?:rpn|calcrpn|stufftest|swaptwostmts|looprest|scopelessblock|stmtasexpr|stmtsasexpr|loopblock|blockasexpr|swaplabel|labelconst|arrayfullexpr|arraylistexpr|arraytermexpr|arrayarithexpr|arrayexprflags|subsignature|DEFSV|with_vars|join_with_space)\z/;
$^H{"XS::APItest/$_"} = 1;
delete $exports->{$_};
}
diff --git a/gnu/usr.bin/perl/ext/XS-APItest/APItest.xs b/gnu/usr.bin/perl/ext/XS-APItest/APItest.xs
index e77ff44f330..1aab7a7cd8d 100644
--- a/gnu/usr.bin/perl/ext/XS-APItest/APItest.xs
+++ b/gnu/usr.bin/perl/ext/XS-APItest/APItest.xs
@@ -23,6 +23,12 @@ typedef PerlIO * OutputStream;
#define croak_fail_nep(h, w) croak("fail %p!=%p at " __FILE__ " line %d", (h), (w), __LINE__)
#define croak_fail_nei(h, w) croak("fail %d!=%d at " __FILE__ " line %d", (int)(h), (int)(w), __LINE__)
+#if IVSIZE == 8
+# define TEST_64BIT 1
+#else
+# define TEST_64BIT 0
+#endif
+
#ifdef EBCDIC
void
@@ -759,6 +765,7 @@ static SV *hintkey_swaplabel_sv, *hintkey_labelconst_sv;
static SV *hintkey_arrayfullexpr_sv, *hintkey_arraylistexpr_sv;
static SV *hintkey_arraytermexpr_sv, *hintkey_arrayarithexpr_sv;
static SV *hintkey_arrayexprflags_sv;
+static SV *hintkey_subsignature_sv;
static SV *hintkey_DEFSV_sv;
static SV *hintkey_with_vars_sv;
static SV *hintkey_join_with_space_sv;
@@ -1051,6 +1058,67 @@ static OP *THX_parse_keyword_arrayexprflags(pTHX)
return o ? newANONLIST(o) : newANONHASH(newOP(OP_STUB, 0));
}
+#define parse_keyword_subsignature() THX_parse_keyword_subsignature(aTHX)
+static OP *THX_parse_keyword_subsignature(pTHX)
+{
+ OP *retop = NULL, *listop, *sigop = parse_subsignature(0);
+ OP *kid;
+ int seen_nextstate = 0;
+
+ /* We can't yield the optree as is to the caller because it won't be
+ * executable outside of a called sub. We'll have to convert it into
+ * something safe for them to invoke.
+ * sigop should be an OP_NULL above a OP_LINESEQ containing
+ * OP_NEXTSTATE-separated OP_ARGCHECK and OP_ARGELEMs
+ */
+ if(sigop->op_type != OP_NULL)
+ croak("Expected parse_subsignature() to yield an OP_NULL");
+
+ if(!(sigop->op_flags & OPf_KIDS))
+ croak("Expected parse_subsignature() to yield an OP_NULL with kids");
+ listop = cUNOPx(sigop)->op_first;
+
+ if(listop->op_type != OP_LINESEQ)
+ croak("Expected parse_subsignature() to yield an OP_LINESEQ");
+
+ for(kid = cLISTOPx(listop)->op_first; kid; kid = OpSIBLING(kid)) {
+ switch(kid->op_type) {
+ case OP_NEXTSTATE:
+ /* Only emit the first one otherwise they get boring */
+ if(seen_nextstate)
+ break;
+ seen_nextstate++;
+ retop = op_append_list(OP_LIST, retop, newSVOP(OP_CONST, 0,
+ /* newSVpvf("nextstate:%s:%d", CopFILE(cCOPx(kid)), cCOPx(kid)->cop_line))); */
+ newSVpvf("nextstate:%u", (unsigned int)cCOPx(kid)->cop_line)));
+ break;
+ case OP_ARGCHECK: {
+ struct op_argcheck_aux *p =
+ (struct op_argcheck_aux*)(cUNOP_AUXx(kid)->op_aux);
+ retop = op_append_list(OP_LIST, retop, newSVOP(OP_CONST, 0,
+ newSVpvf("argcheck:%" UVuf ":%" UVuf ":%c",
+ p->params, p->opt_params,
+ p->slurpy ? p->slurpy : '-')));
+ break;
+ }
+ case OP_ARGELEM: {
+ PADOFFSET padix = kid->op_targ;
+ PADNAMELIST *names = PadlistNAMES(CvPADLIST(find_runcv(0)));
+ char *namepv = PadnamePV(padnamelist_fetch(names, padix));
+ retop = op_append_list(OP_LIST, retop, newSVOP(OP_CONST, 0,
+ newSVpvf(kid->op_flags & OPf_KIDS ? "argelem:%s:d" : "argelem:%s", namepv)));
+ break;
+ }
+ default:
+ fprintf(stderr, "TODO: examine kid %p (optype=%s)\n", kid, PL_op_name[kid->op_type]);
+ break;
+ }
+ }
+
+ op_free(sigop);
+ return newANONLIST(retop);
+}
+
#define parse_keyword_DEFSV() THX_parse_keyword_DEFSV(aTHX)
static OP *THX_parse_keyword_DEFSV(pTHX)
{
@@ -1246,6 +1314,10 @@ static int my_keyword_plugin(pTHX_
keyword_active(hintkey_join_with_space_sv)) {
*op_ptr = parse_join_with_space();
return KEYWORD_PLUGIN_EXPR;
+ } else if (memEQs(keyword_ptr, keyword_len, "subsignature") &&
+ keyword_active(hintkey_subsignature_sv)) {
+ *op_ptr = parse_keyword_subsignature();
+ return KEYWORD_PLUGIN_EXPR;
} else {
assert(next_keyword_plugin != my_keyword_plugin);
return next_keyword_plugin(aTHX_ keyword_ptr, keyword_len, op_ptr);
@@ -1339,7 +1411,7 @@ my_ck_rv2cv(pTHX_ OP *o)
{
SvGROW(ref, SvCUR(ref)+2);
*SvEND(ref) = '_';
- SvCUR(ref)++;
+ SvCUR(ref)++; /* Not _set, so we don't accidentally break non-PERL_CORE */
*SvEND(ref) = '\0';
}
return old_ck_rv2cv(aTHX_ o);
@@ -2981,7 +3053,7 @@ utf16_to_utf8 (sv, ...)
STRLEN len;
U8 *source;
SV *dest;
- I32 got; /* Gah, badly thought out APIs */
+ Size_t got;
CODE:
if (ix) (void)SvPV_force_nolen(sv);
source = (U8 *)SvPVbyte(sv, len);
@@ -3995,6 +4067,7 @@ BOOT:
hintkey_arraytermexpr_sv = newSVpvs_share("XS::APItest/arraytermexpr");
hintkey_arrayarithexpr_sv = newSVpvs_share("XS::APItest/arrayarithexpr");
hintkey_arrayexprflags_sv = newSVpvs_share("XS::APItest/arrayexprflags");
+ hintkey_subsignature_sv = newSVpvs_share("XS::APItest/subsignature");
hintkey_DEFSV_sv = newSVpvs_share("XS::APItest/DEFSV");
hintkey_with_vars_sv = newSVpvs_share("XS::APItest/with_vars");
hintkey_join_with_space_sv = newSVpvs_share("XS::APItest/join_with_space");
@@ -4161,12 +4234,26 @@ OUTPUT:
RETVAL
char *
+SvPVbyte_nomg(SV *sv)
+CODE:
+ RETVAL = SvPVbyte_nomg(sv, PL_na);
+OUTPUT:
+ RETVAL
+
+char *
SvPVutf8(SV *sv)
CODE:
RETVAL = SvPVutf8_nolen(sv);
OUTPUT:
RETVAL
+char *
+SvPVutf8_nomg(SV *sv)
+CODE:
+ RETVAL = SvPVutf8_nomg(sv, PL_na);
+OUTPUT:
+ RETVAL
+
void
setup_addissub()
CODE:
@@ -4418,6 +4505,17 @@ PerlIO_stdin()
FILE *
PerlIO_exportFILE(PerlIO *f, const char *mode)
+SV *
+test_MAX_types()
+ CODE:
+ /* tests that IV_MAX and UV_MAX have types suitable
+ for the IVdf and UVdf formats.
+ If this warns then don't add casts here.
+ */
+ RETVAL = newSVpvf("iv %" IVdf " uv %" UVuf, IV_MAX, UV_MAX);
+ OUTPUT:
+ RETVAL
+
MODULE = XS::APItest PACKAGE = XS::APItest::AUTOLOADtest
int
@@ -4595,7 +4693,7 @@ test_isBLANK_utf8(U8 * p, int type)
RETVAL = isBLANK_utf8_safe(p, e);
}
else {
- RETVAL = isBLANK_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -4610,7 +4708,7 @@ test_isBLANK_LC_utf8(U8 * p, int type)
RETVAL = isBLANK_LC_utf8_safe(p, e);
}
else {
- RETVAL = isBLANK_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -4639,7 +4737,7 @@ test_isVERTWS_utf8(U8 * p, int type)
RETVAL = isVERTWS_utf8_safe(p, e);
}
else {
- RETVAL = isVERTWS_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -4703,7 +4801,7 @@ test_isUPPER_utf8(U8 * p, int type)
RETVAL = isUPPER_utf8_safe(p, e);
}
else {
- RETVAL = isUPPER_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -4718,7 +4816,7 @@ test_isUPPER_LC_utf8(U8 * p, int type)
RETVAL = isUPPER_LC_utf8_safe(p, e);
}
else {
- RETVAL = isUPPER_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -4782,7 +4880,7 @@ test_isLOWER_utf8(U8 * p, int type)
RETVAL = isLOWER_utf8_safe(p, e);
}
else {
- RETVAL = isLOWER_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -4797,7 +4895,7 @@ test_isLOWER_LC_utf8(U8 * p, int type)
RETVAL = isLOWER_LC_utf8_safe(p, e);
}
else {
- RETVAL = isLOWER_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -4861,7 +4959,7 @@ test_isALPHA_utf8(U8 * p, int type)
RETVAL = isALPHA_utf8_safe(p, e);
}
else {
- RETVAL = isALPHA_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -4876,7 +4974,7 @@ test_isALPHA_LC_utf8(U8 * p, int type)
RETVAL = isALPHA_LC_utf8_safe(p, e);
}
else {
- RETVAL = isALPHA_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -4940,7 +5038,7 @@ test_isWORDCHAR_utf8(U8 * p, int type)
RETVAL = isWORDCHAR_utf8_safe(p, e);
}
else {
- RETVAL = isWORDCHAR_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -4955,7 +5053,7 @@ test_isWORDCHAR_LC_utf8(U8 * p, int type)
RETVAL = isWORDCHAR_LC_utf8_safe(p, e);
}
else {
- RETVAL = isWORDCHAR_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5019,7 +5117,7 @@ test_isALPHANUMERIC_utf8(U8 * p, int type)
RETVAL = isALPHANUMERIC_utf8_safe(p, e);
}
else {
- RETVAL = isALPHANUMERIC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5034,7 +5132,7 @@ test_isALPHANUMERIC_LC_utf8(U8 * p, int type)
RETVAL = isALPHANUMERIC_LC_utf8_safe(p, e);
}
else {
- RETVAL = isALPHANUMERIC_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5077,7 +5175,7 @@ test_isALNUM_utf8(U8 * p, int type)
RETVAL = isWORDCHAR_utf8_safe(p, e);
}
else {
- RETVAL = isWORDCHAR_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5092,7 +5190,7 @@ test_isALNUM_LC_utf8(U8 * p, int type)
RETVAL = isWORDCHAR_LC_utf8_safe(p, e);
}
else {
- RETVAL = isWORDCHAR_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5128,7 +5226,7 @@ test_isDIGIT_utf8(U8 * p, int type)
RETVAL = isDIGIT_utf8_safe(p, e);
}
else {
- RETVAL = isDIGIT_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5143,7 +5241,7 @@ test_isDIGIT_LC_utf8(U8 * p, int type)
RETVAL = isDIGIT_LC_utf8_safe(p, e);
}
else {
- RETVAL = isDIGIT_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5256,7 +5354,7 @@ test_isIDFIRST_utf8(U8 * p, int type)
RETVAL = isIDFIRST_utf8_safe(p, e);
}
else {
- RETVAL = isIDFIRST_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5271,7 +5369,7 @@ test_isIDFIRST_LC_utf8(U8 * p, int type)
RETVAL = isIDFIRST_LC_utf8_safe(p, e);
}
else {
- RETVAL = isIDFIRST_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5335,7 +5433,7 @@ test_isIDCONT_utf8(U8 * p, int type)
RETVAL = isIDCONT_utf8_safe(p, e);
}
else {
- RETVAL = isIDCONT_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5350,7 +5448,7 @@ test_isIDCONT_LC_utf8(U8 * p, int type)
RETVAL = isIDCONT_LC_utf8_safe(p, e);
}
else {
- RETVAL = isIDCONT_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5414,7 +5512,7 @@ test_isSPACE_utf8(U8 * p, int type)
RETVAL = isSPACE_utf8_safe(p, e);
}
else {
- RETVAL = isSPACE_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5429,7 +5527,7 @@ test_isSPACE_LC_utf8(U8 * p, int type)
RETVAL = isSPACE_LC_utf8_safe(p, e);
}
else {
- RETVAL = isSPACE_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5496,7 +5594,7 @@ test_isASCII_utf8(U8 * p, int type)
RETVAL = isASCII_utf8_safe(p, e);
}
else {
- RETVAL = isASCII_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5514,7 +5612,7 @@ test_isASCII_LC_utf8(U8 * p, int type)
RETVAL = isASCII_LC_utf8_safe(p, e);
}
else {
- RETVAL = isASCII_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5578,7 +5676,7 @@ test_isCNTRL_utf8(U8 * p, int type)
RETVAL = isCNTRL_utf8_safe(p, e);
}
else {
- RETVAL = isCNTRL_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5593,7 +5691,7 @@ test_isCNTRL_LC_utf8(U8 * p, int type)
RETVAL = isCNTRL_LC_utf8_safe(p, e);
}
else {
- RETVAL = isCNTRL_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5657,7 +5755,7 @@ test_isPRINT_utf8(U8 * p, int type)
RETVAL = isPRINT_utf8_safe(p, e);
}
else {
- RETVAL = isPRINT_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5672,7 +5770,7 @@ test_isPRINT_LC_utf8(U8 * p, int type)
RETVAL = isPRINT_LC_utf8_safe(p, e);
}
else {
- RETVAL = isPRINT_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5736,7 +5834,7 @@ test_isGRAPH_utf8(U8 * p, int type)
RETVAL = isGRAPH_utf8_safe(p, e);
}
else {
- RETVAL = isGRAPH_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5751,7 +5849,7 @@ test_isGRAPH_LC_utf8(U8 * p, int type)
RETVAL = isGRAPH_LC_utf8_safe(p, e);
}
else {
- RETVAL = isGRAPH_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5815,7 +5913,7 @@ test_isPUNCT_utf8(U8 * p, int type)
RETVAL = isPUNCT_utf8_safe(p, e);
}
else {
- RETVAL = isPUNCT_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5830,7 +5928,7 @@ test_isPUNCT_LC_utf8(U8 * p, int type)
RETVAL = isPUNCT_LC_utf8_safe(p, e);
}
else {
- RETVAL = isPUNCT_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5894,7 +5992,7 @@ test_isXDIGIT_utf8(U8 * p, int type)
RETVAL = isXDIGIT_utf8_safe(p, e);
}
else {
- RETVAL = isXDIGIT_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5909,7 +6007,7 @@ test_isXDIGIT_LC_utf8(U8 * p, int type)
RETVAL = isXDIGIT_LC_utf8_safe(p, e);
}
else {
- RETVAL = isXDIGIT_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5973,7 +6071,7 @@ test_isPSXSPC_utf8(U8 * p, int type)
RETVAL = isPSXSPC_utf8_safe(p, e);
}
else {
- RETVAL = isPSXSPC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -5988,7 +6086,7 @@ test_isPSXSPC_LC_utf8(U8 * p, int type)
RETVAL = isPSXSPC_LC_utf8_safe(p, e);
}
else {
- RETVAL = isPSXSPC_LC_utf8(p);
+ RETVAL = 0;
}
OUTPUT:
RETVAL
@@ -6428,23 +6526,18 @@ test_toLOWER_utf8(SV * p, int type)
if (type >= 0) {
e = input + UTF8SKIP(input) - type;
resultant_cp = toLOWER_utf8_safe(input, e, s, &len);
+ av_push(av, newSVuv(resultant_cp));
+
+ utf8 = newSVpvn((char *) s, len);
+ SvUTF8_on(utf8);
+ av_push(av, utf8);
+
+ av_push(av, newSVuv(len));
+ RETVAL = av;
}
- else if (type == -1) {
- resultant_cp = toLOWER_utf8(input, s, &len);
- }
-#ifndef NO_MATHOMS
else {
- resultant_cp = Perl_to_utf8_lower(aTHX_ input, s, &len);
+ RETVAL = 0;
}
-#endif
- av_push(av, newSVuv(resultant_cp));
-
- utf8 = newSVpvn((char *) s, len);
- SvUTF8_on(utf8);
- av_push(av, utf8);
-
- av_push(av, newSVuv(len));
- RETVAL = av;
OUTPUT:
RETVAL
@@ -6518,23 +6611,18 @@ test_toFOLD_utf8(SV * p, int type)
if (type >= 0) {
e = input + UTF8SKIP(input) - type;
resultant_cp = toFOLD_utf8_safe(input, e, s, &len);
+ av_push(av, newSVuv(resultant_cp));
+
+ utf8 = newSVpvn((char *) s, len);
+ SvUTF8_on(utf8);
+ av_push(av, utf8);
+
+ av_push(av, newSVuv(len));
+ RETVAL = av;
}
- else if (type == -1) {
- resultant_cp = toFOLD_utf8(input, s, &len);
- }
-#ifndef NO_MATHOMS
else {
- resultant_cp = Perl_to_utf8_fold(aTHX_ input, s, &len);
+ RETVAL = 0;
}
-#endif
- av_push(av, newSVuv(resultant_cp));
-
- utf8 = newSVpvn((char *) s, len);
- SvUTF8_on(utf8);
- av_push(av, utf8);
-
- av_push(av, newSVuv(len));
- RETVAL = av;
OUTPUT:
RETVAL
@@ -6608,23 +6696,18 @@ test_toUPPER_utf8(SV * p, int type)
if (type >= 0) {
e = input + UTF8SKIP(input) - type;
resultant_cp = toUPPER_utf8_safe(input, e, s, &len);
+ av_push(av, newSVuv(resultant_cp));
+
+ utf8 = newSVpvn((char *) s, len);
+ SvUTF8_on(utf8);
+ av_push(av, utf8);
+
+ av_push(av, newSVuv(len));
+ RETVAL = av;
}
- else if (type == -1) {
- resultant_cp = toUPPER_utf8(input, s, &len);
- }
-#ifndef NO_MATHOMS
else {
- resultant_cp = Perl_to_utf8_upper(aTHX_ input, s, &len);
+ RETVAL = 0;
}
-#endif
- av_push(av, newSVuv(resultant_cp));
-
- utf8 = newSVpvn((char *) s, len);
- SvUTF8_on(utf8);
- av_push(av, utf8);
-
- av_push(av, newSVuv(len));
- RETVAL = av;
OUTPUT:
RETVAL
@@ -6691,23 +6774,18 @@ test_toTITLE_utf8(SV * p, int type)
if (type >= 0) {
e = input + UTF8SKIP(input) - type;
resultant_cp = toTITLE_utf8_safe(input, e, s, &len);
+ av_push(av, newSVuv(resultant_cp));
+
+ utf8 = newSVpvn((char *) s, len);
+ SvUTF8_on(utf8);
+ av_push(av, utf8);
+
+ av_push(av, newSVuv(len));
+ RETVAL = av;
}
- else if (type == -1) {
- resultant_cp = toTITLE_utf8(input, s, &len);
- }
-#ifndef NO_MATHOMS
else {
- resultant_cp = Perl_to_utf8_title(aTHX_ input, s, &len);
+ RETVAL = 0;
}
-#endif
- av_push(av, newSVuv(resultant_cp));
-
- utf8 = newSVpvn((char *) s, len);
- SvUTF8_on(utf8);
- av_push(av, utf8);
-
- av_push(av, newSVuv(len));
- RETVAL = av;
OUTPUT:
RETVAL
@@ -6799,3 +6877,584 @@ Comctl32Version()
#endif
+MODULE = XS::APItest PACKAGE = XS::APItest::HvMacro
+
+
+UV
+u8_to_u16_le(SV *sv, STRLEN ofs)
+ ALIAS:
+ u8_to_u32_le = 1
+ u8_to_u64_le = 2
+ CODE:
+ {
+ STRLEN len;
+ char *pv= SvPV(sv,len);
+ STRLEN minlen= 2<<ix;
+ U16 u16;
+ U32 u32;
+ U64 u64;
+ RETVAL= 0; /* silence warnings about uninitialized RETVAL */
+ switch (ix) {
+ case 0:
+ if (ofs+minlen>len) croak("cowardly refusing to read past end of string in u8_to_u16_le");
+ u16= U8TO16_LE(pv+ofs);
+ RETVAL= (UV)u16;
+ break;
+ case 1:
+ if (ofs+minlen>len) croak("cowardly refusing to read past end of string in u8_to_u32_le");
+ u32= U8TO32_LE(pv+ofs);
+ RETVAL= (UV)u32;
+ break;
+ case 2:
+#if TEST_64BIT
+ if (ofs+minlen>len) croak("cowardly refusing to read past end of string in u8_to_u64_le");
+ u64= U8TO64_LE(pv+ofs);
+ RETVAL= (UV)u64;
+#else
+ croak("not a 64 bit perl IVSIZE=%d",IVSIZE);
+#endif
+ break;
+ }
+ }
+ OUTPUT:
+ RETVAL
+
+U32
+rotl32(U32 n, U8 r)
+ CODE:
+ {
+ RETVAL= ROTL32(n,r);
+ }
+ OUTPUT:
+ RETVAL
+
+U32
+rotr32(U32 n, U8 r)
+ CODE:
+ {
+ RETVAL= ROTR32(n,r);
+ }
+ OUTPUT:
+ RETVAL
+
+#if TEST_64BIT
+
+UV
+rotl64(UV n, U8 r)
+ CODE:
+ {
+ RETVAL= ROTL64(n,r);
+ }
+ OUTPUT:
+ RETVAL
+
+UV
+rotr64(UV n, U8 r)
+ CODE:
+ {
+ RETVAL= ROTR64(n,r);
+ }
+ OUTPUT:
+ RETVAL
+
+SV *
+siphash_seed_state(SV *seed_sv)
+ CODE:
+ {
+ U8 state_buf[sizeof(U64)*4];
+ STRLEN seed_len;
+ U8 *seed_pv= (U8*)SvPV(seed_sv,seed_len);
+ if (seed_len<16) croak("seed should be 16 bytes long");
+ else if (seed_len>16) warn("only using the first 16 bytes of seed");
+ RETVAL= newSV(sizeof(U64)*4+3);
+ S_perl_siphash_seed_state(seed_pv,state_buf);
+ sv_setpvn(RETVAL,(char*)state_buf,sizeof(U64)*4);
+ }
+ OUTPUT:
+ RETVAL
+
+
+UV
+siphash24(SV *state_sv, SV *str_sv)
+ ALIAS:
+ siphash13 = 1
+ CODE:
+ {
+ STRLEN state_len;
+ STRLEN str_len;
+ U8 *str_pv= (U8*)SvPV(str_sv,str_len);
+ /* (U8*)SvPV(state_sv, state_len) return differs between little-endian *
+ * and big-endian. It's the same values, but in a different order. *
+ * On big-endian architecture, we transpose the values into the same *
+ * order as for little-endian, so that we can test against the same *
+ * test vectors. *
+ * We could alternatively alter the code that produced state_sv to *
+ * output identical arrangements for big-endian and little-endian. */
+#if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678
+ U8 *state_pv= (U8*)SvPV(state_sv,state_len);
+ if (state_len!=32) croak("siphash state should be exactly 32 bytes");
+#else
+ U8 *temp_pv = (U8*)SvPV(state_sv, state_len);
+ U8 state_pv[32];
+ int i;
+ if (state_len!=32) croak("siphash state should be exactly 32 bytes");
+ for( i = 0; i < 32; i++ ) {
+ if (i < 8) state_pv[ 7 - i] = temp_pv[i];
+ else if(i < 16) state_pv[23 - i] = temp_pv[i];
+ else if(i < 24) state_pv[39 - i] = temp_pv[i];
+ else state_pv[55 - i] = temp_pv[i];
+ }
+#endif
+ if (ix) {
+ RETVAL= S_perl_hash_siphash_1_3_with_state_64(state_pv,str_pv,str_len);
+ } else {
+ RETVAL= S_perl_hash_siphash_2_4_with_state_64(state_pv,str_pv,str_len);
+ }
+ }
+ OUTPUT:
+ RETVAL
+
+
+UV
+test_siphash24()
+ CODE:
+ {
+ U8 vectors[64][8] = {
+ { 0x31, 0x0e, 0x0e, 0xdd, 0x47, 0xdb, 0x6f, 0x72, },
+ { 0xfd, 0x67, 0xdc, 0x93, 0xc5, 0x39, 0xf8, 0x74, },
+ { 0x5a, 0x4f, 0xa9, 0xd9, 0x09, 0x80, 0x6c, 0x0d, },
+ { 0x2d, 0x7e, 0xfb, 0xd7, 0x96, 0x66, 0x67, 0x85, },
+ { 0xb7, 0x87, 0x71, 0x27, 0xe0, 0x94, 0x27, 0xcf, },
+ { 0x8d, 0xa6, 0x99, 0xcd, 0x64, 0x55, 0x76, 0x18, },
+ { 0xce, 0xe3, 0xfe, 0x58, 0x6e, 0x46, 0xc9, 0xcb, },
+ { 0x37, 0xd1, 0x01, 0x8b, 0xf5, 0x00, 0x02, 0xab, },
+ { 0x62, 0x24, 0x93, 0x9a, 0x79, 0xf5, 0xf5, 0x93, },
+ { 0xb0, 0xe4, 0xa9, 0x0b, 0xdf, 0x82, 0x00, 0x9e, },
+ { 0xf3, 0xb9, 0xdd, 0x94, 0xc5, 0xbb, 0x5d, 0x7a, },
+ { 0xa7, 0xad, 0x6b, 0x22, 0x46, 0x2f, 0xb3, 0xf4, },
+ { 0xfb, 0xe5, 0x0e, 0x86, 0xbc, 0x8f, 0x1e, 0x75, },
+ { 0x90, 0x3d, 0x84, 0xc0, 0x27, 0x56, 0xea, 0x14, },
+ { 0xee, 0xf2, 0x7a, 0x8e, 0x90, 0xca, 0x23, 0xf7, },
+ { 0xe5, 0x45, 0xbe, 0x49, 0x61, 0xca, 0x29, 0xa1, },
+ { 0xdb, 0x9b, 0xc2, 0x57, 0x7f, 0xcc, 0x2a, 0x3f, },
+ { 0x94, 0x47, 0xbe, 0x2c, 0xf5, 0xe9, 0x9a, 0x69, },
+ { 0x9c, 0xd3, 0x8d, 0x96, 0xf0, 0xb3, 0xc1, 0x4b, },
+ { 0xbd, 0x61, 0x79, 0xa7, 0x1d, 0xc9, 0x6d, 0xbb, },
+ { 0x98, 0xee, 0xa2, 0x1a, 0xf2, 0x5c, 0xd6, 0xbe, },
+ { 0xc7, 0x67, 0x3b, 0x2e, 0xb0, 0xcb, 0xf2, 0xd0, },
+ { 0x88, 0x3e, 0xa3, 0xe3, 0x95, 0x67, 0x53, 0x93, },
+ { 0xc8, 0xce, 0x5c, 0xcd, 0x8c, 0x03, 0x0c, 0xa8, },
+ { 0x94, 0xaf, 0x49, 0xf6, 0xc6, 0x50, 0xad, 0xb8, },
+ { 0xea, 0xb8, 0x85, 0x8a, 0xde, 0x92, 0xe1, 0xbc, },
+ { 0xf3, 0x15, 0xbb, 0x5b, 0xb8, 0x35, 0xd8, 0x17, },
+ { 0xad, 0xcf, 0x6b, 0x07, 0x63, 0x61, 0x2e, 0x2f, },
+ { 0xa5, 0xc9, 0x1d, 0xa7, 0xac, 0xaa, 0x4d, 0xde, },
+ { 0x71, 0x65, 0x95, 0x87, 0x66, 0x50, 0xa2, 0xa6, },
+ { 0x28, 0xef, 0x49, 0x5c, 0x53, 0xa3, 0x87, 0xad, },
+ { 0x42, 0xc3, 0x41, 0xd8, 0xfa, 0x92, 0xd8, 0x32, },
+ { 0xce, 0x7c, 0xf2, 0x72, 0x2f, 0x51, 0x27, 0x71, },
+ { 0xe3, 0x78, 0x59, 0xf9, 0x46, 0x23, 0xf3, 0xa7, },
+ { 0x38, 0x12, 0x05, 0xbb, 0x1a, 0xb0, 0xe0, 0x12, },
+ { 0xae, 0x97, 0xa1, 0x0f, 0xd4, 0x34, 0xe0, 0x15, },
+ { 0xb4, 0xa3, 0x15, 0x08, 0xbe, 0xff, 0x4d, 0x31, },
+ { 0x81, 0x39, 0x62, 0x29, 0xf0, 0x90, 0x79, 0x02, },
+ { 0x4d, 0x0c, 0xf4, 0x9e, 0xe5, 0xd4, 0xdc, 0xca, },
+ { 0x5c, 0x73, 0x33, 0x6a, 0x76, 0xd8, 0xbf, 0x9a, },
+ { 0xd0, 0xa7, 0x04, 0x53, 0x6b, 0xa9, 0x3e, 0x0e, },
+ { 0x92, 0x59, 0x58, 0xfc, 0xd6, 0x42, 0x0c, 0xad, },
+ { 0xa9, 0x15, 0xc2, 0x9b, 0xc8, 0x06, 0x73, 0x18, },
+ { 0x95, 0x2b, 0x79, 0xf3, 0xbc, 0x0a, 0xa6, 0xd4, },
+ { 0xf2, 0x1d, 0xf2, 0xe4, 0x1d, 0x45, 0x35, 0xf9, },
+ { 0x87, 0x57, 0x75, 0x19, 0x04, 0x8f, 0x53, 0xa9, },
+ { 0x10, 0xa5, 0x6c, 0xf5, 0xdf, 0xcd, 0x9a, 0xdb, },
+ { 0xeb, 0x75, 0x09, 0x5c, 0xcd, 0x98, 0x6c, 0xd0, },
+ { 0x51, 0xa9, 0xcb, 0x9e, 0xcb, 0xa3, 0x12, 0xe6, },
+ { 0x96, 0xaf, 0xad, 0xfc, 0x2c, 0xe6, 0x66, 0xc7, },
+ { 0x72, 0xfe, 0x52, 0x97, 0x5a, 0x43, 0x64, 0xee, },
+ { 0x5a, 0x16, 0x45, 0xb2, 0x76, 0xd5, 0x92, 0xa1, },
+ { 0xb2, 0x74, 0xcb, 0x8e, 0xbf, 0x87, 0x87, 0x0a, },
+ { 0x6f, 0x9b, 0xb4, 0x20, 0x3d, 0xe7, 0xb3, 0x81, },
+ { 0xea, 0xec, 0xb2, 0xa3, 0x0b, 0x22, 0xa8, 0x7f, },
+ { 0x99, 0x24, 0xa4, 0x3c, 0xc1, 0x31, 0x57, 0x24, },
+ { 0xbd, 0x83, 0x8d, 0x3a, 0xaf, 0xbf, 0x8d, 0xb7, },
+ { 0x0b, 0x1a, 0x2a, 0x32, 0x65, 0xd5, 0x1a, 0xea, },
+ { 0x13, 0x50, 0x79, 0xa3, 0x23, 0x1c, 0xe6, 0x60, },
+ { 0x93, 0x2b, 0x28, 0x46, 0xe4, 0xd7, 0x06, 0x66, },
+ { 0xe1, 0x91, 0x5f, 0x5c, 0xb1, 0xec, 0xa4, 0x6c, },
+ { 0xf3, 0x25, 0x96, 0x5c, 0xa1, 0x6d, 0x62, 0x9f, },
+ { 0x57, 0x5f, 0xf2, 0x8e, 0x60, 0x38, 0x1b, 0xe5, },
+ { 0x72, 0x45, 0x06, 0xeb, 0x4c, 0x32, 0x8a, 0x95, }
+ };
+ U32 vectors_32[64] = {
+ 0xaf61d576,
+ 0xe7245e38,
+ 0xd4c5cf53,
+ 0x529c18bb,
+ 0xe8561357,
+ 0xd5eff3e9,
+ 0x9337a5a0,
+ 0x2003d1c2,
+ 0x0966d11b,
+ 0x95a9666f,
+ 0xee800236,
+ 0xd6d882e1,
+ 0xf3106a47,
+ 0xd46e6bb7,
+ 0x7959387e,
+ 0xe8978f84,
+ 0x68e857a4,
+ 0x4524ae61,
+ 0xdd4c606c,
+ 0x1c14a8a0,
+ 0xa474b26a,
+ 0xfec9ac77,
+ 0x70f0591d,
+ 0x6550cd44,
+ 0x4ee4ff52,
+ 0x36642a34,
+ 0x4c63204b,
+ 0x2845aece,
+ 0x79506309,
+ 0x21373517,
+ 0xf1ce4c7b,
+ 0xea9951b8,
+ 0x03d52de1,
+ 0x5eaa5ba5,
+ 0xa9e5a222,
+ 0x1a41a37a,
+ 0x39585c0a,
+ 0x2b1ba971,
+ 0x5428d8a8,
+ 0xf08cab2a,
+ 0x5d3a0ebb,
+ 0x51541b44,
+ 0x83b11361,
+ 0x27df2129,
+ 0x1dc758ef,
+ 0xb026d883,
+ 0x2ef668cf,
+ 0x8c65ed26,
+ 0x78d90a9a,
+ 0x3bcb49ba,
+ 0x7936bd28,
+ 0x13d7c32c,
+ 0x844cf30d,
+ 0xa1077c52,
+ 0xdc1acee1,
+ 0x18f31558,
+ 0x8d003c12,
+ 0xd830cf6e,
+ 0xc39f4c30,
+ 0x202efc77,
+ 0x30fb7d50,
+ 0xc3f44852,
+ 0x6be96737,
+ 0x7e8c773e
+ };
+
+ const U8 MAXLEN= 64;
+ U8 in[64], seed_pv[16], state_pv[32];
+ union {
+ U64 hash;
+ U32 h32[2];
+ U8 bytes[8];
+ } out;
+ int i,j;
+ int failed = 0;
+ U32 hash32;
+ /* S_perl_siphash_seed_state(seed_pv, state_pv) sets state_pv *
+ * differently between little-endian and big-endian. It's the same *
+ * values, but in a different order. *
+ * On big-endian architecture, we transpose the values into the same *
+ * order as for little-endian, so that we can test against the same *
+ * test vectors. *
+ * We could alternatively alter the code that produces state_pv to *
+ * output identical arrangements for big-endian and little-endian. */
+#if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678
+ for( i = 0; i < 16; ++i ) seed_pv[i] = i;
+ S_perl_siphash_seed_state(seed_pv, state_pv);
+#else
+ U8 temp_pv[32];
+ for( i = 0; i < 16; ++i ) seed_pv[i] = i;
+ S_perl_siphash_seed_state(seed_pv, temp_pv);
+ for( i = 0; i < 32; ++i ) {
+ if (i < 8) state_pv[ 7 - i] = temp_pv[i];
+ else if(i < 16) state_pv[23 - i] = temp_pv[i];
+ else if(i < 24) state_pv[39 - i] = temp_pv[i];
+ else state_pv[55 - i] = temp_pv[i];
+ }
+#endif
+ for( i = 0; i < MAXLEN; ++i )
+ {
+ in[i] = i;
+
+ out.hash= S_perl_hash_siphash_2_4_with_state_64( state_pv, in, i );
+
+ hash32= S_perl_hash_siphash_2_4_with_state( state_pv, in, i);
+ /* The test vectors need to reversed here for big-endian architecture *
+ * Alternatively we could rewrite S_perl_hash_siphash_2_4_with_state_64 *
+ * to produce reversed vectors when run on big-endian architecture */
+#if BYTEORDER == 0x4321 || BYTEORDER == 0x87654321 /* reverse order of vectors[i] */
+ temp_pv [0] = vectors[i][0]; /* temp_pv is temporary holder of vectors[i][0] */
+ vectors[i][0] = vectors[i][7];
+ vectors[i][7] = temp_pv[0];
+
+ temp_pv [0] = vectors[i][1]; /* temp_pv is temporary holder of vectors[i][1] */
+ vectors[i][1] = vectors[i][6];
+ vectors[i][6] = temp_pv[0];
+
+ temp_pv [0] = vectors[i][2]; /* temp_pv is temporary holder of vectors[i][2] */
+ vectors[i][2] = vectors[i][5];
+ vectors[i][5] = temp_pv[0];
+
+ temp_pv [0] = vectors[i][3]; /* temp_pv is temporary holder of vectors[i][3] */
+ vectors[i][3] = vectors[i][4];
+ vectors[i][4] = temp_pv[0];
+#endif
+ if ( memcmp( out.bytes, vectors[i], 8 ) )
+ {
+ failed++;
+ printf( "Error in 64 bit result on test vector of length %d for siphash24\n have: {", i );
+ for (j=0;j<7;j++)
+ printf( "0x%02x, ", out.bytes[j]);
+ printf( "0x%02x },\n", out.bytes[7]);
+ printf( " want: {" );
+ for (j=0;j<7;j++)
+ printf( "0x%02x, ", vectors[i][j]);
+ printf( "0x%02x },\n", vectors[i][7]);
+ }
+ if (hash32 != vectors_32[i]) {
+ failed++;
+ printf( "Error in 32 bit result on test vector of length %d for siphash24\n"
+ " have: 0x%08x\n"
+ " want: 0x%08x\n",
+ i, hash32, vectors_32[i]);
+ }
+ }
+ RETVAL= failed;
+ }
+ OUTPUT:
+ RETVAL
+
+UV
+test_siphash13()
+ CODE:
+ {
+ U8 vectors[64][8] = {
+ {0xdc, 0xc4, 0x0f, 0x05, 0x58, 0x01, 0xac, 0xab },
+ {0x93, 0xca, 0x57, 0x7d, 0xf3, 0x9b, 0xf4, 0xc9 },
+ {0x4d, 0xd4, 0xc7, 0x4d, 0x02, 0x9b, 0xcb, 0x82 },
+ {0xfb, 0xf7, 0xdd, 0xe7, 0xb8, 0x0a, 0xf8, 0x8b },
+ {0x28, 0x83, 0xd3, 0x88, 0x60, 0x57, 0x75, 0xcf },
+ {0x67, 0x3b, 0x53, 0x49, 0x2f, 0xd5, 0xf9, 0xde },
+ {0xa7, 0x22, 0x9f, 0xc5, 0x50, 0x2b, 0x0d, 0xc5 },
+ {0x40, 0x11, 0xb1, 0x9b, 0x98, 0x7d, 0x92, 0xd3 },
+ {0x8e, 0x9a, 0x29, 0x8d, 0x11, 0x95, 0x90, 0x36 },
+ {0xe4, 0x3d, 0x06, 0x6c, 0xb3, 0x8e, 0xa4, 0x25 },
+ {0x7f, 0x09, 0xff, 0x92, 0xee, 0x85, 0xde, 0x79 },
+ {0x52, 0xc3, 0x4d, 0xf9, 0xc1, 0x18, 0xc1, 0x70 },
+ {0xa2, 0xd9, 0xb4, 0x57, 0xb1, 0x84, 0xa3, 0x78 },
+ {0xa7, 0xff, 0x29, 0x12, 0x0c, 0x76, 0x6f, 0x30 },
+ {0x34, 0x5d, 0xf9, 0xc0, 0x11, 0xa1, 0x5a, 0x60 },
+ {0x56, 0x99, 0x51, 0x2a, 0x6d, 0xd8, 0x20, 0xd3 },
+ {0x66, 0x8b, 0x90, 0x7d, 0x1a, 0xdd, 0x4f, 0xcc },
+ {0x0c, 0xd8, 0xdb, 0x63, 0x90, 0x68, 0xf2, 0x9c },
+ {0x3e, 0xe6, 0x73, 0xb4, 0x9c, 0x38, 0xfc, 0x8f },
+ {0x1c, 0x7d, 0x29, 0x8d, 0xe5, 0x9d, 0x1f, 0xf2 },
+ {0x40, 0xe0, 0xcc, 0xa6, 0x46, 0x2f, 0xdc, 0xc0 },
+ {0x44, 0xf8, 0x45, 0x2b, 0xfe, 0xab, 0x92, 0xb9 },
+ {0x2e, 0x87, 0x20, 0xa3, 0x9b, 0x7b, 0xfe, 0x7f },
+ {0x23, 0xc1, 0xe6, 0xda, 0x7f, 0x0e, 0x5a, 0x52 },
+ {0x8c, 0x9c, 0x34, 0x67, 0xb2, 0xae, 0x64, 0xf4 },
+ {0x79, 0x09, 0x5b, 0x70, 0x28, 0x59, 0xcd, 0x45 },
+ {0xa5, 0x13, 0x99, 0xca, 0xe3, 0x35, 0x3e, 0x3a },
+ {0x35, 0x3b, 0xde, 0x4a, 0x4e, 0xc7, 0x1d, 0xa9 },
+ {0x0d, 0xd0, 0x6c, 0xef, 0x02, 0xed, 0x0b, 0xfb },
+ {0xf4, 0xe1, 0xb1, 0x4a, 0xb4, 0x3c, 0xd9, 0x88 },
+ {0x63, 0xe6, 0xc5, 0x43, 0xd6, 0x11, 0x0f, 0x54 },
+ {0xbc, 0xd1, 0x21, 0x8c, 0x1f, 0xdd, 0x70, 0x23 },
+ {0x0d, 0xb6, 0xa7, 0x16, 0x6c, 0x7b, 0x15, 0x81 },
+ {0xbf, 0xf9, 0x8f, 0x7a, 0xe5, 0xb9, 0x54, 0x4d },
+ {0x3e, 0x75, 0x2a, 0x1f, 0x78, 0x12, 0x9f, 0x75 },
+ {0x91, 0x6b, 0x18, 0xbf, 0xbe, 0xa3, 0xa1, 0xce },
+ {0x06, 0x62, 0xa2, 0xad, 0xd3, 0x08, 0xf5, 0x2c },
+ {0x57, 0x30, 0xc3, 0xa3, 0x2d, 0x1c, 0x10, 0xb6 },
+ {0xa1, 0x36, 0x3a, 0xae, 0x96, 0x74, 0xf4, 0xb3 },
+ {0x92, 0x83, 0x10, 0x7b, 0x54, 0x57, 0x6b, 0x62 },
+ {0x31, 0x15, 0xe4, 0x99, 0x32, 0x36, 0xd2, 0xc1 },
+ {0x44, 0xd9, 0x1a, 0x3f, 0x92, 0xc1, 0x7c, 0x66 },
+ {0x25, 0x88, 0x13, 0xc8, 0xfe, 0x4f, 0x70, 0x65 },
+ {0xa6, 0x49, 0x89, 0xc2, 0xd1, 0x80, 0xf2, 0x24 },
+ {0x6b, 0x87, 0xf8, 0xfa, 0xed, 0x1c, 0xca, 0xc2 },
+ {0x96, 0x21, 0x04, 0x9f, 0xfc, 0x4b, 0x16, 0xc2 },
+ {0x23, 0xd6, 0xb1, 0x68, 0x93, 0x9c, 0x6e, 0xa1 },
+ {0xfd, 0x14, 0x51, 0x8b, 0x9c, 0x16, 0xfb, 0x49 },
+ {0x46, 0x4c, 0x07, 0xdf, 0xf8, 0x43, 0x31, 0x9f },
+ {0xb3, 0x86, 0xcc, 0x12, 0x24, 0xaf, 0xfd, 0xc6 },
+ {0x8f, 0x09, 0x52, 0x0a, 0xd1, 0x49, 0xaf, 0x7e },
+ {0x9a, 0x2f, 0x29, 0x9d, 0x55, 0x13, 0xf3, 0x1c },
+ {0x12, 0x1f, 0xf4, 0xa2, 0xdd, 0x30, 0x4a, 0xc4 },
+ {0xd0, 0x1e, 0xa7, 0x43, 0x89, 0xe9, 0xfa, 0x36 },
+ {0xe6, 0xbc, 0xf0, 0x73, 0x4c, 0xb3, 0x8f, 0x31 },
+ {0x80, 0xe9, 0xa7, 0x70, 0x36, 0xbf, 0x7a, 0xa2 },
+ {0x75, 0x6d, 0x3c, 0x24, 0xdb, 0xc0, 0xbc, 0xb4 },
+ {0x13, 0x15, 0xb7, 0xfd, 0x52, 0xd8, 0xf8, 0x23 },
+ {0x08, 0x8a, 0x7d, 0xa6, 0x4d, 0x5f, 0x03, 0x8f },
+ {0x48, 0xf1, 0xe8, 0xb7, 0xe5, 0xd0, 0x9c, 0xd8 },
+ {0xee, 0x44, 0xa6, 0xf7, 0xbc, 0xe6, 0xf4, 0xf6 },
+ {0xf2, 0x37, 0x18, 0x0f, 0xd8, 0x9a, 0xc5, 0xae },
+ {0xe0, 0x94, 0x66, 0x4b, 0x15, 0xf6, 0xb2, 0xc3 },
+ {0xa8, 0xb3, 0xbb, 0xb7, 0x62, 0x90, 0x19, 0x9d }
+ };
+ U32 vectors_32[64] = {
+ 0xaea3c584,
+ 0xb4a35160,
+ 0xcf0c4f4f,
+ 0x6c25fd43,
+ 0x47a6d448,
+ 0x97aaee48,
+ 0x009209f7,
+ 0x48236cd8,
+ 0xbbb90f9f,
+ 0x49a2b357,
+ 0xeb218c91,
+ 0x898cdb93,
+ 0x2f175d13,
+ 0x224689ab,
+ 0xa0a3fc25,
+ 0xf971413b,
+ 0xb1df567c,
+ 0xff29b09c,
+ 0x3b8fdea2,
+ 0x7f36e0f9,
+ 0x6610cf06,
+ 0x92d753ba,
+ 0xdcdefcb5,
+ 0x88bccf5c,
+ 0x9350323e,
+ 0x35965051,
+ 0xf0a72646,
+ 0xe3c3fc7b,
+ 0x14673d0f,
+ 0xc268dd40,
+ 0x17caf7b5,
+ 0xaf510ca3,
+ 0x97b2cd61,
+ 0x37db405a,
+ 0x6ab56746,
+ 0x71b9c82f,
+ 0x81576ad5,
+ 0x15d32c7a,
+ 0x1dce4237,
+ 0x197bd4c6,
+ 0x58362303,
+ 0x596618d6,
+ 0xad63c7db,
+ 0xe67bc977,
+ 0x38329b86,
+ 0x5d126a6a,
+ 0xc9df4ab0,
+ 0xc2aa0261,
+ 0x40360fbe,
+ 0xd4312997,
+ 0x74fd405e,
+ 0x81da3ccf,
+ 0x66be2fcf,
+ 0x755df759,
+ 0x427f0faa,
+ 0xd2dd56b6,
+ 0x9080adae,
+ 0xde4fcd41,
+ 0x297ed545,
+ 0x6f7421ad,
+ 0x0152a252,
+ 0xa1ddad2a,
+ 0x88d462f5,
+ 0x2aa223ca,
+ };
+
+ const U8 MAXLEN= 64;
+ U8 in[64], seed_pv[16], state_pv[32];
+ union {
+ U64 hash;
+ U32 h32[2];
+ U8 bytes[8];
+ } out;
+ int i,j;
+ int failed = 0;
+ U32 hash32;
+ /* S_perl_siphash_seed_state(seed_pv, state_pv) sets state_pv *
+ * differently between little-endian and big-endian. It's the same *
+ * values, but in a different order. *
+ * On big-endian architecture, we transpose the values into the same *
+ * order as for little-endian, so that we can test against the same *
+ * test vectors. *
+ * We could alternatively alter the code that produces state_pv to *
+ * output identical arrangements for big-endian and little-endian. */
+#if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678
+ for( i = 0; i < 16; ++i ) seed_pv[i] = i;
+ S_perl_siphash_seed_state(seed_pv, state_pv);
+#else
+ U8 temp_pv[32];
+ for( i = 0; i < 16; ++i ) seed_pv[i] = i;
+ S_perl_siphash_seed_state(seed_pv, temp_pv);
+ for( i = 0; i < 32; ++i ) {
+ if (i < 8) state_pv[ 7 - i] = temp_pv[i];
+ else if(i < 16) state_pv[23 - i] = temp_pv[i];
+ else if(i < 24) state_pv[39 - i] = temp_pv[i];
+ else state_pv[55 - i] = temp_pv[i];
+ }
+#endif
+ for( i = 0; i < MAXLEN; ++i )
+ {
+ in[i] = i;
+
+ out.hash= S_perl_hash_siphash_1_3_with_state_64( state_pv, in, i );
+
+ hash32= S_perl_hash_siphash_1_3_with_state( state_pv, in, i);
+ /* The test vectors need to reversed here for big-endian architecture *
+ * Alternatively we could rewrite S_perl_hash_siphash_1_3_with_state_64 *
+ * to produce reversed vectors when run on big-endian architecture */
+#if BYTEORDER == 0x4321 || BYTEORDER == 0x87654321
+ temp_pv [0] = vectors[i][0]; /* temp_pv is temporary holder of vectors[i][0] */
+ vectors[i][0] = vectors[i][7];
+ vectors[i][7] = temp_pv[0];
+
+ temp_pv [0] = vectors[i][1]; /* temp_pv is temporary holder of vectors[i][1] */
+ vectors[i][1] = vectors[i][6];
+ vectors[i][6] = temp_pv[0];
+
+ temp_pv [0] = vectors[i][2]; /* temp_pv is temporary holder of vectors[i][2] */
+ vectors[i][2] = vectors[i][5];
+ vectors[i][5] = temp_pv[0];
+
+ temp_pv [0] = vectors[i][3]; /* temp_pv is temporary holder of vectors[i][3] */
+ vectors[i][3] = vectors[i][4];
+ vectors[i][4] = temp_pv[0];
+#endif
+ if ( memcmp( out.bytes, vectors[i], 8 ) )
+ {
+ failed++;
+ printf( "Error in 64 bit result on test vector of length %d for siphash13\n have: {", i );
+ for (j=0;j<7;j++)
+ printf( "0x%02x, ", out.bytes[j]);
+ printf( "0x%02x },\n", out.bytes[7]);
+ printf( " want: {" );
+ for (j=0;j<7;j++)
+ printf( "0x%02x, ", vectors[i][j]);
+ printf( "0x%02x },\n", vectors[i][7]);
+ }
+ if (hash32 != vectors_32[i]) {
+ failed++;
+ printf( "Error in 32 bit result on test vector of length %d for siphash13\n"
+ " have: 0x%08x\n"
+ " want: 0x%08x\n",
+ i, hash32, vectors_32[i]);
+ }
+ }
+ RETVAL= failed;
+ }
+ OUTPUT:
+ RETVAL
+
+#endif
diff --git a/gnu/usr.bin/perl/ext/XS-APItest/Makefile.PL b/gnu/usr.bin/perl/ext/XS-APItest/Makefile.PL
index d79ba1150e0..3fe5e397a8b 100644
--- a/gnu/usr.bin/perl/ext/XS-APItest/Makefile.PL
+++ b/gnu/usr.bin/perl/ext/XS-APItest/Makefile.PL
@@ -23,7 +23,7 @@ WriteMakefile(
my @names = (qw(HV_DELETE HV_DISABLE_UVAR_XKEY HV_FETCH_ISSTORE
HV_FETCH_ISEXISTS HV_FETCH_LVALUE HV_FETCH_JUST_SV
G_SCALAR G_ARRAY G_VOID G_DISCARD G_EVAL G_NOARGS
- G_KEEPERR G_NODEBUG G_METHOD G_FAKINGEVAL
+ G_KEEPERR G_NODEBUG G_METHOD G_FAKINGEVAL G_RETHROW
GV_NOADD_NOINIT
IS_NUMBER_IN_UV IS_NUMBER_GREATER_THAN_UV_MAX
IS_NUMBER_NOT_INT IS_NUMBER_NEG IS_NUMBER_INFINITY
diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/call.t b/gnu/usr.bin/perl/ext/XS-APItest/t/call.t
index 8192b9bd36a..e4228077cbd 100755
--- a/gnu/usr.bin/perl/ext/XS-APItest/t/call.t
+++ b/gnu/usr.bin/perl/ext/XS-APItest/t/call.t
@@ -11,7 +11,7 @@ use strict;
BEGIN {
require '../../t/test.pl';
- plan(527);
+ plan(538);
use_ok('XS::APItest')
};
@@ -223,7 +223,34 @@ is(eval_pv('d()', 0), undef, "eval_pv('d()', 0)");
is($@, "its_dead_jim\n", "eval_pv('d()', 0) - \$@");
is(eval { eval_pv('d()', 1) } , undef, "eval { eval_pv('d()', 1) }");
is($@, "its_dead_jim\n", "eval { eval_pv('d()', 1) } - \$@");
-
+is(eval { eval_pv(q/die $obj/, 1) }, undef,
+ "eval_pv die of an object");
+ok(ref $@, "object thrown");
+is($@, $obj, "check object rethrown");
+
+package False {
+ use overload
+ bool => sub { 0 },
+ '""' => sub { "Foo" };
+ sub new { bless {}, shift }
+};
+my $false = False->new;
+ok(!$false, "our false object is actually false");
+is(eval { eval_pv(q/die $false;/, 1); 1 }, undef,
+ "check false objects are rethrown");
+is(overload::StrVal($@), overload::StrVal($false),
+ "check we got the expected object");
+
+is(eval { eval_sv(q/die $false/, G_RETHROW); 1 }, undef,
+ "check G_RETHROW for thrown object");
+is(overload::StrVal($@), overload::StrVal($false),
+ "check we got the expected object");
+is(eval { eval_sv(q/"unterminated/, G_RETHROW); 1 }, undef,
+ "check G_RETHROW for syntax error");
+like($@, qr/Can't find string terminator/,
+ "check error rethrown");
+ok(eq_array([ eval { eval_sv(q/"working code"/, G_RETHROW) } ], [ "working code", 1 ]),
+ "check for spurious rethrow");
# #3719 - check that the eval call variants handle exceptions correctly,
# and do the right thing with $@, both with and without G_KEEPERR set.
diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/multicall.t b/gnu/usr.bin/perl/ext/XS-APItest/t/multicall.t
index 51ef276b14e..8630df751fe 100644
--- a/gnu/usr.bin/perl/ext/XS-APItest/t/multicall.t
+++ b/gnu/usr.bin/perl/ext/XS-APItest/t/multicall.t
@@ -69,7 +69,7 @@ use XS::APItest;
# these take different code paths.
# Whenever an explicit 'return' is used, it is followed by '1;' to avoid
# the return being optimised into a leavesub.
-# Adding a 'for' loop pushes extra junk on the stack, which we we want to
+# Adding a 'for' loop pushes extra junk on the stack, which we want to
# avoid being interpreted as a return arg.
{
diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/printf.t b/gnu/usr.bin/perl/ext/XS-APItest/t/printf.t
index 968fdc46276..28f21e35e17 100755
--- a/gnu/usr.bin/perl/ext/XS-APItest/t/printf.t
+++ b/gnu/usr.bin/perl/ext/XS-APItest/t/printf.t
@@ -6,7 +6,7 @@ BEGIN {
}
}
-use Test::More tests => 11;
+use Test::More tests => 12;
BEGIN { use_ok('XS::APItest') };
@@ -51,3 +51,15 @@ SKIP: {
is($output[4], "7.000", "print_long_double");
}
+{
+ # GH #17338
+ # This is unlikely to fail here since int and long are the
+ # same size on our usual platforms, but it's less likely to
+ # be ignored than the warning that's the real diagnostic
+ # for this bug.
+ my $uv_max = ~0;
+ my $iv_max = $uv_max >> 1;
+ my $max_out = "iv $iv_max uv $uv_max";
+ is(test_MAX_types(), $max_out,
+ "check types for IV_MAX and UV_MAX match IVdf/UVuf");
+}
diff --git a/gnu/usr.bin/perl/ext/mro/mro.pm b/gnu/usr.bin/perl/ext/mro/mro.pm
index 4a7685cc042..d094c020809 100644
--- a/gnu/usr.bin/perl/ext/mro/mro.pm
+++ b/gnu/usr.bin/perl/ext/mro/mro.pm
@@ -12,7 +12,7 @@ use warnings;
# mro.pm versions < 1.00 reserved for MRO::Compat
# for partial back-compat to 5.[68].x
-our $VERSION = '1.22';
+our $VERSION = '1.23';
require XSLoader;
XSLoader::load('mro');
@@ -276,7 +276,7 @@ The problem exists because the anonymous subroutine being assigned to the
C<*Foo::foo> glob will show up in the call stack as being called
C<__ANON__> and not C<foo> as you might expect. Since C<next::method> uses
C<caller> to find the name of the method it was called in, it will fail in
-this case.
+this case.
But fear not, there's a simple solution. The module C<Sub::Name> will
reach into the perl internals and assign a name to an anonymous subroutine
@@ -312,27 +312,11 @@ works (like C<goto &maybe::next::method>);
=back
-=head2 Pugs
-
-The Pugs prototype Perl 6 Object Model uses C3
-
-=head2 Parrot
-
-Parrot now uses C3
-
-=over 4
-
-=item L<http://use.perl.org/~autrijus/journal/25768>
-
-=back
-
-=head2 Python 2.3 MRO related links
+=head2 Python 2.3 MRO
=over 4
-=item L<http://www.python.org/2.3/mro.html>
-
-=item L<http://www.python.org/2.2.2/descrintro.html#mro>
+=item L<https://www.python.org/download/releases/2.3/mro/>
=back
diff --git a/gnu/usr.bin/perl/ext/re/Makefile.PL b/gnu/usr.bin/perl/ext/re/Makefile.PL
index 4a2193401a6..f3bdcfdc69f 100644
--- a/gnu/usr.bin/perl/ext/re/Makefile.PL
+++ b/gnu/usr.bin/perl/ext/re/Makefile.PL
@@ -6,8 +6,13 @@ my $object = 're_exec$(OBJ_EXT) re_comp$(OBJ_EXT) re$(OBJ_EXT)';
my $defines = '-DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT';
+my @libs;
+if ($^O eq 'cygwin' && $Config{usequadmath}) {
+ push @libs, qw(quadmath);
+}
WriteMakefile(
NAME => 're',
+ @libs ? ( 'LIBS' => [ join(" ", map { "-l$_" } @libs) ] ) : (),
VERSION_FROM => 're.pm',
XSPROTOARG => '-noprototypes',
OBJECT => $object,
diff --git a/gnu/usr.bin/perl/ext/re/re.pm b/gnu/usr.bin/perl/ext/re/re.pm
index 817b522c280..e2eddc09b91 100644
--- a/gnu/usr.bin/perl/ext/re/re.pm
+++ b/gnu/usr.bin/perl/ext/re/re.pm
@@ -4,7 +4,7 @@ package re;
use strict;
use warnings;
-our $VERSION = "0.37";
+our $VERSION = "0.40";
our @ISA = qw(Exporter);
our @EXPORT_OK = ('regmust',
qw(is_regexp regexp_pattern
@@ -54,33 +54,41 @@ sub setcolor {
}
my %flags = (
- COMPILE => 0x0000FF,
- PARSE => 0x000001,
- OPTIMISE => 0x000002,
- TRIEC => 0x000004,
- DUMP => 0x000008,
- FLAGS => 0x000010,
- TEST => 0x000020,
-
- EXECUTE => 0x00FF00,
- INTUIT => 0x000100,
- MATCH => 0x000200,
- TRIEE => 0x000400,
-
- EXTRA => 0xFF0000,
- TRIEM => 0x010000,
- OFFSETS => 0x020000,
- OFFSETSDBG => 0x040000,
- STATE => 0x080000,
- OPTIMISEM => 0x100000,
- STACK => 0x280000,
- BUFFERS => 0x400000,
- GPOS => 0x800000,
+ COMPILE => 0x0000FF,
+ PARSE => 0x000001,
+ OPTIMISE => 0x000002,
+ TRIEC => 0x000004,
+ DUMP => 0x000008,
+ FLAGS => 0x000010,
+ TEST => 0x000020,
+
+ EXECUTE => 0x00FF00,
+ INTUIT => 0x000100,
+ MATCH => 0x000200,
+ TRIEE => 0x000400,
+
+ EXTRA => 0x3FF0000,
+ TRIEM => 0x0010000,
+ OFFSETS => 0x0020000,
+ OFFSETSDBG => 0x0040000,
+ STATE => 0x0080000,
+ OPTIMISEM => 0x0100000,
+ STACK => 0x0280000,
+ BUFFERS => 0x0400000,
+ GPOS => 0x0800000,
+ DUMP_PRE_OPTIMIZE => 0x1000000,
+ WILDCARD => 0x2000000,
);
-$flags{ALL} = -1 & ~($flags{OFFSETS}|$flags{OFFSETSDBG}|$flags{BUFFERS});
+$flags{ALL} = -1 & ~($flags{OFFSETS}
+ |$flags{OFFSETSDBG}
+ |$flags{BUFFERS}
+ |$flags{DUMP_PRE_OPTIMIZE}
+ |$flags{WILDCARD}
+ );
$flags{All} = $flags{all} = $flags{DUMP} | $flags{EXECUTE};
$flags{Extra} = $flags{EXECUTE} | $flags{COMPILE} | $flags{GPOS};
-$flags{More} = $flags{MORE} = $flags{All} | $flags{TRIEC} | $flags{TRIEM} | $flags{STATE};
+$flags{More} = $flags{MORE} =
+ $flags{All} | $flags{TRIEC} | $flags{TRIEM} | $flags{STATE};
$flags{State} = $flags{DUMP} | $flags{EXECUTE} | $flags{STATE};
$flags{TRIE} = $flags{DUMP} | $flags{EXECUTE} | $flags{TRIEC};
@@ -113,6 +121,8 @@ sub bits {
my $on = shift;
my $bits = 0;
my $turning_all_off = ! @_ && ! $on;
+ my $seen_Debug = 0;
+ my $seen_debug = 0;
if ($turning_all_off) {
# Pretend were called with certain parameters, which are best dealt
@@ -126,8 +136,15 @@ sub bits {
foreach my $idx (0..$#_){
my $s=$_[$idx];
if ($s eq 'Debug' or $s eq 'Debugcolor') {
+ if (! $seen_Debug) {
+ $seen_Debug = 1;
+
+ # Reset to nothing, and then add what follows. $seen_Debug
+ # allows, though unlikely someone would do it, more than one
+ # Debug and flags in the arguments
+ ${^RE_DEBUG_FLAGS} = 0;
+ }
setcolor() if $s =~/color/i;
- ${^RE_DEBUG_FLAGS} = 0 unless defined ${^RE_DEBUG_FLAGS};
for my $idx ($idx+1..$#_) {
if ($flags{$_[$idx]}) {
if ($on) {
@@ -144,9 +161,13 @@ sub bits {
_load_unload($on ? 1 : ${^RE_DEBUG_FLAGS});
last;
} elsif ($s eq 'debug' or $s eq 'debugcolor') {
+
+ # These default flags should be kept in sync with the same values
+ # in regcomp.h
+ ${^RE_DEBUG_FLAGS} = $flags{'EXECUTE'} | $flags{'DUMP'};
setcolor() if $s =~/color/i;
_load_unload($on);
- last;
+ $seen_debug = 1;
} elsif (exists $bitmask{$s}) {
$bits |= $bitmask{$s};
} elsif ($EXPORT_OK{$s}) {
@@ -255,9 +276,15 @@ sub bits {
: ($^H &= ~$flags_hint);
} else {
require Carp;
- Carp::carp("Unknown \"re\" subpragma '$s' (known ones are: ",
+ if ($seen_debug && defined $flags{$s}) {
+ Carp::carp("Use \"Debug\" not \"debug\", to list debug types"
+ . " in \"re\". \"$s\" ignored");
+ }
+ else {
+ Carp::carp("Unknown \"re\" subpragma '$s' (known ones are: ",
join(', ', map {qq('$_')} 'debug', 'debugcolor', sort keys %bitmask),
")");
+ }
}
}
@@ -396,7 +423,7 @@ equivalent to
qr/\x{AB}C/
that is, the character whose code point value is C<0xAB>, followed by the
-letter C<C>. But since C<C> is a a hex digit, there is a reasonable chance
+letter C<C>. But since C<C> is a hex digit, there is a reasonable chance
that the intent was
qr/\x{ABC}/
@@ -510,7 +537,7 @@ purposes. The options are as follows:
=item COMPILE
-Turns on all compile related debug options.
+Turns on all non-extra compile related debug options.
=item PARSE
@@ -544,7 +571,7 @@ Print output intended for testing the internals of the compile process
=item EXECUTE
-Turns on all execute related debug options.
+Turns on all non-extra execute related debug options.
=item MATCH
@@ -617,6 +644,36 @@ debug options.
Almost definitely only useful to people hacking
on the offsets part of the debug engine.
+=item DUMP_PRE_OPTIMIZE
+
+Enable the dumping of the compiled pattern before the optimization phase.
+
+=item WILDCARD
+
+When Perl encounters a wildcard subpattern, (see L<perlunicode/Wildcards in
+Property Values>), it suspends compilation of the main pattern, compiles the
+subpattern, and then matches that against all legal possibilities to determine
+the actual code points the subpattern matches. After that it adds these to
+the main pattern, and continues its compilation.
+
+You may very well want to see how your subpattern gets compiled, but it is
+likely of less use to you to see how Perl matches that against all the legal
+possibilities, as that is under control of Perl, not you. Therefore, the
+debugging information of the compilation portion is as specified by the other
+options, but the debugging output of the matching portion is normally
+suppressed.
+
+You can use the WILDCARD option to enable the debugging output of this
+subpattern matching. Careful! This can lead to voluminous outputs, and it
+may not make much sense to you what and why Perl is doing what it is.
+But it may be helpful to you to see why things aren't going the way you
+expect.
+
+Note that this option alone doesn't cause any debugging information to be
+output. What it does is stop the normal suppression of execution-related
+debugging information during the matching portion of the compilation of
+wildcards. You also have to specify which execution debugging information you
+want, such as by also including the EXECUTE option.
=back
@@ -628,14 +685,15 @@ These are useful shortcuts to save on the typing.
=item ALL
-Enable all options at once except OFFSETS, OFFSETSDBG and BUFFERS.
+Enable all options at once except OFFSETS, OFFSETSDBG, BUFFERS, WILDCARD, and
+DUMP_PRE_OPTIMIZE.
(To get every single option without exception, use both ALL and EXTRA, or
starting in 5.30 on a C<-DDEBUGGING>-enabled perl interpreter, use
the B<-Drv> command-line switches.)
=item All
-Enable DUMP and all execute options. Equivalent to:
+Enable DUMP and all non-extra execute options. Equivalent to:
use re 'debug';
diff --git a/gnu/usr.bin/perl/ext/re/re.xs b/gnu/usr.bin/perl/ext/re/re.xs
index 497135a5daa..f8d77dd988e 100644
--- a/gnu/usr.bin/perl/ext/re/re.xs
+++ b/gnu/usr.bin/perl/ext/re/re.xs
@@ -56,6 +56,7 @@ extern void* my_regdupe (pTHX_ REGEXP * const r, CLONE_PARAMS *param);
#endif
EXTERN_C const struct regexp_engine my_reg_engine;
+EXTERN_C const struct regexp_engine wild_reg_engine;
END_EXTERN_C
@@ -77,6 +78,28 @@ const struct regexp_engine my_reg_engine = {
my_re_op_compile,
};
+/* For use with Unicode property wildcards, when we want to see the compilation
+ * of the wildcard subpattern, but don't want to see the matching process. All
+ * but the compilation are the regcomp.c/regexec.c functions which aren't
+ * subject to 'use re' */
+const struct regexp_engine wild_reg_engine = {
+ my_re_compile,
+ Perl_regexec_flags,
+ Perl_re_intuit_start,
+ Perl_re_intuit_string,
+ Perl_regfree_internal,
+ Perl_reg_numbered_buff_fetch,
+ Perl_reg_numbered_buff_store,
+ Perl_reg_numbered_buff_length,
+ Perl_reg_named_buff,
+ Perl_reg_named_buff_iter,
+ Perl_reg_qr_package,
+#if defined(USE_ITHREADS)
+ Perl_regdupe_internal,
+#endif
+ my_re_op_compile,
+};
+
MODULE = re PACKAGE = re
void
@@ -96,7 +119,8 @@ PPCODE:
{
if ((re = SvRX(sv)) /* assign deliberate */
/* only for re engines we know about */
- && (RX_ENGINE(re) == &my_reg_engine
+ && ( RX_ENGINE(re) == &my_reg_engine
+ || RX_ENGINE(re) == &wild_reg_engine
|| RX_ENGINE(re) == &PL_core_reg_engine))
{
SV *an = &PL_sv_no;
diff --git a/gnu/usr.bin/perl/ext/re/t/re.t b/gnu/usr.bin/perl/ext/re/t/re.t
index 353ff812d47..ff5cf9fa355 100644
--- a/gnu/usr.bin/perl/ext/re/t/re.t
+++ b/gnu/usr.bin/perl/ext/re/t/re.t
@@ -13,7 +13,7 @@ use strict;
my $re_taint_bit = 0x00100000;
my $re_eval_bit = 0x00200000;
-use Test::More tests => 15;
+use Test::More tests => 16;
require_ok( 're' );
# setcolor
@@ -48,6 +48,10 @@ like( $warn, qr/Unknown "re" subpragma/,
ok( re::bits(0, 'taint') & $re_taint_bit, '... should set taint bits' );
ok( re::bits(0, 'eval') & $re_eval_bit, '... should set eval bits' );
+undef $warn;
+eval "use re qw(debug ALL)";
+like( $warn, qr/"Debug" not "debug"/, 'debug with debugging type should warn');
+
local $^H;
# import
diff --git a/gnu/usr.bin/perl/feature.h b/gnu/usr.bin/perl/feature.h
index 3877e16efe7..2f2f23c4da7 100644
--- a/gnu/usr.bin/perl/feature.h
+++ b/gnu/usr.bin/perl/feature.h
@@ -12,6 +12,22 @@
#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_BUNDLE_DEFAULT 0
#define FEATURE_BUNDLE_510 1
#define FEATURE_BUNDLE_511 2
@@ -25,12 +41,10 @@
#define CURRENT_FEATURE_BUNDLE \
((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
-/* Avoid using ... && Perl_feature_is_enabled(...) as that triggers a bug in
- the HP-UX cc on PA-RISC */
-#define FEATURE_IS_ENABLED(name) \
- ((CURRENT_HINTS \
- & HINT_LOCALIZE_HH) \
- ? Perl_feature_is_enabled(aTHX_ STR_WITH_LEN(name)) : FALSE)
+#define FEATURE_IS_ENABLED_MASK(mask) \
+ ((CURRENT_HINTS & HINT_LOCALIZE_HH) \
+ ? (PL_curcop->cop_features & (mask)) : FALSE)
+
/* The longest string we pass in. */
#define MAX_FEATURE_LEN (sizeof("postderef_qq")-1)
@@ -39,7 +53,13 @@
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("fc")) \
+ FEATURE_IS_ENABLED_MASK(FEATURE_FC_BIT)) \
+ )
+
+#define FEATURE_ISA_IS_ENABLED \
+ ( \
+ CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_ISA_BIT) \
)
#define FEATURE_SAY_IS_ENABLED \
@@ -47,7 +67,7 @@
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("say")) \
+ FEATURE_IS_ENABLED_MASK(FEATURE_SAY_BIT)) \
)
#define FEATURE_STATE_IS_ENABLED \
@@ -55,7 +75,7 @@
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("state")) \
+ FEATURE_IS_ENABLED_MASK(FEATURE_STATE_BIT)) \
)
#define FEATURE_SWITCH_IS_ENABLED \
@@ -63,14 +83,21 @@
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("switch")) \
+ FEATURE_IS_ENABLED_MASK(FEATURE_SWITCH_BIT)) \
)
#define FEATURE_BITWISE_IS_ENABLED \
( \
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_527 \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("bitwise")) \
+ FEATURE_IS_ENABLED_MASK(FEATURE_BITWISE_BIT)) \
+ )
+
+#define FEATURE_INDIRECT_IS_ENABLED \
+ ( \
+ CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527 \
+ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
+ FEATURE_IS_ENABLED_MASK(FEATURE_INDIRECT_BIT)) \
)
#define FEATURE_EVALBYTES_IS_ENABLED \
@@ -78,13 +105,13 @@
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("evalbytes")) \
+ FEATURE_IS_ENABLED_MASK(FEATURE_EVALBYTES_BIT)) \
)
#define FEATURE_SIGNATURES_IS_ENABLED \
( \
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("signatures") \
+ FEATURE_IS_ENABLED_MASK(FEATURE_SIGNATURES_BIT) \
)
#define FEATURE___SUB___IS_ENABLED \
@@ -92,13 +119,13 @@
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("__SUB__")) \
+ FEATURE_IS_ENABLED_MASK(FEATURE___SUB___BIT)) \
)
#define FEATURE_REFALIASING_IS_ENABLED \
( \
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("refaliasing") \
+ FEATURE_IS_ENABLED_MASK(FEATURE_REFALIASING_BIT) \
)
#define FEATURE_POSTDEREF_QQ_IS_ENABLED \
@@ -106,7 +133,7 @@
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_523 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("postderef_qq")) \
+ FEATURE_IS_ENABLED_MASK(FEATURE_POSTDEREF_QQ_BIT)) \
)
#define FEATURE_UNIEVAL_IS_ENABLED \
@@ -114,13 +141,13 @@
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("unieval")) \
+ FEATURE_IS_ENABLED_MASK(FEATURE_UNIEVAL_BIT)) \
)
#define FEATURE_MYREF_IS_ENABLED \
( \
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("myref") \
+ FEATURE_IS_ENABLED_MASK(FEATURE_MYREF_BIT) \
)
#define FEATURE_UNICODE_IS_ENABLED \
@@ -128,10 +155,23 @@
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_511 && \
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \
- FEATURE_IS_ENABLED("unicode")) \
+ FEATURE_IS_ENABLED_MASK(FEATURE_UNICODE_BIT)) \
)
+#define SAVEFEATUREBITS() SAVEI32(PL_compiling.cop_features)
+
+#define CLEARFEATUREBITS() (PL_compiling.cop_features = 0)
+
+#define STOREFEATUREBITSHH(hh) \
+ (hv_stores((hh), "feature/bits", newSVuv(PL_compiling.cop_features)))
+
+#define FETCHFEATUREBITSHH(hh) \
+ STMT_START { \
+ SV **fbsv = hv_fetchs((hh), "feature/bits", FALSE); \
+ PL_compiling.cop_features = fbsv ? SvUV(*fbsv) : 0; \
+ } STMT_END
+
#endif /* PERL_CORE or PERL_EXT */
#ifdef PERL_IN_OP_C
@@ -165,6 +205,136 @@ S_enable_feature_bundle(pTHX_ SV *ver)
}
#endif /* PERL_IN_OP_C */
+#ifdef PERL_IN_MG_C
+
+#define magic_sethint_feature(keysv, keypv, keylen, valsv, valbool) \
+ S_magic_sethint_feature(aTHX_ (keysv), (keypv), (keylen), (valsv), (valbool))
+PERL_STATIC_INLINE void
+S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
+ SV *valsv, bool valbool) {
+ if (keysv)
+ keypv = SvPV_const(keysv, keylen);
+
+ if (memBEGINs(keypv, keylen, "feature_")) {
+ const char *subf = keypv + (sizeof("feature_")-1);
+ U32 mask = 0;
+ switch (*subf) {
+ case '_':
+ if (keylen == sizeof("feature___SUB__")-1
+ && memcmp(subf+1, "_SUB__", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE___SUB___BIT;
+ break;
+ }
+ return;
+
+ case 'b':
+ if (keylen == sizeof("feature_bitwise")-1
+ && memcmp(subf+1, "itwise", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_BITWISE_BIT;
+ break;
+ }
+ return;
+
+ case 'e':
+ if (keylen == sizeof("feature_evalbytes")-1
+ && memcmp(subf+1, "valbytes", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_EVALBYTES_BIT;
+ break;
+ }
+ return;
+
+ case 'f':
+ if (keylen == sizeof("feature_fc")-1
+ && memcmp(subf+1, "c", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_FC_BIT;
+ break;
+ }
+ return;
+
+ case 'i':
+ if (keylen == sizeof("feature_indirect")-1
+ && memcmp(subf+1, "ndirect", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_INDIRECT_BIT;
+ break;
+ }
+ else if (keylen == sizeof("feature_isa")-1
+ && memcmp(subf+1, "sa", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_ISA_BIT;
+ break;
+ }
+ return;
+
+ case 'm':
+ if (keylen == sizeof("feature_myref")-1
+ && memcmp(subf+1, "yref", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_MYREF_BIT;
+ break;
+ }
+ return;
+
+ case 'p':
+ if (keylen == sizeof("feature_postderef_qq")-1
+ && memcmp(subf+1, "ostderef_qq", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_POSTDEREF_QQ_BIT;
+ break;
+ }
+ return;
+
+ case 'r':
+ if (keylen == sizeof("feature_refaliasing")-1
+ && memcmp(subf+1, "efaliasing", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_REFALIASING_BIT;
+ break;
+ }
+ return;
+
+ case 's':
+ if (keylen == sizeof("feature_say")-1
+ && memcmp(subf+1, "ay", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_SAY_BIT;
+ break;
+ }
+ else if (keylen == sizeof("feature_signatures")-1
+ && memcmp(subf+1, "ignatures", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_SIGNATURES_BIT;
+ break;
+ }
+ else if (keylen == sizeof("feature_state")-1
+ && memcmp(subf+1, "tate", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_STATE_BIT;
+ break;
+ }
+ else if (keylen == sizeof("feature_switch")-1
+ && memcmp(subf+1, "witch", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_SWITCH_BIT;
+ break;
+ }
+ return;
+
+ case 'u':
+ if (keylen == sizeof("feature_unicode")-1
+ && memcmp(subf+1, "nicode", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_UNICODE_BIT;
+ break;
+ }
+ else if (keylen == sizeof("feature_unieval")-1
+ && memcmp(subf+1, "nieval", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_UNIEVAL_BIT;
+ break;
+ }
+ return;
+
+ default:
+ return;
+ }
+ if (valsv ? SvTRUE(valsv) : valbool)
+ PL_compiling.cop_features |= mask;
+ else
+ PL_compiling.cop_features &= ~mask;
+ }
+}
+#endif /* PERL_IN_MG_C */
+
#endif /* PERL_FEATURE_H_ */
/* ex: set ro: */
diff --git a/gnu/usr.bin/perl/globvar.sym b/gnu/usr.bin/perl/globvar.sym
index dcc65f2e291..0462026cc83 100644
--- a/gnu/usr.bin/perl/globvar.sym
+++ b/gnu/usr.bin/perl/globvar.sym
@@ -95,3 +95,4 @@ PL_warn_uninit
PL_WARN_ALL
PL_WARN_NONE
PL_watch_pvx
+PL_extended_cp_format
diff --git a/gnu/usr.bin/perl/gv.c b/gnu/usr.bin/perl/gv.c
index 3b8759e88a9..a90ce9b122e 100644
--- a/gnu/usr.bin/perl/gv.c
+++ b/gnu/usr.bin/perl/gv.c
@@ -323,6 +323,8 @@ the return value of SvUTF8(sv). It can also take the
C<GV_ADDMULTI> flag, which means to pretend that the GV has been
seen before (i.e., suppress "Used once" warnings).
+=for apidoc Amnh||GV_ADDMULTI
+
=for apidoc gv_init
The old form of C<gv_init_pvn()>. It does not work with UTF-8 strings, as it
@@ -525,9 +527,10 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv,
case KEY_do : case KEY_dump : case KEY_else : case KEY_elsif :
case KEY_END : case KEY_eq : case KEY_eval :
case KEY_for : case KEY_foreach: case KEY_format: case KEY_ge :
- case KEY_given : case KEY_goto : case KEY_grep :
- case KEY_gt : case KEY_if: case KEY_INIT: case KEY_last: case KEY_le:
- case KEY_local: case KEY_lt: case KEY_m : case KEY_map : case KEY_my:
+ case KEY_given : case KEY_goto : case KEY_grep : case KEY_gt :
+ case KEY_if : case KEY_isa : case KEY_INIT : case KEY_last :
+ case KEY_le : case KEY_local : case KEY_lt : case KEY_m :
+ case KEY_map : case KEY_my:
case KEY_ne : case KEY_next : case KEY_no: case KEY_or: case KEY_our:
case KEY_package: case KEY_print: case KEY_printf:
case KEY_q : case KEY_qq : case KEY_qr : case KEY_qw :
@@ -693,6 +696,8 @@ visible to Perl code. So when calling C<call_sv>, you should not use
the GV directly; instead, you should use the method's CV, which can be
obtained from the GV with the C<GvCV> macro.
+=for apidoc Amnh||GV_SUPER
+
=cut
*/
@@ -711,6 +716,7 @@ S_gv_fetchmeth_internal(pTHX_ HV* stash, SV* meth, const char* name, STRLEN len,
CV* cand_cv = NULL;
GV* topgv = NULL;
const char *hvname;
+ STRLEN hvnamelen;
I32 create = (level >= 0) ? HV_FETCH_LVALUE : 0;
I32 items;
U32 topgen_cmp;
@@ -726,6 +732,7 @@ S_gv_fetchmeth_internal(pTHX_ HV* stash, SV* meth, const char* name, STRLEN len,
assert(stash);
hvname = HvNAME_get(stash);
+ hvnamelen = HvNAMELEN_get(stash);
if (!hvname)
Perl_croak(aTHX_ "Can't use anonymous symbol table for method lookup");
@@ -795,10 +802,30 @@ S_gv_fetchmeth_internal(pTHX_ HV* stash, SV* meth, const char* name, STRLEN len,
cstash = gv_stashsv(linear_sv, 0);
if (!cstash) {
- Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
- "Can't locate package %" SVf " for @%" HEKf "::ISA",
- SVfARG(linear_sv),
- HEKfARG(HvNAME_HEK(stash)));
+ if ( ckWARN(WARN_SYNTAX)) {
+ if( /* these are loaded from Perl_Gv_AMupdate() one way or another */
+ ( len && name[0] == '(' ) /* overload.pm related, in particular "()" */
+ || ( memEQs( name, len, "DESTROY") )
+ ) {
+ Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
+ "Can't locate package %" SVf " for @%" HEKf "::ISA",
+ SVfARG(linear_sv),
+ HEKfARG(HvNAME_HEK(stash)));
+
+ } else if( memEQs( name, len, "AUTOLOAD") ) {
+ /* gobble this warning */
+ } else {
+ Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),
+ "While trying to resolve method call %.*s->%.*s()"
+ " can not locate package \"%" SVf "\" yet it is mentioned in @%.*s::ISA"
+ " (perhaps you forgot to load \"%" SVf "\"?)",
+ (int) hvnamelen, hvname,
+ (int) len, name,
+ SVfARG(linear_sv),
+ (int) hvnamelen, hvname,
+ SVfARG(linear_sv));
+ }
+ }
continue;
}
@@ -1266,7 +1293,7 @@ Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags)
if (SvUTF8(cv))
sv_utf8_upgrade_flags_grow(tmpsv, 0, CvPROTOLEN(cv) + 2);
ulen = SvCUR(tmpsv);
- SvCUR(tmpsv)++; /* include null in string */
+ SvCUR_set(tmpsv, SvCUR(tmpsv) + 1); /* include null in string */
sv_catpvn_flags(
tmpsv, proto, CvPROTOLEN(cv), SV_CATBYTES*!SvUTF8(cv)
);
@@ -1275,7 +1302,7 @@ Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags)
SvTEMP_off(tmpsv);
SvREFCNT_dec_NN(tmpsv);
SvLEN_set(cv, SvCUR(cv) + 1);
- SvCUR(cv) = ulen;
+ SvCUR_set(cv, ulen);
}
else {
sv_setpvn((SV *)cv, name, len);
@@ -1436,6 +1463,13 @@ The most important of which are probably C<GV_ADD> and C<SVf_UTF8>.
Note, use of C<gv_stashsv> instead of C<gv_stashpvn> where possible is strongly
recommended for performance reasons.
+=for apidoc Amnh||GV_ADD
+=for apidoc Amnh||GV_NOADD_NOINIT
+=for apidoc Amnh||GV_NOINIT
+=for apidoc Amnh||GV_NOEXPAND
+=for apidoc Amnh||GV_ADDMG
+=for apidoc Amnh||SVf_UTF8
+
=cut
*/
@@ -1502,8 +1536,8 @@ Note the sv interface is strongly preferred for performance reasons.
#define PERL_ARGS_ASSERT_GV_STASHSVPVN_CACHED \
assert(namesv || name)
-PERL_STATIC_INLINE HV*
-S_gv_stashsvpvn_cached(pTHX_ SV *namesv, const char *name, U32 namelen, I32 flags)
+HV*
+Perl_gv_stashsvpvn_cached(pTHX_ SV *namesv, const char *name, U32 namelen, I32 flags)
{
HV* stash;
HE* he;
@@ -2032,13 +2066,11 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len,
sv_magic(MUTABLE_SV(av), (SV*)n, PERL_MAGIC_regdata, NULL, 0);
SvREADONLY_on(av);
- if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
- require_tie_mod_s(gv, '-', "Tie::Hash::NamedCapture",0);
+ require_tie_mod_s(gv, '+', "Tie::Hash::NamedCapture",0);
} else /* %{^CAPTURE_ALL} */
if (memEQs(name, len, "\003APTURE_ALL")) {
- if (sv_type == SVt_PVHV || sv_type == SVt_PVGV)
- require_tie_mod_s(gv, '+', "Tie::Hash::NamedCapture",0);
+ require_tie_mod_s(gv, '-', "Tie::Hash::NamedCapture",0);
}
break;
case '\005': /* $^ENCODING */
diff --git a/gnu/usr.bin/perl/handy.h b/gnu/usr.bin/perl/handy.h
index 51f79efcf39..fd0866828c4 100644
--- a/gnu/usr.bin/perl/handy.h
+++ b/gnu/usr.bin/perl/handy.h
@@ -20,11 +20,11 @@
/*
=head1 Handy Values
-=for apidoc AmU||Nullch
+=for apidoc AmnU||Nullch
Null character pointer. (No longer available when C<PERL_CORE> is
defined.)
-=for apidoc AmU||Nullsv
+=for apidoc AmnU||Nullsv
Null SV pointer. (No longer available when C<PERL_CORE> is defined.)
=cut
@@ -97,10 +97,17 @@ Null SV pointer. (No longer available when C<PERL_CORE> is defined.)
# define HAS_BOOL 1
#endif
-/* cast-to-bool. A simple (bool) cast may not do the right thing: if bool is
- * defined as char for example, then the cast from int is
- * implementation-defined (bool)!!(cbool) in a ternary triggers a bug in xlc on
- * AIX */
+/*
+=for apidoc Am|bool|cBOOL|bool expr
+
+Cast-to-bool. A simple S<C<(bool) I<expr>>> cast may not do the right thing:
+if C<bool> is defined as C<char>, for example, then the cast from C<int> is
+implementation-defined.
+
+C<(bool)!!(cbool)> in a ternary triggers a bug in xlc on AIX
+
+=cut
+*/
#define cBOOL(cbool) ((cbool) ? (bool)1 : (bool)0)
/* Try to figure out __func__ or __FUNCTION__ equivalent, if any.
@@ -109,8 +116,7 @@ Null SV pointer. (No longer available when C<PERL_CORE> is defined.)
* XXX Similarly, a Configure probe for __FILE__ and __LINE__ is needed. */
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || (defined(__SUNPRO_C)) /* C99 or close enough. */
# define FUNCTION__ __func__
-#elif (defined(USING_MSVC6)) || /* MSVC6 has neither __func__ nor __FUNCTION and no good workarounds, either. */ \
- (defined(__DECC_VER)) /* Tru64 or VMS, and strict C89 being used, but not modern enough cc (in Tur64, -c99 not known, only -std1). */
+#elif (defined(__DECC_VER)) /* Tru64 or VMS, and strict C89 being used, but not modern enough cc (in Tur64, -c99 not known, only -std1). */
# define FUNCTION__ ""
#else
# define FUNCTION__ __FUNCTION__ /* Common extension. */
@@ -263,16 +269,22 @@ typedef U64TYPE U64;
# define isPOWER_OF_2(n) ((n) && ((n) & ((n)-1)) == 0)
#endif
-/* This is a helper macro to avoid preprocessor issues, replaced by nothing
- * unless under DEBUGGING, where it expands to an assert of its argument,
- * followed by a comma (hence the comma operator). If we just used a straight
- * assert(), we would get a comma with nothing before it when not DEBUGGING.
- *
- * 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. */
+/*
+=for apidoc Am|void|__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,
+followed by a comma (hence the comma operator). If we just used a straight
+assert(), we would get a comma with nothing before it when not DEBUGGING.
+
+=cut
+
+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. */
-#if defined(DEBUGGING) && !defined(__COVERITY__)
+#if defined(DEBUGGING) && !defined(__COVERITY__) \
+ && ! defined(PERL_SMALL_MACRO_BUFFER)
# define __ASSERT_(statement) assert(statement),
#else
# define __ASSERT_(statement)
@@ -281,76 +293,76 @@ typedef U64TYPE U64;
/*
=head1 SV Manipulation Functions
-=for apidoc Ama|SV*|newSVpvs|"literal string" s
+=for apidoc Ama|SV*|newSVpvs|"literal string"
Like C<newSVpvn>, but takes a literal string instead of a
string/length pair.
-=for apidoc Ama|SV*|newSVpvs_flags|"literal string" s|U32 flags
+=for apidoc Ama|SV*|newSVpvs_flags|"literal string"|U32 flags
Like C<newSVpvn_flags>, but takes a literal string instead of
a string/length pair.
-=for apidoc Ama|SV*|newSVpvs_share|"literal string" s
+=for apidoc Ama|SV*|newSVpvs_share|"literal string"
Like C<newSVpvn_share>, but takes a literal string instead of
a string/length pair and omits the hash parameter.
-=for apidoc Am|void|sv_catpvs_flags|SV* sv|"literal string" s|I32 flags
+=for apidoc Am|void|sv_catpvs_flags|SV* sv|"literal string"|I32 flags
Like C<sv_catpvn_flags>, but takes a literal string instead
of a string/length pair.
-=for apidoc Am|void|sv_catpvs_nomg|SV* sv|"literal string" s
+=for apidoc Am|void|sv_catpvs_nomg|SV* sv|"literal string"
Like C<sv_catpvn_nomg>, but takes a literal string instead of
a string/length pair.
-=for apidoc Am|void|sv_catpvs|SV* sv|"literal string" s
+=for apidoc Am|void|sv_catpvs|SV* sv|"literal string"
Like C<sv_catpvn>, but takes a literal string instead of a
string/length pair.
-=for apidoc Am|void|sv_catpvs_mg|SV* sv|"literal string" s
+=for apidoc Am|void|sv_catpvs_mg|SV* sv|"literal string"
Like C<sv_catpvn_mg>, but takes a literal string instead of a
string/length pair.
-=for apidoc Am|void|sv_setpvs|SV* sv|"literal string" s
+=for apidoc Am|void|sv_setpvs|SV* sv|"literal string"
Like C<sv_setpvn>, but takes a literal string instead of a
string/length pair.
-=for apidoc Am|void|sv_setpvs_mg|SV* sv|"literal string" s
+=for apidoc Am|void|sv_setpvs_mg|SV* sv|"literal string"
Like C<sv_setpvn_mg>, but takes a literal string instead of a
string/length pair.
-=for apidoc Am|SV *|sv_setref_pvs|"literal string" s
+=for apidoc Am|SV *|sv_setref_pvs|SV *const rv|const char *const classname|"literal string"
Like C<sv_setref_pvn>, but takes a literal string instead of
a string/length pair.
=head1 Memory Management
-=for apidoc Ama|char*|savepvs|"literal string" s
+=for apidoc Ama|char*|savepvs|"literal string"
Like C<savepvn>, but takes a literal string instead of a
string/length pair.
-=for apidoc Ama|char*|savesharedpvs|"literal string" s
+=for apidoc Ama|char*|savesharedpvs|"literal string"
A version of C<savepvs()> which allocates the duplicate string in memory
which is shared between threads.
=head1 GV Functions
-=for apidoc Am|HV*|gv_stashpvs|"literal string" name|I32 create
+=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 Am|SV**|hv_fetchs|HV* tb|"literal string" key|I32 lval
+=for apidoc Am|SV**|hv_fetchs|HV* tb|"key"|I32 lval
Like C<hv_fetch>, but takes a literal string instead of a
string/length pair.
-=for apidoc Am|SV**|hv_stores|HV* tb|"literal string" key|SV* val
+=for apidoc Am|SV**|hv_stores|HV* tb|"key"|SV* val
Like C<hv_store>, but takes a literal string instead of a
string/length pair
and omits the hash parameter.
=head1 Lexer interface
-=for apidoc Amx|void|lex_stuff_pvs|"literal string" pv|U32 flags
+=for apidoc Amx|void|lex_stuff_pvs|"pv"|U32 flags
Like L</lex_stuff_pvn>, but takes a literal string instead of
a string/length pair.
@@ -358,14 +370,22 @@ a string/length pair.
=cut
*/
-/* concatenating with "" ensures that only literal strings are accepted as
- * argument */
-#define STR_WITH_LEN(s) ("" s ""), (sizeof(s)-1)
+/*
+=head1 Handy Values
+
+=for apidoc Amu|pair|STR_WITH_LEN|"literal string"
+
+Returns two comma separated tokens of the input literal string, and its length.
+This is convenience macro which helps out in some API calls.
+Note that it can't be used as an argument to macros or functions that under
+some configurations might be macros, which means that it requires the full
+Perl_xxx(aTHX_ ...) form for any API calls where it's used.
+
+=cut
+*/
-/* note that STR_WITH_LEN() can't be used as argument to macros or functions
- * that under some configurations might be macros, which means that it requires
- * the full Perl_xxx(aTHX_ ...) form for any API calls where it's used.
- */
+
+#define STR_WITH_LEN(s) ("" s ""), (sizeof(s)-1)
/* STR_WITH_LEN() shortcuts */
#define newSVpvs(str) Perl_newSVpvn(aTHX_ STR_WITH_LEN(str))
@@ -443,11 +463,28 @@ 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.
+=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.
+
=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.
+=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.
+
+=for apidoc Am|bool|memCHRs|"list"|char c
+Returns the position of the first occurence of the byte C<c> in the literal
+string C<"list">, or NULL if C<c> doesn't appear in C<"list">. All bytes are
+treated as unsigned char. Thus this macro can be used to determine if C<c> is
+in a set of particular characters. Unlike L<strchr(3)>, it works even if C<c>
+is C<NUL> (and the set doesn't include C<NUL>).
+
=cut
New macros should use the following conventions for their names (which are
@@ -467,7 +504,7 @@ based on the underlying C library functions):
length may be unknown, but can be calculated by C<strlen()>, since it is
terminated by a NUL, which isn't included in its length.
- The optional 'n' following 'str' means that that there is a third parameter,
+ The optional 'n' following 'str' means that there is a third parameter,
giving the maximum number of bytes to look at in each string. Even if both
strings are longer than the length parameter, those extra bytes will be
unexamined.
@@ -539,6 +576,8 @@ based on the underlying C library functions):
#define memGT(s1,s2,l) (memcmp(s1,s2,l) > 0)
#define memGE(s1,s2,l) (memcmp(s1,s2,l) >= 0)
+#define memCHRs(s1,c) ((const char *) memchr("" s1 "" , c, sizeof(s1)-1))
+
/*
* Character classes.
*
@@ -569,9 +608,9 @@ each class. (Not all macros have all variants; each item below lists the
ones valid for it.) None are affected by C<use bytes>, and only the ones
with C<LC> in the name are affected by the current locale.
-The base function, e.g., C<isALPHA()>, takes an octet (either a C<char> or a
-C<U8>) as input and returns a boolean as to whether or not the character
-represented by that octet is (or on non-ASCII platforms, corresponds to) an
+The base function, e.g., C<isALPHA()>, takes any signed or unsigned value,
+treating it as a code point, and returns a boolean as to whether or not the
+character represented by it is (or on non-ASCII platforms, corresponds to) an
ASCII character in the named class based on platform, Unicode, and Perl rules.
If the input is a number that doesn't fit in an octet, FALSE is returned.
@@ -585,97 +624,109 @@ since ASCII is a subset of Latin-1. But the non-ASCII code points are treated
as if they are Latin-1 characters. For example, C<isWORDCHAR_L1()> will return
true when called with the code point 0xDF, which is a word character in both
ASCII and EBCDIC (though it represents different characters in each).
+If the input is a number that doesn't fit in an octet, FALSE is returned.
+(Perl's documentation uses a colloquial definition of Latin-1, to include all
+code points below 256.)
-Variant C<isI<FOO>_uvchr> is like the C<isI<FOO>_L1> variant, but accepts any UV code
-point as input. If the code point is larger than 255, Unicode rules are used
-to determine if it is in the character class. For example,
+Variant C<isI<FOO>_uvchr> is exactly like the C<isI<FOO>_L1> variant, for
+inputs below 256, but if the code point is larger than 255, Unicode rules are
+used to determine if it is in the character class. For example,
C<isWORDCHAR_uvchr(0x100)> returns TRUE, since 0x100 is LATIN CAPITAL LETTER A
WITH MACRON in Unicode, and is a word character.
-Variant C<isI<FOO>_utf8_safe> is like C<isI<FOO>_uvchr>, but is used for UTF-8
-encoded strings. Each call classifies one character, even if the string
-contains many. This variant takes two parameters. The first, C<p>, is a
-pointer to the first byte of the character to be classified. (Recall that it
-may take more than one byte to represent a character in UTF-8 strings.) The
-second parameter, C<e>, points to anywhere in the string beyond the first
-character, up to one byte past the end of the entire string. The suffix
-C<_safe> in the function's name indicates that 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 FALSE, at the discretion of the implementation, and subject to change in
-future releases.
-
-Variant C<isI<FOO>_utf8> is like C<isI<FOO>_utf8_safe>, but takes just a single
-parameter, C<p>, which has the same meaning as the corresponding parameter does
-in C<isI<FOO>_utf8_safe>. The function therefore can't check if it is reading
-beyond the end of the string. Starting in Perl v5.30, it will take a second
-parameter, becoming a synonym for C<isI<FOO>_utf8_safe>. At that time every
-program that uses it will have to be changed to successfully compile. In the
-meantime, the first runtime call to C<isI<FOO>_utf8> from each call point in the
-program will raise a deprecation warning, enabled by default. You can convert
-your program now to use C<isI<FOO>_utf8_safe>, and avoid the warnings, and get an
-extra measure of protection, or you can wait until v5.30, when you'll be forced
-to add the C<e> parameter.
-
-Variant C<isI<FOO>_LC> is like the C<isI<FOO>_A> and C<isI<FOO>_L1> variants, but the
-result is based on the current locale, which is what C<LC> in the name stands
-for. If Perl can determine that the current locale is a UTF-8 locale, it uses
-the published Unicode rules; otherwise, it uses the C library function that
-gives the named classification. For example, C<isDIGIT_LC()> when not in a
-UTF-8 locale returns the result of calling C<isdigit()>. FALSE is always
+Variants C<isI<FOO>_utf8> and C<isI<FOO>_utf8_safe> are like C<isI<FOO>_uvchr>,
+but are used for UTF-8 encoded strings. The two forms are different names for
+the same thing. Each call to one of these classifies the first character of
+the string starting at C<p>. The second parameter, C<e>, points to anywhere in
+the string beyond the first character, up to one byte past the end of the
+entire string. Although both variants are identical, the suffix C<_safe> in
+one name emphasizes that 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 FALSE, at the
+discretion of the implementation, and subject to change in future releases.
+
+Variant C<isI<FOO>_LC> is like the C<isI<FOO>_A> and C<isI<FOO>_L1> variants,
+but the result is based on the current locale, which is what C<LC> in the name
+stands for. If Perl can determine that the current locale is a UTF-8 locale,
+it uses the published Unicode rules; otherwise, it uses the C library function
+that gives the named classification. For example, C<isDIGIT_LC()> when not in
+a UTF-8 locale returns the result of calling C<isdigit()>. FALSE is always
returned if the input won't fit into an octet. On some platforms where the C
library function is known to be defective, Perl changes its result to follow
the POSIX standard's rules.
-Variant C<isI<FOO>_LC_uvchr> is like C<isI<FOO>_LC>, but is defined on any UV. It
-returns the same as C<isI<FOO>_LC> for input code points less than 256, and
-returns the hard-coded, not-affected-by-locale, Unicode results for larger ones.
-
-Variant C<isI<FOO>_LC_utf8_safe> is like C<isI<FOO>_LC_uvchr>, but is used for UTF-8
-encoded strings. Each call classifies one character, even if the string
-contains many. This variant takes two parameters. The first, C<p>, is a
-pointer to the first byte of the character to be classified. (Recall that it
-may take more than one byte to represent a character in UTF-8 strings.) The
-second parameter, C<e>, points to anywhere in the string beyond the first
-character, up to one byte past the end of the entire string. The suffix
-C<_safe> in the function's name indicates that it will not attempt to read
+Variant C<isI<FOO>_LC_uvchr> acts exactly like C<isI<FOO>_LC> for inputs less
+than 256, but for larger ones it returns the Unicode classification of the code
+point.
+
+Variants C<isI<FOO>_LC_utf8> and C<isI<FOO>_LC_utf8_safe> are like
+C<isI<FOO>_LC_uvchr>, but are used for UTF-8 encoded strings. The two forms
+are different names for the same thing. Each call to one of these classifies
+the first character of the string starting at C<p>. The second parameter,
+C<e>, points to anywhere in the string beyond the first character, up to one
+byte past the end of the entire string. Although both variants are identical,
+the suffix C<_safe> in one name emphasizes that 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 FALSE, at the discretion of the implementation, and subject to change in
future releases.
-Variant C<isI<FOO>_LC_utf8> is like C<isI<FOO>_LC_utf8_safe>, but takes just a single
-parameter, C<p>, which has the same meaning as the corresponding parameter does
-in C<isI<FOO>_LC_utf8_safe>. The function therefore can't check if it is reading
-beyond the end of the string. Starting in Perl v5.30, it will take a second
-parameter, becoming a synonym for C<isI<FOO>_LC_utf8_safe>. At that time every
-program that uses it will have to be changed to successfully compile. In the
-meantime, the first runtime call to C<isI<FOO>_LC_utf8> from each call point in
-the program will raise a deprecation warning, enabled by default. You can
-convert your program now to use C<isI<FOO>_LC_utf8_safe>, and avoid the warnings,
-and get an extra measure of protection, or you can wait until v5.30, when
-you'll be forced to add the C<e> parameter.
-
-=for apidoc Am|bool|isALPHA|char ch
-Returns a boolean indicating whether the specified character is an
-alphabetic character, analogous to C<m/[[:alpha:]]/>.
+=for apidoc Am|bool|isALPHA|int ch
+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_safe>,
-C<isALPHA_LC>, C<isALPHA_LC_uvchr>, and C<isALPHA_LC_utf8_safe>.
+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>.
-=for apidoc Am|bool|isALPHANUMERIC|char ch
-Returns a boolean indicating whether the specified character is a either an
-alphabetic character or decimal digit, analogous to C<m/[[:alnum:]]/>.
+=cut
+
+Here and below, we add the protoypes 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
+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_safe>, C<isALPHANUMERIC_LC>, C<isALPHANUMERIC_LC_uvchr>,
-and C<isALPHANUMERIC_LC_utf8_safe>.
-
-=for apidoc Am|bool|isASCII|char ch
+C<isALPHANUMERIC_utf8>, C<isALPHANUMERIC_utf8_safe>, C<isALPHANUMERIC_LC>,
+C<isALPHANUMERIC_LC_uvchr>, C<isALPHANUMERIC_LC_utf8>, and
+C<isALPHANUMERIC_LC_utf8_safe>.
+
+A (discouraged from use) synonym is C<isALNUMC> (where the C<C> suffix means
+this corresponds to the C language alphanumeric definition). Also
+there are the variants
+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
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
@@ -683,60 +734,119 @@ 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_safe>, C<isASCII_LC>, C<isASCII_LC_uvchr>, and
-C<isASCII_LC_utf8_safe>. 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.
+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>.
+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
-byte in any string encoded or not in UTF-8. And similarly C<isASCII_utf8_safe>
-will work properly on any string encoded or not in UTF-8.
+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
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_safe>,
-C<isBLANK_LC>, C<isBLANK_LC_uvchr>, and C<isBLANK_LC_utf8_safe>. Note,
+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,
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|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_safe>,
-C<isCNTRL_LC>, C<isCNTRL_LC_uvchr>, and C<isCNTRL_LC_utf8_safe> On EBCDIC
+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.
+=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|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_safe>, C<isDIGIT_LC>, C<isDIGIT_LC_uvchr>, and
-C<isDIGIT_LC_utf8_safe>.
+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>.
+
+=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
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_safe>,
-C<isGRAPH_LC>, C<isGRAPH_LC_uvchr>, and C<isGRAPH_LC_utf8_safe>.
+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>.
+
+=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
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_safe>,
-C<isLOWER_LC>, C<isLOWER_LC_uvchr>, and C<isLOWER_LC_utf8_safe>.
+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>.
+
+=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
Returns a boolean indicating whether the specified character is an
@@ -744,6 +854,9 @@ 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
Returns a boolean indicating whether the specified character is a
punctuation character, analogous to C<m/[[:punct:]]/>.
@@ -751,8 +864,18 @@ Note that the definition of what is punctuation isn't as
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_safe>,
-C<isPUNCT_LC>, C<isPUNCT_LC_uvchr>, and C<isPUNCT_LC_utf8_safe>.
+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>.
+
+=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
Returns a boolean indicating whether the specified character is a
@@ -765,8 +888,18 @@ 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_safe>,
-C<isSPACE_LC>, C<isSPACE_LC_uvchr>, and C<isSPACE_LC_utf8_safe>.
+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>.
+
+=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
(short for Posix Space)
@@ -779,23 +912,53 @@ C<isSPACE()> forms don't match a Vertical Tab, and the C<isPSXSPC()> forms do.
Otherwise they are identical. Thus this macro is analogous to what
C<m/[[:space:]]/> matches in a regular expression.
See the L<top of this section|/Character classification> for an explanation of
-variants C<isPSXSPC_A>, C<isPSXSPC_L1>, C<isPSXSPC_uvchr>, C<isPSXSPC_utf8_safe>,
-C<isPSXSPC_LC>, C<isPSXSPC_LC_uvchr>, and C<isPSXSPC_LC_utf8_safe>.
+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>.
+
+=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
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_safe>,
-C<isUPPER_LC>, C<isUPPER_LC_uvchr>, and C<isUPPER_LC_utf8_safe>.
+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>.
+
+=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
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_safe>,
-C<isPRINT_LC>, C<isPRINT_LC_uvchr>, and C<isPRINT_LC_utf8_safe>.
+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>.
+
+=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
Returns a boolean indicating whether the specified character is a character
@@ -807,10 +970,24 @@ C<isALNUM()> is a synonym provided for backward compatibility, even though a
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>, and
-C<isWORDCHAR_utf8_safe>. C<isWORDCHAR_LC>, C<isWORDCHAR_LC_uvchr>, and
-C<isWORDCHAR_LC_utf8_safe> are also as described there, but additionally
-include the platform's native underscore.
+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.
+
+=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
Returns a boolean indicating whether the specified character is a hexadecimal
@@ -818,8 +995,17 @@ 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_safe>, C<isXDIGIT_LC>, C<isXDIGIT_LC_uvchr>,
-and C<isXDIGIT_LC_utf8_safe>.
+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>.
+
+=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
Returns a boolean indicating whether the specified character can be the first
@@ -828,8 +1014,18 @@ 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_safe>,
-C<isIDFIRST_LC>, C<isIDFIRST_LC_uvchr>, and C<isIDFIRST_LC_utf8_safe>.
+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>.
+
+=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
Returns a boolean indicating whether the specified character can be the
@@ -837,10 +1033,18 @@ 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_safe>, C<isIDCONT_LC>, C<isIDCONT_LC_uvchr>, and
-C<isIDCONT_LC_utf8_safe>.
+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>.
+
+=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
=head1 Miscellaneous Functions
@@ -860,7 +1064,7 @@ an API that does allow every possible legal result to be returned.) Likewise
no other function that is crippled by not being able to give the correct
results for the full range of possible inputs has been implemented here.
-=for apidoc Am|U8|toUPPER|U8 ch
+=for apidoc Am|U8|toUPPER|int ch
Converts the specified character to uppercase. If the input is anything but an
ASCII lowercase character, that input character itself is returned. Variant
C<toUPPER_A> is equivalent.
@@ -876,7 +1080,7 @@ The first code point of the uppercased version is returned
(but note, as explained at L<the top of this section|/Character case
changing>, that there may be more.)
-=for apidoc Am|UV|toUPPER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+=for apidoc Am|UV|toUPPER_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 uppercase version, and
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. Note
@@ -887,24 +1091,14 @@ The first code point of the uppercased version is returned
(but note, as explained at L<the top of this section|/Character case
changing>, that there may be more).
-The suffix C<_safe> in the function's name indicates that 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.
+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.
-=for apidoc Am|UV|toUPPER_utf8|U8* p|U8* s|STRLEN* lenp
-This is like C<L</toUPPER_utf8_safe>>, but doesn't have the C<e>
-parameter The function therefore can't check if it is reading
-beyond the end of the string. Starting in Perl v5.30, it will take the C<e>
-parameter, becoming a synonym for C<toUPPER_utf8_safe>. At that time every
-program that uses it will have to be changed to successfully compile. In the
-meantime, the first runtime call to C<toUPPER_utf8> from each call point in the
-program will raise a deprecation warning, enabled by default. You can convert
-your program now to use C<toUPPER_utf8_safe>, and avoid the warnings, and get an
-extra measure of protection, or you can wait until v5.30, when you'll be forced
-to add the C<e> parameter.
+=for apidoc Am|UV|toUPPER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+Same as L</toUPPER_utf8>.
=for apidoc Am|U8|toFOLD|U8 ch
Converts the specified character to foldcase. If the input is anything but an
@@ -923,7 +1117,7 @@ The first code point of the foldcased version is returned
(but note, as explained at L<the top of this section|/Character case
changing>, that there may be more).
-=for apidoc Am|UV|toFOLD_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+=for apidoc Am|UV|toFOLD_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 foldcase version, and
stores that in UTF-8 in C<s>, and its length in bytes in C<lenp>. Note
@@ -934,24 +1128,15 @@ The first code point of the foldcased version is returned
(but note, as explained at L<the top of this section|/Character case
changing>, that there may be more).
-The suffix C<_safe> in the function's name indicates that it will not attempt
+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.
-=for apidoc Am|UV|toFOLD_utf8|U8* p|U8* s|STRLEN* lenp
-This is like C<L</toFOLD_utf8_safe>>, but doesn't have the C<e>
-parameter The function therefore can't check if it is reading
-beyond the end of the string. Starting in Perl v5.30, it will take the C<e>
-parameter, becoming a synonym for C<toFOLD_utf8_safe>. At that time every
-program that uses it will have to be changed to successfully compile. In the
-meantime, the first runtime call to C<toFOLD_utf8> from each call point in the
-program will raise a deprecation warning, enabled by default. You can convert
-your program now to use C<toFOLD_utf8_safe>, and avoid the warnings, and get an
-extra measure of protection, or you can wait until v5.30, when you'll be forced
-to add the C<e> parameter.
+=for apidoc Am|UV|toFOLD_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+Same as L</toFOLD_utf8>.
=for apidoc Am|U8|toLOWER|U8 ch
Converts the specified character to lowercase. If the input is anything but an
@@ -977,8 +1162,7 @@ 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).
-
-=for apidoc Am|UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+=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
@@ -988,25 +1172,14 @@ bytes since the lowercase version may be longer than the original character.
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.
-The suffix C<_safe> in the function's name indicates that 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.
-
-=for apidoc Am|UV|toLOWER_utf8|U8* p|U8* s|STRLEN* lenp
-This is like C<L</toLOWER_utf8_safe>>, but doesn't have the C<e>
-parameter The function therefore can't check if it is reading
-beyond the end of the string. Starting in Perl v5.30, it will take the C<e>
-parameter, becoming a synonym for C<toLOWER_utf8_safe>. At that time every
-program that uses it will have to be changed to successfully compile. In the
-meantime, the first runtime call to C<toLOWER_utf8> from each call point in the
-program will raise a deprecation warning, enabled by default. You can convert
-your program now to use C<toLOWER_utf8_safe>, and avoid the warnings, and get an
-extra measure of protection, or you can wait until v5.30, when you'll be forced
-to add the C<e> parameter.
+=for apidoc Am|UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+Same as L</toLOWER_utf8>.
=for apidoc Am|U8|toTITLE|U8 ch
Converts the specified character to titlecase. If the input is anything but an
@@ -1026,7 +1199,7 @@ The first code point of the titlecased version is returned
(but note, as explained at L<the top of this section|/Character case
changing>, that there may be more).
-=for apidoc Am|UV|toTITLE_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+=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
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
@@ -1037,24 +1210,15 @@ The first code point of the titlecased version is returned
(but note, as explained at L<the top of this section|/Character case
changing>, that there may be more).
-The suffix C<_safe> in the function's name indicates that it will not attempt
+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.
-=for apidoc Am|UV|toTITLE_utf8|U8* p|U8* s|STRLEN* lenp
-This is like C<L</toLOWER_utf8_safe>>, but doesn't have the C<e>
-parameter The function therefore can't check if it is reading
-beyond the end of the string. Starting in Perl v5.30, it will take the C<e>
-parameter, becoming a synonym for C<toTITLE_utf8_safe>. At that time every
-program that uses it will have to be changed to successfully compile. In the
-meantime, the first runtime call to C<toTITLE_utf8> from each call point in the
-program will raise a deprecation warning, enabled by default. You can convert
-your program now to use C<toTITLE_utf8_safe>, and avoid the warnings, and get an
-extra measure of protection, or you can wait until v5.30, when you'll be forced
-to add the C<e> parameter.
+=for apidoc Am|UV|toTITLE_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp
+Same as L</toTITLE_utf8>.
=cut
@@ -1067,7 +1231,22 @@ patched there. The file as of this writing is cpan/Devel-PPPort/parts/inc/misc
*/
-/* Specify the widest unsigned type on the platform. */
+/*
+ void below because that's the best fit, and works for Devel::PPPort
+=for apidoc AmnU|void|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
+
+ WIDEST_UTYPE my_uv;
+
+or casts
+
+ my_uv = (WIDEST_UTYPE) val;
+
+=cut
+
+*/
#ifdef QUADKIND
# define WIDEST_UTYPE U64
#else
@@ -1094,27 +1273,23 @@ patched there. The file as of this writing is cpan/Devel-PPPort/parts/inc/misc
#define FITS_IN_8_BITS(c) (1)
#endif
+/* Returns true if l <= c <= (l + n), where 'l' and 'n' are non-negative
+ * Written this way so that after optimization, only one conditional test is
+ * 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)))))
+
/* 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.
- *
- * This isn't fully general, except for the special cased 'signed char' (which
- * should be resolved at compile time): It won't work if 'c' is negative, and
- * 'l' is larger than the max for that signed type. Thus if 'c' is a negative
- * int, and 'l' is larger than INT_MAX, it will fail. To protect agains this
- * happening, there is an assert that will generate a warning if c is larger
- * than e.g. INT_MAX if it is an 'unsigned int'. This could be a false
- * positive, but khw couldn't figure out a way to make it better. It's good
- * enough so far */
-#define inRANGE(c, l, u) (__ASSERT_((l) >= 0) __ASSERT_((u) >= (l)) \
- ((sizeof(c) == 1) \
- ? (((WIDEST_UTYPE) ((((U8) (c))|0) - (l))) <= ((WIDEST_UTYPE) ((u) - (l)))) \
- : (__ASSERT_( (((WIDEST_UTYPE) 1) << (CHARBITS * sizeof(c) - 1) & (c)) \
- /* sign bit of c is 0 */ == 0 \
- || (((~ ((WIDEST_UTYPE) 1) << ((CHARBITS * sizeof(c) - 1) - 1))\
- /* l not larger than largest value in c's signed type */ \
- & ~ ((WIDEST_UTYPE) 0)) & (l)) == 0) \
- ((WIDEST_UTYPE) (((c) - (l)) | 0) <= ((WIDEST_UTYPE) ((u) - (l)))))))
+ * 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))))))
#ifdef EBCDIC
# ifndef _ALL_SOURCE
@@ -1173,9 +1348,6 @@ patched there. The file as of this writing is cpan/Devel-PPPort/parts/inc/misc
# define _CC_GRAPH 8 /* [:graph:] */
# define _CC_CASED 9 /* [:lower:] or [:upper:] under /i */
# define _CC_SPACE 10 /* \s, [:space:] */
-# define _CC_PSXSPC _CC_SPACE /* XXX Temporary, can be removed
- when the deprecated isFOO_utf8()
- functions are removed */
# define _CC_BLANK 11 /* [:blank:] */
# define _CC_XDIGIT 12 /* [:xdigit:] */
# define _CC_CNTRL 13 /* [:cntrl:] */
@@ -1193,18 +1365,14 @@ patched there. The file as of this writing is cpan/Devel-PPPort/parts/inc/misc
# define _CC_QUOTEMETA 20
# define _CC_NON_FINAL_FOLD 21
# define _CC_IS_IN_SOME_FOLD 22
-# define _CC_MNEMONIC_CNTRL 23
-
-# define _CC_IDCONT 24 /* XXX Temporary, can be removed when the deprecated
- isFOO_utf8() functions are removed */
+# define _CC_BINDIGIT 23
+# define _CC_OCTDIGIT 24
+# define _CC_MNEMONIC_CNTRL 25
/* 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 28
-# define _CC_UTF8_IS_START 29
-# define _CC_UTF8_IS_DOWNGRADEABLE_START 30
-# define _CC_UTF8_IS_CONTINUATION 31
-/* Unused: 24-27
+# define _CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE 31
+/* Unused: 24-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
@@ -1329,8 +1497,11 @@ END_EXTERN_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)
-# define _IS_MNEMONIC_CNTRL_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c) \
- _generic_isCC(c, _CC_MNEMONIC_CNTRL)
+
+/* is c a control character for which we have a mnemonic? */
+# if defined(PERL_CORE) || defined(PERL_EXT)
+# define isMNEMONIC_CNTRL(c) _generic_isCC(c, _CC_MNEMONIC_CNTRL)
+# endif
#else /* else we don't have perl.h H_PERL */
/* If we don't have perl.h, we are compiling a utility program. Below we
@@ -1383,7 +1554,7 @@ END_EXTERN_C
|| (c) == '\f' || (c) == '\n' || (c) == '\r' \
|| (c) == '\t' || (c) == '\v' \
|| inRANGE((c), 1, 3) /* SOH, STX, ETX */ \
- || (c) == 7 /* U+7F DEL */ \
+ || (c) == 7F /* U+7F DEL */ \
|| inRANGE((c), 0x0E, 0x13) /* SO SI DLE \
DC[1-3] */ \
|| (c) == 0x18 /* U+18 CAN */ \
@@ -1717,8 +1888,8 @@ END_EXTERN_C
* number defined earlier in this file. _generic_uvchr() is used for POSIX
* classes where there is a macro or function 'above_latin1' that takes the
* single argument 'c' and returns the desired value. These exist for those
- * classes which have simple definitions, avoiding the overhead of a hash
- * lookup or inversion list binary search. _generic_swash_uvchr() can be used
+ * classes which have simple definitions, avoiding the overhead of an inversion
+ * list binary search. _generic_invlist_uvchr() can be used
* for classes where that overhead is faster than a direct lookup.
* _generic_uvchr() won't compile if 'c' isn't unsigned, as it won't match the
* 'above_latin1' prototype. _generic_isCC() macro does bounds checking, so
@@ -1729,30 +1900,30 @@ END_EXTERN_C
#define _generic_uvchr(classnum, above_latin1, c) ((c) < 256 \
? _generic_isCC(c, classnum) \
: above_latin1(c))
-#define _generic_swash_uvchr(classnum, c) ((c) < 256 \
+#define _generic_invlist_uvchr(classnum, c) ((c) < 256 \
? _generic_isCC(c, classnum) \
: _is_uni_FOO(classnum, c))
-#define isALPHA_uvchr(c) _generic_swash_uvchr(_CC_ALPHA, c)
-#define isALPHANUMERIC_uvchr(c) _generic_swash_uvchr(_CC_ALPHANUMERIC, c)
+#define isALPHA_uvchr(c) _generic_invlist_uvchr(_CC_ALPHA, c)
+#define isALPHANUMERIC_uvchr(c) _generic_invlist_uvchr(_CC_ALPHANUMERIC, c)
#define isASCII_uvchr(c) isASCII(c)
#define isBLANK_uvchr(c) _generic_uvchr(_CC_BLANK, is_HORIZWS_cp_high, c)
#define isCNTRL_uvchr(c) isCNTRL_L1(c) /* All controls are in Latin1 */
-#define isDIGIT_uvchr(c) _generic_swash_uvchr(_CC_DIGIT, c)
-#define isGRAPH_uvchr(c) _generic_swash_uvchr(_CC_GRAPH, c)
+#define isDIGIT_uvchr(c) _generic_invlist_uvchr(_CC_DIGIT, c)
+#define isGRAPH_uvchr(c) _generic_invlist_uvchr(_CC_GRAPH, c)
#define isIDCONT_uvchr(c) \
_generic_uvchr(_CC_WORDCHAR, _is_uni_perl_idcont, c)
#define isIDFIRST_uvchr(c) \
_generic_uvchr(_CC_IDFIRST, _is_uni_perl_idstart, c)
-#define isLOWER_uvchr(c) _generic_swash_uvchr(_CC_LOWER, c)
-#define isPRINT_uvchr(c) _generic_swash_uvchr(_CC_PRINT, c)
+#define isLOWER_uvchr(c) _generic_invlist_uvchr(_CC_LOWER, c)
+#define isPRINT_uvchr(c) _generic_invlist_uvchr(_CC_PRINT, c)
-#define isPUNCT_uvchr(c) _generic_swash_uvchr(_CC_PUNCT, c)
+#define isPUNCT_uvchr(c) _generic_invlist_uvchr(_CC_PUNCT, c)
#define isSPACE_uvchr(c) _generic_uvchr(_CC_SPACE, is_XPERLSPACE_cp_high, c)
#define isPSXSPC_uvchr(c) isSPACE_uvchr(c)
-#define isUPPER_uvchr(c) _generic_swash_uvchr(_CC_UPPER, c)
+#define isUPPER_uvchr(c) _generic_invlist_uvchr(_CC_UPPER, c)
#define isVERTWS_uvchr(c) _generic_uvchr(_CC_VERTSPACE, is_VERTWS_cp_high, c)
-#define isWORDCHAR_uvchr(c) _generic_swash_uvchr(_CC_WORDCHAR, c)
+#define isWORDCHAR_uvchr(c) _generic_invlist_uvchr(_CC_WORDCHAR, c)
#define isXDIGIT_uvchr(c) _generic_uvchr(_CC_XDIGIT, is_XDIGIT_cp_high, c)
#define toFOLD_uvchr(c,s,l) to_uni_fold(c,s,l)
@@ -1792,52 +1963,36 @@ END_EXTERN_C
* _generic_uvchr, so see it for more info. */
#define _generic_LC_uvchr(latin1, above_latin1, c) \
(c < 256 ? latin1(c) : above_latin1(c))
-#define _generic_LC_swash_uvchr(latin1, classnum, c) \
+#define _generic_LC_invlist_uvchr(latin1, classnum, c) \
(c < 256 ? latin1(c) : _is_uni_FOO(classnum, c))
-#define isALPHA_LC_uvchr(c) _generic_LC_swash_uvchr(isALPHA_LC, _CC_ALPHA, c)
-#define isALPHANUMERIC_LC_uvchr(c) _generic_LC_swash_uvchr(isALPHANUMERIC_LC, \
+#define isALPHA_LC_uvchr(c) _generic_LC_invlist_uvchr(isALPHA_LC, _CC_ALPHA, c)
+#define isALPHANUMERIC_LC_uvchr(c) _generic_LC_invlist_uvchr(isALPHANUMERIC_LC, \
_CC_ALPHANUMERIC, c)
#define isASCII_LC_uvchr(c) isASCII_LC(c)
#define isBLANK_LC_uvchr(c) _generic_LC_uvchr(isBLANK_LC, \
is_HORIZWS_cp_high, c)
#define isCNTRL_LC_uvchr(c) (c < 256 ? isCNTRL_LC(c) : 0)
-#define isDIGIT_LC_uvchr(c) _generic_LC_swash_uvchr(isDIGIT_LC, _CC_DIGIT, c)
-#define isGRAPH_LC_uvchr(c) _generic_LC_swash_uvchr(isGRAPH_LC, _CC_GRAPH, c)
+#define isDIGIT_LC_uvchr(c) _generic_LC_invlist_uvchr(isDIGIT_LC, _CC_DIGIT, c)
+#define isGRAPH_LC_uvchr(c) _generic_LC_invlist_uvchr(isGRAPH_LC, _CC_GRAPH, c)
#define isIDCONT_LC_uvchr(c) _generic_LC_uvchr(isIDCONT_LC, \
_is_uni_perl_idcont, c)
#define isIDFIRST_LC_uvchr(c) _generic_LC_uvchr(isIDFIRST_LC, \
_is_uni_perl_idstart, c)
-#define isLOWER_LC_uvchr(c) _generic_LC_swash_uvchr(isLOWER_LC, _CC_LOWER, c)
-#define isPRINT_LC_uvchr(c) _generic_LC_swash_uvchr(isPRINT_LC, _CC_PRINT, c)
+#define isLOWER_LC_uvchr(c) _generic_LC_invlist_uvchr(isLOWER_LC, _CC_LOWER, c)
+#define isPRINT_LC_uvchr(c) _generic_LC_invlist_uvchr(isPRINT_LC, _CC_PRINT, c)
#define isPSXSPC_LC_uvchr(c) isSPACE_LC_uvchr(c)
-#define isPUNCT_LC_uvchr(c) _generic_LC_swash_uvchr(isPUNCT_LC, _CC_PUNCT, c)
+#define isPUNCT_LC_uvchr(c) _generic_LC_invlist_uvchr(isPUNCT_LC, _CC_PUNCT, c)
#define isSPACE_LC_uvchr(c) _generic_LC_uvchr(isSPACE_LC, \
is_XPERLSPACE_cp_high, c)
-#define isUPPER_LC_uvchr(c) _generic_LC_swash_uvchr(isUPPER_LC, _CC_UPPER, c)
-#define isWORDCHAR_LC_uvchr(c) _generic_LC_swash_uvchr(isWORDCHAR_LC, \
+#define isUPPER_LC_uvchr(c) _generic_LC_invlist_uvchr(isUPPER_LC, _CC_UPPER, c)
+#define isWORDCHAR_LC_uvchr(c) _generic_LC_invlist_uvchr(isWORDCHAR_LC, \
_CC_WORDCHAR, c)
#define isXDIGIT_LC_uvchr(c) _generic_LC_uvchr(isXDIGIT_LC, \
is_XDIGIT_cp_high, c)
#define isBLANK_LC_uni(c) isBLANK_LC_uvchr(UNI_TO_NATIVE(c))
-/* For internal core Perl use only: the base macros for defining macros like
- * isALPHA_utf8. These are like the earlier defined macros, but take an input
- * UTF-8 encoded string 'p'. If the input is in the Latin1 range, use
- * the Latin1 macro 'classnum' on 'p'. Otherwise use the value given by the
- * 'utf8' parameter. This relies on the fact that ASCII characters have the
- * same representation whether utf8 or not. Note that it assumes that the utf8
- * has been validated, and ignores 'use bytes' */
-#define _base_generic_utf8(enum_name, name, p, use_locale ) \
- _is_utf8_FOO(CAT2(_CC_, enum_name), \
- (const U8 *) p, \
- "is" STRINGIFY(name) "_utf8", \
- "is" STRINGIFY(name) "_utf8_safe", \
- 1, use_locale, __FILE__,__LINE__)
-
-#define _generic_utf8(name, p) _base_generic_utf8(name, name, p, 0)
-
/* The "_safe" macros make sure that we don't attempt to read beyond 'e', but
* they don't otherwise go out of their way to look for malformed UTF-8. If
* they can return accurate results without knowing if the input is otherwise
@@ -1862,8 +2017,9 @@ END_EXTERN_C
#endif
#define _generic_utf8_safe(classnum, p, e, above_latin1) \
- (__ASSERT_(_utf8_safe_assert(p, e)) \
- (UTF8_IS_INVARIANT(*(p))) \
+ ((! _utf8_safe_assert(p, e)) \
+ ? (_force_out_malformed_utf8_message((U8 *) (p), (U8 *) (e), 0, 1), 0)\
+ : (UTF8_IS_INVARIANT(*(p))) \
? _generic_isCC(*(p), classnum) \
: (UTF8_IS_DOWNGRADEABLE_START(*(p)) \
? ((LIKELY((e) - (p) > 1 && UTF8_IS_CONTINUATION(*((p)+1)))) \
@@ -1876,7 +2032,7 @@ END_EXTERN_C
* 'above_latin1' can be a macro */
#define _generic_func_utf8_safe(classnum, above_latin1, p, e) \
_generic_utf8_safe(classnum, p, e, above_latin1(p, e))
-#define _generic_non_swash_utf8_safe(classnum, above_latin1, p, e) \
+#define _generic_non_invlist_utf8_safe(classnum, above_latin1, p, e) \
_generic_utf8_safe(classnum, p, e, \
(UNLIKELY((e) - (p) < UTF8SKIP(p)) \
? (_force_out_malformed_utf8_message( \
@@ -1884,8 +2040,8 @@ END_EXTERN_C
: above_latin1(p)))
/* Like the above, but passes classnum to _isFOO_utf8(), instead of having an
* 'above_latin1' parameter */
-#define _generic_swash_utf8_safe(classnum, p, e) \
-_generic_utf8_safe(classnum, p, e, _is_utf8_FOO_with_len(classnum, p, e))
+#define _generic_invlist_utf8_safe(classnum, p, e) \
+ _generic_utf8_safe(classnum, p, e, _is_utf8_FOO(classnum, p, e))
/* Like the above, but should be used only when it is known that there are no
* characters in the upper-Latin1 range (128-255 on ASCII platforms) which the
@@ -1900,34 +2056,34 @@ _generic_utf8_safe(classnum, p, e, _is_utf8_FOO_with_len(classnum, p, e))
: above_latin1)
-#define isALPHA_utf8(p) _generic_utf8(ALPHA, p)
-#define isALPHANUMERIC_utf8(p) _generic_utf8(ALPHANUMERIC, p)
-#define isASCII_utf8(p) _generic_utf8(ASCII, p)
-#define isBLANK_utf8(p) _generic_utf8(BLANK, p)
-#define isCNTRL_utf8(p) _generic_utf8(CNTRL, p)
-#define isDIGIT_utf8(p) _generic_utf8(DIGIT, p)
-#define isGRAPH_utf8(p) _generic_utf8(GRAPH, p)
-#define isIDCONT_utf8(p) _generic_utf8(IDCONT, p)
-#define isIDFIRST_utf8(p) _generic_utf8(IDFIRST, p)
-#define isLOWER_utf8(p) _generic_utf8(LOWER, p)
-#define isPRINT_utf8(p) _generic_utf8(PRINT, p)
-#define isPSXSPC_utf8(p) _generic_utf8(PSXSPC, p)
-#define isPUNCT_utf8(p) _generic_utf8(PUNCT, p)
-#define isSPACE_utf8(p) _generic_utf8(SPACE, p)
-#define isUPPER_utf8(p) _generic_utf8(UPPER, p)
-#define isVERTWS_utf8(p) _generic_utf8(VERTSPACE, p)
-#define isWORDCHAR_utf8(p) _generic_utf8(WORDCHAR, p)
-#define isXDIGIT_utf8(p) _generic_utf8(XDIGIT, p)
-
-#define isALPHA_utf8_safe(p, e) _generic_swash_utf8_safe(_CC_ALPHA, p, e)
+#define isALPHA_utf8(p, e) isALPHA_utf8_safe(p, e)
+#define isALPHANUMERIC_utf8(p, e) isALPHANUMERIC_utf8_safe(p, e)
+#define isASCII_utf8(p, e) isASCII_utf8_safe(p, e)
+#define isBLANK_utf8(p, e) isBLANK_utf8_safe(p, e)
+#define isCNTRL_utf8(p, e) isCNTRL_utf8_safe(p, e)
+#define isDIGIT_utf8(p, e) isDIGIT_utf8_safe(p, e)
+#define isGRAPH_utf8(p, e) isGRAPH_utf8_safe(p, e)
+#define isIDCONT_utf8(p, e) isIDCONT_utf8_safe(p, e)
+#define isIDFIRST_utf8(p, e) isIDFIRST_utf8_safe(p, e)
+#define isLOWER_utf8(p, e) isLOWER_utf8_safe(p, e)
+#define isPRINT_utf8(p, e) isPRINT_utf8_safe(p, e)
+#define isPSXSPC_utf8(p, e) isPSXSPC_utf8_safe(p, e)
+#define isPUNCT_utf8(p, e) isPUNCT_utf8_safe(p, e)
+#define isSPACE_utf8(p, e) isSPACE_utf8_safe(p, e)
+#define isUPPER_utf8(p, e) isUPPER_utf8_safe(p, e)
+#define isVERTWS_utf8(p, e) isVERTWS_utf8_safe(p, e)
+#define isWORDCHAR_utf8(p, e) isWORDCHAR_utf8_safe(p, e)
+#define isXDIGIT_utf8(p, e) isXDIGIT_utf8_safe(p, e)
+
+#define isALPHA_utf8_safe(p, e) _generic_invlist_utf8_safe(_CC_ALPHA, p, e)
#define isALPHANUMERIC_utf8_safe(p, e) \
- _generic_swash_utf8_safe(_CC_ALPHANUMERIC, p, e)
+ _generic_invlist_utf8_safe(_CC_ALPHANUMERIC, p, e)
#define isASCII_utf8_safe(p, e) \
/* Because ASCII is invariant under utf8, the non-utf8 macro \
* works */ \
(__ASSERT_(_utf8_safe_assert(p, e)) isASCII(*(p)))
#define isBLANK_utf8_safe(p, e) \
- _generic_non_swash_utf8_safe(_CC_BLANK, is_HORIZWS_high, p, e)
+ _generic_non_invlist_utf8_safe(_CC_BLANK, is_HORIZWS_high, p, e)
#ifdef EBCDIC
/* Because all controls are UTF-8 invariants in EBCDIC, we can use this
@@ -1940,32 +2096,32 @@ _generic_utf8_safe(classnum, p, e, _is_utf8_FOO_with_len(classnum, p, e))
#define isDIGIT_utf8_safe(p, e) \
_generic_utf8_safe_no_upper_latin1(_CC_DIGIT, p, e, \
- _is_utf8_FOO_with_len(_CC_DIGIT, p, e))
-#define isGRAPH_utf8_safe(p, e) _generic_swash_utf8_safe(_CC_GRAPH, p, e)
+ _is_utf8_FOO(_CC_DIGIT, p, e))
+#define isGRAPH_utf8_safe(p, e) _generic_invlist_utf8_safe(_CC_GRAPH, p, e)
#define isIDCONT_utf8_safe(p, e) _generic_func_utf8_safe(_CC_WORDCHAR, \
- _is_utf8_perl_idcont_with_len, p, e)
+ _is_utf8_perl_idcont, p, e)
/* To prevent S_scan_word in toke.c from hanging, we have to make sure that
* IDFIRST is an alnum. See
- * http://rt.perl.org/rt3/Ticket/Display.html?id=74022 for more detail than you
+ * https://github.com/Perl/perl5/issues/10275 for more detail than you
* ever wanted to know about. (In the ASCII range, there isn't a difference.)
* This used to be not the XID version, but we decided to go with the more
* modern Unicode definition */
#define isIDFIRST_utf8_safe(p, e) \
_generic_func_utf8_safe(_CC_IDFIRST, \
- _is_utf8_perl_idstart_with_len, (U8 *) (p), (U8 *) (e))
+ _is_utf8_perl_idstart, (U8 *) (p), (U8 *) (e))
-#define isLOWER_utf8_safe(p, e) _generic_swash_utf8_safe(_CC_LOWER, p, e)
-#define isPRINT_utf8_safe(p, e) _generic_swash_utf8_safe(_CC_PRINT, p, e)
+#define isLOWER_utf8_safe(p, e) _generic_invlist_utf8_safe(_CC_LOWER, p, e)
+#define isPRINT_utf8_safe(p, e) _generic_invlist_utf8_safe(_CC_PRINT, p, e)
#define isPSXSPC_utf8_safe(p, e) isSPACE_utf8_safe(p, e)
-#define isPUNCT_utf8_safe(p, e) _generic_swash_utf8_safe(_CC_PUNCT, p, e)
+#define isPUNCT_utf8_safe(p, e) _generic_invlist_utf8_safe(_CC_PUNCT, p, e)
#define isSPACE_utf8_safe(p, e) \
- _generic_non_swash_utf8_safe(_CC_SPACE, is_XPERLSPACE_high, p, e)
-#define isUPPER_utf8_safe(p, e) _generic_swash_utf8_safe(_CC_UPPER, p, e)
+ _generic_non_invlist_utf8_safe(_CC_SPACE, is_XPERLSPACE_high, p, e)
+#define isUPPER_utf8_safe(p, e) _generic_invlist_utf8_safe(_CC_UPPER, p, e)
#define isVERTWS_utf8_safe(p, e) \
- _generic_non_swash_utf8_safe(_CC_VERTSPACE, is_VERTWS_high, p, e)
+ _generic_non_invlist_utf8_safe(_CC_VERTSPACE, is_VERTWS_high, p, e)
#define isWORDCHAR_utf8_safe(p, e) \
- _generic_swash_utf8_safe(_CC_WORDCHAR, p, e)
+ _generic_invlist_utf8_safe(_CC_WORDCHAR, p, e)
#define isXDIGIT_utf8_safe(p, e) \
_generic_utf8_safe_no_upper_latin1(_CC_XDIGIT, p, e, \
(UNLIKELY((e) - (p) < UTF8SKIP(p)) \
@@ -1973,45 +2129,39 @@ _generic_utf8_safe(classnum, p, e, _is_utf8_FOO_with_len(classnum, p, e))
(U8 *) (p), (U8 *) (e), 0, 1), 0) \
: is_XDIGIT_high(p)))
-#define toFOLD_utf8(p,s,l) to_utf8_fold(p,s,l)
-#define toLOWER_utf8(p,s,l) to_utf8_lower(p,s,l)
-#define toTITLE_utf8(p,s,l) to_utf8_title(p,s,l)
-#define toUPPER_utf8(p,s,l) to_utf8_upper(p,s,l)
+#define toFOLD_utf8(p,e,s,l) toFOLD_utf8_safe(p,e,s,l)
+#define toLOWER_utf8(p,e,s,l) toLOWER_utf8_safe(p,e,s,l)
+#define toTITLE_utf8(p,e,s,l) toTITLE_utf8_safe(p,e,s,l)
+#define toUPPER_utf8(p,e,s,l) toUPPER_utf8_safe(p,e,s,l)
/* For internal core use only, subject to change */
-#define _toFOLD_utf8_flags(p,e,s,l,f) _to_utf8_fold_flags (p,e,s,l,f, "", 0)
-#define _toLOWER_utf8_flags(p,e,s,l,f) _to_utf8_lower_flags(p,e,s,l,f, "", 0)
-#define _toTITLE_utf8_flags(p,e,s,l,f) _to_utf8_title_flags(p,e,s,l,f, "", 0)
-#define _toUPPER_utf8_flags(p,e,s,l,f) _to_utf8_upper_flags(p,e,s,l,f, "", 0)
+#define _toFOLD_utf8_flags(p,e,s,l,f) _to_utf8_fold_flags (p,e,s,l,f)
+#define _toLOWER_utf8_flags(p,e,s,l,f) _to_utf8_lower_flags(p,e,s,l,f)
+#define _toTITLE_utf8_flags(p,e,s,l,f) _to_utf8_title_flags(p,e,s,l,f)
+#define _toUPPER_utf8_flags(p,e,s,l,f) _to_utf8_upper_flags(p,e,s,l,f)
#define toFOLD_utf8_safe(p,e,s,l) _toFOLD_utf8_flags(p,e,s,l, FOLD_FLAGS_FULL)
#define toLOWER_utf8_safe(p,e,s,l) _toLOWER_utf8_flags(p,e,s,l, 0)
#define toTITLE_utf8_safe(p,e,s,l) _toTITLE_utf8_flags(p,e,s,l, 0)
#define toUPPER_utf8_safe(p,e,s,l) _toUPPER_utf8_flags(p,e,s,l, 0)
-/* For internal core Perl use only: the base macros for defining macros like
- * isALPHA_LC_utf8. These are like _generic_utf8, but if the first code point
- * in 'p' is within the 0-255 range, it uses locale rules from the passed-in
- * 'macro' parameter */
-#define _generic_LC_utf8(name, p) _base_generic_utf8(name, name, p, 1)
-
-#define isALPHA_LC_utf8(p) _generic_LC_utf8(ALPHA, p)
-#define isALPHANUMERIC_LC_utf8(p) _generic_LC_utf8(ALPHANUMERIC, p)
-#define isASCII_LC_utf8(p) _generic_LC_utf8(ASCII, p)
-#define isBLANK_LC_utf8(p) _generic_LC_utf8(BLANK, p)
-#define isCNTRL_LC_utf8(p) _generic_LC_utf8(CNTRL, p)
-#define isDIGIT_LC_utf8(p) _generic_LC_utf8(DIGIT, p)
-#define isGRAPH_LC_utf8(p) _generic_LC_utf8(GRAPH, p)
-#define isIDCONT_LC_utf8(p) _generic_LC_utf8(IDCONT, p)
-#define isIDFIRST_LC_utf8(p) _generic_LC_utf8(IDFIRST, p)
-#define isLOWER_LC_utf8(p) _generic_LC_utf8(LOWER, p)
-#define isPRINT_LC_utf8(p) _generic_LC_utf8(PRINT, p)
-#define isPSXSPC_LC_utf8(p) _generic_LC_utf8(PSXSPC, p)
-#define isPUNCT_LC_utf8(p) _generic_LC_utf8(PUNCT, p)
-#define isSPACE_LC_utf8(p) _generic_LC_utf8(SPACE, p)
-#define isUPPER_LC_utf8(p) _generic_LC_utf8(UPPER, p)
-#define isWORDCHAR_LC_utf8(p) _generic_LC_utf8(WORDCHAR, p)
-#define isXDIGIT_LC_utf8(p) _generic_LC_utf8(XDIGIT, p)
+#define isALPHA_LC_utf8(p, e) isALPHA_LC_utf8_safe(p, e)
+#define isALPHANUMERIC_LC_utf8(p, e) isALPHANUMERIC_LC_utf8_safe(p, e)
+#define isASCII_LC_utf8(p, e) isASCII_LC_utf8_safe(p, e)
+#define isBLANK_LC_utf8(p, e) isBLANK_LC_utf8_safe(p, e)
+#define isCNTRL_LC_utf8(p, e) isCNTRL_LC_utf8_safe(p, e)
+#define isDIGIT_LC_utf8(p, e) isDIGIT_LC_utf8_safe(p, e)
+#define isGRAPH_LC_utf8(p, e) isGRAPH_LC_utf8_safe(p, e)
+#define isIDCONT_LC_utf8(p, e) isIDCONT_LC_utf8_safe(p, e)
+#define isIDFIRST_LC_utf8(p, e) isIDFIRST_LC_utf8_safe(p, e)
+#define isLOWER_LC_utf8(p, e) isLOWER_LC_utf8_safe(p, e)
+#define isPRINT_LC_utf8(p, e) isPRINT_LC_utf8_safe(p, e)
+#define isPSXSPC_LC_utf8(p, e) isPSXSPC_LC_utf8_safe(p, e)
+#define isPUNCT_LC_utf8(p, e) isPUNCT_LC_utf8_safe(p, e)
+#define isSPACE_LC_utf8(p, e) isSPACE_LC_utf8_safe(p, e)
+#define isUPPER_LC_utf8(p, e) isUPPER_LC_utf8_safe(p, e)
+#define isWORDCHAR_LC_utf8(p, e) isWORDCHAR_LC_utf8_safe(p, e)
+#define isXDIGIT_LC_utf8(p, e) isXDIGIT_LC_utf8_safe(p, e)
/* For internal core Perl use only: the base macros for defining macros like
* isALPHA_LC_utf8_safe. These are like _generic_utf8, but if the first code
@@ -2028,14 +2178,14 @@ _generic_utf8_safe(classnum, p, e, _is_utf8_FOO_with_len(classnum, p, e))
(U8 *) (p), (U8 *) (e), 0, 1), 0)) \
: above_latin1))
-#define _generic_LC_swash_utf8_safe(macro, classnum, p, e) \
+#define _generic_LC_invlist_utf8_safe(macro, classnum, p, e) \
_generic_LC_utf8_safe(macro, p, e, \
- _is_utf8_FOO_with_len(classnum, p, e))
+ _is_utf8_FOO(classnum, p, e))
#define _generic_LC_func_utf8_safe(macro, above_latin1, p, e) \
_generic_LC_utf8_safe(macro, p, e, above_latin1(p, e))
-#define _generic_LC_non_swash_utf8_safe(classnum, above_latin1, p, e) \
+#define _generic_LC_non_invlist_utf8_safe(classnum, above_latin1, p, e) \
_generic_LC_utf8_safe(classnum, p, e, \
(UNLIKELY((e) - (p) < UTF8SKIP(p)) \
? (_force_out_malformed_utf8_message( \
@@ -2043,41 +2193,41 @@ _generic_utf8_safe(classnum, p, e, _is_utf8_FOO_with_len(classnum, p, e))
: above_latin1(p)))
#define isALPHANUMERIC_LC_utf8_safe(p, e) \
- _generic_LC_swash_utf8_safe(isALPHANUMERIC_LC, \
+ _generic_LC_invlist_utf8_safe(isALPHANUMERIC_LC, \
_CC_ALPHANUMERIC, p, e)
#define isALPHA_LC_utf8_safe(p, e) \
- _generic_LC_swash_utf8_safe(isALPHA_LC, _CC_ALPHA, p, e)
+ _generic_LC_invlist_utf8_safe(isALPHA_LC, _CC_ALPHA, p, e)
#define isASCII_LC_utf8_safe(p, e) \
(__ASSERT_(_utf8_safe_assert(p, e)) isASCII_LC(*(p)))
#define isBLANK_LC_utf8_safe(p, e) \
- _generic_LC_non_swash_utf8_safe(isBLANK_LC, is_HORIZWS_high, p, e)
+ _generic_LC_non_invlist_utf8_safe(isBLANK_LC, is_HORIZWS_high, p, e)
#define isCNTRL_LC_utf8_safe(p, e) \
_generic_LC_utf8_safe(isCNTRL_LC, p, e, 0)
#define isDIGIT_LC_utf8_safe(p, e) \
- _generic_LC_swash_utf8_safe(isDIGIT_LC, _CC_DIGIT, p, e)
+ _generic_LC_invlist_utf8_safe(isDIGIT_LC, _CC_DIGIT, p, e)
#define isGRAPH_LC_utf8_safe(p, e) \
- _generic_LC_swash_utf8_safe(isGRAPH_LC, _CC_GRAPH, p, e)
+ _generic_LC_invlist_utf8_safe(isGRAPH_LC, _CC_GRAPH, p, e)
#define isIDCONT_LC_utf8_safe(p, e) \
_generic_LC_func_utf8_safe(isIDCONT_LC, \
- _is_utf8_perl_idcont_with_len, p, e)
+ _is_utf8_perl_idcont, p, e)
#define isIDFIRST_LC_utf8_safe(p, e) \
_generic_LC_func_utf8_safe(isIDFIRST_LC, \
- _is_utf8_perl_idstart_with_len, p, e)
+ _is_utf8_perl_idstart, p, e)
#define isLOWER_LC_utf8_safe(p, e) \
- _generic_LC_swash_utf8_safe(isLOWER_LC, _CC_LOWER, p, e)
+ _generic_LC_invlist_utf8_safe(isLOWER_LC, _CC_LOWER, p, e)
#define isPRINT_LC_utf8_safe(p, e) \
- _generic_LC_swash_utf8_safe(isPRINT_LC, _CC_PRINT, p, e)
+ _generic_LC_invlist_utf8_safe(isPRINT_LC, _CC_PRINT, p, e)
#define isPSXSPC_LC_utf8_safe(p, e) isSPACE_LC_utf8_safe(p, e)
#define isPUNCT_LC_utf8_safe(p, e) \
- _generic_LC_swash_utf8_safe(isPUNCT_LC, _CC_PUNCT, p, e)
+ _generic_LC_invlist_utf8_safe(isPUNCT_LC, _CC_PUNCT, p, e)
#define isSPACE_LC_utf8_safe(p, e) \
- _generic_LC_non_swash_utf8_safe(isSPACE_LC, is_XPERLSPACE_high, p, e)
+ _generic_LC_non_invlist_utf8_safe(isSPACE_LC, is_XPERLSPACE_high, p, e)
#define isUPPER_LC_utf8_safe(p, e) \
- _generic_LC_swash_utf8_safe(isUPPER_LC, _CC_UPPER, p, e)
+ _generic_LC_invlist_utf8_safe(isUPPER_LC, _CC_UPPER, p, e)
#define isWORDCHAR_LC_utf8_safe(p, e) \
- _generic_LC_swash_utf8_safe(isWORDCHAR_LC, _CC_WORDCHAR, p, e)
+ _generic_LC_invlist_utf8_safe(isWORDCHAR_LC, _CC_WORDCHAR, p, e)
#define isXDIGIT_LC_utf8_safe(p, e) \
- _generic_LC_non_swash_utf8_safe(isXDIGIT_LC, is_XDIGIT_high, p, e)
+ _generic_LC_non_invlist_utf8_safe(isXDIGIT_LC, is_XDIGIT_high, p, e)
/* Macros for backwards compatibility and for completeness when the ASCII and
* Latin1 values are identical */
@@ -2087,20 +2237,24 @@ _generic_utf8_safe(classnum, p, e, _is_utf8_FOO_with_len(classnum, p, e))
#define isOCTAL_L1(c) isOCTAL_A(c)
#define isXDIGIT_L1(c) isXDIGIT_A(c)
#define isALNUM(c) isWORDCHAR(c)
+#define isALNUM_A(c) isALNUM(c)
#define isALNUMU(c) isWORDCHAR_L1(c)
#define isALNUM_LC(c) isWORDCHAR_LC(c)
#define isALNUM_uni(c) isWORDCHAR_uni(c)
#define isALNUM_LC_uvchr(c) isWORDCHAR_LC_uvchr(c)
-#define isALNUM_utf8(p) isWORDCHAR_utf8(p)
-#define isALNUM_LC_utf8(p) isWORDCHAR_LC_utf8(p)
+#define isALNUM_utf8(p,e) isWORDCHAR_utf8(p,e)
+#define isALNUM_utf8_safe(p,e) isWORDCHAR_utf8_safe(p,e)
+#define isALNUM_LC_utf8(p,e)isWORDCHAR_LC_utf8(p,e)
+#define isALNUM_LC_utf8_safe(p,e)isWORDCHAR_LC_utf8_safe(p,e)
#define isALNUMC_A(c) isALPHANUMERIC_A(c) /* Mnemonic: "C's alnum" */
#define isALNUMC_L1(c) isALPHANUMERIC_L1(c)
#define isALNUMC(c) isALPHANUMERIC(c)
#define isALNUMC_LC(c) isALPHANUMERIC_LC(c)
#define isALNUMC_uni(c) isALPHANUMERIC_uni(c)
#define isALNUMC_LC_uvchr(c) isALPHANUMERIC_LC_uvchr(c)
-#define isALNUMC_utf8(p) isALPHANUMERIC_utf8(p)
-#define isALNUMC_LC_utf8(p) isALPHANUMERIC_LC_utf8(p)
+#define isALNUMC_utf8(p,e) isALPHANUMERIC_utf8(p,e)
+#define isALNUMC_utf8_safe(p,e) isALPHANUMERIC_utf8_safe(p,e)
+#define isALNUMC_LC_utf8_safe(p,e) isALPHANUMERIC_LC_utf8_safe(p,e)
/* On EBCDIC platforms, CTRL-@ is 0, CTRL-A is 1, etc, just like on ASCII,
* except that they don't necessarily mean the same characters, e.g. CTRL-D is
@@ -2141,17 +2295,22 @@ typedef U32 line_t;
} \
return a;
-/* Converts a character known to represent a hexadecimal digit (0-9, A-F, or
- * a-f) to its numeric value. READ_XDIGIT's argument is a string pointer,
- * which is advanced. The input is validated only by an assert() in DEBUGGING
- * builds. In both ASCII and EBCDIC the last 4 bits of the digits are 0-9; and
- * the last 4 bits of A-F and a-f are 1-6, so adding 9 yields 10-15 */
-#define XDIGIT_VALUE(c) (__ASSERT_(isXDIGIT(c)) (0xf & (isDIGIT(c) \
- ? (c) \
- : ((c) + 9))))
-#define READ_XDIGIT(s) (__ASSERT_(isXDIGIT(*s)) (0xf & (isDIGIT(*(s)) \
- ? (*(s)++) \
- : (*(s)++ + 9))))
+/* 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
+ * validated only by an assert() in DEBUGGING builds.
+ *
+ * It works by right shifting and isolating the bit that is 0 for the digits,
+ * and 1 for at least the alphas A-F, a-f. The bit is shifted to the ones
+ * position, and then to the eights position. Both are added together to form
+ * 0 if the input is '0'-'9' and to form 9 if alpha. This is added to the
+ * final four bits of the input to form the correct value. */
+#define XDIGIT_VALUE(c) (__ASSERT_(isXDIGIT(c)) \
+ ((NATIVE_TO_LATIN1(c) >> 6) & 1) /* 1 if alpha; 0 if not */ \
+ + ((NATIVE_TO_LATIN1(c) >> 3) & 8) /* 8 if alpha; 0 if not */ \
+ + ((c) & 0xF)) /* 0-9 if input valid hex digit */
+
+/* The argument is a string pointer, which is advanced. */
+#define READ_XDIGIT(s) ((s)++, XDIGIT_VALUE(*((s) - 1)))
/* Converts a character known to represent an octal digit (0-7) to its numeric
* value. The input is validated only by an assert() in DEBUGGING builds. In
@@ -2464,11 +2623,23 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe
#define StructCopy(s,d,t) (*((t*)(d)) = *((t*)(s)))
-/* C_ARRAY_LENGTH is the number of elements in the C array (so you
- * want your zero-based indices to be less than but not equal to).
- *
- * C_ARRAY_END is one past the last: half-open/half-closed range,
- * not last-inclusive range. */
+/*
+=head1 Handy Values
+
+=for apidoc Am|STRLEN|C_ARRAY_LENGTH|void *a
+
+Returns the number of elements in the input C array (so you want your
+zero-based indices to be less than but not equal to).
+
+=for apidoc Am|void *|C_ARRAY_END|void *a
+
+Returns a pointer to one element past the final element of the input C array.
+
+=cut
+
+C_ARRAY_END is one past the last: half-open/half-closed range, not
+last-inclusive range.
+*/
#define C_ARRAY_LENGTH(a) (sizeof(a)/sizeof((a)[0]))
#define C_ARRAY_END(a) ((a) + C_ARRAY_LENGTH(a))
diff --git a/gnu/usr.bin/perl/hints/README.hints b/gnu/usr.bin/perl/hints/README.hints
index 4745c7cb8e8..e8ff5eee44b 100644
--- a/gnu/usr.bin/perl/hints/README.hints
+++ b/gnu/usr.bin/perl/hints/README.hints
@@ -9,7 +9,7 @@ can't or doesn't guess properly. Most of these hint files have been
tested with at least some version of perl5, but some are still left
over from perl4.
-Please send any problems or suggested changes to
+Please report any problems or suggested changes at
L<https://github.com/Perl/perl5/issues>.
=head1 Hint file naming convention.
diff --git a/gnu/usr.bin/perl/hints/bsdos.sh b/gnu/usr.bin/perl/hints/bsdos.sh
index 95950b787eb..a1ba113f7a1 100644
--- a/gnu/usr.bin/perl/hints/bsdos.sh
+++ b/gnu/usr.bin/perl/hints/bsdos.sh
@@ -125,7 +125,7 @@ $define|true|[yY]*)
*) cat <<EOM >&4
I did not know that BSD/OS $osvers supports POSIX threads.
-Feel free to tell https://github.com/Perl/perl5/issues otherwise.
+Feel free report that at https://github.com/Perl/perl5/issues otherwise.
EOM
exit 1
;;
diff --git a/gnu/usr.bin/perl/hints/catamount.sh b/gnu/usr.bin/perl/hints/catamount.sh
index 976e6ba9058..fd9538fdf2b 100644
--- a/gnu/usr.bin/perl/hints/catamount.sh
+++ b/gnu/usr.bin/perl/hints/catamount.sh
@@ -31,11 +31,11 @@
# mkdir -p /opt/perl-catamount
# mkdir -p /opt/perl-catamount/include
# mkdir -p /opt/perl-catamount/lib
-# mkdir -p /opt/perl-catamount/lib/perl5/5.30.3
+# mkdir -p /opt/perl-catamount/lib/perl5/5.32.1
# mkdir -p /opt/perl-catamount/bin
# cp *.h /opt/perl-catamount/include
# cp libperl.a /opt/perl-catamount/lib
-# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.30.3
+# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.32.1
# cp miniperl perl run.sh cc.sh /opt/perl-catamount/lib
#
# With the headers and the libperl.a you can embed Perl to your Catamount
diff --git a/gnu/usr.bin/perl/hints/darwin.sh b/gnu/usr.bin/perl/hints/darwin.sh
index 0a91bc083c0..fdfbdd4a3b9 100644
--- a/gnu/usr.bin/perl/hints/darwin.sh
+++ b/gnu/usr.bin/perl/hints/darwin.sh
@@ -301,7 +301,7 @@ case "$osvers" in # Note: osvers is the kernel version, not the 10.x
# We now use MACOSX_DEPLOYMENT_TARGET, if set, as an override by
# capturing its value and adding it to the flags.
case "$MACOSX_DEPLOYMENT_TARGET" in
- 10.*)
+ [1-9][0-9].*)
add_macosx_version_min ccflags $MACOSX_DEPLOYMENT_TARGET
add_macosx_version_min ldflags $MACOSX_DEPLOYMENT_TARGET
;;
@@ -313,7 +313,7 @@ case "$osvers" in # Note: osvers is the kernel version, not the 10.x
*** Unexpected MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET
***
-*** Please either set it to 10.something, or to empty.
+*** Please either set it to a valid macOS version number (e.g., 10.15) or to empty.
EOM
exit 1
@@ -327,7 +327,7 @@ EOM
# "ProductVersion: 10.11" "10.11"
prodvers=`sw_vers|awk '/^ProductVersion:/{print $2}'|awk -F. '{print $1"."$2}'`
case "$prodvers" in
- 10.*)
+ [1-9][0-9].*)
add_macosx_version_min ccflags $prodvers
add_macosx_version_min ldflags $prodvers
;;
@@ -342,11 +342,10 @@ EOM
exit 1
esac
- # The X in 10.X
- prodvers_minor=$(echo $prodvers|awk -F. '{print $2}')
+ darwin_major=$(echo $osvers|awk -F. '{print $1}')
- # macOS (10.12) deprecated syscall().
- if [ "$prodvers_minor" -ge 12 ]; then
+ # macOS 10.12 (darwin 16.0.0) deprecated syscall().
+ if [ "$darwin_major" -ge 16 ]; then
d_syscall='undef'
# If deploying to pre-10.12, suppress Time::HiRes's detection of the system clock_gettime()
case "$MACOSX_DEPLOYMENT_TARGET" in
diff --git a/gnu/usr.bin/perl/hints/freebsd.sh b/gnu/usr.bin/perl/hints/freebsd.sh
index 791290c4745..72db521ef75 100644
--- a/gnu/usr.bin/perl/hints/freebsd.sh
+++ b/gnu/usr.bin/perl/hints/freebsd.sh
@@ -207,7 +207,7 @@ $define|true|[yY]*)
0.*|1.*|2.0*|2.1*) cat <<EOM >&4
I did not know that FreeBSD $osvers supports POSIX threads.
-Feel free to tell https://github.com/Perl/perl5/issues otherwise.
+Feel free to report that at https://github.com/Perl/perl5/issues otherwise.
EOM
exit 1
;;
@@ -335,7 +335,7 @@ then
d_uselocale='undef'
fi
-# https://rt.perl.org/Ticket/Display.html?id=131337
+# https://github.com/Perl/perl5/issues/15984
# Reported in 11.0-CURRENT with g++-4.8.5:
# If using g++, the Configure scan for dlopen() fails.
# Easier for now to just to forcibly set it.
diff --git a/gnu/usr.bin/perl/hints/hpux.sh b/gnu/usr.bin/perl/hints/hpux.sh
index d224ceef1d1..da5f81dfe12 100644
--- a/gnu/usr.bin/perl/hints/hpux.sh
+++ b/gnu/usr.bin/perl/hints/hpux.sh
@@ -160,7 +160,7 @@ case `$cc -v 2>&1`"" in
ccversion=`what $cc_found | awk '/Compiler/{print $2}/Itanium/{print $6,$7}/for Integrity/{print $6,$7}'`
case "$ccflags" in
"-Ae "*) ;;
- *) ccflags="-Ae $cc_cppflags"
+ *) ccflags="-Ae -Wp,-H150000 $cc_cppflags"
# +vnocompatwarnings not known in 10.10 and older
if [ $xxOsRev -ge 1020 ]; then
ccflags="$ccflags -Wl,+vnocompatwarnings"
@@ -486,7 +486,7 @@ case "$ccisgcc" in
# > cc --version
# cc: HP C/aC++ B3910B A.06.15 [May 16 2007]
# Has optimizing problems with +O2 for blead (5.17.4),
- # see https://rt.perl.org:443/rt3/Ticket/Display.html?id=103668.
+ # see https://github.com/Perl/perl5/issues/11748.
#
# +O2 +Onolimit +Onoprocelim +Ostore_ordering \
# +Onolibcalls=strcmp
@@ -826,3 +826,7 @@ esac
# needed, but for now simply undefine them
d_mbrlen='undef'
d_mbrtowc='undef'
+# And this one is not know on 11.11 (with HP C-ANSI-C)
+if [ "$xxOsRevMajor" -lt 11 ] || [ "$xxOsRevMinor" -lt 12 ]; then
+d_wcrtomb='undef'
+fi
diff --git a/gnu/usr.bin/perl/hints/linux-android.sh b/gnu/usr.bin/perl/hints/linux-android.sh
index 6a59cb726ef..cd228766628 100644
--- a/gnu/usr.bin/perl/hints/linux-android.sh
+++ b/gnu/usr.bin/perl/hints/linux-android.sh
@@ -28,40 +28,52 @@ define) ;;
esac
# Make sure that we look for libm
-libswanted="$libswanted m"
+libswanted="$libswanted m log"
-# Down with locales!
+# Older Androids lack locale support and may need the following undefs
+# uncommenting. This isn't necessary from at least Android 8.1 (Oreo)
# https://github.com/android/platform_bionic/blob/master/libc/CAVEATS
-d_locconv='undef'
-d_setlocale='undef'
-d_setlocale_r='undef'
-d_lc_monetary_2008='undef'
-i_locale='undef'
+#d_locconv='undef'
+#d_setlocale='undef'
+#d_setlocale_r='undef'
+#d_lc_monetary_2008='undef'
+#i_locale='undef'
+#d_newlocale='undef'
# https://code.google.com/p/android-source-browsing/source/browse/libc/netbsd/net/getservent_r.c?repo=platform--bionic&r=ca6fe7bebe3cc6ed7e2db5a3ede2de0fcddf411d#95
d_getservent_r='undef'
-# Bionic defines several stubs that just warn and return NULL
+# Bionic defines several stubs that warn (in older releases) and return NULL
# https://gitorious.org/0xdroid/bionic/blobs/70b2ef0ec89a9c9d4c2d4bcab728a0e72bafb18e/libc/bionic/stubs.c
# https://android.googlesource.com/platform/bionic/+/master/libc/bionic/stubs.cpp
-# If they warn with 'FIX' or 'Android', assume they are the stubs
-# we want to avoid.
+# These tests originally looked for 'FIX' or 'Android' warnings, as they
+# indicated stubs to avoid. At some point, Android stopped emitting
+# those warnings; the tests were adapted to check function return values
+# and hopefully now detect stubs on both older and newer Androids.
# These are all stubs as well, but the core doesn't use them:
# getusershell setusershell endusershell
# This script UU/archname.cbu will get 'called-back' by Configure.
$cat > UU/archname.cbu <<'EOCBU'
-# egrep pattern to detect a stub warning on Android.
+# original egrep pattern to detect a stub warning on Android.
# Right now we're checking for:
# Android 2.x: FIX ME! implement FUNC
# Android 4.x: FUNC is not implemented on Android
+# Android 8.x: <no warnings; tests now printf a compatible warning>
android_stub='FIX|Android'
$cat > try.c << 'EOM'
#include <netdb.h>
-int main() { (void) getnetbyname("foo"); return(0); }
+#include <stdio.h>
+int main() {
+ struct netent* test = getnetbyname("loopback");
+ if (test == NULL) {
+ printf("getnetbyname is still a stub function on Android");
+ }
+ return(0);
+}
EOM
$cc $ccflags try.c -o try
android_warn=`$run ./try 2>&1 | $egrep "$android_stub"`
@@ -71,7 +83,14 @@ fi
$cat > try.c << 'EOM'
#include <netdb.h>
-int main() { (void) getnetbyaddr((uint32_t)1, AF_INET); return(0); }
+#include <stdio.h>
+int main() {
+ struct netent* test = getnetbyaddr(127, AF_INET);
+ if (test == NULL) {
+ printf("getnetbyaddr is still a stub function on Android");
+ }
+ return(0);
+}
EOM
$cc $ccflags try.c -o try
android_warn=`$run ./try 2>&1 | $egrep "$android_stub"`
@@ -93,7 +112,14 @@ fi
$cat > try.c << 'EOM'
#include <netdb.h>
-int main() { (void) getprotobyname("foo"); return(0); }
+#include <stdio.h>
+int main() {
+ struct protoent* test = getprotobyname("tcp");
+ if (test == NULL) {
+ printf("getprotobyname is still a stub function on Android");
+ }
+ return(0);
+}
EOM
$cc $ccflags try.c -o try
android_warn=`$run ./try 2>&1 | $egrep "$android_stub"`
@@ -103,7 +129,14 @@ fi
$cat > try.c << 'EOM'
#include <netdb.h>
-int main() { (void) getprotobynumber(1); return(0); }
+#include <stdio.h>
+int main() {
+ struct protoent* test = getprotobynumber(1);
+ if (test == NULL) {
+ printf("getprotobynumber is still a stub function on Android");
+ }
+ return(0);
+}
EOM
$cc $ccflags try.c -o try
android_warn=`$run ./try 2>&1 | $egrep "$android_stub"`
@@ -124,7 +157,14 @@ fi
$cat > try.c << 'EOM'
#include <unistd.h>
-int main() { (void) ttyname(STDIN_FILENO); return(0); }
+#include <stdio.h>
+int main() {
+ char *tty = ttyname(STDIN_FILENO);
+ if (tty == NULL) {
+ printf("ttyname is still a stub function on Android");
+ }
+ return(0);
+}
EOM
$cc $ccflags try.c -o try
android_warn=`$run ./try 2>&1 | $egrep "$android_stub"`
diff --git a/gnu/usr.bin/perl/hints/linux.sh b/gnu/usr.bin/perl/hints/linux.sh
index a985a8ee1b3..c749f0f64a8 100644
--- a/gnu/usr.bin/perl/hints/linux.sh
+++ b/gnu/usr.bin/perl/hints/linux.sh
@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}"
# Check if we're about to use Intel's ICC compiler
case "`${cc:-cc} -V 2>&1`" in
-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*)
+*"Intel(R) C"*" Compiler"*)
# record the version, formats:
# icc (ICC) 10.1 20080801
# icpc (ICC) 10.1 20080801
@@ -165,6 +165,9 @@ esac
# plibpth to bypass this check.
if [ -x /usr/bin/gcc ] ; then
gcc=/usr/bin/gcc
+# clang also provides -print-search-dirs
+elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then
+ gcc=${cc:-cc}
else
gcc=gcc
fi
diff --git a/gnu/usr.bin/perl/hints/netbsd.sh b/gnu/usr.bin/perl/hints/netbsd.sh
index 445680d8bad..5c9f5bcbd50 100644
--- a/gnu/usr.bin/perl/hints/netbsd.sh
+++ b/gnu/usr.bin/perl/hints/netbsd.sh
@@ -265,3 +265,38 @@ case "$osver" in
d_fchmodat="$undef"
;;
esac
+
+cat >UU/uselongdouble.cbu <<'EOCBU'
+# This script UU/uselongdouble.cbu will get 'called-back' by Configure
+# after it has prompted the user for whether to use long doubles.
+#
+# See https://github.com/Perl/perl5/issues/17853 and https://github.com/Perl/perl5/issues/17854
+case "$uselongdouble" in
+$define|true|[yY]*)
+ cat >try.c <<\TRY
+#include <stdio.h>
+#include <math.h>
+
+long double x = 1.0;
+
+int main(int argc, char **argv) {
+ double e1 = exp(1.0);
+ /* as of NetBSD 9.0 expl() just calls exp(),
+ Fail here if they're equal. */
+ return expl(x) == (long double)e1;
+}
+TRY
+ if $cc -o try $ccflags $ldflags try.c -lm && $run ./try; then
+ echo "NetBSD seem to have fixed expl (and hopefully more)" >&4
+ else
+ cat <<EOM >&4
+
+Warning! NetBSD's long double support is limited enough that it will cause
+test failures, and possibly build failures, and this doesn't appear to have
+been fixed in the release you're running.
+
+EOM
+ fi
+;;
+esac
+EOCBU
diff --git a/gnu/usr.bin/perl/hints/openbsd.sh b/gnu/usr.bin/perl/hints/openbsd.sh
index 5f96a4d5a7d..66db8e2ce1e 100644
--- a/gnu/usr.bin/perl/hints/openbsd.sh
+++ b/gnu/usr.bin/perl/hints/openbsd.sh
@@ -31,14 +31,6 @@ case "$osvers" in
d_setruid=$undef
esac
-# OpenBSD 5.5 on has 64 bit time_t
-case "$osvers" in
-[0-4].*|5.[0-4]) ;;
-*)
- cppflags="$cppflags -DBIG_TIME"
- ;;
-esac
-
#
# Not all platforms support dynamic loading...
# For the case of "$openbsd_distribution", the hints file
@@ -55,11 +47,7 @@ alpha-2.[0-8]|mips-2.[0-8]|powerpc-2.[0-7]|m88k-[2-4].*|m88k-5.[0-2]|hppa-3.[0-5
test -z "$usedl" && usedl=$define
# We use -fPIC here because -fpic is *NOT* enough for some of the
# extensions like Tk on some OpenBSD platforms (ie: sparc)
- PICFLAG=-fPIC
- if [ -e /usr/share/mk/bsd.own.mk ]; then
- PICFLAG=`make -f /usr/share/mk/bsd.own.mk -V PICFLAG`
- fi
- cccdlflags="-DPIC ${PICFLAG} $cccdlflags"
+ cccdlflags="-DPIC -fPIC $cccdlflags"
case "$osvers" in
[01].*|2.[0-7]|2.[0-7].*)
lddlflags="-Bshareable $lddlflags"
@@ -70,7 +58,7 @@ alpha-2.[0-8]|mips-2.[0-8]|powerpc-2.[0-7]|m88k-[2-4].*|m88k-5.[0-2]|hppa-3.[0-5
;;
*) # from 3.1 onwards
ld=${cc:-cc}
- lddlflags="-shared ${PICFLAG} $lddlflags"
+ lddlflags="-shared -fPIC $lddlflags"
libswanted=`echo $libswanted | sed 's/ dl / /'`
;;
esac
@@ -96,9 +84,6 @@ esac
# around for old NetBSD binaries.
libswanted=`echo $libswanted | sed 's/ crypt / /'`
-# OpenBSD hasn't ever needed linking to libutil
-libswanted=`echo $libswanted | sed 's/ util / /'`
-
# Configure can't figure this out non-interactively
d_suidsafe=$define
@@ -116,25 +101,6 @@ m88k-3.4)
;;
esac
-#
-# Unaligned access on alpha with -ftree-ter
-# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59679
-# More details
-# https://rt.perl.org/Public/Bug/Display.html?id=120888
-#
-case "${ARCH}-${osvers}" in
- alpha-*)
- ccflags="-fno-tree-ter $ccflags"
- ;;
-esac
-
-# Special per-arch specific ccflags
-case "${ARCH}-${osvers}" in
- vax-*)
- ccflags="-DUSE_PERL_ATOF=0 $ccflags"
- ;;
-esac
-
# This script UU/usethreads.cbu will get 'called-back' by Configure
# after it has prompted the user for whether to use threads.
cat > UU/usethreads.cbu <<'EOCBU'
@@ -156,9 +122,6 @@ $define|true|[yY]*)
# Broken up to OpenBSD 3.6, fixed in OpenBSD 3.7
d_getservbyname_r=$undef ;;
esac
- ;;
-*)
- libswanted=`echo $libswanted | sed 's/ pthread / /'`
esac
EOCBU
@@ -177,12 +140,12 @@ case "$openbsd_distribution" in
siteprefix='/usr/local'
siteprefixexp='/usr/local'
# Ports installs non-std libs in /usr/local/lib so look there too
- locincpth=''
- loclibpth=''
+ locincpth='/usr/local/include'
+ loclibpth='/usr/local/lib'
# Link perl with shared libperl
- if [ "$usedl" = "$define" -a -r $src/shlib_version ]; then
+ if [ "$usedl" = "$define" -a -r shlib_version ]; then
useshrplib=true
- libperl=`. $src/shlib_version; echo libperl.so.${major}.${minor}`
+ libperl=`. ./shlib_version; echo libperl.so.${major}.${minor}`
fi
;;
esac
@@ -192,7 +155,4 @@ esac
# which is being fixed. In the meantime, forbid POSIX 2008 locales
d_newlocale="$undef"
-# OpenBSD's locale support is not that complete yet
-ccflags="-DNO_LOCALE_NUMERIC -DNO_LOCALE_COLLATE $ccflags"
-
# end
diff --git a/gnu/usr.bin/perl/hints/os390.sh b/gnu/usr.bin/perl/hints/os390.sh
index 8fe573e48f2..56703033ae4 100644
--- a/gnu/usr.bin/perl/hints/os390.sh
+++ b/gnu/usr.bin/perl/hints/os390.sh
@@ -32,21 +32,24 @@ esac
# YYDYNAMIC ensures that the OS/390 yacc generated parser is reentrant.
# -DEBCDIC should come from Configure and need not be mentioned here.
# Prepend your favorites with Configure -Dccflags=your_favorites
+ def_os390_cflags='-qlanglvl=extended:extc89:extc99 -qlongname -qxplink -qdll -qfloat=ieee -qexportall -qhaltonmsg=3296:4108'
+ def_os390_cflags="$def_os390_cflags -Wc,XPLINK,dll,EXPORTALL -Wl,XPLINK,dll"
+ def_os390_defs='-DMAXSIG=39 -DOEMVS -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -DYYDYNAMIC -D_POSIX_SOURCE=1'
case "$ccflags" in
-'') ccflags='-qlanglvl=extended:extc89:extc99 -qlongname -qxplink -qdll -qfloat=ieee -qhaltonmsg=3296:4108 -DMAXSIG=39 -DOEMVS -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -DYYDYNAMIC -D_POSIX_SOURCE=1' ;;
-*) ccflags='$ccflags -qlanglvl=extended:extc89:extc99 -qlongname -qxplink -qdll -qfloat=ieee -qhaltonmsg=3296:4108 -DMAXSIG=39 -DOEMVS -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -DYYDYNAMIC -D_POSIX_SOURCE=1' ;;
+'') ccflags="$def_os390_cflags $def_os390_defs" ;;
+*) ccflags="$ccflags $def_os390_cflags $def_os390_defs" ;;
esac
# Turning on optimization breaks perl.
# You can override this with Configure -Doptimize='-O' or somesuch.
case "$optimize" in
-'') optimize='none' ;;
+'') optimize=' ' ;;
esac
# To link via definition side decks we need the dll option
# You can override this with Configure -Ucccdlflags or somesuch.
case "$cccdlflags" in
-'') cccdlflags='-qxplink -qdll' ;;
+'') cccdlflags='-qxplink -qdll -qexportall -Wc,XPLINK,dll,EXPORTALL -Wl,XPLINK,dll' ;;
esac
case "$so" in
@@ -72,7 +75,11 @@ esac
# information at the end of the executable (=> smaller binaries).
# Override this option with -Dldflags='whatever else you wanted'.
case "$ldflags" in
-'') ldflags='-qxplink -qdll' ;;
+'') ldflags='-qxplink -qdll -Wl,XPLINK,dll' ;;
+esac
+case "$optimize" in
+*-g*) ;;
+*) ldflags="$ldflags -Wl,EDIT=NO"
esac
# In order to build with dynamic be sure to specify:
@@ -111,11 +118,11 @@ define)
esac
libperl="libperl.$so"
ccflags="$ccflags -D_SHR_ENVIRON -DPERL_EXTERNAL_GLOB -qexportall -qdll -qxplink"
- cccdlflags='-c -qexportall -qxplink -qdll'
+ cccdlflags='-c -qexportall -qxplink -qdll -Wc,XPLINK,dll,EXPORTALL -Wl,XPLINK,dll'
# The following will need to be modified for the installed libperl.x.
# The modification to Config.pm is done by the installperl script after the build and test.
- ccdlflags="-qxplink -qdll `pwd`/libperl.x"
- lddlflags="-qxplink -qdll `pwd`/libperl.x"
+ ccdlflags="-qxplink -qdll -Wl,XPLINK,dll `pwd`/libperl.x"
+ lddlflags="-qxplink -qdll -Wl,XPLINK,dll `pwd`/libperl.x"
;;
esac
# even on static builds using LIBPATH should be OK.
@@ -224,7 +231,7 @@ d_gethostbyaddr_r='undef'
d_gethostbyname_r='undef'
d_gethostent_r='undef'
-# The z/OS C compiler compiler supports the attribute keyword, but in a
+# The z/OS C compiler supports the attribute keyword, but in a
# limited manner.
#
# Ideally, Configure's tests should test the attributes as they are expected
diff --git a/gnu/usr.bin/perl/hints/solaris_2.sh b/gnu/usr.bin/perl/hints/solaris_2.sh
index ba368e6f3bb..e50d9d83237 100644
--- a/gnu/usr.bin/perl/hints/solaris_2.sh
+++ b/gnu/usr.bin/perl/hints/solaris_2.sh
@@ -90,7 +90,8 @@ END
`
case "$cc" in
-'') for i in `ls -r /opt/sol*studio*/bin/cc` /opt/SUNWspro/bin/cc
+'') for i in `ls -r /opt/*studio*/bin/cc` /opt/SUNWspro/bin/cc \
+ `which gcc`
do
if test -f "$i"; then
cc=$i
@@ -585,7 +586,7 @@ EOM
fi
fi
case "${cc:-cc} -v 2>/dev/null" in
- *gcc*)
+ *gcc*|*g++*)
echo 'int main() { return 0; }' > try.c
case "`${cc:-cc} $ccflags -mcpu=v9 -m64 -S try.c 2>&1 | grep 'm64 is not supported by this configuration'`" in
*"m64 is not supported"*)
diff --git a/gnu/usr.bin/perl/hv.c b/gnu/usr.bin/perl/hv.c
index 1371b2f99a7..eccae6294c3 100644
--- a/gnu/usr.bin/perl/hv.c
+++ b/gnu/usr.bin/perl/hv.c
@@ -1671,7 +1671,7 @@ Perl_newHVhv(pTHX_ HV *ohv)
}
/*
-=for apidoc Am|HV *|hv_copy_hints_hv|HV *ohv
+=for apidoc hv_copy_hints_hv
A specialised version of L</newHVhv> for copying C<%^H>. C<ohv> must be
a pointer to a hash (which may have C<%^H> magic, but should be generally
@@ -2396,17 +2396,17 @@ Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags)
if (iter->xhv_name_u.xhvnameu_name) {
if(iter->xhv_name_count) {
if(flags & HV_NAME_SETALL) {
- HEK ** const name = HvAUX(hv)->xhv_name_u.xhvnameu_names;
- HEK **hekp = name + (
+ HEK ** const this_name = HvAUX(hv)->xhv_name_u.xhvnameu_names;
+ HEK **hekp = this_name + (
iter->xhv_name_count < 0
? -iter->xhv_name_count
: iter->xhv_name_count
);
- while(hekp-- > name+1)
+ while(hekp-- > this_name+1)
unshare_hek_or_pvn(*hekp, 0, 0, 0);
/* The first elem may be null. */
- if(*name) unshare_hek_or_pvn(*name, 0, 0, 0);
- Safefree(name);
+ if(*this_name) unshare_hek_or_pvn(*this_name, 0, 0, 0);
+ Safefree(this_name);
iter = HvAUX(hv); /* may been realloced */
spot = &iter->xhv_name_u.xhvnameu_name;
iter->xhv_name_count = 0;
@@ -2672,6 +2672,8 @@ C<&PL_sv_placeholder>. Note that the implementation of placeholders and
restricted hashes may change, and the implementation currently is
insufficiently abstracted for any change to be tidy.
+=for apidoc Amnh||HV_ITERNEXT_WANTPLACEHOLDERS
+
=cut
*/
@@ -3249,7 +3251,7 @@ S_refcounted_he_value(pTHX_ const struct refcounted_he *he)
}
/*
-=for apidoc m|HV *|refcounted_he_chain_2hv|const struct refcounted_he *c|U32 flags
+=for apidoc refcounted_he_chain_2hv
Generates and returns a C<HV *> representing the content of a
C<refcounted_he> chain.
@@ -3357,7 +3359,7 @@ Perl_refcounted_he_chain_2hv(pTHX_ const struct refcounted_he *chain, U32 flags)
}
/*
-=for apidoc m|SV *|refcounted_he_fetch_pvn|const struct refcounted_he *chain|const char *keypv|STRLEN keylen|U32 hash|U32 flags
+=for apidoc refcounted_he_fetch_pvn
Search along a C<refcounted_he> chain for an entry with the key specified
by C<keypv> and C<keylen>. If C<flags> has the C<REFCOUNTED_HE_KEY_UTF8>
@@ -3447,7 +3449,7 @@ Perl_refcounted_he_fetch_pvn(pTHX_ const struct refcounted_he *chain,
}
/*
-=for apidoc m|SV *|refcounted_he_fetch_pv|const struct refcounted_he *chain|const char *key|U32 hash|U32 flags
+=for apidoc refcounted_he_fetch_pv
Like L</refcounted_he_fetch_pvn>, but takes a nul-terminated string
instead of a string/length pair.
@@ -3464,7 +3466,7 @@ Perl_refcounted_he_fetch_pv(pTHX_ const struct refcounted_he *chain,
}
/*
-=for apidoc m|SV *|refcounted_he_fetch_sv|const struct refcounted_he *chain|SV *key|U32 hash|U32 flags
+=for apidoc refcounted_he_fetch_sv
Like L</refcounted_he_fetch_pvn>, but takes a Perl scalar instead of a
string/length pair.
@@ -3491,7 +3493,7 @@ Perl_refcounted_he_fetch_sv(pTHX_ const struct refcounted_he *chain,
}
/*
-=for apidoc m|struct refcounted_he *|refcounted_he_new_pvn|struct refcounted_he *parent|const char *keypv|STRLEN keylen|U32 hash|SV *value|U32 flags
+=for apidoc refcounted_he_new_pvn
Creates a new C<refcounted_he>. This consists of a single key/value
pair and a reference to an existing C<refcounted_he> chain (which may
@@ -3635,7 +3637,7 @@ Perl_refcounted_he_new_pvn(pTHX_ struct refcounted_he *parent,
}
/*
-=for apidoc m|struct refcounted_he *|refcounted_he_new_pv|struct refcounted_he *parent|const char *key|U32 hash|SV *value|U32 flags
+=for apidoc refcounted_he_new_pv
Like L</refcounted_he_new_pvn>, but takes a nul-terminated string instead
of a string/length pair.
@@ -3652,7 +3654,7 @@ Perl_refcounted_he_new_pv(pTHX_ struct refcounted_he *parent,
}
/*
-=for apidoc m|struct refcounted_he *|refcounted_he_new_sv|struct refcounted_he *parent|SV *key|U32 hash|SV *value|U32 flags
+=for apidoc refcounted_he_new_sv
Like L</refcounted_he_new_pvn>, but takes a Perl scalar instead of a
string/length pair.
@@ -3679,7 +3681,7 @@ Perl_refcounted_he_new_sv(pTHX_ struct refcounted_he *parent,
}
/*
-=for apidoc m|void|refcounted_he_free|struct refcounted_he *he
+=for apidoc refcounted_he_free
Decrements the reference count of a C<refcounted_he> by one. If the
reference count reaches zero the structure's memory is freed, which
@@ -3719,7 +3721,7 @@ Perl_refcounted_he_free(pTHX_ struct refcounted_he *he) {
}
/*
-=for apidoc m|struct refcounted_he *|refcounted_he_inc|struct refcounted_he *he
+=for apidoc refcounted_he_inc
Increment the reference count of a C<refcounted_he>. The pointer to the
C<refcounted_he> is also returned. It is safe to pass a null pointer
@@ -3746,8 +3748,14 @@ Perl_refcounted_he_inc(pTHX_ struct refcounted_he *he)
/*
=for apidoc cop_fetch_label
-Returns the label attached to a cop.
-The flags pointer may be set to C<SVf_UTF8> or 0.
+Returns the label attached to a cop, and stores its length in bytes into
+C<*len>.
+Upon return, C<*flags> will be set to either C<SVf_UTF8> or 0.
+
+Alternatively, use the macro L</C<CopLABEL_len_flags>>;
+or if you don't need to know if the label is UTF-8 or not, the macro
+L</C<CopLABEL_len>>;
+or if you additionally dont need to know the length, L</C<CopLABEL>>.
=cut
*/
@@ -3794,7 +3802,7 @@ Perl_cop_fetch_label(pTHX_ COP *const cop, STRLEN *len, U32 *flags) {
Save a label into a C<cop_hints_hash>.
You need to set flags to C<SVf_UTF8>
-for a UTF-8 label.
+for a UTF-8 label. Any other flag is ignored.
=cut
*/
diff --git a/gnu/usr.bin/perl/hv.h b/gnu/usr.bin/perl/hv.h
index dcc6eb1e2fb..607152c840b 100644
--- a/gnu/usr.bin/perl/hv.h
+++ b/gnu/usr.bin/perl/hv.h
@@ -142,14 +142,14 @@ struct xpvhv {
/*
=head1 Hash Manipulation Functions
-=for apidoc AmU||HEf_SVKEY
+=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 AmU||Nullhv
+=for apidoc ADmnU||Nullhv
Null HV pointer.
(deprecated - use C<(HV *)NULL> instead)
@@ -263,6 +263,16 @@ C<SV*>.
# define Nullhv Null(HV*)
#endif
#define HvARRAY(hv) ((hv)->sv_u.svu_hash)
+
+/*
+
+=for apidoc Am|STRLEN|HvFILL|HV *const hv
+
+See L</hv_fill>.
+
+=cut
+
+*/
#define HvFILL(hv) Perl_hv_fill(aTHX_ MUTABLE_HV(hv))
#define HvMAX(hv) ((XPVHV*) SvANY(hv))->xhv_max
/* This quite intentionally does no flag checking first. That's your
@@ -565,7 +575,7 @@ struct refcounted_he {
};
/*
-=for apidoc m|SV *|refcounted_he_fetch_pvs|const struct refcounted_he *chain|"literal string" key|U32 flags
+=for apidoc m|SV *|refcounted_he_fetch_pvs|const struct refcounted_he *chain|"key"|U32 flags
Like L</refcounted_he_fetch_pvn>, but takes a literal string
instead of a string/length pair, and no precomputed hash.
@@ -577,7 +587,7 @@ instead of a string/length pair, and no precomputed hash.
Perl_refcounted_he_fetch_pvn(aTHX_ chain, STR_WITH_LEN(key), 0, flags)
/*
-=for apidoc m|struct refcounted_he *|refcounted_he_new_pvs|struct refcounted_he *parent|"literal string" key|SV *value|U32 flags
+=for apidoc m|struct refcounted_he *|refcounted_he_new_pvs|struct refcounted_he *parent|"key"|SV *value|U32 flags
Like L</refcounted_he_new_pvn>, but takes a literal string
instead of a string/length pair, and no precomputed hash.
diff --git a/gnu/usr.bin/perl/hv_func.h b/gnu/usr.bin/perl/hv_func.h
index 56585060a5a..3e2d2be80b7 100644
--- a/gnu/usr.bin/perl/hv_func.h
+++ b/gnu/usr.bin/perl/hv_func.h
@@ -36,35 +36,27 @@
#if defined(PERL_HASH_FUNC_SIPHASH)
# define __PERL_HASH_FUNC "SIPHASH_2_4"
-# 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_BYTES 16
+# define __PERL_HASH_STATE_BYTES 32
# 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_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_BYTES 16
+# define __PERL_HASH_STATE_BYTES 32
# 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_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_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_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_BYTES 12
+# define __PERL_HASH_STATE_BYTES 12
# 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"
@@ -81,12 +73,6 @@
#endif
-#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
@@ -96,8 +82,8 @@
#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) ) )
@@ -114,19 +100,23 @@
#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_roundup(_PERL_HASH_SEED_BYTES)
-#define PERL_HASH_STATE_BYTES _PERL_HASH_SEED_roundup(_PERL_HASH_STATE_BYTES)
+#define PERL_HASH_SEED_BYTES _PERL_HASH_SEED_BYTES
+#define PERL_HASH_STATE_BYTES _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]] ) \
@@ -140,7 +130,7 @@
* including reading from the environment, or we randomly setup the
* seed. The seed will be passed into the PERL_HASH_SEED_STATE() function
* defined for the configuration defined for this perl, which will then
- * initialze whatever state it might need later in hashing. */
+ * initialize whatever state it might need later in hashing. */
#ifndef PERL_HASH_SEED
# if defined(USE_HASH_SEED)
@@ -207,8 +197,8 @@ void S_perl_siphash_seed_state(const unsigned char * const seed_buf, unsigned ch
}
#define PERL_SIPHASH_FNC(FNC,SIP_ROUNDS,SIP_FINAL_ROUNDS) \
-PERL_STATIC_INLINE U32 \
-FNC ## _with_state \
+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; \
@@ -233,12 +223,12 @@ FNC ## _with_state \
\
switch( left ) \
{ \
- case 7: b |= ( ( U64 )in[ 6] ) << 48; \
- case 6: b |= ( ( U64 )in[ 5] ) << 40; \
- case 5: b |= ( ( U64 )in[ 4] ) << 32; \
- case 4: b |= ( ( U64 )in[ 3] ) << 24; \
- case 3: b |= ( ( U64 )in[ 2] ) << 16; \
- case 2: b |= ( ( U64 )in[ 1] ) << 8; \
+ case 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; \
} \
@@ -254,10 +244,23 @@ FNC ## _with_state \
SIP_FINAL_ROUNDS \
\
b = v0 ^ v1 ^ v2 ^ v3; \
- return (U32)(b & U32_MAX); \
+ 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]; \
@@ -277,15 +280,9 @@ PERL_SIPHASH_FNC(
,SIPROUND;SIPROUND;
,SIPROUND;SIPROUND;SIPROUND;SIPROUND;
)
-#endif /* defined(CAN64BITHASH) */
+#endif /* defined(CAN64BITHASH) */
-PERL_STATIC_INLINE U32
-S_perl_hash_with_seed(const U8 * seed, const U8 *str, STRLEN len) {
- __PERL_HASH_WORD_TYPE state[PERL_HASH_STATE_WORDS];
- _PERL_HASH_SEED_STATE(seed,(U8*)state);
- return _PERL_HASH_WITH_STATE((U8*)state,str,len);
-}
#endif /*compile once*/
diff --git a/gnu/usr.bin/perl/inline.h b/gnu/usr.bin/perl/inline.h
index 654f801b75d..bb0cdb0e542 100644
--- a/gnu/usr.bin/perl/inline.h
+++ b/gnu/usr.bin/perl/inline.h
@@ -6,7 +6,7 @@
* License or the Artistic License, as specified in the README file.
*
* This file contains tables and code adapted from
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which requires this
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which requires this
* copyright notice:
Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
@@ -40,7 +40,7 @@ SOFTWARE.
/* ------------------------------- av.h ------------------------------- */
PERL_STATIC_INLINE SSize_t
-S_av_top_index(pTHX_ AV *av)
+Perl_av_top_index(pTHX_ AV *av)
{
PERL_ARGS_ASSERT_AV_TOP_INDEX;
assert(SvTYPE(av) == SVt_PVAV);
@@ -51,17 +51,21 @@ S_av_top_index(pTHX_ AV *av)
/* ------------------------------- cv.h ------------------------------- */
PERL_STATIC_INLINE GV *
-S_CvGV(pTHX_ CV *sv)
+Perl_CvGV(pTHX_ CV *sv)
{
+ PERL_ARGS_ASSERT_CVGV;
+
return CvNAMED(sv)
? Perl_cvgv_from_hek(aTHX_ sv)
: ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_gv;
}
PERL_STATIC_INLINE I32 *
-S_CvDEPTHp(const CV * const sv)
+Perl_CvDEPTH(const CV * const sv)
{
+ PERL_ARGS_ASSERT_CVDEPTH;
assert(SvTYPE(sv) == SVt_PVCV || SvTYPE(sv) == SVt_PVFM);
+
return &((XPVCV*)SvANY(sv))->xcv_depth;
}
@@ -119,8 +123,10 @@ S_MgBYTEPOS(pTHX_ MAGIC *mg, SV *sv, const char *s, STRLEN len)
#if defined(PERL_IN_PAD_C) || defined(PERL_IN_OP_C)
PERL_STATIC_INLINE bool
-PadnameIN_SCOPE(const PADNAME * const pn, const U32 seq)
+S_PadnameIN_SCOPE(const PADNAME * const pn, const U32 seq)
{
+ PERL_ARGS_ASSERT_PADNAMEIN_SCOPE;
+
/* is seq within the range _LOW to _HIGH ?
* This is complicated by the fact that PL_cop_seqmax
* may have wrapped around at some point */
@@ -153,7 +159,7 @@ PadnameIN_SCOPE(const PADNAME * const pn, const U32 seq)
/* ------------------------------- pp.h ------------------------------- */
PERL_STATIC_INLINE I32
-S_TOPMARK(pTHX)
+Perl_TOPMARK(pTHX)
{
DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log,
"MARK top %p %" IVdf "\n",
@@ -163,7 +169,7 @@ S_TOPMARK(pTHX)
}
PERL_STATIC_INLINE I32
-S_POPMARK(pTHX)
+Perl_POPMARK(pTHX)
{
DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log,
"MARK pop %p %" IVdf "\n",
@@ -176,37 +182,50 @@ S_POPMARK(pTHX)
/* ----------------------------- regexp.h ----------------------------- */
PERL_STATIC_INLINE struct regexp *
-S_ReANY(const REGEXP * const re)
+Perl_ReANY(const REGEXP * const re)
{
XPV* const p = (XPV*)SvANY(re);
+
+ PERL_ARGS_ASSERT_REANY;
assert(isREGEXP(re));
+
return SvTYPE(re) == SVt_PVLV ? p->xpv_len_u.xpvlenu_rx
: (struct regexp *)p;
}
/* ------------------------------- sv.h ------------------------------- */
+PERL_STATIC_INLINE bool
+Perl_SvTRUE(pTHX_ SV *sv) {
+ if (!LIKELY(sv))
+ return FALSE;
+ SvGETMAGIC(sv);
+ return SvTRUE_nomg_NN(sv);
+}
+
PERL_STATIC_INLINE SV *
-S_SvREFCNT_inc(SV *sv)
+Perl_SvREFCNT_inc(SV *sv)
{
if (LIKELY(sv != NULL))
SvREFCNT(sv)++;
return sv;
}
PERL_STATIC_INLINE SV *
-S_SvREFCNT_inc_NN(SV *sv)
+Perl_SvREFCNT_inc_NN(SV *sv)
{
+ PERL_ARGS_ASSERT_SVREFCNT_INC_NN;
+
SvREFCNT(sv)++;
return sv;
}
PERL_STATIC_INLINE void
-S_SvREFCNT_inc_void(SV *sv)
+Perl_SvREFCNT_inc_void(SV *sv)
{
if (LIKELY(sv != NULL))
SvREFCNT(sv)++;
}
PERL_STATIC_INLINE void
-S_SvREFCNT_dec(pTHX_ SV *sv)
+Perl_SvREFCNT_dec(pTHX_ SV *sv)
{
if (LIKELY(sv != NULL)) {
U32 rc = SvREFCNT(sv);
@@ -218,9 +237,12 @@ S_SvREFCNT_dec(pTHX_ SV *sv)
}
PERL_STATIC_INLINE void
-S_SvREFCNT_dec_NN(pTHX_ SV *sv)
+Perl_SvREFCNT_dec_NN(pTHX_ SV *sv)
{
U32 rc = SvREFCNT(sv);
+
+ PERL_ARGS_ASSERT_SVREFCNT_DEC_NN;
+
if (LIKELY(rc > 1))
SvREFCNT(sv) = rc - 1;
else
@@ -228,26 +250,30 @@ S_SvREFCNT_dec_NN(pTHX_ SV *sv)
}
PERL_STATIC_INLINE void
-SvAMAGIC_on(SV *sv)
+Perl_SvAMAGIC_on(SV *sv)
{
+ PERL_ARGS_ASSERT_SVAMAGIC_ON;
assert(SvROK(sv));
+
if (SvOBJECT(SvRV(sv))) HvAMAGIC_on(SvSTASH(SvRV(sv)));
}
PERL_STATIC_INLINE void
-SvAMAGIC_off(SV *sv)
+Perl_SvAMAGIC_off(SV *sv)
{
+ PERL_ARGS_ASSERT_SVAMAGIC_OFF;
+
if (SvROK(sv) && SvOBJECT(SvRV(sv)))
HvAMAGIC_off(SvSTASH(SvRV(sv)));
}
PERL_STATIC_INLINE U32
-S_SvPADSTALE_on(SV *sv)
+Perl_SvPADSTALE_on(SV *sv)
{
assert(!(SvFLAGS(sv) & SVs_PADTMP));
return SvFLAGS(sv) |= SVs_PADSTALE;
}
PERL_STATIC_INLINE U32
-S_SvPADSTALE_off(SV *sv)
+Perl_SvPADSTALE_off(SV *sv)
{
assert(!(SvFLAGS(sv) & SVs_PADTMP));
return SvFLAGS(sv) &= ~SVs_PADSTALE;
@@ -266,17 +292,6 @@ S_sv_or_pv_pos_u2b(pTHX_ SV *sv, const char *pv, STRLEN pos, STRLEN *lenp)
}
#endif
-/* ------------------------------- handy.h ------------------------------- */
-
-/* saves machine code for a common noreturn idiom typically used in Newx*() */
-GCC_DIAG_IGNORE_DECL(-Wunused-function);
-static void
-S_croak_memory_wrap(void)
-{
- Perl_croak_nocontext("%s",PL_memory_wrap);
-}
-GCC_DIAG_RESTORE_DECL;
-
/* ------------------------------- utf8.h ------------------------------- */
/*
@@ -284,7 +299,7 @@ GCC_DIAG_RESTORE_DECL;
*/
PERL_STATIC_INLINE void
-S_append_utf8_from_native_byte(const U8 byte, U8** dest)
+Perl_append_utf8_from_native_byte(const U8 byte, U8** dest)
{
/* Takes an input 'byte' (Latin1 or EBCDIC) and appends it to the UTF-8
* encoded string at '*dest', updating '*dest' to include it */
@@ -301,10 +316,10 @@ S_append_utf8_from_native_byte(const U8 byte, U8** dest)
/*
=for apidoc valid_utf8_to_uvchr
-Like C<L</utf8_to_uvchr_buf>>, but should only be called when it is known that
-the next character in the input UTF-8 string C<s> is well-formed (I<e.g.>,
-it passes C<L</isUTF8_CHAR>>. Surrogates, non-character code points, and
-non-Unicode code points are allowed.
+Like C<L<perlapi/utf8_to_uvchr_buf>>, but should only be called when it is
+known that the next character in the input UTF-8 string C<s> is well-formed
+(I<e.g.>, it passes C<L<perlapi/isUTF8_CHAR>>. Surrogates, non-character code
+points, and non-Unicode code points are allowed.
=cut
@@ -394,7 +409,7 @@ UTF-8 invariant, this function does not change the contents of C<*ep>.
*/
PERL_STATIC_INLINE bool
-S_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep)
+Perl_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep)
{
const U8* send;
const U8* x = s;
@@ -466,7 +481,7 @@ S_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep)
# if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678 \
|| BYTEORDER == 0x4321 || BYTEORDER == 0x87654321
- *ep = x + _variant_byte_number(* (PERL_UINTMAX_T *) x);
+ *ep = x + variant_byte_number(* (PERL_UINTMAX_T *) x);
assert(*ep >= s && *ep < send);
return FALSE;
@@ -504,7 +519,7 @@ S_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep)
#ifndef EBCDIC
PERL_STATIC_INLINE unsigned int
-S__variant_byte_number(PERL_UINTMAX_T word)
+Perl_variant_byte_number(PERL_UINTMAX_T word)
{
/* This returns the position in a word (0..7) of the first variant byte in
@@ -515,24 +530,7 @@ S__variant_byte_number(PERL_UINTMAX_T word)
/* Get just the msb bits of each byte */
word &= PERL_VARIANTS_WORD_MASK;
-# ifdef USING_MSVC6 /* VC6 has some issues with the normal code, and the
- easiest thing is to hide that from the callers */
- {
- unsigned int i;
- const U8 * s = (U8 *) &word;
- dTHX;
-
- for (i = 0; i < sizeof(word); i++ ) {
- if (s[i]) {
- return i;
- }
- }
-
- Perl_croak(aTHX_ "panic: %s: %d: unexpected zero word\n",
- __FILE__, __LINE__);
- }
-
-# elif BYTEORDER == 0x1234 || BYTEORDER == 0x12345678
+# if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678
/* Bytes are stored like
* Byte8 ... Byte2 Byte1
@@ -541,7 +539,7 @@ S__variant_byte_number(PERL_UINTMAX_T word)
* Isolate the lsb;
* https://stackoverflow.com/questions/757059/position-of-least-significant-bit-that-is-set
*
- * The word will look this this, with a rightmost set bit in position 's':
+ * The word will look like this, with a rightmost set bit in position 's':
* ('x's are don't cares)
* s
* x..x100..0
@@ -757,7 +755,7 @@ at this low a level. A valid use case could change that.
*/
PERL_STATIC_INLINE bool
-S_is_utf8_non_invariant_string(const U8* const s, STRLEN len)
+Perl_is_utf8_non_invariant_string(const U8* const s, STRLEN len)
{
const U8 * first_variant;
@@ -891,7 +889,7 @@ C<L</is_c9strict_utf8_string_loclen>>.
*/
PERL_STATIC_INLINE bool
-S_is_utf8_string_flags(const U8 *s, STRLEN len, const U32 flags)
+Perl_is_utf8_string_flags(const U8 *s, STRLEN len, const U32 flags)
{
const U8 * first_variant;
@@ -1013,7 +1011,7 @@ Perl_is_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el)
/*
-=for apidoc Am|STRLEN|isUTF8_CHAR|const U8 *s|const U8 *e
+=for apidoc isUTF8_CHAR
Evaluates to non-zero if the first few bytes of the string starting at C<s> and
looking no further than S<C<e - 1>> are well-formed UTF-8, as extended by Perl,
@@ -1042,7 +1040,7 @@ machines) is a valid UTF-8 character.
=cut
This uses an adaptation of the table and algorithm given in
-http://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which provides comprehensive
+https://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which provides comprehensive
documentation of the original version. A copyright notice for the original
version is given at the beginning of this file. The Perl adapation is
documented at the definition of PL_extended_utf8_dfa_tab[].
@@ -1050,7 +1048,7 @@ documented at the definition of PL_extended_utf8_dfa_tab[].
*/
PERL_STATIC_INLINE Size_t
-S_isUTF8_CHAR(const U8 * const s0, const U8 * const e)
+Perl_isUTF8_CHAR(const U8 * const s0, const U8 * const e)
{
const U8 * s = s0;
UV state = 0;
@@ -1078,7 +1076,7 @@ S_isUTF8_CHAR(const U8 * const s0, const U8 * const e)
#if defined(UV_IS_QUAD) || defined(EBCDIC)
if (NATIVE_UTF8_TO_I8(*s0) == 0xFF && e - s0 >= UTF8_MAXBYTES) {
- return _is_utf8_char_helper(s0, e, 0);
+ return is_utf8_char_helper(s0, e, 0);
}
#endif
@@ -1116,7 +1114,7 @@ C<L</is_strict_utf8_string_loclen>> to check entire strings.
=cut
This uses an adaptation of the tables and algorithm given in
-http://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which provides comprehensive
+https://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which provides comprehensive
documentation of the original version. A copyright notice for the original
version is given at the beginning of this file. The Perl adapation is
documented at the definition of strict_extended_utf8_dfa_tab[].
@@ -1124,7 +1122,7 @@ documented at the definition of strict_extended_utf8_dfa_tab[].
*/
PERL_STATIC_INLINE Size_t
-S_isSTRICT_UTF8_CHAR(const U8 * const s0, const U8 * const e)
+Perl_isSTRICT_UTF8_CHAR(const U8 * const s0, const U8 * const e)
{
const U8 * s = s0;
UV state = 0;
@@ -1156,7 +1154,7 @@ S_isSTRICT_UTF8_CHAR(const U8 * const s0, const U8 * const e)
/*
-=for apidoc Am|STRLEN|isC9_STRICT_UTF8_CHAR|const U8 *s|const U8 *e
+=for apidoc isC9_STRICT_UTF8_CHAR
Evaluates to non-zero if the first few bytes of the string starting at C<s> and
looking no further than S<C<e - 1>> are well-formed UTF-8 that represents some
@@ -1182,7 +1180,7 @@ C<L</is_c9strict_utf8_string_loclen>> to check entire strings.
=cut
This uses an adaptation of the tables and algorithm given in
-http://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which provides comprehensive
+https://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which provides comprehensive
documentation of the original version. A copyright notice for the original
version is given at the beginning of this file. The Perl adapation is
documented at the definition of PL_c9_utf8_dfa_tab[].
@@ -1190,7 +1188,7 @@ documented at the definition of PL_c9_utf8_dfa_tab[].
*/
PERL_STATIC_INLINE Size_t
-S_isC9_STRICT_UTF8_CHAR(const U8 * const s0, const U8 * const e)
+Perl_isC9_STRICT_UTF8_CHAR(const U8 * const s0, const U8 * const e)
{
const U8 * s = s0;
UV state = 0;
@@ -1242,7 +1240,7 @@ See also C<L</is_strict_utf8_string_loc>>.
*/
PERL_STATIC_INLINE bool
-S_is_strict_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el)
+Perl_is_strict_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el)
{
const U8 * first_variant;
@@ -1319,7 +1317,7 @@ See also C<L</is_c9strict_utf8_string_loc>>.
*/
PERL_STATIC_INLINE bool
-S_is_c9strict_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el)
+Perl_is_c9strict_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el)
{
const U8 * first_variant;
@@ -1401,7 +1399,7 @@ See also C<L</is_utf8_string_loc_flags>>.
*/
PERL_STATIC_INLINE bool
-S_is_utf8_string_loclen_flags(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el, const U32 flags)
+Perl_is_utf8_string_loclen_flags(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el, const U32 flags)
{
const U8 * first_variant;
@@ -1601,7 +1599,7 @@ Perl_utf8_hop_back(const U8 *s, SSize_t off, const U8 *start)
s--;
} while (UTF8_IS_CONTINUATION(*s) && s > start);
}
-
+
GCC_DIAG_IGNORE(-Wcast-qual)
return (U8 *)s;
GCC_DIAG_RESTORE
@@ -1691,7 +1689,7 @@ determined from just the first one or two bytes.
*/
PERL_STATIC_INLINE bool
-S_is_utf8_valid_partial_char_flags(const U8 * const s, const U8 * const e, const U32 flags)
+Perl_is_utf8_valid_partial_char_flags(const U8 * const s, const U8 * const e, const U32 flags)
{
PERL_ARGS_ASSERT_IS_UTF8_VALID_PARTIAL_CHAR_FLAGS;
@@ -1702,7 +1700,7 @@ S_is_utf8_valid_partial_char_flags(const U8 * const s, const U8 * const e, const
return FALSE;
}
- return cBOOL(_is_utf8_char_helper(s, e, flags));
+ return cBOOL(is_utf8_char_helper(s, e, flags));
}
/*
@@ -1759,7 +1757,7 @@ complete, valid characters found in the C<el> pointer.
*/
PERL_STATIC_INLINE bool
-S_is_utf8_fixed_width_buf_loclen_flags(const U8 * const s,
+Perl_is_utf8_fixed_width_buf_loclen_flags(const U8 * const s,
STRLEN len,
const U8 **ep,
STRLEN *el,
@@ -1780,7 +1778,7 @@ S_is_utf8_fixed_width_buf_loclen_flags(const U8 * const s,
}
PERL_STATIC_INLINE UV
-S_utf8n_to_uvchr_msgs(const U8 *s,
+Perl_utf8n_to_uvchr_msgs(const U8 *s,
STRLEN curlen,
STRLEN *retlen,
const U32 flags,
@@ -1794,7 +1792,7 @@ S_utf8n_to_uvchr_msgs(const U8 *s,
* will need to be called.
*
* This is an adaptation of the tables and algorithm given in
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which provides
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which provides
* comprehensive documentation of the original version. A copyright notice
* for the original version is given at the beginning of this file. The
* Perl adapation is documented at the definition of PL_strict_utf8_dfa_tab[].
@@ -1835,32 +1833,62 @@ S_utf8n_to_uvchr_msgs(const U8 *s,
*msgs = NULL;
}
- return uv;
+ return UNI_TO_NATIVE(uv);
}
/* Here is potentially problematic. Use the full mechanism */
return _utf8n_to_uvchr_msgs_helper(s0, curlen, retlen, flags, errors, msgs);
}
+PERL_STATIC_INLINE UV
+Perl_utf8_to_uvchr_buf_helper(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
+{
+ PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF_HELPER;
+
+ assert(s < send);
+
+ if (! ckWARN_d(WARN_UTF8)) {
+
+ /* EMPTY is not really allowed, and asserts on debugging builds. But
+ * on non-debugging we have to deal with it, and this causes it to
+ * return the REPLACEMENT CHARACTER, as the documentation indicates */
+ return utf8n_to_uvchr(s, send - s, retlen,
+ (UTF8_ALLOW_ANY | UTF8_ALLOW_EMPTY));
+ }
+ else {
+ UV ret = utf8n_to_uvchr(s, send - s, retlen, 0);
+ if (retlen && ret == 0 && *s != '\0') {
+ *retlen = (STRLEN) -1;
+ }
+
+ return ret;
+ }
+}
+
/* ------------------------------- perl.h ----------------------------- */
/*
=head1 Miscellaneous Functions
-=for apidoc AiR|bool|is_safe_syscall|const char *pv|STRLEN len|const char *what|const char *op_name
+=for apidoc is_safe_syscall
-Test that the given C<pv> doesn't contain any internal C<NUL> characters.
-If it does, set C<errno> to C<ENOENT>, optionally warn, and return FALSE.
+Test that the given C<pv> (with length C<len>) doesn't contain any internal
+C<NUL> characters.
+If it does, set C<errno> to C<ENOENT>, optionally warn using the C<syscalls>
+category, and return FALSE.
Return TRUE if the name is safe.
+C<what> and C<op_name> are used in any warning.
+
Used by the C<IS_SAFE_SYSCALL()> macro.
=cut
*/
PERL_STATIC_INLINE bool
-S_is_safe_syscall(pTHX_ const char *pv, STRLEN len, const char *what, const char *op_name) {
+Perl_is_safe_syscall(pTHX_ const char *pv, STRLEN len, const char *what, const char *op_name)
+{
/* While the Windows CE API provides only UCS-16 (or UTF-16) APIs
* perl itself uses xce*() functions which accept 8-bit strings.
*/
@@ -1901,7 +1929,8 @@ then calling:
#ifdef PERL_CORE
PERL_STATIC_INLINE bool
-S_should_warn_nl(const char *pv) {
+S_should_warn_nl(const char *pv)
+{
STRLEN len;
PERL_ARGS_ASSERT_SHOULD_WARN_NL;
@@ -1913,13 +1942,81 @@ S_should_warn_nl(const char *pv) {
#endif
+#if defined(PERL_IN_PP_C) || defined(PERL_IN_PP_HOT_C)
+
+PERL_STATIC_INLINE bool
+S_lossless_NV_to_IV(const NV nv, IV *ivp)
+{
+ /* This function determines if the input NV 'nv' may be converted without
+ * loss of data to an IV. If not, it returns FALSE taking no other action.
+ * But if it is possible, it does the conversion, returning TRUE, and
+ * storing the converted result in '*ivp' */
+
+ PERL_ARGS_ASSERT_LOSSLESS_NV_TO_IV;
+
+# if defined(Perl_isnan)
+
+ if (UNLIKELY(Perl_isnan(nv))) {
+ return FALSE;
+ }
+
+# endif
+
+ if (UNLIKELY(nv < IV_MIN) || UNLIKELY(nv > IV_MAX)) {
+ return FALSE;
+ }
+
+ if ((IV) nv != nv) {
+ return FALSE;
+ }
+
+ *ivp = (IV) nv;
+ return TRUE;
+}
+
+#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)
+
#define MAX_CHARSET_NAME_LENGTH 2
PERL_STATIC_INLINE const char *
-get_regex_charset_name(const U32 flags, STRLEN* const lenp)
+S_get_regex_charset_name(const U32 flags, STRLEN* const lenp)
{
+ PERL_ARGS_ASSERT_GET_REGEX_CHARSET_NAME;
+
/* Returns a string that corresponds to the name of the regex character set
* given by 'flags', and *lenp is set the length of that string, which
* cannot exceed MAX_CHARSET_NAME_LENGTH characters */
@@ -1940,6 +2037,8 @@ get_regex_charset_name(const U32 flags, STRLEN* const lenp)
return "?"; /* Unknown */
}
+#endif
+
/*
Return false if any get magic is on the SV other than taint magic.
@@ -1947,7 +2046,8 @@ Return false if any get magic is on the SV other than taint magic.
*/
PERL_STATIC_INLINE bool
-S_sv_only_taint_gmagic(SV *sv) {
+Perl_sv_only_taint_gmagic(SV *sv)
+{
MAGIC *mg = SvMAGIC(sv);
PERL_ARGS_ASSERT_SV_ONLY_TAINT_GMAGIC;
@@ -1966,11 +2066,28 @@ S_sv_only_taint_gmagic(SV *sv) {
/* ------------------ cop.h ------------------------------------------- */
+/* implement GIMME_V() macro */
+
+PERL_STATIC_INLINE U8
+Perl_gimme_V(pTHX)
+{
+ I32 cxix;
+ U8 gimme = (PL_op->op_flags & OPf_WANT);
+
+ if (gimme)
+ return gimme;
+ cxix = PL_curstackinfo->si_cxsubix;
+ if (cxix < 0)
+ return G_VOID;
+ assert(cxstack[cxix].blk_gimme & G_WANT);
+ return (cxstack[cxix].blk_gimme & G_WANT);
+}
+
/* Enter a block. Push a new base context and return its address. */
PERL_STATIC_INLINE PERL_CONTEXT *
-S_cx_pushblock(pTHX_ U8 type, U8 gimme, SV** sp, I32 saveix)
+Perl_cx_pushblock(pTHX_ U8 type, U8 gimme, SV** sp, I32 saveix)
{
PERL_CONTEXT * cx;
@@ -1997,7 +2114,7 @@ S_cx_pushblock(pTHX_ U8 type, U8 gimme, SV** sp, I32 saveix)
/* Exit a block (RETURN and LAST). */
PERL_STATIC_INLINE void
-S_cx_popblock(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_popblock(pTHX_ PERL_CONTEXT *cx)
{
PERL_ARGS_ASSERT_CX_POPBLOCK;
@@ -2022,7 +2139,7 @@ S_cx_popblock(pTHX_ PERL_CONTEXT *cx)
* *after* cx_pushblock() was called. */
PERL_STATIC_INLINE void
-S_cx_topblock(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_topblock(pTHX_ PERL_CONTEXT *cx)
{
PERL_ARGS_ASSERT_CX_TOPBLOCK;
@@ -2037,13 +2154,15 @@ S_cx_topblock(pTHX_ PERL_CONTEXT *cx)
PERL_STATIC_INLINE void
-S_cx_pushsub(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, bool hasargs)
+Perl_cx_pushsub(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, bool hasargs)
{
U8 phlags = CX_PUSHSUB_GET_LVALUE_MASK(Perl_was_lvalue_sub);
PERL_ARGS_ASSERT_CX_PUSHSUB;
PERL_DTRACE_PROBE_ENTRY(cv);
+ cx->blk_sub.old_cxsubix = PL_curstackinfo->si_cxsubix;
+ PL_curstackinfo->si_cxsubix = cx - PL_curstackinfo->si_cxstack;
cx->blk_sub.cv = cv;
cx->blk_sub.olddepth = CvDEPTH(cv);
cx->blk_sub.prevcomppad = PL_comppad;
@@ -2057,7 +2176,7 @@ S_cx_pushsub(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, bool hasargs)
/* subsets of cx_popsub() */
PERL_STATIC_INLINE void
-S_cx_popsub_common(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_popsub_common(pTHX_ PERL_CONTEXT *cx)
{
CV *cv;
@@ -2070,13 +2189,14 @@ S_cx_popsub_common(pTHX_ PERL_CONTEXT *cx)
CvDEPTH(cv) = cx->blk_sub.olddepth;
cx->blk_sub.cv = NULL;
SvREFCNT_dec(cv);
+ PL_curstackinfo->si_cxsubix = cx->blk_sub.old_cxsubix;
}
/* handle the @_ part of leaving a sub */
PERL_STATIC_INLINE void
-S_cx_popsub_args(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_popsub_args(pTHX_ PERL_CONTEXT *cx)
{
AV *av;
@@ -2098,7 +2218,7 @@ S_cx_popsub_args(pTHX_ PERL_CONTEXT *cx)
PERL_STATIC_INLINE void
-S_cx_popsub(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_popsub(pTHX_ PERL_CONTEXT *cx)
{
PERL_ARGS_ASSERT_CX_POPSUB;
assert(CxTYPE(cx) == CXt_SUB);
@@ -2112,10 +2232,12 @@ S_cx_popsub(pTHX_ PERL_CONTEXT *cx)
PERL_STATIC_INLINE void
-S_cx_pushformat(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, GV *gv)
+Perl_cx_pushformat(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, GV *gv)
{
PERL_ARGS_ASSERT_CX_PUSHFORMAT;
+ cx->blk_format.old_cxsubix = PL_curstackinfo->si_cxsubix;
+ PL_curstackinfo->si_cxsubix= cx - PL_curstackinfo->si_cxstack;
cx->blk_format.cv = cv;
cx->blk_format.retop = retop;
cx->blk_format.gv = gv;
@@ -2130,7 +2252,7 @@ S_cx_pushformat(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, GV *gv)
PERL_STATIC_INLINE void
-S_cx_popformat(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_popformat(pTHX_ PERL_CONTEXT *cx)
{
CV *cv;
GV *dfout;
@@ -2149,14 +2271,17 @@ S_cx_popformat(pTHX_ PERL_CONTEXT *cx)
cx->blk_format.cv = NULL;
--CvDEPTH(cv);
SvREFCNT_dec_NN(cv);
+ PL_curstackinfo->si_cxsubix = cx->blk_format.old_cxsubix;
}
PERL_STATIC_INLINE void
-S_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
+Perl_cx_pusheval(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;
@@ -2171,7 +2296,7 @@ S_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv)
PERL_STATIC_INLINE void
-S_cx_popeval(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_popeval(pTHX_ PERL_CONTEXT *cx)
{
SV *sv;
@@ -2192,6 +2317,7 @@ S_cx_popeval(pTHX_ PERL_CONTEXT *cx)
cx->blk_eval.old_namesv = NULL;
SvREFCNT_dec_NN(sv);
}
+ PL_curstackinfo->si_cxsubix = cx->blk_eval.old_cxsubix;
}
@@ -2203,7 +2329,7 @@ S_cx_popeval(pTHX_ PERL_CONTEXT *cx)
*/
PERL_STATIC_INLINE void
-S_cx_pushloop_plain(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_pushloop_plain(pTHX_ PERL_CONTEXT *cx)
{
PERL_ARGS_ASSERT_CX_PUSHLOOP_PLAIN;
cx->blk_loop.my_op = cLOOP;
@@ -2215,7 +2341,7 @@ S_cx_pushloop_plain(pTHX_ PERL_CONTEXT *cx)
*/
PERL_STATIC_INLINE void
-S_cx_pushloop_for(pTHX_ PERL_CONTEXT *cx, void *itervarp, SV* itersave)
+Perl_cx_pushloop_for(pTHX_ PERL_CONTEXT *cx, void *itervarp, SV* itersave)
{
PERL_ARGS_ASSERT_CX_PUSHLOOP_FOR;
@@ -2233,7 +2359,7 @@ S_cx_pushloop_for(pTHX_ PERL_CONTEXT *cx, void *itervarp, SV* itersave)
/* pop all loop types, including plain */
PERL_STATIC_INLINE void
-S_cx_poploop(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_poploop(pTHX_ PERL_CONTEXT *cx)
{
PERL_ARGS_ASSERT_CX_POPLOOP;
@@ -2266,7 +2392,7 @@ S_cx_poploop(pTHX_ PERL_CONTEXT *cx)
PERL_STATIC_INLINE void
-S_cx_pushwhen(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_pushwhen(pTHX_ PERL_CONTEXT *cx)
{
PERL_ARGS_ASSERT_CX_PUSHWHEN;
@@ -2275,7 +2401,7 @@ S_cx_pushwhen(pTHX_ PERL_CONTEXT *cx)
PERL_STATIC_INLINE void
-S_cx_popwhen(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_popwhen(pTHX_ PERL_CONTEXT *cx)
{
PERL_ARGS_ASSERT_CX_POPWHEN;
assert(CxTYPE(cx) == CXt_WHEN);
@@ -2287,7 +2413,7 @@ S_cx_popwhen(pTHX_ PERL_CONTEXT *cx)
PERL_STATIC_INLINE void
-S_cx_pushgiven(pTHX_ PERL_CONTEXT *cx, SV *orig_defsv)
+Perl_cx_pushgiven(pTHX_ PERL_CONTEXT *cx, SV *orig_defsv)
{
PERL_ARGS_ASSERT_CX_PUSHGIVEN;
@@ -2297,7 +2423,7 @@ S_cx_pushgiven(pTHX_ PERL_CONTEXT *cx, SV *orig_defsv)
PERL_STATIC_INLINE void
-S_cx_popgiven(pTHX_ PERL_CONTEXT *cx)
+Perl_cx_popgiven(pTHX_ PERL_CONTEXT *cx)
{
SV *sv;
@@ -2396,6 +2522,36 @@ Perl_foldEQ_locale(const char *s1, const char *s2, I32 len)
return 1;
}
+/*
+=for apidoc my_strnlen
+
+The C library C<strnlen> if available, or a Perl implementation of it.
+
+C<my_strnlen()> computes the length of the string, up to C<maxlen>
+characters. It will never attempt to address more than C<maxlen>
+characters, making it suitable for use with strings that are not
+guaranteed to be NUL-terminated.
+
+=cut
+
+Description stolen from http://man.openbsd.org/strnlen.3,
+implementation stolen from PostgreSQL.
+*/
+#ifndef HAS_STRNLEN
+
+PERL_STATIC_INLINE Size_t
+Perl_my_strnlen(const char *str, Size_t maxlen)
+{
+ const char *end = (char *) memchr(str, '\0', maxlen);
+
+ PERL_ARGS_ASSERT_MY_STRNLEN;
+
+ if (end == NULL) return maxlen;
+ return end - str;
+}
+
+#endif
+
#if ! defined (HAS_MEMRCHR) && (defined(PERL_CORE) || defined(PERL_EXT))
PERL_STATIC_INLINE void *
@@ -2419,6 +2575,59 @@ S_my_memrchr(const char * s, const char c, const STRLEN len)
#endif
+PERL_STATIC_INLINE char *
+Perl_mortal_getenv(const char * str)
+{
+ /* 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.
+ *
+ * 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..
+ *
+ * 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().
+ *
+ * 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
+ * there shouldn't be anything else going on, so plain getenv is safe AS
+ * LONG AS the caller acts on the return before calling it again. */
+
+ char * ret;
+ dTHX;
+
+ PERL_ARGS_ASSERT_MORTAL_GETENV;
+
+ /* Can't mortalize without stacks. khw believes that no other threads
+ * should be running, so no need to lock things, and this may be during a
+ * phase when locking isn't even available */
+ if (UNLIKELY(PL_scopestack_ix == 0)) {
+ return getenv(str);
+ }
+
+ ENV_LOCK;
+
+ ret = getenv(str);
+
+ if (ret != NULL) {
+ ret = SvPVX(sv_2mortal(newSVpv(ret, 0)));
+ }
+
+ ENV_UNLOCK;
+ return ret;
+}
+
/*
* ex: set ts=8 sts=4 sw=4 et:
*/
diff --git a/gnu/usr.bin/perl/install_lib.pl b/gnu/usr.bin/perl/install_lib.pl
index 8ca801b00a6..ac17bd81d81 100644
--- a/gnu/usr.bin/perl/install_lib.pl
+++ b/gnu/usr.bin/perl/install_lib.pl
@@ -6,7 +6,7 @@
use strict;
use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $Is_Darwin $Is_NetWare $Is_AmigaOS
%opts $packlist);
-use subs qw(unlink link chmod chown);
+use subs qw(unlink link chmod);
require File::Path;
require File::Copy;
@@ -99,9 +99,6 @@ sub link {
unless -f $to and (chmod(0666, $to), unlink $to)
and File::Copy::copy($from, $to) and ++$success;
}
- if (defined($opts{uid}) || defined($opts{gid})) {
- chown($opts{uid}, $opts{gid}, $to) if $success;
- }
$packlist->{$xto} = { type => 'file' };
}
$success;
@@ -117,16 +114,6 @@ sub chmod {
unless $opts{notify};
}
-sub chown {
- my($uid,$gid,$name) = @_;
-
- return if ($^O eq 'dos');
- printf " chown %s:%s %s\n", $uid, $gid, $name if $opts{verbose};
- CORE::chown($uid,$gid,$name)
- || warn sprintf("Couldn't chown %s:%s %s: $!\n", $uid, $gid, $name)
- unless $opts{notify};
-}
-
sub samepath {
my($p1, $p2) = @_;
@@ -158,8 +145,7 @@ sub safe_rename {
}
sub mkpath {
- File::Path::make_path(shift, {owner=>$opts{uid}, group=>$opts{gid},
- mode=>0777, verbose=>$opts{verbose}}) unless $opts{notify};
+ File::Path::mkpath(shift , $opts{verbose}, 0777) unless $opts{notify};
}
sub unixtoamiga
diff --git a/gnu/usr.bin/perl/installperl b/gnu/usr.bin/perl/installperl
index 06dda060232..6cd65a09238 100644
--- a/gnu/usr.bin/perl/installperl
+++ b/gnu/usr.bin/perl/installperl
@@ -77,8 +77,8 @@ $opts{destdir} = '';
my $usage = 0;
if (!GetOptions(\%opts, 'notify|n', 'strip|s', 'silent|S',
'skip-otherperls|o', 'force|f', 'verbose|V', 'archname|A',
- 'netware', 'nopods|p', 'destdir:s', 'help|h|?', 'user|u:s',
- 'group|g:s', 'versiononly|v' => \$versiononly, '<>' => sub {
+ 'netware', 'nopods|p', 'destdir:s', 'help|h|?',
+ 'versiononly|v' => \$versiononly, '<>' => sub {
if ($_[0] eq '+v') {
$versiononly = 0;
} else {
@@ -107,8 +107,6 @@ Usage $0: [switches]
-A Also install perl with the architecture's name in the perl binary's
name.
-p Don't install the pod files. [This will break use diagnostics;]
- -g group install files with the specified group
- -u user install files with the specified user
-netware Install correctly on a Netware server.
-destdir Prefix installation directories by this string.
-h Display this help message.
@@ -116,8 +114,6 @@ EOT
exit $usage;
}
}
-$opts{'uid'} = getpwnam($opts{'user'}) if exists($opts{'user'});
-$opts{'gid'} = getgrnam($opts{'group'}) if exists($opts{'group'});
$versiononly = 1 if $Config{versiononly} && !defined $versiononly;
my (@scripts, @tolink);
@@ -157,7 +153,7 @@ if ((-e "testcompile") && (defined($ENV{'COMPILE'}))) {
}
# Exclude nonxs extensions that are not architecture dependent
-my @nonxs = grep(!/^(Errno|IO\/Compress)$/, split(' ', $Config{'nonxs_ext'}));
+my @nonxs = grep(!/^Errno$/, split(' ', $Config{'nonxs_ext'}));
my @ext_dirs = qw(cpan dist ext);
foreach my $ext_dir (@ext_dirs) {
@@ -203,7 +199,7 @@ my $installprivlib = "$opts{destdir}$Config{installprivlib}";
my $installarchlib = "$opts{destdir}$Config{installarchlib}";
my $installsitelib = "$opts{destdir}$Config{installsitelib}";
my $installsitearch = "$opts{destdir}$Config{installsitearch}";
-my $installman1dir = "none";
+my $installman1dir = "$opts{destdir}$Config{installman1dir}";
my $man1ext = $Config{man1ext};
my $libperl = $Config{libperl};
# Shared library and dynamic loading suffixes.
@@ -243,6 +239,8 @@ if ($Is_VMS) { # Hang in there until File::Spec hits the big time
$installbin || die "No installbin directory in config.sh\n";
-d $installbin || mkpath($installbin);
-d $installbin || $opts{notify} || die "$installbin is not a directory\n";
+-w $installbin || $opts{notify} || die "$installbin is not writable by you\n"
+ unless $installbin =~ m#^/afs/# || $opts{notify};
if (!$Is_NetWare) {
if (!$Is_VMS) {
@@ -255,9 +253,9 @@ else {
}
}
-#-f 't/rantests' || $Is_W32
-# || warn "WARNING: You've never run 'make test' or",
-# " some tests failed! (Installing anyway.)\n";
+-f 't/rantests' || $Is_W32
+ || warn "WARNING: You've never run 'make test' or",
+ " some tests failed! (Installing anyway.)\n";
} #if (!$Is_NetWare)
# This will be used to store the packlist
@@ -283,10 +281,6 @@ if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) {
$packlist->{"$Config{installbin}/$perldll"} = { type => 'file' };
} # if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin)
-# Get the install command and flags from the environment
-my @installcmd = $ENV{"INSTALL"} || "install";
-push(@installcmd, $ENV{"INSTALL_COPY"} || "-c");
-
# First we install the version-numbered executables.
if ($Is_VMS) {
@@ -307,8 +301,11 @@ if ($Is_VMS) {
}
elsif ($^O ne 'dos') {
if (!$Is_NetWare) {
- my $ver = ''; # don't install a versioned perl binary
- install("perl$exe_ext", "$installbin/$perl_verbase$ver$exe_ext", "0755");
+ safe_unlink("$installbin/$perl_verbase$ver$exe_ext");
+ copy("perl$exe_ext", "$installbin/$perl_verbase$ver$exe_ext");
+ strip("$installbin/$perl_verbase$ver$exe_ext");
+ fix_dep_names("$installbin/$perl_verbase$ver$exe_ext");
+ chmod(0755, "$installbin/$perl_verbase$ver$exe_ext");
}
else {
# If installing onto a NetWare server
@@ -381,9 +378,7 @@ elsif ($Is_Cygwin) { # On Cygwin symlink it to CORE to make Makefile happy
@corefiles = <*.h>;
} else {
# [als] hard-coded 'libperl' name... not good!
- #@corefiles = <*.h libperl*.* perl*$Config{lib_ext}>;
- @corefiles = <*.h *.inc perl*$Config{lib_ext}>;
- install($libperl, "$opts{destdir}$Config{glibpth}/$libperl", "0444");
+ @corefiles = <*.h libperl*.* perl*$Config{lib_ext}>;
# AIX needs perl.exp installed as well.
push(@corefiles,'perl.exp') if $^O eq 'aix';
@@ -412,8 +407,7 @@ if ($Is_W32) { #linking lib isn't made in root but in CORE on Win32
# Install main perl executables
# Make links to ordinary names if installbin directory isn't current directory.
-if (0) { # don't install a versioned perl binary
-#if (! $versiononly && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_VMS && ! $Is_NetWare) {
+if (! $versiononly && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_VMS && ! $Is_NetWare) {
safe_unlink("$installbin/$perl$exe_ext", "$installbin/suid$perl$exe_ext");
if ($^O eq 'vos') {
# VOS doesn't support hard links, so use a symlink.
@@ -551,9 +545,6 @@ if (!$opts{nopods} && (!$versiononly || ($installprivlib =~ m/\Q$vershort/))) {
$packlist->write() unless $opts{notify};
-if (defined($opts{uid}) || defined($opts{gid})) {
- chown($opts{uid}, $opts{gid}, $packlist->packlist_file());
-}
print " Installation complete\n" if $opts{verbose};
exit 0;
@@ -592,7 +583,6 @@ sub safe_unlink {
sub copy {
my($from,$to) = @_;
- my($success) = 0;
my $xto = $to;
$xto =~ s/^\Q$opts{destdir}\E//;
@@ -600,32 +590,12 @@ sub copy {
unless $opts{silent};
print " creating new version of $xto\n"
if $Is_VMS and -e $to and !$opts{silent};
- unless ($opts{notify} or File::Copy::copy($from, $to) and ++$success) {
+ unless ($opts{notify} or File::Copy::copy($from, $to)) {
# Might have been that F::C::c can't overwrite the target
warn "Couldn't copy $from to $to: $!\n"
unless -f $to and (chmod(0666, $to), unlink $to)
- and File::Copy::copy($from, $to) and ++$success;
+ and File::Copy::copy($from, $to);
}
- if (defined($opts{uid}) || defined($opts{gid})) {
- chown($opts{uid}, $opts{gid}, $to) if $success;
- }
- $packlist->{$xto} = { type => 'file' };
-}
-
-sub install {
- my($from,$to,$mode) = @_;
-
- my $xto = $to;
- my $cmd = join(' ', @installcmd);
- $cmd .= " -m $mode" if $mode;
- $cmd .= " -o $opts{uid}" if defined($opts{uid});
- $cmd .= " -g $opts{gid}" if defined($opts{gid});
- $cmd .= " -s" if $opts{strip};
- $cmd .= " $from $to";
- $xto =~ s/^\Q$opts{destdir}\E// if $opts{destdir};
- print $opts{verbose} ? " install $from $xto\n" : " $xto\n" unless $opts{silent};
- system($cmd);
- warn "Couldn't $cmd\n" if $?;
$packlist->{$xto} = { type => 'file' };
}
@@ -657,10 +627,6 @@ sub installlib {
return;
}
- # If we have different install version, install that instead
- return if -e "$_.install";
- $name =~ s/\.install$//;
-
# ignore patch backups, RCS files, emacs backup & temp files and the
# .exists files, .PL files, and test files.
return if $name =~ m{\.orig$|\.rej$|~$|^#.+#$|,v$|^\.exists|\.PL$|\.plc$|\.t$|^test\.pl$|^dbm_filter_util\.pl$|^filter-util\.pl$|^uupacktool\.pl$|^\.gitignore$} ||
diff --git a/gnu/usr.bin/perl/intrpvar.h b/gnu/usr.bin/perl/intrpvar.h
index e33036601b0..23de9d9cee9 100644
--- a/gnu/usr.bin/perl/intrpvar.h
+++ b/gnu/usr.bin/perl/intrpvar.h
@@ -75,7 +75,7 @@ PERLVAR(I, multideref_pc, UNOP_AUX_item *)
PERLVAR(I, curpm, PMOP *) /* what to do \ interps in REs from */
PERLVAR(I, curpm_under, PMOP *) /* what to do \ interps in REs from */
-PERLVAR(I, tainting, bool) /* doing taint checks */
+PERLVAR(I, tainting, bool) /* ? doing taint checks */
PERLVARI(I, tainted, bool, FALSE) /* using variables controlled by $< */
/* PL_delaymagic is currently used for two purposes: to assure simultaneous
@@ -93,6 +93,14 @@ PERLVARI(I, tainted, bool, FALSE) /* using variables controlled by $< */
*/
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 */
@@ -117,11 +125,27 @@ PERLVAR(I, dowarn, U8)
PERLVARI(I, utf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */
#undef PERL___I
+/*
+=for apidoc Amn|HV*|PL_curstash
+
+The stash for the package code will be compiled into.
+
+=cut
+*/
/* Stashes */
PERLVAR(I, defstash, HV *) /* main symbol table */
PERLVAR(I, curstash, HV *) /* symbol table for current package */
+/*
+=for apidoc Amn|COP*|PL_curcop
+
+The currently active COP (control op) roughly representing the current
+statement in the source.
+
+=cut
+*/
+
PERLVAR(I, curcop, COP *)
PERLVAR(I, curstack, AV *) /* THE STACK */
PERLVAR(I, curstackinfo, PERL_SI *) /* current stack + context */
@@ -181,7 +205,6 @@ PERLVARA(I, sv_immortals, 4, SV)
PERLVAR(I, padname_undef, PADNAME)
PERLVAR(I, padname_const, PADNAME)
PERLVAR(I, Sv, SV *) /* used to hold temporary values */
-
PERLVAR(I, parser, yy_parser *) /* current parser state */
PERLVAR(I, stashcache, HV *) /* Cache to speed up S_method_common */
@@ -257,6 +280,42 @@ PERLVAR(I, efloatsize, STRLEN)
PERLVARI(I, dumpindent, U16, 4) /* number of blanks per dump
indentation level */
+/*
+=for apidoc Amn|U8|PL_exit_flags
+
+Contains flags controlling perl's behaviour on exit():
+
+=over
+
+=item * C<PERL_EXIT_DESTRUCT_END>
+
+If set, END blocks are executed when the interpreter is destroyed.
+This is normally set by perl itself after the interpreter is
+constructed.
+
+=item * C<PERL_EXIT_ABORT>
+
+Call C<abort()> on exit. This is used internally by perl itself to
+abort if exit is called while processing exit.
+
+=item * C<PERL_EXIT_WARN>
+
+Warn on exit.
+
+=item * C<PERL_EXIT_EXPECTED>
+
+Set by the L<perlfunc/exit> operator.
+
+=back
+
+=for apidoc Amnh||PERL_EXIT_EXPECTED
+=for apidoc Amnh||PERL_EXIT_ABORT
+=for apidoc Amnh||PERL_EXIT_DESTRUCT_END
+=for apidoc Amnh||PERL_EXIT_WARN
+
+=cut
+*/
+
PERLVAR(I, exit_flags, U8) /* was exit() unexpected, etc. */
PERLVAR(I, utf8locale, bool) /* utf8 locale detected */
@@ -557,7 +616,11 @@ PERLVAR(I, pidstatus, HV *) /* pid-to-status mappings for waitpid */
#endif
PERLVAR(I, osname, char *) /* operating system */
-PERLVAR(I, sighandlerp, Sighandler_t)
+PERLVAR(I, sighandlerp, Sighandler_t)
+/* these two are provided only to solve library linkage issues; they
+ * should not be hooked by user code */
+PERLVAR(I, sighandler1p, Sighandler1_t)
+PERLVAR(I, sighandler3p, Sighandler3_t)
PERLVARA(I, body_roots, PERL_ARENA_ROOTS_SIZE, void*) /* array of body roots */
@@ -565,6 +628,14 @@ PERLVAR(I, debug, volatile U32) /* flags given to -D switch */
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 */
@@ -619,8 +690,28 @@ PERLVARI(I, phase, enum perl_phase, PERL_PHASE_CONSTRUCT)
PERLVARI(I, in_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */
-/* This value may be set when embedding for full cleanup */
-/* 0=none, 1=full, 2=full with checks */
+/*
+=for apidoc Amn|signed char|PL_perl_destruct_level
+
+This value may be set when embedding for full cleanup.
+
+Possible values:
+
+=over
+
+=item * 0 - none
+
+=item * 1 - full
+
+=item * 2 or greater - full with checks.
+
+=back
+
+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.
+
+=cut
+*/
/* mod_perl is special, and also assigns a meaning -1 */
PERLVARI(I, perl_destruct_level, signed char, 0)
@@ -641,15 +732,6 @@ PERLVARI(I, underlying_numeric_obj, locale_t, NULL)
# endif
#endif /* !USE_LOCALE_NUMERIC */
-/* utf8 character class swashes */
-PERLVAR(I, seen_deprecated_macro, HV *)
-
-PERLVAR(I, last_swash_hv, HV *)
-PERLVAR(I, last_swash_tmps, U8 *)
-PERLVAR(I, last_swash_slen, STRLEN)
-PERLVARA(I, last_swash_key,UTF8_MAXBYTES-1, U8)
-PERLVAR(I, last_swash_klen, U8) /* Only needs to store 0-12 */
-
#ifdef FCRYPT
PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */
#else
@@ -711,8 +793,6 @@ PERLVARI(I, known_layers, PerlIO_list_t *, NULL)
PERLVARI(I, def_layerlist, PerlIO_list_t *, NULL)
#endif
-PERLVAR(I, sort_RealCmp, SVCOMPARE_t)
-
PERLVARI(I, checkav_save, AV *, NULL) /* save CHECK{}s when compiling */
PERLVARI(I, unitcheckav_save, AV *, NULL)
/* save UNITCHECK{}s when compiling */
@@ -722,6 +802,8 @@ PERLVARI(I, clocktick, long, 0) /* this many times() ticks in a second */
/* Hooks to shared SVs and locks. */
PERLVARI(I, sharehook, share_proc_t, Perl_sv_nosharing)
PERLVARI(I, lockhook, share_proc_t, Perl_sv_nosharing)
+
+GCC_DIAG_IGNORE(-Wdeprecated-declarations)
#ifdef NO_MATHOMS
# define PERL_UNLOCK_HOOK Perl_sv_nosharing
#else
@@ -730,6 +812,8 @@ PERLVARI(I, lockhook, share_proc_t, Perl_sv_nosharing)
#endif
PERLVARI(I, unlockhook, share_proc_t, PERL_UNLOCK_HOOK)
+GCC_DIAG_RESTORE
+
PERLVARI(I, threadhook, thrhook_proc_t, Perl_nothreadhook)
/* Can shared object be destroyed */
@@ -815,6 +899,57 @@ PERLVARI(I, dump_re_max_len, STRLEN, 60)
PERLVAR(I, internal_random_state, PL_RANDOM_STATE_TYPE)
+PERLVARA(I, TR_SPECIAL_HANDLING_UTF8, UTF8_MAXBYTES, char)
+
+PERLVAR(I, AboveLatin1, SV *)
+PERLVAR(I, Assigned_invlist, SV *)
+PERLVAR(I, GCB_invlist, SV *)
+PERLVAR(I, HasMultiCharFold, SV *)
+PERLVAR(I, InMultiCharFold, SV *)
+PERLVAR(I, Latin1, SV *)
+PERLVAR(I, LB_invlist, SV *)
+PERLVAR(I, SB_invlist, SV *)
+PERLVAR(I, SCX_invlist, SV *)
+PERLVAR(I, UpperLatin1, SV *) /* Code points 128 - 255 */
+
+/* List of characters that participate in any fold defined by Unicode */
+PERLVAR(I, in_some_fold, SV *)
+
+/* Everything that folds to a given character, for case insensitivity regex
+ * matching */
+PERLVAR(I, utf8_foldclosures, SV *)
+
+PERLVAR(I, utf8_idcont, SV *)
+PERLVAR(I, utf8_idstart, SV *)
+PERLVAR(I, utf8_perl_idcont, SV *)
+PERLVAR(I, utf8_perl_idstart, SV *)
+PERLVAR(I, utf8_xidcont, SV *)
+PERLVAR(I, utf8_xidstart, SV *)
+PERLVAR(I, WB_invlist, SV *)
+PERLVARA(I, XPosix_ptrs, POSIX_CC_COUNT, SV *)
+PERLVARA(I, Posix_ptrs, POSIX_CC_COUNT, SV *)
+PERLVAR(I, utf8_toupper, SV *)
+PERLVAR(I, utf8_totitle, SV *)
+PERLVAR(I, utf8_tolower, SV *)
+PERLVAR(I, utf8_tofold, SV *)
+PERLVAR(I, utf8_tosimplefold, SV *)
+PERLVAR(I, utf8_charname_begin, SV *)
+PERLVAR(I, utf8_charname_continue, SV *)
+PERLVAR(I, utf8_mark, SV *)
+PERLVARI(I, InBitmap, SV *, NULL)
+PERLVAR(I, CCC_non0_non230, SV *)
+PERLVAR(I, Private_Use, SV *)
+
+#ifdef HAS_MBRLEN
+PERLVAR(I, mbrlen_ps, mbstate_t)
+#endif
+#ifdef HAS_MBRTOWC
+PERLVAR(I, mbrtowc_ps, mbstate_t)
+#endif
+#ifdef HAS_WCRTOMB
+PERLVAR(I, wcrtomb_ps, mbstate_t)
+#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. */
diff --git a/gnu/usr.bin/perl/invlist_inline.h b/gnu/usr.bin/perl/invlist_inline.h
index 4bab3d83a69..f6ac8195335 100644
--- a/gnu/usr.bin/perl/invlist_inline.h
+++ b/gnu/usr.bin/perl/invlist_inline.h
@@ -9,7 +9,13 @@
#ifndef PERL_INVLIST_INLINE_H_
#define PERL_INVLIST_INLINE_H_
-#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_PP_C)
+#if defined(PERL_IN_UTF8_C) \
+ || defined(PERL_IN_REGCOMP_C) \
+ || defined(PERL_IN_REGEXEC_C) \
+ || defined(PERL_IN_TOKE_C) \
+ || defined(PERL_IN_PP_C) \
+ || defined(PERL_IN_OP_C) \
+ || defined(PERL_IN_DOOP_C)
/* An element is in an inversion list iff its index is even numbered: 0, 2, 4,
* etc */
@@ -86,13 +92,157 @@ S_invlist_array(SV* const invlist)
return ((UV *) SvPVX(invlist) + *get_invlist_offset_addr(invlist));
}
-# if defined(PERL_IN_REGEXEC_C)
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_DOOP_C)
+
+PERL_STATIC_INLINE void
+S_invlist_extend(pTHX_ SV* const invlist, const UV new_max)
+{
+ /* Grow the maximum size of an inversion list */
+
+ PERL_ARGS_ASSERT_INVLIST_EXTEND;
+
+ assert(SvTYPE(invlist) == SVt_INVLIST);
+
+ /* Add one to account for the zero element at the beginning which may not
+ * be counted by the calling parameters */
+ SvGROW((SV *)invlist, TO_INTERNAL_SIZE(new_max + 1));
+}
+
+PERL_STATIC_INLINE void
+S_invlist_set_len(pTHX_ SV* const invlist, const UV len, const bool offset)
+{
+ /* Sets the current number of elements stored in the inversion list.
+ * Updates SvCUR correspondingly */
+ PERL_UNUSED_CONTEXT;
+ PERL_ARGS_ASSERT_INVLIST_SET_LEN;
+
+ assert(SvTYPE(invlist) == SVt_INVLIST);
+
+ SvCUR_set(invlist,
+ (len == 0)
+ ? 0
+ : TO_INTERNAL_SIZE(len + offset));
+ assert(SvLEN(invlist) == 0 || SvCUR(invlist) <= SvLEN(invlist));
+}
+
+PERL_STATIC_INLINE SV*
+S_add_cp_to_invlist(pTHX_ SV* invlist, const UV cp) {
+ return _add_range_to_invlist(invlist, cp, cp);
+}
+
+PERL_STATIC_INLINE UV
+S_invlist_highest(SV* const invlist)
+{
+ /* Returns the highest code point that matches an inversion list. This API
+ * has an ambiguity, as it returns 0 under either the highest is actually
+ * 0, or if the list is empty. If this distinction matters to you, check
+ * for emptiness before calling this function */
+
+ UV len = _invlist_len(invlist);
+ UV *array;
+
+ PERL_ARGS_ASSERT_INVLIST_HIGHEST;
+
+ if (len == 0) {
+ return 0;
+ }
+
+ array = invlist_array(invlist);
+
+ /* The last element in the array in the inversion list always starts a
+ * range that goes to infinity. That range may be for code points that are
+ * matched in the inversion list, or it may be for ones that aren't
+ * matched. In the latter case, the highest code point in the set is one
+ * less than the beginning of this range; otherwise it is the final element
+ * of this range: infinity */
+ return (ELEMENT_RANGE_MATCHES_INVLIST(len - 1))
+ ? UV_MAX
+ : array[len - 1] - 1;
+}
+
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C)
+
+PERL_STATIC_INLINE STRLEN*
+S_get_invlist_iter_addr(SV* invlist)
+{
+ /* Return the address of the UV that contains the current iteration
+ * position */
+
+ PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR;
+
+ assert(is_invlist(invlist));
+
+ return &(((XINVLIST*) SvANY(invlist))->iterator);
+}
+
+PERL_STATIC_INLINE void
+S_invlist_iterinit(SV* invlist) /* Initialize iterator for invlist */
+{
+ PERL_ARGS_ASSERT_INVLIST_ITERINIT;
+
+ *get_invlist_iter_addr(invlist) = 0;
+}
+
+PERL_STATIC_INLINE void
+S_invlist_iterfinish(SV* invlist)
+{
+ /* Terminate iterator for invlist. This is to catch development errors.
+ * Any iteration that is interrupted before completed should call this
+ * function. Functions that add code points anywhere else but to the end
+ * of an inversion list assert that they are not in the middle of an
+ * iteration. If they were, the addition would make the iteration
+ * problematical: if the iteration hadn't reached the place where things
+ * were being added, it would be ok */
+
+ PERL_ARGS_ASSERT_INVLIST_ITERFINISH;
+
+ *get_invlist_iter_addr(invlist) = (STRLEN) UV_MAX;
+}
+
+STATIC bool
+S_invlist_iternext(SV* invlist, UV* start, UV* end)
+{
+ /* An C<invlist_iterinit> call on <invlist> must be used to set this up.
+ * This call sets in <*start> and <*end>, the next range in <invlist>.
+ * Returns <TRUE> if successful and the next call will return the next
+ * range; <FALSE> if was already at the end of the list. If the latter,
+ * <*start> and <*end> are unchanged, and the next call to this function
+ * will start over at the beginning of the list */
+
+ STRLEN* pos = get_invlist_iter_addr(invlist);
+ UV len = _invlist_len(invlist);
+ UV *array;
+
+ PERL_ARGS_ASSERT_INVLIST_ITERNEXT;
+
+ if (*pos >= len) {
+ *pos = (STRLEN) UV_MAX; /* Force iterinit() to be required next time */
+ return FALSE;
+ }
+
+ array = invlist_array(invlist);
+
+ *start = array[(*pos)++];
+
+ if (*pos >= len) {
+ *end = UV_MAX;
+ }
+ else {
+ *end = array[(*pos)++] - 1;
+ }
+
+ return TRUE;
+}
+
+#endif
+
+#ifndef PERL_IN_REGCOMP_C
/* These symbols are only needed later in regcomp.c */
# undef TO_INTERNAL_SIZE
# undef FROM_INTERNAL_SIZE
-# endif
-
#endif
#endif /* PERL_INVLIST_INLINE_H_ */
diff --git a/gnu/usr.bin/perl/iperlsys.h b/gnu/usr.bin/perl/iperlsys.h
index ee2c503dff5..c176ad5c559 100644
--- a/gnu/usr.bin/perl/iperlsys.h
+++ b/gnu/usr.bin/perl/iperlsys.h
@@ -3,9 +3,8 @@
*
* This file defines the system level functionality that perl needs.
*
- * When using C, this definition is in the form of a set of macros
- * that can be #defined to the system-level function (or a wrapper
- * provided elsewhere).
+ * When using C, this definition is in the form of a set of macros that can be
+ * #defined to the system-level function (or a wrapper provided elsewhere).
*
* GSAR 21-JUN-98
*/
@@ -19,8 +18,8 @@
* XXX := functional group
* YYY := stdlib/OS function name
*
- * Continuing with the theme of PerlIO, all OS functionality was
- * encapsulated into one of several interfaces.
+ * Continuing with the theme of PerlIO, all OS functionality was encapsulated
+ * into one of several interfaces.
*
* PerlIO - stdio
* PerlLIO - low level I/O
@@ -50,11 +49,14 @@
*/
#include "perlio.h"
+typedef Signal_t (*Sighandler1_t) (int);
+typedef Signal_t (*Sighandler3_t) (int, Siginfo_t*, void*);
+
#ifndef Sighandler_t
-# if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
-typedef Signal_t (*Sighandler_t) (int, siginfo_t*, void*);
+# ifdef PERL_USE_3ARG_SIGHANDLER
+typedef Sighandler3_t Sighandler_t;
# else
-typedef Signal_t (*Sighandler_t) (int);
+typedef Sighandler1_t Sighandler_t;
# endif
#endif
@@ -63,7 +65,7 @@ typedef Signal_t (*Sighandler_t) (int);
/* IPerlStdIO */
struct IPerlStdIO;
struct IPerlStdIOInfo;
-typedef FILE* (*LPStdin)(struct IPerlStdIO*);
+typedef FILE* (*LPStdin)(struct IPerlStdIO*);
typedef FILE* (*LPStdout)(struct IPerlStdIO*);
typedef FILE* (*LPStderr)(struct IPerlStdIO*);
typedef FILE* (*LPOpen)(struct IPerlStdIO*, const char*,
@@ -559,10 +561,18 @@ struct IPerlEnvInfo
(*PL_Env->pGetChildIO)(PL_Env, ptr)
#endif
-#else /* PERL_IMPLICIT_SYS */
+#else /* below is ! PERL_IMPLICIT_SYS */
+# ifdef USE_ITHREADS
-#define PerlEnv_putenv(str) putenv((str))
-#define PerlEnv_getenv(str) getenv((str))
+ /* Use the comma operator to return 0/non-zero, while avoiding putting
+ * this in an inline function */
+# define PerlEnv_putenv(str) (ENV_LOCK, (putenv(str) \
+ ? (ENV_UNLOCK, 1) \
+ : (ENV_UNLOCK, 0)))
+# else
+# define PerlEnv_putenv(str) putenv(str)
+# endif
+#define PerlEnv_getenv(str) mortal_getenv(str)
#define PerlEnv_getenv_len(str,l) getenv_len((str), (l))
#ifdef HAS_ENVGETENV
# define PerlEnv_ENVgetenv(str) ENVgetenv((str))
@@ -585,7 +595,9 @@ struct IPerlEnvInfo
#define PerlEnv_get_childdir() win32_get_childdir()
#define PerlEnv_free_childdir(d) win32_free_childdir((d))
#else
-#define PerlEnv_clearenv() clearenv()
+#define PerlEnv_clearenv(str) (ENV_LOCK, (clearenv(str) \
+ ? (ENV_UNLOCK, 1) \
+ : (ENV_UNLOCK, 0)))
#define PerlEnv_get_childenv() get_childenv()
#define PerlEnv_free_childenv(e) free_childenv((e))
#define PerlEnv_get_childdir() get_childdir()
diff --git a/gnu/usr.bin/perl/keywords.c b/gnu/usr.bin/perl/keywords.c
index 9fa30e616a3..d503bc9c2d9 100644
--- a/gnu/usr.bin/perl/keywords.c
+++ b/gnu/usr.bin/perl/keywords.c
@@ -203,7 +203,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
goto unknown;
}
- case 3: /* 28 tokens of length 3 */
+ case 3: /* 29 tokens of length 3 */
switch (name[0])
{
case 'E':
@@ -320,13 +320,27 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords)
goto unknown;
case 'i':
- if (name[1] == 'n' &&
- name[2] == 't')
- { /* int */
- return -KEY_int;
- }
+ switch (name[1])
+ {
+ case 'n':
+ if (name[2] == 't')
+ { /* int */
+ return -KEY_int;
+ }
- goto unknown;
+ goto unknown;
+
+ case 's':
+ if (name[2] == 'a')
+ { /* isa */
+ return (all_keywords || FEATURE_ISA_IS_ENABLED ? -KEY_isa : 0);
+ }
+
+ goto unknown;
+
+ default:
+ goto unknown;
+ }
case 'l':
if (name[1] == 'o' &&
@@ -3437,5 +3451,5 @@ unknown:
}
/* Generated from:
- * db0472e0ad4f44bd0816cad799d63b60d1bbd7e11cef40ea15bf0d00f69669f6 regen/keywords.pl
+ * f77998a5bc995c1b42d3d080de227ef5f11638bcd329367431d8f193aef2d3cc regen/keywords.pl
* ex: set ro: */
diff --git a/gnu/usr.bin/perl/keywords.h b/gnu/usr.bin/perl/keywords.h
index 2b1d598a4e7..23fa6944d89 100644
--- a/gnu/usr.bin/perl/keywords.h
+++ b/gnu/usr.bin/perl/keywords.h
@@ -123,152 +123,153 @@
#define KEY_index 107
#define KEY_int 108
#define KEY_ioctl 109
-#define KEY_join 110
-#define KEY_keys 111
-#define KEY_kill 112
-#define KEY_last 113
-#define KEY_lc 114
-#define KEY_lcfirst 115
-#define KEY_le 116
-#define KEY_length 117
-#define KEY_link 118
-#define KEY_listen 119
-#define KEY_local 120
-#define KEY_localtime 121
-#define KEY_lock 122
-#define KEY_log 123
-#define KEY_lstat 124
-#define KEY_lt 125
-#define KEY_m 126
-#define KEY_map 127
-#define KEY_mkdir 128
-#define KEY_msgctl 129
-#define KEY_msgget 130
-#define KEY_msgrcv 131
-#define KEY_msgsnd 132
-#define KEY_my 133
-#define KEY_ne 134
-#define KEY_next 135
-#define KEY_no 136
-#define KEY_not 137
-#define KEY_oct 138
-#define KEY_open 139
-#define KEY_opendir 140
-#define KEY_or 141
-#define KEY_ord 142
-#define KEY_our 143
-#define KEY_pack 144
-#define KEY_package 145
-#define KEY_pipe 146
-#define KEY_pop 147
-#define KEY_pos 148
-#define KEY_print 149
-#define KEY_printf 150
-#define KEY_prototype 151
-#define KEY_push 152
-#define KEY_q 153
-#define KEY_qq 154
-#define KEY_qr 155
-#define KEY_quotemeta 156
-#define KEY_qw 157
-#define KEY_qx 158
-#define KEY_rand 159
-#define KEY_read 160
-#define KEY_readdir 161
-#define KEY_readline 162
-#define KEY_readlink 163
-#define KEY_readpipe 164
-#define KEY_recv 165
-#define KEY_redo 166
-#define KEY_ref 167
-#define KEY_rename 168
-#define KEY_require 169
-#define KEY_reset 170
-#define KEY_return 171
-#define KEY_reverse 172
-#define KEY_rewinddir 173
-#define KEY_rindex 174
-#define KEY_rmdir 175
-#define KEY_s 176
-#define KEY_say 177
-#define KEY_scalar 178
-#define KEY_seek 179
-#define KEY_seekdir 180
-#define KEY_select 181
-#define KEY_semctl 182
-#define KEY_semget 183
-#define KEY_semop 184
-#define KEY_send 185
-#define KEY_setgrent 186
-#define KEY_sethostent 187
-#define KEY_setnetent 188
-#define KEY_setpgrp 189
-#define KEY_setpriority 190
-#define KEY_setprotoent 191
-#define KEY_setpwent 192
-#define KEY_setservent 193
-#define KEY_setsockopt 194
-#define KEY_shift 195
-#define KEY_shmctl 196
-#define KEY_shmget 197
-#define KEY_shmread 198
-#define KEY_shmwrite 199
-#define KEY_shutdown 200
-#define KEY_sin 201
-#define KEY_sleep 202
-#define KEY_socket 203
-#define KEY_socketpair 204
-#define KEY_sort 205
-#define KEY_splice 206
-#define KEY_split 207
-#define KEY_sprintf 208
-#define KEY_sqrt 209
-#define KEY_srand 210
-#define KEY_stat 211
-#define KEY_state 212
-#define KEY_study 213
-#define KEY_sub 214
-#define KEY_substr 215
-#define KEY_symlink 216
-#define KEY_syscall 217
-#define KEY_sysopen 218
-#define KEY_sysread 219
-#define KEY_sysseek 220
-#define KEY_system 221
-#define KEY_syswrite 222
-#define KEY_tell 223
-#define KEY_telldir 224
-#define KEY_tie 225
-#define KEY_tied 226
-#define KEY_time 227
-#define KEY_times 228
-#define KEY_tr 229
-#define KEY_truncate 230
-#define KEY_uc 231
-#define KEY_ucfirst 232
-#define KEY_umask 233
-#define KEY_undef 234
-#define KEY_unless 235
-#define KEY_unlink 236
-#define KEY_unpack 237
-#define KEY_unshift 238
-#define KEY_untie 239
-#define KEY_until 240
-#define KEY_use 241
-#define KEY_utime 242
-#define KEY_values 243
-#define KEY_vec 244
-#define KEY_wait 245
-#define KEY_waitpid 246
-#define KEY_wantarray 247
-#define KEY_warn 248
-#define KEY_when 249
-#define KEY_while 250
-#define KEY_write 251
-#define KEY_x 252
-#define KEY_xor 253
-#define KEY_y 254
+#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
/* Generated from:
- * db0472e0ad4f44bd0816cad799d63b60d1bbd7e11cef40ea15bf0d00f69669f6 regen/keywords.pl
+ * f77998a5bc995c1b42d3d080de227ef5f11638bcd329367431d8f193aef2d3cc regen/keywords.pl
* ex: set ro: */
diff --git a/gnu/usr.bin/perl/l1_char_class_tab.h b/gnu/usr.bin/perl/l1_char_class_tab.h
index c6580adee39..83469a0ba17 100644
--- a/gnu/usr.bin/perl/l1_char_class_tab.h
+++ b/gnu/usr.bin/perl/l1_char_class_tab.h
@@ -56,14 +56,14 @@
/* U+2D '-' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+2E '.' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+2F '/' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* U+30 '0' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* U+31 '1' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* U+32 '2' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* U+33 '3' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* U+34 '4' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* U+35 '5' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* U+36 '6' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* U+37 '7' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* U+30 '0' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* U+31 '1' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* U+32 '2' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* U+33 '3' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* U+34 '4' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* U+35 '5' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* U+36 '6' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* U+37 '7' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+38 '8' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+39 '9' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* U+3A ':' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
@@ -336,31 +336,31 @@
/* 0x3E U+9E PM */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3F U+1A SUB */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x40 U+20 SP */ (1U<<_CC_ASCII)|(1U<<_CC_BLANK)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
-/* 0x41 U+A0 NBSP */ (1U<<_CC_BLANK)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x42 U+E2 I8=A1 a with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x43 U+E4 I8=A2 a with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x44 U+E0 I8=A3 a with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x45 U+E1 I8=A4 a with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x46 U+E3 I8=A5 a with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x47 U+E5 I8=A6 a with ring */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x48 U+E7 I8=A7 c with cedilla */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x49 U+F1 I8=A8 n with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x4A U+A2 I8=A9 CENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_CONTINUATION),
+/* 0x41 U+A0 NBSP */ (1U<<_CC_BLANK)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
+/* 0x42 U+E2 I8=A1 a with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x43 U+E4 I8=A2 a with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x44 U+E0 I8=A3 a with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x45 U+E1 I8=A4 a with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x46 U+E3 I8=A5 a with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x47 U+E5 I8=A6 a with ring */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x48 U+E7 I8=A7 c with cedilla */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x49 U+F1 I8=A8 n with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x4A U+A2 I8=A9 CENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x4B U+2E '.' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4C U+3C '<' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4D U+28 '(' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4E U+2B '+' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4F U+7C '|' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x50 U+26 '&' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0x51 U+E9 I8=AA e with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x52 U+EA I8=AB e with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x53 U+EB I8=AC e with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x54 U+E8 I8=AD e with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x55 U+ED I8=AE i with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x56 U+EE I8=AF i with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x57 U+EF I8=B0 i with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x58 U+EC I8=B1 i with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x59 U+DF I8=B2 sharp s */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
+/* 0x51 U+E9 I8=AA e with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x52 U+EA I8=AB e with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x53 U+EB I8=AC e with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x54 U+E8 I8=AD e with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x55 U+ED I8=AE i with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x56 U+EE I8=AF i with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x57 U+EF I8=B0 i with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x58 U+EC I8=B1 i with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x59 U+DF I8=B2 sharp s */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x5A U+21 '!' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5B U+24 '$' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5C U+2A '*' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
@@ -369,24 +369,24 @@
/* 0x5F U+5E '^' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x60 U+2D '-' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x61 U+2F '/' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0x62 U+C2 I8=B3 A with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x63 U+C4 I8=B4 A with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x64 U+C0 I8=B5 A with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x65 U+C1 I8=B6 A with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x66 U+C3 I8=B7 A with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x67 U+C5 I8=B8 A with RING */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x68 U+C7 I8=B9 C with CEDILLA */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x69 U+D1 I8=BA N with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x6A U+A6 I8=BB BROKEN BAR */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_CONTINUATION),
+/* 0x62 U+C2 I8=B3 A with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x63 U+C4 I8=B4 A with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x64 U+C0 I8=B5 A with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x65 U+C1 I8=B6 A with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x66 U+C3 I8=B7 A with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x67 U+C5 I8=B8 A with RING */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x68 U+C7 I8=B9 C with CEDILLA */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x69 U+D1 I8=BA N with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x6A U+A6 I8=BB BROKEN BAR */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x6B U+2C ',' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6C U+25 '%' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6D U+5F '_' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_WORDCHAR),
/* 0x6E U+3E '>' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6F U+3F '?' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0x70 U+F8 I8=BC o with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x71 U+C9 I8=BD E with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x72 U+CA I8=BE E with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x73 U+CB I8=BF E with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
+/* 0x70 U+F8 I8=BC o with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x71 U+C9 I8=BD E with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x72 U+CA I8=BE E with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x73 U+CB I8=BF E with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x74 U+C8 I8=C0 E with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x75 U+CD I8=C1 I with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x76 U+CE I8=C2 I with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
@@ -399,7 +399,7 @@
/* 0x7D U+27 "'" */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7E U+3D '=' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7F U+22 '"' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0x80 U+D8 I8=C5 O with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_IS_DOWNGRADEABLE_START),
+/* 0x80 U+D8 I8=C5 O with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x81 U+61 'a' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x82 U+62 'b' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x83 U+63 'c' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
@@ -409,13 +409,13 @@
/* 0x87 U+67 'g' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x88 U+68 'h' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x89 U+69 'i' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
-/* 0x8A U+AB I8=C6 LEFT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_IS_DOWNGRADEABLE_START),
-/* 0x8B U+BB I8=C7 RIGHT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_IS_DOWNGRADEABLE_START),
-/* 0x8C U+F0 I8=C8 eth */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x8D U+FD I8=C9 y with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x8E U+FE I8=CA thorn */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x8F U+B1 I8=CB PLUS-MINUS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0x90 U+B0 I8=CC DEGREE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
+/* 0x8A U+AB I8=C6 LEFT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
+/* 0x8B U+BB I8=C7 RIGHT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
+/* 0x8C U+F0 I8=C8 eth */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x8D U+FD I8=C9 y with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x8E U+FE I8=CA thorn */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x8F U+B1 I8=CB PLUS-MINUS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0x90 U+B0 I8=CC DEGREE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x91 U+6A 'j' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x92 U+6B 'k' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x93 U+6C 'l' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
@@ -425,13 +425,13 @@
/* 0x97 U+70 'p' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x98 U+71 'q' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x99 U+72 'r' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
-/* 0x9A U+AA I8=CD FEMININE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x9B U+BA I8=CE MASCULINE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x9C U+E6 I8=CF ae */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x9D U+B8 I8=D0 CEDILLA */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0x9E U+C6 I8=D1 AE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x9F U+A4 I8=D2 CURRENCY */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xA0 U+B5 I8=D3 MICRO */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
+/* 0x9A U+AA I8=CD FEMININE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x9B U+BA I8=CE MASCULINE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x9C U+E6 I8=CF ae */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x9D U+B8 I8=D0 CEDILLA */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0x9E U+C6 I8=D1 AE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x9F U+A4 I8=D2 CURRENCY */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xA0 U+B5 I8=D3 MICRO */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA1 U+7E '~' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xA2 U+73 's' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA3 U+74 't' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
@@ -441,28 +441,28 @@
/* 0xA7 U+78 'x' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA8 U+79 'y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA9 U+7A 'z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
-/* 0xAA U+A1 I8=D4 INVERTED '!' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xAB U+BF I8=D5 INVERTED '?' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xAC U+D0 I8=D6 ETH */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
+/* 0xAA U+A1 I8=D4 INVERTED '!' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
+/* 0xAB U+BF I8=D5 INVERTED '?' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
+/* 0xAC U+D0 I8=D6 ETH */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xAD U+5B '[' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0xAE U+DE I8=D7 THORN */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xAF U+AE I8=D8 REGISTERED */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xB0 U+AC I8=D9 NOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xB1 U+A3 I8=DA POUND */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xB2 U+A5 I8=DB YEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xB3 U+B7 I8=DC MIDDLE DOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_UTF8_IS_START),
-/* 0xB4 U+A9 I8=DD COPYRIGHT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xB5 U+A7 I8=DE SECTION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* U+B6 I8=DF PILCROW */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
+/* 0xAE U+DE I8=D7 THORN */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0xAF U+AE I8=D8 REGISTERED */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xB0 U+AC I8=D9 NOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xB1 U+A3 I8=DA POUND */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xB2 U+A5 I8=DB YEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xB3 U+B7 I8=DC MIDDLE DOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT),
+/* 0xB4 U+A9 I8=DD COPYRIGHT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xB5 U+A7 I8=DE SECTION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
+/* U+B6 I8=DF PILCROW */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xB7 U+BC I8=E0 1/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
-/* 0xB8 U+BD I8=E1 1/2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0xB9 U+BE I8=E2 3/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0xBA U+DD I8=E3 Y with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xBB U+A8 I8=E4 DIAERESIS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0xBC U+AF I8=E5 MACRON */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
+/* 0xB8 U+BD I8=E1 1/2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0xB9 U+BE I8=E2 3/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0xBA U+DD I8=E3 Y with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0xBB U+A8 I8=E4 DIAERESIS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0xBC U+AF I8=E5 MACRON */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xBD U+5D ']' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0xBE U+B4 I8=E6 ACUTE ACCENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0xBF U+D7 I8=E7 MULTIPLICATION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
+/* 0xBE U+B4 I8=E6 ACUTE ACCENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0xBF U+D7 I8=E7 MULTIPLICATION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xC0 U+7B '{' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xC1 U+41 'A' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC2 U+42 'B' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
@@ -473,12 +473,12 @@
/* 0xC7 U+47 'G' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xC8 U+48 'H' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xC9 U+49 'I' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
-/* 0xCA U+AD I8=E8 SOFT HYPHEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xCB U+F4 I8=E9 o with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xCC U+F6 I8=EA o with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xCD U+F2 I8=EB o with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xCE U+F3 I8=EC o with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xCF U+F5 I8=ED o with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
+/* 0xCA U+AD I8=E8 SOFT HYPHEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xCB U+F4 I8=E9 o with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xCC U+F6 I8=EA o with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xCD U+F2 I8=EB o with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xCE U+F3 I8=EC o with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xCF U+F5 I8=ED o with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xD0 U+7D '}' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xD1 U+4A 'J' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD2 U+4B 'K' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
@@ -489,14 +489,14 @@
/* 0xD7 U+50 'P' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD8 U+51 'Q' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD9 U+52 'R' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
-/* 0xDA U+B9 I8=EE SUPERSCRIPT 1 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0xDB U+FB I8=EF u with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xDC U+FC I8=F0 u with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xDD U+F9 I8=F1 u with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xDE U+FA I8=F2 u with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xDF U+FF I8=F3 y with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xDA U+B9 I8=EE SUPERSCRIPT 1 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0xDB U+FB I8=EF u with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xDC U+FC I8=F0 u with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xDD U+F9 I8=F1 u with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xDE U+FA I8=F2 u with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xDF U+FF I8=F3 y with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xE0 U+5C '\' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0xE1 U+F7 I8=F4 DIVISION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xE1 U+F7 I8=F4 DIVISION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xE2 U+53 'S' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE3 U+54 'T' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE4 U+55 'U' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
@@ -505,27 +505,27 @@
/* 0xE7 U+58 'X' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE8 U+59 'Y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE9 U+5A 'Z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
-/* 0xEA U+B2 I8=F5 SUPERSCRIPT 2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xEB U+D4 I8=F6 O with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xEC U+D6 I8=F7 O with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xED U+D2 I8=F8 O with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xEE U+D3 I8=F9 O with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xEF U+D5 I8=FA O with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xF0 U+30 '0' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF1 U+31 '1' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF2 U+32 '2' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF3 U+33 '3' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF4 U+34 '4' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF5 U+35 '5' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF6 U+36 '6' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF7 U+37 '7' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xEA U+B2 I8=F5 SUPERSCRIPT 2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xEB U+D4 I8=F6 O with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xEC U+D6 I8=F7 O with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xED U+D2 I8=F8 O with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xEE U+D3 I8=F9 O with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xEF U+D5 I8=FA O with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xF0 U+30 '0' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF1 U+31 '1' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF2 U+32 '2' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF3 U+33 '3' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF4 U+34 '4' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF5 U+35 '5' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF6 U+36 '6' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF7 U+37 '7' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF8 U+38 '8' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF9 U+39 '9' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xFA U+B3 I8=FB SUPERSCRIPT 3 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xFB U+DB I8=FC U with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xFC U+DC I8=FD U with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xFD U+D9 I8=FE U with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xFE U+DA I8=FF U with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xFA U+B3 I8=FB SUPERSCRIPT 3 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xFB U+DB I8=FC U with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xFC U+DC I8=FD U with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xFD U+D9 I8=FE U with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xFE U+DA I8=FF U with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFF U+9F APC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)
#endif /* EBCDIC 1047 */
@@ -599,62 +599,62 @@
/* 0x3E U+9E PM */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x3F U+1A SUB */ (1U<<_CC_ASCII)|(1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA),
/* 0x40 U+20 SP */ (1U<<_CC_ASCII)|(1U<<_CC_BLANK)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
-/* 0x41 U+A0 NBSP */ (1U<<_CC_BLANK)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x42 U+E2 I8=A1 a with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x43 U+E4 I8=A2 a with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x44 U+E0 I8=A3 a with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x45 U+E1 I8=A4 a with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x46 U+E3 I8=A5 a with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x47 U+E5 I8=A6 a with ring */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x48 U+E7 I8=A7 c with cedilla */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x49 U+F1 I8=A8 n with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x4A U+A2 I8=A9 CENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_CONTINUATION),
+/* 0x41 U+A0 NBSP */ (1U<<_CC_BLANK)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_SPACE),
+/* 0x42 U+E2 I8=A1 a with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x43 U+E4 I8=A2 a with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x44 U+E0 I8=A3 a with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x45 U+E1 I8=A4 a with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x46 U+E3 I8=A5 a with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x47 U+E5 I8=A6 a with ring */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x48 U+E7 I8=A7 c with cedilla */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x49 U+F1 I8=A8 n with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x4A U+A2 I8=A9 CENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x4B U+2E '.' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4C U+3C '<' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4D U+28 '(' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4E U+2B '+' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x4F U+7C '|' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x50 U+26 '&' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0x51 U+E9 I8=AA e with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x52 U+EA I8=AB e with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x53 U+EB I8=AC e with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x54 U+E8 I8=AD e with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x55 U+ED I8=AE i with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x56 U+EE I8=AF i with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x57 U+EF I8=B0 i with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x58 U+EC I8=B1 i with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x59 U+DF I8=B2 sharp s */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
+/* 0x51 U+E9 I8=AA e with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x52 U+EA I8=AB e with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x53 U+EB I8=AC e with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x54 U+E8 I8=AD e with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x55 U+ED I8=AE i with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x56 U+EE I8=AF i with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x57 U+EF I8=B0 i with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x58 U+EC I8=B1 i with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x59 U+DF I8=B2 sharp s */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x5A U+21 '!' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5B U+24 '$' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5C U+2A '*' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5D U+29 ')' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x5E U+3B ';' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0x5F U+AC I8=B3 NOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_CONTINUATION),
+/* 0x5F U+AC I8=B3 NOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x60 U+2D '-' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x61 U+2F '/' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0x62 U+C2 I8=B4 A with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x63 U+C4 I8=B5 A with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x64 U+C0 I8=B6 A with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x65 U+C1 I8=B7 A with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x66 U+C3 I8=B8 A with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x67 U+C5 I8=B9 A with RING */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x68 U+C7 I8=BA C with CEDILLA */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x69 U+D1 I8=BB N with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x6A U+A6 I8=BC BROKEN BAR */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_CONTINUATION),
+/* 0x62 U+C2 I8=B4 A with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x63 U+C4 I8=B5 A with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x64 U+C0 I8=B6 A with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x65 U+C1 I8=B7 A with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x66 U+C3 I8=B8 A with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x67 U+C5 I8=B9 A with RING */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x68 U+C7 I8=BA C with CEDILLA */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x69 U+D1 I8=BB N with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x6A U+A6 I8=BC BROKEN BAR */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x6B U+2C ',' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6C U+25 '%' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6D U+5F '_' */ (1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_WORDCHAR),
/* 0x6E U+3E '>' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x6F U+3F '?' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0x70 U+F8 I8=BD o with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x71 U+C9 I8=BE E with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
-/* 0x72 U+CA I8=BF E with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_CONTINUATION),
+/* 0x70 U+F8 I8=BD o with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x71 U+C9 I8=BE E with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x72 U+CA I8=BF E with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x73 U+CB I8=C0 E with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x74 U+C8 I8=C1 E with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x75 U+CD I8=C2 I with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x76 U+CE I8=C3 I with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x77 U+CF I8=C4 I with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
-/* 0x78 U+CC I8=C5 I with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_IS_DOWNGRADEABLE_START),
+/* 0x78 U+CC I8=C5 I with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x79 U+60 '`' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7A U+3A ':' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7B U+23 '#' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
@@ -662,7 +662,7 @@
/* 0x7D U+27 "'" */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7E U+3D '=' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0x7F U+22 '"' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0x80 U+D8 I8=C6 O with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_IS_DOWNGRADEABLE_START),
+/* 0x80 U+D8 I8=C6 O with '/' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0x81 U+61 'a' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x82 U+62 'b' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0x83 U+63 'c' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
@@ -672,13 +672,13 @@
/* 0x87 U+67 'g' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x88 U+68 'h' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x89 U+69 'i' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
-/* 0x8A U+AB I8=C7 LEFT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_IS_DOWNGRADEABLE_START),
-/* 0x8B U+BB I8=C8 RIGHT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0x8C U+F0 I8=C9 eth */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x8D U+FD I8=CA y with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x8E U+FE I8=CB thorn */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x8F U+B1 I8=CC PLUS-MINUS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0x90 U+B0 I8=CD DEGREE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
+/* 0x8A U+AB I8=C7 LEFT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
+/* 0x8B U+BB I8=C8 RIGHT-POINTING DOUBLE ANGLE QUOTE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
+/* 0x8C U+F0 I8=C9 eth */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x8D U+FD I8=CA y with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x8E U+FE I8=CB thorn */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x8F U+B1 I8=CC PLUS-MINUS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0x90 U+B0 I8=CD DEGREE */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0x91 U+6A 'j' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x92 U+6B 'k' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x93 U+6C 'l' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
@@ -688,13 +688,13 @@
/* 0x97 U+70 'p' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x98 U+71 'q' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0x99 U+72 'r' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
-/* 0x9A U+AA I8=CE FEMININE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x9B U+BA I8=CF MASCULINE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x9C U+E6 I8=D0 ae */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x9D U+B8 I8=D1 CEDILLA */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0x9E U+C6 I8=D2 AE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0x9F U+A4 I8=D3 CURRENCY */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xA0 U+B5 I8=D4 MICRO */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
+/* 0x9A U+AA I8=CE FEMININE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x9B U+BA I8=CF MASCULINE ORDINAL */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x9C U+E6 I8=D0 ae */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0x9D U+B8 I8=D1 CEDILLA */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0x9E U+C6 I8=D2 AE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0x9F U+A4 I8=D3 CURRENCY */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xA0 U+B5 I8=D4 MICRO */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA1 U+7E '~' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xA2 U+73 's' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA3 U+74 't' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
@@ -704,28 +704,28 @@
/* 0xA7 U+78 'x' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA8 U+79 'y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xA9 U+7A 'z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
-/* 0xAA U+A1 I8=D5 INVERTED '!' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xAB U+BF I8=D6 INVERTED '?' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xAC U+D0 I8=D7 ETH */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xAD U+DD I8=D8 Y with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xAE U+DE I8=D9 THORN */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xAF U+AE I8=DA REGISTERED */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
+/* 0xAA U+A1 I8=D5 INVERTED '!' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
+/* 0xAB U+BF I8=D6 INVERTED '?' */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
+/* 0xAC U+D0 I8=D7 ETH */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0xAD U+DD I8=D8 Y with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0xAE U+DE I8=D9 THORN */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
+/* 0xAF U+AE I8=DA REGISTERED */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xB0 U+5E '^' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0xB1 U+A3 I8=DB POUND */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xB2 U+A5 I8=DC YEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xB3 U+B7 I8=DD MIDDLE DOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_UTF8_IS_START),
-/* 0xB4 U+A9 I8=DE COPYRIGHT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xB5 U+A7 I8=DF SECTION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
+/* 0xB1 U+A3 I8=DB POUND */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xB2 U+A5 I8=DC YEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xB3 U+B7 I8=DD MIDDLE DOT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT),
+/* 0xB4 U+A9 I8=DE COPYRIGHT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xB5 U+A7 I8=DF SECTION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* U+B6 I8=E0 PILCROW */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0xB7 U+BC I8=E1 1/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0xB8 U+BD I8=E2 1/2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0xB9 U+BE I8=E3 3/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
+/* 0xB7 U+BC I8=E1 1/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0xB8 U+BD I8=E2 1/2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0xB9 U+BE I8=E3 3/4 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
/* 0xBA U+5B '[' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xBB U+5D ']' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0xBC U+AF I8=E4 MACRON */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0xBD U+A8 I8=E5 DIAERESIS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0xBE U+B4 I8=E6 ACUTE ACCENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0xBF U+D7 I8=E7 MULTIPLICATION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
+/* 0xBC U+AF I8=E4 MACRON */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0xBD U+A8 I8=E5 DIAERESIS */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0xBE U+B4 I8=E6 ACUTE ACCENT */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0xBF U+D7 I8=E7 MULTIPLICATION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
/* 0xC0 U+7B '{' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xC1 U+41 'A' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xC2 U+42 'B' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
@@ -736,12 +736,12 @@
/* 0xC7 U+47 'G' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xC8 U+48 'H' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xC9 U+49 'I' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
-/* 0xCA U+AD I8=E8 SOFT HYPHEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START),
-/* 0xCB U+F4 I8=E9 o with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xCC U+F6 I8=EA o with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xCD U+F2 I8=EB o with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xCE U+F3 I8=EC o with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xCF U+F5 I8=ED o with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
+/* 0xCA U+AD I8=E8 SOFT HYPHEN */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA),
+/* 0xCB U+F4 I8=E9 o with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xCC U+F6 I8=EA o with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xCD U+F2 I8=EB o with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xCE U+F3 I8=EC o with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xCF U+F5 I8=ED o with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
/* 0xD0 U+7D '}' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
/* 0xD1 U+4A 'J' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD2 U+4B 'K' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
@@ -752,14 +752,14 @@
/* 0xD7 U+50 'P' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD8 U+51 'Q' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xD9 U+52 'R' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
-/* 0xDA U+B9 I8=EE SUPERSCRIPT 1 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START),
-/* 0xDB U+FB I8=EF u with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xDC U+FC I8=F0 u with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START),
-/* 0xDD U+F9 I8=F1 u with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xDE U+FA I8=F2 u with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xDF U+FF I8=F3 y with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xDA U+B9 I8=EE SUPERSCRIPT 1 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT),
+/* 0xDB U+FB I8=EF u with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xDC U+FC I8=F0 u with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR),
+/* 0xDD U+F9 I8=F1 u with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xDE U+FA I8=F2 u with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xDF U+FF I8=F3 y with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xE0 U+5C '\' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA),
-/* 0xE1 U+F7 I8=F4 DIVISION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xE1 U+F7 I8=F4 DIVISION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xE2 U+53 'S' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE3 U+54 'T' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE4 U+55 'U' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
@@ -768,27 +768,27 @@
/* 0xE7 U+58 'X' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE8 U+59 'Y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
/* 0xE9 U+5A 'Z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR),
-/* 0xEA U+B2 I8=F5 SUPERSCRIPT 2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xEB U+D4 I8=F6 O with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xEC U+D6 I8=F7 O with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xED U+D2 I8=F8 O with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xEE U+D3 I8=F9 O with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xEF U+D5 I8=FA O with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xF0 U+30 '0' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF1 U+31 '1' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF2 U+32 '2' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF3 U+33 '3' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF4 U+34 '4' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF5 U+35 '5' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF6 U+36 '6' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xF7 U+37 '7' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xEA U+B2 I8=F5 SUPERSCRIPT 2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xEB U+D4 I8=F6 O with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xEC U+D6 I8=F7 O with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xED U+D2 I8=F8 O with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xEE U+D3 I8=F9 O with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xEF U+D5 I8=FA O with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xF0 U+30 '0' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF1 U+31 '1' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF2 U+32 '2' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF3 U+33 '3' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF4 U+34 '4' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF5 U+35 '5' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF6 U+36 '6' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
+/* 0xF7 U+37 '7' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF8 U+38 '8' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
/* 0xF9 U+39 '9' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT),
-/* 0xFA U+B3 I8=FB SUPERSCRIPT 3 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xFB U+DB I8=FC U with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xFC U+DC I8=FD U with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xFD U+D9 I8=FE U with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
-/* 0xFE U+DA I8=FF U with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_IS_START)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xFA U+B3 I8=FB SUPERSCRIPT 3 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xFB U+DB I8=FC U with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xFC U+DC I8=FD U with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xFD U+D9 I8=FE U with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
+/* 0xFE U+DA I8=FF U with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE),
/* 0xFF U+9F APC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA)
#endif /* EBCDIC 037 */
diff --git a/gnu/usr.bin/perl/lib/AnyDBM_File.pm b/gnu/usr.bin/perl/lib/AnyDBM_File.pm
index 3b41a4a100b..4153af2de2d 100644
--- a/gnu/usr.bin/perl/lib/AnyDBM_File.pm
+++ b/gnu/usr.bin/perl/lib/AnyDBM_File.pm
@@ -22,6 +22,8 @@ __END__
AnyDBM_File - provide framework for multiple DBMs
+NDBM_File, DB_File, GDBM_File, SDBM_File, ODBM_File - various DBM implementations
+
=head1 SYNOPSIS
use AnyDBM_File;
diff --git a/gnu/usr.bin/perl/lib/B/Deparse-core.t b/gnu/usr.bin/perl/lib/B/Deparse-core.t
index 6ee935f5f71..991412a1dda 100644
--- a/gnu/usr.bin/perl/lib/B/Deparse-core.t
+++ b/gnu/usr.bin/perl/lib/B/Deparse-core.t
@@ -36,7 +36,7 @@ BEGIN {
use strict;
use Test::More;
-plan tests => 3886;
+plan tests => 3904;
use feature (sprintf(":%vd", $^V)); # to avoid relying on the feature
# logic to add CORE::
@@ -79,23 +79,25 @@ sub testit {
my $desc = "$keyword: lex=$lex $expr => $expected_expr";
$desc .= " (lex sub)" if $lexsub;
-
my $code;
my $code_ref;
if ($lexsub) {
package lexsubtest;
- no warnings 'experimental::lexical_subs';
+ no warnings 'experimental::lexical_subs', 'experimental::isa';
use feature 'lexical_subs';
no strict 'vars';
$code = "sub { state sub $keyword; ${vars}() = $expr }";
+ $code = "use feature 'isa';\n$code" if $keyword eq "isa";
$code_ref = eval $code
or die "$@ in $expr";
}
else {
package test;
+ no warnings 'experimental::isa';
use subs ();
import subs $keyword;
$code = "no strict 'vars'; sub { ${vars}() = $expr }";
+ $code = "use feature 'isa';\n$code" if $keyword eq "isa";
$code_ref = eval $code
or die "$@ in $expr";
}
@@ -545,6 +547,7 @@ hex 01 $
index 23 p
int 01 $
ioctl 3 p
+isa B -
join 13 p
# keys handled specially
kill 123 p
diff --git a/gnu/usr.bin/perl/lib/B/Deparse.pm b/gnu/usr.bin/perl/lib/B/Deparse.pm
index d7dc060fc6d..7bf1cd51c36 100644
--- a/gnu/usr.bin/perl/lib/B/Deparse.pm
+++ b/gnu/usr.bin/perl/lib/B/Deparse.pm
@@ -52,7 +52,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring
MDEREF_SHIFT
);
-$VERSION = '1.49';
+$VERSION = '1.54';
use strict;
our $AUTOLOAD;
use warnings ();
@@ -271,7 +271,7 @@ BEGIN {
BEGIN { for (qw[ const stringify rv2sv list glob pushmark null aelem
- kvaslice kvhslice padsv
+ kvaslice kvhslice padsv argcheck
nextstate dbstate rv2av rv2hv helem custom ]) {
eval "sub OP_\U$_ () { " . opnumber($_) . "}"
}}
@@ -279,6 +279,8 @@ BEGIN { for (qw[ const stringify rv2sv list glob pushmark null aelem
# _pessimise_walk(): recursively walk the optree of a sub,
# possibly undoing optimisations along the way.
+sub DEBUG { 0 }
+
sub _pessimise_walk {
my ($self, $startop) = @_;
@@ -1176,42 +1178,68 @@ sub pad_subs {
# or altered. In this case we return "()" and fall back to general
# deparsing of the individual sigelems as 'my $x = $_[N]' etc.
#
-# We're only called if the first two ops are nextstate and argcheck.
+# We're only called if the top is an ex-argcheck, which is a placeholder
+# indicating a signature subtree.
+#
+# Return a signature string, or an empty list if no deparseable as a
+# signature
sub deparse_argops {
- my ($self, $firstop, $cv) = @_;
+ my ($self, $topop, $cv) = @_;
my @sig;
- my $o = $firstop;
- return if $o->label; #first nextstate;
+
+
+ $topop = $topop->first;
+ return unless $$topop and $topop->name eq 'lineseq';
+
+
+ # last op should be nextstate
+ my $last = $topop->last;
+ return unless $$last
+ and ( _op_is_or_was($last, OP_NEXTSTATE)
+ or _op_is_or_was($last, OP_DBSTATE));
+
+ # first OP_NEXTSTATE
+
+ my $o = $topop->first;
+ return unless $$o;
+ return if $o->label;
# OP_ARGCHECK
$o = $o->sibling;
+ return unless $$o and $o->name eq 'argcheck';
+
my ($params, $opt_params, $slurpy) = $o->aux_list($cv);
my $mandatory = $params - $opt_params;
my $seen_slurpy = 0;
my $last_ix = -1;
- # keep looking for valid nextstate + argelem pairs
+ # keep looking for valid nextstate + argelem pairs, terminated
+ # by a final nextstate
while (1) {
- # OP_NEXTSTATE
$o = $o->sibling;
- last unless $$o;
- last unless $o->name =~ /^(next|db)state$/;
- last if $o->label;
+ return unless $$o;
+
+ # skip trailing nextstate
+ last if $$o == $$last;
+
+ # OP_NEXTSTATE
+ return unless $o->name =~ /^(next|db)state$/;
+ return if $o->label;
# OP_ARGELEM
- my $o2 = $o->sibling;
- last unless $$o2;
+ $o = $o->sibling;
+ last unless $$o;
- if ($o2->name eq 'argelem') {
- my $ix = $o2->string($cv);
+ if ($o->name eq 'argelem') {
+ my $ix = $o->string($cv);
while (++$last_ix < $ix) {
push @sig, $last_ix < $mandatory ? '$' : '$=';
}
- my $var = $self->padname($o2->targ);
+ my $var = $self->padname($o->targ);
if ($var =~ /^[@%]/) {
return if $seen_slurpy;
$seen_slurpy = 1;
@@ -1221,8 +1249,8 @@ sub deparse_argops {
else {
return if $ix >= $params;
}
- if ($o2->flags & OPf_KIDS) {
- my $kid = $o2->first;
+ if ($o->flags & OPf_KIDS) {
+ my $kid = $o->first;
return unless $$kid and $kid->name eq 'argdefelem';
my $def = $self->deparse($kid->first, 7);
$def = "($def)" if $kid->first->flags & OPf_PARENS;
@@ -1230,13 +1258,13 @@ sub deparse_argops {
}
push @sig, $var;
}
- elsif ($o2->name eq 'null'
- and ($o2->flags & OPf_KIDS)
- and $o2->first->name eq 'argdefelem')
+ elsif ($o->name eq 'null'
+ and ($o->flags & OPf_KIDS)
+ and $o->first->name eq 'argdefelem')
{
# special case - a void context default expression: $ = expr
- my $defop = $o2->first;
+ my $defop = $o->first;
my $ix = $defop->targ;
while (++$last_ix < $ix) {
push @sig, $last_ix < $mandatory ? '$' : '$=';
@@ -1248,10 +1276,9 @@ sub deparse_argops {
push @sig, '$ = ' . $def;
}
else {
- last;
+ return;
}
- $o = $o2;
}
while (++$last_ix < $params) {
@@ -1259,9 +1286,10 @@ sub deparse_argops {
}
push @sig, $slurpy if $slurpy and !$seen_slurpy;
- return ($o, join(', ', @sig));
+ return (join(', ', @sig));
}
+
# Deparse a sub. Returns everything except the 'sub foo',
# e.g. ($$) : method { ...; }
# or : prototype($$) lvalue ($a, $b) { ...; };
@@ -1304,27 +1332,26 @@ Carp::confess("SPECIAL in deparse_sub") if $cv->isa("B::SPECIAL");
$self->pad_subs($cv);
$self->pessimise($root, $cv->START);
my $lineseq = $root->first;
- if ($lineseq->name eq "lineseq") {
- my $firstop = $lineseq->first;
-
- if ($has_sig) {
- my $o2;
- # try to deparse first few ops as a signature if possible
- if ( $$firstop
- and $firstop->name =~ /^(next|db)state$/
- and (($o2 = $firstop->sibling))
- and $$o2)
- {
- if ($o2->name eq 'argcheck') {
- my ($nexto, $mysig) = $self->deparse_argops($firstop, $cv);
- if (defined $nexto) {
- $firstop = $nexto;
- $sig = $mysig;
- }
- }
- }
+
+ # stub sub may have single op rather than list of ops
+ my $is_list = ($lineseq->name eq "lineseq");
+ my $firstop = $is_list ? $lineseq->first : $lineseq;
+
+ # Try to deparse first subtree as a signature if possible.
+ # Top of signature subtree has an ex-argcheck as a placeholder
+ if ( $has_sig
+ and $$firstop
+ and $firstop->name eq 'null'
+ and $firstop->targ == OP_ARGCHECK
+ ) {
+ my ($mysig) = $self->deparse_argops($firstop, $cv);
+ if (defined $mysig) {
+ $sig = $mysig;
+ $firstop = $is_list ? $firstop->sibling : undef;
}
+ }
+ if ($is_list && $firstop) {
my @ops;
for (my $o = $firstop; $$o; $o=$o->sibling) {
push @ops, $o;
@@ -1341,9 +1368,12 @@ Carp::confess("SPECIAL in deparse_sub") if $cv->isa("B::SPECIAL");
$body .= ";\n$subs" if length($subs);
}
}
- else {
+ elsif ($firstop) {
$body = $self->deparse($root->first, 0);
}
+ else {
+ $body = ';'; # stub sub
+ }
my $l = '';
if ($self->{'linenums'}) {
@@ -2184,6 +2214,7 @@ my %ignored_hints = (
'strict/refs' => 1,
'strict/subs' => 1,
'strict/vars' => 1,
+ 'feature/bits' => 1,
);
my %rev_feature;
@@ -2304,7 +2335,7 @@ sub keyword {
}
# This sub may be called for a program that has no nextstate ops. In
# that case we may have a lexical sub named no/use/sub in scope but
- # but $self->lex_in_scope will return false because it depends on the
+ # $self->lex_in_scope will return false because it depends on the
# current nextstate op. So we need this alternate method if there is
# no current cop.
if (!$self->{'curcop'}) {
@@ -3029,6 +3060,8 @@ sub pp_sge { binop(@_, "ge", 15) }
sub pp_sle { binop(@_, "le", 15) }
sub pp_scmp { maybe_targmy(@_, \&binop, "cmp", 14) }
+sub pp_isa { binop(@_, "isa", 15) }
+
sub pp_sassign { binop(@_, "=", 7, SWAP_CHILDREN) }
sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN | LIST_CONTEXT) }
@@ -3167,6 +3200,64 @@ sub pp_andassign { logassignop(@_, "&&=") }
sub pp_orassign { logassignop(@_, "||=") }
sub pp_dorassign { logassignop(@_, "//=") }
+my %cmpchain_cmpops = (
+ eq => ["==", 14],
+ i_eq => ["==", 14],
+ ne => ["!=", 14],
+ i_ne => ["!=", 14],
+ seq => ["eq", 14],
+ sne => ["ne", 14],
+ lt => ["<", 15],
+ i_lt => ["<", 15],
+ gt => [">", 15],
+ i_gt => [">", 15],
+ le => ["<=", 15],
+ i_le => ["<=", 15],
+ ge => [">=", 15],
+ i_ge => [">=", 15],
+ slt => ["lt", 15],
+ sgt => ["gt", 15],
+ sle => ["le", 15],
+ sge => ["ge", 15],
+);
+sub pp_cmpchain_and {
+ my($self, $op, $cx) = @_;
+ my($prec, $dep);
+ while(1) {
+ my($thiscmp, $rightcond);
+ if($op->name eq "cmpchain_and") {
+ $thiscmp = $op->first;
+ $rightcond = $thiscmp->sibling;
+ } else {
+ $thiscmp = $op;
+ }
+ my $thiscmptype = $cmpchain_cmpops{$thiscmp->name} // (return "XXX");
+ if(defined $prec) {
+ $thiscmptype->[1] == $prec or return "XXX";
+ $thiscmp->first->name eq "null" &&
+ !($thiscmp->first->flags & OPf_KIDS)
+ or return "XXX";
+ } else {
+ $prec = $thiscmptype->[1];
+ $dep = $self->deparse($thiscmp->first, $prec);
+ }
+ $dep .= " ".$thiscmptype->[0]." ";
+ my $operand = $thiscmp->last;
+ if(defined $rightcond) {
+ $operand->name eq "cmpchain_dup" or return "XXX";
+ $operand = $operand->first;
+ }
+ $dep .= $self->deparse($operand, $prec);
+ last unless defined $rightcond;
+ if($rightcond->name eq "null" && ($rightcond->flags & OPf_KIDS) &&
+ $rightcond->first->name eq "cmpchain_and") {
+ $rightcond = $rightcond->first;
+ }
+ $op = $rightcond;
+ }
+ return $self->maybe_parens($dep, $cx, $prec);
+}
+
sub rv2gv_or_string {
my($self,$op) = @_;
if ($op->name eq "gv") { # could be open("open") or open("###")
@@ -3360,7 +3451,7 @@ sub pp_glob {
my $kid = $op->first->sibling; # skip pushmark
my $keyword =
$op->flags & OPf_SPECIAL ? 'glob' : $self->keyword('glob');
- my $text = $self->deparse($kid);
+ my $text = $self->deparse($kid, $cx);
return $cx >= 5 || $self->{'parens'}
? "$keyword($text)"
: "$keyword $text";
@@ -5685,100 +5776,81 @@ sub tr_chr {
}
}
-# XXX This doesn't yet handle all cases correctly either
+sub tr_invmap {
+ my ($invlist_ref, $map_ref) = @_;
-sub tr_decode_utf8 {
- my($swash_hv, $flags) = @_;
- my %swash = $swash_hv->ARRAY;
- my $final = undef;
- $final = $swash{'FINAL'}->IV if exists $swash{'FINAL'};
- my $none = $swash{"NONE"}->IV;
- my $extra = $none + 1;
- my(@from, @delfrom, @to);
- my $line;
- foreach $line (split /\n/, $swash{'LIST'}->PV) {
- my($min, $max, $result) = split(/\t/, $line);
- $min = hex $min;
- if (length $max) {
- $max = hex $max;
- } else {
- $max = $min;
- }
- $result = hex $result;
- if ($result == $extra) {
- push @delfrom, [$min, $max];
- } else {
- push @from, [$min, $max];
- push @to, [$result, $result + $max - $min];
- }
- }
- for my $i (0 .. $#from) {
- if ($from[$i][0] == ord '-') {
- unshift @from, splice(@from, $i, 1);
- unshift @to, splice(@to, $i, 1);
- last;
- } elsif ($from[$i][1] == ord '-') {
- $from[$i][1]--;
- $to[$i][1]--;
- unshift @from, ord '-';
- unshift @to, ord '-';
- last;
- }
- }
- for my $i (0 .. $#delfrom) {
- if ($delfrom[$i][0] == ord '-') {
- push @delfrom, splice(@delfrom, $i, 1);
- last;
- } elsif ($delfrom[$i][1] == ord '-') {
- $delfrom[$i][1]--;
- push @delfrom, ord '-';
- last;
- }
+ my $infinity = ~0 >> 1; # IV_MAX
+ my $from = "";
+ my $to = "";
+
+ for my $i (0.. @$invlist_ref - 1) {
+ my $this_from = $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";
+ }
+ 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 ($upper != $infinity) {
+ $from .= "-" . tr_chr($this_from + $range);
+ $to .= "-" . tr_chr($map + $range);
+ }
+ else {
+ $from .= "-INFTY";
+ $to .= "-INFTY";
+ }
}
- if (defined $final and $to[$#to][1] != $final) {
- push @to, [$final, $final];
+
+ return ($from, $to);
+}
+
+sub tr_decode_utf8 {
+ my($tr_av, $flags) = @_;
+ printf STDERR "flags=0x%x\n", $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;
+ }
+ }
}
- push @from, @delfrom;
+
+ my ($from, $to) = tr_invmap(\@invlist, \@map);
+
if ($flags & OPpTRANS_COMPLEMENT) {
- my @newfrom;
- my $next = 0;
- for my $i (0 .. $#from) {
- push @newfrom, [$next, $from[$i][0] - 1];
- $next = $from[$i][1] + 1;
- }
- @from = ();
- for my $range (@newfrom) {
- if ($range->[0] <= $range->[1]) {
- push @from, $range;
- }
- }
+ shift @map;
+ pop @invlist;
+ my $throw_away;
+ ($from, $throw_away) = tr_invmap(\@invlist, \@map);
}
- my($from, $to, $diff);
- for my $chunk (@from) {
- $diff = $chunk->[1] - $chunk->[0];
- if ($diff > 1) {
- $from .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]);
- } elsif ($diff == 1) {
- $from .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]);
- } else {
- $from .= tr_chr($chunk->[0]);
- }
- }
- for my $chunk (@to) {
- $diff = $chunk->[1] - $chunk->[0];
- if ($diff > 1) {
- $to .= tr_chr($chunk->[0]) . "-" . tr_chr($chunk->[1]);
- } elsif ($diff == 1) {
- $to .= tr_chr($chunk->[0]) . tr_chr($chunk->[1]);
- } else {
- $to .= tr_chr($chunk->[0]);
- }
+
+ if (DEBUG) {
+ print STDERR "Returning ", escape_str($from), "/",
+ escape_str($to), "\n";
}
- #$final = sprintf("%04x", $final) if defined $final;
- #$none = sprintf("%04x", $none) if defined $none;
- #$extra = sprintf("%04x", $extra) if defined $extra;
- #print STDERR "final: $final\n none: $none\nextra: $extra\n";
- #print STDERR $swash{'LIST'}->PV;
return (escape_str($from), escape_str($to));
}
@@ -5792,9 +5864,9 @@ sub pp_trans {
($from, $to) = tr_decode_byte($op->pv, $priv_flags);
} elsif ($class eq "PADOP") {
($from, $to)
- = tr_decode_utf8($self->padval($op->padix)->RV, $priv_flags);
+ = tr_decode_utf8($self->padval($op->padix), $priv_flags);
} else { # class($op) eq "SVOP"
- ($from, $to) = tr_decode_utf8($op->sv->RV, $priv_flags);
+ ($from, $to) = tr_decode_utf8($op->sv, $priv_flags);
}
my $flags = "";
$flags .= "c" if $priv_flags & OPpTRANS_COMPLEMENT;
diff --git a/gnu/usr.bin/perl/lib/B/Deparse.t b/gnu/usr.bin/perl/lib/B/Deparse.t
index 384c56c11f2..4b7601d365e 100644
--- a/gnu/usr.bin/perl/lib/B/Deparse.t
+++ b/gnu/usr.bin/perl/lib/B/Deparse.t
@@ -20,6 +20,8 @@ my $deparse = B::Deparse->new();
isa_ok($deparse, 'B::Deparse', 'instantiate a B::Deparse object');
my %deparse;
+sub dummy_sub {42}
+
$/ = "\n####\n";
while (<DATA>) {
chomp;
@@ -565,7 +567,7 @@ is runperl(stderr => 1, switches => [ '-MO=-qq,Deparse', $path ],
done_testing($tests);
__DATA__
-# TODO [perl #120950] This succeeds when run a 2nd time
+# [perl #120950] Previously on a 2nd instance succeeded
# y/uni/code/
tr/\x{345}/\x{370}/;
####
@@ -679,6 +681,19 @@ readline $foo;
glob $foo;
glob $foo;
####
+# more <>
+no warnings;
+no strict;
+my $fh;
+if (dummy_sub < $fh > /bar/g) { 1 }
+>>>>
+no warnings;
+no strict;
+my $fh;
+if (dummy_sub(glob((' ' . $fh . ' ')) / 'bar' / 'g')) {
+ 1;
+}
+####
# readline
readline 'FH';
readline *$_;
@@ -3062,3 +3077,45 @@ $#{$s;} = 1;
# TODO doesn't preserve backslash
my @a;
my $s = "$a[0]\[1]";
+####
+# GH #17301 aux_list() sometimes returned wrong #args
+my($r, $h);
+$r = $h->{'i'};
+$r = $h->{'i'}{'j'};
+$r = $h->{'i'}{'j'}{'k'};
+$r = $h->{'i'}{'j'}{'k'}{'l'};
+$r = $h->{'i'}{'j'}{'k'}{'l'}{'m'};
+$r = $h->{'i'}{'j'}{'k'}{'l'}{'m'}{'n'};
+$r = $h->{'i'}{'j'}{'k'}{'l'}{'m'}{'n'}{'o'};
+$r = $h->{'i'}{'j'}{'k'}{'l'}{'m'}{'n'}{'o'}{'p'};
+$r = $h->{'i'}{'j'}{'k'}{'l'}{'m'}{'n'}{'o'}{'p'}{'q'};
+$r = $h->{'i'}{'j'}{'k'}{'l'}{'m'}{'n'}{'o'}{'p'}{'q'}{'r'};
+$r = $h->{'i'}{'j'}{'k'}{'l'}{'m'}{'n'}{'o'}{'p'}{'q'}{'r'}{'s'};
+$r = $h->{'i'}{'j'}{'k'}{'l'}{'m'}{'n'}{'o'}{'p'}{'q'}{'r'}{'s'}{'t'};
+####
+# chained comparison
+my($a, $b, $c, $d, $e, $f, $g);
+$a = $b gt $c >= $d;
+$a = $b < $c <= $d > $e;
+$a = $b == $c != $d;
+$a = $b eq $c ne $d == $e;
+$a = $b << $c < $d << $e <= $f << $g;
+$a = int $b < int $c <= int $d;
+$a = ($b < $c) < ($d < $e) <= ($f < $g);
+$a = ($b == $c) < ($d == $e) <= ($f == $g);
+$a = ($b & $c) < ($d & $e) <= ($f & $g);
+$a = $b << $c == $d << $e != $f << $g;
+$a = int $b == int $c != int $d;
+$a = $b < $c == $d < $e != $f < $g;
+$a = ($b == $c) == ($d == $e) != ($f == $g);
+$a = ($b & $c) == ($d & $e) != ($f & $g);
+$a = $b << ($c < $d <= $e);
+$a = int($c < $d <= $e);
+$a = $b < ($c < $d <= $e);
+$a = $b == $c < $d <= $e;
+$a = $b & $c < $d <= $e;
+$a = $b << ($c == $d != $e);
+$a = int($c == $d != $e);
+$a = $b < ($c == $d != $e);
+$a = $b == ($c == $d != $e);
+$a = $b & $c == $d != $e;
diff --git a/gnu/usr.bin/perl/lib/B/Op_private.pm b/gnu/usr.bin/perl/lib/B/Op_private.pm
index 6b37f8bf38e..f30a6922a2e 100644
--- a/gnu/usr.bin/perl/lib/B/Op_private.pm
+++ b/gnu/usr.bin/perl/lib/B/Op_private.pm
@@ -118,7 +118,7 @@ package B::Op_private;
our %bits;
-our $VERSION = "5.030003";
+our $VERSION = "5.032001";
$bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv);
$bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv);
@@ -150,13 +150,13 @@ $bits{$_}{7} = 'OPpPV_IS_UTF8' for qw(dump goto last next redo);
$bits{$_}{6} = 'OPpREFCOUNTED' for qw(leave leaveeval leavesub leavesublv leavewrite);
$bits{$_}{2} = 'OPpSLICEWARNING' for qw(aslice hslice padav padhv rv2av rv2hv);
$bits{$_}{4} = 'OPpTARGET_MY' for qw(abs add atan2 chdir chmod chomp chown chr chroot concat cos crypt divide exec exp flock getpgrp getppid getpriority hex i_add i_divide i_modulo i_multiply i_subtract index int kill left_shift length link log mkdir modulo multiconcat multiply nbit_and nbit_or nbit_xor ncomplement oct ord pow push rand rename right_shift rindex rmdir schomp scomplement setpgrp setpriority sin sleep sqrt srand stringify subtract symlink system time unlink unshift utime wait waitpid);
+$bits{$_}{0} = 'OPpTRANS_CAN_FORCE_UTF8' for qw(trans transr);
$bits{$_}{5} = 'OPpTRANS_COMPLEMENT' for qw(trans transr);
$bits{$_}{7} = 'OPpTRANS_DELETE' for qw(trans transr);
-$bits{$_}{0} = 'OPpTRANS_FROM_UTF' for qw(trans transr);
$bits{$_}{6} = 'OPpTRANS_GROWS' for qw(trans transr);
$bits{$_}{2} = 'OPpTRANS_IDENTICAL' for qw(trans transr);
$bits{$_}{3} = 'OPpTRANS_SQUASH' for qw(trans transr);
-$bits{$_}{1} = 'OPpTRANS_TO_UTF' for qw(trans transr);
+$bits{$_}{1} = 'OPpTRANS_USE_SVOP' for qw(trans transr);
$bits{$_}{5} = 'OPpTRUEBOOL' for qw(grepwhile index length padav padhv pos ref rindex rv2av rv2hv subst);
my @bf = (
@@ -284,6 +284,8 @@ $bits{chr}{0} = $bf[0];
$bits{chroot}{0} = $bf[0];
@{$bits{close}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
$bits{closedir}{0} = $bf[0];
+$bits{cmpchain_and}{0} = $bf[0];
+$bits{cmpchain_dup}{0} = $bf[0];
$bits{complement}{0} = $bf[0];
@{$bits{concat}}{6,1,0} = ('OPpCONCAT_NESTED', $bf[1], $bf[1]);
$bits{cond_expr}{0} = $bf[0];
@@ -399,6 +401,7 @@ $bits{i_preinc}{0} = $bf[0];
@{$bits{index}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
$bits{int}{0} = $bf[0];
@{$bits{ioctl}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
+@{$bits{isa}}{1,0} = ($bf[1], $bf[1]);
@{$bits{join}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
$bits{keys}{0} = $bf[0];
@{$bits{kill}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]);
@@ -686,13 +689,13 @@ our %defines = (
OPpSPLIT_LEX => 8,
OPpSUBSTR_REPL_FIRST => 16,
OPpTARGET_MY => 16,
+ OPpTRANS_CAN_FORCE_UTF8 => 1,
OPpTRANS_COMPLEMENT => 32,
OPpTRANS_DELETE => 128,
- OPpTRANS_FROM_UTF => 1,
OPpTRANS_GROWS => 64,
OPpTRANS_IDENTICAL => 4,
OPpTRANS_SQUASH => 8,
- OPpTRANS_TO_UTF => 2,
+ OPpTRANS_USE_SVOP => 2,
OPpTRUEBOOL => 32,
);
@@ -789,13 +792,13 @@ our %labels = (
OPpSPLIT_LEX => 'LEX',
OPpSUBSTR_REPL_FIRST => 'REPL1ST',
OPpTARGET_MY => 'TARGMY',
+ OPpTRANS_CAN_FORCE_UTF8 => 'CAN_FORCE_UTF8',
OPpTRANS_COMPLEMENT => 'COMPL',
OPpTRANS_DELETE => 'DEL',
- OPpTRANS_FROM_UTF => '<UTF',
OPpTRANS_GROWS => 'GROWS',
OPpTRANS_IDENTICAL => 'IDENT',
OPpTRANS_SQUASH => 'SQUASH',
- OPpTRANS_TO_UTF => '>UTF',
+ OPpTRANS_USE_SVOP => 'USE_SVOP',
OPpTRUEBOOL => 'BOOL',
);
@@ -846,7 +849,7 @@ our %ops_using = (
OPpSPLIT_ASSIGN => [qw(split)],
OPpSUBSTR_REPL_FIRST => [qw(substr)],
OPpTARGET_MY => [qw(abs add atan2 chdir chmod chomp chown chr chroot concat cos crypt divide exec exp flock getpgrp getppid getpriority hex i_add i_divide i_modulo i_multiply i_subtract index int kill left_shift length link log mkdir modulo multiconcat multiply nbit_and nbit_or nbit_xor ncomplement oct ord pow push rand rename right_shift rindex rmdir schomp scomplement setpgrp setpriority sin sleep sqrt srand stringify subtract symlink system time unlink unshift utime wait waitpid)],
- OPpTRANS_COMPLEMENT => [qw(trans transr)],
+ OPpTRANS_CAN_FORCE_UTF8 => [qw(trans transr)],
OPpTRUEBOOL => [qw(grepwhile index length padav padhv pos ref rindex rv2av rv2hv subst)],
);
@@ -887,11 +890,11 @@ $ops_using{OPpSORT_STABLE} = $ops_using{OPpSORT_DESCEND};
$ops_using{OPpSORT_UNSTABLE} = $ops_using{OPpSORT_DESCEND};
$ops_using{OPpSPLIT_IMPLIM} = $ops_using{OPpSPLIT_ASSIGN};
$ops_using{OPpSPLIT_LEX} = $ops_using{OPpSPLIT_ASSIGN};
-$ops_using{OPpTRANS_DELETE} = $ops_using{OPpTRANS_COMPLEMENT};
-$ops_using{OPpTRANS_FROM_UTF} = $ops_using{OPpTRANS_COMPLEMENT};
-$ops_using{OPpTRANS_GROWS} = $ops_using{OPpTRANS_COMPLEMENT};
-$ops_using{OPpTRANS_IDENTICAL} = $ops_using{OPpTRANS_COMPLEMENT};
-$ops_using{OPpTRANS_SQUASH} = $ops_using{OPpTRANS_COMPLEMENT};
-$ops_using{OPpTRANS_TO_UTF} = $ops_using{OPpTRANS_COMPLEMENT};
+$ops_using{OPpTRANS_COMPLEMENT} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
+$ops_using{OPpTRANS_DELETE} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
+$ops_using{OPpTRANS_GROWS} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
+$ops_using{OPpTRANS_IDENTICAL} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
+$ops_using{OPpTRANS_SQUASH} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
+$ops_using{OPpTRANS_USE_SVOP} = $ops_using{OPpTRANS_CAN_FORCE_UTF8};
# ex: set ro:
diff --git a/gnu/usr.bin/perl/lib/Benchmark.pm b/gnu/usr.bin/perl/lib/Benchmark.pm
index 253716214fa..3eeba798730 100644
--- a/gnu/usr.bin/perl/lib/Benchmark.pm
+++ b/gnu/usr.bin/perl/lib/Benchmark.pm
@@ -482,7 +482,7 @@ our(@ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $VERSION);
clearcache clearallcache disablecache enablecache);
%EXPORT_TAGS=( all => [ @EXPORT, @EXPORT_OK ] ) ;
-$VERSION = 1.22;
+$VERSION = 1.23;
# --- ':hireswallclock' special handling
@@ -796,7 +796,7 @@ sub countit {
if ( $tc <= 0 and $n > 1024 ) {
my $d = timediff($t1, $t0);
# note that $d is the total CPU time taken to call timeit(),
- # while $tc is is difference in CPU secs between the empty run
+ # while $tc is the difference in CPU secs between the empty run
# and the code run. If the code is trivial, its possible
# for $d to get large while $tc is still zero (or slightly
# negative). Bail out once timeit() starts taking more than a
diff --git a/gnu/usr.bin/perl/lib/Class/Struct.pm b/gnu/usr.bin/perl/lib/Class/Struct.pm
index 0aaab519b73..c593dc7c390 100644
--- a/gnu/usr.bin/perl/lib/Class/Struct.pm
+++ b/gnu/usr.bin/perl/lib/Class/Struct.pm
@@ -14,7 +14,7 @@ require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(struct);
-$VERSION = '0.65';
+$VERSION = '0.66';
my $print = 0;
sub printem {
@@ -375,7 +375,7 @@ on the declared type of the element.
=item Scalar (C<'$'> or C<'*$'>)
The element is a scalar, and by default is initialized to C<undef>
-(but see L<Initializing with new>).
+(but see L</Initializing with new>).
The accessor's argument, if any, is assigned to the element.
diff --git a/gnu/usr.bin/perl/lib/DBM_Filter/t/encode.t b/gnu/usr.bin/perl/lib/DBM_Filter/t/encode.t
index 37a58ac8b8f..c7ef60428f7 100644
--- a/gnu/usr.bin/perl/lib/DBM_Filter/t/encode.t
+++ b/gnu/usr.bin/perl/lib/DBM_Filter/t/encode.t
@@ -65,13 +65,16 @@ is $@, '', "push an 'encode' filter (default to utf-8)" ;
}
-VerifyData(\%h1,
+{
+ local $TODO = "Currently broken on EBCDIC" if $::IS_EBCDIC;
+ VerifyData(\%h1,
{
'alpha' => "\N{alpha}",
"beta" => "\N{beta}",
"\N{gamma}"=> "gamma",
"" => "",
});
+}
eval { $db1->Filter_Pop() };
is $@, '', "pop the 'utf8' filter" ;
diff --git a/gnu/usr.bin/perl/lib/English.pm b/gnu/usr.bin/perl/lib/English.pm
index e40cc124a13..283cd010701 100644
--- a/gnu/usr.bin/perl/lib/English.pm
+++ b/gnu/usr.bin/perl/lib/English.pm
@@ -1,6 +1,6 @@
package English;
-our $VERSION = '1.10';
+our $VERSION = '1.11';
require Exporter;
@ISA = qw(Exporter);
@@ -13,7 +13,7 @@ English - use nice English (or awk) names for ugly punctuation variables
use English;
use English qw( -no_match_vars ) ; # Avoids regex performance
- # penalty in perl 5.16 and
+ # penalty in perl 5.18 and
# earlier
...
if ($ERRNO =~ /denied/) { ... }
diff --git a/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t b/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t
index 59d792115af..a5cf2060e12 100644
--- a/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t
+++ b/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t
@@ -18,6 +18,11 @@ if ( $Config{usecrosscompile} && !can_run($cc) ) {
print "1..0 # SKIP Cross-compiling and the target doesn't have $cc";
exit;
}
+
+if (ord("A") != 65) {
+ print "1..0 # SKIP EBCDIC platform doesn't currently work";
+ exit;
+}
open(my $fh,">embed_test.c") || die "Cannot open embed_test.c:$!";
print $fh <DATA>;
close($fh);
diff --git a/gnu/usr.bin/perl/lib/File/stat.pm b/gnu/usr.bin/perl/lib/File/stat.pm
index 578c3118c86..863092c93dc 100644
--- a/gnu/usr.bin/perl/lib/File/stat.pm
+++ b/gnu/usr.bin/perl/lib/File/stat.pm
@@ -5,12 +5,13 @@ use strict;
use warnings;
use warnings::register;
use Carp;
+use constant _IS_CYGWIN => $^O eq "cygwin";
BEGIN { *warnif = \&warnings::warnif }
our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-our $VERSION = '1.08';
+our $VERSION = '1.09';
our @fields;
our ( $st_dev, $st_ino, $st_mode,
@@ -98,7 +99,7 @@ else {
# This code basically assumes that the rwx bits of the mode are
# the 0777 bits, but so does Perl_cando.
- if ($uid == 0 && $^O ne "VMS") {
+ if (_IS_CYGWIN ? _ingroup(544, $eff) : ($uid == 0 && $^O ne "VMS")) {
# If we're root on unix
# not testing for executable status => all file tests are true
return 1 if !($mode & 0111);
diff --git a/gnu/usr.bin/perl/lib/File/stat.t b/gnu/usr.bin/perl/lib/File/stat.t
index c403fc44980..fc9bb12cef2 100644
--- a/gnu/usr.bin/perl/lib/File/stat.t
+++ b/gnu/usr.bin/perl/lib/File/stat.t
@@ -133,6 +133,9 @@ SKIP: {
test_X_ops($^X, "for $^X", qr/A/);
}
+# open early so atime is consistent with the name based call
+local *STAT;
+my $canopen = open(STAT, '<', $file);
my $stat = File::stat::stat($file);
isa_ok($stat, 'File::stat', 'should build a stat object');
@@ -143,8 +146,7 @@ for (split //, "tTB") {
}
SKIP: {
- local *STAT;
- skip("Could not open file: $!", 2) unless open(STAT, '<', $file);
+ skip("Could not open file: $!", 2) unless $canopen;
isa_ok(File::stat::stat('STAT'), 'File::stat',
'... should be able to find filehandle');
diff --git a/gnu/usr.bin/perl/lib/FindBin.pm b/gnu/usr.bin/perl/lib/FindBin.pm
deleted file mode 100644
index cf6ecf29040..00000000000
--- a/gnu/usr.bin/perl/lib/FindBin.pm
+++ /dev/null
@@ -1,170 +0,0 @@
-# FindBin.pm
-#
-# Copyright (c) 1995 Graham Barr & Nick Ing-Simmons. All rights reserved.
-# This program is free software; you can redistribute it and/or modify it
-# under the same terms as Perl itself.
-
-=head1 NAME
-
-FindBin - Locate directory of original perl script
-
-=head1 SYNOPSIS
-
- use FindBin;
- use lib "$FindBin::Bin/../lib";
-
- or
-
- use FindBin qw($Bin);
- use lib "$Bin/../lib";
-
-=head1 DESCRIPTION
-
-Locates the full path to the script bin directory to allow the use
-of paths relative to the bin directory.
-
-This allows a user to setup a directory tree for some software with
-directories C<< <root>/bin >> and C<< <root>/lib >>, and then the above
-example will allow the use of modules in the lib directory without knowing
-where the software tree is installed.
-
-If perl is invoked using the B<-e> option or the perl script is read from
-C<STDIN> then FindBin sets both C<$Bin> and C<$RealBin> to the current
-directory.
-
-=head1 EXPORTABLE VARIABLES
-
- $Bin - path to bin directory from where script was invoked
- $Script - basename of script from which perl was invoked
- $RealBin - $Bin with all links resolved
- $RealScript - $Script with all links resolved
-
-=head1 KNOWN ISSUES
-
-If there are two modules using C<FindBin> from different directories
-under the same interpreter, this won't work. Since C<FindBin> uses a
-C<BEGIN> block, it'll be executed only once, and only the first caller
-will get it right. This is a problem under mod_perl and other persistent
-Perl environments, where you shouldn't use this module. Which also means
-that you should avoid using C<FindBin> in modules that you plan to put
-on CPAN. To make sure that C<FindBin> will work is to call the C<again>
-function:
-
- use FindBin;
- FindBin::again(); # or FindBin->again;
-
-In former versions of FindBin there was no C<again> function. The
-workaround was to force the C<BEGIN> block to be executed again:
-
- delete $INC{'FindBin.pm'};
- require FindBin;
-
-=head1 AUTHORS
-
-FindBin is supported as part of the core perl distribution. Please send bug
-reports to E<lt>F<perlbug@perl.org>E<gt> using the perlbug program
-included with perl.
-
-Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
-Nick Ing-Simmons E<lt>F<nik@tiuk.ti.com>E<gt>
-
-=head1 COPYRIGHT
-
-Copyright (c) 1995 Graham Barr & Nick Ing-Simmons. All rights reserved.
-This program is free software; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
-package FindBin;
-use Carp;
-require 5.000;
-require Exporter;
-use Cwd qw(getcwd cwd abs_path);
-use File::Basename;
-use File::Spec;
-
-@EXPORT_OK = qw($Bin $Script $RealBin $RealScript $Dir $RealDir);
-%EXPORT_TAGS = (ALL => [qw($Bin $Script $RealBin $RealScript $Dir $RealDir)]);
-@ISA = qw(Exporter);
-
-$VERSION = "1.51";
-
-
-# needed for VMS-specific filename translation
-if( $^O eq 'VMS' ) {
- require VMS::Filespec;
- VMS::Filespec->import;
-}
-
-sub cwd2 {
- my $cwd = getcwd();
- # getcwd might fail if it hasn't access to the current directory.
- # try harder.
- defined $cwd or $cwd = cwd();
- $cwd;
-}
-
-sub init
-{
- *Dir = \$Bin;
- *RealDir = \$RealBin;
-
- if($0 eq '-e' || $0 eq '-')
- {
- # perl invoked with -e or script is on C<STDIN>
- $Script = $RealScript = $0;
- $Bin = $RealBin = cwd2();
- $Bin = VMS::Filespec::unixify($Bin) if $^O eq 'VMS';
- }
- else
- {
- my $script = $0;
-
- if ($^O eq 'VMS')
- {
- ($Bin,$Script) = VMS::Filespec::rmsexpand($0) =~ /(.*[\]>\/]+)(.*)/s;
- # C<use disk:[dev]/lib> isn't going to work, so unixify first
- ($Bin = VMS::Filespec::unixify($Bin)) =~ s/\/\z//;
- ($RealBin,$RealScript) = ($Bin,$Script);
- }
- else
- {
- croak("Cannot find current script '$0'") unless(-f $script);
-
- # Ensure $script contains the complete path in case we C<chdir>
-
- $script = File::Spec->catfile(cwd2(), $script)
- unless File::Spec->file_name_is_absolute($script);
-
- ($Script,$Bin) = fileparse($script);
-
- # Resolve $script if it is a link
- while(1)
- {
- my $linktext = readlink($script);
-
- ($RealScript,$RealBin) = fileparse($script);
- last unless defined $linktext;
-
- $script = (File::Spec->file_name_is_absolute($linktext))
- ? $linktext
- : File::Spec->catfile($RealBin, $linktext);
- }
-
- # Get absolute paths to directories
- if ($Bin) {
- my $BinOld = $Bin;
- $Bin = abs_path($Bin);
- defined $Bin or $Bin = File::Spec->canonpath($BinOld);
- }
- $RealBin = abs_path($RealBin) if($RealBin);
- }
- }
-}
-
-BEGIN { init }
-
-*again = \&init;
-
-1; # Keep require happy
diff --git a/gnu/usr.bin/perl/lib/FindBin.t b/gnu/usr.bin/perl/lib/FindBin.t
deleted file mode 100644
index 36e142c476e..00000000000
--- a/gnu/usr.bin/perl/lib/FindBin.t
+++ /dev/null
@@ -1,20 +0,0 @@
-#!./perl
-
-BEGIN {
- # Can't chdir in BEGIN before FindBin runs, as it then can't find us.
- @INC = -d 't' ? 'lib' : '../lib';
-}
-
-print "1..2\n";
-
-use FindBin qw($Bin);
-
-print "# $Bin\n";
-print "not " unless $Bin =~ m,[/.]lib\]?$,;
-print "ok 1\n";
-
-$0 = "-";
-FindBin::again();
-
-print "not " if $FindBin::Script ne "-";
-print "ok 2\n";
diff --git a/gnu/usr.bin/perl/lib/Pod/t/InputObjects.t b/gnu/usr.bin/perl/lib/Pod/t/InputObjects.t
deleted file mode 100644
index 515645a43bf..00000000000
--- a/gnu/usr.bin/perl/lib/Pod/t/InputObjects.t
+++ /dev/null
@@ -1,127 +0,0 @@
-#!perl -Tw
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-}
-
-use Test::More;
-
-plan tests => 33;
-
-use_ok( 'Pod::InputObjects' );
-
-
-{ # test package Pod::InputSource
- local *FH;
- my $p_is = Pod::InputSource->new( -handle => \*FH );
-
- isa_ok( $p_is, 'Pod::InputSource', 'Pod::InputSource constructor' );
-
- is( $p_is->name, '(unknown)', 'Pod::InputSource->name()' );
- is( $p_is->name( 'test' ), 'test', 'set Pod::InputSource->name( test )' );
- is( $p_is->filename, 'test', 'Pod::InputSource->filename() alias' );
-
- is( $p_is->handle, \*FH, 'Pod::InputSource->handle()' );
-
- is( $p_is->was_cutting(), 0, 'Pod::InputSource->was_cutting()' );
- is( $p_is->was_cutting( 1 ), 1, 'set Pod::InputSource->was_cutting( 1 )' );
-}
-
-{ # test package Pod::Paragraph
- my $p_p1 = Pod::Paragraph->new( -text => 'NAME', -name => 'head2' );
- my $p_p2 = Pod::Paragraph->new( 'test - This is the test suite' );
- isa_ok( $p_p1, 'Pod::Paragraph', 'Pod::Paragraph constructor' );
- isa_ok( $p_p2, 'Pod::Paragraph', 'Pod::Paragraph constructor revisited' );
-
- is( $p_p1->cmd_name(), 'head2', 'Pod::Paragraph->cmd_name()' );
- is( $p_p1->cmd_name( 'head1' ), 'head1',
- 'Pod::Paragraph->cmd_name( head1 )' );
- ok( !$p_p2->cmd_name(),
- 'Pod::Paragraph->cmd_name() revisited' );
-
- is( $p_p1->text(), 'NAME', 'Pod::Paragraph->text()' );
- is( $p_p2->text(), 'test - This is the test suite',
- 'Pod::Paragraph->text() revisited' );
- my $new_text = 'test - This is the test suite.';
- is( $p_p2->text( $new_text ), $new_text,
- 'Pod::Paragraph->text( ... )' );
-
- is( $p_p1->raw_text, '=head1 NAME',
- 'Pod::Paragraph->raw_text()' );
- is( $p_p2->raw_text, $new_text,
- 'Pod::Paragraph->raw_text() revisited' );
-
- is( $p_p1->cmd_prefix, '=',
- 'Pod::Paragraph->cmd_prefix()' );
- is( $p_p1->cmd_separator, ' ',
- 'Pod::Paragraph->cmd_separator()' );
-
- # Pod::Parser->parse_tree() / ptree()
-
- is( $p_p1->file_line(), '<unknown-file>:0',
- 'Pod::Paragraph->file_line()' );
- $p_p2->{ '-file' } = 'test'; $p_p2->{ '-line' } = 3;
- is( $p_p2->file_line(), 'test:3',
- 'Pod::Paragraph->file_line()' );
-}
-
-{ # test package Pod::InteriorSequence
-
- my $p_pt = Pod::ParseTree->new();
- my $pre_txt = 'test - This is the ';
- my $cmd_txt = 'test suite';
- my $pst_txt ='.';
- $p_pt->append( $cmd_txt );
-
- my $p_is = Pod::InteriorSequence->new(
- -name => 'I', -ldelim => '<', -rdelim => '>',
- -ptree => $p_pt
- );
- isa_ok( $p_is, 'Pod::InteriorSequence', 'P::InteriorSequence constructor' );
-
- is( $p_is->cmd_name(), 'I', 'Pod::InteriorSequence->cmd_name()' );
- is( $p_is->cmd_name( 'B' ), 'B',
- 'set Pod::InteriorSequence->cmd_name( B )' );
-
- is( $p_is->raw_text(), "B<$cmd_txt>",
- 'Pod::InteriorSequence->raw_text()' );
-
- $p_is->prepend( $pre_txt );
- is( $p_is->raw_text(), "B<$pre_txt$cmd_txt>",
- 'raw_text() after prepend()' );
-
- $p_is->append( $pst_txt );
- is( $p_is->raw_text(), "B<$pre_txt$cmd_txt$pst_txt>",
- 'raw_text() after append()' );
-}
-
-{ # test package Pod::ParseTree
- my $p_pt1 = Pod::ParseTree->new();
- my $p_pt2 = Pod::ParseTree->new();
- isa_ok( $p_pt1, 'Pod::ParseTree',
- 'Pod::ParseTree constructor' );
-
- is( $p_pt1->top(), $p_pt1, 'Pod::ParseTree->top()' );
- is( $p_pt1->top( $p_pt1, $p_pt2 ), $p_pt1,
- 'set new Pod::ParseTree->top()' );
-
- ok( eq_array( [ $p_pt1->children() ], [ $p_pt1, $p_pt2] ),
- 'Pod::ParseTree->children()' );
-
- my $text = 'This is the test suite.';
- $p_pt2->append( $text );
- is( $p_pt2->raw_text(), $text, 'Pod::ParseTree->append()' );
-}
-
-__END__
-
-=head1 NAME
-
-InputObjects.t - The tests for Pod::InputObjects
-
-=head AUTHOR
-
-20011220 Abe Timmerman <abe@ztreet.demon.nl>
-
-=cut
diff --git a/gnu/usr.bin/perl/lib/Pod/t/Select.t b/gnu/usr.bin/perl/lib/Pod/t/Select.t
deleted file mode 100644
index 27ef0103945..00000000000
--- a/gnu/usr.bin/perl/lib/Pod/t/Select.t
+++ /dev/null
@@ -1,116 +0,0 @@
-#!perl
-use warnings;
-use strict;
-
-BEGIN {
- chdir 't' if -d 't';
- @INC = '../lib';
-};
-
-use Test::More tests => 9;
-
-require_ok( 'Pod::Select' );
-
-my $fake_out = tie *FAKEOUT, 'CatchOut';
-
-my $p_s = Pod::Select->new;
-isa_ok( $p_s, 'Pod::Select' );
-
-my $pod = << 'EO_NAME';
-=head1 NAME
-
-Select.t - Tests for Pod::Select.
-
-EO_NAME
-
-$p_s->select( 'NAME' );
-$p_s->parse_from_file( $0, \*FAKEOUT );
-is( $$fake_out, $pod, 'select( NAME )' );
-
-$pod .= << 'EO_SYNOPSIS';
-=head1 SYNOPSIS
-
-This program just tests the basics of the Pod::Select module.
-
-EO_SYNOPSIS
-
-$$fake_out = '';
-$p_s->select( 'NAME', 'SYNOPSIS' );
-$p_s->parse_from_file( $0, \*FAKEOUT );
-is( $$fake_out, $pod, 'select( NAME, SYNOPSIS )' );
-
-$pod .= << 'EO_AUTHOR';
-=head1 AUTHOR
-
-Abe Timmerman <abe@ztreet.demon.nl>
-
-EO_AUTHOR
-
-$$fake_out = '';
-$p_s->add_selection( 'AUTHOR' );
-$p_s->parse_from_file( $0, \*FAKEOUT );
-is( $$fake_out, $pod, 'add_selection( AUTHOR )' );
-
-my $head1 = $p_s->curr_headings(1);
-is( $head1, 'AUTHOR', 'curr_headings()' );
-
-$pod = << 'EO_DESCRIPTION';
-=head2 subsection
-
-a sub-section can be specified
-
-EO_DESCRIPTION
-
-$$fake_out = '';
-$p_s->select( 'DESCRIPTION/subsection' );
-$p_s->parse_from_file( $0, \*FAKEOUT );
-is( $$fake_out, $pod, 'select( DESCRIPTION/subsection )' );
-
-
-ok( $p_s->match_section( 'DESCRIPTION', 'subsection' ),
- 'match_section( DESCRIPTION, subsection )' );
-
-$pod = << 'EO_DESCRIPTION';
-=head1 DESCRIPTION
-
-I'll go by the POD in Pod::Select.
-
-EO_DESCRIPTION
-
-$$fake_out = '';
-$p_s->select( 'DESCRIPTION/!.+' );
-$p_s->parse_from_file( $0, \*FAKEOUT );
-is( $$fake_out, $pod, 'select( DESCRIPTION/!.+ )' );
-
-
-package CatchOut;
-sub TIEHANDLE { bless \( my $self ), shift }
-sub PRINT { my $self = shift; $$self .= $_[0] }
-
-__END__
-
-=head1 NAME
-
-Select.t - Tests for Pod::Select.
-
-=head1 SYNOPSIS
-
-This program just tests the basics of the Pod::Select module.
-
-=head1 DESCRIPTION
-
-I'll go by the POD in Pod::Select.
-
-=head2 selection + add_selection
-
-Pull out the specified sections
-
-=head2 subsection
-
-a sub-section can be specified
-
-=head1 AUTHOR
-
-Abe Timmerman <abe@ztreet.demon.nl>
-
-=cut
diff --git a/gnu/usr.bin/perl/lib/Pod/t/utils.t b/gnu/usr.bin/perl/lib/Pod/t/utils.t
deleted file mode 100644
index 9f4fe55f004..00000000000
--- a/gnu/usr.bin/perl/lib/Pod/t/utils.t
+++ /dev/null
@@ -1,81 +0,0 @@
-#!./perl -w
-# Test hyperlinks et al from Pod::ParseUtils
-
-use Test::More tests => 22;
-
-use strict;
-use Pod::ParseUtils;
-
-my @links = qw{
- name
- name/ident
- name/"sec"
- "sec"
- /"sec"
- http://www.perl.org/
- text|name
- text|name/ident
- text|name/"sec"
- text|"sec"
-};
-
-my @results = (
- "P<name>",
- "Q<ident> in P<name>",
- "Q<sec> in P<name>",
- "Q<sec>",
- "Q<sec>",
- "Q<http://www.perl.org/>",
- "Q<text>",
- "Q<text>",
- "Q<text>",
- "Q<text>",
- );
-
-is(@results, @links, 'sanity check - array lengths equal?');
-
-for my $i( 0..@links ) {
- my $link = new Pod::Hyperlink( $links[$i] );
- is($link->markup, $results[$i], "test hyperlink $i");
-}
-
-# Now test lists
-# This test needs to be better
-my $list = new Pod::List( -indent => 4,
- -start => 52,
- -file => "itemtest.t",
- -type => "OL",
- );
-
-ok($list);
-
-is($list->indent, 4);
-is($list->start, 52);
-is($list->type, "OL");
-
-
-# Pod::Cache
-
-# also needs work
-
-my $cache = new Pod::Cache;
-
-# Store it in the cache
-$cache->item(
- -page => "Pod::ParseUtils",
- -description => "A description",
- -file => "file.t",
- );
-
-my $item = $cache->find_page("Pod::ParseUtils");
-ok($item, 'found item of this name');
-
-is($cache->find_page("Junk"), undef, 'expect to find nothing');
-
-my @i = $cache->item;
-is($i[0], $item, 'item we found is the same one as the first in the list');
-
-# Check the contents
-is($item->page, "Pod::ParseUtils");
-is($item->description, "A description");
-is($item->file, "file.t");
diff --git a/gnu/usr.bin/perl/lib/Tie/Scalar.pm b/gnu/usr.bin/perl/lib/Tie/Scalar.pm
index 50b97018ad1..62f89f88c88 100644
--- a/gnu/usr.bin/perl/lib/Tie/Scalar.pm
+++ b/gnu/usr.bin/perl/lib/Tie/Scalar.pm
@@ -1,6 +1,6 @@
package Tie::Scalar;
-our $VERSION = '1.04';
+our $VERSION = '1.05';
=head1 NAME
@@ -82,7 +82,7 @@ C<< Tie::Scalar::STORE >> results in a (trappable) croak. And if you inherit
from C<< Tie::Scalar >>, you I<must> provide either a C<< new >> or a
C<< TIESCALAR >> method.
-If you are looking for a class that does everything for you you don't
+If you are looking for a class that does everything for you that you don't
define yourself, use the C<< Tie::StdScalar >> class, not the
C<< Tie::Scalar >> one.
diff --git a/gnu/usr.bin/perl/lib/Unicode/UCD.pm b/gnu/usr.bin/perl/lib/Unicode/UCD.pm
index 1f04bca038f..11fa2bef6a4 100644
--- a/gnu/usr.bin/perl/lib/Unicode/UCD.pm
+++ b/gnu/usr.bin/perl/lib/Unicode/UCD.pm
@@ -5,7 +5,10 @@ use warnings;
no warnings 'surrogate'; # surrogates can be inputs to this
use charnames ();
-our $VERSION = '0.72';
+our $VERSION = '0.75';
+
+sub DEBUG () { 0 }
+$|=1 if DEBUG;
require Exporter;
@@ -140,6 +143,21 @@ Note that the largest code point in Unicode is U+10FFFF.
=cut
+our %caseless_equivalent;
+our $e_precision;
+our %file_to_swash_name;
+our @inline_definitions;
+our %loose_property_name_of;
+our %loose_property_to_file_of;
+our %loose_to_file_of;
+our $MAX_CP;
+our %nv_floating_to_rational;
+our %prop_aliases;
+our %stricter_to_file_of;
+our %strict_property_to_file_of;
+our %SwashInfo;
+our %why_deprecated;
+
my $v_unicode_version; # v-string.
sub openunicode {
@@ -198,7 +216,7 @@ the standard),
C<undef> is returned.
Fields that aren't applicable to the particular code point argument exist in the
-returned hash, and are empty.
+returned hash, and are empty.
For results that are less "raw" than this function returns, or to get the values for
any property, not just the few covered by this function, use the
@@ -344,6 +362,578 @@ L<Unicode::Normalize> module.)
=cut
+my %Cache;
+
+# Digits may be separated by a single underscore
+my $digits = qr/ ( [0-9] _? )+ (?!:_) /x;
+
+# A sign can be surrounded by white space
+my $sign = qr/ \s* [+-]? \s* /x;
+
+my $f_float = qr/ $sign $digits+ \. $digits* # e.g., 5.0, 5.
+ | $sign $digits* \. $digits+/x; # 0.7, .7
+
+# A number may be an integer, a rational, or a float with an optional exponent
+# We (shudder) accept a signed denominator
+my $number = qr{ ^ $sign $digits+ $
+ | ^ $sign $digits+ \/ $sign $digits+ $
+ | ^ $f_float (?: [Ee] [+-]? $digits )? $}x;
+
+sub loose_name ($) {
+ # Given a lowercase property or property-value name, return its
+ # standardized version that is expected for look-up in the 'loose' hashes
+ # in UCD.pl (hence, this depends on what mktables does). This squeezes
+ # out blanks, underscores and dashes. The complication stems from the
+ # grandfathered-in 'L_', which retains a single trailing underscore.
+
+# integer or float (no exponent)
+my $integer_or_float_re = qr/ ^ -? \d+ (:? \. \d+ )? $ /x;
+
+# Also includes rationals
+my $numeric_re = qr! $integer_or_float_re | ^ -? \d+ / \d+ $ !x;
+ return $_[0] if $_[0] =~ $numeric_re;
+
+ (my $loose = $_[0]) =~ s/[-_ \t]//g;
+
+ return $loose if $loose !~ / ^ (?: is | to )? l $/x;
+ return 'l_' if $_[0] =~ / l .* _ /x; # If original had a trailing '_'
+ return $loose;
+}
+
+##
+## "SWASH" == "SWATCH HASH". A "swatch" is a swatch of the Unicode landscape.
+## It's a data structure that encodes a set of Unicode characters.
+##
+
+{
+ use re "/aa"; # Nothing here uses above Latin1.
+
+ # If a floating point number is within this distance from the value of a
+ # fraction, it is considered to be that fraction, even if many more digits
+ # are specified that don't exactly match.
+ my $min_floating_slop;
+
+ # To guard against this program calling something that in turn ends up
+ # calling this program with the same inputs, and hence infinitely
+ # recursing, we keep a stack of the properties that are currently in
+ # progress, pushed upon entry, popped upon return.
+ my @recursed;
+
+ sub SWASHNEW {
+ my ($class, $type, $list, $minbits) = @_;
+ my $user_defined = 0;
+ local $^D = 0 if $^D;
+
+ $class = "" unless defined $class;
+ print STDERR __LINE__, ": class=$class, type=$type, list=",
+ (defined $list) ? $list : ':undef:',
+ ", minbits=$minbits\n" if DEBUG;
+
+ ##
+ ## Get the list of codepoints for the type.
+ ## Called from swash_init (see utf8.c) or SWASHNEW itself.
+ ##
+ ## Callers of swash_init:
+ ## prop_invlist
+ ## Unicode::UCD::prop_invmap
+ ##
+ ## Given a $type, our goal is to fill $list with the set of codepoint
+ ## ranges. If $type is false, $list passed is used.
+ ##
+ ## $minbits:
+ ## For binary properties, $minbits must be 1.
+ ## For character mappings (case and transliteration), $minbits must
+ ## be a number except 1.
+ ##
+ ## $list (or that filled according to $type):
+ ## Refer to perlunicode.pod, "User-Defined Character Properties."
+ ##
+ ## For binary properties, only characters with the property value
+ ## of True should be listed. The 3rd column, if any, will be ignored
+ ##
+ ## To make the parsing of $type clear, this code takes the a rather
+ ## unorthodox approach of last'ing out of the block once we have the
+ ## info we need. Were this to be a subroutine, the 'last' would just
+ ## be a 'return'.
+ ##
+ # If a problem is found $type is returned;
+ # Upon success, a new (or cached) blessed object is returned with
+ # keys TYPE, BITS, EXTRAS, LIST, and with values having the
+ # same meanings as the input parameters.
+ # SPECIALS contains a reference to any special-treatment hash in the
+ # property.
+ # INVERT_IT is non-zero if the result should be inverted before use
+ # USER_DEFINED is non-zero if the result came from a user-defined
+ my $file; ## file to load data from, and also part of the %Cache key.
+
+ # Change this to get a different set of Unicode tables
+ my $unicore_dir = 'unicore';
+ my $invert_it = 0;
+ my $list_is_from_mktables = 0; # Is $list returned from a mktables
+ # generated file? If so, we know it's
+ # well behaved.
+
+ if ($type)
+ {
+ # Verify that this isn't a recursive call for this property.
+ # Can't use croak, as it may try to recurse to here itself.
+ my $class_type = $class . "::$type";
+ if (grep { $_ eq $class_type } @recursed) {
+ CORE::die "panic: Infinite recursion in SWASHNEW for '$type'\n";
+ }
+ push @recursed, $class_type;
+
+ $type =~ s/^\s+//;
+ $type =~ s/\s+$//;
+
+ # regcomp.c surrounds the property name with '__" and '_i' if this
+ # is to be caseless matching.
+ my $caseless = $type =~ s/^(.*)__(.*)_i$/$1$2/;
+
+ print STDERR __LINE__, ": type=$type, caseless=$caseless\n" if DEBUG;
+
+ GETFILE:
+ {
+ ##
+ ## It could be a user-defined property. Look in current
+ ## package if no package given
+ ##
+
+
+ my $caller0 = caller(0);
+ my $caller1 = $type =~ s/(.+):://
+ ? $1
+ : $caller0 eq 'main'
+ ? 'main'
+ : caller(1);
+
+ if (defined $caller1 && $type =~ /^I[ns]\w+$/) {
+ my $prop = "${caller1}::$type";
+ if (exists &{$prop}) {
+ # stolen from Scalar::Util::PP::tainted()
+ my $tainted;
+ {
+ local($@, $SIG{__DIE__}, $SIG{__WARN__});
+ local $^W = 0;
+ no warnings;
+ eval { kill 0 * $prop };
+ $tainted = 1 if $@ =~ /^Insecure/;
+ }
+ die "Insecure user-defined property \\p{$prop}\n"
+ if $tainted;
+ no strict 'refs';
+ $list = &{$prop}($caseless);
+ $user_defined = 1;
+ last GETFILE;
+ }
+ }
+
+ require "$unicore_dir/UCD.pl";
+
+ # All property names are matched caselessly
+ my $property_and_table = CORE::lc $type;
+ print STDERR __LINE__, ": $property_and_table\n" if DEBUG;
+
+ # See if is of the compound form 'property=value', where the
+ # value indicates the table we should use.
+ my ($property, $table, @remainder) =
+ split /\s*[:=]\s*/, $property_and_table, -1;
+ if (@remainder) {
+ pop @recursed if @recursed;
+ return $type;
+ }
+
+ my $prefix;
+ if (! defined $table) {
+
+ # Here, is the single form. The property becomes empty, and
+ # the whole value is the table.
+ $table = $property;
+ $prefix = $property = "";
+ } else {
+ print STDERR __LINE__, ": $property\n" if DEBUG;
+
+ # Here it is the compound property=table form. The property
+ # name is always loosely matched, and always can have an
+ # optional 'is' prefix (which isn't true in the single
+ # form).
+ $property = loose_name($property) =~ s/^is//r;
+
+ # And convert to canonical form. Quit if not valid.
+ $property = $loose_property_name_of{$property};
+ if (! defined $property) {
+ pop @recursed if @recursed;
+ return $type;
+ }
+
+ $prefix = "$property=";
+
+ # If the rhs looks like it is a number...
+ print STDERR __LINE__, ": table=$table\n" if DEBUG;
+
+ if ($table =~ $number) {
+ print STDERR __LINE__, ": table=$table\n" if DEBUG;
+
+ # Split on slash, in case it is a rational, like \p{1/5}
+ my @parts = split m{ \s* / \s* }x, $table, -1;
+ print __LINE__, ": $type\n" if @parts > 2 && DEBUG;
+
+ foreach my $part (@parts) {
+ print __LINE__, ": part=$part\n" if DEBUG;
+
+ $part =~ s/^\+\s*//; # Remove leading plus
+ $part =~ s/^-\s*/-/; # Remove blanks after unary
+ # minus
+
+ # Remove underscores between digits.
+ $part =~ s/(?<= [0-9] ) _ (?= [0-9] ) //xg;
+
+ # No leading zeros (but don't make a single '0'
+ # into a null string)
+ $part =~ s/ ^ ( -? ) 0+ /$1/x;
+ $part .= '0' if $part eq '-' || $part eq "";
+
+ # No trailing zeros after a decimal point
+ $part =~ s/ ( \. [0-9]*? ) 0+ $ /$1/x;
+
+ # Begin with a 0 if a leading decimal point
+ $part =~ s/ ^ ( -? ) \. /${1}0./x;
+
+ # Ensure not a trailing decimal point: turn into an
+ # integer
+ $part =~ s/ \. $ //x;
+
+ print STDERR __LINE__, ": part=$part\n" if DEBUG;
+ #return $type if $part eq "";
+ }
+
+ # If a rational...
+ if (@parts == 2) {
+
+ # If denominator is negative, get rid of it, and ...
+ if ($parts[1] =~ s/^-//) {
+
+ # If numerator is also negative, convert the
+ # whole thing to positive, else move the minus
+ # to the numerator
+ if ($parts[0] !~ s/^-//) {
+ $parts[0] = '-' . $parts[0];
+ }
+ }
+ $table = join '/', @parts;
+ }
+ elsif ($property ne 'nv' || $parts[0] !~ /\./) {
+
+ # Here is not numeric value, or doesn't have a
+ # decimal point. No further manipulation is
+ # necessary. (Note the hard-coded property name.
+ # This could fail if other properties eventually
+ # had fractions as well; perhaps the cjk ones
+ # could evolve to do that. This hard-coding could
+ # be fixed by mktables generating a list of
+ # properties that could have fractions.)
+ $table = $parts[0];
+ } else {
+
+ # Here is a floating point numeric_value. Convert
+ # to rational. Get a normalized form, like
+ # 5.00E-01, and look that up in the hash
+
+ my $float = sprintf "%.*e",
+ $e_precision,
+ 0 + $parts[0];
+
+ if (exists $nv_floating_to_rational{$float}) {
+ $table = $nv_floating_to_rational{$float};
+ } else {
+ pop @recursed if @recursed;
+ return $type;
+ }
+ }
+ print STDERR __LINE__, ": $property=$table\n" if DEBUG;
+ }
+ }
+
+ # Combine lhs (if any) and rhs to get something that matches
+ # the syntax of the lookups.
+ $property_and_table = "$prefix$table";
+ print STDERR __LINE__, ": $property_and_table\n" if DEBUG;
+
+ # First try stricter matching.
+ $file = $stricter_to_file_of{$property_and_table};
+
+ # If didn't find it, try again with looser matching by editing
+ # out the applicable characters on the rhs and looking up
+ # again.
+ my $strict_property_and_table;
+ if (! defined $file) {
+
+ # This isn't used unless the name begins with 'to'
+ $strict_property_and_table = $property_and_table =~ s/^to//r;
+ $table = loose_name($table);
+ $property_and_table = "$prefix$table";
+ print STDERR __LINE__, ": $property_and_table\n" if DEBUG;
+ $file = $loose_to_file_of{$property_and_table};
+ print STDERR __LINE__, ": $property_and_table\n" if DEBUG;
+ }
+
+ # Add the constant and go fetch it in.
+ if (defined $file) {
+
+ # If the file name contains a !, it means to invert. The
+ # 0+ makes sure result is numeric
+ $invert_it = 0 + $file =~ s/!//;
+
+ if ($caseless
+ && exists $caseless_equivalent{$property_and_table})
+ {
+ $file = $caseless_equivalent{$property_and_table};
+ }
+
+ # The pseudo-directory '#' means that there really isn't a
+ # file to read, the data is in-line as part of the string;
+ # we extract it below.
+ $file = "$unicore_dir/lib/$file.pl" unless $file =~ m!^#/!;
+ last GETFILE;
+ }
+ print STDERR __LINE__, ": didn't find $property_and_table\n" if DEBUG;
+
+ ##
+ ## Last attempt -- see if it's a standard "To" name
+ ## (e.g. "ToLower") ToTitle is used by ucfirst().
+ ## The user-level way to access ToDigit() and ToFold()
+ ## is to use Unicode::UCD.
+ ##
+ # Only check if caller wants non-binary
+ if ($minbits != 1) {
+ if ($property_and_table =~ s/^to//) {
+ # Look input up in list of properties for which we have
+ # mapping files. First do it with the strict approach
+ if (defined ($file = $strict_property_to_file_of{
+ $strict_property_and_table}))
+ {
+ $type = $file_to_swash_name{$file};
+ print STDERR __LINE__, ": type set to $type\n"
+ if DEBUG;
+ $file = "$unicore_dir/$file.pl";
+ last GETFILE;
+ }
+ elsif (defined ($file =
+ $loose_property_to_file_of{$property_and_table}))
+ {
+ $type = $file_to_swash_name{$file};
+ print STDERR __LINE__, ": type set to $type\n"
+ if DEBUG;
+ $file = "$unicore_dir/$file.pl";
+ last GETFILE;
+ } # If that fails see if there is a corresponding binary
+ # property file
+ elsif (defined ($file =
+ $loose_to_file_of{$property_and_table}))
+ {
+
+ # Here, there is no map file for the property we
+ # are trying to get the map of, but this is a
+ # binary property, and there is a file for it that
+ # can easily be translated to a mapping, so use
+ # that, treating this as a binary property.
+ # Setting 'minbits' here causes it to be stored as
+ # such in the cache, so if someone comes along
+ # later looking for just a binary, they get it.
+ $minbits = 1;
+
+ # The 0+ makes sure is numeric
+ $invert_it = 0 + $file =~ s/!//;
+ $file = "$unicore_dir/lib/$file.pl"
+ unless $file =~ m!^#/!;
+ last GETFILE;
+ }
+ }
+ }
+
+ ##
+ ## If we reach this line, it's because we couldn't figure
+ ## out what to do with $type. Ouch.
+ ##
+
+ pop @recursed if @recursed;
+ return $type;
+ } # end of GETFILE block
+
+ if (defined $file) {
+ print STDERR __LINE__, ": found it (file='$file')\n" if DEBUG;
+
+ ##
+ ## If we reach here, it was due to a 'last GETFILE' above
+ ## (exception: user-defined properties and mappings), so we
+ ## have a filename, so now we load it if we haven't already.
+
+ # The pseudo-directory '#' means the result isn't really a
+ # file, but is in-line, with semi-colons to be turned into
+ # new-lines. Since it is in-line there is no advantage to
+ # caching the result
+ if ($file =~ s!^#/!!) {
+ $list = $inline_definitions[$file];
+ }
+ else {
+ # Here, we have an actual file to read in and load, but it
+ # may already have been read-in and cached. The cache key
+ # is the class and file to load, and whether the results
+ # need to be inverted.
+ my $found = $Cache{$class, $file, $invert_it};
+ if ($found and ref($found) eq $class) {
+ print STDERR __LINE__, ": Returning cached swash for '$class,$file,$invert_it' for \\p{$type}\n" if DEBUG;
+ pop @recursed if @recursed;
+ return $found;
+ }
+
+ local $@;
+ local $!;
+ $list = do $file; die $@ if $@;
+ }
+
+ $list_is_from_mktables = 1;
+ }
+ } # End of $type is non-null
+
+ # Here, either $type was null, or we found the requested property and
+ # read it into $list
+
+ my $extras = "";
+
+ my $bits = $minbits;
+
+ # mktables lists don't have extras, like '&prop', so don't need
+ # to separate them; also lists are already sorted, so don't need to do
+ # that.
+ if ($list && ! $list_is_from_mktables) {
+ my $taint = substr($list,0,0); # maintain taint
+
+ # Separate the extras from the code point list, and make sure
+ # user-defined properties are well-behaved for
+ # downstream code.
+ if ($user_defined) {
+ my @tmp = split(/^/m, $list);
+ my %seen;
+ no warnings;
+
+ # The extras are anything that doesn't begin with a hex digit.
+ $extras = join '', $taint, grep /^[^0-9a-fA-F]/, @tmp;
+
+ # Remove the extras, and sort the remaining entries by the
+ # numeric value of their beginning hex digits, removing any
+ # duplicates.
+ $list = join '', $taint,
+ map { $_->[1] }
+ sort { $a->[0] <=> $b->[0] }
+ map { /^([0-9a-fA-F]+)/ && !$seen{$1}++ ? [ CORE::hex($1), $_ ] : () }
+ @tmp; # XXX doesn't do ranges right
+ }
+ else {
+ # mktables has gone to some trouble to make non-user defined
+ # properties well-behaved, so we can skip the effort we do for
+ # user-defined ones. Any extras are at the very beginning of
+ # the string.
+
+ # This regex splits out the first lines of $list into $1 and
+ # strips them off from $list, until we get one that begins
+ # with a hex number, alone on the line, or followed by a tab.
+ # Either portion may be empty.
+ $list =~ s/ \A ( .*? )
+ (?: \z | (?= ^ [0-9a-fA-F]+ (?: \t | $) ) )
+ //msx;
+
+ $extras = "$taint$1";
+ }
+ }
+
+ if ($minbits != 1 && $minbits < 32) { # not binary property
+ my $top = 0;
+ while ($list =~ /^([0-9a-fA-F]+)(?:[\t]([0-9a-fA-F]+)?)(?:[ \t]([0-9a-fA-F]+))?/mg) {
+ my $min = CORE::hex $1;
+ my $max = defined $2 ? CORE::hex $2 : $min;
+ my $val = defined $3 ? CORE::hex $3 : 0;
+ $val += $max - $min if defined $3;
+ $top = $val if $val > $top;
+ }
+ my $topbits =
+ $top > 0xffff ? 32 :
+ $top > 0xff ? 16 : 8;
+ $bits = $topbits if $bits < $topbits;
+ }
+
+ my @extras;
+ if ($extras) {
+ for my $x ($extras) {
+ my $taint = substr($x,0,0); # maintain taint
+ pos $x = 0;
+ while ($x =~ /^([^0-9a-fA-F\n])(.*)/mg) {
+ my $char = "$1$taint";
+ my $name = "$2$taint";
+ print STDERR __LINE__, ": char [$char] => name [$name]\n"
+ if DEBUG;
+ if ($char =~ /[-+!&]/) {
+ my ($c,$t) = split(/::/, $name, 2); # bogus use of ::, really
+ my $subobj;
+ if ($c eq 'utf8') { # khw is unsure of this
+ $subobj = SWASHNEW($t, "", $minbits, 0);
+ }
+ elsif (exists &$name) {
+ $subobj = SWASHNEW($name, "", $minbits, 0);
+ }
+ elsif ($c =~ /^([0-9a-fA-F]+)/) {
+ $subobj = SWASHNEW("", $c, $minbits, 0);
+ }
+ print STDERR __LINE__, ": returned from getting sub object for $name\n" if DEBUG;
+ if (! ref $subobj) {
+ pop @recursed if @recursed && $type;
+ return $subobj;
+ }
+ push @extras, $name => $subobj;
+ $bits = $subobj->{BITS} if $bits < $subobj->{BITS};
+ $user_defined = $subobj->{USER_DEFINED}
+ if $subobj->{USER_DEFINED};
+ }
+ }
+ }
+ }
+
+ if (DEBUG) {
+ print STDERR __LINE__, ": CLASS = $class, TYPE => $type, BITS => $bits, INVERT_IT => $invert_it, USER_DEFINED => $user_defined";
+ print STDERR "\nLIST =>\n$list" if defined $list;
+ print STDERR "\nEXTRAS =>\n$extras" if defined $extras;
+ print STDERR "\n";
+ }
+
+ my $SWASH = bless {
+ TYPE => $type,
+ BITS => $bits,
+ EXTRAS => $extras,
+ LIST => $list,
+ USER_DEFINED => $user_defined,
+ @extras,
+ } => $class;
+
+ if ($file) {
+ $Cache{$class, $file, $invert_it} = $SWASH;
+ if ($type
+ && exists $SwashInfo{$type}
+ && exists $SwashInfo{$type}{'specials_name'})
+ {
+ my $specials_name = $SwashInfo{$type}{'specials_name'};
+ no strict "refs";
+ print STDERR "\nspecials_name => $specials_name\n" if DEBUG;
+ $SWASH->{'SPECIALS'} = \%$specials_name;
+ }
+ $SWASH->{'INVERT_IT'} = $invert_it;
+ }
+
+ pop @recursed if @recursed && $type;
+
+ return $SWASH;
+ }
+}
+
# NB: This function is nearly duplicated in charnames.pm
sub _getcode {
my $arg = shift;
@@ -408,8 +998,8 @@ sub charinfo {
@CATEGORIES =_read_table("To/Gc.pl") unless @CATEGORIES;
$prop{'category'} = _search(\@CATEGORIES, 0, $#CATEGORIES, $code)
- // $utf8::SwashInfo{'ToGc'}{'missing'};
- # Return undef if category value is 'Unassigned' or one of its synonyms
+ // $SwashInfo{'ToGc'}{'missing'};
+ # Return undef if category value is 'Unassigned' or one of its synonyms
return if grep { lc $_ eq 'unassigned' }
prop_value_aliases('Gc', $prop{'category'});
@@ -421,7 +1011,7 @@ sub charinfo {
@BIDIS =_read_table("To/Bc.pl") unless @BIDIS;
$prop{'bidi'} = _search(\@BIDIS, 0, $#BIDIS, $code)
- // $utf8::SwashInfo{'ToBc'}{'missing'};
+ // $SwashInfo{'ToBc'}{'missing'};
# For most code points, we can just read in "unicore/Decomposition.pl", as
# its contents are exactly what should be output. But that file doesn't
@@ -548,9 +1138,9 @@ sub _read_table ($;$) {
# return takes much less memory when there are large ranges.
#
# This function has the side effect of setting
- # $utf8::SwashInfo{$property}{'format'} to be the mktables format of the
+ # $SwashInfo{$property}{'format'} to be the mktables format of the
# table; and
- # $utf8::SwashInfo{$property}{'missing'} to be the value for all entries
+ # $SwashInfo{$property}{'missing'} to be the value for all entries
# not listed in the table.
# where $property is the Unicode property name, preceded by 'To' for map
# properties., e.g., 'ToSc'.
@@ -569,11 +1159,11 @@ sub _read_table ($;$) {
# Look up if this property requires adjustments, which we do below if it
# does.
- require "unicore/Heavy.pl";
+ require "unicore/UCD.pl";
my $property = $table =~ s/\.pl//r;
- $property = $utf8::file_to_swash_name{$property};
+ $property = $file_to_swash_name{$property};
my $to_adjust = defined $property
- && $utf8::SwashInfo{$property}{'format'} =~ / ^ a /x;
+ && $SwashInfo{$property}{'format'} =~ / ^ a /x;
for (split /^/m, $list) {
my ($start, $end, $value) = / ^ (.+?) \t (.*?) \t (.+?)
@@ -582,7 +1172,7 @@ sub _read_table ($;$) {
my $decimal_start = hex $start;
my $decimal_end = ($end eq "") ? $decimal_start : hex $end;
$value = hex $value if $to_adjust
- && $utf8::SwashInfo{$property}{'format'} eq 'ax';
+ && $SwashInfo{$property}{'format'} eq 'ax';
if ($return_hash) {
foreach my $i ($decimal_start .. $decimal_end) {
$return{$i} = ($to_adjust)
@@ -728,7 +1318,7 @@ sub charprop ($$;$) {
# extensions. But this is misleading. For now, return undef for
# these, as currently documented.
undef $map unless
- exists $Unicode::UCD::prop_aliases{utf8::_loose_name(lc $prop)};
+ exists $prop_aliases{loose_name(lc $prop)};
}
return $map;
}
@@ -803,7 +1393,7 @@ sub charprops_all($) {
require "unicore/UCD.pl";
- foreach my $prop (keys %Unicode::UCD::prop_aliases) {
+ foreach my $prop (keys %prop_aliases) {
# Don't return a Perl extension. (This is the only one that
# %prop_aliases has in it.)
@@ -1004,7 +1594,7 @@ sub charscript {
if (defined $code) {
my $result = _search(\@SCRIPTS, 0, $#SCRIPTS, $code);
return $result if defined $result;
- return $utf8::SwashInfo{'ToSc'}{'missing'};
+ return $SwashInfo{'ToSc'}{'missing'};
} elsif (exists $SCRIPTS{$arg}) {
return _dclone $SCRIPTS{$arg};
}
@@ -1168,7 +1758,7 @@ my %BIDI_TYPES =
'S' => 'Segment Separator',
'WS' => 'Whitespace',
'ON' => 'Other Neutrals',
- );
+ );
=head2 B<bidi_types()>
@@ -1361,7 +1951,7 @@ additional processing.
For Unicode versions between 3.1 and 3.1.1 inclusive, this field is empty unless
there is a
special folding for Turkic languages, in which case I<status> is C<I>, and
-I<mapping>, I<full>, I<simple>, and I<turkic> are all equal.
+I<mapping>, I<full>, I<simple>, and I<turkic> are all equal.
=back
@@ -1760,9 +2350,18 @@ sub _namedseq {
local $_;
local $/ = "\n";
while (<$namedseqfh>) {
- if (/^ [0-9A-F]+ \ /x) {
- chomp;
- my ($sequence, $name) = split /\t/;
+ next if m/ ^ \s* \# /x;
+
+ # Each entry is currently two lines. The first contains the code
+ # points in the sequence separated by spaces. If this entry
+ # doesn't have spaces, it isn't a named sequence.
+ if (/^ [0-9A-F]{4,5} (?: \ [0-9A-F]{4,5} )+ $ /x) {
+ my $sequence = $_;
+ chomp $sequence;
+
+ # And the second is the name
+ my $name = <$namedseqfh>;
+ chomp $name;
my @s = map { chr(hex($_)) } split(' ', $sequence);
$NAMEDSEQ{$name} = join("", @s);
}
@@ -2067,15 +2666,12 @@ about (and which is documented below in L</prop_invmap()>).
our %string_property_loose_to_name;
our %ambiguous_names;
our %loose_perlprop_to_name;
-our %prop_aliases;
sub prop_aliases ($) {
my $prop = $_[0];
return unless defined $prop;
require "unicore/UCD.pl";
- require "unicore/Heavy.pl";
- require "utf8_heavy.pl";
# The property name may be loosely or strictly matched; we don't know yet.
# But both types use lower-case.
@@ -2083,20 +2679,20 @@ sub prop_aliases ($) {
# It is loosely matched if its lower case isn't known to be strict.
my $list_ref;
- if (! exists $utf8::stricter_to_file_of{$prop}) {
- my $loose = utf8::_loose_name($prop);
+ if (! exists $stricter_to_file_of{$prop}) {
+ my $loose = loose_name($prop);
# There is a hash that converts from any loose name to its standard
# form, mapping all synonyms for a name to one name that can be used
# as a key into another hash. The whole concept is for memory
# savings, as the second hash doesn't have to have all the
# combinations. Actually, there are two hashes that do the
- # conversion. One is used in utf8_heavy.pl (stored in Heavy.pl) for
- # looking up properties matchable in regexes. This function needs to
- # access string properties, which aren't available in regexes, so a
- # second conversion hash is made for them (stored in UCD.pl). Look in
- # the string one now, as the rest can have an optional 'is' prefix,
- # which these don't.
+ # conversion. One is stored in UCD.pl) for looking up properties
+ # matchable in regexes. This function needs to access string
+ # properties, which aren't available in regexes, so a second
+ # conversion hash is made for them (stored in UCD.pl). Look in the
+ # string one now, as the rest can have an optional 'is' prefix, which
+ # these don't.
if (exists $string_property_loose_to_name{$loose}) {
# Convert to its standard loose name.
@@ -2105,7 +2701,7 @@ sub prop_aliases ($) {
else {
my $retrying = 0; # bool. ? Has an initial 'is' been stripped
RETRY:
- if (exists $utf8::loose_property_name_of{$loose}
+ if (exists $loose_property_name_of{$loose}
&& (! $retrying
|| ! exists $ambiguous_names{$loose}))
{
@@ -2118,7 +2714,7 @@ sub prop_aliases ($) {
# for the gc, script, or block properties, and the stripped
# 'is' means that they mean one of those, and not one of
# these
- $prop = $utf8::loose_property_name_of{$loose};
+ $prop = $loose_property_name_of{$loose};
}
elsif (exists $loose_perlprop_to_name{$loose}) {
@@ -2133,7 +2729,7 @@ sub prop_aliases ($) {
$list_ref = \@list;
}
}
- elsif (! exists $utf8::loose_to_file_of{$loose}) {
+ elsif (! exists $loose_to_file_of{$loose}) {
# loose_to_file_of is a complete list of loose names. If not
# there, the input is unknown.
@@ -2167,7 +2763,7 @@ sub prop_aliases ($) {
# if necessary.
for my $i (0 .. @list -1) {
if (exists $ambiguous_names
- {utf8::_loose_name(lc $list[$i])})
+ {loose_name(lc $list[$i])})
{
# The ambiguity is resolved by toggling whether or
# not it has an 'is' prefix
@@ -2282,13 +2878,12 @@ sub prop_values ($) {
return undef unless defined $prop;
require "unicore/UCD.pl";
- require "utf8_heavy.pl";
# Find the property name synonym that's used as the key in other hashes,
# which is element 0 in the returned list.
($prop) = prop_aliases($prop);
return undef if ! $prop;
- $prop = utf8::_loose_name(lc $prop);
+ $prop = loose_name(lc $prop);
# Here is a legal property.
return undef unless exists $prop_value_aliases{$prop};
@@ -2372,13 +2967,12 @@ sub prop_value_aliases ($$) {
return unless defined $prop && defined $value;
require "unicore/UCD.pl";
- require "utf8_heavy.pl";
# Find the property name synonym that's used as the key in other hashes,
# which is element 0 in the returned list.
($prop) = prop_aliases($prop);
return if ! $prop;
- $prop = utf8::_loose_name(lc $prop);
+ $prop = loose_name(lc $prop);
# Here is a legal property, but the hash below (created by mktables for
# this purpose) only knows about the properties that have a very finite
@@ -2393,7 +2987,7 @@ sub prop_value_aliases ($$) {
# a Perl-extension All perl extensions are binary, hence are
# enumerateds, which means that we know that the input unknown value
# is illegal.
- return if ! exists $Unicode::UCD::prop_aliases{$prop};
+ return if ! exists $prop_aliases{$prop};
# Otherwise, we assume it's valid, as documented.
return $value;
@@ -2405,7 +2999,7 @@ sub prop_value_aliases ($$) {
# If the name isn't found under loose matching, it certainly won't be
# found under strict
- my $loose_value = utf8::_loose_name($value);
+ my $loose_value = loose_name($value);
return unless exists $loose_to_standard_value{"$prop=$loose_value"};
# Similarly if the combination under loose matching doesn't exist, it
@@ -2418,7 +3012,7 @@ sub prop_value_aliases ($$) {
# %prop_value_aliases is set up so that the strict matches will appear as
# if they were in loose form. Thus, if the non-loose version is legal,
# we're ok, can skip the further check.
- if (! exists $utf8::stricter_to_file_of{"$prop=$value"}
+ if (! exists $stricter_to_file_of{"$prop=$value"}
# We're also ok and skip the further check if value loosely matches.
# mktables has verified that no strict name under loose rules maps to
@@ -2431,12 +3025,12 @@ sub prop_value_aliases ($$) {
# 2) When the values are numeric, in which case we need to look
# further, but their squeezed-out loose values will be in
# %stricter_to_file_of
- && exists $utf8::stricter_to_file_of{"$prop=$loose_value"})
+ && exists $stricter_to_file_of{"$prop=$loose_value"})
{
# The only thing that's legal loosely under strict is that can have an
# underscore between digit pairs XXX
while ($value =~ s/(\d)_(\d)/$1$2/g) {}
- return unless exists $utf8::stricter_to_file_of{"$prop=$value"};
+ return unless exists $stricter_to_file_of{"$prop=$value"};
}
# Here, we know that the combination exists. Return it.
@@ -2455,7 +3049,7 @@ sub prop_value_aliases ($$) {
}
# All 1 bits but the top one is the largest possible IV.
-$Unicode::UCD::MAX_CP = (~0) >> 1;
+$MAX_CP = (~0) >> 1;
=pod
@@ -2561,7 +3155,7 @@ an inversion list.
=cut
-# User-defined properties could be handled with some changes to utf8_heavy.pl;
+# User-defined properties could be handled with some changes to SWASHNEW;
# and implementing here of dealing with EXTRAS. If done, consideration should
# be given to the fact that the user subroutine could return different results
# with each call; security issues need to be thought about.
@@ -2580,13 +3174,11 @@ sub prop_invlist ($;$) {
return if ! defined $prop;
- require "utf8_heavy.pl";
-
# Warnings for these are only for regexes, so not applicable to us
no warnings 'deprecated';
# Get the swash definition of the property-value.
- my $swash = utf8::SWASHNEW(__PACKAGE__, $prop, undef, 1, 0);
+ my $swash = SWASHNEW(__PACKAGE__, $prop, undef, 1, 0);
# Fail if not found, or isn't a boolean property-value, or is a
# user-defined property, or is internal-only.
@@ -2643,7 +3235,7 @@ sub prop_invlist ($;$) {
# beyond the end of the range.
no warnings 'portable';
my $end = hex $hex_end;
- last if $end == $Unicode::UCD::MAX_CP;
+ last if $end == $MAX_CP;
push @invlist, $end + 1;
}
else { # No end of range, is a single code point.
@@ -3170,17 +3762,9 @@ them.
Instead of reading the Unicode Database directly from files, as you were able
to do for a long time, you are encouraged to use the supplied functions. So,
-instead of reading C<Name.pl> - which may disappear without notice in the
-future - directly, as with
-
- my (%name, %cp);
- for (split m/\s*\n/ => do "unicore/Name.pl") {
- my ($cp, $name) = split m/\t/ => $_;
- $cp{$name} = $cp;
- $name{$cp} = $name unless $cp =~ m/ /;
- }
-
-You ought to use L</prop_invmap()> like this:
+instead of reading C<Name.pl> directly, which changed formats in 5.32, and may
+do so again without notice in the future or even disappear, you ought to use
+L</prop_invmap()> like this:
my (%name, %cp, %cps, $n);
# All codepoints
@@ -3205,7 +3789,7 @@ You ought to use L</prop_invmap()> like this:
=cut
-# User-defined properties could be handled with some changes to utf8_heavy.pl;
+# User-defined properties could be handled with some changes to SWASHNEW;
# if done, consideration should be given to the fact that the user subroutine
# could return different results with each call, which could lead to some
# security issues.
@@ -3245,7 +3829,6 @@ sub prop_invmap ($;$) {
# any value in the base list for the same code point.
my $overrides;
- require "utf8_heavy.pl";
require "unicore/UCD.pl";
RETRY:
@@ -3256,7 +3839,7 @@ RETRY:
# Try to get the map swash for the property. They have 'To' prepended to
# the property name, and 32 means we will accept 32 bit return values.
# The 0 means we aren't calling this from tr///.
- my $swash = utf8::SWASHNEW(__PACKAGE__, "To$prop", undef, 32, 0);
+ my $swash = SWASHNEW(__PACKAGE__, "To$prop", undef, 32, 0);
# If didn't find it, could be because needs a proxy. And if was the
# 'Block' or 'Name' property, use a proxy even if did find it. Finding it
@@ -3273,7 +3856,7 @@ RETRY:
# Get the short name of the input property, in standard form
my ($second_try) = prop_aliases($prop);
return unless $second_try;
- $second_try = utf8::_loose_name(lc $second_try);
+ $second_try = loose_name(lc $second_try);
if ($second_try eq "in") {
@@ -3305,8 +3888,8 @@ RETRY:
my %blocks;
$blocks{'LIST'} = "";
$blocks{'TYPE'} = "ToBlk";
- $utf8::SwashInfo{ToBlk}{'missing'} = "No_Block";
- $utf8::SwashInfo{ToBlk}{'format'} = "s";
+ $SwashInfo{ToBlk}{'missing'} = "No_Block";
+ $SwashInfo{ToBlk}{'format'} = "s";
foreach my $block (@BLOCKS) {
$blocks{'LIST'} .= sprintf "%x\t%x\t%s\n",
@@ -3324,6 +3907,14 @@ RETRY:
my %names;
$names{'LIST'} = "";
my $original = do "unicore/Name.pl";
+
+ # Change the double \n format of the file back to single lines
+ # with a tab
+ $original =~ s/\n\n/\e/g; # Use a control that shouldn't occur
+ #in the file
+ $original =~ s/\n/\t/g;
+ $original =~ s/\e/\n/g;
+
my $algorithm_names = \@algorithmic_named_code_points;
# We need to remove the names from it that are aliases. For that
@@ -3352,7 +3943,7 @@ RETRY:
foreach my $line (split "\n", $original) {
my ($hex_code_point, $name) = split "\t", $line;
- # Weeds out all comments, blank lines, and named sequences
+ # Weeds out any comments, blank lines, and named sequences
next if $hex_code_point =~ /[^[:xdigit:]]/a;
my $code_point = hex $hex_code_point;
@@ -3389,8 +3980,8 @@ RETRY:
} # End of loop through all the names
$names{'TYPE'} = "ToNa";
- $utf8::SwashInfo{ToNa}{'missing'} = "";
- $utf8::SwashInfo{ToNa}{'format'} = "n";
+ $SwashInfo{ToNa}{'missing'} = "";
+ $SwashInfo{ToNa}{'format'} = "n";
$swash = \%names;
}
elsif ($second_try =~ / ^ ( d [mt] ) $ /x) {
@@ -3402,8 +3993,8 @@ RETRY:
if ($second_try eq 'dt') {
$decomps{'TYPE'} = "ToDt";
- $utf8::SwashInfo{'ToDt'}{'missing'} = "None";
- $utf8::SwashInfo{'ToDt'}{'format'} = "s";
+ $SwashInfo{'ToDt'}{'missing'} = "None";
+ $SwashInfo{'ToDt'}{'format'} = "s";
} # 'dm' is handled below, with 'nfkccf'
$decomps{'LIST'} = "";
@@ -3597,8 +4188,8 @@ RETRY:
$revised_swash{'SPECIALS'} = $swash->{'SPECIALS'};
$swash = \%revised_swash;
- $utf8::SwashInfo{$type}{'missing'} = 0;
- $utf8::SwashInfo{$type}{'format'} = 'a';
+ $SwashInfo{$type}{'missing'} = 0;
+ $SwashInfo{$type}{'format'} = 'a';
}
}
@@ -3612,10 +4203,10 @@ RETRY:
# All properties but binary ones should have 'missing' and 'format'
# entries
- $missing = $utf8::SwashInfo{$returned_prop}{'missing'};
+ $missing = $SwashInfo{$returned_prop}{'missing'};
$missing = 'N' unless defined $missing;
- $format = $utf8::SwashInfo{$returned_prop}{'format'};
+ $format = $SwashInfo{$returned_prop}{'format'};
$format = 'b' unless defined $format;
my $requires_adjustment = $format =~ /^a/;
@@ -3811,7 +4402,7 @@ RETRY:
# iteration will pop this, unless there is no next iteration, and
# we have filled all of the Unicode code space, so check for that
# and skip.
- if ($end < $Unicode::UCD::MAX_CP) {
+ if ($end < $MAX_CP) {
push @invlist, $end + 1;
push @invmap, $missing;
}
@@ -4025,7 +4616,7 @@ sub search_invlist {
C<search_invlist> is used to search an inversion list returned by
C<prop_invlist> or C<prop_invmap> for a particular L</code point argument>.
C<undef> is returned if the code point is not found in the inversion list
-(this happens only when it is not a legal L<code point argument>, or is less
+(this happens only when it is not a legal L</code point argument>, or is less
than the list's first element). A warning is raised in the first instance.
Otherwise, it returns the index into the list of the range that contains the
diff --git a/gnu/usr.bin/perl/lib/Unicode/UCD.t b/gnu/usr.bin/perl/lib/Unicode/UCD.t
index b689de39501..eb7fbd8f353 100644
--- a/gnu/usr.bin/perl/lib/Unicode/UCD.t
+++ b/gnu/usr.bin/perl/lib/Unicode/UCD.t
@@ -19,7 +19,7 @@ use Test::More;
use Unicode::UCD qw(charinfo charprop charprops_all);
-my $expected_version = '12.1.0';
+my $expected_version = '13.0.0';
my $current_version = Unicode::UCD::UnicodeVersion;
my $v_unicode_version = pack "C*", split /\./, $current_version;
my $unknown_script = ($v_unicode_version lt v5.0.0)
@@ -903,9 +903,6 @@ is(prop_aliases("Is_Is_Any"), undef,
is(prop_aliases("ccc=vr"), undef,
"prop_aliases('ccc=vr') doesn't generate a warning");
-require 'utf8_heavy.pl';
-require "unicore/Heavy.pl";
-
# Keys are lists of properties. Values are defined if have been tested.
my %props;
@@ -943,7 +940,7 @@ while (<$props>) {
# matching, which the tested function does on all inputs.
my $mod_name = "$extra_chars$alias";
- my $loose = &utf8::_loose_name(lc $alias);
+ my $loose = &Unicode::UCD::loose_name(lc $alias);
# Indicate we have tested this.
$props{$loose} = 1;
@@ -996,15 +993,15 @@ while (<$props>) {
# official properties. We have no way of knowing if mktables omitted a Perl
# extension or not, but we do the best we can from its generated lists
-foreach my $alias (sort keys %utf8::loose_to_file_of) {
+foreach my $alias (sort keys %Unicode::UCD::loose_to_file_of) {
next if $alias =~ /=/;
my $lc_name = lc $alias;
- my $loose = &utf8::_loose_name($lc_name);
+ my $loose = &Unicode::UCD::loose_name($lc_name);
next if exists $props{$loose}; # Skip if already tested
$props{$loose} = 1;
my $mod_name = "$extra_chars$alias"; # Tests loose matching
my @aliases = prop_aliases($mod_name);
- my $found_it = grep { &utf8::_loose_name(lc $_) eq $lc_name } @aliases;
+ my $found_it = grep { &Unicode::UCD::loose_name(lc $_) eq $lc_name } @aliases;
if ($found_it) {
pass("prop_aliases: '$lc_name' is listed as an alias for '$mod_name'");
}
@@ -1023,14 +1020,14 @@ foreach my $alias (sort keys %utf8::loose_to_file_of) {
# returned as an alias, so having successfully stripped it off above,
# try again.
if ($stripped) {
- $found_it = grep { &utf8::_loose_name(lc $_) eq $lc_name } @aliases;
+ $found_it = grep { &Unicode::UCD::loose_name(lc $_) eq $lc_name } @aliases;
}
# If that didn't work, it could be that it's a block, which is always
# returned with a leading 'In_' to avoid ambiguity. Try comparing
# with that stripped off.
if (! $found_it) {
- $found_it = grep { &utf8::_loose_name(s/^In_(.*)/\L$1/r) eq $lc_name }
+ $found_it = grep { &Unicode::UCD::loose_name(s/^In_(.*)/\L$1/r) eq $lc_name }
@aliases;
# Could check that is a real block, but tests for invmap will
# likely pickup any errors, since this will be tested there.
@@ -1051,7 +1048,7 @@ for my $prop (qw(Alnum Blank Cntrl Digit Graph Print Word XDigit)) {
}
my $done_equals = 0;
-foreach my $alias (keys %utf8::stricter_to_file_of) {
+foreach my $alias (keys %Unicode::UCD::stricter_to_file_of) {
if ($alias =~ /=/) { # Only test one case where there is an equals
next if $done_equals;
$done_equals = 1;
@@ -1163,8 +1160,8 @@ while (<$propvalues>) {
$fields[0] = $fields[1];
}
elsif ($fields[0] ne $fields[1]
- && &utf8::_loose_name(lc $fields[0])
- eq &utf8::_loose_name(lc $fields[1])
+ && &Unicode::UCD::loose_name(lc $fields[0])
+ eq &Unicode::UCD::loose_name(lc $fields[1])
&& $fields[1] !~ /[[:upper:]]/)
{
# Also, there is a bug in the file in which "n/a" is omitted, and
@@ -1180,7 +1177,7 @@ while (<$propvalues>) {
# the short and full names, respectively. See comments in input file.
splice (@fields, 0, 0, splice(@fields, 1, 2)) if $prop eq 'ccc';
- my $loose_prop = &utf8::_loose_name(lc $prop);
+ my $loose_prop = &Unicode::UCD::loose_name(lc $prop);
my $suppressed = grep { $_ eq $loose_prop }
@Unicode::UCD::suppressed_properties;
push @this_prop_values, $fields[0] unless $suppressed;
@@ -1189,7 +1186,7 @@ while (<$propvalues>) {
is(prop_value_aliases($prop, $value), undef, "prop_value_aliases('$prop', '$value') returns undef for suppressed property $prop");
next;
}
- elsif (grep { $_ eq ("$loose_prop=" . &utf8::_loose_name(lc $value)) } @Unicode::UCD::suppressed_properties) {
+ elsif (grep { $_ eq ("$loose_prop=" . &Unicode::UCD::loose_name(lc $value)) } @Unicode::UCD::suppressed_properties) {
is(prop_value_aliases($prop, $value), undef, "prop_value_aliases('$prop', '$value') returns undef for suppressed property $prop=$value");
next;
}
@@ -1231,17 +1228,17 @@ while (<$propvalues>) {
else {
my @all_names = prop_value_aliases($mod_prop, $mod_value);
is_deeply(\@all_names, \@names_via_short, "In '$prop', prop_value_aliases() returns the same list for both '$short_name' and '$mod_value'");
- ok((grep { &utf8::_loose_name(lc $_) eq &utf8::_loose_name(lc $value) } prop_value_aliases($prop, $short_name)), "'$value' is listed as an alias for prop_value_aliases('$prop', '$short_name')");
+ ok((grep { &Unicode::UCD::loose_name(lc $_) eq &Unicode::UCD::loose_name(lc $value) } prop_value_aliases($prop, $short_name)), "'$value' is listed as an alias for prop_value_aliases('$prop', '$short_name')");
}
- $pva_tested{&utf8::_loose_name(lc $prop) . "=" . &utf8::_loose_name(lc $value)} = 1;
+ $pva_tested{&Unicode::UCD::loose_name(lc $prop) . "=" . &Unicode::UCD::loose_name(lc $value)} = 1;
$count++;
}
}
} # End of SKIP block
# And test as best we can, the non-official pva's that mktables generates.
-foreach my $hash (\%utf8::loose_to_file_of, \%utf8::stricter_to_file_of) {
+foreach my $hash (\%Unicode::UCD::loose_to_file_of, \%Unicode::UCD::stricter_to_file_of) {
foreach my $test (sort keys %$hash) {
next if exists $pva_tested{$test}; # Skip if already tested
@@ -1249,7 +1246,7 @@ foreach my $hash (\%utf8::loose_to_file_of, \%utf8::stricter_to_file_of) {
next unless defined $value; # prop_value_aliases() requires an input
# 'value'
my $mod_value;
- if ($hash == \%utf8::loose_to_file_of) {
+ if ($hash == \%Unicode::UCD::loose_to_file_of) {
# Add extra characters to test loose-match rhs value
$mod_value = "$extra_chars$value";
@@ -1285,7 +1282,7 @@ foreach my $hash (\%utf8::loose_to_file_of, \%utf8::stricter_to_file_of) {
is_deeply(\@l_, \@LC, "prop_value_aliases('$mod_prop', '$mod_value) returns the same list as prop_value_aliases('gc', 'lc')");
}
else {
- ok((grep { &utf8::_loose_name(lc $_) eq &utf8::_loose_name(lc $value) }
+ ok((grep { &Unicode::UCD::loose_name(lc $_) eq &Unicode::UCD::loose_name(lc $value) }
prop_value_aliases($mod_prop, $mod_value)),
"'$value' is listed as an alias for prop_value_aliases('$mod_prop', '$mod_value')");
}
@@ -1300,7 +1297,7 @@ use Unicode::UCD qw(prop_invlist prop_invmap MAX_CP);
# There were some problems with caching interfering with prop_invlist() vs
# prop_invmap() on binary properties, and also between the 3 properties where
-# Perl used the same 'To' name as another property (see utf8_heavy.pl).
+# Perl used the same 'To' name as another property (see Unicode::UCD).
# So, before testing all of prop_invlist(),
# 1) call prop_invmap() to try both orders of these name issues. This uses
# up two of the 3 properties; the third will be left so that invlist()
@@ -1431,11 +1428,11 @@ sub fail_with_diff ($$$$) {
# For use below to output better messages
my ($prop, $official, $constructed, $tested_function_name) = @_;
- if (! $ENV{PERL_DIFF_TOOL}) {
+ if (! $ENV{PERL_TEST_DIFF}) {
is($constructed, $official, "$tested_function_name('$prop')");
- diag("Set environment variable PERL_DIFF_TOOL=diff_tool to see just "
+ diag("Set environment variable PERL_TEST_DIFF=diff_tool to see just "
. "the differences.");
return;
}
@@ -1455,7 +1452,7 @@ sub fail_with_diff ($$$$) {
close $gend || die "Can't close gend";
my $diff = File::Temp->new();
- system("$ENV{PERL_DIFF_TOOL} $off $gend > $diff");
+ system("$ENV{PERL_TEST_DIFF} $off $gend > $diff");
open my $fh, "<", $diff || die "Can't open $diff";
my @diffs = <$fh>;
@@ -1467,7 +1464,7 @@ my %tested_invlist;
# Look at everything we think that mktables tells us exists, both loose and
# strict
-foreach my $set_of_tables (\%utf8::stricter_to_file_of, \%utf8::loose_to_file_of)
+foreach my $set_of_tables (\%Unicode::UCD::stricter_to_file_of, \%Unicode::UCD::loose_to_file_of)
{
foreach my $table (sort keys %$set_of_tables) {
@@ -1476,7 +1473,7 @@ foreach my $set_of_tables (\%utf8::stricter_to_file_of, \%utf8::loose_to_file_of
if (defined $value) {
# If this is to be loose matched, add in characters to test that.
- if ($set_of_tables == \%utf8::loose_to_file_of) {
+ if ($set_of_tables == \%Unicode::UCD::loose_to_file_of) {
$value = "$extra_chars$value";
}
else { # Strict match
@@ -1498,7 +1495,7 @@ foreach my $set_of_tables (\%utf8::stricter_to_file_of, \%utf8::loose_to_file_of
# Like above, use loose if required, and insert underscores
# between digits if strict.
- if ($set_of_tables == \%utf8::loose_to_file_of) {
+ if ($set_of_tables == \%Unicode::UCD::loose_to_file_of) {
$mod_table = "$extra_chars$table";
}
else {
@@ -1532,7 +1529,7 @@ foreach my $set_of_tables (\%utf8::stricter_to_file_of, \%utf8::loose_to_file_of
# it being an actual file to read. The file is an index in to the
# array of the definitions
if ($file =~ s!^#/!!) {
- $official = $utf8::inline_definitions[$file];
+ $official = $Unicode::UCD::inline_definitions[$file];
}
else {
$official = do "unicore/lib/$file.pl";
@@ -1651,7 +1648,7 @@ my %tested_invmaps;
# returned by the function with the tables that mktables generates. Some of
# these tables are directly stored as files on disk, in either the unicore or
# unicore/To directories, and most should be listed in the mktables generated
-# hash %utf8::loose_property_to_file_of, with a few additional ones that this
+# hash %Unicode::UCD::loose_property_to_file_of, with a few additional ones that this
# handles specially. For these, the files are read in directly, massaged, and
# compared with what invmap() returns. The SPECIALS hash in some of these
# files overrides values in the main part of the file.
@@ -1663,7 +1660,7 @@ my %tested_invmaps;
PROPERTY:
foreach my $prop (sort(keys %props), sort keys %legacy_props) {
my $is_legacy = 0;
- my $loose_prop = &utf8::_loose_name(lc $prop);
+ my $loose_prop = &Unicode::UCD::loose_name(lc $prop);
my $suppressed = grep { $_ eq $loose_prop }
@Unicode::UCD::suppressed_properties;
@@ -1691,13 +1688,13 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
# This legacy property is otherwise unknown to Perl; so shouldn't
# have any information about it already.
- ok(! exists $utf8::loose_property_to_file_of{$loose_prop},
+ ok(! exists $Unicode::UCD::loose_property_to_file_of{$loose_prop},
"There isn't a hash entry for file lookup of $prop");
- $utf8::loose_property_to_file_of{$loose_prop} = $base_file;
+ $Unicode::UCD::loose_property_to_file_of{$loose_prop} = $base_file;
- ok(! exists $utf8::file_to_swash_name{$loose_prop},
+ ok(! exists $Unicode::UCD::file_to_swash_name{$loose_prop},
"There isn't a hash entry for swash lookup of $prop");
- $utf8::file_to_swash_name{$base_file}
+ $Unicode::UCD::file_to_swash_name{$base_file}
= $legacy_props{$prop}->{'swash_name'};
$display_prop = $prop;
$is_legacy = 1;
@@ -1713,14 +1710,14 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
# Normalize the short name, as it is stored in the hashes under the
# normalized version.
- $name = &utf8::_loose_name(lc $name);
+ $name = &Unicode::UCD::loose_name(lc $name);
# In the case of a combination property, both a map table and a match
# table are generated. For all the tests except prop_invmap(), this is
# irrelevant, but for prop_invmap, having an 'is' prefix forces it to
# return the match table; otherwise the map. We thus need to distinguish
# between the two forms. The property name is what has this information.
- $name = &utf8::_loose_name(lc $prop)
+ $name = &Unicode::UCD::loose_name(lc $prop)
if exists $Unicode::UCD::combination_property{$name};
# Add in the characters that are supposed to be ignored to test loose
@@ -1917,8 +1914,8 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
if ($name ne 'na'
&& ($name eq 'blk'
|| defined
- ($base_file = $utf8::loose_property_to_file_of{$proxy_prop})
- || exists $utf8::loose_to_file_of{$proxy_prop}
+ ($base_file = $Unicode::UCD::loose_property_to_file_of{$proxy_prop})
+ || exists $Unicode::UCD::loose_to_file_of{$proxy_prop}
|| $name eq "dm"))
{
# In the above, blk is done unconditionally, as we need to test that
@@ -1988,7 +1985,7 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
# work would be needed in the unlikely event that an inverted
# property comes along without these characteristics
if (!defined $base_file) {
- $base_file = $utf8::loose_to_file_of{$proxy_prop};
+ $base_file = $Unicode::UCD::loose_to_file_of{$proxy_prop};
$is_binary = ($base_file =~ s/!//) ? -1 : 1;
$base_file = "lib/$base_file" unless $base_file =~ m!^#/!;
}
@@ -1997,7 +1994,7 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
# special case where the contents are in-lined with semi-colons
# meaning new-lines, instead of it being an actual file to read.
if ($base_file =~ s!^#/!!) {
- $official = $utf8::inline_definitions[$base_file];
+ $official = $Unicode::UCD::inline_definitions[$base_file];
}
else {
$official = do "unicore/$base_file.pl";
@@ -2035,11 +2032,11 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
# Get the format for the file, and if there are any special elements,
# get a reference to them.
- my $swash_name = $utf8::file_to_swash_name{$base_file};
+ my $swash_name = $Unicode::UCD::file_to_swash_name{$base_file};
my $specials_ref;
my $file_format; # The 'format' given inside the file
if ($swash_name) {
- $specials_ref = $utf8::SwashInfo{$swash_name}{'specials_name'};
+ $specials_ref = $Unicode::UCD::SwashInfo{$swash_name}{'specials_name'};
if ($specials_ref) {
# Convert from the name to the actual reference.
@@ -2047,7 +2044,7 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
$specials_ref = \%{$specials_ref};
}
- $file_format = $utf8::SwashInfo{$swash_name}{'format'};
+ $file_format = $Unicode::UCD::SwashInfo{$swash_name}{'format'};
}
# Leading zeros used to be used with the values in the files that give,
@@ -2457,22 +2454,36 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
$official = do "unicore/Name.pl";
+ # Change the double \n format of the file back to single lines with a tab
+ $official =~ s/\n\n/\e/g; # Use a control that shouldn't occur
+ # in the file
+ $official =~ s/\n/\t/g;
+ $official =~ s/\e/\n/g;
+
# Get rid of the named sequences portion of the file. These don't
# have a tab before the first blank on a line.
$official =~ s/ ^ [^\t]+ \ .*? \n //xmg;
# And get rid of the controls. These are named in the file, but
- # shouldn't be in the property. This gets rid of the two ranges in
- # one fell swoop, and also all the Unicode1_Name values that may not
- # be in Name_Alias.
+ # shouldn't be in the property. On all supported platforms, there are
+ # two ranges of controls. The first range extends from 0..SPACE-1.
+ # The second depends on the platform.
+ $official =~ s/ ^ 00000 .*? ( .{5} \t SPACE ) $ /$1/xms;
+ my $range_2_start;
+ my $range_2_end_next;
if ($::IS_ASCII) {
- $official =~ s/ 00000 \t .* 0001F .*? \n//xs;
- $official =~ s/ 0007F \t .* 0009F .*? \n//xs;
+ $range_2_start = '0007F';
+ $range_2_end_next = '000A0';
}
- elsif ($::IS_EBCDIC) { # Won't work for POSIX-BC
- $official =~ s/ 00000 \t .* 0003F .*? \n//xs;
- $official =~ s/ 000FF \t .* 000FF .*? \n//xs;
+ elsif (ord '^' == 106) { # POSIX-BC
+ $range_2_start = '005F';
+ $range_2_end_next = '0060';
}
+ else {
+ $range_2_start = '00FF';
+ $range_2_end_next = '0100';
+ }
+ $official =~ s/ ^ $range_2_start .*? ( $range_2_end_next ) /$1/xms;
# And remove the aliases. We read in the Name_Alias property, and go
# through them one by one.
@@ -2502,6 +2513,7 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) {
$official =~ s/$hex_code_point \t $alias \n //x;
}
}
+
local $/ = "\n";
chomp $official;
$/ = $input_record_separator;
diff --git a/gnu/usr.bin/perl/lib/_charnames.pm b/gnu/usr.bin/perl/lib/_charnames.pm
index c6169d16f86..b38028d24a7 100644
--- a/gnu/usr.bin/perl/lib/_charnames.pm
+++ b/gnu/usr.bin/perl/lib/_charnames.pm
@@ -6,7 +6,7 @@
package _charnames;
use strict;
use warnings;
-our $VERSION = '1.45';
+our $VERSION = '1.48';
use unicore::Name; # mktables-generated algorithmically-defined names
use bytes (); # for $bytes::hint_bits
@@ -21,22 +21,22 @@ $Carp::Internal{ (__PACKAGE__) } = 1;
#
# The official names with their code points are stored in a table in
# lib/unicore/Name.pl which is read in as a large string (almost 3/4 Mb in
-# Unicode 6.0). Each code point/name combination is separated by a \n in the
-# string. (Some of the CJK and the Hangul syllable names are instead
-# determined algorithmically via subroutines stored instead in
-# lib/unicore/Name.pm). Because of the large size of this table, it isn't
-# converted into hashes for faster lookup.
+# Unicode 6.0). Each code point sequence appears on a line by itself, with
+# its corresponding name occupying the next line in the string. (Some of the
+# CJK and the Hangul syllable names are instead determined algorithmically via
+# subroutines stored instead in lib/unicore/Name.pm). Because of the large
+# size of this table, it isn't converted into hashes for faster lookup.
#
# But, user defined aliases are stored in their own hashes, as are Perl
# extensions to the official names. These are checked first before looking at
# the official table.
#
# Basically, the table is grepped for the input code point (viacode()) or
-# name (the other functions), and the corresponding value on the same line is
-# returned. The grepping is done by turning the input into a regular
-# expression. Thus, the same table does double duty, used by both name and
-# code point lookup. (If we were to have hashes, we would need two, one for
-# each lookup direction.)
+# name (the other functions), and the corresponding value on the next or
+# previous line is returned. The grepping is done by turning the input into a
+# regular expression. Thus, the same table does double duty, used by both
+# name and code point lookup. (If we were to have hashes, we would need two,
+# one for each lookup direction.)
#
# For loose name matching, the logical thing would be to have a table
# with all the ignorable characters squeezed out, and then grep it with the
@@ -48,9 +48,9 @@ $Carp::Internal{ (__PACKAGE__) } = 1;
# regular expression of the input name is modified to have optional spaces and
# dashes between characters. For example, in strict matching, the regular
# expression would be:
-# qr/\tDIGIT ONE$/m
+# qr/^DIGIT ONE$/m
# Under loose matching, the blank would be squeezed out, and the re would be:
-# qr/\tD[- ]?I[- ]?G[- ]?I[- ]?T[- ]?O[- ]?N[- ]?E$/m
+# qr/^D[- ]?I[- ]?G[- ]?I[- ]?T[- ]?O[- ]?N[- ]?E$/m
# which matches a blank or dash between any characters in the official table.
#
# This is also how script lookup is done. Basically the re looks like
@@ -59,7 +59,7 @@ $Carp::Internal{ (__PACKAGE__) } = 1;
# The hashes are stored as utf8 strings. This makes it easier to deal with
# sequences. I (khw) also tried making Name.pl utf8, but it slowed things
-# down by a factor of 7. I then tried making Name.pl store the ut8
+# down by a factor of 7. I then tried making Name.pl store the utf8
# equivalents but not calling them utf8. That led to similar speed as leaving
# it alone, but since that is harder for a human to parse, I left it as-is.
@@ -140,6 +140,14 @@ sub carp
require Carp; goto &Carp::carp;
} # carp
+sub populate_txt()
+{
+ return if $txt;
+
+ $txt = do "unicore/Name.pl";
+ Internals::SvREADONLY($txt, 1);
+}
+
sub alias (@) # Set up a single alias
{
my @errors;
@@ -263,8 +271,9 @@ my %dummy_H = (
);
-sub lookup_name ($$$) {
- my ($name, $wants_ord, $runtime) = @_;
+sub lookup_name ($$$;$) {
+ my ($name, $wants_ord, $runtime, $regex_loose) = @_;
+ $regex_loose //= 0;
# Lookup the name or sequence $name in the tables. If $wants_ord is false,
# returns the string equivalent of $name; if true, returns the ordinal value
@@ -281,7 +290,7 @@ sub lookup_name ($$$) {
my $result; # The string result
my $save_input;
- if ($runtime) {
+ if ($runtime && ! $regex_loose) {
my $hints_ref = (caller($runtime))[10];
@@ -307,16 +316,16 @@ sub lookup_name ($$$) {
$^H{charnames_short} = $hints_ref->{charnames_short};
}
- my $loose = $^H{charnames_loose};
+ my $loose = $regex_loose || $^H{charnames_loose};
my $lookup_name; # Input name suitably modified for grepping for in the
# table
# User alias should be checked first or else can't override ours, and if we
# were to add any, could conflict with theirs.
- if (exists $^H{charnames_ord_aliases}{$name}) {
+ if (! $regex_loose && exists $^H{charnames_ord_aliases}{$name}) {
$result = $^H{charnames_ord_aliases}{$name};
}
- elsif (exists $^H{charnames_name_aliases}{$name}) {
+ elsif (! $regex_loose && exists $^H{charnames_name_aliases}{$name}) {
$name = $^H{charnames_name_aliases}{$name};
$save_input = $lookup_name = $name; # Cache the result for any error
# message
@@ -403,11 +412,11 @@ sub lookup_name ($$$) {
my $cache_ref;
## Suck in the code/name list as a big string.
- ## Lines look like:
- ## "00052\tLATIN CAPITAL LETTER R\n"
+ ## Entries look like:
+ ## "00052\nLATIN CAPITAL LETTER R\n\n"
# or
- # "0052 0303\tLATIN CAPITAL LETTER R WITH TILDE\n"
- $txt = do "unicore/Name.pl" unless $txt;
+ # "0052 0303\nLATIN CAPITAL LETTER R WITH TILDE\n\n"
+ populate_txt() unless $txt;
## @off will hold the index into the code/name string of the start and
## end of the name as we find it.
@@ -422,7 +431,7 @@ sub lookup_name ($$$) {
# the other way around slows down finding these immensely.
# Algorithmically determinables are not placed in the cache because
# that uses up memory, and finding these again is fast.
- if (($loose || $^H{charnames_full})
+ if ( ($loose || $^H{charnames_full})
&& (defined (my $ord = charnames::name_to_code_point_special($lookup_name, $loose))))
{
$result = chr $ord;
@@ -460,10 +469,14 @@ sub lookup_name ($$$) {
# Do the lookup in the full table if asked for, and if succeeds
# save the offsets and set where to cache the result.
- if (($loose || $^H{charnames_full}) && $txt =~ /\t$lookup_name$/m) {
- @off = ($-[0] + 1, $+[0]); # The 1 is for the tab
+ if (($loose || $^H{charnames_full}) && $txt =~ /^$lookup_name$/m) {
+ @off = ($-[0], $+[0]);
$cache_ref = ($loose) ? \%loose_names_cache : \%full_names_cache;
}
+ elsif ($regex_loose) {
+ # Currently don't allow :short when this is set
+ return;
+ }
else {
# Here, didn't look for, or didn't find the name.
@@ -501,18 +514,18 @@ sub lookup_name ($$$) {
my $case = $name_has_uppercase ? "CAPITAL" : "SMALL";
return if (! $scripts_trie || $txt !~
- /\t (?: $scripts_trie ) \ (?:$case\ )? LETTER \ \U$lookup_name $/xm);
+ /^ (?: $scripts_trie ) \ (?:$case\ )? LETTER \ \U$lookup_name $/xm);
# Here have found the input name in the table.
- @off = ($-[0] + 1, $+[0]); # The 1 is for the tab
+ @off = ($-[0], $+[0]);
}
# Here, the input name has been found; we haven't set up the output,
# but we know where in the string
# the name starts. The string is set up so that for single characters
- # (and not named sequences), the name is preceded immediately by a
- # tab and 5 hex digits for its code, with a \n before those. Named
- # sequences won't have the 7th preceding character be a \n.
+ # (and not named sequences), the name is on a line by itself, and the
+ # previous line contains precisely 5 hex digits for its code point.
+ # Named sequences won't have the 7th preceding character be a \n.
# (Actually, for the very first entry in the table this isn't strictly
# true: subtracting 7 will yield -1, and the substr below will
# therefore yield the very last character in the table, which should
@@ -572,9 +585,11 @@ sub lookup_name ($$$) {
# Here, wants string output. If utf8 is acceptable, just return what
# we've got; otherwise attempt to convert it to non-utf8 and return that.
- my $in_bytes = ($runtime)
- ? (caller $runtime)[8] & $bytes::hint_bits
- : $^H & $bytes::hint_bits;
+ my $in_bytes = ! $regex_loose # \p{name=} doesn't currently care if
+ # in bytes or not
+ && (($runtime)
+ ? (caller $runtime)[8] & $bytes::hint_bits
+ : $^H & $bytes::hint_bits);
return $result if (! $in_bytes || utf8::downgrade($result, 1)) # The 1 arg
# means don't die on failure
}
@@ -617,6 +632,23 @@ sub charnames {
return lookup_name($_[0], 0, 0);
}
+sub _loose_regcomp_lookup {
+ # For use only by regcomp.c to compile \p{name=...}
+ # khw thinks it best to not do :short matching, and only official names.
+ # But that is only a guess, and if demand warrants, could be changed
+ return lookup_name($_[0], 0, 1,
+ 1 # Always use :loose matching
+ );
+}
+
+sub _get_names_info {
+ # For use only by regcomp.c to compile \p{name=/.../}
+ populate_txt() unless $txt;
+
+
+ return ( \$txt, \@charnames::code_points_ending_in_code_point );
+}
+
sub import
{
shift; ## ignore class name
@@ -679,10 +711,10 @@ sub import
## see if at least we can find one letter from each script.
##
if (warnings::enabled('utf8') && @scripts) {
- $txt = do "unicore/Name.pl" unless $txt;
+ populate_txt() unless $txt;
for my $script (@scripts) {
- if (not $txt =~ m/\t$script (?:CAPITAL |SMALL )?LETTER /) {
+ if (not $txt =~ m/^$script (?:CAPITAL |SMALL )?LETTER /m) {
warnings::warn('utf8', "No such script: '$script'");
$script = quotemeta $script; # Escape it, for use in the re.
}
@@ -757,7 +789,7 @@ sub viacode {
# If the code point is above the max in the table, there's no point
# looking through it. Checking the length first is slightly faster
if (length($hex) <= 5 || CORE::hex($hex) <= 0x10FFFF) {
- $txt = do "unicore/Name.pl" unless $txt;
+ populate_txt() unless $txt;
# See if the name is algorithmically determinable.
my $algorithmic = charnames::code_point_to_name_special(CORE::hex $hex);
@@ -769,7 +801,7 @@ sub viacode {
# Return the official name, if exists. It's unclear to me (khw) at
# this juncture if it is better to return a user-defined override, so
# leaving it as is for now.
- if ($txt =~ m/^$hex\t/m) {
+ if ($txt =~ m/^$hex\n/m) {
# The name starts with the next character and goes up to the
# next new-line. Using capturing parentheses above instead of
diff --git a/gnu/usr.bin/perl/lib/charnames.pm b/gnu/usr.bin/perl/lib/charnames.pm
index e22c71913c8..0fb341fd1dd 100644
--- a/gnu/usr.bin/perl/lib/charnames.pm
+++ b/gnu/usr.bin/perl/lib/charnames.pm
@@ -1,7 +1,7 @@
package charnames;
use strict;
use warnings;
-our $VERSION = '1.45';
+our $VERSION = '1.48';
use unicore::Name; # mktables-generated algorithmically-defined names
use _charnames (); # The submodule for this where most of the work gets done
@@ -41,6 +41,7 @@ sub vianame
# found, undef otherwise.
my $arg = shift;
+ return () unless length $arg;
if ($arg =~ /^U\+([0-9a-fA-F]+)$/) {
@@ -70,6 +71,7 @@ sub string_vianame {
}
my $arg = shift;
+ return () unless length $arg;
if ($arg =~ /^U\+([0-9a-fA-F]+)$/) {
diff --git a/gnu/usr.bin/perl/lib/charnames.t b/gnu/usr.bin/perl/lib/charnames.t
index 14bdebddb05..01e1fd7d92b 100644
--- a/gnu/usr.bin/perl/lib/charnames.t
+++ b/gnu/usr.bin/perl/lib/charnames.t
@@ -5,11 +5,13 @@ use strict;
# selection of names is tested, a higher percentage of regular names is tested
# than algorithmically-determined names.
+my $run_slow_tests = $ENV{PERL_RUN_SLOW_TESTS} || 0;
+
my $RUN_SLOW_TESTS_EVERY_CODE_POINT = 100;
# If $ENV{PERL_RUN_SLOW_TESTS} is at least 1 and less than the number above,
-# all code points with names are tested. If it is at least that number, all
-# 1,114,112 Unicode code points are tested.
+# all code points with names are tested, including wildcard search names. If
+# it is at least that number, all 1,114,112 Unicode code points are tested.
# Because \N{} is compile time, any warnings will get generated before
# execution, so have to have an array, and arrange things so no warning
@@ -112,6 +114,7 @@ sub get_loose_name ($) { # Modify name to stress the loose tests.
}
sub test_vianame ($$$) {
+ CORE::state $wildcard_count = 0;
# Run the vianame tests on a code point, both loose and full
@@ -124,19 +127,63 @@ sub test_vianame ($$$) {
# Get a copy of the name modified to stress the loose tests.
my $loose_name = get_loose_name($name);
+ my $right_anchor;
+
# Switch loose and full in vianame vs string_vianame half the time
if (rand() < .5) {
use charnames ":full";
- $all_pass &= is(charnames::vianame($name), $i, "Verify vianame(\"$name\") is 0x$hex");
+ $all_pass &= is(charnames::vianame($name), $i,
+ "Verify vianame(\"$name\") is 0x$hex");
use charnames ":loose";
- $all_pass &= is(charnames::string_vianame($loose_name), chr($i), "Verify string_vianame(\"$loose_name\") is chr(0x$hex)");
+ $all_pass &= is(charnames::string_vianame($loose_name), chr($i),
+ "Verify string_vianame(\"$loose_name\") is chr(0x$hex)");
+ $right_anchor = '\\Z';
}
else {
use charnames ":loose";
- $all_pass &= is(charnames::vianame($loose_name), $i, "Verify vianame(\"$loose_name\") is 0x$hex");
+ $all_pass &= is(charnames::vianame($loose_name), $i,
+ "Verify vianame(\"$loose_name\") is 0x$hex");
use charnames ":full";
- $all_pass &= is(charnames::string_vianame($name), chr($i), "Verify string_vianame(\"$name\") is chr(0x$hex)");
+ $all_pass &= is(charnames::string_vianame($name), chr($i),
+ "Verify string_vianame(\"$name\") is chr(0x$hex)");
+ $right_anchor = '\\z';
}
+
+ my $left_anchor = (rand() < .5) ? '^' : '\\A';
+
+ # \p{name=} is always loose matching
+ $all_pass &= like(chr($i), qr/^\p{name=$loose_name}$/,
+ "Verify /\p{name=$loose_name}/ matches chr(0x$hex)");
+
+ $wildcard_count++;
+
+ # XXX temporary to see if the failure we are occasionally seeing is
+ # confined to this code point. GH #17671
+ next if $i == 0;
+
+ # Because wildcard name matching is so real-time intensive, do it less
+ # frequently than the others
+ if ($wildcard_count >= 10) {
+ $wildcard_count = 0;
+
+ # A few control characters have anomalous names containing
+ # parentheses, which need to be escaped.
+ my $name_ref = \$name;
+ my $mod_name;
+ if ($i <= 0x85) { # NEL in ASCII; affected controls are lower than
+ # this in EBCDIC
+ $mod_name = $name =~ s/([()])/\\$1/gr;
+ $name_ref = \$mod_name;
+ }
+
+ # We anchor the name, randomly with the possible anchors.
+ my $assembled = $left_anchor. $$name_ref . $right_anchor;
+
+ # \p{name=/.../} is always full matching
+ $all_pass &= like(chr($i), qr!^\p{name=/$assembled/}!,
+ "Verify /\p{name=/$assembled/} matches chr(0x$hex)");
+ }
+
return $all_pass;
}
@@ -217,6 +264,14 @@ sub test_vianame ($$$) {
cmp_ok($warning_count, '==', scalar @WARN, "Verify vianame doesn't warn on unknown names");
ok (! defined charnames::string_vianame("MORE NONE SUCH"), "Verify string_vianame returns undef for an undefined name");
cmp_ok($warning_count, '==', scalar @WARN, "Verify string_vianame doesn't warn on unknown names");
+ ok (! defined charnames::vianame(""), "Verify vianame returns undef for an empty value");
+ cmp_ok($warning_count, '==', scalar @WARN, "... and no warning is generated");
+ ok (! defined charnames::string_vianame(""), "Verify string_vianame returns undef for an empty value");
+ cmp_ok($warning_count, '==', scalar @WARN, "... and no warning is generated");
+
+ eval "qr/\\p{name=MORE NONE SUCH}/";
+ like($@, qr/Can't find Unicode property definition "name=MORE NONE SUCH"/,
+ '\p{name=} returns an appropriate error message on an undefined name');
use bytes;
is(charnames::vianame("GOTHIC LETTER AHSA"), 0x10330, "Verify vianame \\N{name} is unaffected by 'use bytes'");
@@ -229,6 +284,8 @@ sub test_vianame ($$$) {
ok(! defined charnames::string_vianame("GOTHIC LETTER AHSA"), "Verify string_vianame(\"GOTHIC LETTER AHSA\") is undefined under 'use bytes'");
ok($warning_count == scalar @WARN - 1 && $WARN[-1] =~ /above 0xFF/, "Verify string_vianame gives appropriate warning for previous test");
$warning_count = @WARN;
+ eval "qr/\\p{name=GOTHIC LETTER AHSA}/";
+ is($@, "", '\p{name=...} is unaffect by "use bytes"');
is(charnames::string_vianame("U+FF"), chr(utf8::unicode_to_native(0xFF)), "Verify string_vianame(\"U+FF\") is chr(0xFF) under 'use bytes'");
cmp_ok($warning_count, '==', scalar @WARN, "Verify string_vianame doesn't warn on legal inputs under 'use bytes'");
is(charnames::string_vianame("LATIN SMALL LETTER Y WITH DIAERESIS"), chr(utf8::unicode_to_native(0xFF)), "Verify string_vianame(\"LATIN SMALL LETTER Y WITH DIAERESIS\") is chr(native 0xFF) under 'use bytes'");
@@ -339,6 +396,13 @@ my $three_quarters = sprintf("%2X", utf8::unicode_to_native(0xBE));
is(charnames::viacode("$three_quarters"), "VULGAR FRACTION THREE QUARTERS", 'Verify charnames::viacode(native "BE") eq "VULGAR FRACTION THREE QUARTERS"');
is(charnames::viacode("U+00000000000FEED"), "ARABIC LETTER WAW ISOLATED FORM", 'Verify charnames::viacode("U+00000000000FEED") eq "ARABIC LETTER WAW ISOLATED FORM"');
+test_vianame(0x116C, "116C", "HANGUL JUNGSEONG OE");
+test_vianame(0x1180, "1180", "HANGUL JUNGSEONG O-E");
+like(chr(0x59C3), qr/\p{name=\/\ACJK UNIFIED IDEOGRAPH-59C3\z\/}/,
+ 'Verify name wildcards delimitters can be escaped');
+like(chr(0xD800), qr!\p{name=/\A\z/}!,
+ 'Verify works on matching an empty name');
+
{
no warnings 'deprecated';
is("\N{LINE FEED}", "\N{LINE FEED (LF)}", 'Verify "\N{LINE FEED}" eq "\N{LINE FEED (LF)}"', 'Verify \N{LINE FEED} eq \N{LINE FEED (LF)}');
@@ -728,7 +792,7 @@ is($_, 'foobar', 'Verify charnames.pm doesnt clobbers $_');
# SADAHIRO Tomoyuki's suggestion is to ensure that the UTF-8ness of both
# arguments are identical before calling index.
# To do this can take advantage of the fact that unicore/Name.pl is 7 bit
-# (or at least should be). So assert that that it's true here. EBCDIC
+# (or at least should be). So assert that that is true here. EBCDIC
# may be a problem (khw).
my $names = do "unicore/Name.pl";
@@ -790,16 +854,28 @@ is("\N{U+1D0C5}", "\N{BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA VASIS}", 'V
is("\N{mychar1}", "e", "Outer block: verify that \\N{mychar1} works");
is(charnames::vianame("mychar1"), ord("e"), "Outer block: verify that vianame(mychar1) works");
is(charnames::string_vianame("mychar1"), "e", "Outer block: verify that string_vianame(mychar1) works");
+ eval "qr/\\p{name=mychar1}/";
+ like($@, qr/Can't find Unicode property definition "name=mychar1"/,
+ '\p{name=} returns an appropriate error message on an alias');
is("\N{mychar2}", "A", "Outer block: verify that \\N{mychar2} works");
is(charnames::vianame("mychar2"), ord("A"), "Outer block: verify that vianame(mychar2) works");
is(charnames::string_vianame("mychar2"), "A", "Outer block: verify that string_vianame(mychar2) works");
+ eval "qr/\\p{name=mychar2}/";
+ like($@, qr/Can't find Unicode property definition "name=mychar2"/,
+ '\p{name=} returns an appropriate error message on an alias');
is("\N{myprivate1}", "\x{E8000}", "Outer block: verify that \\N{myprivate1} works");
cmp_ok(charnames::vianame("myprivate1"), "==", 0xE8000, "Outer block: verify that vianame(myprivate1) works");
is(charnames::string_vianame("myprivate1"), chr(0xE8000), "Outer block: verify that string_vianame(myprivate1) works");
+ eval "qr/\\p{name=myprivate1}/";
+ like($@, qr/Can't find Unicode property definition "name=myprivate1"/,
+ '\p{name=} returns an appropriate error message on an alias');
is(charnames::viacode(0xE8000), "myprivate1", "Outer block: verify that myprivate1 viacode works");
is("\N{myprivate2}", "\x{100000}", "Outer block: verify that \\N{myprivate2} works");
cmp_ok(charnames::vianame("myprivate2"), "==", 0x100000, "Outer block: verify that vianame(myprivate2) works");
is(charnames::string_vianame("myprivate2"), chr(0x100000), "Outer block: verify that string_vianame(myprivate2) works");
+ eval "qr/\\p{name=myprivate2}/";
+ like($@, qr/Can't find Unicode property definition "name=myprivate2"/,
+ '\p{name=} returns an appropriate error message on an alias');
is(charnames::viacode(0x100000), "myprivate2", "Outer block: verify that myprivate2 viacode works");
is("\N{BE}", "\N{KATAKANA LETTER BE}", "Outer block: verify that \\N uses the correct script ");
cmp_ok(charnames::vianame("BE"), "==", ord("\N{KATAKANA LETTER BE}"), "Outer block: verify that vianame uses the correct script");
@@ -807,6 +883,9 @@ is("\N{U+1D0C5}", "\N{BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA VASIS}", 'V
is("\N{Hiragana: BE}", $hiragana_be, "Outer block: verify that :short works with \\N");
cmp_ok(charnames::vianame("Hiragana: BE"), "==", ord($hiragana_be), "Outer block: verify that :short works with vianame");
cmp_ok(charnames::string_vianame("Hiragana: BE"), "==", $hiragana_be, "Outer block: verify that :short works with string_vianame");
+ eval "qr/\\p{name=Hiragana: BE}/";
+ like($@, qr/Can't find Unicode property definition "name=Hiragana: BE"/,
+ '\p{name=} returns an appropriate error message on :short attempt');
{
use charnames ":full",
@@ -960,11 +1039,9 @@ is("\N{U+1D0C5}", "\N{BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA VASIS}", 'V
$seed = srand;
}
- my $run_slow_tests = $ENV{PERL_RUN_SLOW_TESTS} || 0;
-
# We will look at the data grouped in "blocks" of the following
# size.
- my $block_size_bits = 7; # above 16 is not sensible
+ my $block_size_bits = 8; # above 16 is not sensible
my $block_size = 2**$block_size_bits;
# There are the regular names, like "SPACE", plus the ones
@@ -973,7 +1050,7 @@ is("\N{U+1D0C5}", "\N{BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA VASIS}", 'V
# of the character. The percentage of each type to test is
# fuzzily independently settable. This breaks down when the block size is
# 1 or is large enough that both types of names occur in the same block
- my $percentage_of_regular_names = ($run_slow_tests) ? 100 : 13;
+ my $percentage_of_regular_names = ($run_slow_tests) ? 100 : 10;
my $percentage_of_algorithmic_names = (100 / $block_size); # 1 test/block
# If wants everything tested, do so by changing the block size to 1 so
@@ -1244,6 +1321,9 @@ is("\N{U+1D0C5}", "\N{BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA VASIS}", 'V
$all_pass &= ok(! defined charnames::vianame("CJK UNIFIED IDEOGRAPH-$hex"), "Verify vianame(\"CJK UNIFIED IDEOGRAPH-$hex\") is undefined");
} else {
$all_pass &= ok(! defined charnames::string_vianame("CJK UNIFIED IDEOGRAPH-$hex"), "Verify string_vianame(\"CJK UNIFIED IDEOGRAPH-$hex\") is undefined");
+ eval "qr/\\p{name=CJK UNIFIED IDEOGRAPH-$hex}/";
+ $all_pass &= like($@, qr/Can't find Unicode property definition "name=CJK UNIFIED IDEOGRAPH-$hex\"/,
+ "Verify string_vianame(\"CJK UNIFIED IDEOGRAPH-$hex\") is undefined");
}
}
}
@@ -1259,11 +1339,18 @@ is("\N{U+1D0C5}", "\N{BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA VASIS}", 'V
s/^\s*#.*//;
next unless $_;
my ($name, $codes) = split ";";
+ $codes =~ s{ \b 00 ( [0-9A-F]{2} ) \b }
+ { sprintf("%04X", utf8::unicode_to_native(hex $1)) }gxe
+ if ord "A" != 65;
my $utf8 = pack("W*", map { hex } split " ", $codes);
is(charnames::string_vianame($name), $utf8, "Verify string_vianame(\"$name\") is the proper utf8");
my $loose_name = get_loose_name($name);
use charnames ":loose";
is(charnames::string_vianame($loose_name), $utf8, "Verify string_vianame(\"$loose_name\") is the proper utf8");
+
+ like($utf8, qr/^\p{name=$name}$/, "Verify /\p{name=$name}\$/ is the proper utf8");
+ like($utf8, qr/^\p{name=$loose_name}$/, "Verify /\p{name=$loose_name}\$/ is the proper utf8");
+ like($utf8, qr!^\p{name=/\A$name\z/}!, "Verify /\p{name=/$\A$name\z/} is the proper utf8");
#diag("$name, $utf8");
}
close $fh;
diff --git a/gnu/usr.bin/perl/lib/diagnostics.pm b/gnu/usr.bin/perl/lib/diagnostics.pm
index 860a0aa846e..a9de570adab 100644
--- a/gnu/usr.bin/perl/lib/diagnostics.pm
+++ b/gnu/usr.bin/perl/lib/diagnostics.pm
@@ -186,7 +186,7 @@ use 5.009001;
use Carp;
$Carp::Internal{__PACKAGE__.""}++;
-our $VERSION = '1.36';
+our $VERSION = '1.37';
our $DEBUG;
our $VERBOSE;
our $PRETTY;
@@ -265,6 +265,8 @@ if (eof(POD_DIAG)) {
'lt' => '<', # left chevron, less-than
'gt' => '>', # right chevron, greater-than
'quot' => '"', # double quote
+ 'sol' => '/', # forward slash / solidus
+ 'verbar' => '|', # vertical bar
"Aacute" => "A\\*'", # capital A, acute accent
# etc
@@ -276,6 +278,8 @@ if (eof(POD_DIAG)) {
'lt' => '<', # left chevron, less-than
'gt' => '>', # right chevron, greater-than
'quot' => '"', # double quote
+ 'sol' => '/', # Forward slash / solidus
+ 'verbar' => '|', # vertical bar
"Aacute" => "\xC1" # capital A, acute accent
@@ -287,6 +291,8 @@ if (eof(POD_DIAG)) {
'lt' => '<', # left chevron, less-than
'gt' => '>', # right chevron, greater-than
'quot' => '"', # double quote
+ 'sol' => '/', # Forward slash / solidus
+ 'verbar' => '|', # vertical bar
"Aacute" => "A" # capital A, acute accent
# etc
diff --git a/gnu/usr.bin/perl/lib/feature.pm b/gnu/usr.bin/perl/lib/feature.pm
index 0301aa59350..e6f467e9e48 100644
--- a/gnu/usr.bin/perl/lib/feature.pm
+++ b/gnu/usr.bin/perl/lib/feature.pm
@@ -5,14 +5,16 @@
package feature;
-our $VERSION = '1.54';
+our $VERSION = '1.58';
our %feature = (
fc => 'feature_fc',
+ isa => 'feature_isa',
say => 'feature_say',
state => 'feature_state',
switch => 'feature_switch',
bitwise => 'feature_bitwise',
+ indirect => 'feature_indirect',
evalbytes => 'feature_evalbytes',
signatures => 'feature_signatures',
current_sub => 'feature___SUB__',
@@ -24,13 +26,13 @@ our %feature = (
);
our %feature_bundle = (
- "5.10" => [qw(say state switch)],
- "5.11" => [qw(say state switch unicode_strings)],
- "5.15" => [qw(current_sub evalbytes fc say state switch unicode_eval unicode_strings)],
- "5.23" => [qw(current_sub evalbytes fc postderef_qq say state switch unicode_eval unicode_strings)],
- "5.27" => [qw(bitwise current_sub evalbytes fc postderef_qq say state switch unicode_eval unicode_strings)],
- "all" => [qw(bitwise current_sub declared_refs evalbytes fc postderef_qq refaliasing say signatures state switch unicode_eval unicode_strings)],
- "default" => [qw()],
+ "5.10" => [qw(indirect say state switch)],
+ "5.11" => [qw(indirect say state switch unicode_strings)],
+ "5.15" => [qw(current_sub evalbytes fc indirect say state switch unicode_eval unicode_strings)],
+ "5.23" => [qw(current_sub evalbytes fc indirect postderef_qq say state switch unicode_eval unicode_strings)],
+ "5.27" => [qw(bitwise current_sub evalbytes fc indirect postderef_qq say state switch unicode_eval unicode_strings)],
+ "all" => [qw(bitwise current_sub declared_refs evalbytes fc indirect isa postderef_qq refaliasing say signatures state switch unicode_eval unicode_strings)],
+ "default" => [qw(indirect)],
);
$feature_bundle{"5.12"} = $feature_bundle{"5.11"};
@@ -49,6 +51,8 @@ $feature_bundle{"5.26"} = $feature_bundle{"5.23"};
$feature_bundle{"5.28"} = $feature_bundle{"5.27"};
$feature_bundle{"5.29"} = $feature_bundle{"5.27"};
$feature_bundle{"5.30"} = $feature_bundle{"5.27"};
+$feature_bundle{"5.31"} = $feature_bundle{"5.27"};
+$feature_bundle{"5.32"} = $feature_bundle{"5.27"};
$feature_bundle{"5.9.5"} = $feature_bundle{"5.10"};
my %noops = (
postderef => 1,
@@ -348,6 +352,26 @@ Reference to a Variable> for examples.
This feature is available from Perl 5.26 onwards.
+=head2 The 'isa' feature
+
+This allows the use of the C<isa> infix operator, which tests whether the
+scalar given by the left operand is an object of the class given by the
+right operand. See L<perlop/Class Instance Operator> for more details.
+
+This feature is available from Perl 5.32 onwards.
+
+=head2 The 'indirect' feature
+
+This feature allows the use of L<indirect object
+syntax|perlobj/Indirect Object Syntax> for method calls, e.g. C<new
+Foo 1, 2;>. It is enabled by default, but can be turned off to
+disallow indirect object syntax.
+
+This feature is available under this name from Perl 5.32 onwards. In
+previous versions, it was simply on all the time. To disallow (or
+warn on) indirect object syntax on older Perls, see the L<indirect>
+CPAN module.
+
=head1 FEATURE BUNDLES
It's possible to load multiple features together, using
@@ -360,41 +384,49 @@ The following feature bundles are available:
bundle features included
--------- -----------------
- :default
+ :default indirect
- :5.10 say state switch
+ :5.10 say state switch indirect
- :5.12 say state switch unicode_strings
+ :5.12 say state switch unicode_strings indirect
- :5.14 say state switch unicode_strings
+ :5.14 say state switch unicode_strings indirect
:5.16 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
+ indirect
:5.18 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
+ indirect
:5.20 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
+ indirect
:5.22 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
+ indirect
:5.24 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
- postderef_qq
+ postderef_qq indirect
:5.26 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
- postderef_qq
+ postderef_qq indirect
:5.28 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
- postderef_qq bitwise
+ postderef_qq bitwise indirect
:5.30 say state switch unicode_strings
unicode_eval evalbytes current_sub fc
- postderef_qq bitwise
+ postderef_qq bitwise indirect
+
+ :5.32 say state switch unicode_strings
+ unicode_eval evalbytes current_sub fc
+ postderef_qq bitwise indirect
The C<:default> bundle represents the feature set that is enabled before
any C<use feature> or C<no feature> declaration.
@@ -479,7 +511,7 @@ sub __common {
my $import = shift;
my $bundle_number = $^H & $hint_mask;
my $features = $bundle_number != $hint_mask
- && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
+ && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
if ($features) {
# Features are enabled implicitly via bundle hints.
# Delete any keys that may be left over from last time.
diff --git a/gnu/usr.bin/perl/lib/overload.pm b/gnu/usr.bin/perl/lib/overload.pm
index f7d5d0f7cf9..30f810b0a1e 100644
--- a/gnu/usr.bin/perl/lib/overload.pm
+++ b/gnu/usr.bin/perl/lib/overload.pm
@@ -1,6 +1,6 @@
package overload;
-our $VERSION = '1.30';
+our $VERSION = '1.31';
%ops = (
with_assign => "+ - * / % ** << >> x .",
@@ -211,7 +211,7 @@ To overload built-in functions, see L<perlsub/Overriding Built-in Functions> ins
=head3 Declaration
Arguments of the C<use overload> directive are (key, value) pairs.
-For the full set of legal keys, see L<Overloadable Operations> below.
+For the full set of legal keys, see L</Overloadable Operations> below.
Operator implementations (the values) can be subroutines,
references to subroutines, or anonymous subroutines
@@ -274,7 +274,7 @@ For example, if C<$x> and C<$y> are C<Number>s:
Perl may also use C<minus()> to implement other operators which
have not been specified in the C<use overload> directive,
-according to the rules for L<Magic Autogeneration> described later.
+according to the rules for L</Magic Autogeneration> described later.
For example, the C<use overload> above declared no subroutine
for any of the operators C<-->, C<neg> (the overload key for
unary minus), or C<-=>. Thus
@@ -300,7 +300,7 @@ only to return the result of the subtraction:
Perl takes care of the assignment to $x.
In fact, such methods should I<not> modify their operands,
even if C<undef> is passed as the third argument
-(see L<Overloadable Operations>).
+(see L</Overloadable Operations>).
The same is not true of implementations of C<++> and C<-->:
these are expected to modify their operand.
@@ -354,7 +354,7 @@ arithmetic metaphor.
Note: the preceding paragraph describes what happens when
Perl autogenerates the copy constructor for an object based
on a scalar.
-For other cases, see L<Copy Constructor>.
+For other cases, see L</Copy Constructor>.
=head2 Overloadable Operations
@@ -417,7 +417,7 @@ evaluating an expression.
&= |= ^= &.= |.= ^.=
Simple assignment is not overloadable (the C<'='> key is used
-for the L<Copy Constructor>).
+for the L</Copy Constructor>).
Perl does have a way to make assignments to an object do whatever
you want, but this involves using tie(), not overload -
see L<perlfunc/tie> and the L</COOKBOOK> examples below.
@@ -575,7 +575,7 @@ then it will not be called again - avoiding infinite recursion.
nomethod fallback =
-See L<Special Keys for C<use overload>>.
+See L</Special Keys for C<use overload>>.
=back
@@ -663,7 +663,7 @@ C<'+='> and C<'-='> (and similar to C<'.='> and C<'x='> above):
Note also that the copy constructor (key C<'='>) may be
autogenerated, but only for objects based on scalars.
-See L<Copy Constructor>.
+See L</Copy Constructor>.
=head3 Minimal Set of Overloaded Operations
@@ -709,7 +709,7 @@ C<'+'>) result in a call
catch_all($a, 3, 1, '+')
-See L<How Perl Chooses an Operator Implementation>.
+See L</How Perl Chooses an Operator Implementation>.
=head3 C<fallback>
@@ -723,7 +723,7 @@ operator.
use overload "fallback" => 0, # ... ;
-This disables L<Magic Autogeneration>.
+This disables L</Magic Autogeneration>.
=item * C<undef>
@@ -737,12 +737,12 @@ autogenerated then, instead of issuing an error message, Perl
is allowed to revert to what it would have done for that
operator if there had been no C<use overload> directive.
-Note: in most cases, particularly the L<Copy Constructor>,
+Note: in most cases, particularly the L</Copy Constructor>,
this is unlikely to be appropriate behaviour.
=back
-See L<How Perl Chooses an Operator Implementation>.
+See L</How Perl Chooses an Operator Implementation>.
=head3 Copy Constructor
@@ -890,7 +890,7 @@ on the type of their operands.
As there is no way to instruct Perl to treat the operands as, e.g.,
numbers instead of strings, the result here may not be what you
expect.
-See L<BUGS AND PITFALLS>.
+See L</BUGS AND PITFALLS>.
=head2 Losing Overloading
@@ -1413,12 +1413,12 @@ the tables of operations, and change the code which fills %subr to
}
Since subroutines implementing assignment operators are not required
-to modify their operands (see L<Overloadable Operations> above),
+to modify their operands (see L</Overloadable Operations> above),
we do not need anything special to make C<+=> and friends work,
besides adding these operators to %subr and defining a copy
constructor (needed since Perl has no way to know that the
implementation of C<'+='> does not mutate the argument -
-see L<Copy Constructor>).
+see L</Copy Constructor>).
To implement a copy constructor, add C<< '=' => \&cpy >> to C<use overload>
line, and code (this code assumes that mutators change things one level
diff --git a/gnu/usr.bin/perl/lib/overload.t b/gnu/usr.bin/perl/lib/overload.t
index 5f2e0c29021..1a641a28637 100644
--- a/gnu/usr.bin/perl/lib/overload.t
+++ b/gnu/usr.bin/perl/lib/overload.t
@@ -3072,7 +3072,7 @@ package RT132827 {
}
# RT #132793
-# An arg like like "$b" in $overloaded .= "$b" should be stringified
+# An arg like "$b" in $overloaded .= "$b" should be stringified
# before being passed to the method
package RT132793 {
diff --git a/gnu/usr.bin/perl/lib/perl5db.pl b/gnu/usr.bin/perl/lib/perl5db.pl
index e8a29da1344..69a9bb6e643 100644
--- a/gnu/usr.bin/perl/lib/perl5db.pl
+++ b/gnu/usr.bin/perl/lib/perl5db.pl
@@ -529,7 +529,7 @@ BEGIN {
use vars qw($VERSION $header);
# bump to X.XX in blead, only use X.XX_XX in maint
-$VERSION = '1.55';
+$VERSION = '1.57';
$header = "perl5db.pl version $VERSION";
@@ -2293,7 +2293,7 @@ sub _DB__handle_restart_and_rerun_commands {
# Change directory to the initial current working directory on
# the script startup, so if the debugged program changed the
# directory, then we will still be able to find the path to the
- # the program. (perl 5 RT #121509 ).
+ # program. (perl 5 RT #121509 ).
chdir ($_initial_cwd);
my @args = ($cmd_cmd eq 'R' ? restart() : rerun($cmd_params));
@@ -5480,6 +5480,9 @@ Display the (nested) parentage of the module or object given.
sub cmd_i {
my $cmd = shift;
my $line = shift;
+
+ require mro;
+
foreach my $isa ( split( /\s+/, $line ) ) {
$evalarg = $isa;
# The &-call is here to ascertain the mutability of @_.
@@ -9154,7 +9157,7 @@ BEGIN { # This does not compile, alas. (XXX eh?)
$db_stop = 0; # Compiler warning ...
$db_stop = 1 << 30; # ... because this is only used in an eval() later.
- # This variable records how many levels we're nested in debugging. Used
+ # This variable records how many levels we're nested in debugging.
# Used in the debugger prompt, and in determining whether it's all over or
# not.
$level = 0; # Level of recursive debugging
diff --git a/gnu/usr.bin/perl/lib/perl5db.t b/gnu/usr.bin/perl/lib/perl5db.t
index 450f4d067b2..421229a54ab 100644
--- a/gnu/usr.bin/perl/lib/perl5db.t
+++ b/gnu/usr.bin/perl/lib/perl5db.t
@@ -2899,6 +2899,31 @@ SKIP:
);
}
+{
+ # gh #17660
+ my $wrapper = DebugWrap->new(
+ {
+ cmds =>
+ [
+ 'b 13',
+ 'c',
+ 'i Foo',
+ 'q',
+ ],
+ prog => '../lib/perl5db/t/gh-17660',
+ }
+ );
+
+ $wrapper->output_unlike(
+ qr/Undefined subroutine &mro::get_linear_isa/ms,
+ q/mro needs to be loaded/,
+ );
+ $wrapper->output_like(
+ qr/Foo 1.000, Bar 2.000/,
+ q/check for reasonable result/,
+ );
+}
+
SKIP:
{
$Config{usethreads}
diff --git a/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt b/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt
index a08acdad67d..9a93adc12fb 100644
--- a/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt
+++ b/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt
@@ -1,6 +1,6 @@
-# ArabicShaping-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW, RP]
-# © 2019 Unicode®, Inc.
+# ArabicShaping-13.0.0.txt
+# Date: 2020-01-31, 23:55:00 GMT [KW, RP]
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -8,24 +8,22 @@
# Unicode Character Database.
#
# This file defines the Joining_Type and Joining_Group property
-# values for Arabic, Syriac, N'Ko, Mandaic, Manichaean,
-# Hanifi Rohingya, and Sogdian positional
+# values for Arabic, Syriac, N'Ko, Mandaic, and Manichaean positional
# shaping, repeating in machine readable form the information
# exemplified in Tables 9-3, 9-8, 9-9, 9-10, 9-14, 9-15, 9-16, 9-19,
-# 9-20, 10-4, 10-5, 10-6, 10-7, 14-10, 16-16, and 19-5 of The Unicode Standard core
+# 9-20, 10-4, 10-5, 10-6, 10-7, and 19-5 of The Unicode Standard core
# specification. This file also defines Joining_Type values for
-# Mongolian, Phags-pa, Psalter Pahlavi, and Adlam positional shaping,
+# Mongolian, Phags-pa, Psalter Pahlavi, Sogdian, Chorasmian, and Adlam positional shaping,
+# and Joining_Type and Joining_Group values for Hanifi Rohingya positional shaping,
# which are not listed in tables in the standard.
#
-# See Sections 9.2, 9.3, 9.5, 10.5, 10.6, 13.4, 14.3, 14.10, 16.13, 19.4, and 19.9
+# See Sections 9.2, 9.3, 9.5, 10.5, 10.6, 13.4, 14.3, 14.10, 16.14, 19.4, and 19.9
# of The Unicode Standard core specification for more information.
#
# Each line contains four fields, separated by a semicolon.
#
# Field 0: the code point, in 4-digit hexadecimal
-# form, of an Arabic, Syriac, N'Ko, Mandaic, Mongolian,
-# Phags-pa, Manichaean, Psalter Pahlavi, Hanifi Rohingya, Sogdian,
-# or other character.
+# form, of a character.
#
# Field 1: gives a short schematic name for that character.
# The schematic name is descriptive of the shape, based as
@@ -81,7 +79,7 @@
# joining group values will be defined only if an explicit proposal
# to define those values exactly has been approved by the UTC. This
# is the convention exemplified by the N'Ko, Mandaic, Mongolian,
-# Phags-pa, Psalter Pahlavi, and Sogdian scripts.
+# Phags-pa, Psalter Pahlavi, Sogdian, Chorasmian, and Adlam scripts.
# Only the Arabic, Manichaean, and Syriac scripts currently have
# explicit joining group values defined for all characters, including
# those which have only a single character in a particular Joining_Group
@@ -416,9 +414,9 @@
0853; MANDAIC AR; D; No_Joining_Group
0854; MANDAIC ASH; R; No_Joining_Group
0855; MANDAIC AT; D; No_Joining_Group
-0856; MANDAIC DUSHENNA; U; No_Joining_Group
-0857; MANDAIC KAD; U; No_Joining_Group
-0858; MANDAIC AIN; U; No_Joining_Group
+0856; MANDAIC DUSHENNA; R; No_Joining_Group
+0857; MANDAIC KAD; R; No_Joining_Group
+0858; MANDAIC AIN; R; No_Joining_Group
# Syriac Supplement Characters
@@ -465,6 +463,16 @@
08BB; AFRICAN FEH; D; AFRICAN FEH
08BC; AFRICAN QAF; D; AFRICAN QAF
08BD; AFRICAN NOON; D; AFRICAN NOON
+08BE; DOTLESS BEH WITH 3 DOTS BELOW AND V ABOVE; D; BEH
+08BF; DOTLESS BEH WITH 2 DOTS AND V ABOVE; D; BEH
+08C0; DOTLESS BEH WITH TAH AND V ABOVE; D; BEH
+08C1; HAH WITH 3 DOTS BELOW AND V ABOVE; D; HAH
+08C2; KEHEH WITH V ABOVE; D; GAF
+08C3; AIN WITH DIAMOND 4 DOTS ABOVE; D; AIN
+08C4; AFRICAN QAF WITH 3 DOTS ABOVE; D; AFRICAN QAF
+08C5; HAH WITH DOT BELOW AND 3 DOTS ABOVE; D; HAH
+08C6; HAH WITH DIAMOND 4 DOTS BELOW; D; HAH
+08C7; LAM WITH TAH ABOVE; D; LAM
08E2; ARABIC DISPUTED END OF AYAH; U; No_Joining_Group
# Mongolian Characters
@@ -811,6 +819,37 @@ A873; PHAGS-PA CANDRABINDU; U; No_Joining_Group
10F53; SOGDIAN TWENTY; D; No_Joining_Group
10F54; SOGDIAN ONE HUNDRED; R; No_Joining_Group
+# Chorasmian Characters
+
+10FB0; CHORASMIAN ALEPH; D; No_Joining_Group
+10FB1; CHORASMIAN SMALL ALEPH; U; No_Joining_Group
+10FB2; CHORASMIAN BETH; D; No_Joining_Group
+10FB3; CHORASMIAN GIMEL; D; No_Joining_Group
+10FB4; CHORASMIAN DALETH; R; No_Joining_Group
+10FB5; CHORASMIAN HE; R; No_Joining_Group
+10FB6; CHORASMIAN WAW; R; No_Joining_Group
+10FB7; CHORASMIAN CURLED WAW; U; No_Joining_Group
+10FB8; CHORASMIAN ZAYIN; D; No_Joining_Group
+10FB9; CHORASMIAN HETH; R; No_Joining_Group
+10FBA; CHORASMIAN YODH; R; No_Joining_Group
+10FBB; CHORASMIAN KAPH; D; No_Joining_Group
+10FBC; CHORASMIAN LAMEDH; D; No_Joining_Group
+10FBD; CHORASMIAN MEM; R; No_Joining_Group
+10FBE; CHORASMIAN NUN; D; No_Joining_Group
+10FBF; CHORASMIAN SAMEKH; D; No_Joining_Group
+10FC0; CHORASMIAN AYIN; U; No_Joining_Group
+10FC1; CHORASMIAN PE; D; No_Joining_Group
+10FC2; CHORASMIAN RESH; R; No_Joining_Group
+10FC3; CHORASMIAN SHIN; R; No_Joining_Group
+10FC4; CHORASMIAN TAW; D; No_Joining_Group
+10FC5; CHORASMIAN ONE; U; No_Joining_Group
+10FC6; CHORASMIAN TWO; U; No_Joining_Group
+10FC7; CHORASMIAN THREE; U; No_Joining_Group
+10FC8; CHORASMIAN FOUR; U; No_Joining_Group
+10FC9; CHORASMIAN TEN; R; No_Joining_Group
+10FCA; CHORASMIAN TWENTY; D; No_Joining_Group
+10FCB; CHORASMIAN ONE HUNDRED; L; No_Joining_Group
+
# Kaithi Number Signs
# These are prepended concatenation marks, comparable
# to the number signs in the Arabic script.
diff --git a/gnu/usr.bin/perl/lib/unicore/BidiBrackets.txt b/gnu/usr.bin/perl/lib/unicore/BidiBrackets.txt
index 782f9f25305..a95e5ca5ca7 100644
--- a/gnu/usr.bin/perl/lib/unicore/BidiBrackets.txt
+++ b/gnu/usr.bin/perl/lib/unicore/BidiBrackets.txt
@@ -1,5 +1,5 @@
-# BidiBrackets-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [AG, LI, KW]
+# BidiBrackets-13.0.0.txt
+# Date: 2019-09-09, 19:31:00 GMT [AG, LI, KW]
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt b/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt
index 7370fcc6a7c..34e42ae8dc3 100644
--- a/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt
+++ b/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt
@@ -1,5 +1,5 @@
-# BidiMirroring-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW, LI, RP]
+# BidiMirroring-13.0.0.txt
+# Date: 2019-09-09, 19:34:00 GMT [KW, LI, RP]
# © 2019 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -15,7 +15,7 @@
# value, for which there is another Unicode character that typically has a glyph
# that is the mirror image of the original character's glyph.
#
-# The repertoire covered by the file is Unicode 12.1.0.
+# The repertoire covered by the file is Unicode 13.0.0.
#
# The file contains a list of lines with mappings from one code point
# to another one for character-based mirroring.
diff --git a/gnu/usr.bin/perl/lib/unicore/Blocks.txt b/gnu/usr.bin/perl/lib/unicore/Blocks.txt
index 2329cb5c763..56877db10f3 100644
--- a/gnu/usr.bin/perl/lib/unicore/Blocks.txt
+++ b/gnu/usr.bin/perl/lib/unicore/Blocks.txt
@@ -1,5 +1,5 @@
-# Blocks-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW]
+# Blocks-13.0.0.txt
+# Date: 2019-07-10, 19:06:00 GMT [KW]
# © 2019 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -237,8 +237,10 @@ FFF0..FFFF; Specials
10C80..10CFF; Old Hungarian
10D00..10D3F; Hanifi Rohingya
10E60..10E7F; Rumi Numeral Symbols
+10E80..10EBF; Yezidi
10F00..10F2F; Old Sogdian
10F30..10F6F; Sogdian
+10FB0..10FDF; Chorasmian
10FE0..10FFF; Elymaic
11000..1107F; Brahmi
11080..110CF; Kaithi
@@ -260,6 +262,7 @@ FFF0..FFFF; Specials
11700..1173F; Ahom
11800..1184F; Dogra
118A0..118FF; Warang Citi
+11900..1195F; Dives Akuru
119A0..119FF; Nandinagari
11A00..11A4F; Zanabazar Square
11A50..11AAF; Soyombo
@@ -269,6 +272,7 @@ FFF0..FFFF; Specials
11D00..11D5F; Masaram Gondi
11D60..11DAF; Gunjala Gondi
11EE0..11EFF; Makasar
+11FB0..11FBF; Lisu Supplement
11FC0..11FFF; Tamil Supplement
12000..123FF; Cuneiform
12400..1247F; Cuneiform Numbers and Punctuation
@@ -285,6 +289,8 @@ FFF0..FFFF; Specials
16FE0..16FFF; Ideographic Symbols and Punctuation
17000..187FF; Tangut
18800..18AFF; Tangut Components
+18B00..18CFF; Khitan Small Script
+18D00..18D8F; Tangut Supplement
1B000..1B0FF; Kana Supplement
1B100..1B12F; Kana Extended-A
1B130..1B16F; Small Kana Extension
@@ -322,12 +328,14 @@ FFF0..FFFF; Specials
1F900..1F9FF; Supplemental Symbols and Pictographs
1FA00..1FA6F; Chess Symbols
1FA70..1FAFF; Symbols and Pictographs Extended-A
+1FB00..1FBFF; Symbols for Legacy Computing
20000..2A6DF; CJK Unified Ideographs Extension B
2A700..2B73F; CJK Unified Ideographs Extension C
2B740..2B81F; CJK Unified Ideographs Extension D
2B820..2CEAF; CJK Unified Ideographs Extension E
2CEB0..2EBEF; CJK Unified Ideographs Extension F
2F800..2FA1F; CJK Compatibility Ideographs Supplement
+30000..3134F; CJK Unified Ideographs Extension G
E0000..E007F; Tags
E0100..E01EF; Variation Selectors Supplement
F0000..FFFFF; Supplementary Private Use Area-A
diff --git a/gnu/usr.bin/perl/lib/unicore/CJKRadicals.txt b/gnu/usr.bin/perl/lib/unicore/CJKRadicals.txt
index f093f8159f4..231361591fd 100644
--- a/gnu/usr.bin/perl/lib/unicore/CJKRadicals.txt
+++ b/gnu/usr.bin/perl/lib/unicore/CJKRadicals.txt
@@ -1,5 +1,5 @@
-# CJKRadicals-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [RC, KW, LI]
+# CJKRadicals-13.0.0.txt
+# Date: 2019-09-09, 19:38:00 GMT [RC, KW, LI]
# © 2019 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
diff --git a/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt b/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt
index 7eeb915abfd..033788b253f 100644
--- a/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt
+++ b/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt
@@ -1,5 +1,5 @@
-# CaseFolding-12.1.0.txt
-# Date: 2019-03-10, 10:53:00 GMT
+# CaseFolding-13.0.0.txt
+# Date: 2019-09-08, 23:30:59 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -1234,6 +1234,9 @@ A7C2; C; A7C3; # LATIN CAPITAL LETTER ANGLICANA W
A7C4; C; A794; # LATIN CAPITAL LETTER C WITH PALATAL HOOK
A7C5; C; 0282; # LATIN CAPITAL LETTER S WITH HOOK
A7C6; C; 1D8E; # LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C7; C; A7C8; # LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9; C; A7CA; # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7F5; C; A7F6; # LATIN CAPITAL LETTER REVERSED HALF H
AB70; C; 13A0; # CHEROKEE SMALL LETTER A
AB71; C; 13A1; # CHEROKEE SMALL LETTER E
AB72; C; 13A2; # CHEROKEE SMALL LETTER I
diff --git a/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt b/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt
index aa654974bec..52bbb465bcd 100644
--- a/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt
+++ b/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt
@@ -1,5 +1,5 @@
-# CompositionExclusions-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW, LI]
+# CompositionExclusions-13.0.0.txt
+# Date: 2019-10-15, 18:27:00 GMT [KW, LI]
# © 2019 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -23,6 +23,19 @@
# (1) Script Specifics
#
# This list of characters cannot be derived from the UnicodeData.txt file.
+#
+# Included are the following subcategories:
+#
+# - Many precomposed characters using a nukta diacritic in the Devanagari,
+# Bangla/Bengali, Gurmukhi, or Odia/Oriya scripts.
+# - Tibetan letters and subjoined letters with decompositions including
+# U+0FB7 TIBETAN SUBJOINED LETTER HA or U+0FB5 TIBETAN SUBJOINED LETTER SSA.
+# - Two two-part Tibetan vowel signs involving top and bottom pieces.
+# - A large collection of compatibility precomposed characters for Hebrew
+# involving dagesh and/or other combining marks.
+#
+# This list is unlikely to grow.
+#
# ================================================
0958 # DEVANAGARI LETTER QA
diff --git a/gnu/usr.bin/perl/lib/unicore/DAge.txt b/gnu/usr.bin/perl/lib/unicore/DAge.txt
index 63503150509..0d2bd10f8d7 100644
--- a/gnu/usr.bin/perl/lib/unicore/DAge.txt
+++ b/gnu/usr.bin/perl/lib/unicore/DAge.txt
@@ -1,5 +1,5 @@
-# DerivedAge-12.1.0.txt
-# Date: 2019-04-01, 09:10:08 GMT
+# DerivedAge-13.0.0.txt
+# Date: 2019-09-08, 23:30:59 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -1794,4 +1794,72 @@ AB66..AB67 ; 12.0 # [2] LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK..
# Total code points: 1
+# ================================================
+
+# Age=V13_0
+
+# Newly assigned in Unicode 13.0.0 (March, 2020)
+
+08BE..08C7 ; 13.0 # [10] ARABIC LETTER PEH WITH SMALL V..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
+0B55 ; 13.0 # ORIYA SIGN OVERLINE
+0D04 ; 13.0 # MALAYALAM LETTER VEDIC ANUSVARA
+0D81 ; 13.0 # SINHALA SIGN CANDRABINDU
+1ABF..1AC0 ; 13.0 # [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
+2B97 ; 13.0 # SYMBOL FOR TYPE A ELECTRONICS
+2E50..2E52 ; 13.0 # [3] CROSS PATTY WITH RIGHT CROSSBAR..TIRONIAN SIGN CAPITAL ET
+31BB..31BF ; 13.0 # [5] BOPOMOFO FINAL LETTER G..BOPOMOFO LETTER AH
+4DB6..4DBF ; 13.0 # [10] CJK UNIFIED IDEOGRAPH-4DB6..CJK UNIFIED IDEOGRAPH-4DBF
+9FF0..9FFC ; 13.0 # [13] CJK UNIFIED IDEOGRAPH-9FF0..CJK UNIFIED IDEOGRAPH-9FFC
+A7C7..A7CA ; 13.0 # [4] LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; 13.0 # [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
+A82C ; 13.0 # SYLOTI NAGRI SIGN ALTERNATE HASANTA
+AB68..AB6B ; 13.0 # [4] LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE..MODIFIER LETTER RIGHT TACK
+1019C ; 13.0 # ASCIA SYMBOL
+10E80..10EA9 ; 13.0 # [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAD ; 13.0 # [3] YEZIDI COMBINING HAMZA MARK..YEZIDI HYPHENATION MARK
+10EB0..10EB1 ; 13.0 # [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+10FB0..10FCB ; 13.0 # [28] CHORASMIAN LETTER ALEPH..CHORASMIAN NUMBER ONE HUNDRED
+11147 ; 13.0 # CHAKMA LETTER VAA
+111CE..111CF ; 13.0 # [2] SHARADA VOWEL SIGN PRISHTHAMATRA E..SHARADA SIGN INVERTED CANDRABINDU
+1145A ; 13.0 # NEWA DOUBLE COMMA
+11460..11461 ; 13.0 # [2] NEWA SIGN JIHVAMULIYA..NEWA SIGN UPADHMANIYA
+11900..11906 ; 13.0 # [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E
+11909 ; 13.0 # DIVES AKURU LETTER O
+1190C..11913 ; 13.0 # [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; 13.0 # [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..11935 ; 13.0 # [30] DIVES AKURU LETTER DDA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; 13.0 # [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..11946 ; 13.0 # [12] DIVES AKURU SIGN ANUSVARA..DIVES AKURU END OF TEXT MARK
+11950..11959 ; 13.0 # [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
+11FB0 ; 13.0 # LISU LETTER YHA
+16FE4 ; 13.0 # KHITAN SMALL SCRIPT FILLER
+16FF0..16FF1 ; 13.0 # [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+18AF3..18CD5 ; 13.0 # [483] TANGUT COMPONENT-756..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; 13.0 # [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
+1F10D..1F10F ; 13.0 # [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+1F16D..1F16F ; 13.0 # [3] CIRCLED CC..CIRCLED HUMAN FIGURE
+1F1AD ; 13.0 # MASK WORK SYMBOL
+1F6D6..1F6D7 ; 13.0 # [2] HUT..ELEVATOR
+1F6FB..1F6FC ; 13.0 # [2] PICKUP TRUCK..ROLLER SKATE
+1F8B0..1F8B1 ; 13.0 # [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F90C ; 13.0 # PINCHED FINGERS
+1F972 ; 13.0 # SMILING FACE WITH TEAR
+1F977..1F978 ; 13.0 # [2] NINJA..DISGUISED FACE
+1F9A3..1F9A4 ; 13.0 # [2] MAMMOTH..DODO
+1F9AB..1F9AD ; 13.0 # [3] BEAVER..SEAL
+1F9CB ; 13.0 # BUBBLE TEA
+1FA74 ; 13.0 # THONG SANDAL
+1FA83..1FA86 ; 13.0 # [4] BOOMERANG..NESTING DOLLS
+1FA96..1FAA8 ; 13.0 # [19] MILITARY HELMET..ROCK
+1FAB0..1FAB6 ; 13.0 # [7] FLY..FEATHER
+1FAC0..1FAC2 ; 13.0 # [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAD0..1FAD6 ; 13.0 # [7] BLUEBERRIES..TEAPOT
+1FB00..1FB92 ; 13.0 # [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA ; 13.0 # [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+1FBF0..1FBF9 ; 13.0 # [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+2A6D7..2A6DD ; 13.0 # [7] CJK UNIFIED IDEOGRAPH-2A6D7..CJK UNIFIED IDEOGRAPH-2A6DD
+30000..3134A ; 13.0 # [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+
+# Total code points: 5930
+
# EOF
diff --git a/gnu/usr.bin/perl/lib/unicore/DCoreProperties.txt b/gnu/usr.bin/perl/lib/unicore/DCoreProperties.txt
index 4a92ffd1a5b..bc97e2173df 100644
--- a/gnu/usr.bin/perl/lib/unicore/DCoreProperties.txt
+++ b/gnu/usr.bin/perl/lib/unicore/DCoreProperties.txt
@@ -1,6 +1,6 @@
-# DerivedCoreProperties-12.1.0.txt
-# Date: 2019-03-10, 10:53:06 GMT
-# © 2019 Unicode®, Inc.
+# DerivedCoreProperties-13.0.0.txt
+# Date: 2020-01-22, 00:07:19 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -342,7 +342,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A
0840..0858 ; Alphabetic # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
0860..086A ; Alphabetic # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; Alphabetic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; Alphabetic # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; Alphabetic # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
08D4..08DF ; Alphabetic # Mn [12] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH WORD WAQFA
08E3..08E9 ; Alphabetic # Mn [7] ARABIC TURNED DAMMA BELOW..ARABIC CURLY KASRATAN
08F0..0902 ; Alphabetic # Mn [19] ARABIC OPEN FATHATAN..DEVANAGARI SIGN ANUSVARA
@@ -496,7 +496,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A
0CF1..0CF2 ; Alphabetic # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
0D00..0D01 ; Alphabetic # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03 ; Alphabetic # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D05..0D0C ; Alphabetic # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; Alphabetic # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; Alphabetic # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; Alphabetic # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; Alphabetic # Lo MALAYALAM SIGN AVAGRAHA
@@ -510,6 +510,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A
0D5F..0D61 ; Alphabetic # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
0D62..0D63 ; Alphabetic # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
0D7A..0D7F ; Alphabetic # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D81 ; Alphabetic # Mn SINHALA SIGN CANDRABINDU
0D82..0D83 ; Alphabetic # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0D85..0D96 ; Alphabetic # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
0D9A..0DB1 ; Alphabetic # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
@@ -668,6 +669,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A
1A6D..1A72 ; Alphabetic # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
1A73..1A74 ; Alphabetic # Mn [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG
1AA7 ; Alphabetic # Lm TAI THAM SIGN MAI YAMOK
+1ABF..1AC0 ; Alphabetic # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; Alphabetic # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04 ; Alphabetic # Mc BALINESE SIGN BISAH
1B05..1B33 ; Alphabetic # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
@@ -797,10 +799,10 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A
30FF ; Alphabetic # Lo KATAKANA DIGRAPH KOTO
3105..312F ; Alphabetic # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
3131..318E ; Alphabetic # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-31A0..31BA ; Alphabetic # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; Alphabetic # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31F0..31FF ; Alphabetic # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
-3400..4DB5 ; Alphabetic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEF ; Alphabetic # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+3400..4DBF ; Alphabetic # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; Alphabetic # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
A000..A014 ; Alphabetic # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; Alphabetic # Lm YI SYLLABLE WU
A016..A48C ; Alphabetic # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -827,7 +829,8 @@ A788 ; Alphabetic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
A78B..A78E ; Alphabetic # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; Alphabetic # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; Alphabetic # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; Alphabetic # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; Alphabetic # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; Alphabetic # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; Alphabetic # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; Alphabetic # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; Alphabetic # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -913,7 +916,8 @@ AB20..AB26 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE
AB28..AB2E ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A ; Alphabetic # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5C..AB5F ; Alphabetic # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; Alphabetic # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; Alphabetic # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; Alphabetic # Lm MODIFIER LETTER SMALL TURNED W
AB70..ABBF ; Alphabetic # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2 ; Alphabetic # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
ABE3..ABE4 ; Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
@@ -1018,9 +1022,13 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG
10CC0..10CF2 ; Alphabetic # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
10D00..10D23 ; Alphabetic # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
10D24..10D27 ; Alphabetic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10E80..10EA9 ; Alphabetic # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC ; Alphabetic # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EB0..10EB1 ; Alphabetic # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; Alphabetic # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F27 ; Alphabetic # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
10F30..10F45 ; Alphabetic # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10FB0..10FC4 ; Alphabetic # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
10FE0..10FF6 ; Alphabetic # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11000 ; Alphabetic # Mc BRAHMI SIGN CANDRABINDU
11001 ; Alphabetic # Mn BRAHMI SIGN ANUSVARA
@@ -1040,6 +1048,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG
1112D..11132 ; Alphabetic # Mn [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK
11144 ; Alphabetic # Lo CHAKMA LETTER LHAA
11145..11146 ; Alphabetic # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; Alphabetic # Lo CHAKMA LETTER VAA
11150..11172 ; Alphabetic # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11176 ; Alphabetic # Lo MAHAJANI LIGATURE SHRI
11180..11181 ; Alphabetic # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
@@ -1049,6 +1058,8 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG
111B6..111BE ; Alphabetic # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111BF ; Alphabetic # Mc SHARADA VOWEL SIGN AU
111C1..111C4 ; Alphabetic # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+111CE ; Alphabetic # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; Alphabetic # Mn SHARADA SIGN INVERTED CANDRABINDU
111DA ; Alphabetic # Lo SHARADA EKAM
111DC ; Alphabetic # Lo SHARADA HEADSTROKE
11200..11211 ; Alphabetic # Lo [18] KHOJKI LETTER A..KHOJKI LETTER JJA
@@ -1093,7 +1104,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG
11443..11444 ; Alphabetic # Mn [2] NEWA SIGN CANDRABINDU..NEWA SIGN ANUSVARA
11445 ; Alphabetic # Mc NEWA SIGN VISARGA
11447..1144A ; Alphabetic # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
-1145F ; Alphabetic # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; Alphabetic # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; Alphabetic # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114B0..114B2 ; Alphabetic # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
114B3..114B8 ; Alphabetic # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
@@ -1138,7 +1149,18 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG
1182F..11837 ; Alphabetic # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
11838 ; Alphabetic # Mc DOGRA SIGN VISARGA
118A0..118DF ; Alphabetic # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
-118FF ; Alphabetic # Lo WARANG CITI OM
+118FF..11906 ; Alphabetic # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; Alphabetic # Lo DIVES AKURU LETTER O
+1190C..11913 ; Alphabetic # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; Alphabetic # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; Alphabetic # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935 ; Alphabetic # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; Alphabetic # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; Alphabetic # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193F ; Alphabetic # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; Alphabetic # Mc DIVES AKURU MEDIAL YA
+11941 ; Alphabetic # Lo DIVES AKURU INITIAL RA
+11942 ; Alphabetic # Mc DIVES AKURU MEDIAL RA
119A0..119A7 ; Alphabetic # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; Alphabetic # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119D1..119D3 ; Alphabetic # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
@@ -1201,6 +1223,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG
11EE0..11EF2 ; Alphabetic # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
11EF3..11EF4 ; Alphabetic # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
11EF5..11EF6 ; Alphabetic # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11FB0 ; Alphabetic # Lo LISU LETTER YHA
12000..12399 ; Alphabetic # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E ; Alphabetic # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12480..12543 ; Alphabetic # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
@@ -1222,8 +1245,10 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG
16F93..16F9F ; Alphabetic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
16FE0..16FE1 ; Alphabetic # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE3 ; Alphabetic # Lm OLD CHINESE ITERATION MARK
+16FF0..16FF1 ; Alphabetic # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
17000..187F7 ; Alphabetic # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; Alphabetic # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; Alphabetic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; Alphabetic # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; Alphabetic # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152 ; Alphabetic # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167 ; Alphabetic # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -1312,14 +1337,15 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG
1F130..1F149 ; Alphabetic # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z
1F150..1F169 ; Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F170..1F189 ; Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-20000..2A6D6 ; Alphabetic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+20000..2A6DD ; Alphabetic # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; Alphabetic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Alphabetic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; Alphabetic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; Alphabetic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; Alphabetic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; Alphabetic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-# Total code points: 127256
+# Total code points: 132875
# ================================================
@@ -1945,11 +1971,14 @@ A7BB ; Lowercase # L& LATIN SMALL LETTER GLOTTAL A
A7BD ; Lowercase # L& LATIN SMALL LETTER GLOTTAL I
A7BF ; Lowercase # L& LATIN SMALL LETTER GLOTTAL U
A7C3 ; Lowercase # L& LATIN SMALL LETTER ANGLICANA W
+A7C8 ; Lowercase # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+A7CA ; Lowercase # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F6 ; Lowercase # L& LATIN SMALL LETTER REVERSED HALF H
A7F8..A7F9 ; Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; Lowercase # L& LATIN LETTER SMALL CAPITAL TURNED M
AB30..AB5A ; Lowercase # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5C..AB5F ; Lowercase # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; Lowercase # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; Lowercase # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
AB70..ABBF ; Lowercase # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
FB00..FB06 ; Lowercase # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
FB13..FB17 ; Lowercase # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
@@ -1989,7 +2018,7 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L
1D7CB ; Lowercase # L& MATHEMATICAL BOLD SMALL DIGAMMA
1E922..1E943 ; Lowercase # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA
-# Total code points: 2340
+# Total code points: 2344
# ================================================
@@ -2595,7 +2624,9 @@ A7BA ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL A
A7BC ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL I
A7BE ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL U
A7C2 ; Uppercase # L& LATIN CAPITAL LETTER ANGLICANA W
-A7C4..A7C6 ; Uppercase # L& [3] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C4..A7C7 ; Uppercase # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; Uppercase # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7F5 ; Uppercase # L& LATIN CAPITAL LETTER REVERSED HALF H
FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
10400..10427 ; Uppercase # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
104B0..104D3 ; Uppercase # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
@@ -2638,7 +2669,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH
1F150..1F169 ; Uppercase # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F170..1F189 ; Uppercase # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-# Total code points: 1908
+# Total code points: 1911
# ================================================
@@ -2748,12 +2779,13 @@ A770 ; Cased # Lm MODIFIER LETTER US
A771..A787 ; Cased # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
A78B..A78E ; Cased # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A790..A7BF ; Cased # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; Cased # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; Cased # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; Cased # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F8..A7F9 ; Cased # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; Cased # L& LATIN LETTER SMALL CAPITAL TURNED M
AB30..AB5A ; Cased # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5C..AB5F ; Cased # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; Cased # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; Cased # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
AB70..ABBF ; Cased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
FB00..FB06 ; Cased # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
FB13..FB17 ; Cased # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
@@ -2801,7 +2833,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
1F150..1F169 ; Cased # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F170..1F189 ; Cased # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-# Total code points: 4279
+# Total code points: 4286
# ================================================
@@ -2841,6 +2873,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
0483..0487 ; Case_Ignorable # Mn [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
0488..0489 ; Case_Ignorable # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
0559 ; Case_Ignorable # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
+055F ; Case_Ignorable # Po ARMENIAN ABBREVIATION MARK
0591..05BD ; Case_Ignorable # Mn [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
05BF ; Case_Ignorable # Mn HEBREW POINT RAFE
05C1..05C2 ; Case_Ignorable # Mn [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
@@ -2911,7 +2944,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
0B3F ; Case_Ignorable # Mn ORIYA VOWEL SIGN I
0B41..0B44 ; Case_Ignorable # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
0B4D ; Case_Ignorable # Mn ORIYA SIGN VIRAMA
-0B56 ; Case_Ignorable # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; Case_Ignorable # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B62..0B63 ; Case_Ignorable # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
0B82 ; Case_Ignorable # Mn TAMIL SIGN ANUSVARA
0BC0 ; Case_Ignorable # Mn TAMIL VOWEL SIGN II
@@ -2934,6 +2967,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
0D41..0D44 ; Case_Ignorable # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
0D4D ; Case_Ignorable # Mn MALAYALAM SIGN VIRAMA
0D62..0D63 ; Case_Ignorable # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; Case_Ignorable # Mn SINHALA SIGN CANDRABINDU
0DCA ; Case_Ignorable # Mn SINHALA SIGN AL-LAKUNA
0DD2..0DD4 ; Case_Ignorable # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
0DD6 ; Case_Ignorable # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
@@ -2999,6 +3033,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
1AA7 ; Case_Ignorable # Lm TAI THAM SIGN MAI YAMOK
1AB0..1ABD ; Case_Ignorable # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE ; Case_Ignorable # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0 ; Case_Ignorable # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; Case_Ignorable # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B34 ; Case_Ignorable # Mn BALINESE SIGN REREKAN
1B36..1B3A ; Case_Ignorable # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
@@ -3084,6 +3119,7 @@ A802 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN DVISVARA
A806 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN HASANTA
A80B ; Case_Ignorable # Mn SYLOTI NAGRI SIGN ANUSVARA
A825..A826 ; Case_Ignorable # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A82C ; Case_Ignorable # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A8C4..A8C5 ; Case_Ignorable # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
A8E0..A8F1 ; Case_Ignorable # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
A8FF ; Case_Ignorable # Mn DEVANAGARI VOWEL SIGN AY
@@ -3114,6 +3150,8 @@ AAF3..AAF4 ; Case_Ignorable # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK.
AAF6 ; Case_Ignorable # Mn MEETEI MAYEK VIRAMA
AB5B ; Case_Ignorable # Sk MODIFIER BREVE WITH INVERTED BREVE
AB5C..AB5F ; Case_Ignorable # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; Case_Ignorable # Lm MODIFIER LETTER SMALL TURNED W
+AB6A..AB6B ; Case_Ignorable # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
ABE5 ; Case_Ignorable # Mn MEETEI MAYEK VOWEL SIGN ANAP
ABE8 ; Case_Ignorable # Mn MEETEI MAYEK VOWEL SIGN UNAP
ABED ; Case_Ignorable # Mn MEETEI MAYEK APUN IYEK
@@ -3144,6 +3182,7 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI
10A3F ; Case_Ignorable # Mn KHAROSHTHI VIRAMA
10AE5..10AE6 ; Case_Ignorable # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
10D24..10D27 ; Case_Ignorable # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; Case_Ignorable # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
10F46..10F50 ; Case_Ignorable # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
11001 ; Case_Ignorable # Mn BRAHMI SIGN ANUSVARA
11038..11046 ; Case_Ignorable # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
@@ -3159,6 +3198,7 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI
11180..11181 ; Case_Ignorable # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
111B6..111BE ; Case_Ignorable # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111C9..111CC ; Case_Ignorable # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CF ; Case_Ignorable # Mn SHARADA SIGN INVERTED CANDRABINDU
1122F..11231 ; Case_Ignorable # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11234 ; Case_Ignorable # Mn KHOJKI SIGN ANUSVARA
11236..11237 ; Case_Ignorable # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
@@ -3194,6 +3234,9 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI
11727..1172B ; Case_Ignorable # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
1182F..11837 ; Case_Ignorable # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
11839..1183A ; Case_Ignorable # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+1193B..1193C ; Case_Ignorable # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193E ; Case_Ignorable # Mn DIVES AKURU VIRAMA
+11943 ; Case_Ignorable # Mn DIVES AKURU SIGN NUKTA
119D4..119D7 ; Case_Ignorable # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119DA..119DB ; Case_Ignorable # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
119E0 ; Case_Ignorable # Mn NANDINAGARI SIGN VIRAMA
@@ -3230,6 +3273,7 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI
16F93..16F9F ; Case_Ignorable # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
16FE0..16FE1 ; Case_Ignorable # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE3 ; Case_Ignorable # Lm OLD CHINESE ITERATION MARK
+16FE4 ; Case_Ignorable # Mn KHITAN SMALL SCRIPT FILLER
1BC9D..1BC9E ; Case_Ignorable # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
1BCA0..1BCA3 ; Case_Ignorable # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
1D167..1D169 ; Case_Ignorable # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
@@ -3260,7 +3304,7 @@ E0001 ; Case_Ignorable # Cf LANGUAGE TAG
E0020..E007F ; Case_Ignorable # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 2396
+# Total code points: 2413
# ================================================
@@ -3860,7 +3904,9 @@ A7BA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL
A7BC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL I
A7BE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL U
A7C2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ANGLICANA W
-A7C4..A7C6 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C4..A7C7 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7F5 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER REVERSED HALF H
FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
10400..10427 ; Changes_When_Lowercased # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
104B0..104D3 ; Changes_When_Lowercased # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
@@ -3869,7 +3915,7 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE
16E40..16E5F ; Changes_When_Lowercased # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y
1E900..1E921 ; Changes_When_Lowercased # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA
-# Total code points: 1390
+# Total code points: 1393
# ================================================
@@ -4483,6 +4529,9 @@ A7BB ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL A
A7BD ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL I
A7BF ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL U
A7C3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER ANGLICANA W
+A7C8 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+A7CA ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F6 ; Changes_When_Uppercased # L& LATIN SMALL LETTER REVERSED HALF H
AB53 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CHI
AB70..ABBF ; Changes_When_Uppercased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
FB00..FB06 ; Changes_When_Uppercased # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
@@ -4495,7 +4544,7 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER
16E60..16E7F ; Changes_When_Uppercased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y
1E922..1E943 ; Changes_When_Uppercased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA
-# Total code points: 1482
+# Total code points: 1485
# ================================================
@@ -5108,6 +5157,9 @@ A7BB ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL A
A7BD ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL I
A7BF ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL U
A7C3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER ANGLICANA W
+A7C8 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+A7CA ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F6 ; Changes_When_Titlecased # L& LATIN SMALL LETTER REVERSED HALF H
AB53 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CHI
AB70..ABBF ; Changes_When_Titlecased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
FB00..FB06 ; Changes_When_Titlecased # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
@@ -5120,7 +5172,7 @@ FF41..FF5A ; Changes_When_Titlecased # L& [26] FULLWIDTH LATIN SMALL LETTER
16E60..16E7F ; Changes_When_Titlecased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y
1E922..1E943 ; Changes_When_Titlecased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA
-# Total code points: 1409
+# Total code points: 1412
# ================================================
@@ -5730,7 +5782,9 @@ A7BA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL
A7BC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL I
A7BE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL U
A7C2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER ANGLICANA W
-A7C4..A7C6 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C4..A7C7 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7F5 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER REVERSED HALF H
AB70..ABBF ; Changes_When_Casefolded # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
FB00..FB06 ; Changes_When_Casefolded # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
FB13..FB17 ; Changes_When_Casefolded # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
@@ -5742,7 +5796,7 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE
16E40..16E5F ; Changes_When_Casefolded # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y
1E900..1E921 ; Changes_When_Casefolded # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA
-# Total code points: 1463
+# Total code points: 1466
# ================================================
@@ -5859,7 +5913,8 @@ A78B..A78D ; Changes_When_Casemapped # L& [3] LATIN CAPITAL LETTER SALTILLO
A790..A794 ; Changes_When_Casemapped # L& [5] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER C WITH PALATAL HOOK
A796..A7AE ; Changes_When_Casemapped # L& [25] LATIN CAPITAL LETTER B WITH FLOURISH..LATIN CAPITAL LETTER SMALL CAPITAL I
A7B0..A7BF ; Changes_When_Casemapped # L& [16] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; Changes_When_Casemapped # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; Changes_When_Casemapped # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
AB53 ; Changes_When_Casemapped # L& LATIN SMALL LETTER CHI
AB70..ABBF ; Changes_When_Casemapped # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
FB00..FB06 ; Changes_When_Casemapped # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
@@ -5875,7 +5930,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER
16E40..16E7F ; Changes_When_Casemapped # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y
1E900..1E943 ; Changes_When_Casemapped # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
-# Total code points: 2841
+# Total code points: 2847
# ================================================
@@ -5949,7 +6004,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER
0840..0858 ; ID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
0860..086A ; ID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; ID_Start # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; ID_Start # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; ID_Start # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
0904..0939 ; ID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
093D ; ID_Start # Lo DEVANAGARI SIGN AVAGRAHA
0950 ; ID_Start # Lo DEVANAGARI OM
@@ -6026,7 +6081,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER
0CDE ; ID_Start # Lo KANNADA LETTER FA
0CE0..0CE1 ; ID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
0CF1..0CF2 ; ID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-0D05..0D0C ; ID_Start # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; ID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; ID_Start # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; ID_Start # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; ID_Start # Lo MALAYALAM SIGN AVAGRAHA
@@ -6225,10 +6280,10 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER
30FF ; ID_Start # Lo KATAKANA DIGRAPH KOTO
3105..312F ; ID_Start # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
3131..318E ; ID_Start # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-31A0..31BA ; ID_Start # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; ID_Start # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31F0..31FF ; ID_Start # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
-3400..4DB5 ; ID_Start # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEF ; ID_Start # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+3400..4DBF ; ID_Start # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; ID_Start # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
A000..A014 ; ID_Start # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; ID_Start # Lm YI SYLLABLE WU
A016..A48C ; ID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -6253,7 +6308,8 @@ A788 ; ID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
A78B..A78E ; ID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; ID_Start # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; ID_Start # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; ID_Start # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; ID_Start # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; ID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; ID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; ID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; ID_Start # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -6300,7 +6356,8 @@ AB20..AB26 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE C
AB28..AB2E ; ID_Start # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A ; ID_Start # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5C..AB5F ; ID_Start # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; ID_Start # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; ID_Start # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; ID_Start # Lm MODIFIER LETTER SMALL TURNED W
AB70..ABBF ; ID_Start # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2 ; ID_Start # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
AC00..D7A3 ; ID_Start # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
@@ -6394,15 +6451,19 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
10C80..10CB2 ; ID_Start # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
10CC0..10CF2 ; ID_Start # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
10D00..10D23 ; ID_Start # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10E80..10EA9 ; ID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EB0..10EB1 ; ID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; ID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F27 ; ID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
10F30..10F45 ; ID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10FB0..10FC4 ; ID_Start # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
10FE0..10FF6 ; ID_Start # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11003..11037 ; ID_Start # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
11083..110AF ; ID_Start # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
110D0..110E8 ; ID_Start # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
11103..11126 ; ID_Start # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
11144 ; ID_Start # Lo CHAKMA LETTER LHAA
+11147 ; ID_Start # Lo CHAKMA LETTER VAA
11150..11172 ; ID_Start # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11176 ; ID_Start # Lo MAHAJANI LIGATURE SHRI
11183..111B2 ; ID_Start # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
@@ -6428,7 +6489,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
1135D..11361 ; ID_Start # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
11400..11434 ; ID_Start # Lo [53] NEWA LETTER A..NEWA LETTER HA
11447..1144A ; ID_Start # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
-1145F ; ID_Start # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; ID_Start # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; ID_Start # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114C4..114C5 ; ID_Start # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
114C7 ; ID_Start # Lo TIRHUTA OM
@@ -6441,7 +6502,13 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
11700..1171A ; ID_Start # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
11800..1182B ; ID_Start # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
118A0..118DF ; ID_Start # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
-118FF ; ID_Start # Lo WARANG CITI OM
+118FF..11906 ; ID_Start # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; ID_Start # Lo DIVES AKURU LETTER O
+1190C..11913 ; ID_Start # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; ID_Start # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; ID_Start # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+1193F ; ID_Start # Lo DIVES AKURU PREFIXED NASAL SIGN
+11941 ; ID_Start # Lo DIVES AKURU INITIAL RA
119A0..119A7 ; ID_Start # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; ID_Start # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119E1 ; ID_Start # Lo NANDINAGARI SIGN AVAGRAHA
@@ -6466,6 +6533,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
11D6A..11D89 ; ID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
11D98 ; ID_Start # Lo GUNJALA GONDI OM
11EE0..11EF2 ; ID_Start # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11FB0 ; ID_Start # Lo LISU LETTER YHA
12000..12399 ; ID_Start # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E ; ID_Start # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12480..12543 ; ID_Start # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
@@ -6485,7 +6553,8 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
16FE0..16FE1 ; ID_Start # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE3 ; ID_Start # Lm OLD CHINESE ITERATION MARK
17000..187F7 ; ID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; ID_Start # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; ID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; ID_Start # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; ID_Start # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152 ; ID_Start # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167 ; ID_Start # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -6564,14 +6633,15 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
1EEA1..1EEA3 ; ID_Start # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
1EEA5..1EEA9 ; ID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
1EEAB..1EEBB ; ID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
-20000..2A6D6 ; ID_Start # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+20000..2A6DD ; ID_Start # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; ID_Start # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; ID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; ID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; ID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; ID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; ID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-# Total code points: 125884
+# Total code points: 131482
# ================================================
@@ -6677,7 +6747,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
0859..085B ; ID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
0860..086A ; ID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; ID_Continue # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; ID_Continue # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; ID_Continue # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
08D3..08E1 ; ID_Continue # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
08E3..0902 ; ID_Continue # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
0903 ; ID_Continue # Mc DEVANAGARI SIGN VISARGA
@@ -6782,7 +6852,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
0B47..0B48 ; ID_Continue # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4C ; ID_Continue # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
0B4D ; ID_Continue # Mn ORIYA SIGN VIRAMA
-0B56 ; ID_Continue # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; ID_Continue # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57 ; ID_Continue # Mc ORIYA AU LENGTH MARK
0B5C..0B5D ; ID_Continue # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
0B5F..0B61 ; ID_Continue # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
@@ -6851,7 +6921,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
0CF1..0CF2 ; ID_Continue # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
0D00..0D01 ; ID_Continue # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03 ; ID_Continue # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D05..0D0C ; ID_Continue # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; ID_Continue # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; ID_Continue # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; ID_Continue # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3B..0D3C ; ID_Continue # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
@@ -6868,6 +6938,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
0D62..0D63 ; ID_Continue # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
0D66..0D6F ; ID_Continue # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
0D7A..0D7F ; ID_Continue # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D81 ; ID_Continue # Mn SINHALA SIGN CANDRABINDU
0D82..0D83 ; ID_Continue # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0D85..0D96 ; ID_Continue # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
0D9A..0DB1 ; ID_Continue # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
@@ -7057,6 +7128,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
1A90..1A99 ; ID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
1AA7 ; ID_Continue # Lm TAI THAM SIGN MAI YAMOK
1AB0..1ABD ; ID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABF..1AC0 ; ID_Continue # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; ID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04 ; ID_Continue # Mc BALINESE SIGN BISAH
1B05..1B33 ; ID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
@@ -7215,10 +7287,10 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
30FF ; ID_Continue # Lo KATAKANA DIGRAPH KOTO
3105..312F ; ID_Continue # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
3131..318E ; ID_Continue # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-31A0..31BA ; ID_Continue # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; ID_Continue # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31F0..31FF ; ID_Continue # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
-3400..4DB5 ; ID_Continue # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEF ; ID_Continue # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+3400..4DBF ; ID_Continue # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; ID_Continue # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
A000..A014 ; ID_Continue # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; ID_Continue # Lm YI SYLLABLE WU
A016..A48C ; ID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -7248,7 +7320,8 @@ A788 ; ID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
A78B..A78E ; ID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; ID_Continue # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; ID_Continue # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; ID_Continue # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; ID_Continue # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; ID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; ID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; ID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; ID_Continue # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -7262,6 +7335,7 @@ A80C..A822 ; ID_Continue # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETT
A823..A824 ; ID_Continue # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
A825..A826 ; ID_Continue # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827 ; ID_Continue # Mc SYLOTI NAGRI VOWEL SIGN OO
+A82C ; ID_Continue # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A840..A873 ; ID_Continue # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
A880..A881 ; ID_Continue # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
A882..A8B3 ; ID_Continue # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
@@ -7344,7 +7418,8 @@ AB20..AB26 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABL
AB28..AB2E ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A ; ID_Continue # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5C..AB5F ; ID_Continue # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; ID_Continue # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; ID_Continue # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; ID_Continue # Lm MODIFIER LETTER SMALL TURNED W
AB70..ABBF ; ID_Continue # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2 ; ID_Continue # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
ABE3..ABE4 ; ID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
@@ -7465,10 +7540,14 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN
10D00..10D23 ; ID_Continue # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
10D24..10D27 ; ID_Continue # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
10D30..10D39 ; ID_Continue # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+10E80..10EA9 ; ID_Continue # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC ; ID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EB0..10EB1 ; ID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; ID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F27 ; ID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
10F30..10F45 ; ID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
10F46..10F50 ; ID_Continue # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10FB0..10FC4 ; ID_Continue # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
10FE0..10FF6 ; ID_Continue # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11000 ; ID_Continue # Mc BRAHMI SIGN CANDRABINDU
11001 ; ID_Continue # Mn BRAHMI SIGN ANUSVARA
@@ -7493,6 +7572,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN
11136..1113F ; ID_Continue # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
11144 ; ID_Continue # Lo CHAKMA LETTER LHAA
11145..11146 ; ID_Continue # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; ID_Continue # Lo CHAKMA LETTER VAA
11150..11172 ; ID_Continue # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11173 ; ID_Continue # Mn MAHAJANI SIGN NUKTA
11176 ; ID_Continue # Lo MAHAJANI LIGATURE SHRI
@@ -7504,6 +7584,8 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN
111BF..111C0 ; ID_Continue # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
111C1..111C4 ; ID_Continue # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
111C9..111CC ; ID_Continue # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CE ; ID_Continue # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; ID_Continue # Mn SHARADA SIGN INVERTED CANDRABINDU
111D0..111D9 ; ID_Continue # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA ; ID_Continue # Lo SHARADA EKAM
111DC ; ID_Continue # Lo SHARADA HEADSTROKE
@@ -7557,7 +7639,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN
11447..1144A ; ID_Continue # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
11450..11459 ; ID_Continue # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
1145E ; ID_Continue # Mn NEWA SANDHI MARK
-1145F ; ID_Continue # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; ID_Continue # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; ID_Continue # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114B0..114B2 ; ID_Continue # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
114B3..114B8 ; ID_Continue # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
@@ -7612,7 +7694,22 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN
11839..1183A ; ID_Continue # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
118A0..118DF ; ID_Continue # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
118E0..118E9 ; ID_Continue # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
-118FF ; ID_Continue # Lo WARANG CITI OM
+118FF..11906 ; ID_Continue # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; ID_Continue # Lo DIVES AKURU LETTER O
+1190C..11913 ; ID_Continue # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; ID_Continue # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; ID_Continue # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935 ; ID_Continue # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; ID_Continue # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; ID_Continue # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D ; ID_Continue # Mc DIVES AKURU SIGN HALANTA
+1193E ; ID_Continue # Mn DIVES AKURU VIRAMA
+1193F ; ID_Continue # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; ID_Continue # Mc DIVES AKURU MEDIAL YA
+11941 ; ID_Continue # Lo DIVES AKURU INITIAL RA
+11942 ; ID_Continue # Mc DIVES AKURU MEDIAL RA
+11943 ; ID_Continue # Mn DIVES AKURU SIGN NUKTA
+11950..11959 ; ID_Continue # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
119A0..119A7 ; ID_Continue # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; ID_Continue # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119D1..119D3 ; ID_Continue # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
@@ -7682,6 +7779,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN
11EE0..11EF2 ; ID_Continue # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
11EF3..11EF4 ; ID_Continue # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
11EF5..11EF6 ; ID_Continue # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11FB0 ; ID_Continue # Lo LISU LETTER YHA
12000..12399 ; ID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E ; ID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12480..12543 ; ID_Continue # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
@@ -7707,8 +7805,11 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN
16F93..16F9F ; ID_Continue # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
16FE0..16FE1 ; ID_Continue # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE3 ; ID_Continue # Lm OLD CHINESE ITERATION MARK
+16FE4 ; ID_Continue # Mn KHITAN SMALL SCRIPT FILLER
+16FF0..16FF1 ; ID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
17000..187F7 ; ID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; ID_Continue # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; ID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; ID_Continue # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; ID_Continue # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152 ; ID_Continue # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167 ; ID_Continue # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -7814,15 +7915,17 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN
1EEA1..1EEA3 ; ID_Continue # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
1EEA5..1EEA9 ; ID_Continue # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
1EEAB..1EEBB ; ID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
-20000..2A6D6 ; ID_Continue # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+1FBF0..1FBF9 ; ID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+20000..2A6DD ; ID_Continue # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; ID_Continue # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; ID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; ID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; ID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; ID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; ID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 128789
+# Total code points: 134434
# ================================================
@@ -7893,7 +7996,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR
0840..0858 ; XID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
0860..086A ; XID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; XID_Start # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; XID_Start # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; XID_Start # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
0904..0939 ; XID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
093D ; XID_Start # Lo DEVANAGARI SIGN AVAGRAHA
0950 ; XID_Start # Lo DEVANAGARI OM
@@ -7970,7 +8073,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR
0CDE ; XID_Start # Lo KANNADA LETTER FA
0CE0..0CE1 ; XID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
0CF1..0CF2 ; XID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-0D05..0D0C ; XID_Start # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; XID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; XID_Start # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; XID_Start # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; XID_Start # Lo MALAYALAM SIGN AVAGRAHA
@@ -8168,10 +8271,10 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR
30FF ; XID_Start # Lo KATAKANA DIGRAPH KOTO
3105..312F ; XID_Start # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
3131..318E ; XID_Start # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-31A0..31BA ; XID_Start # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; XID_Start # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31F0..31FF ; XID_Start # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
-3400..4DB5 ; XID_Start # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEF ; XID_Start # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+3400..4DBF ; XID_Start # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; XID_Start # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
A000..A014 ; XID_Start # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; XID_Start # Lm YI SYLLABLE WU
A016..A48C ; XID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -8196,7 +8299,8 @@ A788 ; XID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
A78B..A78E ; XID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; XID_Start # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; XID_Start # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; XID_Start # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; XID_Start # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; XID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; XID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; XID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; XID_Start # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -8243,7 +8347,8 @@ AB20..AB26 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE
AB28..AB2E ; XID_Start # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A ; XID_Start # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5C..AB5F ; XID_Start # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; XID_Start # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; XID_Start # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; XID_Start # Lm MODIFIER LETTER SMALL TURNED W
AB70..ABBF ; XID_Start # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2 ; XID_Start # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
AC00..D7A3 ; XID_Start # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
@@ -8342,15 +8447,19 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
10C80..10CB2 ; XID_Start # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
10CC0..10CF2 ; XID_Start # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
10D00..10D23 ; XID_Start # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10E80..10EA9 ; XID_Start # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EB0..10EB1 ; XID_Start # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; XID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F27 ; XID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
10F30..10F45 ; XID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10FB0..10FC4 ; XID_Start # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
10FE0..10FF6 ; XID_Start # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11003..11037 ; XID_Start # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
11083..110AF ; XID_Start # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
110D0..110E8 ; XID_Start # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
11103..11126 ; XID_Start # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
11144 ; XID_Start # Lo CHAKMA LETTER LHAA
+11147 ; XID_Start # Lo CHAKMA LETTER VAA
11150..11172 ; XID_Start # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11176 ; XID_Start # Lo MAHAJANI LIGATURE SHRI
11183..111B2 ; XID_Start # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
@@ -8376,7 +8485,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
1135D..11361 ; XID_Start # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
11400..11434 ; XID_Start # Lo [53] NEWA LETTER A..NEWA LETTER HA
11447..1144A ; XID_Start # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
-1145F ; XID_Start # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; XID_Start # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; XID_Start # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114C4..114C5 ; XID_Start # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
114C7 ; XID_Start # Lo TIRHUTA OM
@@ -8389,7 +8498,13 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
11700..1171A ; XID_Start # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
11800..1182B ; XID_Start # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
118A0..118DF ; XID_Start # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
-118FF ; XID_Start # Lo WARANG CITI OM
+118FF..11906 ; XID_Start # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; XID_Start # Lo DIVES AKURU LETTER O
+1190C..11913 ; XID_Start # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; XID_Start # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; XID_Start # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+1193F ; XID_Start # Lo DIVES AKURU PREFIXED NASAL SIGN
+11941 ; XID_Start # Lo DIVES AKURU INITIAL RA
119A0..119A7 ; XID_Start # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; XID_Start # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119E1 ; XID_Start # Lo NANDINAGARI SIGN AVAGRAHA
@@ -8414,6 +8529,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
11D6A..11D89 ; XID_Start # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
11D98 ; XID_Start # Lo GUNJALA GONDI OM
11EE0..11EF2 ; XID_Start # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11FB0 ; XID_Start # Lo LISU LETTER YHA
12000..12399 ; XID_Start # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E ; XID_Start # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12480..12543 ; XID_Start # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
@@ -8433,7 +8549,8 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
16FE0..16FE1 ; XID_Start # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE3 ; XID_Start # Lm OLD CHINESE ITERATION MARK
17000..187F7 ; XID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; XID_Start # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; XID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; XID_Start # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; XID_Start # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152 ; XID_Start # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167 ; XID_Start # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -8512,14 +8629,15 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
1EEA1..1EEA3 ; XID_Start # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
1EEA5..1EEA9 ; XID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
1EEAB..1EEBB ; XID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
-20000..2A6D6 ; XID_Start # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+20000..2A6DD ; XID_Start # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; XID_Start # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; XID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; XID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; XID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; XID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; XID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-# Total code points: 125861
+# Total code points: 131459
# ================================================
@@ -8621,7 +8739,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
0859..085B ; XID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
0860..086A ; XID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; XID_Continue # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; XID_Continue # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; XID_Continue # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
08D3..08E1 ; XID_Continue # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
08E3..0902 ; XID_Continue # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
0903 ; XID_Continue # Mc DEVANAGARI SIGN VISARGA
@@ -8726,7 +8844,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
0B47..0B48 ; XID_Continue # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4C ; XID_Continue # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
0B4D ; XID_Continue # Mn ORIYA SIGN VIRAMA
-0B56 ; XID_Continue # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; XID_Continue # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57 ; XID_Continue # Mc ORIYA AU LENGTH MARK
0B5C..0B5D ; XID_Continue # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
0B5F..0B61 ; XID_Continue # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
@@ -8795,7 +8913,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
0CF1..0CF2 ; XID_Continue # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
0D00..0D01 ; XID_Continue # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03 ; XID_Continue # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D05..0D0C ; XID_Continue # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; XID_Continue # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; XID_Continue # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; XID_Continue # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3B..0D3C ; XID_Continue # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
@@ -8812,6 +8930,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
0D62..0D63 ; XID_Continue # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
0D66..0D6F ; XID_Continue # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
0D7A..0D7F ; XID_Continue # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D81 ; XID_Continue # Mn SINHALA SIGN CANDRABINDU
0D82..0D83 ; XID_Continue # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0D85..0D96 ; XID_Continue # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
0D9A..0DB1 ; XID_Continue # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
@@ -9001,6 +9120,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
1A90..1A99 ; XID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
1AA7 ; XID_Continue # Lm TAI THAM SIGN MAI YAMOK
1AB0..1ABD ; XID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABF..1AC0 ; XID_Continue # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; XID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04 ; XID_Continue # Mc BALINESE SIGN BISAH
1B05..1B33 ; XID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
@@ -9158,10 +9278,10 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU
30FF ; XID_Continue # Lo KATAKANA DIGRAPH KOTO
3105..312F ; XID_Continue # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
3131..318E ; XID_Continue # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-31A0..31BA ; XID_Continue # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; XID_Continue # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31F0..31FF ; XID_Continue # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
-3400..4DB5 ; XID_Continue # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEF ; XID_Continue # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+3400..4DBF ; XID_Continue # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; XID_Continue # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
A000..A014 ; XID_Continue # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; XID_Continue # Lm YI SYLLABLE WU
A016..A48C ; XID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -9191,7 +9311,8 @@ A788 ; XID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
A78B..A78E ; XID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; XID_Continue # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; XID_Continue # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; XID_Continue # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; XID_Continue # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; XID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; XID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; XID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; XID_Continue # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -9205,6 +9326,7 @@ A80C..A822 ; XID_Continue # Lo [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LET
A823..A824 ; XID_Continue # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
A825..A826 ; XID_Continue # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827 ; XID_Continue # Mc SYLOTI NAGRI VOWEL SIGN OO
+A82C ; XID_Continue # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A840..A873 ; XID_Continue # Lo [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
A880..A881 ; XID_Continue # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
A882..A8B3 ; XID_Continue # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
@@ -9287,7 +9409,8 @@ AB20..AB26 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLAB
AB28..AB2E ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A ; XID_Continue # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5C..AB5F ; XID_Continue # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; XID_Continue # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; XID_Continue # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; XID_Continue # Lm MODIFIER LETTER SMALL TURNED W
AB70..ABBF ; XID_Continue # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2 ; XID_Continue # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
ABE3..ABE4 ; XID_Continue # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
@@ -9414,10 +9537,14 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA
10D00..10D23 ; XID_Continue # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
10D24..10D27 ; XID_Continue # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
10D30..10D39 ; XID_Continue # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
+10E80..10EA9 ; XID_Continue # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC ; XID_Continue # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EB0..10EB1 ; XID_Continue # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; XID_Continue # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F27 ; XID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
10F30..10F45 ; XID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
10F46..10F50 ; XID_Continue # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
+10FB0..10FC4 ; XID_Continue # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
10FE0..10FF6 ; XID_Continue # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11000 ; XID_Continue # Mc BRAHMI SIGN CANDRABINDU
11001 ; XID_Continue # Mn BRAHMI SIGN ANUSVARA
@@ -9442,6 +9569,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA
11136..1113F ; XID_Continue # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
11144 ; XID_Continue # Lo CHAKMA LETTER LHAA
11145..11146 ; XID_Continue # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; XID_Continue # Lo CHAKMA LETTER VAA
11150..11172 ; XID_Continue # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11173 ; XID_Continue # Mn MAHAJANI SIGN NUKTA
11176 ; XID_Continue # Lo MAHAJANI LIGATURE SHRI
@@ -9453,6 +9581,8 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA
111BF..111C0 ; XID_Continue # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
111C1..111C4 ; XID_Continue # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
111C9..111CC ; XID_Continue # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CE ; XID_Continue # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; XID_Continue # Mn SHARADA SIGN INVERTED CANDRABINDU
111D0..111D9 ; XID_Continue # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA ; XID_Continue # Lo SHARADA EKAM
111DC ; XID_Continue # Lo SHARADA HEADSTROKE
@@ -9506,7 +9636,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA
11447..1144A ; XID_Continue # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
11450..11459 ; XID_Continue # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
1145E ; XID_Continue # Mn NEWA SANDHI MARK
-1145F ; XID_Continue # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; XID_Continue # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; XID_Continue # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114B0..114B2 ; XID_Continue # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
114B3..114B8 ; XID_Continue # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
@@ -9561,7 +9691,22 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA
11839..1183A ; XID_Continue # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
118A0..118DF ; XID_Continue # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
118E0..118E9 ; XID_Continue # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
-118FF ; XID_Continue # Lo WARANG CITI OM
+118FF..11906 ; XID_Continue # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; XID_Continue # Lo DIVES AKURU LETTER O
+1190C..11913 ; XID_Continue # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; XID_Continue # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; XID_Continue # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935 ; XID_Continue # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; XID_Continue # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; XID_Continue # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D ; XID_Continue # Mc DIVES AKURU SIGN HALANTA
+1193E ; XID_Continue # Mn DIVES AKURU VIRAMA
+1193F ; XID_Continue # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; XID_Continue # Mc DIVES AKURU MEDIAL YA
+11941 ; XID_Continue # Lo DIVES AKURU INITIAL RA
+11942 ; XID_Continue # Mc DIVES AKURU MEDIAL RA
+11943 ; XID_Continue # Mn DIVES AKURU SIGN NUKTA
+11950..11959 ; XID_Continue # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
119A0..119A7 ; XID_Continue # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; XID_Continue # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119D1..119D3 ; XID_Continue # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
@@ -9631,6 +9776,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA
11EE0..11EF2 ; XID_Continue # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
11EF3..11EF4 ; XID_Continue # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
11EF5..11EF6 ; XID_Continue # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
+11FB0 ; XID_Continue # Lo LISU LETTER YHA
12000..12399 ; XID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E ; XID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12480..12543 ; XID_Continue # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
@@ -9656,8 +9802,11 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA
16F93..16F9F ; XID_Continue # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
16FE0..16FE1 ; XID_Continue # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE3 ; XID_Continue # Lm OLD CHINESE ITERATION MARK
+16FE4 ; XID_Continue # Mn KHITAN SMALL SCRIPT FILLER
+16FF0..16FF1 ; XID_Continue # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
17000..187F7 ; XID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; XID_Continue # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; XID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; XID_Continue # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; XID_Continue # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152 ; XID_Continue # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167 ; XID_Continue # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -9763,15 +9912,17 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA
1EEA1..1EEA3 ; XID_Continue # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
1EEA5..1EEA9 ; XID_Continue # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
1EEAB..1EEBB ; XID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
-20000..2A6D6 ; XID_Continue # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+1FBF0..1FBF9 ; XID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+20000..2A6DD ; XID_Continue # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; XID_Continue # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; XID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; XID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; XID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; XID_Continue # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; XID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 128770
+# Total code points: 134415
# ================================================
@@ -9883,7 +10034,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<rese
0B3F ; Grapheme_Extend # Mn ORIYA VOWEL SIGN I
0B41..0B44 ; Grapheme_Extend # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
0B4D ; Grapheme_Extend # Mn ORIYA SIGN VIRAMA
-0B56 ; Grapheme_Extend # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; Grapheme_Extend # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57 ; Grapheme_Extend # Mc ORIYA AU LENGTH MARK
0B62..0B63 ; Grapheme_Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
0B82 ; Grapheme_Extend # Mn TAMIL SIGN ANUSVARA
@@ -9913,6 +10064,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<rese
0D4D ; Grapheme_Extend # Mn MALAYALAM SIGN VIRAMA
0D57 ; Grapheme_Extend # Mc MALAYALAM AU LENGTH MARK
0D62..0D63 ; Grapheme_Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; Grapheme_Extend # Mn SINHALA SIGN CANDRABINDU
0DCA ; Grapheme_Extend # Mn SINHALA SIGN AL-LAKUNA
0DCF ; Grapheme_Extend # Mc SINHALA VOWEL SIGN AELA-PILLA
0DD2..0DD4 ; Grapheme_Extend # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
@@ -9973,6 +10125,7 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] <reserved-E01F0>..<rese
1A7F ; Grapheme_Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
1AB0..1ABD ; Grapheme_Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE ; Grapheme_Extend # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0 ; Grapheme_Extend # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; Grapheme_Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B34 ; Grapheme_Extend # Mn BALINESE SIGN REREKAN
1B35 ; Grapheme_Extend # Mc BALINESE VOWEL SIGN TEDUNG
@@ -10019,6 +10172,7 @@ A802 ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN DVISVARA
A806 ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN HASANTA
A80B ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN ANUSVARA
A825..A826 ; Grapheme_Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A82C ; Grapheme_Extend # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A8C4..A8C5 ; Grapheme_Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
A8E0..A8F1 ; Grapheme_Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
A8FF ; Grapheme_Extend # Mn DEVANAGARI VOWEL SIGN AY
@@ -10059,6 +10213,7 @@ FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK.
10A3F ; Grapheme_Extend # Mn KHAROSHTHI VIRAMA
10AE5..10AE6 ; Grapheme_Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
10D24..10D27 ; Grapheme_Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; Grapheme_Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
10F46..10F50 ; Grapheme_Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
11001 ; Grapheme_Extend # Mn BRAHMI SIGN ANUSVARA
11038..11046 ; Grapheme_Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
@@ -10072,6 +10227,7 @@ FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK.
11180..11181 ; Grapheme_Extend # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
111B6..111BE ; Grapheme_Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111C9..111CC ; Grapheme_Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CF ; Grapheme_Extend # Mn SHARADA SIGN INVERTED CANDRABINDU
1122F..11231 ; Grapheme_Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11234 ; Grapheme_Extend # Mn KHOJKI SIGN ANUSVARA
11236..11237 ; Grapheme_Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
@@ -10112,6 +10268,10 @@ FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK.
11727..1172B ; Grapheme_Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
1182F..11837 ; Grapheme_Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
11839..1183A ; Grapheme_Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+11930 ; Grapheme_Extend # Mc DIVES AKURU VOWEL SIGN AA
+1193B..1193C ; Grapheme_Extend # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193E ; Grapheme_Extend # Mn DIVES AKURU VIRAMA
+11943 ; Grapheme_Extend # Mn DIVES AKURU SIGN NUKTA
119D4..119D7 ; Grapheme_Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119DA..119DB ; Grapheme_Extend # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
119E0 ; Grapheme_Extend # Mn NANDINAGARI SIGN VIRAMA
@@ -10143,6 +10303,7 @@ FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK.
16B30..16B36 ; Grapheme_Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F4F ; Grapheme_Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR
16F8F..16F92 ; Grapheme_Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16FE4 ; Grapheme_Extend # Mn KHITAN SMALL SCRIPT FILLER
1BC9D..1BC9E ; Grapheme_Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
1D165 ; Grapheme_Extend # Mc MUSICAL SYMBOL COMBINING STEM
1D167..1D169 ; Grapheme_Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
@@ -10169,7 +10330,7 @@ FF9E..FF9F ; Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK.
E0020..E007F ; Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 1965
+# Total code points: 1979
# ================================================
@@ -10329,7 +10490,7 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE
085E ; Grapheme_Base # Po MANDAIC PUNCTUATION
0860..086A ; Grapheme_Base # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; Grapheme_Base # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; Grapheme_Base # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; Grapheme_Base # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
0903 ; Grapheme_Base # Mc DEVANAGARI SIGN VISARGA
0904..0939 ; Grapheme_Base # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
093B ; Grapheme_Base # Mc DEVANAGARI VOWEL SIGN OOE
@@ -10466,7 +10627,7 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE
0CE6..0CEF ; Grapheme_Base # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
0CF1..0CF2 ; Grapheme_Base # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
0D02..0D03 ; Grapheme_Base # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D05..0D0C ; Grapheme_Base # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; Grapheme_Base # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; Grapheme_Base # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; Grapheme_Base # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; Grapheme_Base # Lo MALAYALAM SIGN AVAGRAHA
@@ -10937,7 +11098,7 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE
2B47..2B4C ; Grapheme_Base # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
2B4D..2B73 ; Grapheme_Base # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95 ; Grapheme_Base # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B98..2BFF ; Grapheme_Base # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2B97..2BFF ; Grapheme_Base # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
2C00..2C2E ; Grapheme_Base # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
2C30..2C5E ; Grapheme_Base # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
2C60..2C7B ; Grapheme_Base # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
@@ -11002,6 +11163,8 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE
2E41 ; Grapheme_Base # Po REVERSED COMMA
2E42 ; Grapheme_Base # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
2E43..2E4F ; Grapheme_Base # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2E50..2E51 ; Grapheme_Base # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+2E52 ; Grapheme_Base # Po TIRONIAN SIGN CAPITAL ET
2E80..2E99 ; Grapheme_Base # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
2E9B..2EF3 ; Grapheme_Base # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
2F00..2FD5 ; Grapheme_Base # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
@@ -11058,7 +11221,7 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE
3190..3191 ; Grapheme_Base # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
3192..3195 ; Grapheme_Base # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
3196..319F ; Grapheme_Base # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
-31A0..31BA ; Grapheme_Base # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; Grapheme_Base # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31C0..31E3 ; Grapheme_Base # So [36] CJK STROKE T..CJK STROKE Q
31F0..31FF ; Grapheme_Base # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
3200..321E ; Grapheme_Base # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
@@ -11072,9 +11235,9 @@ E0100..E01EF ; Grapheme_Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELE
328A..32B0 ; Grapheme_Base # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
32B1..32BF ; Grapheme_Base # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
32C0..33FF ; Grapheme_Base # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL
-3400..4DB5 ; Grapheme_Base # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+3400..4DBF ; Grapheme_Base # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
4DC0..4DFF ; Grapheme_Base # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
-4E00..9FEF ; Grapheme_Base # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+4E00..9FFC ; Grapheme_Base # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
A000..A014 ; Grapheme_Base # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; Grapheme_Base # Lm YI SYLLABLE WU
A016..A48C ; Grapheme_Base # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -11109,7 +11272,8 @@ A789..A78A ; Grapheme_Base # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER
A78B..A78E ; Grapheme_Base # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; Grapheme_Base # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; Grapheme_Base # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; Grapheme_Base # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; Grapheme_Base # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; Grapheme_Base # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; Grapheme_Base # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; Grapheme_Base # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; Grapheme_Base # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -11196,7 +11360,9 @@ AB28..AB2E ; Grapheme_Base # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABL
AB30..AB5A ; Grapheme_Base # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5B ; Grapheme_Base # Sk MODIFIER BREVE WITH INVERTED BREVE
AB5C..AB5F ; Grapheme_Base # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; Grapheme_Base # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; Grapheme_Base # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; Grapheme_Base # Lm MODIFIER LETTER SMALL TURNED W
+AB6A..AB6B ; Grapheme_Base # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
AB70..ABBF ; Grapheme_Base # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2 ; Grapheme_Base # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
ABE3..ABE4 ; Grapheme_Base # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
@@ -11340,7 +11506,7 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
10179..10189 ; Grapheme_Base # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
1018A..1018B ; Grapheme_Base # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
1018C..1018E ; Grapheme_Base # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
-10190..1019B ; Grapheme_Base # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+10190..1019C ; Grapheme_Base # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
101A0 ; Grapheme_Base # So GREEK SYMBOL TAU RHO
101D0..101FC ; Grapheme_Base # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
10280..1029C ; Grapheme_Base # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
@@ -11428,12 +11594,17 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
10D00..10D23 ; Grapheme_Base # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
10D30..10D39 ; Grapheme_Base # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
10E60..10E7E ; Grapheme_Base # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+10E80..10EA9 ; Grapheme_Base # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAD ; Grapheme_Base # Pd YEZIDI HYPHENATION MARK
+10EB0..10EB1 ; Grapheme_Base # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; Grapheme_Base # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F1D..10F26 ; Grapheme_Base # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
10F27 ; Grapheme_Base # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
10F30..10F45 ; Grapheme_Base # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
10F51..10F54 ; Grapheme_Base # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
10F55..10F59 ; Grapheme_Base # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10FB0..10FC4 ; Grapheme_Base # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FC5..10FCB ; Grapheme_Base # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
10FE0..10FF6 ; Grapheme_Base # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11000 ; Grapheme_Base # Mc BRAHMI SIGN CANDRABINDU
11002 ; Grapheme_Base # Mc BRAHMI SIGN VISARGA
@@ -11455,6 +11626,7 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
11140..11143 ; Grapheme_Base # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
11144 ; Grapheme_Base # Lo CHAKMA LETTER LHAA
11145..11146 ; Grapheme_Base # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; Grapheme_Base # Lo CHAKMA LETTER VAA
11150..11172 ; Grapheme_Base # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11174..11175 ; Grapheme_Base # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
11176 ; Grapheme_Base # Lo MAHAJANI LIGATURE SHRI
@@ -11465,6 +11637,7 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
111C1..111C4 ; Grapheme_Base # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
111C5..111C8 ; Grapheme_Base # Po [4] SHARADA DANDA..SHARADA SEPARATOR
111CD ; Grapheme_Base # Po SHARADA SUTRA MARK
+111CE ; Grapheme_Base # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
111D0..111D9 ; Grapheme_Base # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA ; Grapheme_Base # Lo SHARADA EKAM
111DB ; Grapheme_Base # Po SHARADA SIGN SIDDHAM
@@ -11508,9 +11681,9 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
11447..1144A ; Grapheme_Base # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
1144B..1144F ; Grapheme_Base # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN
11450..11459 ; Grapheme_Base # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-1145B ; Grapheme_Base # Po NEWA PLACEHOLDER MARK
+1145A..1145B ; Grapheme_Base # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
1145D ; Grapheme_Base # Po NEWA INSERTION SIGN
-1145F ; Grapheme_Base # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; Grapheme_Base # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; Grapheme_Base # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114B1..114B2 ; Grapheme_Base # Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II
114B9 ; Grapheme_Base # Mc TIRHUTA VOWEL SIGN E
@@ -11555,7 +11728,20 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
118A0..118DF ; Grapheme_Base # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
118E0..118E9 ; Grapheme_Base # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
118EA..118F2 ; Grapheme_Base # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
-118FF ; Grapheme_Base # Lo WARANG CITI OM
+118FF..11906 ; Grapheme_Base # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; Grapheme_Base # Lo DIVES AKURU LETTER O
+1190C..11913 ; Grapheme_Base # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; Grapheme_Base # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; Grapheme_Base # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11931..11935 ; Grapheme_Base # Mc [5] DIVES AKURU VOWEL SIGN I..DIVES AKURU VOWEL SIGN E
+11937..11938 ; Grapheme_Base # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193D ; Grapheme_Base # Mc DIVES AKURU SIGN HALANTA
+1193F ; Grapheme_Base # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; Grapheme_Base # Mc DIVES AKURU MEDIAL YA
+11941 ; Grapheme_Base # Lo DIVES AKURU INITIAL RA
+11942 ; Grapheme_Base # Mc DIVES AKURU MEDIAL RA
+11944..11946 ; Grapheme_Base # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+11950..11959 ; Grapheme_Base # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
119A0..119A7 ; Grapheme_Base # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; Grapheme_Base # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119D1..119D3 ; Grapheme_Base # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
@@ -11606,6 +11792,7 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
11EE0..11EF2 ; Grapheme_Base # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
11EF5..11EF6 ; Grapheme_Base # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
11EF7..11EF8 ; Grapheme_Base # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+11FB0 ; Grapheme_Base # Lo LISU LETTER YHA
11FC0..11FD4 ; Grapheme_Base # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
11FD5..11FDC ; Grapheme_Base # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
11FDD..11FE0 ; Grapheme_Base # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
@@ -11643,8 +11830,10 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
16FE0..16FE1 ; Grapheme_Base # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE2 ; Grapheme_Base # Po OLD CHINESE HOOK MARK
16FE3 ; Grapheme_Base # Lm OLD CHINESE ITERATION MARK
+16FF0..16FF1 ; Grapheme_Base # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
17000..187F7 ; Grapheme_Base # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; Grapheme_Base # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; Grapheme_Base # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; Grapheme_Base # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; Grapheme_Base # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152 ; Grapheme_Base # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167 ; Grapheme_Base # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -11779,8 +11968,7 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
1F0C1..1F0CF ; Grapheme_Base # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
1F0D1..1F0F5 ; Grapheme_Base # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
1F100..1F10C ; Grapheme_Base # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
-1F110..1F16C ; Grapheme_Base # So [93] PARENTHESIZED LATIN CAPITAL LETTER A..RAISED MR SIGN
-1F170..1F1AC ; Grapheme_Base # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
+1F10D..1F1AD ; Grapheme_Base # So [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL
1F1E6..1F202 ; Grapheme_Base # So [29] REGIONAL INDICATOR SYMBOL LETTER A..SQUARED KATAKANA SA
1F210..1F23B ; Grapheme_Base # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240..1F248 ; Grapheme_Base # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
@@ -11788,9 +11976,9 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
1F260..1F265 ; Grapheme_Base # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
1F300..1F3FA ; Grapheme_Base # So [251] CYCLONE..AMPHORA
1F3FB..1F3FF ; Grapheme_Base # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
-1F400..1F6D5 ; Grapheme_Base # So [726] RAT..HINDU TEMPLE
+1F400..1F6D7 ; Grapheme_Base # So [728] RAT..ELEVATOR
1F6E0..1F6EC ; Grapheme_Base # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
-1F6F0..1F6FA ; Grapheme_Base # So [11] SATELLITE..AUTO RICKSHAW
+1F6F0..1F6FC ; Grapheme_Base # So [13] SATELLITE..ROLLER SKATE
1F700..1F773 ; Grapheme_Base # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
1F780..1F7D8 ; Grapheme_Base # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
1F7E0..1F7EB ; Grapheme_Base # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
@@ -11799,26 +11987,30 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
1F850..1F859 ; Grapheme_Base # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
1F860..1F887 ; Grapheme_Base # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F890..1F8AD ; Grapheme_Base # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-1F900..1F90B ; Grapheme_Base # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
-1F90D..1F971 ; Grapheme_Base # So [101] WHITE HEART..YAWNING FACE
-1F973..1F976 ; Grapheme_Base # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
-1F97A..1F9A2 ; Grapheme_Base # So [41] FACE WITH PLEADING EYES..SWAN
-1F9A5..1F9AA ; Grapheme_Base # So [6] SLOTH..OYSTER
-1F9AE..1F9CA ; Grapheme_Base # So [29] GUIDE DOG..ICE CUBE
+1F8B0..1F8B1 ; Grapheme_Base # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F900..1F978 ; Grapheme_Base # So [121] CIRCLED CROSS FORMEE WITH FOUR DOTS..DISGUISED FACE
+1F97A..1F9CB ; Grapheme_Base # So [82] FACE WITH PLEADING EYES..BUBBLE TEA
1F9CD..1FA53 ; Grapheme_Base # So [135] STANDING PERSON..BLACK CHESS KNIGHT-BISHOP
1FA60..1FA6D ; Grapheme_Base # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
-1FA70..1FA73 ; Grapheme_Base # So [4] BALLET SHOES..SHORTS
+1FA70..1FA74 ; Grapheme_Base # So [5] BALLET SHOES..THONG SANDAL
1FA78..1FA7A ; Grapheme_Base # So [3] DROP OF BLOOD..STETHOSCOPE
-1FA80..1FA82 ; Grapheme_Base # So [3] YO-YO..PARACHUTE
-1FA90..1FA95 ; Grapheme_Base # So [6] RINGED PLANET..BANJO
-20000..2A6D6 ; Grapheme_Base # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+1FA80..1FA86 ; Grapheme_Base # So [7] YO-YO..NESTING DOLLS
+1FA90..1FAA8 ; Grapheme_Base # So [25] RINGED PLANET..ROCK
+1FAB0..1FAB6 ; Grapheme_Base # So [7] FLY..FEATHER
+1FAC0..1FAC2 ; Grapheme_Base # So [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAD0..1FAD6 ; Grapheme_Base # So [7] BLUEBERRIES..TEAPOT
+1FB00..1FB92 ; Grapheme_Base # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA ; Grapheme_Base # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+1FBF0..1FBF9 ; Grapheme_Base # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+20000..2A6DD ; Grapheme_Base # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; Grapheme_Base # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Grapheme_Base # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; Grapheme_Base # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; Grapheme_Base # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; Grapheme_Base # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; Grapheme_Base # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-# Total code points: 135898
+# Total code points: 141814
# ================================================
@@ -11851,6 +12043,7 @@ FFFC..FFFD ; Grapheme_Base # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEME
1BF2..1BF3 ; Grapheme_Link # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
2D7F ; Grapheme_Link # Mn TIFINAGH CONSONANT JOINER
A806 ; Grapheme_Link # Mn SYLOTI NAGRI SIGN HASANTA
+A82C ; Grapheme_Link # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A8C4 ; Grapheme_Link # Mn SAURASHTRA SIGN VIRAMA
A953 ; Grapheme_Link # Mc REJANG VIRAMA
A9C0 ; Grapheme_Link # Mc JAVANESE PANGKON
@@ -11872,6 +12065,8 @@ ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK
116B6 ; Grapheme_Link # Mc TAKRI SIGN VIRAMA
1172B ; Grapheme_Link # Mn AHOM SIGN KILLER
11839 ; Grapheme_Link # Mn DOGRA SIGN VIRAMA
+1193D ; Grapheme_Link # Mc DIVES AKURU SIGN HALANTA
+1193E ; Grapheme_Link # Mn DIVES AKURU VIRAMA
119E0 ; Grapheme_Link # Mn NANDINAGARI SIGN VIRAMA
11A34 ; Grapheme_Link # Mn ZANABAZAR SQUARE SIGN VIRAMA
11A47 ; Grapheme_Link # Mn ZANABAZAR SQUARE SUBJOINER
@@ -11880,6 +12075,6 @@ ABED ; Grapheme_Link # Mn MEETEI MAYEK APUN IYEK
11D44..11D45 ; Grapheme_Link # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA
11D97 ; Grapheme_Link # Mn GUNJALA GONDI VIRAMA
-# Total code points: 58
+# Total code points: 61
# EOF
diff --git a/gnu/usr.bin/perl/lib/unicore/DNormalizationProps.txt b/gnu/usr.bin/perl/lib/unicore/DNormalizationProps.txt
index b23e5296755..00a25f0e7e8 100644
--- a/gnu/usr.bin/perl/lib/unicore/DNormalizationProps.txt
+++ b/gnu/usr.bin/perl/lib/unicore/DNormalizationProps.txt
@@ -1,5 +1,5 @@
-# DerivedNormalizationProps-12.1.0.txt
-# Date: 2019-04-01, 09:10:23 GMT
+# DerivedNormalizationProps-13.0.0.txt
+# Date: 2019-09-08, 23:31:08 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -986,11 +986,12 @@ FB46..FB4E ; NFD_QC; N # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LET
114BB..114BC ; NFD_QC; N # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
114BE ; NFD_QC; N # Mc TIRHUTA VOWEL SIGN AU
115BA..115BB ; NFD_QC; N # Mc [2] SIDDHAM VOWEL SIGN O..SIDDHAM VOWEL SIGN AU
+11938 ; NFD_QC; N # Mc DIVES AKURU VOWEL SIGN O
1D15E..1D164 ; NFD_QC; N # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
1D1BB..1D1C0 ; NFD_QC; N # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
2F800..2FA1D ; NFD_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 13232
+# Total code points: 13233
# ================================================
@@ -1128,8 +1129,9 @@ FB46..FB4E ; NFC_QC; N # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LET
114BA ; NFC_QC; M # Mn TIRHUTA VOWEL SIGN SHORT E
114BD ; NFC_QC; M # Mc TIRHUTA VOWEL SIGN SHORT O
115AF ; NFC_QC; M # Mc SIDDHAM VOWEL SIGN AA
+11930 ; NFC_QC; M # Mc DIVES AKURU VOWEL SIGN AA
-# Total code points: 110
+# Total code points: 111
# ================================================
@@ -1469,6 +1471,7 @@ A69C..A69D ; NFKD_QC; N # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFI
A770 ; NFKD_QC; N # Lm MODIFIER LETTER US
A7F8..A7F9 ; NFKD_QC; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
AB5C..AB5F ; NFKD_QC; N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; NFKD_QC; N # Lm MODIFIER LETTER SMALL TURNED W
AC00..D7A3 ; NFKD_QC; N # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
F900..FA0D ; NFKD_QC; N # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
FA10 ; NFKD_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA10
@@ -1598,6 +1601,7 @@ FFED..FFEE ; NFKD_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI
114BB..114BC ; NFKD_QC; N # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
114BE ; NFKD_QC; N # Mc TIRHUTA VOWEL SIGN AU
115BA..115BB ; NFKD_QC; N # Mc [2] SIDDHAM VOWEL SIGN O..SIDDHAM VOWEL SIGN AU
+11938 ; NFKD_QC; N # Mc DIVES AKURU VOWEL SIGN O
1D15E..1D164 ; NFKD_QC; N # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
1D1BB..1D1C0 ; NFKD_QC; N # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
1D400..1D454 ; NFKD_QC; N # L& [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
@@ -1683,9 +1687,10 @@ FFED..FFEE ; NFKD_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI
1F210..1F23B ; NFKD_QC; N # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240..1F248 ; NFKD_QC; N # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; NFKD_QC; N # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1FBF0..1FBF9 ; NFKD_QC; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
2F800..2FA1D ; NFKD_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 16896
+# Total code points: 16908
# ================================================
@@ -1880,6 +1885,7 @@ A69C..A69D ; NFKC_QC; N # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFI
A770 ; NFKC_QC; N # Lm MODIFIER LETTER US
A7F8..A7F9 ; NFKC_QC; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
AB5C..AB5F ; NFKC_QC; N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; NFKC_QC; N # Lm MODIFIER LETTER SMALL TURNED W
F900..FA0D ; NFKC_QC; N # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
FA10 ; NFKC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA10
FA12 ; NFKC_QC; N # Lo CJK COMPATIBILITY IDEOGRAPH-FA12
@@ -2085,9 +2091,10 @@ FFED..FFEE ; NFKC_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI
1F210..1F23B ; NFKC_QC; N # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240..1F248 ; NFKC_QC; N # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; NFKC_QC; N # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1FBF0..1FBF9 ; NFKC_QC; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
2F800..2FA1D ; NFKC_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 4796
+# Total code points: 4807
# ================================================
@@ -2135,8 +2142,9 @@ FFED..FFEE ; NFKC_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI
114BA ; NFKC_QC; M # Mn TIRHUTA VOWEL SIGN SHORT E
114BD ; NFKC_QC; M # Mc TIRHUTA VOWEL SIGN SHORT O
115AF ; NFKC_QC; M # Mc SIDDHAM VOWEL SIGN AA
+11930 ; NFKC_QC; M # Mc DIVES AKURU VOWEL SIGN AA
-# Total code points: 110
+# Total code points: 111
# ================================================
@@ -2366,10 +2374,11 @@ FB46..FB4E ; Expands_On_NFD # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBRE
114BB..114BC ; Expands_On_NFD # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
114BE ; Expands_On_NFD # Mc TIRHUTA VOWEL SIGN AU
115BA..115BB ; Expands_On_NFD # Mc [2] SIDDHAM VOWEL SIGN O..SIDDHAM VOWEL SIGN AU
+11938 ; Expands_On_NFD # Mc DIVES AKURU VOWEL SIGN O
1D15E..1D164 ; Expands_On_NFD # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
1D1BB..1D1C0 ; Expands_On_NFD # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
-# Total code points: 12215
+# Total code points: 12216
# ================================================
@@ -2719,6 +2728,7 @@ FFE3 ; Expands_On_NFKD # Sk FULLWIDTH MACRON
114BB..114BC ; Expands_On_NFKD # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
114BE ; Expands_On_NFKD # Mc TIRHUTA VOWEL SIGN AU
115BA..115BB ; Expands_On_NFKD # Mc [2] SIDDHAM VOWEL SIGN O..SIDDHAM VOWEL SIGN AU
+11938 ; Expands_On_NFKD # Mc DIVES AKURU VOWEL SIGN O
1D15E..1D164 ; Expands_On_NFKD # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
1D1BB..1D1C0 ; Expands_On_NFKD # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
1F100..1F10A ; Expands_On_NFKD # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
@@ -2731,7 +2741,7 @@ FFE3 ; Expands_On_NFKD # Sk FULLWIDTH MACRON
1F213 ; Expands_On_NFKD # So SQUARED KATAKANA DE
1F240..1F248 ; Expands_On_NFKD # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
-# Total code points: 13389
+# Total code points: 13390
# ================================================
@@ -5333,12 +5343,16 @@ A7C2 ; NFKC_CF; A7C3 # L& LATIN CAPITAL LETTER ANGLICAN
A7C4 ; NFKC_CF; A794 # L& LATIN CAPITAL LETTER C WITH PALATAL HOOK
A7C5 ; NFKC_CF; 0282 # L& LATIN CAPITAL LETTER S WITH HOOK
A7C6 ; NFKC_CF; 1D8E # L& LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C7 ; NFKC_CF; A7C8 # L& LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; NFKC_CF; A7CA # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7F5 ; NFKC_CF; A7F6 # L& LATIN CAPITAL LETTER REVERSED HALF H
A7F8 ; NFKC_CF; 0127 # Lm MODIFIER LETTER CAPITAL H WITH STROKE
A7F9 ; NFKC_CF; 0153 # Lm MODIFIER LETTER SMALL LIGATURE OE
AB5C ; NFKC_CF; A727 # Lm MODIFIER LETTER SMALL HENG
AB5D ; NFKC_CF; AB37 # Lm MODIFIER LETTER SMALL L WITH INVERTED LAZY S
AB5E ; NFKC_CF; 026B # Lm MODIFIER LETTER SMALL L WITH MIDDLE TILDE
AB5F ; NFKC_CF; AB52 # Lm MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; NFKC_CF; 028D # Lm MODIFIER LETTER SMALL TURNED W
AB70 ; NFKC_CF; 13A0 # L& CHEROKEE SMALL LETTER A
AB71 ; NFKC_CF; 13A1 # L& CHEROKEE SMALL LETTER E
AB72 ; NFKC_CF; 13A2 # L& CHEROKEE SMALL LETTER I
@@ -8262,6 +8276,16 @@ FFF0..FFF8 ; NFKC_CF; # Cn [9] <reserved-FFF0>..<reserved-FF
1F248 ; NFKC_CF; 3014 6557 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250 ; NFKC_CF; 5F97 # So CIRCLED IDEOGRAPH ADVANTAGE
1F251 ; NFKC_CF; 53EF # So CIRCLED IDEOGRAPH ACCEPT
+1FBF0 ; NFKC_CF; 0030 # Nd SEGMENTED DIGIT ZERO
+1FBF1 ; NFKC_CF; 0031 # Nd SEGMENTED DIGIT ONE
+1FBF2 ; NFKC_CF; 0032 # Nd SEGMENTED DIGIT TWO
+1FBF3 ; NFKC_CF; 0033 # Nd SEGMENTED DIGIT THREE
+1FBF4 ; NFKC_CF; 0034 # Nd SEGMENTED DIGIT FOUR
+1FBF5 ; NFKC_CF; 0035 # Nd SEGMENTED DIGIT FIVE
+1FBF6 ; NFKC_CF; 0036 # Nd SEGMENTED DIGIT SIX
+1FBF7 ; NFKC_CF; 0037 # Nd SEGMENTED DIGIT SEVEN
+1FBF8 ; NFKC_CF; 0038 # Nd SEGMENTED DIGIT EIGHT
+1FBF9 ; NFKC_CF; 0039 # Nd SEGMENTED DIGIT NINE
2F800 ; NFKC_CF; 4E3D # Lo CJK COMPATIBILITY IDEOGRAPH-2F800
2F801 ; NFKC_CF; 4E38 # Lo CJK COMPATIBILITY IDEOGRAPH-2F801
2F802 ; NFKC_CF; 4E41 # Lo CJK COMPATIBILITY IDEOGRAPH-2F802
@@ -8802,7 +8826,7 @@ E0080..E00FF ; NFKC_CF; # Cn [128] <reserved-E0080>..<reserved-E
E0100..E01EF ; NFKC_CF; # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
E01F0..E0FFF ; NFKC_CF; # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
-# Total code points: 10315
+# Total code points: 10329
# ================================================
@@ -9567,9 +9591,12 @@ A7BA ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER GLO
A7BC ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL I
A7BE ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL U
A7C2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER ANGLICANA W
-A7C4..A7C6 ; Changes_When_NFKC_Casefolded # L& [3] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C4..A7C7 ; Changes_When_NFKC_Casefolded # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7F5 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER REVERSED HALF H
A7F8..A7F9 ; Changes_When_NFKC_Casefolded # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
AB5C..AB5F ; Changes_When_NFKC_Casefolded # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; Changes_When_NFKC_Casefolded # Lm MODIFIER LETTER SMALL TURNED W
AB70..ABBF ; Changes_When_NFKC_Casefolded # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
F900..FA0D ; Changes_When_NFKC_Casefolded # Lo [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
FA10 ; Changes_When_NFKC_Casefolded # Lo CJK COMPATIBILITY IDEOGRAPH-FA10
@@ -9787,6 +9814,7 @@ FFF0..FFF8 ; Changes_When_NFKC_Casefolded # Cn [9] <reserved-FFF0>..<reserv
1F210..1F23B ; Changes_When_NFKC_Casefolded # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240..1F248 ; Changes_When_NFKC_Casefolded # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; Changes_When_NFKC_Casefolded # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1FBF0..1FBF9 ; Changes_When_NFKC_Casefolded # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
2F800..2FA1D ; Changes_When_NFKC_Casefolded # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
E0000 ; Changes_When_NFKC_Casefolded # Cn <reserved-E0000>
E0001 ; Changes_When_NFKC_Casefolded # Cf LANGUAGE TAG
@@ -9796,6 +9824,6 @@ E0080..E00FF ; Changes_When_NFKC_Casefolded # Cn [128] <reserved-E0080>..<reser
E0100..E01EF ; Changes_When_NFKC_Casefolded # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
E01F0..E0FFF ; Changes_When_NFKC_Casefolded # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
-# Total code points: 10315
+# Total code points: 10329
# EOF
diff --git a/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt b/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt
index 94d55d6654a..b43aec92738 100644
--- a/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt
+++ b/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt
@@ -1,6 +1,6 @@
-# EastAsianWidth-12.1.0.txt
-# Date: 2019-03-31, 22:01:58 GMT [KW, LI]
-# © 2019 Unicode®, Inc.
+# EastAsianWidth-13.0.0.txt
+# Date: 2029-01-21, 18:14:00 GMT [KW, LI]
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -9,7 +9,7 @@
#
# East_Asian_Width Property
#
-# This file is an informative contributory data file in the
+# This file is a normative contributory data file in the
# Unicode Character Database.
#
# The format is two fields separated by a semicolon.
@@ -332,7 +332,7 @@
085E;N # Po MANDAIC PUNCTUATION
0860..086A;N # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4;N # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD;N # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7;N # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
08D3..08E1;N # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
08E2;N # Cf ARABIC DISPUTED END OF AYAH
08E3..08FF;N # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
@@ -450,7 +450,7 @@
0B47..0B48;N # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4C;N # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
0B4D;N # Mn ORIYA SIGN VIRAMA
-0B56;N # Mn ORIYA AI LENGTH MARK
+0B55..0B56;N # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57;N # Mc ORIYA AU LENGTH MARK
0B5C..0B5D;N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
0B5F..0B61;N # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
@@ -529,7 +529,7 @@
0CF1..0CF2;N # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
0D00..0D01;N # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03;N # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D05..0D0C;N # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C;N # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10;N # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A;N # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3B..0D3C;N # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
@@ -550,6 +550,7 @@
0D70..0D78;N # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
0D79;N # So MALAYALAM DATE MARK
0D7A..0D7F;N # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D81;N # Mn SINHALA SIGN CANDRABINDU
0D82..0D83;N # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0D85..0D96;N # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
0D9A..0DB1;N # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
@@ -795,6 +796,7 @@
1AA8..1AAD;N # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
1AB0..1ABD;N # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE;N # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0;N # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03;N # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04;N # Mc BALINESE SIGN BISAH
1B05..1B33;N # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
@@ -1335,7 +1337,7 @@
2B56..2B59;A # So [4] HEAVY OVAL WITH OVAL INSIDE..HEAVY CIRCLED SALTIRE
2B5A..2B73;N # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95;N # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B98..2BFF;N # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2B97..2BFF;N # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
2C00..2C2E;N # Lu [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
2C30..2C5E;N # Ll [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
2C60..2C7B;N # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
@@ -1404,6 +1406,8 @@
2E41;N # Po REVERSED COMMA
2E42;N # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
2E43..2E4F;N # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2E50..2E51;N # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+2E52;N # Po TIRONIAN SIGN CAPITAL ET
2E80..2E99;W # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
2E9B..2EF3;W # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
2F00..2FD5;W # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
@@ -1464,7 +1468,7 @@
3190..3191;W # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
3192..3195;W # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
3196..319F;W # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
-31A0..31BA;W # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF;W # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31C0..31E3;W # So [36] CJK STROKE T..CJK STROKE Q
31F0..31FF;W # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
3200..321E;W # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
@@ -1479,11 +1483,10 @@
32B1..32BF;W # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
32C0..32FF;W # So [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA
3300..33FF;W # So [256] SQUARE APAATO..SQUARE GAL
-3400..4DB5;W # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4DB6..4DBF;W # Cn [10] <reserved-4DB6>..<reserved-4DBF>
+3400..4DBF;W # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
4DC0..4DFF;N # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
-4E00..9FEF;W # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
-9FF0..9FFF;W # Cn [16] <reserved-9FF0>..<reserved-9FFF>
+4E00..9FFC;W # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
+9FFD..9FFF;W # Cn [3] <reserved-9FFD>..<reserved-9FFF>
A000..A014;W # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015;W # Lm YI SYLLABLE WU
A016..A48C;W # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -1523,7 +1526,8 @@ A789..A78A;N # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUAL
A78B..A78E;N # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F;N # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF;N # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6;N # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA;N # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6;N # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7;N # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9;N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA;N # Ll LATIN LETTER SMALL CAPITAL TURNED M
@@ -1539,6 +1543,7 @@ A823..A824;N # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN
A825..A826;N # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827;N # Mc SYLOTI NAGRI VOWEL SIGN OO
A828..A82B;N # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+A82C;N # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A830..A835;N # No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
A836..A837;N # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
A838;N # Sc NORTH INDIC RUPEE MARK
@@ -1639,7 +1644,9 @@ AB28..AB2E;N # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A;N # Ll [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5B;N # Sk MODIFIER BREVE WITH INVERTED BREVE
AB5C..AB5F;N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67;N # Ll [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68;N # Ll [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69;N # Lm MODIFIER LETTER SMALL TURNED W
+AB6A..AB6B;N # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
AB70..ABBF;N # Ll [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2;N # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
ABE3..ABE4;N # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
@@ -1800,7 +1807,7 @@ FFFD;A # So REPLACEMENT CHARACTER
10179..10189;N # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
1018A..1018B;N # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
1018C..1018E;N # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
-10190..1019B;N # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+10190..1019C;N # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
101A0;N # So GREEK SYMBOL TAU RHO
101D0..101FC;N # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
101FD;N # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
@@ -1902,6 +1909,10 @@ FFFD;A # So REPLACEMENT CHARACTER
10D24..10D27;N # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
10D30..10D39;N # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
10E60..10E7E;N # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+10E80..10EA9;N # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC;N # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EAD;N # Pd YEZIDI HYPHENATION MARK
+10EB0..10EB1;N # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C;N # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F1D..10F26;N # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
10F27;N # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
@@ -1909,6 +1920,8 @@ FFFD;A # So REPLACEMENT CHARACTER
10F46..10F50;N # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
10F51..10F54;N # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
10F55..10F59;N # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10FB0..10FC4;N # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FC5..10FCB;N # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
10FE0..10FF6;N # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11000;N # Mc BRAHMI SIGN CANDRABINDU
11001;N # Mn BRAHMI SIGN ANUSVARA
@@ -1941,6 +1954,7 @@ FFFD;A # So REPLACEMENT CHARACTER
11140..11143;N # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
11144;N # Lo CHAKMA LETTER LHAA
11145..11146;N # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147;N # Lo CHAKMA LETTER VAA
11150..11172;N # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11173;N # Mn MAHAJANI SIGN NUKTA
11174..11175;N # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
@@ -1955,6 +1969,8 @@ FFFD;A # So REPLACEMENT CHARACTER
111C5..111C8;N # Po [4] SHARADA DANDA..SHARADA SEPARATOR
111C9..111CC;N # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
111CD;N # Po SHARADA SUTRA MARK
+111CE;N # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF;N # Mn SHARADA SIGN INVERTED CANDRABINDU
111D0..111D9;N # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA;N # Lo SHARADA EKAM
111DB;N # Po SHARADA SIGN SIDDHAM
@@ -2013,10 +2029,10 @@ FFFD;A # So REPLACEMENT CHARACTER
11447..1144A;N # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
1144B..1144F;N # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN
11450..11459;N # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-1145B;N # Po NEWA PLACEHOLDER MARK
+1145A..1145B;N # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
1145D;N # Po NEWA INSERTION SIGN
1145E;N # Mn NEWA SANDHI MARK
-1145F;N # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461;N # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF;N # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114B0..114B2;N # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
114B3..114B8;N # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
@@ -2081,6 +2097,23 @@ FFFD;A # So REPLACEMENT CHARACTER
118E0..118E9;N # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
118EA..118F2;N # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
118FF;N # Lo WARANG CITI OM
+11900..11906;N # Lo [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E
+11909;N # Lo DIVES AKURU LETTER O
+1190C..11913;N # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916;N # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F;N # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935;N # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938;N # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C;N # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D;N # Mc DIVES AKURU SIGN HALANTA
+1193E;N # Mn DIVES AKURU VIRAMA
+1193F;N # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940;N # Mc DIVES AKURU MEDIAL YA
+11941;N # Lo DIVES AKURU INITIAL RA
+11942;N # Mc DIVES AKURU MEDIAL RA
+11943;N # Mn DIVES AKURU SIGN NUKTA
+11944..11946;N # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+11950..11959;N # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
119A0..119A7;N # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0;N # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119D1..119D3;N # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
@@ -2158,6 +2191,7 @@ FFFD;A # So REPLACEMENT CHARACTER
11EF3..11EF4;N # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
11EF5..11EF6;N # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
11EF7..11EF8;N # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+11FB0;N # Lo LISU LETTER YHA
11FC0..11FD4;N # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
11FD5..11FDC;N # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
11FDD..11FE0;N # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
@@ -2200,8 +2234,12 @@ FFFD;A # So REPLACEMENT CHARACTER
16FE0..16FE1;W # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE2;W # Po OLD CHINESE HOOK MARK
16FE3;W # Lm OLD CHINESE ITERATION MARK
+16FE4;W # Mn KHITAN SMALL SCRIPT FILLER
+16FF0..16FF1;W # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
17000..187F7;W # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2;W # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18AFF;W # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768
+18B00..18CD5;W # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08;W # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B0FF;W # Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2
1B100..1B11E;W # Lo [31] HENTAIGANA LETTER RE-3..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152;W # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
@@ -2364,15 +2402,17 @@ FFFD;A # So REPLACEMENT CHARACTER
1F0D1..1F0F5;N # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
1F100..1F10A;A # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
1F10B..1F10C;N # No [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+1F10D..1F10F;N # So [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
1F110..1F12D;A # So [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD
1F12E..1F12F;N # So [2] CIRCLED WZ..COPYLEFT SYMBOL
1F130..1F169;A # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
-1F16A..1F16C;N # So [3] RAISED MC SIGN..RAISED MR SIGN
+1F16A..1F16F;N # So [6] RAISED MC SIGN..CIRCLED HUMAN FIGURE
1F170..1F18D;A # So [30] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED SA
1F18E;W # So NEGATIVE SQUARED AB
1F18F..1F190;A # So [2] NEGATIVE SQUARED WC..SQUARE DJ
1F191..1F19A;W # So [10] SQUARED CL..SQUARED VS
1F19B..1F1AC;A # So [18] SQUARED THREE D..SQUARED VOD
+1F1AD;N # So MASK WORK SYMBOL
1F1E6..1F1FF;N # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
1F200..1F202;W # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
1F210..1F23B;W # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
@@ -2424,11 +2464,11 @@ FFFD;A # So REPLACEMENT CHARACTER
1F6CD..1F6CF;N # So [3] SHOPPING BAGS..BED
1F6D0..1F6D2;W # So [3] PLACE OF WORSHIP..SHOPPING TROLLEY
1F6D3..1F6D4;N # So [2] STUPA..PAGODA
-1F6D5;W # So HINDU TEMPLE
+1F6D5..1F6D7;W # So [3] HINDU TEMPLE..ELEVATOR
1F6E0..1F6EA;N # So [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE
1F6EB..1F6EC;W # So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING
1F6F0..1F6F3;N # So [4] SATELLITE..PASSENGER SHIP
-1F6F4..1F6FA;W # So [7] SCOOTER..AUTO RICKSHAW
+1F6F4..1F6FC;W # So [9] SCOOTER..ROLLER SKATE
1F700..1F773;N # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
1F780..1F7D8;N # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
1F7E0..1F7EB;W # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
@@ -2437,21 +2477,29 @@ FFFD;A # So REPLACEMENT CHARACTER
1F850..1F859;N # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
1F860..1F887;N # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F890..1F8AD;N # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
+1F8B0..1F8B1;N # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
1F900..1F90B;N # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
-1F90D..1F971;W # So [101] WHITE HEART..YAWNING FACE
-1F973..1F976;W # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
-1F97A..1F9A2;W # So [41] FACE WITH PLEADING EYES..SWAN
-1F9A5..1F9AA;W # So [6] SLOTH..OYSTER
-1F9AE..1F9CA;W # So [29] GUIDE DOG..ICE CUBE
+1F90C..1F93A;W # So [47] PINCHED FINGERS..FENCER
+1F93B;N # So MODERN PENTATHLON
+1F93C..1F945;W # So [10] WRESTLERS..GOAL NET
+1F946;N # So RIFLE
+1F947..1F978;W # So [50] FIRST PLACE MEDAL..DISGUISED FACE
+1F97A..1F9CB;W # So [82] FACE WITH PLEADING EYES..BUBBLE TEA
1F9CD..1F9FF;W # So [51] STANDING PERSON..NAZAR AMULET
1FA00..1FA53;N # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
1FA60..1FA6D;N # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
-1FA70..1FA73;W # So [4] BALLET SHOES..SHORTS
+1FA70..1FA74;W # So [5] BALLET SHOES..THONG SANDAL
1FA78..1FA7A;W # So [3] DROP OF BLOOD..STETHOSCOPE
-1FA80..1FA82;W # So [3] YO-YO..PARACHUTE
-1FA90..1FA95;W # So [6] RINGED PLANET..BANJO
-20000..2A6D6;W # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
-2A6D7..2A6FF;W # Cn [41] <reserved-2A6D7>..<reserved-2A6FF>
+1FA80..1FA86;W # So [7] YO-YO..NESTING DOLLS
+1FA90..1FAA8;W # So [25] RINGED PLANET..ROCK
+1FAB0..1FAB6;W # So [7] FLY..FEATHER
+1FAC0..1FAC2;W # So [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAD0..1FAD6;W # So [7] BLUEBERRIES..TEAPOT
+1FB00..1FB92;N # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA;N # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+1FBF0..1FBF9;N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+20000..2A6DD;W # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
+2A6DE..2A6FF;W # Cn [34] <reserved-2A6DE>..<reserved-2A6FF>
2A700..2B734;W # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B735..2B73F;W # Cn [11] <reserved-2B735>..<reserved-2B73F>
2B740..2B81D;W # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
@@ -2463,7 +2511,8 @@ FFFD;A # So REPLACEMENT CHARACTER
2F800..2FA1D;W # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
2FA1E..2FA1F;W # Cn [2] <reserved-2FA1E>..<reserved-2FA1F>
2FA20..2FFFD;W # Cn [1502] <reserved-2FA20>..<reserved-2FFFD>
-30000..3FFFD;W # Cn [65534] <reserved-30000>..<reserved-3FFFD>
+30000..3134A;W # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+3134B..3FFFD;W # Cn [60595] <reserved-3134B>..<reserved-3FFFD>
E0001;N # Cf LANGUAGE TAG
E0020..E007F;N # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF;A # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
diff --git a/gnu/usr.bin/perl/lib/unicore/EmojiData.txt b/gnu/usr.bin/perl/lib/unicore/EmojiData.txt
deleted file mode 100644
index 20506edf5a8..00000000000
--- a/gnu/usr.bin/perl/lib/unicore/EmojiData.txt
+++ /dev/null
@@ -1,770 +0,0 @@
-# EmojiData-12.1.0.txt
-# XXX Note first line changed for mktables
-# Date: 2019-01-15, 12:10:05 GMT
-# © 2019 Unicode®, Inc.
-# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-#
-# Emoji Data for UTS #51
-# Version: 12.0
-#
-# For documentation and usage, see http://www.unicode.org/reports/tr51
-#
-# Format:
-# <codepoint(s)> ; <property> # <comments>
-# Note: there is no guarantee as to the structure of whitespace or comments
-#
-# Characters and sequences are listed in code point order. Users should be shown a more natural order.
-# See the CLDR collation order for Emoji.
-
-
-# ================================================
-
-# All omitted code points have Emoji=No
-# @missing: 0000..10FFFF ; Emoji ; No
-
-0023 ; Emoji # 1.1 [1] (#️) number sign
-002A ; Emoji # 1.1 [1] (*️) asterisk
-0030..0039 ; Emoji # 1.1 [10] (0️..9️) digit zero..digit nine
-00A9 ; Emoji # 1.1 [1] (©️) copyright
-00AE ; Emoji # 1.1 [1] (®️) registered
-203C ; Emoji # 1.1 [1] (‼️) double exclamation mark
-2049 ; Emoji # 3.0 [1] (⁉️) exclamation question mark
-2122 ; Emoji # 1.1 [1] (™️) trade mark
-2139 ; Emoji # 3.0 [1] (ℹ️) information
-2194..2199 ; Emoji # 1.1 [6] (↔️..↙️) left-right arrow..down-left arrow
-21A9..21AA ; Emoji # 1.1 [2] (↩️..↪️) right arrow curving left..left arrow curving right
-231A..231B ; Emoji # 1.1 [2] (⌚..⌛) watch..hourglass done
-2328 ; Emoji # 1.1 [1] (⌨️) keyboard
-23CF ; Emoji # 4.0 [1] (⏏️) eject button
-23E9..23F3 ; Emoji # 6.0 [11] (⏩..⏳) fast-forward button..hourglass not done
-23F8..23FA ; Emoji # 7.0 [3] (⏸️..⏺️) pause button..record button
-24C2 ; Emoji # 1.1 [1] (Ⓜ️) circled M
-25AA..25AB ; Emoji # 1.1 [2] (▪️..▫️) black small square..white small square
-25B6 ; Emoji # 1.1 [1] (▶️) play button
-25C0 ; Emoji # 1.1 [1] (◀️) reverse button
-25FB..25FE ; Emoji # 3.2 [4] (◻️..◾) white medium square..black medium-small square
-2600..2604 ; Emoji # 1.1 [5] (☀️..☄️) sun..comet
-260E ; Emoji # 1.1 [1] (☎️) telephone
-2611 ; Emoji # 1.1 [1] (☑️) check box with check
-2614..2615 ; Emoji # 4.0 [2] (☔..☕) umbrella with rain drops..hot beverage
-2618 ; Emoji # 4.1 [1] (☘️) shamrock
-261D ; Emoji # 1.1 [1] (☝️) index pointing up
-2620 ; Emoji # 1.1 [1] (☠️) skull and crossbones
-2622..2623 ; Emoji # 1.1 [2] (☢️..☣️) radioactive..biohazard
-2626 ; Emoji # 1.1 [1] (☦️) orthodox cross
-262A ; Emoji # 1.1 [1] (☪️) star and crescent
-262E..262F ; Emoji # 1.1 [2] (☮️..☯️) peace symbol..yin yang
-2638..263A ; Emoji # 1.1 [3] (☸️..☺️) wheel of dharma..smiling face
-2640 ; Emoji # 1.1 [1] (♀️) female sign
-2642 ; Emoji # 1.1 [1] (♂️) male sign
-2648..2653 ; Emoji # 1.1 [12] (♈..♓) Aries..Pisces
-265F..2660 ; Emoji # 1.1 [2] (♟️..♠️) chess pawn..spade suit
-2663 ; Emoji # 1.1 [1] (♣️) club suit
-2665..2666 ; Emoji # 1.1 [2] (♥️..♦️) heart suit..diamond suit
-2668 ; Emoji # 1.1 [1] (♨️) hot springs
-267B ; Emoji # 3.2 [1] (♻️) recycling symbol
-267E..267F ; Emoji # 4.1 [2] (♾️..♿) infinity..wheelchair symbol
-2692..2697 ; Emoji # 4.1 [6] (⚒️..⚗️) hammer and pick..alembic
-2699 ; Emoji # 4.1 [1] (⚙️) gear
-269B..269C ; Emoji # 4.1 [2] (⚛️..⚜️) atom symbol..fleur-de-lis
-26A0..26A1 ; Emoji # 4.0 [2] (⚠️..⚡) warning..high voltage
-26AA..26AB ; Emoji # 4.1 [2] (⚪..⚫) white circle..black circle
-26B0..26B1 ; Emoji # 4.1 [2] (⚰️..⚱️) coffin..funeral urn
-26BD..26BE ; Emoji # 5.2 [2] (⚽..⚾) soccer ball..baseball
-26C4..26C5 ; Emoji # 5.2 [2] (⛄..⛅) snowman without snow..sun behind cloud
-26C8 ; Emoji # 5.2 [1] (⛈️) cloud with lightning and rain
-26CE ; Emoji # 6.0 [1] (⛎) Ophiuchus
-26CF ; Emoji # 5.2 [1] (⛏️) pick
-26D1 ; Emoji # 5.2 [1] (⛑️) rescue worker’s helmet
-26D3..26D4 ; Emoji # 5.2 [2] (⛓️..⛔) chains..no entry
-26E9..26EA ; Emoji # 5.2 [2] (⛩️..⛪) shinto shrine..church
-26F0..26F5 ; Emoji # 5.2 [6] (⛰️..⛵) mountain..sailboat
-26F7..26FA ; Emoji # 5.2 [4] (⛷️..⛺) skier..tent
-26FD ; Emoji # 5.2 [1] (⛽) fuel pump
-2702 ; Emoji # 1.1 [1] (✂️) scissors
-2705 ; Emoji # 6.0 [1] (✅) check mark button
-2708..2709 ; Emoji # 1.1 [2] (✈️..✉️) airplane..envelope
-270A..270B ; Emoji # 6.0 [2] (✊..✋) raised fist..raised hand
-270C..270D ; Emoji # 1.1 [2] (✌️..✍️) victory hand..writing hand
-270F ; Emoji # 1.1 [1] (✏️) pencil
-2712 ; Emoji # 1.1 [1] (✒️) black nib
-2714 ; Emoji # 1.1 [1] (✔️) check mark
-2716 ; Emoji # 1.1 [1] (✖️) multiplication sign
-271D ; Emoji # 1.1 [1] (✝️) latin cross
-2721 ; Emoji # 1.1 [1] (✡️) star of David
-2728 ; Emoji # 6.0 [1] (✨) sparkles
-2733..2734 ; Emoji # 1.1 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star
-2744 ; Emoji # 1.1 [1] (❄️) snowflake
-2747 ; Emoji # 1.1 [1] (❇️) sparkle
-274C ; Emoji # 6.0 [1] (❌) cross mark
-274E ; Emoji # 6.0 [1] (❎) cross mark button
-2753..2755 ; Emoji # 6.0 [3] (❓..❕) question mark..white exclamation mark
-2757 ; Emoji # 5.2 [1] (❗) exclamation mark
-2763..2764 ; Emoji # 1.1 [2] (❣️..❤️) heart exclamation..red heart
-2795..2797 ; Emoji # 6.0 [3] (➕..➗) plus sign..division sign
-27A1 ; Emoji # 1.1 [1] (➡️) right arrow
-27B0 ; Emoji # 6.0 [1] (➰) curly loop
-27BF ; Emoji # 6.0 [1] (➿) double curly loop
-2934..2935 ; Emoji # 3.2 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down
-2B05..2B07 ; Emoji # 4.0 [3] (⬅️..⬇️) left arrow..down arrow
-2B1B..2B1C ; Emoji # 5.1 [2] (⬛..⬜) black large square..white large square
-2B50 ; Emoji # 5.1 [1] (⭐) star
-2B55 ; Emoji # 5.2 [1] (⭕) hollow red circle
-3030 ; Emoji # 1.1 [1] (〰️) wavy dash
-303D ; Emoji # 3.2 [1] (〽️) part alternation mark
-3297 ; Emoji # 1.1 [1] (㊗️) Japanese “congratulations” button
-3299 ; Emoji # 1.1 [1] (㊙️) Japanese “secret” button
-1F004 ; Emoji # 5.1 [1] (🀄) mahjong red dragon
-1F0CF ; Emoji # 6.0 [1] (🃏) joker
-1F170..1F171 ; Emoji # 6.0 [2] (🅰️..🅱️) A button (blood type)..B button (blood type)
-1F17E ; Emoji # 6.0 [1] (🅾️) O button (blood type)
-1F17F ; Emoji # 5.2 [1] (🅿️) P button
-1F18E ; Emoji # 6.0 [1] (🆎) AB button (blood type)
-1F191..1F19A ; Emoji # 6.0 [10] (🆑..🆚) CL button..VS button
-1F1E6..1F1FF ; Emoji # 6.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z
-1F201..1F202 ; Emoji # 6.0 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button
-1F21A ; Emoji # 5.2 [1] (🈚) Japanese “free of charge” button
-1F22F ; Emoji # 5.2 [1] (🈯) Japanese “reserved” button
-1F232..1F23A ; Emoji # 6.0 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button
-1F250..1F251 ; Emoji # 6.0 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button
-1F300..1F320 ; Emoji # 6.0 [33] (🌀..🌠) cyclone..shooting star
-1F321 ; Emoji # 7.0 [1] (🌡️) thermometer
-1F324..1F32C ; Emoji # 7.0 [9] (🌤️..🌬️) sun behind small cloud..wind face
-1F32D..1F32F ; Emoji # 8.0 [3] (🌭..🌯) hot dog..burrito
-1F330..1F335 ; Emoji # 6.0 [6] (🌰..🌵) chestnut..cactus
-1F336 ; Emoji # 7.0 [1] (🌶️) hot pepper
-1F337..1F37C ; Emoji # 6.0 [70] (🌷..🍼) tulip..baby bottle
-1F37D ; Emoji # 7.0 [1] (🍽️) fork and knife with plate
-1F37E..1F37F ; Emoji # 8.0 [2] (🍾..🍿) bottle with popping cork..popcorn
-1F380..1F393 ; Emoji # 6.0 [20] (🎀..🎓) ribbon..graduation cap
-1F396..1F397 ; Emoji # 7.0 [2] (🎖️..🎗️) military medal..reminder ribbon
-1F399..1F39B ; Emoji # 7.0 [3] (🎙️..🎛️) studio microphone..control knobs
-1F39E..1F39F ; Emoji # 7.0 [2] (🎞️..🎟️) film frames..admission tickets
-1F3A0..1F3C4 ; Emoji # 6.0 [37] (🎠..🏄) carousel horse..person surfing
-1F3C5 ; Emoji # 7.0 [1] (🏅) sports medal
-1F3C6..1F3CA ; Emoji # 6.0 [5] (🏆..🏊) trophy..person swimming
-1F3CB..1F3CE ; Emoji # 7.0 [4] (🏋️..🏎️) person lifting weights..racing car
-1F3CF..1F3D3 ; Emoji # 8.0 [5] (🏏..🏓) cricket game..ping pong
-1F3D4..1F3DF ; Emoji # 7.0 [12] (🏔️..🏟️) snow-capped mountain..stadium
-1F3E0..1F3F0 ; Emoji # 6.0 [17] (🏠..🏰) house..castle
-1F3F3..1F3F5 ; Emoji # 7.0 [3] (🏳️..🏵️) white flag..rosette
-1F3F7 ; Emoji # 7.0 [1] (🏷️) label
-1F3F8..1F3FF ; Emoji # 8.0 [8] (🏸..🏿) badminton..dark skin tone
-1F400..1F43E ; Emoji # 6.0 [63] (🐀..🐾) rat..paw prints
-1F43F ; Emoji # 7.0 [1] (🐿️) chipmunk
-1F440 ; Emoji # 6.0 [1] (👀) eyes
-1F441 ; Emoji # 7.0 [1] (👁️) eye
-1F442..1F4F7 ; Emoji # 6.0[182] (👂..📷) ear..camera
-1F4F8 ; Emoji # 7.0 [1] (📸) camera with flash
-1F4F9..1F4FC ; Emoji # 6.0 [4] (📹..📼) video camera..videocassette
-1F4FD ; Emoji # 7.0 [1] (📽️) film projector
-1F4FF ; Emoji # 8.0 [1] (📿) prayer beads
-1F500..1F53D ; Emoji # 6.0 [62] (🔀..🔽) shuffle tracks button..downwards button
-1F549..1F54A ; Emoji # 7.0 [2] (🕉️..🕊️) om..dove
-1F54B..1F54E ; Emoji # 8.0 [4] (🕋..🕎) kaaba..menorah
-1F550..1F567 ; Emoji # 6.0 [24] (🕐..🕧) one o’clock..twelve-thirty
-1F56F..1F570 ; Emoji # 7.0 [2] (🕯️..🕰️) candle..mantelpiece clock
-1F573..1F579 ; Emoji # 7.0 [7] (🕳️..🕹️) hole..joystick
-1F57A ; Emoji # 9.0 [1] (🕺) man dancing
-1F587 ; Emoji # 7.0 [1] (🖇️) linked paperclips
-1F58A..1F58D ; Emoji # 7.0 [4] (🖊️..🖍️) pen..crayon
-1F590 ; Emoji # 7.0 [1] (🖐️) hand with fingers splayed
-1F595..1F596 ; Emoji # 7.0 [2] (🖕..🖖) middle finger..vulcan salute
-1F5A4 ; Emoji # 9.0 [1] (🖤) black heart
-1F5A5 ; Emoji # 7.0 [1] (🖥️) desktop computer
-1F5A8 ; Emoji # 7.0 [1] (🖨️) printer
-1F5B1..1F5B2 ; Emoji # 7.0 [2] (🖱️..🖲️) computer mouse..trackball
-1F5BC ; Emoji # 7.0 [1] (🖼️) framed picture
-1F5C2..1F5C4 ; Emoji # 7.0 [3] (🗂️..🗄️) card index dividers..file cabinet
-1F5D1..1F5D3 ; Emoji # 7.0 [3] (🗑️..🗓️) wastebasket..spiral calendar
-1F5DC..1F5DE ; Emoji # 7.0 [3] (🗜️..🗞️) clamp..rolled-up newspaper
-1F5E1 ; Emoji # 7.0 [1] (🗡️) dagger
-1F5E3 ; Emoji # 7.0 [1] (🗣️) speaking head
-1F5E8 ; Emoji # 7.0 [1] (🗨️) left speech bubble
-1F5EF ; Emoji # 7.0 [1] (🗯️) right anger bubble
-1F5F3 ; Emoji # 7.0 [1] (🗳️) ballot box with ballot
-1F5FA ; Emoji # 7.0 [1] (🗺️) world map
-1F5FB..1F5FF ; Emoji # 6.0 [5] (🗻..🗿) mount fuji..moai
-1F600 ; Emoji # 6.1 [1] (😀) grinning face
-1F601..1F610 ; Emoji # 6.0 [16] (😁..😐) beaming face with smiling eyes..neutral face
-1F611 ; Emoji # 6.1 [1] (😑) expressionless face
-1F612..1F614 ; Emoji # 6.0 [3] (😒..😔) unamused face..pensive face
-1F615 ; Emoji # 6.1 [1] (😕) confused face
-1F616 ; Emoji # 6.0 [1] (😖) confounded face
-1F617 ; Emoji # 6.1 [1] (😗) kissing face
-1F618 ; Emoji # 6.0 [1] (😘) face blowing a kiss
-1F619 ; Emoji # 6.1 [1] (😙) kissing face with smiling eyes
-1F61A ; Emoji # 6.0 [1] (😚) kissing face with closed eyes
-1F61B ; Emoji # 6.1 [1] (😛) face with tongue
-1F61C..1F61E ; Emoji # 6.0 [3] (😜..😞) winking face with tongue..disappointed face
-1F61F ; Emoji # 6.1 [1] (😟) worried face
-1F620..1F625 ; Emoji # 6.0 [6] (😠..😥) angry face..sad but relieved face
-1F626..1F627 ; Emoji # 6.1 [2] (😦..😧) frowning face with open mouth..anguished face
-1F628..1F62B ; Emoji # 6.0 [4] (😨..😫) fearful face..tired face
-1F62C ; Emoji # 6.1 [1] (😬) grimacing face
-1F62D ; Emoji # 6.0 [1] (😭) loudly crying face
-1F62E..1F62F ; Emoji # 6.1 [2] (😮..😯) face with open mouth..hushed face
-1F630..1F633 ; Emoji # 6.0 [4] (😰..😳) anxious face with sweat..flushed face
-1F634 ; Emoji # 6.1 [1] (😴) sleeping face
-1F635..1F640 ; Emoji # 6.0 [12] (😵..🙀) dizzy face..weary cat
-1F641..1F642 ; Emoji # 7.0 [2] (🙁..🙂) slightly frowning face..slightly smiling face
-1F643..1F644 ; Emoji # 8.0 [2] (🙃..🙄) upside-down face..face with rolling eyes
-1F645..1F64F ; Emoji # 6.0 [11] (🙅..🙏) person gesturing NO..folded hands
-1F680..1F6C5 ; Emoji # 6.0 [70] (🚀..🛅) rocket..left luggage
-1F6CB..1F6CF ; Emoji # 7.0 [5] (🛋️..🛏️) couch and lamp..bed
-1F6D0 ; Emoji # 8.0 [1] (🛐) place of worship
-1F6D1..1F6D2 ; Emoji # 9.0 [2] (🛑..🛒) stop sign..shopping cart
-1F6D5 ; Emoji # 12.0 [1] (🛕) hindu temple
-1F6E0..1F6E5 ; Emoji # 7.0 [6] (🛠️..🛥️) hammer and wrench..motor boat
-1F6E9 ; Emoji # 7.0 [1] (🛩️) small airplane
-1F6EB..1F6EC ; Emoji # 7.0 [2] (🛫..🛬) airplane departure..airplane arrival
-1F6F0 ; Emoji # 7.0 [1] (🛰️) satellite
-1F6F3 ; Emoji # 7.0 [1] (🛳️) passenger ship
-1F6F4..1F6F6 ; Emoji # 9.0 [3] (🛴..🛶) kick scooter..canoe
-1F6F7..1F6F8 ; Emoji # 10.0 [2] (🛷..🛸) sled..flying saucer
-1F6F9 ; Emoji # 11.0 [1] (🛹) skateboard
-1F6FA ; Emoji # 12.0 [1] (🛺) auto rickshaw
-1F7E0..1F7EB ; Emoji # 12.0 [12] (🟠..🟫) orange circle..brown square
-1F90D..1F90F ; Emoji # 12.0 [3] (🤍..🤏) white heart..pinching hand
-1F910..1F918 ; Emoji # 8.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns
-1F919..1F91E ; Emoji # 9.0 [6] (🤙..🤞) call me hand..crossed fingers
-1F91F ; Emoji # 10.0 [1] (🤟) love-you gesture
-1F920..1F927 ; Emoji # 9.0 [8] (🤠..🤧) cowboy hat face..sneezing face
-1F928..1F92F ; Emoji # 10.0 [8] (🤨..🤯) face with raised eyebrow..exploding head
-1F930 ; Emoji # 9.0 [1] (🤰) pregnant woman
-1F931..1F932 ; Emoji # 10.0 [2] (🤱..🤲) breast-feeding..palms up together
-1F933..1F93A ; Emoji # 9.0 [8] (🤳..🤺) selfie..person fencing
-1F93C..1F93E ; Emoji # 9.0 [3] (🤼..🤾) people wrestling..person playing handball
-1F93F ; Emoji # 12.0 [1] (🤿) diving mask
-1F940..1F945 ; Emoji # 9.0 [6] (🥀..🥅) wilted flower..goal net
-1F947..1F94B ; Emoji # 9.0 [5] (🥇..🥋) 1st place medal..martial arts uniform
-1F94C ; Emoji # 10.0 [1] (🥌) curling stone
-1F94D..1F94F ; Emoji # 11.0 [3] (🥍..🥏) lacrosse..flying disc
-1F950..1F95E ; Emoji # 9.0 [15] (🥐..🥞) croissant..pancakes
-1F95F..1F96B ; Emoji # 10.0 [13] (🥟..🥫) dumpling..canned food
-1F96C..1F970 ; Emoji # 11.0 [5] (🥬..🥰) leafy green..smiling face with hearts
-1F971 ; Emoji # 12.0 [1] (🥱) yawning face
-1F973..1F976 ; Emoji # 11.0 [4] (🥳..🥶) partying face..cold face
-1F97A ; Emoji # 11.0 [1] (🥺) pleading face
-1F97B ; Emoji # 12.0 [1] (🥻) sari
-1F97C..1F97F ; Emoji # 11.0 [4] (🥼..🥿) lab coat..flat shoe
-1F980..1F984 ; Emoji # 8.0 [5] (🦀..🦄) crab..unicorn
-1F985..1F991 ; Emoji # 9.0 [13] (🦅..🦑) eagle..squid
-1F992..1F997 ; Emoji # 10.0 [6] (🦒..🦗) giraffe..cricket
-1F998..1F9A2 ; Emoji # 11.0 [11] (🦘..🦢) kangaroo..swan
-1F9A5..1F9AA ; Emoji # 12.0 [6] (🦥..🦪) sloth..oyster
-1F9AE..1F9AF ; Emoji # 12.0 [2] (🦮..🦯) guide dog..probing cane
-1F9B0..1F9B9 ; Emoji # 11.0 [10] (🦰..🦹) red hair..supervillain
-1F9BA..1F9BF ; Emoji # 12.0 [6] (🦺..🦿) safety vest..mechanical leg
-1F9C0 ; Emoji # 8.0 [1] (🧀) cheese wedge
-1F9C1..1F9C2 ; Emoji # 11.0 [2] (🧁..🧂) cupcake..salt
-1F9C3..1F9CA ; Emoji # 12.0 [8] (🧃..🧊) beverage box..ice cube
-1F9CD..1F9CF ; Emoji # 12.0 [3] (🧍..🧏) person standing..deaf person
-1F9D0..1F9E6 ; Emoji # 10.0 [23] (🧐..🧦) face with monocle..socks
-1F9E7..1F9FF ; Emoji # 11.0 [25] (🧧..🧿) red envelope..nazar amulet
-1FA70..1FA73 ; Emoji # 12.0 [4] (🩰..🩳) ballet shoes..shorts
-1FA78..1FA7A ; Emoji # 12.0 [3] (🩸..🩺) drop of blood..stethoscope
-1FA80..1FA82 ; Emoji # 12.0 [3] (🪀..🪂) yo-yo..parachute
-1FA90..1FA95 ; Emoji # 12.0 [6] (🪐..🪕) ringed planet..banjo
-
-# Total elements: 1311
-
-# ================================================
-
-# All omitted code points have Emoji_Presentation=No
-# @missing: 0000..10FFFF ; Emoji_Presentation ; No
-
-231A..231B ; Emoji_Presentation # 1.1 [2] (⌚..⌛) watch..hourglass done
-23E9..23EC ; Emoji_Presentation # 6.0 [4] (⏩..⏬) fast-forward button..fast down button
-23F0 ; Emoji_Presentation # 6.0 [1] (⏰) alarm clock
-23F3 ; Emoji_Presentation # 6.0 [1] (⏳) hourglass not done
-25FD..25FE ; Emoji_Presentation # 3.2 [2] (◽..◾) white medium-small square..black medium-small square
-2614..2615 ; Emoji_Presentation # 4.0 [2] (☔..☕) umbrella with rain drops..hot beverage
-2648..2653 ; Emoji_Presentation # 1.1 [12] (♈..♓) Aries..Pisces
-267F ; Emoji_Presentation # 4.1 [1] (♿) wheelchair symbol
-2693 ; Emoji_Presentation # 4.1 [1] (⚓) anchor
-26A1 ; Emoji_Presentation # 4.0 [1] (⚡) high voltage
-26AA..26AB ; Emoji_Presentation # 4.1 [2] (⚪..⚫) white circle..black circle
-26BD..26BE ; Emoji_Presentation # 5.2 [2] (⚽..⚾) soccer ball..baseball
-26C4..26C5 ; Emoji_Presentation # 5.2 [2] (⛄..⛅) snowman without snow..sun behind cloud
-26CE ; Emoji_Presentation # 6.0 [1] (⛎) Ophiuchus
-26D4 ; Emoji_Presentation # 5.2 [1] (⛔) no entry
-26EA ; Emoji_Presentation # 5.2 [1] (⛪) church
-26F2..26F3 ; Emoji_Presentation # 5.2 [2] (⛲..⛳) fountain..flag in hole
-26F5 ; Emoji_Presentation # 5.2 [1] (⛵) sailboat
-26FA ; Emoji_Presentation # 5.2 [1] (⛺) tent
-26FD ; Emoji_Presentation # 5.2 [1] (⛽) fuel pump
-2705 ; Emoji_Presentation # 6.0 [1] (✅) check mark button
-270A..270B ; Emoji_Presentation # 6.0 [2] (✊..✋) raised fist..raised hand
-2728 ; Emoji_Presentation # 6.0 [1] (✨) sparkles
-274C ; Emoji_Presentation # 6.0 [1] (❌) cross mark
-274E ; Emoji_Presentation # 6.0 [1] (❎) cross mark button
-2753..2755 ; Emoji_Presentation # 6.0 [3] (❓..❕) question mark..white exclamation mark
-2757 ; Emoji_Presentation # 5.2 [1] (❗) exclamation mark
-2795..2797 ; Emoji_Presentation # 6.0 [3] (➕..➗) plus sign..division sign
-27B0 ; Emoji_Presentation # 6.0 [1] (➰) curly loop
-27BF ; Emoji_Presentation # 6.0 [1] (➿) double curly loop
-2B1B..2B1C ; Emoji_Presentation # 5.1 [2] (⬛..⬜) black large square..white large square
-2B50 ; Emoji_Presentation # 5.1 [1] (⭐) star
-2B55 ; Emoji_Presentation # 5.2 [1] (⭕) hollow red circle
-1F004 ; Emoji_Presentation # 5.1 [1] (🀄) mahjong red dragon
-1F0CF ; Emoji_Presentation # 6.0 [1] (🃏) joker
-1F18E ; Emoji_Presentation # 6.0 [1] (🆎) AB button (blood type)
-1F191..1F19A ; Emoji_Presentation # 6.0 [10] (🆑..🆚) CL button..VS button
-1F1E6..1F1FF ; Emoji_Presentation # 6.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z
-1F201 ; Emoji_Presentation # 6.0 [1] (🈁) Japanese “here” button
-1F21A ; Emoji_Presentation # 5.2 [1] (🈚) Japanese “free of charge” button
-1F22F ; Emoji_Presentation # 5.2 [1] (🈯) Japanese “reserved” button
-1F232..1F236 ; Emoji_Presentation # 6.0 [5] (🈲..🈶) Japanese “prohibited” button..Japanese “not free of charge” button
-1F238..1F23A ; Emoji_Presentation # 6.0 [3] (🈸..🈺) Japanese “application” button..Japanese “open for business” button
-1F250..1F251 ; Emoji_Presentation # 6.0 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button
-1F300..1F320 ; Emoji_Presentation # 6.0 [33] (🌀..🌠) cyclone..shooting star
-1F32D..1F32F ; Emoji_Presentation # 8.0 [3] (🌭..🌯) hot dog..burrito
-1F330..1F335 ; Emoji_Presentation # 6.0 [6] (🌰..🌵) chestnut..cactus
-1F337..1F37C ; Emoji_Presentation # 6.0 [70] (🌷..🍼) tulip..baby bottle
-1F37E..1F37F ; Emoji_Presentation # 8.0 [2] (🍾..🍿) bottle with popping cork..popcorn
-1F380..1F393 ; Emoji_Presentation # 6.0 [20] (🎀..🎓) ribbon..graduation cap
-1F3A0..1F3C4 ; Emoji_Presentation # 6.0 [37] (🎠..🏄) carousel horse..person surfing
-1F3C5 ; Emoji_Presentation # 7.0 [1] (🏅) sports medal
-1F3C6..1F3CA ; Emoji_Presentation # 6.0 [5] (🏆..🏊) trophy..person swimming
-1F3CF..1F3D3 ; Emoji_Presentation # 8.0 [5] (🏏..🏓) cricket game..ping pong
-1F3E0..1F3F0 ; Emoji_Presentation # 6.0 [17] (🏠..🏰) house..castle
-1F3F4 ; Emoji_Presentation # 7.0 [1] (🏴) black flag
-1F3F8..1F3FF ; Emoji_Presentation # 8.0 [8] (🏸..🏿) badminton..dark skin tone
-1F400..1F43E ; Emoji_Presentation # 6.0 [63] (🐀..🐾) rat..paw prints
-1F440 ; Emoji_Presentation # 6.0 [1] (👀) eyes
-1F442..1F4F7 ; Emoji_Presentation # 6.0[182] (👂..📷) ear..camera
-1F4F8 ; Emoji_Presentation # 7.0 [1] (📸) camera with flash
-1F4F9..1F4FC ; Emoji_Presentation # 6.0 [4] (📹..📼) video camera..videocassette
-1F4FF ; Emoji_Presentation # 8.0 [1] (📿) prayer beads
-1F500..1F53D ; Emoji_Presentation # 6.0 [62] (🔀..🔽) shuffle tracks button..downwards button
-1F54B..1F54E ; Emoji_Presentation # 8.0 [4] (🕋..🕎) kaaba..menorah
-1F550..1F567 ; Emoji_Presentation # 6.0 [24] (🕐..🕧) one o’clock..twelve-thirty
-1F57A ; Emoji_Presentation # 9.0 [1] (🕺) man dancing
-1F595..1F596 ; Emoji_Presentation # 7.0 [2] (🖕..🖖) middle finger..vulcan salute
-1F5A4 ; Emoji_Presentation # 9.0 [1] (🖤) black heart
-1F5FB..1F5FF ; Emoji_Presentation # 6.0 [5] (🗻..🗿) mount fuji..moai
-1F600 ; Emoji_Presentation # 6.1 [1] (😀) grinning face
-1F601..1F610 ; Emoji_Presentation # 6.0 [16] (😁..😐) beaming face with smiling eyes..neutral face
-1F611 ; Emoji_Presentation # 6.1 [1] (😑) expressionless face
-1F612..1F614 ; Emoji_Presentation # 6.0 [3] (😒..😔) unamused face..pensive face
-1F615 ; Emoji_Presentation # 6.1 [1] (😕) confused face
-1F616 ; Emoji_Presentation # 6.0 [1] (😖) confounded face
-1F617 ; Emoji_Presentation # 6.1 [1] (😗) kissing face
-1F618 ; Emoji_Presentation # 6.0 [1] (😘) face blowing a kiss
-1F619 ; Emoji_Presentation # 6.1 [1] (😙) kissing face with smiling eyes
-1F61A ; Emoji_Presentation # 6.0 [1] (😚) kissing face with closed eyes
-1F61B ; Emoji_Presentation # 6.1 [1] (😛) face with tongue
-1F61C..1F61E ; Emoji_Presentation # 6.0 [3] (😜..😞) winking face with tongue..disappointed face
-1F61F ; Emoji_Presentation # 6.1 [1] (😟) worried face
-1F620..1F625 ; Emoji_Presentation # 6.0 [6] (😠..😥) angry face..sad but relieved face
-1F626..1F627 ; Emoji_Presentation # 6.1 [2] (😦..😧) frowning face with open mouth..anguished face
-1F628..1F62B ; Emoji_Presentation # 6.0 [4] (😨..😫) fearful face..tired face
-1F62C ; Emoji_Presentation # 6.1 [1] (😬) grimacing face
-1F62D ; Emoji_Presentation # 6.0 [1] (😭) loudly crying face
-1F62E..1F62F ; Emoji_Presentation # 6.1 [2] (😮..😯) face with open mouth..hushed face
-1F630..1F633 ; Emoji_Presentation # 6.0 [4] (😰..😳) anxious face with sweat..flushed face
-1F634 ; Emoji_Presentation # 6.1 [1] (😴) sleeping face
-1F635..1F640 ; Emoji_Presentation # 6.0 [12] (😵..🙀) dizzy face..weary cat
-1F641..1F642 ; Emoji_Presentation # 7.0 [2] (🙁..🙂) slightly frowning face..slightly smiling face
-1F643..1F644 ; Emoji_Presentation # 8.0 [2] (🙃..🙄) upside-down face..face with rolling eyes
-1F645..1F64F ; Emoji_Presentation # 6.0 [11] (🙅..🙏) person gesturing NO..folded hands
-1F680..1F6C5 ; Emoji_Presentation # 6.0 [70] (🚀..🛅) rocket..left luggage
-1F6CC ; Emoji_Presentation # 7.0 [1] (🛌) person in bed
-1F6D0 ; Emoji_Presentation # 8.0 [1] (🛐) place of worship
-1F6D1..1F6D2 ; Emoji_Presentation # 9.0 [2] (🛑..🛒) stop sign..shopping cart
-1F6D5 ; Emoji_Presentation # 12.0 [1] (🛕) hindu temple
-1F6EB..1F6EC ; Emoji_Presentation # 7.0 [2] (🛫..🛬) airplane departure..airplane arrival
-1F6F4..1F6F6 ; Emoji_Presentation # 9.0 [3] (🛴..🛶) kick scooter..canoe
-1F6F7..1F6F8 ; Emoji_Presentation # 10.0 [2] (🛷..🛸) sled..flying saucer
-1F6F9 ; Emoji_Presentation # 11.0 [1] (🛹) skateboard
-1F6FA ; Emoji_Presentation # 12.0 [1] (🛺) auto rickshaw
-1F7E0..1F7EB ; Emoji_Presentation # 12.0 [12] (🟠..🟫) orange circle..brown square
-1F90D..1F90F ; Emoji_Presentation # 12.0 [3] (🤍..🤏) white heart..pinching hand
-1F910..1F918 ; Emoji_Presentation # 8.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns
-1F919..1F91E ; Emoji_Presentation # 9.0 [6] (🤙..🤞) call me hand..crossed fingers
-1F91F ; Emoji_Presentation # 10.0 [1] (🤟) love-you gesture
-1F920..1F927 ; Emoji_Presentation # 9.0 [8] (🤠..🤧) cowboy hat face..sneezing face
-1F928..1F92F ; Emoji_Presentation # 10.0 [8] (🤨..🤯) face with raised eyebrow..exploding head
-1F930 ; Emoji_Presentation # 9.0 [1] (🤰) pregnant woman
-1F931..1F932 ; Emoji_Presentation # 10.0 [2] (🤱..🤲) breast-feeding..palms up together
-1F933..1F93A ; Emoji_Presentation # 9.0 [8] (🤳..🤺) selfie..person fencing
-1F93C..1F93E ; Emoji_Presentation # 9.0 [3] (🤼..🤾) people wrestling..person playing handball
-1F93F ; Emoji_Presentation # 12.0 [1] (🤿) diving mask
-1F940..1F945 ; Emoji_Presentation # 9.0 [6] (🥀..🥅) wilted flower..goal net
-1F947..1F94B ; Emoji_Presentation # 9.0 [5] (🥇..🥋) 1st place medal..martial arts uniform
-1F94C ; Emoji_Presentation # 10.0 [1] (🥌) curling stone
-1F94D..1F94F ; Emoji_Presentation # 11.0 [3] (🥍..🥏) lacrosse..flying disc
-1F950..1F95E ; Emoji_Presentation # 9.0 [15] (🥐..🥞) croissant..pancakes
-1F95F..1F96B ; Emoji_Presentation # 10.0 [13] (🥟..🥫) dumpling..canned food
-1F96C..1F970 ; Emoji_Presentation # 11.0 [5] (🥬..🥰) leafy green..smiling face with hearts
-1F971 ; Emoji_Presentation # 12.0 [1] (🥱) yawning face
-1F973..1F976 ; Emoji_Presentation # 11.0 [4] (🥳..🥶) partying face..cold face
-1F97A ; Emoji_Presentation # 11.0 [1] (🥺) pleading face
-1F97B ; Emoji_Presentation # 12.0 [1] (🥻) sari
-1F97C..1F97F ; Emoji_Presentation # 11.0 [4] (🥼..🥿) lab coat..flat shoe
-1F980..1F984 ; Emoji_Presentation # 8.0 [5] (🦀..🦄) crab..unicorn
-1F985..1F991 ; Emoji_Presentation # 9.0 [13] (🦅..🦑) eagle..squid
-1F992..1F997 ; Emoji_Presentation # 10.0 [6] (🦒..🦗) giraffe..cricket
-1F998..1F9A2 ; Emoji_Presentation # 11.0 [11] (🦘..🦢) kangaroo..swan
-1F9A5..1F9AA ; Emoji_Presentation # 12.0 [6] (🦥..🦪) sloth..oyster
-1F9AE..1F9AF ; Emoji_Presentation # 12.0 [2] (🦮..🦯) guide dog..probing cane
-1F9B0..1F9B9 ; Emoji_Presentation # 11.0 [10] (🦰..🦹) red hair..supervillain
-1F9BA..1F9BF ; Emoji_Presentation # 12.0 [6] (🦺..🦿) safety vest..mechanical leg
-1F9C0 ; Emoji_Presentation # 8.0 [1] (🧀) cheese wedge
-1F9C1..1F9C2 ; Emoji_Presentation # 11.0 [2] (🧁..🧂) cupcake..salt
-1F9C3..1F9CA ; Emoji_Presentation # 12.0 [8] (🧃..🧊) beverage box..ice cube
-1F9CD..1F9CF ; Emoji_Presentation # 12.0 [3] (🧍..🧏) person standing..deaf person
-1F9D0..1F9E6 ; Emoji_Presentation # 10.0 [23] (🧐..🧦) face with monocle..socks
-1F9E7..1F9FF ; Emoji_Presentation # 11.0 [25] (🧧..🧿) red envelope..nazar amulet
-1FA70..1FA73 ; Emoji_Presentation # 12.0 [4] (🩰..🩳) ballet shoes..shorts
-1FA78..1FA7A ; Emoji_Presentation # 12.0 [3] (🩸..🩺) drop of blood..stethoscope
-1FA80..1FA82 ; Emoji_Presentation # 12.0 [3] (🪀..🪂) yo-yo..parachute
-1FA90..1FA95 ; Emoji_Presentation # 12.0 [6] (🪐..🪕) ringed planet..banjo
-
-# Total elements: 1093
-
-# ================================================
-
-# All omitted code points have Emoji_Modifier=No
-# @missing: 0000..10FFFF ; Emoji_Modifier ; No
-
-1F3FB..1F3FF ; Emoji_Modifier # 8.0 [5] (🏻..🏿) light skin tone..dark skin tone
-
-# Total elements: 5
-
-# ================================================
-
-# All omitted code points have Emoji_Modifier_Base=No
-# @missing: 0000..10FFFF ; Emoji_Modifier_Base ; No
-
-261D ; Emoji_Modifier_Base # 1.1 [1] (☝️) index pointing up
-26F9 ; Emoji_Modifier_Base # 5.2 [1] (⛹️) person bouncing ball
-270A..270B ; Emoji_Modifier_Base # 6.0 [2] (✊..✋) raised fist..raised hand
-270C..270D ; Emoji_Modifier_Base # 1.1 [2] (✌️..✍️) victory hand..writing hand
-1F385 ; Emoji_Modifier_Base # 6.0 [1] (🎅) Santa Claus
-1F3C2..1F3C4 ; Emoji_Modifier_Base # 6.0 [3] (🏂..🏄) snowboarder..person surfing
-1F3C7 ; Emoji_Modifier_Base # 6.0 [1] (🏇) horse racing
-1F3CA ; Emoji_Modifier_Base # 6.0 [1] (🏊) person swimming
-1F3CB..1F3CC ; Emoji_Modifier_Base # 7.0 [2] (🏋️..🏌️) person lifting weights..person golfing
-1F442..1F443 ; Emoji_Modifier_Base # 6.0 [2] (👂..👃) ear..nose
-1F446..1F450 ; Emoji_Modifier_Base # 6.0 [11] (👆..👐) backhand index pointing up..open hands
-1F466..1F478 ; Emoji_Modifier_Base # 6.0 [19] (👦..👸) boy..princess
-1F47C ; Emoji_Modifier_Base # 6.0 [1] (👼) baby angel
-1F481..1F483 ; Emoji_Modifier_Base # 6.0 [3] (💁..💃) person tipping hand..woman dancing
-1F485..1F487 ; Emoji_Modifier_Base # 6.0 [3] (💅..💇) nail polish..person getting haircut
-1F48F ; Emoji_Modifier_Base # 6.0 [1] (💏) kiss
-1F491 ; Emoji_Modifier_Base # 6.0 [1] (💑) couple with heart
-1F4AA ; Emoji_Modifier_Base # 6.0 [1] (💪) flexed biceps
-1F574..1F575 ; Emoji_Modifier_Base # 7.0 [2] (🕴️..🕵️) man in suit levitating..detective
-1F57A ; Emoji_Modifier_Base # 9.0 [1] (🕺) man dancing
-1F590 ; Emoji_Modifier_Base # 7.0 [1] (🖐️) hand with fingers splayed
-1F595..1F596 ; Emoji_Modifier_Base # 7.0 [2] (🖕..🖖) middle finger..vulcan salute
-1F645..1F647 ; Emoji_Modifier_Base # 6.0 [3] (🙅..🙇) person gesturing NO..person bowing
-1F64B..1F64F ; Emoji_Modifier_Base # 6.0 [5] (🙋..🙏) person raising hand..folded hands
-1F6A3 ; Emoji_Modifier_Base # 6.0 [1] (🚣) person rowing boat
-1F6B4..1F6B6 ; Emoji_Modifier_Base # 6.0 [3] (🚴..🚶) person biking..person walking
-1F6C0 ; Emoji_Modifier_Base # 6.0 [1] (🛀) person taking bath
-1F6CC ; Emoji_Modifier_Base # 7.0 [1] (🛌) person in bed
-1F90F ; Emoji_Modifier_Base # 12.0 [1] (🤏) pinching hand
-1F918 ; Emoji_Modifier_Base # 8.0 [1] (🤘) sign of the horns
-1F919..1F91E ; Emoji_Modifier_Base # 9.0 [6] (🤙..🤞) call me hand..crossed fingers
-1F91F ; Emoji_Modifier_Base # 10.0 [1] (🤟) love-you gesture
-1F926 ; Emoji_Modifier_Base # 9.0 [1] (🤦) person facepalming
-1F930 ; Emoji_Modifier_Base # 9.0 [1] (🤰) pregnant woman
-1F931..1F932 ; Emoji_Modifier_Base # 10.0 [2] (🤱..🤲) breast-feeding..palms up together
-1F933..1F939 ; Emoji_Modifier_Base # 9.0 [7] (🤳..🤹) selfie..person juggling
-1F93C..1F93E ; Emoji_Modifier_Base # 9.0 [3] (🤼..🤾) people wrestling..person playing handball
-1F9B5..1F9B6 ; Emoji_Modifier_Base # 11.0 [2] (🦵..🦶) leg..foot
-1F9B8..1F9B9 ; Emoji_Modifier_Base # 11.0 [2] (🦸..🦹) superhero..supervillain
-1F9BB ; Emoji_Modifier_Base # 12.0 [1] (🦻) ear with hearing aid
-1F9CD..1F9CF ; Emoji_Modifier_Base # 12.0 [3] (🧍..🧏) person standing..deaf person
-1F9D1..1F9DD ; Emoji_Modifier_Base # 10.0 [13] (🧑..🧝) person..elf
-
-# Total elements: 120
-
-# ================================================
-
-# All omitted code points have Emoji_Component=No
-# @missing: 0000..10FFFF ; Emoji_Component ; No
-
-0023 ; Emoji_Component # 1.1 [1] (#️) number sign
-002A ; Emoji_Component # 1.1 [1] (*️) asterisk
-0030..0039 ; Emoji_Component # 1.1 [10] (0️..9️) digit zero..digit nine
-200D ; Emoji_Component # 1.1 [1] (‍) zero width joiner
-20E3 ; Emoji_Component # 3.0 [1] (⃣) combining enclosing keycap
-FE0F ; Emoji_Component # 3.2 [1] () VARIATION SELECTOR-16
-1F1E6..1F1FF ; Emoji_Component # 6.0 [26] (🇦..🇿) regional indicator symbol letter a..regional indicator symbol letter z
-1F3FB..1F3FF ; Emoji_Component # 8.0 [5] (🏻..🏿) light skin tone..dark skin tone
-1F9B0..1F9B3 ; Emoji_Component # 11.0 [4] (🦰..🦳) red hair..white hair
-E0020..E007F ; Emoji_Component # 3.1 [96] (󠀠..󠁿) tag space..cancel tag
-
-# Total elements: 146
-
-# ================================================
-
-# All omitted code points have Extended_Pictographic=No
-# @missing: 0000..10FFFF ; Extended_Pictographic ; No
-
-00A9 ; Extended_Pictographic# 1.1 [1] (©️) copyright
-00AE ; Extended_Pictographic# 1.1 [1] (®️) registered
-203C ; Extended_Pictographic# 1.1 [1] (‼️) double exclamation mark
-2049 ; Extended_Pictographic# 3.0 [1] (⁉️) exclamation question mark
-2122 ; Extended_Pictographic# 1.1 [1] (™️) trade mark
-2139 ; Extended_Pictographic# 3.0 [1] (ℹ️) information
-2194..2199 ; Extended_Pictographic# 1.1 [6] (↔️..↙️) left-right arrow..down-left arrow
-21A9..21AA ; Extended_Pictographic# 1.1 [2] (↩️..↪️) right arrow curving left..left arrow curving right
-231A..231B ; Extended_Pictographic# 1.1 [2] (⌚..⌛) watch..hourglass done
-2328 ; Extended_Pictographic# 1.1 [1] (⌨️) keyboard
-2388 ; Extended_Pictographic# 3.0 [1] (⎈) HELM SYMBOL
-23CF ; Extended_Pictographic# 4.0 [1] (⏏️) eject button
-23E9..23F3 ; Extended_Pictographic# 6.0 [11] (⏩..⏳) fast-forward button..hourglass not done
-23F8..23FA ; Extended_Pictographic# 7.0 [3] (⏸️..⏺️) pause button..record button
-24C2 ; Extended_Pictographic# 1.1 [1] (Ⓜ️) circled M
-25AA..25AB ; Extended_Pictographic# 1.1 [2] (▪️..▫️) black small square..white small square
-25B6 ; Extended_Pictographic# 1.1 [1] (▶️) play button
-25C0 ; Extended_Pictographic# 1.1 [1] (◀️) reverse button
-25FB..25FE ; Extended_Pictographic# 3.2 [4] (◻️..◾) white medium square..black medium-small square
-2600..2605 ; Extended_Pictographic# 1.1 [6] (☀️..★) sun..BLACK STAR
-2607..2612 ; Extended_Pictographic# 1.1 [12] (☇..☒) LIGHTNING..BALLOT BOX WITH X
-2614..2615 ; Extended_Pictographic# 4.0 [2] (☔..☕) umbrella with rain drops..hot beverage
-2616..2617 ; Extended_Pictographic# 3.2 [2] (☖..☗) WHITE SHOGI PIECE..BLACK SHOGI PIECE
-2618 ; Extended_Pictographic# 4.1 [1] (☘️) shamrock
-2619 ; Extended_Pictographic# 3.0 [1] (☙) REVERSED ROTATED FLORAL HEART BULLET
-261A..266F ; Extended_Pictographic# 1.1 [86] (☚..♯) BLACK LEFT POINTING INDEX..MUSIC SHARP SIGN
-2670..2671 ; Extended_Pictographic# 3.0 [2] (♰..♱) WEST SYRIAC CROSS..EAST SYRIAC CROSS
-2672..267D ; Extended_Pictographic# 3.2 [12] (♲..♽) UNIVERSAL RECYCLING SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL
-267E..267F ; Extended_Pictographic# 4.1 [2] (♾️..♿) infinity..wheelchair symbol
-2680..2685 ; Extended_Pictographic# 3.2 [6] (⚀..⚅) DIE FACE-1..DIE FACE-6
-2690..2691 ; Extended_Pictographic# 4.0 [2] (⚐..⚑) WHITE FLAG..BLACK FLAG
-2692..269C ; Extended_Pictographic# 4.1 [11] (⚒️..⚜️) hammer and pick..fleur-de-lis
-269D ; Extended_Pictographic# 5.1 [1] (⚝) OUTLINED WHITE STAR
-269E..269F ; Extended_Pictographic# 5.2 [2] (⚞..⚟) THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT
-26A0..26A1 ; Extended_Pictographic# 4.0 [2] (⚠️..⚡) warning..high voltage
-26A2..26B1 ; Extended_Pictographic# 4.1 [16] (⚢..⚱️) DOUBLED FEMALE SIGN..funeral urn
-26B2 ; Extended_Pictographic# 5.0 [1] (⚲) NEUTER
-26B3..26BC ; Extended_Pictographic# 5.1 [10] (⚳..⚼) CERES..SESQUIQUADRATE
-26BD..26BF ; Extended_Pictographic# 5.2 [3] (⚽..⚿) soccer ball..SQUARED KEY
-26C0..26C3 ; Extended_Pictographic# 5.1 [4] (⛀..⛃) WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING
-26C4..26CD ; Extended_Pictographic# 5.2 [10] (⛄..⛍) snowman without snow..DISABLED CAR
-26CE ; Extended_Pictographic# 6.0 [1] (⛎) Ophiuchus
-26CF..26E1 ; Extended_Pictographic# 5.2 [19] (⛏️..⛡) pick..RESTRICTED LEFT ENTRY-2
-26E2 ; Extended_Pictographic# 6.0 [1] (⛢) ASTRONOMICAL SYMBOL FOR URANUS
-26E3 ; Extended_Pictographic# 5.2 [1] (⛣) HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
-26E4..26E7 ; Extended_Pictographic# 6.0 [4] (⛤..⛧) PENTAGRAM..INVERTED PENTAGRAM
-26E8..26FF ; Extended_Pictographic# 5.2 [24] (⛨..⛿) BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
-2700 ; Extended_Pictographic# 7.0 [1] (✀) BLACK SAFETY SCISSORS
-2701..2704 ; Extended_Pictographic# 1.1 [4] (✁..✄) UPPER BLADE SCISSORS..WHITE SCISSORS
-2705 ; Extended_Pictographic# 6.0 [1] (✅) check mark button
-2708..2709 ; Extended_Pictographic# 1.1 [2] (✈️..✉️) airplane..envelope
-270A..270B ; Extended_Pictographic# 6.0 [2] (✊..✋) raised fist..raised hand
-270C..2712 ; Extended_Pictographic# 1.1 [7] (✌️..✒️) victory hand..black nib
-2714 ; Extended_Pictographic# 1.1 [1] (✔️) check mark
-2716 ; Extended_Pictographic# 1.1 [1] (✖️) multiplication sign
-271D ; Extended_Pictographic# 1.1 [1] (✝️) latin cross
-2721 ; Extended_Pictographic# 1.1 [1] (✡️) star of David
-2728 ; Extended_Pictographic# 6.0 [1] (✨) sparkles
-2733..2734 ; Extended_Pictographic# 1.1 [2] (✳️..✴️) eight-spoked asterisk..eight-pointed star
-2744 ; Extended_Pictographic# 1.1 [1] (❄️) snowflake
-2747 ; Extended_Pictographic# 1.1 [1] (❇️) sparkle
-274C ; Extended_Pictographic# 6.0 [1] (❌) cross mark
-274E ; Extended_Pictographic# 6.0 [1] (❎) cross mark button
-2753..2755 ; Extended_Pictographic# 6.0 [3] (❓..❕) question mark..white exclamation mark
-2757 ; Extended_Pictographic# 5.2 [1] (❗) exclamation mark
-2763..2767 ; Extended_Pictographic# 1.1 [5] (❣️..❧) heart exclamation..ROTATED FLORAL HEART BULLET
-2795..2797 ; Extended_Pictographic# 6.0 [3] (➕..➗) plus sign..division sign
-27A1 ; Extended_Pictographic# 1.1 [1] (➡️) right arrow
-27B0 ; Extended_Pictographic# 6.0 [1] (➰) curly loop
-27BF ; Extended_Pictographic# 6.0 [1] (➿) double curly loop
-2934..2935 ; Extended_Pictographic# 3.2 [2] (⤴️..⤵️) right arrow curving up..right arrow curving down
-2B05..2B07 ; Extended_Pictographic# 4.0 [3] (⬅️..⬇️) left arrow..down arrow
-2B1B..2B1C ; Extended_Pictographic# 5.1 [2] (⬛..⬜) black large square..white large square
-2B50 ; Extended_Pictographic# 5.1 [1] (⭐) star
-2B55 ; Extended_Pictographic# 5.2 [1] (⭕) hollow red circle
-3030 ; Extended_Pictographic# 1.1 [1] (〰️) wavy dash
-303D ; Extended_Pictographic# 3.2 [1] (〽️) part alternation mark
-3297 ; Extended_Pictographic# 1.1 [1] (㊗️) Japanese “congratulations” button
-3299 ; Extended_Pictographic# 1.1 [1] (㊙️) Japanese “secret” button
-1F000..1F02B ; Extended_Pictographic# 5.1 [44] (🀀..🀫) MAHJONG TILE EAST WIND..MAHJONG TILE BACK
-1F02C..1F02F ; Extended_Pictographic# NA [4] (🀬..🀯) <reserved-1F02C>..<reserved-1F02F>
-1F030..1F093 ; Extended_Pictographic# 5.1[100] (🀰..🂓) DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
-1F094..1F09F ; Extended_Pictographic# NA [12] (🂔..🂟) <reserved-1F094>..<reserved-1F09F>
-1F0A0..1F0AE ; Extended_Pictographic# 6.0 [15] (🂠..🂮) PLAYING CARD BACK..PLAYING CARD KING OF SPADES
-1F0AF..1F0B0 ; Extended_Pictographic# NA [2] (🂯..🂰) <reserved-1F0AF>..<reserved-1F0B0>
-1F0B1..1F0BE ; Extended_Pictographic# 6.0 [14] (🂱..🂾) PLAYING CARD ACE OF HEARTS..PLAYING CARD KING OF HEARTS
-1F0BF ; Extended_Pictographic# 7.0 [1] (🂿) PLAYING CARD RED JOKER
-1F0C0 ; Extended_Pictographic# NA [1] (🃀) <reserved-1F0C0>
-1F0C1..1F0CF ; Extended_Pictographic# 6.0 [15] (🃁..🃏) PLAYING CARD ACE OF DIAMONDS..joker
-1F0D0 ; Extended_Pictographic# NA [1] (🃐) <reserved-1F0D0>
-1F0D1..1F0DF ; Extended_Pictographic# 6.0 [15] (🃑..🃟) PLAYING CARD ACE OF CLUBS..PLAYING CARD WHITE JOKER
-1F0E0..1F0F5 ; Extended_Pictographic# 7.0 [22] (🃠..🃵) PLAYING CARD FOOL..PLAYING CARD TRUMP-21
-1F0F6..1F0FF ; Extended_Pictographic# NA [10] (🃶..🃿) <reserved-1F0F6>..<reserved-1F0FF>
-1F10D..1F10F ; Extended_Pictographic# NA [3] (🄍..🄏) <reserved-1F10D>..<reserved-1F10F>
-1F12F ; Extended_Pictographic# 11.0 [1] (🄯) COPYLEFT SYMBOL
-1F16C ; Extended_Pictographic# 12.0 [1] (🅬) RAISED MR SIGN
-1F16D..1F16F ; Extended_Pictographic# NA [3] (🅭..🅯) <reserved-1F16D>..<reserved-1F16F>
-1F170..1F171 ; Extended_Pictographic# 6.0 [2] (🅰️..🅱️) A button (blood type)..B button (blood type)
-1F17E ; Extended_Pictographic# 6.0 [1] (🅾️) O button (blood type)
-1F17F ; Extended_Pictographic# 5.2 [1] (🅿️) P button
-1F18E ; Extended_Pictographic# 6.0 [1] (🆎) AB button (blood type)
-1F191..1F19A ; Extended_Pictographic# 6.0 [10] (🆑..🆚) CL button..VS button
-1F1AD..1F1E5 ; Extended_Pictographic# NA [57] (🆭..🇥) <reserved-1F1AD>..<reserved-1F1E5>
-1F201..1F202 ; Extended_Pictographic# 6.0 [2] (🈁..🈂️) Japanese “here” button..Japanese “service charge” button
-1F203..1F20F ; Extended_Pictographic# NA [13] (🈃..🈏) <reserved-1F203>..<reserved-1F20F>
-1F21A ; Extended_Pictographic# 5.2 [1] (🈚) Japanese “free of charge” button
-1F22F ; Extended_Pictographic# 5.2 [1] (🈯) Japanese “reserved” button
-1F232..1F23A ; Extended_Pictographic# 6.0 [9] (🈲..🈺) Japanese “prohibited” button..Japanese “open for business” button
-1F23C..1F23F ; Extended_Pictographic# NA [4] (🈼..🈿) <reserved-1F23C>..<reserved-1F23F>
-1F249..1F24F ; Extended_Pictographic# NA [7] (🉉..🉏) <reserved-1F249>..<reserved-1F24F>
-1F250..1F251 ; Extended_Pictographic# 6.0 [2] (🉐..🉑) Japanese “bargain” button..Japanese “acceptable” button
-1F252..1F25F ; Extended_Pictographic# NA [14] (🉒..🉟) <reserved-1F252>..<reserved-1F25F>
-1F260..1F265 ; Extended_Pictographic# 10.0 [6] (🉠..🉥) ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
-1F266..1F2FF ; Extended_Pictographic# NA[154] (🉦..🋿) <reserved-1F266>..<reserved-1F2FF>
-1F300..1F320 ; Extended_Pictographic# 6.0 [33] (🌀..🌠) cyclone..shooting star
-1F321..1F32C ; Extended_Pictographic# 7.0 [12] (🌡️..🌬️) thermometer..wind face
-1F32D..1F32F ; Extended_Pictographic# 8.0 [3] (🌭..🌯) hot dog..burrito
-1F330..1F335 ; Extended_Pictographic# 6.0 [6] (🌰..🌵) chestnut..cactus
-1F336 ; Extended_Pictographic# 7.0 [1] (🌶️) hot pepper
-1F337..1F37C ; Extended_Pictographic# 6.0 [70] (🌷..🍼) tulip..baby bottle
-1F37D ; Extended_Pictographic# 7.0 [1] (🍽️) fork and knife with plate
-1F37E..1F37F ; Extended_Pictographic# 8.0 [2] (🍾..🍿) bottle with popping cork..popcorn
-1F380..1F393 ; Extended_Pictographic# 6.0 [20] (🎀..🎓) ribbon..graduation cap
-1F394..1F39F ; Extended_Pictographic# 7.0 [12] (🎔..🎟️) HEART WITH TIP ON THE LEFT..admission tickets
-1F3A0..1F3C4 ; Extended_Pictographic# 6.0 [37] (🎠..🏄) carousel horse..person surfing
-1F3C5 ; Extended_Pictographic# 7.0 [1] (🏅) sports medal
-1F3C6..1F3CA ; Extended_Pictographic# 6.0 [5] (🏆..🏊) trophy..person swimming
-1F3CB..1F3CE ; Extended_Pictographic# 7.0 [4] (🏋️..🏎️) person lifting weights..racing car
-1F3CF..1F3D3 ; Extended_Pictographic# 8.0 [5] (🏏..🏓) cricket game..ping pong
-1F3D4..1F3DF ; Extended_Pictographic# 7.0 [12] (🏔️..🏟️) snow-capped mountain..stadium
-1F3E0..1F3F0 ; Extended_Pictographic# 6.0 [17] (🏠..🏰) house..castle
-1F3F1..1F3F7 ; Extended_Pictographic# 7.0 [7] (🏱..🏷️) WHITE PENNANT..label
-1F3F8..1F3FA ; Extended_Pictographic# 8.0 [3] (🏸..🏺) badminton..amphora
-1F400..1F43E ; Extended_Pictographic# 6.0 [63] (🐀..🐾) rat..paw prints
-1F43F ; Extended_Pictographic# 7.0 [1] (🐿️) chipmunk
-1F440 ; Extended_Pictographic# 6.0 [1] (👀) eyes
-1F441 ; Extended_Pictographic# 7.0 [1] (👁️) eye
-1F442..1F4F7 ; Extended_Pictographic# 6.0[182] (👂..📷) ear..camera
-1F4F8 ; Extended_Pictographic# 7.0 [1] (📸) camera with flash
-1F4F9..1F4FC ; Extended_Pictographic# 6.0 [4] (📹..📼) video camera..videocassette
-1F4FD..1F4FE ; Extended_Pictographic# 7.0 [2] (📽️..📾) film projector..PORTABLE STEREO
-1F4FF ; Extended_Pictographic# 8.0 [1] (📿) prayer beads
-1F500..1F53D ; Extended_Pictographic# 6.0 [62] (🔀..🔽) shuffle tracks button..downwards button
-1F546..1F54A ; Extended_Pictographic# 7.0 [5] (🕆..🕊️) WHITE LATIN CROSS..dove
-1F54B..1F54F ; Extended_Pictographic# 8.0 [5] (🕋..🕏) kaaba..BOWL OF HYGIEIA
-1F550..1F567 ; Extended_Pictographic# 6.0 [24] (🕐..🕧) one o’clock..twelve-thirty
-1F568..1F579 ; Extended_Pictographic# 7.0 [18] (🕨..🕹️) RIGHT SPEAKER..joystick
-1F57A ; Extended_Pictographic# 9.0 [1] (🕺) man dancing
-1F57B..1F5A3 ; Extended_Pictographic# 7.0 [41] (🕻..🖣) LEFT HAND TELEPHONE RECEIVER..BLACK DOWN POINTING BACKHAND INDEX
-1F5A4 ; Extended_Pictographic# 9.0 [1] (🖤) black heart
-1F5A5..1F5FA ; Extended_Pictographic# 7.0 [86] (🖥️..🗺️) desktop computer..world map
-1F5FB..1F5FF ; Extended_Pictographic# 6.0 [5] (🗻..🗿) mount fuji..moai
-1F600 ; Extended_Pictographic# 6.1 [1] (😀) grinning face
-1F601..1F610 ; Extended_Pictographic# 6.0 [16] (😁..😐) beaming face with smiling eyes..neutral face
-1F611 ; Extended_Pictographic# 6.1 [1] (😑) expressionless face
-1F612..1F614 ; Extended_Pictographic# 6.0 [3] (😒..😔) unamused face..pensive face
-1F615 ; Extended_Pictographic# 6.1 [1] (😕) confused face
-1F616 ; Extended_Pictographic# 6.0 [1] (😖) confounded face
-1F617 ; Extended_Pictographic# 6.1 [1] (😗) kissing face
-1F618 ; Extended_Pictographic# 6.0 [1] (😘) face blowing a kiss
-1F619 ; Extended_Pictographic# 6.1 [1] (😙) kissing face with smiling eyes
-1F61A ; Extended_Pictographic# 6.0 [1] (😚) kissing face with closed eyes
-1F61B ; Extended_Pictographic# 6.1 [1] (😛) face with tongue
-1F61C..1F61E ; Extended_Pictographic# 6.0 [3] (😜..😞) winking face with tongue..disappointed face
-1F61F ; Extended_Pictographic# 6.1 [1] (😟) worried face
-1F620..1F625 ; Extended_Pictographic# 6.0 [6] (😠..😥) angry face..sad but relieved face
-1F626..1F627 ; Extended_Pictographic# 6.1 [2] (😦..😧) frowning face with open mouth..anguished face
-1F628..1F62B ; Extended_Pictographic# 6.0 [4] (😨..😫) fearful face..tired face
-1F62C ; Extended_Pictographic# 6.1 [1] (😬) grimacing face
-1F62D ; Extended_Pictographic# 6.0 [1] (😭) loudly crying face
-1F62E..1F62F ; Extended_Pictographic# 6.1 [2] (😮..😯) face with open mouth..hushed face
-1F630..1F633 ; Extended_Pictographic# 6.0 [4] (😰..😳) anxious face with sweat..flushed face
-1F634 ; Extended_Pictographic# 6.1 [1] (😴) sleeping face
-1F635..1F640 ; Extended_Pictographic# 6.0 [12] (😵..🙀) dizzy face..weary cat
-1F641..1F642 ; Extended_Pictographic# 7.0 [2] (🙁..🙂) slightly frowning face..slightly smiling face
-1F643..1F644 ; Extended_Pictographic# 8.0 [2] (🙃..🙄) upside-down face..face with rolling eyes
-1F645..1F64F ; Extended_Pictographic# 6.0 [11] (🙅..🙏) person gesturing NO..folded hands
-1F680..1F6C5 ; Extended_Pictographic# 6.0 [70] (🚀..🛅) rocket..left luggage
-1F6C6..1F6CF ; Extended_Pictographic# 7.0 [10] (🛆..🛏️) TRIANGLE WITH ROUNDED CORNERS..bed
-1F6D0 ; Extended_Pictographic# 8.0 [1] (🛐) place of worship
-1F6D1..1F6D2 ; Extended_Pictographic# 9.0 [2] (🛑..🛒) stop sign..shopping cart
-1F6D3..1F6D4 ; Extended_Pictographic# 10.0 [2] (🛓..🛔) STUPA..PAGODA
-1F6D5 ; Extended_Pictographic# 12.0 [1] (🛕) hindu temple
-1F6D6..1F6DF ; Extended_Pictographic# NA [10] (🛖..🛟) <reserved-1F6D6>..<reserved-1F6DF>
-1F6E0..1F6EC ; Extended_Pictographic# 7.0 [13] (🛠️..🛬) hammer and wrench..airplane arrival
-1F6ED..1F6EF ; Extended_Pictographic# NA [3] (🛭..🛯) <reserved-1F6ED>..<reserved-1F6EF>
-1F6F0..1F6F3 ; Extended_Pictographic# 7.0 [4] (🛰️..🛳️) satellite..passenger ship
-1F6F4..1F6F6 ; Extended_Pictographic# 9.0 [3] (🛴..🛶) kick scooter..canoe
-1F6F7..1F6F8 ; Extended_Pictographic# 10.0 [2] (🛷..🛸) sled..flying saucer
-1F6F9 ; Extended_Pictographic# 11.0 [1] (🛹) skateboard
-1F6FA ; Extended_Pictographic# 12.0 [1] (🛺) auto rickshaw
-1F6FB..1F6FF ; Extended_Pictographic# NA [5] (🛻..🛿) <reserved-1F6FB>..<reserved-1F6FF>
-1F774..1F77F ; Extended_Pictographic# NA [12] (🝴..🝿) <reserved-1F774>..<reserved-1F77F>
-1F7D5..1F7D8 ; Extended_Pictographic# 11.0 [4] (🟕..🟘) CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE
-1F7D9..1F7DF ; Extended_Pictographic# NA [7] (🟙..🟟) <reserved-1F7D9>..<reserved-1F7DF>
-1F7E0..1F7EB ; Extended_Pictographic# 12.0 [12] (🟠..🟫) orange circle..brown square
-1F7EC..1F7FF ; Extended_Pictographic# NA [20] (🟬..🟿) <reserved-1F7EC>..<reserved-1F7FF>
-1F80C..1F80F ; Extended_Pictographic# NA [4] (🠌..🠏) <reserved-1F80C>..<reserved-1F80F>
-1F848..1F84F ; Extended_Pictographic# NA [8] (🡈..🡏) <reserved-1F848>..<reserved-1F84F>
-1F85A..1F85F ; Extended_Pictographic# NA [6] (🡚..🡟) <reserved-1F85A>..<reserved-1F85F>
-1F888..1F88F ; Extended_Pictographic# NA [8] (🢈..🢏) <reserved-1F888>..<reserved-1F88F>
-1F8AE..1F8FF ; Extended_Pictographic# NA [82] (🢮..🣿) <reserved-1F8AE>..<reserved-1F8FF>
-1F90C ; Extended_Pictographic# NA [1] (🤌) <reserved-1F90C>
-1F90D..1F90F ; Extended_Pictographic# 12.0 [3] (🤍..🤏) white heart..pinching hand
-1F910..1F918 ; Extended_Pictographic# 8.0 [9] (🤐..🤘) zipper-mouth face..sign of the horns
-1F919..1F91E ; Extended_Pictographic# 9.0 [6] (🤙..🤞) call me hand..crossed fingers
-1F91F ; Extended_Pictographic# 10.0 [1] (🤟) love-you gesture
-1F920..1F927 ; Extended_Pictographic# 9.0 [8] (🤠..🤧) cowboy hat face..sneezing face
-1F928..1F92F ; Extended_Pictographic# 10.0 [8] (🤨..🤯) face with raised eyebrow..exploding head
-1F930 ; Extended_Pictographic# 9.0 [1] (🤰) pregnant woman
-1F931..1F932 ; Extended_Pictographic# 10.0 [2] (🤱..🤲) breast-feeding..palms up together
-1F933..1F93A ; Extended_Pictographic# 9.0 [8] (🤳..🤺) selfie..person fencing
-1F93C..1F93E ; Extended_Pictographic# 9.0 [3] (🤼..🤾) people wrestling..person playing handball
-1F93F ; Extended_Pictographic# 12.0 [1] (🤿) diving mask
-1F940..1F945 ; Extended_Pictographic# 9.0 [6] (🥀..🥅) wilted flower..goal net
-1F947..1F94B ; Extended_Pictographic# 9.0 [5] (🥇..🥋) 1st place medal..martial arts uniform
-1F94C ; Extended_Pictographic# 10.0 [1] (🥌) curling stone
-1F94D..1F94F ; Extended_Pictographic# 11.0 [3] (🥍..🥏) lacrosse..flying disc
-1F950..1F95E ; Extended_Pictographic# 9.0 [15] (🥐..🥞) croissant..pancakes
-1F95F..1F96B ; Extended_Pictographic# 10.0 [13] (🥟..🥫) dumpling..canned food
-1F96C..1F970 ; Extended_Pictographic# 11.0 [5] (🥬..🥰) leafy green..smiling face with hearts
-1F971 ; Extended_Pictographic# 12.0 [1] (🥱) yawning face
-1F972 ; Extended_Pictographic# NA [1] (🥲) <reserved-1F972>
-1F973..1F976 ; Extended_Pictographic# 11.0 [4] (🥳..🥶) partying face..cold face
-1F977..1F979 ; Extended_Pictographic# NA [3] (🥷..🥹) <reserved-1F977>..<reserved-1F979>
-1F97A ; Extended_Pictographic# 11.0 [1] (🥺) pleading face
-1F97B ; Extended_Pictographic# 12.0 [1] (🥻) sari
-1F97C..1F97F ; Extended_Pictographic# 11.0 [4] (🥼..🥿) lab coat..flat shoe
-1F980..1F984 ; Extended_Pictographic# 8.0 [5] (🦀..🦄) crab..unicorn
-1F985..1F991 ; Extended_Pictographic# 9.0 [13] (🦅..🦑) eagle..squid
-1F992..1F997 ; Extended_Pictographic# 10.0 [6] (🦒..🦗) giraffe..cricket
-1F998..1F9A2 ; Extended_Pictographic# 11.0 [11] (🦘..🦢) kangaroo..swan
-1F9A3..1F9A4 ; Extended_Pictographic# NA [2] (🦣..🦤) <reserved-1F9A3>..<reserved-1F9A4>
-1F9A5..1F9AA ; Extended_Pictographic# 12.0 [6] (🦥..🦪) sloth..oyster
-1F9AB..1F9AD ; Extended_Pictographic# NA [3] (🦫..🦭) <reserved-1F9AB>..<reserved-1F9AD>
-1F9AE..1F9AF ; Extended_Pictographic# 12.0 [2] (🦮..🦯) guide dog..probing cane
-1F9B0..1F9B9 ; Extended_Pictographic# 11.0 [10] (🦰..🦹) red hair..supervillain
-1F9BA..1F9BF ; Extended_Pictographic# 12.0 [6] (🦺..🦿) safety vest..mechanical leg
-1F9C0 ; Extended_Pictographic# 8.0 [1] (🧀) cheese wedge
-1F9C1..1F9C2 ; Extended_Pictographic# 11.0 [2] (🧁..🧂) cupcake..salt
-1F9C3..1F9CA ; Extended_Pictographic# 12.0 [8] (🧃..🧊) beverage box..ice cube
-1F9CB..1F9CC ; Extended_Pictographic# NA [2] (🧋..🧌) <reserved-1F9CB>..<reserved-1F9CC>
-1F9CD..1F9CF ; Extended_Pictographic# 12.0 [3] (🧍..🧏) person standing..deaf person
-1F9D0..1F9E6 ; Extended_Pictographic# 10.0 [23] (🧐..🧦) face with monocle..socks
-1F9E7..1F9FF ; Extended_Pictographic# 11.0 [25] (🧧..🧿) red envelope..nazar amulet
-1FA00..1FA53 ; Extended_Pictographic# 12.0 [84] (🨀..🩓) NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
-1FA54..1FA5F ; Extended_Pictographic# NA [12] (🩔..🩟) <reserved-1FA54>..<reserved-1FA5F>
-1FA60..1FA6D ; Extended_Pictographic# 11.0 [14] (🩠..🩭) XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
-1FA6E..1FA6F ; Extended_Pictographic# NA [2] (🩮..🩯) <reserved-1FA6E>..<reserved-1FA6F>
-1FA70..1FA73 ; Extended_Pictographic# 12.0 [4] (🩰..🩳) ballet shoes..shorts
-1FA74..1FA77 ; Extended_Pictographic# NA [4] (🩴..🩷) <reserved-1FA74>..<reserved-1FA77>
-1FA78..1FA7A ; Extended_Pictographic# 12.0 [3] (🩸..🩺) drop of blood..stethoscope
-1FA7B..1FA7F ; Extended_Pictographic# NA [5] (🩻..🩿) <reserved-1FA7B>..<reserved-1FA7F>
-1FA80..1FA82 ; Extended_Pictographic# 12.0 [3] (🪀..🪂) yo-yo..parachute
-1FA83..1FA8F ; Extended_Pictographic# NA [13] (🪃..🪏) <reserved-1FA83>..<reserved-1FA8F>
-1FA90..1FA95 ; Extended_Pictographic# 12.0 [6] (🪐..🪕) ringed planet..banjo
-1FA96..1FFFD ; Extended_Pictographic# NA[1384] (🪖..🿽) <reserved-1FA96>..<reserved-1FFFD>
-
-# Total elements: 3793
-
-#EOF
diff --git a/gnu/usr.bin/perl/lib/unicore/EmojiSources.txt b/gnu/usr.bin/perl/lib/unicore/EmojiSources.txt
index 623d0c05793..b2a526160c1 100644
--- a/gnu/usr.bin/perl/lib/unicore/EmojiSources.txt
+++ b/gnu/usr.bin/perl/lib/unicore/EmojiSources.txt
@@ -1,5 +1,5 @@
-# EmojiSources-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [MS, KW]
+# EmojiSources-13.0.0.txt
+# Date: 2019-09-09, 19:40:00 GMT [MS, KW]
# © 2019 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
diff --git a/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt b/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt
index 18cfdf83a2f..90aa56964e4 100644
--- a/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt
+++ b/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt
@@ -1,5 +1,5 @@
-# HangulSyllableType-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT
+# HangulSyllableType-13.0.0.txt
+# Date: 2019-09-08, 23:31:10 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/gnu/usr.bin/perl/lib/unicore/Heavy.pl b/gnu/usr.bin/perl/lib/unicore/Heavy.pl
deleted file mode 100644
index b4d387357b7..00000000000
--- a/gnu/usr.bin/perl/lib/unicore/Heavy.pl
+++ /dev/null
@@ -1,7393 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is machine-generated by lib/unicore/mktables from the Unicode
-# database, Version 12.1.0. Any changes made here will be lost!
-
-
-# !!!!!!! INTERNAL PERL USE ONLY !!!!!!!
-# This file is for internal use by core Perl only. The format and even the
-# name or existence of this file are subject to change without notice. Don't
-# use it directly. Use Unicode::UCD to access the Unicode character data
-# base.
-
-
-# This file is for the use of utf8_heavy.pl and Unicode::UCD
-
-# Maps Unicode (not Perl single-form extensions) property names in loose
-# standard form to their corresponding standard names
-%utf8::loose_property_name_of = (
-'age' => 'age',
-'ahex' => 'ahex',
-'alpha' => 'alpha',
-'alphabetic' => 'alpha',
-'asciihexdigit' => 'ahex',
-'bc' => 'bc',
-'bidic' => 'bidic',
-'bidiclass' => 'bc',
-'bidicontrol' => 'bidic',
-'bidim' => 'bidim',
-'bidimirrored' => 'bidim',
-'bidipairedbrackettype' => 'bpt',
-'blk' => 'blk',
-'block' => 'blk',
-'bpt' => 'bpt',
-'canonicalcombiningclass' => 'ccc',
-'cased' => 'cased',
-'caseignorable' => 'ci',
-'category' => 'gc',
-'ccc' => 'ccc',
-'ce' => 'ce',
-'changeswhencasefolded' => 'cwcf',
-'changeswhencasemapped' => 'cwcm',
-'changeswhenlowercased' => 'cwl',
-'changeswhennfkccasefolded' => 'cwkcf',
-'changeswhentitlecased' => 'cwt',
-'changeswhenuppercased' => 'cwu',
-'ci' => 'ci',
-'compex' => 'compex',
-'compositionexclusion' => 'ce',
-'cwcf' => 'cwcf',
-'cwcm' => 'cwcm',
-'cwkcf' => 'cwkcf',
-'cwl' => 'cwl',
-'cwt' => 'cwt',
-'cwu' => 'cwu',
-'dash' => 'dash',
-'decompositiontype' => 'dt',
-'defaultignorablecodepoint' => 'di',
-'dep' => 'dep',
-'deprecated' => 'dep',
-'di' => 'di',
-'dia' => 'dia',
-'diacritic' => 'dia',
-'dt' => 'dt',
-'ea' => 'ea',
-'eastasianwidth' => 'ea',
-'ext' => 'ext',
-'extender' => 'ext',
-'fullcompositionexclusion' => 'compex',
-'gc' => 'gc',
-'gcb' => 'gcb',
-'generalcategory' => 'gc',
-'graphemebase' => 'grbase',
-'graphemeclusterbreak' => 'gcb',
-'graphemeextend' => 'grext',
-'grbase' => 'grbase',
-'grext' => 'grext',
-'hangulsyllabletype' => 'hst',
-'hex' => 'hex',
-'hexdigit' => 'hex',
-'hst' => 'hst',
-'hyphen' => 'hyphen',
-'idc' => 'idc',
-'idcontinue' => 'idc',
-'ideo' => 'ideo',
-'ideographic' => 'ideo',
-'ids' => 'ids',
-'idsb' => 'idsb',
-'idsbinaryoperator' => 'idsb',
-'idst' => 'idst',
-'idstart' => 'ids',
-'idstrinaryoperator' => 'idst',
-'in' => 'in',
-'indicpositionalcategory' => 'inpc',
-'indicsyllabiccategory' => 'insc',
-'inpc' => 'inpc',
-'insc' => 'insc',
-'jg' => 'jg',
-'joinc' => 'joinc',
-'joincontrol' => 'joinc',
-'joininggroup' => 'jg',
-'joiningtype' => 'jt',
-'jt' => 'jt',
-'lb' => 'lb',
-'linebreak' => 'lb',
-'loe' => 'loe',
-'logicalorderexception' => 'loe',
-'lower' => 'lower',
-'lowercase' => 'lower',
-'math' => 'math',
-'nchar' => 'nchar',
-'nfcqc' => 'nfcqc',
-'nfcquickcheck' => 'nfcqc',
-'nfdqc' => 'nfdqc',
-'nfdquickcheck' => 'nfdqc',
-'nfkcqc' => 'nfkcqc',
-'nfkcquickcheck' => 'nfkcqc',
-'nfkdqc' => 'nfkdqc',
-'nfkdquickcheck' => 'nfkdqc',
-'noncharactercodepoint' => 'nchar',
-'nt' => 'nt',
-'numerictype' => 'nt',
-'numericvalue' => 'nv',
-'nv' => 'nv',
-'patsyn' => 'patsyn',
-'patternsyntax' => 'patsyn',
-'patternwhitespace' => 'patws',
-'patws' => 'patws',
-'pcm' => 'pcm',
-'prependedconcatenationmark' => 'pcm',
-'presentin' => 'in',
-'qmark' => 'qmark',
-'quotationmark' => 'qmark',
-'radical' => 'radical',
-'regionalindicator' => 'ri',
-'ri' => 'ri',
-'sb' => 'sb',
-'sc' => 'sc',
-'script' => 'sc',
-'scriptextensions' => 'scx',
-'scx' => 'scx',
-'sd' => 'sd',
-'sentencebreak' => 'sb',
-'sentenceterminal' => 'sterm',
-'softdotted' => 'sd',
-'space' => 'wspace',
-'sterm' => 'sterm',
-'term' => 'term',
-'terminalpunctuation' => 'term',
-'uideo' => 'uideo',
-'unifiedideograph' => 'uideo',
-'upper' => 'upper',
-'uppercase' => 'upper',
-'variationselector' => 'vs',
-'verticalorientation' => 'vo',
-'vo' => 'vo',
-'vs' => 'vs',
-'wb' => 'wb',
-'whitespace' => 'wspace',
-'wordbreak' => 'wb',
-'wspace' => 'wspace',
-'xidc' => 'xidc',
-'xidcontinue' => 'xidc',
-'xids' => 'xids',
-'xidstart' => 'xids',
-);
-
-# Same, but strict names
-%utf8::strict_property_name_of = (
-'_perlgcb' => 'gcb',
-'_perlsb' => 'sb',
-'_perlscx' => '_perlscx',
-'_perlwb' => 'wb',
-);
-
-# Gives the definitions (in the form of inversion lists) for those properties
-# whose definitions aren't kept in files
-@utf8::inline_definitions = (
-
-'V0',
-'V1
-0',
-'V2
-0
-1114112',
-'V4
-9
-14
-32
-33',
-'V6
-10
-14
-133
-134
-8232
-8234',
-'V6
-48
-58
-65
-91
-97
-123',
-'V4
-65
-91
-97
-123',
-'V4
-9
-10
-32
-33',
-'V4
-0
-32
-127
-128',
-'V2
-48
-58',
-'V2
-33
-127',
-'V2
-97
-123',
-'V2
-32
-127',
-'V2
-65
-91',
-'V2
-55296
-57344',
-'V2
-12334
-12336',
-'V2
-119149
-119150',
-'V2
-12330
-12331',
-'V6
-861
-863
-864
-866
-7629
-7630',
-'V2
-837
-838',
-'V2
-12441
-12443',
-'V2
-7630
-7631',
-'V6
-801
-803
-807
-809
-7632
-7633',
-'V2
-1456
-1457',
-'V2
-1457
-1458',
-'V2
-1458
-1459',
-'V2
-1459
-1460',
-'V2
-1460
-1461',
-'V2
-1461
-1462',
-'V2
-1462
-1463',
-'V2
-1463
-1464',
-'V4
-1464
-1465
-1479
-1480',
-'V2
-1465
-1467',
-'V2
-1467
-1468',
-'V2
-1468
-1469',
-'V2
-1469
-1470',
-'V2
-1471
-1472',
-'V2
-1473
-1474',
-'V2
-1474
-1475',
-'V2
-64286
-64287',
-'V4
-1611
-1612
-2288
-2289',
-'V4
-1612
-1613
-2289
-2290',
-'V4
-1613
-1614
-2290
-2291',
-'V4
-1560
-1561
-1614
-1615',
-'V4
-1561
-1562
-1615
-1616',
-'V4
-1562
-1563
-1616
-1617',
-'V2
-1617
-1618',
-'V2
-1618
-1619',
-'V2
-1648
-1649',
-'V2
-1809
-1810',
-'V2
-3157
-3158',
-'V2
-3158
-3159',
-'V2
-3640
-3642',
-'V2
-3656
-3660',
-'V2
-3768
-3770',
-'V2
-3784
-3788',
-'V2
-3953
-3954',
-'V6
-3954
-3955
-3962
-3966
-3968
-3969',
-'V2
-3956
-3957',
-'V6
-48
-58
-65
-71
-97
-103',
-'V4
-4352
-4448
-43360
-43389',
-'V4
-4520
-4608
-55243
-55292',
-'V4
-4448
-4520
-55216
-55239',
-'V2
-13
-14',
-'V2
-10
-11',
-'V2
-127462
-127488',
-'V2
-8205
-8206',
-'V4
-12272
-12274
-12276
-12284',
-'V5
-0
-12272
-12274
-12276
-12284',
-'V2
-12274
-12276',
-'V3
-0
-12274
-12276',
-'V2
-43455
-43456',
-'V4
-6971
-6972
-43456
-43457',
-'V2
-6973
-6974',
-'V2
-8204
-8205',
-'V6
-6512
-6517
-43712
-43713
-43714
-43715',
-'V2
-69759
-69760',
-'V6
-2673
-2674
-70199
-70200
-72344
-72345',
-'V4
-3660
-3661
-6093
-6094',
-'V2
-2947
-2948',
-'V2
-6089
-6091',
-'V6
-70082
-70084
-72250
-72251
-72324
-72330',
-'V2
-69714
-69734',
-'V2
-3976
-3981',
-'V6
-3313
-3315
-7413
-7415
-69635
-69637',
-'V4
-3406
-3407
-73030
-73031',
-'V2
-6746
-6747',
-'V2
-8204
-8206',
-'V3
-0
-8204
-8206',
-'V3
-0
-127462
-127488',
-'V6
-11904
-11930
-11931
-12020
-12032
-12246',
-'V4
-133
-134
-8232
-8234',
-'V6
-6155
-6158
-65024
-65040
-917760
-918000',
-'V2
-34
-35',
-'V6
-11
-13
-133
-134
-8232
-8234',
-'V2
-39
-40',
-'V4
-8364
-8365
-65532
-65533',
-'V2
-8378
-8379',
-'V4
-1564
-1565
-8294
-8298',
-'V2
-13055
-13056',
-'V6
-9
-10
-11
-12
-31
-32',
-'V2
-8296
-8297',
-'V2
-8234
-8235',
-'V2
-8294
-8295',
-'V2
-8237
-8238',
-'V2
-8236
-8237',
-'V2
-8297
-8298',
-'V2
-8235
-8236',
-'V2
-8295
-8296',
-'V2
-8238
-8239',
-'V2
-65024
-65040',
-'V2
-19968
-40960',
-'V2
-12272
-12288',
-'V2
-3712
-3840',
-'V2
-92736
-92784',
-'V2
-1984
-2048',
-'V2
-9280
-9312',
-'V2
-57344
-63744',
-'V2
-42240
-42560',
-'V2
-71424
-71488',
-'V2
-43520
-43616',
-'V2
-4352
-4608',
-'V2
-42192
-42240',
-'V2
-93952
-94112',
-'V2
-71168
-71264',
-'V2
-70656
-70784',
-'V2
-69216
-69248',
-'V2
-917504
-917632',
-'V2
-3584
-3712',
-'V2
-5120
-5760',
-'V2
-0
-128',
-'V2
-125184
-125280',
-'V2
-42656
-42752',
-'V2
-7104
-7168',
-'V2
-5952
-5984',
-'V2
-71680
-71760',
-'V2
-880
-1024',
-'V2
-6016
-6144',
-'V2
-6400
-6480',
-'V2
-119040
-119296',
-'V2
-110960
-111360',
-'V2
-5760
-5792',
-'V2
-2816
-2944',
-'V2
-66736
-66816',
-'V2
-5792
-5888',
-'V2
-6480
-6528',
-'V2
-71296
-71376',
-'V2
-2944
-3072',
-'V2
-917760
-918000',
-'V2
-1536
-1792',
-'V2
-8592
-8704',
-'V2
-69632
-69760',
-'V2
-66208
-66272',
-'V2
-69888
-69968',
-'V2
-11392
-11520',
-'V2
-127024
-127136',
-'V2
-66352
-66384',
-'V2
-44032
-55216',
-'V2
-67808
-67840',
-'V2
-1424
-1536',
-'V2
-592
-688',
-'V2
-69760
-69840',
-'V2
-12688
-12704',
-'V2
-12032
-12256',
-'V2
-70144
-70224',
-'V2
-128
-256',
-'V2
-7168
-7248',
-'V2
-66176
-66208',
-'V2
-67872
-67904',
-'V2
-43312
-43360',
-'V2
-1792
-1872',
-'V2
-94208
-100352',
-'V2
-3072
-3200',
-'V2
-1920
-1984',
-'V2
-123584
-123648',
-'V2
-19904
-19968',
-'V2
-68352
-68416',
-'V2
-2432
-2560',
-'V2
-10240
-10496',
-'V2
-13312
-19904',
-'V2
-131072
-173792',
-'V2
-173824
-177984',
-'V2
-177984
-178208',
-'V2
-178208
-183984',
-'V2
-183984
-191472',
-'V2
-66560
-66640',
-'V2
-66816
-66864',
-'V2
-69600
-69632',
-'V2
-70400
-70528',
-'V2
-5920
-5952',
-'V2
-110592
-110848',
-'V2
-3200
-3328',
-'V2
-43264
-43312',
-'V2
-67072
-67456',
-'V2
-126976
-127024',
-'V2
-73440
-73472',
-'V2
-2112
-2144',
-'V2
-72816
-72896',
-'V2
-70272
-70320',
-'V2
-4096
-4256',
-'V2
-7248
-7296',
-'V2
-66688
-66736',
-'V2
-43072
-43136',
-'V2
-70016
-70112',
-'V2
-66640
-66688',
-'V2
-71040
-71168',
-'V2
-3456
-3584',
-'V2
-69424
-69488',
-'V2
-72272
-72368',
-'V2
-983040
-1048576',
-'V2
-1048576
-1114112',
-'V2
-5888
-5920',
-'V2
-6688
-6832',
-'V2
-43648
-43744',
-'V2
-3840
-4096',
-'V2
-70784
-70880',
-'V2
-6320
-6400',
-'V2
-1328
-1424',
-'V2
-6912
-7040',
-'V2
-92160
-92736',
-'V2
-92880
-92928',
-'V2
-12544
-12592',
-'V2
-6656
-6688',
-'V2
-5024
-5120',
-'V2
-1024
-1280',
-'V2
-9984
-10176',
-'V2
-113664
-113824',
-'V2
-4608
-4992',
-'V2
-4256
-4352',
-'V2
-7936
-8192',
-'V2
-2688
-2816',
-'V2
-2560
-2688',
-'V2
-12352
-12448',
-'V2
-43360
-43392',
-'V2
-55216
-55296',
-'V2
-43392
-43488',
-'V2
-110848
-110896',
-'V2
-12448
-12544',
-'V2
-69968
-70016',
-'V2
-66000
-66048',
-'V2
-65520
-65536',
-'V2
-5984
-6016',
-'V2
-73664
-73728',
-'V2
-11568
-11648',
-'V2
-66432
-66464',
-'V2
-7376
-7424',
-'V2
-64336
-65024',
-'V2
-65136
-65280',
-'V2
-1872
-1920',
-'V2
-72704
-72816',
-'V2
-13056
-13312',
-'V2
-73728
-74752',
-'V2
-128512
-128592',
-'V2
-65056
-65072',
-'V2
-70320
-70400',
-'V2
-256
-384',
-'V2
-384
-592',
-'V2
-11360
-11392',
-'V2
-42784
-43008',
-'V2
-43824
-43888',
-'V2
-3328
-3456',
-'V2
-6144
-6320',
-'V2
-67712
-67760',
-'V2
-6528
-6624',
-'V2
-66304
-66352',
-'V2
-66384
-66432',
-'V2
-68608
-68688',
-'V2
-67680
-67712',
-'V2
-72384
-72448',
-'V2
-2048
-2112',
-'V2
-7040
-7104',
-'V2
-2144
-2160',
-'V2
-128768
-128896',
-'V2
-2208
-2304',
-'V2
-126464
-126720',
-'V2
-9472
-9600',
-'V2
-12736
-12784',
-'V2
-12288
-12352',
-'V2
-12592
-12688',
-'V2
-2304
-2432',
-'V2
-11264
-11360',
-'V2
-68096
-68192',
-'V2
-68288
-68352',
-'V2
-11008
-11264',
-'V2
-66464
-66528',
-'V2
-69376
-69424',
-'V2
-67840
-67872',
-'V2
-43136
-43232',
-'V2
-65104
-65136',
-'V2
-10224
-10240',
-'V2
-10496
-10624',
-'V2
-129024
-129280',
-'V2
-71840
-71936',
-'V2
-42128
-42192',
-'V2
-12704
-12736',
-'V2
-43888
-43968',
-'V2
-119648
-119680',
-'V2
-1280
-1328',
-'V2
-12800
-13056',
-'V2
-11648
-11744',
-'V2
-4992
-5024',
-'V2
-7312
-7360',
-'V2
-11520
-11568',
-'V2
-12784
-12800',
-'V2
-93760
-93856',
-'V2
-43968
-44032',
-'V2
-9728
-9984',
-'V2
-43616
-43648',
-'V2
-43488
-43520',
-'V2
-72096
-72192',
-'V2
-8528
-8592',
-'V2
-92928
-93072',
-'V2
-7424
-7552',
-'V2
-8192
-8304',
-'V2
-69840
-69888',
-'V2
-8304
-8352',
-'V2
-43008
-43056',
-'V2
-119552
-119648',
-'V2
-40960
-42128',
-'V2
-64256
-64336',
-'V2
-129536
-129648',
-'V2
-11744
-11776',
-'V2
-42560
-42656',
-'V2
-7296
-7312',
-'V2
-768
-880',
-'V2
-43776
-43824',
-'V2
-73056
-73136',
-'V2
-6624
-6656',
-'V2
-72960
-73056',
-'V2
-119808
-120832',
-'V2
-124928
-125152',
-'V2
-71264
-71296',
-'V2
-68736
-68864',
-'V2
-127136
-127232',
-'V2
-110896
-110960',
-'V2
-7360
-7376',
-'V2
-65792
-65856',
-'V2
-9600
-9632',
-'V2
-43232
-43264',
-'V2
-122880
-122928',
-'V2
-56320
-57344',
-'V2
-8704
-8960',
-'V2
-119520
-119552',
-'V2
-8960
-9216',
-'V2
-65040
-65056',
-'V2
-65936
-66000',
-'V2
-118784
-119040',
-'V2
-65072
-65104',
-'V2
-11904
-12032',
-'V2
-68864
-68928',
-'V2
-55296
-56192',
-'V2
-43744
-43776',
-'V2
-7552
-7616',
-'V2
-68480
-68528',
-'V2
-11776
-11904',
-'V2
-9216
-9280',
-'V2
-8352
-8400',
-'V2
-6832
-6912',
-'V2
-7616
-7680',
-'V2
-9632
-9728',
-'V2
-67648
-67680',
-'V2
-68000
-68096',
-'V2
-127744
-128512',
-'V2
-688
-768',
-'V2
-68224
-68256',
-'V2
-68192
-68224',
-'V2
-128640
-128768',
-'V2
-72192
-72272',
-'V2
-74752
-74880',
-'V2
-67584
-67648',
-'V2
-9312
-9472',
-'V2
-65280
-65520',
-'V2
-56192
-56320',
-'V2
-43056
-43072',
-'V2
-65664
-65792',
-'V2
-65536
-65664',
-'V2
-10176
-10224',
-'V2
-10624
-10752',
-'V2
-10752
-11008',
-'V2
-100352
-101120',
-'V2
-119296
-119376',
-'V2
-66864
-66928',
-'V2
-126064
-126144',
-'V2
-8448
-8528',
-'V2
-120832
-121520',
-'V2
-66272
-66304',
-'V2
-128896
-129024',
-'V2
-94176
-94208',
-'V2
-7680
-7936',
-'V2
-128592
-128640',
-'V2
-65856
-65936',
-'V2
-63744
-64256',
-'V2
-77824
-78896',
-'V2
-127232
-127488',
-'V2
-67968
-68000',
-'V2
-42752
-42784',
-'V2
-126208
-126288',
-'V2
-82944
-83584',
-'V2
-68448
-68480',
-'V2
-123136
-123216',
-'V2
-68416
-68448',
-'V2
-70112
-70144',
-'V2
-194560
-195104',
-'V2
-8400
-8448',
-'V2
-74880
-75088',
-'V2
-127488
-127744',
-'V2
-113824
-113840',
-'V2
-129280
-129536',
-'V2
-129648
-129792',
-'V2
-78896
-78912',
-'V6
-188
-191
-8528
-8544
-8585
-8586',
-'V6
-65104
-65107
-65108
-65127
-65128
-65132',
-'V6
-12288
-12289
-65281
-65377
-65504
-65511',
-'V4
-0
-32
-127
-160',
-'V6
-57344
-63744
-983040
-1048574
-1048576
-1114110',
-'V2
-8232
-8233',
-'V2
-8233
-8234',
-'V2
-1829
-1830',
-'V2
-1871
-1872',
-'V2
-1815
-1816',
-'V2
-1830
-1831',
-'V2
-1607
-1608',
-'V2
-1825
-1826',
-'V2
-1826
-1827',
-'V2
-1725
-1726',
-'V6
-1591
-1593
-1695
-1696
-2211
-2212',
-'V2
-1836
-1837',
-'V4
-1810
-1811
-1837
-1838',
-'V2
-1818
-1819',
-'V2
-1823
-1824',
-'V6
-1605
-1606
-1893
-1895
-2215
-2216',
-'V6
-1606
-1607
-1721
-1725
-1895
-1898',
-'V2
-1833
-1834',
-'V2
-1835
-1836',
-'V2
-1819
-1821',
-'V2
-1821
-1822',
-'V2
-1817
-1818',
-'V2
-1808
-1809',
-'V4
-1811
-1813
-1838
-1839',
-'V2
-1870
-1871',
-'V2
-1832
-1833',
-'V2
-1869
-1870',
-'V2
-1824
-1825',
-'V2
-1822
-1823',
-'V2
-1729
-1731',
-'V2
-1827
-1828',
-'V2
-1706
-1707',
-'V2
-1816
-1817',
-'V2
-1746
-1748',
-'V2
-2235
-2236',
-'V2
-2236
-2237',
-'V6
-1813
-1815
-1834
-1835
-1839
-1840',
-'V4
-1726
-1727
-1791
-1792',
-'V2
-1831
-1832',
-'V6
-1577
-1578
-1728
-1729
-1749
-1750',
-'V2
-2237
-2238',
-'V2
-2145
-2146',
-'V2
-2151
-2152',
-'V2
-2220
-2221',
-'V2
-2225
-2226',
-'V2
-1741
-1742',
-'V2
-1828
-1829',
-'V2
-2150
-2151',
-'V2
-2152
-2153',
-'V2
-2144
-2145',
-'V2
-2148
-2149',
-'V2
-2146
-2147',
-'V2
-2154
-2155',
-'V2
-2147
-2148',
-'V2
-68315
-68317',
-'V2
-2153
-2154',
-'V2
-2149
-2150',
-'V2
-68310
-68311',
-'V2
-68311
-68312',
-'V2
-68331
-68332',
-'V2
-68324
-68325',
-'V2
-68333
-68334',
-'V2
-68295
-68296',
-'V2
-1731
-1732',
-'V2
-68313
-68315',
-'V2
-68289
-68291',
-'V2
-68332
-68333',
-'V2
-68301
-68302',
-'V2
-68304
-68307',
-'V2
-68318
-68321',
-'V2
-68321
-68322',
-'V2
-68302
-68303',
-'V2
-68303
-68304',
-'V2
-68288
-68289',
-'V2
-68291
-68293',
-'V2
-68317
-68318',
-'V2
-68297
-68299',
-'V6
-68866
-68867
-68873
-68874
-68892
-68893',
-'V2
-68293
-68294',
-'V2
-68307
-68308',
-'V2
-68312
-68313',
-'V2
-68334
-68335',
-'V2
-68308
-68309',
-'V2
-68335
-68336',
-'V2
-68309
-68310',
-'V2
-1914
-1916',
-'V4
-8212
-8213
-11834
-11836',
-'V4
-11
-13
-8232
-8234',
-'V2
-65532
-65533',
-'V4
-41
-42
-93
-94',
-'V2
-127995
-128000',
-'V2
-45
-46',
-'V2
-133
-134',
-'V2
-55296
-57344',
-'V2
-32
-33',
-'V2
-47
-48',
-'V4
-8288
-8289
-65279
-65280',
-'V2
-8203
-8204',
-'V2
-12881
-12882',
-'V2
-12882
-12883',
-'V2
-12883
-12884',
-'V2
-12884
-12885',
-'V2
-12885
-12886',
-'V2
-12886
-12887',
-'V2
-12887
-12888',
-'V2
-12888
-12889',
-'V2
-12889
-12890',
-'V2
-12891
-12892',
-'V2
-12892
-12893',
-'V2
-12893
-12894',
-'V2
-12894
-12895',
-'V2
-12895
-12896',
-'V2
-12977
-12978',
-'V2
-12978
-12979',
-'V2
-12979
-12980',
-'V2
-12980
-12981',
-'V2
-12982
-12983',
-'V2
-12983
-12984',
-'V2
-12984
-12985',
-'V2
-12985
-12986',
-'V2
-12986
-12987',
-'V2
-12987
-12988',
-'V2
-12988
-12989',
-'V2
-12989
-12990',
-'V2
-12990
-12991',
-'V6
-3422
-3423
-8533
-8534
-73679
-73680',
-'V2
-8528
-8529',
-'V2
-8529
-8530',
-'V2
-8534
-8535',
-'V2
-3883
-3884',
-'V2
-8535
-8536',
-'V2
-8540
-8541',
-'V2
-8536
-8537',
-'V2
-3884
-3885',
-'V6
-8538
-8539
-68095
-68096
-74844
-74845',
-'V2
-8541
-8542',
-'V2
-3885
-3886',
-'V2
-8542
-8543',
-'V2
-3886
-3887',
-'V2
-3891
-3892',
-'V6
-3420
-3421
-8530
-8531
-73675
-73676',
-'V2
-68086
-68087',
-'V4
-3419
-3420
-73672
-73673',
-'V2
-73669
-73670',
-'V4
-3417
-3418
-73668
-73669',
-'V2
-73667
-73668',
-'V2
-73666
-73667',
-'V2
-3887
-3888',
-'V2
-3888
-3889',
-'V2
-3889
-3890',
-'V2
-3890
-3891',
-'V4
-3421
-3422
-73677
-73678',
-'V2
-73671
-73672',
-'V4
-3418
-3419
-73670
-73671',
-'V2
-68090
-68091',
-'V2
-68092
-68093',
-'V4
-3416
-3417
-73665
-73666',
-'V4
-73664
-73665
-73684
-73685',
-'V2
-68028
-68029',
-'V4
-68078
-68079
-126111
-126112',
-'V2
-74802
-74803',
-'V2
-68079
-68080',
-'V2
-68080
-68081',
-'V2
-74803
-74804',
-'V2
-68081
-68082',
-'V2
-68082
-68083',
-'V2
-68083
-68084',
-'V2
-68084
-68085',
-'V2
-68085
-68086',
-'V2
-93022
-93023',
-'V2
-126113
-126114',
-'V2
-126114
-126115',
-'V6
-20159
-20160
-20740
-20741
-93023
-93024',
-'V2
-93024
-93025',
-'V4
-20806
-20807
-93025
-93026',
-'V4
-40960
-42125
-42128
-42183',
-'V6
-125184
-125260
-125264
-125274
-125278
-125280',
-'V6
-746
-748
-12549
-12592
-12704
-12731',
-'V4
-6656
-6684
-6686
-6688',
-'V2
-5952
-5972',
-'V4
-69888
-69941
-69942
-69959',
-'V6
-994
-1008
-11392
-11508
-11513
-11520',
-'V2
-71680
-71740',
-'V2
-5920
-5941',
-'V6
-43392
-43470
-43472
-43482
-43486
-43488',
-'V4
-43264
-43310
-43311
-43312',
-'V4
-70144
-70162
-70163
-70207',
-'V4
-69760
-69826
-69837
-69838',
-'V6
-67072
-67383
-67392
-67414
-67424
-67432',
-'V2
-69968
-70007',
-'V4
-2112
-2140
-2142
-2143',
-'V4
-68288
-68327
-68331
-68343',
-'V4
-71168
-71237
-71248
-71258',
-'V6
-4096
-4256
-43488
-43519
-43616
-43648',
-'V6
-72096
-72104
-72106
-72152
-72154
-72165',
-'V2
-66384
-66427',
-'V2
-43072
-43128',
-'V6
-68480
-68498
-68505
-68509
-68521
-68528',
-'V4
-68864
-68904
-68912
-68922',
-'V4
-70016
-70094
-70096
-70112',
-'V4
-70320
-70379
-70384
-70394',
-'V2
-69424
-69466',
-'V2
-43008
-43052',
-'V6
-5984
-5997
-5998
-6001
-6002
-6004',
-'V4
-71296
-71353
-71360
-71370',
-'V4
-6480
-6510
-6512
-6517',
-'V4
-5888
-5901
-5902
-5909',
-'V2
-1920
-1970',
-'V4
-70784
-70856
-70864
-70874',
-'V6
-92736
-92767
-92768
-92778
-92782
-92784',
-'V4
-1984
-2043
-2045
-2048',
-'V2
-42240
-42540',
-'V4
-66864
-66916
-66927
-66928',
-'V6
-71424
-71451
-71453
-71468
-71472
-71488',
-'V4
-67648
-67670
-67671
-67680',
-'V4
-68352
-68406
-68409
-68416',
-'V4
-6912
-6988
-6992
-7037',
-'V4
-42656
-42744
-92160
-92729',
-'V4
-92880
-92910
-92912
-92918',
-'V4
-7104
-7156
-7164
-7168',
-'V6
-69632
-69710
-69714
-69744
-69759
-69760',
-'V6
-6656
-6684
-6686
-6688
-43471
-43472',
-'V4
-5941
-5943
-5952
-5972',
-'V4
-5120
-5760
-6320
-6390',
-'V2
-66208
-66257',
-'V6
-5024
-5110
-5112
-5118
-43888
-43968',
-'V6
-2404
-2416
-43056
-43066
-71680
-71740',
-'V4
-77824
-78895
-78896
-78905',
-'V2
-66816
-66856',
-'V2
-69600
-69623',
-'V2
-66352
-66379',
-'V2
-5920
-5943',
-'V6
-67808
-67827
-67828
-67830
-67835
-67840',
-'V2
-82944
-83527',
-'V6
-68736
-68787
-68800
-68851
-68858
-68864',
-'V4
-66304
-66340
-66349
-66352',
-'V6
-43392
-43470
-43471
-43482
-43486
-43488',
-'V6
-7168
-7224
-7227
-7242
-7245
-7248',
-'V2
-66176
-66205',
-'V4
-67872
-67898
-67903
-67904',
-'V6
-2404
-2416
-43056
-43066
-69968
-70007',
-'V2
-73440
-73465',
-'V6
-1600
-1601
-2112
-2140
-2142
-2143',
-'V6
-1600
-1601
-68288
-68327
-68331
-68343',
-'V6
-72816
-72848
-72850
-72872
-72873
-72887',
-'V2
-93760
-93851',
-'V4
-124928
-125125
-125127
-125143',
-'V6
-68000
-68024
-68028
-68048
-68050
-68096',
-'V6
-93952
-94027
-94031
-94088
-94095
-94112',
-'V6
-43056
-43066
-71168
-71237
-71248
-71258',
-'V6
-43744
-43767
-43968
-44014
-44016
-44026',
-'V4
-67712
-67743
-67751
-67760',
-'V6
-70656
-70746
-70747
-70748
-70749
-70752',
-'V4
-94177
-94178
-110960
-111356',
-'V2
-5760
-5789',
-'V2
-68608
-68681',
-'V4
-66736
-66772
-66776
-66812',
-'V4
-66688
-66718
-66720
-66730',
-'V2
-72384
-72441',
-'V4
-1155
-1156
-66384
-66427',
-'V6
-6146
-6148
-6149
-6150
-43072
-43128',
-'V4
-68448
-68467
-68472
-68480',
-'V4
-67840
-67868
-67871
-67872',
-'V4
-68416
-68438
-68440
-68448',
-'V4
-43312
-43348
-43359
-43360',
-'V4
-5792
-5867
-5870
-5881',
-'V4
-2048
-2094
-2096
-2111',
-'V4
-43136
-43206
-43214
-43226',
-'V6
-120832
-121484
-121499
-121504
-121505
-121520',
-'V4
-71040
-71094
-71096
-71134',
-'V4
-1600
-1601
-69424
-69466',
-'V2
-69376
-69416',
-'V4
-69840
-69865
-69872
-69882',
-'V2
-72272
-72355',
-'V4
-7040
-7104
-7360
-7368',
-'V6
-2404
-2406
-2534
-2544
-43008
-43052',
-'V6
-4160
-4170
-6480
-6510
-6512
-6517',
-'V6
-94176
-94177
-94208
-100344
-100352
-101107',
-'V4
-43648
-43715
-43739
-43744',
-'V6
-11568
-11624
-11631
-11633
-11647
-11648',
-'V6
-5888
-5901
-5902
-5909
-5941
-5943',
-'V4
-3585
-3643
-3648
-3676',
-'V4
-66432
-66462
-66463
-66464',
-'V4
-71840
-71923
-71935
-71936',
-'V4
-123584
-123642
-123647
-123648',
-'V4
-66464
-66500
-66504
-66518',
-'V2
-72192
-72264',
-,
-);
-
-# Maps property, table to file for those using stricter matching. For paths
-# whose directory is '#', the file is in the form of a numeric index into
-# @inline_definitions
-%utf8::stricter_to_file_of = (
-'_perl_any_folds' => 'Perl/_PerlAny',
-'_perl_charname_begin' => 'Perl/_PerlCha',
-'_perl_charname_continue' => 'Perl/_PerlCh2',
-'_perl_folds_to_multi_char' => 'Perl/_PerlFol',
-'_perl_idcont' => 'Perl/_PerlIDC',
-'_perl_idstart' => 'Perl/_PerlIDS',
-'_perl_is_in_multi_char_fold' => 'Perl/_PerlIsI',
-'_perl_nchar' => 'Perl/_PerlNch',
-'_perl_non_final_folds' => 'Perl/_PerlNon',
-'_perl_patws' => 'Perl/_PerlPat',
-'_perl_problematic_locale_foldeds_start' => 'Perl/_PerlPr2',
-'_perl_problematic_locale_folds' => 'Perl/_PerlPro',
-'_perl_quotemeta' => 'Perl/_PerlQuo',
-'_perl_surrogate' => '#/14',
-'age=1.1' => 'Age/V11',
-'age=10' => 'Age/V100',
-'age=10.0' => 'Age/V100',
-'age=11' => 'Age/V110',
-'age=11.0' => 'Age/V110',
-'age=12' => 'Age/V120',
-'age=12.0' => 'Age/V120',
-'age=12.1' => '#/99',
-'age=2' => 'Age/V20',
-'age=2.0' => 'Age/V20',
-'age=2.1' => '#/96',
-'age=3' => 'Age/V30',
-'age=3.0' => 'Age/V30',
-'age=3.1' => 'Age/V31',
-'age=3.2' => 'Age/V32',
-'age=4' => 'Age/V40',
-'age=4.0' => 'Age/V40',
-'age=4.1' => 'Age/V41',
-'age=5' => 'Age/V50',
-'age=5.0' => 'Age/V50',
-'age=5.1' => 'Age/V51',
-'age=5.2' => 'Age/V52',
-'age=6' => 'Age/V60',
-'age=6.0' => 'Age/V60',
-'age=6.1' => 'Age/V61',
-'age=6.2' => '#/97',
-'age=6.3' => '#/98',
-'age=7' => 'Age/V70',
-'age=7.0' => 'Age/V70',
-'age=8' => 'Age/V80',
-'age=8.0' => 'Age/V80',
-'age=9' => 'Age/V90',
-'age=9.0' => 'Age/V90',
-'ccc=0' => 'Ccc/NR',
-'ccc=1' => 'Ccc/OV',
-'ccc=10' => '#/23',
-'ccc=103' => '#/52',
-'ccc=107' => '#/53',
-'ccc=11' => '#/24',
-'ccc=118' => '#/54',
-'ccc=12' => '#/25',
-'ccc=122' => '#/55',
-'ccc=129' => '#/56',
-'ccc=13' => '#/26',
-'ccc=130' => '#/57',
-'ccc=132' => '#/58',
-'ccc=133' => '#/0',
-'ccc=14' => '#/27',
-'ccc=15' => '#/28',
-'ccc=16' => '#/29',
-'ccc=17' => '#/30',
-'ccc=18' => '#/31',
-'ccc=19' => '#/32',
-'ccc=20' => '#/33',
-'ccc=200' => '#/0',
-'ccc=202' => '#/22',
-'ccc=21' => '#/34',
-'ccc=214' => '#/21',
-'ccc=216' => 'Ccc/ATAR',
-'ccc=218' => '#/17',
-'ccc=22' => '#/35',
-'ccc=220' => 'Ccc/B',
-'ccc=222' => 'Ccc/BR',
-'ccc=224' => '#/15',
-'ccc=226' => '#/16',
-'ccc=228' => 'Ccc/AL',
-'ccc=23' => '#/36',
-'ccc=230' => 'Ccc/A',
-'ccc=232' => 'Ccc/AR',
-'ccc=233' => 'Ccc/DB',
-'ccc=234' => '#/18',
-'ccc=24' => '#/37',
-'ccc=240' => '#/19',
-'ccc=25' => '#/38',
-'ccc=26' => '#/39',
-'ccc=27' => '#/40',
-'ccc=28' => '#/41',
-'ccc=29' => '#/42',
-'ccc=30' => '#/43',
-'ccc=31' => '#/44',
-'ccc=32' => '#/45',
-'ccc=33' => '#/46',
-'ccc=34' => '#/47',
-'ccc=35' => '#/48',
-'ccc=36' => '#/49',
-'ccc=7' => 'Ccc/NK',
-'ccc=8' => '#/20',
-'ccc=84' => '#/50',
-'ccc=9' => 'Ccc/VR',
-'ccc=91' => '#/51',
-'in=1.1' => 'Age/V11',
-'in=10' => 'In/10_0',
-'in=10.0' => 'In/10_0',
-'in=11' => 'In/11_0',
-'in=11.0' => 'In/11_0',
-'in=12' => 'In/12_0',
-'in=12.0' => 'In/12_0',
-'in=12.1' => 'In/12_1',
-'in=2' => 'In/2_0',
-'in=2.0' => 'In/2_0',
-'in=2.1' => 'In/2_1',
-'in=3' => 'In/3_0',
-'in=3.0' => 'In/3_0',
-'in=3.1' => 'In/3_1',
-'in=3.2' => 'In/3_2',
-'in=4' => 'In/4_0',
-'in=4.0' => 'In/4_0',
-'in=4.1' => 'In/4_1',
-'in=5' => 'In/5_0',
-'in=5.0' => 'In/5_0',
-'in=5.1' => 'In/5_1',
-'in=5.2' => 'In/5_2',
-'in=6' => 'In/6_0',
-'in=6.0' => 'In/6_0',
-'in=6.1' => 'In/6_1',
-'in=6.2' => 'In/6_2',
-'in=6.3' => 'In/6_3',
-'in=7' => 'In/7_0',
-'in=7.0' => 'In/7_0',
-'in=8' => 'In/8_0',
-'in=8.0' => 'In/8_0',
-'in=9' => 'In/9_0',
-'in=9.0' => 'In/9_0',
-'nv=-1/2' => '#/554',
-'nv=0' => 'Nv/0',
-'nv=1' => 'Nv/1',
-'nv=1/10' => '#/555',
-'nv=1/12' => '#/556',
-'nv=1/16' => 'Nv/1_16',
-'nv=1/160' => '#/571',
-'nv=1/2' => 'Nv/1_2',
-'nv=1/20' => '#/557',
-'nv=1/3' => 'Nv/1_3',
-'nv=1/32' => '#/558',
-'nv=1/320' => '#/572',
-'nv=1/4' => 'Nv/1_4',
-'nv=1/40' => '#/559',
-'nv=1/5' => '#/540',
-'nv=1/6' => 'Nv/1_6',
-'nv=1/64' => '#/560',
-'nv=1/7' => '#/541',
-'nv=1/8' => 'Nv/1_8',
-'nv=1/80' => '#/561',
-'nv=1/9' => '#/542',
-'nv=10' => 'Nv/10',
-'nv=100' => 'Nv/100',
-'nv=1000' => 'Nv/1000',
-'nv=10000' => 'Nv/10000',
-'nv=100000' => 'Nv/100000',
-'nv=1000000' => '#/584',
-'nv=10000000' => '#/585',
-'nv=100000000' => '#/587',
-'nv=10000000000' => '#/588',
-'nv=1000000000000' => '#/589',
-'nv=11' => 'Nv/11',
-'nv=11/12' => '#/573',
-'nv=11/2' => '#/562',
-'nv=12' => 'Nv/12',
-'nv=13' => 'Nv/13',
-'nv=13/2' => '#/563',
-'nv=14' => 'Nv/14',
-'nv=15' => 'Nv/15',
-'nv=15/2' => '#/564',
-'nv=16' => 'Nv/16',
-'nv=17' => 'Nv/17',
-'nv=17/2' => '#/565',
-'nv=18' => 'Nv/18',
-'nv=19' => 'Nv/19',
-'nv=2' => 'Nv/2',
-'nv=2/3' => 'Nv/2_3',
-'nv=2/5' => '#/543',
-'nv=20' => 'Nv/20',
-'nv=200' => 'Nv/200',
-'nv=2000' => 'Nv/2000',
-'nv=20000' => 'Nv/20000',
-'nv=200000' => '#/574',
-'nv=20000000' => '#/586',
-'nv=21' => '#/513',
-'nv=216000' => '#/575',
-'nv=22' => '#/514',
-'nv=23' => '#/515',
-'nv=24' => '#/516',
-'nv=25' => '#/517',
-'nv=26' => '#/518',
-'nv=27' => '#/519',
-'nv=28' => '#/520',
-'nv=29' => '#/521',
-'nv=3' => 'Nv/3',
-'nv=3/16' => 'Nv/3_16',
-'nv=3/2' => '#/544',
-'nv=3/20' => '#/566',
-'nv=3/4' => 'Nv/3_4',
-'nv=3/5' => '#/545',
-'nv=3/64' => '#/567',
-'nv=3/8' => '#/546',
-'nv=3/80' => '#/568',
-'nv=30' => 'Nv/30',
-'nv=300' => 'Nv/300',
-'nv=3000' => 'Nv/3000',
-'nv=30000' => 'Nv/30000',
-'nv=300000' => '#/576',
-'nv=31' => '#/522',
-'nv=32' => '#/523',
-'nv=33' => '#/524',
-'nv=34' => '#/525',
-'nv=35' => '#/526',
-'nv=36' => '#/527',
-'nv=37' => '#/528',
-'nv=38' => '#/529',
-'nv=39' => '#/530',
-'nv=4' => 'Nv/4',
-'nv=4/5' => '#/547',
-'nv=40' => 'Nv/40',
-'nv=400' => 'Nv/400',
-'nv=4000' => 'Nv/4000',
-'nv=40000' => 'Nv/40000',
-'nv=400000' => '#/577',
-'nv=41' => '#/531',
-'nv=42' => '#/532',
-'nv=43' => '#/533',
-'nv=432000' => '#/578',
-'nv=44' => '#/534',
-'nv=45' => '#/535',
-'nv=46' => '#/536',
-'nv=47' => '#/537',
-'nv=48' => '#/538',
-'nv=49' => '#/539',
-'nv=5' => 'Nv/5',
-'nv=5/12' => '#/569',
-'nv=5/2' => '#/548',
-'nv=5/6' => '#/549',
-'nv=5/8' => '#/550',
-'nv=50' => 'Nv/50',
-'nv=500' => 'Nv/500',
-'nv=5000' => 'Nv/5000',
-'nv=50000' => 'Nv/50000',
-'nv=500000' => '#/579',
-'nv=6' => 'Nv/6',
-'nv=60' => 'Nv/60',
-'nv=600' => 'Nv/600',
-'nv=6000' => 'Nv/6000',
-'nv=60000' => 'Nv/60000',
-'nv=600000' => '#/580',
-'nv=7' => 'Nv/7',
-'nv=7/12' => '#/570',
-'nv=7/2' => '#/551',
-'nv=7/8' => '#/552',
-'nv=70' => 'Nv/70',
-'nv=700' => 'Nv/700',
-'nv=7000' => 'Nv/7000',
-'nv=70000' => 'Nv/70000',
-'nv=700000' => '#/581',
-'nv=8' => 'Nv/8',
-'nv=80' => 'Nv/80',
-'nv=800' => 'Nv/800',
-'nv=8000' => 'Nv/8000',
-'nv=80000' => 'Nv/80000',
-'nv=800000' => '#/582',
-'nv=9' => 'Nv/9',
-'nv=9/2' => '#/553',
-'nv=90' => 'Nv/90',
-'nv=900' => 'Nv/900',
-'nv=9000' => 'Nv/9000',
-'nv=90000' => 'Nv/90000',
-'nv=900000' => '#/583',
-);
-
-# Maps property, table to file for those using loose matching. For paths
-# whose directory is '#', the file is in the form of a numeric index into
-# @inline_definitions
-%utf8::loose_to_file_of = (
-'adlam' => 'Scx/Adlm',
-'adlm' => 'Scx/Adlm',
-'aegeannumbers' => '#/336',
-'age=na' => 'Age/NA',
-'age=unassigned' => 'Age/NA',
-'age=v100' => 'Age/V100',
-'age=v11' => 'Age/V11',
-'age=v110' => 'Age/V110',
-'age=v120' => 'Age/V120',
-'age=v121' => '#/99',
-'age=v20' => 'Age/V20',
-'age=v21' => '#/96',
-'age=v30' => 'Age/V30',
-'age=v31' => 'Age/V31',
-'age=v32' => 'Age/V32',
-'age=v40' => 'Age/V40',
-'age=v41' => 'Age/V41',
-'age=v50' => 'Age/V50',
-'age=v51' => 'Age/V51',
-'age=v52' => 'Age/V52',
-'age=v60' => 'Age/V60',
-'age=v61' => 'Age/V61',
-'age=v62' => '#/97',
-'age=v63' => '#/98',
-'age=v70' => 'Age/V70',
-'age=v80' => 'Age/V80',
-'age=v90' => 'Age/V90',
-'aghb' => '#/627',
-'ahex' => '#/59',
-'ahex=f' => '#/!59',
-'ahex=false' => '#/!59',
-'ahex=n' => '#/!59',
-'ahex=no' => '#/!59',
-'ahex=t' => '#/59',
-'ahex=true' => '#/59',
-'ahex=y' => '#/59',
-'ahex=yes' => '#/59',
-'ahom' => '#/628',
-'alchemical' => '#/272',
-'alchemicalsymbols' => '#/272',
-'all' => '#/1',
-'alnum' => 'Perl/Alnum',
-'alpha' => 'Alpha/Y',
-'alpha=f' => '!Alpha/Y',
-'alpha=false' => '!Alpha/Y',
-'alpha=n' => '!Alpha/Y',
-'alpha=no' => '!Alpha/Y',
-'alpha=t' => 'Alpha/Y',
-'alpha=true' => 'Alpha/Y',
-'alpha=y' => 'Alpha/Y',
-'alpha=yes' => 'Alpha/Y',
-'alphabetic' => 'Alpha/Y',
-'alphabeticpf' => '#/319',
-'alphabeticpresentationforms' => '#/319',
-'anatolianhieroglyphs' => '#/648',
-'ancientgreekmusic' => '#/380',
-'ancientgreekmusicalnotation' => '#/380',
-'ancientgreeknumbers' => '#/390',
-'ancientsymbols' => '#/345',
-'any' => '#/2',
-'arab' => 'Scx/Arab',
-'arabic' => 'Scx/Arab',
-'arabicexta' => '#/273',
-'arabicextendeda' => '#/273',
-'arabicmath' => '#/274',
-'arabicmathematicalalphabeticsymbols' => '#/274',
-'arabicpfa' => '#/246',
-'arabicpfb' => '#/247',
-'arabicpresentationformsa' => '#/246',
-'arabicpresentationformsb' => '#/247',
-'arabicsup' => '#/248',
-'arabicsupplement' => '#/248',
-'armenian' => 'Scx/Armn',
-'armi' => '#/629',
-'armn' => 'Scx/Armn',
-'arrows' => '#/150',
-'ascii' => '#/130',
-'asciihexdigit' => '#/59',
-'assigned' => 'Perl/Assigned',
-'avestan' => '#/630',
-'avst' => '#/630',
-'bali' => '#/631',
-'balinese' => '#/631',
-'bamu' => '#/632',
-'bamum' => '#/632',
-'bamumsup' => '#/219',
-'bamumsupplement' => '#/219',
-'basiclatin' => '#/130',
-'bass' => '#/633',
-'bassavah' => '#/633',
-'batak' => '#/634',
-'batk' => '#/634',
-'bc=al' => 'Bc/AL',
-'bc=an' => 'Bc/AN',
-'bc=arabicletter' => 'Bc/AL',
-'bc=arabicnumber' => 'Bc/AN',
-'bc=b' => 'Bc/B',
-'bc=bn' => 'Bc/BN',
-'bc=boundaryneutral' => 'Bc/BN',
-'bc=commonseparator' => 'Bc/CS',
-'bc=cs' => 'Bc/CS',
-'bc=en' => 'Bc/EN',
-'bc=es' => 'Bc/ES',
-'bc=et' => 'Bc/ET',
-'bc=europeannumber' => 'Bc/EN',
-'bc=europeanseparator' => 'Bc/ES',
-'bc=europeanterminator' => 'Bc/ET',
-'bc=firststrongisolate' => '#/101',
-'bc=fsi' => '#/101',
-'bc=l' => 'Bc/L',
-'bc=lefttoright' => 'Bc/L',
-'bc=lefttorightembedding' => '#/102',
-'bc=lefttorightisolate' => '#/103',
-'bc=lefttorightoverride' => '#/104',
-'bc=lre' => '#/102',
-'bc=lri' => '#/103',
-'bc=lro' => '#/104',
-'bc=nonspacingmark' => 'Bc/NSM',
-'bc=nsm' => 'Bc/NSM',
-'bc=on' => 'Bc/ON',
-'bc=otherneutral' => 'Bc/ON',
-'bc=paragraphseparator' => 'Bc/B',
-'bc=pdf' => '#/105',
-'bc=pdi' => '#/106',
-'bc=popdirectionalformat' => '#/105',
-'bc=popdirectionalisolate' => '#/106',
-'bc=r' => 'Bc/R',
-'bc=righttoleft' => 'Bc/R',
-'bc=righttoleftembedding' => '#/107',
-'bc=righttoleftisolate' => '#/108',
-'bc=righttoleftoverride' => '#/109',
-'bc=rle' => '#/107',
-'bc=rli' => '#/108',
-'bc=rlo' => '#/109',
-'bc=s' => '#/100',
-'bc=segmentseparator' => '#/100',
-'bc=whitespace' => 'Bc/WS',
-'bc=ws' => 'Bc/WS',
-'beng' => 'Scx/Beng',
-'bengali' => 'Scx/Beng',
-'bhaiksuki' => 'Scx/Bhks',
-'bhks' => 'Scx/Bhks',
-'bidic' => 'BidiC/Y',
-'bidic=f' => '!BidiC/Y',
-'bidic=false' => '!BidiC/Y',
-'bidic=n' => '!BidiC/Y',
-'bidic=no' => '!BidiC/Y',
-'bidic=t' => 'BidiC/Y',
-'bidic=true' => 'BidiC/Y',
-'bidic=y' => 'BidiC/Y',
-'bidic=yes' => 'BidiC/Y',
-'bidicontrol' => 'BidiC/Y',
-'bidim' => 'BidiM/Y',
-'bidim=f' => '!BidiM/Y',
-'bidim=false' => '!BidiM/Y',
-'bidim=n' => '!BidiM/Y',
-'bidim=no' => '!BidiM/Y',
-'bidim=t' => 'BidiM/Y',
-'bidim=true' => 'BidiM/Y',
-'bidim=y' => 'BidiM/Y',
-'bidim=yes' => 'BidiM/Y',
-'bidimirrored' => 'BidiM/Y',
-'blank' => 'Perl/Blank',
-'blk=adlam' => '#/131',
-'blk=aegeannumbers' => '#/336',
-'blk=ahom' => '#/119',
-'blk=alchemical' => '#/272',
-'blk=alchemicalsymbols' => '#/272',
-'blk=alphabeticpf' => '#/319',
-'blk=alphabeticpresentationforms' => '#/319',
-'blk=anatolianhieroglyphs' => '#/397',
-'blk=ancientgreekmusic' => '#/380',
-'blk=ancientgreekmusicalnotation' => '#/380',
-'blk=ancientgreeknumbers' => '#/390',
-'blk=ancientsymbols' => '#/345',
-'blk=arabic' => '#/149',
-'blk=arabicexta' => '#/273',
-'blk=arabicextendeda' => '#/273',
-'blk=arabicmath' => '#/274',
-'blk=arabicmathematicalalphabeticsymbols' => '#/274',
-'blk=arabicpfa' => '#/246',
-'blk=arabicpfb' => '#/247',
-'blk=arabicpresentationformsa' => '#/246',
-'blk=arabicpresentationformsb' => '#/247',
-'blk=arabicsup' => '#/248',
-'blk=arabicsupplement' => '#/248',
-'blk=armenian' => '#/217',
-'blk=arrows' => '#/150',
-'blk=ascii' => '#/130',
-'blk=avestan' => '#/176',
-'blk=balinese' => '#/218',
-'blk=bamum' => '#/132',
-'blk=bamumsup' => '#/219',
-'blk=bamumsupplement' => '#/219',
-'blk=basiclatin' => '#/130',
-'blk=bassavah' => '#/220',
-'blk=batak' => '#/133',
-'blk=bengali' => '#/177',
-'blk=bhaiksuki' => '#/249',
-'blk=blockelements' => '#/337',
-'blk=bopomofo' => '#/221',
-'blk=bopomofoext' => '#/294',
-'blk=bopomofoextended' => '#/294',
-'blk=boxdrawing' => '#/275',
-'blk=brahmi' => '#/151',
-'blk=braille' => '#/178',
-'blk=braillepatterns' => '#/178',
-'blk=buginese' => '#/222',
-'blk=buhid' => '#/134',
-'blk=byzantinemusic' => '#/346',
-'blk=byzantinemusicalsymbols' => '#/346',
-'blk=canadiansyllabics' => '#/129',
-'blk=carian' => '#/152',
-'blk=caucasianalbanian' => '#/381',
-'blk=chakma' => '#/153',
-'blk=cham' => '#/120',
-'blk=cherokee' => '#/223',
-'blk=cherokeesup' => '#/295',
-'blk=cherokeesupplement' => '#/295',
-'blk=chesssymbols' => '#/320',
-'blk=cjk' => '#/111',
-'blk=cjkcompat' => '#/250',
-'blk=cjkcompatforms' => '#/347',
-'blk=cjkcompatibility' => '#/250',
-'blk=cjkcompatibilityforms' => '#/347',
-'blk=cjkcompatibilityideographs' => '#/391',
-'blk=cjkcompatibilityideographssupplement' => '#/402',
-'blk=cjkcompatideographs' => '#/391',
-'blk=cjkcompatideographssup' => '#/402',
-'blk=cjkexta' => '#/179',
-'blk=cjkextb' => '#/180',
-'blk=cjkextc' => '#/181',
-'blk=cjkextd' => '#/182',
-'blk=cjkexte' => '#/183',
-'blk=cjkextf' => '#/184',
-'blk=cjkradicalssup' => '#/348',
-'blk=cjkradicalssupplement' => '#/348',
-'blk=cjkstrokes' => '#/276',
-'blk=cjksymbols' => '#/277',
-'blk=cjksymbolsandpunctuation' => '#/277',
-'blk=cjkunifiedideographs' => '#/111',
-'blk=cjkunifiedideographsextensiona' => '#/179',
-'blk=cjkunifiedideographsextensionb' => '#/180',
-'blk=cjkunifiedideographsextensionc' => '#/181',
-'blk=cjkunifiedideographsextensiond' => '#/182',
-'blk=cjkunifiedideographsextensione' => '#/183',
-'blk=cjkunifiedideographsextensionf' => '#/184',
-'blk=combiningdiacriticalmarks' => '#/324',
-'blk=combiningdiacriticalmarksextended' => '#/357',
-'blk=combiningdiacriticalmarksforsymbols' => '#/403',
-'blk=combiningdiacriticalmarkssupplement' => '#/358',
-'blk=combininghalfmarks' => '#/253',
-'blk=combiningmarksforsymbols' => '#/403',
-'blk=commonindicnumberforms' => '#/373',
-'blk=compatjamo' => '#/278',
-'blk=controlpictures' => '#/355',
-'blk=coptic' => '#/154',
-'blk=copticepactnumbers' => '#/385',
-'blk=countingrod' => '#/296',
-'blk=countingrodnumerals' => '#/296',
-'blk=cuneiform' => '#/251',
-'blk=cuneiformnumbers' => '#/368',
-'blk=cuneiformnumbersandpunctuation' => '#/368',
-'blk=currencysymbols' => '#/356',
-'blk=cypriotsyllabary' => '#/369',
-'blk=cyrillic' => '#/224',
-'blk=cyrillicexta' => '#/321',
-'blk=cyrillicextb' => '#/322',
-'blk=cyrillicextc' => '#/323',
-'blk=cyrillicextendeda' => '#/321',
-'blk=cyrillicextendedb' => '#/322',
-'blk=cyrillicextendedc' => '#/323',
-'blk=cyrillicsup' => '#/297',
-'blk=cyrillicsupplement' => '#/297',
-'blk=cyrillicsupplementary' => '#/297',
-'blk=deseret' => '#/185',
-'blk=devanagari' => '#/279',
-'blk=devanagariext' => '#/338',
-'blk=devanagariextended' => '#/338',
-'blk=diacriticals' => '#/324',
-'blk=diacriticalsext' => '#/357',
-'blk=diacriticalsforsymbols' => '#/403',
-'blk=diacriticalssup' => '#/358',
-'blk=dingbats' => '#/225',
-'blk=dogra' => '#/135',
-'blk=domino' => '#/155',
-'blk=dominotiles' => '#/155',
-'blk=duployan' => '#/226',
-'blk=earlydynasticcuneiform' => '#/404',
-'blk=egyptianhieroglyphformatcontrols' => '#/409',
-'blk=egyptianhieroglyphs' => '#/392',
-'blk=elbasan' => '#/186',
-'blk=elymaic' => '#/187',
-'blk=emoticons' => '#/252',
-'blk=enclosedalphanum' => '#/370',
-'blk=enclosedalphanumerics' => '#/370',
-'blk=enclosedalphanumericsupplement' => '#/393',
-'blk=enclosedalphanumsup' => '#/393',
-'blk=enclosedcjk' => '#/298',
-'blk=enclosedcjklettersandmonths' => '#/298',
-'blk=enclosedideographicsup' => '#/405',
-'blk=enclosedideographicsupplement' => '#/405',
-'blk=ethiopic' => '#/227',
-'blk=ethiopicext' => '#/299',
-'blk=ethiopicexta' => '#/325',
-'blk=ethiopicextended' => '#/299',
-'blk=ethiopicextendeda' => '#/325',
-'blk=ethiopicsup' => '#/300',
-'blk=ethiopicsupplement' => '#/300',
-'blk=generalpunctuation' => '#/313',
-'blk=geometricshapes' => '#/359',
-'blk=geometricshapesext' => '#/386',
-'blk=geometricshapesextended' => '#/386',
-'blk=georgian' => '#/228',
-'blk=georgianext' => '#/301',
-'blk=georgianextended' => '#/301',
-'blk=georgiansup' => '#/302',
-'blk=georgiansupplement' => '#/302',
-'blk=glagolitic' => '#/280',
-'blk=glagoliticsup' => '#/339',
-'blk=glagoliticsupplement' => '#/339',
-'blk=gothic' => '#/156',
-'blk=grantha' => '#/188',
-'blk=greek' => '#/136',
-'blk=greekandcoptic' => '#/136',
-'blk=greekext' => '#/229',
-'blk=greekextended' => '#/229',
-'blk=gujarati' => '#/230',
-'blk=gunjalagondi' => '#/326',
-'blk=gurmukhi' => '#/231',
-'blk=halfandfullforms' => '#/371',
-'blk=halfmarks' => '#/253',
-'blk=halfwidthandfullwidthforms' => '#/371',
-'blk=hangul' => '#/157',
-'blk=hangulcompatibilityjamo' => '#/278',
-'blk=hanguljamo' => '#/121',
-'blk=hanguljamoextendeda' => '#/233',
-'blk=hanguljamoextendedb' => '#/234',
-'blk=hangulsyllables' => '#/157',
-'blk=hanifirohingya' => '#/349',
-'blk=hanunoo' => '#/189',
-'blk=hatran' => '#/158',
-'blk=hebrew' => '#/159',
-'blk=highprivateusesurrogates' => '#/372',
-'blk=highpusurrogates' => '#/372',
-'blk=highsurrogates' => '#/350',
-'blk=hiragana' => '#/232',
-'blk=idc' => '#/112',
-'blk=ideographicdescriptioncharacters' => '#/112',
-'blk=ideographicsymbols' => '#/387',
-'blk=ideographicsymbolsandpunctuation' => '#/387',
-'blk=imperialaramaic' => '#/360',
-'blk=indicnumberforms' => '#/373',
-'blk=indicsiyaqnumbers' => '#/382',
-'blk=inscriptionalpahlavi' => '#/398',
-'blk=inscriptionalparthian' => '#/400',
-'blk=ipaext' => '#/160',
-'blk=ipaextensions' => '#/160',
-'blk=jamo' => '#/121',
-'blk=jamoexta' => '#/233',
-'blk=jamoextb' => '#/234',
-'blk=javanese' => '#/235',
-'blk=kaithi' => '#/161',
-'blk=kanaexta' => '#/236',
-'blk=kanaextendeda' => '#/236',
-'blk=kanasup' => '#/190',
-'blk=kanasupplement' => '#/190',
-'blk=kanbun' => '#/162',
-'blk=kangxi' => '#/163',
-'blk=kangxiradicals' => '#/163',
-'blk=kannada' => '#/191',
-'blk=katakana' => '#/237',
-'blk=katakanaext' => '#/303',
-'blk=katakanaphoneticextensions' => '#/303',
-'blk=kayahli' => '#/192',
-'blk=kharoshthi' => '#/281',
-'blk=khmer' => '#/137',
-'blk=khmersymbols' => '#/327',
-'blk=khojki' => '#/164',
-'blk=khudawadi' => '#/254',
-'blk=lao' => '#/113',
-'blk=latin1' => '#/165',
-'blk=latin1sup' => '#/165',
-'blk=latin1supplement' => '#/165',
-'blk=latinexta' => '#/255',
-'blk=latinextadditional' => '#/388',
-'blk=latinextb' => '#/256',
-'blk=latinextc' => '#/257',
-'blk=latinextd' => '#/258',
-'blk=latinexte' => '#/259',
-'blk=latinextendeda' => '#/255',
-'blk=latinextendedadditional' => '#/388',
-'blk=latinextendedb' => '#/256',
-'blk=latinextendedc' => '#/257',
-'blk=latinextendedd' => '#/258',
-'blk=latinextendede' => '#/259',
-'blk=lepcha' => '#/166',
-'blk=letterlikesymbols' => '#/383',
-'blk=limbu' => '#/138',
-'blk=lineara' => '#/193',
-'blk=linearbideograms' => '#/374',
-'blk=linearbsyllabary' => '#/375',
-'blk=lisu' => '#/122',
-'blk=lowsurrogates' => '#/340',
-'blk=lycian' => '#/167',
-'blk=lydian' => '#/168',
-'blk=mahajani' => '#/238',
-'blk=mahjong' => '#/194',
-'blk=mahjongtiles' => '#/194',
-'blk=makasar' => '#/195',
-'blk=malayalam' => '#/260',
-'blk=mandaic' => '#/196',
-'blk=manichaean' => '#/282',
-'blk=marchen' => '#/197',
-'blk=masaramgondi' => '#/328',
-'blk=mathalphanum' => '#/329',
-'blk=mathematicalalphanumericsymbols' => '#/329',
-'blk=mathematicaloperators' => '#/341',
-'blk=mathoperators' => '#/341',
-'blk=mayannumerals' => '#/342',
-'blk=medefaidrin' => '#/304',
-'blk=meeteimayek' => '#/305',
-'blk=meeteimayekext' => '#/351',
-'blk=meeteimayekextensions' => '#/351',
-'blk=mendekikakui' => '#/330',
-'blk=meroiticcursive' => '#/361',
-'blk=meroitichieroglyphs' => '#/394',
-'blk=miao' => '#/123',
-'blk=miscarrows' => '#/283',
-'blk=miscellaneousmathematicalsymbolsa' => '#/376',
-'blk=miscellaneousmathematicalsymbolsb' => '#/377',
-'blk=miscellaneoussymbols' => '#/306',
-'blk=miscellaneoussymbolsandarrows' => '#/283',
-'blk=miscellaneoussymbolsandpictographs' => '#/362',
-'blk=miscellaneoustechnical' => '#/343',
-'blk=miscmathsymbolsa' => '#/376',
-'blk=miscmathsymbolsb' => '#/377',
-'blk=miscpictographs' => '#/362',
-'blk=miscsymbols' => '#/306',
-'blk=misctechnical' => '#/343',
-'blk=modi' => '#/124',
-'blk=modifierletters' => '#/363',
-'blk=modifiertoneletters' => '#/395',
-'blk=mongolian' => '#/261',
-'blk=mongoliansup' => '#/331',
-'blk=mongoliansupplement' => '#/331',
-'blk=mro' => '#/114',
-'blk=multani' => '#/198',
-'blk=music' => '#/139',
-'blk=musicalsymbols' => '#/139',
-'blk=myanmar' => '#/199',
-'blk=myanmarexta' => '#/307',
-'blk=myanmarextb' => '#/308',
-'blk=myanmarextendeda' => '#/307',
-'blk=myanmarextendedb' => '#/308',
-'blk=nabataean' => '#/262',
-'blk=nandinagari' => '#/309',
-'blk=nb' => 'Blk/NB',
-'blk=newa' => '#/125',
-'blk=newtailue' => '#/263',
-'blk=nko' => '#/115',
-'blk=noblock' => 'Blk/NB',
-'blk=numberforms' => '#/310',
-'blk=nushu' => '#/140',
-'blk=nyiakengpuachuehmong' => '#/399',
-'blk=ocr' => '#/116',
-'blk=ogham' => '#/141',
-'blk=olchiki' => '#/200',
-'blk=oldhungarian' => '#/332',
-'blk=olditalic' => '#/264',
-'blk=oldnortharabian' => '#/364',
-'blk=oldpermic' => '#/265',
-'blk=oldpersian' => '#/284',
-'blk=oldsogdian' => '#/285',
-'blk=oldsoutharabian' => '#/365',
-'blk=oldturkic' => '#/266',
-'blk=opticalcharacterrecognition' => '#/116',
-'blk=oriya' => '#/142',
-'blk=ornamentaldingbats' => '#/389',
-'blk=osage' => '#/143',
-'blk=osmanya' => '#/201',
-'blk=ottomansiyaqnumbers' => '#/396',
-'blk=pahawhhmong' => '#/311',
-'blk=palmyrene' => '#/267',
-'blk=paucinhau' => '#/268',
-'blk=phagspa' => '#/202',
-'blk=phaistos' => '#/239',
-'blk=phaistosdisc' => '#/239',
-'blk=phoenician' => '#/286',
-'blk=phoneticext' => '#/312',
-'blk=phoneticextensions' => '#/312',
-'blk=phoneticextensionssupplement' => '#/352',
-'blk=phoneticextsup' => '#/352',
-'blk=playingcards' => '#/333',
-'blk=privateuse' => '#/117',
-'blk=privateusearea' => '#/117',
-'blk=psalterpahlavi' => '#/353',
-'blk=pua' => '#/117',
-'blk=punctuation' => '#/313',
-'blk=rejang' => '#/169',
-'blk=rumi' => '#/126',
-'blk=ruminumeralsymbols' => '#/126',
-'blk=runic' => '#/144',
-'blk=samaritan' => '#/269',
-'blk=saurashtra' => '#/287',
-'blk=sharada' => '#/203',
-'blk=shavian' => '#/204',
-'blk=shorthandformatcontrols' => '#/406',
-'blk=siddham' => '#/205',
-'blk=sinhala' => '#/206',
-'blk=sinhalaarchaicnumbers' => '#/401',
-'blk=smallforms' => '#/288',
-'blk=smallformvariants' => '#/288',
-'blk=smallkanaext' => '#/334',
-'blk=smallkanaextension' => '#/334',
-'blk=sogdian' => '#/207',
-'blk=sorasompeng' => '#/314',
-'blk=soyombo' => '#/208',
-'blk=spacingmodifierletters' => '#/363',
-'blk=specials' => '#/240',
-'blk=sundanese' => '#/270',
-'blk=sundanesesup' => '#/335',
-'blk=sundanesesupplement' => '#/335',
-'blk=suparrowsa' => '#/289',
-'blk=suparrowsb' => '#/290',
-'blk=suparrowsc' => '#/291',
-'blk=superandsub' => '#/315',
-'blk=superscriptsandsubscripts' => '#/315',
-'blk=supmathoperators' => '#/378',
-'blk=supplementalarrowsa' => '#/289',
-'blk=supplementalarrowsb' => '#/290',
-'blk=supplementalarrowsc' => '#/291',
-'blk=supplementalmathematicaloperators' => '#/378',
-'blk=supplementalpunctuation' => '#/354',
-'blk=supplementalsymbolsandpictographs' => '#/407',
-'blk=supplementaryprivateuseareaa' => '#/209',
-'blk=supplementaryprivateuseareab' => '#/210',
-'blk=suppuaa' => '#/209',
-'blk=suppuab' => '#/210',
-'blk=suppunctuation' => '#/354',
-'blk=supsymbolsandpictographs' => '#/407',
-'blk=suttonsignwriting' => '#/384',
-'blk=sylotinagri' => '#/316',
-'blk=symbolsandpictographsexta' => '#/408',
-'blk=symbolsandpictographsextendeda' => '#/408',
-'blk=syriac' => '#/170',
-'blk=syriacsup' => '#/271',
-'blk=syriacsupplement' => '#/271',
-'blk=tagalog' => '#/211',
-'blk=tagbanwa' => '#/241',
-'blk=tags' => '#/127',
-'blk=taile' => '#/145',
-'blk=taitham' => '#/212',
-'blk=taiviet' => '#/213',
-'blk=taixuanjing' => '#/317',
-'blk=taixuanjingsymbols' => '#/317',
-'blk=takri' => '#/146',
-'blk=tamil' => '#/147',
-'blk=tamilsup' => '#/242',
-'blk=tamilsupplement' => '#/242',
-'blk=tangut' => '#/171',
-'blk=tangutcomponents' => '#/379',
-'blk=telugu' => '#/172',
-'blk=thaana' => '#/173',
-'blk=thai' => '#/128',
-'blk=tibetan' => '#/214',
-'blk=tifinagh' => '#/243',
-'blk=tirhuta' => '#/215',
-'blk=transportandmap' => '#/366',
-'blk=transportandmapsymbols' => '#/366',
-'blk=ucas' => '#/129',
-'blk=ucasext' => '#/216',
-'blk=ugaritic' => '#/244',
-'blk=unifiedcanadianaboriginalsyllabics' => '#/129',
-'blk=unifiedcanadianaboriginalsyllabicsextended' => '#/216',
-'blk=vai' => '#/118',
-'blk=variationselectors' => '#/110',
-'blk=variationselectorssupplement' => '#/148',
-'blk=vedicext' => '#/245',
-'blk=vedicextensions' => '#/245',
-'blk=verticalforms' => '#/344',
-'blk=vs' => '#/110',
-'blk=vssup' => '#/148',
-'blk=wancho' => '#/174',
-'blk=warangciti' => '#/292',
-'blk=yijing' => '#/175',
-'blk=yijinghexagramsymbols' => '#/175',
-'blk=yiradicals' => '#/293',
-'blk=yisyllables' => '#/318',
-'blk=zanabazarsquare' => '#/367',
-'blockelements' => '#/337',
-'bopo' => 'Scx/Bopo',
-'bopomofo' => 'Scx/Bopo',
-'bopomofoext' => '#/294',
-'bopomofoextended' => '#/294',
-'boxdrawing' => '#/275',
-'bpt=c' => 'Bpt/C',
-'bpt=close' => 'Bpt/C',
-'bpt=n' => 'Bpt/N',
-'bpt=none' => 'Bpt/N',
-'bpt=o' => 'Bpt/O',
-'bpt=open' => 'Bpt/O',
-'brah' => '#/635',
-'brahmi' => '#/635',
-'brai' => '#/178',
-'braille' => '#/178',
-'braillepatterns' => '#/178',
-'bugi' => '#/636',
-'buginese' => '#/636',
-'buhd' => '#/637',
-'buhid' => '#/637',
-'byzantinemusic' => '#/346',
-'byzantinemusicalsymbols' => '#/346',
-'c' => 'Gc/C',
-'cakm' => 'Scx/Cakm',
-'canadianaboriginal' => '#/638',
-'canadiansyllabics' => '#/129',
-'cans' => '#/638',
-'cari' => '#/639',
-'carian' => '#/639',
-'cased' => 'Cased/Y',
-'cased=f' => '!Cased/Y',
-'cased=false' => '!Cased/Y',
-'cased=n' => '!Cased/Y',
-'cased=no' => '!Cased/Y',
-'cased=t' => 'Cased/Y',
-'cased=true' => 'Cased/Y',
-'cased=y' => 'Cased/Y',
-'cased=yes' => 'Cased/Y',
-'casedletter' => 'Gc/LC',
-'caseignorable' => 'CI/Y',
-'caucasianalbanian' => '#/627',
-'cc' => '#/413',
-'ccc=a' => 'Ccc/A',
-'ccc=above' => 'Ccc/A',
-'ccc=aboveleft' => 'Ccc/AL',
-'ccc=aboveright' => 'Ccc/AR',
-'ccc=al' => 'Ccc/AL',
-'ccc=ar' => 'Ccc/AR',
-'ccc=ata' => '#/21',
-'ccc=atar' => 'Ccc/ATAR',
-'ccc=atb' => '#/22',
-'ccc=atbl' => '#/0',
-'ccc=attachedabove' => '#/21',
-'ccc=attachedaboveright' => 'Ccc/ATAR',
-'ccc=attachedbelow' => '#/22',
-'ccc=attachedbelowleft' => '#/0',
-'ccc=b' => 'Ccc/B',
-'ccc=below' => 'Ccc/B',
-'ccc=belowleft' => '#/17',
-'ccc=belowright' => 'Ccc/BR',
-'ccc=bl' => '#/17',
-'ccc=br' => 'Ccc/BR',
-'ccc=ccc10' => '#/23',
-'ccc=ccc103' => '#/52',
-'ccc=ccc107' => '#/53',
-'ccc=ccc11' => '#/24',
-'ccc=ccc118' => '#/54',
-'ccc=ccc12' => '#/25',
-'ccc=ccc122' => '#/55',
-'ccc=ccc129' => '#/56',
-'ccc=ccc13' => '#/26',
-'ccc=ccc130' => '#/57',
-'ccc=ccc132' => '#/58',
-'ccc=ccc133' => '#/0',
-'ccc=ccc14' => '#/27',
-'ccc=ccc15' => '#/28',
-'ccc=ccc16' => '#/29',
-'ccc=ccc17' => '#/30',
-'ccc=ccc18' => '#/31',
-'ccc=ccc19' => '#/32',
-'ccc=ccc20' => '#/33',
-'ccc=ccc21' => '#/34',
-'ccc=ccc22' => '#/35',
-'ccc=ccc23' => '#/36',
-'ccc=ccc24' => '#/37',
-'ccc=ccc25' => '#/38',
-'ccc=ccc26' => '#/39',
-'ccc=ccc27' => '#/40',
-'ccc=ccc28' => '#/41',
-'ccc=ccc29' => '#/42',
-'ccc=ccc30' => '#/43',
-'ccc=ccc31' => '#/44',
-'ccc=ccc32' => '#/45',
-'ccc=ccc33' => '#/46',
-'ccc=ccc34' => '#/47',
-'ccc=ccc35' => '#/48',
-'ccc=ccc36' => '#/49',
-'ccc=ccc84' => '#/50',
-'ccc=ccc91' => '#/51',
-'ccc=da' => '#/18',
-'ccc=db' => 'Ccc/DB',
-'ccc=doubleabove' => '#/18',
-'ccc=doublebelow' => 'Ccc/DB',
-'ccc=iotasubscript' => '#/19',
-'ccc=is' => '#/19',
-'ccc=kanavoicing' => '#/20',
-'ccc=kv' => '#/20',
-'ccc=l' => '#/15',
-'ccc=left' => '#/15',
-'ccc=nk' => 'Ccc/NK',
-'ccc=notreordered' => 'Ccc/NR',
-'ccc=nr' => 'Ccc/NR',
-'ccc=nukta' => 'Ccc/NK',
-'ccc=ov' => 'Ccc/OV',
-'ccc=overlay' => 'Ccc/OV',
-'ccc=r' => '#/16',
-'ccc=right' => '#/16',
-'ccc=virama' => 'Ccc/VR',
-'ccc=vr' => 'Ccc/VR',
-'ce' => 'CE/Y',
-'ce=f' => '!CE/Y',
-'ce=false' => '!CE/Y',
-'ce=n' => '!CE/Y',
-'ce=no' => '!CE/Y',
-'ce=t' => 'CE/Y',
-'ce=true' => 'CE/Y',
-'ce=y' => 'CE/Y',
-'ce=yes' => 'CE/Y',
-'cf' => 'Gc/Cf',
-'chakma' => 'Scx/Cakm',
-'cham' => 'Scx/Cham',
-'changeswhencasefolded' => 'CWCF/Y',
-'changeswhencasemapped' => 'CWCM/Y',
-'changeswhenlowercased' => 'CWL/Y',
-'changeswhennfkccasefolded' => 'CWKCF/Y',
-'changeswhentitlecased' => 'CWT/Y',
-'changeswhenuppercased' => 'CWU/Y',
-'cher' => '#/640',
-'cherokee' => '#/640',
-'cherokeesup' => '#/295',
-'cherokeesupplement' => '#/295',
-'chesssymbols' => '#/320',
-'ci' => 'CI/Y',
-'ci=f' => '!CI/Y',
-'ci=false' => '!CI/Y',
-'ci=n' => '!CI/Y',
-'ci=no' => '!CI/Y',
-'ci=t' => 'CI/Y',
-'ci=true' => 'CI/Y',
-'ci=y' => 'CI/Y',
-'ci=yes' => 'CI/Y',
-'cjk' => '#/111',
-'cjkcompat' => '#/250',
-'cjkcompatforms' => '#/347',
-'cjkcompatibility' => '#/250',
-'cjkcompatibilityforms' => '#/347',
-'cjkcompatibilityideographs' => '#/391',
-'cjkcompatibilityideographssupplement' => '#/402',
-'cjkcompatideographs' => '#/391',
-'cjkcompatideographssup' => '#/402',
-'cjkexta' => '#/179',
-'cjkextb' => '#/180',
-'cjkextc' => '#/181',
-'cjkextd' => '#/182',
-'cjkexte' => '#/183',
-'cjkextf' => '#/184',
-'cjkradicalssup' => '#/348',
-'cjkradicalssupplement' => '#/348',
-'cjkstrokes' => '#/276',
-'cjksymbols' => '#/277',
-'cjksymbolsandpunctuation' => '#/277',
-'cjkunifiedideographs' => '#/111',
-'cjkunifiedideographsextensiona' => '#/179',
-'cjkunifiedideographsextensionb' => '#/180',
-'cjkunifiedideographsextensionc' => '#/181',
-'cjkunifiedideographsextensiond' => '#/182',
-'cjkunifiedideographsextensione' => '#/183',
-'cjkunifiedideographsextensionf' => '#/184',
-'closepunctuation' => 'Gc/Pe',
-'cn' => 'Gc/Cn',
-'cntrl' => '#/413',
-'co' => '#/414',
-'combiningdiacriticalmarks' => '#/324',
-'combiningdiacriticalmarksextended' => '#/357',
-'combiningdiacriticalmarksforsymbols' => '#/403',
-'combiningdiacriticalmarkssupplement' => '#/358',
-'combininghalfmarks' => '#/253',
-'combiningmark' => 'Gc/M',
-'combiningmarksforsymbols' => '#/403',
-'common' => 'Scx/Zyyy',
-'commonindicnumberforms' => '#/373',
-'compatjamo' => '#/278',
-'compex' => 'CompEx/Y',
-'compex=f' => '!CompEx/Y',
-'compex=false' => '!CompEx/Y',
-'compex=n' => '!CompEx/Y',
-'compex=no' => '!CompEx/Y',
-'compex=t' => 'CompEx/Y',
-'compex=true' => 'CompEx/Y',
-'compex=y' => 'CompEx/Y',
-'compex=yes' => 'CompEx/Y',
-'compositionexclusion' => 'CE/Y',
-'connectorpunctuation' => 'Gc/Pc',
-'control' => '#/413',
-'controlpictures' => '#/355',
-'copt' => 'Scx/Copt',
-'coptic' => 'Scx/Copt',
-'copticepactnumbers' => '#/385',
-'countingrod' => '#/296',
-'countingrodnumerals' => '#/296',
-'cprt' => 'Scx/Cprt',
-'cs' => '#/14',
-'cuneiform' => 'Scx/Xsux',
-'cuneiformnumbers' => '#/368',
-'cuneiformnumbersandpunctuation' => '#/368',
-'currencysymbol' => 'Gc/Sc',
-'currencysymbols' => '#/356',
-'cwcf' => 'CWCF/Y',
-'cwcf=f' => '!CWCF/Y',
-'cwcf=false' => '!CWCF/Y',
-'cwcf=n' => '!CWCF/Y',
-'cwcf=no' => '!CWCF/Y',
-'cwcf=t' => 'CWCF/Y',
-'cwcf=true' => 'CWCF/Y',
-'cwcf=y' => 'CWCF/Y',
-'cwcf=yes' => 'CWCF/Y',
-'cwcm' => 'CWCM/Y',
-'cwcm=f' => '!CWCM/Y',
-'cwcm=false' => '!CWCM/Y',
-'cwcm=n' => '!CWCM/Y',
-'cwcm=no' => '!CWCM/Y',
-'cwcm=t' => 'CWCM/Y',
-'cwcm=true' => 'CWCM/Y',
-'cwcm=y' => 'CWCM/Y',
-'cwcm=yes' => 'CWCM/Y',
-'cwkcf' => 'CWKCF/Y',
-'cwkcf=f' => '!CWKCF/Y',
-'cwkcf=false' => '!CWKCF/Y',
-'cwkcf=n' => '!CWKCF/Y',
-'cwkcf=no' => '!CWKCF/Y',
-'cwkcf=t' => 'CWKCF/Y',
-'cwkcf=true' => 'CWKCF/Y',
-'cwkcf=y' => 'CWKCF/Y',
-'cwkcf=yes' => 'CWKCF/Y',
-'cwl' => 'CWL/Y',
-'cwl=f' => '!CWL/Y',
-'cwl=false' => '!CWL/Y',
-'cwl=n' => '!CWL/Y',
-'cwl=no' => '!CWL/Y',
-'cwl=t' => 'CWL/Y',
-'cwl=true' => 'CWL/Y',
-'cwl=y' => 'CWL/Y',
-'cwl=yes' => 'CWL/Y',
-'cwt' => 'CWT/Y',
-'cwt=f' => '!CWT/Y',
-'cwt=false' => '!CWT/Y',
-'cwt=n' => '!CWT/Y',
-'cwt=no' => '!CWT/Y',
-'cwt=t' => 'CWT/Y',
-'cwt=true' => 'CWT/Y',
-'cwt=y' => 'CWT/Y',
-'cwt=yes' => 'CWT/Y',
-'cwu' => 'CWU/Y',
-'cwu=f' => '!CWU/Y',
-'cwu=false' => '!CWU/Y',
-'cwu=n' => '!CWU/Y',
-'cwu=no' => '!CWU/Y',
-'cwu=t' => 'CWU/Y',
-'cwu=true' => 'CWU/Y',
-'cwu=y' => 'CWU/Y',
-'cwu=yes' => 'CWU/Y',
-'cypriot' => 'Scx/Cprt',
-'cypriotsyllabary' => '#/369',
-'cyrillic' => 'Scx/Cyrl',
-'cyrillicexta' => '#/321',
-'cyrillicextb' => '#/322',
-'cyrillicextc' => '#/323',
-'cyrillicextendeda' => '#/321',
-'cyrillicextendedb' => '#/322',
-'cyrillicextendedc' => '#/323',
-'cyrillicsup' => '#/297',
-'cyrillicsupplement' => '#/297',
-'cyrillicsupplementary' => '#/297',
-'cyrl' => 'Scx/Cyrl',
-'dash' => 'Dash/Y',
-'dash=f' => '!Dash/Y',
-'dash=false' => '!Dash/Y',
-'dash=n' => '!Dash/Y',
-'dash=no' => '!Dash/Y',
-'dash=t' => 'Dash/Y',
-'dash=true' => 'Dash/Y',
-'dash=y' => 'Dash/Y',
-'dash=yes' => 'Dash/Y',
-'dashpunctuation' => 'Gc/Pd',
-'decimalnumber' => 'Gc/Nd',
-'defaultignorablecodepoint' => 'DI/Y',
-'dep' => 'Dep/Y',
-'dep=f' => '!Dep/Y',
-'dep=false' => '!Dep/Y',
-'dep=n' => '!Dep/Y',
-'dep=no' => '!Dep/Y',
-'dep=t' => 'Dep/Y',
-'dep=true' => 'Dep/Y',
-'dep=y' => 'Dep/Y',
-'dep=yes' => 'Dep/Y',
-'deprecated' => 'Dep/Y',
-'deseret' => '#/185',
-'deva' => 'Scx/Deva',
-'devanagari' => 'Scx/Deva',
-'devanagariext' => '#/338',
-'devanagariextended' => '#/338',
-'di' => 'DI/Y',
-'di=f' => '!DI/Y',
-'di=false' => '!DI/Y',
-'di=n' => '!DI/Y',
-'di=no' => '!DI/Y',
-'di=t' => 'DI/Y',
-'di=true' => 'DI/Y',
-'di=y' => 'DI/Y',
-'di=yes' => 'DI/Y',
-'dia' => 'Dia/Y',
-'dia=f' => '!Dia/Y',
-'dia=false' => '!Dia/Y',
-'dia=n' => '!Dia/Y',
-'dia=no' => '!Dia/Y',
-'dia=t' => 'Dia/Y',
-'dia=true' => 'Dia/Y',
-'dia=y' => 'Dia/Y',
-'dia=yes' => 'Dia/Y',
-'diacritic' => 'Dia/Y',
-'diacriticals' => '#/324',
-'diacriticalsext' => '#/357',
-'diacriticalsforsymbols' => '#/403',
-'diacriticalssup' => '#/358',
-'digit' => 'Gc/Nd',
-'dingbats' => '#/225',
-'dogr' => '#/641',
-'dogra' => '#/641',
-'domino' => '#/155',
-'dominotiles' => '#/155',
-'dsrt' => '#/185',
-'dt=can' => 'NFDQC/N',
-'dt=canonical' => 'NFDQC/N',
-'dt=circle' => 'Dt/Enc',
-'dt=com' => 'Dt/Com',
-'dt=compat' => 'Dt/Com',
-'dt=enc' => 'Dt/Enc',
-'dt=fin' => 'Dt/Fin',
-'dt=final' => 'Dt/Fin',
-'dt=font' => 'Dt/Font',
-'dt=fra' => '#/410',
-'dt=fraction' => '#/410',
-'dt=init' => 'Dt/Init',
-'dt=initial' => 'Dt/Init',
-'dt=iso' => 'Dt/Iso',
-'dt=isolated' => 'Dt/Iso',
-'dt=med' => 'Dt/Med',
-'dt=medial' => 'Dt/Med',
-'dt=nar' => 'Dt/Nar',
-'dt=narrow' => 'Dt/Nar',
-'dt=nb' => 'Dt/Nb',
-'dt=nobreak' => 'Dt/Nb',
-'dt=noncanon' => 'Dt/NonCanon',
-'dt=noncanonical' => 'Dt/NonCanon',
-'dt=none' => 'NFKDQC/Y',
-'dt=small' => '#/411',
-'dt=sml' => '#/411',
-'dt=sqr' => 'Dt/Sqr',
-'dt=square' => 'Dt/Sqr',
-'dt=sub' => 'Dt/Sub',
-'dt=sup' => 'Dt/Sup',
-'dt=super' => 'Dt/Sup',
-'dt=vert' => 'Dt/Vert',
-'dt=vertical' => 'Dt/Vert',
-'dt=wide' => '#/412',
-'dupl' => 'Scx/Dupl',
-'duployan' => 'Scx/Dupl',
-'ea=a' => 'Ea/A',
-'ea=ambiguous' => 'Ea/A',
-'ea=f' => '#/412',
-'ea=fullwidth' => '#/412',
-'ea=h' => 'Ea/H',
-'ea=halfwidth' => 'Ea/H',
-'ea=n' => 'Ea/N',
-'ea=na' => 'Ea/Na',
-'ea=narrow' => 'Ea/Na',
-'ea=neutral' => 'Ea/N',
-'ea=w' => 'Ea/W',
-'ea=wide' => 'Ea/W',
-'earlydynasticcuneiform' => '#/404',
-'egyp' => '#/642',
-'egyptianhieroglyphformatcontrols' => '#/409',
-'egyptianhieroglyphs' => '#/642',
-'elba' => '#/643',
-'elbasan' => '#/643',
-'elym' => '#/644',
-'elymaic' => '#/644',
-'emoticons' => '#/252',
-'enclosedalphanum' => '#/370',
-'enclosedalphanumerics' => '#/370',
-'enclosedalphanumericsupplement' => '#/393',
-'enclosedalphanumsup' => '#/393',
-'enclosedcjk' => '#/298',
-'enclosedcjklettersandmonths' => '#/298',
-'enclosedideographicsup' => '#/405',
-'enclosedideographicsupplement' => '#/405',
-'enclosingmark' => 'Gc/Me',
-'ethi' => 'Scx/Ethi',
-'ethiopic' => 'Scx/Ethi',
-'ethiopicext' => '#/299',
-'ethiopicexta' => '#/325',
-'ethiopicextended' => '#/299',
-'ethiopicextendeda' => '#/325',
-'ethiopicsup' => '#/300',
-'ethiopicsupplement' => '#/300',
-'ext' => 'Ext/Y',
-'ext=f' => '!Ext/Y',
-'ext=false' => '!Ext/Y',
-'ext=n' => '!Ext/Y',
-'ext=no' => '!Ext/Y',
-'ext=t' => 'Ext/Y',
-'ext=true' => 'Ext/Y',
-'ext=y' => 'Ext/Y',
-'ext=yes' => 'Ext/Y',
-'extender' => 'Ext/Y',
-'finalpunctuation' => 'Gc/Pf',
-'format' => 'Gc/Cf',
-'fullcompositionexclusion' => 'CompEx/Y',
-'gc=c' => 'Gc/C',
-'gc=casedletter' => 'Gc/LC',
-'gc=cc' => '#/413',
-'gc=cf' => 'Gc/Cf',
-'gc=closepunctuation' => 'Gc/Pe',
-'gc=cn' => 'Gc/Cn',
-'gc=cntrl' => '#/413',
-'gc=co' => '#/414',
-'gc=combiningmark' => 'Gc/M',
-'gc=connectorpunctuation' => 'Gc/Pc',
-'gc=control' => '#/413',
-'gc=cs' => '#/14',
-'gc=currencysymbol' => 'Gc/Sc',
-'gc=dashpunctuation' => 'Gc/Pd',
-'gc=decimalnumber' => 'Gc/Nd',
-'gc=digit' => 'Gc/Nd',
-'gc=enclosingmark' => 'Gc/Me',
-'gc=finalpunctuation' => 'Gc/Pf',
-'gc=format' => 'Gc/Cf',
-'gc=initialpunctuation' => 'Gc/Pi',
-'gc=l' => 'Gc/L',
-'gc=l&' => 'Gc/LC',
-'gc=l_' => 'Gc/LC',
-'gc=lc' => 'Gc/LC',
-'gc=letter' => 'Gc/L',
-'gc=letternumber' => 'Gc/Nl',
-'gc=lineseparator' => '#/415',
-'gc=ll' => 'Gc/Ll',
-'gc=lm' => 'Gc/Lm',
-'gc=lo' => 'Gc/Lo',
-'gc=lowercaseletter' => 'Gc/Ll',
-'gc=lt' => 'Perl/Title',
-'gc=lu' => 'Gc/Lu',
-'gc=m' => 'Gc/M',
-'gc=mark' => 'Gc/M',
-'gc=mathsymbol' => 'Gc/Sm',
-'gc=mc' => 'Gc/Mc',
-'gc=me' => 'Gc/Me',
-'gc=mn' => 'Gc/Mn',
-'gc=modifierletter' => 'Gc/Lm',
-'gc=modifiersymbol' => 'Gc/Sk',
-'gc=n' => 'Gc/N',
-'gc=nd' => 'Gc/Nd',
-'gc=nl' => 'Gc/Nl',
-'gc=no' => 'Gc/No',
-'gc=nonspacingmark' => 'Gc/Mn',
-'gc=number' => 'Gc/N',
-'gc=openpunctuation' => 'Gc/Ps',
-'gc=other' => 'Gc/C',
-'gc=otherletter' => 'Gc/Lo',
-'gc=othernumber' => 'Gc/No',
-'gc=otherpunctuation' => 'Gc/Po',
-'gc=othersymbol' => 'Gc/So',
-'gc=p' => 'Gc/P',
-'gc=paragraphseparator' => '#/416',
-'gc=pc' => 'Gc/Pc',
-'gc=pd' => 'Gc/Pd',
-'gc=pe' => 'Gc/Pe',
-'gc=pf' => 'Gc/Pf',
-'gc=pi' => 'Gc/Pi',
-'gc=po' => 'Gc/Po',
-'gc=privateuse' => '#/414',
-'gc=ps' => 'Gc/Ps',
-'gc=punct' => 'Gc/P',
-'gc=punctuation' => 'Gc/P',
-'gc=s' => 'Gc/S',
-'gc=sc' => 'Gc/Sc',
-'gc=separator' => 'Gc/Z',
-'gc=sk' => 'Gc/Sk',
-'gc=sm' => 'Gc/Sm',
-'gc=so' => 'Gc/So',
-'gc=spaceseparator' => 'Gc/Zs',
-'gc=spacingmark' => 'Gc/Mc',
-'gc=surrogate' => '#/14',
-'gc=symbol' => 'Gc/S',
-'gc=titlecaseletter' => 'Perl/Title',
-'gc=unassigned' => 'Gc/Cn',
-'gc=uppercaseletter' => 'Gc/Lu',
-'gc=z' => 'Gc/Z',
-'gc=zl' => '#/415',
-'gc=zp' => '#/416',
-'gc=zs' => 'Gc/Zs',
-'gcb=cn' => 'GCB/CN',
-'gcb=control' => 'GCB/CN',
-'gcb=cr' => '#/63',
-'gcb=eb' => '#/0',
-'gcb=ebase' => '#/0',
-'gcb=ebasegaz' => '#/0',
-'gcb=ebg' => '#/0',
-'gcb=em' => '#/0',
-'gcb=emodifier' => '#/0',
-'gcb=ex' => 'GCB/EX',
-'gcb=extend' => 'GCB/EX',
-'gcb=gaz' => '#/0',
-'gcb=glueafterzwj' => '#/0',
-'gcb=l' => '#/60',
-'gcb=lf' => '#/64',
-'gcb=lv' => 'GCB/LV',
-'gcb=lvt' => 'GCB/LVT',
-'gcb=other' => 'GCB/XX',
-'gcb=pp' => 'GCB/PP',
-'gcb=prepend' => 'GCB/PP',
-'gcb=regionalindicator' => '#/65',
-'gcb=ri' => '#/65',
-'gcb=sm' => 'GCB/SM',
-'gcb=spacingmark' => 'GCB/SM',
-'gcb=t' => '#/61',
-'gcb=v' => '#/62',
-'gcb=xx' => 'GCB/XX',
-'gcb=zwj' => '#/66',
-'generalpunctuation' => '#/313',
-'geometricshapes' => '#/359',
-'geometricshapesext' => '#/386',
-'geometricshapesextended' => '#/386',
-'geor' => 'Scx/Geor',
-'georgian' => 'Scx/Geor',
-'georgianext' => '#/301',
-'georgianextended' => '#/301',
-'georgiansup' => '#/302',
-'georgiansupplement' => '#/302',
-'glag' => 'Scx/Glag',
-'glagolitic' => 'Scx/Glag',
-'glagoliticsup' => '#/339',
-'glagoliticsupplement' => '#/339',
-'gong' => 'Scx/Gong',
-'gonm' => 'Scx/Gonm',
-'goth' => '#/645',
-'gothic' => '#/645',
-'gran' => 'Scx/Gran',
-'grantha' => 'Scx/Gran',
-'graph' => 'Perl/Graph',
-'graphemebase' => 'GrBase/Y',
-'graphemeextend' => 'GrExt/Y',
-'grbase' => 'GrBase/Y',
-'grbase=f' => '!GrBase/Y',
-'grbase=false' => '!GrBase/Y',
-'grbase=n' => '!GrBase/Y',
-'grbase=no' => '!GrBase/Y',
-'grbase=t' => 'GrBase/Y',
-'grbase=true' => 'GrBase/Y',
-'grbase=y' => 'GrBase/Y',
-'grbase=yes' => 'GrBase/Y',
-'greek' => 'Scx/Grek',
-'greekandcoptic' => '#/136',
-'greekext' => '#/229',
-'greekextended' => '#/229',
-'grek' => 'Scx/Grek',
-'grext' => 'GrExt/Y',
-'grext=f' => '!GrExt/Y',
-'grext=false' => '!GrExt/Y',
-'grext=n' => '!GrExt/Y',
-'grext=no' => '!GrExt/Y',
-'grext=t' => 'GrExt/Y',
-'grext=true' => 'GrExt/Y',
-'grext=y' => 'GrExt/Y',
-'grext=yes' => 'GrExt/Y',
-'gujarati' => 'Scx/Gujr',
-'gujr' => 'Scx/Gujr',
-'gunjalagondi' => 'Scx/Gong',
-'gurmukhi' => 'Scx/Guru',
-'guru' => 'Scx/Guru',
-'halfandfullforms' => '#/371',
-'halfmarks' => '#/253',
-'halfwidthandfullwidthforms' => '#/371',
-'han' => 'Scx/Han',
-'hang' => 'Scx/Hang',
-'hangul' => 'Scx/Hang',
-'hangulcompatibilityjamo' => '#/278',
-'hanguljamo' => '#/121',
-'hanguljamoextendeda' => '#/233',
-'hanguljamoextendedb' => '#/234',
-'hangulsyllables' => '#/157',
-'hani' => 'Scx/Han',
-'hanifirohingya' => 'Scx/Rohg',
-'hano' => '#/646',
-'hanunoo' => '#/646',
-'hatr' => '#/647',
-'hatran' => '#/647',
-'hebr' => 'Scx/Hebr',
-'hebrew' => 'Scx/Hebr',
-'hex' => 'Hex/Y',
-'hex=f' => '!Hex/Y',
-'hex=false' => '!Hex/Y',
-'hex=n' => '!Hex/Y',
-'hex=no' => '!Hex/Y',
-'hex=t' => 'Hex/Y',
-'hex=true' => 'Hex/Y',
-'hex=y' => 'Hex/Y',
-'hex=yes' => 'Hex/Y',
-'hexdigit' => 'Hex/Y',
-'highprivateusesurrogates' => '#/372',
-'highpusurrogates' => '#/372',
-'highsurrogates' => '#/350',
-'hira' => 'Scx/Hira',
-'hiragana' => 'Scx/Hira',
-'hluw' => '#/648',
-'hmng' => 'Scx/Hmng',
-'hmnp' => 'Scx/Hmnp',
-'horizspace' => 'Perl/Blank',
-'hst=l' => '#/60',
-'hst=leadingjamo' => '#/60',
-'hst=lv' => 'GCB/LV',
-'hst=lvsyllable' => 'GCB/LV',
-'hst=lvt' => 'GCB/LVT',
-'hst=lvtsyllable' => 'GCB/LVT',
-'hst=na' => 'Hst/NA',
-'hst=notapplicable' => 'Hst/NA',
-'hst=t' => '#/61',
-'hst=trailingjamo' => '#/61',
-'hst=v' => '#/62',
-'hst=voweljamo' => '#/62',
-'hung' => '#/649',
-'hyphen' => 'Hyphen/T',
-'hyphen=f' => '!Hyphen/T',
-'hyphen=false' => '!Hyphen/T',
-'hyphen=n' => '!Hyphen/T',
-'hyphen=no' => '!Hyphen/T',
-'hyphen=t' => 'Hyphen/T',
-'hyphen=true' => 'Hyphen/T',
-'hyphen=y' => 'Hyphen/T',
-'hyphen=yes' => 'Hyphen/T',
-'idc' => 'IDC/Y',
-'idc=f' => '!IDC/Y',
-'idc=false' => '!IDC/Y',
-'idc=n' => '!IDC/Y',
-'idc=no' => '!IDC/Y',
-'idc=t' => 'IDC/Y',
-'idc=true' => 'IDC/Y',
-'idc=y' => 'IDC/Y',
-'idc=yes' => 'IDC/Y',
-'idcontinue' => 'IDC/Y',
-'ideo' => 'Ideo/Y',
-'ideo=f' => '!Ideo/Y',
-'ideo=false' => '!Ideo/Y',
-'ideo=n' => '!Ideo/Y',
-'ideo=no' => '!Ideo/Y',
-'ideo=t' => 'Ideo/Y',
-'ideo=true' => 'Ideo/Y',
-'ideo=y' => 'Ideo/Y',
-'ideo=yes' => 'Ideo/Y',
-'ideographic' => 'Ideo/Y',
-'ideographicdescriptioncharacters' => '#/112',
-'ideographicsymbols' => '#/387',
-'ideographicsymbolsandpunctuation' => '#/387',
-'ids' => 'IDS/Y',
-'ids=f' => '!IDS/Y',
-'ids=false' => '!IDS/Y',
-'ids=n' => '!IDS/Y',
-'ids=no' => '!IDS/Y',
-'ids=t' => 'IDS/Y',
-'ids=true' => 'IDS/Y',
-'ids=y' => 'IDS/Y',
-'ids=yes' => 'IDS/Y',
-'idsb' => '#/67',
-'idsb=f' => '#/!67',
-'idsb=false' => '#/!67',
-'idsb=n' => '#/!67',
-'idsb=no' => '#/!67',
-'idsb=t' => '#/67',
-'idsb=true' => '#/67',
-'idsb=y' => '#/67',
-'idsb=yes' => '#/67',
-'idsbinaryoperator' => '#/67',
-'idst' => '#/69',
-'idst=f' => '#/!69',
-'idst=false' => '#/!69',
-'idst=n' => '#/!69',
-'idst=no' => '#/!69',
-'idst=t' => '#/69',
-'idst=true' => '#/69',
-'idst=y' => '#/69',
-'idst=yes' => '#/69',
-'idstart' => 'IDS/Y',
-'idstrinaryoperator' => '#/69',
-'imperialaramaic' => '#/629',
-'in=unassigned' => 'Age/NA',
-'in=v100' => 'In/10_0',
-'in=v110' => 'In/11_0',
-'in=v120' => 'In/12_0',
-'in=v121' => 'In/12_1',
-'in=v20' => 'In/2_0',
-'in=v21' => 'In/2_1',
-'in=v30' => 'In/3_0',
-'in=v31' => 'In/3_1',
-'in=v32' => 'In/3_2',
-'in=v40' => 'In/4_0',
-'in=v41' => 'In/4_1',
-'in=v50' => 'In/5_0',
-'in=v51' => 'In/5_1',
-'in=v52' => 'In/5_2',
-'in=v60' => 'In/6_0',
-'in=v61' => 'In/6_1',
-'in=v62' => 'In/6_2',
-'in=v63' => 'In/6_3',
-'in=v70' => 'In/7_0',
-'in=v80' => 'In/8_0',
-'in=v90' => 'In/9_0',
-'inadlam' => '#/131',
-'inaegeannumbers' => '#/336',
-'inahom' => '#/119',
-'inalchemical' => '#/272',
-'inalchemicalsymbols' => '#/272',
-'inalphabeticpf' => '#/319',
-'inalphabeticpresentationforms' => '#/319',
-'inanatolianhieroglyphs' => '#/397',
-'inancientgreekmusic' => '#/380',
-'inancientgreekmusicalnotation' => '#/380',
-'inancientgreeknumbers' => '#/390',
-'inancientsymbols' => '#/345',
-'inarabic' => '#/149',
-'inarabicexta' => '#/273',
-'inarabicextendeda' => '#/273',
-'inarabicmath' => '#/274',
-'inarabicmathematicalalphabeticsymbols' => '#/274',
-'inarabicpfa' => '#/246',
-'inarabicpfb' => '#/247',
-'inarabicpresentationformsa' => '#/246',
-'inarabicpresentationformsb' => '#/247',
-'inarabicsup' => '#/248',
-'inarabicsupplement' => '#/248',
-'inarmenian' => '#/217',
-'inarrows' => '#/150',
-'inascii' => '#/130',
-'inavestan' => '#/176',
-'inbalinese' => '#/218',
-'inbamum' => '#/132',
-'inbamumsup' => '#/219',
-'inbamumsupplement' => '#/219',
-'inbasiclatin' => '#/130',
-'inbassavah' => '#/220',
-'inbatak' => '#/133',
-'inbengali' => '#/177',
-'inbhaiksuki' => '#/249',
-'inblockelements' => '#/337',
-'inbopomofo' => '#/221',
-'inbopomofoext' => '#/294',
-'inbopomofoextended' => '#/294',
-'inboxdrawing' => '#/275',
-'inbrahmi' => '#/151',
-'inbraille' => '#/178',
-'inbraillepatterns' => '#/178',
-'inbuginese' => '#/222',
-'inbuhid' => '#/134',
-'inbyzantinemusic' => '#/346',
-'inbyzantinemusicalsymbols' => '#/346',
-'incanadiansyllabics' => '#/129',
-'incarian' => '#/152',
-'incaucasianalbanian' => '#/381',
-'inchakma' => '#/153',
-'incham' => '#/120',
-'incherokee' => '#/223',
-'incherokeesup' => '#/295',
-'incherokeesupplement' => '#/295',
-'inchesssymbols' => '#/320',
-'incjk' => '#/111',
-'incjkcompat' => '#/250',
-'incjkcompatforms' => '#/347',
-'incjkcompatibility' => '#/250',
-'incjkcompatibilityforms' => '#/347',
-'incjkcompatibilityideographs' => '#/391',
-'incjkcompatibilityideographssupplement' => '#/402',
-'incjkcompatideographs' => '#/391',
-'incjkcompatideographssup' => '#/402',
-'incjkexta' => '#/179',
-'incjkextb' => '#/180',
-'incjkextc' => '#/181',
-'incjkextd' => '#/182',
-'incjkexte' => '#/183',
-'incjkextf' => '#/184',
-'incjkradicalssup' => '#/348',
-'incjkradicalssupplement' => '#/348',
-'incjkstrokes' => '#/276',
-'incjksymbols' => '#/277',
-'incjksymbolsandpunctuation' => '#/277',
-'incjkunifiedideographs' => '#/111',
-'incjkunifiedideographsextensiona' => '#/179',
-'incjkunifiedideographsextensionb' => '#/180',
-'incjkunifiedideographsextensionc' => '#/181',
-'incjkunifiedideographsextensiond' => '#/182',
-'incjkunifiedideographsextensione' => '#/183',
-'incjkunifiedideographsextensionf' => '#/184',
-'incombiningdiacriticalmarks' => '#/324',
-'incombiningdiacriticalmarksextended' => '#/357',
-'incombiningdiacriticalmarksforsymbols' => '#/403',
-'incombiningdiacriticalmarkssupplement' => '#/358',
-'incombininghalfmarks' => '#/253',
-'incombiningmarksforsymbols' => '#/403',
-'incommonindicnumberforms' => '#/373',
-'incompatjamo' => '#/278',
-'incontrolpictures' => '#/355',
-'incoptic' => '#/154',
-'incopticepactnumbers' => '#/385',
-'incountingrod' => '#/296',
-'incountingrodnumerals' => '#/296',
-'incuneiform' => '#/251',
-'incuneiformnumbers' => '#/368',
-'incuneiformnumbersandpunctuation' => '#/368',
-'incurrencysymbols' => '#/356',
-'incypriotsyllabary' => '#/369',
-'incyrillic' => '#/224',
-'incyrillicexta' => '#/321',
-'incyrillicextb' => '#/322',
-'incyrillicextc' => '#/323',
-'incyrillicextendeda' => '#/321',
-'incyrillicextendedb' => '#/322',
-'incyrillicextendedc' => '#/323',
-'incyrillicsup' => '#/297',
-'incyrillicsupplement' => '#/297',
-'incyrillicsupplementary' => '#/297',
-'indeseret' => '#/185',
-'indevanagari' => '#/279',
-'indevanagariext' => '#/338',
-'indevanagariextended' => '#/338',
-'indiacriticals' => '#/324',
-'indiacriticalsext' => '#/357',
-'indiacriticalsforsymbols' => '#/403',
-'indiacriticalssup' => '#/358',
-'indicnumberforms' => '#/373',
-'indicsiyaqnumbers' => '#/382',
-'indingbats' => '#/225',
-'indogra' => '#/135',
-'indomino' => '#/155',
-'indominotiles' => '#/155',
-'induployan' => '#/226',
-'inearlydynasticcuneiform' => '#/404',
-'inegyptianhieroglyphformatcontrols' => '#/409',
-'inegyptianhieroglyphs' => '#/392',
-'inelbasan' => '#/186',
-'inelymaic' => '#/187',
-'inemoticons' => '#/252',
-'inenclosedalphanum' => '#/370',
-'inenclosedalphanumerics' => '#/370',
-'inenclosedalphanumericsupplement' => '#/393',
-'inenclosedalphanumsup' => '#/393',
-'inenclosedcjk' => '#/298',
-'inenclosedcjklettersandmonths' => '#/298',
-'inenclosedideographicsup' => '#/405',
-'inenclosedideographicsupplement' => '#/405',
-'inethiopic' => '#/227',
-'inethiopicext' => '#/299',
-'inethiopicexta' => '#/325',
-'inethiopicextended' => '#/299',
-'inethiopicextendeda' => '#/325',
-'inethiopicsup' => '#/300',
-'inethiopicsupplement' => '#/300',
-'ingeneralpunctuation' => '#/313',
-'ingeometricshapes' => '#/359',
-'ingeometricshapesext' => '#/386',
-'ingeometricshapesextended' => '#/386',
-'ingeorgian' => '#/228',
-'ingeorgianext' => '#/301',
-'ingeorgianextended' => '#/301',
-'ingeorgiansup' => '#/302',
-'ingeorgiansupplement' => '#/302',
-'inglagolitic' => '#/280',
-'inglagoliticsup' => '#/339',
-'inglagoliticsupplement' => '#/339',
-'ingothic' => '#/156',
-'ingrantha' => '#/188',
-'ingreek' => '#/136',
-'ingreekandcoptic' => '#/136',
-'ingreekext' => '#/229',
-'ingreekextended' => '#/229',
-'ingujarati' => '#/230',
-'ingunjalagondi' => '#/326',
-'ingurmukhi' => '#/231',
-'inhalfandfullforms' => '#/371',
-'inhalfmarks' => '#/253',
-'inhalfwidthandfullwidthforms' => '#/371',
-'inhangul' => '#/157',
-'inhangulcompatibilityjamo' => '#/278',
-'inhanguljamo' => '#/121',
-'inhanguljamoextendeda' => '#/233',
-'inhanguljamoextendedb' => '#/234',
-'inhangulsyllables' => '#/157',
-'inhanifirohingya' => '#/349',
-'inhanunoo' => '#/189',
-'inhatran' => '#/158',
-'inhebrew' => '#/159',
-'inherited' => 'Scx/Zinh',
-'inhighprivateusesurrogates' => '#/372',
-'inhighpusurrogates' => '#/372',
-'inhighsurrogates' => '#/350',
-'inhiragana' => '#/232',
-'inidc' => '#/112',
-'inideographicdescriptioncharacters' => '#/112',
-'inideographicsymbols' => '#/387',
-'inideographicsymbolsandpunctuation' => '#/387',
-'inimperialaramaic' => '#/360',
-'inindicnumberforms' => '#/373',
-'inindicsiyaqnumbers' => '#/382',
-'ininscriptionalpahlavi' => '#/398',
-'ininscriptionalparthian' => '#/400',
-'inipaext' => '#/160',
-'inipaextensions' => '#/160',
-'initialpunctuation' => 'Gc/Pi',
-'injamo' => '#/121',
-'injamoexta' => '#/233',
-'injamoextb' => '#/234',
-'injavanese' => '#/235',
-'inkaithi' => '#/161',
-'inkanaexta' => '#/236',
-'inkanaextendeda' => '#/236',
-'inkanasup' => '#/190',
-'inkanasupplement' => '#/190',
-'inkanbun' => '#/162',
-'inkangxi' => '#/163',
-'inkangxiradicals' => '#/163',
-'inkannada' => '#/191',
-'inkatakana' => '#/237',
-'inkatakanaext' => '#/303',
-'inkatakanaphoneticextensions' => '#/303',
-'inkayahli' => '#/192',
-'inkharoshthi' => '#/281',
-'inkhmer' => '#/137',
-'inkhmersymbols' => '#/327',
-'inkhojki' => '#/164',
-'inkhudawadi' => '#/254',
-'inlao' => '#/113',
-'inlatin1' => '#/165',
-'inlatin1sup' => '#/165',
-'inlatin1supplement' => '#/165',
-'inlatinexta' => '#/255',
-'inlatinextadditional' => '#/388',
-'inlatinextb' => '#/256',
-'inlatinextc' => '#/257',
-'inlatinextd' => '#/258',
-'inlatinexte' => '#/259',
-'inlatinextendeda' => '#/255',
-'inlatinextendedadditional' => '#/388',
-'inlatinextendedb' => '#/256',
-'inlatinextendedc' => '#/257',
-'inlatinextendedd' => '#/258',
-'inlatinextendede' => '#/259',
-'inlepcha' => '#/166',
-'inletterlikesymbols' => '#/383',
-'inlimbu' => '#/138',
-'inlineara' => '#/193',
-'inlinearbideograms' => '#/374',
-'inlinearbsyllabary' => '#/375',
-'inlisu' => '#/122',
-'inlowsurrogates' => '#/340',
-'inlycian' => '#/167',
-'inlydian' => '#/168',
-'inmahajani' => '#/238',
-'inmahjong' => '#/194',
-'inmahjongtiles' => '#/194',
-'inmakasar' => '#/195',
-'inmalayalam' => '#/260',
-'inmandaic' => '#/196',
-'inmanichaean' => '#/282',
-'inmarchen' => '#/197',
-'inmasaramgondi' => '#/328',
-'inmathalphanum' => '#/329',
-'inmathematicalalphanumericsymbols' => '#/329',
-'inmathematicaloperators' => '#/341',
-'inmathoperators' => '#/341',
-'inmayannumerals' => '#/342',
-'inmedefaidrin' => '#/304',
-'inmeeteimayek' => '#/305',
-'inmeeteimayekext' => '#/351',
-'inmeeteimayekextensions' => '#/351',
-'inmendekikakui' => '#/330',
-'inmeroiticcursive' => '#/361',
-'inmeroitichieroglyphs' => '#/394',
-'inmiao' => '#/123',
-'inmiscarrows' => '#/283',
-'inmiscellaneousmathematicalsymbolsa' => '#/376',
-'inmiscellaneousmathematicalsymbolsb' => '#/377',
-'inmiscellaneoussymbols' => '#/306',
-'inmiscellaneoussymbolsandarrows' => '#/283',
-'inmiscellaneoussymbolsandpictographs' => '#/362',
-'inmiscellaneoustechnical' => '#/343',
-'inmiscmathsymbolsa' => '#/376',
-'inmiscmathsymbolsb' => '#/377',
-'inmiscpictographs' => '#/362',
-'inmiscsymbols' => '#/306',
-'inmisctechnical' => '#/343',
-'inmodi' => '#/124',
-'inmodifierletters' => '#/363',
-'inmodifiertoneletters' => '#/395',
-'inmongolian' => '#/261',
-'inmongoliansup' => '#/331',
-'inmongoliansupplement' => '#/331',
-'inmro' => '#/114',
-'inmultani' => '#/198',
-'inmusic' => '#/139',
-'inmusicalsymbols' => '#/139',
-'inmyanmar' => '#/199',
-'inmyanmarexta' => '#/307',
-'inmyanmarextb' => '#/308',
-'inmyanmarextendeda' => '#/307',
-'inmyanmarextendedb' => '#/308',
-'innabataean' => '#/262',
-'innandinagari' => '#/309',
-'innb' => 'Blk/NB',
-'innewa' => '#/125',
-'innewtailue' => '#/263',
-'innko' => '#/115',
-'innoblock' => 'Blk/NB',
-'innumberforms' => '#/310',
-'innushu' => '#/140',
-'innyiakengpuachuehmong' => '#/399',
-'inocr' => '#/116',
-'inogham' => '#/141',
-'inolchiki' => '#/200',
-'inoldhungarian' => '#/332',
-'inolditalic' => '#/264',
-'inoldnortharabian' => '#/364',
-'inoldpermic' => '#/265',
-'inoldpersian' => '#/284',
-'inoldsogdian' => '#/285',
-'inoldsoutharabian' => '#/365',
-'inoldturkic' => '#/266',
-'inopticalcharacterrecognition' => '#/116',
-'inoriya' => '#/142',
-'inornamentaldingbats' => '#/389',
-'inosage' => '#/143',
-'inosmanya' => '#/201',
-'inottomansiyaqnumbers' => '#/396',
-'inpahawhhmong' => '#/311',
-'inpalmyrene' => '#/267',
-'inpaucinhau' => '#/268',
-'inpc=bottom' => 'InPC/Bottom',
-'inpc=bottomandleft' => '#/71',
-'inpc=bottomandright' => '#/72',
-'inpc=left' => 'InPC/Left',
-'inpc=leftandright' => 'InPC/LeftAndR',
-'inpc=na' => 'InPC/NA',
-'inpc=overstruck' => 'InPC/Overstru',
-'inpc=right' => 'InPC/Right',
-'inpc=top' => 'InPC/Top',
-'inpc=topandbottom' => 'InPC/TopAndBo',
-'inpc=topandbottomandright' => '#/73',
-'inpc=topandleft' => 'InPC/TopAndLe',
-'inpc=topandleftandright' => 'InPC/TopAndL2',
-'inpc=topandright' => 'InPC/TopAndRi',
-'inpc=visualorderleft' => 'InPC/VisualOr',
-'inphagspa' => '#/202',
-'inphaistos' => '#/239',
-'inphaistosdisc' => '#/239',
-'inphoenician' => '#/286',
-'inphoneticext' => '#/312',
-'inphoneticextensions' => '#/312',
-'inphoneticextensionssupplement' => '#/352',
-'inphoneticextsup' => '#/352',
-'inplayingcards' => '#/333',
-'inprivateuse' => '#/117',
-'inprivateusearea' => '#/117',
-'inpsalterpahlavi' => '#/353',
-'inpua' => '#/117',
-'inpunctuation' => '#/313',
-'inrejang' => '#/169',
-'inrumi' => '#/126',
-'inruminumeralsymbols' => '#/126',
-'inrunic' => '#/144',
-'insamaritan' => '#/269',
-'insaurashtra' => '#/287',
-'insc=avagraha' => 'InSC/Avagraha',
-'insc=bindu' => 'InSC/Bindu',
-'insc=brahmijoiningnumber' => '#/82',
-'insc=cantillationmark' => 'InSC/Cantilla',
-'insc=consonant' => 'InSC/Consonan',
-'insc=consonantdead' => 'InSC/Consona2',
-'insc=consonantfinal' => 'InSC/Consona3',
-'insc=consonantheadletter' => '#/83',
-'insc=consonantinitialpostfixed' => '#/86',
-'insc=consonantkiller' => '#/78',
-'insc=consonantmedial' => 'InSC/Consona4',
-'insc=consonantplaceholder' => 'InSC/Consona6',
-'insc=consonantprecedingrepha' => '#/85',
-'insc=consonantprefixed' => '#/81',
-'insc=consonantsubjoined' => 'InSC/Consona5',
-'insc=consonantsucceedingrepha' => 'InSC/Consona7',
-'insc=consonantwithstacker' => '#/84',
-'insc=geminationmark' => '#/77',
-'insc=invisiblestacker' => 'InSC/Invisibl',
-'insc=joiner' => '#/66',
-'insc=modifyingletter' => '#/79',
-'insc=nonjoiner' => '#/74',
-'insc=nukta' => 'InSC/Nukta',
-'insc=number' => 'InSC/Number',
-'insc=numberjoiner' => '#/76',
-'insc=other' => 'InSC/Other',
-'insc=purekiller' => 'InSC/PureKill',
-'insc=registershifter' => '#/80',
-'insc=syllablemodifier' => 'InSC/Syllable',
-'insc=toneletter' => '#/75',
-'insc=tonemark' => 'InSC/ToneMark',
-'insc=virama' => 'InSC/Virama',
-'insc=visarga' => 'InSC/Visarga',
-'insc=vowel' => 'InSC/Vowel',
-'insc=voweldependent' => 'InSC/VowelDep',
-'insc=vowelindependent' => 'InSC/VowelInd',
-'inscriptionalpahlavi' => '#/676',
-'inscriptionalparthian' => '#/678',
-'insharada' => '#/203',
-'inshavian' => '#/204',
-'inshorthandformatcontrols' => '#/406',
-'insiddham' => '#/205',
-'insinhala' => '#/206',
-'insinhalaarchaicnumbers' => '#/401',
-'insmallforms' => '#/288',
-'insmallformvariants' => '#/288',
-'insmallkanaext' => '#/334',
-'insmallkanaextension' => '#/334',
-'insogdian' => '#/207',
-'insorasompeng' => '#/314',
-'insoyombo' => '#/208',
-'inspacingmodifierletters' => '#/363',
-'inspecials' => '#/240',
-'insundanese' => '#/270',
-'insundanesesup' => '#/335',
-'insundanesesupplement' => '#/335',
-'insuparrowsa' => '#/289',
-'insuparrowsb' => '#/290',
-'insuparrowsc' => '#/291',
-'insuperandsub' => '#/315',
-'insuperscriptsandsubscripts' => '#/315',
-'insupmathoperators' => '#/378',
-'insupplementalarrowsa' => '#/289',
-'insupplementalarrowsb' => '#/290',
-'insupplementalarrowsc' => '#/291',
-'insupplementalmathematicaloperators' => '#/378',
-'insupplementalpunctuation' => '#/354',
-'insupplementalsymbolsandpictographs' => '#/407',
-'insupplementaryprivateuseareaa' => '#/209',
-'insupplementaryprivateuseareab' => '#/210',
-'insuppuaa' => '#/209',
-'insuppuab' => '#/210',
-'insuppunctuation' => '#/354',
-'insupsymbolsandpictographs' => '#/407',
-'insuttonsignwriting' => '#/384',
-'insylotinagri' => '#/316',
-'insymbolsandpictographsexta' => '#/408',
-'insymbolsandpictographsextendeda' => '#/408',
-'insyriac' => '#/170',
-'insyriacsup' => '#/271',
-'insyriacsupplement' => '#/271',
-'intagalog' => '#/211',
-'intagbanwa' => '#/241',
-'intags' => '#/127',
-'intaile' => '#/145',
-'intaitham' => '#/212',
-'intaiviet' => '#/213',
-'intaixuanjing' => '#/317',
-'intaixuanjingsymbols' => '#/317',
-'intakri' => '#/146',
-'intamil' => '#/147',
-'intamilsup' => '#/242',
-'intamilsupplement' => '#/242',
-'intangut' => '#/171',
-'intangutcomponents' => '#/379',
-'intelugu' => '#/172',
-'inthaana' => '#/173',
-'inthai' => '#/128',
-'intibetan' => '#/214',
-'intifinagh' => '#/243',
-'intirhuta' => '#/215',
-'intransportandmap' => '#/366',
-'intransportandmapsymbols' => '#/366',
-'inucas' => '#/129',
-'inucasext' => '#/216',
-'inugaritic' => '#/244',
-'inunifiedcanadianaboriginalsyllabics' => '#/129',
-'inunifiedcanadianaboriginalsyllabicsextended' => '#/216',
-'invai' => '#/118',
-'invariationselectors' => '#/110',
-'invariationselectorssupplement' => '#/148',
-'invedicext' => '#/245',
-'invedicextensions' => '#/245',
-'inverticalforms' => '#/344',
-'invs' => '#/110',
-'invssup' => '#/148',
-'inwancho' => '#/174',
-'inwarangciti' => '#/292',
-'inyijing' => '#/175',
-'inyijinghexagramsymbols' => '#/175',
-'inyiradicals' => '#/293',
-'inyisyllables' => '#/318',
-'inzanabazarsquare' => '#/367',
-'ipaext' => '#/160',
-'ipaextensions' => '#/160',
-'isadlam' => 'Scx/Adlm',
-'isadlm' => 'Scx/Adlm',
-'isaegeannumbers' => '#/336',
-'isaghb' => '#/627',
-'isahex' => '#/59',
-'isahom' => '#/628',
-'isalchemical' => '#/272',
-'isalchemicalsymbols' => '#/272',
-'isall' => '#/1',
-'isalnum' => 'Perl/Alnum',
-'isalpha' => 'Alpha/Y',
-'isalphabetic' => 'Alpha/Y',
-'isalphabeticpf' => '#/319',
-'isalphabeticpresentationforms' => '#/319',
-'isanatolianhieroglyphs' => '#/648',
-'isancientgreekmusic' => '#/380',
-'isancientgreekmusicalnotation' => '#/380',
-'isancientgreeknumbers' => '#/390',
-'isancientsymbols' => '#/345',
-'isany' => '#/2',
-'isarab' => 'Scx/Arab',
-'isarabic' => 'Scx/Arab',
-'isarabicexta' => '#/273',
-'isarabicextendeda' => '#/273',
-'isarabicmath' => '#/274',
-'isarabicmathematicalalphabeticsymbols' => '#/274',
-'isarabicpfa' => '#/246',
-'isarabicpfb' => '#/247',
-'isarabicpresentationformsa' => '#/246',
-'isarabicpresentationformsb' => '#/247',
-'isarabicsup' => '#/248',
-'isarabicsupplement' => '#/248',
-'isarmenian' => 'Scx/Armn',
-'isarmi' => '#/629',
-'isarmn' => 'Scx/Armn',
-'isarrows' => '#/150',
-'isascii' => '#/130',
-'isasciihexdigit' => '#/59',
-'isassigned' => 'Perl/Assigned',
-'isavestan' => '#/630',
-'isavst' => '#/630',
-'isbali' => '#/631',
-'isbalinese' => '#/631',
-'isbamu' => '#/632',
-'isbamum' => '#/632',
-'isbamumsup' => '#/219',
-'isbamumsupplement' => '#/219',
-'isbasiclatin' => '#/130',
-'isbass' => '#/633',
-'isbassavah' => '#/633',
-'isbatak' => '#/634',
-'isbatk' => '#/634',
-'isbeng' => 'Scx/Beng',
-'isbengali' => 'Scx/Beng',
-'isbhaiksuki' => 'Scx/Bhks',
-'isbhks' => 'Scx/Bhks',
-'isbidic' => 'BidiC/Y',
-'isbidicontrol' => 'BidiC/Y',
-'isbidim' => 'BidiM/Y',
-'isbidimirrored' => 'BidiM/Y',
-'isblank' => 'Perl/Blank',
-'isblockelements' => '#/337',
-'isbopo' => 'Scx/Bopo',
-'isbopomofo' => 'Scx/Bopo',
-'isbopomofoext' => '#/294',
-'isbopomofoextended' => '#/294',
-'isboxdrawing' => '#/275',
-'isbrah' => '#/635',
-'isbrahmi' => '#/635',
-'isbrai' => '#/178',
-'isbraille' => '#/178',
-'isbraillepatterns' => '#/178',
-'isbugi' => '#/636',
-'isbuginese' => '#/636',
-'isbuhd' => '#/637',
-'isbuhid' => '#/637',
-'isbyzantinemusic' => '#/346',
-'isbyzantinemusicalsymbols' => '#/346',
-'isc' => 'Gc/C',
-'iscakm' => 'Scx/Cakm',
-'iscanadianaboriginal' => '#/638',
-'iscanadiansyllabics' => '#/129',
-'iscans' => '#/638',
-'iscari' => '#/639',
-'iscarian' => '#/639',
-'iscased' => 'Cased/Y',
-'iscasedletter' => 'Gc/LC',
-'iscaseignorable' => 'CI/Y',
-'iscaucasianalbanian' => '#/627',
-'iscc' => '#/413',
-'isce' => 'CE/Y',
-'iscf' => 'Gc/Cf',
-'ischakma' => 'Scx/Cakm',
-'ischam' => 'Scx/Cham',
-'ischangeswhencasefolded' => 'CWCF/Y',
-'ischangeswhencasemapped' => 'CWCM/Y',
-'ischangeswhenlowercased' => 'CWL/Y',
-'ischangeswhennfkccasefolded' => 'CWKCF/Y',
-'ischangeswhentitlecased' => 'CWT/Y',
-'ischangeswhenuppercased' => 'CWU/Y',
-'ischer' => '#/640',
-'ischerokee' => '#/640',
-'ischerokeesup' => '#/295',
-'ischerokeesupplement' => '#/295',
-'ischesssymbols' => '#/320',
-'isci' => 'CI/Y',
-'iscjk' => '#/111',
-'iscjkcompat' => '#/250',
-'iscjkcompatforms' => '#/347',
-'iscjkcompatibility' => '#/250',
-'iscjkcompatibilityforms' => '#/347',
-'iscjkcompatibilityideographs' => '#/391',
-'iscjkcompatibilityideographssupplement' => '#/402',
-'iscjkcompatideographs' => '#/391',
-'iscjkcompatideographssup' => '#/402',
-'iscjkexta' => '#/179',
-'iscjkextb' => '#/180',
-'iscjkextc' => '#/181',
-'iscjkextd' => '#/182',
-'iscjkexte' => '#/183',
-'iscjkextf' => '#/184',
-'iscjkradicalssup' => '#/348',
-'iscjkradicalssupplement' => '#/348',
-'iscjkstrokes' => '#/276',
-'iscjksymbols' => '#/277',
-'iscjksymbolsandpunctuation' => '#/277',
-'iscjkunifiedideographs' => '#/111',
-'iscjkunifiedideographsextensiona' => '#/179',
-'iscjkunifiedideographsextensionb' => '#/180',
-'iscjkunifiedideographsextensionc' => '#/181',
-'iscjkunifiedideographsextensiond' => '#/182',
-'iscjkunifiedideographsextensione' => '#/183',
-'iscjkunifiedideographsextensionf' => '#/184',
-'isclosepunctuation' => 'Gc/Pe',
-'iscn' => 'Gc/Cn',
-'iscntrl' => '#/413',
-'isco' => '#/414',
-'iscombiningdiacriticalmarks' => '#/324',
-'iscombiningdiacriticalmarksextended' => '#/357',
-'iscombiningdiacriticalmarksforsymbols' => '#/403',
-'iscombiningdiacriticalmarkssupplement' => '#/358',
-'iscombininghalfmarks' => '#/253',
-'iscombiningmark' => 'Gc/M',
-'iscombiningmarksforsymbols' => '#/403',
-'iscommon' => 'Scx/Zyyy',
-'iscommonindicnumberforms' => '#/373',
-'iscompatjamo' => '#/278',
-'iscompex' => 'CompEx/Y',
-'iscompositionexclusion' => 'CE/Y',
-'isconnectorpunctuation' => 'Gc/Pc',
-'iscontrol' => '#/413',
-'iscontrolpictures' => '#/355',
-'iscopt' => 'Scx/Copt',
-'iscoptic' => 'Scx/Copt',
-'iscopticepactnumbers' => '#/385',
-'iscountingrod' => '#/296',
-'iscountingrodnumerals' => '#/296',
-'iscprt' => 'Scx/Cprt',
-'iscs' => '#/14',
-'iscuneiform' => 'Scx/Xsux',
-'iscuneiformnumbers' => '#/368',
-'iscuneiformnumbersandpunctuation' => '#/368',
-'iscurrencysymbol' => 'Gc/Sc',
-'iscurrencysymbols' => '#/356',
-'iscwcf' => 'CWCF/Y',
-'iscwcm' => 'CWCM/Y',
-'iscwkcf' => 'CWKCF/Y',
-'iscwl' => 'CWL/Y',
-'iscwt' => 'CWT/Y',
-'iscwu' => 'CWU/Y',
-'iscypriot' => 'Scx/Cprt',
-'iscypriotsyllabary' => '#/369',
-'iscyrillic' => 'Scx/Cyrl',
-'iscyrillicexta' => '#/321',
-'iscyrillicextb' => '#/322',
-'iscyrillicextc' => '#/323',
-'iscyrillicextendeda' => '#/321',
-'iscyrillicextendedb' => '#/322',
-'iscyrillicextendedc' => '#/323',
-'iscyrillicsup' => '#/297',
-'iscyrillicsupplement' => '#/297',
-'iscyrillicsupplementary' => '#/297',
-'iscyrl' => 'Scx/Cyrl',
-'isdash' => 'Dash/Y',
-'isdashpunctuation' => 'Gc/Pd',
-'isdecimalnumber' => 'Gc/Nd',
-'isdefaultignorablecodepoint' => 'DI/Y',
-'isdep' => 'Dep/Y',
-'isdeprecated' => 'Dep/Y',
-'isdeseret' => '#/185',
-'isdeva' => 'Scx/Deva',
-'isdevanagari' => 'Scx/Deva',
-'isdevanagariext' => '#/338',
-'isdevanagariextended' => '#/338',
-'isdi' => 'DI/Y',
-'isdia' => 'Dia/Y',
-'isdiacritic' => 'Dia/Y',
-'isdiacriticals' => '#/324',
-'isdiacriticalsext' => '#/357',
-'isdiacriticalsforsymbols' => '#/403',
-'isdiacriticalssup' => '#/358',
-'isdigit' => 'Gc/Nd',
-'isdingbats' => '#/225',
-'isdogr' => '#/641',
-'isdogra' => '#/641',
-'isdomino' => '#/155',
-'isdominotiles' => '#/155',
-'isdsrt' => '#/185',
-'isdupl' => 'Scx/Dupl',
-'isduployan' => 'Scx/Dupl',
-'isearlydynasticcuneiform' => '#/404',
-'isegyp' => '#/642',
-'isegyptianhieroglyphformatcontrols' => '#/409',
-'isegyptianhieroglyphs' => '#/642',
-'iselba' => '#/643',
-'iselbasan' => '#/643',
-'iselym' => '#/644',
-'iselymaic' => '#/644',
-'isemoticons' => '#/252',
-'isenclosedalphanum' => '#/370',
-'isenclosedalphanumerics' => '#/370',
-'isenclosedalphanumericsupplement' => '#/393',
-'isenclosedalphanumsup' => '#/393',
-'isenclosedcjk' => '#/298',
-'isenclosedcjklettersandmonths' => '#/298',
-'isenclosedideographicsup' => '#/405',
-'isenclosedideographicsupplement' => '#/405',
-'isenclosingmark' => 'Gc/Me',
-'isethi' => 'Scx/Ethi',
-'isethiopic' => 'Scx/Ethi',
-'isethiopicext' => '#/299',
-'isethiopicexta' => '#/325',
-'isethiopicextended' => '#/299',
-'isethiopicextendeda' => '#/325',
-'isethiopicsup' => '#/300',
-'isethiopicsupplement' => '#/300',
-'isext' => 'Ext/Y',
-'isextender' => 'Ext/Y',
-'isfinalpunctuation' => 'Gc/Pf',
-'isformat' => 'Gc/Cf',
-'isfullcompositionexclusion' => 'CompEx/Y',
-'isgeneralpunctuation' => '#/313',
-'isgeometricshapes' => '#/359',
-'isgeometricshapesext' => '#/386',
-'isgeometricshapesextended' => '#/386',
-'isgeor' => 'Scx/Geor',
-'isgeorgian' => 'Scx/Geor',
-'isgeorgianext' => '#/301',
-'isgeorgianextended' => '#/301',
-'isgeorgiansup' => '#/302',
-'isgeorgiansupplement' => '#/302',
-'isglag' => 'Scx/Glag',
-'isglagolitic' => 'Scx/Glag',
-'isglagoliticsup' => '#/339',
-'isglagoliticsupplement' => '#/339',
-'isgong' => 'Scx/Gong',
-'isgonm' => 'Scx/Gonm',
-'isgoth' => '#/645',
-'isgothic' => '#/645',
-'isgran' => 'Scx/Gran',
-'isgrantha' => 'Scx/Gran',
-'isgraph' => 'Perl/Graph',
-'isgraphemebase' => 'GrBase/Y',
-'isgraphemeextend' => 'GrExt/Y',
-'isgrbase' => 'GrBase/Y',
-'isgreek' => 'Scx/Grek',
-'isgreekandcoptic' => '#/136',
-'isgreekext' => '#/229',
-'isgreekextended' => '#/229',
-'isgrek' => 'Scx/Grek',
-'isgrext' => 'GrExt/Y',
-'isgujarati' => 'Scx/Gujr',
-'isgujr' => 'Scx/Gujr',
-'isgunjalagondi' => 'Scx/Gong',
-'isgurmukhi' => 'Scx/Guru',
-'isguru' => 'Scx/Guru',
-'ishalfandfullforms' => '#/371',
-'ishalfmarks' => '#/253',
-'ishalfwidthandfullwidthforms' => '#/371',
-'ishan' => 'Scx/Han',
-'ishang' => 'Scx/Hang',
-'ishangul' => 'Scx/Hang',
-'ishangulcompatibilityjamo' => '#/278',
-'ishanguljamo' => '#/121',
-'ishanguljamoextendeda' => '#/233',
-'ishanguljamoextendedb' => '#/234',
-'ishangulsyllables' => '#/157',
-'ishani' => 'Scx/Han',
-'ishanifirohingya' => 'Scx/Rohg',
-'ishano' => '#/646',
-'ishanunoo' => '#/646',
-'ishatr' => '#/647',
-'ishatran' => '#/647',
-'ishebr' => 'Scx/Hebr',
-'ishebrew' => 'Scx/Hebr',
-'ishex' => 'Hex/Y',
-'ishexdigit' => 'Hex/Y',
-'ishighprivateusesurrogates' => '#/372',
-'ishighpusurrogates' => '#/372',
-'ishighsurrogates' => '#/350',
-'ishira' => 'Scx/Hira',
-'ishiragana' => 'Scx/Hira',
-'ishluw' => '#/648',
-'ishmng' => 'Scx/Hmng',
-'ishmnp' => 'Scx/Hmnp',
-'ishorizspace' => 'Perl/Blank',
-'ishung' => '#/649',
-'ishyphen' => 'Hyphen/T',
-'isidc' => 'IDC/Y',
-'isidcontinue' => 'IDC/Y',
-'isideo' => 'Ideo/Y',
-'isideographic' => 'Ideo/Y',
-'isideographicdescriptioncharacters' => '#/112',
-'isideographicsymbols' => '#/387',
-'isideographicsymbolsandpunctuation' => '#/387',
-'isids' => 'IDS/Y',
-'isidsb' => '#/67',
-'isidsbinaryoperator' => '#/67',
-'isidst' => '#/69',
-'isidstart' => 'IDS/Y',
-'isidstrinaryoperator' => '#/69',
-'isimperialaramaic' => '#/629',
-'isindicnumberforms' => '#/373',
-'isindicsiyaqnumbers' => '#/382',
-'isinherited' => 'Scx/Zinh',
-'isinitialpunctuation' => 'Gc/Pi',
-'isinscriptionalpahlavi' => '#/676',
-'isinscriptionalparthian' => '#/678',
-'isipaext' => '#/160',
-'isipaextensions' => '#/160',
-'isital' => '#/650',
-'isjamo' => '#/121',
-'isjamoexta' => '#/233',
-'isjamoextb' => '#/234',
-'isjava' => '#/651',
-'isjavanese' => '#/651',
-'isjoinc' => '#/87',
-'isjoincontrol' => '#/87',
-'iskaithi' => 'Scx/Kthi',
-'iskali' => '#/192',
-'iskana' => 'Scx/Kana',
-'iskanaexta' => '#/236',
-'iskanaextendeda' => '#/236',
-'iskanasup' => '#/190',
-'iskanasupplement' => '#/190',
-'iskanbun' => '#/162',
-'iskangxi' => '#/163',
-'iskangxiradicals' => '#/163',
-'iskannada' => 'Scx/Knda',
-'iskatakana' => 'Scx/Kana',
-'iskatakanaext' => '#/303',
-'iskatakanaphoneticextensions' => '#/303',
-'iskayahli' => '#/192',
-'iskhar' => 'Scx/Khar',
-'iskharoshthi' => 'Scx/Khar',
-'iskhmer' => 'Scx/Khmr',
-'iskhmersymbols' => '#/327',
-'iskhmr' => 'Scx/Khmr',
-'iskhoj' => 'Scx/Khoj',
-'iskhojki' => 'Scx/Khoj',
-'iskhudawadi' => 'Scx/Sind',
-'isknda' => 'Scx/Knda',
-'iskthi' => 'Scx/Kthi',
-'isl' => 'Gc/L',
-'isl&' => 'Gc/LC',
-'isl_' => 'Gc/LC',
-'islana' => 'Scx/Lana',
-'islao' => 'Scx/Lao',
-'islaoo' => 'Scx/Lao',
-'islatin' => 'Scx/Latn',
-'islatin1' => '#/165',
-'islatin1sup' => '#/165',
-'islatin1supplement' => '#/165',
-'islatinexta' => '#/255',
-'islatinextadditional' => '#/388',
-'islatinextb' => '#/256',
-'islatinextc' => '#/257',
-'islatinextd' => '#/258',
-'islatinexte' => '#/259',
-'islatinextendeda' => '#/255',
-'islatinextendedadditional' => '#/388',
-'islatinextendedb' => '#/256',
-'islatinextendedc' => '#/257',
-'islatinextendedd' => '#/258',
-'islatinextendede' => '#/259',
-'islatn' => 'Scx/Latn',
-'islc' => 'Gc/LC',
-'islepc' => '#/652',
-'islepcha' => '#/652',
-'isletter' => 'Gc/L',
-'isletterlikesymbols' => '#/383',
-'isletternumber' => 'Gc/Nl',
-'islimb' => 'Scx/Limb',
-'islimbu' => 'Scx/Limb',
-'islina' => 'Scx/Lina',
-'islinb' => 'Scx/Linb',
-'islineara' => 'Scx/Lina',
-'islinearb' => 'Scx/Linb',
-'islinearbideograms' => '#/374',
-'islinearbsyllabary' => '#/375',
-'islineseparator' => '#/415',
-'islisu' => '#/122',
-'isll' => 'Gc/Ll',
-'islm' => 'Gc/Lm',
-'islo' => 'Gc/Lo',
-'isloe' => 'InPC/VisualOr',
-'islogicalorderexception' => 'InPC/VisualOr',
-'islower' => 'Lower/Y',
-'islowercase' => 'Lower/Y',
-'islowercaseletter' => 'Gc/Ll',
-'islowsurrogates' => '#/340',
-'islt' => 'Perl/Title',
-'islu' => 'Gc/Lu',
-'islyci' => '#/653',
-'islycian' => '#/653',
-'islydi' => '#/654',
-'islydian' => '#/654',
-'ism' => 'Gc/M',
-'ismahajani' => '#/655',
-'ismahj' => '#/655',
-'ismahjong' => '#/194',
-'ismahjongtiles' => '#/194',
-'ismaka' => '#/656',
-'ismakasar' => '#/656',
-'ismalayalam' => 'Scx/Mlym',
-'ismand' => '#/657',
-'ismandaic' => '#/657',
-'ismani' => '#/658',
-'ismanichaean' => '#/658',
-'ismarc' => '#/659',
-'ismarchen' => '#/659',
-'ismark' => 'Gc/M',
-'ismasaramgondi' => 'Scx/Gonm',
-'ismath' => 'Math/Y',
-'ismathalphanum' => '#/329',
-'ismathematicalalphanumericsymbols' => '#/329',
-'ismathematicaloperators' => '#/341',
-'ismathoperators' => '#/341',
-'ismathsymbol' => 'Gc/Sm',
-'ismayannumerals' => '#/342',
-'ismc' => 'Gc/Mc',
-'isme' => 'Gc/Me',
-'ismedefaidrin' => '#/660',
-'ismedf' => '#/660',
-'ismeeteimayek' => '#/665',
-'ismeeteimayekext' => '#/351',
-'ismeeteimayekextensions' => '#/351',
-'ismend' => '#/661',
-'ismendekikakui' => '#/661',
-'ismerc' => '#/662',
-'ismero' => '#/394',
-'ismeroiticcursive' => '#/662',
-'ismeroitichieroglyphs' => '#/394',
-'ismiao' => '#/663',
-'ismiscarrows' => '#/283',
-'ismiscellaneousmathematicalsymbolsa' => '#/376',
-'ismiscellaneousmathematicalsymbolsb' => '#/377',
-'ismiscellaneoussymbols' => '#/306',
-'ismiscellaneoussymbolsandarrows' => '#/283',
-'ismiscellaneoussymbolsandpictographs' => '#/362',
-'ismiscellaneoustechnical' => '#/343',
-'ismiscmathsymbolsa' => '#/376',
-'ismiscmathsymbolsb' => '#/377',
-'ismiscpictographs' => '#/362',
-'ismiscsymbols' => '#/306',
-'ismisctechnical' => '#/343',
-'ismlym' => 'Scx/Mlym',
-'ismn' => 'Gc/Mn',
-'ismodi' => '#/664',
-'ismodifierletter' => 'Gc/Lm',
-'ismodifierletters' => '#/363',
-'ismodifiersymbol' => 'Gc/Sk',
-'ismodifiertoneletters' => '#/395',
-'ismong' => 'Scx/Mong',
-'ismongolian' => 'Scx/Mong',
-'ismongoliansup' => '#/331',
-'ismongoliansupplement' => '#/331',
-'ismro' => '#/624',
-'ismroo' => '#/624',
-'ismtei' => '#/665',
-'ismult' => 'Scx/Mult',
-'ismultani' => 'Scx/Mult',
-'ismusic' => '#/139',
-'ismusicalsymbols' => '#/139',
-'ismyanmar' => 'Scx/Mymr',
-'ismyanmarexta' => '#/307',
-'ismyanmarextb' => '#/308',
-'ismyanmarextendeda' => '#/307',
-'ismyanmarextendedb' => '#/308',
-'ismymr' => 'Scx/Mymr',
-'isn' => 'Gc/N',
-'isnabataean' => '#/666',
-'isnand' => 'Scx/Nand',
-'isnandinagari' => 'Scx/Nand',
-'isnarb' => '#/364',
-'isnb' => 'Blk/NB',
-'isnbat' => '#/666',
-'isnchar' => 'Perl/_PerlNch',
-'isnd' => 'Gc/Nd',
-'isnewa' => '#/667',
-'isnewtailue' => 'Scx/Talu',
-'isnko' => '#/625',
-'isnkoo' => '#/625',
-'isnl' => 'Gc/Nl',
-'isno' => 'Gc/No',
-'isnoblock' => 'Blk/NB',
-'isnoncharactercodepoint' => 'Perl/_PerlNch',
-'isnonspacingmark' => 'Gc/Mn',
-'isnshu' => '#/668',
-'isnumber' => 'Gc/N',
-'isnumberforms' => '#/310',
-'isnushu' => '#/668',
-'isnyiakengpuachuehmong' => 'Scx/Hmnp',
-'isocr' => '#/116',
-'isogam' => '#/669',
-'isogham' => '#/669',
-'isolchiki' => '#/200',
-'isolck' => '#/200',
-'isoldhungarian' => '#/649',
-'isolditalic' => '#/650',
-'isoldnortharabian' => '#/364',
-'isoldpermic' => '#/674',
-'isoldpersian' => '#/700',
-'isoldsogdian' => '#/686',
-'isoldsoutharabian' => '#/365',
-'isoldturkic' => '#/670',
-'isopenpunctuation' => 'Gc/Ps',
-'isopticalcharacterrecognition' => '#/116',
-'isoriya' => 'Scx/Orya',
-'isorkh' => '#/670',
-'isornamentaldingbats' => '#/389',
-'isorya' => 'Scx/Orya',
-'isosage' => '#/671',
-'isosge' => '#/671',
-'isosma' => '#/672',
-'isosmanya' => '#/672',
-'isother' => 'Gc/C',
-'isotherletter' => 'Gc/Lo',
-'isothernumber' => 'Gc/No',
-'isotherpunctuation' => 'Gc/Po',
-'isothersymbol' => 'Gc/So',
-'isottomansiyaqnumbers' => '#/396',
-'isp' => 'Gc/P',
-'ispahawhhmong' => 'Scx/Hmng',
-'ispalm' => '#/267',
-'ispalmyrene' => '#/267',
-'isparagraphseparator' => '#/416',
-'ispatsyn' => 'PatSyn/Y',
-'ispatternsyntax' => 'PatSyn/Y',
-'ispatternwhitespace' => 'Perl/_PerlPat',
-'ispatws' => 'Perl/_PerlPat',
-'ispauc' => '#/673',
-'ispaucinhau' => '#/673',
-'ispc' => 'Gc/Pc',
-'ispcm' => 'PCM/Y',
-'ispd' => 'Gc/Pd',
-'ispe' => 'Gc/Pe',
-'isperlspace' => '#/3',
-'isperlword' => 'Perl/PerlWord',
-'isperm' => '#/674',
-'ispf' => 'Gc/Pf',
-'isphag' => '#/675',
-'isphagspa' => '#/675',
-'isphaistos' => '#/239',
-'isphaistosdisc' => '#/239',
-'isphli' => '#/676',
-'isphlp' => 'Scx/Phlp',
-'isphnx' => '#/677',
-'isphoenician' => '#/677',
-'isphoneticext' => '#/312',
-'isphoneticextensions' => '#/312',
-'isphoneticextensionssupplement' => '#/352',
-'isphoneticextsup' => '#/352',
-'ispi' => 'Gc/Pi',
-'isplayingcards' => '#/333',
-'isplrd' => '#/663',
-'ispo' => 'Gc/Po',
-'isposixalnum' => '#/5',
-'isposixalpha' => '#/6',
-'isposixblank' => '#/7',
-'isposixcntrl' => '#/8',
-'isposixdigit' => '#/9',
-'isposixgraph' => '#/10',
-'isposixlower' => '#/11',
-'isposixprint' => '#/12',
-'isposixpunct' => 'Perl/PosixPun',
-'isposixspace' => '#/3',
-'isposixupper' => '#/13',
-'isposixword' => 'Perl/PerlWord',
-'isposixxdigit' => '#/59',
-'isprependedconcatenationmark' => 'PCM/Y',
-'isprint' => 'Perl/Print',
-'isprivateuse' => '#/414',
-'isprivateusearea' => '#/117',
-'isprti' => '#/678',
-'isps' => 'Gc/Ps',
-'ispsalterpahlavi' => 'Scx/Phlp',
-'ispua' => '#/117',
-'ispunct' => 'Gc/P',
-'ispunctuation' => 'Gc/P',
-'isqaac' => 'Scx/Copt',
-'isqaai' => 'Scx/Zinh',
-'isqmark' => 'QMark/Y',
-'isquotationmark' => 'QMark/Y',
-'isradical' => '#/90',
-'isregionalindicator' => '#/65',
-'isrejang' => '#/679',
-'isri' => '#/65',
-'isrjng' => '#/679',
-'isrohg' => 'Scx/Rohg',
-'isrumi' => '#/126',
-'isruminumeralsymbols' => '#/126',
-'isrunic' => '#/680',
-'isrunr' => '#/680',
-'iss' => 'Gc/S',
-'issamaritan' => '#/681',
-'issamr' => '#/681',
-'issarb' => '#/365',
-'issaur' => '#/682',
-'issaurashtra' => '#/682',
-'issc' => 'Gc/Sc',
-'issd' => 'SD/Y',
-'issentenceterminal' => 'STerm/Y',
-'isseparator' => 'Gc/Z',
-'issgnw' => '#/683',
-'issharada' => 'Scx/Shrd',
-'isshavian' => '#/204',
-'isshaw' => '#/204',
-'isshorthandformatcontrols' => '#/406',
-'isshrd' => 'Scx/Shrd',
-'issidd' => '#/684',
-'issiddham' => '#/684',
-'issignwriting' => '#/683',
-'issind' => 'Scx/Sind',
-'issinh' => 'Scx/Sinh',
-'issinhala' => 'Scx/Sinh',
-'issinhalaarchaicnumbers' => '#/401',
-'issk' => 'Gc/Sk',
-'issm' => 'Gc/Sm',
-'issmallforms' => '#/288',
-'issmallformvariants' => '#/288',
-'issmallkanaext' => '#/334',
-'issmallkanaextension' => '#/334',
-'isso' => 'Gc/So',
-'issoftdotted' => 'SD/Y',
-'issogd' => '#/685',
-'issogdian' => '#/685',
-'issogo' => '#/686',
-'issora' => '#/687',
-'issorasompeng' => '#/687',
-'issoyo' => '#/688',
-'issoyombo' => '#/688',
-'isspace' => 'Perl/SpacePer',
-'isspaceperl' => 'Perl/SpacePer',
-'isspaceseparator' => 'Gc/Zs',
-'isspacingmark' => 'Gc/Mc',
-'isspacingmodifierletters' => '#/363',
-'isspecials' => '#/240',
-'issterm' => 'STerm/Y',
-'issund' => '#/689',
-'issundanese' => '#/689',
-'issundanesesup' => '#/335',
-'issundanesesupplement' => '#/335',
-'issuparrowsa' => '#/289',
-'issuparrowsb' => '#/290',
-'issuparrowsc' => '#/291',
-'issuperandsub' => '#/315',
-'issuperscriptsandsubscripts' => '#/315',
-'issupmathoperators' => '#/378',
-'issupplementalarrowsa' => '#/289',
-'issupplementalarrowsb' => '#/290',
-'issupplementalarrowsc' => '#/291',
-'issupplementalmathematicaloperators' => '#/378',
-'issupplementalpunctuation' => '#/354',
-'issupplementalsymbolsandpictographs' => '#/407',
-'issupplementaryprivateuseareaa' => '#/209',
-'issupplementaryprivateuseareab' => '#/210',
-'issuppuaa' => '#/209',
-'issuppuab' => '#/210',
-'issuppunctuation' => '#/354',
-'issupsymbolsandpictographs' => '#/407',
-'issurrogate' => '#/14',
-'issuttonsignwriting' => '#/384',
-'issylo' => '#/690',
-'issylotinagri' => '#/690',
-'issymbol' => 'Gc/S',
-'issymbolsandpictographsexta' => '#/408',
-'issymbolsandpictographsextendeda' => '#/408',
-'issyrc' => 'Scx/Syrc',
-'issyriac' => 'Scx/Syrc',
-'issyriacsup' => '#/271',
-'issyriacsupplement' => '#/271',
-'istagalog' => '#/695',
-'istagb' => 'Scx/Tagb',
-'istagbanwa' => 'Scx/Tagb',
-'istags' => '#/127',
-'istaile' => '#/691',
-'istaitham' => 'Scx/Lana',
-'istaiviet' => '#/693',
-'istaixuanjing' => '#/317',
-'istaixuanjingsymbols' => '#/317',
-'istakr' => 'Scx/Takr',
-'istakri' => 'Scx/Takr',
-'istale' => '#/691',
-'istalu' => 'Scx/Talu',
-'istamil' => 'Scx/Taml',
-'istamilsup' => '#/242',
-'istamilsupplement' => '#/242',
-'istaml' => 'Scx/Taml',
-'istang' => '#/692',
-'istangut' => '#/692',
-'istangutcomponents' => '#/379',
-'istavt' => '#/693',
-'istelu' => 'Scx/Telu',
-'istelugu' => 'Scx/Telu',
-'isterm' => 'Term/Y',
-'isterminalpunctuation' => 'Term/Y',
-'istfng' => '#/694',
-'istglg' => '#/695',
-'isthaa' => 'Scx/Thaa',
-'isthaana' => 'Scx/Thaa',
-'isthai' => '#/696',
-'istibetan' => 'Scx/Tibt',
-'istibt' => 'Scx/Tibt',
-'istifinagh' => '#/694',
-'istirh' => 'Scx/Tirh',
-'istirhuta' => 'Scx/Tirh',
-'istitle' => 'Perl/Title',
-'istitlecase' => 'Perl/Title',
-'istitlecaseletter' => 'Perl/Title',
-'istransportandmap' => '#/366',
-'istransportandmapsymbols' => '#/366',
-'isucas' => '#/129',
-'isucasext' => '#/216',
-'isugar' => '#/697',
-'isugaritic' => '#/697',
-'isuideo' => 'UIdeo/Y',
-'isunassigned' => 'Gc/Cn',
-'isunicode' => '#/2',
-'isunifiedcanadianaboriginalsyllabics' => '#/129',
-'isunifiedcanadianaboriginalsyllabicsextended' => '#/216',
-'isunifiedideograph' => 'UIdeo/Y',
-'isunknown' => 'Scx/Zzzz',
-'isupper' => 'Upper/Y',
-'isuppercase' => 'Upper/Y',
-'isuppercaseletter' => 'Gc/Lu',
-'isvai' => '#/626',
-'isvaii' => '#/626',
-'isvariationselector' => '#/92',
-'isvariationselectors' => '#/110',
-'isvariationselectorssupplement' => '#/148',
-'isvedicext' => '#/245',
-'isvedicextensions' => '#/245',
-'isverticalforms' => '#/344',
-'isvertspace' => '#/4',
-'isvs' => '#/92',
-'isvssup' => '#/148',
-'iswancho' => '#/699',
-'iswara' => '#/698',
-'iswarangciti' => '#/698',
-'iswcho' => '#/699',
-'iswhitespace' => 'Perl/SpacePer',
-'isword' => 'Perl/Word',
-'iswspace' => 'Perl/SpacePer',
-'isxdigit' => 'Hex/Y',
-'isxidc' => 'XIDC/Y',
-'isxidcontinue' => 'XIDC/Y',
-'isxids' => 'XIDS/Y',
-'isxidstart' => 'XIDS/Y',
-'isxpeo' => '#/700',
-'isxperlspace' => 'Perl/SpacePer',
-'isxposixalnum' => 'Perl/Alnum',
-'isxposixalpha' => 'Alpha/Y',
-'isxposixblank' => 'Perl/Blank',
-'isxposixcntrl' => '#/413',
-'isxposixdigit' => 'Gc/Nd',
-'isxposixgraph' => 'Perl/Graph',
-'isxposixlower' => 'Lower/Y',
-'isxposixprint' => 'Perl/Print',
-'isxposixpunct' => 'Perl/XPosixPu',
-'isxposixspace' => 'Perl/SpacePer',
-'isxposixupper' => 'Upper/Y',
-'isxposixword' => 'Perl/Word',
-'isxposixxdigit' => 'Hex/Y',
-'isxsux' => 'Scx/Xsux',
-'isyi' => 'Scx/Yi',
-'isyiii' => 'Scx/Yi',
-'isyijing' => '#/175',
-'isyijinghexagramsymbols' => '#/175',
-'isyiradicals' => '#/293',
-'isyisyllables' => '#/318',
-'isz' => 'Gc/Z',
-'iszanabazarsquare' => '#/701',
-'iszanb' => '#/701',
-'iszinh' => 'Scx/Zinh',
-'iszl' => '#/415',
-'iszp' => '#/416',
-'iszs' => 'Gc/Zs',
-'iszyyy' => 'Scx/Zyyy',
-'iszzzz' => 'Scx/Zzzz',
-'ital' => '#/650',
-'jamo' => '#/121',
-'jamoexta' => '#/233',
-'jamoextb' => '#/234',
-'java' => '#/651',
-'javanese' => '#/651',
-'jg=africanfeh' => '#/449',
-'jg=africannoon' => '#/455',
-'jg=africanqaf' => '#/450',
-'jg=ain' => 'Jg/Ain',
-'jg=alaph' => '#/437',
-'jg=alef' => 'Jg/Alef',
-'jg=beh' => 'Jg/Beh',
-'jg=beth' => '#/427',
-'jg=burushaskiyehbarree' => '#/500',
-'jg=dal' => 'Jg/Dal',
-'jg=dalathrish' => '#/451',
-'jg=e' => '#/417',
-'jg=farsiyeh' => 'Jg/FarsiYeh',
-'jg=fe' => '#/418',
-'jg=feh' => 'Jg/Feh',
-'jg=finalsemkath' => '#/461',
-'jg=gaf' => 'Jg/Gaf',
-'jg=gamal' => '#/438',
-'jg=hah' => 'Jg/Hah',
-'jg=hamzaonhehgoal' => '#/478',
-'jg=hanifirohingyakinnaya' => 'Jg/HanifiRo',
-'jg=hanifirohingyapa' => '#/492',
-'jg=he' => '#/419',
-'jg=heh' => '#/421',
-'jg=hehgoal' => '#/444',
-'jg=heth' => '#/428',
-'jg=kaf' => 'Jg/Kaf',
-'jg=kaph' => '#/429',
-'jg=khaph' => '#/439',
-'jg=knottedheh' => '#/452',
-'jg=lam' => 'Jg/Lam',
-'jg=lamadh' => '#/442',
-'jg=malayalambha' => '#/462',
-'jg=malayalamja' => '#/456',
-'jg=malayalamlla' => '#/463',
-'jg=malayalamllla' => '#/470',
-'jg=malayalamnga' => '#/464',
-'jg=malayalamnna' => '#/465',
-'jg=malayalamnnna' => '#/471',
-'jg=malayalamnya' => '#/466',
-'jg=malayalamra' => '#/457',
-'jg=malayalamssa' => '#/467',
-'jg=malayalamtta' => '#/468',
-'jg=manichaeanaleph' => '#/488',
-'jg=manichaeanayin' => '#/479',
-'jg=manichaeanbeth' => '#/480',
-'jg=manichaeandaleth' => '#/493',
-'jg=manichaeandhamedh' => '#/497',
-'jg=manichaeanfive' => '#/481',
-'jg=manichaeangimel' => '#/489',
-'jg=manichaeanheth' => '#/482',
-'jg=manichaeanhundred' => '#/498',
-'jg=manichaeankaph' => '#/483',
-'jg=manichaeanlamedh' => '#/494',
-'jg=manichaeanmem' => '#/472',
-'jg=manichaeannun' => '#/473',
-'jg=manichaeanone' => '#/474',
-'jg=manichaeanpe' => '#/469',
-'jg=manichaeanqoph' => '#/484',
-'jg=manichaeanresh' => '#/485',
-'jg=manichaeansadhe' => '#/490',
-'jg=manichaeansamekh' => '#/495',
-'jg=manichaeantaw' => '#/475',
-'jg=manichaeanten' => '#/476',
-'jg=manichaeanteth' => '#/486',
-'jg=manichaeanthamedh' => '#/499',
-'jg=manichaeantwenty' => '#/496',
-'jg=manichaeanwaw' => '#/477',
-'jg=manichaeanyodh' => '#/487',
-'jg=manichaeanzayin' => '#/491',
-'jg=meem' => '#/430',
-'jg=mim' => '#/422',
-'jg=nojoininggroup' => 'Jg/NoJoinin',
-'jg=noon' => '#/431',
-'jg=nun' => '#/423',
-'jg=nya' => '#/424',
-'jg=pe' => '#/420',
-'jg=qaf' => 'Jg/Qaf',
-'jg=qaph' => '#/432',
-'jg=reh' => 'Jg/Reh',
-'jg=reversedpe' => '#/453',
-'jg=rohingyayeh' => '#/458',
-'jg=sad' => 'Jg/Sad',
-'jg=sadhe' => '#/440',
-'jg=seen' => 'Jg/Seen',
-'jg=semkath' => '#/445',
-'jg=shin' => '#/433',
-'jg=straightwaw' => '#/459',
-'jg=swashkaf' => '#/446',
-'jg=syriacwaw' => '#/447',
-'jg=tah' => '#/425',
-'jg=taw' => '#/426',
-'jg=tehmarbuta' => '#/454',
-'jg=tehmarbutagoal' => '#/478',
-'jg=teth' => '#/434',
-'jg=waw' => 'Jg/Waw',
-'jg=yeh' => 'Jg/Yeh',
-'jg=yehbarree' => '#/448',
-'jg=yehwithtail' => '#/460',
-'jg=yudh' => '#/435',
-'jg=yudhhe' => '#/443',
-'jg=zain' => '#/436',
-'jg=zhain' => '#/441',
-'joinc' => '#/87',
-'joinc=f' => '#/!87',
-'joinc=false' => '#/!87',
-'joinc=n' => '#/!87',
-'joinc=no' => '#/!87',
-'joinc=t' => '#/87',
-'joinc=true' => '#/87',
-'joinc=y' => '#/87',
-'joinc=yes' => '#/87',
-'joincontrol' => '#/87',
-'jt=c' => 'Jt/C',
-'jt=d' => 'Jt/D',
-'jt=dualjoining' => 'Jt/D',
-'jt=joincausing' => 'Jt/C',
-'jt=l' => 'Jt/L',
-'jt=leftjoining' => 'Jt/L',
-'jt=nonjoining' => 'Jt/U',
-'jt=r' => 'Jt/R',
-'jt=rightjoining' => 'Jt/R',
-'jt=t' => 'Jt/T',
-'jt=transparent' => 'Jt/T',
-'jt=u' => 'Jt/U',
-'kaithi' => 'Scx/Kthi',
-'kali' => '#/192',
-'kana' => 'Scx/Kana',
-'kanaexta' => '#/236',
-'kanaextendeda' => '#/236',
-'kanasup' => '#/190',
-'kanasupplement' => '#/190',
-'kanbun' => '#/162',
-'kangxi' => '#/163',
-'kangxiradicals' => '#/163',
-'kannada' => 'Scx/Knda',
-'katakana' => 'Scx/Kana',
-'katakanaext' => '#/303',
-'katakanaphoneticextensions' => '#/303',
-'kayahli' => '#/192',
-'khar' => 'Scx/Khar',
-'kharoshthi' => 'Scx/Khar',
-'khmer' => 'Scx/Khmr',
-'khmersymbols' => '#/327',
-'khmr' => 'Scx/Khmr',
-'khoj' => 'Scx/Khoj',
-'khojki' => 'Scx/Khoj',
-'khudawadi' => 'Scx/Sind',
-'knda' => 'Scx/Knda',
-'kthi' => 'Scx/Kthi',
-'l' => 'Gc/L',
-'l&' => 'Gc/LC',
-'l_' => 'Gc/LC',
-'lana' => 'Scx/Lana',
-'lao' => 'Scx/Lao',
-'laoo' => 'Scx/Lao',
-'latin' => 'Scx/Latn',
-'latin1' => '#/165',
-'latin1sup' => '#/165',
-'latin1supplement' => '#/165',
-'latinexta' => '#/255',
-'latinextadditional' => '#/388',
-'latinextb' => '#/256',
-'latinextc' => '#/257',
-'latinextd' => '#/258',
-'latinexte' => '#/259',
-'latinextendeda' => '#/255',
-'latinextendedadditional' => '#/388',
-'latinextendedb' => '#/256',
-'latinextendedc' => '#/257',
-'latinextendedd' => '#/258',
-'latinextendede' => '#/259',
-'latn' => 'Scx/Latn',
-'lb=ai' => 'Lb/AI',
-'lb=al' => 'Lb/AL',
-'lb=alphabetic' => 'Lb/AL',
-'lb=ambiguous' => 'Lb/AI',
-'lb=b2' => '#/501',
-'lb=ba' => 'Lb/BA',
-'lb=bb' => 'Lb/BB',
-'lb=bk' => '#/502',
-'lb=breakafter' => 'Lb/BA',
-'lb=breakbefore' => 'Lb/BB',
-'lb=breakboth' => '#/501',
-'lb=breaksymbols' => '#/510',
-'lb=carriagereturn' => '#/63',
-'lb=cb' => '#/503',
-'lb=cj' => 'Lb/CJ',
-'lb=cl' => 'Lb/CL',
-'lb=closeparenthesis' => '#/504',
-'lb=closepunctuation' => 'Lb/CL',
-'lb=cm' => 'Lb/CM',
-'lb=combiningmark' => 'Lb/CM',
-'lb=complexcontext' => 'Lb/SA',
-'lb=conditionaljapanesestarter' => 'Lb/CJ',
-'lb=contingentbreak' => '#/503',
-'lb=cp' => '#/504',
-'lb=cr' => '#/63',
-'lb=eb' => 'Lb/EB',
-'lb=ebase' => 'Lb/EB',
-'lb=em' => '#/505',
-'lb=emodifier' => '#/505',
-'lb=ex' => 'Lb/EX',
-'lb=exclamation' => 'Lb/EX',
-'lb=gl' => 'Lb/GL',
-'lb=glue' => 'Lb/GL',
-'lb=h2' => 'GCB/LV',
-'lb=h3' => 'GCB/LVT',
-'lb=hebrewletter' => 'WB/HL',
-'lb=hl' => 'WB/HL',
-'lb=hy' => '#/506',
-'lb=hyphen' => '#/506',
-'lb=id' => 'Lb/ID',
-'lb=ideographic' => 'Lb/ID',
-'lb=in' => 'Lb/IN',
-'lb=infixnumeric' => 'Lb/IS',
-'lb=inseparable' => 'Lb/IN',
-'lb=inseperable' => 'Lb/IN',
-'lb=is' => 'Lb/IS',
-'lb=jl' => '#/60',
-'lb=jt' => '#/61',
-'lb=jv' => '#/62',
-'lb=lf' => '#/64',
-'lb=linefeed' => '#/64',
-'lb=mandatorybreak' => '#/502',
-'lb=nextline' => '#/507',
-'lb=nl' => '#/507',
-'lb=nonstarter' => 'Lb/NS',
-'lb=ns' => 'Lb/NS',
-'lb=nu' => 'Lb/NU',
-'lb=numeric' => 'Lb/NU',
-'lb=op' => 'Lb/OP',
-'lb=openpunctuation' => 'Lb/OP',
-'lb=po' => 'Lb/PO',
-'lb=postfixnumeric' => 'Lb/PO',
-'lb=pr' => 'Lb/PR',
-'lb=prefixnumeric' => 'Lb/PR',
-'lb=qu' => 'Lb/QU',
-'lb=quotation' => 'Lb/QU',
-'lb=regionalindicator' => '#/65',
-'lb=ri' => '#/65',
-'lb=sa' => 'Lb/SA',
-'lb=sg' => '#/508',
-'lb=sp' => '#/509',
-'lb=space' => '#/509',
-'lb=surrogate' => '#/508',
-'lb=sy' => '#/510',
-'lb=unknown' => 'Lb/XX',
-'lb=wj' => '#/511',
-'lb=wordjoiner' => '#/511',
-'lb=xx' => 'Lb/XX',
-'lb=zw' => '#/512',
-'lb=zwj' => '#/66',
-'lb=zwspace' => '#/512',
-'lc' => 'Gc/LC',
-'lepc' => '#/652',
-'lepcha' => '#/652',
-'letter' => 'Gc/L',
-'letterlikesymbols' => '#/383',
-'letternumber' => 'Gc/Nl',
-'limb' => 'Scx/Limb',
-'limbu' => 'Scx/Limb',
-'lina' => 'Scx/Lina',
-'linb' => 'Scx/Linb',
-'lineara' => 'Scx/Lina',
-'linearb' => 'Scx/Linb',
-'linearbideograms' => '#/374',
-'linearbsyllabary' => '#/375',
-'lineseparator' => '#/415',
-'lisu' => '#/122',
-'ll' => 'Gc/Ll',
-'lm' => 'Gc/Lm',
-'lo' => 'Gc/Lo',
-'loe' => 'InPC/VisualOr',
-'loe=f' => '!InPC/VisualOr',
-'loe=false' => '!InPC/VisualOr',
-'loe=n' => '!InPC/VisualOr',
-'loe=no' => '!InPC/VisualOr',
-'loe=t' => 'InPC/VisualOr',
-'loe=true' => 'InPC/VisualOr',
-'loe=y' => 'InPC/VisualOr',
-'loe=yes' => 'InPC/VisualOr',
-'logicalorderexception' => 'InPC/VisualOr',
-'lower' => 'Lower/Y',
-'lower=f' => '!Lower/Y',
-'lower=false' => '!Lower/Y',
-'lower=n' => '!Lower/Y',
-'lower=no' => '!Lower/Y',
-'lower=t' => 'Lower/Y',
-'lower=true' => 'Lower/Y',
-'lower=y' => 'Lower/Y',
-'lower=yes' => 'Lower/Y',
-'lowercase' => 'Lower/Y',
-'lowercaseletter' => 'Gc/Ll',
-'lowsurrogates' => '#/340',
-'lt' => 'Perl/Title',
-'lu' => 'Gc/Lu',
-'lyci' => '#/653',
-'lycian' => '#/653',
-'lydi' => '#/654',
-'lydian' => '#/654',
-'m' => 'Gc/M',
-'mahajani' => '#/655',
-'mahj' => '#/655',
-'mahjong' => '#/194',
-'mahjongtiles' => '#/194',
-'maka' => '#/656',
-'makasar' => '#/656',
-'malayalam' => 'Scx/Mlym',
-'mand' => '#/657',
-'mandaic' => '#/657',
-'mani' => '#/658',
-'manichaean' => '#/658',
-'marc' => '#/659',
-'marchen' => '#/659',
-'mark' => 'Gc/M',
-'masaramgondi' => 'Scx/Gonm',
-'math' => 'Math/Y',
-'math=f' => '!Math/Y',
-'math=false' => '!Math/Y',
-'math=n' => '!Math/Y',
-'math=no' => '!Math/Y',
-'math=t' => 'Math/Y',
-'math=true' => 'Math/Y',
-'math=y' => 'Math/Y',
-'math=yes' => 'Math/Y',
-'mathalphanum' => '#/329',
-'mathematicalalphanumericsymbols' => '#/329',
-'mathematicaloperators' => '#/341',
-'mathoperators' => '#/341',
-'mathsymbol' => 'Gc/Sm',
-'mayannumerals' => '#/342',
-'mc' => 'Gc/Mc',
-'me' => 'Gc/Me',
-'medefaidrin' => '#/660',
-'medf' => '#/660',
-'meeteimayek' => '#/665',
-'meeteimayekext' => '#/351',
-'meeteimayekextensions' => '#/351',
-'mend' => '#/661',
-'mendekikakui' => '#/661',
-'merc' => '#/662',
-'mero' => '#/394',
-'meroiticcursive' => '#/662',
-'meroitichieroglyphs' => '#/394',
-'miao' => '#/663',
-'miscarrows' => '#/283',
-'miscellaneousmathematicalsymbolsa' => '#/376',
-'miscellaneousmathematicalsymbolsb' => '#/377',
-'miscellaneoussymbols' => '#/306',
-'miscellaneoussymbolsandarrows' => '#/283',
-'miscellaneoussymbolsandpictographs' => '#/362',
-'miscellaneoustechnical' => '#/343',
-'miscmathsymbolsa' => '#/376',
-'miscmathsymbolsb' => '#/377',
-'miscpictographs' => '#/362',
-'miscsymbols' => '#/306',
-'misctechnical' => '#/343',
-'mlym' => 'Scx/Mlym',
-'mn' => 'Gc/Mn',
-'modi' => '#/664',
-'modifierletter' => 'Gc/Lm',
-'modifierletters' => '#/363',
-'modifiersymbol' => 'Gc/Sk',
-'modifiertoneletters' => '#/395',
-'mong' => 'Scx/Mong',
-'mongolian' => 'Scx/Mong',
-'mongoliansup' => '#/331',
-'mongoliansupplement' => '#/331',
-'mro' => '#/624',
-'mroo' => '#/624',
-'mtei' => '#/665',
-'mult' => 'Scx/Mult',
-'multani' => 'Scx/Mult',
-'music' => '#/139',
-'musicalsymbols' => '#/139',
-'myanmar' => 'Scx/Mymr',
-'myanmarexta' => '#/307',
-'myanmarextb' => '#/308',
-'myanmarextendeda' => '#/307',
-'myanmarextendedb' => '#/308',
-'mymr' => 'Scx/Mymr',
-'n' => 'Gc/N',
-'nabataean' => '#/666',
-'nand' => 'Scx/Nand',
-'nandinagari' => 'Scx/Nand',
-'narb' => '#/364',
-'nb' => 'Blk/NB',
-'nbat' => '#/666',
-'nchar' => 'Perl/_PerlNch',
-'nchar=f' => '!Perl/_PerlNch',
-'nchar=false' => '!Perl/_PerlNch',
-'nchar=n' => '!Perl/_PerlNch',
-'nchar=no' => '!Perl/_PerlNch',
-'nchar=t' => 'Perl/_PerlNch',
-'nchar=true' => 'Perl/_PerlNch',
-'nchar=y' => 'Perl/_PerlNch',
-'nchar=yes' => 'Perl/_PerlNch',
-'nd' => 'Gc/Nd',
-'newa' => '#/667',
-'newtailue' => 'Scx/Talu',
-'nfcqc=m' => 'NFCQC/M',
-'nfcqc=maybe' => 'NFCQC/M',
-'nfcqc=n' => 'CompEx/Y',
-'nfcqc=no' => 'CompEx/Y',
-'nfcqc=y' => 'NFCQC/Y',
-'nfcqc=yes' => 'NFCQC/Y',
-'nfdqc=n' => 'NFDQC/N',
-'nfdqc=no' => 'NFDQC/N',
-'nfdqc=y' => 'NFDQC/Y',
-'nfdqc=yes' => 'NFDQC/Y',
-'nfkcqc=m' => 'NFCQC/M',
-'nfkcqc=maybe' => 'NFCQC/M',
-'nfkcqc=n' => 'NFKCQC/N',
-'nfkcqc=no' => 'NFKCQC/N',
-'nfkcqc=y' => 'NFKCQC/Y',
-'nfkcqc=yes' => 'NFKCQC/Y',
-'nfkdqc=n' => 'NFKDQC/N',
-'nfkdqc=no' => 'NFKDQC/N',
-'nfkdqc=y' => 'NFKDQC/Y',
-'nfkdqc=yes' => 'NFKDQC/Y',
-'nko' => '#/625',
-'nkoo' => '#/625',
-'nl' => 'Gc/Nl',
-'no' => 'Gc/No',
-'noblock' => 'Blk/NB',
-'noncharactercodepoint' => 'Perl/_PerlNch',
-'nonspacingmark' => 'Gc/Mn',
-'nshu' => '#/668',
-'nt=de' => 'Gc/Nd',
-'nt=decimal' => 'Gc/Nd',
-'nt=di' => 'Nt/Di',
-'nt=digit' => 'Nt/Di',
-'nt=none' => 'Nt/None',
-'nt=nu' => 'Nt/Nu',
-'nt=numeric' => 'Nt/Nu',
-'number' => 'Gc/N',
-'numberforms' => '#/310',
-'nushu' => '#/668',
-'nv=nan' => 'Nt/None',
-'nyiakengpuachuehmong' => 'Scx/Hmnp',
-'ocr' => '#/116',
-'ogam' => '#/669',
-'ogham' => '#/669',
-'olchiki' => '#/200',
-'olck' => '#/200',
-'oldhungarian' => '#/649',
-'olditalic' => '#/650',
-'oldnortharabian' => '#/364',
-'oldpermic' => '#/674',
-'oldpersian' => '#/700',
-'oldsogdian' => '#/686',
-'oldsoutharabian' => '#/365',
-'oldturkic' => '#/670',
-'openpunctuation' => 'Gc/Ps',
-'opticalcharacterrecognition' => '#/116',
-'oriya' => 'Scx/Orya',
-'orkh' => '#/670',
-'ornamentaldingbats' => '#/389',
-'orya' => 'Scx/Orya',
-'osage' => '#/671',
-'osge' => '#/671',
-'osma' => '#/672',
-'osmanya' => '#/672',
-'other' => 'Gc/C',
-'otherletter' => 'Gc/Lo',
-'othernumber' => 'Gc/No',
-'otherpunctuation' => 'Gc/Po',
-'othersymbol' => 'Gc/So',
-'ottomansiyaqnumbers' => '#/396',
-'p' => 'Gc/P',
-'pahawhhmong' => 'Scx/Hmng',
-'palm' => '#/267',
-'palmyrene' => '#/267',
-'paragraphseparator' => '#/416',
-'patsyn' => 'PatSyn/Y',
-'patsyn=f' => '!PatSyn/Y',
-'patsyn=false' => '!PatSyn/Y',
-'patsyn=n' => '!PatSyn/Y',
-'patsyn=no' => '!PatSyn/Y',
-'patsyn=t' => 'PatSyn/Y',
-'patsyn=true' => 'PatSyn/Y',
-'patsyn=y' => 'PatSyn/Y',
-'patsyn=yes' => 'PatSyn/Y',
-'patternsyntax' => 'PatSyn/Y',
-'patternwhitespace' => 'Perl/_PerlPat',
-'patws' => 'Perl/_PerlPat',
-'patws=f' => '!Perl/_PerlPat',
-'patws=false' => '!Perl/_PerlPat',
-'patws=n' => '!Perl/_PerlPat',
-'patws=no' => '!Perl/_PerlPat',
-'patws=t' => 'Perl/_PerlPat',
-'patws=true' => 'Perl/_PerlPat',
-'patws=y' => 'Perl/_PerlPat',
-'patws=yes' => 'Perl/_PerlPat',
-'pauc' => '#/673',
-'paucinhau' => '#/673',
-'pc' => 'Gc/Pc',
-'pcm' => 'PCM/Y',
-'pcm=f' => '!PCM/Y',
-'pcm=false' => '!PCM/Y',
-'pcm=n' => '!PCM/Y',
-'pcm=no' => '!PCM/Y',
-'pcm=t' => 'PCM/Y',
-'pcm=true' => 'PCM/Y',
-'pcm=y' => 'PCM/Y',
-'pcm=yes' => 'PCM/Y',
-'pd' => 'Gc/Pd',
-'pe' => 'Gc/Pe',
-'perlspace' => '#/3',
-'perlword' => 'Perl/PerlWord',
-'perm' => '#/674',
-'pf' => 'Gc/Pf',
-'phag' => '#/675',
-'phagspa' => '#/675',
-'phaistos' => '#/239',
-'phaistosdisc' => '#/239',
-'phli' => '#/676',
-'phlp' => 'Scx/Phlp',
-'phnx' => '#/677',
-'phoenician' => '#/677',
-'phoneticext' => '#/312',
-'phoneticextensions' => '#/312',
-'phoneticextensionssupplement' => '#/352',
-'phoneticextsup' => '#/352',
-'pi' => 'Gc/Pi',
-'playingcards' => '#/333',
-'plrd' => '#/663',
-'po' => 'Gc/Po',
-'posixalnum' => '#/5',
-'posixalpha' => '#/6',
-'posixblank' => '#/7',
-'posixcntrl' => '#/8',
-'posixdigit' => '#/9',
-'posixgraph' => '#/10',
-'posixlower' => '#/11',
-'posixprint' => '#/12',
-'posixpunct' => 'Perl/PosixPun',
-'posixspace' => '#/3',
-'posixupper' => '#/13',
-'posixword' => 'Perl/PerlWord',
-'posixxdigit' => '#/59',
-'prependedconcatenationmark' => 'PCM/Y',
-'print' => 'Perl/Print',
-'privateuse' => '#/414',
-'privateusearea' => '#/117',
-'prti' => '#/678',
-'ps' => 'Gc/Ps',
-'psalterpahlavi' => 'Scx/Phlp',
-'pua' => '#/117',
-'punct' => 'Gc/P',
-'punctuation' => 'Gc/P',
-'qaac' => 'Scx/Copt',
-'qaai' => 'Scx/Zinh',
-'qmark' => 'QMark/Y',
-'qmark=f' => '!QMark/Y',
-'qmark=false' => '!QMark/Y',
-'qmark=n' => '!QMark/Y',
-'qmark=no' => '!QMark/Y',
-'qmark=t' => 'QMark/Y',
-'qmark=true' => 'QMark/Y',
-'qmark=y' => 'QMark/Y',
-'qmark=yes' => 'QMark/Y',
-'quotationmark' => 'QMark/Y',
-'radical' => '#/90',
-'radical=f' => '#/!90',
-'radical=false' => '#/!90',
-'radical=n' => '#/!90',
-'radical=no' => '#/!90',
-'radical=t' => '#/90',
-'radical=true' => '#/90',
-'radical=y' => '#/90',
-'radical=yes' => '#/90',
-'regionalindicator' => '#/65',
-'rejang' => '#/679',
-'ri' => '#/65',
-'ri=f' => '#/!65',
-'ri=false' => '#/!65',
-'ri=n' => '#/!65',
-'ri=no' => '#/!65',
-'ri=t' => '#/65',
-'ri=true' => '#/65',
-'ri=y' => '#/65',
-'ri=yes' => '#/65',
-'rjng' => '#/679',
-'rohg' => 'Scx/Rohg',
-'rumi' => '#/126',
-'ruminumeralsymbols' => '#/126',
-'runic' => '#/680',
-'runr' => '#/680',
-'s' => 'Gc/S',
-'samaritan' => '#/681',
-'samr' => '#/681',
-'sarb' => '#/365',
-'saur' => '#/682',
-'saurashtra' => '#/682',
-'sb=at' => 'SB/AT',
-'sb=aterm' => 'SB/AT',
-'sb=cl' => 'SB/CL',
-'sb=close' => 'SB/CL',
-'sb=cr' => '#/63',
-'sb=ex' => 'SB/EX',
-'sb=extend' => 'SB/EX',
-'sb=fo' => 'SB/FO',
-'sb=format' => 'SB/FO',
-'sb=le' => 'SB/LE',
-'sb=lf' => '#/64',
-'sb=lo' => 'SB/LO',
-'sb=lower' => 'SB/LO',
-'sb=nu' => 'SB/NU',
-'sb=numeric' => 'SB/NU',
-'sb=oletter' => 'SB/LE',
-'sb=other' => 'SB/XX',
-'sb=sc' => 'SB/SC',
-'sb=scontinue' => 'SB/SC',
-'sb=se' => '#/91',
-'sb=sep' => '#/91',
-'sb=sp' => 'SB/Sp',
-'sb=st' => 'SB/ST',
-'sb=sterm' => 'SB/ST',
-'sb=up' => 'SB/UP',
-'sb=upper' => 'SB/UP',
-'sb=xx' => 'SB/XX',
-'sc' => 'Gc/Sc',
-'sc=adlam' => '#/591',
-'sc=adlm' => '#/591',
-'sc=aghb' => '#/627',
-'sc=ahom' => '#/628',
-'sc=anatolianhieroglyphs' => '#/648',
-'sc=arab' => 'Sc/Arab',
-'sc=arabic' => 'Sc/Arab',
-'sc=armenian' => 'Sc/Armn',
-'sc=armi' => '#/629',
-'sc=armn' => 'Sc/Armn',
-'sc=avestan' => '#/630',
-'sc=avst' => '#/630',
-'sc=bali' => '#/631',
-'sc=balinese' => '#/631',
-'sc=bamu' => '#/632',
-'sc=bamum' => '#/632',
-'sc=bass' => '#/633',
-'sc=bassavah' => '#/633',
-'sc=batak' => '#/634',
-'sc=batk' => '#/634',
-'sc=beng' => 'Sc/Beng',
-'sc=bengali' => 'Sc/Beng',
-'sc=bhaiksuki' => 'Scx/Bhks',
-'sc=bhks' => 'Scx/Bhks',
-'sc=bopo' => '#/592',
-'sc=bopomofo' => '#/592',
-'sc=brah' => '#/635',
-'sc=brahmi' => '#/635',
-'sc=brai' => '#/178',
-'sc=braille' => '#/178',
-'sc=bugi' => '#/593',
-'sc=buginese' => '#/593',
-'sc=buhd' => '#/594',
-'sc=buhid' => '#/594',
-'sc=cakm' => '#/595',
-'sc=canadianaboriginal' => '#/638',
-'sc=cans' => '#/638',
-'sc=cari' => '#/639',
-'sc=carian' => '#/639',
-'sc=caucasianalbanian' => '#/627',
-'sc=chakma' => '#/595',
-'sc=cham' => 'Scx/Cham',
-'sc=cher' => '#/640',
-'sc=cherokee' => '#/640',
-'sc=common' => 'Sc/Zyyy',
-'sc=copt' => '#/596',
-'sc=coptic' => '#/596',
-'sc=cprt' => 'Sc/Cprt',
-'sc=cuneiform' => 'Scx/Xsux',
-'sc=cypriot' => 'Sc/Cprt',
-'sc=cyrillic' => 'Sc/Cyrl',
-'sc=cyrl' => 'Sc/Cyrl',
-'sc=deseret' => '#/185',
-'sc=deva' => 'Sc/Deva',
-'sc=devanagari' => 'Sc/Deva',
-'sc=dogr' => '#/597',
-'sc=dogra' => '#/597',
-'sc=dsrt' => '#/185',
-'sc=dupl' => 'Sc/Dupl',
-'sc=duployan' => 'Sc/Dupl',
-'sc=egyp' => '#/642',
-'sc=egyptianhieroglyphs' => '#/642',
-'sc=elba' => '#/643',
-'sc=elbasan' => '#/643',
-'sc=elym' => '#/644',
-'sc=elymaic' => '#/644',
-'sc=ethi' => 'Scx/Ethi',
-'sc=ethiopic' => 'Scx/Ethi',
-'sc=geor' => 'Sc/Geor',
-'sc=georgian' => 'Sc/Geor',
-'sc=glag' => 'Sc/Glag',
-'sc=glagolitic' => 'Sc/Glag',
-'sc=gong' => 'Sc/Gong',
-'sc=gonm' => 'Sc/Gonm',
-'sc=goth' => '#/645',
-'sc=gothic' => '#/645',
-'sc=gran' => 'Sc/Gran',
-'sc=grantha' => 'Sc/Gran',
-'sc=greek' => 'Sc/Grek',
-'sc=grek' => 'Sc/Grek',
-'sc=gujarati' => 'Sc/Gujr',
-'sc=gujr' => 'Sc/Gujr',
-'sc=gunjalagondi' => 'Sc/Gong',
-'sc=gurmukhi' => 'Sc/Guru',
-'sc=guru' => 'Sc/Guru',
-'sc=han' => 'Sc/Han',
-'sc=hang' => 'Sc/Hang',
-'sc=hangul' => 'Sc/Hang',
-'sc=hani' => 'Sc/Han',
-'sc=hanifirohingya' => '#/613',
-'sc=hano' => '#/598',
-'sc=hanunoo' => '#/598',
-'sc=hatr' => '#/647',
-'sc=hatran' => '#/647',
-'sc=hebr' => 'Scx/Hebr',
-'sc=hebrew' => 'Scx/Hebr',
-'sc=hira' => 'Sc/Hira',
-'sc=hiragana' => 'Sc/Hira',
-'sc=hluw' => '#/648',
-'sc=hmng' => 'Scx/Hmng',
-'sc=hmnp' => 'Scx/Hmnp',
-'sc=hung' => '#/649',
-'sc=imperialaramaic' => '#/629',
-'sc=inherited' => 'Sc/Zinh',
-'sc=inscriptionalpahlavi' => '#/676',
-'sc=inscriptionalparthian' => '#/678',
-'sc=ital' => '#/650',
-'sc=java' => '#/599',
-'sc=javanese' => '#/599',
-'sc=kaithi' => '#/602',
-'sc=kali' => '#/600',
-'sc=kana' => 'Sc/Kana',
-'sc=kannada' => 'Sc/Knda',
-'sc=katakana' => 'Sc/Kana',
-'sc=kayahli' => '#/600',
-'sc=khar' => 'Scx/Khar',
-'sc=kharoshthi' => 'Scx/Khar',
-'sc=khmer' => 'Scx/Khmr',
-'sc=khmr' => 'Scx/Khmr',
-'sc=khoj' => '#/601',
-'sc=khojki' => '#/601',
-'sc=khudawadi' => '#/615',
-'sc=knda' => 'Sc/Knda',
-'sc=kthi' => '#/602',
-'sc=lana' => 'Scx/Lana',
-'sc=lao' => 'Scx/Lao',
-'sc=laoo' => 'Scx/Lao',
-'sc=latin' => 'Sc/Latn',
-'sc=latn' => 'Sc/Latn',
-'sc=lepc' => '#/652',
-'sc=lepcha' => '#/652',
-'sc=limb' => 'Sc/Limb',
-'sc=limbu' => 'Sc/Limb',
-'sc=lina' => '#/603',
-'sc=linb' => 'Sc/Linb',
-'sc=lineara' => '#/603',
-'sc=linearb' => 'Sc/Linb',
-'sc=lisu' => '#/122',
-'sc=lyci' => '#/653',
-'sc=lycian' => '#/653',
-'sc=lydi' => '#/654',
-'sc=lydian' => '#/654',
-'sc=mahajani' => '#/604',
-'sc=mahj' => '#/604',
-'sc=maka' => '#/656',
-'sc=makasar' => '#/656',
-'sc=malayalam' => 'Sc/Mlym',
-'sc=mand' => '#/605',
-'sc=mandaic' => '#/605',
-'sc=mani' => '#/606',
-'sc=manichaean' => '#/606',
-'sc=marc' => '#/659',
-'sc=marchen' => '#/659',
-'sc=masaramgondi' => 'Sc/Gonm',
-'sc=medefaidrin' => '#/660',
-'sc=medf' => '#/660',
-'sc=meeteimayek' => '#/665',
-'sc=mend' => '#/661',
-'sc=mendekikakui' => '#/661',
-'sc=merc' => '#/662',
-'sc=mero' => '#/394',
-'sc=meroiticcursive' => '#/662',
-'sc=meroitichieroglyphs' => '#/394',
-'sc=miao' => '#/663',
-'sc=mlym' => 'Sc/Mlym',
-'sc=modi' => '#/607',
-'sc=mong' => 'Sc/Mong',
-'sc=mongolian' => 'Sc/Mong',
-'sc=mro' => '#/624',
-'sc=mroo' => '#/624',
-'sc=mtei' => '#/665',
-'sc=mult' => 'Sc/Mult',
-'sc=multani' => 'Sc/Mult',
-'sc=myanmar' => '#/608',
-'sc=mymr' => '#/608',
-'sc=nabataean' => '#/666',
-'sc=nand' => '#/609',
-'sc=nandinagari' => '#/609',
-'sc=narb' => '#/364',
-'sc=nbat' => '#/666',
-'sc=newa' => '#/667',
-'sc=newtailue' => 'Scx/Talu',
-'sc=nko' => '#/625',
-'sc=nkoo' => '#/625',
-'sc=nshu' => '#/668',
-'sc=nushu' => '#/668',
-'sc=nyiakengpuachuehmong' => 'Scx/Hmnp',
-'sc=ogam' => '#/669',
-'sc=ogham' => '#/669',
-'sc=olchiki' => '#/200',
-'sc=olck' => '#/200',
-'sc=oldhungarian' => '#/649',
-'sc=olditalic' => '#/650',
-'sc=oldnortharabian' => '#/364',
-'sc=oldpermic' => '#/610',
-'sc=oldpersian' => '#/700',
-'sc=oldsogdian' => '#/686',
-'sc=oldsoutharabian' => '#/365',
-'sc=oldturkic' => '#/670',
-'sc=oriya' => 'Sc/Orya',
-'sc=orkh' => '#/670',
-'sc=orya' => 'Sc/Orya',
-'sc=osage' => '#/671',
-'sc=osge' => '#/671',
-'sc=osma' => '#/672',
-'sc=osmanya' => '#/672',
-'sc=pahawhhmong' => 'Scx/Hmng',
-'sc=palm' => '#/267',
-'sc=palmyrene' => '#/267',
-'sc=pauc' => '#/673',
-'sc=paucinhau' => '#/673',
-'sc=perm' => '#/610',
-'sc=phag' => '#/611',
-'sc=phagspa' => '#/611',
-'sc=phli' => '#/676',
-'sc=phlp' => '#/612',
-'sc=phnx' => '#/677',
-'sc=phoenician' => '#/677',
-'sc=plrd' => '#/663',
-'sc=prti' => '#/678',
-'sc=psalterpahlavi' => '#/612',
-'sc=qaac' => '#/596',
-'sc=qaai' => 'Sc/Zinh',
-'sc=rejang' => '#/679',
-'sc=rjng' => '#/679',
-'sc=rohg' => '#/613',
-'sc=runic' => '#/680',
-'sc=runr' => '#/680',
-'sc=samaritan' => '#/681',
-'sc=samr' => '#/681',
-'sc=sarb' => '#/365',
-'sc=saur' => '#/682',
-'sc=saurashtra' => '#/682',
-'sc=sgnw' => '#/683',
-'sc=sharada' => '#/614',
-'sc=shavian' => '#/204',
-'sc=shaw' => '#/204',
-'sc=shrd' => '#/614',
-'sc=sidd' => '#/684',
-'sc=siddham' => '#/684',
-'sc=signwriting' => '#/683',
-'sc=sind' => '#/615',
-'sc=sinh' => 'Sc/Sinh',
-'sc=sinhala' => 'Sc/Sinh',
-'sc=sogd' => '#/616',
-'sc=sogdian' => '#/616',
-'sc=sogo' => '#/686',
-'sc=sora' => '#/687',
-'sc=sorasompeng' => '#/687',
-'sc=soyo' => '#/688',
-'sc=soyombo' => '#/688',
-'sc=sund' => '#/689',
-'sc=sundanese' => '#/689',
-'sc=sylo' => '#/617',
-'sc=sylotinagri' => '#/617',
-'sc=syrc' => 'Sc/Syrc',
-'sc=syriac' => 'Sc/Syrc',
-'sc=tagalog' => '#/621',
-'sc=tagb' => '#/618',
-'sc=tagbanwa' => '#/618',
-'sc=taile' => '#/620',
-'sc=taitham' => 'Scx/Lana',
-'sc=taiviet' => '#/693',
-'sc=takr' => '#/619',
-'sc=takri' => '#/619',
-'sc=tale' => '#/620',
-'sc=talu' => 'Scx/Talu',
-'sc=tamil' => 'Sc/Taml',
-'sc=taml' => 'Sc/Taml',
-'sc=tang' => '#/692',
-'sc=tangut' => '#/692',
-'sc=tavt' => '#/693',
-'sc=telu' => 'Sc/Telu',
-'sc=telugu' => 'Sc/Telu',
-'sc=tfng' => '#/694',
-'sc=tglg' => '#/621',
-'sc=thaa' => '#/622',
-'sc=thaana' => '#/622',
-'sc=thai' => '#/696',
-'sc=tibetan' => 'Scx/Tibt',
-'sc=tibt' => 'Scx/Tibt',
-'sc=tifinagh' => '#/694',
-'sc=tirh' => '#/623',
-'sc=tirhuta' => '#/623',
-'sc=ugar' => '#/697',
-'sc=ugaritic' => '#/697',
-'sc=unknown' => 'Scx/Zzzz',
-'sc=vai' => '#/626',
-'sc=vaii' => '#/626',
-'sc=wancho' => '#/699',
-'sc=wara' => '#/698',
-'sc=warangciti' => '#/698',
-'sc=wcho' => '#/699',
-'sc=xpeo' => '#/700',
-'sc=xsux' => 'Scx/Xsux',
-'sc=yi' => '#/590',
-'sc=yiii' => '#/590',
-'sc=zanabazarsquare' => '#/701',
-'sc=zanb' => '#/701',
-'sc=zinh' => 'Sc/Zinh',
-'sc=zyyy' => 'Sc/Zyyy',
-'sc=zzzz' => 'Scx/Zzzz',
-'scx=adlam' => 'Scx/Adlm',
-'scx=adlm' => 'Scx/Adlm',
-'scx=aghb' => '#/627',
-'scx=ahom' => '#/628',
-'scx=anatolianhieroglyphs' => '#/648',
-'scx=arab' => 'Scx/Arab',
-'scx=arabic' => 'Scx/Arab',
-'scx=armenian' => 'Scx/Armn',
-'scx=armi' => '#/629',
-'scx=armn' => 'Scx/Armn',
-'scx=avestan' => '#/630',
-'scx=avst' => '#/630',
-'scx=bali' => '#/631',
-'scx=balinese' => '#/631',
-'scx=bamu' => '#/632',
-'scx=bamum' => '#/632',
-'scx=bass' => '#/633',
-'scx=bassavah' => '#/633',
-'scx=batak' => '#/634',
-'scx=batk' => '#/634',
-'scx=beng' => 'Scx/Beng',
-'scx=bengali' => 'Scx/Beng',
-'scx=bhaiksuki' => 'Scx/Bhks',
-'scx=bhks' => 'Scx/Bhks',
-'scx=bopo' => 'Scx/Bopo',
-'scx=bopomofo' => 'Scx/Bopo',
-'scx=brah' => '#/635',
-'scx=brahmi' => '#/635',
-'scx=brai' => '#/178',
-'scx=braille' => '#/178',
-'scx=bugi' => '#/636',
-'scx=buginese' => '#/636',
-'scx=buhd' => '#/637',
-'scx=buhid' => '#/637',
-'scx=cakm' => 'Scx/Cakm',
-'scx=canadianaboriginal' => '#/638',
-'scx=cans' => '#/638',
-'scx=cari' => '#/639',
-'scx=carian' => '#/639',
-'scx=caucasianalbanian' => '#/627',
-'scx=chakma' => 'Scx/Cakm',
-'scx=cham' => 'Scx/Cham',
-'scx=cher' => '#/640',
-'scx=cherokee' => '#/640',
-'scx=common' => 'Scx/Zyyy',
-'scx=copt' => 'Scx/Copt',
-'scx=coptic' => 'Scx/Copt',
-'scx=cprt' => 'Scx/Cprt',
-'scx=cuneiform' => 'Scx/Xsux',
-'scx=cypriot' => 'Scx/Cprt',
-'scx=cyrillic' => 'Scx/Cyrl',
-'scx=cyrl' => 'Scx/Cyrl',
-'scx=deseret' => '#/185',
-'scx=deva' => 'Scx/Deva',
-'scx=devanagari' => 'Scx/Deva',
-'scx=dogr' => '#/641',
-'scx=dogra' => '#/641',
-'scx=dsrt' => '#/185',
-'scx=dupl' => 'Scx/Dupl',
-'scx=duployan' => 'Scx/Dupl',
-'scx=egyp' => '#/642',
-'scx=egyptianhieroglyphs' => '#/642',
-'scx=elba' => '#/643',
-'scx=elbasan' => '#/643',
-'scx=elym' => '#/644',
-'scx=elymaic' => '#/644',
-'scx=ethi' => 'Scx/Ethi',
-'scx=ethiopic' => 'Scx/Ethi',
-'scx=geor' => 'Scx/Geor',
-'scx=georgian' => 'Scx/Geor',
-'scx=glag' => 'Scx/Glag',
-'scx=glagolitic' => 'Scx/Glag',
-'scx=gong' => 'Scx/Gong',
-'scx=gonm' => 'Scx/Gonm',
-'scx=goth' => '#/645',
-'scx=gothic' => '#/645',
-'scx=gran' => 'Scx/Gran',
-'scx=grantha' => 'Scx/Gran',
-'scx=greek' => 'Scx/Grek',
-'scx=grek' => 'Scx/Grek',
-'scx=gujarati' => 'Scx/Gujr',
-'scx=gujr' => 'Scx/Gujr',
-'scx=gunjalagondi' => 'Scx/Gong',
-'scx=gurmukhi' => 'Scx/Guru',
-'scx=guru' => 'Scx/Guru',
-'scx=han' => 'Scx/Han',
-'scx=hang' => 'Scx/Hang',
-'scx=hangul' => 'Scx/Hang',
-'scx=hani' => 'Scx/Han',
-'scx=hanifirohingya' => 'Scx/Rohg',
-'scx=hano' => '#/646',
-'scx=hanunoo' => '#/646',
-'scx=hatr' => '#/647',
-'scx=hatran' => '#/647',
-'scx=hebr' => 'Scx/Hebr',
-'scx=hebrew' => 'Scx/Hebr',
-'scx=hira' => 'Scx/Hira',
-'scx=hiragana' => 'Scx/Hira',
-'scx=hluw' => '#/648',
-'scx=hmng' => 'Scx/Hmng',
-'scx=hmnp' => 'Scx/Hmnp',
-'scx=hung' => '#/649',
-'scx=imperialaramaic' => '#/629',
-'scx=inherited' => 'Scx/Zinh',
-'scx=inscriptionalpahlavi' => '#/676',
-'scx=inscriptionalparthian' => '#/678',
-'scx=ital' => '#/650',
-'scx=java' => '#/651',
-'scx=javanese' => '#/651',
-'scx=kaithi' => 'Scx/Kthi',
-'scx=kali' => '#/192',
-'scx=kana' => 'Scx/Kana',
-'scx=kannada' => 'Scx/Knda',
-'scx=katakana' => 'Scx/Kana',
-'scx=kayahli' => '#/192',
-'scx=khar' => 'Scx/Khar',
-'scx=kharoshthi' => 'Scx/Khar',
-'scx=khmer' => 'Scx/Khmr',
-'scx=khmr' => 'Scx/Khmr',
-'scx=khoj' => 'Scx/Khoj',
-'scx=khojki' => 'Scx/Khoj',
-'scx=khudawadi' => 'Scx/Sind',
-'scx=knda' => 'Scx/Knda',
-'scx=kthi' => 'Scx/Kthi',
-'scx=lana' => 'Scx/Lana',
-'scx=lao' => 'Scx/Lao',
-'scx=laoo' => 'Scx/Lao',
-'scx=latin' => 'Scx/Latn',
-'scx=latn' => 'Scx/Latn',
-'scx=lepc' => '#/652',
-'scx=lepcha' => '#/652',
-'scx=limb' => 'Scx/Limb',
-'scx=limbu' => 'Scx/Limb',
-'scx=lina' => 'Scx/Lina',
-'scx=linb' => 'Scx/Linb',
-'scx=lineara' => 'Scx/Lina',
-'scx=linearb' => 'Scx/Linb',
-'scx=lisu' => '#/122',
-'scx=lyci' => '#/653',
-'scx=lycian' => '#/653',
-'scx=lydi' => '#/654',
-'scx=lydian' => '#/654',
-'scx=mahajani' => '#/655',
-'scx=mahj' => '#/655',
-'scx=maka' => '#/656',
-'scx=makasar' => '#/656',
-'scx=malayalam' => 'Scx/Mlym',
-'scx=mand' => '#/657',
-'scx=mandaic' => '#/657',
-'scx=mani' => '#/658',
-'scx=manichaean' => '#/658',
-'scx=marc' => '#/659',
-'scx=marchen' => '#/659',
-'scx=masaramgondi' => 'Scx/Gonm',
-'scx=medefaidrin' => '#/660',
-'scx=medf' => '#/660',
-'scx=meeteimayek' => '#/665',
-'scx=mend' => '#/661',
-'scx=mendekikakui' => '#/661',
-'scx=merc' => '#/662',
-'scx=mero' => '#/394',
-'scx=meroiticcursive' => '#/662',
-'scx=meroitichieroglyphs' => '#/394',
-'scx=miao' => '#/663',
-'scx=mlym' => 'Scx/Mlym',
-'scx=modi' => '#/664',
-'scx=mong' => 'Scx/Mong',
-'scx=mongolian' => 'Scx/Mong',
-'scx=mro' => '#/624',
-'scx=mroo' => '#/624',
-'scx=mtei' => '#/665',
-'scx=mult' => 'Scx/Mult',
-'scx=multani' => 'Scx/Mult',
-'scx=myanmar' => 'Scx/Mymr',
-'scx=mymr' => 'Scx/Mymr',
-'scx=nabataean' => '#/666',
-'scx=nand' => 'Scx/Nand',
-'scx=nandinagari' => 'Scx/Nand',
-'scx=narb' => '#/364',
-'scx=nbat' => '#/666',
-'scx=newa' => '#/667',
-'scx=newtailue' => 'Scx/Talu',
-'scx=nko' => '#/625',
-'scx=nkoo' => '#/625',
-'scx=nshu' => '#/668',
-'scx=nushu' => '#/668',
-'scx=nyiakengpuachuehmong' => 'Scx/Hmnp',
-'scx=ogam' => '#/669',
-'scx=ogham' => '#/669',
-'scx=olchiki' => '#/200',
-'scx=olck' => '#/200',
-'scx=oldhungarian' => '#/649',
-'scx=olditalic' => '#/650',
-'scx=oldnortharabian' => '#/364',
-'scx=oldpermic' => '#/674',
-'scx=oldpersian' => '#/700',
-'scx=oldsogdian' => '#/686',
-'scx=oldsoutharabian' => '#/365',
-'scx=oldturkic' => '#/670',
-'scx=oriya' => 'Scx/Orya',
-'scx=orkh' => '#/670',
-'scx=orya' => 'Scx/Orya',
-'scx=osage' => '#/671',
-'scx=osge' => '#/671',
-'scx=osma' => '#/672',
-'scx=osmanya' => '#/672',
-'scx=pahawhhmong' => 'Scx/Hmng',
-'scx=palm' => '#/267',
-'scx=palmyrene' => '#/267',
-'scx=pauc' => '#/673',
-'scx=paucinhau' => '#/673',
-'scx=perm' => '#/674',
-'scx=phag' => '#/675',
-'scx=phagspa' => '#/675',
-'scx=phli' => '#/676',
-'scx=phlp' => 'Scx/Phlp',
-'scx=phnx' => '#/677',
-'scx=phoenician' => '#/677',
-'scx=plrd' => '#/663',
-'scx=prti' => '#/678',
-'scx=psalterpahlavi' => 'Scx/Phlp',
-'scx=qaac' => 'Scx/Copt',
-'scx=qaai' => 'Scx/Zinh',
-'scx=rejang' => '#/679',
-'scx=rjng' => '#/679',
-'scx=rohg' => 'Scx/Rohg',
-'scx=runic' => '#/680',
-'scx=runr' => '#/680',
-'scx=samaritan' => '#/681',
-'scx=samr' => '#/681',
-'scx=sarb' => '#/365',
-'scx=saur' => '#/682',
-'scx=saurashtra' => '#/682',
-'scx=sgnw' => '#/683',
-'scx=sharada' => 'Scx/Shrd',
-'scx=shavian' => '#/204',
-'scx=shaw' => '#/204',
-'scx=shrd' => 'Scx/Shrd',
-'scx=sidd' => '#/684',
-'scx=siddham' => '#/684',
-'scx=signwriting' => '#/683',
-'scx=sind' => 'Scx/Sind',
-'scx=sinh' => 'Scx/Sinh',
-'scx=sinhala' => 'Scx/Sinh',
-'scx=sogd' => '#/685',
-'scx=sogdian' => '#/685',
-'scx=sogo' => '#/686',
-'scx=sora' => '#/687',
-'scx=sorasompeng' => '#/687',
-'scx=soyo' => '#/688',
-'scx=soyombo' => '#/688',
-'scx=sund' => '#/689',
-'scx=sundanese' => '#/689',
-'scx=sylo' => '#/690',
-'scx=sylotinagri' => '#/690',
-'scx=syrc' => 'Scx/Syrc',
-'scx=syriac' => 'Scx/Syrc',
-'scx=tagalog' => '#/695',
-'scx=tagb' => 'Scx/Tagb',
-'scx=tagbanwa' => 'Scx/Tagb',
-'scx=taile' => '#/691',
-'scx=taitham' => 'Scx/Lana',
-'scx=taiviet' => '#/693',
-'scx=takr' => 'Scx/Takr',
-'scx=takri' => 'Scx/Takr',
-'scx=tale' => '#/691',
-'scx=talu' => 'Scx/Talu',
-'scx=tamil' => 'Scx/Taml',
-'scx=taml' => 'Scx/Taml',
-'scx=tang' => '#/692',
-'scx=tangut' => '#/692',
-'scx=tavt' => '#/693',
-'scx=telu' => 'Scx/Telu',
-'scx=telugu' => 'Scx/Telu',
-'scx=tfng' => '#/694',
-'scx=tglg' => '#/695',
-'scx=thaa' => 'Scx/Thaa',
-'scx=thaana' => 'Scx/Thaa',
-'scx=thai' => '#/696',
-'scx=tibetan' => 'Scx/Tibt',
-'scx=tibt' => 'Scx/Tibt',
-'scx=tifinagh' => '#/694',
-'scx=tirh' => 'Scx/Tirh',
-'scx=tirhuta' => 'Scx/Tirh',
-'scx=ugar' => '#/697',
-'scx=ugaritic' => '#/697',
-'scx=unknown' => 'Scx/Zzzz',
-'scx=vai' => '#/626',
-'scx=vaii' => '#/626',
-'scx=wancho' => '#/699',
-'scx=wara' => '#/698',
-'scx=warangciti' => '#/698',
-'scx=wcho' => '#/699',
-'scx=xpeo' => '#/700',
-'scx=xsux' => 'Scx/Xsux',
-'scx=yi' => 'Scx/Yi',
-'scx=yiii' => 'Scx/Yi',
-'scx=zanabazarsquare' => '#/701',
-'scx=zanb' => '#/701',
-'scx=zinh' => 'Scx/Zinh',
-'scx=zyyy' => 'Scx/Zyyy',
-'scx=zzzz' => 'Scx/Zzzz',
-'sd' => 'SD/Y',
-'sd=f' => '!SD/Y',
-'sd=false' => '!SD/Y',
-'sd=n' => '!SD/Y',
-'sd=no' => '!SD/Y',
-'sd=t' => 'SD/Y',
-'sd=true' => 'SD/Y',
-'sd=y' => 'SD/Y',
-'sd=yes' => 'SD/Y',
-'sentenceterminal' => 'STerm/Y',
-'separator' => 'Gc/Z',
-'sgnw' => '#/683',
-'sharada' => 'Scx/Shrd',
-'shavian' => '#/204',
-'shaw' => '#/204',
-'shorthandformatcontrols' => '#/406',
-'shrd' => 'Scx/Shrd',
-'sidd' => '#/684',
-'siddham' => '#/684',
-'signwriting' => '#/683',
-'sind' => 'Scx/Sind',
-'sinh' => 'Scx/Sinh',
-'sinhala' => 'Scx/Sinh',
-'sinhalaarchaicnumbers' => '#/401',
-'sk' => 'Gc/Sk',
-'sm' => 'Gc/Sm',
-'smallforms' => '#/288',
-'smallformvariants' => '#/288',
-'smallkanaext' => '#/334',
-'smallkanaextension' => '#/334',
-'so' => 'Gc/So',
-'softdotted' => 'SD/Y',
-'sogd' => '#/685',
-'sogdian' => '#/685',
-'sogo' => '#/686',
-'sora' => '#/687',
-'sorasompeng' => '#/687',
-'soyo' => '#/688',
-'soyombo' => '#/688',
-'space' => 'Perl/SpacePer',
-'spaceperl' => 'Perl/SpacePer',
-'spaceseparator' => 'Gc/Zs',
-'spacingmark' => 'Gc/Mc',
-'spacingmodifierletters' => '#/363',
-'specials' => '#/240',
-'sterm' => 'STerm/Y',
-'sterm=f' => '!STerm/Y',
-'sterm=false' => '!STerm/Y',
-'sterm=n' => '!STerm/Y',
-'sterm=no' => '!STerm/Y',
-'sterm=t' => 'STerm/Y',
-'sterm=true' => 'STerm/Y',
-'sterm=y' => 'STerm/Y',
-'sterm=yes' => 'STerm/Y',
-'sund' => '#/689',
-'sundanese' => '#/689',
-'sundanesesup' => '#/335',
-'sundanesesupplement' => '#/335',
-'suparrowsa' => '#/289',
-'suparrowsb' => '#/290',
-'suparrowsc' => '#/291',
-'superandsub' => '#/315',
-'superscriptsandsubscripts' => '#/315',
-'supmathoperators' => '#/378',
-'supplementalarrowsa' => '#/289',
-'supplementalarrowsb' => '#/290',
-'supplementalarrowsc' => '#/291',
-'supplementalmathematicaloperators' => '#/378',
-'supplementalpunctuation' => '#/354',
-'supplementalsymbolsandpictographs' => '#/407',
-'supplementaryprivateuseareaa' => '#/209',
-'supplementaryprivateuseareab' => '#/210',
-'suppuaa' => '#/209',
-'suppuab' => '#/210',
-'suppunctuation' => '#/354',
-'supsymbolsandpictographs' => '#/407',
-'surrogate' => '#/14',
-'suttonsignwriting' => '#/384',
-'sylo' => '#/690',
-'sylotinagri' => '#/690',
-'symbol' => 'Gc/S',
-'symbolsandpictographsexta' => '#/408',
-'symbolsandpictographsextendeda' => '#/408',
-'syrc' => 'Scx/Syrc',
-'syriac' => 'Scx/Syrc',
-'syriacsup' => '#/271',
-'syriacsupplement' => '#/271',
-'tagalog' => '#/695',
-'tagb' => 'Scx/Tagb',
-'tagbanwa' => 'Scx/Tagb',
-'tags' => '#/127',
-'taile' => '#/691',
-'taitham' => 'Scx/Lana',
-'taiviet' => '#/693',
-'taixuanjing' => '#/317',
-'taixuanjingsymbols' => '#/317',
-'takr' => 'Scx/Takr',
-'takri' => 'Scx/Takr',
-'tale' => '#/691',
-'talu' => 'Scx/Talu',
-'tamil' => 'Scx/Taml',
-'tamilsup' => '#/242',
-'tamilsupplement' => '#/242',
-'taml' => 'Scx/Taml',
-'tang' => '#/692',
-'tangut' => '#/692',
-'tangutcomponents' => '#/379',
-'tavt' => '#/693',
-'telu' => 'Scx/Telu',
-'telugu' => 'Scx/Telu',
-'term' => 'Term/Y',
-'term=f' => '!Term/Y',
-'term=false' => '!Term/Y',
-'term=n' => '!Term/Y',
-'term=no' => '!Term/Y',
-'term=t' => 'Term/Y',
-'term=true' => 'Term/Y',
-'term=y' => 'Term/Y',
-'term=yes' => 'Term/Y',
-'terminalpunctuation' => 'Term/Y',
-'tfng' => '#/694',
-'tglg' => '#/695',
-'thaa' => 'Scx/Thaa',
-'thaana' => 'Scx/Thaa',
-'thai' => '#/696',
-'tibetan' => 'Scx/Tibt',
-'tibt' => 'Scx/Tibt',
-'tifinagh' => '#/694',
-'tirh' => 'Scx/Tirh',
-'tirhuta' => 'Scx/Tirh',
-'title' => 'Perl/Title',
-'titlecase' => 'Perl/Title',
-'titlecaseletter' => 'Perl/Title',
-'transportandmap' => '#/366',
-'transportandmapsymbols' => '#/366',
-'ucas' => '#/129',
-'ucasext' => '#/216',
-'ugar' => '#/697',
-'ugaritic' => '#/697',
-'uideo' => 'UIdeo/Y',
-'uideo=f' => '!UIdeo/Y',
-'uideo=false' => '!UIdeo/Y',
-'uideo=n' => '!UIdeo/Y',
-'uideo=no' => '!UIdeo/Y',
-'uideo=t' => 'UIdeo/Y',
-'uideo=true' => 'UIdeo/Y',
-'uideo=y' => 'UIdeo/Y',
-'uideo=yes' => 'UIdeo/Y',
-'unassigned' => 'Gc/Cn',
-'unicode' => '#/2',
-'unifiedcanadianaboriginalsyllabics' => '#/129',
-'unifiedcanadianaboriginalsyllabicsextended' => '#/216',
-'unifiedideograph' => 'UIdeo/Y',
-'unknown' => 'Scx/Zzzz',
-'upper' => 'Upper/Y',
-'upper=f' => '!Upper/Y',
-'upper=false' => '!Upper/Y',
-'upper=n' => '!Upper/Y',
-'upper=no' => '!Upper/Y',
-'upper=t' => 'Upper/Y',
-'upper=true' => 'Upper/Y',
-'upper=y' => 'Upper/Y',
-'upper=yes' => 'Upper/Y',
-'uppercase' => 'Upper/Y',
-'uppercaseletter' => 'Gc/Lu',
-'vai' => '#/626',
-'vaii' => '#/626',
-'variationselector' => '#/92',
-'variationselectors' => '#/110',
-'variationselectorssupplement' => '#/148',
-'vedicext' => '#/245',
-'vedicextensions' => '#/245',
-'verticalforms' => '#/344',
-'vertspace' => '#/4',
-'vo=r' => 'Vo/R',
-'vo=rotated' => 'Vo/R',
-'vo=tr' => 'Vo/Tr',
-'vo=transformedrotated' => 'Vo/Tr',
-'vo=transformedupright' => 'Vo/Tu',
-'vo=tu' => 'Vo/Tu',
-'vo=u' => 'Vo/U',
-'vo=upright' => 'Vo/U',
-'vs' => '#/92',
-'vs=f' => '#/!92',
-'vs=false' => '#/!92',
-'vs=n' => '#/!92',
-'vs=no' => '#/!92',
-'vs=t' => '#/92',
-'vs=true' => '#/92',
-'vs=y' => '#/92',
-'vs=yes' => '#/92',
-'vssup' => '#/148',
-'wancho' => '#/699',
-'wara' => '#/698',
-'warangciti' => '#/698',
-'wb=aletter' => 'WB/LE',
-'wb=cr' => '#/63',
-'wb=doublequote' => '#/93',
-'wb=dq' => '#/93',
-'wb=eb' => '#/0',
-'wb=ebase' => '#/0',
-'wb=ebasegaz' => '#/0',
-'wb=ebg' => '#/0',
-'wb=em' => '#/0',
-'wb=emodifier' => '#/0',
-'wb=ex' => 'WB/EX',
-'wb=extend' => 'WB/Extend',
-'wb=extendnumlet' => 'WB/EX',
-'wb=fo' => 'WB/FO',
-'wb=format' => 'WB/FO',
-'wb=gaz' => '#/0',
-'wb=glueafterzwj' => '#/0',
-'wb=hebrewletter' => 'WB/HL',
-'wb=hl' => 'WB/HL',
-'wb=ka' => 'WB/KA',
-'wb=katakana' => 'WB/KA',
-'wb=le' => 'WB/LE',
-'wb=lf' => '#/64',
-'wb=mb' => 'WB/MB',
-'wb=midletter' => 'WB/ML',
-'wb=midnum' => 'WB/MN',
-'wb=midnumlet' => 'WB/MB',
-'wb=ml' => 'WB/ML',
-'wb=mn' => 'WB/MN',
-'wb=newline' => '#/94',
-'wb=nl' => '#/94',
-'wb=nu' => 'WB/NU',
-'wb=numeric' => 'WB/NU',
-'wb=other' => 'WB/XX',
-'wb=regionalindicator' => '#/65',
-'wb=ri' => '#/65',
-'wb=singlequote' => '#/95',
-'wb=sq' => '#/95',
-'wb=wsegspace' => 'WB/WSegSpac',
-'wb=xx' => 'WB/XX',
-'wb=zwj' => '#/66',
-'wcho' => '#/699',
-'whitespace' => 'Perl/SpacePer',
-'word' => 'Perl/Word',
-'wspace' => 'Perl/SpacePer',
-'wspace=f' => '!Perl/SpacePer',
-'wspace=false' => '!Perl/SpacePer',
-'wspace=n' => '!Perl/SpacePer',
-'wspace=no' => '!Perl/SpacePer',
-'wspace=t' => 'Perl/SpacePer',
-'wspace=true' => 'Perl/SpacePer',
-'wspace=y' => 'Perl/SpacePer',
-'wspace=yes' => 'Perl/SpacePer',
-'xdigit' => 'Hex/Y',
-'xidc' => 'XIDC/Y',
-'xidc=f' => '!XIDC/Y',
-'xidc=false' => '!XIDC/Y',
-'xidc=n' => '!XIDC/Y',
-'xidc=no' => '!XIDC/Y',
-'xidc=t' => 'XIDC/Y',
-'xidc=true' => 'XIDC/Y',
-'xidc=y' => 'XIDC/Y',
-'xidc=yes' => 'XIDC/Y',
-'xidcontinue' => 'XIDC/Y',
-'xids' => 'XIDS/Y',
-'xids=f' => '!XIDS/Y',
-'xids=false' => '!XIDS/Y',
-'xids=n' => '!XIDS/Y',
-'xids=no' => '!XIDS/Y',
-'xids=t' => 'XIDS/Y',
-'xids=true' => 'XIDS/Y',
-'xids=y' => 'XIDS/Y',
-'xids=yes' => 'XIDS/Y',
-'xidstart' => 'XIDS/Y',
-'xpeo' => '#/700',
-'xperlspace' => 'Perl/SpacePer',
-'xposixalnum' => 'Perl/Alnum',
-'xposixalpha' => 'Alpha/Y',
-'xposixblank' => 'Perl/Blank',
-'xposixcntrl' => '#/413',
-'xposixdigit' => 'Gc/Nd',
-'xposixgraph' => 'Perl/Graph',
-'xposixlower' => 'Lower/Y',
-'xposixprint' => 'Perl/Print',
-'xposixpunct' => 'Perl/XPosixPu',
-'xposixspace' => 'Perl/SpacePer',
-'xposixupper' => 'Upper/Y',
-'xposixword' => 'Perl/Word',
-'xposixxdigit' => 'Hex/Y',
-'xsux' => 'Scx/Xsux',
-'yi' => 'Scx/Yi',
-'yiii' => 'Scx/Yi',
-'yijing' => '#/175',
-'yijinghexagramsymbols' => '#/175',
-'yiradicals' => '#/293',
-'yisyllables' => '#/318',
-'z' => 'Gc/Z',
-'zanabazarsquare' => '#/701',
-'zanb' => '#/701',
-'zinh' => 'Scx/Zinh',
-'zl' => '#/415',
-'zp' => '#/416',
-'zs' => 'Gc/Zs',
-'zyyy' => 'Scx/Zyyy',
-'zzzz' => 'Scx/Zzzz',
-);
-
-# Maps floating point to fractional form
-%utf8::nv_floating_to_rational = (
-'-5.00e-01' => '-1/2',
-'1.00e-01' => '1/10',
-'1.11e-01' => '1/9',
-'1.25e-01' => '1/8',
-'1.25e-02' => '1/80',
-'1.43e-01' => '1/7',
-'1.50e+00' => '3/2',
-'1.50e-01' => '3/20',
-'1.56e-02' => '1/64',
-'1.67e-01' => '1/6',
-'1.88e-01' => '3/16',
-'2.00e-01' => '1/5',
-'2.50e+00' => '5/2',
-'2.50e-01' => '1/4',
-'2.50e-02' => '1/40',
-'3.12e-02' => '1/32',
-'3.13e-02' => '1/32',
-'3.13e-03' => '1/320',
-'3.33e-01' => '1/3',
-'3.50e+00' => '7/2',
-'3.75e-01' => '3/8',
-'3.75e-02' => '3/80',
-'4.00e-01' => '2/5',
-'4.17e-01' => '5/12',
-'4.50e+00' => '9/2',
-'4.69e-02' => '3/64',
-'5.00e-01' => '1/2',
-'5.00e-02' => '1/20',
-'5.50e+00' => '11/2',
-'5.83e-01' => '7/12',
-'6.00e-01' => '3/5',
-'6.25e-01' => '5/8',
-'6.25e-02' => '1/16',
-'6.25e-03' => '1/160',
-'6.50e+00' => '13/2',
-'6.67e-01' => '2/3',
-'7.50e+00' => '15/2',
-'7.50e-01' => '3/4',
-'8.00e-01' => '4/5',
-'8.33e-01' => '5/6',
-'8.33e-02' => '1/12',
-'8.50e+00' => '17/2',
-'8.75e-01' => '7/8',
-'9.17e-01' => '11/12',
-);
-
-# If a %e floating point number doesn't have this number of digits in it after
-# the decimal point to get this close to a fraction, it isn't considered to be
-# that fraction even if all the digits it does have match.
-$utf8::e_precision = 2;
-
-# Deprecated tables to generate a warning for. The key is the file containing
-# the table, so as to avoid duplication, as many property names can map to the
-# file, but we only need one entry for all of them.
-%utf8::why_deprecated = (
-'#/508' => 'Surrogates should never appear in well-formed text, and therefore shouldn\'t be the basis for line breaking',
-'Hyphen/T' => 'Supplanted by Line_Break property values; see www.unicode.org/reports/tr14',
-);
-
-# A few properties have different behavior under /i matching. This maps
-# those to substitute files to use under /i.
-%utf8::caseless_equivalent = (
-'gc=ll' => 'Gc/LC',
-'gc=lowercaseletter' => 'Gc/LC',
-'gc=lt' => 'Gc/LC',
-'gc=lu' => 'Gc/LC',
-'gc=titlecaseletter' => 'Gc/LC',
-'gc=uppercaseletter' => 'Gc/LC',
-'isll' => 'Gc/LC',
-'islower' => 'Cased/Y',
-'islowercase' => 'Cased/Y',
-'islowercaseletter' => 'Gc/LC',
-'islt' => 'Gc/LC',
-'islu' => 'Gc/LC',
-'isposixlower' => '#/6',
-'isposixupper' => '#/6',
-'istitle' => 'Cased/Y',
-'istitlecase' => 'Cased/Y',
-'istitlecaseletter' => 'Gc/LC',
-'isupper' => 'Cased/Y',
-'isuppercase' => 'Cased/Y',
-'isuppercaseletter' => 'Gc/LC',
-'isxposixlower' => 'Cased/Y',
-'isxposixupper' => 'Cased/Y',
-'ll' => 'Gc/LC',
-'lower' => 'Cased/Y',
-'lower=f' => '!Cased/Y',
-'lower=false' => '!Cased/Y',
-'lower=n' => '!Cased/Y',
-'lower=no' => '!Cased/Y',
-'lower=t' => 'Cased/Y',
-'lower=true' => 'Cased/Y',
-'lower=y' => 'Cased/Y',
-'lower=yes' => 'Cased/Y',
-'lowercase' => 'Cased/Y',
-'lowercaseletter' => 'Gc/LC',
-'lt' => 'Gc/LC',
-'lu' => 'Gc/LC',
-'posixlower' => '#/6',
-'posixupper' => '#/6',
-'title' => 'Cased/Y',
-'titlecase' => 'Cased/Y',
-'titlecaseletter' => 'Gc/LC',
-'upper' => 'Cased/Y',
-'upper=f' => '!Cased/Y',
-'upper=false' => '!Cased/Y',
-'upper=n' => '!Cased/Y',
-'upper=no' => '!Cased/Y',
-'upper=t' => 'Cased/Y',
-'upper=true' => 'Cased/Y',
-'upper=y' => 'Cased/Y',
-'upper=yes' => 'Cased/Y',
-'uppercase' => 'Cased/Y',
-'uppercaseletter' => 'Gc/LC',
-'xposixlower' => 'Cased/Y',
-'xposixupper' => 'Cased/Y',
-);
-
-# Property names to mapping files
-%utf8::loose_property_to_file_of = (
-'age' => 'To/Age',
-'bc' => 'To/Bc',
-'bidiclass' => 'To/Bc',
-'bidimirroringglyph' => 'To/Bmg',
-'bidipairedbracket' => 'To/Bpb',
-'bidipairedbrackettype' => 'To/Bpt',
-'bmg' => 'To/Bmg',
-'bpb' => 'To/Bpb',
-'bpt' => 'To/Bpt',
-'canonicalcombiningclass' => 'CombiningClass',
-'casefolding' => 'To/Cf',
-'category' => 'To/Gc',
-'ccc' => 'CombiningClass',
-'cf' => 'To/Cf',
-'ea' => 'To/Ea',
-'eastasianwidth' => 'To/Ea',
-'equideo' => 'To/EqUIdeo',
-'equivalentunifiedideograph' => 'To/EqUIdeo',
-'gc' => 'To/Gc',
-'gcb' => 'To/GCB',
-'generalcategory' => 'To/Gc',
-'graphemeclusterbreak' => 'To/GCB',
-'hangulsyllabletype' => 'To/Hst',
-'hst' => 'To/Hst',
-'indicpositionalcategory' => 'To/InPC',
-'indicsyllabiccategory' => 'To/InSC',
-'inpc' => 'To/InPC',
-'insc' => 'To/InSC',
-'isc' => 'To/Isc',
-'isocomment' => 'To/Isc',
-'jg' => 'To/Jg',
-'joininggroup' => 'To/Jg',
-'joiningtype' => 'To/Jt',
-'jt' => 'To/Jt',
-'lb' => 'To/Lb',
-'lc' => 'To/Lc',
-'linebreak' => 'To/Lb',
-'lowercasemapping' => 'To/Lc',
-'na1' => 'To/Na1',
-'namealias' => 'To/NameAlia',
-'nfcqc' => 'To/NFCQC',
-'nfcquickcheck' => 'To/NFCQC',
-'nfdqc' => 'To/NFDQC',
-'nfdquickcheck' => 'To/NFDQC',
-'nfkccasefold' => 'To/NFKCCF',
-'nfkccf' => 'To/NFKCCF',
-'nfkcqc' => 'To/NFKCQC',
-'nfkcquickcheck' => 'To/NFKCQC',
-'nfkdqc' => 'To/NFKDQC',
-'nfkdquickcheck' => 'To/NFKDQC',
-'nt' => 'To/Nt',
-'numerictype' => 'To/Nt',
-'numericvalue' => 'To/Nv',
-'nv' => 'To/Nv',
-'perldecimaldigit' => 'To/PerlDeci',
-'sb' => 'To/SB',
-'sc' => 'To/Sc',
-'script' => 'To/Sc',
-'scriptextensions' => 'To/Scx',
-'scx' => 'To/Scx',
-'sentencebreak' => 'To/SB',
-'tc' => 'To/Tc',
-'titlecasemapping' => 'To/Tc',
-'uc' => 'To/Uc',
-'unicode1name' => 'To/Na1',
-'uppercasemapping' => 'To/Uc',
-'verticalorientation' => 'To/Vo',
-'vo' => 'To/Vo',
-'wb' => 'To/WB',
-'wordbreak' => 'To/WB',
-);
-
-# Property names to mapping files
-%utf8::strict_property_to_file_of = (
-'_perl_gcb' => 'To/GCB',
-'_perl_lb' => 'To/_PerlLB',
-'_perl_name_alias' => 'To/NameAlia',
-'_perl_sb' => 'To/SB',
-'_perl_scx' => 'To/_PerlSCX',
-'_perl_wb' => 'To/WB',
-);
-
-# Files to the swash names within them.
-%utf8::file_to_swash_name = (
-'CombiningClass' => 'ToCombiningClass',
-'To/_PerlLB' => 'To_PerlLB',
-'To/_PerlSCX' => 'To_PerlSCX',
-'To/Age' => 'ToAge',
-'To/Bc' => 'ToBc',
-'To/Bmg' => 'ToBmg',
-'To/Bpb' => 'ToBpb',
-'To/Bpt' => 'ToBpt',
-'To/Cf' => 'ToCf',
-'To/Ea' => 'ToEa',
-'To/EqUIdeo' => 'ToEqUIdeo',
-'To/Gc' => 'ToGc',
-'To/GCB' => 'ToGCB',
-'To/Hst' => 'ToHst',
-'To/InPC' => 'ToInPC',
-'To/InSC' => 'ToInSC',
-'To/Isc' => 'ToIsc',
-'To/Jg' => 'ToJg',
-'To/Jt' => 'ToJt',
-'To/Lb' => 'ToLb',
-'To/Lc' => 'ToLc',
-'To/Na1' => 'ToNa1',
-'To/NameAlia' => 'ToNameAlias',
-'To/NFCQC' => 'ToNFCQC',
-'To/NFDQC' => 'ToNFDQC',
-'To/NFKCCF' => 'ToNFKCCF',
-'To/NFKCQC' => 'ToNFKCQC',
-'To/NFKDQC' => 'ToNFKDQC',
-'To/Nt' => 'ToNt',
-'To/Nv' => 'ToNv',
-'To/PerlDeci' => 'ToPerlDecimalDigit',
-'To/SB' => 'ToSB',
-'To/Sc' => 'ToSc',
-'To/Scx' => 'ToScx',
-'To/Tc' => 'ToTc',
-'To/Uc' => 'ToUc',
-'To/Vo' => 'ToVo',
-'To/WB' => 'ToWB',
-);
-
-1;
diff --git a/gnu/usr.bin/perl/lib/unicore/Index.txt b/gnu/usr.bin/perl/lib/unicore/Index.txt
index f72e05b22e4..498519f58b4 100644
--- a/gnu/usr.bin/perl/lib/unicore/Index.txt
+++ b/gnu/usr.bin/perl/lib/unicore/Index.txt
@@ -603,6 +603,7 @@ bom FEFF
BOMB 1F4A3
BOOK 1F56E
Books 1F4D5
+BOOMERANG 1FA83
Bopomofo Extensions, Chinese 31A0
Bopomofo, Chinese 3100
bottom 22A5
@@ -871,6 +872,7 @@ Chinese, Corner Tone Marks for A700
CHIPMUNK 1F43F
choice, dijkstra 2AFE
choice, n-ary dijkstra 2AFF
+Chorasmian 10FB0
CHRISTMAS TREE 1F384
CHRISTMAS, FATHER 1F385
christogram 2627
@@ -950,6 +952,7 @@ CJK Unified Ideographs Extension C 2A700
CJK Unified Ideographs Extension D 2B740
CJK Unified Ideographs Extension E 2B820
CJK Unified Ideographs Extension F 2CEB0
+CJK Unified Ideographs Extension G 30000
CLAPPING HANDS SIGN 1F44F
claudian antisigma 2183
claudian digamma inversum 2132
@@ -1267,6 +1270,7 @@ COW 1F404
COW FACE 1F42E
cr 000D
CRAB 1F980
+Creative Commons Symbols 1F16D
CREDIT SIGN, TAMIL 0BF7
cremated symbol 26B1
CRESCENT MOON 1F319
@@ -1594,6 +1598,7 @@ DISCONTINUOUS UNDERLINE SYMBOL 2382
discretionary hyphen 00AD
disjunction 2228
DITTO MARK 3003
+Dives Akuru 11900
DIVIDES 2223
Divination, Khmer Numeric Symbols for 17F0
DIVISION SIGN 00F7
@@ -2341,6 +2346,7 @@ GREEK YPOGEGRAMMENI, COMBINING 0345
Greek, Diacritics for 0342
Greek, Precomposed Polytonic 1F00
Gregorian Musical Symbols 1D1D0
+groucho glasses, face with 1F978
GROUND, EARTH 23DA
group lock 21F0
group select (ISO 9995-7) 21E8
@@ -2488,6 +2494,7 @@ Hebrew Letterlike Mathematical Symbols 2135
Hebrew Points and Punctuation 05B0
Hebrew Presentation Forms FB1D
hedera 2767
+HEDGEHOG 1F994
HEH WITH YEH ABOVE, ARABIC LETTER 06C0
HELM SYMBOL 2388
HELMET WITH WHITE CROSS 26D1
@@ -2631,6 +2638,9 @@ Ideographs Extension A, CJK Unified 3400
Ideographs Extension B, CJK Unified 20000
Ideographs Extension C, CJK Unified 2A700
Ideographs Extension D, CJK Unified 2B740
+Ideographs Extension E, CJK Unified 2B820
+Ideographs Extension F, CJK Unified 2CEB0
+Ideographs Extension G, CJK Unified 30000
Ideographs Supplement, CJK Compatibility 2F800
Ideographs, Circled 3280
Ideographs, CJK Compatibility F900
@@ -2881,6 +2891,7 @@ KEYCAP, COMBINING ENCLOSING 20E3
khanda, gurmukhi 262C
Kharoshthi 10A00
Kharoshthi Digits 10A40
+Khitan Small Script 18B00
Khmer 1780
khmer anusvara 17C6
Khmer Consonants 1780
@@ -3127,6 +3138,7 @@ LEFTWARDS ARROW 2190
LEFTWARDS ARROW OVERLAY, COMBINING 20EA
LEFTWARDS BULLET, BLACK 204C
LEFTWARDS HARPOON WITH BARB DOWNWARDS, COMBINING 20ED
+Legacy Computing, Symbols for 1FB00
LENTICULAR BRACKET, LEFT BLACK 3010
LENTICULAR BRACKET, LEFT WHITE 3016
LENTICULAR BRACKET, RIGHT BLACK 3011
@@ -3217,6 +3229,7 @@ LIRA SIGN 20A4
LIRA SIGN, TURKISH 20BA
lira, italian 00A3
Lisu A4D0
+Lisu Supplement 11FB0
liter 2113
LIVRE TOURNOIS SIGN 20B6
LOBSTER 1F99E
@@ -4564,8 +4577,8 @@ rlo 202E
RNAM BCAD, TIBETAN SIGN 0F7F
road closed 26D2
rock in rock, paper, scissors game 270A
-Rohingya, Hanifi 10D00
rofl 1F923
+Rohingya, Hanifi 10D00
Role Symbols 1F481
Role Symbols, Portrait and 1F464
Role Symbols, Portrait and 1F930
@@ -5399,6 +5412,7 @@ tamil varudam 0BF5
TAMIL YEAR SIGN 0BF5
Tangut 17000
Tangut Components 18800
+Tangut Supplement 18D00
TAPE DRIVE 2707
TAPER, CONICAL 2332
TARGET, ROUND 1F78B
@@ -5540,6 +5554,7 @@ TIMES, SQUARED 22A0
TINY 29FE
TIPPI, GURMUKHI 0A70
Tirhuta 11480
+TIRONIAN SIGN CAPITAL ET 2E52
TIRONIAN SIGN ET 204A
TITLO LEFT HALF, COMBINING CYRILLIC FE2E
TODO SOFT HYPHEN, MONGOLIAN 1806
@@ -5664,6 +5679,8 @@ TWO DOT LEADER 2025
TWO DOT PUNCTUATION 205A
TWO, SUPERSCRIPT 00B2
TWO-EM DASH 2E3A
+TYPE A ELECTRONICS, SYMBOL FOR 2B97
+type B electronics, symbol for 3036
Typicon Punctuation 2E44
Typicon Symbols 1F900
tyrannosaurus rex 1F996
@@ -6018,6 +6035,7 @@ YAMAKKAN, THAI CHARACTER 0E4E
YEAR SIGN, TAMIL 0BF5
YEN SIGN 00A5
yentamna, armenian 058A
+Yezidi 10E80
Yi Radicals A490
Yi Syllables A000
Yiddish Digraphs 05F0
diff --git a/gnu/usr.bin/perl/lib/unicore/IndicPositionalCategory.txt b/gnu/usr.bin/perl/lib/unicore/IndicPositionalCategory.txt
index 24a82b3c080..ee74dbe0fae 100644
--- a/gnu/usr.bin/perl/lib/unicore/IndicPositionalCategory.txt
+++ b/gnu/usr.bin/perl/lib/unicore/IndicPositionalCategory.txt
@@ -1,5 +1,5 @@
-# IndicPositionalCategory-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW, RP]
+# IndicPositionalCategory-13.0.0.txt
+# Date: 2019-07-23, 00:01:00 GMT [KW, RP]
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -23,6 +23,16 @@
# is designed primarily to supplement the Indic_Syllabic_Category
# property.
#
+# In addition to combining marks associated with Indic scripts, the
+# Indic_Positional_Category has non-trivial values for special signs
+# associated with Indic_Syllabic_Category=Consonant_Prefixed or
+# Indic_Syllabic_Category=Consonant_Preceding_Repha. Those signs
+# have General_Category=Lo, rather than being combining marks.
+# They occur in initial position in syllabic structure. However, when
+# rendered, they appear as marks positioned with respect to another
+# base letter (usually above it). Hence, having an explicit value for
+# Indic_Positional_Category for those signs can be helpful.
+#
# Note that this property is *not* intended as
# a prescriptive property regarding display or font design,
# for a number of reasons. Good font design requires information
@@ -57,14 +67,14 @@
# following:
#
# Ahom, Balinese, Batak, Bengali, Bhaiksuki, Brahmi, Buginese, Buhid,
-# Chakma, Cham, Devanagari, Dogra, Grantha, Gujarati, Gunjala Gondi,
-# Gurmukhi, Hanunoo, Javanese, Kaithi, Kannada, Kharoshthi, Khmer,
-# Khojki, Khudawadi, Lao, Lepcha, Limbu, Makasar, Malayalam, Marchen,
-# Masaram Gondi, Meetei Mayek, Modi, Myanmar, Nandinagari, Newa,
-# New Tai Lue, Oriya, Rejang, Saurashtra, Sharada, Siddham, Sinhala,
-# Soyombo, Sundanese, Syloti Nagri, Tagalog, Tagbanwa, Tai Tham, Tai
-# Viet, Takri, Tamil, Telugu, Thai, Tibetan, Tirhuta, and Zanabazar
-# Square.
+# Chakma, Cham, Devanagari, Dives Akuru, Dogra, Grantha, Gujarati,
+# Gunjala Gondi, Gurmukhi, Hanunoo, Javanese, Kaithi, Kannada,
+# Kharoshthi, Khmer, Khojki, Khudawadi, Lao, Lepcha, Limbu, Makasar,
+# Malayalam, Marchen, Masaram Gondi, Meetei Mayek, Modi, Myanmar,
+# Nandinagari, Newa, New Tai Lue, Oriya, Rejang, Saurashtra, Sharada,
+# Siddham, Sinhala, Soyombo, Sundanese, Syloti Nagri, Tagalog,
+# Tagbanwa, Tai Tham, Tai Viet, Takri, Tamil, Telugu, Thai, Tibetan,
+# Tirhuta, and Zanabazar Square.
#
# All characters for all other scripts not in that list
# take the default value for this property.
@@ -73,7 +83,7 @@
# list of Indic scripts, including those which do not have
# positional characters. Currently, those additional
# Indic scripts without positional characters are
-# Kayah Li, Mahajani, Multani, Phags-pa, and Tai Le.
+# Multani, Phags-pa, and Tai Le.
#
# Notes:
#
@@ -211,7 +221,6 @@ A8B4..A8C3 ; Right # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOW
A952..A953 ; Right # Mc [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
A983 ; Right # Mc JAVANESE SIGN WIGNYAN
A9B4..A9B5 ; Right # Mc [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
-A9BE ; Right # Mc JAVANESE CONSONANT SIGN PENGKAL
AA33 ; Right # Mc CHAM CONSONANT SIGN YA
AA4D ; Right # Mc CHAM CONSONANT SIGN FINAL H
AA7B ; Right # Mc MYANMAR SIGN PAO KAREN TONE
@@ -267,6 +276,9 @@ ABEC ; Right # Mc MEETEI MAYEK LUM IYEK
1182C ; Right # Mc DOGRA VOWEL SIGN AA
1182E ; Right # Mc DOGRA VOWEL SIGN II
11838 ; Right # Mc DOGRA SIGN VISARGA
+11930..11934 ; Right # Mc [5] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN UU
+1193D ; Right # Mc DIVES AKURU SIGN HALANTA
+11940 ; Right # Mc DIVES AKURU MEDIAL YA
119D1 ; Right # Mc NANDINAGARI VOWEL SIGN AA
119D3 ; Right # Mc NANDINAGARI VOWEL SIGN II
119DC..119DF ; Right # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
@@ -277,6 +289,7 @@ ABEC ; Right # Mc MEETEI MAYEK LUM IYEK
11C3E ; Right # Mc BHAIKSUKI SIGN VISARGA
11CA9 ; Right # Mc MARCHEN SUBJOINED LETTER YA
11CB4 ; Right # Mc MARCHEN VOWEL SIGN O
+11D46 ; Right # Lo MASARAM GONDI REPHA
11D8A..11D8E ; Right # Mc [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU
11D93..11D94 ; Right # Mc [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU
11D96 ; Right # Mc GUNJALA GONDI SIGN VISARGA
@@ -314,6 +327,7 @@ AAEE ; Left # Mc MEETEI MAYEK VOWEL SIGN AU
110B1 ; Left # Mc KAITHI VOWEL SIGN I
1112C ; Left # Mc CHAKMA VOWEL SIGN E
111B4 ; Left # Mc SHARADA VOWEL SIGN I
+111CE ; Left # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
112E1 ; Left # Mc KHUDAWADI VOWEL SIGN I
11347..11348 ; Left # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
11436 ; Left # Mc NEWA VOWEL SIGN I
@@ -324,6 +338,8 @@ AAEE ; Left # Mc MEETEI MAYEK VOWEL SIGN AU
116AE ; Left # Mc TAKRI VOWEL SIGN I
11726 ; Left # Mc AHOM VOWEL SIGN E
1182D ; Left # Mc DOGRA VOWEL SIGN I
+11935 ; Left # Mc DIVES AKURU VOWEL SIGN E
+11937 ; Left # Mc DIVES AKURU VOWEL SIGN AI
119D2 ; Left # Mc NANDINAGARI VOWEL SIGN I
119E4 ; Left # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
11CB1 ; Left # Mc MARCHEN VOWEL SIGN I
@@ -362,6 +378,7 @@ AABB..AABC ; Visual_Order_Left # Lo [2] TAI VIET VOWEL AUE..TAI VIET VOWEL
114BC ; Left_And_Right # Mc TIRHUTA VOWEL SIGN O
114BE ; Left_And_Right # Mc TIRHUTA VOWEL SIGN AU
115BA ; Left_And_Right # Mc SIDDHAM VOWEL SIGN O
+11938 ; Left_And_Right # Mc DIVES AKURU VOWEL SIGN O
# Indic_Positional_Category=Top
@@ -382,7 +399,7 @@ AABB..AABC ; Visual_Order_Left # Lo [2] TAI VIET VOWEL AUE..TAI VIET VOWEL
0AFA..0AFF ; Top # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
0B01 ; Top # Mn ORIYA SIGN CANDRABINDU
0B3F ; Top # Mn ORIYA VOWEL SIGN I
-0B56 ; Top # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; Top # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B82 ; Top # Mn TAMIL SIGN ANUSVARA
0BC0 ; Top # Mn TAMIL VOWEL SIGN II
0BCD ; Top # Mn TAMIL SIGN VIRAMA
@@ -399,6 +416,8 @@ AABB..AABC ; Visual_Order_Left # Lo [2] TAI VIET VOWEL AUE..TAI VIET VOWEL
0D00..0D01 ; Top # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D3B..0D3C ; Top # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
0D4D ; Top # Mn MALAYALAM SIGN VIRAMA
+0D4E ; Top # Lo MALAYALAM LETTER DOT REPH
+0D81 ; Top # Mn SINHALA SIGN CANDRABINDU
0DCA ; Top # Mn SINHALA SIGN AL-LAKUNA
0DD2..0DD3 ; Top # Mn [2] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN DIGA IS-PILLA
0E31 ; Top # Mn THAI CHARACTER MAI HAN-AKAT
@@ -502,7 +521,9 @@ ABE5 ; Top # Mn MEETEI MAYEK VOWEL SIGN ANAP
11134 ; Top # Mn CHAKMA MAAYYAA
11180..11181 ; Top # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
111BC..111BE ; Top # Mn [3] SHARADA VOWEL SIGN E..SHARADA VOWEL SIGN O
+111C2..111C3 ; Top # Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA
111CB ; Top # Mn SHARADA VOWEL MODIFIER MARK
+111CF ; Top # Mn SHARADA SIGN INVERTED CANDRABINDU
11230..11231 ; Top # Mn [2] KHOJKI VOWEL SIGN E..KHOJKI VOWEL SIGN AI
11234 ; Top # Mn KHOJKI SIGN ANUSVARA
11236..11237 ; Top # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
@@ -530,12 +551,17 @@ ABE5 ; Top # Mn MEETEI MAYEK VOWEL SIGN ANAP
11727 ; Top # Mn AHOM VOWEL SIGN AW
11729..1172B ; Top # Mn [3] AHOM VOWEL SIGN AI..AHOM SIGN KILLER
11833..11837 ; Top # Mn [5] DOGRA VOWEL SIGN E..DOGRA SIGN ANUSVARA
+1193B..1193C ; Top # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193F ; Top # Lo DIVES AKURU PREFIXED NASAL SIGN
+11941 ; Top # Lo DIVES AKURU INITIAL RA
119DA..119DB ; Top # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
11A01 ; Top # Mn ZANABAZAR SQUARE VOWEL SIGN I
11A04..11A09 ; Top # Mn [6] ZANABAZAR SQUARE VOWEL SIGN E..ZANABAZAR SQUARE VOWEL SIGN REVERSED I
11A35..11A38 ; Top # Mn [4] ZANABAZAR SQUARE SIGN CANDRABINDU..ZANABAZAR SQUARE SIGN ANUSVARA
+11A3A ; Top # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
11A51 ; Top # Mn SOYOMBO VOWEL SIGN I
11A54..11A56 ; Top # Mn [3] SOYOMBO VOWEL SIGN E..SOYOMBO VOWEL SIGN OE
+11A84..11A89 ; Top # Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA
11A96 ; Top # Mn SOYOMBO SIGN ANUSVARA
11A98 ; Top # Mn SOYOMBO GEMINATION MARK
11C30..11C31 ; Top # Mn [2] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN II
@@ -629,6 +655,7 @@ ABE5 ; Top # Mn MEETEI MAYEK VOWEL SIGN ANAP
1CDC..1CDF ; Bottom # Mn [4] VEDIC TONE KATHAKA ANUDATTA..VEDIC TONE THREE DOTS BELOW
1CED ; Bottom # Mn VEDIC SIGN TIRYAK
A825 ; Bottom # Mn SYLOTI NAGRI VOWEL SIGN U
+A82C ; Bottom # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A8C4 ; Bottom # Mn SAURASHTRA SIGN VIRAMA
A92B..A92D ; Bottom # Mn [3] KAYAH LI TONE PLOPHU..KAYAH LI TONE CALYA PLOPHU
A947..A949 ; Bottom # Mn [3] REJANG VOWEL SIGN I..REJANG VOWEL SIGN E
@@ -675,6 +702,7 @@ ABED ; Bottom # Mn MEETEI MAYEK APUN IYEK
11728 ; Bottom # Mn AHOM VOWEL SIGN O
1182F..11832 ; Bottom # Mn [4] DOGRA VOWEL SIGN U..DOGRA VOWEL SIGN VOCALIC RR
11839..1183A ; Bottom # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+11943 ; Bottom # Mn DIVES AKURU SIGN NUKTA
119D4..119D7 ; Bottom # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119E0 ; Bottom # Mn NANDINAGARI SIGN VIRAMA
11A02..11A03 ; Bottom # Mn [2] ZANABAZAR SQUARE VOWEL SIGN UE..ZANABAZAR SQUARE VOWEL SIGN U
@@ -735,7 +763,9 @@ ABED ; Bottom # Mn MEETEI MAYEK APUN IYEK
# Indic_Positional_Category=Bottom_And_Right
1B3B ; Bottom_And_Right # Mc BALINESE VOWEL SIGN RA REPA TEDUNG
+A9BE ; Bottom_And_Right # Mc JAVANESE CONSONANT SIGN PENGKAL
A9C0 ; Bottom_And_Right # Mc JAVANESE PANGKON
+11942 ; Bottom_And_Right # Mc DIVES AKURU MEDIAL RA
# Indic_Positional_Category=Bottom_And_Left
@@ -745,6 +775,11 @@ A9BF ; Bottom_And_Left # Mc JAVANESE CONSONANT SIGN CAKRA
1B3D ; Top_And_Bottom_And_Right # Mc BALINESE VOWEL SIGN LA LENGA TEDUNG
+# Indic_Positional_Category=Top_And_Bottom_And_Left
+
+103C ; Top_And_Bottom_And_Left # Mc MYANMAR CONSONANT SIGN MEDIAL RA
+1171E ; Top_And_Bottom_And_Left # Mn AHOM CONSONANT SIGN MEDIAL RA
+
# Indic_Positional_Category=Overstruck
1CD4 ; Overstruck # Mn VEDIC SIGN YAJURVEDIC MIDLINE SVARITA
diff --git a/gnu/usr.bin/perl/lib/unicore/IndicSyllabicCategory.txt b/gnu/usr.bin/perl/lib/unicore/IndicSyllabicCategory.txt
index 91ae6a0291e..8297578d18b 100644
--- a/gnu/usr.bin/perl/lib/unicore/IndicSyllabicCategory.txt
+++ b/gnu/usr.bin/perl/lib/unicore/IndicSyllabicCategory.txt
@@ -1,5 +1,5 @@
-# IndicSyllabicCategory-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW, RP]
+# IndicSyllabicCategory-13.0.0.txt
+# Date: 2019-07-22, 19:55:00 GMT [KW, RP]
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -36,14 +36,15 @@
# Indic_Syllabic_Category are the following:
#
# Ahom, Balinese, Batak, Bengali, Bhaiksuki, Brahmi, Buginese, Buhid,
-# Chakma, Cham, Devanagari, Dogra, Grantha, Gujarati, Gunjala Gondi,
-# Gurmukhi, Hanunoo, Javanese, Kaithi, Kannada, Kayah Li, Kharoshthi,
-# Khmer, Khojki, Khudawadi, Lao, Lepcha, Limbu, Mahajani, Makasar,
-# Malayalam, Marchen, Masaram Gondi, Meetei Mayek, Modi, Multani,
-# Myanmar, Nandinagari, Newa, New Tai Lue, Oriya, Phags-pa, Rejang,
-# Saurashtra, Sharada, Siddham, Sinhala, Soyombo, Sundanese, Syloti
-# Nagri, Tagalog, Tagbanwa, Tai Le, Tai Tham, Tai Viet, Takri, Tamil,
-# Telugu, Thai, Tibetan, Tirhuta, and Zanabazar Square.
+# Chakma, Cham, Devanagari, Dives Akuru, Dogra, Grantha, Gujarati,
+# Gunjala Gondi, Gurmukhi, Hanunoo, Javanese, Kaithi, Kannada,
+# Kayah Li, Kharoshthi, Khmer, Khojki, Khudawadi, Lao, Lepcha, Limbu,
+# Mahajani, Makasar, Malayalam, Marchen, Masaram Gondi, Meetei Mayek,
+# Modi, Multani, Myanmar, Nandinagari, Newa, New Tai Lue, Oriya,
+# Phags-pa, Rejang, Saurashtra, Sharada, Siddham, Sinhala, Soyombo,
+# Sundanese, Syloti Nagri, Tagalog, Tagbanwa, Tai Le, Tai Tham,
+# Tai Viet, Takri, Tamil, Telugu, Thai, Tibetan, Tirhuta, and
+# Zanabazar Square.
#
# All characters for all other scripts not in that list
# take the default value for this property, unless they
@@ -85,6 +86,8 @@
0C82 ; Bindu # Mc KANNADA SIGN ANUSVARA
0D00..0D01 ; Bindu # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02 ; Bindu # Mc MALAYALAM SIGN ANUSVARA
+0D04 ; Bindu # Lo MALAYALAM LETTER VEDIC ANUSVARA
+0D81 ; Bindu # Mn SINHALA SIGN CANDRABINDU
0D82 ; Bindu # Mc SINHALA SIGN ANUSVARAYA
0E4D ; Bindu # Mn THAI CHARACTER NIKHAHIT
0ECD ; Bindu # Mn LAO NIGGAHITA
@@ -109,6 +112,7 @@ A980..A981 ; Bindu # Mn [2] JAVANESE SIGN PANYANGGA..JAVANESE SIGN CECAK
11080..11081 ; Bindu # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
11100..11101 ; Bindu # Mn [2] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN ANUSVARA
11180..11181 ; Bindu # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+111CF ; Bindu # Mn SHARADA SIGN INVERTED CANDRABINDU
11234 ; Bindu # Mn KHOJKI SIGN ANUSVARA
112DF ; Bindu # Mn KHUDAWADI SIGN ANUSVARA
11300..11301 ; Bindu # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
@@ -121,6 +125,7 @@ A980..A981 ; Bindu # Mn [2] JAVANESE SIGN PANYANGGA..JAVANESE SIGN CECAK
1163D ; Bindu # Mn MODI SIGN ANUSVARA
116AB ; Bindu # Mn TAKRI SIGN ANUSVARA
11837 ; Bindu # Mn DOGRA SIGN ANUSVARA
+1193B..1193C ; Bindu # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
119DE ; Bindu # Mc NANDINAGARI SIGN ANUSVARA
11A35..11A38 ; Bindu # Mn [4] ZANABAZAR SQUARE SIGN CANDRABINDU..ZANABAZAR SQUARE SIGN ANUSVARA
11A96 ; Bindu # Mn SOYOMBO SIGN ANUSVARA
@@ -238,6 +243,7 @@ A9B3 ; Nukta # Mn JAVANESE SIGN CECAK TELU
115C0 ; Nukta # Mn SIDDHAM SIGN NUKTA
116B7 ; Nukta # Mn TAKRI SIGN NUKTA
1183A ; Nukta # Mn DOGRA SIGN NUKTA
+11943 ; Nukta # Mn DIVES AKURU SIGN NUKTA
11D42 ; Nukta # Mn MASARAM GONDI SIGN NUKTA
# ================================================
@@ -302,11 +308,13 @@ A9C0 ; Virama # Mc JAVANESE PANGKON
1A7A ; Pure_Killer # Mn TAI THAM SIGN RA HAAM
1BAA ; Pure_Killer # Mc SUNDANESE SIGN PAMAAEH
1BF2..1BF3 ; Pure_Killer # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
+A82C ; Pure_Killer # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A953 ; Pure_Killer # Mc REJANG VIRAMA
ABED ; Pure_Killer # Mn MEETEI MAYEK APUN IYEK
11134 ; Pure_Killer # Mn CHAKMA MAAYYAA
112EA ; Pure_Killer # Mn KHUDAWADI SIGN VIRAMA
1172B ; Pure_Killer # Mn AHOM SIGN KILLER
+1193D ; Pure_Killer # Mc DIVES AKURU SIGN HALANTA
11A34 ; Pure_Killer # Mn ZANABAZAR SQUARE SIGN VIRAMA
11D44 ; Pure_Killer # Mn MASARAM GONDI SIGN HALANTA
@@ -330,6 +338,7 @@ ABED ; Pure_Killer # Mn MEETEI MAYEK APUN IYEK
AAF6 ; Invisible_Stacker # Mn MEETEI MAYEK VIRAMA
10A3F ; Invisible_Stacker # Mn KHAROSHTHI VIRAMA
11133 ; Invisible_Stacker # Mn CHAKMA VIRAMA
+1193E ; Invisible_Stacker # Mn DIVES AKURU VIRAMA
11A47 ; Invisible_Stacker # Mn ZANABAZAR SQUARE SUBJOINER
11A99 ; Invisible_Stacker # Mn SOYOMBO SUBJOINER
11D45 ; Invisible_Stacker # Mn MASARAM GONDI VIRAMA
@@ -416,6 +425,8 @@ ABD1 ; Vowel_Independent # Lo MEETEI MAYEK LETTER ATIYA
11600..1160D ; Vowel_Independent # Lo [14] MODI LETTER A..MODI LETTER AU
11680..11689 ; Vowel_Independent # Lo [10] TAKRI LETTER A..TAKRI LETTER AU
11800..11809 ; Vowel_Independent # Lo [10] DOGRA LETTER A..DOGRA LETTER AU
+11900..11906 ; Vowel_Independent # Lo [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E
+11909 ; Vowel_Independent # Lo DIVES AKURU LETTER O
119A0..119A7 ; Vowel_Independent # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119AD ; Vowel_Independent # Lo [4] NANDINAGARI LETTER E..NANDINAGARI LETTER AU
11A00 ; Vowel_Independent # Lo ZANABAZAR SQUARE LETTER A
@@ -470,7 +481,7 @@ ABD1 ; Vowel_Independent # Lo MEETEI MAYEK LETTER ATIYA
0B41..0B44 ; Vowel_Dependent # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
0B47..0B48 ; Vowel_Dependent # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4C ; Vowel_Dependent # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
-0B56 ; Vowel_Dependent # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; Vowel_Dependent # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57 ; Vowel_Dependent # Mc ORIYA AU LENGTH MARK
0B62..0B63 ; Vowel_Dependent # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
0BBE..0BBF ; Vowel_Dependent # Mc [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
@@ -617,6 +628,7 @@ ABE9..ABEA ; Vowel_Dependent # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEET
111B6..111BE ; Vowel_Dependent # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111BF ; Vowel_Dependent # Mc SHARADA VOWEL SIGN AU
111CB..111CC ; Vowel_Dependent # Mn [2] SHARADA VOWEL MODIFIER MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CE ; Vowel_Dependent # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
1122C..1122E ; Vowel_Dependent # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
1122F..11231 ; Vowel_Dependent # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11232..11233 ; Vowel_Dependent # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
@@ -654,6 +666,8 @@ ABE9..ABEA ; Vowel_Dependent # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEET
11727..1172A ; Vowel_Dependent # Mn [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM
1182C..1182E ; Vowel_Dependent # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
1182F..11836 ; Vowel_Dependent # Mn [8] DOGRA VOWEL SIGN U..DOGRA VOWEL SIGN AU
+11930..11935 ; Vowel_Dependent # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; Vowel_Dependent # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
119D1..119D3 ; Vowel_Dependent # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
119D4..119D7 ; Vowel_Dependent # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119DA..119DB ; Vowel_Dependent # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
@@ -852,6 +866,7 @@ ABD2..ABDA ; Consonant # Lo [9] MEETEI MAYEK LETTER GOK..MEETEI MAYEK LETTE
1108D..110AF ; Consonant # Lo [35] KAITHI LETTER KA..KAITHI LETTER HA
11107..11126 ; Consonant # Lo [32] CHAKMA LETTER KAA..CHAKMA LETTER HAA
11144 ; Consonant # Lo CHAKMA LETTER LHAA
+11147 ; Consonant # Lo CHAKMA LETTER VAA
11155..11172 ; Consonant # Lo [30] MAHAJANI LETTER KA..MAHAJANI LETTER RRA
11191..111B2 ; Consonant # Lo [34] SHARADA LETTER KA..SHARADA LETTER HA
11208..11211 ; Consonant # Lo [10] KHOJKI LETTER KA..KHOJKI LETTER JJA
@@ -874,6 +889,9 @@ ABD2..ABDA ; Consonant # Lo [9] MEETEI MAYEK LETTER GOK..MEETEI MAYEK LETTE
116B8 ; Consonant # Lo TAKRI LETTER ARCHAIC KHA
11700..1171A ; Consonant # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
1180A..1182B ; Consonant # Lo [34] DOGRA LETTER KA..DOGRA LETTER RRA
+1190C..11913 ; Consonant # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; Consonant # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; Consonant # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
119AE..119D0 ; Consonant # Lo [35] NANDINAGARI LETTER KA..NANDINAGARI LETTER RRA
11A0B..11A32 ; Consonant # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
11A5C..11A83 ; Consonant # Lo [40] SOYOMBO LETTER KA..SOYOMBO LETTER KSSA
@@ -908,6 +926,7 @@ ABD2..ABDA ; Consonant # Lo [9] MEETEI MAYEK LETTER GOK..MEETEI MAYEK LETTE
0CF1..0CF2 ; Consonant_With_Stacker # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
1CF5..1CF6 ; Consonant_With_Stacker # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
11003..11004 ; Consonant_With_Stacker # Lo [2] BRAHMI SIGN JIHVAMULIYA..BRAHMI SIGN UPADHMANIYA
+11460..11461 ; Consonant_With_Stacker # Lo [2] NEWA SIGN JIHVAMULIYA..NEWA SIGN UPADHMANIYA
# ================================================
@@ -918,6 +937,7 @@ ABD2..ABDA ; Consonant # Lo [9] MEETEI MAYEK LETTER GOK..MEETEI MAYEK LETTE
# [Not derivable]
111C2..111C3 ; Consonant_Prefixed # Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA
+1193F ; Consonant_Prefixed # Lo DIVES AKURU PREFIXED NASAL SIGN
11A3A ; Consonant_Prefixed # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
11A84..11A89 ; Consonant_Prefixed # Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA
@@ -931,6 +951,7 @@ ABD2..ABDA ; Consonant # Lo [9] MEETEI MAYEK LETTER GOK..MEETEI MAYEK LETTE
# [Not derivable]
0D4E ; Consonant_Preceding_Repha # Lo MALAYALAM LETTER DOT REPH
+11941 ; Consonant_Preceding_Repha # Lo DIVES AKURU INITIAL RA
11D46 ; Consonant_Preceding_Repha # Lo MASARAM GONDI REPHA
# ================================================
@@ -1004,6 +1025,8 @@ A9BE..A9BF ; Consonant_Medial # Mc [2] JAVANESE CONSONANT SIGN PENGKAL..JAV
AA33..AA34 ; Consonant_Medial # Mc [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
AA35..AA36 ; Consonant_Medial # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
1171D..1171F ; Consonant_Medial # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
+11940 ; Consonant_Medial # Mc DIVES AKURU MEDIAL YA
+11942 ; Consonant_Medial # Mc DIVES AKURU MEDIAL RA
11A3B..11A3E ; Consonant_Medial # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
11D47 ; Consonant_Medial # Mn MASARAM GONDI RA-KARA
@@ -1266,6 +1289,7 @@ ABF0..ABF9 ; Number # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NI
116C0..116C9 ; Number # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
11730..11739 ; Number # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
1173A..1173B ; Number # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
+11950..11959 ; Number # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
11C50..11C59 ; Number # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
11C5A..11C6C ; Number # No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
11D50..11D59 ; Number # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
diff --git a/gnu/usr.bin/perl/lib/unicore/Jamo.txt b/gnu/usr.bin/perl/lib/unicore/Jamo.txt
index 8f556ed1393..7e171e1cda6 100644
--- a/gnu/usr.bin/perl/lib/unicore/Jamo.txt
+++ b/gnu/usr.bin/perl/lib/unicore/Jamo.txt
@@ -1,5 +1,5 @@
-# Jamo-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW, LI]
+# Jamo-13.0.0.txt
+# Date: 2019-09-09, 19:46:00 GMT [KW, LI]
# © 2019 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -8,7 +8,7 @@
#
# This file defines the Jamo_Short_Name property.
#
-# See Section 3.12 of The Unicode Standard, Version 12.0
+# See Section 3.12 of The Unicode Standard, Version 13.0
# for more information.
#
# Each line contains two fields, separated by a semicolon.
diff --git a/gnu/usr.bin/perl/lib/unicore/LineBreak.txt b/gnu/usr.bin/perl/lib/unicore/LineBreak.txt
index 9728582ab1e..22abddcd90e 100644
--- a/gnu/usr.bin/perl/lib/unicore/LineBreak.txt
+++ b/gnu/usr.bin/perl/lib/unicore/LineBreak.txt
@@ -1,6 +1,6 @@
-# LineBreak-12.1.0.txt
-# Date: 2019-03-31, 22:04:15 GMT [KW, LI]
-# © 2019 Unicode®, Inc.
+# LineBreak-13.0.0.txt
+# Date: 2020-02-17, 07:43:02 GMT [KW, LI]
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -32,9 +32,10 @@
# outside of allocated blocks, default to "ID":
# Plane 2: U+20000..U+2FFFD
# Plane 3: U+30000..U+3FFFD
-# - All unassigned code points in the following Plane 1 range, whether
+# - All unassigned code points in the following Plane 1 ranges, whether
# inside or outside of allocated blocks, also default to "ID":
-# Plane 1 range: U+1F000..U+1FFFD
+# Plane 1 range: U+1F000..U+1FAFF
+# Plane 1 range: U+1FC00..U+1FFFD
# - The unassigned code points in the following block default to "PR":
# Currency Symbols: U+20A0..U+20CF
#
@@ -277,7 +278,7 @@
085E;AL # Po MANDAIC PUNCTUATION
0860..086A;AL # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4;AL # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD;AL # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7;AL # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
08D3..08E1;CM # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
08E2;AL # Cf ARABIC DISPUTED END OF AYAH
08E3..08FF;CM # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
@@ -396,7 +397,7 @@
0B47..0B48;CM # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4C;CM # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
0B4D;CM # Mn ORIYA SIGN VIRAMA
-0B56;CM # Mn ORIYA AI LENGTH MARK
+0B55..0B56;CM # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57;CM # Mc ORIYA AU LENGTH MARK
0B5C..0B5D;AL # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
0B5F..0B61;AL # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
@@ -475,7 +476,7 @@
0CF1..0CF2;AL # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
0D00..0D01;CM # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03;CM # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D05..0D0C;AL # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C;AL # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10;AL # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A;AL # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3B..0D3C;CM # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
@@ -496,6 +497,7 @@
0D70..0D78;AL # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
0D79;PO # So MALAYALAM DATE MARK
0D7A..0D7F;AL # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D81;CM # Mn SINHALA SIGN CANDRABINDU
0D82..0D83;CM # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0D85..0D96;AL # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
0D9A..0DB1;AL # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
@@ -764,6 +766,7 @@
1AA8..1AAD;SA # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
1AB0..1ABD;CM # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE;CM # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0;CM # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03;CM # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04;CM # Mc BALINESE SIGN BISAH
1B05..1B33;AL # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
@@ -1303,7 +1306,7 @@
2B55..2B59;AI # So [5] HEAVY LARGE CIRCLE..HEAVY CIRCLED SALTIRE
2B5A..2B73;AL # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95;AL # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B98..2BFF;AL # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2B97..2BFF;AL # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
2C00..2C2E;AL # Lu [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
2C30..2C5E;AL # Ll [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
2C60..2C7B;AL # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
@@ -1385,6 +1388,8 @@
2E4C;BA # Po MEDIEVAL COMMA
2E4D;AL # Po PARAGRAPHUS MARK
2E4E..2E4F;BA # Po [2] PUNCTUS ELEVATUS MARK..CORNISH VERSE DIVIDER
+2E50..2E51;AL # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+2E52;AL # Po TIRONIAN SIGN CAPITAL ET
2E80..2E99;ID # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
2E9B..2EF3;ID # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
2F00..2FD5;ID # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
@@ -1488,7 +1493,7 @@
3190..3191;ID # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
3192..3195;ID # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
3196..319F;ID # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
-31A0..31BA;ID # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF;ID # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31C0..31E3;ID # So [36] CJK STROKE T..CJK STROKE Q
31F0..31FF;CJ # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
3200..321E;ID # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
@@ -1503,11 +1508,10 @@
32B1..32BF;ID # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
32C0..32FF;ID # So [64] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE ERA NAME REIWA
3300..33FF;ID # So [256] SQUARE APAATO..SQUARE GAL
-3400..4DB5;ID # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4DB6..4DBF;ID # Cn [10] <reserved-4DB6>..<reserved-4DBF>
+3400..4DBF;ID # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
4DC0..4DFF;AL # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
-4E00..9FEF;ID # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
-9FF0..9FFF;ID # Cn [16] <reserved-9FF0>..<reserved-9FFF>
+4E00..9FFC;ID # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
+9FFD..9FFF;ID # Cn [3] <reserved-9FFD>..<reserved-9FFF>
A000..A014;ID # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015;NS # Lm YI SYLLABLE WU
A016..A48C;ID # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -1550,7 +1554,8 @@ A789..A78A;AL # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUA
A78B..A78E;AL # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F;AL # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF;AL # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6;AL # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA;AL # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6;AL # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7;AL # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9;AL # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA;AL # Ll LATIN LETTER SMALL CAPITAL TURNED M
@@ -1566,6 +1571,7 @@ A823..A824;CM # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIG
A825..A826;CM # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827;CM # Mc SYLOTI NAGRI VOWEL SIGN OO
A828..A82B;AL # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+A82C;CM # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A830..A835;AL # No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
A836..A837;AL # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
A838;PO # Sc NORTH INDIC RUPEE MARK
@@ -1670,7 +1676,9 @@ AB28..AB2E;AL # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A;AL # Ll [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5B;AL # Sk MODIFIER BREVE WITH INVERTED BREVE
AB5C..AB5F;AL # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67;AL # Ll [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68;AL # Ll [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69;AL # Lm MODIFIER LETTER SMALL TURNED W
+AB6A..AB6B;AL # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
AB70..ABBF;AL # Ll [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2;AL # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
ABE3..ABE4;CM # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
@@ -2642,7 +2650,7 @@ FFFD;AI # So REPLACEMENT CHARACTER
10179..10189;AL # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
1018A..1018B;AL # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
1018C..1018E;AL # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
-10190..1019B;AL # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+10190..1019C;AL # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
101A0;AL # So GREEK SYMBOL TAU RHO
101D0..101FC;AL # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
101FD;CM # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
@@ -2746,6 +2754,10 @@ FFFD;AI # So REPLACEMENT CHARACTER
10D24..10D27;CM # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
10D30..10D39;NU # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
10E60..10E7E;AL # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+10E80..10EA9;AL # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC;CM # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EAD;BA # Pd YEZIDI HYPHENATION MARK
+10EB0..10EB1;AL # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C;AL # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F1D..10F26;AL # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
10F27;AL # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
@@ -2753,6 +2765,8 @@ FFFD;AI # So REPLACEMENT CHARACTER
10F46..10F50;CM # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
10F51..10F54;AL # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
10F55..10F59;AL # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10FB0..10FC4;AL # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FC5..10FCB;AL # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
10FE0..10FF6;AL # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11000;CM # Mc BRAHMI SIGN CANDRABINDU
11001;CM # Mn BRAHMI SIGN ANUSVARA
@@ -2786,6 +2800,7 @@ FFFD;AI # So REPLACEMENT CHARACTER
11140..11143;BA # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
11144;AL # Lo CHAKMA LETTER LHAA
11145..11146;CM # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147;AL # Lo CHAKMA LETTER VAA
11150..11172;AL # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11173;CM # Mn MAHAJANI SIGN NUKTA
11174;AL # Po MAHAJANI ABBREVIATION SIGN
@@ -2803,6 +2818,8 @@ FFFD;AI # So REPLACEMENT CHARACTER
111C8;BA # Po SHARADA SEPARATOR
111C9..111CC;CM # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
111CD;AL # Po SHARADA SUTRA MARK
+111CE;CM # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF;CM # Mn SHARADA SIGN INVERTED CANDRABINDU
111D0..111D9;NU # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA;AL # Lo SHARADA EKAM
111DB;BB # Po SHARADA SIGN SIDDHAM
@@ -2865,10 +2882,10 @@ FFFD;AI # So REPLACEMENT CHARACTER
1144B..1144E;BA # Po [4] NEWA DANDA..NEWA GAP FILLER
1144F;AL # Po NEWA ABBREVIATION SIGN
11450..11459;NU # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-1145B;BA # Po NEWA PLACEHOLDER MARK
+1145A..1145B;BA # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
1145D;AL # Po NEWA INSERTION SIGN
1145E;CM # Mn NEWA SANDHI MARK
-1145F;AL # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461;AL # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF;AL # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114B0..114B2;CM # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
114B3..114B8;CM # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
@@ -2938,6 +2955,23 @@ FFFD;AI # So REPLACEMENT CHARACTER
118E0..118E9;NU # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
118EA..118F2;AL # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
118FF;AL # Lo WARANG CITI OM
+11900..11906;AL # Lo [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E
+11909;AL # Lo DIVES AKURU LETTER O
+1190C..11913;AL # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916;AL # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F;AL # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935;CM # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938;CM # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C;CM # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D;CM # Mc DIVES AKURU SIGN HALANTA
+1193E;CM # Mn DIVES AKURU VIRAMA
+1193F;AL # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940;CM # Mc DIVES AKURU MEDIAL YA
+11941;AL # Lo DIVES AKURU INITIAL RA
+11942;CM # Mc DIVES AKURU MEDIAL RA
+11943;CM # Mn DIVES AKURU SIGN NUKTA
+11944..11946;BA # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+11950..11959;NU # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
119A0..119A7;AL # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0;AL # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119D1..119D3;CM # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
@@ -3021,6 +3055,7 @@ FFFD;AI # So REPLACEMENT CHARACTER
11EF3..11EF4;CM # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
11EF5..11EF6;CM # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
11EF7..11EF8;AL # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+11FB0;AL # Lo LISU LETTER YHA
11FC0..11FD4;AL # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
11FD5..11FDC;AL # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
11FDD..11FE0;PO # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
@@ -3083,8 +3118,12 @@ FFFD;AI # So REPLACEMENT CHARACTER
16FE0..16FE1;NS # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE2;NS # Po OLD CHINESE HOOK MARK
16FE3;NS # Lm OLD CHINESE ITERATION MARK
+16FE4;GL # Mn KHITAN SMALL SCRIPT FILLER
+16FF0..16FF1;CM # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
17000..187F7;ID # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2;ID # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18AFF;ID # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768
+18B00..18CD5;AL # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08;ID # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B0FF;ID # Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2
1B100..1B11E;ID # Lo [31] HENTAIGANA LETTER RE-3..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152;CJ # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
@@ -3250,14 +3289,15 @@ FFFD;AI # So REPLACEMENT CHARACTER
1F0D1..1F0F5;ID # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
1F0F6..1F0FF;ID # Cn [10] <reserved-1F0F6>..<reserved-1F0FF>
1F100..1F10C;AI # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
-1F10D..1F10F;ID # Cn [3] <reserved-1F10D>..<reserved-1F10F>
+1F10D..1F10F;ID # So [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
1F110..1F12D;AI # So [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD
1F12E..1F12F;AL # So [2] CIRCLED WZ..COPYLEFT SYMBOL
1F130..1F169;AI # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F16A..1F16C;AL # So [3] RAISED MC SIGN..RAISED MR SIGN
-1F16D..1F16F;ID # Cn [3] <reserved-1F16D>..<reserved-1F16F>
+1F16D..1F16F;ID # So [3] CIRCLED CC..CIRCLED HUMAN FIGURE
1F170..1F1AC;AI # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
-1F1AD..1F1E5;ID # Cn [57] <reserved-1F1AD>..<reserved-1F1E5>
+1F1AD;ID # So MASK WORK SYMBOL
+1F1AE..1F1E5;ID # Cn [56] <reserved-1F1AE>..<reserved-1F1E5>
1F1E6..1F1FF;RI # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
1F200..1F202;ID # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
1F203..1F20F;ID # Cn [13] <reserved-1F203>..<reserved-1F20F>
@@ -3348,12 +3388,12 @@ FFFD;AI # So REPLACEMENT CHARACTER
1F6C0;EB # So BATH
1F6C1..1F6CB;ID # So [11] BATHTUB..COUCH AND LAMP
1F6CC;EB # So SLEEPING ACCOMMODATION
-1F6CD..1F6D5;ID # So [9] SHOPPING BAGS..HINDU TEMPLE
-1F6D6..1F6DF;ID # Cn [10] <reserved-1F6D6>..<reserved-1F6DF>
+1F6CD..1F6D7;ID # So [11] SHOPPING BAGS..ELEVATOR
+1F6D8..1F6DF;ID # Cn [8] <reserved-1F6D8>..<reserved-1F6DF>
1F6E0..1F6EC;ID # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
1F6ED..1F6EF;ID # Cn [3] <reserved-1F6ED>..<reserved-1F6EF>
-1F6F0..1F6FA;ID # So [11] SATELLITE..AUTO RICKSHAW
-1F6FB..1F6FF;ID # Cn [5] <reserved-1F6FB>..<reserved-1F6FF>
+1F6F0..1F6FC;ID # So [13] SATELLITE..ROLLER SKATE
+1F6FD..1F6FF;ID # Cn [3] <reserved-1F6FD>..<reserved-1F6FF>
1F700..1F773;AL # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
1F774..1F77F;ID # Cn [12] <reserved-1F774>..<reserved-1F77F>
1F780..1F7D4;AL # So [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR
@@ -3370,9 +3410,11 @@ FFFD;AI # So REPLACEMENT CHARACTER
1F860..1F887;AL # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F888..1F88F;ID # Cn [8] <reserved-1F888>..<reserved-1F88F>
1F890..1F8AD;AL # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-1F8AE..1F8FF;ID # Cn [82] <reserved-1F8AE>..<reserved-1F8FF>
+1F8AE..1F8AF;ID # Cn [2] <reserved-1F8AE>..<reserved-1F8AF>
+1F8B0..1F8B1;ID # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F8B2..1F8FF;ID # Cn [78] <reserved-1F8B2>..<reserved-1F8FF>
1F900..1F90B;AL # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
-1F90C;ID # Cn <reserved-1F90C>
+1F90C;EB # So PINCHED FINGERS
1F90D..1F90E;ID # So [2] WHITE HEART..BROWN HEART
1F90F;EB # So PINCHING HAND
1F910..1F917;ID # So [8] ZIPPER-MOUTH FACE..HUGGING FACE
@@ -3383,22 +3425,18 @@ FFFD;AI # So REPLACEMENT CHARACTER
1F930..1F939;EB # So [10] PREGNANT WOMAN..JUGGLING
1F93A..1F93B;ID # So [2] FENCER..MODERN PENTATHLON
1F93C..1F93E;EB # So [3] WRESTLERS..HANDBALL
-1F93F..1F971;ID # So [51] DIVING MASK..YAWNING FACE
-1F972;ID # Cn <reserved-1F972>
-1F973..1F976;ID # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
-1F977..1F979;ID # Cn [3] <reserved-1F977>..<reserved-1F979>
-1F97A..1F9A2;ID # So [41] FACE WITH PLEADING EYES..SWAN
-1F9A3..1F9A4;ID # Cn [2] <reserved-1F9A3>..<reserved-1F9A4>
-1F9A5..1F9AA;ID # So [6] SLOTH..OYSTER
-1F9AB..1F9AD;ID # Cn [3] <reserved-1F9AB>..<reserved-1F9AD>
-1F9AE..1F9B4;ID # So [7] GUIDE DOG..BONE
+1F93F..1F976;ID # So [56] DIVING MASK..FREEZING FACE
+1F977;EB # So NINJA
+1F978;ID # So DISGUISED FACE
+1F979;ID # Cn <reserved-1F979>
+1F97A..1F9B4;ID # So [59] FACE WITH PLEADING EYES..BONE
1F9B5..1F9B6;EB # So [2] LEG..FOOT
1F9B7;ID # So TOOTH
1F9B8..1F9B9;EB # So [2] SUPERHERO..SUPERVILLAIN
1F9BA;ID # So SAFETY VEST
1F9BB;EB # So EAR WITH HEARING AID
-1F9BC..1F9CA;ID # So [15] MOTORIZED WHEELCHAIR..ICE CUBE
-1F9CB..1F9CC;ID # Cn [2] <reserved-1F9CB>..<reserved-1F9CC>
+1F9BC..1F9CB;ID # So [16] MOTORIZED WHEELCHAIR..BUBBLE TEA
+1F9CC;ID # Cn <reserved-1F9CC>
1F9CD..1F9CF;EB # So [3] STANDING PERSON..DEAF PERSON
1F9D0;ID # So FACE WITH MONOCLE
1F9D1..1F9DD;EB # So [13] ADULT..ELF
@@ -3407,17 +3445,26 @@ FFFD;AI # So REPLACEMENT CHARACTER
1FA54..1FA5F;ID # Cn [12] <reserved-1FA54>..<reserved-1FA5F>
1FA60..1FA6D;ID # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
1FA6E..1FA6F;ID # Cn [2] <reserved-1FA6E>..<reserved-1FA6F>
-1FA70..1FA73;ID # So [4] BALLET SHOES..SHORTS
-1FA74..1FA77;ID # Cn [4] <reserved-1FA74>..<reserved-1FA77>
+1FA70..1FA74;ID # So [5] BALLET SHOES..THONG SANDAL
+1FA75..1FA77;ID # Cn [3] <reserved-1FA75>..<reserved-1FA77>
1FA78..1FA7A;ID # So [3] DROP OF BLOOD..STETHOSCOPE
1FA7B..1FA7F;ID # Cn [5] <reserved-1FA7B>..<reserved-1FA7F>
-1FA80..1FA82;ID # So [3] YO-YO..PARACHUTE
-1FA83..1FA8F;ID # Cn [13] <reserved-1FA83>..<reserved-1FA8F>
-1FA90..1FA95;ID # So [6] RINGED PLANET..BANJO
-1FA96..1FAFF;ID # Cn [106] <reserved-1FA96>..<reserved-1FAFF>
-1FB00..1FFFD;ID # Cn [1278] <reserved-1FB00>..<reserved-1FFFD>
-20000..2A6D6;ID # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
-2A6D7..2A6FF;ID # Cn [41] <reserved-2A6D7>..<reserved-2A6FF>
+1FA80..1FA86;ID # So [7] YO-YO..NESTING DOLLS
+1FA87..1FA8F;ID # Cn [9] <reserved-1FA87>..<reserved-1FA8F>
+1FA90..1FAA8;ID # So [25] RINGED PLANET..ROCK
+1FAA9..1FAAF;ID # Cn [7] <reserved-1FAA9>..<reserved-1FAAF>
+1FAB0..1FAB6;ID # So [7] FLY..FEATHER
+1FAB7..1FABF;ID # Cn [9] <reserved-1FAB7>..<reserved-1FABF>
+1FAC0..1FAC2;ID # So [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAC3..1FACF;ID # Cn [13] <reserved-1FAC3>..<reserved-1FACF>
+1FAD0..1FAD6;ID # So [7] BLUEBERRIES..TEAPOT
+1FAD7..1FAFF;ID # Cn [41] <reserved-1FAD7>..<reserved-1FAFF>
+1FB00..1FB92;AL # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA;AL # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+1FBF0..1FBF9;NU # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+1FC00..1FFFD;ID # Cn [1022] <reserved-1FC00>..<reserved-1FFFD>
+20000..2A6DD;ID # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
+2A6DE..2A6FF;ID # Cn [34] <reserved-2A6DE>..<reserved-2A6FF>
2A700..2B734;ID # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B735..2B73F;ID # Cn [11] <reserved-2B735>..<reserved-2B73F>
2B740..2B81D;ID # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
@@ -3429,7 +3476,8 @@ FFFD;AI # So REPLACEMENT CHARACTER
2F800..2FA1D;ID # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
2FA1E..2FA1F;ID # Cn [2] <reserved-2FA1E>..<reserved-2FA1F>
2FA20..2FFFD;ID # Cn [1502] <reserved-2FA20>..<reserved-2FFFD>
-30000..3FFFD;ID # Cn [65534] <reserved-30000>..<reserved-3FFFD>
+30000..3134A;ID # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+3134B..3FFFD;ID # Cn [60595] <reserved-3134B>..<reserved-3FFFD>
E0001;CM # Cf LANGUAGE TAG
E0020..E007F;CM # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF;CM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
diff --git a/gnu/usr.bin/perl/lib/unicore/NameAliases.txt b/gnu/usr.bin/perl/lib/unicore/NameAliases.txt
index eb9e317e5db..0e62632db59 100644
--- a/gnu/usr.bin/perl/lib/unicore/NameAliases.txt
+++ b/gnu/usr.bin/perl/lib/unicore/NameAliases.txt
@@ -1,5 +1,5 @@
-# NameAliases-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW, LI]
+# NameAliases-13.0.0.txt
+# Date: 2019-09-09, 19:47:00 GMT [KW, LI]
# © 2019 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
diff --git a/gnu/usr.bin/perl/lib/unicore/NamedSequences.txt b/gnu/usr.bin/perl/lib/unicore/NamedSequences.txt
index 0c1d6cbd611..b3c64f18c24 100644
--- a/gnu/usr.bin/perl/lib/unicore/NamedSequences.txt
+++ b/gnu/usr.bin/perl/lib/unicore/NamedSequences.txt
@@ -1,6 +1,6 @@
-# NamedSequences-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW, LI]
-# © 2019 Unicode®, Inc.
+# NamedSequences-13.0.0.txt
+# Date: 2020-01-22, 19:12:00 GMT [KW, LI]
+# © 2020 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
@@ -58,23 +58,28 @@ KEYCAP DIGIT NINE;0039 FE0F 20E3
# Latin letter plus accent combinations.
# These are part of the original set of approved named sequences
# for Unicode 4.1. 2005.
+# Subgroupings of this original set are identified here by
+# purpose and source.
+
+# Subset 1: Originally requested for a Latin orthography
+# of Hausa. See WG2 N1143 and UTC/1996-005. (6 total)
LATIN CAPITAL LETTER A WITH MACRON AND GRAVE;0100 0300
LATIN SMALL LETTER A WITH MACRON AND GRAVE;0101 0300
+LATIN CAPITAL LETTER I WITH MACRON AND GRAVE;012A 0300
+LATIN SMALL LETTER I WITH MACRON AND GRAVE;012B 0300
+LATIN CAPITAL LETTER U WITH MACRON AND GRAVE;016A 0300
+LATIN SMALL LETTER U WITH MACRON AND GRAVE;016B 0300
+
+# Subset 2: Originally requested for a Latin orthography
+# of Yoruba. See WG2 N1143 and UTC/1996-005. (14 total)
+
LATIN CAPITAL LETTER E WITH VERTICAL LINE BELOW;0045 0329
LATIN SMALL LETTER E WITH VERTICAL LINE BELOW;0065 0329
LATIN CAPITAL LETTER E WITH VERTICAL LINE BELOW AND GRAVE;00C8 0329
LATIN SMALL LETTER E WITH VERTICAL LINE BELOW AND GRAVE;00E8 0329
LATIN CAPITAL LETTER E WITH VERTICAL LINE BELOW AND ACUTE;00C9 0329
LATIN SMALL LETTER E WITH VERTICAL LINE BELOW AND ACUTE;00E9 0329
-LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND MACRON;00CA 0304
-LATIN SMALL LETTER E WITH CIRCUMFLEX AND MACRON;00EA 0304
-LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND CARON;00CA 030C
-LATIN SMALL LETTER E WITH CIRCUMFLEX AND CARON;00EA 030C
-LATIN CAPITAL LETTER I WITH MACRON AND GRAVE;012A 0300
-LATIN SMALL LETTER I WITH MACRON AND GRAVE;012B 0300
-LATIN SMALL LETTER I WITH DOT ABOVE AND ACUTE;0069 0307 0301
-LATIN SMALL LETTER NG WITH TILDE ABOVE;006E 0360 0067
LATIN CAPITAL LETTER O WITH VERTICAL LINE BELOW;004F 0329
LATIN SMALL LETTER O WITH VERTICAL LINE BELOW;006F 0329
LATIN CAPITAL LETTER O WITH VERTICAL LINE BELOW AND GRAVE;00D2 0329
@@ -83,8 +88,21 @@ LATIN CAPITAL LETTER O WITH VERTICAL LINE BELOW AND ACUTE;00D3 0329
LATIN SMALL LETTER O WITH VERTICAL LINE BELOW AND ACUTE;00F3 0329
LATIN CAPITAL LETTER S WITH VERTICAL LINE BELOW;0053 0329
LATIN SMALL LETTER S WITH VERTICAL LINE BELOW;0073 0329
-LATIN CAPITAL LETTER U WITH MACRON AND GRAVE;016A 0300
-LATIN SMALL LETTER U WITH MACRON AND GRAVE;016B 0300
+
+# Subset 3: Originally requested for Pinyin forms noted
+# in HKSCS. See L2/02-423 and WG2 N2513. (4 total)
+
+LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND MACRON;00CA 0304
+LATIN SMALL LETTER E WITH CIRCUMFLEX AND MACRON;00EA 0304
+LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND CARON;00CA 030C
+LATIN SMALL LETTER E WITH CIRCUMFLEX AND CARON;00EA 030C
+
+# Subset 4: Prominent use cases pulled from examples
+# for Lithuanian and Tagalog in
+# Unicode 4.0 and early drafts of UAX #34. (2 total)
+
+LATIN SMALL LETTER I WITH DOT ABOVE AND ACUTE;0069 0307 0301
+LATIN SMALL LETTER NG WITH TILDE ABOVE;006E 0360 0067
# Additions for Lithuanian.
# Provisional 2006-05-18, Approved 2007-10-19
diff --git a/gnu/usr.bin/perl/lib/unicore/NamedSqProv.txt b/gnu/usr.bin/perl/lib/unicore/NamedSqProv.txt
index 2a3fb5fcb9d..a4e4fdc2e45 100644
--- a/gnu/usr.bin/perl/lib/unicore/NamedSqProv.txt
+++ b/gnu/usr.bin/perl/lib/unicore/NamedSqProv.txt
@@ -1,6 +1,6 @@
-# NamedSequencesProv-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW, LI]
-# © 2019 Unicode®, Inc.
+# NamedSequencesProv-13.0.0.txt
+# Date: 2020-01-22, 19:32:00 GMT [KW, LI]
+# © 2020 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
@@ -40,7 +40,34 @@
# Provisional entries for NamedSequences.txt.
-# Currently there are no provisional entries.
+# Entries that correspond to Indic characters with nuktas
+# that are also listed in CompositionExclusions.txt.
+# These characters decompose for normalized text, even
+# in NFC. Having named sequences for these helps in
+# certain specifications, including Label Generation Rules (LGR)
+# for Internationalized Domain Names (IDN).
+#
+# Provisional 2020-01-16
+
+DEVANAGARI SEQUENCE FOR LETTER QA; 0915 093C
+DEVANAGARI SEQUENCE FOR LETTER KHHA; 0916 093C
+DEVANAGARI SEQUENCE FOR LETTER GHHA; 0917 093C
+DEVANAGARI SEQUENCE FOR LETTER ZA; 091C 093C
+DEVANAGARI SEQUENCE FOR LETTER DDDHA; 0921 093C
+DEVANAGARI SEQUENCE FOR LETTER RHA; 0922 093C
+DEVANAGARI SEQUENCE FOR LETTER FA; 092B 093C
+DEVANAGARI SEQUENCE FOR LETTER YYA; 092F 093C
+BENGALI SEQUENCE FOR LETTER RRA; 09A1 09BC
+BENGALI SEQUENCE FOR LETTER RHA; 09A2 09BC
+BENGALI SEQUENCE FOR LETTER YYA; 09AF 09BC
+GURMUKHI SEQUENCE FOR LETTER LLA; 0A32 0A3C
+GURMUKHI SEQUENCE FOR LETTER SHA; 0A38 0A3C
+GURMUKHI SEQUENCE FOR LETTER KHHA; 0A16 0A3C
+GURMUKHI SEQUENCE FOR LETTER GHHA; 0A17 0A3C
+GURMUKHI SEQUENCE FOR LETTER ZA; 0A1C 0A3C
+GURMUKHI SEQUENCE FOR LETTER FA; 0A2B 0A3C
+ORIYA SEQUENCE FOR LETTER RRA; 0B21 0B3C
+ORIYA SEQUENCE FOR LETTER RHA; 0B22 0B3C
# ================================================
diff --git a/gnu/usr.bin/perl/lib/unicore/NamesList.txt b/gnu/usr.bin/perl/lib/unicore/NamesList.txt
index 3fc6efce095..6b856885b88 100644
--- a/gnu/usr.bin/perl/lib/unicore/NamesList.txt
+++ b/gnu/usr.bin/perl/lib/unicore/NamesList.txt
@@ -1,17 +1,27 @@
; charset=UTF-8
-@@@ The Unicode Standard 12.1.0
-@@@+ U12M190408.lst
- Unicode 12.1.0 names list, third delta.
- Repertoire synched with UnicodeData-12.1.0d2.txt
- Second delta of annotation fixes.
- Added alias for 11FE3.
+@@@ The Unicode Standard 13.0.0
+@@@+ U13M200203.lst
+ Unicode 13.0.0 names list, eighth delta.
+ Repertoire synched with UnicodeData-13.0.0d6.txt
+ Eighth delta of annotation fixes.
+ Added xrefs for 27C7, 27D1, 2227, 2228. Adjusted subhead for 27C7.
+ Updated aliases for 26A5, 26A4, 26A2, 263F.
+ Updated subheads and annotations for 1DF8 through 1DFB.
+ Updated title of UTR #54 in notice at 1800.
+ Added xref to 202F for 0020.
+ Added annotations about abbreviations for 2066 through 2069 for consistency.
+ Separated aliases for 0009 and 000A onto separate lines.
+ Removed superfluous xrefs for 2011.
+ Adjusted subheads for 2028 and 202A.
+ Added notices for the sets of composition exclusions in four Indic scripts.
+ Added xrefs for 029C, 1D34, 1D78, A7F8 and a notice at A7F8.
This file is semi-automatically derived from UnicodeData.txt and
a set of manually created annotations using a script to select
or suppress information from the data file. The rules used
for this process are aimed at readability for the human reader,
at the expense of some details; therefore, this file should not
be parsed for machine-readable information.
-@+ © 2019 Unicode®, Inc.
+@+ © 2020 Unicode®, Inc.
For terms of use, see http://www.unicode.org/terms_of_use.html
@@ 0000 C0 Controls and Basic Latin (Basic Latin) 007F
@@+
@@ -37,10 +47,12 @@
= BACKSPACE
0009 <control>
= CHARACTER TABULATION
- = horizontal tabulation (HT), tab
+ = horizontal tabulation (HT)
+ = tab
000A <control>
= LINE FEED (LF)
- = new line (NL), end of line (EOL)
+ = new line (NL)
+ = end of line (EOL)
000B <control>
= LINE TABULATION
= vertical tabulation (VT)
@@ -98,6 +110,7 @@
* other space characters: 2000-200A
x (no-break space - 00A0)
x (zero width space - 200B)
+ x (narrow no-break space - 202F)
x (word joiner - 2060)
x (ideographic space - 3000)
x (zero width no-break space - FEFF)
@@ -491,7 +504,9 @@
x (dollar sign - 0024)
00A5 YEN SIGN
= yuan sign
- * glyph may have one or two crossbars, but official symbol in Japan and China has two
+ * glyph may have one or two crossbars, but the official symbol in Japan and China has two
+ x 5143
+ x 5186
00A6 BROKEN BAR
= broken vertical bar (1.0)
= parted rule (in typography)
@@ -505,6 +520,7 @@
x (sound recording copyright - 2117)
x (circled latin capital letter c - 24B8)
x (copyleft symbol - 1F12F)
+ x (mask work symbol - 1F1AD)
00AA FEMININE ORDINAL INDICATOR
* Spanish
# <super> 0061
@@ -801,7 +817,7 @@
0106 LATIN CAPITAL LETTER C WITH ACUTE
: 0043 0301
0107 LATIN SMALL LETTER C WITH ACUTE
- * Polish, Croatian, ...
+ * Polish, Croatian, Serbian, ...
x (cyrillic small letter tshe - 045B)
: 0063 0301
0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX
@@ -831,7 +847,7 @@
x (latin small letter d with stroke - 0111)
x (latin capital letter african d - 0189)
0111 LATIN SMALL LETTER D WITH STROKE
- * Croatian, Vietnamese, Sami
+ * Croatian, Serbian, Vietnamese, Sami
* an alternate glyph with the stroke through the bowl is used in Americanist orthographies
x (latin capital letter d with stroke - 0110)
x (cyrillic small letter dje - 0452)
@@ -1377,7 +1393,8 @@
* "q" in Zulu orthography
x (exclamation mark - 0021)
x (latin letter stretched c - 0297)
-@ Croatian digraphs matching Serbian Cyrillic letters
+@ Latin digraphs matching Serbian Cyrillic letters
+@+ These digraphs are for Gaj's Latin alphabet, used in writing Bosnian, Croatian, Serbian, and Montenegrin.
01C4 LATIN CAPITAL LETTER DZ WITH CARON
# 0044 017D
01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
@@ -1936,6 +1953,7 @@
x (logical and - 2227)
028D LATIN SMALL LETTER TURNED W
* voiceless rounded labiovelar approximant
+ x (modifier letter small turned w - AB69)
028E LATIN SMALL LETTER TURNED Y
* voiced lateral approximant
028F LATIN LETTER SMALL CAPITAL Y
@@ -1988,6 +2006,8 @@
* voiced uvular implosive
029C LATIN LETTER SMALL CAPITAL H
* voiceless epiglottal fricative
+ x (modifier letter capital h - 1D34)
+ x (modifier letter capital h with stroke - A7F8)
029D LATIN SMALL LETTER J WITH CROSSED-TAIL
* voiced palatal fricative
* uppercase is A7B2
@@ -2296,11 +2316,13 @@
@ Ordinary diacritics
0300 COMBINING GRAVE ACCENT
= Greek varia
+ * Pinyin: marks Mandarin Chinese fourth tone
x (grave accent - 0060)
x (modifier letter grave accent - 02CB)
0301 COMBINING ACUTE ACCENT
= stress mark
= Greek oxia, tonos
+ * Pinyin: marks Mandarin Chinese second tone
x (apostrophe - 0027)
x (acute accent - 00B4)
x (modifier letter prime - 02B9)
@@ -2317,6 +2339,7 @@
x (small tilde - 02DC)
0304 COMBINING MACRON
= long
+ * Pinyin: marks Mandarin Chinese first tone
* distinguish from the following
x (macron - 00AF)
x (modifier letter macron - 02C9)
@@ -2353,6 +2376,7 @@
x (double acute accent - 02DD)
030C COMBINING CARON
= hacek, V above
+ * Pinyin: marks Mandarin Chinese third tone
x (caron - 02C7)
030D COMBINING VERTICAL LINE ABOVE
* this is not the Greek tonos
@@ -2388,7 +2412,9 @@
0316 COMBINING GRAVE ACCENT BELOW
0317 COMBINING ACUTE ACCENT BELOW
0318 COMBINING LEFT TACK BELOW
+ x (modifier letter left tack - AB6A)
0319 COMBINING RIGHT TACK BELOW
+ x (modifier letter right tack - AB6B)
031A COMBINING LEFT ANGLE ABOVE
* IPA: unreleased stop
031B COMBINING HORN
@@ -3854,6 +3880,7 @@
* African languages
065C ARABIC VOWEL SIGN DOT BELOW
* African languages
+ * also used in Quranic text in African and other orthographies
065D ARABIC REVERSED DAMMA
* African languages
065E ARABIC FATHA WITH TWO DOTS
@@ -3938,7 +3965,7 @@
0683 ARABIC LETTER NYEH
* Sindhi
0684 ARABIC LETTER DYEH
- * Sindhi
+ * Sindhi, Bosnian
0685 ARABIC LETTER HAH WITH THREE DOTS ABOVE
* Pashto, Khwarazmian
* represents the phoneme /ts/ in Pashto
@@ -3951,7 +3978,7 @@
0689 ARABIC LETTER DAL WITH RING
* Pashto
068A ARABIC LETTER DAL WITH DOT BELOW
- * Sindhi, early Persian
+ * Sindhi, early Persian, Pegon, Malagasy
068B ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH
* Lahnda
068C ARABIC LETTER DAHAL
@@ -4027,7 +4054,7 @@
* use for the Jawi gaf is not recommended, although it may be found in some existing text data; recommended character for Jawi gaf is 0762
x (arabic letter keheh with dot above - 0762)
06AD ARABIC LETTER NG
- * Uighur, Kazakh, old Malay, early Persian, ...
+ * Uighur, Kazakh, Moroccan Arabic, early Jawi, early Persian, ...
06AE ARABIC LETTER KAF WITH THREE DOTS BELOW
* Berber, early Persian
06AF ARABIC LETTER GAF
@@ -4043,7 +4070,7 @@
06B4 ARABIC LETTER GAF WITH THREE DOTS ABOVE
* not used in Sindhi
06B5 ARABIC LETTER LAM WITH SMALL V
- * Kurdish
+ * Kurdish, Bosnian
06B6 ARABIC LETTER LAM WITH DOT ABOVE
* Kurdish
06B7 ARABIC LETTER LAM WITH THREE DOTS ABOVE
@@ -4058,7 +4085,7 @@
06BC ARABIC LETTER NOON WITH RING
* Pashto
06BD ARABIC LETTER NOON WITH THREE DOTS ABOVE
- * old Malay
+ * Jawi
06BE ARABIC LETTER HEH DOACHASHMEE
* forms aspirate digraphs in Urdu and other languages of South Asia
* represents the glottal fricative /h/ in Uighur
@@ -4081,13 +4108,13 @@
06C5 ARABIC LETTER KIRGHIZ OE
* Kirghiz
06C6 ARABIC LETTER OE
- * Uighur, Kurdish, Kazakh, Azerbaijani
+ * Uighur, Kurdish, Kazakh, Azerbaijani, Bosnian
06C7 ARABIC LETTER U
* Kirghiz, Azerbaijani
06C8 ARABIC LETTER YU
* Uighur
06C9 ARABIC LETTER KIRGHIZ YU
- * Kazakh, Kirghiz
+ * Kazakh, Kirghiz, Bosnian
06CA ARABIC LETTER WAW WITH TWO DOTS ABOVE
* Kurdish
06CB ARABIC LETTER VE
@@ -4106,7 +4133,7 @@
* Pashto, Uighur
* used as the letter bbeh in Sindhi
06D1 ARABIC LETTER YEH WITH THREE DOTS BELOW
- * old Malay
+ * Mende languages, Hausa
06D2 ARABIC LETTER YEH BARREE
* Urdu
06D3 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
@@ -4152,6 +4179,7 @@
06EA ARABIC EMPTY CENTRE LOW STOP
06EB ARABIC EMPTY CENTRE HIGH STOP
06EC ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE
+ * also used in Quranic text in African and other orthographies to represent wasla, ikhtilas, etc.
06ED ARABIC SMALL LOW MEEM
@ Extended Arabic letters for Parkari
06EE ARABIC LETTER DAL WITH INVERTED V
@@ -4706,6 +4734,7 @@
* Bashkir, Tatar
08AE ARABIC LETTER DAL WITH THREE DOTS BELOW
* Belarusian
+ * Pegon alternative for 068A
08AF ARABIC LETTER SAD WITH THREE DOTS BELOW
* Belarusian
08B0 ARABIC LETTER GAF WITH INVERTED STROKE
@@ -4733,10 +4762,26 @@
* initial and medial forms have one dot above
x (arabic letter dotless qaf - 066F)
x (arabic letter qaf with dot above - 06A7)
+ x (arabic letter african qaf with three dots above - 08C4)
08BD ARABIC LETTER AFRICAN NOON
* initial and medial forms have one dot above
x (arabic letter noon ghunna - 06BA)
x (arabic letter noon - 0646)
+@ Arabic letters for Hindko
+08BE ARABIC LETTER PEH WITH SMALL V
+08BF ARABIC LETTER TEH WITH SMALL V
+08C0 ARABIC LETTER TTEH WITH SMALL V
+08C1 ARABIC LETTER TCHEH WITH SMALL V
+08C2 ARABIC LETTER KEHEH WITH SMALL V
+@ Arabic letters for Hausa, Wolof and other African orthographies
+08C3 ARABIC LETTER GHAIN WITH THREE DOTS ABOVE
+08C4 ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE
+ * this letter shows an additional single dot above for the qaf only in initial and medial forms
+ x (arabic letter african qaf - 08BC)
+08C5 ARABIC LETTER JEEM WITH THREE DOTS ABOVE
+08C6 ARABIC LETTER JEEM WITH THREE DOTS BELOW
+@ Arabic letter for Punjabi
+08C7 ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
@ Quranic annotation signs
08D3 ARABIC SMALL LOW WAW
08D4 ARABIC SMALL HIGH WORD AR-RUB
@@ -4785,10 +4830,12 @@
* also used in Philippine languages
08F7 ARABIC LEFT ARROWHEAD ABOVE
08F8 ARABIC RIGHT ARROWHEAD ABOVE
+ * also used in Quranic text in African and other orthographies to represent damma
08F9 ARABIC LEFT ARROWHEAD BELOW
08FA ARABIC RIGHT ARROWHEAD BELOW
08FB ARABIC DOUBLE RIGHT ARROWHEAD ABOVE
08FC ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT
+ * also used in Quranic text in African and other orthographies to represent dammatan
08FD ARABIC RIGHT ARROWHEAD ABOVE WITH DOT
@ Extended vowel signs
08FE ARABIC DAMMA WITH DOT
@@ -4940,6 +4987,7 @@
0956 DEVANAGARI VOWEL SIGN UE
0957 DEVANAGARI VOWEL SIGN UUE
@ Additional consonants
+@+ These eight consonants with nuktas are listed in CompositionExclusions.txt. That means that they do not recompose during normalization. The NFC form is the same as the decomposed sequence.
0958 DEVANAGARI LETTER QA
: 0915 093C
0959 DEVANAGARI LETTER KHHA
@@ -5099,6 +5147,7 @@
@ Sign
09D7 BENGALI AU LENGTH MARK
@ Additional consonants
+@+ These three consonants with nuktas are listed in CompositionExclusions.txt. That means that they do not recompose during normalization. The NFC form is the same as the decomposed sequence.
09DC BENGALI LETTER RRA
: 09A1 09BC
09DD BENGALI LETTER RHA
@@ -5214,9 +5263,11 @@
0A32 GURMUKHI LETTER LA
0A33 GURMUKHI LETTER LLA
: 0A32 0A3C
+@+ This consonant with nukta is listed in CompositionExclusions.txt. That means that it does not recompose during normalization. The NFC form is the same as the decomposed sequence.
0A35 GURMUKHI LETTER VA
0A36 GURMUKHI LETTER SHA
: 0A38 0A3C
+@+ This consonant with nukta is listed in CompositionExclusions.txt. That means that it does not recompose during normalization. The NFC form is the same as the decomposed sequence.
0A38 GURMUKHI LETTER SA
0A39 GURMUKHI LETTER HA
@ Various signs
@@ -5248,6 +5299,7 @@
@ Sign
0A51 GURMUKHI SIGN UDAAT
@ Additional consonants
+@+ These four consonants with nuktas (not including 0A5C) are listed in CompositionExclusions.txt. That means that they do not recompose during normalization. The NFC form is the same as the decomposed sequence.
0A59 GURMUKHI LETTER KHHA
: 0A16 0A3C
0A5A GURMUKHI LETTER GHHA
@@ -5490,9 +5542,12 @@
@ Virama
0B4D ORIYA SIGN VIRAMA
@ Various signs
+0B55 ORIYA SIGN OVERLINE
+ * Kuvi
0B56 ORIYA AI LENGTH MARK
0B57 ORIYA AU LENGTH MARK
@ Additional consonants
+@+ These two consonants with nuktas (not including 0B5F) are listed in CompositionExclusions.txt. That means that they do not recompose during normalization. The NFC form is the same as the decomposed sequence.
0B5C ORIYA LETTER RRA
= dda
: 0B21 0B3C
@@ -5933,6 +5988,7 @@
0D02 MALAYALAM SIGN ANUSVARA
* used in Prakrit language texts to indicate gemination of the following consonant
0D03 MALAYALAM SIGN VISARGA
+0D04 MALAYALAM LETTER VEDIC ANUSVARA
@ Independent vowels
0D05 MALAYALAM LETTER A
0D06 MALAYALAM LETTER AA
@@ -5983,7 +6039,7 @@
= soft dda
0D28 MALAYALAM LETTER NA
0D29 MALAYALAM LETTER NNNA
- * historic use only
+ * scholarly use only
0D2A MALAYALAM LETTER PA
0D2B MALAYALAM LETTER PHA
0D2C MALAYALAM LETTER BA
@@ -6005,7 +6061,7 @@
0D38 MALAYALAM LETTER SA
0D39 MALAYALAM LETTER HA
0D3A MALAYALAM LETTER TTTA
- * historic use only
+ * scholarly use only
@ Variant shape viramas
0D3B MALAYALAM SIGN VERTICAL BAR VIRAMA
0D3C MALAYALAM SIGN CIRCULAR VIRAMA
@@ -6046,7 +6102,7 @@
@ Measurement symbol
0D4F MALAYALAM SIGN PARA
* used historically to measure rice
-@ Chillu letters
+@ Additional historic chillu letters
0D54 MALAYALAM LETTER CHILLU M
0D55 MALAYALAM LETTER CHILLU Y
0D56 MALAYALAM LETTER CHILLU LLL
@@ -6131,6 +6187,8 @@
0D7F MALAYALAM LETTER CHILLU K
@@ 0D80 Sinhala 0DFF
@ Various signs
+0D81 SINHALA SIGN CANDRABINDU
+ * used in Sanskrit
0D82 SINHALA SIGN ANUSVARAYA
= anusvara
0D83 SINHALA SIGN VISARGAYA
@@ -9338,6 +9396,7 @@
17F9 KHMER SYMBOL LEK ATTAK PRAM-BUON
@@ 1800 Mongolian 18AF
@@+
+@+ A copy of the Mongolian code chart showing glyphs for all Mongolian positional variants and variation sequences can be found in UTR #54, Unicode Mongolian 12.1 Snapshot.
@ Punctuation
@+ Additional birgas are encoded in the Mongolian Supplement block at 11660-1167F.
1800 MONGOLIAN BIRGA
@@ -9378,490 +9437,134 @@
1819 MONGOLIAN DIGIT NINE
@ Basic letters
@+ Cross-references show commonly used Cyrillic transliterations.
-@+ Letters unspecified for distinct positional forms are shown without them. Letters with unspecified positional forms use a squared question mark to indicate the gap. All vowels are expected to have explicit isolate forms. For consonants the isolate first form is the initial first form unless specified otherwise.
1820 MONGOLIAN LETTER A
x (cyrillic small letter a - 0430)
- ~ 1820 ALT1 first form (isolate)
- ~ 1820 ALT1 first form (initial)
- ~ 1820 ALT1 first form (medial)
- ~ 1820 ALT1 first form (final)
- ~ 1820 180B second form (isolate)
- ~ 1820 180B second form (medial)
- ~ 1820 180B second form (final)
- ~ 1820 180C third form (medial)
1821 MONGOLIAN LETTER E
x (cyrillic small letter e - 044D)
- ~ 1821 ALT1 first form (isolate)
- ~ 1821 ALT1 first form (initial)
- ~ 1821 ALT1 first form (medial)
- ~ 1821 ALT1 first form (final)
- ~ 1821 180B second form (initial)
- ~ 1821 180B second form (final)
1822 MONGOLIAN LETTER I
x (cyrillic small letter i - 0438)
- ~ 1822 ALT1 first form (isolate)
- ~ 1822 ALT1 first form (initial)
- ~ 1822 ALT1 first form (medial)
- ~ 1822 ALT1 first form (final)
- ~ 1822 180B second form (medial)
1823 MONGOLIAN LETTER O
x (cyrillic small letter o - 043E)
- ~ 1823 ALT1 first form (isolate)
- ~ 1823 ALT1 first form (initial)
- ~ 1823 ALT1 first form (medial)
- ~ 1823 ALT1 first form (final)
- ~ 1823 180B second form (medial)
- ~ 1823 180B second form (final)
1824 MONGOLIAN LETTER U
x (cyrillic small letter u - 0443)
- ~ 1824 ALT1 first form (isolate)
- ~ 1824 ALT1 first form (initial)
- ~ 1824 ALT1 first form (medial)
- ~ 1824 ALT1 first form (final)
- ~ 1824 180B second form (medial)
1825 MONGOLIAN LETTER OE
x (cyrillic small letter barred o - 04E9)
- ~ 1825 ALT1 first form (isolate)
- ~ 1825 ALT1 first form (initial)
- ~ 1825 ALT1 first form (medial)
- ~ 1825 ALT1 first form (final)
- ~ 1825 180B second form (medial)
- ~ 1825 180B second form (final)
- ~ 1825 180C third form (medial)
1826 MONGOLIAN LETTER UE
x (cyrillic small letter straight u - 04AF)
- ~ 1826 ALT1 first form (isolate)
- ~ 1826 ALT1 first form (initial)
- ~ 1826 ALT1 first form (medial)
- ~ 1826 ALT1 first form (final)
- ~ 1826 180B second form (isolate)
- ~ 1826 180B second form (medial)
- ~ 1826 180B second form (final)
- ~ 1826 180C third form (medial)
1827 MONGOLIAN LETTER EE
- ~ 1827 ALT1 first form (isolate)
- ~ 1827 ALT1 first form (initial)
- ~ 1827 ALT1 first form (medial)
- ~ 1827 ALT1 first form (final)
1828 MONGOLIAN LETTER NA
x (cyrillic small letter en - 043D)
- ~ 1828 ALT1 first form (initial)
- ~ 1828 ALT1 first form (medial)
- ~ 1828 ALT1 first form (final)
- ~ 1828 180B second form (initial)
- ~ 1828 180B second form (medial)
- ~ 1828 180C third form (medial)
- ~ 1828 180D fourth form (medial)
1829 MONGOLIAN LETTER ANG
- ~ 1829 ALT1 first form (initial)
- ~ 1829 ALT1 first form (medial)
- ~ 1829 ALT1 first form (final)
182A MONGOLIAN LETTER BA
x (cyrillic small letter be - 0431)
- ~ 182A ALT1 first form (initial)
- ~ 182A ALT1 first form (medial)
- ~ 182A ALT1 first form (final)
- ~ 182A 180B second form (final)
182B MONGOLIAN LETTER PA
x (cyrillic small letter pe - 043F)
- ~ 182B ALT1 first form (initial)
- ~ 182B ALT1 first form (medial)
- ~ 182B ALT1 first form (final)
182C MONGOLIAN LETTER QA
x (cyrillic small letter ha - 0445)
- ~ 182C ALT1 first form (isolate)
- ~ 182C ALT1 first form (initial)
- ~ 182C ALT1 first form (medial)
- ~ 182C ALT1 first form (final)
- ~ 182C 180B second form (isolate)
- ~ 182C 180B second form (initial)
- ~ 182C 180B second form (medial)
- ~ 182C 180C third form (medial)
- ~ 182C 180D fourth form (medial)
182D MONGOLIAN LETTER GA
x (cyrillic small letter ghe - 0433)
- ~ 182D ALT1 first form (isolate)
- ~ 182D ALT1 first form (initial)
- ~ 182D ALT1 first form (medial)
- ~ 182D ALT1 first form (final)
- ~ 182D 180B second form (initial)
- ~ 182D 180B second form (medial)
- ~ 182D 180B second form (final)
- ~ 182D 180C third form (medial)
- ~ 182D 180D fourth form (medial)
182E MONGOLIAN LETTER MA
x (cyrillic small letter em - 043C)
- ~ 182E ALT1 first form (initial)
- ~ 182E ALT1 first form (medial)
- ~ 182E ALT1 first form (final)
182F MONGOLIAN LETTER LA
x (cyrillic small letter el - 043B)
- ~ 182F ALT1 first form (initial)
- ~ 182F ALT1 first form (medial)
- ~ 182F ALT1 first form (final)
1830 MONGOLIAN LETTER SA
x (cyrillic small letter es - 0441)
- ~ 1830 ALT1 first form (initial)
- ~ 1830 ALT1 first form (medial)
- ~ 1830 ALT1 first form (final)
- ~ 1830 180B second form (final)
- ~ 1830 180C third form (final)
1831 MONGOLIAN LETTER SHA
x (cyrillic small letter sha - 0448)
- ~ 1831 ALT1 first form (initial)
- ~ 1831 ALT1 first form (medial)
- ~ 1831 ALT1 first form (final)
1832 MONGOLIAN LETTER TA
x (cyrillic small letter te - 0442)
- ~ 1832 ALT1 first form (initial)
- ~ 1832 ALT1 first form (medial)
- ~ 1832 ALT1 first form (final)
- ~ 1832 180B second form (medial)
1833 MONGOLIAN LETTER DA
x (cyrillic small letter de - 0434)
- ~ 1833 ALT1 first form (initial)
- ~ 1833 ALT1 first form (medial)
- ~ 1833 ALT1 first form (final)
- ~ 1833 180B second form (initial)
- ~ 1833 180B second form (medial)
- ~ 1833 180B second form (final)
1834 MONGOLIAN LETTER CHA
x (cyrillic small letter che - 0447)
- ~ 1834 ALT1 first form (initial)
- ~ 1834 ALT1 first form (medial)
- ~ 1834 ALT1 first form (final)
1835 MONGOLIAN LETTER JA
x (cyrillic small letter zhe - 0436)
- ~ 1835 ALT1 first form (initial)
- ~ 1835 ALT1 first form (medial)
- ~ 1835 ALT1 first form (final)
- ~ 1835 180B second form (medial)
1836 MONGOLIAN LETTER YA
x (cyrillic small letter short i - 0439)
- ~ 1836 ALT1 first form (initial)
- ~ 1836 ALT1 first form (medial)
- ~ 1836 ALT1 first form (final)
- ~ 1836 180B second form (initial)
- ~ 1836 180B second form (medial)
- ~ 1836 180C third form (medial)
1837 MONGOLIAN LETTER RA
x (cyrillic small letter er - 0440)
- ~ 1837 ALT1 first form (initial)
- ~ 1837 ALT1 first form (medial)
- ~ 1837 ALT1 first form (final)
1838 MONGOLIAN LETTER WA
x (cyrillic small letter ve - 0432)
- ~ 1838 ALT1 first form (initial)
- ~ 1838 ALT1 first form (medial)
- ~ 1838 ALT1 first form (final)
- ~ 1838 180B second form (final)
1839 MONGOLIAN LETTER FA
x (cyrillic small letter ef - 0444)
- ~ 1839 ALT1 first form (initial)
- ~ 1839 ALT1 first form (medial)
- ~ 1839 ALT1 first form (final)
183A MONGOLIAN LETTER KA
x (cyrillic small letter ha - 0445)
- ~ 183A ALT1 first form (initial)
- ~ 183A ALT1 first form (medial)
- ~ 183A ALT1 first form (final)
183B MONGOLIAN LETTER KHA
x (cyrillic small letter ka - 043A)
- ~ 183B ALT1 first form (initial)
- ~ 183B ALT1 first form (medial)
- ~ 183B ALT1 first form (final)
183C MONGOLIAN LETTER TSA
x (cyrillic small letter tse - 0446)
- ~ 183C ALT1 first form (initial)
- ~ 183C ALT1 first form (medial)
- ~ 183C ALT1 first form (final)
183D MONGOLIAN LETTER ZA
x (cyrillic small letter ze - 0437)
- ~ 183D ALT1 first form (initial)
- ~ 183D ALT1 first form (medial)
- ~ 183D ALT1 first form (final)
183E MONGOLIAN LETTER HAA
x (cyrillic small letter ha - 0445)
- ~ 183E ALT1 first form (initial)
- ~ 183E ALT1 first form (medial)
- ~ 183E ALT1 first form (final)
183F MONGOLIAN LETTER ZRA
x (cyrillic small letter zhe - 0436)
- ~ 183F ALT1 first form (initial)
- ~ 183F ALT1 first form (medial)
- ~ 183F ALT1 first form (final)
1840 MONGOLIAN LETTER LHA
- ~ 1840 ALT1 first form (initial)
- ~ 1840 ALT1 first form (medial)
- ~ 1840 ALT1 first form (final)
1841 MONGOLIAN LETTER ZHI
1842 MONGOLIAN LETTER CHI
@ Todo letters
1843 MONGOLIAN LETTER TODO LONG VOWEL SIGN
- ~ 1843 ALT1 first form (initial)
- ~ 1843 ALT1 first form (medial)
- ~ 1843 ALT1 first form (final)
1844 MONGOLIAN LETTER TODO E
- ~ 1844 ALT1 first form (isolate)
- ~ 1844 ALT1 first form (initial)
- ~ 1844 ALT1 first form (medial)
- ~ 1844 ALT1 first form (final)
- ~ 1844 180B second form (medial)
1845 MONGOLIAN LETTER TODO I
- ~ 1845 ALT1 first form (isolate)
- ~ 1845 ALT1 first form (initial)
- ~ 1845 ALT1 first form (medial)
- ~ 1845 ALT1 first form (final)
- ~ 1845 180B second form (medial)
1846 MONGOLIAN LETTER TODO O
- ~ 1846 ALT1 first form (isolate)
- ~ 1846 ALT1 first form (initial)
- ~ 1846 ALT1 first form (medial)
- ~ 1846 ALT1 first form (final)
- ~ 1846 180B second form (medial)
1847 MONGOLIAN LETTER TODO U
- ~ 1847 ALT1 first form (isolate)
- ~ 1847 ALT1 first form (initial)
- ~ 1847 ALT1 first form (medial)
- ~ 1847 ALT1 first form (final)
- ~ 1847 180B second form (isolate)
- ~ 1847 180B second form (medial)
- ~ 1847 180B second form (final)
- ~ 1847 180C third form (medial)
1848 MONGOLIAN LETTER TODO OE
- ~ 1848 ALT1 first form (isolate)
- ~ 1848 ALT1 first form (initial)
- ~ 1848 ALT1 first form (medial)
- ~ 1848 ALT1 first form (final)
- ~ 1848 180B second form (medial)
1849 MONGOLIAN LETTER TODO UE
- ~ 1849 ALT1 first form (isolate)
- ~ 1849 ALT1 first form (initial)
- ~ 1849 ALT1 first form (medial)
- ~ 1849 ALT1 first form (final)
- ~ 1849 180B second form (isolate)
- ~ 1849 180B second form (medial)
184A MONGOLIAN LETTER TODO ANG
- ~ 184A ALT1 first form (initial)
- ~ 184A ALT1 first form (medial)
- ~ 184A ALT1 first form (final)
184B MONGOLIAN LETTER TODO BA
- ~ 184B ALT1 first form (initial)
- ~ 184B ALT1 first form (medial)
- ~ 184B ALT1 first form (final)
184C MONGOLIAN LETTER TODO PA
- ~ 184C ALT1 first form (initial)
- ~ 184C ALT1 first form (medial)
- ~ 184C ALT1 first form (final)
184D MONGOLIAN LETTER TODO QA
- ~ 184D ALT1 first form (initial)
- ~ 184D ALT1 first form (medial)
- ~ 184D ALT1 first form (final)
- ~ 184D 180B second form (initial)
- ~ 184D 180B second form (medial)
184E MONGOLIAN LETTER TODO GA
- ~ 184E ALT1 first form (isolate)
- ~ 184E ALT1 first form (initial)
- ~ 184E ALT1 first form (medial)
- ~ 184E ALT1 first form (final)
- ~ 184E 180B second form (medial)
184F MONGOLIAN LETTER TODO MA
- ~ 184F ALT1 first form (initial)
- ~ 184F ALT1 first form (medial)
- ~ 184F ALT1 first form (final)
1850 MONGOLIAN LETTER TODO TA
- ~ 1850 ALT1 first form (initial)
- ~ 1850 ALT1 first form (medial)
- ~ 1850 ALT1 first form (final)
1851 MONGOLIAN LETTER TODO DA
- ~ 1851 ALT1 first form (initial)
- ~ 1851 ALT1 first form (medial)
- ~ 1851 ALT1 first form (final)
1852 MONGOLIAN LETTER TODO CHA
- ~ 1852 ALT1 first form (initial)
- ~ 1852 ALT1 first form (medial)
- ~ 1852 ALT1 first form (final)
1853 MONGOLIAN LETTER TODO JA
- ~ 1853 ALT1 first form (initial)
- ~ 1853 ALT1 first form (medial)
- ~ 1853 ALT1 first form (final)
1854 MONGOLIAN LETTER TODO TSA
- ~ 1854 ALT1 first form (initial)
- ~ 1854 ALT1 first form (medial)
- ~ 1854 ALT1 first form (final)
1855 MONGOLIAN LETTER TODO YA
- ~ 1855 ALT1 first form (initial)
- ~ 1855 ALT1 first form (medial)
- ~ 1855 ALT1 first form (final)
1856 MONGOLIAN LETTER TODO WA
- ~ 1856 ALT1 first form (initial)
- ~ 1856 ALT1 first form (medial)
- ~ 1856 ALT1 first form (final)
1857 MONGOLIAN LETTER TODO KA
- ~ 1857 ALT1 first form (initial)
- ~ 1857 ALT1 first form (medial)
- ~ 1857 ALT1 first form (final)
1858 MONGOLIAN LETTER TODO GAA
1859 MONGOLIAN LETTER TODO HAA
- ~ 1859 ALT1 first form (initial)
- ~ 1859 ALT1 first form (medial)
- ~ 1859 ALT1 first form (final)
185A MONGOLIAN LETTER TODO JIA
185B MONGOLIAN LETTER TODO NIA
185C MONGOLIAN LETTER TODO DZA
- ~ 185C ALT1 first form (initial)
- ~ 185C ALT1 first form (medial)
- ~ 185C ALT1 first form (final)
@ Sibe letters
185D MONGOLIAN LETTER SIBE E
- ~ 185D ALT1 first form (isolate)
- ~ 185D ALT1 first form (initial)
- ~ 185D ALT1 first form (medial)
- ~ 185D ALT1 first form (final)
- ~ 185D 180B second form (medial)
- ~ 185D 180B second form (final)
185E MONGOLIAN LETTER SIBE I
- ~ 185E ALT1 first form (isolate)
- ~ 185E ALT1 first form (initial)
- ~ 185E ALT1 first form (medial)
- ~ 185E ALT1 first form (final)
- ~ 185E 180B second form (medial)
- ~ 185E 180B second form (final)
- ~ 185E 180C third form (medial)
- ~ 185E 180C third form (final)
185F MONGOLIAN LETTER SIBE IY
- ~ 185F ALT1 first form (initial)
- ~ 185F ALT1 first form (medial)
- ~ 185F ALT1 first form (final)
1860 MONGOLIAN LETTER SIBE UE
- ~ 1860 ALT1 first form (isolate)
- ~ 1860 ALT1 first form (initial)
- ~ 1860 ALT1 first form (medial)
- ~ 1860 ALT1 first form (final)
- ~ 1860 180B second form (medial)
- ~ 1860 180B second form (final)
1861 MONGOLIAN LETTER SIBE U
- ~ 1861 ALT1 first form (isolate)
- ~ 1861 ALT1 first form (initial)
- ~ 1861 ALT1 first form (medial)
- ~ 1861 ALT1 first form (final)
1862 MONGOLIAN LETTER SIBE ANG
- ~ 1862 ALT1 first form (initial)
- ~ 1862 ALT1 first form (medial)
- ~ 1862 ALT1 first form (final)
1863 MONGOLIAN LETTER SIBE KA
- ~ 1863 ALT1 first form (isolate)
- ~ 1863 ALT1 first form (initial)
- ~ 1863 ALT1 first form (medial)
- ~ 1863 ALT1 first form (final)
- ~ 1863 180B second form (medial)
1864 MONGOLIAN LETTER SIBE GA
- ~ 1864 ALT1 first form (isolate)
- ~ 1864 ALT1 first form (initial)
- ~ 1864 ALT1 first form (medial)
- ~ 1864 ALT1 first form (final)
1865 MONGOLIAN LETTER SIBE HA
- ~ 1865 ALT1 first form (isolate)
- ~ 1865 ALT1 first form (initial)
- ~ 1865 ALT1 first form (medial)
- ~ 1865 ALT1 first form (final)
1866 MONGOLIAN LETTER SIBE PA
- ~ 1866 ALT1 first form (initial)
- ~ 1866 ALT1 first form (medial)
- ~ 1866 ALT1 first form (final)
1867 MONGOLIAN LETTER SIBE SHA
- ~ 1867 ALT1 first form (initial)
- ~ 1867 ALT1 first form (medial)
- ~ 1867 ALT1 first form (final)
1868 MONGOLIAN LETTER SIBE TA
- ~ 1868 ALT1 first form (initial)
- ~ 1868 ALT1 first form (medial)
- ~ 1868 ALT1 first form (final)
- ~ 1868 180B second form (initial)
- ~ 1868 180B second form (medial)
- ~ 1868 180C third form (medial)
1869 MONGOLIAN LETTER SIBE DA
- ~ 1869 ALT1 first form (initial)
- ~ 1869 ALT1 first form (medial)
- ~ 1869 ALT1 first form (final)
- ~ 1869 180B second form (initial)
- ~ 1869 180B second form (medial)
186A MONGOLIAN LETTER SIBE JA
- ~ 186A ALT1 first form (initial)
- ~ 186A ALT1 first form (medial)
- ~ 186A ALT1 first form (final)
186B MONGOLIAN LETTER SIBE FA
- ~ 186B ALT1 first form (initial)
- ~ 186B ALT1 first form (medial)
- ~ 186B ALT1 first form (final)
186C MONGOLIAN LETTER SIBE GAA
186D MONGOLIAN LETTER SIBE HAA
186E MONGOLIAN LETTER SIBE TSA
- ~ 186E ALT1 first form (initial)
- ~ 186E ALT1 first form (medial)
- ~ 186E ALT1 first form (final)
186F MONGOLIAN LETTER SIBE ZA
- ~ 186F ALT1 first form (initial)
- ~ 186F ALT1 first form (medial)
- ~ 186F ALT1 first form (final)
- ~ 186F 180B second form (initial)
- ~ 186F 180B second form (medial)
1870 MONGOLIAN LETTER SIBE RAA
1871 MONGOLIAN LETTER SIBE CHA
- ~ 1871 ALT1 first form (initial)
- ~ 1871 ALT1 first form (medial)
- ~ 1871 ALT1 first form (final)
1872 MONGOLIAN LETTER SIBE ZHA
- ~ 1872 ALT1 first form (initial)
- ~ 1872 ALT1 first form (medial)
- ~ 1872 ALT1 first form (final)
@ Manchu letters
1873 MONGOLIAN LETTER MANCHU I
- ~ 1873 ALT1 first form (isolate)
- ~ 1873 ALT1 first form (initial)
- ~ 1873 ALT1 first form (medial)
- ~ 1873 ALT1 first form (final)
- ~ 1873 180B second form (medial)
- ~ 1873 180B second form (final)
- ~ 1873 180C third form (medial)
- ~ 1873 180C third form (final)
- ~ 1873 180D fourth form (medial)
1874 MONGOLIAN LETTER MANCHU KA
- ~ 1874 ALT1 first form (isolate)
- ~ 1874 ALT1 first form (initial)
- ~ 1874 ALT1 first form (medial)
- ~ 1874 ALT1 first form (final)
- ~ 1874 180B second form (medial)
- ~ 1874 180B second form (final)
- ~ 1874 180C third form (medial)
- ~ 1874 180C third form (final)
- ~ 1874 180D fourth form (medial)
1875 MONGOLIAN LETTER MANCHU RA
- ~ 1875 ALT1 first form (initial)
- ~ 1875 ALT1 first form (medial)
- ~ 1875 ALT1 first form (final)
1876 MONGOLIAN LETTER MANCHU FA
- ~ 1876 ALT1 first form (initial)
- ~ 1876 ALT1 first form (medial)
- ~ 1876 ALT1 first form (final)
- ~ 1876 180B second form (initial)
- ~ 1876 180B second form (medial)
1877 MONGOLIAN LETTER MANCHU ZHA
- ~ 1877 ALT1 first form (initial)
- ~ 1877 ALT1 first form (medial)
- ~ 1877 ALT1 first form (final)
@ Buryat letter
1878 MONGOLIAN LETTER CHA WITH TWO DOTS
- ~ 1878 ALT1 first form (initial)
- ~ 1878 ALT1 first form (medial)
- ~ 1878 ALT1 first form (final)
@ Extensions for Sanskrit and Tibetan
1880 MONGOLIAN LETTER ALI GALI ANUSVARA ONE
x (tibetan sign sna ldan - 0F83)
- ~ 1880 180B second form
1881 MONGOLIAN LETTER ALI GALI VISARGA ONE
x (tibetan sign rnam bcad - 0F7F)
- ~ 1881 180B second form
1882 MONGOLIAN LETTER ALI GALI DAMARU
x (tibetan sign lce tsa can - 0F88)
1883 MONGOLIAN LETTER ALI GALI UBADAMA
@@ -9871,35 +9574,10 @@
x (tibetan mark paluta - 0F85)
1886 MONGOLIAN LETTER ALI GALI THREE BALUDA
1887 MONGOLIAN LETTER ALI GALI A
- ~ 1887 ALT1 first form (isolate)
- ~ 1887 ALT1 first form (initial)
- ~ 1887 ALT1 first form (medial)
- ~ 1887 ALT1 first form (final)
- ~ 1887 180B second form (isolate)
- ~ 1887 180B second form (final)
- ~ 1887 180C third form (final)
- ~ 1887 180D fourth form (final)
1888 MONGOLIAN LETTER ALI GALI I
- ~ 1888 ALT1 first form (isolate)
- ~ 1888 ALT1 first form (initial)
- ~ 1888 ALT1 first form (medial)
- ~ 1888 ALT1 first form (final)
- ~ 1888 180B second form (final)
1889 MONGOLIAN LETTER ALI GALI KA
- ~ 1889 ALT1 first form (isolate)
- ~ 1889 ALT1 first form (initial)
- ~ 1889 ALT1 first form (medial)
- ~ 1889 ALT1 first form (final)
188A MONGOLIAN LETTER ALI GALI NGA
- ~ 188A ALT1 first form (initial)
- ~ 188A ALT1 first form (medial)
- ~ 188A ALT1 first form (final)
- ~ 188A 180B second form (initial)
- ~ 188A 180B second form (medial)
188B MONGOLIAN LETTER ALI GALI CA
- ~ 188B ALT1 first form (initial)
- ~ 188B ALT1 first form (medial)
- ~ 188B ALT1 first form (final)
188C MONGOLIAN LETTER ALI GALI TTA
188D MONGOLIAN LETTER ALI GALI TTHA
188E MONGOLIAN LETTER ALI GALI DDA
@@ -9909,72 +9587,28 @@
1892 MONGOLIAN LETTER ALI GALI PA
1893 MONGOLIAN LETTER ALI GALI PHA
1894 MONGOLIAN LETTER ALI GALI SSA
- ~ 1894 ALT1 first form (initial)
- ~ 1894 ALT1 first form (medial)
- ~ 1894 ALT1 first form (final)
1895 MONGOLIAN LETTER ALI GALI ZHA
1896 MONGOLIAN LETTER ALI GALI ZA
- ~ 1896 ALT1 first form (initial)
- ~ 1896 ALT1 first form (medial)
- ~ 1896 ALT1 first form (final)
1897 MONGOLIAN LETTER ALI GALI AH
1898 MONGOLIAN LETTER TODO ALI GALI TA
1899 MONGOLIAN LETTER TODO ALI GALI ZHA
189A MONGOLIAN LETTER MANCHU ALI GALI GHA
- ~ 189A ALT1 first form (initial)
- ~ 189A ALT1 first form (medial)
- ~ 189A ALT1 first form (final)
189B MONGOLIAN LETTER MANCHU ALI GALI NGA
- ~ 189B ALT1 first form (initial)
- ~ 189B ALT1 first form (medial)
- ~ 189B ALT1 first form (final)
189C MONGOLIAN LETTER MANCHU ALI GALI CA
- ~ 189C ALT1 first form (initial)
- ~ 189C ALT1 first form (medial)
- ~ 189C ALT1 first form (final)
189D MONGOLIAN LETTER MANCHU ALI GALI JHA
- ~ 189D ALT1 first form (initial)
- ~ 189D ALT1 first form (medial)
- ~ 189D ALT1 first form (final)
189E MONGOLIAN LETTER MANCHU ALI GALI TTA
- ~ 189E ALT1 first form (initial)
- ~ 189E ALT1 first form (medial)
- ~ 189E ALT1 first form (final)
189F MONGOLIAN LETTER MANCHU ALI GALI DDHA
- ~ 189F ALT1 first form (initial)
- ~ 189F ALT1 first form (medial)
- ~ 189F ALT1 first form (final)
18A0 MONGOLIAN LETTER MANCHU ALI GALI TA
18A1 MONGOLIAN LETTER MANCHU ALI GALI DHA
- ~ 18A1 ALT1 first form (initial)
- ~ 18A1 ALT1 first form (medial)
- ~ 18A1 ALT1 first form (final)
18A2 MONGOLIAN LETTER MANCHU ALI GALI SSA
- ~ 18A2 ALT1 first form (initial)
- ~ 18A2 ALT1 first form (medial)
- ~ 18A2 ALT1 first form (final)
18A3 MONGOLIAN LETTER MANCHU ALI GALI CYA
- ~ 18A3 ALT1 first form (initial)
- ~ 18A3 ALT1 first form (medial)
- ~ 18A3 ALT1 first form (final)
18A4 MONGOLIAN LETTER MANCHU ALI GALI ZHA
- ~ 18A4 ALT1 first form (initial)
- ~ 18A4 ALT1 first form (medial)
- ~ 18A4 ALT1 first form (final)
18A5 MONGOLIAN LETTER MANCHU ALI GALI ZA
- ~ 18A5 ALT1 first form (initial)
- ~ 18A5 ALT1 first form (medial)
- ~ 18A5 ALT1 first form (final)
18A6 MONGOLIAN LETTER ALI GALI HALF U
18A7 MONGOLIAN LETTER ALI GALI HALF YA
18A8 MONGOLIAN LETTER MANCHU ALI GALI BHA
18A9 MONGOLIAN LETTER ALI GALI DAGALGA
18AA MONGOLIAN LETTER MANCHU ALI GALI LHA
- ~ 18AA ALT1 first form (initial)
- ~ 18AA ALT1 first form (medial)
- ~ 18AA ALT1 first form (final)
-@@@~ Positional Forms and Standardized Variation Sequences
-@+ Unlike other blocks, these variation sequences use the script-specific variation selectors for Mongolian.
@@ 18B0 Unified Canadian Aboriginal Syllabics Extended 18FF
@ Syllables for Moose Cree
18B0 CANADIAN SYLLABICS OY
@@ -10538,6 +10172,11 @@
1ABE COMBINING PARENTHESES OVERLAY
* intended to surround a base letter
* exact placement is font dependent
+@ Used for Scots dialectology
+1ABF COMBINING LATIN SMALL LETTER W BELOW
+ * indicates voiced labialization
+1AC0 COMBINING LATIN SMALL LETTER TURNED W BELOW
+ * indicates voiceless labialization
@@ 1B00 Balinese 1B7F
@ Various signs
1B00 BALINESE SIGN ULU RICEM
@@ -11248,6 +10887,7 @@
x (tibetan sign lce tsa can - 0F88)
x (brahmi sign jihvamuliya - 11003)
x (sharada sign jihvamuliya - 111C2)
+ x (newa sign jihvamuliya - 11460)
x (soyombo sign jihvamuliya - 11A84)
1CF6 VEDIC SIGN UPADHMANIYA
* marks a bilabial fricative occurring only before unvoiced labial stops
@@ -11255,6 +10895,7 @@
x (tibetan sign mchu can - 0F89)
x (brahmi sign upadhmaniya - 11004)
x (sharada sign upadhmaniya - 111C3)
+ x (newa sign upadhmaniya - 11461)
x (soyombo sign upadhmaniya - 11A85)
1CF7 VEDIC SIGN ATIKRAMA
= vaidika saamagaana atikrama
@@ -11341,6 +10982,8 @@
1D33 MODIFIER LETTER CAPITAL G
# <super> 0047
1D34 MODIFIER LETTER CAPITAL H
+ x (latin letter small capital h - 029C)
+ x (modifier letter cyrillic en - 1D78)
# <super> 0048
1D35 MODIFIER LETTER CAPITAL I
# <super> 0049
@@ -11455,8 +11098,9 @@
@ Latin letter
1D6B LATIN SMALL LETTER UE
@ Latin letters with middle tilde
-@+ An additional letter with middle tilde is found in another block.
+@+ Additional letters with middle tilde are found in other blocks.
x (latin small letter l with middle tilde - 026B)
+ x (latin small letter turned r with middle tilde - AB68)
1D6C LATIN SMALL LETTER B WITH MIDDLE TILDE
1D6D LATIN SMALL LETTER D WITH MIDDLE TILDE
1D6E LATIN SMALL LETTER F WITH MIDDLE TILDE
@@ -11473,6 +11117,7 @@
* Georgian transcription
x (georgian letter turned gan - 10F9)
1D78 MODIFIER LETTER CYRILLIC EN
+ x (modifier letter capital h - 1D34)
# <super> 043D
@ Other phonetic symbols
1D79 LATIN SMALL LETTER INSULAR G
@@ -11709,11 +11354,14 @@
1DF6 COMBINING KAVYKA ABOVE RIGHT
1DF7 COMBINING KAVYKA ABOVE LEFT
x (combining cyrillic kavyka - A67C)
+@ Miscellaneous marks
1DF8 COMBINING DOT ABOVE LEFT
+ * used in Syriac as a disambiguation dot
+ * used in Typicon Cyrillic, where the dot may have a square appearance
x (combining dot above right - 0358)
1DF9 COMBINING WIDE INVERTED BRIDGE BELOW
+ * used as a Typicon mark
x (combining inverted bridge below - 033A)
-@ Miscellaneous mark
1DFB COMBINING DELETION MARK
* used for "mhusaa" in Newa scribal tradition
@ Double diacritic mark for UPA
@@ -12812,8 +12460,6 @@
x (hyphen-minus - 002D)
x (soft hyphen - 00AD)
2011 NON-BREAKING HYPHEN
- x (hyphen-minus - 002D)
- x (soft hyphen - 00AD)
# <noBreak> 2010
2012 FIGURE DASH
2013 EN DASH
@@ -12908,11 +12554,12 @@
# 002E 002E 002E
2027 HYPHENATION POINT
* visible symbol used to indicate correct positions for word breaking, as in dic·tion·ar·ies
-@ Format characters
+@ Separators
2028 LINE SEPARATOR
* may be used to represent this semantic unambiguously
2029 PARAGRAPH SEPARATOR
* may be used to represent this semantic unambiguously
+@ Format characters
202A LEFT-TO-RIGHT EMBEDDING
* commonly abbreviated LRE
202B RIGHT-TO-LEFT EMBEDDING
@@ -12923,6 +12570,7 @@
* commonly abbreviated LRO
202E RIGHT-TO-LEFT OVERRIDE
* commonly abbreviated RLO
+@ Space
202F NARROW NO-BREAK SPACE
* commonly abbreviated NNBSP
* a narrow form of a no-break space, typically the width of a thin space or a mid space
@@ -13031,6 +12679,7 @@
204A TIRONIAN SIGN ET
* Irish Gaelic, Old English, ...
x (ampersand - 0026)
+ x (tironian sign capital et - 2E52)
x (script ligature et ornament - 1F670)
204B REVERSED PILCROW SIGN
x (pilcrow sign - 00B6)
@@ -13118,9 +12767,13 @@
* contiguity operator indicating addition
@ Format characters
2066 LEFT-TO-RIGHT ISOLATE
+ * commonly abbreviated LRI
2067 RIGHT-TO-LEFT ISOLATE
+ * commonly abbreviated RLI
2068 FIRST STRONG ISOLATE
+ * commonly abbreviated FSI
2069 POP DIRECTIONAL ISOLATE
+ * commonly abbreviated PDI
@ Deprecated
@+ Use of these characters is strongly discouraged.
206A INHIBIT SYMMETRIC SWAPPING
@@ -13278,6 +12931,7 @@
* Korea
* glyph may have one or two crossbars, but the most common form in Korea has only one
20AA NEW SHEQEL SIGN
+ = shekel
* Israel
20AB DONG SIGN
* Vietnam
@@ -13412,6 +13066,7 @@
2100 ACCOUNT OF
# 0061 002F 0063
2101 ADDRESSED TO THE SUBJECT
+ = aux soins (de)
x (aktieselskab - 214D)
# 0061 002F 0073
2102 DOUBLE-STRUCK CAPITAL C
@@ -13617,9 +13272,12 @@
@ Additional letterlike symbols
2141 TURNED SANS-SERIF CAPITAL G
= game
+ x (lisu letter hha - A4E8)
2142 TURNED SANS-SERIF CAPITAL L
+ x (lisu letter uh - A4F6)
2143 REVERSED SANS-SERIF CAPITAL L
2144 TURNED SANS-SERIF CAPITAL Y
+ x (lisu letter yha - 11FB0)
@ Double-struck italic math symbols
@+ These stylized mathematical symbols are used in some documents to distinguish special mathematical usages from ordinary variables.
2145 DOUBLE-STRUCK ITALIC CAPITAL D
@@ -13856,6 +13514,7 @@
21B0 UPWARDS ARROW WITH TIP LEFTWARDS
21B1 UPWARDS ARROW WITH TIP RIGHTWARDS
21B2 DOWNWARDS ARROW WITH TIP LEFTWARDS
+ x (inverse downwards arrow with tip leftwards - 1FBB4)
21B3 DOWNWARDS ARROW WITH TIP RIGHTWARDS
@ Keyboard symbols and circle arrows
21B4 RIGHTWARDS ARROW WITH CORNER DOWNWARDS
@@ -14106,10 +13765,12 @@
= wedge, conjunction
x (n-ary logical and - 22C0)
x (up arrowhead - 2303)
+ x (and with dot - 27D1)
2228 LOGICAL OR
= vee, disjunction
x (n-ary logical or - 22C1)
x (down arrowhead - 2304)
+ x (or with dot inside - 27C7)
2229 INTERSECTION
= cap, hat
x (n-ary intersection - 22C2)
@@ -14351,6 +14012,7 @@
x (apl functional symbol circle star - 235F)
229C CIRCLED EQUALS
= NoDerivatives (symbol used for Creative Commons licenses)
+ x (circled cc - 1F16D)
~ 229C FE00 with equal sign touching the circle
229D CIRCLED DASH
229E SQUARED PLUS
@@ -14361,6 +14023,7 @@
x (alchemical symbol for month - 1F771)
22A1 SQUARED DOT OPERATOR
x (alchemical symbol for urine - 1F755)
+ x (right open squared dot - 1FBBC)
22A2 RIGHT TACK
= turnstile
= proves, implies, yields
@@ -15307,6 +14970,7 @@
24C1 CIRCLED LATIN CAPITAL LETTER L
# <circle> 004C
24C2 CIRCLED LATIN CAPITAL LETTER M
+ x (mask work symbol - 1F1AD)
# <circle> 004D
24C3 CIRCLED LATIN CAPITAL LETTER N
# <circle> 004E
@@ -15421,6 +15085,7 @@
@ Light and heavy solid lines
2500 BOX DRAWINGS LIGHT HORIZONTAL
= Videotex Mosaic DG 15
+ x (box drawings light horizontal with vertical stroke - 1FBAF)
2501 BOX DRAWINGS HEAVY HORIZONTAL
2502 BOX DRAWINGS LIGHT VERTICAL
= Videotex Mosaic DG 14
@@ -15555,6 +15220,7 @@
256F BOX DRAWINGS LIGHT ARC UP AND LEFT
2570 BOX DRAWINGS LIGHT ARC UP AND RIGHT
@ Character cell diagonals
+@+ For a more extensive set of legacy terminal graphic character cell diagonals, see also 1FBA0-1FBAE in the Symbols for Legacy Computing block.
2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
* not intended for mathematical symbol \diagup
x (solidus - 002F)
@@ -15610,6 +15276,7 @@
= speckles fill, dotted fill
* 50%
* used in mapping to cp949
+ x (inverse medium shade - 1FB90)
2593 DARK SHADE
* 75%
@ Block elements
@@ -15622,15 +15289,17 @@
2599 QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT
259A QUADRANT UPPER LEFT AND LOWER RIGHT
x (reverse checker board - 1F67F)
+ x (checker board fill - 1FB95)
259B QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT
259C QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT
259D QUADRANT UPPER RIGHT
259E QUADRANT UPPER RIGHT AND LOWER LEFT
x (checker board - 1F67E)
+ x (inverse checker board fill - 1FB96)
259F QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
@@ 25A0 Geometric Shapes 25FF
@ Geometric shapes
-@+ Other geometric shapes complementing this set are found in the Miscellaneous Symbols and Arrows block.
+@+ Other geometric shapes complementing this set are found in the Miscellaneous Symbols and Arrows block and in the Symbols for Legacy Computing block.
25A0 BLACK SQUARE
= moding mark (in ideographic text)
x (full block - 2588)
@@ -15651,7 +15320,9 @@
25A5 SQUARE WITH VERTICAL FILL
25A6 SQUARE WITH ORTHOGONAL CROSSHATCH FILL
25A7 SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+ x (upper left to lower right fill - 1FB98)
25A8 SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+ x (upper right to lower left fill - 1FB99)
25A9 SQUARE WITH DIAGONAL CROSSHATCH FILL
25AA BLACK SMALL SQUARE
= square bullet
@@ -15727,6 +15398,7 @@
x (white concave-sided diamond - 27E1)
x (white medium diamond - 2B26)
x (alchemical symbol for soap - 1F754)
+ x (box drawings light diagonal diamond - 1FBAE)
25C8 WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
25C9 FISHEYE
= tainome (Japanese, a kind of bullet)
@@ -15774,9 +15446,13 @@
x (arc - 2312)
25E1 LOWER HALF CIRCLE
25E2 BLACK LOWER RIGHT TRIANGLE
+ x (lower right triangular medium shade - 1FB9E)
25E3 BLACK LOWER LEFT TRIANGLE
+ x (lower left triangular medium shade - 1FB9F)
25E4 BLACK UPPER LEFT TRIANGLE
+ x (upper left triangular medium shade - 1FB9C)
25E5 BLACK UPPER RIGHT TRIANGLE
+ x (upper right triangular medium shade - 1FB9D)
25E6 WHITE BULLET
x (bullet - 2022)
x (ring operator - 2218)
@@ -15918,6 +15594,7 @@
261E WHITE RIGHT POINTING INDEX
= fist (typographic term)
x (sideways white right pointing index - 1F599)
+ x (left third white right pointing index - 1FBC1)
261F WHITE DOWN POINTING INDEX
x (white down pointing left hand index - 1F597)
x (sideways white down pointing index - 1F59F)
@@ -15999,6 +15676,7 @@
x (crescent moon - 1F319)
263F MERCURY
= alchemical symbol for quicksilver
+ = intersexuality
2640 FEMALE SIGN
= Venus
= alchemical symbol for copper
@@ -16215,7 +15893,7 @@
x (lightning mood - 1F5F2)
@ Gender symbols
26A2 DOUBLED FEMALE SIGN
- = lesbianism
+ = female homosexuality
x (two women holding hands - 1F46D)
26A3 DOUBLED MALE SIGN
* a glyph variant has the two circles on the same line
@@ -16223,9 +15901,9 @@
x (two men holding hands - 1F46C)
26A4 INTERLOCKED FEMALE AND MALE SIGN
* a glyph variant has the two circles on the same line
- = bisexuality
+ = heterosexuality
26A5 MALE AND FEMALE SIGN
- = transgender
+ = intersex, androgynous
= hermaphrodite (in entomology)
26A6 MALE WITH STROKE SIGN
= transgender
@@ -16500,11 +16178,14 @@
2713 CHECK MARK
x (square root - 221A)
x (light check mark - 1F5F8)
+ x (inverse check mark - 1FBB1)
2714 HEAVY CHECK MARK
2715 MULTIPLICATION X
x (multiplication sign - 00D7)
x (box drawings light diagonal cross - 2573)
+ x (thin saltire - 1F7A8)
2716 HEAVY MULTIPLICATION X
+ x (extremely heavy saltire - 1F7AE)
2717 BALLOT X
x (saltire - 2613)
x (ballot script x - 1F5F4)
@@ -16514,6 +16195,7 @@
2719 OUTLINED GREEK CROSS
271A HEAVY GREEK CROSS
x (very bold greek cross - 1F7A5)
+ x (voided greek cross - 1FBBB)
271B OPEN CENTRE CROSS
271C HEAVY OPEN CENTRE CROSS
271D LATIN CROSS
@@ -16522,6 +16204,7 @@
271F OUTLINED LATIN CROSS
2720 MALTESE CROSS
* historically, the Maltese cross took many forms; the shape shown in the Zapf Dingbats is similar to one known as the Cross Formée
+ x (cross patty with right crossbar - 2E50)
x (circled cross formee - 1F902)
@ Stars and asterisks
2721 STAR OF DAVID
@@ -16592,9 +16275,12 @@
* forms a game tally pair with 2B55
x (multiplication sign - 00D7)
x (cancellation x - 1F5D9)
+ x (heavy saltire - 1F7AC)
+ x (white heavy saltire with rounded corners - 1FBC0)
274D SHADOWED WHITE CIRCLE
x (lower right shadowed white circle - 1F53E)
274E NEGATIVE SQUARED CROSS MARK
+ x (negative diagonal cross - 1FBBD)
274F LOWER RIGHT DROP-SHADOWED WHITE SQUARE
2750 UPPER RIGHT DROP-SHADOWED WHITE SQUARE
2751 LOWER RIGHT SHADOWED WHITE SQUARE
@@ -16728,6 +16414,7 @@
27A3 THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD
27A4 BLACK RIGHTWARDS ARROWHEAD
x (black rightwards equilateral arrowhead - 2B9E)
+ x (arrowhead-shaped pointer - 1FBB0)
27A5 HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW
x (black curved downwards and rightwards arrow - 2BA9)
27A6 HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW
@@ -16782,8 +16469,12 @@
@ Paired punctuation
27C5 LEFT S-SHAPED BAG DELIMITER
27C6 RIGHT S-SHAPED BAG DELIMITER
-@ Miscellaneous symbols
+@ Operator
27C7 OR WITH DOT INSIDE
+ x (logical or - 2228)
+ x (multiset multiplication - 228D)
+ x (and with dot - 27D1)
+@ Miscellaneous symbols
27C8 REVERSE SOLIDUS PRECEDING SUBSET
27C9 SUPERSET PRECEDING SOLIDUS
@ Vertical line operator
@@ -16822,6 +16513,7 @@
@ Operators
27D1 AND WITH DOT
x (logical and - 2227)
+ x (or with dot inside - 27C7)
x (intersection with dot - 2A40)
27D2 ELEMENT OF OPENING UPWARDS
x (element of opening downwards - 2AD9)
@@ -17528,6 +17220,7 @@
x (bowtie - 22C8)
29D2 BOWTIE WITH RIGHT HALF BLACK
29D3 BLACK BOWTIE
+ x (left and right triangular half block - 1FB9B)
29D4 TIMES WITH LEFT HALF BLACK
x (left normal factor semidirect product - 22C9)
29D5 TIMES WITH RIGHT HALF BLACK
@@ -17537,6 +17230,7 @@
= white framus
x (hourglass - 231B)
29D7 BLACK HOURGLASS
+ x (upper and lower triangular half block - 1FB9A)
@ Fences
29D8 LEFT WIGGLY FENCE
x (presentation form for vertical wavy low line - FE34)
@@ -18335,6 +18029,10 @@
2B95 RIGHTWARDS BLACK ARROW
x (black rightwards arrow - 27A1)
x (leftwards black arrow - 2B05)
+@ Miscellaneous symbol
+2B97 SYMBOL FOR TYPE A ELECTRONICS
+ * for type B electronics use 3036
+ x (circled postal mark - 3036)
@ Arrowheads
@+ These sets of arrowheads are narrower than the dingbats set.
2B98 THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD
@@ -18667,6 +18365,7 @@
x (greek capital letter heta - 0370)
x (turned capital f - 2132)
x (roman numeral reversed one hundred - 2183)
+ x (latin capital letter reversed half h - A7F5)
2C76 LATIN SMALL LETTER HALF H
x (greek small letter heta - 0371)
@ Additions for UPA
@@ -19281,11 +18980,18 @@
2E4E PUNCTUS ELEVATUS MARK
* indicates a major medial pause where the sense is complete but the meaning is not
2E4F CORNISH VERSE DIVIDER
+2E50 CROSS PATTY WITH RIGHT CROSSBAR
+ x (maltese cross - 2720)
+2E51 CROSS PATTY WITH LEFT CROSSBAR
+2E52 TIRONIAN SIGN CAPITAL ET
+ x (tironian sign et - 204A)
@@ 2E80 CJK Radicals Supplement 2EFF
+@+ For the characters in this block whose representative glyph takes up only a portion of the em-box, the placement relative to the em-box is either centered or respects prototypical usage. The placement of the representative glyph is for informational purposes only, and should not be considered a recommendation for implementations.
@ CJK radicals supplement
2E80 CJK RADICAL REPEAT
2E81 CJK RADICAL CLIFF
x 5382
+ x 20086
2E82 CJK RADICAL SECOND ONE
x 4E5B
2E83 CJK RADICAL SECOND TWO
@@ -19299,9 +19005,11 @@
x 5182
2E87 CJK RADICAL TABLE
x 51E0
+ x 20628
2E88 CJK RADICAL KNIFE ONE
* form used at top
x 5200
+ x 2008A
2E89 CJK RADICAL KNIFE TWO
* form used on right side
x 5202
@@ -19317,14 +19025,17 @@
2E8D CJK RADICAL SMALL TWO
* form used at top
x 5C0F
+ x 2D544
2E8E CJK RADICAL LAME ONE
x 5C22
+ x 5140
2E8F CJK RADICAL LAME TWO
x 5C23
2E90 CJK RADICAL LAME THREE
x 5C22
2E91 CJK RADICAL LAME FOUR
x 5C23
+ x 21BC2
2E92 CJK RADICAL SNAKE
x 5DF3
2E93 CJK RADICAL THREAD
@@ -19338,6 +19049,7 @@
x 5FC4
2E97 CJK RADICAL HEART TWO
* form used at bottom
+ x 38FA
x 5FC3
2E98 CJK RADICAL HAND
* form used on left side
@@ -19348,6 +19060,8 @@
2E9B CJK RADICAL CHOKE
x 65E1
2E9C CJK RADICAL SUN
+ * actually a form of the radical for hat, despite its resemblance in shape to the radical for sun
+ x 5183
x 65E5
2E9D CJK RADICAL MOON
x 6708
@@ -19382,19 +19096,23 @@
2EA9 CJK RADICAL JADE
* form used on left side
x 738B
+ x 248E9
2EAA CJK RADICAL BOLT OF CLOTH
* form used on left side
x 758B
+ x 24D14
2EAB CJK RADICAL EYE
* form used at top
x (cjk radical net two - 2EB2)
x 76EE
+ x 7F52
2EAC CJK RADICAL SPIRIT ONE
x 793A
2EAD CJK RADICAL SPIRIT TWO
x 793B
2EAE CJK RADICAL BAMBOO
x 7AF9
+ x 25AD7
2EAF CJK RADICAL SILK
* form used on left side
x 7CF9
@@ -19406,9 +19124,12 @@
2EB2 CJK RADICAL NET TWO
x (cjk radical eye - 2EAB)
x 7F52
+ x 26270
2EB3 CJK RADICAL NET THREE
+ x 34C1
x 7F51
2EB4 CJK RADICAL NET FOUR
+ x 34C1
x 7F51
2EB5 CJK RADICAL MESH
x 2626B
@@ -19418,8 +19139,10 @@
2EB7 CJK RADICAL RAM
* form used at top
x 7F8A
+ x 2634C
2EB8 CJK RADICAL EWE
x 7F8B
+ x 2634B
2EB9 CJK RADICAL OLD
x 8002
2EBA CJK RADICAL BRUSH ONE
@@ -19430,6 +19153,7 @@
x 8089
2EBD CJK RADICAL MORTAR
x 81FC
+ x 26951
2EBE CJK RADICAL GRASS ONE
x 8279
2EBF CJK RADICAL GRASS TWO
@@ -19460,6 +19184,7 @@
2ECA CJK RADICAL FOOT
* form used on left side
x 8DB3
+ x 27FB7
2ECB CJK RADICAL C-SIMPLIFIED CART
x 8F66
2ECC CJK RADICAL SIMPLIFIED WALK
@@ -19541,6 +19266,7 @@
2EEE CJK RADICAL C-SIMPLIFIED TOOTH
x 9F7F
2EEF CJK RADICAL J-SIMPLIFIED DRAGON
+ x 7ADC
x 9F8D
2EF0 CJK RADICAL C-SIMPLIFIED DRAGON
x 9F99
@@ -19637,6 +19363,7 @@
2F29 KANGXI RADICAL SMALL
# 5C0F
2F2A KANGXI RADICAL LAME
+ x 21BC1
# 5C22
2F2B KANGXI RADICAL CORPSE
# 5C38
@@ -20131,8 +19858,9 @@
3035 VERTICAL KANA REPEAT MARK LOWER HALF
@ Other CJK symbols
3036 CIRCLED POSTAL MARK
- = symbol for type b electronics
+ = symbol for type B electronics
* not used as a postal mark
+ x (symbol for type a electronics - 2B97)
# 3012 postal mark
3037 IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
@ Additional Suzhou numerals
@@ -20756,11 +20484,19 @@
31B4 BOPOMOFO FINAL LETTER P
31B5 BOPOMOFO FINAL LETTER T
31B6 BOPOMOFO FINAL LETTER K
+ * use of 31BB is preferred
31B7 BOPOMOFO FINAL LETTER H
@ Extended Bopomofo for Hmu and Ge
31B8 BOPOMOFO LETTER GH
31B9 BOPOMOFO LETTER LH
31BA BOPOMOFO LETTER ZY
+@ Extended Bopomofo for Minnan and Hakka
+31BB BOPOMOFO FINAL LETTER G
+@ Extended Bopomofo for Cantonese
+31BC BOPOMOFO LETTER GW
+31BD BOPOMOFO LETTER KW
+31BE BOPOMOFO LETTER OE
+31BF BOPOMOFO LETTER AH
@@ 31C0 CJK Strokes 31EF
@ CJK strokes
31C0 CJK STROKE T
@@ -22041,7 +21777,7 @@
@ Squared Latin abbreviation
33FF SQUARE GAL
# <square> 0067 0061 006C
-@@ 3400 CJK Unified Ideographs Extension A 4DB5
+@@ 3400 CJK Unified Ideographs Extension A 4DBF
@@ 4DC0 Yijing Hexagram Symbols 4DFF
@ Yijing hexagram symbols
4DC0 HEXAGRAM FOR THE CREATIVE HEAVEN
@@ -22108,7 +21844,7 @@
4DFD HEXAGRAM FOR SMALL PREPONDERANCE
4DFE HEXAGRAM FOR AFTER COMPLETION
4DFF HEXAGRAM FOR BEFORE COMPLETION
-@@ 4E00 CJK Unified Ideographs 9FEF
+@@ 4E00 CJK Unified Ideographs 9FFC
@@ A000 Yi Syllables A48F
@@+
@ Syllables
@@ -24106,9 +23842,9 @@ A762 LATIN CAPITAL LETTER VISIGOTHIC Z
A763 LATIN SMALL LETTER VISIGOTHIC Z
A764 LATIN CAPITAL LETTER THORN WITH STROKE
A765 LATIN SMALL LETTER THORN WITH STROKE
- * Old Norse, Old English
- * representative glyph is preferred in Old Norse text
- * Old English fonts show a more diagonal stroke
+ * Old English, Old Norse
+ * representative glyph is preferred in Old English text
+ * Old Norse fonts show a more horizontal stroke
A766 LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
A767 LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER
A768 LATIN CAPITAL LETTER VEND
@@ -24285,13 +24021,27 @@ A7C5 LATIN CAPITAL LETTER S WITH HOOK
* lowercase is 0282
A7C6 LATIN CAPITAL LETTER Z WITH PALATAL HOOK
* lowercase is 1D8E
-@ Additional letter
+@ Additional letters for Gaulish
+A7C7 LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C8 LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+ = tau gallicum
+ * indicates a dental affricate
+A7C9 LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7CA LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+@ Ancient Gaulish and Celtic epigraphic letters
+A7F5 LATIN CAPITAL LETTER REVERSED HALF H
+ = H dimidié
+ * appears in inscriptions from the Roman provinces of Gaul
+ x (latin capital letter half h - 2C75)
+A7F6 LATIN SMALL LETTER REVERSED HALF H
A7F7 LATIN EPIGRAPHIC LETTER SIDEWAYS I
* Celtic inscriptions
@ Additions for Extended IPA
A7F8 MODIFIER LETTER CAPITAL H WITH STROKE
- * faucalized
# <super> 0126
+@+ A typographical distinction between a capital form and a small capital form is not distinctive for this IPA usage.
+ * faucalized
+ x (latin letter small capital h - 029C)
A7F9 MODIFIER LETTER SMALL LIGATURE OE
* labialized: open-rounded
# <super> 0153
@@ -24355,6 +24105,10 @@ A828 SYLOTI NAGRI POETRY MARK-1
A829 SYLOTI NAGRI POETRY MARK-2
A82A SYLOTI NAGRI POETRY MARK-3
A82B SYLOTI NAGRI POETRY MARK-4
+@ Sign
+A82C SYLOTI NAGRI SIGN ALTERNATE HASANTA
+ = killer
+ * does not form conjuncts
@@ A830 Common Indic Number Forms A83F
@ Number forms
A830 NORTH INDIC FRACTION ONE QUARTER
@@ -24877,13 +24631,13 @@ A987 JAVANESE LETTER II
A988 JAVANESE LETTER U
A989 JAVANESE LETTER PA CEREK
= vocalic r
- * rae in Javanese
+ * rĕ in Javanese
A98A JAVANESE LETTER NGA LELET
= vocalic l
- * lae in Javanese
+ * lĕ in Javanese
A98B JAVANESE LETTER NGA LELET RASWADI
= vocalic ll
- * loe in Javanese
+ * leu in Javanese
A98C JAVANESE LETTER E
A98D JAVANESE LETTER AI
A98E JAVANESE LETTER O
@@ -24944,8 +24698,9 @@ A9B3 JAVANESE SIGN CECAK TELU
@ Dependent vowel signs
A9B4 JAVANESE VOWEL SIGN TARUNG
= aa
+ * o in Sundanese, not used alone in Javanese
A9B5 JAVANESE VOWEL SIGN TOLONG
- = o
+ * a glyph variant of A9B4
A9B6 JAVANESE VOWEL SIGN WULU
= i
A9B7 JAVANESE VOWEL SIGN WULU MELIK
@@ -24959,11 +24714,11 @@ A9BA JAVANESE VOWEL SIGN TALING
A9BB JAVANESE VOWEL SIGN DIRGA MURE
= ai
A9BC JAVANESE VOWEL SIGN PEPET
- = ae
+ = ĕ
@ Dependent consonant signs
A9BD JAVANESE CONSONANT SIGN KERET
= vocalic r
- * medial rae in Javanese
+ * medial rĕ in Javanese
A9BE JAVANESE CONSONANT SIGN PENGKAL
= medial ya
A9BF JAVANESE CONSONANT SIGN CAKRA
@@ -25440,6 +25195,22 @@ AB67 LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
* voiceless retroflex affricate
x (latin small letter s with hook - 0282)
x (latin small letter ts digraph - 02A6)
+@ Letters for Scots dialectology
+@+ These letters are used in phonetic transcription in Scots dictionaries.
+AB68 LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+ * velarized dento-alveolar approximant
+ x (latin small letter r with middle tilde - 1D72)
+AB69 MODIFIER LETTER SMALL TURNED W
+ * voiceless bilabial realization
+ x (combining latin small letter turned w below - 1AC0)
+ # <super> 028D
+AB6A MODIFIER LETTER LEFT TACK
+ * fronted vocalic realization
+ x (modifier letter up tack - 02D4)
+ x (combining left tack below - 0318)
+AB6B MODIFIER LETTER RIGHT TACK
+ * backed vocalic realization
+ x (combining right tack below - 0319)
@@ AB70 Cherokee Supplement ABBF
@+ The uppercase Cherokee syllables are encoded in the Cherokee block at 13A0-13FF. Lowercase ye, yi, yo, yu, yv, and mv are encoded in that same block.
@ Lowercase syllables
@@ -29093,6 +28864,7 @@ FFFD REPLACEMENT CHARACTER
* used to replace an incoming character whose value is unknown or unrepresentable in Unicode
* compare the use of 001A as a control character to indicate the substitute function
x (uncertainty sign - 2BD1)
+ x (negative squared question mark - 1FBC4)
@ Noncharacters
@+ These codes are intended for process-internal uses.
FFFE <not a character>
@@ -29521,8 +29293,9 @@ FFFF <not a character>
10199 ROMAN DUPONDIUS SIGN
1019A ROMAN AS SIGN
x (apl functional symbol slash bar - 233F)
-@ Roman military symbol
+@ Other Roman epigraphic symbols
1019B ROMAN CENTURIAL SIGN
+1019C ASCIA SYMBOL
@ Greek symbol
101A0 GREEK SYMBOL TAU RHO
= rho-cross, staurogram
@@ -32191,6 +31964,60 @@ FFFF <not a character>
10E7C RUMI FRACTION ONE QUARTER
10E7D RUMI FRACTION ONE THIRD
10E7E RUMI FRACTION TWO THIRDS
+@@ 10E80 Yezidi 10EBF
+@ Letters
+10E80 YEZIDI LETTER ELIF
+10E81 YEZIDI LETTER BE
+10E82 YEZIDI LETTER PE
+10E83 YEZIDI LETTER PHE
+10E84 YEZIDI LETTER THE
+10E85 YEZIDI LETTER SE
+10E86 YEZIDI LETTER CIM
+10E87 YEZIDI LETTER CHIM
+10E88 YEZIDI LETTER CHHIM
+10E89 YEZIDI LETTER HHA
+10E8A YEZIDI LETTER XA
+10E8B YEZIDI LETTER DAL
+10E8C YEZIDI LETTER ZAL
+10E8D YEZIDI LETTER RA
+10E8E YEZIDI LETTER RHA
+10E8F YEZIDI LETTER ZA
+10E90 YEZIDI LETTER JA
+10E91 YEZIDI LETTER SIN
+10E92 YEZIDI LETTER SHIN
+10E93 YEZIDI LETTER SAD
+10E94 YEZIDI LETTER DAD
+10E95 YEZIDI LETTER TA
+10E96 YEZIDI LETTER ZE
+10E97 YEZIDI LETTER EYN
+10E98 YEZIDI LETTER XHEYN
+10E99 YEZIDI LETTER FA
+10E9A YEZIDI LETTER VA
+10E9B YEZIDI LETTER VA ALTERNATE FORM
+10E9C YEZIDI LETTER QAF
+10E9D YEZIDI LETTER KAF
+10E9E YEZIDI LETTER KHAF
+10E9F YEZIDI LETTER GAF
+10EA0 YEZIDI LETTER LAM
+10EA1 YEZIDI LETTER MIM
+10EA2 YEZIDI LETTER NUN
+10EA3 YEZIDI LETTER UM
+10EA4 YEZIDI LETTER WAW
+10EA5 YEZIDI LETTER OW
+10EA6 YEZIDI LETTER EW
+10EA7 YEZIDI LETTER HAY
+10EA8 YEZIDI LETTER YOT
+10EA9 YEZIDI LETTER ET
+@ Combining marks
+10EAB YEZIDI COMBINING HAMZA MARK
+ * denotes a glottal stop
+10EAC YEZIDI COMBINING MADDA MARK
+ * denotes long /a/ at the beginning of some words
+@ Punctuation
+10EAD YEZIDI HYPHENATION MARK
+@ Historical letters with diacritics
+10EB0 YEZIDI LETTER LAM WITH DOT ABOVE
+10EB1 YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
@@ 10F00 Old Sogdian 10F2F
@+ This block unifies the scripts used in the Ancient Letters and the Kultobe and Upper Indus inscriptions.
@ Letters
@@ -32293,6 +32120,38 @@ FFFF <not a character>
10F57 SOGDIAN PUNCTUATION CIRCLE WITH DOT
10F58 SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS
10F59 SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+@@ 10FB0 Chorasmian 10FDF
+@+ This script is also known as 'Khwarezmian', from its classical Persian name xvārazm.
+@ Letters
+10FB0 CHORASMIAN LETTER ALEPH
+10FB1 CHORASMIAN LETTER SMALL ALEPH
+10FB2 CHORASMIAN LETTER BETH
+10FB3 CHORASMIAN LETTER GIMEL
+10FB4 CHORASMIAN LETTER DALETH
+10FB5 CHORASMIAN LETTER HE
+10FB6 CHORASMIAN LETTER WAW
+10FB7 CHORASMIAN LETTER CURLED WAW
+10FB8 CHORASMIAN LETTER ZAYIN
+10FB9 CHORASMIAN LETTER HETH
+10FBA CHORASMIAN LETTER YODH
+10FBB CHORASMIAN LETTER KAPH
+10FBC CHORASMIAN LETTER LAMEDH
+10FBD CHORASMIAN LETTER MEM
+10FBE CHORASMIAN LETTER NUN
+10FBF CHORASMIAN LETTER SAMEKH
+10FC0 CHORASMIAN LETTER AYIN
+10FC1 CHORASMIAN LETTER PE
+10FC2 CHORASMIAN LETTER RESH
+10FC3 CHORASMIAN LETTER SHIN
+10FC4 CHORASMIAN LETTER TAW
+@ Numbers
+10FC5 CHORASMIAN NUMBER ONE
+10FC6 CHORASMIAN NUMBER TWO
+10FC7 CHORASMIAN NUMBER THREE
+10FC8 CHORASMIAN NUMBER FOUR
+10FC9 CHORASMIAN NUMBER TEN
+10FCA CHORASMIAN NUMBER TWENTY
+10FCB CHORASMIAN NUMBER ONE HUNDRED
@@ 10FE0 Elymaic 10FFF
@ Letters
10FE0 ELYMAIC LETTER ALEPH
@@ -32569,108 +32428,59 @@ FFFF <not a character>
@@ 11100 Chakma 1114F
@ Various signs
11100 CHAKMA SIGN CANDRABINDU
- = caanaphudaa
11101 CHAKMA SIGN ANUSVARA
- = ekaphudaa
11102 CHAKMA SIGN VISARGA
- = dviphudaa
@ Independent vowels
11103 CHAKMA LETTER AA
- = pichapujhaa aa
11104 CHAKMA LETTER I
- = delabhaangagaa i
11105 CHAKMA LETTER U
- = bacacu u
11106 CHAKMA LETTER E
- = lejaubaa e
@ Consonants
11107 CHAKMA LETTER KAA
- = cucyaangyaa kaa
11108 CHAKMA LETTER KHAA
- = grajaangyaa khaa
11109 CHAKMA LETTER GAA
- = caandyaa gaa
1110A CHAKMA LETTER GHAA
- = tinaddaalyaa ghaa
1110B CHAKMA LETTER NGAA
- = cilaama ngaa
1110C CHAKMA LETTER CAA
- = dvibhalyaa caa
1110D CHAKMA LETTER CHAA
- = majaraa chaa
1110E CHAKMA LETTER JAA
- = dvipadalaa jaa
1110F CHAKMA LETTER JHAA
- = uraauraa jhaa
11110 CHAKMA LETTER NYAA
- = silaacyaa nyaa
11111 CHAKMA LETTER TTAA
- = dviyaadaat ttaa
11112 CHAKMA LETTER TTHAA
- = phudaadviyaat tthaa
11113 CHAKMA LETTER DDAA
- = aadudaangaat ddaa
11114 CHAKMA LETTER DDHAA
- = lejabharaat ddhaa
11115 CHAKMA LETTER NNAA
- = pettttuyaa nnaa
11116 CHAKMA LETTER TAA
- = ghangadaat taa
11117 CHAKMA LETTER THAA
- = jagadaat thaa
11118 CHAKMA LETTER DAA
- = dolaniit daa
11119 CHAKMA LETTER DHAA
- = talamuyaat dhaa
1111A CHAKMA LETTER NAA
- = phaarabaanyaa naa
1111B CHAKMA LETTER PAA
- = paalyaa paa
1111C CHAKMA LETTER PHAA
- = ubaraphudaa phaa
1111D CHAKMA LETTER BAA
- = ubaramuyaa baa
1111E CHAKMA LETTER BHAA
- = ciraddaalyaa bhaa
1111F CHAKMA LETTER MAA
- = bugatpadalaa maa
11120 CHAKMA LETTER YYAA
- = cimayyaa yyaa
11121 CHAKMA LETTER YAA
- = jilyaa yaa
11122 CHAKMA LETTER RAA
- = dvidaayyaa raa
11123 CHAKMA LETTER LAA
- = talamuyaa laa
11124 CHAKMA LETTER WAA
- = bajhonyaa waa
11125 CHAKMA LETTER SAA
- = bhudibukyaa saa
11126 CHAKMA LETTER HAA
- = ubaramuyaa haa
@ Dependent vowel signs
11127 CHAKMA VOWEL SIGN A
- = ubaratulyaa a
11128 CHAKMA VOWEL SIGN I
- = bahryaa i
11129 CHAKMA VOWEL SIGN II
- = baaniiphadaa ii
1112A CHAKMA VOWEL SIGN U
- = ekattaana u
1112B CHAKMA VOWEL SIGN UU
- = dvittaana uu
1112C CHAKMA VOWEL SIGN E
- = ekaara e
1112D CHAKMA VOWEL SIGN AI
- = delabhaanga ai
1112E CHAKMA VOWEL SIGN O
- = okaara o
: 11131 11127
1112F CHAKMA VOWEL SIGN AU
- = aukaara au
: 11132 11127
11130 CHAKMA VOWEL SIGN OI
- = oikaara oi
11131 CHAKMA O MARK
11132 CHAKMA AU MARK
@ Various signs
@@ -32694,21 +32504,17 @@ FFFF <not a character>
1113F CHAKMA DIGIT NINE
@ Punctuation
11140 CHAKMA SECTION MARK
- = phulacihna
11141 CHAKMA DANDA
- = ekacilyaa
11142 CHAKMA DOUBLE DANDA
- = dvicilyaa
11143 CHAKMA QUESTION MARK
- = pujhaar
@ Consonant
11144 CHAKMA LETTER LHAA
- = fetfada lhaa
@ Dependent vowel signs
11145 CHAKMA VOWEL SIGN AA
- = deildya aa
11146 CHAKMA VOWEL SIGN EI
- = dvi adi gadeidya ei
+@ Consonant
+11147 CHAKMA LETTER VAA
+ * used in Pali text
@@ 11150 Mahajani 1117F
@ Vowels
11150 MAHAJANI LETTER A
@@ -32851,6 +32657,11 @@ FFFF <not a character>
@ Punctuation
111CD SHARADA SUTRA MARK
* used for indicating the end of a sutra in the Bakhshali manuscript
+@ Historic vowel sign
+111CE SHARADA VOWEL SIGN PRISHTHAMATRA E
+ x (devanagari vowel sign prishthamatra e - 094E)
+@ Sign
+111CF SHARADA SIGN INVERTED CANDRABINDU
@ Digits
111D0 SHARADA DIGIT ZERO
111D1 SHARADA DIGIT ONE
@@ -33332,6 +33143,8 @@ FFFF <not a character>
= cyaa
11459 NEWA DIGIT NINE
= gu
+@ Punctuation
+1145A NEWA DOUBLE COMMA
@ Various signs
1145B NEWA PLACEHOLDER MARK
= jaayekaa
@@ -33341,6 +33154,10 @@ FFFF <not a character>
* indicates external sandhi in Sanskrit documents
x (bengali sandhi mark - 09FE)
1145F NEWA LETTER VEDIC ANUSVARA
+11460 NEWA SIGN JIHVAMULIYA
+ x (vedic sign jihvamuliya - 1CF5)
+11461 NEWA SIGN UPADHMANIYA
+ x (vedic sign upadhmaniya - 1CF6)
@@ 11480 Tirhuta 114DF
@+ The Tirhuta script is also known by the names Mithilakshara and Maithili.
@ Sign
@@ -33962,6 +33779,101 @@ FFFF <not a character>
118F2 WARANG CITI NUMBER NINETY
@ Sign
118FF WARANG CITI OM
+@@ 11900 Dives Akuru 1195F
+@+ This block supports both Evela Akuru and Dives Akuru.
+@ Independent vowels
+11900 DIVES AKURU LETTER A
+11901 DIVES AKURU LETTER AA
+11902 DIVES AKURU LETTER I
+11903 DIVES AKURU LETTER II
+11904 DIVES AKURU LETTER U
+11905 DIVES AKURU LETTER UU
+11906 DIVES AKURU LETTER E
+11909 DIVES AKURU LETTER O
+@ Consonants
+1190C DIVES AKURU LETTER KA
+1190D DIVES AKURU LETTER KHA
+1190E DIVES AKURU LETTER GA
+1190F DIVES AKURU LETTER GHA
+11910 DIVES AKURU LETTER NGA
+11911 DIVES AKURU LETTER CA
+11912 DIVES AKURU LETTER CHA
+11913 DIVES AKURU LETTER JA
+11915 DIVES AKURU LETTER NYA
+11916 DIVES AKURU LETTER TTA
+11918 DIVES AKURU LETTER DDA
+11919 DIVES AKURU LETTER DDHA
+1191A DIVES AKURU LETTER NNA
+1191B DIVES AKURU LETTER TA
+1191C DIVES AKURU LETTER THA
+1191D DIVES AKURU LETTER DA
+1191E DIVES AKURU LETTER DHA
+1191F DIVES AKURU LETTER NA
+11920 DIVES AKURU LETTER PA
+11921 DIVES AKURU LETTER PHA
+11922 DIVES AKURU LETTER BA
+11923 DIVES AKURU LETTER BHA
+11924 DIVES AKURU LETTER MA
+11925 DIVES AKURU LETTER YA
+ * also used as a vowel carrier
+11926 DIVES AKURU LETTER YYA
+11927 DIVES AKURU LETTER RA
+11928 DIVES AKURU LETTER LA
+11929 DIVES AKURU LETTER VA
+1192A DIVES AKURU LETTER SHA
+1192B DIVES AKURU LETTER SSA
+1192C DIVES AKURU LETTER SA
+1192D DIVES AKURU LETTER HA
+1192E DIVES AKURU LETTER LLA
+1192F DIVES AKURU LETTER ZA
+@ Dependent vowel signs
+11930 DIVES AKURU VOWEL SIGN AA
+11931 DIVES AKURU VOWEL SIGN I
+11932 DIVES AKURU VOWEL SIGN II
+11933 DIVES AKURU VOWEL SIGN U
+11934 DIVES AKURU VOWEL SIGN UU
+11935 DIVES AKURU VOWEL SIGN E
+11937 DIVES AKURU VOWEL SIGN AI
+11938 DIVES AKURU VOWEL SIGN O
+ : 11935 11930
+@ Nasalization signs
+1193B DIVES AKURU SIGN ANUSVARA
+1193C DIVES AKURU SIGN CANDRABINDU
+@ Signs
+1193D DIVES AKURU SIGN HALANTA
+ = sukun
+ * a killer, silences the inherent vowel
+1193E DIVES AKURU VIRAMA
+ * used for conjunct production
+ * also used for producing a ligature of devowelized consonant and independent vowel letter
+1193F DIVES AKURU PREFIXED NASAL SIGN
+ * used for cluster-initial homorganic nasal
+@ Conjunct-specific letters
+11940 DIVES AKURU MEDIAL YA
+ * used for non-initial ya in conjuncts
+11941 DIVES AKURU INITIAL RA
+ = repha
+ * used for initial ra in conjuncts
+11942 DIVES AKURU MEDIAL RA
+ * used for non-initial ra in conjuncts
+@ Nukta
+11943 DIVES AKURU SIGN NUKTA
+ * modern diacritic used for extending the alphabet
+@ Punctuation
+11944 DIVES AKURU DOUBLE DANDA
+11945 DIVES AKURU GAP FILLER
+11946 DIVES AKURU END OF TEXT MARK
+@ Digits
+11950 DIVES AKURU DIGIT ZERO
+11951 DIVES AKURU DIGIT ONE
+11952 DIVES AKURU DIGIT TWO
+11953 DIVES AKURU DIGIT THREE
+11954 DIVES AKURU DIGIT FOUR
+11955 DIVES AKURU DIGIT FIVE
+11956 DIVES AKURU DIGIT SIX
+11957 DIVES AKURU DIGIT SEVEN
+11958 DIVES AKURU DIGIT EIGHT
+11959 DIVES AKURU DIGIT NINE
@@ 119A0 Nandinagari 119FF
@ Independent vowels
119A0 NANDINAGARI LETTER A
@@ -34705,6 +34617,12 @@ FFFF <not a character>
@ Punctuation
11EF7 MAKASAR PASSIMBANG
11EF8 MAKASAR END OF SECTION
+@@ 11FB0 Lisu Supplement 11FBF
+@ Letter
+11FB0 LISU LETTER YHA
+ * used for the Naxi language
+ x (turned sans-serif capital y - 2144)
+ x (lisu letter ya - A4EC)
@@ 11FC0 Tamil Supplement 11FFF
@ Fractions
11FC0 TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH
@@ -39643,9 +39561,18 @@ FFFF <not a character>
16FE3 OLD CHINESE ITERATION MARK
x (ideographic iteration mark - 3005)
x (vertical ideographic iteration mark - 303B)
+@ Small Khitan format character
+16FE4 KHITAN SMALL SCRIPT FILLER
+@ Combining diacritics for CJK ideographs
+@+ These combining marks indicate alternate readings for Han characters in the Vietnamese tradition.
+16FF0 VIETNAMESE ALTERNATE READING MARK CA
+ x 4E2A
+ x 4E87
+16FF1 VIETNAMESE ALTERNATE READING MARK NHAY
+ x 21FE8
@@ 17000 Tangut 187F7
@@ 18800 Tangut Components 18AFF
-@+ This is a superset of components used in various Tangut sources. Indexes of components (001..755) used for Tangut ideographs are shown in the Tangut block.
+@+ This is a superset of components used in various Tangut sources. Indexes of components (001..768) used for Tangut ideographs are shown in the Tangut block.
@ One-stroke components
18800 TANGUT COMPONENT-001
18801 TANGUT COMPONENT-002
@@ -40415,6 +40342,526 @@ FFFF <not a character>
18AF1 TANGUT COMPONENT-754
@ Sixteen-stroke component
18AF2 TANGUT COMPONENT-755
+@ Additional components
+18AF3 TANGUT COMPONENT-756
+ * two strokes
+18AF4 TANGUT COMPONENT-757
+ * eight strokes
+18AF5 TANGUT COMPONENT-758
+ * seven strokes
+18AF6 TANGUT COMPONENT-759
+ * eight strokes
+18AF7 TANGUT COMPONENT-760
+ * six strokes
+18AF8 TANGUT COMPONENT-761
+ * seven strokes
+18AF9 TANGUT COMPONENT-762
+ * ten strokes
+18AFA TANGUT COMPONENT-763
+ * two strokes
+18AFB TANGUT COMPONENT-764
+ * two strokes
+18AFC TANGUT COMPONENT-765
+ * three strokes
+18AFD TANGUT COMPONENT-766
+ * three strokes
+18AFE TANGUT COMPONENT-767
+ * four strokes
+18AFF TANGUT COMPONENT-768
+ * four strokes
+@@ 18B00 Khitan Small Script 18CFF
+@ Iteration mark
+18B00 KHITAN SMALL SCRIPT CHARACTER-18B00
+@ Radical-01
+18B01 KHITAN SMALL SCRIPT CHARACTER-18B01
+18B02 KHITAN SMALL SCRIPT CHARACTER-18B02
+18B03 KHITAN SMALL SCRIPT CHARACTER-18B03
+18B04 KHITAN SMALL SCRIPT CHARACTER-18B04
+18B05 KHITAN SMALL SCRIPT CHARACTER-18B05
+18B06 KHITAN SMALL SCRIPT CHARACTER-18B06
+18B07 KHITAN SMALL SCRIPT CHARACTER-18B07
+18B08 KHITAN SMALL SCRIPT CHARACTER-18B08
+18B09 KHITAN SMALL SCRIPT CHARACTER-18B09
+18B0A KHITAN SMALL SCRIPT CHARACTER-18B0A
+18B0B KHITAN SMALL SCRIPT CHARACTER-18B0B
+18B0C KHITAN SMALL SCRIPT CHARACTER-18B0C
+18B0D KHITAN SMALL SCRIPT CHARACTER-18B0D
+18B0E KHITAN SMALL SCRIPT CHARACTER-18B0E
+18B0F KHITAN SMALL SCRIPT CHARACTER-18B0F
+18B10 KHITAN SMALL SCRIPT CHARACTER-18B10
+18B11 KHITAN SMALL SCRIPT CHARACTER-18B11
+18B12 KHITAN SMALL SCRIPT CHARACTER-18B12
+18B13 KHITAN SMALL SCRIPT CHARACTER-18B13
+18B14 KHITAN SMALL SCRIPT CHARACTER-18B14
+18B15 KHITAN SMALL SCRIPT CHARACTER-18B15
+18B16 KHITAN SMALL SCRIPT CHARACTER-18B16
+18B17 KHITAN SMALL SCRIPT CHARACTER-18B17
+18B18 KHITAN SMALL SCRIPT CHARACTER-18B18
+18B19 KHITAN SMALL SCRIPT CHARACTER-18B19
+18B1A KHITAN SMALL SCRIPT CHARACTER-18B1A
+18B1B KHITAN SMALL SCRIPT CHARACTER-18B1B
+18B1C KHITAN SMALL SCRIPT CHARACTER-18B1C
+18B1D KHITAN SMALL SCRIPT CHARACTER-18B1D
+18B1E KHITAN SMALL SCRIPT CHARACTER-18B1E
+18B1F KHITAN SMALL SCRIPT CHARACTER-18B1F
+18B20 KHITAN SMALL SCRIPT CHARACTER-18B20
+18B21 KHITAN SMALL SCRIPT CHARACTER-18B21
+18B22 KHITAN SMALL SCRIPT CHARACTER-18B22
+18B23 KHITAN SMALL SCRIPT CHARACTER-18B23
+18B24 KHITAN SMALL SCRIPT CHARACTER-18B24
+18B25 KHITAN SMALL SCRIPT CHARACTER-18B25
+18B26 KHITAN SMALL SCRIPT CHARACTER-18B26
+18B27 KHITAN SMALL SCRIPT CHARACTER-18B27
+18B28 KHITAN SMALL SCRIPT CHARACTER-18B28
+18B29 KHITAN SMALL SCRIPT CHARACTER-18B29
+18B2A KHITAN SMALL SCRIPT CHARACTER-18B2A
+18B2B KHITAN SMALL SCRIPT CHARACTER-18B2B
+18B2C KHITAN SMALL SCRIPT CHARACTER-18B2C
+18B2D KHITAN SMALL SCRIPT CHARACTER-18B2D
+18B2E KHITAN SMALL SCRIPT CHARACTER-18B2E
+18B2F KHITAN SMALL SCRIPT CHARACTER-18B2F
+18B30 KHITAN SMALL SCRIPT CHARACTER-18B30
+18B31 KHITAN SMALL SCRIPT CHARACTER-18B31
+18B32 KHITAN SMALL SCRIPT CHARACTER-18B32
+18B33 KHITAN SMALL SCRIPT CHARACTER-18B33
+18B34 KHITAN SMALL SCRIPT CHARACTER-18B34
+18B35 KHITAN SMALL SCRIPT CHARACTER-18B35
+@ Radical-02
+18B36 KHITAN SMALL SCRIPT CHARACTER-18B36
+18B37 KHITAN SMALL SCRIPT CHARACTER-18B37
+18B38 KHITAN SMALL SCRIPT CHARACTER-18B38
+18B39 KHITAN SMALL SCRIPT CHARACTER-18B39
+18B3A KHITAN SMALL SCRIPT CHARACTER-18B3A
+18B3B KHITAN SMALL SCRIPT CHARACTER-18B3B
+18B3C KHITAN SMALL SCRIPT CHARACTER-18B3C
+18B3D KHITAN SMALL SCRIPT CHARACTER-18B3D
+18B3E KHITAN SMALL SCRIPT CHARACTER-18B3E
+18B3F KHITAN SMALL SCRIPT CHARACTER-18B3F
+18B40 KHITAN SMALL SCRIPT CHARACTER-18B40
+18B41 KHITAN SMALL SCRIPT CHARACTER-18B41
+18B42 KHITAN SMALL SCRIPT CHARACTER-18B42
+18B43 KHITAN SMALL SCRIPT CHARACTER-18B43
+18B44 KHITAN SMALL SCRIPT CHARACTER-18B44
+18B45 KHITAN SMALL SCRIPT CHARACTER-18B45
+18B46 KHITAN SMALL SCRIPT CHARACTER-18B46
+18B47 KHITAN SMALL SCRIPT CHARACTER-18B47
+18B48 KHITAN SMALL SCRIPT CHARACTER-18B48
+18B49 KHITAN SMALL SCRIPT CHARACTER-18B49
+18B4A KHITAN SMALL SCRIPT CHARACTER-18B4A
+18B4B KHITAN SMALL SCRIPT CHARACTER-18B4B
+18B4C KHITAN SMALL SCRIPT CHARACTER-18B4C
+18B4D KHITAN SMALL SCRIPT CHARACTER-18B4D
+18B4E KHITAN SMALL SCRIPT CHARACTER-18B4E
+18B4F KHITAN SMALL SCRIPT CHARACTER-18B4F
+18B50 KHITAN SMALL SCRIPT CHARACTER-18B50
+18B51 KHITAN SMALL SCRIPT CHARACTER-18B51
+18B52 KHITAN SMALL SCRIPT CHARACTER-18B52
+18B53 KHITAN SMALL SCRIPT CHARACTER-18B53
+18B54 KHITAN SMALL SCRIPT CHARACTER-18B54
+18B55 KHITAN SMALL SCRIPT CHARACTER-18B55
+18B56 KHITAN SMALL SCRIPT CHARACTER-18B56
+18B57 KHITAN SMALL SCRIPT CHARACTER-18B57
+18B58 KHITAN SMALL SCRIPT CHARACTER-18B58
+18B59 KHITAN SMALL SCRIPT CHARACTER-18B59
+18B5A KHITAN SMALL SCRIPT CHARACTER-18B5A
+18B5B KHITAN SMALL SCRIPT CHARACTER-18B5B
+18B5C KHITAN SMALL SCRIPT CHARACTER-18B5C
+18B5D KHITAN SMALL SCRIPT CHARACTER-18B5D
+18B5E KHITAN SMALL SCRIPT CHARACTER-18B5E
+18B5F KHITAN SMALL SCRIPT CHARACTER-18B5F
+18B60 KHITAN SMALL SCRIPT CHARACTER-18B60
+18B61 KHITAN SMALL SCRIPT CHARACTER-18B61
+18B62 KHITAN SMALL SCRIPT CHARACTER-18B62
+18B63 KHITAN SMALL SCRIPT CHARACTER-18B63
+18B64 KHITAN SMALL SCRIPT CHARACTER-18B64
+18B65 KHITAN SMALL SCRIPT CHARACTER-18B65
+18B66 KHITAN SMALL SCRIPT CHARACTER-18B66
+18B67 KHITAN SMALL SCRIPT CHARACTER-18B67
+18B68 KHITAN SMALL SCRIPT CHARACTER-18B68
+18B69 KHITAN SMALL SCRIPT CHARACTER-18B69
+@ Radical-03
+18B6A KHITAN SMALL SCRIPT CHARACTER-18B6A
+18B6B KHITAN SMALL SCRIPT CHARACTER-18B6B
+18B6C KHITAN SMALL SCRIPT CHARACTER-18B6C
+18B6D KHITAN SMALL SCRIPT CHARACTER-18B6D
+18B6E KHITAN SMALL SCRIPT CHARACTER-18B6E
+18B6F KHITAN SMALL SCRIPT CHARACTER-18B6F
+18B70 KHITAN SMALL SCRIPT CHARACTER-18B70
+18B71 KHITAN SMALL SCRIPT CHARACTER-18B71
+18B72 KHITAN SMALL SCRIPT CHARACTER-18B72
+18B73 KHITAN SMALL SCRIPT CHARACTER-18B73
+18B74 KHITAN SMALL SCRIPT CHARACTER-18B74
+18B75 KHITAN SMALL SCRIPT CHARACTER-18B75
+18B76 KHITAN SMALL SCRIPT CHARACTER-18B76
+18B77 KHITAN SMALL SCRIPT CHARACTER-18B77
+18B78 KHITAN SMALL SCRIPT CHARACTER-18B78
+18B79 KHITAN SMALL SCRIPT CHARACTER-18B79
+18B7A KHITAN SMALL SCRIPT CHARACTER-18B7A
+18B7B KHITAN SMALL SCRIPT CHARACTER-18B7B
+18B7C KHITAN SMALL SCRIPT CHARACTER-18B7C
+18B7D KHITAN SMALL SCRIPT CHARACTER-18B7D
+18B7E KHITAN SMALL SCRIPT CHARACTER-18B7E
+18B7F KHITAN SMALL SCRIPT CHARACTER-18B7F
+18B80 KHITAN SMALL SCRIPT CHARACTER-18B80
+18B81 KHITAN SMALL SCRIPT CHARACTER-18B81
+18B82 KHITAN SMALL SCRIPT CHARACTER-18B82
+18B83 KHITAN SMALL SCRIPT CHARACTER-18B83
+18B84 KHITAN SMALL SCRIPT CHARACTER-18B84
+18B85 KHITAN SMALL SCRIPT CHARACTER-18B85
+18B86 KHITAN SMALL SCRIPT CHARACTER-18B86
+18B87 KHITAN SMALL SCRIPT CHARACTER-18B87
+18B88 KHITAN SMALL SCRIPT CHARACTER-18B88
+18B89 KHITAN SMALL SCRIPT CHARACTER-18B89
+18B8A KHITAN SMALL SCRIPT CHARACTER-18B8A
+18B8B KHITAN SMALL SCRIPT CHARACTER-18B8B
+18B8C KHITAN SMALL SCRIPT CHARACTER-18B8C
+18B8D KHITAN SMALL SCRIPT CHARACTER-18B8D
+18B8E KHITAN SMALL SCRIPT CHARACTER-18B8E
+18B8F KHITAN SMALL SCRIPT CHARACTER-18B8F
+18B90 KHITAN SMALL SCRIPT CHARACTER-18B90
+18B91 KHITAN SMALL SCRIPT CHARACTER-18B91
+18B92 KHITAN SMALL SCRIPT CHARACTER-18B92
+18B93 KHITAN SMALL SCRIPT CHARACTER-18B93
+@ Radical-04
+18B94 KHITAN SMALL SCRIPT CHARACTER-18B94
+18B95 KHITAN SMALL SCRIPT CHARACTER-18B95
+18B96 KHITAN SMALL SCRIPT CHARACTER-18B96
+18B97 KHITAN SMALL SCRIPT CHARACTER-18B97
+18B98 KHITAN SMALL SCRIPT CHARACTER-18B98
+18B99 KHITAN SMALL SCRIPT CHARACTER-18B99
+18B9A KHITAN SMALL SCRIPT CHARACTER-18B9A
+18B9B KHITAN SMALL SCRIPT CHARACTER-18B9B
+18B9C KHITAN SMALL SCRIPT CHARACTER-18B9C
+18B9D KHITAN SMALL SCRIPT CHARACTER-18B9D
+18B9E KHITAN SMALL SCRIPT CHARACTER-18B9E
+18B9F KHITAN SMALL SCRIPT CHARACTER-18B9F
+18BA0 KHITAN SMALL SCRIPT CHARACTER-18BA0
+18BA1 KHITAN SMALL SCRIPT CHARACTER-18BA1
+18BA2 KHITAN SMALL SCRIPT CHARACTER-18BA2
+18BA3 KHITAN SMALL SCRIPT CHARACTER-18BA3
+18BA4 KHITAN SMALL SCRIPT CHARACTER-18BA4
+18BA5 KHITAN SMALL SCRIPT CHARACTER-18BA5
+18BA6 KHITAN SMALL SCRIPT CHARACTER-18BA6
+18BA7 KHITAN SMALL SCRIPT CHARACTER-18BA7
+18BA8 KHITAN SMALL SCRIPT CHARACTER-18BA8
+18BA9 KHITAN SMALL SCRIPT CHARACTER-18BA9
+18BAA KHITAN SMALL SCRIPT CHARACTER-18BAA
+18BAB KHITAN SMALL SCRIPT CHARACTER-18BAB
+18BAC KHITAN SMALL SCRIPT CHARACTER-18BAC
+@ Radical-05
+18BAD KHITAN SMALL SCRIPT CHARACTER-18BAD
+18BAE KHITAN SMALL SCRIPT CHARACTER-18BAE
+18BAF KHITAN SMALL SCRIPT CHARACTER-18BAF
+18BB0 KHITAN SMALL SCRIPT CHARACTER-18BB0
+18BB1 KHITAN SMALL SCRIPT CHARACTER-18BB1
+18BB2 KHITAN SMALL SCRIPT CHARACTER-18BB2
+18BB3 KHITAN SMALL SCRIPT CHARACTER-18BB3
+18BB4 KHITAN SMALL SCRIPT CHARACTER-18BB4
+18BB5 KHITAN SMALL SCRIPT CHARACTER-18BB5
+18BB6 KHITAN SMALL SCRIPT CHARACTER-18BB6
+18BB7 KHITAN SMALL SCRIPT CHARACTER-18BB7
+18BB8 KHITAN SMALL SCRIPT CHARACTER-18BB8
+18BB9 KHITAN SMALL SCRIPT CHARACTER-18BB9
+18BBA KHITAN SMALL SCRIPT CHARACTER-18BBA
+18BBB KHITAN SMALL SCRIPT CHARACTER-18BBB
+18BBC KHITAN SMALL SCRIPT CHARACTER-18BBC
+18BBD KHITAN SMALL SCRIPT CHARACTER-18BBD
+18BBE KHITAN SMALL SCRIPT CHARACTER-18BBE
+18BBF KHITAN SMALL SCRIPT CHARACTER-18BBF
+18BC0 KHITAN SMALL SCRIPT CHARACTER-18BC0
+18BC1 KHITAN SMALL SCRIPT CHARACTER-18BC1
+18BC2 KHITAN SMALL SCRIPT CHARACTER-18BC2
+18BC3 KHITAN SMALL SCRIPT CHARACTER-18BC3
+18BC4 KHITAN SMALL SCRIPT CHARACTER-18BC4
+18BC5 KHITAN SMALL SCRIPT CHARACTER-18BC5
+18BC6 KHITAN SMALL SCRIPT CHARACTER-18BC6
+18BC7 KHITAN SMALL SCRIPT CHARACTER-18BC7
+18BC8 KHITAN SMALL SCRIPT CHARACTER-18BC8
+18BC9 KHITAN SMALL SCRIPT CHARACTER-18BC9
+18BCA KHITAN SMALL SCRIPT CHARACTER-18BCA
+18BCB KHITAN SMALL SCRIPT CHARACTER-18BCB
+18BCC KHITAN SMALL SCRIPT CHARACTER-18BCC
+18BCD KHITAN SMALL SCRIPT CHARACTER-18BCD
+18BCE KHITAN SMALL SCRIPT CHARACTER-18BCE
+18BCF KHITAN SMALL SCRIPT CHARACTER-18BCF
+18BD0 KHITAN SMALL SCRIPT CHARACTER-18BD0
+18BD1 KHITAN SMALL SCRIPT CHARACTER-18BD1
+@ Radical-06
+18BD2 KHITAN SMALL SCRIPT CHARACTER-18BD2
+18BD3 KHITAN SMALL SCRIPT CHARACTER-18BD3
+18BD4 KHITAN SMALL SCRIPT CHARACTER-18BD4
+18BD5 KHITAN SMALL SCRIPT CHARACTER-18BD5
+18BD6 KHITAN SMALL SCRIPT CHARACTER-18BD6
+18BD7 KHITAN SMALL SCRIPT CHARACTER-18BD7
+18BD8 KHITAN SMALL SCRIPT CHARACTER-18BD8
+18BD9 KHITAN SMALL SCRIPT CHARACTER-18BD9
+18BDA KHITAN SMALL SCRIPT CHARACTER-18BDA
+18BDB KHITAN SMALL SCRIPT CHARACTER-18BDB
+18BDC KHITAN SMALL SCRIPT CHARACTER-18BDC
+18BDD KHITAN SMALL SCRIPT CHARACTER-18BDD
+18BDE KHITAN SMALL SCRIPT CHARACTER-18BDE
+18BDF KHITAN SMALL SCRIPT CHARACTER-18BDF
+18BE0 KHITAN SMALL SCRIPT CHARACTER-18BE0
+18BE1 KHITAN SMALL SCRIPT CHARACTER-18BE1
+18BE2 KHITAN SMALL SCRIPT CHARACTER-18BE2
+18BE3 KHITAN SMALL SCRIPT CHARACTER-18BE3
+18BE4 KHITAN SMALL SCRIPT CHARACTER-18BE4
+18BE5 KHITAN SMALL SCRIPT CHARACTER-18BE5
+18BE6 KHITAN SMALL SCRIPT CHARACTER-18BE6
+18BE7 KHITAN SMALL SCRIPT CHARACTER-18BE7
+18BE8 KHITAN SMALL SCRIPT CHARACTER-18BE8
+18BE9 KHITAN SMALL SCRIPT CHARACTER-18BE9
+18BEA KHITAN SMALL SCRIPT CHARACTER-18BEA
+18BEB KHITAN SMALL SCRIPT CHARACTER-18BEB
+18BEC KHITAN SMALL SCRIPT CHARACTER-18BEC
+18BED KHITAN SMALL SCRIPT CHARACTER-18BED
+18BEE KHITAN SMALL SCRIPT CHARACTER-18BEE
+18BEF KHITAN SMALL SCRIPT CHARACTER-18BEF
+18BF0 KHITAN SMALL SCRIPT CHARACTER-18BF0
+18BF1 KHITAN SMALL SCRIPT CHARACTER-18BF1
+18BF2 KHITAN SMALL SCRIPT CHARACTER-18BF2
+18BF3 KHITAN SMALL SCRIPT CHARACTER-18BF3
+18BF4 KHITAN SMALL SCRIPT CHARACTER-18BF4
+18BF5 KHITAN SMALL SCRIPT CHARACTER-18BF5
+18BF6 KHITAN SMALL SCRIPT CHARACTER-18BF6
+18BF7 KHITAN SMALL SCRIPT CHARACTER-18BF7
+18BF8 KHITAN SMALL SCRIPT CHARACTER-18BF8
+18BF9 KHITAN SMALL SCRIPT CHARACTER-18BF9
+18BFA KHITAN SMALL SCRIPT CHARACTER-18BFA
+18BFB KHITAN SMALL SCRIPT CHARACTER-18BFB
+18BFC KHITAN SMALL SCRIPT CHARACTER-18BFC
+18BFD KHITAN SMALL SCRIPT CHARACTER-18BFD
+18BFE KHITAN SMALL SCRIPT CHARACTER-18BFE
+18BFF KHITAN SMALL SCRIPT CHARACTER-18BFF
+18C00 KHITAN SMALL SCRIPT CHARACTER-18C00
+@ Radical-07
+18C01 KHITAN SMALL SCRIPT CHARACTER-18C01
+18C02 KHITAN SMALL SCRIPT CHARACTER-18C02
+18C03 KHITAN SMALL SCRIPT CHARACTER-18C03
+18C04 KHITAN SMALL SCRIPT CHARACTER-18C04
+18C05 KHITAN SMALL SCRIPT CHARACTER-18C05
+18C06 KHITAN SMALL SCRIPT CHARACTER-18C06
+18C07 KHITAN SMALL SCRIPT CHARACTER-18C07
+18C08 KHITAN SMALL SCRIPT CHARACTER-18C08
+18C09 KHITAN SMALL SCRIPT CHARACTER-18C09
+18C0A KHITAN SMALL SCRIPT CHARACTER-18C0A
+18C0B KHITAN SMALL SCRIPT CHARACTER-18C0B
+18C0C KHITAN SMALL SCRIPT CHARACTER-18C0C
+18C0D KHITAN SMALL SCRIPT CHARACTER-18C0D
+18C0E KHITAN SMALL SCRIPT CHARACTER-18C0E
+18C0F KHITAN SMALL SCRIPT CHARACTER-18C0F
+18C10 KHITAN SMALL SCRIPT CHARACTER-18C10
+18C11 KHITAN SMALL SCRIPT CHARACTER-18C11
+18C12 KHITAN SMALL SCRIPT CHARACTER-18C12
+@ Radical-08
+18C13 KHITAN SMALL SCRIPT CHARACTER-18C13
+18C14 KHITAN SMALL SCRIPT CHARACTER-18C14
+18C15 KHITAN SMALL SCRIPT CHARACTER-18C15
+18C16 KHITAN SMALL SCRIPT CHARACTER-18C16
+18C17 KHITAN SMALL SCRIPT CHARACTER-18C17
+18C18 KHITAN SMALL SCRIPT CHARACTER-18C18
+18C19 KHITAN SMALL SCRIPT CHARACTER-18C19
+18C1A KHITAN SMALL SCRIPT CHARACTER-18C1A
+18C1B KHITAN SMALL SCRIPT CHARACTER-18C1B
+18C1C KHITAN SMALL SCRIPT CHARACTER-18C1C
+18C1D KHITAN SMALL SCRIPT CHARACTER-18C1D
+18C1E KHITAN SMALL SCRIPT CHARACTER-18C1E
+18C1F KHITAN SMALL SCRIPT CHARACTER-18C1F
+18C20 KHITAN SMALL SCRIPT CHARACTER-18C20
+18C21 KHITAN SMALL SCRIPT CHARACTER-18C21
+18C22 KHITAN SMALL SCRIPT CHARACTER-18C22
+18C23 KHITAN SMALL SCRIPT CHARACTER-18C23
+18C24 KHITAN SMALL SCRIPT CHARACTER-18C24
+18C25 KHITAN SMALL SCRIPT CHARACTER-18C25
+18C26 KHITAN SMALL SCRIPT CHARACTER-18C26
+18C27 KHITAN SMALL SCRIPT CHARACTER-18C27
+@ Radical-09
+18C28 KHITAN SMALL SCRIPT CHARACTER-18C28
+18C29 KHITAN SMALL SCRIPT CHARACTER-18C29
+18C2A KHITAN SMALL SCRIPT CHARACTER-18C2A
+18C2B KHITAN SMALL SCRIPT CHARACTER-18C2B
+18C2C KHITAN SMALL SCRIPT CHARACTER-18C2C
+18C2D KHITAN SMALL SCRIPT CHARACTER-18C2D
+18C2E KHITAN SMALL SCRIPT CHARACTER-18C2E
+@ Radical-10
+18C2F KHITAN SMALL SCRIPT CHARACTER-18C2F
+18C30 KHITAN SMALL SCRIPT CHARACTER-18C30
+18C31 KHITAN SMALL SCRIPT CHARACTER-18C31
+18C32 KHITAN SMALL SCRIPT CHARACTER-18C32
+18C33 KHITAN SMALL SCRIPT CHARACTER-18C33
+18C34 KHITAN SMALL SCRIPT CHARACTER-18C34
+18C35 KHITAN SMALL SCRIPT CHARACTER-18C35
+18C36 KHITAN SMALL SCRIPT CHARACTER-18C36
+@ Radical-11
+18C37 KHITAN SMALL SCRIPT CHARACTER-18C37
+18C38 KHITAN SMALL SCRIPT CHARACTER-18C38
+18C39 KHITAN SMALL SCRIPT CHARACTER-18C39
+18C3A KHITAN SMALL SCRIPT CHARACTER-18C3A
+18C3B KHITAN SMALL SCRIPT CHARACTER-18C3B
+18C3C KHITAN SMALL SCRIPT CHARACTER-18C3C
+18C3D KHITAN SMALL SCRIPT CHARACTER-18C3D
+18C3E KHITAN SMALL SCRIPT CHARACTER-18C3E
+18C3F KHITAN SMALL SCRIPT CHARACTER-18C3F
+18C40 KHITAN SMALL SCRIPT CHARACTER-18C40
+18C41 KHITAN SMALL SCRIPT CHARACTER-18C41
+18C42 KHITAN SMALL SCRIPT CHARACTER-18C42
+18C43 KHITAN SMALL SCRIPT CHARACTER-18C43
+18C44 KHITAN SMALL SCRIPT CHARACTER-18C44
+18C45 KHITAN SMALL SCRIPT CHARACTER-18C45
+18C46 KHITAN SMALL SCRIPT CHARACTER-18C46
+18C47 KHITAN SMALL SCRIPT CHARACTER-18C47
+18C48 KHITAN SMALL SCRIPT CHARACTER-18C48
+18C49 KHITAN SMALL SCRIPT CHARACTER-18C49
+18C4A KHITAN SMALL SCRIPT CHARACTER-18C4A
+18C4B KHITAN SMALL SCRIPT CHARACTER-18C4B
+@ Radical-12
+18C4C KHITAN SMALL SCRIPT CHARACTER-18C4C
+18C4D KHITAN SMALL SCRIPT CHARACTER-18C4D
+18C4E KHITAN SMALL SCRIPT CHARACTER-18C4E
+18C4F KHITAN SMALL SCRIPT CHARACTER-18C4F
+18C50 KHITAN SMALL SCRIPT CHARACTER-18C50
+18C51 KHITAN SMALL SCRIPT CHARACTER-18C51
+@ Radical-13
+18C52 KHITAN SMALL SCRIPT CHARACTER-18C52
+18C53 KHITAN SMALL SCRIPT CHARACTER-18C53
+18C54 KHITAN SMALL SCRIPT CHARACTER-18C54
+18C55 KHITAN SMALL SCRIPT CHARACTER-18C55
+18C56 KHITAN SMALL SCRIPT CHARACTER-18C56
+18C57 KHITAN SMALL SCRIPT CHARACTER-18C57
+18C58 KHITAN SMALL SCRIPT CHARACTER-18C58
+18C59 KHITAN SMALL SCRIPT CHARACTER-18C59
+18C5A KHITAN SMALL SCRIPT CHARACTER-18C5A
+18C5B KHITAN SMALL SCRIPT CHARACTER-18C5B
+18C5C KHITAN SMALL SCRIPT CHARACTER-18C5C
+18C5D KHITAN SMALL SCRIPT CHARACTER-18C5D
+18C5E KHITAN SMALL SCRIPT CHARACTER-18C5E
+18C5F KHITAN SMALL SCRIPT CHARACTER-18C5F
+18C60 KHITAN SMALL SCRIPT CHARACTER-18C60
+18C61 KHITAN SMALL SCRIPT CHARACTER-18C61
+18C62 KHITAN SMALL SCRIPT CHARACTER-18C62
+18C63 KHITAN SMALL SCRIPT CHARACTER-18C63
+@ Radical-14
+18C64 KHITAN SMALL SCRIPT CHARACTER-18C64
+18C65 KHITAN SMALL SCRIPT CHARACTER-18C65
+18C66 KHITAN SMALL SCRIPT CHARACTER-18C66
+18C67 KHITAN SMALL SCRIPT CHARACTER-18C67
+18C68 KHITAN SMALL SCRIPT CHARACTER-18C68
+18C69 KHITAN SMALL SCRIPT CHARACTER-18C69
+18C6A KHITAN SMALL SCRIPT CHARACTER-18C6A
+18C6B KHITAN SMALL SCRIPT CHARACTER-18C6B
+18C6C KHITAN SMALL SCRIPT CHARACTER-18C6C
+18C6D KHITAN SMALL SCRIPT CHARACTER-18C6D
+18C6E KHITAN SMALL SCRIPT CHARACTER-18C6E
+18C6F KHITAN SMALL SCRIPT CHARACTER-18C6F
+18C70 KHITAN SMALL SCRIPT CHARACTER-18C70
+18C71 KHITAN SMALL SCRIPT CHARACTER-18C71
+18C72 KHITAN SMALL SCRIPT CHARACTER-18C72
+18C73 KHITAN SMALL SCRIPT CHARACTER-18C73
+18C74 KHITAN SMALL SCRIPT CHARACTER-18C74
+18C75 KHITAN SMALL SCRIPT CHARACTER-18C75
+18C76 KHITAN SMALL SCRIPT CHARACTER-18C76
+18C77 KHITAN SMALL SCRIPT CHARACTER-18C77
+18C78 KHITAN SMALL SCRIPT CHARACTER-18C78
+18C79 KHITAN SMALL SCRIPT CHARACTER-18C79
+18C7A KHITAN SMALL SCRIPT CHARACTER-18C7A
+18C7B KHITAN SMALL SCRIPT CHARACTER-18C7B
+18C7C KHITAN SMALL SCRIPT CHARACTER-18C7C
+18C7D KHITAN SMALL SCRIPT CHARACTER-18C7D
+18C7E KHITAN SMALL SCRIPT CHARACTER-18C7E
+@ Radical-15
+18C7F KHITAN SMALL SCRIPT CHARACTER-18C7F
+18C80 KHITAN SMALL SCRIPT CHARACTER-18C80
+18C81 KHITAN SMALL SCRIPT CHARACTER-18C81
+18C82 KHITAN SMALL SCRIPT CHARACTER-18C82
+18C83 KHITAN SMALL SCRIPT CHARACTER-18C83
+18C84 KHITAN SMALL SCRIPT CHARACTER-18C84
+18C85 KHITAN SMALL SCRIPT CHARACTER-18C85
+18C86 KHITAN SMALL SCRIPT CHARACTER-18C86
+18C87 KHITAN SMALL SCRIPT CHARACTER-18C87
+18C88 KHITAN SMALL SCRIPT CHARACTER-18C88
+18C89 KHITAN SMALL SCRIPT CHARACTER-18C89
+18C8A KHITAN SMALL SCRIPT CHARACTER-18C8A
+18C8B KHITAN SMALL SCRIPT CHARACTER-18C8B
+@ Radical-16
+18C8C KHITAN SMALL SCRIPT CHARACTER-18C8C
+18C8D KHITAN SMALL SCRIPT CHARACTER-18C8D
+18C8E KHITAN SMALL SCRIPT CHARACTER-18C8E
+18C8F KHITAN SMALL SCRIPT CHARACTER-18C8F
+18C90 KHITAN SMALL SCRIPT CHARACTER-18C90
+18C91 KHITAN SMALL SCRIPT CHARACTER-18C91
+18C92 KHITAN SMALL SCRIPT CHARACTER-18C92
+18C93 KHITAN SMALL SCRIPT CHARACTER-18C93
+18C94 KHITAN SMALL SCRIPT CHARACTER-18C94
+@ Radical-17
+18C95 KHITAN SMALL SCRIPT CHARACTER-18C95
+18C96 KHITAN SMALL SCRIPT CHARACTER-18C96
+18C97 KHITAN SMALL SCRIPT CHARACTER-18C97
+18C98 KHITAN SMALL SCRIPT CHARACTER-18C98
+18C99 KHITAN SMALL SCRIPT CHARACTER-18C99
+18C9A KHITAN SMALL SCRIPT CHARACTER-18C9A
+18C9B KHITAN SMALL SCRIPT CHARACTER-18C9B
+18C9C KHITAN SMALL SCRIPT CHARACTER-18C9C
+18C9D KHITAN SMALL SCRIPT CHARACTER-18C9D
+18C9E KHITAN SMALL SCRIPT CHARACTER-18C9E
+18C9F KHITAN SMALL SCRIPT CHARACTER-18C9F
+18CA0 KHITAN SMALL SCRIPT CHARACTER-18CA0
+18CA1 KHITAN SMALL SCRIPT CHARACTER-18CA1
+18CA2 KHITAN SMALL SCRIPT CHARACTER-18CA2
+18CA3 KHITAN SMALL SCRIPT CHARACTER-18CA3
+18CA4 KHITAN SMALL SCRIPT CHARACTER-18CA4
+18CA5 KHITAN SMALL SCRIPT CHARACTER-18CA5
+18CA6 KHITAN SMALL SCRIPT CHARACTER-18CA6
+18CA7 KHITAN SMALL SCRIPT CHARACTER-18CA7
+18CA8 KHITAN SMALL SCRIPT CHARACTER-18CA8
+18CA9 KHITAN SMALL SCRIPT CHARACTER-18CA9
+18CAA KHITAN SMALL SCRIPT CHARACTER-18CAA
+18CAB KHITAN SMALL SCRIPT CHARACTER-18CAB
+18CAC KHITAN SMALL SCRIPT CHARACTER-18CAC
+18CAD KHITAN SMALL SCRIPT CHARACTER-18CAD
+18CAE KHITAN SMALL SCRIPT CHARACTER-18CAE
+18CAF KHITAN SMALL SCRIPT CHARACTER-18CAF
+18CB0 KHITAN SMALL SCRIPT CHARACTER-18CB0
+18CB1 KHITAN SMALL SCRIPT CHARACTER-18CB1
+18CB2 KHITAN SMALL SCRIPT CHARACTER-18CB2
+18CB3 KHITAN SMALL SCRIPT CHARACTER-18CB3
+18CB4 KHITAN SMALL SCRIPT CHARACTER-18CB4
+18CB5 KHITAN SMALL SCRIPT CHARACTER-18CB5
+18CB6 KHITAN SMALL SCRIPT CHARACTER-18CB6
+18CB7 KHITAN SMALL SCRIPT CHARACTER-18CB7
+18CB8 KHITAN SMALL SCRIPT CHARACTER-18CB8
+18CB9 KHITAN SMALL SCRIPT CHARACTER-18CB9
+18CBA KHITAN SMALL SCRIPT CHARACTER-18CBA
+18CBB KHITAN SMALL SCRIPT CHARACTER-18CBB
+18CBC KHITAN SMALL SCRIPT CHARACTER-18CBC
+18CBD KHITAN SMALL SCRIPT CHARACTER-18CBD
+18CBE KHITAN SMALL SCRIPT CHARACTER-18CBE
+18CBF KHITAN SMALL SCRIPT CHARACTER-18CBF
+@ Radical-18
+18CC0 KHITAN SMALL SCRIPT CHARACTER-18CC0
+18CC1 KHITAN SMALL SCRIPT CHARACTER-18CC1
+18CC2 KHITAN SMALL SCRIPT CHARACTER-18CC2
+18CC3 KHITAN SMALL SCRIPT CHARACTER-18CC3
+18CC4 KHITAN SMALL SCRIPT CHARACTER-18CC4
+18CC5 KHITAN SMALL SCRIPT CHARACTER-18CC5
+18CC6 KHITAN SMALL SCRIPT CHARACTER-18CC6
+18CC7 KHITAN SMALL SCRIPT CHARACTER-18CC7
+18CC8 KHITAN SMALL SCRIPT CHARACTER-18CC8
+18CC9 KHITAN SMALL SCRIPT CHARACTER-18CC9
+18CCA KHITAN SMALL SCRIPT CHARACTER-18CCA
+18CCB KHITAN SMALL SCRIPT CHARACTER-18CCB
+@ Radical-19
+18CCC KHITAN SMALL SCRIPT CHARACTER-18CCC
+18CCD KHITAN SMALL SCRIPT CHARACTER-18CCD
+18CCE KHITAN SMALL SCRIPT CHARACTER-18CCE
+18CCF KHITAN SMALL SCRIPT CHARACTER-18CCF
+18CD0 KHITAN SMALL SCRIPT CHARACTER-18CD0
+18CD1 KHITAN SMALL SCRIPT CHARACTER-18CD1
+18CD2 KHITAN SMALL SCRIPT CHARACTER-18CD2
+@ Radical-20
+18CD3 KHITAN SMALL SCRIPT CHARACTER-18CD3
+18CD4 KHITAN SMALL SCRIPT CHARACTER-18CD4
+18CD5 KHITAN SMALL SCRIPT CHARACTER-18CD5
+@@ 18D00 Tangut Supplement 18D08
@@ 1B000 Kana Supplement 1B0FF
@ Historic Katakana
1B000 KATAKANA LETTER ARCHAIC E
@@ -41550,7 +41997,7 @@ FFFF <not a character>
* Chinook ng
* Romanian sign nici
1BC23 DUPLOYAN LETTER J WITH DOT
- * Chinook ch
+ * Chinook ch
* Romanian ce, ci
* Sloan zh
* Chinook, Perrault j
@@ -47061,6 +47508,14 @@ FFFF <not a character>
@+ These digits complement the sans-serif digit sets in the Dingbat block ranges 2780-2789 and 278A-2793.
1F10B DINGBAT CIRCLED SANS-SERIF DIGIT ZERO
1F10C DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+@ Creative Commons symbols
+@+ Part of a Creative Commons symbol set also including 229C, 1F16D, 1F16E, and 1F16F.
+1F10D CIRCLED ZERO WITH SLASH
+ = no rights reserved
+1F10E CIRCLED ANTICLOCKWISE ARROW
+ = share alike
+1F10F CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+ = non commercial
@ Parenthesized Latin letters
@+ This set provides uppercase versions of the set starting at 249C. Parenthesized Latin letters do not have case mappings.
1F110 PARENTHESIZED LATIN CAPITAL LETTER A
@@ -47278,6 +47733,14 @@ FFFF <not a character>
* used primarily in Spanish and Portuguese speaking communities to indicate a registered trademark
x (registered sign - 00AE)
# <super> 004D 0052
+@ Creative Commons symbols
+1F16D CIRCLED CC
+ = Creative Commons license
+ x (circled equals - 229C)
+1F16E CIRCLED C WITH OVERLAID BACKSLASH
+ = public domain
+1F16F CIRCLED HUMAN FIGURE
+ = attribution, credit
@ White on black squared Latin letters
@+ The square edges may be slightly rounded.
1F170 NEGATIVE SQUARED LATIN CAPITAL LETTER A
@@ -47382,6 +47845,11 @@ FFFF <not a character>
= ultra-high definition
1F1AC SQUARED VOD
= video on demand
+@ Miscellaneous symbol
+1F1AD MASK WORK SYMBOL
+ * indicates intellectual property protection for integrated circuit layouts
+ x (copyright sign - 00A9)
+ x (circled latin capital letter m - 24C2)
@ Regional indicator symbols
@+ These characters can be used in pairs to represent regional codes. In some emoji implementations, certain pairs may be recognized and displayed by alternate means; for instance, an implementation might recognize F + R and display this combination with a symbol representing the flag of France.
1F1E6 REGIONAL INDICATOR SYMBOL LETTER A
@@ -47973,6 +48441,7 @@ FFFF <not a character>
1F3C2 SNOWBOARDER
1F3C3 RUNNER
= running, marathon, track and fields
+ x (left half running man - 1FBB2)
1F3C4 SURFER
= surfing
1F3C5 SPORTS MEDAL
@@ -48898,6 +49367,7 @@ FFFF <not a character>
1F5C0 FOLDER
= directory
x (file folder - 1F4C1)
+ x (left half folder - 1FBB9)
1F5C1 OPEN FOLDER
x (open file folder - 1F4C2)
1F5C2 CARD INDEX DIVIDERS
@@ -49291,9 +49761,11 @@ FFFF <not a character>
1F6B9 MENS SYMBOL
= man symbol
= men's restroom
+ x (stick figure - 1FBC5)
1F6BA WOMENS SYMBOL
= woman symbol
= women's restroom
+ x (stick figure with dress - 1FBC9)
1F6BB RESTROOM
= man and woman symbol with divider
= unisex restroom
@@ -49348,6 +49820,8 @@ FFFF <not a character>
1F6D3 STUPA
1F6D4 PAGODA
1F6D5 HINDU TEMPLE
+1F6D6 HUT
+1F6D7 ELEVATOR
@ Miscellaneous symbols
1F6E0 HAMMER AND WRENCH
= tools, repair facility
@@ -49398,6 +49872,8 @@ FFFF <not a character>
1F6F9 SKATEBOARD
1F6FA AUTO RICKSHAW
= tuk-tuk, remorque
+1F6FB PICKUP TRUCK
+1F6FC ROLLER SKATE
@@ 1F700 Alchemical Symbols 1F77F
@ Symbols for Aristotelian elements
1F700 ALCHEMICAL SYMBOL FOR QUINTESSENCE
@@ -49701,6 +50177,7 @@ FFFF <not a character>
1F7A7 EXTREMELY HEAVY GREEK CROSS
@ Saltires
1F7A8 THIN SALTIRE
+ x (multiplication x - 2715)
1F7A9 LIGHT SALTIRE
x (saltire - 2613)
1F7AA MEDIUM SALTIRE
@@ -49708,6 +50185,7 @@ FFFF <not a character>
1F7AC HEAVY SALTIRE
1F7AD VERY HEAVY SALTIRE
1F7AE EXTREMELY HEAVY SALTIRE
+ x (heavy multiplication x - 2716)
@ Five spoked asterisks
1F7AF LIGHT FIVE SPOKED ASTERISK
1F7B0 MEDIUM FIVE SPOKED ASTERISK
@@ -49971,6 +50449,9 @@ FFFF <not a character>
@+ The vertical alignment and thickness of this set are compatible with white arrows.
1F8AC WHITE ARROW SHAFT WIDTH ONE
1F8AD WHITE ARROW SHAFT WIDTH TWO THIRDS
+@ Arrows for legacy computing
+1F8B0 ARROW POINTING UPWARDS THEN NORTH WEST
+1F8B1 ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
@@ 1F900 Supplemental Symbols and Pictographs 1F9FF
@ Typicon symbols
1F900 CIRCLED CROSS FORMEE WITH FOUR DOTS
@@ -49986,6 +50467,8 @@ FFFF <not a character>
1F909 DOWNWARD FACING NOTCHED HOOK
1F90A DOWNWARD FACING HOOK WITH DOT
1F90B DOWNWARD FACING NOTCHED HOOK WITH DOT
+@ Hand symbol
+1F90C PINCHED FINGERS
@ Colored heart symbols
@+ For use with emoji. Constitute a set as follows: 2764, 1F499-1F49C, 1F5A4, 1F90D, 1F90E, and 1F9E1.
1F90D WHITE HEART
@@ -50145,10 +50628,13 @@ FFFF <not a character>
@ Faces
1F970 SMILING FACE WITH SMILING EYES AND THREE HEARTS
1F971 YAWNING FACE
+1F972 SMILING FACE WITH TEAR
1F973 FACE WITH PARTY HORN AND PARTY HAT
1F974 FACE WITH UNEVEN EYES AND WAVY MOUTH
1F975 OVERHEATED FACE
1F976 FREEZING FACE
+1F977 NINJA
+1F978 DISGUISED FACE
1F97A FACE WITH PLEADING EYES
@ Clothing
1F97B SARI
@@ -50201,12 +50687,19 @@ FFFF <not a character>
* microorganism, intended to cover bacteria, viruses, amoebas, etc.
1F9A1 BADGER
1F9A2 SWAN
+1F9A3 MAMMOTH
+ * indicates great size
+1F9A4 DODO
+ * indicates extinction
1F9A5 SLOTH
1F9A6 OTTER
1F9A7 ORANGUTAN
1F9A8 SKUNK
1F9A9 FLAMINGO
1F9AA OYSTER
+1F9AB BEAVER
+1F9AC BISON
+1F9AD SEAL
@ Accessibility symbols
1F9AE GUIDE DOG
1F9AF PROBING CANE
@@ -50243,6 +50736,7 @@ FFFF <not a character>
1F9C8 BUTTER
1F9C9 MATE DRINK
1F9CA ICE CUBE
+1F9CB BUBBLE TEA
@ Portrait and accessibility symbols
1F9CD STANDING PERSON
1F9CE KNEELING PERSON
@@ -50486,6 +50980,7 @@ FFFF <not a character>
1FA71 ONE-PIECE SWIMSUIT
1FA72 BRIEFS
1FA73 SHORTS
+1FA74 THONG SANDAL
@ Medical symbols
1FA78 DROP OF BLOOD
1FA79 ADHESIVE BANDAGE
@@ -50494,6 +50989,10 @@ FFFF <not a character>
1FA80 YO-YO
1FA81 KITE
1FA82 PARACHUTE
+1FA83 BOOMERANG
+1FA84 MAGIC WAND
+1FA85 PINATA
+1FA86 NESTING DOLLS
@ Miscellaneous objects
1FA90 RINGED PLANET
1FA91 CHAIR
@@ -50501,12 +51000,362 @@ FFFF <not a character>
1FA93 AXE
1FA94 DIYA LAMP
1FA95 BANJO
+1FA96 MILITARY HELMET
+1FA97 ACCORDION
+1FA98 LONG DRUM
+1FA99 COIN
+1FA9A CARPENTRY SAW
+1FA9B SCREWDRIVER
+1FA9C LADDER
+1FA9D HOOK
+1FA9E MIRROR
+1FA9F WINDOW
+1FAA0 PLUNGER
+1FAA1 SEWING NEEDLE
+1FAA2 KNOT
+1FAA3 BUCKET
+1FAA4 MOUSE TRAP
+1FAA5 TOOTHBRUSH
+1FAA6 HEADSTONE
+1FAA7 PLACARD
+1FAA8 ROCK
+@ Animals and nature
+1FAB0 FLY
+1FAB1 WORM
+1FAB2 BEETLE
+1FAB3 COCKROACH
+1FAB4 POTTED PLANT
+1FAB5 WOOD
+1FAB6 FEATHER
+@ Body parts
+1FAC0 ANATOMICAL HEART
+1FAC1 LUNGS
+@ People
+1FAC2 PEOPLE HUGGING
+@ Food and drink
+1FAD0 BLUEBERRIES
+1FAD1 BELL PEPPER
+1FAD2 OLIVE
+1FAD3 FLATBREAD
+1FAD4 TAMALE
+1FAD5 FONDUE
+1FAD6 TEAPOT
+@@ 1FB00 Symbols for Legacy Computing 1FBFF
+@ Block mosaic terminal graphic characters
+@+ The term "sextant" refers to block mosaics divided into six parts.
+1FB00 BLOCK SEXTANT-1
+1FB01 BLOCK SEXTANT-2
+1FB02 BLOCK SEXTANT-12
+ * upper one third block
+1FB03 BLOCK SEXTANT-3
+1FB04 BLOCK SEXTANT-13
+1FB05 BLOCK SEXTANT-23
+1FB06 BLOCK SEXTANT-123
+1FB07 BLOCK SEXTANT-4
+1FB08 BLOCK SEXTANT-14
+1FB09 BLOCK SEXTANT-24
+1FB0A BLOCK SEXTANT-124
+1FB0B BLOCK SEXTANT-34
+ * middle one third block
+1FB0C BLOCK SEXTANT-134
+1FB0D BLOCK SEXTANT-234
+1FB0E BLOCK SEXTANT-1234
+ * upper two thirds block
+1FB0F BLOCK SEXTANT-5
+1FB10 BLOCK SEXTANT-15
+1FB11 BLOCK SEXTANT-25
+1FB12 BLOCK SEXTANT-125
+1FB13 BLOCK SEXTANT-35
+1FB14 BLOCK SEXTANT-235
+1FB15 BLOCK SEXTANT-1235
+1FB16 BLOCK SEXTANT-45
+1FB17 BLOCK SEXTANT-145
+1FB18 BLOCK SEXTANT-245
+1FB19 BLOCK SEXTANT-1245
+1FB1A BLOCK SEXTANT-345
+1FB1B BLOCK SEXTANT-1345
+1FB1C BLOCK SEXTANT-2345
+1FB1D BLOCK SEXTANT-12345
+1FB1E BLOCK SEXTANT-6
+1FB1F BLOCK SEXTANT-16
+1FB20 BLOCK SEXTANT-26
+1FB21 BLOCK SEXTANT-126
+1FB22 BLOCK SEXTANT-36
+1FB23 BLOCK SEXTANT-136
+1FB24 BLOCK SEXTANT-236
+1FB25 BLOCK SEXTANT-1236
+1FB26 BLOCK SEXTANT-46
+1FB27 BLOCK SEXTANT-146
+1FB28 BLOCK SEXTANT-1246
+1FB29 BLOCK SEXTANT-346
+1FB2A BLOCK SEXTANT-1346
+1FB2B BLOCK SEXTANT-2346
+1FB2C BLOCK SEXTANT-12346
+1FB2D BLOCK SEXTANT-56
+ * lower one third block
+1FB2E BLOCK SEXTANT-156
+1FB2F BLOCK SEXTANT-256
+1FB30 BLOCK SEXTANT-1256
+ * upper and lower one third block
+1FB31 BLOCK SEXTANT-356
+1FB32 BLOCK SEXTANT-1356
+1FB33 BLOCK SEXTANT-2356
+1FB34 BLOCK SEXTANT-12356
+1FB35 BLOCK SEXTANT-456
+1FB36 BLOCK SEXTANT-1456
+1FB37 BLOCK SEXTANT-2456
+1FB38 BLOCK SEXTANT-12456
+1FB39 BLOCK SEXTANT-3456
+ * lower two thirds block
+1FB3A BLOCK SEXTANT-13456
+1FB3B BLOCK SEXTANT-23456
+@ Smooth mosaic terminal graphic characters
+1FB3C LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE
+1FB3D LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT
+1FB3E LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE
+1FB3F LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT
+1FB40 LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE
+1FB41 LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE
+1FB42 LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT
+1FB43 LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE
+1FB44 LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT
+1FB45 LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE
+1FB46 LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT
+1FB47 LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT
+1FB48 LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT
+1FB49 LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT
+1FB4A LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT
+1FB4B LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT
+1FB4C LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT
+1FB4D LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT
+1FB4E LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT
+1FB4F LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT
+1FB50 LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT
+1FB51 LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT
+1FB52 UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE
+1FB53 UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT
+1FB54 UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE
+1FB55 UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT
+1FB56 UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE
+1FB57 UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE
+1FB58 UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT
+1FB59 UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE
+1FB5A UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT
+1FB5B UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE
+1FB5C UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT
+1FB5D UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT
+1FB5E UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT
+1FB5F UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT
+1FB60 UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT
+1FB61 UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT
+1FB62 UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT
+1FB63 UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT
+1FB64 UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT
+1FB65 UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT
+1FB66 UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT
+1FB67 UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT
+1FB68 UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK
+1FB69 LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK
+1FB6A UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK
+1FB6B LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK
+1FB6C LEFT TRIANGULAR ONE QUARTER BLOCK
+1FB6D UPPER TRIANGULAR ONE QUARTER BLOCK
+1FB6E RIGHT TRIANGULAR ONE QUARTER BLOCK
+1FB6F LOWER TRIANGULAR ONE QUARTER BLOCK
+@ Block elements
+1FB70 VERTICAL ONE EIGHTH BLOCK-2
+ x (left one eighth block - 258F)
+1FB71 VERTICAL ONE EIGHTH BLOCK-3
+1FB72 VERTICAL ONE EIGHTH BLOCK-4
+1FB73 VERTICAL ONE EIGHTH BLOCK-5
+1FB74 VERTICAL ONE EIGHTH BLOCK-6
+1FB75 VERTICAL ONE EIGHTH BLOCK-7
+ x (right one eighth block - 2595)
+1FB76 HORIZONTAL ONE EIGHTH BLOCK-2
+ x (upper one eighth block - 2594)
+1FB77 HORIZONTAL ONE EIGHTH BLOCK-3
+1FB78 HORIZONTAL ONE EIGHTH BLOCK-4
+1FB79 HORIZONTAL ONE EIGHTH BLOCK-5
+1FB7A HORIZONTAL ONE EIGHTH BLOCK-6
+1FB7B HORIZONTAL ONE EIGHTH BLOCK-7
+ x (lower one eighth block - 2581)
+1FB7C LEFT AND LOWER ONE EIGHTH BLOCK
+1FB7D LEFT AND UPPER ONE EIGHTH BLOCK
+1FB7E RIGHT AND UPPER ONE EIGHTH BLOCK
+1FB7F RIGHT AND LOWER ONE EIGHTH BLOCK
+1FB80 UPPER AND LOWER ONE EIGHTH BLOCK
+1FB81 HORIZONTAL ONE EIGHTH BLOCK-1358
+1FB82 UPPER ONE QUARTER BLOCK
+ x (lower one quarter block - 2582)
+1FB83 UPPER THREE EIGHTHS BLOCK
+ x (lower three eighths block - 2583)
+1FB84 UPPER FIVE EIGHTHS BLOCK
+ x (lower five eighths block - 2585)
+1FB85 UPPER THREE QUARTERS BLOCK
+ x (lower three quarters block - 2586)
+1FB86 UPPER SEVEN EIGHTHS BLOCK
+ x (lower seven eighths block - 2587)
+1FB87 RIGHT ONE QUARTER BLOCK
+ x (left one quarter block - 258E)
+1FB88 RIGHT THREE EIGHTHS BLOCK
+ x (left three eighths block - 258D)
+1FB89 RIGHT FIVE EIGHTHS BLOCK
+ x (left five eighths block - 258B)
+1FB8A RIGHT THREE QUARTERS BLOCK
+ x (left three quarters block - 258A)
+1FB8B RIGHT SEVEN EIGHTHS BLOCK
+ x (left seven eighths block - 2589)
+@ Rectangular shade characters
+1FB8C LEFT HALF MEDIUM SHADE
+1FB8D RIGHT HALF MEDIUM SHADE
+1FB8E UPPER HALF MEDIUM SHADE
+1FB8F LOWER HALF MEDIUM SHADE
+1FB90 INVERSE MEDIUM SHADE
+ x (medium shade - 2592)
+1FB91 UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE
+1FB92 UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94 LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK
+@ Fill characters
+1FB95 CHECKER BOARD FILL
+ x (quadrant upper left and lower right - 259A)
+ x (reverse checker board - 1F67F)
+1FB96 INVERSE CHECKER BOARD FILL
+ x (quadrant upper right and lower left - 259E)
+ x (checker board - 1F67E)
+1FB97 HEAVY HORIZONTAL FILL
+ * upper middle and lower one quarter block
+ x (geta mark - 3013)
+1FB98 UPPER LEFT TO LOWER RIGHT FILL
+ x (square with upper left to lower right fill - 25A7)
+1FB99 UPPER RIGHT TO LOWER LEFT FILL
+ x (square with upper right to lower left fill - 25A8)
+@ Smooth mosaic terminal graphic characters
+1FB9A UPPER AND LOWER TRIANGULAR HALF BLOCK
+ x (black hourglass - 29D7)
+1FB9B LEFT AND RIGHT TRIANGULAR HALF BLOCK
+ x (black bowtie - 29D3)
+@ Triangular shade characters
+1FB9C UPPER LEFT TRIANGULAR MEDIUM SHADE
+ x (black upper left triangle - 25E4)
+1FB9D UPPER RIGHT TRIANGULAR MEDIUM SHADE
+ x (black upper right triangle - 25E5)
+1FB9E LOWER RIGHT TRIANGULAR MEDIUM SHADE
+ x (black lower right triangle - 25E2)
+1FB9F LOWER LEFT TRIANGULAR MEDIUM SHADE
+ x (black lower left triangle - 25E3)
+@ Character cell diagonals
+1FBA0 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT
+1FBA1 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT
+1FBA2 BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE
+1FBA3 BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE
+1FBA4 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE
+1FBA5 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE
+1FBA6 BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT
+1FBA7 BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT
+1FBA8 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE
+1FBA9 BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE
+1FBAA BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT
+1FBAB BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT
+1FBAC BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE
+1FBAD BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE
+1FBAE BOX DRAWINGS LIGHT DIAGONAL DIAMOND
+ x (white diamond - 25C7)
+@ Light solid line with stroke
+1FBAF BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE
+ x (box drawings light horizontal - 2500)
+@ Terminal graphic characters
+1FBB0 ARROWHEAD-SHAPED POINTER
+ x (black rightwards arrowhead - 27A4)
+1FBB1 INVERSE CHECK MARK
+ x (check mark - 2713)
+1FBB2 LEFT HALF RUNNING MAN
+ * paired with 1FBB3, faces to the right
+ * the Apple II documentation refers to these characters as "Running Man"
+ x (runner - 1F3C3)
+1FBB3 RIGHT HALF RUNNING MAN
+@ Arrows
+1FBB4 INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS
+ x (downwards arrow with tip leftwards - 21B2)
+ x (downwards arrow with corner leftwards - 21B5)
+1FBB5 LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK
+1FBB6 RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK
+1FBB7 DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK
+1FBB8 UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK
+@ Terminal graphic characters
+1FBB9 LEFT HALF FOLDER
+ * paired with 1FBBA
+ x (file folder - 1F4C1)
+ x (folder - 1F5C0)
+1FBBA RIGHT HALF FOLDER
+1FBBB VOIDED GREEK CROSS
+ x (number sign - 0023)
+ x (box drawings double vertical and horizontal - 256C)
+ x (outlined greek cross - 2719)
+ x (heavy greek cross - 271A)
+ x (medium greek cross - 1F7A3)
+1FBBC RIGHT OPEN SQUARED DOT
+ x (squared dot operator - 22A1)
+@ Negative terminal graphic characters
+@+ The glyphs for these "negative" characters do not necessarily extend to the edges of the character cell.
+1FBBD NEGATIVE DIAGONAL CROSS
+ * diagonals extend past the corners of the box, unlike in 274E
+ x (box drawings light diagonal cross - 2573)
+ x (negative squared cross mark - 274E)
+1FBBE NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE
+1FBBF NEGATIVE DIAGONAL DIAMOND
+@ Terminal graphic characters
+1FBC0 WHITE HEAVY SALTIRE WITH ROUNDED CORNERS
+ x (cross mark - 274C)
+ x (cancellation x - 1F5D9)
+ x (heavy saltire - 1F7AC)
+1FBC1 LEFT THIRD WHITE RIGHT POINTING INDEX
+ * glyph part, combined with 1FBC2 and 1FBC3
+ x (white right pointing index - 261E)
+1FBC2 MIDDLE THIRD WHITE RIGHT POINTING INDEX
+1FBC3 RIGHT THIRD WHITE RIGHT POINTING INDEX
+1FBC4 NEGATIVE SQUARED QUESTION MARK
+ * glyph does not necessarily extend to the edges of the character cell
+ x (question mark - 003F)
+ x (uncertainty sign - 2BD1)
+ x (replacement character - FFFD)
+1FBC5 STICK FIGURE
+ x (mens symbol - 1F6B9)
+1FBC6 STICK FIGURE WITH ARMS RAISED
+1FBC7 STICK FIGURE LEANING LEFT
+1FBC8 STICK FIGURE LEANING RIGHT
+1FBC9 STICK FIGURE WITH DRESS
+ x (womens symbol - 1F6BA)
+1FBCA WHITE UP-POINTING CHEVRON
+ x (upwards white arrow - 21E7)
+ x (house - 2302)
+ x (upwards finger-post arrow - 1F835)
+@ Segmented digits
+1FBF0 SEGMENTED DIGIT ZERO
+ # <font> 0030 digit zero
+1FBF1 SEGMENTED DIGIT ONE
+ # <font> 0031 digit one
+1FBF2 SEGMENTED DIGIT TWO
+ # <font> 0032 digit two
+1FBF3 SEGMENTED DIGIT THREE
+ # <font> 0033 digit three
+1FBF4 SEGMENTED DIGIT FOUR
+ # <font> 0034 digit four
+1FBF5 SEGMENTED DIGIT FIVE
+ # <font> 0035 digit five
+1FBF6 SEGMENTED DIGIT SIX
+ # <font> 0036 digit six
+1FBF7 SEGMENTED DIGIT SEVEN
+ # <font> 0037 digit seven
+1FBF8 SEGMENTED DIGIT EIGHT
+ # <font> 0038 digit eight
+1FBF9 SEGMENTED DIGIT NINE
+ # <font> 0039 digit nine
@@ 1FF80 Unassigned 1FFFF
@ Noncharacters
@+ These codes are intended for process-internal uses.
1FFFE <not a character>
1FFFF <not a character>
-@@ 20000 CJK Unified Ideographs Extension B 2A6D6
+@@ 20000 CJK Unified Ideographs Extension B 2A6DD
@@ 2A700 CJK Unified Ideographs Extension C 2B734
@@ 2B740 CJK Unified Ideographs Extension D 2B81D
@@ 2B820 CJK Unified Ideographs Extension E 2CEA1
@@ -51614,6 +52463,7 @@ FFFF <not a character>
@+ These codes are intended for process-internal uses.
2FFFE <not a character>
2FFFF <not a character>
+@@ 30000 CJK Unified Ideographs Extension G 3134A
@@ 3FF80 Unassigned 3FFFF
@ Noncharacters
@+ These codes are intended for process-internal uses.
diff --git a/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt b/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt
index 360f49cc928..7144fb8935c 100644
--- a/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt
+++ b/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt
@@ -1,5 +1,5 @@
-# NormalizationCorrections-12.1.0.txt
-# Date: 2019-03-08, 23:59:00 GMT [KW, LI]
+# NormalizationCorrections-13.0.0.txt
+# Date: 2019-09-09, 19:50:00 GMT [KW, LI]
# © 2019 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
diff --git a/gnu/usr.bin/perl/lib/unicore/PropList.txt b/gnu/usr.bin/perl/lib/unicore/PropList.txt
index 4394602fea7..7d2f44c56fa 100644
--- a/gnu/usr.bin/perl/lib/unicore/PropList.txt
+++ b/gnu/usr.bin/perl/lib/unicore/PropList.txt
@@ -1,5 +1,5 @@
-# PropList-12.1.0.txt
-# Date: 2019-03-10, 10:53:16 GMT
+# PropList-13.0.0.txt
+# Date: 2019-11-27, 03:13:28 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -61,8 +61,9 @@ FE31..FE32 ; Dash # Pd [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTA
FE58 ; Dash # Pd SMALL EM DASH
FE63 ; Dash # Pd SMALL HYPHEN-MINUS
FF0D ; Dash # Pd FULLWIDTH HYPHEN-MINUS
+10EAD ; Dash # Pd YEZIDI HYPHENATION MARK
-# Total code points: 28
+# Total code points: 29
# ================================================
@@ -197,11 +198,13 @@ FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA
11238..1123C ; Terminal_Punctuation # Po [5] KHOJKI DANDA..KHOJKI DOUBLE SECTION MARK
112A9 ; Terminal_Punctuation # Po MULTANI SECTION MARK
1144B..1144D ; Terminal_Punctuation # Po [3] NEWA DANDA..NEWA COMMA
-1145B ; Terminal_Punctuation # Po NEWA PLACEHOLDER MARK
+1145A..1145B ; Terminal_Punctuation # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
115C2..115C5 ; Terminal_Punctuation # Po [4] SIDDHAM DANDA..SIDDHAM SEPARATOR BAR
115C9..115D7 ; Terminal_Punctuation # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
11641..11642 ; Terminal_Punctuation # Po [2] MODI DANDA..MODI DOUBLE DANDA
1173C..1173E ; Terminal_Punctuation # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+11944 ; Terminal_Punctuation # Po DIVES AKURU DOUBLE DANDA
+11946 ; Terminal_Punctuation # Po DIVES AKURU END OF TEXT MARK
11A42..11A43 ; Terminal_Punctuation # Po [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD
11A9B..11A9C ; Terminal_Punctuation # Po [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD
11AA1..11AA2 ; Terminal_Punctuation # Po [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2
@@ -217,7 +220,7 @@ FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA
1BC9F ; Terminal_Punctuation # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1DA87..1DA8A ; Terminal_Punctuation # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON
-# Total code points: 264
+# Total code points: 267
# ================================================
@@ -525,6 +528,7 @@ FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L
0D4A..0D4C ; Other_Alphabetic # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
0D57 ; Other_Alphabetic # Mc MALAYALAM AU LENGTH MARK
0D62..0D63 ; Other_Alphabetic # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; Other_Alphabetic # Mn SINHALA SIGN CANDRABINDU
0D82..0D83 ; Other_Alphabetic # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0DCF..0DD1 ; Other_Alphabetic # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
0DD2..0DD4 ; Other_Alphabetic # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
@@ -595,6 +599,7 @@ FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L
1A65..1A6C ; Other_Alphabetic # Mn [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
1A6D..1A72 ; Other_Alphabetic # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
1A73..1A74 ; Other_Alphabetic # Mn [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG
+1ABF..1AC0 ; Other_Alphabetic # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; Other_Alphabetic # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04 ; Other_Alphabetic # Mc BALINESE SIGN BISAH
1B35 ; Other_Alphabetic # Mc BALINESE VOWEL SIGN TEDUNG
@@ -676,6 +681,7 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
10A05..10A06 ; Other_Alphabetic # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
10A0C..10A0F ; Other_Alphabetic # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
10D24..10D27 ; Other_Alphabetic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; Other_Alphabetic # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
11000 ; Other_Alphabetic # Mc BRAHMI SIGN CANDRABINDU
11001 ; Other_Alphabetic # Mn BRAHMI SIGN ANUSVARA
11002 ; Other_Alphabetic # Mc BRAHMI SIGN VISARGA
@@ -694,6 +700,8 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
111B3..111B5 ; Other_Alphabetic # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
111B6..111BE ; Other_Alphabetic # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111BF ; Other_Alphabetic # Mc SHARADA VOWEL SIGN AU
+111CE ; Other_Alphabetic # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; Other_Alphabetic # Mn SHARADA SIGN INVERTED CANDRABINDU
1122C..1122E ; Other_Alphabetic # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
1122F..11231 ; Other_Alphabetic # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11232..11233 ; Other_Alphabetic # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
@@ -749,6 +757,11 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
1182C..1182E ; Other_Alphabetic # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
1182F..11837 ; Other_Alphabetic # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
11838 ; Other_Alphabetic # Mc DOGRA SIGN VISARGA
+11930..11935 ; Other_Alphabetic # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; Other_Alphabetic # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; Other_Alphabetic # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+11940 ; Other_Alphabetic # Mc DIVES AKURU MEDIAL YA
+11942 ; Other_Alphabetic # Mc DIVES AKURU MEDIAL RA
119D1..119D3 ; Other_Alphabetic # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
119D4..119D7 ; Other_Alphabetic # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119DA..119DB ; Other_Alphabetic # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
@@ -790,6 +803,7 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
16F4F ; Other_Alphabetic # Mn MIAO SIGN CONSONANT MODIFIER BAR
16F51..16F87 ; Other_Alphabetic # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
16F8F..16F92 ; Other_Alphabetic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16FF0..16FF1 ; Other_Alphabetic # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
1BC9E ; Other_Alphabetic # Mn DUPLOYAN DOUBLE MARK
1E000..1E006 ; Other_Alphabetic # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
1E008..1E018 ; Other_Alphabetic # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
@@ -801,7 +815,7 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
1F150..1F169 ; Other_Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F170..1F189 ; Other_Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-# Total code points: 1377
+# Total code points: 1398
# ================================================
@@ -809,21 +823,24 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
3007 ; Ideographic # Nl IDEOGRAPHIC NUMBER ZERO
3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
-3400..4DB5 ; Ideographic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEF ; Ideographic # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+3400..4DBF ; Ideographic # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; Ideographic # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+16FE4 ; Ideographic # Mn KHITAN SMALL SCRIPT FILLER
17000..187F7 ; Ideographic # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; Ideographic # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; Ideographic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; Ideographic # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B170..1B2FB ; Ideographic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
-20000..2A6D6 ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+20000..2A6DD ; Ideographic # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; Ideographic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Ideographic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; Ideographic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; Ideographic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; Ideographic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-# Total code points: 96190
+# Total code points: 101652
# ================================================
@@ -882,6 +899,7 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM
0AFD..0AFF ; Diacritic # Mn [3] GUJARATI SIGN THREE-DOT NUKTA ABOVE..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
0B3C ; Diacritic # Mn ORIYA SIGN NUKTA
0B4D ; Diacritic # Mn ORIYA SIGN VIRAMA
+0B55 ; Diacritic # Mn ORIYA SIGN OVERLINE
0BCD ; Diacritic # Mn TAMIL SIGN VIRAMA
0C4D ; Diacritic # Mn TELUGU SIGN VIRAMA
0CBC ; Diacritic # Mn KANNADA SIGN NUKTA
@@ -978,6 +996,8 @@ AAC2 ; Diacritic # Lo TAI VIET TONE MAI SONG
AAF6 ; Diacritic # Mn MEETEI MAYEK VIRAMA
AB5B ; Diacritic # Sk MODIFIER BREVE WITH INVERTED BREVE
AB5C..AB5F ; Diacritic # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; Diacritic # Lm MODIFIER LETTER SMALL TURNED W
+AB6A..AB6B ; Diacritic # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
ABEC ; Diacritic # Mc MEETEI MAYEK LUM IYEK
ABED ; Diacritic # Mn MEETEI MAYEK APUN IYEK
FB1E ; Diacritic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
@@ -1013,6 +1033,9 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON
116B7 ; Diacritic # Mn TAKRI SIGN NUKTA
1172B ; Diacritic # Mn AHOM SIGN KILLER
11839..1183A ; Diacritic # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+1193D ; Diacritic # Mc DIVES AKURU SIGN HALANTA
+1193E ; Diacritic # Mn DIVES AKURU VIRAMA
+11943 ; Diacritic # Mn DIVES AKURU SIGN NUKTA
119E0 ; Diacritic # Mn NANDINAGARI SIGN VIRAMA
11A34 ; Diacritic # Mn ZANABAZAR SQUARE SIGN VIRAMA
11A47 ; Diacritic # Mn ZANABAZAR SQUARE SUBJOINER
@@ -1025,6 +1048,7 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON
16B30..16B36 ; Diacritic # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F8F..16F92 ; Diacritic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
16F93..16F9F ; Diacritic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+16FF0..16FF1 ; Diacritic # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
1D167..1D169 ; Diacritic # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
1D16D..1D172 ; Diacritic # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
1D17B..1D182 ; Diacritic # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
@@ -1036,7 +1060,7 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON
1E944..1E946 ; Diacritic # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK
1E948..1E94A ; Diacritic # Mn [3] ADLAM CONSONANT MODIFIER..ADLAM NUKTA
-# Total code points: 873
+# Total code points: 882
# ================================================
@@ -1044,6 +1068,7 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON
02D0..02D1 ; Extender # Lm [2] MODIFIER LETTER TRIANGULAR COLON..MODIFIER LETTER HALF TRIANGULAR COLON
0640 ; Extender # Lm ARABIC TATWEEL
07FA ; Extender # Lm NKO LAJANYALAN
+0B55 ; Extender # Mn ORIYA SIGN OVERLINE
0E46 ; Extender # Lm THAI CHARACTER MAIYAMOK
0EC6 ; Extender # Lm LAO KO LA
180A ; Extender # Po MONGOLIAN NIRUGU
@@ -1072,7 +1097,7 @@ FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND
1E13C..1E13D ; Extender # Lm [2] NYIAKENG PUACHUE HMONG SIGN XW XW..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
1E944..1E946 ; Extender # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK
-# Total code points: 47
+# Total code points: 48
# ================================================
@@ -1155,11 +1180,12 @@ FF9E..FF9F ; Other_Grapheme_Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND
114B0 ; Other_Grapheme_Extend # Mc TIRHUTA VOWEL SIGN AA
114BD ; Other_Grapheme_Extend # Mc TIRHUTA VOWEL SIGN SHORT O
115AF ; Other_Grapheme_Extend # Mc SIDDHAM VOWEL SIGN AA
+11930 ; Other_Grapheme_Extend # Mc DIVES AKURU VOWEL SIGN AA
1D165 ; Other_Grapheme_Extend # Mc MUSICAL SYMBOL COMBINING STEM
1D16E..1D172 ; Other_Grapheme_Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5
E0020..E007F ; Other_Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG
-# Total code points: 126
+# Total code points: 127
# ================================================
@@ -1184,8 +1210,8 @@ E0020..E007F ; Other_Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG
# ================================================
-3400..4DB5 ; Unified_Ideograph # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEF ; Unified_Ideograph # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+3400..4DBF ; Unified_Ideograph # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; Unified_Ideograph # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F
FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11
FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14
@@ -1193,13 +1219,14 @@ FA1F ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA1F
FA21 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA21
FA23..FA24 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24
FA27..FA29 ; Unified_Ideograph # Lo [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29
-20000..2A6D6 ; Unified_Ideograph # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+20000..2A6DD ; Unified_Ideograph # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; Unified_Ideograph # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Unified_Ideograph # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+30000..3134A ; Unified_Ideograph # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-# Total code points: 87887
+# Total code points: 92856
# ================================================
@@ -1362,6 +1389,8 @@ FF61 ; Sentence_Terminal # Po HALFWIDTH IDEOGRAPHIC FULL STOP
115C9..115D7 ; Sentence_Terminal # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
11641..11642 ; Sentence_Terminal # Po [2] MODI DANDA..MODI DOUBLE DANDA
1173C..1173E ; Sentence_Terminal # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+11944 ; Sentence_Terminal # Po DIVES AKURU DOUBLE DANDA
+11946 ; Sentence_Terminal # Po DIVES AKURU END OF TEXT MARK
11A42..11A43 ; Sentence_Terminal # Po [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD
11A9B..11A9C ; Sentence_Terminal # Po [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD
11C41..11C42 ; Sentence_Terminal # Po [2] BHAIKSUKI DANDA..BHAIKSUKI DOUBLE DANDA
@@ -1374,7 +1403,7 @@ FF61 ; Sentence_Terminal # Po HALFWIDTH IDEOGRAPHIC FULL STOP
1BC9F ; Sentence_Terminal # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1DA88 ; Sentence_Terminal # Po SIGNWRITING FULL STOP
-# Total code points: 141
+# Total code points: 143
# ================================================
@@ -1574,8 +1603,8 @@ E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION S
2B4D..2B73 ; Pattern_Syntax # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B74..2B75 ; Pattern_Syntax # Cn [2] <reserved-2B74>..<reserved-2B75>
2B76..2B95 ; Pattern_Syntax # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B96..2B97 ; Pattern_Syntax # Cn [2] <reserved-2B96>..<reserved-2B97>
-2B98..2BFF ; Pattern_Syntax # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2B96 ; Pattern_Syntax # Cn <reserved-2B96>
+2B97..2BFF ; Pattern_Syntax # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
2E00..2E01 ; Pattern_Syntax # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; Pattern_Syntax # Pi LEFT SUBSTITUTION BRACKET
2E03 ; Pattern_Syntax # Pf RIGHT SUBSTITUTION BRACKET
@@ -1614,7 +1643,9 @@ E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION S
2E41 ; Pattern_Syntax # Po REVERSED COMMA
2E42 ; Pattern_Syntax # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
2E43..2E4F ; Pattern_Syntax # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
-2E50..2E7F ; Pattern_Syntax # Cn [48] <reserved-2E50>..<reserved-2E7F>
+2E50..2E51 ; Pattern_Syntax # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+2E52 ; Pattern_Syntax # Po TIRONIAN SIGN CAPITAL ET
+2E53..2E7F ; Pattern_Syntax # Cn [45] <reserved-2E53>..<reserved-2E7F>
3001..3003 ; Pattern_Syntax # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
3008 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET
3009 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET
diff --git a/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt b/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt
index 85933726192..2023baf4d2f 100644
--- a/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt
+++ b/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt
@@ -1,5 +1,5 @@
-# PropertyValueAliases-12.1.0.txt
-# Date: 2019-03-10, 10:53:18 GMT
+# PropertyValueAliases-13.0.0.txt
+# Date: 2019-11-13, 21:52:10 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -88,6 +88,7 @@ age; 10.0 ; V10_0
age; 11.0 ; V11_0
age; 12.0 ; V12_0
age; 12.1 ; V12_1
+age; 13.0 ; V13_0
age; NA ; Unassigned
# Alphabetic (Alpha)
@@ -190,6 +191,7 @@ blk; Cham ; Cham
blk; Cherokee ; Cherokee
blk; Cherokee_Sup ; Cherokee_Supplement
blk; Chess_Symbols ; Chess_Symbols
+blk; Chorasmian ; Chorasmian
blk; CJK ; CJK_Unified_Ideographs
blk; CJK_Compat ; CJK_Compatibility
blk; CJK_Compat_Forms ; CJK_Compatibility_Forms
@@ -201,6 +203,7 @@ blk; CJK_Ext_C ; CJK_Unified_Ideographs_Extension_C
blk; CJK_Ext_D ; CJK_Unified_Ideographs_Extension_D
blk; CJK_Ext_E ; CJK_Unified_Ideographs_Extension_E
blk; CJK_Ext_F ; CJK_Unified_Ideographs_Extension_F
+blk; CJK_Ext_G ; CJK_Unified_Ideographs_Extension_G
blk; CJK_Radicals_Sup ; CJK_Radicals_Supplement
blk; CJK_Strokes ; CJK_Strokes
blk; CJK_Symbols ; CJK_Symbols_And_Punctuation
@@ -226,6 +229,7 @@ blk; Diacriticals_Ext ; Combining_Diacritical_Marks_Extended
blk; Diacriticals_For_Symbols ; Combining_Diacritical_Marks_For_Symbols; Combining_Marks_For_Symbols
blk; Diacriticals_Sup ; Combining_Diacritical_Marks_Supplement
blk; Dingbats ; Dingbats
+blk; Dives_Akuru ; Dives_Akuru
blk; Dogra ; Dogra
blk; Domino ; Domino_Tiles
blk; Duployan ; Duployan
@@ -289,6 +293,7 @@ blk; Katakana ; Katakana
blk; Katakana_Ext ; Katakana_Phonetic_Extensions
blk; Kayah_Li ; Kayah_Li
blk; Kharoshthi ; Kharoshthi
+blk; Khitan_Small_Script ; Khitan_Small_Script
blk; Khmer ; Khmer
blk; Khmer_Symbols ; Khmer_Symbols
blk; Khojki ; Khojki
@@ -308,6 +313,7 @@ blk; Linear_A ; Linear_A
blk; Linear_B_Ideograms ; Linear_B_Ideograms
blk; Linear_B_Syllabary ; Linear_B_Syllabary
blk; Lisu ; Lisu
+blk; Lisu_Sup ; Lisu_Supplement
blk; Low_Surrogates ; Low_Surrogates
blk; Lycian ; Lycian
blk; Lydian ; Lydian
@@ -414,6 +420,7 @@ blk; Super_And_Sub ; Superscripts_And_Subscripts
blk; Sutton_SignWriting ; Sutton_SignWriting
blk; Syloti_Nagri ; Syloti_Nagri
blk; Symbols_And_Pictographs_Ext_A ; Symbols_And_Pictographs_Extended_A
+blk; Symbols_For_Legacy_Computing ; Symbols_For_Legacy_Computing
blk; Syriac ; Syriac
blk; Syriac_Sup ; Syriac_Supplement
blk; Tagalog ; Tagalog
@@ -428,6 +435,7 @@ blk; Tamil ; Tamil
blk; Tamil_Sup ; Tamil_Supplement
blk; Tangut ; Tangut
blk; Tangut_Components ; Tangut_Components
+blk; Tangut_Sup ; Tangut_Supplement
blk; Telugu ; Telugu
blk; Thaana ; Thaana
blk; Thai ; Thai
@@ -445,6 +453,7 @@ blk; VS ; Variation_Selectors
blk; VS_Sup ; Variation_Selectors_Supplement
blk; Wancho ; Wancho
blk; Warang_Citi ; Warang_Citi
+blk; Yezidi ; Yezidi
blk; Yi_Radicals ; Yi_Radicals
blk; Yi_Syllables ; Yi_Syllables
blk; Yijing ; Yijing_Hexagram_Symbols
@@ -454,6 +463,7 @@ blk; Zanabazar_Square ; Zanabazar_Square
ccc; 0; NR ; Not_Reordered
ccc; 1; OV ; Overlay
+ccc; 6; HANR ; Han_Reading
ccc; 7; NK ; Nukta
ccc; 8; KV ; Kana_Voicing
ccc; 9; VR ; Virama
@@ -613,6 +623,31 @@ ea ; N ; Neutral
ea ; Na ; Narrow
ea ; W ; Wide
+# Emoji (Emoji)
+
+Emoji; N ; No ; F ; False
+Emoji; Y ; Yes ; T ; True
+
+# Emoji_Component (EComp)
+
+EComp; N ; No ; F ; False
+EComp; Y ; Yes ; T ; True
+
+# Emoji_Modifier (EMod)
+
+EMod; N ; No ; F ; False
+EMod; Y ; Yes ; T ; True
+
+# Emoji_Modifier_Base (EBase)
+
+EBase; N ; No ; F ; False
+EBase; Y ; Yes ; T ; True
+
+# Emoji_Presentation (EPres)
+
+EPres; N ; No ; F ; False
+EPres; Y ; Yes ; T ; True
+
# Equivalent_Unified_Ideograph (EqUIdeo)
# @missing: 0000..10FFFF; Equivalent_Unified_Ideograph; <none>
@@ -637,6 +672,11 @@ XO_NFKC; Y ; Yes ; T
XO_NFKD; N ; No ; F ; False
XO_NFKD; Y ; Yes ; T ; True
+# Extended_Pictographic (ExtPict)
+
+ExtPict; N ; No ; F ; False
+ExtPict; Y ; Yes ; T ; True
+
# Extender (Ext)
Ext; N ; No ; F ; False
@@ -789,6 +829,7 @@ InPC; Overstruck ; Overstruck
InPC; Right ; Right
InPC; Top ; Top
InPC; Top_And_Bottom ; Top_And_Bottom
+InPC; Top_And_Bottom_And_Left ; Top_And_Bottom_And_Left
InPC; Top_And_Bottom_And_Right ; Top_And_Bottom_And_Right
InPC; Top_And_Left ; Top_And_Left
InPC; Top_And_Left_And_Right ; Top_And_Left_And_Right
@@ -1219,10 +1260,12 @@ sc ; Cans ; Canadian_Aboriginal
sc ; Cari ; Carian
sc ; Cham ; Cham
sc ; Cher ; Cherokee
+sc ; Chrs ; Chorasmian
sc ; Copt ; Coptic ; Qaac
sc ; Cprt ; Cypriot
sc ; Cyrl ; Cyrillic
sc ; Deva ; Devanagari
+sc ; Diak ; Dives_Akuru
sc ; Dogr ; Dogra
sc ; Dsrt ; Deseret
sc ; Dupl ; Duployan
@@ -1257,6 +1300,7 @@ sc ; Kana ; Katakana
sc ; Khar ; Kharoshthi
sc ; Khmr ; Khmer
sc ; Khoj ; Khojki
+sc ; Kits ; Khitan_Small_Script
sc ; Knda ; Kannada
sc ; Kthi ; Kaithi
sc ; Lana ; Tai_Tham
@@ -1345,6 +1389,7 @@ sc ; Wara ; Warang_Citi
sc ; Wcho ; Wancho
sc ; Xpeo ; Old_Persian
sc ; Xsux ; Cuneiform
+sc ; Yezi ; Yezidi
sc ; Yiii ; Yi
sc ; Zanb ; Zanabazar_Square
sc ; Zinh ; Inherited ; Qaai
@@ -1515,10 +1560,18 @@ XIDS; Y ; Yes ; T
# @missing: 0000..10FFFF; cjkIRG_MSource; <none>
+# cjkIRG_SSource (cjkIRG_SSource)
+
+# @missing: 0000..10FFFF; cjkIRG_SSource; <none>
+
# cjkIRG_TSource (cjkIRG_TSource)
# @missing: 0000..10FFFF; cjkIRG_TSource; <none>
+# cjkIRG_UKSource (cjkIRG_UKSource)
+
+# @missing: 0000..10FFFF; cjkIRG_UKSource; <none>
+
# cjkIRG_USource (cjkIRG_USource)
# @missing: 0000..10FFFF; cjkIRG_USource; <none>
diff --git a/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt b/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt
index 4f1b42812c1..04644b8a281 100644
--- a/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt
+++ b/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt
@@ -1,5 +1,5 @@
-# PropertyAliases-12.1.0.txt
-# Date: 2019-03-10, 10:53:18 GMT
+# PropertyAliases-13.0.0.txt
+# Date: 2019-10-23, 03:46:32 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -89,7 +89,9 @@ cjkIRG_JSource ; kIRG_JSource
cjkIRG_KPSource ; kIRG_KPSource
cjkIRG_KSource ; kIRG_KSource
cjkIRG_MSource ; kIRG_MSource
+cjkIRG_SSource ; kIRG_SSource
cjkIRG_TSource ; kIRG_TSource
+cjkIRG_UKSource ; kIRG_UKSource
cjkIRG_USource ; kIRG_USource
cjkIRG_VSource ; kIRG_VSource
cjkRSUnicode ; kRSUnicode ; Unicode_Radical_Stroke; URS
@@ -154,7 +156,13 @@ Dash ; Dash
Dep ; Deprecated
DI ; Default_Ignorable_Code_Point
Dia ; Diacritic
+EBase ; Emoji_Modifier_Base
+EComp ; Emoji_Component
+EMod ; Emoji_Modifier
+Emoji ; Emoji
+EPres ; Emoji_Presentation
Ext ; Extender
+ExtPict ; Extended_Pictographic
Gr_Base ; Grapheme_Base
Gr_Ext ; Grapheme_Extend
Gr_Link ; Grapheme_Link
@@ -199,6 +207,6 @@ XO_NFKC ; Expands_On_NFKC
XO_NFKD ; Expands_On_NFKD
# ================================================
-# Total: 121
+# Total: 129
# EOF
diff --git a/gnu/usr.bin/perl/lib/unicore/README.perl b/gnu/usr.bin/perl/lib/unicore/README.perl
index 74caf48e026..495660905a2 100644
--- a/gnu/usr.bin/perl/lib/unicore/README.perl
+++ b/gnu/usr.bin/perl/lib/unicore/README.perl
@@ -40,6 +40,8 @@ mv NormalizationTest.txt NormTest.txt
mv DerivedAge.txt DAge.txt
mv DerivedCoreProperties.txt DCoreProperties.txt
mv DerivedNormalizationProps.txt DNormalizationProps.txt
+mv IdentifierStatus.txt IdStatus.txt
+mv IdentifierType.txt IdType.txt
# Some early releases don't have the extracted directory, and hence these files
# should be moved to it.
diff --git a/gnu/usr.bin/perl/lib/unicore/ReadMe.txt b/gnu/usr.bin/perl/lib/unicore/ReadMe.txt
index 260da9946bf..390624de3dd 100644
--- a/gnu/usr.bin/perl/lib/unicore/ReadMe.txt
+++ b/gnu/usr.bin/perl/lib/unicore/ReadMe.txt
@@ -1,15 +1,16 @@
# Unicode Character Database
-# Date: 2019-03-05, 22:57:00 GMT [KW]
+# Date: 2019-09-11, 16:03:00 GMT [KW]
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# For documentation, see the following:
# NamesList.html
# UAX #38, "Unicode Han Database (Unihan)"
-# UAX #44, "Unicode Character Database."
+# UAX #44, "Unicode Character Database"
+# UTS #51, "Unicode Emoji"
#
-# The UAXes can be accessed at http://www.unicode.org/versions/Unicode12.0.0/
+# The UAXes and UTS #51 can be accessed at https://www.unicode.org/versions/Unicode13.0.0/
This directory contains the preliminary data files under development
-for the Unicode Character Database, for Version 12.1.0 of the Unicode Standard.
+for the Unicode Character Database, for Version 13.0.0 of the Unicode Standard.
diff --git a/gnu/usr.bin/perl/lib/unicore/ScriptExtensions.txt b/gnu/usr.bin/perl/lib/unicore/ScriptExtensions.txt
index ce98cba767e..b561feeb29f 100644
--- a/gnu/usr.bin/perl/lib/unicore/ScriptExtensions.txt
+++ b/gnu/usr.bin/perl/lib/unicore/ScriptExtensions.txt
@@ -1,6 +1,6 @@
-# ScriptExtensions-12.1.0.txt
-# Date: 2019-04-01, 09:10:42 GMT
-# © 2019 Unicode®, Inc.
+# ScriptExtensions-13.0.0.txt
+# Date: 2020-01-22, 00:07:43 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -147,19 +147,10 @@
# Script_Extensions=Arab Thaa
-0660..0669 ; Arab Thaa # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
FDF2 ; Arab Thaa # Lo ARABIC LIGATURE ALLAH ISOLATED FORM
FDFD ; Arab Thaa # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
-# Total code points: 12
-
-# ================================================
-
-# Script_Extensions=Armn Geor
-
-0589 ; Armn Geor # Po ARMENIAN FULL STOP
-
-# Total code points: 1
+# Total code points: 2
# ================================================
@@ -229,6 +220,14 @@ A66F ; Cyrl Glag # Mn COMBINING CYRILLIC VZMET
# ================================================
+# Script_Extensions=Cyrl Syrc
+
+1DF8 ; Cyrl Syrc # Mn COMBINING DOT ABOVE LEFT
+
+# Total code points: 1
+
+# ================================================
+
# Script_Extensions=Deva Gran
1CD3 ; Deva Gran # Po VEDIC SIGN NIHSHVASA
@@ -305,6 +304,14 @@ A8F3 ; Deva Taml # Lo DEVANAGARI SIGN CANDRABINDU VIRAMA
# ================================================
+# Script_Extensions=Hani Latn
+
+A700..A707 ; Hani Latn # Sk [8] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER CHINESE TONE YANG RU
+
+# Total code points: 8
+
+# ================================================
+
# Script_Extensions=Hira Kana
3031..3035 ; Hira Kana # Lm [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
@@ -352,6 +359,14 @@ FF9E..FF9F ; Hira Kana # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFW
# ================================================
+# Script_Extensions=Arab Thaa Yezi
+
+0660..0669 ; Arab Thaa Yezi # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
+
+# Total code points: 10
+
+# ================================================
+
# Script_Extensions=Beng Cakm Sylo
09E6..09EF ; Beng Cakm Sylo # Nd [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
@@ -409,16 +424,6 @@ A92E ; Kali Latn Mymr # Po KAYAH LI SIGN CWI
# ================================================
-# Script_Extensions=Arab Rohg Syrc Thaa
-
-060C ; Arab Rohg Syrc Thaa # Po ARABIC COMMA
-061B ; Arab Rohg Syrc Thaa # Po ARABIC SEMICOLON
-061F ; Arab Rohg Syrc Thaa # Po ARABIC QUESTION MARK
-
-# Total code points: 3
-
-# ================================================
-
# Script_Extensions=Beng Deva Gran Knda
1CD0 ; Beng Deva Gran Knda # Mn VEDIC TONE KARSHANA
@@ -444,6 +449,16 @@ A92E ; Kali Latn Mymr # Po KAYAH LI SIGN CWI
# ================================================
+# Script_Extensions=Arab Rohg Syrc Thaa Yezi
+
+060C ; Arab Rohg Syrc Thaa Yezi # Po ARABIC COMMA
+061B ; Arab Rohg Syrc Thaa Yezi # Po ARABIC SEMICOLON
+061F ; Arab Rohg Syrc Thaa Yezi # Po ARABIC QUESTION MARK
+
+# Total code points: 3
+
+# ================================================
+
# Script_Extensions=Bopo Hang Hani Hira Kana
3003 ; Bopo Hang Hani Hira Kana # Po DITTO MARK
diff --git a/gnu/usr.bin/perl/lib/unicore/Scripts.txt b/gnu/usr.bin/perl/lib/unicore/Scripts.txt
index a9070ebebed..e0363f54d15 100644
--- a/gnu/usr.bin/perl/lib/unicore/Scripts.txt
+++ b/gnu/usr.bin/perl/lib/unicore/Scripts.txt
@@ -1,6 +1,6 @@
-# Scripts-12.1.0.txt
-# Date: 2019-04-01, 09:10:42 GMT
-# © 2019 Unicode®, Inc.
+# Scripts-13.0.0.txt
+# Date: 2020-01-22, 00:07:43 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -89,7 +89,6 @@
037E ; Common # Po GREEK QUESTION MARK
0385 ; Common # Sk GREEK DIALYTIKA TONOS
0387 ; Common # Po GREEK ANO TELEIA
-0589 ; Common # Po ARMENIAN FULL STOP
0605 ; Common # Cf ARABIC NUMBER MARK ABOVE
060C ; Common # Po ARABIC COMMA
061B ; Common # Po ARABIC SEMICOLON
@@ -308,7 +307,7 @@
2B47..2B4C ; Common # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
2B4D..2B73 ; Common # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95 ; Common # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B98..2BFF ; Common # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2B97..2BFF ; Common # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
2E00..2E01 ; Common # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; Common # Pi LEFT SUBSTITUTION BRACKET
2E03 ; Common # Pf RIGHT SUBSTITUTION BRACKET
@@ -347,6 +346,8 @@
2E41 ; Common # Po REVERSED COMMA
2E42 ; Common # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
2E43..2E4F ; Common # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2E50..2E51 ; Common # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+2E52 ; Common # Po TIRONIAN SIGN CAPITAL ET
2FF0..2FFB ; Common # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
3000 ; Common # Zs IDEOGRAPHIC SPACE
3001..3003 ; Common # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
@@ -414,6 +415,7 @@ A839 ; Common # So NORTH INDIC QUANTITY MARK
A92E ; Common # Po KAYAH LI SIGN CWI
A9CF ; Common # Lm JAVANESE PANGRANGKEP
AB5B ; Common # Sk MODIFIER BREVE WITH INVERTED BREVE
+AB6A..AB6B ; Common # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
FD3E ; Common # Pe ORNATE LEFT PARENTHESIS
FD3F ; Common # Ps ORNATE RIGHT PARENTHESIS
FE10..FE16 ; Common # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
@@ -506,7 +508,7 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR
10100..10102 ; Common # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
10107..10133 ; Common # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
10137..1013F ; Common # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
-10190..1019B ; Common # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+10190..1019C ; Common # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
101D0..101FC ; Common # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
102E1..102FB ; Common # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
16FE2 ; Common # Po OLD CHINESE HOOK MARK
@@ -581,8 +583,7 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR
1F0C1..1F0CF ; Common # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
1F0D1..1F0F5 ; Common # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
1F100..1F10C ; Common # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
-1F110..1F16C ; Common # So [93] PARENTHESIZED LATIN CAPITAL LETTER A..RAISED MR SIGN
-1F170..1F1AC ; Common # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
+1F10D..1F1AD ; Common # So [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL
1F1E6..1F1FF ; Common # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
1F201..1F202 ; Common # So [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA
1F210..1F23B ; Common # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
@@ -591,9 +592,9 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR
1F260..1F265 ; Common # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
1F300..1F3FA ; Common # So [251] CYCLONE..AMPHORA
1F3FB..1F3FF ; Common # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
-1F400..1F6D5 ; Common # So [726] RAT..HINDU TEMPLE
+1F400..1F6D7 ; Common # So [728] RAT..ELEVATOR
1F6E0..1F6EC ; Common # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
-1F6F0..1F6FA ; Common # So [11] SATELLITE..AUTO RICKSHAW
+1F6F0..1F6FC ; Common # So [13] SATELLITE..ROLLER SKATE
1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
1F780..1F7D8 ; Common # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
1F7E0..1F7EB ; Common # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
@@ -602,22 +603,25 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR
1F850..1F859 ; Common # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
1F860..1F887 ; Common # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F890..1F8AD ; Common # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-1F900..1F90B ; Common # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
-1F90D..1F971 ; Common # So [101] WHITE HEART..YAWNING FACE
-1F973..1F976 ; Common # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
-1F97A..1F9A2 ; Common # So [41] FACE WITH PLEADING EYES..SWAN
-1F9A5..1F9AA ; Common # So [6] SLOTH..OYSTER
-1F9AE..1F9CA ; Common # So [29] GUIDE DOG..ICE CUBE
+1F8B0..1F8B1 ; Common # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F900..1F978 ; Common # So [121] CIRCLED CROSS FORMEE WITH FOUR DOTS..DISGUISED FACE
+1F97A..1F9CB ; Common # So [82] FACE WITH PLEADING EYES..BUBBLE TEA
1F9CD..1FA53 ; Common # So [135] STANDING PERSON..BLACK CHESS KNIGHT-BISHOP
1FA60..1FA6D ; Common # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
-1FA70..1FA73 ; Common # So [4] BALLET SHOES..SHORTS
+1FA70..1FA74 ; Common # So [5] BALLET SHOES..THONG SANDAL
1FA78..1FA7A ; Common # So [3] DROP OF BLOOD..STETHOSCOPE
-1FA80..1FA82 ; Common # So [3] YO-YO..PARACHUTE
-1FA90..1FA95 ; Common # So [6] RINGED PLANET..BANJO
+1FA80..1FA86 ; Common # So [7] YO-YO..NESTING DOLLS
+1FA90..1FAA8 ; Common # So [25] RINGED PLANET..ROCK
+1FAB0..1FAB6 ; Common # So [7] FLY..FEATHER
+1FAC0..1FAC2 ; Common # So [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAD0..1FAD6 ; Common # So [7] BLUEBERRIES..TEAPOT
+1FB00..1FB92 ; Common # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA ; Common # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+1FBF0..1FBF9 ; Common # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
E0001 ; Common # Cf LANGUAGE TAG
E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
-# Total code points: 7805
+# Total code points: 8087
# ================================================
@@ -661,7 +665,8 @@ A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSU
A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; Latin # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; Latin # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; Latin # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; Latin # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; Latin # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; Latin # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; Latin # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; Latin # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -669,12 +674,13 @@ A7FB..A7FF ; Latin # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGR
AB30..AB5A ; Latin # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5C..AB5F ; Latin # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
AB60..AB64 ; Latin # L& [5] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER INVERTED ALPHA
-AB66..AB67 ; Latin # L& [2] LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB66..AB68 ; Latin # L& [3] LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; Latin # Lm MODIFIER LETTER SMALL TURNED W
FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-# Total code points: 1366
+# Total code points: 1374
# ================================================
@@ -769,12 +775,13 @@ FE2E..FE2F ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBININ
0559 ; Armenian # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
055A..055F ; Armenian # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
0560..0588 ; Armenian # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+0589 ; Armenian # Po ARMENIAN FULL STOP
058A ; Armenian # Pd ARMENIAN HYPHEN
058D..058E ; Armenian # So [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
058F ; Armenian # Sc ARMENIAN DRAM SIGN
FB13..FB17 ; Armenian # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
-# Total code points: 95
+# Total code points: 96
# ================================================
@@ -837,7 +844,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V
0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
08A0..08B4 ; Arabic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; Arabic # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; Arabic # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
08D3..08E1 ; Arabic # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
08E3..08FF ; Arabic # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
@@ -886,7 +893,7 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
1EEAB..1EEBB ; Arabic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
1EEF0..1EEF1 ; Arabic # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
-# Total code points: 1281
+# Total code points: 1291
# ================================================
@@ -1051,7 +1058,7 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY
0B47..0B48 ; Oriya # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4C ; Oriya # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
0B4D ; Oriya # Mn ORIYA SIGN VIRAMA
-0B56 ; Oriya # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; Oriya # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57 ; Oriya # Mc ORIYA AU LENGTH MARK
0B5C..0B5D ; Oriya # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
0B5F..0B61 ; Oriya # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
@@ -1061,7 +1068,7 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY
0B71 ; Oriya # Lo ORIYA LETTER WA
0B72..0B77 ; Oriya # No [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
-# Total code points: 90
+# Total code points: 91
# ================================================
@@ -1155,7 +1162,7 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY
0D00..0D01 ; Malayalam # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03 ; Malayalam # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D05..0D0C ; Malayalam # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; Malayalam # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; Malayalam # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; Malayalam # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3B..0D3C ; Malayalam # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
@@ -1177,10 +1184,11 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY
0D79 ; Malayalam # So MALAYALAM DATE MARK
0D7A..0D7F ; Malayalam # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
-# Total code points: 117
+# Total code points: 118
# ================================================
+0D81 ; Sinhala # Mn SINHALA SIGN CANDRABINDU
0D82..0D83 ; Sinhala # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0D85..0D96 ; Sinhala # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
0D9A..0DB1 ; Sinhala # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
@@ -1197,7 +1205,7 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY
0DF4 ; Sinhala # Po SINHALA PUNCTUATION KUNDDALIYA
111E1..111F4 ; Sinhala # No [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
-# Total code points: 110
+# Total code points: 111
# ================================================
@@ -1515,9 +1523,9 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
02EA..02EB ; Bopomofo # Sk [2] MODIFIER LETTER YIN DEPARTING TONE MARK..MODIFIER LETTER YANG DEPARTING TONE MARK
3105..312F ; Bopomofo # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
-31A0..31BA ; Bopomofo # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; Bopomofo # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
-# Total code points: 72
+# Total code points: 77
# ================================================
@@ -1529,18 +1537,20 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
3021..3029 ; Han # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
-3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEF ; Han # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+3400..4DBF ; Han # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; Han # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
F900..FA6D ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
-20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+16FF0..16FF1 ; Han # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+20000..2A6DD ; Han # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; Han # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; Han # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; Han # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-# Total code points: 89233
+# Total code points: 94204
# ================================================
@@ -1583,6 +1593,7 @@ A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
0951..0954 ; Inherited # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
1AB0..1ABD ; Inherited # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE ; Inherited # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0 ; Inherited # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1CD0..1CD2 ; Inherited # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
1CD4..1CE0 ; Inherited # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
1CE2..1CE8 ; Inherited # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
@@ -1610,7 +1621,7 @@ FE20..FE2D ; Inherited # Mn [14] COMBINING LIGATURE LEFT HALF..COMBINING CON
1D1AA..1D1AD ; Inherited # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 571
+# Total code points: 573
# ================================================
@@ -1783,8 +1794,9 @@ A823..A824 ; Syloti_Nagri # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI
A825..A826 ; Syloti_Nagri # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827 ; Syloti_Nagri # Mc SYLOTI NAGRI VOWEL SIGN OO
A828..A82B ; Syloti_Nagri # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+A82C ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
-# Total code points: 44
+# Total code points: 45
# ================================================
@@ -2063,8 +2075,9 @@ AADE..AADF ; Tai_Viet # Po [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI
A4D0..A4F7 ; Lisu # Lo [40] LISU LETTER BA..LISU LETTER OE
A4F8..A4FD ; Lisu # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
A4FE..A4FF ; Lisu # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
+11FB0 ; Lisu # Lo LISU LETTER YHA
-# Total code points: 48
+# Total code points: 49
# ================================================
@@ -2217,8 +2230,9 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI
11140..11143 ; Chakma # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
11144 ; Chakma # Lo CHAKMA LETTER LHAA
11145..11146 ; Chakma # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; Chakma # Lo CHAKMA LETTER VAA
-# Total code points: 70
+# Total code points: 71
# ================================================
@@ -2259,13 +2273,15 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI
111C5..111C8 ; Sharada # Po [4] SHARADA DANDA..SHARADA SEPARATOR
111C9..111CC ; Sharada # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
111CD ; Sharada # Po SHARADA SUTRA MARK
+111CE ; Sharada # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; Sharada # Mn SHARADA SIGN INVERTED CANDRABINDU
111D0..111D9 ; Sharada # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA ; Sharada # Lo SHARADA EKAM
111DB ; Sharada # Po SHARADA SIGN SIDDHAM
111DC ; Sharada # Lo SHARADA HEADSTROKE
111DD..111DF ; Sharada # Po [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
-# Total code points: 94
+# Total code points: 96
# ================================================
@@ -2650,12 +2666,12 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI
11447..1144A ; Newa # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
1144B..1144F ; Newa # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN
11450..11459 ; Newa # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-1145B ; Newa # Po NEWA PLACEHOLDER MARK
+1145A..1145B ; Newa # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
1145D ; Newa # Po NEWA INSERTION SIGN
1145E ; Newa # Mn NEWA SANDHI MARK
-1145F ; Newa # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; Newa # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
-# Total code points: 94
+# Total code points: 97
# ================================================
@@ -2668,9 +2684,10 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI
16FE0 ; Tangut # Lm TANGUT ITERATION MARK
17000..187F7 ; Tangut # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; Tangut # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18AFF ; Tangut # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768
+18D00..18D08 ; Tangut # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
-# Total code points: 6892
+# Total code points: 6914
# ================================================
@@ -2835,4 +2852,49 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI
# Total code points: 59
+# ================================================
+
+10FB0..10FC4 ; Chorasmian # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FC5..10FCB ; Chorasmian # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
+
+# Total code points: 28
+
+# ================================================
+
+11900..11906 ; Dives_Akuru # Lo [7] DIVES AKURU LETTER A..DIVES AKURU LETTER E
+11909 ; Dives_Akuru # Lo DIVES AKURU LETTER O
+1190C..11913 ; Dives_Akuru # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; Dives_Akuru # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; Dives_Akuru # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935 ; Dives_Akuru # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; Dives_Akuru # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; Dives_Akuru # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D ; Dives_Akuru # Mc DIVES AKURU SIGN HALANTA
+1193E ; Dives_Akuru # Mn DIVES AKURU VIRAMA
+1193F ; Dives_Akuru # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; Dives_Akuru # Mc DIVES AKURU MEDIAL YA
+11941 ; Dives_Akuru # Lo DIVES AKURU INITIAL RA
+11942 ; Dives_Akuru # Mc DIVES AKURU MEDIAL RA
+11943 ; Dives_Akuru # Mn DIVES AKURU SIGN NUKTA
+11944..11946 ; Dives_Akuru # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+11950..11959 ; Dives_Akuru # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
+
+# Total code points: 72
+
+# ================================================
+
+16FE4 ; Khitan_Small_Script # Mn KHITAN SMALL SCRIPT FILLER
+18B00..18CD5 ; Khitan_Small_Script # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5
+
+# Total code points: 471
+
+# ================================================
+
+10E80..10EA9 ; Yezidi # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC ; Yezidi # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EAD ; Yezidi # Pd YEZIDI HYPHENATION MARK
+10EB0..10EB1 ; Yezidi # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+
+# Total code points: 47
+
# EOF
diff --git a/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt b/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt
index 1c04aacf975..2a1a5a1d6b1 100644
--- a/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt
+++ b/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt
@@ -1,5 +1,5 @@
-# SpecialCasing-12.1.0.txt
-# Date: 2019-03-10, 10:53:28 GMT
+# SpecialCasing-13.0.0.txt
+# Date: 2019-09-08, 23:31:24 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt b/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt
index f1c39295f4b..ee386cd9203 100644
--- a/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt
+++ b/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt
@@ -1,5 +1,5 @@
-# StandardizedVariants-12.1.0.txt
-# Date: 2019-03-05, 23:03:00 GMT [KW, LI, RP]
+# StandardizedVariants-13.0.0.txt
+# Date: 2019-05-21, 17:56:00 GMT [KW, LI, RP]
# © 2019 Unicode®, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -26,7 +26,7 @@
#
# For more information on standardized variation sequences,
# see Section 23.4, Variation Selectors,
-# in The Unicode Standard, Version 12.0.
+# in The Unicode Standard, Version 13.0.
#
# For more information on the Ideographic Variation Database,
# see http://www.unicode.org/ivd/
diff --git a/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt b/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt
index e65aec52f71..e22f967bbab 100644
--- a/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt
+++ b/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt
@@ -2118,6 +2118,16 @@
08BB;ARABIC LETTER AFRICAN FEH;Lo;0;AL;;;;;N;;;;;
08BC;ARABIC LETTER AFRICAN QAF;Lo;0;AL;;;;;N;;;;;
08BD;ARABIC LETTER AFRICAN NOON;Lo;0;AL;;;;;N;;;;;
+08BE;ARABIC LETTER PEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+08BF;ARABIC LETTER TEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+08C0;ARABIC LETTER TTEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+08C1;ARABIC LETTER TCHEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+08C2;ARABIC LETTER KEHEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+08C3;ARABIC LETTER GHAIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08C4;ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08C5;ARABIC LETTER JEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08C6;ARABIC LETTER JEEM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+08C7;ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;;
08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;;
08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;;
08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;;
@@ -2621,6 +2631,7 @@
0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0B55;ORIYA SIGN OVERLINE;Mn;0;NSM;;;;;N;;;;;
0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
@@ -2911,6 +2922,7 @@
0D01;MALAYALAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D04;MALAYALAM LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;
0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
@@ -3024,6 +3036,7 @@
0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;;
0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;;
0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;;
+0D81;SINHALA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
@@ -6044,6 +6057,8 @@
1ABC;COMBINING DOUBLE PARENTHESES ABOVE;Mn;230;NSM;;;;;N;;;;;
1ABD;COMBINING PARENTHESES BELOW;Mn;220;NSM;;;;;N;;;;;
1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;;
+1ABF;COMBINING LATIN SMALL LETTER W BELOW;Mn;220;NSM;;;;;N;;;;;
+1AC0;COMBINING LATIN SMALL LETTER TURNED W BELOW;Mn;220;NSM;;;;;N;;;;;
1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;;
1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;;
1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;;
@@ -10133,6 +10148,7 @@
2B93;NEWLINE RIGHT;So;0;ON;;;;;N;;;;;
2B94;FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE;So;0;ON;;;;;N;;;;;
2B95;RIGHTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B97;SYMBOL FOR TYPE A ELECTRONICS;So;0;ON;;;;;N;;;;;
2B98;THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
2B99;THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
2B9A;THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD;So;0;ON;;;;;N;;;;;
@@ -10776,6 +10792,9 @@
2E4D;PARAGRAPHUS MARK;Po;0;ON;;;;;N;;;;;
2E4E;PUNCTUS ELEVATUS MARK;Po;0;ON;;;;;N;;;;;
2E4F;CORNISH VERSE DIVIDER;Po;0;ON;;;;;N;;;;;
+2E50;CROSS PATTY WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;;
+2E51;CROSS PATTY WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;;
+2E52;TIRONIAN SIGN CAPITAL ET;Po;0;ON;;;;;N;;;;;
2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
@@ -11550,6 +11569,11 @@
31B8;BOPOMOFO LETTER GH;Lo;0;L;;;;;N;;;;;
31B9;BOPOMOFO LETTER LH;Lo;0;L;;;;;N;;;;;
31BA;BOPOMOFO LETTER ZY;Lo;0;L;;;;;N;;;;;
+31BB;BOPOMOFO FINAL LETTER G;Lo;0;L;;;;;N;;;;;
+31BC;BOPOMOFO LETTER GW;Lo;0;L;;;;;N;;;;;
+31BD;BOPOMOFO LETTER KW;Lo;0;L;;;;;N;;;;;
+31BE;BOPOMOFO LETTER OE;Lo;0;L;;;;;N;;;;;
+31BF;BOPOMOFO LETTER AH;Lo;0;L;;;;;N;;;;;
31C0;CJK STROKE T;So;0;ON;;;;;N;;;;;
31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;;
31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;;
@@ -12114,7 +12138,7 @@
33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
33FF;SQUARE GAL;So;0;ON;<square> 0067 0061 006C;;;;N;;;;;
3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
-4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+4DBF;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;;
4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;;
4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;;
@@ -12180,7 +12204,7 @@
4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FEF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+9FFC;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
@@ -14130,6 +14154,12 @@ A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2
A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794;
A7C5;LATIN CAPITAL LETTER S WITH HOOK;Lu;0;L;;;;;N;;;;0282;
A7C6;LATIN CAPITAL LETTER Z WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;1D8E;
+A7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7C8;
+A7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7
+A7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA;
+A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9
+A7F5;LATIN CAPITAL LETTER REVERSED HALF H;Lu;0;L;;;;;N;;;;A7F6;
+A7F6;LATIN SMALL LETTER REVERSED HALF H;Ll;0;L;;;;;N;;;A7F5;;A7F5
A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;;
A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L;<super> 0126;;;;N;;;;;
A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L;<super> 0153;;;;N;;;;;
@@ -14183,6 +14213,7 @@ A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;;
A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;;
A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;;
A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;;
+A82C;SYLOTI NAGRI SIGN ALTERNATE HASANTA;Mn;9;NSM;;;;;N;;;;;
A830;NORTH INDIC FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
A831;NORTH INDIC FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
A832;NORTH INDIC FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
@@ -14897,6 +14928,10 @@ AB64;LATIN SMALL LETTER INVERTED ALPHA;Ll;0;L;;;;;N;;;;;
AB65;GREEK LETTER SMALL CAPITAL OMEGA;Ll;0;L;;;;;N;;;;;
AB66;LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
AB67;LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+AB68;LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+AB69;MODIFIER LETTER SMALL TURNED W;Lm;0;L;<super> 028D;;;;N;;;;;
+AB6A;MODIFIER LETTER LEFT TACK;Sk;0;ON;;;;;N;;;;;
+AB6B;MODIFIER LETTER RIGHT TACK;Sk;0;ON;;;;;N;;;;;
AB70;CHEROKEE SMALL LETTER A;Ll;0;L;;;;;N;;;13A0;;13A0
AB71;CHEROKEE SMALL LETTER E;Ll;0;L;;;;;N;;;13A1;;13A1
AB72;CHEROKEE SMALL LETTER I;Ll;0;L;;;;;N;;;13A2;;13A2
@@ -17086,6 +17121,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;;
1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;;
1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;;
+1019C;ASCIA SYMBOL;So;0;ON;;;;;N;;;;;
101A0;GREEK SYMBOL TAU RHO;So;0;ON;;;;;N;;;;;
101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;;
101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;;
@@ -19057,6 +19093,53 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10E7C;RUMI FRACTION ONE QUARTER;No;0;AN;;;;1/4;N;;;;;
10E7D;RUMI FRACTION ONE THIRD;No;0;AN;;;;1/3;N;;;;;
10E7E;RUMI FRACTION TWO THIRDS;No;0;AN;;;;2/3;N;;;;;
+10E80;YEZIDI LETTER ELIF;Lo;0;R;;;;;N;;;;;
+10E81;YEZIDI LETTER BE;Lo;0;R;;;;;N;;;;;
+10E82;YEZIDI LETTER PE;Lo;0;R;;;;;N;;;;;
+10E83;YEZIDI LETTER PHE;Lo;0;R;;;;;N;;;;;
+10E84;YEZIDI LETTER THE;Lo;0;R;;;;;N;;;;;
+10E85;YEZIDI LETTER SE;Lo;0;R;;;;;N;;;;;
+10E86;YEZIDI LETTER CIM;Lo;0;R;;;;;N;;;;;
+10E87;YEZIDI LETTER CHIM;Lo;0;R;;;;;N;;;;;
+10E88;YEZIDI LETTER CHHIM;Lo;0;R;;;;;N;;;;;
+10E89;YEZIDI LETTER HHA;Lo;0;R;;;;;N;;;;;
+10E8A;YEZIDI LETTER XA;Lo;0;R;;;;;N;;;;;
+10E8B;YEZIDI LETTER DAL;Lo;0;R;;;;;N;;;;;
+10E8C;YEZIDI LETTER ZAL;Lo;0;R;;;;;N;;;;;
+10E8D;YEZIDI LETTER RA;Lo;0;R;;;;;N;;;;;
+10E8E;YEZIDI LETTER RHA;Lo;0;R;;;;;N;;;;;
+10E8F;YEZIDI LETTER ZA;Lo;0;R;;;;;N;;;;;
+10E90;YEZIDI LETTER JA;Lo;0;R;;;;;N;;;;;
+10E91;YEZIDI LETTER SIN;Lo;0;R;;;;;N;;;;;
+10E92;YEZIDI LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10E93;YEZIDI LETTER SAD;Lo;0;R;;;;;N;;;;;
+10E94;YEZIDI LETTER DAD;Lo;0;R;;;;;N;;;;;
+10E95;YEZIDI LETTER TA;Lo;0;R;;;;;N;;;;;
+10E96;YEZIDI LETTER ZE;Lo;0;R;;;;;N;;;;;
+10E97;YEZIDI LETTER EYN;Lo;0;R;;;;;N;;;;;
+10E98;YEZIDI LETTER XHEYN;Lo;0;R;;;;;N;;;;;
+10E99;YEZIDI LETTER FA;Lo;0;R;;;;;N;;;;;
+10E9A;YEZIDI LETTER VA;Lo;0;R;;;;;N;;;;;
+10E9B;YEZIDI LETTER VA ALTERNATE FORM;Lo;0;R;;;;;N;;;;;
+10E9C;YEZIDI LETTER QAF;Lo;0;R;;;;;N;;;;;
+10E9D;YEZIDI LETTER KAF;Lo;0;R;;;;;N;;;;;
+10E9E;YEZIDI LETTER KHAF;Lo;0;R;;;;;N;;;;;
+10E9F;YEZIDI LETTER GAF;Lo;0;R;;;;;N;;;;;
+10EA0;YEZIDI LETTER LAM;Lo;0;R;;;;;N;;;;;
+10EA1;YEZIDI LETTER MIM;Lo;0;R;;;;;N;;;;;
+10EA2;YEZIDI LETTER NUN;Lo;0;R;;;;;N;;;;;
+10EA3;YEZIDI LETTER UM;Lo;0;R;;;;;N;;;;;
+10EA4;YEZIDI LETTER WAW;Lo;0;R;;;;;N;;;;;
+10EA5;YEZIDI LETTER OW;Lo;0;R;;;;;N;;;;;
+10EA6;YEZIDI LETTER EW;Lo;0;R;;;;;N;;;;;
+10EA7;YEZIDI LETTER HAY;Lo;0;R;;;;;N;;;;;
+10EA8;YEZIDI LETTER YOT;Lo;0;R;;;;;N;;;;;
+10EA9;YEZIDI LETTER ET;Lo;0;R;;;;;N;;;;;
+10EAB;YEZIDI COMBINING HAMZA MARK;Mn;230;NSM;;;;;N;;;;;
+10EAC;YEZIDI COMBINING MADDA MARK;Mn;230;NSM;;;;;N;;;;;
+10EAD;YEZIDI HYPHENATION MARK;Pd;0;R;;;;;N;;;;;
+10EB0;YEZIDI LETTER LAM WITH DOT ABOVE;Lo;0;R;;;;;N;;;;;
+10EB1;YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE;Lo;0;R;;;;;N;;;;;
10F00;OLD SOGDIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
10F01;OLD SOGDIAN LETTER FINAL ALEPH;Lo;0;R;;;;;N;;;;;
10F02;OLD SOGDIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
@@ -19139,6 +19222,34 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;;
10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;;
+10FB0;CHORASMIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;;
+10FB1;CHORASMIAN LETTER SMALL ALEPH;Lo;0;R;;;;;N;;;;;
+10FB2;CHORASMIAN LETTER BETH;Lo;0;R;;;;;N;;;;;
+10FB3;CHORASMIAN LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+10FB4;CHORASMIAN LETTER DALETH;Lo;0;R;;;;;N;;;;;
+10FB5;CHORASMIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10FB6;CHORASMIAN LETTER WAW;Lo;0;R;;;;;N;;;;;
+10FB7;CHORASMIAN LETTER CURLED WAW;Lo;0;R;;;;;N;;;;;
+10FB8;CHORASMIAN LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+10FB9;CHORASMIAN LETTER HETH;Lo;0;R;;;;;N;;;;;
+10FBA;CHORASMIAN LETTER YODH;Lo;0;R;;;;;N;;;;;
+10FBB;CHORASMIAN LETTER KAPH;Lo;0;R;;;;;N;;;;;
+10FBC;CHORASMIAN LETTER LAMEDH;Lo;0;R;;;;;N;;;;;
+10FBD;CHORASMIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+10FBE;CHORASMIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+10FBF;CHORASMIAN LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+10FC0;CHORASMIAN LETTER AYIN;Lo;0;R;;;;;N;;;;;
+10FC1;CHORASMIAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10FC2;CHORASMIAN LETTER RESH;Lo;0;R;;;;;N;;;;;
+10FC3;CHORASMIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10FC4;CHORASMIAN LETTER TAW;Lo;0;R;;;;;N;;;;;
+10FC5;CHORASMIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10FC6;CHORASMIAN NUMBER TWO;No;0;R;;;;2;N;;;;;
+10FC7;CHORASMIAN NUMBER THREE;No;0;R;;;;3;N;;;;;
+10FC8;CHORASMIAN NUMBER FOUR;No;0;R;;;;4;N;;;;;
+10FC9;CHORASMIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10FCA;CHORASMIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10FCB;CHORASMIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
10FE0;ELYMAIC LETTER ALEPH;Lo;0;R;;;;;N;;;;;
10FE1;ELYMAIC LETTER BETH;Lo;0;R;;;;;N;;;;;
10FE2;ELYMAIC LETTER GIMEL;Lo;0;R;;;;;N;;;;;
@@ -19443,6 +19554,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11144;CHAKMA LETTER LHAA;Lo;0;L;;;;;N;;;;;
11145;CHAKMA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
11146;CHAKMA VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;
+11147;CHAKMA LETTER VAA;Lo;0;L;;;;;N;;;;;
11150;MAHAJANI LETTER A;Lo;0;L;;;;;N;;;;;
11151;MAHAJANI LETTER I;Lo;0;L;;;;;N;;;;;
11152;MAHAJANI LETTER U;Lo;0;L;;;;;N;;;;;
@@ -19560,6 +19672,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
111CB;SHARADA VOWEL MODIFIER MARK;Mn;0;NSM;;;;;N;;;;;
111CC;SHARADA EXTRA SHORT VOWEL MARK;Mn;0;NSM;;;;;N;;;;;
111CD;SHARADA SUTRA MARK;Po;0;L;;;;;N;;;;;
+111CE;SHARADA VOWEL SIGN PRISHTHAMATRA E;Mc;0;L;;;;;N;;;;;
+111CF;SHARADA SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
111D0;SHARADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
111D1;SHARADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
111D2;SHARADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
@@ -19941,10 +20055,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11457;NEWA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
11458;NEWA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
11459;NEWA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1145A;NEWA DOUBLE COMMA;Po;0;L;;;;;N;;;;;
1145B;NEWA PLACEHOLDER MARK;Po;0;L;;;;;N;;;;;
1145D;NEWA INSERTION SIGN;Po;0;L;;;;;N;;;;;
1145E;NEWA SANDHI MARK;Mn;230;NSM;;;;;N;;;;;
1145F;NEWA LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;
+11460;NEWA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+11461;NEWA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
11480;TIRHUTA ANJI;Lo;0;L;;;;;N;;;;;
11481;TIRHUTA LETTER A;Lo;0;L;;;;;N;;;;;
11482;TIRHUTA LETTER AA;Lo;0;L;;;;;N;;;;;
@@ -20480,6 +20597,78 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
118F1;WARANG CITI NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
118F2;WARANG CITI NUMBER NINETY;No;0;L;;;;90;N;;;;;
118FF;WARANG CITI OM;Lo;0;L;;;;;N;;;;;
+11900;DIVES AKURU LETTER A;Lo;0;L;;;;;N;;;;;
+11901;DIVES AKURU LETTER AA;Lo;0;L;;;;;N;;;;;
+11902;DIVES AKURU LETTER I;Lo;0;L;;;;;N;;;;;
+11903;DIVES AKURU LETTER II;Lo;0;L;;;;;N;;;;;
+11904;DIVES AKURU LETTER U;Lo;0;L;;;;;N;;;;;
+11905;DIVES AKURU LETTER UU;Lo;0;L;;;;;N;;;;;
+11906;DIVES AKURU LETTER E;Lo;0;L;;;;;N;;;;;
+11909;DIVES AKURU LETTER O;Lo;0;L;;;;;N;;;;;
+1190C;DIVES AKURU LETTER KA;Lo;0;L;;;;;N;;;;;
+1190D;DIVES AKURU LETTER KHA;Lo;0;L;;;;;N;;;;;
+1190E;DIVES AKURU LETTER GA;Lo;0;L;;;;;N;;;;;
+1190F;DIVES AKURU LETTER GHA;Lo;0;L;;;;;N;;;;;
+11910;DIVES AKURU LETTER NGA;Lo;0;L;;;;;N;;;;;
+11911;DIVES AKURU LETTER CA;Lo;0;L;;;;;N;;;;;
+11912;DIVES AKURU LETTER CHA;Lo;0;L;;;;;N;;;;;
+11913;DIVES AKURU LETTER JA;Lo;0;L;;;;;N;;;;;
+11915;DIVES AKURU LETTER NYA;Lo;0;L;;;;;N;;;;;
+11916;DIVES AKURU LETTER TTA;Lo;0;L;;;;;N;;;;;
+11918;DIVES AKURU LETTER DDA;Lo;0;L;;;;;N;;;;;
+11919;DIVES AKURU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1191A;DIVES AKURU LETTER NNA;Lo;0;L;;;;;N;;;;;
+1191B;DIVES AKURU LETTER TA;Lo;0;L;;;;;N;;;;;
+1191C;DIVES AKURU LETTER THA;Lo;0;L;;;;;N;;;;;
+1191D;DIVES AKURU LETTER DA;Lo;0;L;;;;;N;;;;;
+1191E;DIVES AKURU LETTER DHA;Lo;0;L;;;;;N;;;;;
+1191F;DIVES AKURU LETTER NA;Lo;0;L;;;;;N;;;;;
+11920;DIVES AKURU LETTER PA;Lo;0;L;;;;;N;;;;;
+11921;DIVES AKURU LETTER PHA;Lo;0;L;;;;;N;;;;;
+11922;DIVES AKURU LETTER BA;Lo;0;L;;;;;N;;;;;
+11923;DIVES AKURU LETTER BHA;Lo;0;L;;;;;N;;;;;
+11924;DIVES AKURU LETTER MA;Lo;0;L;;;;;N;;;;;
+11925;DIVES AKURU LETTER YA;Lo;0;L;;;;;N;;;;;
+11926;DIVES AKURU LETTER YYA;Lo;0;L;;;;;N;;;;;
+11927;DIVES AKURU LETTER RA;Lo;0;L;;;;;N;;;;;
+11928;DIVES AKURU LETTER LA;Lo;0;L;;;;;N;;;;;
+11929;DIVES AKURU LETTER VA;Lo;0;L;;;;;N;;;;;
+1192A;DIVES AKURU LETTER SHA;Lo;0;L;;;;;N;;;;;
+1192B;DIVES AKURU LETTER SSA;Lo;0;L;;;;;N;;;;;
+1192C;DIVES AKURU LETTER SA;Lo;0;L;;;;;N;;;;;
+1192D;DIVES AKURU LETTER HA;Lo;0;L;;;;;N;;;;;
+1192E;DIVES AKURU LETTER LLA;Lo;0;L;;;;;N;;;;;
+1192F;DIVES AKURU LETTER ZA;Lo;0;L;;;;;N;;;;;
+11930;DIVES AKURU VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11931;DIVES AKURU VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+11932;DIVES AKURU VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+11933;DIVES AKURU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+11934;DIVES AKURU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+11935;DIVES AKURU VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+11937;DIVES AKURU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+11938;DIVES AKURU VOWEL SIGN O;Mc;0;L;11935 11930;;;;N;;;;;
+1193B;DIVES AKURU SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1193C;DIVES AKURU SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+1193D;DIVES AKURU SIGN HALANTA;Mc;9;L;;;;;N;;;;;
+1193E;DIVES AKURU VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1193F;DIVES AKURU PREFIXED NASAL SIGN;Lo;0;L;;;;;N;;;;;
+11940;DIVES AKURU MEDIAL YA;Mc;0;L;;;;;N;;;;;
+11941;DIVES AKURU INITIAL RA;Lo;0;L;;;;;N;;;;;
+11942;DIVES AKURU MEDIAL RA;Mc;0;L;;;;;N;;;;;
+11943;DIVES AKURU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+11944;DIVES AKURU DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+11945;DIVES AKURU GAP FILLER;Po;0;L;;;;;N;;;;;
+11946;DIVES AKURU END OF TEXT MARK;Po;0;L;;;;;N;;;;;
+11950;DIVES AKURU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11951;DIVES AKURU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11952;DIVES AKURU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11953;DIVES AKURU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11954;DIVES AKURU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11955;DIVES AKURU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11956;DIVES AKURU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11957;DIVES AKURU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11958;DIVES AKURU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11959;DIVES AKURU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
119A0;NANDINAGARI LETTER A;Lo;0;L;;;;;N;;;;;
119A1;NANDINAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
119A2;NANDINAGARI LETTER I;Lo;0;L;;;;;N;;;;;
@@ -21085,6 +21274,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11EF6;MAKASAR VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
11EF7;MAKASAR PASSIMBANG;Po;0;L;;;;;N;;;;;
11EF8;MAKASAR END OF SECTION;Po;0;L;;;;;N;;;;;
+11FB0;LISU LETTER YHA;Lo;0;L;;;;;N;;;;;
11FC0;TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH;No;0;L;;;;1/320;N;;;;;
11FC1;TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;;
11FC2;TAMIL FRACTION ONE EIGHTIETH;No;0;L;;;;1/80;N;;;;;
@@ -25052,6 +25242,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
16FE1;NUSHU ITERATION MARK;Lm;0;L;;;;;N;;;;;
16FE2;OLD CHINESE HOOK MARK;Po;0;ON;;;;;N;;;;;
16FE3;OLD CHINESE ITERATION MARK;Lm;0;L;;;;;N;;;;;
+16FE4;KHITAN SMALL SCRIPT FILLER;Mn;0;NSM;;;;;N;;;;;
+16FF0;VIETNAMESE ALTERNATE READING MARK CA;Mc;6;L;;;;;N;;;;;
+16FF1;VIETNAMESE ALTERNATE READING MARK NHAY;Mc;6;L;;;;;N;;;;;
17000;<Tangut Ideograph, First>;Lo;0;L;;;;;N;;;;;
187F7;<Tangut Ideograph, Last>;Lo;0;L;;;;;N;;;;;
18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;;
@@ -25809,6 +26002,491 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
18AF0;TANGUT COMPONENT-753;Lo;0;L;;;;;N;;;;;
18AF1;TANGUT COMPONENT-754;Lo;0;L;;;;;N;;;;;
18AF2;TANGUT COMPONENT-755;Lo;0;L;;;;;N;;;;;
+18AF3;TANGUT COMPONENT-756;Lo;0;L;;;;;N;;;;;
+18AF4;TANGUT COMPONENT-757;Lo;0;L;;;;;N;;;;;
+18AF5;TANGUT COMPONENT-758;Lo;0;L;;;;;N;;;;;
+18AF6;TANGUT COMPONENT-759;Lo;0;L;;;;;N;;;;;
+18AF7;TANGUT COMPONENT-760;Lo;0;L;;;;;N;;;;;
+18AF8;TANGUT COMPONENT-761;Lo;0;L;;;;;N;;;;;
+18AF9;TANGUT COMPONENT-762;Lo;0;L;;;;;N;;;;;
+18AFA;TANGUT COMPONENT-763;Lo;0;L;;;;;N;;;;;
+18AFB;TANGUT COMPONENT-764;Lo;0;L;;;;;N;;;;;
+18AFC;TANGUT COMPONENT-765;Lo;0;L;;;;;N;;;;;
+18AFD;TANGUT COMPONENT-766;Lo;0;L;;;;;N;;;;;
+18AFE;TANGUT COMPONENT-767;Lo;0;L;;;;;N;;;;;
+18AFF;TANGUT COMPONENT-768;Lo;0;L;;;;;N;;;;;
+18B00;KHITAN SMALL SCRIPT CHARACTER-18B00;Lo;0;L;;;;;N;;;;;
+18B01;KHITAN SMALL SCRIPT CHARACTER-18B01;Lo;0;L;;;;;N;;;;;
+18B02;KHITAN SMALL SCRIPT CHARACTER-18B02;Lo;0;L;;;;;N;;;;;
+18B03;KHITAN SMALL SCRIPT CHARACTER-18B03;Lo;0;L;;;;;N;;;;;
+18B04;KHITAN SMALL SCRIPT CHARACTER-18B04;Lo;0;L;;;;;N;;;;;
+18B05;KHITAN SMALL SCRIPT CHARACTER-18B05;Lo;0;L;;;;;N;;;;;
+18B06;KHITAN SMALL SCRIPT CHARACTER-18B06;Lo;0;L;;;;;N;;;;;
+18B07;KHITAN SMALL SCRIPT CHARACTER-18B07;Lo;0;L;;;;;N;;;;;
+18B08;KHITAN SMALL SCRIPT CHARACTER-18B08;Lo;0;L;;;;;N;;;;;
+18B09;KHITAN SMALL SCRIPT CHARACTER-18B09;Lo;0;L;;;;;N;;;;;
+18B0A;KHITAN SMALL SCRIPT CHARACTER-18B0A;Lo;0;L;;;;;N;;;;;
+18B0B;KHITAN SMALL SCRIPT CHARACTER-18B0B;Lo;0;L;;;;;N;;;;;
+18B0C;KHITAN SMALL SCRIPT CHARACTER-18B0C;Lo;0;L;;;;;N;;;;;
+18B0D;KHITAN SMALL SCRIPT CHARACTER-18B0D;Lo;0;L;;;;;N;;;;;
+18B0E;KHITAN SMALL SCRIPT CHARACTER-18B0E;Lo;0;L;;;;;N;;;;;
+18B0F;KHITAN SMALL SCRIPT CHARACTER-18B0F;Lo;0;L;;;;;N;;;;;
+18B10;KHITAN SMALL SCRIPT CHARACTER-18B10;Lo;0;L;;;;;N;;;;;
+18B11;KHITAN SMALL SCRIPT CHARACTER-18B11;Lo;0;L;;;;;N;;;;;
+18B12;KHITAN SMALL SCRIPT CHARACTER-18B12;Lo;0;L;;;;;N;;;;;
+18B13;KHITAN SMALL SCRIPT CHARACTER-18B13;Lo;0;L;;;;;N;;;;;
+18B14;KHITAN SMALL SCRIPT CHARACTER-18B14;Lo;0;L;;;;;N;;;;;
+18B15;KHITAN SMALL SCRIPT CHARACTER-18B15;Lo;0;L;;;;;N;;;;;
+18B16;KHITAN SMALL SCRIPT CHARACTER-18B16;Lo;0;L;;;;;N;;;;;
+18B17;KHITAN SMALL SCRIPT CHARACTER-18B17;Lo;0;L;;;;;N;;;;;
+18B18;KHITAN SMALL SCRIPT CHARACTER-18B18;Lo;0;L;;;;;N;;;;;
+18B19;KHITAN SMALL SCRIPT CHARACTER-18B19;Lo;0;L;;;;;N;;;;;
+18B1A;KHITAN SMALL SCRIPT CHARACTER-18B1A;Lo;0;L;;;;;N;;;;;
+18B1B;KHITAN SMALL SCRIPT CHARACTER-18B1B;Lo;0;L;;;;;N;;;;;
+18B1C;KHITAN SMALL SCRIPT CHARACTER-18B1C;Lo;0;L;;;;;N;;;;;
+18B1D;KHITAN SMALL SCRIPT CHARACTER-18B1D;Lo;0;L;;;;;N;;;;;
+18B1E;KHITAN SMALL SCRIPT CHARACTER-18B1E;Lo;0;L;;;;;N;;;;;
+18B1F;KHITAN SMALL SCRIPT CHARACTER-18B1F;Lo;0;L;;;;;N;;;;;
+18B20;KHITAN SMALL SCRIPT CHARACTER-18B20;Lo;0;L;;;;;N;;;;;
+18B21;KHITAN SMALL SCRIPT CHARACTER-18B21;Lo;0;L;;;;;N;;;;;
+18B22;KHITAN SMALL SCRIPT CHARACTER-18B22;Lo;0;L;;;;;N;;;;;
+18B23;KHITAN SMALL SCRIPT CHARACTER-18B23;Lo;0;L;;;;;N;;;;;
+18B24;KHITAN SMALL SCRIPT CHARACTER-18B24;Lo;0;L;;;;;N;;;;;
+18B25;KHITAN SMALL SCRIPT CHARACTER-18B25;Lo;0;L;;;;;N;;;;;
+18B26;KHITAN SMALL SCRIPT CHARACTER-18B26;Lo;0;L;;;;;N;;;;;
+18B27;KHITAN SMALL SCRIPT CHARACTER-18B27;Lo;0;L;;;;;N;;;;;
+18B28;KHITAN SMALL SCRIPT CHARACTER-18B28;Lo;0;L;;;;;N;;;;;
+18B29;KHITAN SMALL SCRIPT CHARACTER-18B29;Lo;0;L;;;;;N;;;;;
+18B2A;KHITAN SMALL SCRIPT CHARACTER-18B2A;Lo;0;L;;;;;N;;;;;
+18B2B;KHITAN SMALL SCRIPT CHARACTER-18B2B;Lo;0;L;;;;;N;;;;;
+18B2C;KHITAN SMALL SCRIPT CHARACTER-18B2C;Lo;0;L;;;;;N;;;;;
+18B2D;KHITAN SMALL SCRIPT CHARACTER-18B2D;Lo;0;L;;;;;N;;;;;
+18B2E;KHITAN SMALL SCRIPT CHARACTER-18B2E;Lo;0;L;;;;;N;;;;;
+18B2F;KHITAN SMALL SCRIPT CHARACTER-18B2F;Lo;0;L;;;;;N;;;;;
+18B30;KHITAN SMALL SCRIPT CHARACTER-18B30;Lo;0;L;;;;;N;;;;;
+18B31;KHITAN SMALL SCRIPT CHARACTER-18B31;Lo;0;L;;;;;N;;;;;
+18B32;KHITAN SMALL SCRIPT CHARACTER-18B32;Lo;0;L;;;;;N;;;;;
+18B33;KHITAN SMALL SCRIPT CHARACTER-18B33;Lo;0;L;;;;;N;;;;;
+18B34;KHITAN SMALL SCRIPT CHARACTER-18B34;Lo;0;L;;;;;N;;;;;
+18B35;KHITAN SMALL SCRIPT CHARACTER-18B35;Lo;0;L;;;;;N;;;;;
+18B36;KHITAN SMALL SCRIPT CHARACTER-18B36;Lo;0;L;;;;;N;;;;;
+18B37;KHITAN SMALL SCRIPT CHARACTER-18B37;Lo;0;L;;;;;N;;;;;
+18B38;KHITAN SMALL SCRIPT CHARACTER-18B38;Lo;0;L;;;;;N;;;;;
+18B39;KHITAN SMALL SCRIPT CHARACTER-18B39;Lo;0;L;;;;;N;;;;;
+18B3A;KHITAN SMALL SCRIPT CHARACTER-18B3A;Lo;0;L;;;;;N;;;;;
+18B3B;KHITAN SMALL SCRIPT CHARACTER-18B3B;Lo;0;L;;;;;N;;;;;
+18B3C;KHITAN SMALL SCRIPT CHARACTER-18B3C;Lo;0;L;;;;;N;;;;;
+18B3D;KHITAN SMALL SCRIPT CHARACTER-18B3D;Lo;0;L;;;;;N;;;;;
+18B3E;KHITAN SMALL SCRIPT CHARACTER-18B3E;Lo;0;L;;;;;N;;;;;
+18B3F;KHITAN SMALL SCRIPT CHARACTER-18B3F;Lo;0;L;;;;;N;;;;;
+18B40;KHITAN SMALL SCRIPT CHARACTER-18B40;Lo;0;L;;;;;N;;;;;
+18B41;KHITAN SMALL SCRIPT CHARACTER-18B41;Lo;0;L;;;;;N;;;;;
+18B42;KHITAN SMALL SCRIPT CHARACTER-18B42;Lo;0;L;;;;;N;;;;;
+18B43;KHITAN SMALL SCRIPT CHARACTER-18B43;Lo;0;L;;;;;N;;;;;
+18B44;KHITAN SMALL SCRIPT CHARACTER-18B44;Lo;0;L;;;;;N;;;;;
+18B45;KHITAN SMALL SCRIPT CHARACTER-18B45;Lo;0;L;;;;;N;;;;;
+18B46;KHITAN SMALL SCRIPT CHARACTER-18B46;Lo;0;L;;;;;N;;;;;
+18B47;KHITAN SMALL SCRIPT CHARACTER-18B47;Lo;0;L;;;;;N;;;;;
+18B48;KHITAN SMALL SCRIPT CHARACTER-18B48;Lo;0;L;;;;;N;;;;;
+18B49;KHITAN SMALL SCRIPT CHARACTER-18B49;Lo;0;L;;;;;N;;;;;
+18B4A;KHITAN SMALL SCRIPT CHARACTER-18B4A;Lo;0;L;;;;;N;;;;;
+18B4B;KHITAN SMALL SCRIPT CHARACTER-18B4B;Lo;0;L;;;;;N;;;;;
+18B4C;KHITAN SMALL SCRIPT CHARACTER-18B4C;Lo;0;L;;;;;N;;;;;
+18B4D;KHITAN SMALL SCRIPT CHARACTER-18B4D;Lo;0;L;;;;;N;;;;;
+18B4E;KHITAN SMALL SCRIPT CHARACTER-18B4E;Lo;0;L;;;;;N;;;;;
+18B4F;KHITAN SMALL SCRIPT CHARACTER-18B4F;Lo;0;L;;;;;N;;;;;
+18B50;KHITAN SMALL SCRIPT CHARACTER-18B50;Lo;0;L;;;;;N;;;;;
+18B51;KHITAN SMALL SCRIPT CHARACTER-18B51;Lo;0;L;;;;;N;;;;;
+18B52;KHITAN SMALL SCRIPT CHARACTER-18B52;Lo;0;L;;;;;N;;;;;
+18B53;KHITAN SMALL SCRIPT CHARACTER-18B53;Lo;0;L;;;;;N;;;;;
+18B54;KHITAN SMALL SCRIPT CHARACTER-18B54;Lo;0;L;;;;;N;;;;;
+18B55;KHITAN SMALL SCRIPT CHARACTER-18B55;Lo;0;L;;;;;N;;;;;
+18B56;KHITAN SMALL SCRIPT CHARACTER-18B56;Lo;0;L;;;;;N;;;;;
+18B57;KHITAN SMALL SCRIPT CHARACTER-18B57;Lo;0;L;;;;;N;;;;;
+18B58;KHITAN SMALL SCRIPT CHARACTER-18B58;Lo;0;L;;;;;N;;;;;
+18B59;KHITAN SMALL SCRIPT CHARACTER-18B59;Lo;0;L;;;;;N;;;;;
+18B5A;KHITAN SMALL SCRIPT CHARACTER-18B5A;Lo;0;L;;;;;N;;;;;
+18B5B;KHITAN SMALL SCRIPT CHARACTER-18B5B;Lo;0;L;;;;;N;;;;;
+18B5C;KHITAN SMALL SCRIPT CHARACTER-18B5C;Lo;0;L;;;;;N;;;;;
+18B5D;KHITAN SMALL SCRIPT CHARACTER-18B5D;Lo;0;L;;;;;N;;;;;
+18B5E;KHITAN SMALL SCRIPT CHARACTER-18B5E;Lo;0;L;;;;;N;;;;;
+18B5F;KHITAN SMALL SCRIPT CHARACTER-18B5F;Lo;0;L;;;;;N;;;;;
+18B60;KHITAN SMALL SCRIPT CHARACTER-18B60;Lo;0;L;;;;;N;;;;;
+18B61;KHITAN SMALL SCRIPT CHARACTER-18B61;Lo;0;L;;;;;N;;;;;
+18B62;KHITAN SMALL SCRIPT CHARACTER-18B62;Lo;0;L;;;;;N;;;;;
+18B63;KHITAN SMALL SCRIPT CHARACTER-18B63;Lo;0;L;;;;;N;;;;;
+18B64;KHITAN SMALL SCRIPT CHARACTER-18B64;Lo;0;L;;;;;N;;;;;
+18B65;KHITAN SMALL SCRIPT CHARACTER-18B65;Lo;0;L;;;;;N;;;;;
+18B66;KHITAN SMALL SCRIPT CHARACTER-18B66;Lo;0;L;;;;;N;;;;;
+18B67;KHITAN SMALL SCRIPT CHARACTER-18B67;Lo;0;L;;;;;N;;;;;
+18B68;KHITAN SMALL SCRIPT CHARACTER-18B68;Lo;0;L;;;;;N;;;;;
+18B69;KHITAN SMALL SCRIPT CHARACTER-18B69;Lo;0;L;;;;;N;;;;;
+18B6A;KHITAN SMALL SCRIPT CHARACTER-18B6A;Lo;0;L;;;;;N;;;;;
+18B6B;KHITAN SMALL SCRIPT CHARACTER-18B6B;Lo;0;L;;;;;N;;;;;
+18B6C;KHITAN SMALL SCRIPT CHARACTER-18B6C;Lo;0;L;;;;;N;;;;;
+18B6D;KHITAN SMALL SCRIPT CHARACTER-18B6D;Lo;0;L;;;;;N;;;;;
+18B6E;KHITAN SMALL SCRIPT CHARACTER-18B6E;Lo;0;L;;;;;N;;;;;
+18B6F;KHITAN SMALL SCRIPT CHARACTER-18B6F;Lo;0;L;;;;;N;;;;;
+18B70;KHITAN SMALL SCRIPT CHARACTER-18B70;Lo;0;L;;;;;N;;;;;
+18B71;KHITAN SMALL SCRIPT CHARACTER-18B71;Lo;0;L;;;;;N;;;;;
+18B72;KHITAN SMALL SCRIPT CHARACTER-18B72;Lo;0;L;;;;;N;;;;;
+18B73;KHITAN SMALL SCRIPT CHARACTER-18B73;Lo;0;L;;;;;N;;;;;
+18B74;KHITAN SMALL SCRIPT CHARACTER-18B74;Lo;0;L;;;;;N;;;;;
+18B75;KHITAN SMALL SCRIPT CHARACTER-18B75;Lo;0;L;;;;;N;;;;;
+18B76;KHITAN SMALL SCRIPT CHARACTER-18B76;Lo;0;L;;;;;N;;;;;
+18B77;KHITAN SMALL SCRIPT CHARACTER-18B77;Lo;0;L;;;;;N;;;;;
+18B78;KHITAN SMALL SCRIPT CHARACTER-18B78;Lo;0;L;;;;;N;;;;;
+18B79;KHITAN SMALL SCRIPT CHARACTER-18B79;Lo;0;L;;;;;N;;;;;
+18B7A;KHITAN SMALL SCRIPT CHARACTER-18B7A;Lo;0;L;;;;;N;;;;;
+18B7B;KHITAN SMALL SCRIPT CHARACTER-18B7B;Lo;0;L;;;;;N;;;;;
+18B7C;KHITAN SMALL SCRIPT CHARACTER-18B7C;Lo;0;L;;;;;N;;;;;
+18B7D;KHITAN SMALL SCRIPT CHARACTER-18B7D;Lo;0;L;;;;;N;;;;;
+18B7E;KHITAN SMALL SCRIPT CHARACTER-18B7E;Lo;0;L;;;;;N;;;;;
+18B7F;KHITAN SMALL SCRIPT CHARACTER-18B7F;Lo;0;L;;;;;N;;;;;
+18B80;KHITAN SMALL SCRIPT CHARACTER-18B80;Lo;0;L;;;;;N;;;;;
+18B81;KHITAN SMALL SCRIPT CHARACTER-18B81;Lo;0;L;;;;;N;;;;;
+18B82;KHITAN SMALL SCRIPT CHARACTER-18B82;Lo;0;L;;;;;N;;;;;
+18B83;KHITAN SMALL SCRIPT CHARACTER-18B83;Lo;0;L;;;;;N;;;;;
+18B84;KHITAN SMALL SCRIPT CHARACTER-18B84;Lo;0;L;;;;;N;;;;;
+18B85;KHITAN SMALL SCRIPT CHARACTER-18B85;Lo;0;L;;;;;N;;;;;
+18B86;KHITAN SMALL SCRIPT CHARACTER-18B86;Lo;0;L;;;;;N;;;;;
+18B87;KHITAN SMALL SCRIPT CHARACTER-18B87;Lo;0;L;;;;;N;;;;;
+18B88;KHITAN SMALL SCRIPT CHARACTER-18B88;Lo;0;L;;;;;N;;;;;
+18B89;KHITAN SMALL SCRIPT CHARACTER-18B89;Lo;0;L;;;;;N;;;;;
+18B8A;KHITAN SMALL SCRIPT CHARACTER-18B8A;Lo;0;L;;;;;N;;;;;
+18B8B;KHITAN SMALL SCRIPT CHARACTER-18B8B;Lo;0;L;;;;;N;;;;;
+18B8C;KHITAN SMALL SCRIPT CHARACTER-18B8C;Lo;0;L;;;;;N;;;;;
+18B8D;KHITAN SMALL SCRIPT CHARACTER-18B8D;Lo;0;L;;;;;N;;;;;
+18B8E;KHITAN SMALL SCRIPT CHARACTER-18B8E;Lo;0;L;;;;;N;;;;;
+18B8F;KHITAN SMALL SCRIPT CHARACTER-18B8F;Lo;0;L;;;;;N;;;;;
+18B90;KHITAN SMALL SCRIPT CHARACTER-18B90;Lo;0;L;;;;;N;;;;;
+18B91;KHITAN SMALL SCRIPT CHARACTER-18B91;Lo;0;L;;;;;N;;;;;
+18B92;KHITAN SMALL SCRIPT CHARACTER-18B92;Lo;0;L;;;;;N;;;;;
+18B93;KHITAN SMALL SCRIPT CHARACTER-18B93;Lo;0;L;;;;;N;;;;;
+18B94;KHITAN SMALL SCRIPT CHARACTER-18B94;Lo;0;L;;;;;N;;;;;
+18B95;KHITAN SMALL SCRIPT CHARACTER-18B95;Lo;0;L;;;;;N;;;;;
+18B96;KHITAN SMALL SCRIPT CHARACTER-18B96;Lo;0;L;;;;;N;;;;;
+18B97;KHITAN SMALL SCRIPT CHARACTER-18B97;Lo;0;L;;;;;N;;;;;
+18B98;KHITAN SMALL SCRIPT CHARACTER-18B98;Lo;0;L;;;;;N;;;;;
+18B99;KHITAN SMALL SCRIPT CHARACTER-18B99;Lo;0;L;;;;;N;;;;;
+18B9A;KHITAN SMALL SCRIPT CHARACTER-18B9A;Lo;0;L;;;;;N;;;;;
+18B9B;KHITAN SMALL SCRIPT CHARACTER-18B9B;Lo;0;L;;;;;N;;;;;
+18B9C;KHITAN SMALL SCRIPT CHARACTER-18B9C;Lo;0;L;;;;;N;;;;;
+18B9D;KHITAN SMALL SCRIPT CHARACTER-18B9D;Lo;0;L;;;;;N;;;;;
+18B9E;KHITAN SMALL SCRIPT CHARACTER-18B9E;Lo;0;L;;;;;N;;;;;
+18B9F;KHITAN SMALL SCRIPT CHARACTER-18B9F;Lo;0;L;;;;;N;;;;;
+18BA0;KHITAN SMALL SCRIPT CHARACTER-18BA0;Lo;0;L;;;;;N;;;;;
+18BA1;KHITAN SMALL SCRIPT CHARACTER-18BA1;Lo;0;L;;;;;N;;;;;
+18BA2;KHITAN SMALL SCRIPT CHARACTER-18BA2;Lo;0;L;;;;;N;;;;;
+18BA3;KHITAN SMALL SCRIPT CHARACTER-18BA3;Lo;0;L;;;;;N;;;;;
+18BA4;KHITAN SMALL SCRIPT CHARACTER-18BA4;Lo;0;L;;;;;N;;;;;
+18BA5;KHITAN SMALL SCRIPT CHARACTER-18BA5;Lo;0;L;;;;;N;;;;;
+18BA6;KHITAN SMALL SCRIPT CHARACTER-18BA6;Lo;0;L;;;;;N;;;;;
+18BA7;KHITAN SMALL SCRIPT CHARACTER-18BA7;Lo;0;L;;;;;N;;;;;
+18BA8;KHITAN SMALL SCRIPT CHARACTER-18BA8;Lo;0;L;;;;;N;;;;;
+18BA9;KHITAN SMALL SCRIPT CHARACTER-18BA9;Lo;0;L;;;;;N;;;;;
+18BAA;KHITAN SMALL SCRIPT CHARACTER-18BAA;Lo;0;L;;;;;N;;;;;
+18BAB;KHITAN SMALL SCRIPT CHARACTER-18BAB;Lo;0;L;;;;;N;;;;;
+18BAC;KHITAN SMALL SCRIPT CHARACTER-18BAC;Lo;0;L;;;;;N;;;;;
+18BAD;KHITAN SMALL SCRIPT CHARACTER-18BAD;Lo;0;L;;;;;N;;;;;
+18BAE;KHITAN SMALL SCRIPT CHARACTER-18BAE;Lo;0;L;;;;;N;;;;;
+18BAF;KHITAN SMALL SCRIPT CHARACTER-18BAF;Lo;0;L;;;;;N;;;;;
+18BB0;KHITAN SMALL SCRIPT CHARACTER-18BB0;Lo;0;L;;;;;N;;;;;
+18BB1;KHITAN SMALL SCRIPT CHARACTER-18BB1;Lo;0;L;;;;;N;;;;;
+18BB2;KHITAN SMALL SCRIPT CHARACTER-18BB2;Lo;0;L;;;;;N;;;;;
+18BB3;KHITAN SMALL SCRIPT CHARACTER-18BB3;Lo;0;L;;;;;N;;;;;
+18BB4;KHITAN SMALL SCRIPT CHARACTER-18BB4;Lo;0;L;;;;;N;;;;;
+18BB5;KHITAN SMALL SCRIPT CHARACTER-18BB5;Lo;0;L;;;;;N;;;;;
+18BB6;KHITAN SMALL SCRIPT CHARACTER-18BB6;Lo;0;L;;;;;N;;;;;
+18BB7;KHITAN SMALL SCRIPT CHARACTER-18BB7;Lo;0;L;;;;;N;;;;;
+18BB8;KHITAN SMALL SCRIPT CHARACTER-18BB8;Lo;0;L;;;;;N;;;;;
+18BB9;KHITAN SMALL SCRIPT CHARACTER-18BB9;Lo;0;L;;;;;N;;;;;
+18BBA;KHITAN SMALL SCRIPT CHARACTER-18BBA;Lo;0;L;;;;;N;;;;;
+18BBB;KHITAN SMALL SCRIPT CHARACTER-18BBB;Lo;0;L;;;;;N;;;;;
+18BBC;KHITAN SMALL SCRIPT CHARACTER-18BBC;Lo;0;L;;;;;N;;;;;
+18BBD;KHITAN SMALL SCRIPT CHARACTER-18BBD;Lo;0;L;;;;;N;;;;;
+18BBE;KHITAN SMALL SCRIPT CHARACTER-18BBE;Lo;0;L;;;;;N;;;;;
+18BBF;KHITAN SMALL SCRIPT CHARACTER-18BBF;Lo;0;L;;;;;N;;;;;
+18BC0;KHITAN SMALL SCRIPT CHARACTER-18BC0;Lo;0;L;;;;;N;;;;;
+18BC1;KHITAN SMALL SCRIPT CHARACTER-18BC1;Lo;0;L;;;;;N;;;;;
+18BC2;KHITAN SMALL SCRIPT CHARACTER-18BC2;Lo;0;L;;;;;N;;;;;
+18BC3;KHITAN SMALL SCRIPT CHARACTER-18BC3;Lo;0;L;;;;;N;;;;;
+18BC4;KHITAN SMALL SCRIPT CHARACTER-18BC4;Lo;0;L;;;;;N;;;;;
+18BC5;KHITAN SMALL SCRIPT CHARACTER-18BC5;Lo;0;L;;;;;N;;;;;
+18BC6;KHITAN SMALL SCRIPT CHARACTER-18BC6;Lo;0;L;;;;;N;;;;;
+18BC7;KHITAN SMALL SCRIPT CHARACTER-18BC7;Lo;0;L;;;;;N;;;;;
+18BC8;KHITAN SMALL SCRIPT CHARACTER-18BC8;Lo;0;L;;;;;N;;;;;
+18BC9;KHITAN SMALL SCRIPT CHARACTER-18BC9;Lo;0;L;;;;;N;;;;;
+18BCA;KHITAN SMALL SCRIPT CHARACTER-18BCA;Lo;0;L;;;;;N;;;;;
+18BCB;KHITAN SMALL SCRIPT CHARACTER-18BCB;Lo;0;L;;;;;N;;;;;
+18BCC;KHITAN SMALL SCRIPT CHARACTER-18BCC;Lo;0;L;;;;;N;;;;;
+18BCD;KHITAN SMALL SCRIPT CHARACTER-18BCD;Lo;0;L;;;;;N;;;;;
+18BCE;KHITAN SMALL SCRIPT CHARACTER-18BCE;Lo;0;L;;;;;N;;;;;
+18BCF;KHITAN SMALL SCRIPT CHARACTER-18BCF;Lo;0;L;;;;;N;;;;;
+18BD0;KHITAN SMALL SCRIPT CHARACTER-18BD0;Lo;0;L;;;;;N;;;;;
+18BD1;KHITAN SMALL SCRIPT CHARACTER-18BD1;Lo;0;L;;;;;N;;;;;
+18BD2;KHITAN SMALL SCRIPT CHARACTER-18BD2;Lo;0;L;;;;;N;;;;;
+18BD3;KHITAN SMALL SCRIPT CHARACTER-18BD3;Lo;0;L;;;;;N;;;;;
+18BD4;KHITAN SMALL SCRIPT CHARACTER-18BD4;Lo;0;L;;;;;N;;;;;
+18BD5;KHITAN SMALL SCRIPT CHARACTER-18BD5;Lo;0;L;;;;;N;;;;;
+18BD6;KHITAN SMALL SCRIPT CHARACTER-18BD6;Lo;0;L;;;;;N;;;;;
+18BD7;KHITAN SMALL SCRIPT CHARACTER-18BD7;Lo;0;L;;;;;N;;;;;
+18BD8;KHITAN SMALL SCRIPT CHARACTER-18BD8;Lo;0;L;;;;;N;;;;;
+18BD9;KHITAN SMALL SCRIPT CHARACTER-18BD9;Lo;0;L;;;;;N;;;;;
+18BDA;KHITAN SMALL SCRIPT CHARACTER-18BDA;Lo;0;L;;;;;N;;;;;
+18BDB;KHITAN SMALL SCRIPT CHARACTER-18BDB;Lo;0;L;;;;;N;;;;;
+18BDC;KHITAN SMALL SCRIPT CHARACTER-18BDC;Lo;0;L;;;;;N;;;;;
+18BDD;KHITAN SMALL SCRIPT CHARACTER-18BDD;Lo;0;L;;;;;N;;;;;
+18BDE;KHITAN SMALL SCRIPT CHARACTER-18BDE;Lo;0;L;;;;;N;;;;;
+18BDF;KHITAN SMALL SCRIPT CHARACTER-18BDF;Lo;0;L;;;;;N;;;;;
+18BE0;KHITAN SMALL SCRIPT CHARACTER-18BE0;Lo;0;L;;;;;N;;;;;
+18BE1;KHITAN SMALL SCRIPT CHARACTER-18BE1;Lo;0;L;;;;;N;;;;;
+18BE2;KHITAN SMALL SCRIPT CHARACTER-18BE2;Lo;0;L;;;;;N;;;;;
+18BE3;KHITAN SMALL SCRIPT CHARACTER-18BE3;Lo;0;L;;;;;N;;;;;
+18BE4;KHITAN SMALL SCRIPT CHARACTER-18BE4;Lo;0;L;;;;;N;;;;;
+18BE5;KHITAN SMALL SCRIPT CHARACTER-18BE5;Lo;0;L;;;;;N;;;;;
+18BE6;KHITAN SMALL SCRIPT CHARACTER-18BE6;Lo;0;L;;;;;N;;;;;
+18BE7;KHITAN SMALL SCRIPT CHARACTER-18BE7;Lo;0;L;;;;;N;;;;;
+18BE8;KHITAN SMALL SCRIPT CHARACTER-18BE8;Lo;0;L;;;;;N;;;;;
+18BE9;KHITAN SMALL SCRIPT CHARACTER-18BE9;Lo;0;L;;;;;N;;;;;
+18BEA;KHITAN SMALL SCRIPT CHARACTER-18BEA;Lo;0;L;;;;;N;;;;;
+18BEB;KHITAN SMALL SCRIPT CHARACTER-18BEB;Lo;0;L;;;;;N;;;;;
+18BEC;KHITAN SMALL SCRIPT CHARACTER-18BEC;Lo;0;L;;;;;N;;;;;
+18BED;KHITAN SMALL SCRIPT CHARACTER-18BED;Lo;0;L;;;;;N;;;;;
+18BEE;KHITAN SMALL SCRIPT CHARACTER-18BEE;Lo;0;L;;;;;N;;;;;
+18BEF;KHITAN SMALL SCRIPT CHARACTER-18BEF;Lo;0;L;;;;;N;;;;;
+18BF0;KHITAN SMALL SCRIPT CHARACTER-18BF0;Lo;0;L;;;;;N;;;;;
+18BF1;KHITAN SMALL SCRIPT CHARACTER-18BF1;Lo;0;L;;;;;N;;;;;
+18BF2;KHITAN SMALL SCRIPT CHARACTER-18BF2;Lo;0;L;;;;;N;;;;;
+18BF3;KHITAN SMALL SCRIPT CHARACTER-18BF3;Lo;0;L;;;;;N;;;;;
+18BF4;KHITAN SMALL SCRIPT CHARACTER-18BF4;Lo;0;L;;;;;N;;;;;
+18BF5;KHITAN SMALL SCRIPT CHARACTER-18BF5;Lo;0;L;;;;;N;;;;;
+18BF6;KHITAN SMALL SCRIPT CHARACTER-18BF6;Lo;0;L;;;;;N;;;;;
+18BF7;KHITAN SMALL SCRIPT CHARACTER-18BF7;Lo;0;L;;;;;N;;;;;
+18BF8;KHITAN SMALL SCRIPT CHARACTER-18BF8;Lo;0;L;;;;;N;;;;;
+18BF9;KHITAN SMALL SCRIPT CHARACTER-18BF9;Lo;0;L;;;;;N;;;;;
+18BFA;KHITAN SMALL SCRIPT CHARACTER-18BFA;Lo;0;L;;;;;N;;;;;
+18BFB;KHITAN SMALL SCRIPT CHARACTER-18BFB;Lo;0;L;;;;;N;;;;;
+18BFC;KHITAN SMALL SCRIPT CHARACTER-18BFC;Lo;0;L;;;;;N;;;;;
+18BFD;KHITAN SMALL SCRIPT CHARACTER-18BFD;Lo;0;L;;;;;N;;;;;
+18BFE;KHITAN SMALL SCRIPT CHARACTER-18BFE;Lo;0;L;;;;;N;;;;;
+18BFF;KHITAN SMALL SCRIPT CHARACTER-18BFF;Lo;0;L;;;;;N;;;;;
+18C00;KHITAN SMALL SCRIPT CHARACTER-18C00;Lo;0;L;;;;;N;;;;;
+18C01;KHITAN SMALL SCRIPT CHARACTER-18C01;Lo;0;L;;;;;N;;;;;
+18C02;KHITAN SMALL SCRIPT CHARACTER-18C02;Lo;0;L;;;;;N;;;;;
+18C03;KHITAN SMALL SCRIPT CHARACTER-18C03;Lo;0;L;;;;;N;;;;;
+18C04;KHITAN SMALL SCRIPT CHARACTER-18C04;Lo;0;L;;;;;N;;;;;
+18C05;KHITAN SMALL SCRIPT CHARACTER-18C05;Lo;0;L;;;;;N;;;;;
+18C06;KHITAN SMALL SCRIPT CHARACTER-18C06;Lo;0;L;;;;;N;;;;;
+18C07;KHITAN SMALL SCRIPT CHARACTER-18C07;Lo;0;L;;;;;N;;;;;
+18C08;KHITAN SMALL SCRIPT CHARACTER-18C08;Lo;0;L;;;;;N;;;;;
+18C09;KHITAN SMALL SCRIPT CHARACTER-18C09;Lo;0;L;;;;;N;;;;;
+18C0A;KHITAN SMALL SCRIPT CHARACTER-18C0A;Lo;0;L;;;;;N;;;;;
+18C0B;KHITAN SMALL SCRIPT CHARACTER-18C0B;Lo;0;L;;;;;N;;;;;
+18C0C;KHITAN SMALL SCRIPT CHARACTER-18C0C;Lo;0;L;;;;;N;;;;;
+18C0D;KHITAN SMALL SCRIPT CHARACTER-18C0D;Lo;0;L;;;;;N;;;;;
+18C0E;KHITAN SMALL SCRIPT CHARACTER-18C0E;Lo;0;L;;;;;N;;;;;
+18C0F;KHITAN SMALL SCRIPT CHARACTER-18C0F;Lo;0;L;;;;;N;;;;;
+18C10;KHITAN SMALL SCRIPT CHARACTER-18C10;Lo;0;L;;;;;N;;;;;
+18C11;KHITAN SMALL SCRIPT CHARACTER-18C11;Lo;0;L;;;;;N;;;;;
+18C12;KHITAN SMALL SCRIPT CHARACTER-18C12;Lo;0;L;;;;;N;;;;;
+18C13;KHITAN SMALL SCRIPT CHARACTER-18C13;Lo;0;L;;;;;N;;;;;
+18C14;KHITAN SMALL SCRIPT CHARACTER-18C14;Lo;0;L;;;;;N;;;;;
+18C15;KHITAN SMALL SCRIPT CHARACTER-18C15;Lo;0;L;;;;;N;;;;;
+18C16;KHITAN SMALL SCRIPT CHARACTER-18C16;Lo;0;L;;;;;N;;;;;
+18C17;KHITAN SMALL SCRIPT CHARACTER-18C17;Lo;0;L;;;;;N;;;;;
+18C18;KHITAN SMALL SCRIPT CHARACTER-18C18;Lo;0;L;;;;;N;;;;;
+18C19;KHITAN SMALL SCRIPT CHARACTER-18C19;Lo;0;L;;;;;N;;;;;
+18C1A;KHITAN SMALL SCRIPT CHARACTER-18C1A;Lo;0;L;;;;;N;;;;;
+18C1B;KHITAN SMALL SCRIPT CHARACTER-18C1B;Lo;0;L;;;;;N;;;;;
+18C1C;KHITAN SMALL SCRIPT CHARACTER-18C1C;Lo;0;L;;;;;N;;;;;
+18C1D;KHITAN SMALL SCRIPT CHARACTER-18C1D;Lo;0;L;;;;;N;;;;;
+18C1E;KHITAN SMALL SCRIPT CHARACTER-18C1E;Lo;0;L;;;;;N;;;;;
+18C1F;KHITAN SMALL SCRIPT CHARACTER-18C1F;Lo;0;L;;;;;N;;;;;
+18C20;KHITAN SMALL SCRIPT CHARACTER-18C20;Lo;0;L;;;;;N;;;;;
+18C21;KHITAN SMALL SCRIPT CHARACTER-18C21;Lo;0;L;;;;;N;;;;;
+18C22;KHITAN SMALL SCRIPT CHARACTER-18C22;Lo;0;L;;;;;N;;;;;
+18C23;KHITAN SMALL SCRIPT CHARACTER-18C23;Lo;0;L;;;;;N;;;;;
+18C24;KHITAN SMALL SCRIPT CHARACTER-18C24;Lo;0;L;;;;;N;;;;;
+18C25;KHITAN SMALL SCRIPT CHARACTER-18C25;Lo;0;L;;;;;N;;;;;
+18C26;KHITAN SMALL SCRIPT CHARACTER-18C26;Lo;0;L;;;;;N;;;;;
+18C27;KHITAN SMALL SCRIPT CHARACTER-18C27;Lo;0;L;;;;;N;;;;;
+18C28;KHITAN SMALL SCRIPT CHARACTER-18C28;Lo;0;L;;;;;N;;;;;
+18C29;KHITAN SMALL SCRIPT CHARACTER-18C29;Lo;0;L;;;;;N;;;;;
+18C2A;KHITAN SMALL SCRIPT CHARACTER-18C2A;Lo;0;L;;;;;N;;;;;
+18C2B;KHITAN SMALL SCRIPT CHARACTER-18C2B;Lo;0;L;;;;;N;;;;;
+18C2C;KHITAN SMALL SCRIPT CHARACTER-18C2C;Lo;0;L;;;;;N;;;;;
+18C2D;KHITAN SMALL SCRIPT CHARACTER-18C2D;Lo;0;L;;;;;N;;;;;
+18C2E;KHITAN SMALL SCRIPT CHARACTER-18C2E;Lo;0;L;;;;;N;;;;;
+18C2F;KHITAN SMALL SCRIPT CHARACTER-18C2F;Lo;0;L;;;;;N;;;;;
+18C30;KHITAN SMALL SCRIPT CHARACTER-18C30;Lo;0;L;;;;;N;;;;;
+18C31;KHITAN SMALL SCRIPT CHARACTER-18C31;Lo;0;L;;;;;N;;;;;
+18C32;KHITAN SMALL SCRIPT CHARACTER-18C32;Lo;0;L;;;;;N;;;;;
+18C33;KHITAN SMALL SCRIPT CHARACTER-18C33;Lo;0;L;;;;;N;;;;;
+18C34;KHITAN SMALL SCRIPT CHARACTER-18C34;Lo;0;L;;;;;N;;;;;
+18C35;KHITAN SMALL SCRIPT CHARACTER-18C35;Lo;0;L;;;;;N;;;;;
+18C36;KHITAN SMALL SCRIPT CHARACTER-18C36;Lo;0;L;;;;;N;;;;;
+18C37;KHITAN SMALL SCRIPT CHARACTER-18C37;Lo;0;L;;;;;N;;;;;
+18C38;KHITAN SMALL SCRIPT CHARACTER-18C38;Lo;0;L;;;;;N;;;;;
+18C39;KHITAN SMALL SCRIPT CHARACTER-18C39;Lo;0;L;;;;;N;;;;;
+18C3A;KHITAN SMALL SCRIPT CHARACTER-18C3A;Lo;0;L;;;;;N;;;;;
+18C3B;KHITAN SMALL SCRIPT CHARACTER-18C3B;Lo;0;L;;;;;N;;;;;
+18C3C;KHITAN SMALL SCRIPT CHARACTER-18C3C;Lo;0;L;;;;;N;;;;;
+18C3D;KHITAN SMALL SCRIPT CHARACTER-18C3D;Lo;0;L;;;;;N;;;;;
+18C3E;KHITAN SMALL SCRIPT CHARACTER-18C3E;Lo;0;L;;;;;N;;;;;
+18C3F;KHITAN SMALL SCRIPT CHARACTER-18C3F;Lo;0;L;;;;;N;;;;;
+18C40;KHITAN SMALL SCRIPT CHARACTER-18C40;Lo;0;L;;;;;N;;;;;
+18C41;KHITAN SMALL SCRIPT CHARACTER-18C41;Lo;0;L;;;;;N;;;;;
+18C42;KHITAN SMALL SCRIPT CHARACTER-18C42;Lo;0;L;;;;;N;;;;;
+18C43;KHITAN SMALL SCRIPT CHARACTER-18C43;Lo;0;L;;;;;N;;;;;
+18C44;KHITAN SMALL SCRIPT CHARACTER-18C44;Lo;0;L;;;;;N;;;;;
+18C45;KHITAN SMALL SCRIPT CHARACTER-18C45;Lo;0;L;;;;;N;;;;;
+18C46;KHITAN SMALL SCRIPT CHARACTER-18C46;Lo;0;L;;;;;N;;;;;
+18C47;KHITAN SMALL SCRIPT CHARACTER-18C47;Lo;0;L;;;;;N;;;;;
+18C48;KHITAN SMALL SCRIPT CHARACTER-18C48;Lo;0;L;;;;;N;;;;;
+18C49;KHITAN SMALL SCRIPT CHARACTER-18C49;Lo;0;L;;;;;N;;;;;
+18C4A;KHITAN SMALL SCRIPT CHARACTER-18C4A;Lo;0;L;;;;;N;;;;;
+18C4B;KHITAN SMALL SCRIPT CHARACTER-18C4B;Lo;0;L;;;;;N;;;;;
+18C4C;KHITAN SMALL SCRIPT CHARACTER-18C4C;Lo;0;L;;;;;N;;;;;
+18C4D;KHITAN SMALL SCRIPT CHARACTER-18C4D;Lo;0;L;;;;;N;;;;;
+18C4E;KHITAN SMALL SCRIPT CHARACTER-18C4E;Lo;0;L;;;;;N;;;;;
+18C4F;KHITAN SMALL SCRIPT CHARACTER-18C4F;Lo;0;L;;;;;N;;;;;
+18C50;KHITAN SMALL SCRIPT CHARACTER-18C50;Lo;0;L;;;;;N;;;;;
+18C51;KHITAN SMALL SCRIPT CHARACTER-18C51;Lo;0;L;;;;;N;;;;;
+18C52;KHITAN SMALL SCRIPT CHARACTER-18C52;Lo;0;L;;;;;N;;;;;
+18C53;KHITAN SMALL SCRIPT CHARACTER-18C53;Lo;0;L;;;;;N;;;;;
+18C54;KHITAN SMALL SCRIPT CHARACTER-18C54;Lo;0;L;;;;;N;;;;;
+18C55;KHITAN SMALL SCRIPT CHARACTER-18C55;Lo;0;L;;;;;N;;;;;
+18C56;KHITAN SMALL SCRIPT CHARACTER-18C56;Lo;0;L;;;;;N;;;;;
+18C57;KHITAN SMALL SCRIPT CHARACTER-18C57;Lo;0;L;;;;;N;;;;;
+18C58;KHITAN SMALL SCRIPT CHARACTER-18C58;Lo;0;L;;;;;N;;;;;
+18C59;KHITAN SMALL SCRIPT CHARACTER-18C59;Lo;0;L;;;;;N;;;;;
+18C5A;KHITAN SMALL SCRIPT CHARACTER-18C5A;Lo;0;L;;;;;N;;;;;
+18C5B;KHITAN SMALL SCRIPT CHARACTER-18C5B;Lo;0;L;;;;;N;;;;;
+18C5C;KHITAN SMALL SCRIPT CHARACTER-18C5C;Lo;0;L;;;;;N;;;;;
+18C5D;KHITAN SMALL SCRIPT CHARACTER-18C5D;Lo;0;L;;;;;N;;;;;
+18C5E;KHITAN SMALL SCRIPT CHARACTER-18C5E;Lo;0;L;;;;;N;;;;;
+18C5F;KHITAN SMALL SCRIPT CHARACTER-18C5F;Lo;0;L;;;;;N;;;;;
+18C60;KHITAN SMALL SCRIPT CHARACTER-18C60;Lo;0;L;;;;;N;;;;;
+18C61;KHITAN SMALL SCRIPT CHARACTER-18C61;Lo;0;L;;;;;N;;;;;
+18C62;KHITAN SMALL SCRIPT CHARACTER-18C62;Lo;0;L;;;;;N;;;;;
+18C63;KHITAN SMALL SCRIPT CHARACTER-18C63;Lo;0;L;;;;;N;;;;;
+18C64;KHITAN SMALL SCRIPT CHARACTER-18C64;Lo;0;L;;;;;N;;;;;
+18C65;KHITAN SMALL SCRIPT CHARACTER-18C65;Lo;0;L;;;;;N;;;;;
+18C66;KHITAN SMALL SCRIPT CHARACTER-18C66;Lo;0;L;;;;;N;;;;;
+18C67;KHITAN SMALL SCRIPT CHARACTER-18C67;Lo;0;L;;;;;N;;;;;
+18C68;KHITAN SMALL SCRIPT CHARACTER-18C68;Lo;0;L;;;;;N;;;;;
+18C69;KHITAN SMALL SCRIPT CHARACTER-18C69;Lo;0;L;;;;;N;;;;;
+18C6A;KHITAN SMALL SCRIPT CHARACTER-18C6A;Lo;0;L;;;;;N;;;;;
+18C6B;KHITAN SMALL SCRIPT CHARACTER-18C6B;Lo;0;L;;;;;N;;;;;
+18C6C;KHITAN SMALL SCRIPT CHARACTER-18C6C;Lo;0;L;;;;;N;;;;;
+18C6D;KHITAN SMALL SCRIPT CHARACTER-18C6D;Lo;0;L;;;;;N;;;;;
+18C6E;KHITAN SMALL SCRIPT CHARACTER-18C6E;Lo;0;L;;;;;N;;;;;
+18C6F;KHITAN SMALL SCRIPT CHARACTER-18C6F;Lo;0;L;;;;;N;;;;;
+18C70;KHITAN SMALL SCRIPT CHARACTER-18C70;Lo;0;L;;;;;N;;;;;
+18C71;KHITAN SMALL SCRIPT CHARACTER-18C71;Lo;0;L;;;;;N;;;;;
+18C72;KHITAN SMALL SCRIPT CHARACTER-18C72;Lo;0;L;;;;;N;;;;;
+18C73;KHITAN SMALL SCRIPT CHARACTER-18C73;Lo;0;L;;;;;N;;;;;
+18C74;KHITAN SMALL SCRIPT CHARACTER-18C74;Lo;0;L;;;;;N;;;;;
+18C75;KHITAN SMALL SCRIPT CHARACTER-18C75;Lo;0;L;;;;;N;;;;;
+18C76;KHITAN SMALL SCRIPT CHARACTER-18C76;Lo;0;L;;;;;N;;;;;
+18C77;KHITAN SMALL SCRIPT CHARACTER-18C77;Lo;0;L;;;;;N;;;;;
+18C78;KHITAN SMALL SCRIPT CHARACTER-18C78;Lo;0;L;;;;;N;;;;;
+18C79;KHITAN SMALL SCRIPT CHARACTER-18C79;Lo;0;L;;;;;N;;;;;
+18C7A;KHITAN SMALL SCRIPT CHARACTER-18C7A;Lo;0;L;;;;;N;;;;;
+18C7B;KHITAN SMALL SCRIPT CHARACTER-18C7B;Lo;0;L;;;;;N;;;;;
+18C7C;KHITAN SMALL SCRIPT CHARACTER-18C7C;Lo;0;L;;;;;N;;;;;
+18C7D;KHITAN SMALL SCRIPT CHARACTER-18C7D;Lo;0;L;;;;;N;;;;;
+18C7E;KHITAN SMALL SCRIPT CHARACTER-18C7E;Lo;0;L;;;;;N;;;;;
+18C7F;KHITAN SMALL SCRIPT CHARACTER-18C7F;Lo;0;L;;;;;N;;;;;
+18C80;KHITAN SMALL SCRIPT CHARACTER-18C80;Lo;0;L;;;;;N;;;;;
+18C81;KHITAN SMALL SCRIPT CHARACTER-18C81;Lo;0;L;;;;;N;;;;;
+18C82;KHITAN SMALL SCRIPT CHARACTER-18C82;Lo;0;L;;;;;N;;;;;
+18C83;KHITAN SMALL SCRIPT CHARACTER-18C83;Lo;0;L;;;;;N;;;;;
+18C84;KHITAN SMALL SCRIPT CHARACTER-18C84;Lo;0;L;;;;;N;;;;;
+18C85;KHITAN SMALL SCRIPT CHARACTER-18C85;Lo;0;L;;;;;N;;;;;
+18C86;KHITAN SMALL SCRIPT CHARACTER-18C86;Lo;0;L;;;;;N;;;;;
+18C87;KHITAN SMALL SCRIPT CHARACTER-18C87;Lo;0;L;;;;;N;;;;;
+18C88;KHITAN SMALL SCRIPT CHARACTER-18C88;Lo;0;L;;;;;N;;;;;
+18C89;KHITAN SMALL SCRIPT CHARACTER-18C89;Lo;0;L;;;;;N;;;;;
+18C8A;KHITAN SMALL SCRIPT CHARACTER-18C8A;Lo;0;L;;;;;N;;;;;
+18C8B;KHITAN SMALL SCRIPT CHARACTER-18C8B;Lo;0;L;;;;;N;;;;;
+18C8C;KHITAN SMALL SCRIPT CHARACTER-18C8C;Lo;0;L;;;;;N;;;;;
+18C8D;KHITAN SMALL SCRIPT CHARACTER-18C8D;Lo;0;L;;;;;N;;;;;
+18C8E;KHITAN SMALL SCRIPT CHARACTER-18C8E;Lo;0;L;;;;;N;;;;;
+18C8F;KHITAN SMALL SCRIPT CHARACTER-18C8F;Lo;0;L;;;;;N;;;;;
+18C90;KHITAN SMALL SCRIPT CHARACTER-18C90;Lo;0;L;;;;;N;;;;;
+18C91;KHITAN SMALL SCRIPT CHARACTER-18C91;Lo;0;L;;;;;N;;;;;
+18C92;KHITAN SMALL SCRIPT CHARACTER-18C92;Lo;0;L;;;;;N;;;;;
+18C93;KHITAN SMALL SCRIPT CHARACTER-18C93;Lo;0;L;;;;;N;;;;;
+18C94;KHITAN SMALL SCRIPT CHARACTER-18C94;Lo;0;L;;;;;N;;;;;
+18C95;KHITAN SMALL SCRIPT CHARACTER-18C95;Lo;0;L;;;;;N;;;;;
+18C96;KHITAN SMALL SCRIPT CHARACTER-18C96;Lo;0;L;;;;;N;;;;;
+18C97;KHITAN SMALL SCRIPT CHARACTER-18C97;Lo;0;L;;;;;N;;;;;
+18C98;KHITAN SMALL SCRIPT CHARACTER-18C98;Lo;0;L;;;;;N;;;;;
+18C99;KHITAN SMALL SCRIPT CHARACTER-18C99;Lo;0;L;;;;;N;;;;;
+18C9A;KHITAN SMALL SCRIPT CHARACTER-18C9A;Lo;0;L;;;;;N;;;;;
+18C9B;KHITAN SMALL SCRIPT CHARACTER-18C9B;Lo;0;L;;;;;N;;;;;
+18C9C;KHITAN SMALL SCRIPT CHARACTER-18C9C;Lo;0;L;;;;;N;;;;;
+18C9D;KHITAN SMALL SCRIPT CHARACTER-18C9D;Lo;0;L;;;;;N;;;;;
+18C9E;KHITAN SMALL SCRIPT CHARACTER-18C9E;Lo;0;L;;;;;N;;;;;
+18C9F;KHITAN SMALL SCRIPT CHARACTER-18C9F;Lo;0;L;;;;;N;;;;;
+18CA0;KHITAN SMALL SCRIPT CHARACTER-18CA0;Lo;0;L;;;;;N;;;;;
+18CA1;KHITAN SMALL SCRIPT CHARACTER-18CA1;Lo;0;L;;;;;N;;;;;
+18CA2;KHITAN SMALL SCRIPT CHARACTER-18CA2;Lo;0;L;;;;;N;;;;;
+18CA3;KHITAN SMALL SCRIPT CHARACTER-18CA3;Lo;0;L;;;;;N;;;;;
+18CA4;KHITAN SMALL SCRIPT CHARACTER-18CA4;Lo;0;L;;;;;N;;;;;
+18CA5;KHITAN SMALL SCRIPT CHARACTER-18CA5;Lo;0;L;;;;;N;;;;;
+18CA6;KHITAN SMALL SCRIPT CHARACTER-18CA6;Lo;0;L;;;;;N;;;;;
+18CA7;KHITAN SMALL SCRIPT CHARACTER-18CA7;Lo;0;L;;;;;N;;;;;
+18CA8;KHITAN SMALL SCRIPT CHARACTER-18CA8;Lo;0;L;;;;;N;;;;;
+18CA9;KHITAN SMALL SCRIPT CHARACTER-18CA9;Lo;0;L;;;;;N;;;;;
+18CAA;KHITAN SMALL SCRIPT CHARACTER-18CAA;Lo;0;L;;;;;N;;;;;
+18CAB;KHITAN SMALL SCRIPT CHARACTER-18CAB;Lo;0;L;;;;;N;;;;;
+18CAC;KHITAN SMALL SCRIPT CHARACTER-18CAC;Lo;0;L;;;;;N;;;;;
+18CAD;KHITAN SMALL SCRIPT CHARACTER-18CAD;Lo;0;L;;;;;N;;;;;
+18CAE;KHITAN SMALL SCRIPT CHARACTER-18CAE;Lo;0;L;;;;;N;;;;;
+18CAF;KHITAN SMALL SCRIPT CHARACTER-18CAF;Lo;0;L;;;;;N;;;;;
+18CB0;KHITAN SMALL SCRIPT CHARACTER-18CB0;Lo;0;L;;;;;N;;;;;
+18CB1;KHITAN SMALL SCRIPT CHARACTER-18CB1;Lo;0;L;;;;;N;;;;;
+18CB2;KHITAN SMALL SCRIPT CHARACTER-18CB2;Lo;0;L;;;;;N;;;;;
+18CB3;KHITAN SMALL SCRIPT CHARACTER-18CB3;Lo;0;L;;;;;N;;;;;
+18CB4;KHITAN SMALL SCRIPT CHARACTER-18CB4;Lo;0;L;;;;;N;;;;;
+18CB5;KHITAN SMALL SCRIPT CHARACTER-18CB5;Lo;0;L;;;;;N;;;;;
+18CB6;KHITAN SMALL SCRIPT CHARACTER-18CB6;Lo;0;L;;;;;N;;;;;
+18CB7;KHITAN SMALL SCRIPT CHARACTER-18CB7;Lo;0;L;;;;;N;;;;;
+18CB8;KHITAN SMALL SCRIPT CHARACTER-18CB8;Lo;0;L;;;;;N;;;;;
+18CB9;KHITAN SMALL SCRIPT CHARACTER-18CB9;Lo;0;L;;;;;N;;;;;
+18CBA;KHITAN SMALL SCRIPT CHARACTER-18CBA;Lo;0;L;;;;;N;;;;;
+18CBB;KHITAN SMALL SCRIPT CHARACTER-18CBB;Lo;0;L;;;;;N;;;;;
+18CBC;KHITAN SMALL SCRIPT CHARACTER-18CBC;Lo;0;L;;;;;N;;;;;
+18CBD;KHITAN SMALL SCRIPT CHARACTER-18CBD;Lo;0;L;;;;;N;;;;;
+18CBE;KHITAN SMALL SCRIPT CHARACTER-18CBE;Lo;0;L;;;;;N;;;;;
+18CBF;KHITAN SMALL SCRIPT CHARACTER-18CBF;Lo;0;L;;;;;N;;;;;
+18CC0;KHITAN SMALL SCRIPT CHARACTER-18CC0;Lo;0;L;;;;;N;;;;;
+18CC1;KHITAN SMALL SCRIPT CHARACTER-18CC1;Lo;0;L;;;;;N;;;;;
+18CC2;KHITAN SMALL SCRIPT CHARACTER-18CC2;Lo;0;L;;;;;N;;;;;
+18CC3;KHITAN SMALL SCRIPT CHARACTER-18CC3;Lo;0;L;;;;;N;;;;;
+18CC4;KHITAN SMALL SCRIPT CHARACTER-18CC4;Lo;0;L;;;;;N;;;;;
+18CC5;KHITAN SMALL SCRIPT CHARACTER-18CC5;Lo;0;L;;;;;N;;;;;
+18CC6;KHITAN SMALL SCRIPT CHARACTER-18CC6;Lo;0;L;;;;;N;;;;;
+18CC7;KHITAN SMALL SCRIPT CHARACTER-18CC7;Lo;0;L;;;;;N;;;;;
+18CC8;KHITAN SMALL SCRIPT CHARACTER-18CC8;Lo;0;L;;;;;N;;;;;
+18CC9;KHITAN SMALL SCRIPT CHARACTER-18CC9;Lo;0;L;;;;;N;;;;;
+18CCA;KHITAN SMALL SCRIPT CHARACTER-18CCA;Lo;0;L;;;;;N;;;;;
+18CCB;KHITAN SMALL SCRIPT CHARACTER-18CCB;Lo;0;L;;;;;N;;;;;
+18CCC;KHITAN SMALL SCRIPT CHARACTER-18CCC;Lo;0;L;;;;;N;;;;;
+18CCD;KHITAN SMALL SCRIPT CHARACTER-18CCD;Lo;0;L;;;;;N;;;;;
+18CCE;KHITAN SMALL SCRIPT CHARACTER-18CCE;Lo;0;L;;;;;N;;;;;
+18CCF;KHITAN SMALL SCRIPT CHARACTER-18CCF;Lo;0;L;;;;;N;;;;;
+18CD0;KHITAN SMALL SCRIPT CHARACTER-18CD0;Lo;0;L;;;;;N;;;;;
+18CD1;KHITAN SMALL SCRIPT CHARACTER-18CD1;Lo;0;L;;;;;N;;;;;
+18CD2;KHITAN SMALL SCRIPT CHARACTER-18CD2;Lo;0;L;;;;;N;;;;;
+18CD3;KHITAN SMALL SCRIPT CHARACTER-18CD3;Lo;0;L;;;;;N;;;;;
+18CD4;KHITAN SMALL SCRIPT CHARACTER-18CD4;Lo;0;L;;;;;N;;;;;
+18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;;
+18D00;<Tangut Ideograph Supplement, First>;Lo;0;L;;;;;N;;;;;
+18D08;<Tangut Ideograph Supplement, Last>;Lo;0;L;;;;;N;;;;;
1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;;
1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;;
@@ -29973,6 +30651,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F10A;DIGIT NINE COMMA;No;0;EN;<compat> 0039 002C;;9;9;N;;;;;
1F10B;DINGBAT CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;;
1F10C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO;No;0;ON;;;;0;N;;;;;
+1F10D;CIRCLED ZERO WITH SLASH;So;0;ON;;;;;N;;;;;
+1F10E;CIRCLED ANTICLOCKWISE ARROW;So;0;ON;;;;;N;;;;;
+1F10F;CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH;So;0;ON;;;;;N;;;;;
1F110;PARENTHESIZED LATIN CAPITAL LETTER A;So;0;L;<compat> 0028 0041 0029;;;;N;;;;;
1F111;PARENTHESIZED LATIN CAPITAL LETTER B;So;0;L;<compat> 0028 0042 0029;;;;N;;;;;
1F112;PARENTHESIZED LATIN CAPITAL LETTER C;So;0;L;<compat> 0028 0043 0029;;;;N;;;;;
@@ -30066,6 +30747,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F16A;RAISED MC SIGN;So;0;ON;<super> 004D 0043;;;;N;;;;;
1F16B;RAISED MD SIGN;So;0;ON;<super> 004D 0044;;;;N;;;;;
1F16C;RAISED MR SIGN;So;0;ON;<super> 004D 0052;;;;N;;;;;
+1F16D;CIRCLED CC;So;0;ON;;;;;N;;;;;
+1F16E;CIRCLED C WITH OVERLAID BACKSLASH;So;0;ON;;;;;N;;;;;
+1F16F;CIRCLED HUMAN FIGURE;So;0;ON;;;;;N;;;;;
1F170;NEGATIVE SQUARED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;;
1F171;NEGATIVE SQUARED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;;
1F172;NEGATIVE SQUARED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;;
@@ -30127,6 +30811,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F1AA;SQUARED SHV;So;0;L;;;;;N;;;;;
1F1AB;SQUARED UHD;So;0;L;;;;;N;;;;;
1F1AC;SQUARED VOD;So;0;L;;;;;N;;;;;
+1F1AD;MASK WORK SYMBOL;So;0;ON;;;;;N;;;;;
1F1E6;REGIONAL INDICATOR SYMBOL LETTER A;So;0;L;;;;;N;;;;;
1F1E7;REGIONAL INDICATOR SYMBOL LETTER B;So;0;L;;;;;N;;;;;
1F1E8;REGIONAL INDICATOR SYMBOL LETTER C;So;0;L;;;;;N;;;;;
@@ -31199,6 +31884,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F6D3;STUPA;So;0;ON;;;;;N;;;;;
1F6D4;PAGODA;So;0;ON;;;;;N;;;;;
1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;;
+1F6D6;HUT;So;0;ON;;;;;N;;;;;
+1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;;
1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;;
1F6E1;SHIELD;So;0;ON;;;;;N;;;;;
1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;;
@@ -31223,6 +31910,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F6F8;FLYING SAUCER;So;0;ON;;;;;N;;;;;
1F6F9;SKATEBOARD;So;0;ON;;;;;N;;;;;
1F6FA;AUTO RICKSHAW;So;0;ON;;;;;N;;;;;
+1F6FB;PICKUP TRUCK;So;0;ON;;;;;N;;;;;
+1F6FC;ROLLER SKATE;So;0;ON;;;;;N;;;;;
1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;;
1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;;
1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;;
@@ -31588,6 +32277,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F8AB;RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;
1F8AC;WHITE ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;;
1F8AD;WHITE ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;;
+1F8B0;ARROW POINTING UPWARDS THEN NORTH WEST;So;0;ON;;;;;N;;;;;
+1F8B1;ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST;So;0;ON;;;;;N;;;;;
1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;;
1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;;
@@ -31600,6 +32291,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F909;DOWNWARD FACING NOTCHED HOOK;So;0;ON;;;;;N;;;;;
1F90A;DOWNWARD FACING HOOK WITH DOT;So;0;ON;;;;;N;;;;;
1F90B;DOWNWARD FACING NOTCHED HOOK WITH DOT;So;0;ON;;;;;N;;;;;
+1F90C;PINCHED FINGERS;So;0;ON;;;;;N;;;;;
1F90D;WHITE HEART;So;0;ON;;;;;N;;;;;
1F90E;BROWN HEART;So;0;ON;;;;;N;;;;;
1F90F;PINCHING HAND;So;0;ON;;;;;N;;;;;
@@ -31701,10 +32393,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F96F;BAGEL;So;0;ON;;;;;N;;;;;
1F970;SMILING FACE WITH SMILING EYES AND THREE HEARTS;So;0;ON;;;;;N;;;;;
1F971;YAWNING FACE;So;0;ON;;;;;N;;;;;
+1F972;SMILING FACE WITH TEAR;So;0;ON;;;;;N;;;;;
1F973;FACE WITH PARTY HORN AND PARTY HAT;So;0;ON;;;;;N;;;;;
1F974;FACE WITH UNEVEN EYES AND WAVY MOUTH;So;0;ON;;;;;N;;;;;
1F975;OVERHEATED FACE;So;0;ON;;;;;N;;;;;
1F976;FREEZING FACE;So;0;ON;;;;;N;;;;;
+1F977;NINJA;So;0;ON;;;;;N;;;;;
+1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;;
1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;;
1F97B;SARI;So;0;ON;;;;;N;;;;;
1F97C;LAB COAT;So;0;ON;;;;;N;;;;;
@@ -31746,12 +32441,17 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F9A0;MICROBE;So;0;ON;;;;;N;;;;;
1F9A1;BADGER;So;0;ON;;;;;N;;;;;
1F9A2;SWAN;So;0;ON;;;;;N;;;;;
+1F9A3;MAMMOTH;So;0;ON;;;;;N;;;;;
+1F9A4;DODO;So;0;ON;;;;;N;;;;;
1F9A5;SLOTH;So;0;ON;;;;;N;;;;;
1F9A6;OTTER;So;0;ON;;;;;N;;;;;
1F9A7;ORANGUTAN;So;0;ON;;;;;N;;;;;
1F9A8;SKUNK;So;0;ON;;;;;N;;;;;
1F9A9;FLAMINGO;So;0;ON;;;;;N;;;;;
1F9AA;OYSTER;So;0;ON;;;;;N;;;;;
+1F9AB;BEAVER;So;0;ON;;;;;N;;;;;
+1F9AC;BISON;So;0;ON;;;;;N;;;;;
+1F9AD;SEAL;So;0;ON;;;;;N;;;;;
1F9AE;GUIDE DOG;So;0;ON;;;;;N;;;;;
1F9AF;PROBING CANE;So;0;ON;;;;;N;;;;;
1F9B0;EMOJI COMPONENT RED HAIR;So;0;ON;;;;;N;;;;;
@@ -31781,6 +32481,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F9C8;BUTTER;So;0;ON;;;;;N;;;;;
1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;;
1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;;
+1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;;
1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;;
1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;;
1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;;
@@ -31934,20 +32635,273 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1FA71;ONE-PIECE SWIMSUIT;So;0;ON;;;;;N;;;;;
1FA72;BRIEFS;So;0;ON;;;;;N;;;;;
1FA73;SHORTS;So;0;ON;;;;;N;;;;;
+1FA74;THONG SANDAL;So;0;ON;;;;;N;;;;;
1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;;
1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;;
1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;;
1FA80;YO-YO;So;0;ON;;;;;N;;;;;
1FA81;KITE;So;0;ON;;;;;N;;;;;
1FA82;PARACHUTE;So;0;ON;;;;;N;;;;;
+1FA83;BOOMERANG;So;0;ON;;;;;N;;;;;
+1FA84;MAGIC WAND;So;0;ON;;;;;N;;;;;
+1FA85;PINATA;So;0;ON;;;;;N;;;;;
+1FA86;NESTING DOLLS;So;0;ON;;;;;N;;;;;
1FA90;RINGED PLANET;So;0;ON;;;;;N;;;;;
1FA91;CHAIR;So;0;ON;;;;;N;;;;;
1FA92;RAZOR;So;0;ON;;;;;N;;;;;
1FA93;AXE;So;0;ON;;;;;N;;;;;
1FA94;DIYA LAMP;So;0;ON;;;;;N;;;;;
1FA95;BANJO;So;0;ON;;;;;N;;;;;
+1FA96;MILITARY HELMET;So;0;ON;;;;;N;;;;;
+1FA97;ACCORDION;So;0;ON;;;;;N;;;;;
+1FA98;LONG DRUM;So;0;ON;;;;;N;;;;;
+1FA99;COIN;So;0;ON;;;;;N;;;;;
+1FA9A;CARPENTRY SAW;So;0;ON;;;;;N;;;;;
+1FA9B;SCREWDRIVER;So;0;ON;;;;;N;;;;;
+1FA9C;LADDER;So;0;ON;;;;;N;;;;;
+1FA9D;HOOK;So;0;ON;;;;;N;;;;;
+1FA9E;MIRROR;So;0;ON;;;;;N;;;;;
+1FA9F;WINDOW;So;0;ON;;;;;N;;;;;
+1FAA0;PLUNGER;So;0;ON;;;;;N;;;;;
+1FAA1;SEWING NEEDLE;So;0;ON;;;;;N;;;;;
+1FAA2;KNOT;So;0;ON;;;;;N;;;;;
+1FAA3;BUCKET;So;0;ON;;;;;N;;;;;
+1FAA4;MOUSE TRAP;So;0;ON;;;;;N;;;;;
+1FAA5;TOOTHBRUSH;So;0;ON;;;;;N;;;;;
+1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;;
+1FAA7;PLACARD;So;0;ON;;;;;N;;;;;
+1FAA8;ROCK;So;0;ON;;;;;N;;;;;
+1FAB0;FLY;So;0;ON;;;;;N;;;;;
+1FAB1;WORM;So;0;ON;;;;;N;;;;;
+1FAB2;BEETLE;So;0;ON;;;;;N;;;;;
+1FAB3;COCKROACH;So;0;ON;;;;;N;;;;;
+1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;;
+1FAB5;WOOD;So;0;ON;;;;;N;;;;;
+1FAB6;FEATHER;So;0;ON;;;;;N;;;;;
+1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;;
+1FAC1;LUNGS;So;0;ON;;;;;N;;;;;
+1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;;
+1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;;
+1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;;
+1FAD2;OLIVE;So;0;ON;;;;;N;;;;;
+1FAD3;FLATBREAD;So;0;ON;;;;;N;;;;;
+1FAD4;TAMALE;So;0;ON;;;;;N;;;;;
+1FAD5;FONDUE;So;0;ON;;;;;N;;;;;
+1FAD6;TEAPOT;So;0;ON;;;;;N;;;;;
+1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;;
+1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;;
+1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;;
+1FB03;BLOCK SEXTANT-3;So;0;ON;;;;;N;;;;;
+1FB04;BLOCK SEXTANT-13;So;0;ON;;;;;N;;;;;
+1FB05;BLOCK SEXTANT-23;So;0;ON;;;;;N;;;;;
+1FB06;BLOCK SEXTANT-123;So;0;ON;;;;;N;;;;;
+1FB07;BLOCK SEXTANT-4;So;0;ON;;;;;N;;;;;
+1FB08;BLOCK SEXTANT-14;So;0;ON;;;;;N;;;;;
+1FB09;BLOCK SEXTANT-24;So;0;ON;;;;;N;;;;;
+1FB0A;BLOCK SEXTANT-124;So;0;ON;;;;;N;;;;;
+1FB0B;BLOCK SEXTANT-34;So;0;ON;;;;;N;;;;;
+1FB0C;BLOCK SEXTANT-134;So;0;ON;;;;;N;;;;;
+1FB0D;BLOCK SEXTANT-234;So;0;ON;;;;;N;;;;;
+1FB0E;BLOCK SEXTANT-1234;So;0;ON;;;;;N;;;;;
+1FB0F;BLOCK SEXTANT-5;So;0;ON;;;;;N;;;;;
+1FB10;BLOCK SEXTANT-15;So;0;ON;;;;;N;;;;;
+1FB11;BLOCK SEXTANT-25;So;0;ON;;;;;N;;;;;
+1FB12;BLOCK SEXTANT-125;So;0;ON;;;;;N;;;;;
+1FB13;BLOCK SEXTANT-35;So;0;ON;;;;;N;;;;;
+1FB14;BLOCK SEXTANT-235;So;0;ON;;;;;N;;;;;
+1FB15;BLOCK SEXTANT-1235;So;0;ON;;;;;N;;;;;
+1FB16;BLOCK SEXTANT-45;So;0;ON;;;;;N;;;;;
+1FB17;BLOCK SEXTANT-145;So;0;ON;;;;;N;;;;;
+1FB18;BLOCK SEXTANT-245;So;0;ON;;;;;N;;;;;
+1FB19;BLOCK SEXTANT-1245;So;0;ON;;;;;N;;;;;
+1FB1A;BLOCK SEXTANT-345;So;0;ON;;;;;N;;;;;
+1FB1B;BLOCK SEXTANT-1345;So;0;ON;;;;;N;;;;;
+1FB1C;BLOCK SEXTANT-2345;So;0;ON;;;;;N;;;;;
+1FB1D;BLOCK SEXTANT-12345;So;0;ON;;;;;N;;;;;
+1FB1E;BLOCK SEXTANT-6;So;0;ON;;;;;N;;;;;
+1FB1F;BLOCK SEXTANT-16;So;0;ON;;;;;N;;;;;
+1FB20;BLOCK SEXTANT-26;So;0;ON;;;;;N;;;;;
+1FB21;BLOCK SEXTANT-126;So;0;ON;;;;;N;;;;;
+1FB22;BLOCK SEXTANT-36;So;0;ON;;;;;N;;;;;
+1FB23;BLOCK SEXTANT-136;So;0;ON;;;;;N;;;;;
+1FB24;BLOCK SEXTANT-236;So;0;ON;;;;;N;;;;;
+1FB25;BLOCK SEXTANT-1236;So;0;ON;;;;;N;;;;;
+1FB26;BLOCK SEXTANT-46;So;0;ON;;;;;N;;;;;
+1FB27;BLOCK SEXTANT-146;So;0;ON;;;;;N;;;;;
+1FB28;BLOCK SEXTANT-1246;So;0;ON;;;;;N;;;;;
+1FB29;BLOCK SEXTANT-346;So;0;ON;;;;;N;;;;;
+1FB2A;BLOCK SEXTANT-1346;So;0;ON;;;;;N;;;;;
+1FB2B;BLOCK SEXTANT-2346;So;0;ON;;;;;N;;;;;
+1FB2C;BLOCK SEXTANT-12346;So;0;ON;;;;;N;;;;;
+1FB2D;BLOCK SEXTANT-56;So;0;ON;;;;;N;;;;;
+1FB2E;BLOCK SEXTANT-156;So;0;ON;;;;;N;;;;;
+1FB2F;BLOCK SEXTANT-256;So;0;ON;;;;;N;;;;;
+1FB30;BLOCK SEXTANT-1256;So;0;ON;;;;;N;;;;;
+1FB31;BLOCK SEXTANT-356;So;0;ON;;;;;N;;;;;
+1FB32;BLOCK SEXTANT-1356;So;0;ON;;;;;N;;;;;
+1FB33;BLOCK SEXTANT-2356;So;0;ON;;;;;N;;;;;
+1FB34;BLOCK SEXTANT-12356;So;0;ON;;;;;N;;;;;
+1FB35;BLOCK SEXTANT-456;So;0;ON;;;;;N;;;;;
+1FB36;BLOCK SEXTANT-1456;So;0;ON;;;;;N;;;;;
+1FB37;BLOCK SEXTANT-2456;So;0;ON;;;;;N;;;;;
+1FB38;BLOCK SEXTANT-12456;So;0;ON;;;;;N;;;;;
+1FB39;BLOCK SEXTANT-3456;So;0;ON;;;;;N;;;;;
+1FB3A;BLOCK SEXTANT-13456;So;0;ON;;;;;N;;;;;
+1FB3B;BLOCK SEXTANT-23456;So;0;ON;;;;;N;;;;;
+1FB3C;LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB3D;LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB3E;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB3F;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB40;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB41;LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB42;LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB43;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB44;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB45;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB46;LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB47;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB48;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB49;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB4A;LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB4B;LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB4C;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB4D;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB4E;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB4F;LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB50;LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB51;LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB52;UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB53;UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB54;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB55;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB56;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FB57;UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB58;UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB59;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB5A;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB5B;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE;So;0;ON;;;;;N;;;;;
+1FB5C;UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB5D;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB5E;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB5F;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB60;UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB61;UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT;So;0;ON;;;;;N;;;;;
+1FB62;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB63;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB64;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB65;UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB66;UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT;So;0;ON;;;;;N;;;;;
+1FB67;UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FB68;UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB69;LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB6A;UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB6B;LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB6C;LEFT TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB6D;UPPER TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB6E;RIGHT TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB6F;LOWER TRIANGULAR ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB70;VERTICAL ONE EIGHTH BLOCK-2;So;0;ON;;;;;N;;;;;
+1FB71;VERTICAL ONE EIGHTH BLOCK-3;So;0;ON;;;;;N;;;;;
+1FB72;VERTICAL ONE EIGHTH BLOCK-4;So;0;ON;;;;;N;;;;;
+1FB73;VERTICAL ONE EIGHTH BLOCK-5;So;0;ON;;;;;N;;;;;
+1FB74;VERTICAL ONE EIGHTH BLOCK-6;So;0;ON;;;;;N;;;;;
+1FB75;VERTICAL ONE EIGHTH BLOCK-7;So;0;ON;;;;;N;;;;;
+1FB76;HORIZONTAL ONE EIGHTH BLOCK-2;So;0;ON;;;;;N;;;;;
+1FB77;HORIZONTAL ONE EIGHTH BLOCK-3;So;0;ON;;;;;N;;;;;
+1FB78;HORIZONTAL ONE EIGHTH BLOCK-4;So;0;ON;;;;;N;;;;;
+1FB79;HORIZONTAL ONE EIGHTH BLOCK-5;So;0;ON;;;;;N;;;;;
+1FB7A;HORIZONTAL ONE EIGHTH BLOCK-6;So;0;ON;;;;;N;;;;;
+1FB7B;HORIZONTAL ONE EIGHTH BLOCK-7;So;0;ON;;;;;N;;;;;
+1FB7C;LEFT AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FB7D;LEFT AND UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FB7E;RIGHT AND UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FB7F;RIGHT AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FB80;UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FB81;HORIZONTAL ONE EIGHTH BLOCK-1358;So;0;ON;;;;;N;;;;;
+1FB82;UPPER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB83;UPPER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB84;UPPER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB85;UPPER THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB86;UPPER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB87;RIGHT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+1FB88;RIGHT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB89;RIGHT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB8A;RIGHT THREE QUARTERS BLOCK;So;0;ON;;;;;N;;;;;
+1FB8B;RIGHT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+1FB8C;LEFT HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB8D;RIGHT HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB8E;UPPER HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB8F;LOWER HALF MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB90;INVERSE MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB91;UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB92;UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+1FB94;LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+1FB95;CHECKER BOARD FILL;So;0;ON;;;;;N;;;;;
+1FB96;INVERSE CHECKER BOARD FILL;So;0;ON;;;;;N;;;;;
+1FB97;HEAVY HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+1FB98;UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+1FB99;UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+1FB9A;UPPER AND LOWER TRIANGULAR HALF BLOCK;So;0;ON;;;;;N;;;;;
+1FB9B;LEFT AND RIGHT TRIANGULAR HALF BLOCK;So;0;ON;;;;;N;;;;;
+1FB9C;UPPER LEFT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB9D;UPPER RIGHT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB9E;LOWER RIGHT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FB9F;LOWER LEFT TRIANGULAR MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+1FBA0;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT;So;0;ON;;;;;N;;;;;
+1FBA1;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FBA2;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBA3;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBA4;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBA5;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBA6;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FBA7;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FBA8;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBA9;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBAA;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT;So;0;ON;;;;;N;;;;;
+1FBAB;BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT;So;0;ON;;;;;N;;;;;
+1FBAC;BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBAD;BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBAE;BOX DRAWINGS LIGHT DIAGONAL DIAMOND;So;0;ON;;;;;N;;;;;
+1FBAF;BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE;So;0;ON;;;;;N;;;;;
+1FBB0;ARROWHEAD-SHAPED POINTER;So;0;ON;;;;;N;;;;;
+1FBB1;INVERSE CHECK MARK;So;0;ON;;;;;N;;;;;
+1FBB2;LEFT HALF RUNNING MAN;So;0;ON;;;;;N;;;;;
+1FBB3;RIGHT HALF RUNNING MAN;So;0;ON;;;;;N;;;;;
+1FBB4;INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;;;;;
+1FBB5;LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FBB6;RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FBB7;DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FBB8;UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+1FBB9;LEFT HALF FOLDER;So;0;ON;;;;;N;;;;;
+1FBBA;RIGHT HALF FOLDER;So;0;ON;;;;;N;;;;;
+1FBBB;VOIDED GREEK CROSS;So;0;ON;;;;;N;;;;;
+1FBBC;RIGHT OPEN SQUARED DOT;So;0;ON;;;;;N;;;;;
+1FBBD;NEGATIVE DIAGONAL CROSS;So;0;ON;;;;;N;;;;;
+1FBBE;NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE;So;0;ON;;;;;N;;;;;
+1FBBF;NEGATIVE DIAGONAL DIAMOND;So;0;ON;;;;;N;;;;;
+1FBC0;WHITE HEAVY SALTIRE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+1FBC1;LEFT THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+1FBC2;MIDDLE THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+1FBC3;RIGHT THIRD WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+1FBC4;NEGATIVE SQUARED QUESTION MARK;So;0;ON;;;;;N;;;;;
+1FBC5;STICK FIGURE;So;0;ON;;;;;N;;;;;
+1FBC6;STICK FIGURE WITH ARMS RAISED;So;0;ON;;;;;N;;;;;
+1FBC7;STICK FIGURE LEANING LEFT;So;0;ON;;;;;N;;;;;
+1FBC8;STICK FIGURE LEANING RIGHT;So;0;ON;;;;;N;;;;;
+1FBC9;STICK FIGURE WITH DRESS;So;0;ON;;;;;N;;;;;
+1FBCA;WHITE UP-POINTING CHEVRON;So;0;ON;;;;;N;;;;;
+1FBF0;SEGMENTED DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1FBF1;SEGMENTED DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1FBF2;SEGMENTED DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1FBF3;SEGMENTED DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1FBF4;SEGMENTED DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1FBF5;SEGMENTED DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1FBF6;SEGMENTED DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1FBF7;SEGMENTED DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
-2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
+2A6DD;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
2B734;<CJK Ideograph Extension C, Last>;Lo;0;L;;;;;N;;;;;
2B740;<CJK Ideograph Extension D, First>;Lo;0;L;;;;;N;;;;;
@@ -32498,6 +33452,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;;
2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;;
2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;;
+30000;<CJK Ideograph Extension G, First>;Lo;0;L;;;;;N;;;;;
+3134A;<CJK Ideograph Extension G, Last>;Lo;0;L;;;;;N;;;;;
E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;;
E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;;
E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;;
diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/GCBTest.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/GCBTest.txt
index fb4fec9fff0..5baf292a071 100644
--- a/gnu/usr.bin/perl/lib/unicore/auxiliary/GCBTest.txt
+++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/GCBTest.txt
@@ -1,5 +1,5 @@
-# GraphemeBreakTest-12.1.0.txt
-# Date: 2019-03-10, 10:53:12 GMT
+# GraphemeBreakTest-13.0.0.txt
+# Date: 2019-11-15, 19:49:10 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/GraphemeBreakProperty.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/GraphemeBreakProperty.txt
index b75b201f978..6ee92f6eeca 100644
--- a/gnu/usr.bin/perl/lib/unicore/auxiliary/GraphemeBreakProperty.txt
+++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/GraphemeBreakProperty.txt
@@ -1,5 +1,5 @@
-# GraphemeBreakProperty-12.1.0.txt
-# Date: 2019-03-10, 10:53:12 GMT
+# GraphemeBreakProperty-13.0.0.txt
+# Date: 2019-10-21, 14:30:35 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -26,11 +26,13 @@
110BD ; Prepend # Cf KAITHI NUMBER SIGN
110CD ; Prepend # Cf KAITHI NUMBER SIGN ABOVE
111C2..111C3 ; Prepend # Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA
+1193F ; Prepend # Lo DIVES AKURU PREFIXED NASAL SIGN
+11941 ; Prepend # Lo DIVES AKURU INITIAL RA
11A3A ; Prepend # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
11A84..11A89 ; Prepend # Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA
11D46 ; Prepend # Lo MASARAM GONDI REPHA
-# Total code points: 22
+# Total code points: 24
# ================================================
@@ -139,7 +141,7 @@ E01F0..E0FFF ; Control # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
0B3F ; Extend # Mn ORIYA VOWEL SIGN I
0B41..0B44 ; Extend # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
0B4D ; Extend # Mn ORIYA SIGN VIRAMA
-0B56 ; Extend # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; Extend # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57 ; Extend # Mc ORIYA AU LENGTH MARK
0B62..0B63 ; Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
0B82 ; Extend # Mn TAMIL SIGN ANUSVARA
@@ -169,6 +171,7 @@ E01F0..E0FFF ; Control # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
0D4D ; Extend # Mn MALAYALAM SIGN VIRAMA
0D57 ; Extend # Mc MALAYALAM AU LENGTH MARK
0D62..0D63 ; Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; Extend # Mn SINHALA SIGN CANDRABINDU
0DCA ; Extend # Mn SINHALA SIGN AL-LAKUNA
0DCF ; Extend # Mc SINHALA VOWEL SIGN AELA-PILLA
0DD2..0DD4 ; Extend # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
@@ -229,6 +232,7 @@ E01F0..E0FFF ; Control # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0 ; Extend # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B34 ; Extend # Mn BALINESE SIGN REREKAN
1B35 ; Extend # Mc BALINESE VOWEL SIGN TEDUNG
@@ -275,6 +279,7 @@ A802 ; Extend # Mn SYLOTI NAGRI SIGN DVISVARA
A806 ; Extend # Mn SYLOTI NAGRI SIGN HASANTA
A80B ; Extend # Mn SYLOTI NAGRI SIGN ANUSVARA
A825..A826 ; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A82C ; Extend # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A8C4..A8C5 ; Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
A8E0..A8F1 ; Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
A8FF ; Extend # Mn DEVANAGARI VOWEL SIGN AY
@@ -315,6 +320,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
10A3F ; Extend # Mn KHAROSHTHI VIRAMA
10AE5..10AE6 ; Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
10D24..10D27 ; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
10F46..10F50 ; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
11001 ; Extend # Mn BRAHMI SIGN ANUSVARA
11038..11046 ; Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
@@ -328,6 +334,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
11180..11181 ; Extend # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
111B6..111BE ; Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111C9..111CC ; Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CF ; Extend # Mn SHARADA SIGN INVERTED CANDRABINDU
1122F..11231 ; Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11234 ; Extend # Mn KHOJKI SIGN ANUSVARA
11236..11237 ; Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
@@ -368,6 +375,10 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
11727..1172B ; Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
1182F..11837 ; Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
11839..1183A ; Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+11930 ; Extend # Mc DIVES AKURU VOWEL SIGN AA
+1193B..1193C ; Extend # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193E ; Extend # Mn DIVES AKURU VIRAMA
+11943 ; Extend # Mn DIVES AKURU SIGN NUKTA
119D4..119D7 ; Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119DA..119DB ; Extend # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
119E0 ; Extend # Mn NANDINAGARI SIGN VIRAMA
@@ -399,6 +410,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
16B30..16B36 ; Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F4F ; Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR
16F8F..16F92 ; Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16FE4 ; Extend # Mn KHITAN SMALL SCRIPT FILLER
1BC9D..1BC9E ; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
1D165 ; Extend # Mc MUSICAL SYMBOL COMBINING STEM
1D167..1D169 ; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
@@ -426,7 +438,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 1970
+# Total code points: 1984
# ================================================
@@ -539,6 +551,7 @@ ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK
11182 ; SpacingMark # Mc SHARADA SIGN VISARGA
111B3..111B5 ; SpacingMark # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
111BF..111C0 ; SpacingMark # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+111CE ; SpacingMark # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
1122C..1122E ; SpacingMark # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
11232..11233 ; SpacingMark # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
11235 ; SpacingMark # Mc KHOJKI SIGN VIRAMA
@@ -570,6 +583,11 @@ ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK
11726 ; SpacingMark # Mc AHOM VOWEL SIGN E
1182C..1182E ; SpacingMark # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
11838 ; SpacingMark # Mc DOGRA SIGN VISARGA
+11931..11935 ; SpacingMark # Mc [5] DIVES AKURU VOWEL SIGN I..DIVES AKURU VOWEL SIGN E
+11937..11938 ; SpacingMark # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193D ; SpacingMark # Mc DIVES AKURU SIGN HALANTA
+11940 ; SpacingMark # Mc DIVES AKURU MEDIAL YA
+11942 ; SpacingMark # Mc DIVES AKURU MEDIAL RA
119D1..119D3 ; SpacingMark # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
119DC..119DF ; SpacingMark # Mc [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
119E4 ; SpacingMark # Mc NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
@@ -586,10 +604,11 @@ ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK
11D96 ; SpacingMark # Mc GUNJALA GONDI SIGN VISARGA
11EF5..11EF6 ; SpacingMark # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
16F51..16F87 ; SpacingMark # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+16FF0..16FF1 ; SpacingMark # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
1D166 ; SpacingMark # Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
1D16D ; SpacingMark # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT
-# Total code points: 375
+# Total code points: 388
# ================================================
diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/LBTest.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/LBTest.txt
index eb056990a0d..d8666c458fc 100644
--- a/gnu/usr.bin/perl/lib/unicore/auxiliary/LBTest.txt
+++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/LBTest.txt
@@ -1,5 +1,5 @@
-# LineBreakTest-12.1.0.txt
-# Date: 2019-03-10, 10:53:14 GMT
+# LineBreakTest-13.0.0.txt
+# Date: 2019-11-21, 16:13:36 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -54,10 +54,6 @@
× 0023 × 0020 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0023 × 0308 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0023 × 0308 × 0020 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0023 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0023 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0023 × 0308 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0023 × 0308 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0023 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0023 × 0020 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0023 × 0308 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -90,9 +86,9 @@
× 0023 × 0020 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0023 × 0308 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0023 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0023 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0023 × 0020 ÷ 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0023 × 0308 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0023 × 0308 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0023 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] COMMA (IS) ÷ [0.3]
× 0023 × 0020 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -126,10 +122,10 @@
× 0023 × 0020 ÷ 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0023 × 0308 × 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0023 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0023 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0023 × 0308 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0023 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0023 × 0020 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0023 × 0308 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0023 × 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 0023 × 0020 ÷ 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0023 × 0308 × 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -170,6 +166,14 @@
× 0023 × 0020 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0023 × 0308 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0023 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0023 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0023 × 0308 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0023 × 0308 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0023 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0023 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0023 × 0308 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0023 × 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0023 × 0020 ÷ 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0023 × 0308 × 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -222,10 +226,6 @@
× 2014 × 0020 × 007D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2014 × 0308 × 007D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2014 × 0308 × 0020 × 007D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2014 × 0029 ÷ # × [0.3] EM DASH (B2) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2014 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2014 × 0308 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2014 × 0308 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2014 × 000D ÷ # × [0.3] EM DASH (B2) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2014 × 0020 × 000D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2014 × 0308 × 000D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -258,9 +258,9 @@
× 2014 × 0020 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 2014 × 0308 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2014 ÷ 2024 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2014 × 2024 ÷ # × [0.3] EM DASH (B2) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2014 × 0020 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2014 × 0308 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2014 × 0308 × 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2014 × 002C ÷ # × [0.3] EM DASH (B2) × [13.02] COMMA (IS) ÷ [0.3]
× 2014 × 0020 × 002C ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -294,10 +294,10 @@
× 2014 × 0020 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 2014 × 0308 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2014 ÷ 0028 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2014 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2014 × 0308 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2014 ÷ 2329 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2014 × 0020 ÷ 2329 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2014 × 0308 ÷ 2329 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 2014 ÷ 0025 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 2014 × 0020 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 2014 × 0308 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -338,6 +338,14 @@
× 2014 × 0020 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2014 × 0308 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2014 × 0029 ÷ # × [0.3] EM DASH (B2) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2014 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2014 × 0308 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2014 × 0308 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2014 ÷ 0028 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2014 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2014 × 0308 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 2014 × 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2014 × 0020 ÷ 0001 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2014 × 0308 × 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -390,10 +398,6 @@
× 0009 × 0020 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0009 × 0308 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0009 × 0308 × 0020 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0009 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0009 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0009 × 0308 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0009 × 0308 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0009 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0009 × 0020 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0009 × 0308 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -426,9 +430,9 @@
× 0009 × 0020 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0009 × 0308 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0009 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0009 × 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0009 × 0020 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0009 × 0308 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0009 × 0308 × 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0009 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] COMMA (IS) ÷ [0.3]
× 0009 × 0020 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -462,10 +466,10 @@
× 0009 × 0020 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0009 × 0308 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0009 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0009 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0009 × 0308 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0009 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0009 × 0020 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0009 × 0308 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0009 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0009 × 0020 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0009 × 0308 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -506,6 +510,14 @@
× 0009 × 0020 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0009 × 0308 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0009 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0009 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0009 × 0308 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0009 × 0308 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0009 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0009 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0009 × 0308 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0009 × 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0009 × 0020 ÷ 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0009 × 0308 × 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -558,10 +570,6 @@
× 00B4 × 0020 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00B4 × 0308 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00B4 × 0308 × 0020 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00B4 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00B4 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00B4 × 0308 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00B4 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00B4 × 0020 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00B4 × 0308 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -630,10 +638,10 @@
× 00B4 × 0020 ÷ 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 00B4 × 0308 × 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] DIGIT ZERO (NU) ÷ [0.3]
× 00B4 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00B4 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00B4 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00B4 × 0308 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00B4 × 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00B4 × 0020 ÷ 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00B4 × 0308 × 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 00B4 × 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] PERCENT SIGN (PO) ÷ [0.3]
× 00B4 × 0020 ÷ 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 00B4 × 0308 × 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] PERCENT SIGN (PO) ÷ [0.3]
@@ -674,6 +682,14 @@
× 00B4 × 0020 ÷ 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00B4 × 0308 × 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00B4 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00B4 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00B4 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00B4 × 0308 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00B4 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00B4 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00B4 × 0308 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 00B4 × 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00B4 × 0020 ÷ 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00B4 × 0308 × 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -726,10 +742,6 @@
× 000B ÷ 0020 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000B ÷ 0308 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000B ÷ 0308 × 0020 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000B ÷ 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000B ÷ 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000B ÷ 0308 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000B ÷ 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000B ÷ 0020 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000B ÷ 0308 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -764,7 +776,7 @@
× 000B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 000B ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000B ÷ 0020 ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000B ÷ 0308 × 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 000B ÷ 0308 × 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000B ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000B ÷ 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMMA (IS) ÷ [0.3]
× 000B ÷ 0020 × 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -798,10 +810,10 @@
× 000B ÷ 0020 ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000B ÷ 0308 × 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 000B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000B ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000B ÷ 0308 × 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000B ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000B ÷ 0020 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000B ÷ 0308 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000B ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] PERCENT SIGN (PO) ÷ [0.3]
× 000B ÷ 0020 ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 000B ÷ 0308 × 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -842,6 +854,14 @@
× 000B ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000B ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000B ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000B ÷ 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000B ÷ 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000B ÷ 0308 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000B ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000B ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000B ÷ 0308 × 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 000B ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000B ÷ 0020 ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000B ÷ 0308 × 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -894,10 +914,6 @@
× FFFC × 0020 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× FFFC × 0308 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× FFFC × 0308 × 0020 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× FFFC × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× FFFC × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× FFFC × 0308 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× FFFC × 0308 × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× FFFC × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× FFFC × 0020 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× FFFC × 0308 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -966,10 +982,10 @@
× FFFC × 0020 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× FFFC × 0308 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] DIGIT ZERO (NU) ÷ [0.3]
× FFFC × 0308 × 0020 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× FFFC ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× FFFC × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× FFFC × 0308 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× FFFC ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× FFFC × 0020 ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× FFFC × 0308 ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× FFFC ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] PERCENT SIGN (PO) ÷ [0.3]
× FFFC × 0020 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× FFFC × 0308 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -1010,6 +1026,14 @@
× FFFC × 0020 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× FFFC × 0308 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× FFFC × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× FFFC × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× FFFC × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× FFFC × 0308 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× FFFC × 0308 × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× FFFC ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× FFFC × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× FFFC × 0308 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× FFFC × 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× FFFC × 0020 ÷ 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× FFFC × 0308 × 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -1062,10 +1086,6 @@
× 007D × 0020 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 007D × 0308 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 007D × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 007D × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 007D × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 007D × 0308 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 007D × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 007D × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 007D × 0020 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 007D × 0308 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -1098,9 +1118,9 @@
× 007D × 0020 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 007D × 0308 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 007D ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 007D × 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 007D × 0020 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 007D × 0308 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 007D × 0308 × 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 007D × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] COMMA (IS) ÷ [0.3]
× 007D × 0020 × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -1134,10 +1154,10 @@
× 007D × 0020 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 007D × 0308 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 007D ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 007D × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 007D × 0308 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 007D ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 007D × 0020 ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 007D × 0308 ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 007D ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 007D × 0020 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 007D × 0308 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -1178,6 +1198,14 @@
× 007D × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 007D × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 007D × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 007D × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 007D × 0308 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 007D × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 007D ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 007D × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 007D × 0308 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 007D × 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 007D × 0020 ÷ 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 007D × 0308 × 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -1202,174 +1230,6 @@
× 007D × 0020 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 007D × 0308 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 007D × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 × 0308 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0308 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 × 0308 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 0308 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 × 0308 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 0308 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0308 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0029 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0029 × 0308 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0029 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0308 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 0308 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 × 0308 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 × 0308 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 0308 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 0308 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 × 0308 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0308 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0029 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 0308 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0029 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0029 × 0308 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0029 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 × 0308 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 × 0308 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 0308 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0308 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 0308 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0308 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 × 0308 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0029 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0029 × 0308 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0029 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 × 0308 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0308 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0308 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 0308 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 0308 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 0308 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 × 0308 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 × 0308 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 × 0308 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 × 0308 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 0308 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 0308 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 0308 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0308 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 0308 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0308 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000D ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] NUMBER SIGN (AL) ÷ [0.3]
× 000D ÷ 0020 ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 000D ÷ 0308 × 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
@@ -1398,10 +1258,6 @@
× 000D ÷ 0020 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000D ÷ 0308 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000D ÷ 0308 × 0020 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000D ÷ 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000D ÷ 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000D ÷ 0308 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000D ÷ 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000D ÷ 0020 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000D ÷ 0308 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -1436,7 +1292,7 @@
× 000D ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 000D ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] ONE DOT LEADER (IN) ÷ [0.3]
× 000D ÷ 0020 ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000D ÷ 0308 × 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 000D ÷ 0308 × 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000D ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000D ÷ 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMMA (IS) ÷ [0.3]
× 000D ÷ 0020 × 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -1470,10 +1326,10 @@
× 000D ÷ 0020 ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000D ÷ 0308 × 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 000D ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000D ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000D ÷ 0308 × 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000D ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000D ÷ 0020 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000D ÷ 0308 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000D ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] PERCENT SIGN (PO) ÷ [0.3]
× 000D ÷ 0020 ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 000D ÷ 0308 × 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -1514,6 +1370,14 @@
× 000D ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000D ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000D ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000D ÷ 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000D ÷ 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000D ÷ 0308 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000D ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000D ÷ 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000D ÷ 0308 × 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 000D ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000D ÷ 0020 ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000D ÷ 0308 × 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -1566,10 +1430,6 @@
× 0021 × 0020 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0021 × 0308 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0021 × 0308 × 0020 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0021 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0021 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0021 × 0308 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0021 × 0308 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0021 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0021 × 0020 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0021 × 0308 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -1602,9 +1462,9 @@
× 0021 × 0020 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0021 × 0308 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.02] ONE DOT LEADER (IN) ÷ [0.3]
+× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0021 × 0020 ÷ 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0021 × 0308 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.02] ONE DOT LEADER (IN) ÷ [0.3]
+× 0021 × 0308 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0021 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] COMMA (IS) ÷ [0.3]
× 0021 × 0020 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -1638,10 +1498,10 @@
× 0021 × 0020 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0021 × 0308 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0021 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0021 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0021 × 0308 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0021 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0021 × 0020 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0021 × 0308 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0021 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0021 × 0020 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0021 × 0308 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -1682,6 +1542,14 @@
× 0021 × 0020 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0021 × 0308 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0021 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0021 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0021 × 0308 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0021 × 0308 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0021 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0021 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0021 × 0308 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0021 × 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0021 × 0020 ÷ 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0021 × 0308 × 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -1734,10 +1602,6 @@
× 00A0 × 0020 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A0 × 0308 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A0 × 0308 × 0020 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A0 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A0 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A0 × 0308 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00A0 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A0 × 0020 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A0 × 0308 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -1806,10 +1670,10 @@
× 00A0 × 0020 ÷ 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 00A0 × 0308 × 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] DIGIT ZERO (NU) ÷ [0.3]
× 00A0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A0 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A0 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A0 × 0308 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00A0 × 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A0 × 0020 ÷ 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A0 × 0308 × 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 00A0 × 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] PERCENT SIGN (PO) ÷ [0.3]
× 00A0 × 0020 ÷ 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 00A0 × 0308 × 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -1850,6 +1714,14 @@
× 00A0 × 0020 ÷ 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A0 × 0308 × 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A0 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A0 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A0 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A0 × 0308 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A0 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A0 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A0 × 0308 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 00A0 × 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00A0 × 0020 ÷ 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00A0 × 0308 × 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -1902,10 +1774,6 @@
× AC00 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC00 × 0308 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC00 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC00 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC00 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC00 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC00 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× AC00 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC00 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC00 × 0308 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -1938,9 +1806,9 @@
× AC00 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× AC00 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC00 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× AC00 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC00 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC00 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× AC00 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC00 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] COMMA (IS) ÷ [0.3]
× AC00 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -1974,10 +1842,10 @@
× AC00 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× AC00 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC00 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC00 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC00 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× AC00 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC00 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC00 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× AC00 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× AC00 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× AC00 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -2018,6 +1886,14 @@
× AC00 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC00 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC00 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC00 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC00 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC00 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC00 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC00 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC00 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× AC00 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× AC00 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× AC00 × 0308 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2070,10 +1946,6 @@
× AC01 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC01 × 0308 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC01 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC01 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC01 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC01 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC01 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× AC01 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC01 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC01 × 0308 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2106,9 +1978,9 @@
× AC01 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× AC01 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC01 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× AC01 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC01 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC01 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× AC01 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC01 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] COMMA (IS) ÷ [0.3]
× AC01 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2142,10 +2014,10 @@
× AC01 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× AC01 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC01 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC01 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC01 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× AC01 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC01 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC01 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× AC01 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× AC01 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× AC01 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -2186,6 +2058,14 @@
× AC01 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC01 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC01 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC01 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC01 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC01 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× AC01 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC01 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC01 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× AC01 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× AC01 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× AC01 × 0308 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2238,10 +2118,6 @@
× 05D0 × 0020 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 05D0 × 0308 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 05D0 × 0308 × 0020 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 05D0 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 05D0 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 05D0 × 0308 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 05D0 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 05D0 × 0020 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 05D0 × 0308 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2274,9 +2150,9 @@
× 05D0 × 0020 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 05D0 × 0308 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 05D0 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 05D0 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 05D0 × 0020 ÷ 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 05D0 × 0308 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 05D0 × 0308 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 05D0 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] COMMA (IS) ÷ [0.3]
× 05D0 × 0020 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2310,10 +2186,10 @@
× 05D0 × 0020 ÷ 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 05D0 × 0308 × 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 05D0 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 05D0 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 05D0 × 0308 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 05D0 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 05D0 × 0020 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 05D0 × 0308 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 05D0 × 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 05D0 × 0020 ÷ 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 05D0 × 0308 × 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -2354,6 +2230,14 @@
× 05D0 × 0020 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 05D0 × 0308 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 05D0 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 05D0 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 05D0 × 0308 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 05D0 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 05D0 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 05D0 × 0308 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 05D0 × 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 05D0 × 0020 ÷ 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 05D0 × 0308 × 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2406,10 +2290,6 @@
× 002D × 0020 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002D × 0308 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002D × 0308 × 0020 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002D × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002D × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002D × 0308 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002D × 0308 × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002D × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002D × 0020 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002D × 0308 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2442,9 +2322,9 @@
× 002D × 0020 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 002D × 0308 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002D ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002D × 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002D × 0020 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002D × 0308 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002D × 0308 × 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002D × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] COMMA (IS) ÷ [0.3]
× 002D × 0020 × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2478,10 +2358,10 @@
× 002D × 0020 ÷ 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 002D × 0308 × 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.02] DIGIT ZERO (NU) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002D ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002D × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002D × 0308 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002D ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002D × 0020 ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002D × 0308 ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 002D ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 002D × 0020 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 002D × 0308 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -2522,6 +2402,14 @@
× 002D × 0020 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002D × 0308 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002D × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002D × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002D × 0308 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002D × 0308 × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002D ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002D × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002D × 0308 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 002D × 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002D × 0020 ÷ 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002D × 0308 × 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2574,10 +2462,6 @@
× 231A × 0020 × 007D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 231A × 0308 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 231A × 0308 × 0020 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 0029 ÷ # × [0.3] WATCH (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 231A × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 231A × 0308 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 231A × 0308 × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 231A × 000D ÷ # × [0.3] WATCH (ID) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 231A × 0020 × 000D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 231A × 0308 × 000D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2610,9 +2494,9 @@
× 231A × 0020 ÷ 231A ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 231A × 0308 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 231A × 0308 × 0020 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 231A × 2024 ÷ # × [0.3] WATCH (ID) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 231A × 2024 ÷ # × [0.3] WATCH (ID) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 231A × 0020 ÷ 2024 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 0308 × 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 231A × 0308 × 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 231A × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 231A × 002C ÷ # × [0.3] WATCH (ID) × [13.02] COMMA (IS) ÷ [0.3]
× 231A × 0020 × 002C ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2646,10 +2530,10 @@
× 231A × 0020 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 231A × 0308 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 231A × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A ÷ 0028 ÷ # × [0.3] WATCH (ID) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 231A × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 231A × 0308 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 231A ÷ 2329 ÷ # × [0.3] WATCH (ID) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 231A × 0020 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 231A × 0308 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 231A × 0025 ÷ # × [0.3] WATCH (ID) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
× 231A × 0020 ÷ 0025 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 231A × 0308 × 0025 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
@@ -2690,6 +2574,14 @@
× 231A × 0020 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 231A × 0308 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 231A × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 231A × 0029 ÷ # × [0.3] WATCH (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 231A × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 231A × 0308 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 231A × 0308 × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 231A ÷ 0028 ÷ # × [0.3] WATCH (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 231A × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 231A × 0308 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 231A × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 231A × 0020 ÷ 0001 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 231A × 0308 × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2742,10 +2634,6 @@
× 2024 × 0020 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2024 × 0308 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2024 × 0308 × 0020 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2024 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2024 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2024 × 0308 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2024 × 0308 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2024 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2024 × 0020 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2024 × 0308 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2778,9 +2666,9 @@
× 2024 × 0020 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 2024 × 0308 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.04] ONE DOT LEADER (IN) ÷ [0.3]
+× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2024 × 0020 ÷ 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2024 × 0308 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.04] ONE DOT LEADER (IN) ÷ [0.3]
+× 2024 × 0308 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2024 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] COMMA (IS) ÷ [0.3]
× 2024 × 0020 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2814,10 +2702,10 @@
× 2024 × 0020 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 2024 × 0308 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2024 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2024 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2024 × 0308 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2024 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2024 × 0020 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2024 × 0308 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 2024 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 2024 × 0020 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 2024 × 0308 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -2858,6 +2746,14 @@
× 2024 × 0020 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2024 × 0308 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2024 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2024 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2024 × 0308 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2024 × 0308 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2024 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2024 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2024 × 0308 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 2024 × 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2024 × 0020 ÷ 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2024 × 0308 × 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -2910,10 +2806,6 @@
× 002C × 0020 × 007D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002C × 0308 × 007D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002C × 0308 × 0020 × 007D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002C × 0029 ÷ # × [0.3] COMMA (IS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002C × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002C × 0308 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002C × 0308 × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002C × 000D ÷ # × [0.3] COMMA (IS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002C × 0020 × 000D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002C × 0308 × 000D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -2946,9 +2838,9 @@
× 002C × 0020 ÷ 231A ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 002C × 0308 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002C ÷ 2024 ÷ # × [0.3] COMMA (IS) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002C × 2024 ÷ # × [0.3] COMMA (IS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002C × 0020 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002C × 0308 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002C × 0308 × 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002C × 002C ÷ # × [0.3] COMMA (IS) × [13.02] COMMA (IS) ÷ [0.3]
× 002C × 0020 × 002C ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2982,10 +2874,10 @@
× 002C × 0020 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 002C × 0308 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002C ÷ 0028 ÷ # × [0.3] COMMA (IS) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002C × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002C × 0308 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002C ÷ 2329 ÷ # × [0.3] COMMA (IS) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002C × 0020 ÷ 2329 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002C × 0308 ÷ 2329 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 2329 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 002C ÷ 0025 ÷ # × [0.3] COMMA (IS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 002C × 0020 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 002C × 0308 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -3026,6 +2918,14 @@
× 002C × 0020 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002C × 0308 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002C × 0029 ÷ # × [0.3] COMMA (IS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002C × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002C × 0308 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002C × 0308 × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002C ÷ 0028 ÷ # × [0.3] COMMA (IS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002C × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002C × 0308 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 002C × 0001 ÷ # × [0.3] COMMA (IS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002C × 0020 ÷ 0001 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002C × 0308 × 0001 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3078,10 +2978,6 @@
× 1100 × 0020 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1100 × 0308 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1100 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1100 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1100 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1100 × 0308 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1100 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1100 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1100 × 0020 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1100 × 0308 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3114,9 +3010,9 @@
× 1100 × 0020 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 1100 × 0308 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1100 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1100 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1100 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1100 × 0308 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1100 × 0308 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1100 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] COMMA (IS) ÷ [0.3]
× 1100 × 0020 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3150,10 +3046,10 @@
× 1100 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 1100 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1100 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1100 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1100 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1100 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1100 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1100 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1100 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× 1100 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1100 × 0308 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -3194,6 +3090,14 @@
× 1100 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1100 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1100 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1100 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1100 × 0308 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1100 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1100 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1100 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1100 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 1100 × 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1100 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1100 × 0308 × 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3246,10 +3150,6 @@
× 11A8 × 0020 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 11A8 × 0308 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 11A8 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 11A8 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 11A8 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 11A8 × 0308 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 11A8 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 11A8 × 0020 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 11A8 × 0308 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3282,9 +3182,9 @@
× 11A8 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 11A8 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 11A8 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 11A8 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 11A8 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 11A8 × 0308 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 11A8 × 0308 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 11A8 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] COMMA (IS) ÷ [0.3]
× 11A8 × 0020 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3318,10 +3218,10 @@
× 11A8 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 11A8 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 11A8 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 11A8 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 11A8 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 11A8 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 11A8 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 11A8 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 11A8 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× 11A8 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 11A8 × 0308 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -3362,6 +3262,14 @@
× 11A8 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 11A8 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 11A8 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11A8 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11A8 × 0308 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11A8 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 11A8 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 11A8 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 11A8 × 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 11A8 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 11A8 × 0308 × 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3414,10 +3322,6 @@
× 1160 × 0020 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1160 × 0308 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1160 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1160 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1160 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1160 × 0308 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1160 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1160 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1160 × 0020 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1160 × 0308 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3450,9 +3354,9 @@
× 1160 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 1160 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1160 × 0308 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1160 × 0308 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] COMMA (IS) ÷ [0.3]
× 1160 × 0020 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3486,10 +3390,10 @@
× 1160 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 1160 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1160 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1160 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1160 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1160 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1160 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1160 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× 1160 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1160 × 0308 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -3530,6 +3434,14 @@
× 1160 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1160 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1160 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1160 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1160 × 0308 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1160 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1160 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1160 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1160 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 1160 × 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1160 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1160 × 0308 × 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3582,10 +3494,6 @@
× 000A ÷ 0020 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000A ÷ 0308 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000A ÷ 0308 × 0020 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000A ÷ 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000A ÷ 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000A ÷ 0308 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000A ÷ 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000A ÷ 0020 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000A ÷ 0308 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3620,7 +3528,7 @@
× 000A ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 000A ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] ONE DOT LEADER (IN) ÷ [0.3]
× 000A ÷ 0020 ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000A ÷ 0308 × 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 000A ÷ 0308 × 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000A ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000A ÷ 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMMA (IS) ÷ [0.3]
× 000A ÷ 0020 × 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3654,10 +3562,10 @@
× 000A ÷ 0020 ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000A ÷ 0308 × 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 000A ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000A ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000A ÷ 0308 × 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000A ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000A ÷ 0020 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000A ÷ 0308 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000A ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] PERCENT SIGN (PO) ÷ [0.3]
× 000A ÷ 0020 ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 000A ÷ 0308 × 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -3698,6 +3606,14 @@
× 000A ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000A ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000A ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000A ÷ 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000A ÷ 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000A ÷ 0308 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 000A ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000A ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000A ÷ 0308 × 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 000A ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000A ÷ 0020 ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 000A ÷ 0308 × 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3750,10 +3666,6 @@
× 0085 ÷ 0020 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0085 ÷ 0308 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0085 ÷ 0308 × 0020 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0085 ÷ 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0085 ÷ 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0085 ÷ 0308 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0085 ÷ 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0085 ÷ 0020 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0085 ÷ 0308 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3788,7 +3700,7 @@
× 0085 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0085 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] ONE DOT LEADER (IN) ÷ [0.3]
× 0085 ÷ 0020 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0085 ÷ 0308 × 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0085 ÷ 0308 × 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0085 ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0085 ÷ 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMMA (IS) ÷ [0.3]
× 0085 ÷ 0020 × 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3822,10 +3734,10 @@
× 0085 ÷ 0020 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0085 ÷ 0308 × 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0085 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0085 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0085 ÷ 0308 × 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0085 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0085 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] PERCENT SIGN (PO) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0085 ÷ 0308 × 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -3866,6 +3778,14 @@
× 0085 ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0085 ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0085 ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0085 ÷ 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0085 ÷ 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0085 ÷ 0308 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0085 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0085 ÷ 0308 × 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0085 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0085 ÷ 0308 × 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -3918,10 +3838,6 @@
× 17D6 × 0020 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 17D6 × 0308 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 17D6 × 0308 × 0020 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 17D6 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 17D6 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 17D6 × 0308 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 17D6 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 17D6 × 0020 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 17D6 × 0308 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -3954,9 +3870,9 @@
× 17D6 × 0020 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 17D6 × 0308 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 17D6 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 17D6 × 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 17D6 × 0020 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 17D6 × 0308 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 17D6 × 0308 × 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 17D6 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] COMMA (IS) ÷ [0.3]
× 17D6 × 0020 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3990,10 +3906,10 @@
× 17D6 × 0020 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 17D6 × 0308 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 17D6 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 17D6 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 17D6 × 0308 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 17D6 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 17D6 × 0020 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 17D6 × 0308 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 17D6 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 17D6 × 0020 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 17D6 × 0308 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -4034,6 +3950,14 @@
× 17D6 × 0020 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 17D6 × 0308 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 17D6 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 17D6 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 17D6 × 0308 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 17D6 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 17D6 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 17D6 × 0308 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 17D6 × 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 17D6 × 0020 ÷ 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 17D6 × 0308 × 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -4086,10 +4010,6 @@
× 0030 × 0020 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0030 × 0308 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0030 × 0308 × 0020 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0030 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0030 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0030 × 0308 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0030 × 0308 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0030 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0030 × 0020 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0030 × 0308 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -4122,9 +4042,9 @@
× 0030 × 0020 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0030 × 0308 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.05] ONE DOT LEADER (IN) ÷ [0.3]
+× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0030 × 0020 ÷ 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0030 × 0308 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.05] ONE DOT LEADER (IN) ÷ [0.3]
+× 0030 × 0308 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0030 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [25.03] COMMA (IS) ÷ [0.3]
× 0030 × 0020 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -4158,10 +4078,10 @@
× 0030 × 0020 ÷ 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0030 × 0308 × 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.03] DIGIT ZERO (NU) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0030 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0030 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0030 × 0308 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0030 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0030 × 0020 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0030 × 0308 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0030 × 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [25.05] PERCENT SIGN (PO) ÷ [0.3]
× 0030 × 0020 ÷ 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0030 × 0308 × 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.05] PERCENT SIGN (PO) ÷ [0.3]
@@ -4202,6 +4122,14 @@
× 0030 × 0020 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0030 × 0308 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0030 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0030 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0030 × 0308 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0030 × 0308 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0030 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0030 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0030 × 0308 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0030 × 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0030 × 0020 ÷ 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0030 × 0308 × 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -4226,174 +4154,178 @@
× 0030 × 0020 ÷ 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0030 × 0308 × 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 0308 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0308 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 0308 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 0308 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × 0308 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 0308 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 0308 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0308 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0308 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0308 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 0308 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × 0308 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × 0308 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × 0308 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 0308 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 0308 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 0308 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 0308 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0308 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 0308 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0028 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0028 × 0308 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0028 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 0308 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 0308 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 0308 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 0308 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0308 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 0308 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0308 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0308 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0028 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0028 × 0308 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0028 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0308 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0308 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0308 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 0308 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 0308 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 0308 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 0308 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 0308 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 0308 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 0308 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 0308 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0308 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 0308 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 0308 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 0308 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 0308 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0308 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 0308 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0308 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2329 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2329 × 0020 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2329 × 0308 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2329 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] EM DASH (B2) ÷ [0.3]
+× 2329 × 0020 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
+× 2329 × 0308 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EM DASH (B2) ÷ [0.3]
+× 2329 × 0308 × 0020 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
+× 2329 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2329 × 0020 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2329 × 0308 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2329 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2329 × 0020 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2329 × 0308 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2329 × 0308 × 0020 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2329 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2329 × 0020 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2329 × 0308 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2329 × 0308 × 0020 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2329 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2329 × 0020 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2329 × 0308 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2329 × 0308 × 0020 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2329 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2329 × 0020 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2329 × 0308 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2329 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2329 × 0020 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2329 × 0308 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2329 × 0308 × 0020 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2329 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2329 × 0020 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2329 × 0308 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2329 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2329 × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2329 × 0308 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2329 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2329 × 0020 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2329 × 0308 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2329 × 0308 × 0020 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2329 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2329 × 0020 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2329 × 0308 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2329 × 0308 × 0020 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2329 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2329 × 0020 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2329 × 0308 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2329 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2329 × 0020 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2329 × 0308 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2329 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2329 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] WATCH (ID) ÷ [0.3]
+× 2329 × 0020 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
+× 2329 × 0308 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WATCH (ID) ÷ [0.3]
+× 2329 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
+× 2329 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2329 × 0020 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2329 × 0308 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2329 × 0308 × 0020 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2329 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] COMMA (IS) ÷ [0.3]
+× 2329 × 0020 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 2329 × 0308 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 2329 × 0308 × 0020 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 2329 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2329 × 0020 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2329 × 0308 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2329 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2329 × 0020 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2329 × 0308 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2329 × 0308 × 0020 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2329 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2329 × 0020 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2329 × 0308 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2329 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2329 × 0020 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2329 × 0308 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2329 × 0308 × 0020 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2329 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2329 × 0020 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2329 × 0308 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2329 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2329 × 0020 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2329 × 0308 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2329 × 0308 × 0020 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2329 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2329 × 0020 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2329 × 0308 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2329 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2329 × 0020 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2329 × 0308 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2329 × 0308 × 0020 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2329 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2329 × 0020 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2329 × 0308 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2329 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2329 × 0020 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2329 × 0308 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2329 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 2329 × 0020 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 2329 × 0308 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 2329 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) ÷ [0.3]
+× 2329 × 0020 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 2329 × 0308 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 2329 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2329 × 0020 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2329 × 0308 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 2329 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2329 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2329 × 0020 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2329 × 0308 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2329 × 0308 × 0020 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2329 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2329 × 0020 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2329 × 0308 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2329 × 0308 × 0020 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2329 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2329 × 0020 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2329 × 0308 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2329 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2329 × 0020 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2329 × 0308 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2329 × 0308 × 0020 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2329 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2329 × 0020 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2329 × 0308 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2329 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2329 × 0020 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2329 × 0308 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2329 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2329 × 0020 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2329 × 0308 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2329 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2329 × 0020 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2329 × 0308 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2329 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2329 × 0020 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2329 × 0308 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2329 × 0308 × 0020 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2329 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2329 × 0020 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2329 × 0308 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2329 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2329 × 0020 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2329 × 0308 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2329 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2329 × 0020 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2329 × 0308 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2329 × 0308 × 0020 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2329 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2329 × 0020 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2329 × 0308 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2329 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0025 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
× 0025 × 0020 ÷ 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0025 × 0308 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
@@ -4422,10 +4354,6 @@
× 0025 × 0020 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0025 × 0308 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0025 × 0308 × 0020 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0025 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0025 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0025 × 0308 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0025 × 0308 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0025 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0025 × 0020 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0025 × 0308 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -4458,9 +4386,9 @@
× 0025 × 0020 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0025 × 0308 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0025 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0025 × 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0025 × 0020 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0025 × 0308 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0025 × 0308 × 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0025 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] COMMA (IS) ÷ [0.3]
× 0025 × 0020 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -4494,10 +4422,10 @@
× 0025 × 0020 ÷ 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0025 × 0308 × 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0025 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0025 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0025 × 0308 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0025 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0025 × 0020 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0025 × 0308 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0025 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0025 × 0020 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0025 × 0308 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -4538,6 +4466,14 @@
× 0025 × 0020 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0025 × 0308 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0025 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0025 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0025 × 0308 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0025 × 0308 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0025 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0025 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0025 × 0308 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0025 × 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0025 × 0020 ÷ 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0025 × 0308 × 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -4590,10 +4526,6 @@
× 0024 × 0020 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0024 × 0308 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0024 × 0308 × 0020 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0024 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0024 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0024 × 0308 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0024 × 0308 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0024 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0024 × 0020 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0024 × 0308 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -4626,9 +4558,9 @@
× 0024 × 0020 ÷ 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0024 × 0308 × 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] WATCH (ID) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0024 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0024 × 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0024 × 0020 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0024 × 0308 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0024 × 0308 × 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0024 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] COMMA (IS) ÷ [0.3]
× 0024 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -4662,10 +4594,10 @@
× 0024 × 0020 ÷ 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0024 × 0308 × 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0024 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0024 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0024 × 0308 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0024 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0024 × 0020 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0024 × 0308 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0024 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0024 × 0020 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0024 × 0308 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -4706,6 +4638,14 @@
× 0024 × 0020 ÷ 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0024 × 0308 × 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0024 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0024 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0024 × 0308 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0024 × 0308 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0024 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0024 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0024 × 0308 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0024 × 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0024 × 0020 ÷ 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0024 × 0308 × 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -4758,10 +4698,6 @@
× 0022 × 0020 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0022 × 0308 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0022 × 0308 × 0020 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0022 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0022 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0022 × 0308 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0022 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0022 × 0020 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0022 × 0308 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -4830,10 +4766,10 @@
× 0022 × 0020 ÷ 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0022 × 0308 × 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] DIGIT ZERO (NU) ÷ [0.3]
× 0022 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0022 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0022 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0022 × 0308 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0022 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0022 × 0020 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0022 × 0308 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0022 × 0308 × 0020 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0022 × 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
× 0022 × 0020 ÷ 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0022 × 0308 × 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -4874,6 +4810,14 @@
× 0022 × 0020 ÷ 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0022 × 0308 × 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0022 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0022 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0022 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0022 × 0308 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0022 × 0308 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0022 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0022 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0022 × 0308 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0022 × 0308 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0022 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0022 × 0020 ÷ 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0022 × 0308 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -4926,10 +4870,6 @@
× 0020 × 0020 × 007D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0020 ÷ 0308 × 007D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0020 ÷ 0308 × 0020 × 007D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0020 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0020 ÷ 0308 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0020 × 000D ÷ # × [0.3] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0020 × 0020 × 000D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0020 ÷ 0308 × 000D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -4964,7 +4904,7 @@
× 0020 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0020 × 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0020 ÷ 0308 × 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0020 ÷ 0308 × 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0020 ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0020 × 002C ÷ # × [0.3] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0020 × 0020 × 002C ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -4998,10 +4938,10 @@
× 0020 × 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0020 ÷ 0308 × 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0020 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0020 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0020 ÷ 0308 × 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0020 × 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0020 × 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0020 ÷ 0308 × 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -5042,6 +4982,14 @@
× 0020 × 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0020 ÷ 0308 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0020 ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0020 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0020 ÷ 0308 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0020 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0020 ÷ 0308 × 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0020 × 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0020 ÷ 0308 × 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5094,10 +5042,6 @@
× 002F × 0020 × 007D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002F × 0308 × 007D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002F × 0308 × 0020 × 007D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002F × 0029 ÷ # × [0.3] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002F × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002F × 0308 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002F × 0308 × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002F × 000D ÷ # × [0.3] SOLIDUS (SY) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002F × 0020 × 000D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002F × 0308 × 000D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5130,9 +5074,9 @@
× 002F × 0020 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 002F × 0308 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002F ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002F × 2024 ÷ # × [0.3] SOLIDUS (SY) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002F × 0020 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002F × 0308 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002F × 0308 × 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002F × 002C ÷ # × [0.3] SOLIDUS (SY) × [13.02] COMMA (IS) ÷ [0.3]
× 002F × 0020 × 002C ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -5166,10 +5110,10 @@
× 002F × 0020 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 002F × 0308 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002F ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002F × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002F × 0308 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002F ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002F × 0020 ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002F × 0308 ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 002F ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 002F × 0020 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 002F × 0308 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -5210,6 +5154,14 @@
× 002F × 0020 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002F × 0308 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002F × 0029 ÷ # × [0.3] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002F × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002F × 0308 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002F × 0308 × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 002F ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002F × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002F × 0308 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 002F × 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002F × 0020 ÷ 0001 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 002F × 0308 × 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5262,10 +5214,6 @@
× 2060 × 0020 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2060 × 0308 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2060 × 0308 × 0020 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2060 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2060 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2060 × 0308 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2060 × 0308 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2060 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2060 × 0020 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2060 × 0308 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5334,10 +5282,10 @@
× 2060 × 0020 ÷ 0030 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 2060 × 0308 × 0030 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] DIGIT ZERO (NU) ÷ [0.3]
× 2060 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2060 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2060 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2060 × 0308 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2060 × 2329 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2060 × 0020 ÷ 2329 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2060 × 0308 × 2329 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 2060 × 0025 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] PERCENT SIGN (PO) ÷ [0.3]
× 2060 × 0020 ÷ 0025 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 2060 × 0308 × 0025 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -5378,6 +5326,14 @@
× 2060 × 0020 ÷ 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2060 × 0308 × 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2060 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2060 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2060 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2060 × 0308 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2060 × 0308 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 2060 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2060 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2060 × 0308 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 2060 × 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2060 × 0020 ÷ 0001 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 2060 × 0308 × 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5430,10 +5386,6 @@
× 200B × 0020 ÷ 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 200B ÷ 0308 × 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 200B ÷ 0308 × 0020 × 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200B ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200B × 0020 ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200B ÷ 0308 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 200B × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 200B × 0020 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 200B ÷ 0308 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5468,7 +5420,7 @@
× 200B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 200B ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200B × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200B ÷ 0308 × 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 200B ÷ 0308 × 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200B ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200B ÷ 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMMA (IS) ÷ [0.3]
× 200B × 0020 ÷ 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] COMMA (IS) ÷ [0.3]
@@ -5502,10 +5454,10 @@
× 200B × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] DIGIT ZERO (NU) ÷ [0.3]
× 200B ÷ 0308 × 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 200B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 200B ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200B × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200B ÷ 0308 × 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 200B ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200B × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200B ÷ 0308 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 200B ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] PERCENT SIGN (PO) ÷ [0.3]
× 200B × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] PERCENT SIGN (PO) ÷ [0.3]
× 200B ÷ 0308 × 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -5546,6 +5498,14 @@
× 200B × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200B ÷ 0308 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200B ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200B ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200B × 0020 ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200B ÷ 0308 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200B ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200B × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200B ÷ 0308 × 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 200B ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 200B × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 200B ÷ 0308 × 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5598,10 +5558,6 @@
× 1F1E6 × 0020 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1F1E6 × 0308 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1F1E6 × 0308 × 0020 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F1E6 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F1E6 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F1E6 × 0308 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1F1E6 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1F1E6 × 0020 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1F1E6 × 0308 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5634,9 +5590,9 @@
× 1F1E6 × 0020 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 1F1E6 × 0308 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1F1E6 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F1E6 × 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F1E6 × 0020 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F1E6 × 0308 × 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F1E6 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] COMMA (IS) ÷ [0.3]
× 1F1E6 × 0020 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -5670,10 +5626,10 @@
× 1F1E6 × 0020 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 1F1E6 × 0308 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F1E6 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1F1E6 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1F1E6 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1F1E6 × 0308 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -5714,6 +5670,14 @@
× 1F1E6 × 0020 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F1E6 × 0308 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F1E6 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F1E6 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F1E6 × 0308 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F1E6 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 1F1E6 × 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1F1E6 × 0308 × 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5766,10 +5730,6 @@
× 261D × 0020 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 261D × 0308 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 261D × 0308 × 0020 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 261D × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 261D × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 261D × 0308 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 261D × 0308 × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 261D × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 261D × 0020 × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 261D × 0308 × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5802,9 +5762,9 @@
× 261D × 0020 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 261D × 0308 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 261D × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 261D × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 261D × 0020 ÷ 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 261D × 0308 × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 261D × 0308 × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 261D × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] COMMA (IS) ÷ [0.3]
× 261D × 0020 × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -5838,10 +5798,10 @@
× 261D × 0020 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 261D × 0308 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 261D ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 261D × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 261D × 0308 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 261D ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 261D × 0020 ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 261D × 0308 ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 261D × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
× 261D × 0020 ÷ 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 261D × 0308 × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
@@ -5882,6 +5842,14 @@
× 261D × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 261D × 0308 × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 261D × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 261D × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 261D × 0308 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 261D × 0308 × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 261D ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 261D × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 261D × 0308 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 261D × 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 261D × 0020 ÷ 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 261D × 0308 × 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -5934,10 +5902,6 @@
× 1F3FB × 0020 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1F3FB × 0308 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1F3FB × 0308 × 0020 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F3FB × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F3FB × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F3FB × 0308 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1F3FB × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1F3FB × 0020 × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1F3FB × 0308 × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -5970,9 +5934,9 @@
× 1F3FB × 0020 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 1F3FB × 0308 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1F3FB × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F3FB × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F3FB × 0020 ÷ 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F3FB × 0308 × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F3FB × 0308 × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F3FB × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] COMMA (IS) ÷ [0.3]
× 1F3FB × 0020 × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6006,10 +5970,10 @@
× 1F3FB × 0020 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 1F3FB × 0308 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F3FB ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F3FB × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F3FB × 0308 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1F3FB ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F3FB × 0020 ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F3FB × 0308 ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 1F3FB × 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
× 1F3FB × 0020 ÷ 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1F3FB × 0308 × 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
@@ -6050,6 +6014,14 @@
× 1F3FB × 0020 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F3FB × 0308 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F3FB × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F3FB × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F3FB × 0308 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1F3FB ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F3FB × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F3FB × 0308 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 1F3FB × 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1F3FB × 0020 ÷ 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 1F3FB × 0308 × 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6074,6 +6046,350 @@
× 1F3FB × 0020 ÷ 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1F3FB × 0308 × 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0029 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
+× 0029 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0029 × 0308 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0029 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0029 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0029 × 0308 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0029 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0029 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0029 × 0308 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0029 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0029 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0029 × 0308 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0029 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0029 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0029 × 0308 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0029 × 0308 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0029 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0029 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0029 × 0308 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0029 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0029 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0029 × 0308 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0029 × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0029 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0029 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0029 × 0308 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0029 × 0308 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0029 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0029 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0029 × 0308 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0029 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0029 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0029 × 0308 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0029 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0029 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0029 × 0308 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0029 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0029 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0029 × 0308 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0029 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0029 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0029 × 0308 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0029 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0029 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0029 × 0308 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0029 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0029 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0029 × 0308 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0029 × 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 × 0308 × 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] COMMA (IS) ÷ [0.3]
+× 0029 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0029 × 0308 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0029 × 0308 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0029 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0029 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0029 × 0308 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0029 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0029 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0029 × 0308 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0029 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0029 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0029 × 0308 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0029 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0029 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0029 × 0308 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0029 × 0308 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0029 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0029 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0029 × 0308 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0029 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0029 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0029 × 0308 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0029 × 0308 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0029 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0029 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0029 × 0308 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0029 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0029 × 0020 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0029 × 0308 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0029 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0029 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0029 × 0308 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0029 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0029 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0029 × 0308 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0029 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0029 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0029 × 0308 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0029 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [0.3]
+× 0029 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0029 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0029 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0029 × 0308 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0029 × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0029 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0029 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0029 × 0308 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0029 × 0308 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0029 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0029 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0029 × 0308 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0029 × 0308 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0029 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0029 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0029 × 0308 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0029 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 × 0308 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0029 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0029 × 0308 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0029 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0029 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0029 × 0308 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0029 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 0308 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0029 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0029 × 0308 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0029 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0029 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0029 × 0308 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0029 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0029 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0029 × 0308 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0029 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0029 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0029 × 0308 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0029 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0029 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0029 × 0308 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0029 × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0028 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 0308 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] EM DASH (B2) ÷ [0.3]
+× 0028 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
+× 0028 × 0308 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EM DASH (B2) ÷ [0.3]
+× 0028 × 0308 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
+× 0028 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0028 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0028 × 0308 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0028 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0028 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0028 × 0308 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0028 × 0308 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0028 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0028 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0028 × 0308 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0028 × 0308 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0028 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0028 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0028 × 0308 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0028 × 0308 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0028 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 0308 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0028 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0028 × 0308 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0028 × 0308 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0028 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0028 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0028 × 0308 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0028 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0028 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0028 × 0308 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0028 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0028 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0028 × 0308 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0028 × 0308 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0028 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0028 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0028 × 0308 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0028 × 0308 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0028 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0028 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0028 × 0308 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0028 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0028 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0028 × 0308 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0028 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0028 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] WATCH (ID) ÷ [0.3]
+× 0028 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
+× 0028 × 0308 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WATCH (ID) ÷ [0.3]
+× 0028 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
+× 0028 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0028 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0028 × 0308 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0028 × 0308 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0028 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] COMMA (IS) ÷ [0.3]
+× 0028 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0028 × 0308 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0028 × 0308 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0028 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0028 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0028 × 0308 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0028 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0028 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0028 × 0308 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0028 × 0308 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0028 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0028 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0028 × 0308 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0028 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0028 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0028 × 0308 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0028 × 0308 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0028 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0028 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0028 × 0308 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0028 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0028 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0028 × 0308 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0028 × 0308 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0028 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0028 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0028 × 0308 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0028 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0028 × 0020 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0028 × 0308 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0028 × 0308 × 0020 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0028 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0028 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0028 × 0308 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0028 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0028 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0028 × 0308 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0028 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0028 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0028 × 0308 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0028 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) ÷ [0.3]
+× 0028 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0028 × 0308 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0028 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0028 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0028 × 0308 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0028 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0028 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0028 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0028 × 0308 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0028 × 0308 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0028 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0028 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0028 × 0308 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0028 × 0308 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0028 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0028 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0028 × 0308 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0028 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 0308 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 0308 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0308 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0308 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0028 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0028 × 0308 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0028 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 0308 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0028 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0028 × 0308 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0028 × 0308 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0028 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0028 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0028 × 0308 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0028 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0028 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0028 × 0308 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0028 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0028 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0028 × 0308 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0028 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0028 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0028 × 0308 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0028 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0001 × 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0001 × 0020 ÷ 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0001 × 0308 × 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
@@ -6102,10 +6418,6 @@
× 0001 × 0020 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0001 × 0308 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0001 × 0308 × 0020 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0001 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0001 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0001 × 0308 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0001 × 0308 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0001 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0001 × 0020 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0001 × 0308 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6138,9 +6450,9 @@
× 0001 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0001 × 0308 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0001 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0001 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0001 × 0020 ÷ 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0001 × 0308 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0001 × 0308 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0001 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] COMMA (IS) ÷ [0.3]
× 0001 × 0020 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6174,10 +6486,10 @@
× 0001 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0001 × 0308 × 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0001 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0001 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0001 × 0308 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0001 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0001 × 0020 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0001 × 0308 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0001 × 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 0001 × 0020 ÷ 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0001 × 0308 × 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -6218,6 +6530,14 @@
× 0001 × 0020 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0001 × 0308 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0001 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0001 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0001 × 0308 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0001 × 0308 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0001 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0001 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0001 × 0308 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0001 × 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0001 × 0020 ÷ 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0001 × 0308 × 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6270,10 +6590,6 @@
× 200D × 0020 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 200D × 0308 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 200D × 0308 × 0020 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200D × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200D × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200D × 0308 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200D × 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 200D × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 200D × 0020 × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 200D × 0308 × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6308,7 +6624,7 @@
× 200D × 0308 × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 200D × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] ONE DOT LEADER (IN) ÷ [0.3]
× 200D × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200D × 0308 × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 200D × 0308 × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200D × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMMA (IS) ÷ [0.3]
× 200D × 0020 × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6342,10 +6658,10 @@
× 200D × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 200D × 0308 × 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 200D × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200D × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200D × 0308 × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 200D × 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200D × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200D × 0308 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 200D × 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] PERCENT SIGN (PO) ÷ [0.3]
× 200D × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 200D × 0308 × 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -6386,6 +6702,14 @@
× 200D × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200D × 0308 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200D × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200D × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200D × 0308 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200D × 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 200D × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200D × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200D × 0308 × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 200D × 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 200D × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 200D × 0308 × 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6438,10 +6762,6 @@
× 00A7 × 0020 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A7 × 0308 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A7 × 0308 × 0020 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A7 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A7 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A7 × 0308 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00A7 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A7 × 0020 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A7 × 0308 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6474,9 +6794,9 @@
× 00A7 × 0020 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 00A7 × 0308 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00A7 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 00A7 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A7 × 0020 ÷ 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A7 × 0308 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 00A7 × 0308 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A7 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] COMMA (IS) ÷ [0.3]
× 00A7 × 0020 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6510,10 +6830,10 @@
× 00A7 × 0020 ÷ 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 00A7 × 0308 × 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A7 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A7 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A7 × 0308 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00A7 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A7 × 0020 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A7 × 0308 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 00A7 × 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 00A7 × 0020 ÷ 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 00A7 × 0308 × 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -6554,6 +6874,14 @@
× 00A7 × 0020 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A7 × 0308 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A7 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A7 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A7 × 0308 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00A7 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A7 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A7 × 0308 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 00A7 × 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00A7 × 0020 ÷ 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 00A7 × 0308 × 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6606,10 +6934,6 @@
× 50005 × 0020 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 50005 × 0308 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 50005 × 0308 × 0020 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 50005 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 50005 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 50005 × 0308 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 50005 × 0308 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 50005 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 50005 × 0020 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 50005 × 0308 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6642,9 +6966,9 @@
× 50005 × 0020 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 50005 × 0308 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 50005 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 50005 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 50005 × 0020 ÷ 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 50005 × 0308 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 50005 × 0308 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 50005 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] COMMA (IS) ÷ [0.3]
× 50005 × 0020 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6678,10 +7002,10 @@
× 50005 × 0020 ÷ 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 50005 × 0308 × 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 50005 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 50005 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 50005 × 0308 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 50005 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 50005 × 0020 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 50005 × 0308 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 50005 × 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 50005 × 0020 ÷ 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 50005 × 0308 × 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -6722,6 +7046,14 @@
× 50005 × 0020 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 50005 × 0308 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 50005 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 50005 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 50005 × 0308 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 50005 × 0308 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 50005 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 50005 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 50005 × 0308 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 50005 × 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 50005 × 0020 ÷ 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 50005 × 0308 × 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6774,10 +7106,6 @@
× 0E01 × 0020 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0E01 × 0308 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0E01 × 0308 × 0020 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0E01 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0E01 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0E01 × 0308 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0E01 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0E01 × 0020 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0E01 × 0308 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6810,9 +7138,9 @@
× 0E01 × 0020 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0E01 × 0308 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0E01 × 0020 ÷ 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0E01 × 0308 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0E01 × 0308 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0E01 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] COMMA (IS) ÷ [0.3]
× 0E01 × 0020 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6846,10 +7174,10 @@
× 0E01 × 0020 ÷ 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0E01 × 0308 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0E01 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0E01 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0E01 × 0308 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0E01 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0E01 × 0020 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0E01 × 0308 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0E01 × 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 0E01 × 0020 ÷ 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0E01 × 0308 × 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
@@ -6890,6 +7218,14 @@
× 0E01 × 0020 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0E01 × 0308 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0E01 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0E01 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0E01 × 0308 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0E01 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0E01 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0E01 × 0308 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0E01 × 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0E01 × 0020 ÷ 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0E01 × 0308 × 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -6942,10 +7278,6 @@
× 3041 × 0020 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 3041 × 0308 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 3041 × 0308 × 0020 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 3041 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 3041 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 3041 × 0308 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 3041 × 0308 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 3041 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 3041 × 0020 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 3041 × 0308 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -6978,9 +7310,9 @@
× 3041 × 0020 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 3041 × 0308 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 3041 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 3041 × 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 3041 × 0020 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 3041 × 0308 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 3041 × 0308 × 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 3041 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] COMMA (IS) ÷ [0.3]
× 3041 × 0020 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -7014,10 +7346,10 @@
× 3041 × 0020 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 3041 × 0308 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 3041 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 3041 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 3041 × 0308 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 3041 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 3041 × 0020 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 3041 × 0308 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 3041 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 3041 × 0020 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 3041 × 0308 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -7058,6 +7390,14 @@
× 3041 × 0020 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 3041 × 0308 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 3041 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 3041 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 3041 × 0308 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 3041 × 0308 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 3041 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 3041 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 3041 × 0308 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 3041 × 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 3041 × 0020 ÷ 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 3041 × 0308 × 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -7099,10 +7439,10 @@
× 3041 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× FFFC ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 3041 × 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.02] ONE DOT LEADER (IN) ÷ [0.3]
-× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.04] ONE DOT LEADER (IN) ÷ [0.3]
-× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.05] ONE DOT LEADER (IN) ÷ [0.3]
+× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 261D × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
× 0E01 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0024 × 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] WHITE UP POINTING INDEX (EB) ÷ [0.3]
@@ -7111,7 +7451,7 @@
× 1100 × 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 1160 × 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 11A8 × 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
@@ -7120,8 +7460,8 @@
× 0063 × 0061 × 006E × 2019 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3]
× 0027 × 0063 × 0061 × 006E × 0027 × 0020 ÷ 006E × 006F × 0074 ÷ # × [0.3] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] APOSTROPHE (QU) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER T (AL) ÷ [0.3]
× 0063 × 0061 × 006E × 0020 ÷ 0027 × 006E × 006F × 0074 × 0027 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER T (AL) × [19.01] APOSTROPHE (QU) ÷ [0.3]
-× 0062 × 0075 × 0067 × 0028 × 0073 × 0029 × 0020 × 0020 × 0020 × 0020 × 0020 ÷ # × [0.3] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0062 × 0075 × 0067 × 0028 × 0073 × 0029 × 00A0 × 0020 × 0020 × 0020 × 0020 × 0020 ÷ # × [0.3] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [12.1] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0062 × 0075 × 0067 × 0028 × 0073 × 0029 × 0020 × 0020 × 0020 × 0020 × 0020 ÷ # × [0.3] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0062 × 0075 × 0067 × 0028 × 0073 × 0029 × 00A0 × 0020 × 0020 × 0020 × 0020 × 0020 ÷ # × [0.3] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 002E × 002E ÷ 307E ÷ 3059 × 3002 ÷ 0058 × 004D × 004C ÷ 306E × 002E × 002E ÷ # × [0.3] FULL STOP (IS) × [13.02] FULL STOP (IS) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [999.0] HIRAGANA LETTER SU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN CAPITAL LETTER X (AL) × [28.0] LATIN CAPITAL LETTER M (AL) × [28.0] LATIN CAPITAL LETTER L (AL) ÷ [999.0] HIRAGANA LETTER NO (ID) × [13.02] FULL STOP (IS) × [13.02] FULL STOP (IS) ÷ [0.3]
× 0061 × 0062 × 00AD ÷ 0062 × 0079 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER Y (AL) ÷ [0.3]
× 002D × 0033 ÷ # × [0.3] HYPHEN-MINUS (HY) × [25.02] DIGIT THREE (NU) ÷ [0.3]
@@ -7130,81 +7470,81 @@
× 0061 × 0020 × 0020 ÷ 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
× 0061 × 0020 × 0020 × 200B ÷ 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
× 0061 × 0020 ÷ 0308 × 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
-× 0031 × 0308 × 0062 × 0028 × 0061 × 0029 × 002D ÷ 0028 × 0062 × 0029 ÷ # × [0.3] DIGIT ONE (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER B (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0067 × 0069 × 0076 × 0065 × 0020 ÷ 0062 × 006F × 006F × 006B × 0028 × 0073 × 0029 × 002E ÷ # × [0.3] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER K (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 307E ÷ 0028 × 3059 × 0029 ÷ # × [0.3] HIRAGANA LETTER MA (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER SU (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0031 × 0308 × 0062 × 0028 × 0061 × 0029 × 002D ÷ 0028 × 0062 × 0029 ÷ # × [0.3] DIGIT ONE (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER B (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0067 × 0069 × 0076 × 0065 × 0020 ÷ 0062 × 006F × 006F × 006B × 0028 × 0073 × 0029 × 002E ÷ # × [0.3] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER K (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] FULL STOP (IS) ÷ [0.3]
+× 307E ÷ 0028 × 3059 × 0029 ÷ # × [0.3] HIRAGANA LETTER MA (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER SU (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0066 × 0069 × 006E × 0064 × 0020 × 002E × 0063 × 006F × 006D ÷ # × [0.3] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER D (AL) × [7.01] SPACE (SP) × [13.02] FULL STOP (IS) × [29.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER M (AL) ÷ [0.3]
× 0065 × 0071 × 0075 × 0061 × 006C × 0073 × 0020 × 002E ÷ 0033 × 0035 × 0020 ÷ 0063 × 0065 × 006E × 0074 × 0073 ÷ # × [0.3] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER Q (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT THREE (NU) × [25.03] DIGIT FIVE (NU) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER S (AL) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0068 × 0065 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [0.3]
-× 007B × 0073 × 007D ÷ 0068 × 0065 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [0.3]
-× 02C8 × 0073 × 0049 × 006C × 0259 × 0062 × 0028 × 0259 × 0029 × 006C ÷ # × [0.3] MODIFIER LETTER VERTICAL LINE (BB) × [21.04] LATIN SMALL LETTER S (AL) × [28.0] LATIN CAPITAL LETTER I (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER SCHWA (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER SCHWA (AL) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER L (AL) ÷ [0.3]
-× 02C8 × 0073 × 0049 × 006C × 0259 × 0062 × 007B × 0259 × 007D ÷ 006C ÷ # × [0.3] MODIFIER LETTER VERTICAL LINE (BB) × [21.04] LATIN SMALL LETTER S (AL) × [28.0] LATIN CAPITAL LETTER I (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER SCHWA (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER SCHWA (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0029 × 002E ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 002E × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] FULL STOP (IS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0029 × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0021 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 005C ÷ 0028 × 0073 × 005C × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0020 × 0073 × 0020 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 002E ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 005C ÷ 007B × 0073 × 005C × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0020 × 0073 × 0020 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0028 × 0065 × 0029 ÷ 2026 ÷ 0028 × 0073 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0063 × 006F × 0064 × 0028 × 0065 × 0029 ÷ 2026 × 0029 × 0073 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER S (AL) ÷ [0.3]
-× 0063 × 006F × 0064 × 007B × 0065 × 007D ÷ 2026 ÷ 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 007B × 0063 × 006F × 0064 × 007B × 0065 × 007D ÷ 2026 × 007D ÷ 0073 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER S (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 002D × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 00AD × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 2011 × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 0029 × 002D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 0029 × 00AD ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 0029 × 2011 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 002D × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 00AD × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 2011 × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 007D × 002D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 007D × 00AD ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 007D × 2011 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 0028 × 0065 × 0301 × 0029 ÷ 0028 × 0065 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 005B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 005D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT SQUARE BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 007B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 0308 × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0308 × 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 0028 × 0020 × 0308 × 0020 × 0029 × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 0028 × 0020 × 0308 × 0020 × 0029 × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 0308 × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0308 × 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 007B × 0020 × 0308 × 0020 × 007D × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT CURLY BRACKET (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 007B × 0020 × 0308 × 0020 × 007D × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT CURLY BRACKET (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 0029 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 0029 × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 0029 × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT PARENTHESIS (CP) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 007D ÷ 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 007D × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 007D × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 006F × 0070 × 0065 × 0072 × 0061 × 0074 × 006F × 0072 × 005B × 005D ÷ 0028 × 0030 × 0029 × 003B ÷ # × [0.3] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [30.01] LEFT SQUARE BRACKET (OP) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP) × [13.02] SEMICOLON (IS) ÷ [0.3]
-× 006F × 0070 × 0065 × 0072 × 0061 × 0074 × 006F × 0072 × 005B × 005D ÷ 0028 × 0029 ÷ 007B × 007D ÷ # × [0.3] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [30.01] LEFT SQUARE BRACKET (OP) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT CURLY BRACKET (OP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 672C ÷ 0028 × 3092 × 0029 ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 0028 × 300C × 3092 × 300D × 0029 ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 300C × 0028 × 3092 × 0029 × 300D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 007B × 3092 × 007D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CURLY BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 007B × 300C × 3092 × 300D × 007D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CURLY BRACKET (OP) × [14.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 005B × 0028 × 3092 × 0029 × 005D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT SQUARE BRACKET (OP) × [14.0] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 0028 × 30CB × 30E5 × 30FC × 30FB × 0029 ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 0028 × 30CB × 30E5 × 30FC × 0029 × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 007B × 30CB × 30E5 × 30FC × 30FB × 007D ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 007B × 30CB × 30E5 × 30FC × 007D × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT CURLY BRACKET (CL) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 0028 × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 0029 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 0028 × 1850 × 1846 × 1851 × 1846 × 0029 ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 007B × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 007D ÷ 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 007B × 1850 × 1846 × 1851 × 1846 × 007D ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 0028 × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 0029 × 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 007D ÷ 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 0028 × 0030 × 002C × 0031 × 0029 × 002B × 0028 × 0032 × 002C × 0033 × 0029 × 2295 × 0028 × 2212 × 0034 × 002C × 0035 × 0029 × 2296 × 0028 × 0036 × 002C × 0037 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] DIGIT ZERO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT ONE (NU) × [25.04] RIGHT PARENTHESIS (CP) × [25.05] PLUS SIGN (PR) × [25.01] LEFT PARENTHESIS (OP) × [14.0] DIGIT TWO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT THREE (NU) × [25.04] RIGHT PARENTHESIS (CP) × [30.02] CIRCLED PLUS (AI_AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] MINUS SIGN (PR) × [25.01] DIGIT FOUR (NU) × [25.03] COMMA (IS) × [25.04] DIGIT FIVE (NU) × [25.04] RIGHT PARENTHESIS (CP) × [30.02] CIRCLED MINUS (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] DIGIT SIX (NU) × [25.03] COMMA (IS) × [25.04] DIGIT SEVEN (NU) × [25.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 007B × 0030 × 002C × 0031 × 007D × 002B × 007B × 0032 × 002C × 0033 × 007D ÷ 2295 × 007B × 2212 × 0034 × 002C × 0035 × 007D ÷ 2296 × 007B × 0036 × 002C × 0037 × 007D ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] DIGIT ZERO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT ONE (NU) × [25.04] RIGHT CURLY BRACKET (CL) × [25.05] PLUS SIGN (PR) × [25.01] LEFT CURLY BRACKET (OP) × [14.0] DIGIT TWO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT THREE (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [999.0] CIRCLED PLUS (AI_AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] MINUS SIGN (PR) × [25.01] DIGIT FOUR (NU) × [25.03] COMMA (IS) × [25.04] DIGIT FIVE (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [999.0] CIRCLED MINUS (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] DIGIT SIX (NU) × [25.03] COMMA (IS) × [25.04] DIGIT SEVEN (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 0073 × 0029 × 0068 × 0065 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [0.3]
+× 007B × 0073 × 007D ÷ 0068 × 0065 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [0.3]
+× 02C8 × 0073 × 0049 × 006C × 0259 × 0062 × 0028 × 0259 × 0029 × 006C ÷ # × [0.3] MODIFIER LETTER VERTICAL LINE (BB) × [21.04] LATIN SMALL LETTER S (AL) × [28.0] LATIN CAPITAL LETTER I (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER SCHWA (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER SCHWA (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) ÷ [0.3]
+× 02C8 × 0073 × 0049 × 006C × 0259 × 0062 × 007B × 0259 × 007D ÷ 006C ÷ # × [0.3] MODIFIER LETTER VERTICAL LINE (BB) × [21.04] LATIN SMALL LETTER S (AL) × [28.0] LATIN CAPITAL LETTER I (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER SCHWA (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER SCHWA (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0029 × 002E ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] FULL STOP (IS) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 002E × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] FULL STOP (IS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0029 × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0021 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 005C ÷ 0028 × 0073 × 005C × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 0028 × 0020 × 0073 × 0020 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 002E ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.02] FULL STOP (IS) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 005C ÷ 007B × 0073 × 005C × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 007B × 0020 × 0073 × 0020 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0063 × 006F × 0064 × 0028 × 0065 × 0029 × 2026 ÷ 0028 × 0073 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0063 × 006F × 0064 × 0028 × 0065 × 0029 × 2026 × 0029 × 0073 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [22.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER S (AL) ÷ [0.3]
+× 0063 × 006F × 0064 × 007B × 0065 × 007D × 2026 ÷ 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 007B × 0063 × 006F × 0064 × 007B × 0065 × 007D × 2026 × 007D ÷ 0073 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [22.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER S (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 002D × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 00AD × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 2011 × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 0029 × 002D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 0029 × 00AD ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0028 × 0063 × 006F × 006E × 0029 × 2011 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 002D × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 00AD × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 2011 × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 007D × 002D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 007D × 00AD ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 007B × 0063 × 006F × 006E × 007D × 2011 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
+× 0063 × 0072 × 0065 × 0301 × 0028 × 0065 × 0301 × 0029 ÷ 0028 × 0065 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0063 × 0072 × 0065 × 0301 × 005B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 005D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT SQUARE BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [0.3]
+× 0063 × 0072 × 0065 × 0301 × 007B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 0308 × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0308 × 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 0028 × 0020 × 0308 × 0020 × 0029 × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 0028 × 0020 × 0308 × 0020 × 0029 × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 0308 × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0308 × 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 007B × 0020 × 0308 × 0020 × 007D × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 007B × 0020 × 0308 × 0020 × 007D × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 0029 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 0029 × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 0029 × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 007D ÷ 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 007D × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 007D × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 006F × 0070 × 0065 × 0072 × 0061 × 0074 × 006F × 0072 × 005B × 005D ÷ 0028 × 0030 × 0029 × 003B ÷ # × [0.3] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [30.01] LEFT SQUARE BRACKET (OP_OP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [13.02] SEMICOLON (IS) ÷ [0.3]
+× 006F × 0070 × 0065 × 0072 × 0061 × 0074 × 006F × 0072 × 005B × 005D ÷ 0028 × 0029 ÷ 007B × 007D ÷ # × [0.3] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [30.01] LEFT SQUARE BRACKET (OP_OP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 672C ÷ 0028 × 3092 × 0029 ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 672C ÷ 0028 × 300C × 3092 × 300D × 0029 ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 672C ÷ 300C × 0028 × 3092 × 0029 × 300D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 672C ÷ 007B × 3092 × 007D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 672C ÷ 007B × 300C × 3092 × 300D × 007D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 672C ÷ 005B × 0028 × 3092 × 0029 × 005D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT SQUARE BRACKET (OP_OP30) × [14.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
+× 0028 × 30CB × 30E5 × 30FC × 30FB × 0029 ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 0028 × 30CB × 30E5 × 30FC × 0029 × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 007B × 30CB × 30E5 × 30FC × 30FB × 007D ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 007B × 30CB × 30E5 × 30FC × 007D × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT CURLY BRACKET (CL) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 0028 × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 0029 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
+× 0028 × 1850 × 1846 × 1851 × 1846 × 0029 ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
+× 007B × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 007D ÷ 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
+× 007B × 1850 × 1846 × 1851 × 1846 × 007D ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
+× 0028 × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 0029 × 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 007B × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 007D ÷ 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 0028 × 0030 × 002C × 0031 × 0029 × 002B × 0028 × 0032 × 002C × 0033 × 0029 × 2295 × 0028 × 2212 × 0034 × 002C × 0035 × 0029 × 2296 × 0028 × 0036 × 002C × 0037 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT ZERO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT ONE (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [25.05] PLUS SIGN (PR) × [25.01] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT TWO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT THREE (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [30.02] CIRCLED PLUS (AI_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] MINUS SIGN (PR) × [25.01] DIGIT FOUR (NU) × [25.03] COMMA (IS) × [25.04] DIGIT FIVE (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [30.02] CIRCLED MINUS (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT SIX (NU) × [25.03] COMMA (IS) × [25.04] DIGIT SEVEN (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 007B × 0030 × 002C × 0031 × 007D × 002B × 007B × 0032 × 002C × 0033 × 007D ÷ 2295 × 007B × 2212 × 0034 × 002C × 0035 × 007D ÷ 2296 × 007B × 0036 × 002C × 0037 × 007D ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] DIGIT ZERO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT ONE (NU) × [25.04] RIGHT CURLY BRACKET (CL) × [25.05] PLUS SIGN (PR) × [25.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] DIGIT TWO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT THREE (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [999.0] CIRCLED PLUS (AI_AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] MINUS SIGN (PR) × [25.01] DIGIT FOUR (NU) × [25.03] COMMA (IS) × [25.04] DIGIT FIVE (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [999.0] CIRCLED MINUS (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] DIGIT SIX (NU) × [25.03] COMMA (IS) × [25.04] DIGIT SEVEN (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0061 × 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
× 0061 × 0062 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [0.3]
× 0061 × 0062 × 0020 ÷ 0063 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) ÷ [0.3]
@@ -7245,9 +7585,9 @@
× BD10 ÷ C694 × 002E × 0020 ÷ 0041 × 002E ÷ 0033 × 0020 ÷ BABB ÷ # × [0.3] HANGUL SYLLABLE BWA (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT THREE (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE MOS (H3) ÷ [0.3]
× C694 × 002E × 0020 ÷ 0041 × 002E ÷ 0034 × 0020 ÷ BABB ÷ # × [0.3] HANGUL SYLLABLE YO (H2) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT FOUR (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE MOS (H3) ÷ [0.3]
× 0061 × 002E ÷ 0032 × 3000 ÷ 300C ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] LEFT CORNER BRACKET (OP) ÷ [0.3]
-× 306B ÷ 300C × 30D0 ÷ 0028 × 0062 × 0061 × 0029 × 300D ÷ 3084 ÷ 300C × 30B9 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER BA (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER YA (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER SU (ID) ÷ [0.3]
+× 306B ÷ 300C × 30D0 ÷ 0028 × 0062 × 0061 × 0029 × 300D ÷ 3084 ÷ 300C × 30B9 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER BA (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER YA (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER SU (ID) ÷ [0.3]
× 308B ÷ 300C × 0055 × 004B ÷ 30DD ÷ 30F3 ÷ 30C9 × 300D × FF09 × 3001 ÷ 30A8 ÷ # × [0.3] HIRAGANA LETTER RU (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] LATIN CAPITAL LETTER U (AL) × [28.0] LATIN CAPITAL LETTER K (AL) ÷ [999.0] KATAKANA LETTER PO (ID) ÷ [999.0] KATAKANA LETTER N (ID) ÷ [999.0] KATAKANA LETTER DO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] KATAKANA LETTER E (ID) ÷ [0.3]
-× 306F × 3001 ÷ 300C × 003D × 0072 × 0061 × 006E × 0064 × 0028 × 0029 × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] EQUALS SIGN (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
+× 306F × 3001 ÷ 300C × 003D × 0072 × 0061 × 006E × 0064 × 0028 × 0029 × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] EQUALS SIGN (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
× 3067 × 3001 ÷ 300C × 0021 × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER DE (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
× 8A33 ÷ 300C × 3059 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8A33 (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER SU (ID) ÷ [0.3]
× 3066 ÷ 300C × BD24 ÷ C5B4 × 003F × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER TE (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE BWASS (H3) ÷ [999.0] HANGUL SYLLABLE EO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
@@ -7255,32 +7595,32 @@
× 306F ÷ 300C × 30A8 ÷ # × [0.3] HIRAGANA LETTER HA (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER E (ID) ÷ [0.3]
× 4F8B × FF1A ÷ 300C × 3042 × 3000 ÷ 3044 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-4F8B (ID) × [21.03] FULLWIDTH COLON (NS) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER A (ID) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] HIRAGANA LETTER I (ID) ÷ [0.3]
× 304F × 3001 ÷ 300C × D3C9 ÷ C591 ÷ C740 ÷ # × [0.3] HIRAGANA LETTER KU (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE PYEONG (H3) ÷ [999.0] HANGUL SYLLABLE YANG (H3) ÷ [999.0] HANGUL SYLLABLE EUN (H3) ÷ [0.3]
-× 306B ÷ 300C × C81C ÷ BAA9 ÷ 0028 × 984C ÷ 540D × 0029 ÷ C740 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE JE (H2) ÷ [999.0] HANGUL SYLLABLE MOG (H3) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-984C (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-540D (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL SYLLABLE EUN (H3) ÷ [0.3]
+× 306B ÷ 300C × C81C ÷ BAA9 ÷ 0028 × 984C ÷ 540D × 0029 ÷ C740 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE JE (H2) ÷ [999.0] HANGUL SYLLABLE MOG (H3) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-984C (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-540D (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE EUN (H3) ÷ [0.3]
× 5178 ÷ 300E × 30A6 × 30A3 ÷ 30AD ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5178 (ID) ÷ [999.0] LEFT WHITE CORNER BRACKET (OP) × [14.0] KATAKANA LETTER U (ID) × [21.03] KATAKANA LETTER SMALL I (CJ_NS) ÷ [999.0] KATAKANA LETTER KI (ID) ÷ [0.3]
× 3067 ÷ 300E × 82F1 ÷ 8A9E ÷ # × [0.3] HIRAGANA LETTER DE (ID) ÷ [999.0] LEFT WHITE CORNER BRACKET (OP) × [14.0] CJK UNIFIED IDEOGRAPH-82F1 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8A9E (ID) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0020 ÷ 672C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0020 ÷ 307E ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0020 ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 308B × 3002 ÷ 0064 × 006F × 0067 × FF08 × 72AC × FF09 ÷ 3092 ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-72AC (ID) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
+× 0028 × 0073 × 0029 × 0020 ÷ 672C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
+× 0028 × 0073 × 0029 × 0020 ÷ 307E ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
+× 0028 × 0073 × 0029 × 0020 ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 308B × 3002 ÷ 0064 × 006F × 0067 ÷ FF08 × 72AC × FF09 ÷ 3092 ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-72AC (ID) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
× 672C ÷ FF08 × 307E ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 672C × 0020 ÷ 0028 × 0061 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 70B9 × 0020 ÷ 005B × 7DE8 ÷ 96C6 × 005D ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-70B9 (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT SQUARE BRACKET (OP) × [14.0] CJK UNIFIED IDEOGRAPH-7DE8 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-96C6 (ID) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [0.3]
-× 0061 × 0028 × 0073 × 0029 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [0.3]
+× 672C × 0020 ÷ 0028 × 0061 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 70B9 × 0020 ÷ 005B × 7DE8 ÷ 96C6 × 005D ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-70B9 (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT SQUARE BRACKET (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-7DE8 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-96C6 (ID) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [0.3]
+× 0061 × 0028 × 0073 × 0029 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [0.3]
× FF08 × 30B6 × 30FB ÷ 30AF ÷ 30A4 × 30C3 ÷ 30AF × 30FB ÷ 30D6 ÷ # × [0.3] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER ZA (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] KATAKANA LETTER I (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER BU (ID) ÷ [0.3]
-× 0070 × FF08 × 30AF ÷ 30A4 × 30C3 ÷ 30AF × 30FB ÷ 30D6 ÷ # × [0.3] LATIN SMALL LETTER P (AL) × [30.01] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [999.0] KATAKANA LETTER I (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER BU (ID) ÷ [0.3]
-× 0061 × 0062 × FF08 × 30AF ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 0028 × 5370 ÷ 672C × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-5370 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0070 ÷ FF08 × 30AF ÷ 30A4 × 30C3 ÷ 30AF × 30FB ÷ 30D6 ÷ # × [0.3] LATIN SMALL LETTER P (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [999.0] KATAKANA LETTER I (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER BU (ID) ÷ [0.3]
+× 0061 × 0062 ÷ FF08 × 30AF ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 0028 × 5370 ÷ 672C × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-5370 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 30B9 ÷ FF08 × 3044 ÷ # × [0.3] KATAKANA LETTER SU (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER I (ID) ÷ [0.3]
× 30C9 ÷ FF08 × 30DD ÷ # × [0.3] KATAKANA LETTER DO (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER PO (ID) ÷ [0.3]
-× 30C9 × 0020 ÷ 0028 × 8CEA ÷ # × [0.3] KATAKANA LETTER DO (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-8CEA (ID) ÷ [0.3]
-× 0073 × 0029 × 300D ÷ 307E ÷ # × [0.3] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
+× 30C9 × 0020 ÷ 0028 × 8CEA ÷ # × [0.3] KATAKANA LETTER DO (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-8CEA (ID) ÷ [0.3]
+× 0073 × 0029 × 300D ÷ 307E ÷ # × [0.3] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
× 0061 × FF09 × 300F ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] RIGHT WHITE CORNER BRACKET (CL) ÷ [0.3]
× 308B × 300D × FF09 ÷ 306F ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) ÷ [999.0] HIRAGANA LETTER HA (ID) ÷ [0.3]
× 30C9 × 300D × FF09 × 3001 ÷ 30A8 ÷ # × [0.3] KATAKANA LETTER DO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] KATAKANA LETTER E (ID) ÷ [0.3]
-× 0072 × 006B × 0029 × 300D ÷ 3082 ÷ # × [0.3] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER K (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MO (ID) ÷ [0.3]
-× 30AF ÷ 0028 × 0061 × 0062 × 0020 ÷ 0063 × 0064 × 0029 × 300D ÷ 3082 ÷ # × [0.3] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER D (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MO (ID) ÷ [0.3]
-× 30F3 × 30FB ÷ 30DE × 30FC ÷ 30AF ÷ 0028 × 0065 × 0078 ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER X (AL) ÷ [0.3]
-× 30DE × 30FC ÷ 0028 × 006D × 0061 × 0029 × 300D ÷ 306A ÷ # × [0.3] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER NA (ID) ÷ [0.3]
+× 0072 × 006B × 0029 × 300D ÷ 3082 ÷ # × [0.3] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER K (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MO (ID) ÷ [0.3]
+× 30AF ÷ 0028 × 0061 × 0062 × 0020 ÷ 0063 × 0064 × 0029 × 300D ÷ 3082 ÷ # × [0.3] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER D (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MO (ID) ÷ [0.3]
+× 30F3 × 30FB ÷ 30DE × 30FC ÷ 30AF ÷ 0028 × 0065 × 0078 ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER X (AL) ÷ [0.3]
+× 30DE × 30FC ÷ 0028 × 006D × 0061 × 0029 × 300D ÷ 306A ÷ # × [0.3] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER NA (ID) ÷ [0.3]
× 30AC ÷ 30EF × 300D × 3002 ÷ 3053 ÷ # × [0.3] KATAKANA LETTER GA (ID) ÷ [999.0] KATAKANA LETTER WA (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] HIRAGANA LETTER KO (ID) ÷ [0.3]
× 30AF × 300D ÷ 307E ÷ # × [0.3] KATAKANA LETTER KU (ID) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
× 30EF × 300D × 3002 ÷ 3053 ÷ # × [0.3] KATAKANA LETTER WA (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] HIRAGANA LETTER KO (ID) ÷ [0.3]
@@ -7288,9 +7628,9 @@
× 30AF × 300D × 3001 ÷ 30AF ÷ # × [0.3] KATAKANA LETTER KU (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
× 30C7 × 30A3 ÷ 30A2 ÷ FF08 × 0061 × 0062 × FF09 × 300F ÷ # × [0.3] KATAKANA LETTER DE (ID) × [21.03] KATAKANA LETTER SMALL I (CJ_NS) ÷ [999.0] KATAKANA LETTER A (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] RIGHT WHITE CORNER BRACKET (CL) ÷ [0.3]
× CABD ÷ C774 ÷ C5D0 ÷ C694 × 003F × 300D ÷ 3068 ÷ 805E ÷ # × [0.3] HANGUL SYLLABLE JJOG (H3) ÷ [999.0] HANGUL SYLLABLE I (H2) ÷ [999.0] HANGUL SYLLABLE E (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-805E (ID) ÷ [0.3]
-× 540D × 0029 ÷ C740 × 0020 ÷ C54C ÷ C544 ÷ C694 × 003F × 300D ÷ 3068 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-540D (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL SYLLABLE EUN (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE AL (H3) ÷ [999.0] HANGUL SYLLABLE A (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
-× 8CA8 × 0029 × 0020 ÷ 002D × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8CA8 (ID) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
-× 91CF × 0029 × 0020 × 301C × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-91CF (ID) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [16.0] WAVE DASH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
+× 540D × 0029 ÷ C740 × 0020 ÷ C54C ÷ C544 ÷ C694 × 003F × 300D ÷ 3068 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-540D (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE EUN (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE AL (H3) ÷ [999.0] HANGUL SYLLABLE A (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
+× 8CA8 × 0029 × 0020 ÷ 002D × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8CA8 (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
+× 91CF × 0029 × 0020 × 301C × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-91CF (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [16.0] WAVE DASH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
× 30C9 ÷ 91CD × FF09 × 0020 × 301C × 0020 ÷ 529B × 30FB ÷ 91CD ÷ # × [0.3] KATAKANA LETTER DO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-91CD (ID) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [7.01] SPACE (SP) × [16.0] WAVE DASH (NS) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-529B (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] CJK UNIFIED IDEOGRAPH-91CD (ID) ÷ [0.3]
× 0061 × 0062 × 0022 × FF08 × 307E ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [19.01] QUOTATION MARK (QU) × [15.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
× 306F × 0020 ÷ 0022 × 0073 × 0022 × 0020 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) × [19.02] LATIN SMALL LETTER S (AL) × [19.01] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [0.3]
@@ -7302,17 +7642,17 @@
× 30F3 × 30FB ÷ 30D5 × 30A9 × 30C3 ÷ 30AF ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER HU (ID) × [21.03] KATAKANA LETTER SMALL O (CJ_NS) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
× 30A4 ÷ 30B8 × 30FC × 30FB ÷ 30C9 × 30C3 ÷ 30B0 × 3001 ÷ 548C ÷ # × [0.3] KATAKANA LETTER I (ID) ÷ [999.0] KATAKANA LETTER ZI (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER DO (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER GU (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-548C (ID) ÷ [0.3]
× 30E1 × 30FC ÷ 30B7 × 30E7 ÷ 30F3 × 30FB ÷ 30DE × 30FC ÷ 30AF ÷ # × [0.3] KATAKANA LETTER ME (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER SI (ID) × [21.03] KATAKANA LETTER SMALL YO (CJ_NS) ÷ [999.0] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 30F3 × 30FB ÷ 30AF ÷ 0028 × 0061 ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
+× 30F3 × 30FB ÷ 30AF ÷ 0028 × 0061 ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
× 30B7 × 30E7 ÷ 30F3 × 30FB ÷ 30DE ÷ # × [0.3] KATAKANA LETTER SI (ID) × [21.03] KATAKANA LETTER SMALL YO (CJ_NS) ÷ [999.0] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER MA (ID) ÷ [0.3]
× 672C × 003A × 0020 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [0.3]
× 672C × 003A × 0020 ÷ 30AF ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER KU (ID) ÷ [0.3]
× 51FA ÷ 5178 × 003A × 0020 ÷ 30D5 ÷ 30EA × 30FC ÷ 767E ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-51FA (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-5178 (ID) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER HU (ID) ÷ [999.0] KATAKANA LETTER RI (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] CJK UNIFIED IDEOGRAPH-767E (ID) ÷ [0.3]
-× 5F8C × 2026 ÷ 306B ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5F8C (ID) × [22.03] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] HIRAGANA LETTER NI (ID) ÷ [0.3]
+× 5F8C × 2026 ÷ 306B ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5F8C (ID) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] HIRAGANA LETTER NI (ID) ÷ [0.3]
× 3057 × 3087 ÷ 3046 × 3002 × 3002 × 3002 ÷ # × [0.3] HIRAGANA LETTER SI (ID) × [21.03] HIRAGANA LETTER SMALL YO (CJ_NS) ÷ [999.0] HIRAGANA LETTER U (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [0.3]
× 304D × 3001 × 0021 × 0021 × 3001 × 0021 × 0021 × 0021 ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER KI (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [13.01] EXCLAMATION MARK (EX) × [13.01] EXCLAMATION MARK (EX) × [13.02] IDEOGRAPHIC COMMA (CL) × [13.01] EXCLAMATION MARK (EX) × [13.01] EXCLAMATION MARK (EX) × [13.01] EXCLAMATION MARK (EX) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
× 306F × 3001 × 003F ÷ 3068 × 0021 ÷ 3092 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [13.01] QUESTION MARK (EX) ÷ [999.0] HIRAGANA LETTER TO (ID) × [13.01] EXCLAMATION MARK (EX) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
-× 305F × 3001 × 2049 ÷ 0028 × 0021 × 003F × 0029 ÷ 306E ÷ # × [0.3] HIRAGANA LETTER TA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [16.0] EXCLAMATION QUESTION MARK (NS) ÷ [999.0] LEFT PARENTHESIS (OP) × [13.01] EXCLAMATION MARK (EX) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [0.3]
-× 3084 × 3001 × 2048 ÷ 0028 × 003F × 0021 × 0029 ÷ 306E ÷ # × [0.3] HIRAGANA LETTER YA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [16.0] QUESTION EXCLAMATION MARK (NS) ÷ [999.0] LEFT PARENTHESIS (OP) × [13.01] QUESTION MARK (EX) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [0.3]
+× 305F × 3001 × 2049 ÷ 0028 × 0021 × 003F × 0029 ÷ 306E ÷ # × [0.3] HIRAGANA LETTER TA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [16.0] EXCLAMATION QUESTION MARK (NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [13.01] EXCLAMATION MARK (EX) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [0.3]
+× 3084 × 3001 × 2048 ÷ 0028 × 003F × 0021 × 0029 ÷ 306E ÷ # × [0.3] HIRAGANA LETTER YA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [16.0] QUESTION EXCLAMATION MARK (NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [13.01] QUESTION MARK (EX) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [0.3]
× 305F × 0020 ÷ 203D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER TA (ID) × [7.01] SPACE (SP) ÷ [18.0] INTERROBANG (NS) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
× 305B × FF01 ÷ 0031 × 0030 × 0030 × 0025 ÷ 306E ÷ 5B8C ÷ # × [0.3] HIRAGANA LETTER SE (ID) × [13.01] FULLWIDTH EXCLAMATION MARK (EX) ÷ [999.0] DIGIT ONE (NU) × [25.03] DIGIT ZERO (NU) × [25.03] DIGIT ZERO (NU) × [25.05] PERCENT SIGN (PO) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-5B8C (ID) ÷ [0.3]
× 0032 × 0033 ÷ 672C ÷ # × [0.3] DIGIT TWO (NU) × [25.03] DIGIT THREE (NU) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
@@ -7339,6 +7679,6 @@
× 1F1F7 × 1F1FA × 200B ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.12] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
× 05D0 × 002D × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.02] HYPHEN-MINUS (HY) × [21.1] HEBREW LETTER ALEF (HL) ÷ [0.3]
#
-# Lines: 7312
+# Lines: 7652
#
# EOF
diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/SBTest.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/SBTest.txt
index 7c1c34afbd0..5ae1f881100 100644
--- a/gnu/usr.bin/perl/lib/unicore/auxiliary/SBTest.txt
+++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/SBTest.txt
@@ -1,5 +1,5 @@
-# SentenceBreakTest-12.1.0.txt
-# Date: 2019-03-10, 10:53:28 GMT
+# SentenceBreakTest-13.0.0.txt
+# Date: 2019-11-20, 22:27:22 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/SentenceBreakProperty.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/SentenceBreakProperty.txt
index cd0532a619c..432385b2694 100644
--- a/gnu/usr.bin/perl/lib/unicore/auxiliary/SentenceBreakProperty.txt
+++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/SentenceBreakProperty.txt
@@ -1,5 +1,5 @@
-# SentenceBreakProperty-12.1.0.txt
-# Date: 2019-03-10, 10:53:28 GMT
+# SentenceBreakProperty-13.0.0.txt
+# Date: 2019-11-27, 03:13:39 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -110,7 +110,7 @@
0B47..0B48 ; Extend # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4C ; Extend # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
0B4D ; Extend # Mn ORIYA SIGN VIRAMA
-0B56 ; Extend # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; Extend # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57 ; Extend # Mc ORIYA AU LENGTH MARK
0B62..0B63 ; Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
0B82 ; Extend # Mn TAMIL SIGN ANUSVARA
@@ -152,6 +152,7 @@
0D4D ; Extend # Mn MALAYALAM SIGN VIRAMA
0D57 ; Extend # Mc MALAYALAM AU LENGTH MARK
0D62..0D63 ; Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; Extend # Mn SINHALA SIGN CANDRABINDU
0D82..0D83 ; Extend # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0DCA ; Extend # Mn SINHALA SIGN AL-LAKUNA
0DCF..0DD1 ; Extend # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
@@ -240,6 +241,7 @@
1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0 ; Extend # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04 ; Extend # Mc BALINESE SIGN BISAH
1B34 ; Extend # Mn BALINESE SIGN REREKAN
@@ -304,6 +306,7 @@ A80B ; Extend # Mn SYLOTI NAGRI SIGN ANUSVARA
A823..A824 ; Extend # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
A825..A826 ; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827 ; Extend # Mc SYLOTI NAGRI VOWEL SIGN OO
+A82C ; Extend # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A880..A881 ; Extend # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
A8B4..A8C3 ; Extend # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
A8C4..A8C5 ; Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
@@ -363,6 +366,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
10A3F ; Extend # Mn KHAROSHTHI VIRAMA
10AE5..10AE6 ; Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
10D24..10D27 ; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
10F46..10F50 ; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
11000 ; Extend # Mc BRAHMI SIGN CANDRABINDU
11001 ; Extend # Mn BRAHMI SIGN ANUSVARA
@@ -386,6 +390,8 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
111B6..111BE ; Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111BF..111C0 ; Extend # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
111C9..111CC ; Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CE ; Extend # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; Extend # Mn SHARADA SIGN INVERTED CANDRABINDU
1122C..1122E ; Extend # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
1122F..11231 ; Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11232..11233 ; Extend # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
@@ -452,6 +458,14 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
1182F..11837 ; Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
11838 ; Extend # Mc DOGRA SIGN VISARGA
11839..1183A ; Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+11930..11935 ; Extend # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; Extend # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; Extend # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D ; Extend # Mc DIVES AKURU SIGN HALANTA
+1193E ; Extend # Mn DIVES AKURU VIRAMA
+11940 ; Extend # Mc DIVES AKURU MEDIAL YA
+11942 ; Extend # Mc DIVES AKURU MEDIAL RA
+11943 ; Extend # Mn DIVES AKURU SIGN NUKTA
119D1..119D3 ; Extend # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
119D4..119D7 ; Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119DA..119DB ; Extend # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
@@ -499,6 +513,8 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
16F4F ; Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR
16F51..16F87 ; Extend # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
16F8F..16F92 ; Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16FE4 ; Extend # Mn KHITAN SMALL SCRIPT FILLER
+16FF0..16FF1 ; Extend # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
1BC9D..1BC9E ; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
1D165..1D166 ; Extend # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
1D167..1D169 ; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
@@ -525,7 +541,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 2368
+# Total code points: 2395
# ================================================
@@ -1192,11 +1208,14 @@ A7BB ; Lower # L& LATIN SMALL LETTER GLOTTAL A
A7BD ; Lower # L& LATIN SMALL LETTER GLOTTAL I
A7BF ; Lower # L& LATIN SMALL LETTER GLOTTAL U
A7C3 ; Lower # L& LATIN SMALL LETTER ANGLICANA W
+A7C8 ; Lower # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+A7CA ; Lower # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F6 ; Lower # L& LATIN SMALL LETTER REVERSED HALF H
A7F8..A7F9 ; Lower # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; Lower # L& LATIN LETTER SMALL CAPITAL TURNED M
AB30..AB5A ; Lower # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5C..AB5F ; Lower # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; Lower # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; Lower # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
AB70..ABBF ; Lower # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
FB00..FB06 ; Lower # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
FB13..FB17 ; Lower # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
@@ -1236,7 +1255,7 @@ FF41..FF5A ; Lower # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
1D7CB ; Lower # L& MATHEMATICAL BOLD SMALL DIGAMMA
1E922..1E943 ; Lower # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA
-# Total code points: 2293
+# Total code points: 2297
# ================================================
@@ -1840,7 +1859,9 @@ A7BA ; Upper # L& LATIN CAPITAL LETTER GLOTTAL A
A7BC ; Upper # L& LATIN CAPITAL LETTER GLOTTAL I
A7BE ; Upper # L& LATIN CAPITAL LETTER GLOTTAL U
A7C2 ; Upper # L& LATIN CAPITAL LETTER ANGLICANA W
-A7C4..A7C6 ; Upper # L& [3] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C4..A7C7 ; Upper # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; Upper # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7F5 ; Upper # L& LATIN CAPITAL LETTER REVERSED HALF H
FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
10400..10427 ; Upper # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
104B0..104D3 ; Upper # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
@@ -1883,7 +1904,7 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT
1F150..1F169 ; Upper # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F170..1F189 ; Upper # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-# Total code points: 1893
+# Total code points: 1896
# ================================================
@@ -1923,7 +1944,7 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT
0840..0858 ; OLetter # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
0860..086A ; OLetter # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; OLetter # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; OLetter # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; OLetter # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
0904..0939 ; OLetter # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
093D ; OLetter # Lo DEVANAGARI SIGN AVAGRAHA
0950 ; OLetter # Lo DEVANAGARI OM
@@ -2000,7 +2021,7 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT
0CDE ; OLetter # Lo KANNADA LETTER FA
0CE0..0CE1 ; OLetter # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
0CF1..0CF2 ; OLetter # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-0D05..0D0C ; OLetter # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; OLetter # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; OLetter # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; OLetter # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; OLetter # Lo MALAYALAM SIGN AVAGRAHA
@@ -2137,10 +2158,10 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT
30FF ; OLetter # Lo KATAKANA DIGRAPH KOTO
3105..312F ; OLetter # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
3131..318E ; OLetter # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-31A0..31BA ; OLetter # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; OLetter # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31F0..31FF ; OLetter # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
-3400..4DB5 ; OLetter # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEF ; OLetter # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+3400..4DBF ; OLetter # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; OLetter # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
A000..A014 ; OLetter # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; OLetter # Lm YI SYLLABLE WU
A016..A48C ; OLetter # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -2199,6 +2220,7 @@ AB09..AB0E ; OLetter # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDH
AB11..AB16 ; OLetter # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
AB20..AB26 ; OLetter # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
AB28..AB2E ; OLetter # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
+AB69 ; OLetter # Lm MODIFIER LETTER SMALL TURNED W
ABC0..ABE2 ; OLetter # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
AC00..D7A3 ; OLetter # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
D7B0..D7C6 ; OLetter # Lo [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
@@ -2281,15 +2303,19 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
10B80..10B91 ; OLetter # Lo [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
10C00..10C48 ; OLetter # Lo [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
10D00..10D23 ; OLetter # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10E80..10EA9 ; OLetter # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EB0..10EB1 ; OLetter # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; OLetter # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F27 ; OLetter # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
10F30..10F45 ; OLetter # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10FB0..10FC4 ; OLetter # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
10FE0..10FF6 ; OLetter # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11003..11037 ; OLetter # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
11083..110AF ; OLetter # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
110D0..110E8 ; OLetter # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
11103..11126 ; OLetter # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
11144 ; OLetter # Lo CHAKMA LETTER LHAA
+11147 ; OLetter # Lo CHAKMA LETTER VAA
11150..11172 ; OLetter # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11176 ; OLetter # Lo MAHAJANI LIGATURE SHRI
11183..111B2 ; OLetter # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
@@ -2315,7 +2341,7 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
1135D..11361 ; OLetter # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
11400..11434 ; OLetter # Lo [53] NEWA LETTER A..NEWA LETTER HA
11447..1144A ; OLetter # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
-1145F ; OLetter # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; OLetter # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; OLetter # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114C4..114C5 ; OLetter # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
114C7 ; OLetter # Lo TIRHUTA OM
@@ -2327,7 +2353,13 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
116B8 ; OLetter # Lo TAKRI LETTER ARCHAIC KHA
11700..1171A ; OLetter # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
11800..1182B ; OLetter # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
-118FF ; OLetter # Lo WARANG CITI OM
+118FF..11906 ; OLetter # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; OLetter # Lo DIVES AKURU LETTER O
+1190C..11913 ; OLetter # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; OLetter # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; OLetter # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+1193F ; OLetter # Lo DIVES AKURU PREFIXED NASAL SIGN
+11941 ; OLetter # Lo DIVES AKURU INITIAL RA
119A0..119A7 ; OLetter # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; OLetter # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119E1 ; OLetter # Lo NANDINAGARI SIGN AVAGRAHA
@@ -2352,6 +2384,7 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
11D6A..11D89 ; OLetter # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
11D98 ; OLetter # Lo GUNJALA GONDI OM
11EE0..11EF2 ; OLetter # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11FB0 ; OLetter # Lo LISU LETTER YHA
12000..12399 ; OLetter # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E ; OLetter # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12480..12543 ; OLetter # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
@@ -2370,7 +2403,8 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
16FE0..16FE1 ; OLetter # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE3 ; OLetter # Lm OLD CHINESE ITERATION MARK
17000..187F7 ; OLetter # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; OLetter # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; OLetter # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; OLetter # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; OLetter # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152 ; OLetter # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167 ; OLetter # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -2418,14 +2452,15 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
1EEA1..1EEA3 ; OLetter # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
1EEA5..1EEA9 ; OLetter # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
1EEAB..1EEBB ; OLetter # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
-20000..2A6D6 ; OLetter # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+20000..2A6DD ; OLetter # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; OLetter # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; OLetter # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; OLetter # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; OLetter # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; OLetter # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; OLetter # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-# Total code points: 121822
+# Total code points: 127413
# ================================================
@@ -2480,6 +2515,7 @@ FF10..FF19 ; Numeric # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
116C0..116C9 ; Numeric # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
11730..11739 ; Numeric # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
118E0..118E9 ; Numeric # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+11950..11959 ; Numeric # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
11C50..11C59 ; Numeric # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
11D50..11D59 ; Numeric # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
11DA0..11DA9 ; Numeric # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
@@ -2489,8 +2525,9 @@ FF10..FF19 ; Numeric # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
1E140..1E149 ; Numeric # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
1E2F0..1E2F9 ; Numeric # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
1E950..1E959 ; Numeric # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1FBF0..1FBF9 ; Numeric # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-# Total code points: 632
+# Total code points: 652
# ================================================
@@ -2563,6 +2600,8 @@ FF61 ; STerm # Po HALFWIDTH IDEOGRAPHIC FULL STOP
115C9..115D7 ; STerm # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
11641..11642 ; STerm # Po [2] MODI DANDA..MODI DOUBLE DANDA
1173C..1173E ; STerm # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+11944 ; STerm # Po DIVES AKURU DOUBLE DANDA
+11946 ; STerm # Po DIVES AKURU END OF TEXT MARK
11A42..11A43 ; STerm # Po [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD
11A9B..11A9C ; STerm # Po [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD
11C41..11C42 ; STerm # Po [2] BHAIKSUKI DANDA..BHAIKSUKI DOUBLE DANDA
@@ -2575,7 +2614,7 @@ FF61 ; STerm # Po HALFWIDTH IDEOGRAPHIC FULL STOP
1BC9F ; STerm # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1DA88 ; STerm # Po SIGNWRITING FULL STOP
-# Total code points: 138
+# Total code points: 140
# ================================================
diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/WBTest.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/WBTest.txt
index facd8920ea8..3e85759b85a 100644
--- a/gnu/usr.bin/perl/lib/unicore/auxiliary/WBTest.txt
+++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/WBTest.txt
@@ -1,5 +1,5 @@
-# WordBreakTest-12.1.0.txt
-# Date: 2019-03-10, 10:53:29 GMT
+# WordBreakTest-13.0.0.txt
+# Date: 2019-11-20, 22:27:23 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/WordBreakProperty.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/WordBreakProperty.txt
index efb4807a2d0..36d1438c26c 100644
--- a/gnu/usr.bin/perl/lib/unicore/auxiliary/WordBreakProperty.txt
+++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/WordBreakProperty.txt
@@ -1,6 +1,6 @@
-# WordBreakProperty-12.1.0.txt
-# Date: 2019-03-10, 10:53:28 GMT
-# © 2019 Unicode®, Inc.
+# WordBreakProperty-13.0.0.txt
+# Date: 2020-01-22, 00:07:44 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -146,7 +146,7 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW
0B47..0B48 ; Extend # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4C ; Extend # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
0B4D ; Extend # Mn ORIYA SIGN VIRAMA
-0B56 ; Extend # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; Extend # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57 ; Extend # Mc ORIYA AU LENGTH MARK
0B62..0B63 ; Extend # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
0B82 ; Extend # Mn TAMIL SIGN ANUSVARA
@@ -188,6 +188,7 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW
0D4D ; Extend # Mn MALAYALAM SIGN VIRAMA
0D57 ; Extend # Mc MALAYALAM AU LENGTH MARK
0D62..0D63 ; Extend # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; Extend # Mn SINHALA SIGN CANDRABINDU
0D82..0D83 ; Extend # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0DCA ; Extend # Mn SINHALA SIGN AL-LAKUNA
0DCF..0DD1 ; Extend # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
@@ -276,6 +277,7 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW
1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0 ; Extend # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04 ; Extend # Mc BALINESE SIGN BISAH
1B34 ; Extend # Mn BALINESE SIGN REREKAN
@@ -340,6 +342,7 @@ A80B ; Extend # Mn SYLOTI NAGRI SIGN ANUSVARA
A823..A824 ; Extend # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
A825..A826 ; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827 ; Extend # Mc SYLOTI NAGRI VOWEL SIGN OO
+A82C ; Extend # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A880..A881 ; Extend # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
A8B4..A8C3 ; Extend # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
A8C4..A8C5 ; Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
@@ -399,6 +402,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
10A3F ; Extend # Mn KHAROSHTHI VIRAMA
10AE5..10AE6 ; Extend # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
10D24..10D27 ; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
10F46..10F50 ; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
11000 ; Extend # Mc BRAHMI SIGN CANDRABINDU
11001 ; Extend # Mn BRAHMI SIGN ANUSVARA
@@ -422,6 +426,8 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
111B6..111BE ; Extend # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111BF..111C0 ; Extend # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
111C9..111CC ; Extend # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CE ; Extend # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; Extend # Mn SHARADA SIGN INVERTED CANDRABINDU
1122C..1122E ; Extend # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
1122F..11231 ; Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11232..11233 ; Extend # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
@@ -488,6 +494,14 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
1182F..11837 ; Extend # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
11838 ; Extend # Mc DOGRA SIGN VISARGA
11839..1183A ; Extend # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+11930..11935 ; Extend # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; Extend # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; Extend # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D ; Extend # Mc DIVES AKURU SIGN HALANTA
+1193E ; Extend # Mn DIVES AKURU VIRAMA
+11940 ; Extend # Mc DIVES AKURU MEDIAL YA
+11942 ; Extend # Mc DIVES AKURU MEDIAL RA
+11943 ; Extend # Mn DIVES AKURU SIGN NUKTA
119D1..119D3 ; Extend # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
119D4..119D7 ; Extend # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119DA..119DB ; Extend # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
@@ -535,6 +549,8 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
16F4F ; Extend # Mn MIAO SIGN CONSONANT MODIFIER BAR
16F51..16F87 ; Extend # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
16F8F..16F92 ; Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16FE4 ; Extend # Mn KHITAN SMALL SCRIPT FILLER
+16FF0..16FF1 ; Extend # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
1BC9D..1BC9E ; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
1D165..1D166 ; Extend # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
1D167..1D169 ; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
@@ -562,7 +578,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 2372
+# Total code points: 2399
# ================================================
@@ -635,6 +651,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
02D2..02D7 ; ALetter # Sk [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN
02DE..02DF ; ALetter # Sk [2] MODIFIER LETTER RHOTIC HOOK..MODIFIER LETTER CROSS ACCENT
02E0..02E4 ; ALetter # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02E5..02EB ; ALetter # Sk [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
02EC ; ALetter # Lm MODIFIER LETTER VOICING
02ED ; ALetter # Sk MODIFIER LETTER UNASPIRATED
02EE ; ALetter # Lm MODIFIER LETTER DOUBLE APOSTROPHE
@@ -654,9 +671,10 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
048A..052F ; ALetter # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
0531..0556 ; ALetter # L& [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
0559 ; ALetter # Lm ARMENIAN MODIFIER LETTER LEFT HALF RING
-055B..055C ; ALetter # Po [2] ARMENIAN EMPHASIS MARK..ARMENIAN EXCLAMATION MARK
+055A..055C ; ALetter # Po [3] ARMENIAN APOSTROPHE..ARMENIAN EXCLAMATION MARK
055E ; ALetter # Po ARMENIAN QUESTION MARK
0560..0588 ; ALetter # L& [41] ARMENIAN SMALL LETTER TURNED AYB..ARMENIAN SMALL LETTER YI WITH STROKE
+058A ; ALetter # Pd ARMENIAN HYPHEN
05F3 ; ALetter # Po HEBREW PUNCTUATION GERESH
0620..063F ; ALetter # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
0640 ; ALetter # Lm ARABIC TATWEEL
@@ -682,7 +700,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
0840..0858 ; ALetter # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
0860..086A ; ALetter # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; ALetter # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; ALetter # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; ALetter # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
0904..0939 ; ALetter # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
093D ; ALetter # Lo DEVANAGARI SIGN AVAGRAHA
0950 ; ALetter # Lo DEVANAGARI OM
@@ -759,7 +777,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
0CDE ; ALetter # Lo KANNADA LETTER FA
0CE0..0CE1 ; ALetter # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
0CF1..0CF2 ; ALetter # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-0D05..0D0C ; ALetter # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; ALetter # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; ALetter # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; ALetter # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; ALetter # Lo MALAYALAM SIGN AVAGRAHA
@@ -912,7 +930,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
303C ; ALetter # Lo MASU MARK
3105..312F ; ALetter # Lo [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
3131..318E ; ALetter # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-31A0..31BA ; ALetter # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; ALetter # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
A000..A014 ; ALetter # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; ALetter # Lm YI SYLLABLE WU
A016..A48C ; ALetter # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -929,6 +947,7 @@ A680..A69B ; ALetter # L& [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL L
A69C..A69D ; ALetter # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
A6A0..A6E5 ; ALetter # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
A6E6..A6EF ; ALetter # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
+A708..A716 ; ALetter # Sk [15] MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
A717..A71F ; ALetter # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
A720..A721 ; ALetter # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
A722..A76F ; ALetter # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
@@ -939,7 +958,8 @@ A789..A78A ; ALetter # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT
A78B..A78E ; ALetter # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; ALetter # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; ALetter # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; ALetter # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; ALetter # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; ALetter # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; ALetter # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; ALetter # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; ALetter # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -971,7 +991,8 @@ AB28..AB2E ; ALetter # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A ; ALetter # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5B ; ALetter # Sk MODIFIER BREVE WITH INVERTED BREVE
AB5C..AB5F ; ALetter # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; ALetter # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; ALetter # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; ALetter # Lm MODIFIER LETTER SMALL TURNED W
AB70..ABBF ; ALetter # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2 ; ALetter # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
AC00..D7A3 ; ALetter # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
@@ -1052,15 +1073,19 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
10C80..10CB2 ; ALetter # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
10CC0..10CF2 ; ALetter # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
10D00..10D23 ; ALetter # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10E80..10EA9 ; ALetter # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EB0..10EB1 ; ALetter # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; ALetter # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F27 ; ALetter # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
10F30..10F45 ; ALetter # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10FB0..10FC4 ; ALetter # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
10FE0..10FF6 ; ALetter # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11003..11037 ; ALetter # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
11083..110AF ; ALetter # Lo [45] KAITHI LETTER A..KAITHI LETTER HA
110D0..110E8 ; ALetter # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
11103..11126 ; ALetter # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
11144 ; ALetter # Lo CHAKMA LETTER LHAA
+11147 ; ALetter # Lo CHAKMA LETTER VAA
11150..11172 ; ALetter # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11176 ; ALetter # Lo MAHAJANI LIGATURE SHRI
11183..111B2 ; ALetter # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
@@ -1086,7 +1111,7 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
1135D..11361 ; ALetter # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
11400..11434 ; ALetter # Lo [53] NEWA LETTER A..NEWA LETTER HA
11447..1144A ; ALetter # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
-1145F ; ALetter # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; ALetter # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; ALetter # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114C4..114C5 ; ALetter # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
114C7 ; ALetter # Lo TIRHUTA OM
@@ -1098,7 +1123,13 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
116B8 ; ALetter # Lo TAKRI LETTER ARCHAIC KHA
11800..1182B ; ALetter # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA
118A0..118DF ; ALetter # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
-118FF ; ALetter # Lo WARANG CITI OM
+118FF..11906 ; ALetter # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; ALetter # Lo DIVES AKURU LETTER O
+1190C..11913 ; ALetter # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; ALetter # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; ALetter # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+1193F ; ALetter # Lo DIVES AKURU PREFIXED NASAL SIGN
+11941 ; ALetter # Lo DIVES AKURU INITIAL RA
119A0..119A7 ; ALetter # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; ALetter # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119E1 ; ALetter # Lo NANDINAGARI SIGN AVAGRAHA
@@ -1123,6 +1154,7 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
11D6A..11D89 ; ALetter # Lo [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
11D98 ; ALetter # Lo GUNJALA GONDI OM
11EE0..11EF2 ; ALetter # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11FB0 ; ALetter # Lo LISU LETTER YHA
12000..12399 ; ALetter # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E ; ALetter # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12480..12543 ; ALetter # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
@@ -1219,20 +1251,21 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
1F150..1F169 ; ALetter # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F170..1F189 ; ALetter # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-# Total code points: 28693
+# Total code points: 28854
# ================================================
003A ; MidLetter # Po COLON
00B7 ; MidLetter # Po MIDDLE DOT
0387 ; MidLetter # Po GREEK ANO TELEIA
+055F ; MidLetter # Po ARMENIAN ABBREVIATION MARK
05F4 ; MidLetter # Po HEBREW PUNCTUATION GERSHAYIM
2027 ; MidLetter # Po HYPHENATION POINT
FE13 ; MidLetter # Po PRESENTATION FORM FOR VERTICAL COLON
FE55 ; MidLetter # Po SMALL COLON
FF1A ; MidLetter # Po FULLWIDTH COLON
-# Total code points: 8
+# Total code points: 9
# ================================================
@@ -1318,6 +1351,7 @@ FF10..FF19 ; Numeric # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
116C0..116C9 ; Numeric # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
11730..11739 ; Numeric # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
118E0..118E9 ; Numeric # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+11950..11959 ; Numeric # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
11C50..11C59 ; Numeric # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
11D50..11D59 ; Numeric # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
11DA0..11DA9 ; Numeric # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
@@ -1327,8 +1361,9 @@ FF10..FF19 ; Numeric # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
1E140..1E149 ; Numeric # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
1E2F0..1E2F9 ; Numeric # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
1E950..1E959 ; Numeric # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1FBF0..1FBF9 ; Numeric # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-# Total code points: 631
+# Total code points: 651
# ================================================
diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DBidiClass.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DBidiClass.txt
index e53bedfb7df..2454abd480d 100644
--- a/gnu/usr.bin/perl/lib/unicore/extracted/DBidiClass.txt
+++ b/gnu/usr.bin/perl/lib/unicore/extracted/DBidiClass.txt
@@ -1,5 +1,5 @@
-# DerivedBidiClass-12.1.0.txt
-# Date: 2019-03-10, 10:53:05 GMT
+# DerivedBidiClass-13.0.0.txt
+# Date: 2019-10-21, 14:30:28 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -219,7 +219,7 @@
0CE6..0CEF ; L # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
0CF1..0CF2 ; L # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
0D02..0D03 ; L # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D05..0D0C ; L # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; L # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; L # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; L # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; L # Lo MALAYALAM SIGN AVAGRAHA
@@ -541,7 +541,7 @@
3190..3191 ; L # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
3192..3195 ; L # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
3196..319F ; L # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
-31A0..31BA ; L # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; L # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31F0..31FF ; L # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
3200..321C ; L # So [29] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED HANGUL CIEUC U
3220..3229 ; L # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
@@ -555,8 +555,8 @@
32D0..3376 ; L # So [167] CIRCLED KATAKANA A..SQUARE PC
337B..33DD ; L # So [99] SQUARE ERA NAME HEISEI..SQUARE WB
33E0..33FE ; L # So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE
-3400..4DB5 ; L # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEF ; L # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+3400..4DBF ; L # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; L # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
A000..A014 ; L # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; L # Lm YI SYLLABLE WU
A016..A48C ; L # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -582,7 +582,8 @@ A789..A78A ; L # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS
A78B..A78E ; L # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; L # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; L # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; L # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; L # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; L # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; L # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; L # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; L # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -665,7 +666,8 @@ AB28..AB2E ; L # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A ; L # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5B ; L # Sk MODIFIER BREVE WITH INVERTED BREVE
AB5C..AB5F ; L # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; L # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; L # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; L # Lm MODIFIER LETTER SMALL TURNED W
AB70..ABBF ; L # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2 ; L # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
ABE3..ABE4 ; L # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
@@ -753,6 +755,7 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER
11140..11143 ; L # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
11144 ; L # Lo CHAKMA LETTER LHAA
11145..11146 ; L # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; L # Lo CHAKMA LETTER VAA
11150..11172 ; L # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11174..11175 ; L # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
11176 ; L # Lo MAHAJANI LIGATURE SHRI
@@ -763,6 +766,7 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER
111C1..111C4 ; L # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
111C5..111C8 ; L # Po [4] SHARADA DANDA..SHARADA SEPARATOR
111CD ; L # Po SHARADA SUTRA MARK
+111CE ; L # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
111D0..111D9 ; L # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA ; L # Lo SHARADA EKAM
111DB ; L # Po SHARADA SIGN SIDDHAM
@@ -807,9 +811,9 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER
11447..1144A ; L # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
1144B..1144F ; L # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN
11450..11459 ; L # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-1145B ; L # Po NEWA PLACEHOLDER MARK
+1145A..1145B ; L # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
1145D ; L # Po NEWA INSERTION SIGN
-1145F ; L # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; L # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; L # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114B0..114B2 ; L # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
114B9 ; L # Mc TIRHUTA VOWEL SIGN E
@@ -852,7 +856,20 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER
118A0..118DF ; L # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
118E0..118E9 ; L # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
118EA..118F2 ; L # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
-118FF ; L # Lo WARANG CITI OM
+118FF..11906 ; L # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; L # Lo DIVES AKURU LETTER O
+1190C..11913 ; L # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; L # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; L # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935 ; L # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; L # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193D ; L # Mc DIVES AKURU SIGN HALANTA
+1193F ; L # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; L # Mc DIVES AKURU MEDIAL YA
+11941 ; L # Lo DIVES AKURU INITIAL RA
+11942 ; L # Mc DIVES AKURU MEDIAL RA
+11944..11946 ; L # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+11950..11959 ; L # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
119A0..119A7 ; L # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; L # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119D1..119D3 ; L # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
@@ -905,6 +922,7 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER
11EE0..11EF2 ; L # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
11EF5..11EF6 ; L # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
11EF7..11EF8 ; L # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+11FB0 ; L # Lo LISU LETTER YHA
11FC0..11FD4 ; L # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
11FFF ; L # Po TAMIL PUNCTUATION END OF TEXT
12000..12399 ; L # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
@@ -939,8 +957,10 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER
16F93..16F9F ; L # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
16FE0..16FE1 ; L # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE3 ; L # Lm OLD CHINESE ITERATION MARK
+16FF0..16FF1 ; L # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
17000..187F7 ; L # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; L # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; L # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; L # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; L # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152 ; L # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167 ; L # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -1017,17 +1037,18 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER
1F210..1F23B ; L # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240..1F248 ; L # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; L # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
-20000..2A6D6 ; L # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+20000..2A6DD ; L # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; L # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; L # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; L # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; L # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; L # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; L # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
F0000..FFFFD ; L # Co [65534] <private-use-F0000>..<private-use-FFFFD>
100000..10FFFD; L # Co [65534] <private-use-100000>..<private-use-10FFFD>
-# The above property value applies to 832157 code points not listed here.
-# Total code points: 1096767
+# The above property value applies to 826312 code points not listed here.
+# Total code points: 1096473
# ================================================
@@ -1165,12 +1186,21 @@ FB46..FB4F ; R # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE AL
10CF3..10CF9 ; R # Cn [7] <reserved-10CF3>..<reserved-10CF9>
10CFA..10CFF ; R # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
10D40..10E5F ; R # Cn [288] <reserved-10D40>..<reserved-10E5F>
-10E7F..10EFF ; R # Cn [129] <reserved-10E7F>..<reserved-10EFF>
+10E7F ; R # Cn <reserved-10E7F>
+10E80..10EA9 ; R # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAA ; R # Cn <reserved-10EAA>
+10EAD ; R # Pd YEZIDI HYPHENATION MARK
+10EAE..10EAF ; R # Cn [2] <reserved-10EAE>..<reserved-10EAF>
+10EB0..10EB1 ; R # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
+10EB2..10EFF ; R # Cn [78] <reserved-10EB2>..<reserved-10EFF>
10F00..10F1C ; R # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F1D..10F26 ; R # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
10F27 ; R # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
10F28..10F2F ; R # Cn [8] <reserved-10F28>..<reserved-10F2F>
-10F70..10FDF ; R # Cn [112] <reserved-10F70>..<reserved-10FDF>
+10F70..10FAF ; R # Cn [64] <reserved-10F70>..<reserved-10FAF>
+10FB0..10FC4 ; R # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FC5..10FCB ; R # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
+10FCC..10FDF ; R # Cn [20] <reserved-10FCC>..<reserved-10FDF>
10FE0..10FF6 ; R # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
10FF7..10FFF ; R # Cn [9] <reserved-10FF7>..<reserved-10FFF>
1E800..1E8C4 ; R # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
@@ -1188,7 +1218,7 @@ FB46..FB4F ; R # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE AL
1ED50..1EDFF ; R # Cn [176] <reserved-1ED50>..<reserved-1EDFF>
1EF00..1EFFF ; R # Cn [256] <reserved-1EF00>..<reserved-1EFFF>
-# Total code points: 3765
+# Total code points: 3763
# ================================================
@@ -1206,8 +1236,9 @@ FF10..FF19 ; EN # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
102E1..102FB ; EN # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
1D7CE..1D7FF ; EN # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
1F100..1F10A ; EN # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
+1FBF0..1FBF9 ; EN # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-# Total code points: 158
+# Total code points: 168
# ================================================
@@ -1588,7 +1619,7 @@ FF1A ; CS # Po FULLWIDTH COLON
2B47..2B4C ; ON # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
2B4D..2B73 ; ON # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95 ; ON # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B98..2BFF ; ON # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2B97..2BFF ; ON # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
2CE5..2CEA ; ON # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
2CF9..2CFC ; ON # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
2CFD ; ON # No COPTIC FRACTION ONE HALF
@@ -1631,6 +1662,8 @@ FF1A ; CS # Po FULLWIDTH COLON
2E41 ; ON # Po REVERSED COMMA
2E42 ; ON # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
2E43..2E4F ; ON # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2E50..2E51 ; ON # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+2E52 ; ON # Po TIRONIAN SIGN CAPITAL ET
2E80..2E99 ; ON # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
2E9B..2EF3 ; ON # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
2F00..2FD5 ; ON # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
@@ -1689,6 +1722,7 @@ A720..A721 ; ON # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LET
A788 ; ON # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
A828..A82B ; ON # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
A874..A877 ; ON # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
+AB6A..AB6B ; ON # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
FD3E ; ON # Pe ORNATE LEFT PARENTHESIS
FD3F ; ON # Ps ORNATE RIGHT PARENTHESIS
FDFD ; ON # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
@@ -1772,7 +1806,7 @@ FFFC..FFFD ; ON # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTE
10179..10189 ; ON # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
1018A..1018B ; ON # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
1018C ; ON # So GREEK SINUSOID SIGN
-10190..1019B ; ON # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+10190..1019C ; ON # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
101A0 ; ON # So GREEK SYMBOL TAU RHO
1091F ; ON # Po PHOENICIAN WORD SEPARATOR
10B39..10B3F ; ON # Po [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
@@ -1797,14 +1831,16 @@ FFFC..FFFD ; ON # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTE
1F0C1..1F0CF ; ON # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
1F0D1..1F0F5 ; ON # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
1F10B..1F10C ; ON # No [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+1F10D..1F10F ; ON # So [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
1F12F ; ON # So COPYLEFT SYMBOL
-1F16A..1F16C ; ON # So [3] RAISED MC SIGN..RAISED MR SIGN
+1F16A..1F16F ; ON # So [6] RAISED MC SIGN..CIRCLED HUMAN FIGURE
+1F1AD ; ON # So MASK WORK SYMBOL
1F260..1F265 ; ON # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
1F300..1F3FA ; ON # So [251] CYCLONE..AMPHORA
1F3FB..1F3FF ; ON # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
-1F400..1F6D5 ; ON # So [726] RAT..HINDU TEMPLE
+1F400..1F6D7 ; ON # So [728] RAT..ELEVATOR
1F6E0..1F6EC ; ON # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
-1F6F0..1F6FA ; ON # So [11] SATELLITE..AUTO RICKSHAW
+1F6F0..1F6FC ; ON # So [13] SATELLITE..ROLLER SKATE
1F700..1F773 ; ON # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
1F780..1F7D8 ; ON # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
1F7E0..1F7EB ; ON # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
@@ -1813,20 +1849,22 @@ FFFC..FFFD ; ON # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTE
1F850..1F859 ; ON # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
1F860..1F887 ; ON # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F890..1F8AD ; ON # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-1F900..1F90B ; ON # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
-1F90D..1F971 ; ON # So [101] WHITE HEART..YAWNING FACE
-1F973..1F976 ; ON # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
-1F97A..1F9A2 ; ON # So [41] FACE WITH PLEADING EYES..SWAN
-1F9A5..1F9AA ; ON # So [6] SLOTH..OYSTER
-1F9AE..1F9CA ; ON # So [29] GUIDE DOG..ICE CUBE
+1F8B0..1F8B1 ; ON # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F900..1F978 ; ON # So [121] CIRCLED CROSS FORMEE WITH FOUR DOTS..DISGUISED FACE
+1F97A..1F9CB ; ON # So [82] FACE WITH PLEADING EYES..BUBBLE TEA
1F9CD..1FA53 ; ON # So [135] STANDING PERSON..BLACK CHESS KNIGHT-BISHOP
1FA60..1FA6D ; ON # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
-1FA70..1FA73 ; ON # So [4] BALLET SHOES..SHORTS
+1FA70..1FA74 ; ON # So [5] BALLET SHOES..THONG SANDAL
1FA78..1FA7A ; ON # So [3] DROP OF BLOOD..STETHOSCOPE
-1FA80..1FA82 ; ON # So [3] YO-YO..PARACHUTE
-1FA90..1FA95 ; ON # So [6] RINGED PLANET..BANJO
+1FA80..1FA86 ; ON # So [7] YO-YO..NESTING DOLLS
+1FA90..1FAA8 ; ON # So [25] RINGED PLANET..ROCK
+1FAB0..1FAB6 ; ON # So [7] FLY..FEATHER
+1FAC0..1FAC2 ; ON # So [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAD0..1FAD6 ; ON # So [7] BLUEBERRIES..TEAPOT
+1FB00..1FB92 ; ON # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA ; ON # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
-# Total code points: 5658
+# Total code points: 5931
# ================================================
@@ -1935,7 +1973,7 @@ FFFFE..FFFFF ; BN # Cn [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>
0B3F ; NSM # Mn ORIYA VOWEL SIGN I
0B41..0B44 ; NSM # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
0B4D ; NSM # Mn ORIYA SIGN VIRAMA
-0B56 ; NSM # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; NSM # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B62..0B63 ; NSM # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
0B82 ; NSM # Mn TAMIL SIGN ANUSVARA
0BC0 ; NSM # Mn TAMIL VOWEL SIGN II
@@ -1956,6 +1994,7 @@ FFFFE..FFFFF ; BN # Cn [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>
0D41..0D44 ; NSM # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
0D4D ; NSM # Mn MALAYALAM SIGN VIRAMA
0D62..0D63 ; NSM # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; NSM # Mn SINHALA SIGN CANDRABINDU
0DCA ; NSM # Mn SINHALA SIGN AL-LAKUNA
0DD2..0DD4 ; NSM # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
0DD6 ; NSM # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
@@ -2014,6 +2053,7 @@ FFFFE..FFFFF ; BN # Cn [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>
1A7F ; NSM # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
1AB0..1ABD ; NSM # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE ; NSM # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0 ; NSM # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; NSM # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B34 ; NSM # Mn BALINESE SIGN REREKAN
1B36..1B3A ; NSM # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
@@ -2057,6 +2097,7 @@ A802 ; NSM # Mn SYLOTI NAGRI SIGN DVISVARA
A806 ; NSM # Mn SYLOTI NAGRI SIGN HASANTA
A80B ; NSM # Mn SYLOTI NAGRI SIGN ANUSVARA
A825..A826 ; NSM # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A82C ; NSM # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A8C4..A8C5 ; NSM # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
A8E0..A8F1 ; NSM # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
A8FF ; NSM # Mn DEVANAGARI VOWEL SIGN AY
@@ -2096,6 +2137,7 @@ FE20..FE2F ; NSM # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC
10A3F ; NSM # Mn KHAROSHTHI VIRAMA
10AE5..10AE6 ; NSM # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
10D24..10D27 ; NSM # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; NSM # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
10F46..10F50 ; NSM # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
11001 ; NSM # Mn BRAHMI SIGN ANUSVARA
11038..11046 ; NSM # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
@@ -2109,6 +2151,7 @@ FE20..FE2F ; NSM # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC
11180..11181 ; NSM # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
111B6..111BE ; NSM # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111C9..111CC ; NSM # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CF ; NSM # Mn SHARADA SIGN INVERTED CANDRABINDU
1122F..11231 ; NSM # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11234 ; NSM # Mn KHOJKI SIGN ANUSVARA
11236..11237 ; NSM # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
@@ -2144,6 +2187,9 @@ FE20..FE2F ; NSM # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC
11727..1172B ; NSM # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
1182F..11837 ; NSM # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
11839..1183A ; NSM # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+1193B..1193C ; NSM # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193E ; NSM # Mn DIVES AKURU VIRAMA
+11943 ; NSM # Mn DIVES AKURU SIGN NUKTA
119D4..119D7 ; NSM # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119DA..119DB ; NSM # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
119E0 ; NSM # Mn NANDINAGARI SIGN VIRAMA
@@ -2175,6 +2221,7 @@ FE20..FE2F ; NSM # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC
16B30..16B36 ; NSM # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F4F ; NSM # Mn MIAO SIGN CONSONANT MODIFIER BAR
16F8F..16F92 ; NSM # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16FE4 ; NSM # Mn KHITAN SMALL SCRIPT FILLER
1BC9D..1BC9E ; NSM # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
1D167..1D169 ; NSM # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
1D17B..1D182 ; NSM # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
@@ -2198,7 +2245,7 @@ FE20..FE2F ; NSM # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC
1E944..1E94A ; NSM # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
E0100..E01EF ; NSM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 1834
+# Total code points: 1847
# ================================================
@@ -2237,8 +2284,8 @@ E0100..E01EF ; NSM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
086B..086F ; AL # Cn [5] <reserved-086B>..<reserved-086F>
08A0..08B4 ; AL # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
08B5 ; AL # Cn <reserved-08B5>
-08B6..08BD ; AL # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
-08BE..08D2 ; AL # Cn [21] <reserved-08BE>..<reserved-08D2>
+08B6..08C7 ; AL # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
+08C8..08D2 ; AL # Cn [11] <reserved-08C8>..<reserved-08D2>
FB50..FBB1 ; AL # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
FBB2..FBC1 ; AL # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
FBC2..FBD2 ; AL # Cn [17] <reserved-FBC2>..<reserved-FBD2>
diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DBinaryProperties.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DBinaryProperties.txt
index 686bab7b4a9..4c31bac1193 100644
--- a/gnu/usr.bin/perl/lib/unicore/extracted/DBinaryProperties.txt
+++ b/gnu/usr.bin/perl/lib/unicore/extracted/DBinaryProperties.txt
@@ -1,5 +1,5 @@
-# DerivedBinaryProperties-12.1.0.txt
-# Date: 2019-03-10, 10:53:05 GMT
+# DerivedBinaryProperties-13.0.0.txt
+# Date: 2019-09-08, 23:31:04 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DCombiningClass.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DCombiningClass.txt
index de4fbc10b12..b4c75cd4591 100644
--- a/gnu/usr.bin/perl/lib/unicore/extracted/DCombiningClass.txt
+++ b/gnu/usr.bin/perl/lib/unicore/extracted/DCombiningClass.txt
@@ -1,5 +1,5 @@
-# DerivedCombiningClass-12.1.0.txt
-# Date: 2019-03-10, 10:53:05 GMT
+# DerivedCombiningClass-13.0.0.txt
+# Date: 2019-11-13, 21:51:57 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -181,7 +181,7 @@
085E ; 0 # Po MANDAIC PUNCTUATION
0860..086A ; 0 # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; 0 # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; 0 # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; 0 # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
08E2 ; 0 # Cf ARABIC DISPUTED END OF AYAH
0900..0902 ; 0 # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
0903 ; 0 # Mc DEVANAGARI SIGN VISARGA
@@ -286,7 +286,7 @@
0B41..0B44 ; 0 # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
0B47..0B48 ; 0 # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4C ; 0 # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
-0B56 ; 0 # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; 0 # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57 ; 0 # Mc ORIYA AU LENGTH MARK
0B5C..0B5D ; 0 # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
0B5F..0B61 ; 0 # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
@@ -362,7 +362,7 @@
0CF1..0CF2 ; 0 # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
0D00..0D01 ; 0 # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03 ; 0 # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D05..0D0C ; 0 # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; 0 # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; 0 # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; 0 # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; 0 # Lo MALAYALAM SIGN AVAGRAHA
@@ -381,6 +381,7 @@
0D70..0D78 ; 0 # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
0D79 ; 0 # So MALAYALAM DATE MARK
0D7A..0D7F ; 0 # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D81 ; 0 # Mn SINHALA SIGN CANDRABINDU
0D82..0D83 ; 0 # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0D85..0D96 ; 0 # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
0D9A..0DB1 ; 0 # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
@@ -903,7 +904,7 @@
2B47..2B4C ; 0 # Sm [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
2B4D..2B73 ; 0 # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95 ; 0 # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B98..2BFF ; 0 # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2B97..2BFF ; 0 # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
2C00..2C2E ; 0 # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
2C30..2C5E ; 0 # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
2C60..2C7B ; 0 # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
@@ -968,6 +969,8 @@
2E41 ; 0 # Po REVERSED COMMA
2E42 ; 0 # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
2E43..2E4F ; 0 # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2E50..2E51 ; 0 # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+2E52 ; 0 # Po TIRONIAN SIGN CAPITAL ET
2E80..2E99 ; 0 # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
2E9B..2EF3 ; 0 # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
2F00..2FD5 ; 0 # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
@@ -1024,7 +1027,7 @@
3190..3191 ; 0 # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
3192..3195 ; 0 # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
3196..319F ; 0 # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
-31A0..31BA ; 0 # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; 0 # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31C0..31E3 ; 0 # So [36] CJK STROKE T..CJK STROKE Q
31F0..31FF ; 0 # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
3200..321E ; 0 # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
@@ -1038,9 +1041,9 @@
328A..32B0 ; 0 # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
32B1..32BF ; 0 # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
32C0..33FF ; 0 # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL
-3400..4DB5 ; 0 # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
+3400..4DBF ; 0 # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
4DC0..4DFF ; 0 # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
-4E00..9FEF ; 0 # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+4E00..9FFC ; 0 # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
A000..A014 ; 0 # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; 0 # Lm YI SYLLABLE WU
A016..A48C ; 0 # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -1076,7 +1079,8 @@ A789..A78A ; 0 # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS
A78B..A78E ; 0 # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; 0 # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; 0 # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; 0 # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; 0 # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; 0 # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; 0 # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; 0 # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; 0 # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -1181,7 +1185,9 @@ AB28..AB2E ; 0 # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A ; 0 # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5B ; 0 # Sk MODIFIER BREVE WITH INVERTED BREVE
AB5C..AB5F ; 0 # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; 0 # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; 0 # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; 0 # Lm MODIFIER LETTER SMALL TURNED W
+AB6A..AB6B ; 0 # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
AB70..ABBF ; 0 # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2 ; 0 # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
ABE3..ABE4 ; 0 # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
@@ -1332,7 +1338,7 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
10179..10189 ; 0 # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
1018A..1018B ; 0 # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
1018C..1018E ; 0 # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
-10190..1019B ; 0 # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+10190..1019C ; 0 # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
101A0 ; 0 # So GREEK SYMBOL TAU RHO
101D0..101FC ; 0 # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
10280..1029C ; 0 # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
@@ -1424,12 +1430,17 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
10D00..10D23 ; 0 # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
10D30..10D39 ; 0 # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
10E60..10E7E ; 0 # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+10E80..10EA9 ; 0 # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAD ; 0 # Pd YEZIDI HYPHENATION MARK
+10EB0..10EB1 ; 0 # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; 0 # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F1D..10F26 ; 0 # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
10F27 ; 0 # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
10F30..10F45 ; 0 # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
10F51..10F54 ; 0 # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
10F55..10F59 ; 0 # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10FB0..10FC4 ; 0 # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FC5..10FCB ; 0 # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
10FE0..10FF6 ; 0 # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11000 ; 0 # Mc BRAHMI SIGN CANDRABINDU
11001 ; 0 # Mn BRAHMI SIGN ANUSVARA
@@ -1459,6 +1470,7 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
11140..11143 ; 0 # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
11144 ; 0 # Lo CHAKMA LETTER LHAA
11145..11146 ; 0 # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; 0 # Lo CHAKMA LETTER VAA
11150..11172 ; 0 # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11174..11175 ; 0 # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
11176 ; 0 # Lo MAHAJANI LIGATURE SHRI
@@ -1473,6 +1485,8 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
111C9 ; 0 # Mn SHARADA SANDHI MARK
111CB..111CC ; 0 # Mn [2] SHARADA VOWEL MODIFIER MARK..SHARADA EXTRA SHORT VOWEL MARK
111CD ; 0 # Po SHARADA SUTRA MARK
+111CE ; 0 # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; 0 # Mn SHARADA SIGN INVERTED CANDRABINDU
111D0..111D9 ; 0 # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA ; 0 # Lo SHARADA EKAM
111DB ; 0 # Po SHARADA SIGN SIDDHAM
@@ -1526,9 +1540,9 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
11447..1144A ; 0 # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
1144B..1144F ; 0 # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN
11450..11459 ; 0 # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-1145B ; 0 # Po NEWA PLACEHOLDER MARK
+1145A..1145B ; 0 # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
1145D ; 0 # Po NEWA INSERTION SIGN
-1145F ; 0 # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; 0 # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; 0 # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114B0..114B2 ; 0 # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
114B3..114B8 ; 0 # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
@@ -1587,7 +1601,20 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
118A0..118DF ; 0 # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
118E0..118E9 ; 0 # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
118EA..118F2 ; 0 # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
-118FF ; 0 # Lo WARANG CITI OM
+118FF..11906 ; 0 # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; 0 # Lo DIVES AKURU LETTER O
+1190C..11913 ; 0 # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; 0 # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; 0 # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935 ; 0 # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; 0 # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; 0 # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193F ; 0 # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; 0 # Mc DIVES AKURU MEDIAL YA
+11941 ; 0 # Lo DIVES AKURU INITIAL RA
+11942 ; 0 # Mc DIVES AKURU MEDIAL RA
+11944..11946 ; 0 # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+11950..11959 ; 0 # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
119A0..119A7 ; 0 # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; 0 # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119D1..119D3 ; 0 # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
@@ -1663,6 +1690,7 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
11EF3..11EF4 ; 0 # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
11EF5..11EF6 ; 0 # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
11EF7..11EF8 ; 0 # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+11FB0 ; 0 # Lo LISU LETTER YHA
11FC0..11FD4 ; 0 # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
11FD5..11FDC ; 0 # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
11FDD..11FE0 ; 0 # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
@@ -1703,8 +1731,10 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
16FE0..16FE1 ; 0 # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE2 ; 0 # Po OLD CHINESE HOOK MARK
16FE3 ; 0 # Lm OLD CHINESE ITERATION MARK
+16FE4 ; 0 # Mn KHITAN SMALL SCRIPT FILLER
17000..187F7 ; 0 # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; 0 # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; 0 # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; 0 # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; 0 # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152 ; 0 # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167 ; 0 # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -1846,8 +1876,7 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
1F0C1..1F0CF ; 0 # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
1F0D1..1F0F5 ; 0 # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
1F100..1F10C ; 0 # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
-1F110..1F16C ; 0 # So [93] PARENTHESIZED LATIN CAPITAL LETTER A..RAISED MR SIGN
-1F170..1F1AC ; 0 # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
+1F10D..1F1AD ; 0 # So [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL
1F1E6..1F202 ; 0 # So [29] REGIONAL INDICATOR SYMBOL LETTER A..SQUARED KATAKANA SA
1F210..1F23B ; 0 # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240..1F248 ; 0 # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
@@ -1855,9 +1884,9 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
1F260..1F265 ; 0 # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
1F300..1F3FA ; 0 # So [251] CYCLONE..AMPHORA
1F3FB..1F3FF ; 0 # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
-1F400..1F6D5 ; 0 # So [726] RAT..HINDU TEMPLE
+1F400..1F6D7 ; 0 # So [728] RAT..ELEVATOR
1F6E0..1F6EC ; 0 # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
-1F6F0..1F6FA ; 0 # So [11] SATELLITE..AUTO RICKSHAW
+1F6F0..1F6FC ; 0 # So [13] SATELLITE..ROLLER SKATE
1F700..1F773 ; 0 # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
1F780..1F7D8 ; 0 # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
1F7E0..1F7EB ; 0 # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
@@ -1866,32 +1895,36 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
1F850..1F859 ; 0 # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
1F860..1F887 ; 0 # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F890..1F8AD ; 0 # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-1F900..1F90B ; 0 # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
-1F90D..1F971 ; 0 # So [101] WHITE HEART..YAWNING FACE
-1F973..1F976 ; 0 # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
-1F97A..1F9A2 ; 0 # So [41] FACE WITH PLEADING EYES..SWAN
-1F9A5..1F9AA ; 0 # So [6] SLOTH..OYSTER
-1F9AE..1F9CA ; 0 # So [29] GUIDE DOG..ICE CUBE
+1F8B0..1F8B1 ; 0 # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F900..1F978 ; 0 # So [121] CIRCLED CROSS FORMEE WITH FOUR DOTS..DISGUISED FACE
+1F97A..1F9CB ; 0 # So [82] FACE WITH PLEADING EYES..BUBBLE TEA
1F9CD..1FA53 ; 0 # So [135] STANDING PERSON..BLACK CHESS KNIGHT-BISHOP
1FA60..1FA6D ; 0 # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
-1FA70..1FA73 ; 0 # So [4] BALLET SHOES..SHORTS
+1FA70..1FA74 ; 0 # So [5] BALLET SHOES..THONG SANDAL
1FA78..1FA7A ; 0 # So [3] DROP OF BLOOD..STETHOSCOPE
-1FA80..1FA82 ; 0 # So [3] YO-YO..PARACHUTE
-1FA90..1FA95 ; 0 # So [6] RINGED PLANET..BANJO
-20000..2A6D6 ; 0 # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+1FA80..1FA86 ; 0 # So [7] YO-YO..NESTING DOLLS
+1FA90..1FAA8 ; 0 # So [25] RINGED PLANET..ROCK
+1FAB0..1FAB6 ; 0 # So [7] FLY..FEATHER
+1FAC0..1FAC2 ; 0 # So [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAD0..1FAD6 ; 0 # So [7] BLUEBERRIES..TEAPOT
+1FB00..1FB92 ; 0 # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA ; 0 # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+1FBF0..1FBF9 ; 0 # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
+20000..2A6DD ; 0 # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; 0 # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; 0 # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; 0 # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; 0 # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; 0 # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; 0 # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
E0001 ; 0 # Cf LANGUAGE TAG
E0020..E007F ; 0 # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF ; 0 # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
F0000..FFFFD ; 0 # Co [65534] <private-use-F0000>..<private-use-FFFFD>
100000..10FFFD; 0 # Co [65534] <private-use-100000>..<private-use-10FFFD>
-# The above property value applies to 838650 code points not listed here.
-# Total code points: 1113250
+# The above property value applies to 832720 code points not listed here.
+# Total code points: 1113240
# ================================================
@@ -1913,6 +1946,14 @@ F0000..FFFFD ; 0 # Co [65534] <private-use-F0000>..<private-use-FFFFD>
# ================================================
+# Canonical_Combining_Class=Han_Reading
+
+16FF0..16FF1 ; 6 # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
+
+# Total code points: 2
+
+# ================================================
+
# Canonical_Combining_Class=Nukta
093C ; 7 # Mn DEVANAGARI SIGN NUKTA
@@ -1937,10 +1978,11 @@ A9B3 ; 7 # Mn JAVANESE SIGN CECAK TELU
115C0 ; 7 # Mn SIDDHAM SIGN NUKTA
116B7 ; 7 # Mn TAKRI SIGN NUKTA
1183A ; 7 # Mn DOGRA SIGN NUKTA
+11943 ; 7 # Mn DIVES AKURU SIGN NUKTA
11D42 ; 7 # Mn MASARAM GONDI SIGN NUKTA
1E94A ; 7 # Mn ADLAM NUKTA
-# Total code points: 25
+# Total code points: 26
# ================================================
@@ -1979,6 +2021,7 @@ A9B3 ; 7 # Mn JAVANESE SIGN CECAK TELU
1BF2..1BF3 ; 9 # Mc [2] BATAK PANGOLAT..BATAK PANONGONAN
2D7F ; 9 # Mn TIFINAGH CONSONANT JOINER
A806 ; 9 # Mn SYLOTI NAGRI SIGN HASANTA
+A82C ; 9 # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A8C4 ; 9 # Mn SAURASHTRA SIGN VIRAMA
A953 ; 9 # Mc REJANG VIRAMA
A9C0 ; 9 # Mc JAVANESE PANGKON
@@ -2000,6 +2043,8 @@ ABED ; 9 # Mn MEETEI MAYEK APUN IYEK
116B6 ; 9 # Mc TAKRI SIGN VIRAMA
1172B ; 9 # Mn AHOM SIGN KILLER
11839 ; 9 # Mn DOGRA SIGN VIRAMA
+1193D ; 9 # Mc DIVES AKURU SIGN HALANTA
+1193E ; 9 # Mn DIVES AKURU VIRAMA
119E0 ; 9 # Mn NANDINAGARI SIGN VIRAMA
11A34 ; 9 # Mn ZANABAZAR SQUARE SIGN VIRAMA
11A47 ; 9 # Mn ZANABAZAR SQUARE SUBJOINER
@@ -2008,7 +2053,7 @@ ABED ; 9 # Mn MEETEI MAYEK APUN IYEK
11D44..11D45 ; 9 # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA
11D97 ; 9 # Mn GUNJALA GONDI VIRAMA
-# Total code points: 58
+# Total code points: 61
# ================================================
@@ -2399,6 +2444,7 @@ FB1E ; 26 # Mn HEBREW POINT JUDEO-SPANISH VARIKA
1A7F ; 220 # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
1AB5..1ABA ; 220 # Mn [6] COMBINING X-X BELOW..COMBINING STRONG CENTRALIZATION STROKE BELOW
1ABD ; 220 # Mn COMBINING PARENTHESES BELOW
+1ABF..1AC0 ; 220 # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B6C ; 220 # Mn BALINESE MUSICAL SYMBOL COMBINING ENDEP
1CD5..1CD9 ; 220 # Mn [5] VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA..VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER
1CDC..1CDF ; 220 # Mn [4] VEDIC TONE KATHAKA ANUDATTA..VEDIC TONE THREE DOTS BELOW
@@ -2426,7 +2472,7 @@ FE27..FE2D ; 220 # Mn [7] COMBINING LIGATURE LEFT HALF BELOW..COMBINING CON
1D18A..1D18B ; 220 # Mn [2] MUSICAL SYMBOL COMBINING DOUBLE TONGUE..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
1E8D0..1E8D6 ; 220 # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
-# Total code points: 163
+# Total code points: 165
# ================================================
@@ -2569,6 +2615,7 @@ FE2E..FE2F ; 230 # Mn [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYR
10A38 ; 230 # Mn KHAROSHTHI SIGN BAR ABOVE
10AE5 ; 230 # Mn MANICHAEAN ABBREVIATION MARK ABOVE
10D24..10D27 ; 230 # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; 230 # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
10F48..10F4A ; 230 # Mn [3] SOGDIAN COMBINING DOT ABOVE..SOGDIAN COMBINING CURVE ABOVE
10F4C ; 230 # Mn SOGDIAN COMBINING HOOK ABOVE
11100..11102 ; 230 # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
@@ -2588,7 +2635,7 @@ FE2E..FE2F ; 230 # Mn [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYR
1E2EC..1E2EF ; 230 # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI
1E944..1E949 ; 230 # Mn [6] ADLAM ALIF LENGTHENER..ADLAM GEMINATE CONSONANT MODIFIER
-# Total code points: 482
+# Total code points: 484
# ================================================
diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DDecompositionType.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DDecompositionType.txt
index 3e195f9c660..a0bc5636439 100644
--- a/gnu/usr.bin/perl/lib/unicore/extracted/DDecompositionType.txt
+++ b/gnu/usr.bin/perl/lib/unicore/extracted/DDecompositionType.txt
@@ -1,5 +1,5 @@
-# DerivedDecompositionType-12.1.0.txt
-# Date: 2019-04-01, 09:10:21 GMT
+# DerivedDecompositionType-13.0.0.txt
+# Date: 2019-09-08, 23:31:06 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -257,11 +257,12 @@ FB46..FB4E ; Canonical # Lo [9] HEBREW LETTER TSADI WITH DAGESH..HEBREW LET
114BB..114BC ; Canonical # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
114BE ; Canonical # Mc TIRHUTA VOWEL SIGN AU
115BA..115BB ; Canonical # Mc [2] SIDDHAM VOWEL SIGN O..SIDDHAM VOWEL SIGN AU
+11938 ; Canonical # Mc DIVES AKURU VOWEL SIGN O
1D15E..1D164 ; Canonical # So [7] MUSICAL SYMBOL HALF NOTE..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
1D1BB..1D1C0 ; Canonical # So [6] MUSICAL SYMBOL MINIMA..MUSICAL SYMBOL FUSA BLACK
2F800..2FA1D ; Canonical # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 13232
+# Total code points: 13233
# ================================================
@@ -438,8 +439,9 @@ FB29 ; Font # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN
1EEA1..1EEA3 ; Font # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
1EEA5..1EEA9 ; Font # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
1EEAB..1EEBB ; Font # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1FBF0..1FBF9 ; Font # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-# Total code points: 1184
+# Total code points: 1194
# ================================================
@@ -861,9 +863,10 @@ A69C..A69D ; Super # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LE
A770 ; Super # Lm MODIFIER LETTER US
A7F8..A7F9 ; Super # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
AB5C..AB5F ; Super # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; Super # Lm MODIFIER LETTER SMALL TURNED W
1F16A..1F16C ; Super # So [3] RAISED MC SIGN..RAISED MR SIGN
-# Total code points: 153
+# Total code points: 154
# ================================================
diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DEastAsianWidth.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DEastAsianWidth.txt
index 7f26b9d36d0..79fe3ebec53 100644
--- a/gnu/usr.bin/perl/lib/unicore/extracted/DEastAsianWidth.txt
+++ b/gnu/usr.bin/perl/lib/unicore/extracted/DEastAsianWidth.txt
@@ -1,5 +1,5 @@
-# DerivedEastAsianWidth-12.1.0.txt
-# Date: 2019-03-10, 10:53:08 GMT
+# DerivedEastAsianWidth-13.0.0.txt
+# Date: 2019-10-21, 14:30:31 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -200,7 +200,7 @@
085E ; N # Po MANDAIC PUNCTUATION
0860..086A ; N # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; N # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; N # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; N # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
08D3..08E1 ; N # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA
08E2 ; N # Cf ARABIC DISPUTED END OF AYAH
08E3..0902 ; N # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
@@ -316,7 +316,7 @@
0B47..0B48 ; N # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4C ; N # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
0B4D ; N # Mn ORIYA SIGN VIRAMA
-0B56 ; N # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; N # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57 ; N # Mc ORIYA AU LENGTH MARK
0B5C..0B5D ; N # Lo [2] ORIYA LETTER RRA..ORIYA LETTER RHA
0B5F..0B61 ; N # Lo [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
@@ -395,7 +395,7 @@
0CF1..0CF2 ; N # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
0D00..0D01 ; N # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03 ; N # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
-0D05..0D0C ; N # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; N # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; N # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; N # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3B..0D3C ; N # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
@@ -416,6 +416,7 @@
0D70..0D78 ; N # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
0D79 ; N # So MALAYALAM DATE MARK
0D7A..0D7F ; N # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
+0D81 ; N # Mn SINHALA SIGN CANDRABINDU
0D82..0D83 ; N # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0D85..0D96 ; N # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
0D9A..0DB1 ; N # Lo [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
@@ -658,6 +659,7 @@
1AA8..1AAD ; N # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
1AB0..1ABD ; N # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE ; N # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0 ; N # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; N # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04 ; N # Mc BALINESE SIGN BISAH
1B05..1B33 ; N # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA
@@ -1033,7 +1035,7 @@
2B51..2B54 ; N # So [4] BLACK SMALL STAR..WHITE RIGHT-POINTING PENTAGON
2B5A..2B73 ; N # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95 ; N # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B98..2BFF ; N # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2B97..2BFF ; N # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
2C00..2C2E ; N # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
2C30..2C5E ; N # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
2C60..2C7B ; N # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
@@ -1101,6 +1103,8 @@
2E41 ; N # Po REVERSED COMMA
2E42 ; N # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
2E43..2E4F ; N # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2E50..2E51 ; N # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+2E52 ; N # Po TIRONIAN SIGN CAPITAL ET
303F ; N # So IDEOGRAPHIC HALF FILL SPACE
4DC0..4DFF ; N # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
A4D0..A4F7 ; N # Lo [40] LISU LETTER BA..LISU LETTER OE
@@ -1138,7 +1142,8 @@ A789..A78A ; N # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS
A78B..A78E ; N # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; N # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; N # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; N # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; N # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; N # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; N # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; N # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -1153,6 +1158,7 @@ A823..A824 ; N # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN
A825..A826 ; N # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827 ; N # Mc SYLOTI NAGRI VOWEL SIGN OO
A828..A82B ; N # So [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
+A82C ; N # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A830..A835 ; N # No [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
A836..A837 ; N # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
A838 ; N # Sc NORTH INDIC RUPEE MARK
@@ -1251,7 +1257,9 @@ AB28..AB2E ; N # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A ; N # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5B ; N # Sk MODIFIER BREVE WITH INVERTED BREVE
AB5C..AB5F ; N # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; N # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; N # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; N # Lm MODIFIER LETTER SMALL TURNED W
+AB6A..AB6B ; N # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
AB70..ABBF ; N # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2 ; N # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
ABE3..ABE4 ; N # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
@@ -1307,7 +1315,7 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER
10179..10189 ; N # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
1018A..1018B ; N # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
1018C..1018E ; N # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
-10190..1019B ; N # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+10190..1019C ; N # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
101A0 ; N # So GREEK SYMBOL TAU RHO
101D0..101FC ; N # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
101FD ; N # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
@@ -1405,6 +1413,10 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER
10D24..10D27 ; N # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
10D30..10D39 ; N # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE
10E60..10E7E ; N # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+10E80..10EA9 ; N # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EAB..10EAC ; N # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
+10EAD ; N # Pd YEZIDI HYPHENATION MARK
+10EB0..10EB1 ; N # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; N # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F1D..10F26 ; N # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
10F27 ; N # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
@@ -1412,6 +1424,8 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER
10F46..10F50 ; N # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
10F51..10F54 ; N # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
10F55..10F59 ; N # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10FB0..10FC4 ; N # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FC5..10FCB ; N # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
10FE0..10FF6 ; N # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11000 ; N # Mc BRAHMI SIGN CANDRABINDU
11001 ; N # Mn BRAHMI SIGN ANUSVARA
@@ -1443,6 +1457,7 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER
11140..11143 ; N # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
11144 ; N # Lo CHAKMA LETTER LHAA
11145..11146 ; N # Mc [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI
+11147 ; N # Lo CHAKMA LETTER VAA
11150..11172 ; N # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11173 ; N # Mn MAHAJANI SIGN NUKTA
11174..11175 ; N # Po [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
@@ -1457,6 +1472,8 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER
111C5..111C8 ; N # Po [4] SHARADA DANDA..SHARADA SEPARATOR
111C9..111CC ; N # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
111CD ; N # Po SHARADA SUTRA MARK
+111CE ; N # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; N # Mn SHARADA SIGN INVERTED CANDRABINDU
111D0..111D9 ; N # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
111DA ; N # Lo SHARADA EKAM
111DB ; N # Po SHARADA SIGN SIDDHAM
@@ -1515,10 +1532,10 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER
11447..1144A ; N # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
1144B..1144F ; N # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN
11450..11459 ; N # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
-1145B ; N # Po NEWA PLACEHOLDER MARK
+1145A..1145B ; N # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
1145D ; N # Po NEWA INSERTION SIGN
1145E ; N # Mn NEWA SANDHI MARK
-1145F ; N # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; N # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; N # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114B0..114B2 ; N # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
114B3..114B8 ; N # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
@@ -1582,7 +1599,23 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER
118A0..118DF ; N # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
118E0..118E9 ; N # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
118EA..118F2 ; N # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
-118FF ; N # Lo WARANG CITI OM
+118FF..11906 ; N # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; N # Lo DIVES AKURU LETTER O
+1190C..11913 ; N # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; N # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; N # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+11930..11935 ; N # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; N # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; N # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D ; N # Mc DIVES AKURU SIGN HALANTA
+1193E ; N # Mn DIVES AKURU VIRAMA
+1193F ; N # Lo DIVES AKURU PREFIXED NASAL SIGN
+11940 ; N # Mc DIVES AKURU MEDIAL YA
+11941 ; N # Lo DIVES AKURU INITIAL RA
+11942 ; N # Mc DIVES AKURU MEDIAL RA
+11943 ; N # Mn DIVES AKURU SIGN NUKTA
+11944..11946 ; N # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
+11950..11959 ; N # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
119A0..119A7 ; N # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; N # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119D1..119D3 ; N # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
@@ -1660,6 +1693,7 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER
11EF3..11EF4 ; N # Mn [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U
11EF5..11EF6 ; N # Mc [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
11EF7..11EF8 ; N # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+11FB0 ; N # Lo LISU LETTER YHA
11FC0..11FD4 ; N # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
11FD5..11FDC ; N # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
11FDD..11FE0 ; N # Sc [4] TAMIL SIGN KAACU..TAMIL SIGN VARAAKAN
@@ -1853,8 +1887,10 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER
1F0C1..1F0CE ; N # So [14] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD KING OF DIAMONDS
1F0D1..1F0F5 ; N # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
1F10B..1F10C ; N # No [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+1F10D..1F10F ; N # So [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
1F12E..1F12F ; N # So [2] CIRCLED WZ..COPYLEFT SYMBOL
-1F16A..1F16C ; N # So [3] RAISED MC SIGN..RAISED MR SIGN
+1F16A..1F16F ; N # So [6] RAISED MC SIGN..CIRCLED HUMAN FIGURE
+1F1AD ; N # So MASK WORK SYMBOL
1F1E6..1F1FF ; N # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
1F321..1F32C ; N # So [12] THERMOMETER..WIND BLOWING FACE
1F336 ; N # So HOT PEPPER
@@ -1886,14 +1922,20 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER
1F850..1F859 ; N # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
1F860..1F887 ; N # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F890..1F8AD ; N # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
+1F8B0..1F8B1 ; N # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
1F900..1F90B ; N # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
+1F93B ; N # So MODERN PENTATHLON
+1F946 ; N # So RIFLE
1FA00..1FA53 ; N # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
1FA60..1FA6D ; N # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
+1FB00..1FB92 ; N # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA ; N # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
+1FBF0..1FBF9 ; N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
E0001 ; N # Cf LANGUAGE TAG
E0020..E007F ; N # Cf [96] TAG SPACE..CANCEL TAG
-# The above property value applies to 768375 code points not listed here.
-# Total code points: 793252
+# The above property value applies to 767414 code points not listed here.
+# Total code points: 792699
# ================================================
@@ -2222,7 +2264,7 @@ FFED..FFEE ; H # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
3190..3191 ; W # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
3192..3195 ; W # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
3196..319F ; W # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
-31A0..31BA ; W # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; W # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31C0..31E3 ; W # So [36] CJK STROKE T..CJK STROKE Q
31F0..31FF ; W # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
3200..321E ; W # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
@@ -2235,10 +2277,9 @@ FFED..FFEE ; H # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
328A..32B0 ; W # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
32B1..32BF ; W # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
32C0..33FF ; W # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL
-3400..4DB5 ; W # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4DB6..4DBF ; W # Cn [10] <reserved-4DB6>..<reserved-4DBF>
-4E00..9FEF ; W # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
-9FF0..9FFF ; W # Cn [16] <reserved-9FF0>..<reserved-9FFF>
+3400..4DBF ; W # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; W # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
+9FFD..9FFF ; W # Cn [3] <reserved-9FFD>..<reserved-9FFF>
A000..A014 ; W # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; W # Lm YI SYLLABLE WU
A016..A48C ; W # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -2296,8 +2337,11 @@ FE6A..FE6B ; W # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
16FE0..16FE1 ; W # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
16FE2 ; W # Po OLD CHINESE HOOK MARK
16FE3 ; W # Lm OLD CHINESE ITERATION MARK
+16FE4 ; W # Mn KHITAN SMALL SCRIPT FILLER
+16FF0..16FF1 ; W # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
17000..187F7 ; W # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; W # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; W # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; W # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; W # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152 ; W # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167 ; W # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -2334,22 +2378,24 @@ FE6A..FE6B ; W # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
1F680..1F6C5 ; W # So [70] ROCKET..LEFT LUGGAGE
1F6CC ; W # So SLEEPING ACCOMMODATION
1F6D0..1F6D2 ; W # So [3] PLACE OF WORSHIP..SHOPPING TROLLEY
-1F6D5 ; W # So HINDU TEMPLE
+1F6D5..1F6D7 ; W # So [3] HINDU TEMPLE..ELEVATOR
1F6EB..1F6EC ; W # So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING
-1F6F4..1F6FA ; W # So [7] SCOOTER..AUTO RICKSHAW
+1F6F4..1F6FC ; W # So [9] SCOOTER..ROLLER SKATE
1F7E0..1F7EB ; W # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
-1F90D..1F971 ; W # So [101] WHITE HEART..YAWNING FACE
-1F973..1F976 ; W # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
-1F97A..1F9A2 ; W # So [41] FACE WITH PLEADING EYES..SWAN
-1F9A5..1F9AA ; W # So [6] SLOTH..OYSTER
-1F9AE..1F9CA ; W # So [29] GUIDE DOG..ICE CUBE
+1F90C..1F93A ; W # So [47] PINCHED FINGERS..FENCER
+1F93C..1F945 ; W # So [10] WRESTLERS..GOAL NET
+1F947..1F978 ; W # So [50] FIRST PLACE MEDAL..DISGUISED FACE
+1F97A..1F9CB ; W # So [82] FACE WITH PLEADING EYES..BUBBLE TEA
1F9CD..1F9FF ; W # So [51] STANDING PERSON..NAZAR AMULET
-1FA70..1FA73 ; W # So [4] BALLET SHOES..SHORTS
+1FA70..1FA74 ; W # So [5] BALLET SHOES..THONG SANDAL
1FA78..1FA7A ; W # So [3] DROP OF BLOOD..STETHOSCOPE
-1FA80..1FA82 ; W # So [3] YO-YO..PARACHUTE
-1FA90..1FA95 ; W # So [6] RINGED PLANET..BANJO
-20000..2A6D6 ; W # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
-2A6D7..2A6FF ; W # Cn [41] <reserved-2A6D7>..<reserved-2A6FF>
+1FA80..1FA86 ; W # So [7] YO-YO..NESTING DOLLS
+1FA90..1FAA8 ; W # So [25] RINGED PLANET..ROCK
+1FAB0..1FAB6 ; W # So [7] FLY..FEATHER
+1FAC0..1FAC2 ; W # So [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAD0..1FAD6 ; W # So [7] BLUEBERRIES..TEAPOT
+20000..2A6DD ; W # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
+2A6DE..2A6FF ; W # Cn [34] <reserved-2A6DE>..<reserved-2A6FF>
2A700..2B734 ; W # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B735..2B73F ; W # Cn [11] <reserved-2B735>..<reserved-2B73F>
2B740..2B81D ; W # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
@@ -2360,9 +2406,10 @@ FE6A..FE6B ; W # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
2EBE1..2F7FF ; W # Cn [3103] <reserved-2EBE1>..<reserved-2F7FF>
2F800..2FA1D ; W # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
2FA1E..2FFFD ; W # Cn [1504] <reserved-2FA1E>..<reserved-2FFFD>
-30000..3FFFD ; W # Cn [65534] <reserved-30000>..<reserved-3FFFD>
+30000..3134A ; W # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+3134B..3FFFD ; W # Cn [60595] <reserved-3134B>..<reserved-3FFFD>
-# Total code points: 181783
+# Total code points: 182336
# ================================================
diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DGeneralCategory.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DGeneralCategory.txt
index 21a66eea684..3e82c7fc532 100644
--- a/gnu/usr.bin/perl/lib/unicore/extracted/DGeneralCategory.txt
+++ b/gnu/usr.bin/perl/lib/unicore/extracted/DGeneralCategory.txt
@@ -1,5 +1,5 @@
-# DerivedGeneralCategory-12.1.0.txt
-# Date: 2019-03-10, 10:53:08 GMT
+# DerivedGeneralCategory-13.0.0.txt
+# Date: 2019-10-21, 14:30:32 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -38,7 +38,7 @@
085F ; Cn # <reserved-085F>
086B..089F ; Cn # [53] <reserved-086B>..<reserved-089F>
08B5 ; Cn # <reserved-08B5>
-08BE..08D2 ; Cn # [21] <reserved-08BE>..<reserved-08D2>
+08C8..08D2 ; Cn # [11] <reserved-08C8>..<reserved-08D2>
0984 ; Cn # <reserved-0984>
098D..098E ; Cn # [2] <reserved-098D>..<reserved-098E>
0991..0992 ; Cn # [2] <reserved-0991>..<reserved-0992>
@@ -92,7 +92,7 @@
0B3A..0B3B ; Cn # [2] <reserved-0B3A>..<reserved-0B3B>
0B45..0B46 ; Cn # [2] <reserved-0B45>..<reserved-0B46>
0B49..0B4A ; Cn # [2] <reserved-0B49>..<reserved-0B4A>
-0B4E..0B55 ; Cn # [8] <reserved-0B4E>..<reserved-0B55>
+0B4E..0B54 ; Cn # [7] <reserved-0B4E>..<reserved-0B54>
0B58..0B5B ; Cn # [4] <reserved-0B58>..<reserved-0B5B>
0B5E ; Cn # <reserved-0B5E>
0B64..0B65 ; Cn # [2] <reserved-0B64>..<reserved-0B65>
@@ -137,14 +137,13 @@
0CE4..0CE5 ; Cn # [2] <reserved-0CE4>..<reserved-0CE5>
0CF0 ; Cn # <reserved-0CF0>
0CF3..0CFF ; Cn # [13] <reserved-0CF3>..<reserved-0CFF>
-0D04 ; Cn # <reserved-0D04>
0D0D ; Cn # <reserved-0D0D>
0D11 ; Cn # <reserved-0D11>
0D45 ; Cn # <reserved-0D45>
0D49 ; Cn # <reserved-0D49>
0D50..0D53 ; Cn # [4] <reserved-0D50>..<reserved-0D53>
0D64..0D65 ; Cn # [2] <reserved-0D64>..<reserved-0D65>
-0D80..0D81 ; Cn # [2] <reserved-0D80>..<reserved-0D81>
+0D80 ; Cn # <reserved-0D80>
0D84 ; Cn # <reserved-0D84>
0D97..0D99 ; Cn # [3] <reserved-0D97>..<reserved-0D99>
0DB2 ; Cn # <reserved-0DB2>
@@ -231,7 +230,7 @@
1A8A..1A8F ; Cn # [6] <reserved-1A8A>..<reserved-1A8F>
1A9A..1A9F ; Cn # [6] <reserved-1A9A>..<reserved-1A9F>
1AAE..1AAF ; Cn # [2] <reserved-1AAE>..<reserved-1AAF>
-1ABF..1AFF ; Cn # [65] <reserved-1ABF>..<reserved-1AFF>
+1AC1..1AFF ; Cn # [63] <reserved-1AC1>..<reserved-1AFF>
1B4C..1B4F ; Cn # [4] <reserved-1B4C>..<reserved-1B4F>
1B7D..1B7F ; Cn # [3] <reserved-1B7D>..<reserved-1B7F>
1BF4..1BFB ; Cn # [8] <reserved-1BF4>..<reserved-1BFB>
@@ -268,7 +267,7 @@
2427..243F ; Cn # [25] <reserved-2427>..<reserved-243F>
244B..245F ; Cn # [21] <reserved-244B>..<reserved-245F>
2B74..2B75 ; Cn # [2] <reserved-2B74>..<reserved-2B75>
-2B96..2B97 ; Cn # [2] <reserved-2B96>..<reserved-2B97>
+2B96 ; Cn # <reserved-2B96>
2C2F ; Cn # <reserved-2C2F>
2C5F ; Cn # <reserved-2C5F>
2CF4..2CF8 ; Cn # [5] <reserved-2CF4>..<reserved-2CF8>
@@ -286,7 +285,7 @@
2DCF ; Cn # <reserved-2DCF>
2DD7 ; Cn # <reserved-2DD7>
2DDF ; Cn # <reserved-2DDF>
-2E50..2E7F ; Cn # [48] <reserved-2E50>..<reserved-2E7F>
+2E53..2E7F ; Cn # [45] <reserved-2E53>..<reserved-2E7F>
2E9A ; Cn # <reserved-2E9A>
2EF4..2EFF ; Cn # [12] <reserved-2EF4>..<reserved-2EFF>
2FD6..2FEF ; Cn # [26] <reserved-2FD6>..<reserved-2FEF>
@@ -296,18 +295,16 @@
3100..3104 ; Cn # [5] <reserved-3100>..<reserved-3104>
3130 ; Cn # <reserved-3130>
318F ; Cn # <reserved-318F>
-31BB..31BF ; Cn # [5] <reserved-31BB>..<reserved-31BF>
31E4..31EF ; Cn # [12] <reserved-31E4>..<reserved-31EF>
321F ; Cn # <reserved-321F>
-4DB6..4DBF ; Cn # [10] <reserved-4DB6>..<reserved-4DBF>
-9FF0..9FFF ; Cn # [16] <reserved-9FF0>..<reserved-9FFF>
+9FFD..9FFF ; Cn # [3] <reserved-9FFD>..<reserved-9FFF>
A48D..A48F ; Cn # [3] <reserved-A48D>..<reserved-A48F>
A4C7..A4CF ; Cn # [9] <reserved-A4C7>..<reserved-A4CF>
A62C..A63F ; Cn # [20] <reserved-A62C>..<reserved-A63F>
A6F8..A6FF ; Cn # [8] <reserved-A6F8>..<reserved-A6FF>
A7C0..A7C1 ; Cn # [2] <reserved-A7C0>..<reserved-A7C1>
-A7C7..A7F6 ; Cn # [48] <reserved-A7C7>..<reserved-A7F6>
-A82C..A82F ; Cn # [4] <reserved-A82C>..<reserved-A82F>
+A7CB..A7F4 ; Cn # [42] <reserved-A7CB>..<reserved-A7F4>
+A82D..A82F ; Cn # [3] <reserved-A82D>..<reserved-A82F>
A83A..A83F ; Cn # [6] <reserved-A83A>..<reserved-A83F>
A878..A87F ; Cn # [8] <reserved-A878>..<reserved-A87F>
A8C6..A8CD ; Cn # [8] <reserved-A8C6>..<reserved-A8CD>
@@ -327,7 +324,7 @@ AB0F..AB10 ; Cn # [2] <reserved-AB0F>..<reserved-AB10>
AB17..AB1F ; Cn # [9] <reserved-AB17>..<reserved-AB1F>
AB27 ; Cn # <reserved-AB27>
AB2F ; Cn # <reserved-AB2F>
-AB68..AB6F ; Cn # [8] <reserved-AB68>..<reserved-AB6F>
+AB6C..AB6F ; Cn # [4] <reserved-AB6C>..<reserved-AB6F>
ABEE..ABEF ; Cn # [2] <reserved-ABEE>..<reserved-ABEF>
ABFA..ABFF ; Cn # [6] <reserved-ABFA>..<reserved-ABFF>
D7A4..D7AF ; Cn # [12] <reserved-D7A4>..<reserved-D7AF>
@@ -372,7 +369,7 @@ FFFE..FFFF ; Cn # [2] <noncharacter-FFFE>..<noncharacter-FFFF>
10103..10106 ; Cn # [4] <reserved-10103>..<reserved-10106>
10134..10136 ; Cn # [3] <reserved-10134>..<reserved-10136>
1018F ; Cn # <reserved-1018F>
-1019C..1019F ; Cn # [4] <reserved-1019C>..<reserved-1019F>
+1019D..1019F ; Cn # [3] <reserved-1019D>..<reserved-1019F>
101A1..101CF ; Cn # [47] <reserved-101A1>..<reserved-101CF>
101FE..1027F ; Cn # [130] <reserved-101FE>..<reserved-1027F>
1029D..1029F ; Cn # [3] <reserved-1029D>..<reserved-1029F>
@@ -431,9 +428,13 @@ FFFE..FFFF ; Cn # [2] <noncharacter-FFFE>..<noncharacter-FFFF>
10CF3..10CF9 ; Cn # [7] <reserved-10CF3>..<reserved-10CF9>
10D28..10D2F ; Cn # [8] <reserved-10D28>..<reserved-10D2F>
10D3A..10E5F ; Cn # [294] <reserved-10D3A>..<reserved-10E5F>
-10E7F..10EFF ; Cn # [129] <reserved-10E7F>..<reserved-10EFF>
+10E7F ; Cn # <reserved-10E7F>
+10EAA ; Cn # <reserved-10EAA>
+10EAE..10EAF ; Cn # [2] <reserved-10EAE>..<reserved-10EAF>
+10EB2..10EFF ; Cn # [78] <reserved-10EB2>..<reserved-10EFF>
10F28..10F2F ; Cn # [8] <reserved-10F28>..<reserved-10F2F>
-10F5A..10FDF ; Cn # [134] <reserved-10F5A>..<reserved-10FDF>
+10F5A..10FAF ; Cn # [86] <reserved-10F5A>..<reserved-10FAF>
+10FCC..10FDF ; Cn # [20] <reserved-10FCC>..<reserved-10FDF>
10FF7..10FFF ; Cn # [9] <reserved-10FF7>..<reserved-10FFF>
1104E..11051 ; Cn # [4] <reserved-1104E>..<reserved-11051>
11070..1107E ; Cn # [15] <reserved-11070>..<reserved-1107E>
@@ -442,9 +443,8 @@ FFFE..FFFF ; Cn # [2] <noncharacter-FFFE>..<noncharacter-FFFF>
110E9..110EF ; Cn # [7] <reserved-110E9>..<reserved-110EF>
110FA..110FF ; Cn # [6] <reserved-110FA>..<reserved-110FF>
11135 ; Cn # <reserved-11135>
-11147..1114F ; Cn # [9] <reserved-11147>..<reserved-1114F>
+11148..1114F ; Cn # [8] <reserved-11148>..<reserved-1114F>
11177..1117F ; Cn # [9] <reserved-11177>..<reserved-1117F>
-111CE..111CF ; Cn # [2] <reserved-111CE>..<reserved-111CF>
111E0 ; Cn # <reserved-111E0>
111F5..111FF ; Cn # [11] <reserved-111F5>..<reserved-111FF>
11212 ; Cn # <reserved-11212>
@@ -471,9 +471,8 @@ FFFE..FFFF ; Cn # [2] <noncharacter-FFFE>..<noncharacter-FFFF>
11364..11365 ; Cn # [2] <reserved-11364>..<reserved-11365>
1136D..1136F ; Cn # [3] <reserved-1136D>..<reserved-1136F>
11375..113FF ; Cn # [139] <reserved-11375>..<reserved-113FF>
-1145A ; Cn # <reserved-1145A>
1145C ; Cn # <reserved-1145C>
-11460..1147F ; Cn # [32] <reserved-11460>..<reserved-1147F>
+11462..1147F ; Cn # [30] <reserved-11462>..<reserved-1147F>
114C8..114CF ; Cn # [8] <reserved-114C8>..<reserved-114CF>
114DA..1157F ; Cn # [166] <reserved-114DA>..<reserved-1157F>
115B6..115B7 ; Cn # [2] <reserved-115B6>..<reserved-115B7>
@@ -488,7 +487,14 @@ FFFE..FFFF ; Cn # [2] <noncharacter-FFFE>..<noncharacter-FFFF>
11740..117FF ; Cn # [192] <reserved-11740>..<reserved-117FF>
1183C..1189F ; Cn # [100] <reserved-1183C>..<reserved-1189F>
118F3..118FE ; Cn # [12] <reserved-118F3>..<reserved-118FE>
-11900..1199F ; Cn # [160] <reserved-11900>..<reserved-1199F>
+11907..11908 ; Cn # [2] <reserved-11907>..<reserved-11908>
+1190A..1190B ; Cn # [2] <reserved-1190A>..<reserved-1190B>
+11914 ; Cn # <reserved-11914>
+11917 ; Cn # <reserved-11917>
+11936 ; Cn # <reserved-11936>
+11939..1193A ; Cn # [2] <reserved-11939>..<reserved-1193A>
+11947..1194F ; Cn # [9] <reserved-11947>..<reserved-1194F>
+1195A..1199F ; Cn # [70] <reserved-1195A>..<reserved-1199F>
119A8..119A9 ; Cn # [2] <reserved-119A8>..<reserved-119A9>
119D8..119D9 ; Cn # [2] <reserved-119D8>..<reserved-119D9>
119E5..119FF ; Cn # [27] <reserved-119E5>..<reserved-119FF>
@@ -515,7 +521,8 @@ FFFE..FFFF ; Cn # [2] <noncharacter-FFFE>..<noncharacter-FFFF>
11D92 ; Cn # <reserved-11D92>
11D99..11D9F ; Cn # [7] <reserved-11D99>..<reserved-11D9F>
11DAA..11EDF ; Cn # [310] <reserved-11DAA>..<reserved-11EDF>
-11EF9..11FBF ; Cn # [199] <reserved-11EF9>..<reserved-11FBF>
+11EF9..11FAF ; Cn # [183] <reserved-11EF9>..<reserved-11FAF>
+11FB1..11FBF ; Cn # [15] <reserved-11FB1>..<reserved-11FBF>
11FF2..11FFE ; Cn # [13] <reserved-11FF2>..<reserved-11FFE>
1239A..123FF ; Cn # [102] <reserved-1239A>..<reserved-123FF>
1246F ; Cn # <reserved-1246F>
@@ -539,9 +546,11 @@ FFFE..FFFF ; Cn # [2] <noncharacter-FFFE>..<noncharacter-FFFF>
16F4B..16F4E ; Cn # [4] <reserved-16F4B>..<reserved-16F4E>
16F88..16F8E ; Cn # [7] <reserved-16F88>..<reserved-16F8E>
16FA0..16FDF ; Cn # [64] <reserved-16FA0>..<reserved-16FDF>
-16FE4..16FFF ; Cn # [28] <reserved-16FE4>..<reserved-16FFF>
+16FE5..16FEF ; Cn # [11] <reserved-16FE5>..<reserved-16FEF>
+16FF2..16FFF ; Cn # [14] <reserved-16FF2>..<reserved-16FFF>
187F8..187FF ; Cn # [8] <reserved-187F8>..<reserved-187FF>
-18AF3..1AFFF ; Cn # [9485] <reserved-18AF3>..<reserved-1AFFF>
+18CD6..18CFF ; Cn # [42] <reserved-18CD6>..<reserved-18CFF>
+18D09..1AFFF ; Cn # [8951] <reserved-18D09>..<reserved-1AFFF>
1B11F..1B14F ; Cn # [49] <reserved-1B11F>..<reserved-1B14F>
1B153..1B163 ; Cn # [17] <reserved-1B153>..<reserved-1B163>
1B168..1B16F ; Cn # [8] <reserved-1B168>..<reserved-1B16F>
@@ -639,17 +648,15 @@ FFFE..FFFF ; Cn # [2] <noncharacter-FFFE>..<noncharacter-FFFF>
1F0C0 ; Cn # <reserved-1F0C0>
1F0D0 ; Cn # <reserved-1F0D0>
1F0F6..1F0FF ; Cn # [10] <reserved-1F0F6>..<reserved-1F0FF>
-1F10D..1F10F ; Cn # [3] <reserved-1F10D>..<reserved-1F10F>
-1F16D..1F16F ; Cn # [3] <reserved-1F16D>..<reserved-1F16F>
-1F1AD..1F1E5 ; Cn # [57] <reserved-1F1AD>..<reserved-1F1E5>
+1F1AE..1F1E5 ; Cn # [56] <reserved-1F1AE>..<reserved-1F1E5>
1F203..1F20F ; Cn # [13] <reserved-1F203>..<reserved-1F20F>
1F23C..1F23F ; Cn # [4] <reserved-1F23C>..<reserved-1F23F>
1F249..1F24F ; Cn # [7] <reserved-1F249>..<reserved-1F24F>
1F252..1F25F ; Cn # [14] <reserved-1F252>..<reserved-1F25F>
1F266..1F2FF ; Cn # [154] <reserved-1F266>..<reserved-1F2FF>
-1F6D6..1F6DF ; Cn # [10] <reserved-1F6D6>..<reserved-1F6DF>
+1F6D8..1F6DF ; Cn # [8] <reserved-1F6D8>..<reserved-1F6DF>
1F6ED..1F6EF ; Cn # [3] <reserved-1F6ED>..<reserved-1F6EF>
-1F6FB..1F6FF ; Cn # [5] <reserved-1F6FB>..<reserved-1F6FF>
+1F6FD..1F6FF ; Cn # [3] <reserved-1F6FD>..<reserved-1F6FF>
1F774..1F77F ; Cn # [12] <reserved-1F774>..<reserved-1F77F>
1F7D9..1F7DF ; Cn # [7] <reserved-1F7D9>..<reserved-1F7DF>
1F7EC..1F7FF ; Cn # [20] <reserved-1F7EC>..<reserved-1F7FF>
@@ -657,32 +664,36 @@ FFFE..FFFF ; Cn # [2] <noncharacter-FFFE>..<noncharacter-FFFF>
1F848..1F84F ; Cn # [8] <reserved-1F848>..<reserved-1F84F>
1F85A..1F85F ; Cn # [6] <reserved-1F85A>..<reserved-1F85F>
1F888..1F88F ; Cn # [8] <reserved-1F888>..<reserved-1F88F>
-1F8AE..1F8FF ; Cn # [82] <reserved-1F8AE>..<reserved-1F8FF>
-1F90C ; Cn # <reserved-1F90C>
-1F972 ; Cn # <reserved-1F972>
-1F977..1F979 ; Cn # [3] <reserved-1F977>..<reserved-1F979>
-1F9A3..1F9A4 ; Cn # [2] <reserved-1F9A3>..<reserved-1F9A4>
-1F9AB..1F9AD ; Cn # [3] <reserved-1F9AB>..<reserved-1F9AD>
-1F9CB..1F9CC ; Cn # [2] <reserved-1F9CB>..<reserved-1F9CC>
+1F8AE..1F8AF ; Cn # [2] <reserved-1F8AE>..<reserved-1F8AF>
+1F8B2..1F8FF ; Cn # [78] <reserved-1F8B2>..<reserved-1F8FF>
+1F979 ; Cn # <reserved-1F979>
+1F9CC ; Cn # <reserved-1F9CC>
1FA54..1FA5F ; Cn # [12] <reserved-1FA54>..<reserved-1FA5F>
1FA6E..1FA6F ; Cn # [2] <reserved-1FA6E>..<reserved-1FA6F>
-1FA74..1FA77 ; Cn # [4] <reserved-1FA74>..<reserved-1FA77>
+1FA75..1FA77 ; Cn # [3] <reserved-1FA75>..<reserved-1FA77>
1FA7B..1FA7F ; Cn # [5] <reserved-1FA7B>..<reserved-1FA7F>
-1FA83..1FA8F ; Cn # [13] <reserved-1FA83>..<reserved-1FA8F>
-1FA96..1FFFF ; Cn # [1386] <reserved-1FA96>..<noncharacter-1FFFF>
-2A6D7..2A6FF ; Cn # [41] <reserved-2A6D7>..<reserved-2A6FF>
+1FA87..1FA8F ; Cn # [9] <reserved-1FA87>..<reserved-1FA8F>
+1FAA9..1FAAF ; Cn # [7] <reserved-1FAA9>..<reserved-1FAAF>
+1FAB7..1FABF ; Cn # [9] <reserved-1FAB7>..<reserved-1FABF>
+1FAC3..1FACF ; Cn # [13] <reserved-1FAC3>..<reserved-1FACF>
+1FAD7..1FAFF ; Cn # [41] <reserved-1FAD7>..<reserved-1FAFF>
+1FB93 ; Cn # <reserved-1FB93>
+1FBCB..1FBEF ; Cn # [37] <reserved-1FBCB>..<reserved-1FBEF>
+1FBFA..1FFFF ; Cn # [1030] <reserved-1FBFA>..<noncharacter-1FFFF>
+2A6DE..2A6FF ; Cn # [34] <reserved-2A6DE>..<reserved-2A6FF>
2B735..2B73F ; Cn # [11] <reserved-2B735>..<reserved-2B73F>
2B81E..2B81F ; Cn # [2] <reserved-2B81E>..<reserved-2B81F>
2CEA2..2CEAF ; Cn # [14] <reserved-2CEA2>..<reserved-2CEAF>
2EBE1..2F7FF ; Cn # [3103] <reserved-2EBE1>..<reserved-2F7FF>
-2FA1E..E0000 ; Cn # [722403] <reserved-2FA1E>..<reserved-E0000>
+2FA1E..2FFFF ; Cn # [1506] <reserved-2FA1E>..<noncharacter-2FFFF>
+3134B..E0000 ; Cn # [715958] <reserved-3134B>..<reserved-E0000>
E0002..E001F ; Cn # [30] <reserved-E0002>..<reserved-E001F>
E0080..E00FF ; Cn # [128] <reserved-E0080>..<reserved-E00FF>
E01F0..EFFFF ; Cn # [65040] <reserved-E01F0>..<noncharacter-EFFFF>
FFFFE..FFFFF ; Cn # [2] <noncharacter-FFFFE>..<noncharacter-FFFFF>
10FFFE..10FFFF; Cn # [2] <noncharacter-10FFFE>..<noncharacter-10FFFF>
-# Total code points: 836602
+# Total code points: 830672
# ================================================
@@ -1285,7 +1296,9 @@ A7BA ; Lu # LATIN CAPITAL LETTER GLOTTAL A
A7BC ; Lu # LATIN CAPITAL LETTER GLOTTAL I
A7BE ; Lu # LATIN CAPITAL LETTER GLOTTAL U
A7C2 ; Lu # LATIN CAPITAL LETTER ANGLICANA W
-A7C4..A7C6 ; Lu # [3] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C4..A7C7 ; Lu # [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY
+A7C9 ; Lu # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY
+A7F5 ; Lu # LATIN CAPITAL LETTER REVERSED HALF H
FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
10400..10427 ; Lu # [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
104B0..104D3 ; Lu # [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
@@ -1325,7 +1338,7 @@ FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAP
1D7CA ; Lu # MATHEMATICAL BOLD CAPITAL DIGAMMA
1E900..1E921 ; Lu # [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA
-# Total code points: 1788
+# Total code points: 1791
# ================================================
@@ -1932,9 +1945,12 @@ A7BB ; Ll # LATIN SMALL LETTER GLOTTAL A
A7BD ; Ll # LATIN SMALL LETTER GLOTTAL I
A7BF ; Ll # LATIN SMALL LETTER GLOTTAL U
A7C3 ; Ll # LATIN SMALL LETTER ANGLICANA W
+A7C8 ; Ll # LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY
+A7CA ; Ll # LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F6 ; Ll # LATIN SMALL LETTER REVERSED HALF H
A7FA ; Ll # LATIN LETTER SMALL CAPITAL TURNED M
AB30..AB5A ; Ll # [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
-AB60..AB67 ; Ll # [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; Ll # [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
AB70..ABBF ; Ll # [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
FB00..FB06 ; Ll # [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
FB13..FB17 ; Ll # [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
@@ -1974,7 +1990,7 @@ FF41..FF5A ; Ll # [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL
1D7CB ; Ll # MATHEMATICAL BOLD SMALL DIGAMMA
1E922..1E943 ; Ll # [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA
-# Total code points: 2151
+# Total code points: 2155
# ================================================
@@ -2049,6 +2065,7 @@ AA70 ; Lm # MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
AADD ; Lm # TAI VIET SYMBOL SAM
AAF3..AAF4 ; Lm # [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
AB5C..AB5F ; Lm # [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
+AB69 ; Lm # MODIFIER LETTER SMALL TURNED W
FF70 ; Lm # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
16B40..16B43 ; Lm # [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
@@ -2058,7 +2075,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK
1E137..1E13D ; Lm # [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER
1E94B ; Lm # ADLAM NASALIZATION MARK
-# Total code points: 259
+# Total code points: 260
# ================================================
@@ -2088,7 +2105,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK
0840..0858 ; Lo # [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
0860..086A ; Lo # [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; Lo # [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; Lo # [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; Lo # [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
0904..0939 ; Lo # [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
093D ; Lo # DEVANAGARI SIGN AVAGRAHA
0950 ; Lo # DEVANAGARI OM
@@ -2164,7 +2181,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK
0CDE ; Lo # KANNADA LETTER FA
0CE0..0CE1 ; Lo # [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
0CF1..0CF2 ; Lo # [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-0D05..0D0C ; Lo # [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; Lo # [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; Lo # [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; Lo # [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; Lo # MALAYALAM SIGN AVAGRAHA
@@ -2277,10 +2294,10 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK
30FF ; Lo # KATAKANA DIGRAPH KOTO
3105..312F ; Lo # [43] BOPOMOFO LETTER B..BOPOMOFO LETTER NN
3131..318E ; Lo # [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
-31A0..31BA ; Lo # [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; Lo # [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31F0..31FF ; Lo # [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
-3400..4DB5 ; Lo # [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FEF ; Lo # [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
+3400..4DBF ; Lo # [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; Lo # [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
A000..A014 ; Lo # [21] YI SYLLABLE IT..YI SYLLABLE E
A016..A48C ; Lo # [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
A4D0..A4F7 ; Lo # [40] LISU LETTER BA..LISU LETTER OE
@@ -2404,15 +2421,19 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
10B80..10B91 ; Lo # [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
10C00..10C48 ; Lo # [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
10D00..10D23 ; Lo # [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
+10E80..10EA9 ; Lo # [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EB0..10EB1 ; Lo # [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; Lo # [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F27 ; Lo # OLD SOGDIAN LIGATURE AYIN-DALETH
10F30..10F45 ; Lo # [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
+10FB0..10FC4 ; Lo # [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
10FE0..10FF6 ; Lo # [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11003..11037 ; Lo # [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
11083..110AF ; Lo # [45] KAITHI LETTER A..KAITHI LETTER HA
110D0..110E8 ; Lo # [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
11103..11126 ; Lo # [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
11144 ; Lo # CHAKMA LETTER LHAA
+11147 ; Lo # CHAKMA LETTER VAA
11150..11172 ; Lo # [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11176 ; Lo # MAHAJANI LIGATURE SHRI
11183..111B2 ; Lo # [48] SHARADA LETTER A..SHARADA LETTER HA
@@ -2438,7 +2459,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
1135D..11361 ; Lo # [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
11400..11434 ; Lo # [53] NEWA LETTER A..NEWA LETTER HA
11447..1144A ; Lo # [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
-1145F ; Lo # NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; Lo # [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; Lo # [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114C4..114C5 ; Lo # [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
114C7 ; Lo # TIRHUTA OM
@@ -2450,7 +2471,13 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
116B8 ; Lo # TAKRI LETTER ARCHAIC KHA
11700..1171A ; Lo # [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA
11800..1182B ; Lo # [44] DOGRA LETTER A..DOGRA LETTER RRA
-118FF ; Lo # WARANG CITI OM
+118FF..11906 ; Lo # [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; Lo # DIVES AKURU LETTER O
+1190C..11913 ; Lo # [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; Lo # [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; Lo # [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+1193F ; Lo # DIVES AKURU PREFIXED NASAL SIGN
+11941 ; Lo # DIVES AKURU INITIAL RA
119A0..119A7 ; Lo # [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; Lo # [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119E1 ; Lo # NANDINAGARI SIGN AVAGRAHA
@@ -2475,6 +2502,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
11D6A..11D89 ; Lo # [32] GUNJALA GONDI LETTER OO..GUNJALA GONDI LETTER SA
11D98 ; Lo # GUNJALA GONDI OM
11EE0..11EF2 ; Lo # [19] MAKASAR LETTER KA..MAKASAR ANGKA
+11FB0 ; Lo # LISU LETTER YHA
12000..12399 ; Lo # [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12480..12543 ; Lo # [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
13000..1342E ; Lo # [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
@@ -2488,7 +2516,8 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
16F00..16F4A ; Lo # [75] MIAO LETTER PA..MIAO LETTER RTE
16F50 ; Lo # MIAO LETTER NASALIZATION
17000..187F7 ; Lo # [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; Lo # [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18CD5 ; Lo # [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5
+18D00..18D08 ; Lo # [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; Lo # [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B150..1B152 ; Lo # [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO
1B164..1B167 ; Lo # [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N
@@ -2534,14 +2563,15 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
1EEA1..1EEA3 ; Lo # [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
1EEA5..1EEA9 ; Lo # [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
1EEAB..1EEBB ; Lo # [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
-20000..2A6D6 ; Lo # [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
+20000..2A6DD ; Lo # [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
2A700..2B734 ; Lo # [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Lo # [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; Lo # [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
2CEB0..2EBE0 ; Lo # [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; Lo # [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+30000..3134A ; Lo # [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
-# Total code points: 121414
+# Total code points: 127004
# ================================================
@@ -2605,7 +2635,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
0B3F ; Mn # ORIYA VOWEL SIGN I
0B41..0B44 ; Mn # [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
0B4D ; Mn # ORIYA SIGN VIRAMA
-0B56 ; Mn # ORIYA AI LENGTH MARK
+0B55..0B56 ; Mn # [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B62..0B63 ; Mn # [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
0B82 ; Mn # TAMIL SIGN ANUSVARA
0BC0 ; Mn # TAMIL VOWEL SIGN II
@@ -2628,6 +2658,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
0D41..0D44 ; Mn # [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
0D4D ; Mn # MALAYALAM SIGN VIRAMA
0D62..0D63 ; Mn # [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; Mn # SINHALA SIGN CANDRABINDU
0DCA ; Mn # SINHALA SIGN AL-LAKUNA
0DD2..0DD4 ; Mn # [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
0DD6 ; Mn # SINHALA VOWEL SIGN DIGA PAA-PILLA
@@ -2685,6 +2716,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
1A73..1A7C ; Mn # [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
1A7F ; Mn # TAI THAM COMBINING CRYPTOGRAMMIC DOT
1AB0..1ABD ; Mn # [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
+1ABF..1AC0 ; Mn # [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; Mn # [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B34 ; Mn # BALINESE SIGN REREKAN
1B36..1B3A ; Mn # [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
@@ -2725,6 +2757,7 @@ A802 ; Mn # SYLOTI NAGRI SIGN DVISVARA
A806 ; Mn # SYLOTI NAGRI SIGN HASANTA
A80B ; Mn # SYLOTI NAGRI SIGN ANUSVARA
A825..A826 ; Mn # [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A82C ; Mn # SYLOTI NAGRI SIGN ALTERNATE HASANTA
A8C4..A8C5 ; Mn # [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
A8E0..A8F1 ; Mn # [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
A8FF ; Mn # DEVANAGARI VOWEL SIGN AY
@@ -2764,6 +2797,7 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL
10A3F ; Mn # KHAROSHTHI VIRAMA
10AE5..10AE6 ; Mn # [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
10D24..10D27 ; Mn # [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; Mn # [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
10F46..10F50 ; Mn # [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
11001 ; Mn # BRAHMI SIGN ANUSVARA
11038..11046 ; Mn # [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
@@ -2777,6 +2811,7 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL
11180..11181 ; Mn # [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
111B6..111BE ; Mn # [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111C9..111CC ; Mn # [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CF ; Mn # SHARADA SIGN INVERTED CANDRABINDU
1122F..11231 ; Mn # [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11234 ; Mn # KHOJKI SIGN ANUSVARA
11236..11237 ; Mn # [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
@@ -2812,6 +2847,9 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL
11727..1172B ; Mn # [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
1182F..11837 ; Mn # [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
11839..1183A ; Mn # [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+1193B..1193C ; Mn # [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193E ; Mn # DIVES AKURU VIRAMA
+11943 ; Mn # DIVES AKURU SIGN NUKTA
119D4..119D7 ; Mn # [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119DA..119DB ; Mn # [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
119E0 ; Mn # NANDINAGARI SIGN VIRAMA
@@ -2843,6 +2881,7 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL
16B30..16B36 ; Mn # [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F4F ; Mn # MIAO SIGN CONSONANT MODIFIER BAR
16F8F..16F92 ; Mn # [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16FE4 ; Mn # KHITAN SMALL SCRIPT FILLER
1BC9D..1BC9E ; Mn # [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
1D167..1D169 ; Mn # [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
1D17B..1D182 ; Mn # [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
@@ -2866,7 +2905,7 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL
1E944..1E94A ; Mn # [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
E0100..E01EF ; Mn # [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 1826
+# Total code points: 1839
# ================================================
@@ -3003,6 +3042,7 @@ ABEC ; Mc # MEETEI MAYEK LUM IYEK
11182 ; Mc # SHARADA SIGN VISARGA
111B3..111B5 ; Mc # [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
111BF..111C0 ; Mc # [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+111CE ; Mc # SHARADA VOWEL SIGN PRISHTHAMATRA E
1122C..1122E ; Mc # [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
11232..11233 ; Mc # [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
11235 ; Mc # KHOJKI SIGN VIRAMA
@@ -3034,6 +3074,11 @@ ABEC ; Mc # MEETEI MAYEK LUM IYEK
11726 ; Mc # AHOM VOWEL SIGN E
1182C..1182E ; Mc # [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II
11838 ; Mc # DOGRA SIGN VISARGA
+11930..11935 ; Mc # [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; Mc # [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193D ; Mc # DIVES AKURU SIGN HALANTA
+11940 ; Mc # DIVES AKURU MEDIAL YA
+11942 ; Mc # DIVES AKURU MEDIAL RA
119D1..119D3 ; Mc # [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
119DC..119DF ; Mc # [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA
119E4 ; Mc # NANDINAGARI VOWEL SIGN PRISHTHAMATRA E
@@ -3050,10 +3095,11 @@ ABEC ; Mc # MEETEI MAYEK LUM IYEK
11D96 ; Mc # GUNJALA GONDI SIGN VISARGA
11EF5..11EF6 ; Mc # [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O
16F51..16F87 ; Mc # [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
+16FF0..16FF1 ; Mc # [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
1D165..1D166 ; Mc # [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
1D16D..1D172 ; Mc # [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
-# Total code points: 429
+# Total code points: 443
# ================================================
@@ -3109,6 +3155,7 @@ FF10..FF19 ; Nd # [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
116C0..116C9 ; Nd # [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
11730..11739 ; Nd # [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
118E0..118E9 ; Nd # [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+11950..11959 ; Nd # [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
11C50..11C59 ; Nd # [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
11D50..11D59 ; Nd # [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
11DA0..11DA9 ; Nd # [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
@@ -3118,8 +3165,9 @@ FF10..FF19 ; Nd # [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
1E140..1E149 ; Nd # [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
1E2F0..1E2F9 ; Nd # [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
1E950..1E959 ; Nd # [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1FBF0..1FBF9 ; Nd # [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-# Total code points: 630
+# Total code points: 650
# ================================================
@@ -3197,6 +3245,7 @@ A830..A835 ; No # [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTIO
10E60..10E7E ; No # [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
10F1D..10F26 ; No # [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
10F51..10F54 ; No # [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
+10FC5..10FCB ; No # [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
11052..11065 ; No # [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
111E1..111F4 ; No # [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
1173A..1173B ; No # [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
@@ -3215,7 +3264,7 @@ A830..A835 ; No # [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTIO
1ED2F..1ED3D ; No # [15] OTTOMAN SIYAQ ALTERNATE NUMBER TWO..OTTOMAN SIYAQ FRACTION ONE SIXTH
1F100..1F10C ; No # [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
-# Total code points: 888
+# Total code points: 895
# ================================================
@@ -3322,8 +3371,9 @@ FE31..FE32 ; Pd # [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION
FE58 ; Pd # SMALL EM DASH
FE63 ; Pd # SMALL HYPHEN-MINUS
FF0D ; Pd # FULLWIDTH HYPHEN-MINUS
+10EAD ; Pd # YEZIDI HYPHENATION MARK
-# Total code points: 24
+# Total code points: 25
# ================================================
@@ -3591,6 +3641,7 @@ FF3F ; Pc # FULLWIDTH LOW LINE
2E3C..2E3F ; Po # [4] STENOGRAPHIC FULL STOP..CAPITULUM
2E41 ; Po # REVERSED COMMA
2E43..2E4F ; Po # [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER
+2E52 ; Po # TIRONIAN SIGN CAPITAL ET
3001..3003 ; Po # [3] IDEOGRAPHIC COMMA..DITTO MARK
303D ; Po # PART ALTERNATION MARK
30FB ; Po # KATAKANA MIDDLE DOT
@@ -3656,7 +3707,7 @@ FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDL
11238..1123D ; Po # [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN
112A9 ; Po # MULTANI SECTION MARK
1144B..1144F ; Po # [5] NEWA DANDA..NEWA ABBREVIATION SIGN
-1145B ; Po # NEWA PLACEHOLDER MARK
+1145A..1145B ; Po # [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
1145D ; Po # NEWA INSERTION SIGN
114C6 ; Po # TIRHUTA ABBREVIATION SIGN
115C1..115D7 ; Po # [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
@@ -3664,6 +3715,7 @@ FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDL
11660..1166C ; Po # [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
1173C..1173E ; Po # [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
1183B ; Po # DOGRA ABBREVIATION SIGN
+11944..11946 ; Po # [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
119E2 ; Po # NANDINAGARI SIGN SIDDHAM
11A3F..11A46 ; Po # [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
11A9A..11A9C ; Po # [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
@@ -3683,7 +3735,7 @@ FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDL
1DA87..1DA8B ; Po # [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS
1E95E..1E95F ; Po # [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
-# Total code points: 588
+# Total code points: 593
# ================================================
@@ -3812,13 +3864,14 @@ A700..A716 ; Sk # [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTE
A720..A721 ; Sk # [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
A789..A78A ; Sk # [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
AB5B ; Sk # MODIFIER BREVE WITH INVERTED BREVE
+AB6A..AB6B ; Sk # [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
FBB2..FBC1 ; Sk # [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
FF3E ; Sk # FULLWIDTH CIRCUMFLEX ACCENT
FF40 ; Sk # FULLWIDTH GRAVE ACCENT
FFE3 ; Sk # FULLWIDTH MACRON
1F3FB..1F3FF ; Sk # [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
-# Total code points: 121
+# Total code points: 123
# ================================================
@@ -3904,8 +3957,9 @@ FFE3 ; Sk # FULLWIDTH MACRON
2B45..2B46 ; So # [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
2B4D..2B73 ; So # [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95 ; So # [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B98..2BFF ; So # [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2B97..2BFF ; So # [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
2CE5..2CEA ; So # [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
+2E50..2E51 ; So # [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
2E80..2E99 ; So # [26] CJK RADICAL REPEAT..CJK RADICAL RAP
2E9B..2EF3 ; So # [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
2F00..2FD5 ; So # [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
@@ -3938,7 +3992,7 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
10137..1013F ; So # [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
10179..10189 ; So # [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
1018C..1018E ; So # [3] GREEK SINUSOID SIGN..NOMISMA SIGN
-10190..1019B ; So # [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+10190..1019C ; So # [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
101A0 ; So # GREEK SYMBOL TAU RHO
101D0..101FC ; So # [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
10877..10878 ; So # [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON
@@ -3973,17 +4027,16 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
1F0B1..1F0BF ; So # [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER
1F0C1..1F0CF ; So # [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
1F0D1..1F0F5 ; So # [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
-1F110..1F16C ; So # [93] PARENTHESIZED LATIN CAPITAL LETTER A..RAISED MR SIGN
-1F170..1F1AC ; So # [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
+1F10D..1F1AD ; So # [161] CIRCLED ZERO WITH SLASH..MASK WORK SYMBOL
1F1E6..1F202 ; So # [29] REGIONAL INDICATOR SYMBOL LETTER A..SQUARED KATAKANA SA
1F210..1F23B ; So # [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240..1F248 ; So # [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; So # [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
1F260..1F265 ; So # [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
1F300..1F3FA ; So # [251] CYCLONE..AMPHORA
-1F400..1F6D5 ; So # [726] RAT..HINDU TEMPLE
+1F400..1F6D7 ; So # [728] RAT..ELEVATOR
1F6E0..1F6EC ; So # [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
-1F6F0..1F6FA ; So # [11] SATELLITE..AUTO RICKSHAW
+1F6F0..1F6FC ; So # [13] SATELLITE..ROLLER SKATE
1F700..1F773 ; So # [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
1F780..1F7D8 ; So # [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE
1F7E0..1F7EB ; So # [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE
@@ -3992,20 +4045,22 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
1F850..1F859 ; So # [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
1F860..1F887 ; So # [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F890..1F8AD ; So # [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-1F900..1F90B ; So # [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
-1F90D..1F971 ; So # [101] WHITE HEART..YAWNING FACE
-1F973..1F976 ; So # [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
-1F97A..1F9A2 ; So # [41] FACE WITH PLEADING EYES..SWAN
-1F9A5..1F9AA ; So # [6] SLOTH..OYSTER
-1F9AE..1F9CA ; So # [29] GUIDE DOG..ICE CUBE
+1F8B0..1F8B1 ; So # [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F900..1F978 ; So # [121] CIRCLED CROSS FORMEE WITH FOUR DOTS..DISGUISED FACE
+1F97A..1F9CB ; So # [82] FACE WITH PLEADING EYES..BUBBLE TEA
1F9CD..1FA53 ; So # [135] STANDING PERSON..BLACK CHESS KNIGHT-BISHOP
1FA60..1FA6D ; So # [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
-1FA70..1FA73 ; So # [4] BALLET SHOES..SHORTS
+1FA70..1FA74 ; So # [5] BALLET SHOES..THONG SANDAL
1FA78..1FA7A ; So # [3] DROP OF BLOOD..STETHOSCOPE
-1FA80..1FA82 ; So # [3] YO-YO..PARACHUTE
-1FA90..1FA95 ; So # [6] RINGED PLANET..BANJO
+1FA80..1FA86 ; So # [7] YO-YO..NESTING DOLLS
+1FA90..1FAA8 ; So # [25] RINGED PLANET..ROCK
+1FAB0..1FAB6 ; So # [7] FLY..FEATHER
+1FAC0..1FAC2 ; So # [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAD0..1FAD6 ; So # [7] BLUEBERRIES..TEAPOT
+1FB00..1FB92 ; So # [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA ; So # [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
-# Total code points: 6161
+# Total code points: 6431
# ================================================
diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DJoinGroup.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DJoinGroup.txt
index ce894ffe1af..0888bf01811 100644
--- a/gnu/usr.bin/perl/lib/unicore/extracted/DJoinGroup.txt
+++ b/gnu/usr.bin/perl/lib/unicore/extracted/DJoinGroup.txt
@@ -1,5 +1,5 @@
-# DerivedJoiningGroup-12.1.0.txt
-# Date: 2019-03-10, 10:53:08 GMT
+# DerivedJoiningGroup-13.0.0.txt
+# Date: 2019-09-08, 23:31:07 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -23,8 +23,9 @@
06FC ; Ain # Lo ARABIC LETTER GHAIN WITH DOT BELOW
075D..075F ; Ain # Lo [3] ARABIC LETTER AIN WITH TWO DOTS ABOVE..ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE
08B3 ; Ain # Lo ARABIC LETTER AIN WITH THREE DOTS BELOW
+08C3 ; Ain # Lo ARABIC LETTER GHAIN WITH THREE DOTS ABOVE
-# Total code points: 8
+# Total code points: 9
# ================================================
@@ -52,8 +53,9 @@
0750..0756 ; Beh # Lo [7] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER BEH WITH SMALL V
08A0..08A1 ; Beh # Lo [2] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER BEH WITH HAMZA ABOVE
08B6..08B8 ; Beh # Lo [3] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER TEH WITH SMALL TEH ABOVE
+08BE..08C0 ; Beh # Lo [3] ARABIC LETTER PEH WITH SMALL V..ARABIC LETTER TTEH WITH SMALL V
-# Total code points: 24
+# Total code points: 27
# ================================================
@@ -109,8 +111,9 @@
06AF..06B4 ; Gaf # Lo [6] ARABIC LETTER GAF..ARABIC LETTER GAF WITH THREE DOTS ABOVE
0762..0764 ; Gaf # Lo [3] ARABIC LETTER KEHEH WITH DOT ABOVE..ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW
08B0 ; Gaf # Lo ARABIC LETTER GAF WITH INVERTED STROKE
+08C2 ; Gaf # Lo ARABIC LETTER KEHEH WITH SMALL V
-# Total code points: 14
+# Total code points: 15
# ================================================
@@ -129,8 +132,10 @@
0772 ; Hah # Lo ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE
077C ; Hah # Lo ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW
08A2 ; Hah # Lo ARABIC LETTER JEEM WITH TWO DOTS ABOVE
+08C1 ; Hah # Lo ARABIC LETTER TCHEH WITH SMALL V
+08C5..08C6 ; Hah # Lo [2] ARABIC LETTER JEEM WITH THREE DOTS ABOVE..ARABIC LETTER JEEM WITH THREE DOTS BELOW
-# Total code points: 18
+# Total code points: 21
# ================================================
@@ -190,8 +195,9 @@
06B5..06B8 ; Lam # Lo [4] ARABIC LETTER LAM WITH SMALL V..ARABIC LETTER LAM WITH THREE DOTS BELOW
076A ; Lam # Lo ARABIC LETTER LAM WITH BAR
08A6 ; Lam # Lo ARABIC LETTER LAM WITH DOUBLE BAR
+08C7 ; Lam # Lo ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
-# Total code points: 7
+# Total code points: 8
# ================================================
@@ -624,8 +630,9 @@
# ================================================
08BC ; African_Qaf # Lo ARABIC LETTER AFRICAN QAF
+08C4 ; African_Qaf # Lo ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE
-# Total code points: 1
+# Total code points: 2
# ================================================
diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DJoinType.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DJoinType.txt
index d07525c692b..57229cc7361 100644
--- a/gnu/usr.bin/perl/lib/unicore/extracted/DJoinType.txt
+++ b/gnu/usr.bin/perl/lib/unicore/extracted/DJoinType.txt
@@ -1,6 +1,6 @@
-# DerivedJoiningType-12.1.0.txt
-# Date: 2019-03-10, 10:53:08 GMT
-# © 2019 Unicode®, Inc.
+# DerivedJoiningType-13.0.0.txt
+# Date: 2020-01-21, 07:36:28 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -71,7 +71,7 @@
08AF..08B0 ; D # Lo [2] ARABIC LETTER SAD WITH THREE DOTS BELOW..ARABIC LETTER GAF WITH INVERTED STROKE
08B3..08B4 ; D # Lo [2] ARABIC LETTER AIN WITH THREE DOTS BELOW..ARABIC LETTER KAF WITH DOT BELOW
08B6..08B8 ; D # Lo [3] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER TEH WITH SMALL TEH ABOVE
-08BA..08BD ; D # Lo [4] ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE..ARABIC LETTER AFRICAN NOON
+08BA..08C7 ; D # Lo [14] ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
1807 ; D # Po MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER
1820..1842 ; D # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
1843 ; D # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
@@ -96,9 +96,17 @@ A840..A871 ; D # Lo [50] PHAGS-PA LETTER KA..PHAGS-PA SUBJOINED LETTER RA
10F30..10F32 ; D # Lo [3] SOGDIAN LETTER ALEPH..SOGDIAN LETTER GIMEL
10F34..10F44 ; D # Lo [17] SOGDIAN LETTER WAW..SOGDIAN LETTER LESH
10F51..10F53 ; D # No [3] SOGDIAN NUMBER ONE..SOGDIAN NUMBER TWENTY
+10FB0 ; D # Lo CHORASMIAN LETTER ALEPH
+10FB2..10FB3 ; D # Lo [2] CHORASMIAN LETTER BETH..CHORASMIAN LETTER GIMEL
+10FB8 ; D # Lo CHORASMIAN LETTER ZAYIN
+10FBB..10FBC ; D # Lo [2] CHORASMIAN LETTER KAPH..CHORASMIAN LETTER LAMEDH
+10FBE..10FBF ; D # Lo [2] CHORASMIAN LETTER NUN..CHORASMIAN LETTER SAMEKH
+10FC1 ; D # Lo CHORASMIAN LETTER PE
+10FC4 ; D # Lo CHORASMIAN LETTER TAW
+10FCA ; D # No CHORASMIAN NUMBER TWENTY
1E900..1E943 ; D # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
-# Total code points: 565
+# Total code points: 586
# ================================================
@@ -136,6 +144,7 @@ A840..A871 ; D # Lo [50] PHAGS-PA LETTER KA..PHAGS-PA SUBJOINED LETTER RA
0846..0847 ; R # Lo [2] MANDAIC LETTER AZ..MANDAIC LETTER IT
0849 ; R # Lo MANDAIC LETTER AKSA
0854 ; R # Lo MANDAIC LETTER ASH
+0856..0858 ; R # Lo [3] MANDAIC LETTER DUSHENNA..MANDAIC LETTER AIN
0867 ; R # Lo SYRIAC LETTER MALAYALAM RA
0869..086A ; R # Lo [2] SYRIAC LETTER MALAYALAM LLLA..SYRIAC LETTER MALAYALAM SSA
08AA..08AC ; R # Lo [3] ARABIC LETTER REH WITH LOOP..ARABIC LETTER ROHINGYA YEH
@@ -160,8 +169,13 @@ A840..A871 ; D # Lo [50] PHAGS-PA LETTER KA..PHAGS-PA SUBJOINED LETTER RA
10D22 ; R # Lo HANIFI ROHINGYA MARK SAKIN
10F33 ; R # Lo SOGDIAN LETTER HE
10F54 ; R # No SOGDIAN NUMBER ONE HUNDRED
+10FB4..10FB6 ; R # Lo [3] CHORASMIAN LETTER DALETH..CHORASMIAN LETTER WAW
+10FB9..10FBA ; R # Lo [2] CHORASMIAN LETTER HETH..CHORASMIAN LETTER YODH
+10FBD ; R # Lo CHORASMIAN LETTER MEM
+10FC2..10FC3 ; R # Lo [2] CHORASMIAN LETTER RESH..CHORASMIAN LETTER SHIN
+10FC9 ; R # No CHORASMIAN NUMBER TEN
-# Total code points: 118
+# Total code points: 130
# ================================================
@@ -171,8 +185,9 @@ A872 ; L # Lo PHAGS-PA SUPERFIXED LETTER RA
10ACD ; L # Lo MANICHAEAN LETTER HETH
10AD7 ; L # Lo MANICHAEAN LETTER NUN
10D00 ; L # Lo HANIFI ROHINGYA LETTER A
+10FCB ; L # No CHORASMIAN NUMBER ONE HUNDRED
-# Total code points: 4
+# Total code points: 5
# ================================================
@@ -240,7 +255,7 @@ A872 ; L # Lo PHAGS-PA SUPERFIXED LETTER RA
0B3F ; T # Mn ORIYA VOWEL SIGN I
0B41..0B44 ; T # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
0B4D ; T # Mn ORIYA SIGN VIRAMA
-0B56 ; T # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; T # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B62..0B63 ; T # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
0B82 ; T # Mn TAMIL SIGN ANUSVARA
0BC0 ; T # Mn TAMIL VOWEL SIGN II
@@ -263,6 +278,7 @@ A872 ; L # Lo PHAGS-PA SUPERFIXED LETTER RA
0D41..0D44 ; T # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
0D4D ; T # Mn MALAYALAM SIGN VIRAMA
0D62..0D63 ; T # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; T # Mn SINHALA SIGN CANDRABINDU
0DCA ; T # Mn SINHALA SIGN AL-LAKUNA
0DD2..0DD4 ; T # Mn [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
0DD6 ; T # Mn SINHALA VOWEL SIGN DIGA PAA-PILLA
@@ -321,6 +337,7 @@ A872 ; L # Lo PHAGS-PA SUPERFIXED LETTER RA
1A7F ; T # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
1AB0..1ABD ; T # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE ; T # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0 ; T # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; T # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B34 ; T # Mn BALINESE SIGN REREKAN
1B36..1B3A ; T # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
@@ -369,6 +386,7 @@ A802 ; T # Mn SYLOTI NAGRI SIGN DVISVARA
A806 ; T # Mn SYLOTI NAGRI SIGN HASANTA
A80B ; T # Mn SYLOTI NAGRI SIGN ANUSVARA
A825..A826 ; T # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
+A82C ; T # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A8C4..A8C5 ; T # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
A8E0..A8F1 ; T # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
A8FF ; T # Mn DEVANAGARI VOWEL SIGN AY
@@ -410,6 +428,7 @@ FFF9..FFFB ; T # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATI
10A3F ; T # Mn KHAROSHTHI VIRAMA
10AE5..10AE6 ; T # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
10D24..10D27 ; T # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; T # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
10F46..10F50 ; T # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
11001 ; T # Mn BRAHMI SIGN ANUSVARA
11038..11046 ; T # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
@@ -423,6 +442,7 @@ FFF9..FFFB ; T # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATI
11180..11181 ; T # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
111B6..111BE ; T # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111C9..111CC ; T # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CF ; T # Mn SHARADA SIGN INVERTED CANDRABINDU
1122F..11231 ; T # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11234 ; T # Mn KHOJKI SIGN ANUSVARA
11236..11237 ; T # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
@@ -458,6 +478,9 @@ FFF9..FFFB ; T # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATI
11727..1172B ; T # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
1182F..11837 ; T # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
11839..1183A ; T # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+1193B..1193C ; T # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193E ; T # Mn DIVES AKURU VIRAMA
+11943 ; T # Mn DIVES AKURU SIGN NUKTA
119D4..119D7 ; T # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119DA..119DB ; T # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
119E0 ; T # Mn NANDINAGARI SIGN VIRAMA
@@ -490,6 +513,7 @@ FFF9..FFFB ; T # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATI
16B30..16B36 ; T # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F4F ; T # Mn MIAO SIGN CONSONANT MODIFIER BAR
16F8F..16F92 ; T # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16FE4 ; T # Mn KHITAN SMALL SCRIPT FILLER
1BC9D..1BC9E ; T # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
1BCA0..1BCA3 ; T # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
1D167..1D169 ; T # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
@@ -518,6 +542,6 @@ E0001 ; T # Cf LANGUAGE TAG
E0020..E007F ; T # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF ; T # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 1984
+# Total code points: 1997
# EOF
diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DLineBreak.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DLineBreak.txt
index e56b7c9b99d..0f326def569 100644
--- a/gnu/usr.bin/perl/lib/unicore/extracted/DLineBreak.txt
+++ b/gnu/usr.bin/perl/lib/unicore/extracted/DLineBreak.txt
@@ -1,6 +1,6 @@
-# DerivedLineBreak-12.1.0.txt
-# Date: 2019-03-10, 10:53:09 GMT
-# © 2019 Unicode®, Inc.
+# DerivedLineBreak-13.0.0.txt
+# Date: 2020-02-17, 18:43:18 GMT
+# © 2020 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
#
@@ -24,8 +24,8 @@ E000..F8FF ; XX # Co [6400] <private-use-E000>..<private-use-F8FF>
F0000..FFFFD ; XX # Co [65534] <private-use-F0000>..<private-use-FFFFD>
100000..10FFFD; XX # Co [65534] <private-use-100000>..<private-use-10FFFD>
-# The above property value applies to 764429 code points not listed here.
-# Total code points: 901897
+# The above property value applies to 763788 code points not listed here.
+# Total code points: 901256
# ================================================
@@ -262,8 +262,9 @@ FF64 ; CL # Po HALFWIDTH IDEOGRAPHIC COMMA
2011 ; GL # Pd NON-BREAKING HYPHEN
202F ; GL # Zs NARROW NO-BREAK SPACE
13430..13436 ; GL # Cf [7] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH OVERLAY MIDDLE
+16FE4 ; GL # Mn KHITAN SMALL SCRIPT FILLER
-# Total code points: 25
+# Total code points: 26
# ================================================
@@ -466,6 +467,7 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
116C0..116C9 ; NU # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
11730..11739 ; NU # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
118E0..118E9 ; NU # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+11950..11959 ; NU # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
11C50..11C59 ; NU # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
11D50..11D59 ; NU # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
11DA0..11DA9 ; NU # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
@@ -475,8 +477,9 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
1E140..1E149 ; NU # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
1E2F0..1E2F9 ; NU # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
1E950..1E959 ; NU # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1FBF0..1FBF9 ; NU # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-# Total code points: 622
+# Total code points: 642
# ================================================
@@ -586,7 +589,7 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
085E ; AL # Po MANDAIC PUNCTUATION
0860..086A ; AL # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; AL # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
-08B6..08BD ; AL # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08B6..08C7 ; AL # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE
08E2 ; AL # Cf ARABIC DISPUTED END OF AYAH
0904..0939 ; AL # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
093D ; AL # Lo DEVANAGARI SIGN AVAGRAHA
@@ -677,7 +680,7 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
0CDE ; AL # Lo KANNADA LETTER FA
0CE0..0CE1 ; AL # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
0CF1..0CF2 ; AL # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-0D05..0D0C ; AL # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
+0D04..0D0C ; AL # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; AL # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; AL # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; AL # Lo MALAYALAM SIGN AVAGRAHA
@@ -1008,7 +1011,7 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
2B4D..2B54 ; AL # So [8] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..WHITE RIGHT-POINTING PENTAGON
2B5A..2B73 ; AL # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
2B76..2B95 ; AL # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
-2B98..2BFF ; AL # So [104] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..HELLSCHREIBER PAUSE SYMBOL
+2B97..2BFF ; AL # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL
2C00..2C2E ; AL # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
2C30..2C5E ; AL # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
2C60..2C7B ; AL # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
@@ -1042,6 +1045,8 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
2E3F ; AL # Po CAPITULUM
2E4B ; AL # Po TRIPLE DAGGER
2E4D ; AL # Po PARAGRAPHUS MARK
+2E50..2E51 ; AL # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR
+2E52 ; AL # Po TIRONIAN SIGN CAPITAL ET
4DC0..4DFF ; AL # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
A4D0..A4F7 ; AL # Lo [40] LISU LETTER BA..LISU LETTER OE
A4F8..A4FD ; AL # Lm [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
@@ -1070,7 +1075,8 @@ A789..A78A ; AL # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUAL
A78B..A78E ; AL # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; AL # Lo LATIN LETTER SINOLOGICAL DOT
A790..A7BF ; AL # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U
-A7C2..A7C6 ; AL # L& [5] LATIN CAPITAL LETTER ANGLICANA W..LATIN CAPITAL LETTER Z WITH PALATAL HOOK
+A7C2..A7CA ; AL # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY
+A7F5..A7F6 ; AL # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H
A7F7 ; AL # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; AL # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; AL # L& LATIN LETTER SMALL CAPITAL TURNED M
@@ -1111,7 +1117,9 @@ AB28..AB2E ; AL # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A ; AL # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
AB5B ; AL # Sk MODIFIER BREVE WITH INVERTED BREVE
AB5C..AB5F ; AL # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
-AB60..AB67 ; AL # L& [8] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK
+AB60..AB68 ; AL # L& [9] LATIN SMALL LETTER SAKHA YAT..LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE
+AB69 ; AL # Lm MODIFIER LETTER SMALL TURNED W
+AB6A..AB6B ; AL # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK
AB70..ABBF ; AL # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
ABC0..ABE2 ; AL # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
FB00..FB06 ; AL # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
@@ -1143,7 +1151,7 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
10179..10189 ; AL # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
1018A..1018B ; AL # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
1018C..1018E ; AL # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
-10190..1019B ; AL # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
+10190..1019C ; AL # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL
101A0 ; AL # So GREEK SYMBOL TAU RHO
101D0..101FC ; AL # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
10280..1029C ; AL # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
@@ -1223,12 +1231,16 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
10CFA..10CFF ; AL # No [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
10D00..10D23 ; AL # Lo [36] HANIFI ROHINGYA LETTER A..HANIFI ROHINGYA MARK NA KHONNA
10E60..10E7E ; AL # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+10E80..10EA9 ; AL # Lo [42] YEZIDI LETTER ELIF..YEZIDI LETTER ET
+10EB0..10EB1 ; AL # Lo [2] YEZIDI LETTER LAM WITH DOT ABOVE..YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE
10F00..10F1C ; AL # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL
10F1D..10F26 ; AL # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
10F27 ; AL # Lo OLD SOGDIAN LIGATURE AYIN-DALETH
10F30..10F45 ; AL # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN
10F51..10F54 ; AL # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
10F55..10F59 ; AL # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT
+10FB0..10FC4 ; AL # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW
+10FC5..10FCB ; AL # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
10FE0..10FF6 ; AL # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH
11003..11037 ; AL # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
11049..1104D ; AL # Po [5] BRAHMI PUNCTUATION DOT..BRAHMI PUNCTUATION LOTUS
@@ -1240,6 +1252,7 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
110D0..110E8 ; AL # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
11103..11126 ; AL # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
11144 ; AL # Lo CHAKMA LETTER LHAA
+11147 ; AL # Lo CHAKMA LETTER VAA
11150..11172 ; AL # Lo [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
11174 ; AL # Po MAHAJANI ABBREVIATION SIGN
11176 ; AL # Lo MAHAJANI LIGATURE SHRI
@@ -1273,7 +1286,7 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
11447..1144A ; AL # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
1144F ; AL # Po NEWA ABBREVIATION SIGN
1145D ; AL # Po NEWA INSERTION SIGN
-1145F ; AL # Lo NEWA LETTER VEDIC ANUSVARA
+1145F..11461 ; AL # Lo [3] NEWA LETTER VEDIC ANUSVARA..NEWA SIGN UPADHMANIYA
11480..114AF ; AL # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114C4..114C5 ; AL # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
114C6 ; AL # Po TIRHUTA ABBREVIATION SIGN
@@ -1290,7 +1303,13 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
1183B ; AL # Po DOGRA ABBREVIATION SIGN
118A0..118DF ; AL # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
118EA..118F2 ; AL # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
-118FF ; AL # Lo WARANG CITI OM
+118FF..11906 ; AL # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E
+11909 ; AL # Lo DIVES AKURU LETTER O
+1190C..11913 ; AL # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA
+11915..11916 ; AL # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA
+11918..1192F ; AL # Lo [24] DIVES AKURU LETTER DDA..DIVES AKURU LETTER ZA
+1193F ; AL # Lo DIVES AKURU PREFIXED NASAL SIGN
+11941 ; AL # Lo DIVES AKURU INITIAL RA
119A0..119A7 ; AL # Lo [8] NANDINAGARI LETTER A..NANDINAGARI LETTER VOCALIC RR
119AA..119D0 ; AL # Lo [39] NANDINAGARI LETTER E..NANDINAGARI LETTER RRA
119E1 ; AL # Lo NANDINAGARI SIGN AVAGRAHA
@@ -1319,6 +1338,7 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
11D98 ; AL # Lo GUNJALA GONDI OM
11EE0..11EF2 ; AL # Lo [19] MAKASAR LETTER KA..MAKASAR ANGKA
11EF7..11EF8 ; AL # Po [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION
+11FB0 ; AL # Lo LISU LETTER YHA
11FC0..11FD4 ; AL # No [21] TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH..TAMIL FRACTION DOWNSCALING FACTOR KIIZH
11FD5..11FDC ; AL # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI
11FE1..11FF1 ; AL # So [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA
@@ -1349,6 +1369,7 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
16F00..16F4A ; AL # Lo [75] MIAO LETTER PA..MIAO LETTER RTE
16F50 ; AL # Lo MIAO LETTER NASALIZATION
16F93..16F9F ; AL # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+18B00..18CD5 ; AL # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5
1BC00..1BC6A ; AL # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
1BC70..1BC7C ; AL # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
1BC80..1BC88 ; AL # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
@@ -1487,8 +1508,10 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
1F890..1F8AD ; AL # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
1F900..1F90B ; AL # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
1FA00..1FA53 ; AL # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP
+1FB00..1FB92 ; AL # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK
+1FB94..1FBCA ; AL # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON
-# Total code points: 20582
+# Total code points: 21400
# ================================================
@@ -1563,7 +1586,7 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
3190..3191 ; ID # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
3192..3195 ; ID # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
3196..319F ; ID # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
-31A0..31BA ; ID # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
+31A0..31BF ; ID # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH
31C0..31E3 ; ID # So [36] CJK STROKE T..CJK STROKE Q
3200..321E ; ID # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
3220..3229 ; ID # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
@@ -1575,10 +1598,9 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
328A..32B0 ; ID # So [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
32B1..32BF ; ID # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
32C0..33FF ; ID # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL
-3400..4DB5 ; ID # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4DB6..4DBF ; ID # Cn [10] <reserved-4DB6>..<reserved-4DBF>
-4E00..9FEF ; ID # Lo [20976] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEF
-9FF0..9FFF ; ID # Cn [16] <reserved-9FF0>..<reserved-9FFF>
+3400..4DBF ; ID # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF
+4E00..9FFC ; ID # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC
+9FFD..9FFF ; ID # Cn [3] <reserved-9FFD>..<reserved-9FFF>
A000..A014 ; ID # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A016..A48C ; ID # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
A490..A4C6 ; ID # So [55] YI RADICAL QOT..YI RADICAL KE
@@ -1628,7 +1650,8 @@ FFE2 ; ID # Sm FULLWIDTH NOT SIGN
FFE3 ; ID # Sk FULLWIDTH MACRON
FFE4 ; ID # So FULLWIDTH BROKEN BAR
17000..187F7 ; ID # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7
-18800..18AF2 ; ID # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+18800..18AFF ; ID # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768
+18D00..18D08 ; ID # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08
1B000..1B11E ; ID # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
1B170..1B2FB ; ID # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
1F000..1F02B ; ID # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
@@ -1643,9 +1666,10 @@ FFE4 ; ID # So FULLWIDTH BROKEN BAR
1F0D0 ; ID # Cn <reserved-1F0D0>
1F0D1..1F0F5 ; ID # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
1F0F6..1F0FF ; ID # Cn [10] <reserved-1F0F6>..<reserved-1F0FF>
-1F10D..1F10F ; ID # Cn [3] <reserved-1F10D>..<reserved-1F10F>
-1F16D..1F16F ; ID # Cn [3] <reserved-1F16D>..<reserved-1F16F>
-1F1AD..1F1E5 ; ID # Cn [57] <reserved-1F1AD>..<reserved-1F1E5>
+1F10D..1F10F ; ID # So [3] CIRCLED ZERO WITH SLASH..CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH
+1F16D..1F16F ; ID # So [3] CIRCLED CC..CIRCLED HUMAN FIGURE
+1F1AD ; ID # So MASK WORK SYMBOL
+1F1AE..1F1E5 ; ID # Cn [56] <reserved-1F1AE>..<reserved-1F1E5>
1F200..1F202 ; ID # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
1F203..1F20F ; ID # Cn [13] <reserved-1F203>..<reserved-1F20F>
1F210..1F23B ; ID # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
@@ -1693,12 +1717,12 @@ FFE4 ; ID # So FULLWIDTH BROKEN BAR
1F6A4..1F6B3 ; ID # So [16] SPEEDBOAT..NO BICYCLES
1F6B7..1F6BF ; ID # So [9] NO PEDESTRIANS..SHOWER
1F6C1..1F6CB ; ID # So [11] BATHTUB..COUCH AND LAMP
-1F6CD..1F6D5 ; ID # So [9] SHOPPING BAGS..HINDU TEMPLE
-1F6D6..1F6DF ; ID # Cn [10] <reserved-1F6D6>..<reserved-1F6DF>
+1F6CD..1F6D7 ; ID # So [11] SHOPPING BAGS..ELEVATOR
+1F6D8..1F6DF ; ID # Cn [8] <reserved-1F6D8>..<reserved-1F6DF>
1F6E0..1F6EC ; ID # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
1F6ED..1F6EF ; ID # Cn [3] <reserved-1F6ED>..<reserved-1F6EF>
-1F6F0..1F6FA ; ID # So [11] SATELLITE..AUTO RICKSHAW
-1F6FB..1F6FF ; ID # Cn [5] <reserved-1F6FB>..<reserved-1F6FF>
+1F6F0..1F6FC ; ID # So [13] SATELLITE..ROLLER SKATE
+1F6FD..1F6FF ; ID # Cn [3] <reserved-1F6FD>..<reserved-1F6FF>
1F774..1F77F ; ID # Cn [12] <reserved-1F774>..<reserved-1F77F>
1F7D5..1F7D8 ; ID # So [4] CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE
1F7D9..1F7DF ; ID # Cn [7] <reserved-1F7D9>..<reserved-1F7DF>
@@ -1708,41 +1732,44 @@ FFE4 ; ID # So FULLWIDTH BROKEN BAR
1F848..1F84F ; ID # Cn [8] <reserved-1F848>..<reserved-1F84F>
1F85A..1F85F ; ID # Cn [6] <reserved-1F85A>..<reserved-1F85F>
1F888..1F88F ; ID # Cn [8] <reserved-1F888>..<reserved-1F88F>
-1F8AE..1F8FF ; ID # Cn [82] <reserved-1F8AE>..<reserved-1F8FF>
-1F90C ; ID # Cn <reserved-1F90C>
+1F8AE..1F8AF ; ID # Cn [2] <reserved-1F8AE>..<reserved-1F8AF>
+1F8B0..1F8B1 ; ID # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST
+1F8B2..1F8FF ; ID # Cn [78] <reserved-1F8B2>..<reserved-1F8FF>
1F90D..1F90E ; ID # So [2] WHITE HEART..BROWN HEART
1F910..1F917 ; ID # So [8] ZIPPER-MOUTH FACE..HUGGING FACE
1F920..1F925 ; ID # So [6] FACE WITH COWBOY HAT..LYING FACE
1F927..1F92F ; ID # So [9] SNEEZING FACE..SHOCKED FACE WITH EXPLODING HEAD
1F93A..1F93B ; ID # So [2] FENCER..MODERN PENTATHLON
-1F93F..1F971 ; ID # So [51] DIVING MASK..YAWNING FACE
-1F972 ; ID # Cn <reserved-1F972>
-1F973..1F976 ; ID # So [4] FACE WITH PARTY HORN AND PARTY HAT..FREEZING FACE
-1F977..1F979 ; ID # Cn [3] <reserved-1F977>..<reserved-1F979>
-1F97A..1F9A2 ; ID # So [41] FACE WITH PLEADING EYES..SWAN
-1F9A3..1F9A4 ; ID # Cn [2] <reserved-1F9A3>..<reserved-1F9A4>
-1F9A5..1F9AA ; ID # So [6] SLOTH..OYSTER
-1F9AB..1F9AD ; ID # Cn [3] <reserved-1F9AB>..<reserved-1F9AD>
-1F9AE..1F9B4 ; ID # So [7] GUIDE DOG..BONE
+1F93F..1F976 ; ID # So [56] DIVING MASK..FREEZING FACE
+1F978 ; ID # So DISGUISED FACE
+1F979 ; ID # Cn <reserved-1F979>
+1F97A..1F9B4 ; ID # So [59] FACE WITH PLEADING EYES..BONE
1F9B7 ; ID # So TOOTH
1F9BA ; ID # So SAFETY VEST
-1F9BC..1F9CA ; ID # So [15] MOTORIZED WHEELCHAIR..ICE CUBE
-1F9CB..1F9CC ; ID # Cn [2] <reserved-1F9CB>..<reserved-1F9CC>
+1F9BC..1F9CB ; ID # So [16] MOTORIZED WHEELCHAIR..BUBBLE TEA
+1F9CC ; ID # Cn <reserved-1F9CC>
1F9D0 ; ID # So FACE WITH MONOCLE
1F9DE..1F9FF ; ID # So [34] GENIE..NAZAR AMULET
1FA54..1FA5F ; ID # Cn [12] <reserved-1FA54>..<reserved-1FA5F>
1FA60..1FA6D ; ID # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER
1FA6E..1FA6F ; ID # Cn [2] <reserved-1FA6E>..<reserved-1FA6F>
-1FA70..1FA73 ; ID # So [4] BALLET SHOES..SHORTS
-1FA74..1FA77 ; ID # Cn [4] <reserved-1FA74>..<reserved-1FA77>
+1FA70..1FA74 ; ID # So [5] BALLET SHOES..THONG SANDAL
+1FA75..1FA77 ; ID # Cn [3] <reserved-1FA75>..<reserved-1FA77>
1FA78..1FA7A ; ID # So [3] DROP OF BLOOD..STETHOSCOPE
1FA7B..1FA7F ; ID # Cn [5] <reserved-1FA7B>..<reserved-1FA7F>
-1FA80..1FA82 ; ID # So [3] YO-YO..PARACHUTE
-1FA83..1FA8F ; ID # Cn [13] <reserved-1FA83>..<reserved-1FA8F>
-1FA90..1FA95 ; ID # So [6] RINGED PLANET..BANJO
-1FA96..1FFFD ; ID # Cn [1384] <reserved-1FA96>..<reserved-1FFFD>
-20000..2A6D6 ; ID # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
-2A6D7..2A6FF ; ID # Cn [41] <reserved-2A6D7>..<reserved-2A6FF>
+1FA80..1FA86 ; ID # So [7] YO-YO..NESTING DOLLS
+1FA87..1FA8F ; ID # Cn [9] <reserved-1FA87>..<reserved-1FA8F>
+1FA90..1FAA8 ; ID # So [25] RINGED PLANET..ROCK
+1FAA9..1FAAF ; ID # Cn [7] <reserved-1FAA9>..<reserved-1FAAF>
+1FAB0..1FAB6 ; ID # So [7] FLY..FEATHER
+1FAB7..1FABF ; ID # Cn [9] <reserved-1FAB7>..<reserved-1FABF>
+1FAC0..1FAC2 ; ID # So [3] ANATOMICAL HEART..PEOPLE HUGGING
+1FAC3..1FACF ; ID # Cn [13] <reserved-1FAC3>..<reserved-1FACF>
+1FAD0..1FAD6 ; ID # So [7] BLUEBERRIES..TEAPOT
+1FAD7..1FAFF ; ID # Cn [41] <reserved-1FAD7>..<reserved-1FAFF>
+1FC00..1FFFD ; ID # Cn [1022] <reserved-1FC00>..<reserved-1FFFD>
+20000..2A6DD ; ID # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD
+2A6DE..2A6FF ; ID # Cn [34] <reserved-2A6DE>..<reserved-2A6FF>
2A700..2B734 ; ID # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B735..2B73F ; ID # Cn [11] <reserved-2B735>..<reserved-2B73F>
2B740..2B81D ; ID # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
@@ -1753,9 +1780,10 @@ FFE4 ; ID # So FULLWIDTH BROKEN BAR
2EBE1..2F7FF ; ID # Cn [3103] <reserved-2EBE1>..<reserved-2F7FF>
2F800..2FA1D ; ID # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
2FA1E..2FFFD ; ID # Cn [1504] <reserved-2FA1E>..<reserved-2FFFD>
-30000..3FFFD ; ID # Cn [65534] <reserved-30000>..<reserved-3FFFD>
+30000..3134A ; ID # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A
+3134B..3FFFD ; ID # Cn [60595] <reserved-3134B>..<reserved-3FFFD>
-# Total code points: 172693
+# Total code points: 172462
# ================================================
@@ -1867,7 +1895,7 @@ FE19 ; IN # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
0B47..0B48 ; CM # Mc [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
0B4B..0B4C ; CM # Mc [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
0B4D ; CM # Mn ORIYA SIGN VIRAMA
-0B56 ; CM # Mn ORIYA AI LENGTH MARK
+0B55..0B56 ; CM # Mn [2] ORIYA SIGN OVERLINE..ORIYA AI LENGTH MARK
0B57 ; CM # Mc ORIYA AU LENGTH MARK
0B62..0B63 ; CM # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
0B82 ; CM # Mn TAMIL SIGN ANUSVARA
@@ -1909,6 +1937,7 @@ FE19 ; IN # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
0D4D ; CM # Mn MALAYALAM SIGN VIRAMA
0D57 ; CM # Mc MALAYALAM AU LENGTH MARK
0D62..0D63 ; CM # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
+0D81 ; CM # Mn SINHALA SIGN CANDRABINDU
0D82..0D83 ; CM # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
0DCA ; CM # Mn SINHALA SIGN AL-LAKUNA
0DCF..0DD1 ; CM # Mc [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
@@ -1949,6 +1978,7 @@ FE19 ; IN # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
1A7F ; CM # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT
1AB0..1ABD ; CM # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
1ABE ; CM # Me COMBINING PARENTHESES OVERLAY
+1ABF..1AC0 ; CM # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW
1B00..1B03 ; CM # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
1B04 ; CM # Mc BALINESE SIGN BISAH
1B34 ; CM # Mn BALINESE SIGN REREKAN
@@ -2017,6 +2047,7 @@ A80B ; CM # Mn SYLOTI NAGRI SIGN ANUSVARA
A823..A824 ; CM # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
A825..A826 ; CM # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827 ; CM # Mc SYLOTI NAGRI VOWEL SIGN OO
+A82C ; CM # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA
A880..A881 ; CM # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
A8B4..A8C3 ; CM # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
A8C4..A8C5 ; CM # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
@@ -2067,6 +2098,7 @@ FFF9..FFFB ; CM # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTAT
10A3F ; CM # Mn KHAROSHTHI VIRAMA
10AE5..10AE6 ; CM # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
10D24..10D27 ; CM # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI
+10EAB..10EAC ; CM # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK
10F46..10F50 ; CM # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW
11000 ; CM # Mc BRAHMI SIGN CANDRABINDU
11001 ; CM # Mn BRAHMI SIGN ANUSVARA
@@ -2090,6 +2122,8 @@ FFF9..FFFB ; CM # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTAT
111B6..111BE ; CM # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
111BF..111C0 ; CM # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
111C9..111CC ; CM # Mn [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK
+111CE ; CM # Mc SHARADA VOWEL SIGN PRISHTHAMATRA E
+111CF ; CM # Mn SHARADA SIGN INVERTED CANDRABINDU
1122C..1122E ; CM # Mc [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
1122F..11231 ; CM # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11232..11233 ; CM # Mc [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
@@ -2151,6 +2185,14 @@ FFF9..FFFB ; CM # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTAT
1182F..11837 ; CM # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA
11838 ; CM # Mc DOGRA SIGN VISARGA
11839..1183A ; CM # Mn [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA
+11930..11935 ; CM # Mc [6] DIVES AKURU VOWEL SIGN AA..DIVES AKURU VOWEL SIGN E
+11937..11938 ; CM # Mc [2] DIVES AKURU VOWEL SIGN AI..DIVES AKURU VOWEL SIGN O
+1193B..1193C ; CM # Mn [2] DIVES AKURU SIGN ANUSVARA..DIVES AKURU SIGN CANDRABINDU
+1193D ; CM # Mc DIVES AKURU SIGN HALANTA
+1193E ; CM # Mn DIVES AKURU VIRAMA
+11940 ; CM # Mc DIVES AKURU MEDIAL YA
+11942 ; CM # Mc DIVES AKURU MEDIAL RA
+11943 ; CM # Mn DIVES AKURU SIGN NUKTA
119D1..119D3 ; CM # Mc [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II
119D4..119D7 ; CM # Mn [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR
119DA..119DB ; CM # Mn [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI
@@ -2198,6 +2240,7 @@ FFF9..FFFB ; CM # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTAT
16F4F ; CM # Mn MIAO SIGN CONSONANT MODIFIER BAR
16F51..16F87 ; CM # Mc [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI
16F8F..16F92 ; CM # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16FF0..16FF1 ; CM # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY
1BC9D..1BC9E ; CM # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
1BCA0..1BCA3 ; CM # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
1D165..1D166 ; CM # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
@@ -2227,7 +2270,7 @@ E0001 ; CM # Cf LANGUAGE TAG
E0020..E007F ; CM # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF ; CM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 2260
+# Total code points: 2286
# ================================================
@@ -2335,6 +2378,7 @@ ABEB ; BA # Po MEETEI MAYEK CHEIKHEI
10A50..10A57 ; BA # Po [8] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION DOUBLE DANDA
10AF0..10AF5 ; BA # Po [6] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION TWO DOTS
10B39..10B3F ; BA # Po [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
+10EAD ; BA # Pd YEZIDI HYPHENATION MARK
11047..11048 ; BA # Po [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA
110BE..110C1 ; BA # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
11140..11143 ; BA # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
@@ -2345,11 +2389,12 @@ ABEB ; BA # Po MEETEI MAYEK CHEIKHEI
1123B..1123C ; BA # Po [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK
112A9 ; BA # Po MULTANI SECTION MARK
1144B..1144E ; BA # Po [4] NEWA DANDA..NEWA GAP FILLER
-1145B ; BA # Po NEWA PLACEHOLDER MARK
+1145A..1145B ; BA # Po [2] NEWA DOUBLE COMMA..NEWA PLACEHOLDER MARK
115C2..115C3 ; BA # Po [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA
115C9..115D7 ; BA # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
11641..11642 ; BA # Po [2] MODI DANDA..MODI DOUBLE DANDA
1173C..1173E ; BA # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+11944..11946 ; BA # Po [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK
11A41..11A44 ; BA # Po [4] ZANABAZAR SQUARE MARK TSHEG..ZANABAZAR SQUARE MARK LONG TSHEG
11A9A..11A9C ; BA # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
11AA1..11AA2 ; BA # Po [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2
@@ -2364,7 +2409,7 @@ ABEB ; BA # Po MEETEI MAYEK CHEIKHEI
1BC9F ; BA # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1DA87..1DA8A ; BA # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON
-# Total code points: 239
+# Total code points: 244
# ================================================
@@ -3641,18 +3686,20 @@ FF70 ; CJ # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
1F6B4..1F6B6 ; EB # So [3] BICYCLIST..PEDESTRIAN
1F6C0 ; EB # So BATH
1F6CC ; EB # So SLEEPING ACCOMMODATION
+1F90C ; EB # So PINCHED FINGERS
1F90F ; EB # So PINCHING HAND
1F918..1F91F ; EB # So [8] SIGN OF THE HORNS..I LOVE YOU HAND SIGN
1F926 ; EB # So FACE PALM
1F930..1F939 ; EB # So [10] PREGNANT WOMAN..JUGGLING
1F93C..1F93E ; EB # So [3] WRESTLERS..HANDBALL
+1F977 ; EB # So NINJA
1F9B5..1F9B6 ; EB # So [2] LEG..FOOT
1F9B8..1F9B9 ; EB # So [2] SUPERHERO..SUPERVILLAIN
1F9BB ; EB # So EAR WITH HEARING AID
1F9CD..1F9CF ; EB # So [3] STANDING PERSON..DEAF PERSON
1F9D1..1F9DD ; EB # So [13] ADULT..ELF
-# Total code points: 120
+# Total code points: 122
# ================================================
diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DNumType.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DNumType.txt
index a9364defdbc..984afe2f17c 100644
--- a/gnu/usr.bin/perl/lib/unicore/extracted/DNumType.txt
+++ b/gnu/usr.bin/perl/lib/unicore/extracted/DNumType.txt
@@ -1,5 +1,5 @@
-# DerivedNumericType-12.1.0.txt
-# Date: 2019-03-10, 10:53:11 GMT
+# DerivedNumericType-13.0.0.txt
+# Date: 2019-09-08, 23:31:09 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -145,6 +145,7 @@ F9FD ; Numeric # Lo CJK COMPATIBILITY IDEOGRAPH-F9FD
10E69..10E7E ; Numeric # No [22] RUMI NUMBER TEN..RUMI FRACTION TWO THIRDS
10F1D..10F26 ; Numeric # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF
10F51..10F54 ; Numeric # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED
+10FC5..10FCB ; Numeric # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED
1105B..11065 ; Numeric # No [11] BRAHMI NUMBER TEN..BRAHMI NUMBER ONE THOUSAND
111E1..111F4 ; Numeric # No [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
1173A..1173B ; Numeric # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
@@ -180,7 +181,7 @@ F9FD ; Numeric # Lo CJK COMPATIBILITY IDEOGRAPH-F9FD
2626D ; Numeric # Lo CJK UNIFIED IDEOGRAPH-2626D
2F890 ; Numeric # Lo CJK COMPATIBILITY IDEOGRAPH-2F890
-# Total code points: 1077
+# Total code points: 1084
# ================================================
@@ -259,6 +260,7 @@ FF10..FF19 ; Decimal # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
116C0..116C9 ; Decimal # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
11730..11739 ; Decimal # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
118E0..118E9 ; Decimal # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+11950..11959 ; Decimal # Nd [10] DIVES AKURU DIGIT ZERO..DIVES AKURU DIGIT NINE
11C50..11C59 ; Decimal # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
11D50..11D59 ; Decimal # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
11DA0..11DA9 ; Decimal # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE
@@ -268,7 +270,8 @@ FF10..FF19 ; Decimal # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
1E140..1E149 ; Decimal # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE
1E2F0..1E2F9 ; Decimal # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE
1E950..1E959 ; Decimal # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1FBF0..1FBF9 ; Decimal # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE
-# Total code points: 630
+# Total code points: 650
# EOF
diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DNumValues.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DNumValues.txt
index 9b5866ef17f..f70662acc96 100644
--- a/gnu/usr.bin/perl/lib/unicore/extracted/DNumValues.txt
+++ b/gnu/usr.bin/perl/lib/unicore/extracted/DNumValues.txt
@@ -1,5 +1,5 @@
-# DerivedNumericValues-12.1.0.txt
-# Date: 2019-03-10, 10:53:11 GMT
+# DerivedNumericValues-13.0.0.txt
+# Date: 2019-09-08, 23:31:10 GMT
# © 2019 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
# For terms of use, see http://www.unicode.org/terms_of_use.html
@@ -101,6 +101,7 @@ FF10 ; 0.0 ; ; 0 # Nd FULLWIDTH DIGIT ZERO
116C0 ; 0.0 ; ; 0 # Nd TAKRI DIGIT ZERO
11730 ; 0.0 ; ; 0 # Nd AHOM DIGIT ZERO
118E0 ; 0.0 ; ; 0 # Nd WARANG CITI DIGIT ZERO
+11950 ; 0.0 ; ; 0 # Nd DIVES AKURU DIGIT ZERO
11C50 ; 0.0 ; ; 0 # Nd BHAIKSUKI DIGIT ZERO
11D50 ; 0.0 ; ; 0 # Nd MASARAM GONDI DIGIT ZERO
11DA0 ; 0.0 ; ; 0 # Nd GUNJALA GONDI DIGIT ZERO
@@ -118,8 +119,9 @@ FF10 ; 0.0 ; ; 0 # Nd FULLWIDTH DIGIT ZERO
1E950 ; 0.0 ; ; 0 # Nd ADLAM DIGIT ZERO
1F100..1F101 ; 0.0 ; ; 0 # No [2] DIGIT ZERO FULL STOP..DIGIT ZERO COMMA
1F10B..1F10C ; 0.0 ; ; 0 # No [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+1FBF0 ; 0.0 ; ; 0 # Nd SEGMENTED DIGIT ZERO
-# Total code points: 81
+# Total code points: 83
# ================================================
@@ -492,6 +494,7 @@ FF11 ; 1.0 ; ; 1 # Nd FULLWIDTH DIGIT ONE
10E60 ; 1.0 ; ; 1 # No RUMI DIGIT ONE
10F1D ; 1.0 ; ; 1 # No OLD SOGDIAN NUMBER ONE
10F51 ; 1.0 ; ; 1 # No SOGDIAN NUMBER ONE
+10FC5 ; 1.0 ; ; 1 # No CHORASMIAN NUMBER ONE
11052 ; 1.0 ; ; 1 # No BRAHMI NUMBER ONE
11067 ; 1.0 ; ; 1 # Nd BRAHMI DIGIT ONE
110F1 ; 1.0 ; ; 1 # Nd SORA SOMPENG DIGIT ONE
@@ -505,6 +508,7 @@ FF11 ; 1.0 ; ; 1 # Nd FULLWIDTH DIGIT ONE
116C1 ; 1.0 ; ; 1 # Nd TAKRI DIGIT ONE
11731 ; 1.0 ; ; 1 # Nd AHOM DIGIT ONE
118E1 ; 1.0 ; ; 1 # Nd WARANG CITI DIGIT ONE
+11951 ; 1.0 ; ; 1 # Nd DIVES AKURU DIGIT ONE
11C51 ; 1.0 ; ; 1 # Nd BHAIKSUKI DIGIT ONE
11C5A ; 1.0 ; ; 1 # No BHAIKSUKI NUMBER ONE
11D51 ; 1.0 ; ; 1 # Nd MASARAM GONDI DIGIT ONE
@@ -537,9 +541,10 @@ FF11 ; 1.0 ; ; 1 # Nd FULLWIDTH DIGIT ONE
1ECB1 ; 1.0 ; ; 1 # No INDIC SIYAQ NUMBER ALTERNATE ONE
1ED01 ; 1.0 ; ; 1 # No OTTOMAN SIYAQ NUMBER ONE
1F102 ; 1.0 ; ; 1 # No DIGIT ONE COMMA
+1FBF1 ; 1.0 ; ; 1 # Nd SEGMENTED DIGIT ONE
2092A ; 1.0 ; ; 1 # Lo CJK UNIFIED IDEOGRAPH-2092A
-# Total code points: 137
+# Total code points: 140
# ================================================
@@ -632,6 +637,7 @@ FF12 ; 2.0 ; ; 2 # Nd FULLWIDTH DIGIT TWO
10D32 ; 2.0 ; ; 2 # Nd HANIFI ROHINGYA DIGIT TWO
10E61 ; 2.0 ; ; 2 # No RUMI DIGIT TWO
10F1E ; 2.0 ; ; 2 # No OLD SOGDIAN NUMBER TWO
+10FC6 ; 2.0 ; ; 2 # No CHORASMIAN NUMBER TWO
11053 ; 2.0 ; ; 2 # No BRAHMI NUMBER TWO
11068 ; 2.0 ; ; 2 # Nd BRAHMI DIGIT TWO
110F2 ; 2.0 ; ; 2 # Nd SORA SOMPENG DIGIT TWO
@@ -645,6 +651,7 @@ FF12 ; 2.0 ; ; 2 # Nd FULLWIDTH DIGIT TWO
116C2 ; 2.0 ; ; 2 # Nd TAKRI DIGIT TWO
11732 ; 2.0 ; ; 2 # Nd AHOM DIGIT TWO
118E2 ; 2.0 ; ; 2 # Nd WARANG CITI DIGIT TWO
+11952 ; 2.0 ; ; 2 # Nd DIVES AKURU DIGIT TWO
11C52 ; 2.0 ; ; 2 # Nd BHAIKSUKI DIGIT TWO
11C5B ; 2.0 ; ; 2 # No BHAIKSUKI NUMBER TWO
11D52 ; 2.0 ; ; 2 # Nd MASARAM GONDI DIGIT TWO
@@ -681,9 +688,10 @@ FF12 ; 2.0 ; ; 2 # Nd FULLWIDTH DIGIT TWO
1ED02 ; 2.0 ; ; 2 # No OTTOMAN SIYAQ NUMBER TWO
1ED2F ; 2.0 ; ; 2 # No OTTOMAN SIYAQ ALTERNATE NUMBER TWO
1F103 ; 2.0 ; ; 2 # No DIGIT TWO COMMA
+1FBF2 ; 2.0 ; ; 2 # Nd SEGMENTED DIGIT TWO
22390 ; 2.0 ; ; 2 # Lo CJK UNIFIED IDEOGRAPH-22390
-# Total code points: 136
+# Total code points: 139
# ================================================
@@ -770,6 +778,7 @@ FF13 ; 3.0 ; ; 3 # Nd FULLWIDTH DIGIT THREE
10D33 ; 3.0 ; ; 3 # Nd HANIFI ROHINGYA DIGIT THREE
10E62 ; 3.0 ; ; 3 # No RUMI DIGIT THREE
10F1F ; 3.0 ; ; 3 # No OLD SOGDIAN NUMBER THREE
+10FC7 ; 3.0 ; ; 3 # No CHORASMIAN NUMBER THREE
11054 ; 3.0 ; ; 3 # No BRAHMI NUMBER THREE
11069 ; 3.0 ; ; 3 # Nd BRAHMI DIGIT THREE
110F3 ; 3.0 ; ; 3 # Nd SORA SOMPENG DIGIT THREE
@@ -783,6 +792,7 @@ FF13 ; 3.0 ; ; 3 # Nd FULLWIDTH DIGIT THREE
116C3 ; 3.0 ; ; 3 # Nd TAKRI DIGIT THREE
11733 ; 3.0 ; ; 3 # Nd AHOM DIGIT THREE
118E3 ; 3.0 ; ; 3 # Nd WARANG CITI DIGIT THREE
+11953 ; 3.0 ; ; 3 # Nd DIVES AKURU DIGIT THREE
11C53 ; 3.0 ; ; 3 # Nd BHAIKSUKI DIGIT THREE
11C5C ; 3.0 ; ; 3 # No BHAIKSUKI NUMBER THREE
11D53 ; 3.0 ; ; 3 # Nd MASARAM GONDI DIGIT THREE
@@ -819,12 +829,13 @@ FF13 ; 3.0 ; ; 3 # Nd FULLWIDTH DIGIT THREE
1ED03 ; 3.0 ; ; 3 # No OTTOMAN SIYAQ NUMBER THREE
1ED30 ; 3.0 ; ; 3 # No OTTOMAN SIYAQ ALTERNATE NUMBER THREE
1F104 ; 3.0 ; ; 3 # No DIGIT THREE COMMA
+1FBF3 ; 3.0 ; ; 3 # Nd SEGMENTED DIGIT THREE
20AFD ; 3.0 ; ; 3 # Lo CJK UNIFIED IDEOGRAPH-20AFD
20B19 ; 3.0 ; ; 3 # Lo CJK UNIFIED IDEOGRAPH-20B19
22998 ; 3.0 ; ; 3 # Lo CJK UNIFIED IDEOGRAPH-22998
23B1B ; 3.0 ; ; 3 # Lo CJK UNIFIED IDEOGRAPH-23B1B
-# Total code points: 137
+# Total code points: 140
# ================================================
@@ -905,6 +916,7 @@ FF14 ; 4.0 ; ; 4 # Nd FULLWIDTH DIGIT FOUR
10D34 ; 4.0 ; ; 4 # Nd HANIFI ROHINGYA DIGIT FOUR
10E63 ; 4.0 ; ; 4 # No RUMI DIGIT FOUR
10F20 ; 4.0 ; ; 4 # No OLD SOGDIAN NUMBER FOUR
+10FC8 ; 4.0 ; ; 4 # No CHORASMIAN NUMBER FOUR
11055 ; 4.0 ; ; 4 # No BRAHMI NUMBER FOUR
1106A ; 4.0 ; ; 4 # Nd BRAHMI DIGIT FOUR
110F4 ; 4.0 ; ; 4 # Nd SORA SOMPENG DIGIT FOUR
@@ -918,6 +930,7 @@ FF14 ; 4.0 ; ; 4 # Nd FULLWIDTH DIGIT FOUR
116C4 ; 4.0 ; ; 4 # Nd TAKRI DIGIT FOUR
11734 ; 4.0 ; ; 4 # Nd AHOM DIGIT FOUR
118E4 ; 4.0 ; ; 4 # Nd WARANG CITI DIGIT FOUR
+11954 ; 4.0 ; ; 4 # Nd DIVES AKURU DIGIT FOUR
11C54 ; 4.0 ; ; 4 # Nd BHAIKSUKI DIGIT FOUR
11C5D ; 4.0 ; ; 4 # No BHAIKSUKI NUMBER FOUR
11D54 ; 4.0 ; ; 4 # Nd MASARAM GONDI DIGIT FOUR
@@ -954,11 +967,12 @@ FF14 ; 4.0 ; ; 4 # Nd FULLWIDTH DIGIT FOUR
1ED04 ; 4.0 ; ; 4 # No OTTOMAN SIYAQ NUMBER FOUR
1ED31 ; 4.0 ; ; 4 # No OTTOMAN SIYAQ ALTERNATE NUMBER FOUR
1F105 ; 4.0 ; ; 4 # No DIGIT FOUR COMMA
+1FBF4 ; 4.0 ; ; 4 # Nd SEGMENTED DIGIT FOUR
20064 ; 4.0 ; ; 4 # Lo CJK UNIFIED IDEOGRAPH-20064
200E2 ; 4.0 ; ; 4 # Lo CJK UNIFIED IDEOGRAPH-200E2
2626D ; 4.0 ; ; 4 # Lo CJK UNIFIED IDEOGRAPH-2626D
-# Total code points: 128
+# Total code points: 131
# ================================================
@@ -1057,6 +1071,7 @@ FF15 ; 5.0 ; ; 5 # Nd FULLWIDTH DIGIT FIVE
116C5 ; 5.0 ; ; 5 # Nd TAKRI DIGIT FIVE
11735 ; 5.0 ; ; 5 # Nd AHOM DIGIT FIVE
118E5 ; 5.0 ; ; 5 # Nd WARANG CITI DIGIT FIVE
+11955 ; 5.0 ; ; 5 # Nd DIVES AKURU DIGIT FIVE
11C55 ; 5.0 ; ; 5 # Nd BHAIKSUKI DIGIT FIVE
11C5E ; 5.0 ; ; 5 # No BHAIKSUKI NUMBER FIVE
11D55 ; 5.0 ; ; 5 # Nd MASARAM GONDI DIGIT FIVE
@@ -1093,9 +1108,10 @@ FF15 ; 5.0 ; ; 5 # Nd FULLWIDTH DIGIT FIVE
1ED05 ; 5.0 ; ; 5 # No OTTOMAN SIYAQ NUMBER FIVE
1ED32 ; 5.0 ; ; 5 # No OTTOMAN SIYAQ ALTERNATE NUMBER FIVE
1F106 ; 5.0 ; ; 5 # No DIGIT FIVE COMMA
+1FBF5 ; 5.0 ; ; 5 # Nd SEGMENTED DIGIT FIVE
20121 ; 5.0 ; ; 5 # Lo CJK UNIFIED IDEOGRAPH-20121
-# Total code points: 127
+# Total code points: 129
# ================================================
@@ -1184,6 +1200,7 @@ FF16 ; 6.0 ; ; 6 # Nd FULLWIDTH DIGIT SIX
116C6 ; 6.0 ; ; 6 # Nd TAKRI DIGIT SIX
11736 ; 6.0 ; ; 6 # Nd AHOM DIGIT SIX
118E6 ; 6.0 ; ; 6 # Nd WARANG CITI DIGIT SIX
+11956 ; 6.0 ; ; 6 # Nd DIVES AKURU DIGIT SIX
11C56 ; 6.0 ; ; 6 # Nd BHAIKSUKI DIGIT SIX
11C5F ; 6.0 ; ; 6 # No BHAIKSUKI NUMBER SIX
11D56 ; 6.0 ; ; 6 # Nd MASARAM GONDI DIGIT SIX
@@ -1215,9 +1232,10 @@ FF16 ; 6.0 ; ; 6 # Nd FULLWIDTH DIGIT SIX
1ED06 ; 6.0 ; ; 6 # No OTTOMAN SIYAQ NUMBER SIX
1ED33 ; 6.0 ; ; 6 # No OTTOMAN SIYAQ ALTERNATE NUMBER SIX
1F107 ; 6.0 ; ; 6 # No DIGIT SIX COMMA
+1FBF6 ; 6.0 ; ; 6 # Nd SEGMENTED DIGIT SIX
20AEA ; 6.0 ; ; 6 # Lo CJK UNIFIED IDEOGRAPH-20AEA
-# Total code points: 111
+# Total code points: 113
# ================================================
@@ -1304,6 +1322,7 @@ FF17 ; 7.0 ; ; 7 # Nd FULLWIDTH DIGIT SEVEN
116C7 ; 7.0 ; ; 7 # Nd TAKRI DIGIT SEVEN
11737 ; 7.0 ; ; 7 # Nd AHOM DIGIT SEVEN
118E7 ; 7.0 ; ; 7 # Nd WARANG CITI DIGIT SEVEN
+11957 ; 7.0 ; ; 7 # Nd DIVES AKURU DIGIT SEVEN
11C57 ; 7.0 ; ; 7 # Nd BHAIKSUKI DIGIT SEVEN
11C60 ; 7.0 ; ; 7 # No BHAIKSUKI NUMBER SEVEN
11D57 ; 7.0 ; ; 7 # Nd MASARAM GONDI DIGIT SEVEN
@@ -1334,9 +1353,10 @@ FF17 ; 7.0 ; ; 7 # Nd FULLWIDTH DIGIT SEVEN
1ED07 ; 7.0 ; ; 7 # No OTTOMAN SIYAQ NUMBER SEVEN
1ED34 ; 7.0 ; ; 7 # No OTTOMAN SIYAQ ALTERNATE NUMBER SEVEN
1F108 ; 7.0 ; ; 7 # No DIGIT SEVEN COMMA
+1FBF7 ; 7.0 ; ; 7 # Nd SEGMENTED DIGIT SEVEN
20001 ; 7.0 ; ; 7 # Lo CJK UNIFIED IDEOGRAPH-20001
-# Total code points: 110
+# Total code points: 112
# ================================================
@@ -1421,6 +1441,7 @@ FF18 ; 8.0 ; ; 8 # Nd FULLWIDTH DIGIT EIGHT
116C8 ; 8.0 ; ; 8 # Nd TAKRI DIGIT EIGHT
11738 ; 8.0 ; ; 8 # Nd AHOM DIGIT EIGHT
118E8 ; 8.0 ; ; 8 # Nd WARANG CITI DIGIT EIGHT
+11958 ; 8.0 ; ; 8 # Nd DIVES AKURU DIGIT EIGHT
11C58 ; 8.0 ; ; 8 # Nd BHAIKSUKI DIGIT EIGHT
11C61 ; 8.0 ; ; 8 # No BHAIKSUKI NUMBER EIGHT
11D58 ; 8.0 ; ; 8 # Nd MASARAM GONDI DIGIT EIGHT
@@ -1451,8 +1472,9 @@ FF18 ; 8.0 ; ; 8 # Nd FULLWIDTH DIGIT EIGHT
1ED08 ; 8.0 ; ; 8 # No OTTOMAN SIYAQ NUMBER EIGHT
1ED35 ; 8.0 ; ; 8 # No OTTOMAN SIYAQ ALTERNATE NUMBER EIGHT
1F109 ; 8.0 ; ; 8 # No DIGIT EIGHT COMMA
+1FBF8 ; 8.0 ; ; 8 # Nd SEGMENTED DIGIT EIGHT
-# Total code points: 106
+# Total code points: 108
# ================================================
@@ -1538,6 +1560,7 @@ FF19 ; 9.0 ; ; 9 # Nd FULLWIDTH DIGIT NINE
116C9 ; 9.0 ; ; 9 # Nd TAKRI DIGIT NINE
11739 ; 9.0 ; ; 9 # Nd AHOM DIGIT NINE
118E9 ; 9.0 ; ; 9 # Nd WARANG CITI DIGIT NINE
+11959 ; 9.0 ; ; 9 # Nd DIVES AKURU DIGIT NINE
11C59 ; 9.0 ; ; 9 # Nd BHAIKSUKI DIGIT NINE
11C62 ; 9.0 ; ; 9 # No BHAIKSUKI NUMBER NINE
11D59 ; 9.0 ; ; 9 # Nd MASARAM GONDI DIGIT NINE
@@ -1568,9 +1591,10 @@ FF19 ; 9.0 ; ; 9 # Nd FULLWIDTH DIGIT NINE
1ED09 ; 9.0 ; ; 9 # No OTTOMAN SIYAQ NUMBER NINE
1ED36 ; 9.0 ; ; 9 # No OTTOMAN SIYAQ ALTERNATE NUMBER NINE
1F10A ; 9.0 ; ; 9 # No DIGIT NINE COMMA
+1FBF9 ; 9.0 ; ; 9 # Nd SEGMENTED DIGIT NINE
2F890 ; 9.0 ; ; 9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F890
-# Total code points: 110
+# Total code points: 112
# ================================================
@@ -1619,6 +1643,7 @@ F9FD ; 10.0 ; ; 10 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FD
10E69 ; 10.0 ; ; 10 # No RUMI NUMBER TEN
10F22 ; 10.0 ; ; 10 # No OLD SOGDIAN NUMBER TEN
10F52 ; 10.0 ; ; 10 # No SOGDIAN NUMBER TEN
+10FC9 ; 10.0 ; ; 10 # No CHORASMIAN NUMBER TEN
1105B ; 10.0 ; ; 10 # No BRAHMI NUMBER TEN
111EA ; 10.0 ; ; 10 # No SINHALA ARCHAIC NUMBER TEN
1173A ; 10.0 ; ; 10 # No AHOM NUMBER TEN
@@ -1632,7 +1657,7 @@ F9FD ; 10.0 ; ; 10 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FD
1ED0A ; 10.0 ; ; 10 # No OTTOMAN SIYAQ NUMBER TEN
1ED37 ; 10.0 ; ; 10 # No OTTOMAN SIYAQ ALTERNATE NUMBER TEN
-# Total code points: 61
+# Total code points: 62
# ================================================
@@ -1770,6 +1795,7 @@ F9FD ; 10.0 ; ; 10 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FD
10E6A ; 20.0 ; ; 20 # No RUMI NUMBER TWENTY
10F23 ; 20.0 ; ; 20 # No OLD SOGDIAN NUMBER TWENTY
10F53 ; 20.0 ; ; 20 # No SOGDIAN NUMBER TWENTY
+10FCA ; 20.0 ; ; 20 # No CHORASMIAN NUMBER TWENTY
1105C ; 20.0 ; ; 20 # No BRAHMI NUMBER TWENTY
111EB ; 20.0 ; ; 20 # No SINHALA ARCHAIC NUMBER TWENTY
1173B ; 20.0 ; ; 20 # No AHOM NUMBER TWENTY
@@ -1779,7 +1805,7 @@ F9FD ; 10.0 ; ; 10 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FD
1EC7B ; 20.0 ; ; 20 # No INDIC SIYAQ NUMBER TWENTY
1ED0B ; 20.0 ; ; 20 # No OTTOMAN SIYAQ NUMBER TWENTY
-# Total code points: 35
+# Total code points: 36
# ================================================
@@ -2121,6 +2147,7 @@ F9FD ; 10.0 ; ; 10 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FD
10E72 ; 100.0 ; ; 100 # No RUMI NUMBER ONE HUNDRED
10F25 ; 100.0 ; ; 100 # No OLD SOGDIAN NUMBER ONE HUNDRED
10F54 ; 100.0 ; ; 100 # No SOGDIAN NUMBER ONE HUNDRED
+10FCB ; 100.0 ; ; 100 # No CHORASMIAN NUMBER ONE HUNDRED
11064 ; 100.0 ; ; 100 # No BRAHMI NUMBER ONE HUNDRED
111F3 ; 100.0 ; ; 100 # No SINHALA ARCHAIC NUMBER ONE HUNDRED
11C6C ; 100.0 ; ; 100 # No BHAIKSUKI HUNDREDS UNIT MARK
@@ -2128,7 +2155,7 @@ F9FD ; 10.0 ; ; 10 # Lo CJK COMPATIBILITY IDEOGRAPH-F9FD
1EC83 ; 100.0 ; ; 100 # No INDIC SIYAQ NUMBER ONE HUNDRED
1ED13 ; 100.0 ; ; 100 # No OTTOMAN SIYAQ NUMBER ONE HUNDRED
-# Total code points: 34
+# Total code points: 35
# ================================================
diff --git a/gnu/usr.bin/perl/lib/unicore/lib/Lb/EB.pl b/gnu/usr.bin/perl/lib/unicore/lib/Lb/EB.pl
deleted file mode 100644
index 672bc678061..00000000000
--- a/gnu/usr.bin/perl/lib/unicore/lib/Lb/EB.pl
+++ /dev/null
@@ -1,86 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is machine-generated by lib/unicore/mktables from the Unicode
-# database, Version 12.1.0. Any changes made here will be lost!
-
-# !!!!!!! INTERNAL PERL USE ONLY !!!!!!!
-# This file is for internal use by core Perl only. The format and even the
-# name or existence of this file are subject to change without notice. Don't
-# use it directly. Use Unicode::UCD to access the Unicode character data
-# base.
-
-
-return <<'END';
-V72
-9757
-9758
-9977
-9978
-9994
-9998
-127877
-127878
-127938
-127941
-127943
-127944
-127946
-127949
-128066
-128068
-128070
-128081
-128102
-128121
-128124
-128125
-128129
-128132
-128133
-128136
-128143
-128144
-128145
-128146
-128170
-128171
-128372
-128374
-128378
-128379
-128400
-128401
-128405
-128407
-128581
-128584
-128587
-128592
-128675
-128676
-128692
-128695
-128704
-128705
-128716
-128717
-129295
-129296
-129304
-129312
-129318
-129319
-129328
-129338
-129340
-129343
-129461
-129463
-129464
-129466
-129467
-129468
-129485
-129488
-129489
-129502
-END
diff --git a/gnu/usr.bin/perl/lib/unicore/lib/Perl/_PerlNon.pl b/gnu/usr.bin/perl/lib/unicore/lib/Perl/_PerlNon.pl
deleted file mode 100644
index aa29ca9bd80..00000000000
--- a/gnu/usr.bin/perl/lib/unicore/lib/Perl/_PerlNon.pl
+++ /dev/null
@@ -1,52 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is machine-generated by lib/unicore/mktables from the Unicode
-# database, Version 12.1.0. Any changes made here will be lost!
-
-# !!!!!!! INTERNAL PERL USE ONLY !!!!!!!
-# This file is for internal use by core Perl only. The format and even the
-# name or existence of this file are subject to change without notice. Don't
-# use it directly. Use Unicode::UCD to access the Unicode character data
-# base.
-
-
-return <<'END';
-V38
-102
-103
-105
-106
-108
-109
-110
-111
-115
-117
-702
-703
-768
-770
-775
-777
-778
-779
-780
-781
-787
-788
-817
-818
-834
-835
-953
-954
-1381
-1382
-1387
-1388
-1389
-1390
-1398
-1399
-1410
-1411
-END
diff --git a/gnu/usr.bin/perl/lib/unicore/lib/Sc/Armn.pl b/gnu/usr.bin/perl/lib/unicore/lib/Sc/Armn.pl
deleted file mode 100644
index cdb7ba46b64..00000000000
--- a/gnu/usr.bin/perl/lib/unicore/lib/Sc/Armn.pl
+++ /dev/null
@@ -1,24 +0,0 @@
-# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
-# This file is machine-generated by lib/unicore/mktables from the Unicode
-# database, Version 12.1.0. Any changes made here will be lost!
-
-# !!!!!!! INTERNAL PERL USE ONLY !!!!!!!
-# This file is for internal use by core Perl only. The format and even the
-# name or existence of this file are subject to change without notice. Don't
-# use it directly. Use Unicode::UCD to access the Unicode character data
-# base.
-
-
-return <<'END';
-V10
-1329
-1367
-1369
-1417
-1418
-1419
-1421
-1424
-64275
-64280
-END
diff --git a/gnu/usr.bin/perl/lib/unicore/mktables b/gnu/usr.bin/perl/lib/unicore/mktables
index 9860bf78324..89930f5ee6c 100644
--- a/gnu/usr.bin/perl/lib/unicore/mktables
+++ b/gnu/usr.bin/perl/lib/unicore/mktables
@@ -29,7 +29,10 @@ use File::Path;
use File::Spec;
use Text::Tabs;
use re "/aa";
+
use feature 'state';
+use feature 'signatures';
+no warnings 'experimental::signatures';
sub DEBUG () { 0 } # Set to 0 for production; 1 for development
my $debugging_build = $Config{"ccflags"} =~ /-DDEBUGGING/;
@@ -45,7 +48,7 @@ sub NON_ASCII_PLATFORM { ord("A") != 65 }
# expected, a warning will be generated. If an older version is being
# compiled, any bounds tests that fail in the generated test file (-maketest
# option) will be marked as TODO.
-my $version_of_mk_invlist_bounds = v12.1.0;
+my $version_of_mk_invlist_bounds = v13.0.0;
##########################################################################
#
@@ -145,15 +148,15 @@ my $map_directory = 'To'; # Where map files go.
# Again, this is so that methods can be defined on one and not the others so
# as to prevent operating on them in incorrect ways.
#
-# Eventually, most tables are written out to files to be read by utf8_heavy.pl
-# in the perl core. All tables could in theory be written, but some are
-# suppressed because there is no current practical use for them. It is easy
-# to change which get written by changing various lists that are near the top
-# of the actual code in this file. The table data structures contain enough
-# ancillary information to allow them to be treated as separate entities for
-# writing, such as the path to each one's file. There is a heading in each
-# map table that gives the format of its entries, and what the map is for all
-# the code points missing from it. (This allows tables to be more compact.)
+# Eventually, most tables are written out to files to be read by Unicode::UCD.
+# All tables could in theory be written, but some are suppressed because there
+# is no current practical use for them. It is easy to change which get
+# written by changing various lists that are near the top of the actual code
+# in this file. The table data structures contain enough ancillary
+# information to allow them to be treated as separate entities for writing,
+# such as the path to each one's file. There is a heading in each map table
+# that gives the format of its entries, and what the map is for all the code
+# points missing from it. (This allows tables to be more compact.)
#
# The Property data structure contains one or more tables. All properties
# contain a map table (except the $perl property which is a
@@ -1320,9 +1323,9 @@ my %map_table_formats = (
my $EXTRACTED_DIR = (-d 'extracted') ? 'extracted' : "";
my $EXTRACTED = ($EXTRACTED_DIR) ? "$EXTRACTED_DIR/" : "";
my $AUXILIARY = 'auxiliary';
+my $EMOJI = 'emoji';
-# Hashes and arrays that will eventually go into Heavy.pl for the use of
-# utf8_heavy.pl and into UCD.pl for the use of UCD.pm
+# Hashes and arrays that will eventually go into UCD.pl for the use of UCD.pm
my %loose_to_file_of; # loosely maps table names to their respective
# files
my %stricter_to_file_of; # same; but for stricter mapping.
@@ -1335,7 +1338,7 @@ my @inline_definitions = "V0"; # Each element gives a definition of a unique
# this array. The 0th element is initialized to
# the definition for a zero length inversion list
my %file_to_swash_name; # Maps the file name to its corresponding key name
- # in the hash %utf8::SwashInfo
+ # in the hash %Unicode::UCD::SwashInfo
my %nv_floating_to_rational; # maps numeric values floating point numbers to
# their rational equivalent
my %loose_property_name_of; # Loosely maps (non_string) property names to
@@ -1468,29 +1471,28 @@ my $DI; # Default_Ignorable_Code_Point property
my $NChar; # Noncharacter_Code_Point property
my $script;
my $scx; # Script_Extensions property
+my $idt; # Identifier_Type property
# Are there conflicting names because of beginning with 'In_', or 'Is_'
my $has_In_conflicts = 0;
my $has_Is_conflicts = 0;
-sub internal_file_to_platform ($) {
+sub internal_file_to_platform ($file=undef) {
# Convert our file paths which have '/' separators to those of the
# platform.
- my $file = shift;
return undef unless defined $file;
return File::Spec->join(split '/', $file);
}
-sub file_exists ($) { # platform independent '-e'. This program internally
+sub file_exists ($file=undef) { # platform independent '-e'. This program internally
# uses slash as a path separator.
- my $file = shift;
- return 0 if ! defined $file;
+ return 0 unless defined $file;
return -e internal_file_to_platform($file);
}
-sub objaddr($) {
+sub objaddr($addr) {
# Returns the address of the blessed input object.
# It doesn't check for blessedness because that would do a string eval
# every call, and the program is structured so that this is never called
@@ -1499,7 +1501,7 @@ sub objaddr($) {
no overloading; # If overloaded, numifying below won't work.
# Numifying a ref gives its address.
- return pack 'J', $_[0];
+ return pack 'J', $addr;
}
# These are used only if $annotate is true.
@@ -1532,15 +1534,12 @@ my $CONTROL_TYPE = -5;
my $ABOVE_UNICODE_TYPE = -6;
my $UNKNOWN_TYPE = -7; # Used only if there is a bug in this program
-sub populate_char_info ($) {
+sub populate_char_info ($i) {
# Used only with the $annotate option. Populates the arrays with the
# input code point's info that are needed for outputting more detailed
# comments. If calling context wants a return, it is the end point of
# any contiguous range of characters that share essentially the same info
- my $i = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
$viacode[$i] = $perl_charname->value_of($i) || "";
$age[$i] = (defined $age)
? (($age->value_of($i) =~ / ^ \d+ \. \d+ $ /x)
@@ -1688,55 +1687,19 @@ sub populate_char_info ($) {
return $end;
}
-# Commented code below should work on Perl 5.8.
-## This 'require' doesn't necessarily work in miniperl, and even if it does,
-## the native perl version of it (which is what would operate under miniperl)
-## is extremely slow, as it does a string eval every call.
-#my $has_fast_scalar_util = $^X !~ /miniperl/
-# && defined eval "require Scalar::Util";
-#
-#sub objaddr($) {
-# # Returns the address of the blessed input object. Uses the XS version if
-# # available. It doesn't check for blessedness because that would do a
-# # string eval every call, and the program is structured so that this is
-# # never called for a non-blessed object.
-#
-# return Scalar::Util::refaddr($_[0]) if $has_fast_scalar_util;
-#
-# # Check at least that is a ref.
-# my $pkg = ref($_[0]) or return undef;
-#
-# # Change to a fake package to defeat any overloaded stringify
-# bless $_[0], 'main::Fake';
-#
-# # Numifying a ref gives its address.
-# my $addr = pack 'J', $_[0];
-#
-# # Return to original class
-# bless $_[0], $pkg;
-# return $addr;
-#}
-
-sub max ($$) {
- my $a = shift;
- my $b = shift;
- return $a if $a >= $b;
- return $b;
+sub max($a, $b) {
+ return $a >= $b ? $a : $b;
}
-sub min ($$) {
- my $a = shift;
- my $b = shift;
- return $a if $a <= $b;
- return $b;
+sub min($a, $b) {
+ return $a <= $b ? $a : $b;
}
-sub clarify_number ($) {
+sub clarify_number ($number) {
# This returns the input number with underscores inserted every 3 digits
# in large (5 digits or more) numbers. Input must be entirely digits, not
# checked.
- my $number = shift;
my $pos = length($number) - 3;
return $number if $pos <= 1;
while ($pos > 0) {
@@ -1746,13 +1709,12 @@ sub clarify_number ($) {
return $number;
}
-sub clarify_code_point_count ($) {
+sub clarify_code_point_count ($number) {
# This is like clarify_number(), but the input is assumed to be a count of
# code points, rather than a generic number.
my $append = "";
- my $number = shift;
if ($number > $MAX_UNICODE_CODEPOINTS) {
$number -= ($MAX_WORKING_CODEPOINTS - $MAX_UNICODE_CODEPOINTS);
return "All above-Unicode code points" if $number == 0;
@@ -1775,9 +1737,7 @@ our $Verbose = 1 if main::DEBUG; # Useful info when debugging
# http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2009-11/msg01057.html
undef $overload::VERSION;
-sub my_carp {
- my $message = shift || "";
- my $nofold = shift || 0;
+sub my_carp($message="", $nofold=0) {
if ($message) {
$message = main::join_lines($message);
@@ -1799,26 +1759,16 @@ sub my_carp {
return;
}
-sub my_carp_bug {
+sub my_carp_bug($message="") {
# This is called when it is clear that the problem is caused by a bug in
# this program.
-
- my $message = shift;
$message =~ s/^$0: *//;
$message = my_carp("Bug in $0. Please report it by running perlbug or if that is unavailable, by sending email to perbug\@perl.org:\n$message");
carp $message;
return;
}
-sub carp_too_few_args {
- if (@_ != 2) {
- my_carp_bug("Wrong number of arguments: to 'carp_too_few_arguments'. No action taken.");
- return;
- }
-
- my $args_ref = shift;
- my $count = shift;
-
+sub carp_too_few_args($args_ref, $count) {
my_carp_bug("Need at least $count arguments to "
. (caller 1)[3]
. ". Instead got: '"
@@ -1827,10 +1777,7 @@ sub carp_too_few_args {
return;
}
-sub carp_extra_args {
- my $args_ref = shift;
- my_carp_bug("Too many arguments to 'carp_extra_args': (" . join(', ', @_) . "); Extras ignored.") if @_;
-
+sub carp_extra_args($args_ref) {
unless (ref $args_ref) {
my_carp_bug("Argument to 'carp_extra_args' ($args_ref) must be a ref. Not checking arguments.");
return;
@@ -1937,7 +1884,7 @@ package main;
return;
}
- sub set_access {
+ sub set_access($name, $field, @accessors) {
# Arrange for the input field to be garbage collected when no longer
# needed. Also, creates standard accessor functions for the field
# based on the optional parameters-- none if none of these parameters:
@@ -1968,9 +1915,9 @@ package main;
# We create anonymous subroutines as the accessors and then use
# typeglobs to assign them to the proper package and name
- my $name = shift; # Name of the field
- my $field = shift; # Reference to the inside-out hash containing the
- # field
+ # $name Name of the field
+ # $field Reference to the inside-out hash containing the
+ # field
my $package = (caller)[0];
@@ -1982,7 +1929,7 @@ package main;
$package_fields{$package}{$name} = $field;
# Remaining arguments are the accessors. For each...
- foreach my $access (@_) {
+ foreach my $access (@accessors) {
my $access = lc $access;
my $protected = "";
@@ -2009,13 +1956,9 @@ package main;
# add_ accessor. Don't add if already there, which we
# determine using 'eq' for scalars and '==' otherwise.
- *$subname = sub {
+ *$subname = sub ($self, $value) {
use strict "refs";
- return Carp::carp_too_few_args(\@_, 2) if main::DEBUG && @_ < 2;
- my $self = shift;
- my $value = shift;
my $addr = do { no overloading; pack 'J', $self; };
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
if (ref $value) {
return if grep { $value == $_ } @{$field->{$addr}};
}
@@ -2045,10 +1988,9 @@ package main;
or length($access) > length('readable_'))
{
no strict "refs";
- *$subname = sub {
+ *$subname = sub ($_addr) {
use strict "refs";
- Carp::carp_extra_args(\@_) if main::DEBUG && @_ > 1;
- my $addr = do { no overloading; pack 'J', $_[0]; };
+ my $addr = do { no overloading; pack 'J', $_addr; };
if (ref $field->{$addr} ne 'ARRAY') {
my $type = ref $field->{$addr};
$type = 'scalar' unless $type;
@@ -2067,26 +2009,21 @@ package main;
# Here not an array value, a simpler function.
no strict "refs";
- *$subname = sub {
+ *$subname = sub ($addr) {
use strict "refs";
- Carp::carp_extra_args(\@_) if main::DEBUG && @_ > 1;
no overloading;
- return $field->{pack 'J', $_[0]};
+ return $field->{pack 'J', $addr};
}
}
}
elsif (substr('settable', 0, length $access) eq $access) {
my $subname = "${package}::${protected}set_$name";
no strict "refs";
- *$subname = sub {
+ *$subname = sub ($self, $value) {
use strict "refs";
- if (main::DEBUG) {
- return Carp::carp_too_few_args(\@_, 2) if @_ < 2;
- Carp::carp_extra_args(\@_) if @_ > 2;
- }
# $self is $_[0]; $value is $_[1]
no overloading;
- $field->{pack 'J', $_[0]} = $_[1];
+ $field->{pack 'J', $self} = $value;
return;
}
}
@@ -2374,6 +2311,11 @@ sub trace { return main::trace(@_); }
# giving the first release without this file.
main::set_access('withdrawn', \%withdrawn, 'c');
+ my %ucd;
+ # Some files are not actually part of the Unicode Character Database.
+ # These typically have a different way of indicating their version
+ main::set_access('ucd', \%ucd, 'c');
+
my %in_this_release;
# Calculated value from %first_released and %withdrawn. Are we compiling
# a Unicode release which includes this file?
@@ -2403,6 +2345,7 @@ sub trace { return main::trace(@_); }
$missings{$addr} = [ ];
$early{$addr} = [ ];
$optional{$addr} = [ ];
+ $ucd{$addr} = 1;
# Two positional parameters.
return Carp::carp_too_few_args(\@_, 2) if main::DEBUG && @_ < 2;
@@ -2655,7 +2598,6 @@ END
sub {
my $file = shift;
Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my @fields = split /\s*;\s*/, $_, -1;
if (@fields - 1 > @{$properties{$addr}}) {
@@ -2702,13 +2644,11 @@ END
".=" => \&main::_operator_dot_equal,
;
- sub _operator_stringify {
- my $self = shift;
-
+ sub _operator_stringify($self) {
return __PACKAGE__ . " object for " . $self->file;
}
- sub run {
+ sub run($self) {
# Process the input object $self. This opens and closes the file and
# calls all the handlers for it. Currently, this can only be called
# once per file, as it destroy's the EOF handlers
@@ -2716,9 +2656,6 @@ END
# flag to make sure extracted files are processed early
state $seen_non_extracted = 0;
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
my $file = $file{$addr};
@@ -2838,6 +2775,8 @@ END
&& ! $early{$addr}[0]
&& lc($file) ne 'unicodedata.txt')
{
+ my $this_version;
+
if ($file !~ /^Unihan/i) {
# The non-Unihan files started getting version numbers in
@@ -2848,17 +2787,39 @@ END
# numbers are correct.
if ($v_version ge v4.0.1) {
$_ = <$file_handle>; # The version number is in the
- # very first line
- if ($_ !~ / - $string_version \. /x) {
- chomp;
+ # very first line if it is a
+ # UCD file; otherwise, it
+ # might be
+ goto valid_version if $_ =~ / - $string_version \. /x;
+ chomp;
+ if ($ucd{$addr}) {
$_ =~ s/^#\s*//;
# 4.0.1 had some valid files that weren't updated.
- if (! ($v_version eq v4.0.1 && $_ =~ /4\.0\.0/)) {
- die Carp::my_carp("File '$file' is version "
- . "'$_'. It should be "
- . "version $string_version");
+ goto valid_version
+ if $v_version eq v4.0.1 && $_ =~ /4\.0\.0/;
+ $this_version = $_;
+ goto wrong_version;
+ }
+ else {
+ my $BOM = "\x{FEFF}";
+ utf8::encode($BOM);
+ my $BOM_re = qr/ ^ (?:$BOM)? /x;
+
+ while ($_ =~ s/$BOM_re//) { # BOM; seems to be on
+ # many lines in some files!!
+ $_ = <$file_handle>;
+ chomp;
+ if ($_ =~ /^# Version: (.*)/) {
+ $this_version = $1;
+ goto valid_version
+ if $this_version eq $string_version;
+ goto valid_version
+ if "$this_version.0" eq $string_version;
+ goto wrong_version;
+ }
}
+ goto no_version;
}
}
}
@@ -2868,23 +2829,30 @@ END
# 6.0. The version is somewhere in the first comment
# block
while (<$file_handle>) {
- if ($_ !~ /^#/) {
- Carp::my_carp_bug("Could not find the expected "
- . "version info in file '$file'");
- last;
- }
+ goto no_version if $_ !~ /^#/;
chomp;
$_ =~ s/^#\s*//;
next if $_ !~ / version: /x;
- last if $_ =~ /$string_version/;
- die Carp::my_carp("File '$file' is version "
- . "'$_'. It should be "
- . "version $string_version");
+ goto valid_version if $_ =~ /$string_version/;
+ goto wrong_version;
}
+ goto no_version;
}
+ else { # Old Unihan; have to assume is valid
+ goto valid_version;
+ }
+
+ wrong_version:
+ die Carp::my_carp("File '$file' is version "
+ . "'$this_version'. It should be "
+ . "version $string_version");
+ no_version:
+ Carp::my_carp_bug("Could not find the expected "
+ . "version info in file '$file'");
}
}
+ valid_version:
print "$progress_message{$addr}\n" if $verbosity >= $PROGRESS;
# Call any special handler for before the file.
@@ -2929,15 +2897,12 @@ END
return;
}
- sub _next_line {
+ sub _next_line($self) {
# Sets $_ to be the next logical input line, if any. Returns non-zero
# if such a line exists. 'logical' means that any lines that have
# been added via insert_lines() will be returned in $_ before the file
# is read again.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
# Here the file is open (or if the handle is not a ref, is an open
@@ -3098,10 +3063,7 @@ END
}
- sub _next_line_with_remapped_range {
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub _next_line_with_remapped_range($self) {
# like _next_line(), but for use on non-ASCII platforms. It sets $_
# to be the next logical input line, if any. Returns non-zero if such
# a line exists. 'logical' means that any lines that have been added
@@ -3227,23 +3189,21 @@ END
# }
- sub insert_lines {
+ sub insert_lines($self, @lines) {
# Lines can be inserted so that it looks like they were in the input
# file at the place it was when this routine is called. See also
# insert_adjusted_lines(). Lines inserted via this routine go through
# any each_line_handler()
- my $self = shift;
-
# Each inserted line is an array, with the first element being 0 to
# indicate that this line hasn't been adjusted, and needs to be
# processed.
no overloading;
- push @{$added_lines{pack 'J', $self}}, map { [ 0, $_ ] } @_;
+ push @{$added_lines{pack 'J', $self}}, map { [ 0, $_ ] } @lines;
return;
}
- sub insert_adjusted_lines {
+ sub insert_adjusted_lines($self, @lines) {
# Lines can be inserted so that it looks like they were in the input
# file at the place it was when this routine is called. See also
# insert_lines(). Lines inserted via this routine are already fully
@@ -3257,25 +3217,21 @@ END
# use that to call only those handlers whose index is after it on the
# stack. But this is overkill for what is needed now.
- my $self = shift;
trace $_[0] if main::DEBUG && $to_trace;
# Each inserted line is an array, with the first element being 1 to
# indicate that this line has been adjusted
no overloading;
- push @{$added_lines{pack 'J', $self}}, map { [ 1, $_ ] } @_;
+ push @{$added_lines{pack 'J', $self}}, map { [ 1, $_ ] } @lines;
return;
}
- sub get_missings {
+ sub get_missings($self) {
# Returns the stored up @missings lines' values, and clears the list.
# The values are in an array, consisting of the default in the first
# element, and the property in the 2nd. However, since these lines
# can be stacked up, the return is an array of all these arrays.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
# If not accepting a list return, just return the first one.
@@ -3286,7 +3242,7 @@ END
return @return;
}
- sub _exclude_unassigned {
+ sub _exclude_unassigned($self) {
# Takes the range in $_ and excludes code points that aren't assigned
# in this release
@@ -3302,9 +3258,7 @@ END
# Find what code points are assigned in this release
main::calculate_Assigned() if ! defined $Assigned;
- my $self = shift;
my $addr = do { no overloading; pack 'J', $self; };
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
my ($range, @remainder)
= split /\s*;\s*/, $_, -1; # -1 => retain trailing null fields
@@ -3345,16 +3299,14 @@ END
return;
}
- sub _fixup_obsolete_hanguls {
+ sub _fixup_obsolete_hanguls($self) {
# This is called only when compiling Unicode version 1. All Unicode
# data for subsequent releases assumes that the code points that were
# Hangul syllables in this release only are something else, so if
# using such data, we have to override it
- my $self = shift;
my $addr = do { no overloading; pack 'J', $self; };
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
my $object = main::property_ref($property{$addr});
$object->add_map($FIRST_REMOVED_HANGUL_SYLLABLE,
@@ -3363,29 +3315,23 @@ END
Replace => $UNCONDITIONALLY);
}
- sub _insert_property_into_line {
+ sub _insert_property_into_line($self) {
# Add a property field to $_, if this file requires it.
- my $self = shift;
my $addr = do { no overloading; pack 'J', $self; };
my $property = $property{$addr};
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
$_ =~ s/(;|$)/; $property$1/;
return;
}
- sub carp_bad_line {
+ sub carp_bad_line($self, $message="") {
# Output consistent error messages, using either a generic one, or the
# one given by the optional parameter. To avoid gazillions of the
# same message in case the syntax of a file is way off, this routine
# only outputs the first instance of each message, incrementing a
# count so the totals can be output at the end of the file.
- my $self = shift;
- my $message = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
$message = 'Unexpected line' unless $message;
@@ -3422,6 +3368,11 @@ package Multi_Default;
# defaults, and for all but that final default, an eval string that generates
# the class that it applies to.
+use strict;
+use warnings;
+
+use feature 'signatures';
+no warnings 'experimental::signatures';
{ # Closure
@@ -3466,10 +3417,8 @@ package Multi_Default;
return $self;
}
- sub get_next_defaults {
+ sub get_next_defaults($self) {
# Iterates and returns the next class of defaults.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
my $addr = do { no overloading; pack 'J', $self; };
@@ -3483,6 +3432,12 @@ package Alias;
# including some attributes. Everything is currently setup in the
# constructor.
+use strict;
+use warnings;
+
+use feature 'signatures';
+no warnings 'experimental::signatures';
+
{ # Closure
@@ -3554,6 +3509,12 @@ package Range;
# map to. Type 0 values have the standardized version of the value stored as
# well, so as to not have to recalculate it a lot.
+use strict;
+use warnings;
+
+use feature 'signatures';
+no warnings 'experimental::signatures';
+
sub trace { return main::trace(@_); }
{ # Closure
@@ -3578,17 +3539,14 @@ sub trace { return main::trace(@_); }
# Note that if these fields change, the dump() method should as well
- sub new {
- return Carp::carp_too_few_args(\@_, 3) if main::DEBUG && @_ < 3;
- my $class = shift;
-
+ sub new($class, $_addr, $_end, @_args) {
my $self = bless \do { my $anonymous_scalar }, $class;
my $addr = do { no overloading; pack 'J', $self; };
- $start{$addr} = shift;
- $end{$addr} = shift;
+ $start{$addr} = $_addr;
+ $end{$addr} = $_end;
- my %args = @_;
+ my %args = @_args;
my $value = delete $args{'Value'}; # Can be 0
$value = "" unless defined $value;
@@ -3608,8 +3566,7 @@ sub trace { return main::trace(@_); }
".=" => \&main::_operator_dot_equal,
;
- sub _operator_stringify {
- my $self = shift;
+ sub _operator_stringify($self) {
my $addr = do { no overloading; pack 'J', $self; };
# Output it like '0041..0065 (value)'
@@ -3626,16 +3583,13 @@ sub trace { return main::trace(@_); }
return $return;
}
- sub standard_form {
+ sub standard_form($self) {
# Calculate the standard form only if needed, and cache the result.
# The standard form is the value itself if the type is special.
# This represents a considerable CPU and memory saving - at the time
# of writing there are 368676 non-special objects, but the standard
# form is only requested for 22047 of them - ie about 6%.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
return $standard_form{$addr} if defined $standard_form{$addr};
@@ -3645,13 +3599,9 @@ sub trace { return main::trace(@_); }
return $standard_form{$addr} = main::standardize($value);
}
- sub dump {
+ sub dump($self, $indent) {
# Human, not machine readable. For machine readable, comment out this
# entire routine and let the standard one take effect.
- my $self = shift;
- my $indent = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
my $return = $indent
@@ -3671,6 +3621,12 @@ sub trace { return main::trace(@_); }
package _Range_List_Base;
+use strict;
+use warnings;
+
+use feature 'signatures';
+no warnings 'experimental::signatures';
+
# Base class for range lists. A range list is simply an ordered list of
# ranges, so that the ranges with the lowest starting numbers are first in it.
#
@@ -3767,8 +3723,7 @@ sub trace { return main::trace(@_); }
".=" => \&main::_operator_dot_equal,
;
- sub _operator_stringify {
- my $self = shift;
+ sub _operator_stringify($self) {
my $addr = do { no overloading; pack 'J', $self; };
return "Range_List attached to '$owner_name_of{$addr}'"
@@ -3907,24 +3862,18 @@ sub trace { return main::trace(@_); }
return $new;
}
- sub range_count { # Return the number of ranges in the range list
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub range_count($self) { # Return the number of ranges in the range list
no overloading;
return scalar @{$ranges{pack 'J', $self}};
}
- sub min {
+ sub min($self) {
# Returns the minimum code point currently in the range list, or if
# the range list is empty, 2 beyond the max possible. This is a
# method because used so rarely, that not worth saving between calls,
# and having to worry about changing it as ranges are added and
# deleted.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
# If the range list is empty, return a large value that isn't adjacent
@@ -3933,14 +3882,11 @@ sub trace { return main::trace(@_); }
return $ranges{$addr}->[0]->start;
}
- sub contains {
+ sub contains($self, $codepoint) {
# Boolean: Is argument in the range list? If so returns $i such that:
# range[$i]->end < $codepoint <= range[$i+1]->end
# which is one beyond what you want; this is so that the 0th range
# doesn't return false
- my $self = shift;
- my $codepoint = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
my $i = $self->_search_ranges($codepoint);
return 0 unless defined $i;
@@ -3954,13 +3900,8 @@ sub trace { return main::trace(@_); }
return $i + 1;
}
- sub containing_range {
+ sub containing_range($self, $codepoint) {
# Returns the range object that contains the code point, undef if none
-
- my $self = shift;
- my $codepoint = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $i = $self->contains($codepoint);
return unless $i;
@@ -3969,44 +3910,29 @@ sub trace { return main::trace(@_); }
return $ranges{pack 'J', $self}->[$i-1];
}
- sub value_of {
+ sub value_of($self, $codepoint) {
# Returns the value associated with the code point, undef if none
-
- my $self = shift;
- my $codepoint = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $range = $self->containing_range($codepoint);
return unless defined $range;
return $range->value;
}
- sub type_of {
+ sub type_of($self, $codepoint) {
# Returns the type of the range containing the code point, undef if
# the code point is not in the table
-
- my $self = shift;
- my $codepoint = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $range = $self->containing_range($codepoint);
return unless defined $range;
return $range->type;
}
- sub _search_ranges {
+ sub _search_ranges($self, $code_point) {
# Find the range in the list which contains a code point, or where it
# should go if were to add it. That is, it returns $i, such that:
# range[$i-1]->end < $codepoint <= range[$i]->end
# Returns undef if no such $i is possible (e.g. at end of table), or
# if there is an error.
-
- my $self = shift;
- my $code_point = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
return if $code_point > $max{$addr};
@@ -4839,22 +4765,15 @@ sub trace { return main::trace(@_); }
return @return;
}
- sub reset_each_range { # reset the iterator for each_range();
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub reset_each_range($self) { # reset the iterator for each_range();
no overloading;
undef $each_range_iterator{pack 'J', $self};
return;
}
- sub each_range {
+ sub each_range($self) {
# Iterate over each range in a range list. Results are undefined if
# the range list is changed during the iteration.
-
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
return if $self->is_empty;
@@ -4868,10 +4787,7 @@ sub trace { return main::trace(@_); }
return;
}
- sub count { # Returns count of code points in range list
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub count($self) { # Returns count of code points in range list
my $addr = do { no overloading; pack 'J', $self; };
my $count = 0;
@@ -4881,32 +4797,19 @@ sub trace { return main::trace(@_); }
return $count;
}
- sub delete_range { # Delete a range
- my $self = shift;
- my $start = shift;
- my $end = shift;
-
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub delete_range($self, $start, $end) { # Delete a range
return $self->_add_delete('-', $start, $end, "");
}
- sub is_empty { # Returns boolean as to if a range list is empty
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub is_empty($self) { # Returns boolean as to if a range list is empty
no overloading;
return scalar @{$ranges{pack 'J', $self}} == 0;
}
- sub hash {
+ sub hash($self) {
# Quickly returns a scalar suitable for separating tables into
# buckets, i.e. it is a hash function of the contents of a table, so
# there are relatively few conflicts.
-
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
# These are quickly computable. Return looks like 'min..max;count'
@@ -4917,6 +4820,12 @@ sub trace { return main::trace(@_); }
package Range_List;
use parent '-norequire', '_Range_List_Base';
+use warnings;
+use strict;
+
+use feature 'signatures';
+no warnings 'experimental::signatures';
+
# A Range_List is a range list for match tables; i.e. the range values are
# not significant. Thus a number of operations can be safely added to it,
# such as inversion, intersection. Note that union is also an unsafe
@@ -4977,11 +4886,8 @@ sub trace { return main::trace(@_); }
'-' => "_subtract",
;
- sub _invert {
+ sub _invert($self, @) {
# Returns a new Range_List that gives all code points not in $self.
-
- my $self = shift;
-
my $new = Range_List->new;
# Go through each range in the table, finding the gaps between them
@@ -5006,16 +4912,11 @@ sub trace { return main::trace(@_); }
return $new;
}
- sub _subtract {
+ sub _subtract($self, $other, $reversed=0) {
# Returns a new Range_List with the argument deleted from it. The
# argument can be a single code point, a range, or something that has
# a range, with the _range_list() method on it returning them
- my $self = shift;
- my $other = shift;
- my $reversed = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
if ($reversed) {
Carp::my_carp_bug("Bad news. Can't cope with '"
. ref($other)
@@ -5049,18 +4950,12 @@ sub trace { return main::trace(@_); }
return $new;
}
- sub _intersect {
+ sub _intersect($a_object, $b_object, $check_if_overlapping=0) {
# Returns either a boolean giving whether the two inputs' range lists
# intersect (overlap), or a new Range_List containing the intersection
# of the two lists. The optional final parameter being true indicates
# to do the check instead of the intersection.
- my $a_object = shift;
- my $b_object = shift;
- my $check_if_overlapping = shift;
- $check_if_overlapping = 0 unless defined $check_if_overlapping;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
if (! defined $b_object) {
my $message = "";
$message .= $a_object->_owner_name_of if defined $a_object;
@@ -5190,35 +5085,19 @@ sub trace { return main::trace(@_); }
return $check_if_overlapping ? 0 : $new;
}
- sub overlaps {
+ sub overlaps($self, $other) {
# Returns boolean giving whether the two arguments overlap somewhere
-
- my $self = shift;
- my $other = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
return $self->_intersect($other, 1);
}
- sub add_range {
+ sub add_range($self, $start, $end) {
# Add a range to the list.
-
- my $self = shift;
- my $start = shift;
- my $end = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
return $self->_add_delete('+', $start, $end, "");
}
- sub matches_identically_to {
+ sub matches_identically_to($self, $other) {
# Return a boolean as to whether or not two Range_Lists match identical
# sets of code points.
-
- my $self = shift;
- my $other = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# These are ordered in increasing real time to figure out (at least
# until a patch changes that and doesn't change this)
return 0 if $self->max != $other->max;
@@ -5243,16 +5122,11 @@ sub trace { return main::trace(@_); }
return 1;
}
- sub is_code_point_usable {
+ sub is_code_point_usable($code, $try_hard) {
# This used only for making the test script. See if the input
# proposed trial code point is one that Perl will handle. If second
# parameter is 0, it won't select some code points for various
# reasons, noted below.
-
- my $code = shift;
- my $try_hard = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
return 0 if $code < 0; # Never use a negative
# shun null. I'm (khw) not sure why this was done, but NULL would be
@@ -5269,14 +5143,10 @@ sub trace { return main::trace(@_); }
return 1;
}
- sub get_valid_code_point {
+ sub get_valid_code_point($self) {
# Return a code point that's part of the range list. Returns nothing
# if the table is empty or we can't find a suitable code point. This
# used only for making the test script.
-
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
# On first pass, don't choose less desirable code points; if no good
@@ -5302,14 +5172,11 @@ sub trace { return main::trace(@_); }
return (); # If none found, give up.
}
- sub get_invalid_code_point {
+ sub get_invalid_code_point($self) {
# Return a code point that's not part of the table. Returns nothing
# if the table covers all code points or a suitable code point can't
# be found. This used only for making the test script.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# Just find a valid code point of the inverse, if any.
return Range_List->new(Initialize => ~ $self)->get_valid_code_point;
}
@@ -5318,6 +5185,12 @@ sub trace { return main::trace(@_); }
package Range_Map;
use parent '-norequire', '_Range_List_Base';
+use strict;
+use warnings;
+
+use feature 'signatures';
+no warnings 'experimental::signatures';
+
# A Range_Map is a range list in which the range values (called maps) are
# significant, and hence shouldn't be manipulated by our other code, which
# could be ambiguous or lose things. For example, in taking the union of two
@@ -5329,21 +5202,14 @@ use parent '-norequire', '_Range_List_Base';
{ # Closure
- sub add_map {
+ sub add_map($self, @add) {
# Add a range containing a mapping value to the list
-
- my $self = shift;
- # Rest of parameters passed on
-
- return $self->_add_delete('+', @_);
+ return $self->_add_delete('+', @add);
}
- sub replace_map {
+ sub replace_map($self, @list) {
# Replace a range
-
- my $self = shift;
-
- return $self->_add_delete('+', @_, Replace => $UNCONDITIONALLY);
+ return $self->_add_delete('+', @list, Replace => $UNCONDITIONALLY);
}
sub add_duplicate {
@@ -5363,6 +5229,12 @@ use parent '-norequire', '_Range_List_Base';
package _Base_Table;
+use strict;
+use warnings;
+
+use feature 'signatures';
+no warnings 'experimental::signatures';
+
# A table is the basic data structure that gets written out into a file for
# use by the Perl core. This is the abstract base class implementing the
# common elements from the derived ones. A list of the methods to be
@@ -5799,7 +5671,7 @@ END
return;
}
- sub short_name {
+ sub short_name($self, $nominal_length_ptr=undef) {
# Returns a name suitable for use as the base part of a file name.
# That is, shorter wins. It can return undef if there is no suitable
# name. The name has all non-essential underscores removed.
@@ -5814,10 +5686,6 @@ END
# Any name with alphabetics is preferred over an all numeric one, even
# if longer.
- my $self = shift;
- my $nominal_length_ptr = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
# For efficiency, don't recalculate, but this means that adding new
@@ -5908,55 +5776,36 @@ END
return $short_name{$addr};
}
- sub external_name {
+ sub external_name($self) {
# Returns the external name that this table should be known by. This
# is usually the short_name, but not if the short_name is undefined,
# in which case the external_name is arbitrarily set to the
# underscore.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $short = $self->short_name;
return $short if defined $short;
return '_';
}
- sub add_description { # Adds the parameter as a short description.
-
- my $self = shift;
- my $description = shift;
- chomp $description;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub add_description($self, $description) { # Adds the parameter as a short description.
no overloading;
push @{$description{pack 'J', $self}}, $description;
return;
}
- sub add_note { # Adds the parameter as a short note.
-
- my $self = shift;
- my $note = shift;
- chomp $note;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub add_note($self, $note) { # Adds the parameter as a short note.
no overloading;
push @{$note{pack 'J', $self}}, $note;
return;
}
- sub add_comment { # Adds the parameter as a comment.
+ sub add_comment($self, $comment) { # Adds the parameter as a comment.
return unless $debugging_build;
- my $self = shift;
- my $comment = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
chomp $comment;
no overloading;
@@ -5965,14 +5814,11 @@ END
return;
}
- sub comment {
+ sub comment($self) {
# Return the current comment for this table. If called in list
# context, returns the array of comments. In scalar, returns a string
# of each element joined together with a period ending each.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
my @list = @{$comment{$addr}};
return @list if wantarray;
@@ -5986,14 +5832,11 @@ END
return $return;
}
- sub initialize {
+ sub initialize($self, $initialization) {
# Initialize the table with the argument which is any valid
# initialization for range lists.
- my $self = shift;
my $addr = do { no overloading; pack 'J', $self; };
- my $initialization = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
# Replace the current range list with a new one of the same exact
# type.
@@ -6004,21 +5847,16 @@ END
}
- sub header {
+ sub header($self) {
# The header that is output for the table in the file it is written
# in.
-
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $return = "";
$return .= $DEVELOPMENT_ONLY if $compare_versions;
$return .= $HEADER;
return $return;
}
- sub merge_single_annotation_line ($$$) {
- my ($output, $annotation, $annotation_column) = @_;
+ sub merge_single_annotation_line ($output, $annotation, $annotation_column) {
# This appends an annotation comment, $annotation, to $output,
# starting in or after column $annotation_column, removing any
@@ -6039,19 +5877,18 @@ END
return Text::Tabs::unexpand $output;
}
- sub write {
+ sub write($self, $use_adjustments=0, $suppress_value=0) {
# Write a representation of the table to its file. It calls several
# functions furnished by sub-classes of this abstract base class to
# handle non-normal ranges, to add stuff before the table, and at its
# end. If the table is to be written so that adjustments are
# required, this does that conversion.
- my $self = shift;
- my $use_adjustments = shift; # ? output in adjusted format or not
- my $suppress_value = shift; # Optional, if the value associated with
- # a range equals this one, don't write
- # the range
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+
+ # $use_adjustments ? output in adjusted format or not
+ # $suppress_value Optional, if the value associated with
+ # a range equals this one, don't write
+ # the range
my $addr = do { no overloading; pack 'J', $self; };
my $write_as_invlist = $write_as_invlist{$addr};
@@ -6084,7 +5921,7 @@ END
# utf8.c, which can't really deal with empty tables, but it can
# deal with a table that matches nothing, as the inverse of 'All'
# does.
- push @OUT, "!utf8::All\n";
+ push @OUT, "!Unicode::UCD::All\n";
}
elsif ($self->name eq 'N'
@@ -6102,7 +5939,7 @@ END
&& $range_list{$addr}->ranges > 15
&& ! $annotate) # Under --annotate, want to see everything
{
- push @OUT, "!utf8::" . $self->property->name . "\n";
+ push @OUT, "!Unicode::UCD::" . $self->property->name . "\n";
}
else {
my $range_size_1 = $range_size_1{$addr};
@@ -6706,12 +6543,9 @@ END
return;
}
- sub set_status { # Set the table's status
- my $self = shift;
- my $status = shift; # The status enum value
- my $info = shift; # Any message associated with it.
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub set_status($self, $status, $info) { # Set the table's status
+ # status The status enum value
+ # info Any message associated with it.
my $addr = do { no overloading; pack 'J', $self; };
$status{$addr} = $status;
@@ -6719,12 +6553,7 @@ END
return;
}
- sub set_fate { # Set the fate of a table
- my $self = shift;
- my $fate = shift;
- my $reason = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub set_fate($self, $fate, $reason=undef) { # Set the fate of a table
my $addr = do { no overloading; pack 'J', $self; };
return if $fate{$addr} == $fate; # If no-op
@@ -6755,14 +6584,10 @@ END
return;
}
- sub lock {
+ sub lock($self) {
# Don't allow changes to the table from now on. This stores a stack
# trace of where it was called, so that later attempts to modify it
# can immediately show where it got locked.
-
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
$locked{$addr} = "";
@@ -6784,13 +6609,9 @@ END
return;
}
- sub carp_if_locked {
+ sub carp_if_locked($self) {
# Return whether a table is locked or not, and, by the way, complain
# if is locked
-
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
return 0 if ! $locked{$addr};
@@ -6798,12 +6619,9 @@ END
return 1;
}
- sub set_file_path { # Set the final directory path for this table
- my $self = shift;
- # Rest of parameters passed on
-
+ sub set_file_path($self, @path) { # Set the final directory path for this table
no overloading;
- @{$file_path{pack 'J', $self}} = @_;
+ @{$file_path{pack 'J', $self}} = @path;
return
}
@@ -7026,29 +6844,20 @@ sub trace { return main::trace(@_); }
return;
}
- sub append_to_body {
+ sub append_to_body($self) {
# Adds to the written HERE document of the table's body any anomalous
# entries in the table..
-
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
return "" unless @{$anomalous_entries{$addr}};
return join("\n", @{$anomalous_entries{$addr}}) . "\n";
}
- sub map_add_or_replace_non_nulls {
+ sub map_add_or_replace_non_nulls($self, $other) {
# This adds the mappings in the table $other to $self. Non-null
# mappings from $other override those in $self. It essentially merges
# the two tables, with the second having priority except for null
# mappings.
-
- my $self = shift;
- my $other = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
return if $self->carp_if_locked;
if (! $other->isa(__PACKAGE__)) {
@@ -7081,16 +6890,10 @@ sub trace { return main::trace(@_); }
return;
}
- sub set_default_map {
+ sub set_default_map($self, $map, $use_full_name=0) {
# Define what code points that are missing from the input files should
# map to. The optional second parameter 'full_name' indicates to
# force using the full name of the map instead of its standard name.
-
- my $self = shift;
- my $map = shift;
- my $use_full_name = shift // 0;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
if ($use_full_name && $use_full_name ne 'full_name') {
Carp::my_carp_bug("Second parameter to set_default_map() if"
. " present, must be 'full_name'");
@@ -7139,12 +6942,8 @@ sub trace { return main::trace(@_); }
return;
}
- sub to_output_map {
+ sub to_output_map($self) {
# Returns boolean: should we write this map table?
-
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
# If overridden, use that
@@ -7180,22 +6979,15 @@ sub trace { return main::trace(@_); }
return $INTERNAL_MAP;
}
- sub inverse_list {
+ sub inverse_list($self) {
# Returns a Range_List that is gaps of the current table. That is,
# the inversion
-
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $current = Range_List->new(Initialize => $self->_range_list,
Owner => $self->property);
return ~ $current;
}
- sub header {
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub header($self) {
my $return = $self->SUPER::header();
if ($self->to_output_map >= $INTERNAL_MAP) {
@@ -7225,15 +7017,12 @@ END
return $return;
}
- sub set_final_comment {
+ sub set_final_comment($self) {
# Just before output, create the comment that heads the file
# containing this table.
return unless $debugging_build;
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# No sense generating a comment if aren't going to write it out.
return if ! $self->to_output_map;
@@ -7412,14 +7201,10 @@ END
# to output special ranges.
my @multi_code_point_maps; # Map is to more than one code point.
- sub handle_special_range {
+ sub handle_special_range($self, $range) {
# Called in the middle of write when it finds a range it doesn't know
# how to handle.
- my $self = shift;
- my $range = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
my $type = $range->type;
@@ -7467,9 +7252,23 @@ END
push @{$loose_names_ending_in_code_point{$squeezed}->{'high'}},
$high;
+ # Calculate the set of legal characters in names of this
+ # series. It includes every character in the name prefix.
+ my %legal;
+ $legal{$_} = 1 for split //, $map;
+
+ # Plus the hex code point chars, blank, and minus. Also \n
+ # can show up as being required due to anchoring
+ for my $i ('0' .. '9', 'A' .. 'F', '-', ' ', "\n") {
+ $legal{$i} = 1;
+ }
+ my $legal = join "", sort { $a cmp $b } keys %legal;
+
+ # The legal chars can be used in match optimizations
push @code_points_ending_in_code_point, { low => $low,
high => $high,
- name => $map
+ name => $map,
+ legal => $legal,
};
}
}
@@ -7540,7 +7339,7 @@ END
return;
}
- sub pre_body {
+ sub pre_body($self) {
# Returns the string that should be output in the file before the main
# body of this table. It isn't called until the main body is
# calculated, saving a pass. The string includes some hash entries
@@ -7548,9 +7347,6 @@ END
# be for all ranges missing from it. It also includes any code points
# which have map_types that don't go in the main table.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
my $name = $self->property->swash_name;
@@ -7576,7 +7372,7 @@ END
# respective header and trailer
my $specials_name = "";
if (@multi_code_point_maps) {
- $specials_name = "utf8::ToSpec$name";
+ $specials_name = "Unicode::UCD::ToSpec$name";
$pre_body .= <<END;
# Some code points require special handling because their mappings are each to
@@ -7614,21 +7410,21 @@ END
$return .= <<END;
-# The name this swash is to be known by, with the format of the mappings in
+# The name this table is to be known by, with the format of the mappings in
# the main body of the table, and what all code points missing from this file
# map to.
-\$utf8::SwashInfo{'To$name'}{'format'} = '$format'; # $map_table_formats{$format}
+\$Unicode::UCD::SwashInfo{'To$name'}{'format'} = '$format'; # $map_table_formats{$format}
END
if ($specials_name) {
$return .= <<END;
-\$utf8::SwashInfo{'To$name'}{'specials_name'} = '$specials_name'; # Name of hash of special mappings
+\$Unicode::UCD::SwashInfo{'To$name'}{'specials_name'} = '$specials_name'; # Name of hash of special mappings
END
}
my $default_map = $default_map{$addr};
# For $CODE_POINT default maps and using adjustments, instead the default
# becomes zero.
- $return .= "\$utf8::SwashInfo{'To$name'}{'missing'} = '"
+ $return .= "\$Unicode::UCD::SwashInfo{'To$name'}{'missing'} = '"
. (($output_adjusted && $default_map eq $CODE_POINT)
? "0"
: $default_map)
@@ -7647,12 +7443,9 @@ END
return $return;
}
- sub write {
+ sub write($self) {
# Write the table to the file.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
# Clear the temporaries
@@ -7797,7 +7590,7 @@ use parent '-norequire', '_Base_Table';
# two tables are unrelated but equivalent, one is arbitrarily chosen as the
# 'leader', and the others are 'equivalents'. This concept is useful
# to minimize the number of tables written out. Only one file is used for
-# any identical set of code points, with entries in Heavy.pl mapping all
+# any identical set of code points, with entries in UCD.pl mapping all
# the involved tables to it.
#
# Related tables will always be identical; we set them up to be so. Thus
@@ -8116,14 +7909,10 @@ sub trace { return main::trace(@_); }
return;
}
- sub is_set_equivalent_to {
+ sub is_set_equivalent_to($self, $other=undef) {
# Return boolean of whether or not the other object is a table of this
# type and has been marked equivalent to this one.
- my $self = shift;
- my $other = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
return 0 if ! defined $other; # Can happen for incomplete early
# releases
unless ($other->isa(__PACKAGE__)) {
@@ -8254,16 +8043,10 @@ sub trace { return main::trace(@_); }
return;
}
- sub set_complement {
+ sub set_complement($self, $other) {
# Set $self to be the complement of the parameter table. $self is
# locked, as what it contains should all come from the other table.
- my $self = shift;
- my $other = shift;
-
- my %args = @_;
- Carp::carp_extra_args(\%args) if main::DEBUG && %args;
-
if ($other->complement != 0) {
Carp::my_carp_bug("Can't set $self to be the complement of $other, which itself is the complement of " . $other->complement);
return;
@@ -8283,18 +8066,14 @@ sub trace { return main::trace(@_); }
return;
}
- sub add_range { # Add a range to the list for this table.
- my $self = shift;
+ sub add_range($self, @range) { # Add a range to the list for this table.
# Rest of parameters passed on
return if $self->carp_if_locked;
- return $self->_range_list->add_range(@_);
+ return $self->_range_list->add_range(@range);
}
- sub header {
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub header($self) {
# All match tables are to be used only by the Perl core.
return $self->SUPER::header() . $INTERNAL_ONLY_HEADER;
}
@@ -8307,12 +8086,7 @@ sub trace { return main::trace(@_); }
return
}
- sub set_fate {
- my $self = shift;
- my $fate = shift;
- my $reason = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub set_fate($self, $fate, $reason=undef) {
$self->SUPER::set_fate($fate, $reason);
# All children share this fate
@@ -8551,14 +8325,12 @@ sub trace { return main::trace(@_); }
return $definition;
}
- sub write {
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ sub write($self) {
return $self->SUPER::write(0); # No adjustments
}
- sub set_final_comment {
+ # $leader - Should only be called on the leader table of an equivalent group
+ sub set_final_comment($leader) {
# This creates a comment for the file that is to hold the match table
# $self. It is somewhat convoluted to make the English read nicely,
# but, heh, it's just a comment.
@@ -8568,10 +8340,6 @@ sub trace { return main::trace(@_); }
return unless $debugging_build;
- my $leader = shift; # Should only be called on the leader table of
- # an equivalent group
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $leader; };
if ($leader{$addr} != $leader) {
@@ -8996,7 +8764,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
return;
}
- sub property_ref {
+ sub property_ref($name) {
# This is a package subroutine, not called as a method.
# If the single parameter is a literal '*' it returns a list of all
# defined properties.
@@ -9011,10 +8779,6 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
# result, the input name is added to the list so future calls won't
# have to do the conversion again.
- my $name = shift;
-
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
if (! defined $name) {
Carp::my_carp_bug("Undefined input property. No action taken.");
return;
@@ -9094,6 +8858,13 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
main::set_access('pre_declared_maps',
\%pre_declared_maps, 'r', 's');
+ my %match_subdir;
+ # For properties whose shortest names are too long for a DOS 8.3
+ # filesystem to distinguish between, this is used to manually give short
+ # names for the directory name immediately under $match_tables that the
+ # match tables for this property should be placed in.
+ main::set_access('match_subdir', \%match_subdir, 'r');
+
my %has_dependency;
# A boolean that gives whether some table somewhere is defined as the
# complement of a table in this property. This is a crude, but currently
@@ -9135,6 +8906,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
# values should be defined for all
# properties, except those overriding this
// $v_version ge v5.1.0;
+ $match_subdir{$addr} = delete $args{'Match_SubDir'};
# Rest of parameters passed on.
@@ -9170,14 +8942,8 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
return "Property '" . shift->full_name . "'";
}
- sub _minus_and_equal {
+ sub _minus_and_equal($self, $other, $reversed=0) {
# Remove a single code point from the map table of a property.
-
- my $self = shift;
- my $other = shift;
- my $reversed = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
if (ref $other) {
Carp::my_carp_bug("Bad news. Can't cope with a "
. ref($other)
@@ -9277,13 +9043,8 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
return $table;
}
- sub delete_match_table {
+ sub delete_match_table($self, $table_to_remove) {
# Delete the table referred to by $2 from the property $1.
-
- my $self = shift;
- my $table_to_remove = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
# Remove all names that refer to it.
@@ -9296,14 +9057,9 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
return;
}
- sub table {
+ sub table($self, $name) {
# Return a pointer to the match table (with name given by the
# parameter) associated with this property; undef if none.
-
- my $self = shift;
- my $name = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
return $table_ref{$addr}{$name} if defined $table_ref{$addr}{$name};
@@ -9339,7 +9095,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
return $map_directory;
}
- sub swash_name {
+ sub swash_name($self) {
# Return the name that is used to both:
# 1) Name the file that the map table is written to.
# 2) The name of swash related stuff inside that file.
@@ -9349,10 +9105,6 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
# but otherwise the standard name is used. This is different from the
# external_name, so that the rest of the files, like in lib can use
# the standard name always, without regard to historical precedent.
-
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
# Swash names are used only on either
@@ -9370,13 +9122,10 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
return $map{$addr}->external_name;
}
- sub to_create_match_tables {
+ sub to_create_match_tables($self) {
# Returns a boolean as to whether or not match tables should be
# created for this property.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# The whole point of this pseudo property is match tables.
return 1 if $self == $perl;
@@ -9392,16 +9141,12 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
return 1;
}
- sub property_add_or_replace_non_nulls {
+ sub property_add_or_replace_non_nulls($self, $other) {
# This adds the mappings in the property $other to $self. Non-null
# mappings from $other override those in $self. It essentially merges
# the two properties, with the second having priority except for null
# mappings.
- my $self = shift;
- my $other = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
if (! $other->isa(__PACKAGE__)) {
Carp::my_carp_bug("$other should be a "
. __PACKAGE__
@@ -9432,17 +9177,13 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
}
}
- sub set_type {
+ sub set_type($self, $type) {
# Set the type of the property. Mostly this is figured out by the
# data in the table. But this is used to set it explicitly. The
# reason it is not a standard accessor is that when setting a binary
# property, we need to make sure that all the true/false aliases are
# present, as they were omitted in early Unicode releases.
- my $self = shift;
- my $type = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
if ($type != $ENUM
&& $type != $BINARY
&& $type != $FORCED_BINARY
@@ -9534,15 +9275,12 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
return $map{$addr}->add_map($start, $end, $map, @_);
}
- sub compute_type {
+ sub compute_type($self) {
# Compute the type of the property: $ENUM, $STRING, or $BINARY. This
# should be called after the property is mostly filled with its maps.
# We have been keeping track of what the property values have been,
# and now have the necessary information to figure out the type.
- my $self = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $addr = do { no overloading; pack 'J', $self; };
my $type = $type{$addr};
@@ -9597,12 +9335,8 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace }
return;
}
- sub set_fate {
- my $self = shift;
- my $fate = shift;
- my $reason = shift; # Ignored unless suppressing
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
+ # $reaons - Ignored unless suppressing
+ sub set_fate($self, $fate, $reason=undef) {
my $addr = do { no overloading; pack 'J', $self; };
if ($fate >= $SUPPRESSED) {
$why_suppressed{$self->complete_name} = $reason;
@@ -9702,20 +9436,20 @@ sub display_chr {
return "\x{25CC}$chr";
}
-sub join_lines($) {
+sub join_lines($return) {
# Returns lines of the input joined together, so that they can be folded
# properly.
# This causes continuation lines to be joined together into one long line
# for folding. A continuation line is any line that doesn't begin with a
# space or "\b" (the latter is stripped from the output). This is so
- # lines can be be in a HERE document so as to fit nicely in the terminal
+ # lines can be in a HERE document so as to fit nicely in the terminal
# width, but be joined together in one long line, and then folded with
# indents, '#' prefixes, etc, properly handled.
# A blank separates the joined lines except if there is a break; an extra
# blank is inserted after a period ending a line.
# Initialize the return with the first line.
- my ($return, @lines) = split "\n", shift;
+ my ( @lines ) = split "\n", $return;
# If the first line is null, it was an empty line, add the \n back in
$return = "\n" if $return eq "";
@@ -9765,7 +9499,7 @@ sub join_lines($) {
return $return;
}
-sub simple_fold($;$$$) {
+sub simple_fold( $line, $prefix="", $hanging_indent=0, $right_margin=0) {
# Returns a string of the input (string or an array of strings) folded
# into multiple-lines each of no more than $MAX_LINE_WIDTH characters plus
# a \n
@@ -9778,22 +9512,11 @@ sub simple_fold($;$$$) {
local $to_trace = 0 if main::DEBUG;
- my $line = shift;
- my $prefix = shift; # Optional string to prepend to each output
- # line
- $prefix = "" unless defined $prefix;
-
- my $hanging_indent = shift; # Optional number of spaces to indent
- # continuation lines
- $hanging_indent = 0 unless $hanging_indent;
-
- my $right_margin = shift; # Optional number of spaces to narrow the
- # total width by.
- $right_margin = 0 unless defined $right_margin;
-
- # Call carp with the 'nofold' option to avoid it from trying to call us
- # recursively
- Carp::carp_extra_args(\@_, 'nofold') if main::DEBUG && @_;
+ # $prefix Optional string to prepend to each output line
+ # $hanging_indent Optional number of spaces to indent
+ # continuation lines
+ # $right_margin Optional number of spaces to narrow the
+ # total width by.
# The space available doesn't include what's automatically prepended
# to each line, or what's reserved on the right.
@@ -9864,6 +9587,9 @@ sub simple_fold($;$$$) {
(?: # acceptable break:
[ \s = ] # space or equal
| - (?! [.0-9] ) # or non-unary minus.
+ | [^\\[(] (?= \\ )# break before single backslash
+ # not immediately after opening
+ # punctuation
) # $1 includes the character
)/x)
{
@@ -9885,7 +9611,7 @@ sub simple_fold($;$$$) {
# access the files that this program is creating.
elsif ($segment !~ /\a/
&& ($segment =~ s/_/_\a/g
- || $segment =~ s/ ( [a-z] ) (?= [A-Z] )/$1\a/xg))
+ || $segment =~ s/ ( (?!\\) [a-z] ) (?= [A-Z] )/$1\a/xg))
{
# Here were able to find at least one place to insert
# our substitute soft hyphen. Find the right-most one
@@ -9945,8 +9671,7 @@ sub property_ref { # Returns a reference to a property object.
return Property::property_ref(@_);
}
-sub force_unlink ($) {
- my $filename = shift;
+sub force_unlink ($filename) {
return unless file_exists($filename);
return if CORE::unlink($filename);
@@ -9956,16 +9681,11 @@ sub force_unlink ($) {
return;
}
-sub write ($$@) {
+sub write ($file, $use_utf8, @lines) {
# Given a filename and references to arrays of lines, write the lines of
# each array to the file
# Filename can be given as an arrayref of directory names
- return Carp::carp_too_few_args(\@_, 3) if main::DEBUG && @_ < 3;
-
- my $file = shift;
- my $use_utf8 = shift;
-
# Get into a single string if an array, and get rid of, in Unix terms, any
# leading '.'
$file= File::Spec->join(@$file) if ref $file eq 'ARRAY';
@@ -9987,7 +9707,7 @@ sub write ($$@) {
binmode $OUT, ":utf8" if $use_utf8;
- while (defined (my $lines_ref = shift)) {
+ foreach my $lines_ref (@lines) {
unless (@$lines_ref) {
Carp::my_carp("An array of lines for writing to file '$file' is empty; writing it anyway;");
}
@@ -10002,11 +9722,10 @@ sub write ($$@) {
}
-sub Standardize($) {
+sub Standardize($name=undef) {
# This converts the input name string into a standardized equivalent to
# use internally.
- my $name = shift;
unless (defined $name) {
Carp::my_carp_bug("Standardize() called with undef. Returning undef.");
return;
@@ -10028,7 +9747,7 @@ sub Standardize($) {
return $name;
}
-sub standardize ($) {
+sub standardize ($str=undef) {
# Returns a lower-cased standardized name, without underscores. This form
# is chosen so that it can distinguish between any real versus superficial
# Unicode name differences. It relies on the fact that Unicode doesn't
@@ -10037,23 +9756,19 @@ sub standardize ($) {
# names (the Name property), as they mostly, but not always follow these
# rules.
- my $name = Standardize(shift);
+ my $name = Standardize($str);
return if !defined $name;
$name =~ s/ (?<= .) _ (?= . ) //xg;
return lc $name;
}
-sub utf8_heavy_name ($$) {
- # Returns the name that utf8_heavy.pl will use to find a table. XXX
- # perhaps this function should be placed somewhere, like Heavy.pl so that
- # utf8_heavy can use it directly without duplicating code that can get
+sub UCD_name ($table, $alias) {
+ # Returns the name that Unicode::UCD will use to find a table. XXX
+ # perhaps this function should be placed somewhere, like UCD.pm so that
+ # Unicode::UCD can use it directly without duplicating code that can get
# out-of sync.
- my $table = shift;
- my $alias = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my $property = $table->property;
$property = ($property == $perl)
? "" # 'perl' is never explicitly stated
@@ -10070,23 +9785,19 @@ sub utf8_heavy_name ($$) {
{ # Closure
- my $indent_increment = " " x (($debugging_build) ? 2 : 0);
+ my $indent_increment = " " x ( $debugging_build ? 2 : 0);
%main::already_output = ();
$main::simple_dumper_nesting = 0;
- sub simple_dumper {
+ sub simple_dumper( $item, $indent = "" ) {
# Like Simple Data::Dumper. Good enough for our needs. We can't use
# the real thing as we have to run under miniperl.
# It is designed so that on input it is at the beginning of a line,
# and the final thing output in any call is a trailing ",\n".
- my $item = shift;
- my $indent = shift;
- $indent = "" if ! $debugging_build || ! defined $indent;
-
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+ $indent = "" if ! $debugging_build;
# nesting level is localized, so that as the call stack pops, it goes
# back to the prior value.
@@ -10095,8 +9806,6 @@ sub utf8_heavy_name ($$) {
$main::simple_dumper_nesting++;
#print STDERR __LINE__, ": $main::simple_dumper_nesting: $indent$item\n";
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# Determine the indent for recursive calls.
my $next_indent = $indent . $indent_increment;
@@ -10235,13 +9944,10 @@ sub utf8_heavy_name ($$) {
}
}
-sub dump_inside_out {
+sub dump_inside_out( $object, $fields_ref ) {
# Dump inside-out hashes in an object's state by converting them to a
# regular hash and then calling simple_dumper on that.
- my $object = shift;
- my $fields_ref = shift;
-
my $addr = do { no overloading; pack 'J', $object; };
my %hash;
@@ -10252,17 +9958,10 @@ sub dump_inside_out {
return simple_dumper(\%hash, @_);
}
-sub _operator_dot {
+sub _operator_dot($self, $other="", $reversed=0) {
# Overloaded '.' method that is common to all packages. It uses the
# package's stringify method.
- my $self = shift;
- my $other = shift;
- my $reversed = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
- $other = "" unless defined $other;
-
foreach my $which (\$self, \$other) {
next unless ref $$which;
if ($$which->can('_operator_stringify')) {
@@ -10279,16 +9978,9 @@ sub _operator_dot {
: "$self$other";
}
-sub _operator_dot_equal {
+sub _operator_dot_equal($self, $other="", $reversed=0) {
# Overloaded '.=' method that is common to all packages.
- my $self = shift;
- my $other = shift;
- my $reversed = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
- $other = "" unless defined $other;
-
if ($reversed) {
return $other .= "$self";
}
@@ -10297,38 +9989,31 @@ sub _operator_dot_equal {
}
}
-sub _operator_equal {
+sub _operator_equal($self, $other, @) {
# Generic overloaded '==' routine. To be equal, they must be the exact
# same object
- my $self = shift;
- my $other = shift;
-
return 0 unless defined $other;
return 0 unless ref $other;
no overloading;
return $self == $other;
}
-sub _operator_not_equal {
- my $self = shift;
- my $other = shift;
-
+sub _operator_not_equal($self, $other, @) {
return ! _operator_equal($self, $other);
}
-sub substitute_PropertyAliases($) {
+sub substitute_PropertyAliases($file_object) {
# Deal with early releases that don't have the crucial PropertyAliases.txt
# file.
- my $file_object = shift;
$file_object->insert_lines(get_old_property_aliases());
process_PropertyAliases($file_object);
}
-sub process_PropertyAliases($) {
+sub process_PropertyAliases($file) {
# This reads in the PropertyAliases.txt file, which contains almost all
# the character properties in Unicode and their equivalent aliases:
# scf ; Simple_Case_Folding ; sfc
@@ -10337,9 +10022,6 @@ sub process_PropertyAliases($) {
# Field 1 is the full name.
# Any succeeding ones are other accepted names.
- my $file= shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# Add any cjk properties that may have been defined.
$file->insert_lines(@cjk_properties);
@@ -10374,12 +10056,9 @@ sub process_PropertyAliases($) {
return;
}
-sub finish_property_setup {
+sub finish_property_setup($file) {
# Finishes setting up after PropertyAliases.
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# This entry was missing from this file in earlier Unicode versions
if (-e 'Jamo.txt' && ! defined property_ref('JSN')) {
Property->new('JSN', Full_Name => 'Jamo_Short_Name');
@@ -10668,17 +10347,16 @@ END
return @return;
}
-sub substitute_PropValueAliases($) {
+sub substitute_PropValueAliases($file_object) {
# Deal with early releases that don't have the crucial
# PropValueAliases.txt file.
- my $file_object = shift;
$file_object->insert_lines(get_old_property_value_aliases());
process_PropValueAliases($file_object);
}
-sub process_PropValueAliases {
+sub process_PropValueAliases($file) {
# This file contains values that properties look like:
# bc ; AL ; Arabic_Letter
# blk; n/a ; Greek_And_Coptic ; Greek
@@ -10700,9 +10378,6 @@ sub process_PropValueAliases {
# # @missing: 0000..10FFFF; ISO_Comment; <none>
# # @missing: 0000..10FFFF; Lowercase_Mapping; <code point>
- my $file= shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
if ($v_version lt 4.0.0) {
$file->insert_lines(split /\n/, <<'END'
Hangul_Syllable_Type; L ; Leading_Jamo
@@ -11152,16 +10827,13 @@ END
return @return;
}
-sub process_NormalizationsTest {
+sub process_NormalizationsTest($file) {
# Each line looks like:
# source code point; NFC; NFD; NFKC; NFKD
# e.g.
# 1E0A;1E0A;0044 0307;1E0A;0044 0307;
- my $file= shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# Process each line of the file ...
while ($file->next_line) {
@@ -11179,7 +10851,7 @@ sub process_NormalizationsTest {
} # End of looping through the file
}
-sub output_perl_charnames_line ($$) {
+sub output_perl_charnames_line ($a, $b) {
# Output the entries in Perl_charnames specially, using 5 digits instead
# of four. This makes the entries a constant length, and simplifies
@@ -11187,7 +10859,7 @@ sub output_perl_charnames_line ($$) {
# ordinals, but they are all private use or noncharacters which do not
# have names, so won't be in this table.
- return sprintf "%05X\t%s\n", $_[0], $_[1];
+ return sprintf "%05X\n%s\n\n", $_[0], $_[1];
}
{ # Closure
@@ -11200,7 +10872,7 @@ sub output_perl_charnames_line ($$) {
my $PSEUDO_MAP_TYPE = 'pseudo_map_type';
my $MISSINGS = 'missings';
- sub process_generic_property_file {
+ sub process_generic_property_file($file) {
# This processes a file containing property mappings and puts them
# into internal map tables. It should be used to handle any property
# files that have mappings from a code point or range thereof to
@@ -11238,9 +10910,6 @@ sub output_perl_charnames_line ($$) {
# so that only one of many synonyms is stored. The Unicode input
# files do use some multiple synonyms.
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my %property_info; # To keep track of what properties
# have already had entries in the
# current file, and info about each,
@@ -11696,9 +11365,7 @@ END
# A similar mechanism is used to tell it that the map is of a non-default
# type.
- sub setup_UnicodeData { # Called before any lines of the input are read
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+ sub setup_UnicodeData($file) { # Called before any lines of the input are read
# Create a new property specially located that is a combination of
# various Name properties: Name, Unicode_1_Name, Named Sequences, and
@@ -11796,7 +11463,7 @@ END
my @fields; # The input fields;
my @previous_fields; # And those from the previous call
- sub filter_UnicodeData_line {
+ sub filter_UnicodeData_line($file) {
# Handle a single input line from UnicodeData.txt; see comments above
# Conceptually this takes a single line from the file containing N
# properties, and converts it into N lines with one property per line,
@@ -11806,9 +11473,6 @@ END
# and only emits lines when necessary. This is about an order of
# magnitude fewer lines emitted.
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# $_ contains the input line.
# -1 in split means retain trailing null fields
(my $cp, @fields) = split /\s*;\s*/, $_, -1;
@@ -12141,13 +11805,10 @@ END
return;
}
- sub EOF_UnicodeData {
+ sub EOF_UnicodeData($file) {
# Called upon EOF to flush the buffers, and create the Hangul
# decomposition mappings if needed.
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# Flush the buffers.
foreach my $i (0 .. $last_field) {
$file->insert_adjusted_lines("$start[$i]..$previous_cp; $field_names[$i]; $previous_fields[$i]");
@@ -12191,7 +11852,7 @@ END
return;
}
- sub filter_v1_ucd {
+ sub filter_v1_ucd($file) {
# Fix UCD lines in version 1. This is probably overkill, but this
# fixes some glaring errors in Version 1 UnicodeData.txt. That file:
# 1) had many Hangul (U+3400 - U+4DFF) code points that were later
@@ -12201,7 +11862,7 @@ END
# taking the data from Version 2, verified by analyzing
# DAge.txt.
# 3) There is a syntax error in the entry for U+09F8 which could
- # cause problems for utf8_heavy, and so is changed. It's
+ # cause problems for Unicode::UCD, and so is changed. It's
# numeric value was simply a minus sign, without any number.
# (Eventually Unicode changed the code point to non-numeric.)
# 4) The decomposition types often don't match later versions
@@ -12228,9 +11889,6 @@ F900;<CJK Compatibility Ideograph, First>;Lo;0;L;;;;;N;;;;;
FA2D;<CJK Compatibility Ideograph, Last>;Lo;0;L;;;;;N;;;;;
END
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
#local $to_trace = 1 if main::DEBUG;
trace $_ if main::DEBUG && $to_trace;
@@ -12457,10 +12115,7 @@ END
}
} # End closure for UnicodeData
-sub process_GCB_test {
-
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+sub process_GCB_test($file) {
while ($file->next_line) {
push @backslash_X_tests, $_;
@@ -12469,10 +12124,7 @@ sub process_GCB_test {
return;
}
-sub process_LB_test {
-
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+sub process_LB_test($file) {
while ($file->next_line) {
push @LB_tests, $_;
@@ -12481,10 +12133,7 @@ sub process_LB_test {
return;
}
-sub process_SB_test {
-
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+sub process_SB_test($file) {
while ($file->next_line) {
push @SB_tests, $_;
@@ -12493,10 +12142,7 @@ sub process_SB_test {
return;
}
-sub process_WB_test {
-
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+sub process_WB_test($file) {
while ($file->next_line) {
push @WB_tests, $_;
@@ -12505,7 +12151,7 @@ sub process_WB_test {
return;
}
-sub process_NamedSequences {
+sub process_NamedSequences($file) {
# NamedSequences.txt entries are just added to an array. Because these
# don't look like the other tables, they have their own handler.
# An example:
@@ -12513,9 +12159,6 @@ sub process_NamedSequences {
#
# This just adds the sequence to an array for later handling
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
while ($file->next_line) {
my ($name, $sequence, @remainder) = split /\s*;\s*/, $_, -1;
if (@remainder) {
@@ -12524,11 +12167,13 @@ sub process_NamedSequences {
next;
}
- # Note single \t in keeping with special output format of
- # Perl_charnames. But it turns out that the code points don't have to
- # be 5 digits long, like the rest, based on the internal workings of
- # charnames.pm. This could be easily changed for consistency.
- push @named_sequences, "$sequence\t$name";
+ # Code points need to be 5 digits long like the other entries in
+ # Name.pl, for regcomp.c parsing; and the ones below 0x0100 need to be
+ # converted to native
+ $sequence = join " ", map { sprintf("%05X",
+ utf8::unicode_to_native(hex $_))
+ } split / /, $sequence;
+ push @named_sequences, "$sequence\n$name\n";
}
return;
}
@@ -12600,7 +12245,7 @@ sub filter_old_style_arabic_shaping {
my $uc;
my %special_casing_code_points;
- sub setup_special_casing {
+ sub setup_special_casing($file) {
# SpecialCasing.txt contains the non-simple case change mappings. The
# simple ones are in UnicodeData.txt, which should already have been
# read in to the full property data structures, so as to initialize
@@ -12617,9 +12262,6 @@ sub filter_old_style_arabic_shaping {
# relatively few entries in them that have different full mappings,
# and thus skip the simple mapping tables altogether.
- my $file= shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
$lc = property_ref('lc');
$tc = property_ref('tc');
$uc = property_ref('uc');
@@ -12686,7 +12328,7 @@ END
filter_special_casing_line(@_);
}
- sub filter_special_casing_line {
+ sub filter_special_casing_line($file) {
# Change the format of $_ from SpecialCasing.txt into something that
# the generic handler understands. Each input line contains three
# case mappings. This will generate three lines to pass to the
@@ -12701,9 +12343,6 @@ END
# Note the trailing semi-colon, unlike many of the input files. That
# means that there will be an extra null field generated by the split
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my @fields = split /\s*;\s*/, $_, -1; # -1 => retain trailing null
# fields
@@ -12797,13 +12436,10 @@ END
}
}
-sub filter_old_style_case_folding {
+sub filter_old_style_case_folding($file) {
# This transforms $_ containing the case folding style of 3.0.1, to 3.1
# and later style. Different letters were used in the earlier.
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my @fields = split /\s*;\s*/;
if ($fields[1] eq 'L') {
@@ -12832,7 +12468,7 @@ sub filter_old_style_case_folding {
# it takes no part in anything we do.
my $to_output_simple;
- sub setup_case_folding($) {
+ sub setup_case_folding {
# Read in the case foldings in CaseFolding.txt. This handles both
# simple and full case folding.
@@ -12854,7 +12490,7 @@ END
return;
}
- sub filter_case_folding_line {
+ sub filter_case_folding_line($file) {
# Called for each line in CaseFolding.txt
# Input lines look like:
# 0041; C; 0061; # LATIN CAPITAL LETTER A
@@ -12870,9 +12506,6 @@ END
# means that there will be an extra null field generated by the split
# below, which we ignore and hence is not an error.
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
my ($range, $type, $map, @remainder) = split /\s*;\s*/, $_, -1;
if (@remainder > 1 || (@remainder == 1 && $remainder[0] ne "" )) {
$file->carp_bad_line('Extra fields');
@@ -12960,11 +12593,9 @@ sub filter_jamo_line {
return;
}
-sub register_fraction($) {
+sub register_fraction($rational) {
# This registers the input rational number so that it can be passed on to
- # utf8_heavy.pl, both in rational and floating forms.
-
- my $rational = shift;
+ # Unicode::UCD, both in rational and floating forms.
my $floating = eval $rational;
@@ -13008,10 +12639,8 @@ sub register_fraction($) {
return;
}
-sub gcd($$) { # Greatest-common-divisor; from
+sub gcd($a, $b) { # Greatest-common-divisor; from
# http://en.wikipedia.org/wiki/Euclidean_algorithm
- my ($a, $b) = @_;
-
use integer;
while ($b != 0) {
@@ -13022,9 +12651,7 @@ sub gcd($$) { # Greatest-common-divisor; from
return $a;
}
-sub reduce_fraction($) {
- my $fraction_ref = shift;
-
+sub reduce_fraction($fraction_ref) {
# Reduce a fraction to lowest terms. The Unicode data may be reducible,
# hence this is needed. The argument is a reference to the
# string denoting the fraction, which must be of the form:
@@ -13052,7 +12679,7 @@ sub reduce_fraction($) {
return;
}
-sub filter_numeric_value_line {
+sub filter_numeric_value_line($file) {
# DNumValues contains lines of a different syntax than the typical
# property file:
# 0F33 ; -0.5 ; ; -1/2 # No TIBETAN DIGIT HALF ZERO
@@ -13061,9 +12688,6 @@ sub filter_numeric_value_line {
# typical, by filtering out the extra columns, and convert early version
# decimal numbers to strings that look like rational numbers.
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# Starting in 5.1, there is a rational field. Just use that, omitting the
# extra columns. Otherwise convert the decimal number in the second field
# to a rational, and omit extraneous columns.
@@ -13151,9 +12775,7 @@ sub filter_numeric_value_line {
{ # Closure
my %unihan_properties;
- sub construct_unihan {
-
- my $file_object = shift;
+ sub construct_unihan($file_object) {
return unless file_exists($file_object->file);
@@ -13283,7 +12905,7 @@ END
}
}
-sub filter_blocks_lines {
+sub filter_blocks_lines($file) {
# In the Blocks.txt file, the names of the blocks don't quite match the
# names given in PropertyValueAliases.txt, so this changes them so they
# do match: Blanks and hyphens are changed into underscores. Also makes
@@ -13291,9 +12913,6 @@ sub filter_blocks_lines {
#
# $_ is transformed to the correct value.
- my $file = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
if ($v_version lt v3.2.0) {
if (/FEFF.*Specials/) { # Bug in old versions: line wrongly inserted
$_ = "";
@@ -13336,7 +12955,7 @@ sub filter_blocks_lines {
# were probably not really official at that time, so should be
# ignored. You can easily modify things to skip all of them by
# changing this function to just set $_ to "", and return; and to skip
- # certain of them by by simply removing their declarations from
+ # certain of them by simply removing their declarations from
# get_old_property_aliases().
#
# Here is a list of all the ones that are thrown away:
@@ -13516,7 +13135,7 @@ sub filter_script_extensions_line {
}
sub setup_emojidata {
- my $prop_ref = Property->new('XPG',
+ my $prop_ref = Property->new('ExtPict',
Full_Name => 'Extended_Pictographic',
);
$prop_ref->set_fate($PLACEHOLDER,
@@ -13533,12 +13152,39 @@ sub filter_emojidata_line {
return;
}
-sub generate_hst {
+sub setup_IdStatus {
+ my $ids = Property->new('Identifier_Status',
+ Match_SubDir => 'IdStatus',
+ Default_Map => 'Restricted',
+ );
+ $ids->add_match_table('Allowed');
+}
- # Populates the Hangul Syllable Type property from first principles
+sub setup_IdType {
+ $idt = Property->new('Identifier_Type',
+ Match_SubDir => 'IdType',
+ Default_Map => 'Not_Character',
+ Format => $STRING_WHITE_SPACE_LIST,
+ );
+}
+
+sub filter_IdType_line {
- my $file= shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+ # Some code points have more than one type, separated by spaces on the
+ # input. For now, we just add everything as a property value. Later when
+ # we look for properties with format $STRING_WHITE_SPACE_LIST, we resolve
+ # things
+
+ my @fields = split /\s*;\s*/;
+ my $types = $fields[1];
+ $idt->add_match_table($types) unless defined $idt->table($types);
+
+ return;
+}
+
+sub generate_hst($file) {
+
+ # Populates the Hangul Syllable Type property from first principles
# These few ranges are hard-coded in.
$file->insert_lines(split /\n/, <<'END'
@@ -13584,13 +13230,10 @@ END
return;
}
-sub generate_GCB {
+sub generate_GCB($file) {
# Populates the Grapheme Cluster Break property from first principles
- my $file= shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# All these definitions are from
# http://www.unicode.org/reports/tr29/tr29-3.html with confirmation
# from http://www.unicode.org/reports/tr29/tr29-4.html
@@ -13642,16 +13285,12 @@ sub generate_GCB {
}
-sub fixup_early_perl_name_alias {
+sub fixup_early_perl_name_alias($file) {
# Different versions of Unicode have varying support for the name synonyms
# below. Just include everything. As of 6.1, all these are correct in
# the Unicode-supplied file.
- my $file= shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
-
# ALERT did not come along until 6.0, at which point it became preferred
# over BELL. By inserting it last in early releases, BELL is preferred
# over it; and vice-vers in 6.0
@@ -13668,7 +13307,7 @@ END
);
- # One might think that the the 'Unicode_1_Name' field, could work for most
+ # One might think that the 'Unicode_1_Name' field, could work for most
# of the above names, but sadly that field varies depending on the
# release. Version 1.1.5 had no names for any of the controls; Version
# 2.0 introduced names for the C0 controls, and 3.0 introduced C1 names.
@@ -13740,7 +13379,7 @@ sub finish_Unicode() {
# necessary.
# 2) Adds the mappings for code points missing from the files which have
# defaults specified for them.
- # 3) At this this point all mappings are known, so it computes the type of
+ # 3) At this point all mappings are known, so it computes the type of
# each property whose type hasn't been determined yet.
# 4) Calculates all the regular expression match tables based on the
# mappings.
@@ -13959,7 +13598,7 @@ END
}
# For Perl 5.6 compatibility, all properties matchable in regexes can
- # have an optional 'Is_' prefix. This is now done in utf8_heavy.pl.
+ # have an optional 'Is_' prefix. This is now done in Unicode::UCD.
# But warn if this creates a conflict with a (new) Unicode property
# name, although it appears that Unicode has made a decision never to
# begin a property name with 'Is_', so this shouldn't happen.
@@ -13976,6 +13615,51 @@ END
);
}
} # End of loop through aliases for this property
+
+
+ # Properties that have sets of values for some characters are now
+ # converted. For example, the Script_Extensions property started out
+ # as a clone of the Script property. But processing its data file
+ # caused some elements to be replaced with different data. (These
+ # elements were for the Common and Inherited properties.) This data
+ # is a qw() list of all the scripts that the code points in the given
+ # range are in. An example line is:
+ #
+ # 060C ; Arab Syrc Thaa # Po ARABIC COMMA
+ #
+ # Code executed earlier has created a new match table named "Arab Syrc
+ # Thaa" which contains 060C. (The cloned table started out with this
+ # code point mapping to "Common".) Now we add 060C to each of the
+ # Arab, Syrc, and Thaa match tables. Then we delete the now spurious
+ # "Arab Syrc Thaa" match table. This is repeated for all these tables
+ # and ranges. The map data is retained in the map table for
+ # reference, but the spurious match tables are deleted.
+ my $format = $property->format;
+ if (defined $format && $format eq $STRING_WHITE_SPACE_LIST) {
+ foreach my $table ($property->tables) {
+
+ # Space separates the entries which should go in multiple
+ # tables
+ next unless $table->name =~ /\s/;
+
+ # The list of the entries, hence the names of the tables that
+ # everything in this combo table should be added to.
+ my @list = split /\s+/, $table->name;
+
+ # Add the entries from the combo table to each individual
+ # table
+ foreach my $individual (@list) {
+ my $existing_table = $property->table($individual);
+
+ # This should only be necessary if this particular entry
+ # occurs only in combo with others.
+ $existing_table = $property->add_match_table($individual)
+ unless defined $existing_table;
+ $existing_table += $table;
+ }
+ $property->delete_match_table($table);
+ }
+ }
} # End of loop through all Unicode properties.
# Fill in the mappings that Unicode doesn't completely furnish. First the
@@ -14064,40 +13748,11 @@ END
Initialize => property_ref('cf'),
);
- # The Script_Extensions property started out as a clone of the Script
- # property. But processing its data file caused some elements to be
- # replaced with different data. (These elements were for the Common and
- # Inherited properties.) This data is a qw() list of all the scripts that
- # the code points in the given range are in. An example line is:
- # 060C ; Arab Syrc Thaa # Po ARABIC COMMA
- #
- # The code above has created a new match table named "Arab Syrc Thaa"
- # which contains 060C. (The cloned table started out with this code point
- # mapping to "Common".) Now we add 060C to each of the Arab, Syrc, and
- # Thaa match tables. Then we delete the now spurious "Arab Syrc Thaa"
- # match table. This is repeated for all these tables and ranges. The map
- # data is retained in the map table for reference, but the spurious match
- # tables are deleted.
-
+ # Mark the scx table as the parent of the corresponding sc table for those
+ # which are identical. This causes the pod for the script table to refer
+ # to the corresponding scx one. This is done after everything, so as to
+ # wait until the tables are stabilized before checking for equivalency.
if (defined $scx) {
- foreach my $table ($scx->tables) {
- next unless $table->name =~ /\s/; # All the new and only the new
- # tables have a space in their
- # names
- my @scripts = split /\s+/, $table->name;
- foreach my $script (@scripts) {
- my $script_table = $scx->table($script);
- $script_table += $table;
- }
- $scx->delete_match_table($table);
- }
-
- # Mark the scx table as the parent of the corresponding sc table for
- # those which are identical. This causes the pod for the script table
- # to refer to the corresponding scx one.
- #
- # This has to be in a separate loop from above, so as to wait until
- # the tables are stabilized before checking for equivalency.
if (defined $pod_directory) {
foreach my $table ($scx->tables) {
my $plain_sc_equiv = $script->table($table->name);
@@ -14408,7 +14063,7 @@ sub handle_compare_versions () {
$default_table = $property->table($default_map);
}
- # If some code points don't go back to the the grab-bag when they
+ # If some code points don't go back to the grab-bag when they
# are considered unassigned, exclude them from the list that does
# that.
my $this_delta = $delta;
@@ -15010,10 +14665,6 @@ sub compile_perl() {
Description =>
"Code points that are in some multiple character fold",
);
- my $non_final_fold = $perl->add_match_table(
- "_Perl_Non_Final_Folds",
- Description => "Code points that are in some multiple character fold, but not in the final position",
- );
if ($v_version lt v3.0.1) {
push @tables_that_may_be_empty, '_Perl_Folds_To_Multi_Char',
'_Perl_Is_In_Multi_Char_Fold',
@@ -15034,9 +14685,14 @@ sub compile_perl() {
my $found_locale_problematic = 0;
+ my $folded_count = @hex_folds;
+ if ($folded_count > 3) {
+ die Carp::my_carp("Maximum number of characters in a fold should be 3: Instead, it's $folded_count for U+" . sprintf "%04X", $range->start);
+ }
+
# Look at each of the folded-to characters...
- foreach my $i (0 .. @hex_folds - 1) {
- my $cp = hex $hex_folds[$i];
+ foreach my $i (1 .. $folded_count) {
+ my $cp = hex $hex_folds[$i-1];
$any_folds->add_range($cp, $cp);
# The fold is problematic if any of the folded-to characters is
@@ -15046,10 +14702,8 @@ sub compile_perl() {
$found_locale_problematic = 1;
}
- if (@hex_folds > 1) {
+ if ($folded_count > 1) {
$in_multi_fold->add_range($cp, $cp);
- next if $i < @hex_folds - 1;
- $non_final_fold->add_range($cp, $cp);
}
}
@@ -15234,7 +14888,7 @@ sub compile_perl() {
# Abbreviations go after everything else, so they are saved temporarily in
# a hash for later.
#
- # Everything else is added added afterwards, which preserves the input
+ # Everything else is added afterwards, which preserves the input
# ordering
foreach my $range ($alias->ranges) {
@@ -15553,7 +15207,7 @@ END
# created equivalence class whose name is a combination of the property
# and the old class name, leaving unchanged everything that doesn't match
# the non-UCD property.
- my $pictographic_emoji = property_ref('XPG');
+ my $pictographic_emoji = property_ref('ExtPict');
if (defined $pictographic_emoji) {
foreach my $base_property (property_ref('GCB'),
property_ref('WB'))
@@ -15563,7 +15217,7 @@ END
foreach my $i ($range->start .. $range->end) {
my $current = $property->value_of($i);
$current = $property->table($current)->short_name;
- $property->add_map($i, $i, 'XPG_' . $current,
+ $property->add_map($i, $i, 'ExtPict_' . $current,
Replace => $UNCONDITIONALLY);
}
}
@@ -15602,6 +15256,7 @@ END
}
$perl_lb->set_default_map('Alphabetic', 'full_name'); # XX -> AL
+ my $ea = property_ref('East_Asian_Width');
for my $range ($perl_lb->ranges) {
my $value = standardize($range->value);
@@ -15629,6 +15284,25 @@ END
}
}
}
+ elsif ( defined $ea
+ && ( $value eq standardize('Close_Parenthesis')
+ || $value eq standardize('Open_Punctuation')))
+ {
+ # Unicode 13 splits the OP and CP properties each into East Asian,
+ # and non-. We retain the (now somewhat misleading) names OP and
+ # CP for the non-East Asian variety, as there are very few East
+ # Asian ones.
+ my $replace = ($value eq standardize('Open_Punctuation'))
+ ? 'East_Asian_OP'
+ : 'East_Asian_CP';
+ for my $i ($range->start .. $range->end) {
+ my $ea_val = $ea->value_of($i);
+ if ($ea_val eq 'F' || $ea_val eq 'W' || $ea_val eq 'H') {
+ $perl_lb->add_map($i, $i, $replace,
+ Replace => $UNCONDITIONALLY);
+ }
+ }
+ }
}
# This property is a modification of the scx property
@@ -15997,14 +15671,12 @@ END
return;
}
-sub register_file_for_name($$$) {
+sub register_file_for_name($table, $directory_ref, $file) {
# Given info about a table and a datafile that it should be associated
# with, register that association
- my $table = shift;
- my $directory_ref = shift; # Array of the directory path for the file
- my $file = shift; # The file name in the final directory.
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+ # $directory_ref # Array of the directory path for the file
+ # $file # The file name in the final directory.
trace "table=$table, file=$file, directory=@$directory_ref, fate=", $table->fate if main::DEBUG && $to_trace;
@@ -16024,7 +15696,7 @@ sub register_file_for_name($$$) {
my $file = join '/', @path;
- # Create a hash entry for utf8_heavy to get the file that stores this
+ # Create a hash entry for Unicode::UCD to get the file that stores this
# property's map table
foreach my $alias ($table->aliases) {
my $name = $alias->name;
@@ -16036,7 +15708,7 @@ sub register_file_for_name($$$) {
}
}
- # And a way for utf8_heavy to find the proper key in the SwashInfo
+ # And a way for Unicode::UCD to find the proper key in the SwashInfo
# hash for this property.
$file_to_swash_name{$file} = "To" . $table->swash_name;
return;
@@ -16119,7 +15791,7 @@ sub register_file_for_name($$$) {
# goes through all aliases in the UCD that we generate regex match
# files for
foreach my $alias ($table->aliases) {
- my $standard = utf8_heavy_name($table, $alias);
+ my $standard = UCD_name($table, $alias);
# Generate an entry in either the loose or strict hashes, which
# will translate the property and alias names combination into the
@@ -16139,9 +15811,9 @@ sub register_file_for_name($$$) {
else {
$stricter_to_file_of{$standard} = $sub_filename;
- # Tightly coupled with how utf8_heavy.pl works, for a
+ # Tightly coupled with how Unicode::UCD works, for a
# floating point number that is a whole number, get rid of
- # the trailing decimal point and 0's, so that utf8_heavy
+ # the trailing decimal point and 0's, so that Unicode::UCD
# will work. Also note that this assumes that such a
# number is matched strictly; so if that were to change,
# this would be wrong.
@@ -16169,7 +15841,7 @@ sub register_file_for_name($$$) {
# Keep a list of the deprecated properties and their filenames
if ($deprecated && $complement == 0) {
- $utf8::why_deprecated{$sub_filename} = $deprecated;
+ $Unicode::UCD::why_deprecated{$sub_filename} = $deprecated;
}
# And a substitute table, if any, for case-insensitive matching
@@ -16191,22 +15863,21 @@ sub register_file_for_name($$$) {
# conflicts
my %full_dir_name_of; # Full length names of directories used.
- sub construct_filename($$$) {
+ sub construct_filename($name, $mutable, $directories_ref) {
# Return a file name for a table, based on the table name, but perhaps
# changed to get rid of non-portable characters in it, and to make
# sure that it is unique on a file system that allows the names before
# any period to be at most 8 characters (DOS). While we're at it
# check and complain if there are any directory conflicts.
- my $name = shift; # The name to start with
- my $mutable = shift; # Boolean: can it be changed? If no, but
+ # $name # The name to start with
+ # $mutable # Boolean: can it be changed? If no, but
# yet it must be to work properly, a warning
# is given
- my $directories_ref = shift; # A reference to an array containing the
+ # $directories_ref # A reference to an array containing the
# path to the file, with each element one path
# component. This is used because the same
# name can be used in different directories.
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
my $warn = ! defined wantarray; # If true, then if the name is
# changed, a warning is issued as well.
@@ -16228,7 +15899,7 @@ sub register_file_for_name($$$) {
my $short_dir = substr($directory, 0, 8);
if (defined $full_dir_name_of{$short_dir}) {
next if $full_dir_name_of{$short_dir} eq $directory;
- Carp::my_carp("$directory conflicts with $full_dir_name_of{$short_dir}. Bad News. Continuing anyway");
+ Carp::my_carp("Directory $directory conflicts with directory $full_dir_name_of{$short_dir}. Bad News. Continuing anyway");
}
else {
$full_dir_name_of{$short_dir} = $directory;
@@ -16333,19 +16004,11 @@ my $FILLER = 3; # Length of initial boiler-plate columns in a pod line
# 1 for the flag
# 1 for the space between the flag and the main data
-sub format_pod_line ($$$;$$) {
+sub format_pod_line($first_column_width, $entry, $info, $status = "", $loose_match = 1 ) {
# Take a pod line and return it, formatted properly
- my $first_column_width = shift;
- my $entry = shift; # Contents of left column
- my $info = shift; # Contents of right column
-
- my $status = shift || ""; # Any flag
-
- my $loose_match = shift; # Boolean.
- $loose_match = 1 unless defined $loose_match;
-
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
+ # $entry Contents of left column
+ # $info Contents of right column
my $flags = "";
$flags .= $STRICTER if ! $loose_match;
@@ -16376,14 +16039,11 @@ sub format_pod_line ($$$;$$) {
my @zero_match_tables; # List of tables that have no matches in this release
-sub make_re_pod_entries($) {
+sub make_re_pod_entries($input_table) {
# This generates the entries for the pod file for a given table.
# Also done at this time are any children tables. The output looks like:
# \p{Common} \p{Script=Common} (Short: \p{Zyyy}) (5178)
- my $input_table = shift; # Table the entry is for
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# Generate parent and all its children at the same time.
return if $input_table->parent != $input_table;
@@ -16431,7 +16091,7 @@ sub make_re_pod_entries($) {
# for each name each table goes by
foreach my $table ($input_table, $input_table->children) {
- # utf8_heavy.pl cannot deal with null string property values, so skip
+ # Unicode::UCD cannot deal with null string property values, so skip
# any tables that have no non-null names.
next if ! grep { $_->name ne "" } $table->aliases;
@@ -16594,7 +16254,7 @@ sub make_re_pod_entries($) {
my $standard_short = standardize($proposed_short);
# If the short name is shorter than the standard one, or
- # even it it's not, but the combination of it and its
+ # even if it's not, but the combination of it and its
# short property name (as in \p{prop=short} ($perl doesn't
# have this form)) saves at least two characters, then,
# cause it to be listed as a shorter synonym.
@@ -16733,9 +16393,7 @@ sub make_re_pod_entries($) {
return;
}
-sub make_ucd_table_pod_entries {
- my $table = shift;
-
+sub make_ucd_table_pod_entries($table) {
# Generate the entries for the UCD section of the pod for $table. This
# also calculates if names are ambiguous, so has to be called even if the
# pod is not being output
@@ -16760,7 +16418,7 @@ sub make_ucd_table_pod_entries {
&& $perl_extension
&& $property != $table;
- # Get the more official name for for perl extensions that aren't
+ # Get the more official name for perl extensions that aren't
# stand-alone properties
if ($is_perl_extension_match_table_but_not_dollar_perl) {
if ($property->type == $BINARY) {
@@ -17072,6 +16730,9 @@ other two shortcuts, and Unicode continues to define new properties that begin
with C<"In">, so it's quite possible that a conflict will occur in the future.
The compound form is guaranteed to not become obsolete, and its meaning is
clearer anyway. See L<perlunicode/"Blocks"> for more information about this.
+
+User-defined properties must begin with "In" or "Is". These override any
+Unicode property of the same name.
END
}
my $text = $Is_flags_text;
@@ -17081,6 +16742,13 @@ END
push @match_properties, format_pod_line($indent_info_column,
'\p{Is_*}',
"\\p{*} $text");
+ push @match_properties, format_pod_line($indent_info_column,
+ '\p{Name=*}',
+ "Combination of Name and Name_Alias properties; has special"
+ . " loose matching rules, for which see Unicode UAX #44");
+ push @match_properties, format_pod_line($indent_info_column,
+ '\p{Na=*}',
+ '\p{Name=*}');
# Sort the properties array for output. It is sorted alphabetically
# except numerically for numeric properties, and only output unique lines.
@@ -17588,11 +17256,11 @@ Also, Case_Folding is accessible through the C</i> modifier in regular
expressions, the C<\\F> transliteration escape, and the C<L<fc|perlfunc/fc>>
operator.
-And, the Name and Name_Aliases properties are accessible through the C<\\N{}>
-interpolation in double-quoted strings and regular expressions; and functions
-C<charnames::viacode()>, C<charnames::vianame()>, and
-C<charnames::string_vianame()> (which require a C<use charnames ();> to be
-specified.
+Besides being able to say C<\\p{Name=...}>, the Name and Name_Aliases
+properties are accessible through the C<\\N{}> interpolation in double-quoted
+strings and regular expressions; and functions C<charnames::viacode()>,
+C<charnames::vianame()>, and C<charnames::string_vianame()> (which require a
+C<use charnames ();> to be specified.
Finally, most properties related to decomposition are accessible via
L<Unicode::Normalize>.
@@ -17661,146 +17329,6 @@ END
return;
}
-sub make_Heavy () {
- # Create and write Heavy.pl, which passes info about the tables to
- # utf8_heavy.pl
-
- # Stringify structures for output
- my $loose_property_name_of
- = simple_dumper(\%loose_property_name_of, ' ' x 4);
- chomp $loose_property_name_of;
-
- my $strict_property_name_of
- = simple_dumper(\%strict_property_name_of, ' ' x 4);
- chomp $strict_property_name_of;
-
- my $stricter_to_file_of = simple_dumper(\%stricter_to_file_of, ' ' x 4);
- chomp $stricter_to_file_of;
-
- my $inline_definitions = simple_dumper(\@inline_definitions, " " x 4);
- chomp $inline_definitions;
-
- my $loose_to_file_of = simple_dumper(\%loose_to_file_of, ' ' x 4);
- chomp $loose_to_file_of;
-
- my $nv_floating_to_rational
- = simple_dumper(\%nv_floating_to_rational, ' ' x 4);
- chomp $nv_floating_to_rational;
-
- my $why_deprecated = simple_dumper(\%utf8::why_deprecated, ' ' x 4);
- chomp $why_deprecated;
-
- # We set the key to the file when we associated files with tables, but we
- # couldn't do the same for the value then, as we might not have the file
- # for the alternate table figured out at that time.
- foreach my $cased (keys %caseless_equivalent_to) {
- my @path = $caseless_equivalent_to{$cased}->file_path;
- my $path;
- if ($path[0] eq "#") { # Pseudo-directory '#'
- $path = join '/', @path;
- }
- else { # Gets rid of lib/
- $path = join '/', @path[1, -1];
- }
- $caseless_equivalent_to{$cased} = $path;
- }
- my $caseless_equivalent_to
- = simple_dumper(\%caseless_equivalent_to, ' ' x 4);
- chomp $caseless_equivalent_to;
-
- my $loose_property_to_file_of
- = simple_dumper(\%loose_property_to_file_of, ' ' x 4);
- chomp $loose_property_to_file_of;
-
- my $strict_property_to_file_of
- = simple_dumper(\%strict_property_to_file_of, ' ' x 4);
- chomp $strict_property_to_file_of;
-
- my $file_to_swash_name = simple_dumper(\%file_to_swash_name, ' ' x 4);
- chomp $file_to_swash_name;
-
- my @heavy = <<END;
-$HEADER
-$INTERNAL_ONLY_HEADER
-
-# This file is for the use of utf8_heavy.pl and Unicode::UCD
-
-# Maps Unicode (not Perl single-form extensions) property names in loose
-# standard form to their corresponding standard names
-\%utf8::loose_property_name_of = (
-$loose_property_name_of
-);
-
-# Same, but strict names
-\%utf8::strict_property_name_of = (
-$strict_property_name_of
-);
-
-# Gives the definitions (in the form of inversion lists) for those properties
-# whose definitions aren't kept in files
-\@utf8::inline_definitions = (
-$inline_definitions
-);
-
-# Maps property, table to file for those using stricter matching. For paths
-# whose directory is '#', the file is in the form of a numeric index into
-# \@inline_definitions
-\%utf8::stricter_to_file_of = (
-$stricter_to_file_of
-);
-
-# Maps property, table to file for those using loose matching. For paths
-# whose directory is '#', the file is in the form of a numeric index into
-# \@inline_definitions
-\%utf8::loose_to_file_of = (
-$loose_to_file_of
-);
-
-# Maps floating point to fractional form
-\%utf8::nv_floating_to_rational = (
-$nv_floating_to_rational
-);
-
-# If a %e floating point number doesn't have this number of digits in it after
-# the decimal point to get this close to a fraction, it isn't considered to be
-# that fraction even if all the digits it does have match.
-\$utf8::e_precision = $E_FLOAT_PRECISION;
-
-# Deprecated tables to generate a warning for. The key is the file containing
-# the table, so as to avoid duplication, as many property names can map to the
-# file, but we only need one entry for all of them.
-\%utf8::why_deprecated = (
-$why_deprecated
-);
-
-# A few properties have different behavior under /i matching. This maps
-# those to substitute files to use under /i.
-\%utf8::caseless_equivalent = (
-$caseless_equivalent_to
-);
-
-# Property names to mapping files
-\%utf8::loose_property_to_file_of = (
-$loose_property_to_file_of
-);
-
-# Property names to mapping files
-\%utf8::strict_property_to_file_of = (
-$strict_property_to_file_of
-);
-
-# Files to the swash names within them.
-\%utf8::file_to_swash_name = (
-$file_to_swash_name
-);
-
-1;
-END
-
- main::write("Heavy.pl", 0, \@heavy); # The 0 means no utf8.
- return;
-}
-
sub make_Name_pm () {
# Create and write Name.pm, which contains subroutines and data to use in
# conjunction with Name.pl
@@ -17897,9 +17425,12 @@ $loose_names
# And the following array gives the inverse mapping from code points to
# names. Lowest code points are first
- my \@code_points_ending_in_code_point = (
+ \@code_points_ending_in_code_point = (
$code_points_ending_in_code_point
);
+
+ # Is exportable, make read-only
+ Internals::SvREADONLY(\@code_points_ending_in_code_point, 1);
END
# Earlier releases didn't have Jamos. No sense outputting
# them unless will be used.
@@ -18055,6 +17586,60 @@ sub make_UCD () {
# Create and write UCD.pl, which passes info about the tables to
# Unicode::UCD
+ # Stringify structures for output
+ my $loose_property_name_of
+ = simple_dumper(\%loose_property_name_of, ' ' x 4);
+ chomp $loose_property_name_of;
+
+ my $strict_property_name_of
+ = simple_dumper(\%strict_property_name_of, ' ' x 4);
+ chomp $strict_property_name_of;
+
+ my $stricter_to_file_of = simple_dumper(\%stricter_to_file_of, ' ' x 4);
+ chomp $stricter_to_file_of;
+
+ my $inline_definitions = simple_dumper(\@inline_definitions, " " x 4);
+ chomp $inline_definitions;
+
+ my $loose_to_file_of = simple_dumper(\%loose_to_file_of, ' ' x 4);
+ chomp $loose_to_file_of;
+
+ my $nv_floating_to_rational
+ = simple_dumper(\%nv_floating_to_rational, ' ' x 4);
+ chomp $nv_floating_to_rational;
+
+ my $why_deprecated = simple_dumper(\%Unicode::UCD::why_deprecated, ' ' x 4);
+ chomp $why_deprecated;
+
+ # We set the key to the file when we associated files with tables, but we
+ # couldn't do the same for the value then, as we might not have the file
+ # for the alternate table figured out at that time.
+ foreach my $cased (keys %caseless_equivalent_to) {
+ my @path = $caseless_equivalent_to{$cased}->file_path;
+ my $path;
+ if ($path[0] eq "#") { # Pseudo-directory '#'
+ $path = join '/', @path;
+ }
+ else { # Gets rid of lib/
+ $path = join '/', @path[1, -1];
+ }
+ $caseless_equivalent_to{$cased} = $path;
+ }
+ my $caseless_equivalent_to
+ = simple_dumper(\%caseless_equivalent_to, ' ' x 4);
+ chomp $caseless_equivalent_to;
+
+ my $loose_property_to_file_of
+ = simple_dumper(\%loose_property_to_file_of, ' ' x 4);
+ chomp $loose_property_to_file_of;
+
+ my $strict_property_to_file_of
+ = simple_dumper(\%strict_property_to_file_of, ' ' x 4);
+ chomp $strict_property_to_file_of;
+
+ my $file_to_swash_name = simple_dumper(\%file_to_swash_name, ' ' x 4);
+ chomp $file_to_swash_name;
+
# Create a mapping from each alias of Perl single-form extensions to all
# its equivalent aliases, for quick look-up.
my %perlprop_to_aliases;
@@ -18231,6 +17816,75 @@ $INTERNAL_ONLY_HEADER
\$Unicode::UCD::HANGUL_BEGIN = $SBase_string;
\$Unicode::UCD::HANGUL_COUNT = $SCount;
+# Maps Unicode (not Perl single-form extensions) property names in loose
+# standard form to their corresponding standard names
+\%Unicode::UCD::loose_property_name_of = (
+$loose_property_name_of
+);
+
+# Same, but strict names
+\%Unicode::UCD::strict_property_name_of = (
+$strict_property_name_of
+);
+
+# Gives the definitions (in the form of inversion lists) for those properties
+# whose definitions aren't kept in files
+\@Unicode::UCD::inline_definitions = (
+$inline_definitions
+);
+
+# Maps property, table to file for those using stricter matching. For paths
+# whose directory is '#', the file is in the form of a numeric index into
+# \@inline_definitions
+\%Unicode::UCD::stricter_to_file_of = (
+$stricter_to_file_of
+);
+
+# Maps property, table to file for those using loose matching. For paths
+# whose directory is '#', the file is in the form of a numeric index into
+# \@inline_definitions
+\%Unicode::UCD::loose_to_file_of = (
+$loose_to_file_of
+);
+
+# Maps floating point to fractional form
+\%Unicode::UCD::nv_floating_to_rational = (
+$nv_floating_to_rational
+);
+
+# If a %e floating point number doesn't have this number of digits in it after
+# the decimal point to get this close to a fraction, it isn't considered to be
+# that fraction even if all the digits it does have match.
+\$Unicode::UCD::e_precision = $E_FLOAT_PRECISION;
+
+# Deprecated tables to generate a warning for. The key is the file containing
+# the table, so as to avoid duplication, as many property names can map to the
+# file, but we only need one entry for all of them.
+\%Unicode::UCD::why_deprecated = (
+$why_deprecated
+);
+
+# A few properties have different behavior under /i matching. This maps
+# those to substitute files to use under /i.
+\%Unicode::UCD::caseless_equivalent = (
+$caseless_equivalent_to
+);
+
+# Property names to mapping files
+\%Unicode::UCD::loose_property_to_file_of = (
+$loose_property_to_file_of
+);
+
+# Property names to mapping files
+\%Unicode::UCD::strict_property_to_file_of = (
+$strict_property_to_file_of
+);
+
+# Files to the swash names within them.
+\%Unicode::UCD::file_to_swash_name = (
+$file_to_swash_name
+);
+
# Keys are all the possible "prop=value" combinations, in loose form; values
# are the standard loose name for the 'value' part of the key
\%Unicode::UCD::loose_to_standard_value = (
@@ -18532,7 +18186,7 @@ sub write_all_tables() {
# they will be identical, so don't have to compare tables
# frequently. The tables have to have the same status to
# share a file, so add this to the bucket hash. (The
- # reason for this latter is that Heavy.pl associates a
+ # reason for this latter is that UCD.pm associates a
# status with a file.) We don't check tables that are
# inverses of others, as it would lead to some coding
# complications, and checking all the regular ones should
@@ -18570,7 +18224,7 @@ sub write_all_tables() {
make_ucd_table_pod_entries($table);
# There is a mapping stored of the various synonyms to the
- # standardized name of the property for utf8_heavy.pl.
+ # standardized name of the property for Unicode::UCD.
# Also, the pod file contains entries of the form:
# \p{alias: *} \p{full: *}
# rather than show every possible combination of things.
@@ -18610,7 +18264,7 @@ sub write_all_tables() {
push @standard_list, $alias_standard;
}
- # For utf8_heavy, set the mapping of the alias to the
+ # For Unicode::UCD, set the mapping of the alias to the
# property
if ($type == $STRING) {
if ($property->fate <= $MAP_PROXIED) {
@@ -18730,10 +18384,10 @@ sub write_all_tables() {
my $is_property = ($table == $property);
# For very short tables, instead of writing them out to actual files,
- # we in-line their inversion list definitions into Heavy.pl. The
+ # we in-line their inversion list definitions into UCD.pm. The
# definition replaces the file name, and the special pseudo-directory
# '#' is used to signal this. This significantly cuts down the number
- # of files written at little extra cost to the hashes in Heavy.pl.
+ # of files written at little extra cost to the hashes in UCD.pm.
# And it means, no run-time files to read to get the definitions.
if (! $is_property
&& ! $annotate # For annotation, we want to explicitly show
@@ -18781,7 +18435,9 @@ sub write_all_tables() {
# Match tables for the property go in lib/$subdirectory, which is
# the property's name. Don't use the standard file name for this,
# as may get an unfamiliar alias
- @directory = ($matches_directory, $property->external_name);
+ @directory = ($matches_directory, ($property->match_subdir)
+ ? $property->match_subdir
+ : $property->external_name);
}
else {
@@ -18816,8 +18472,7 @@ sub write_all_tables() {
# Write out the pod file
make_pod;
- # And Heavy.pl, Name.pm, UCD.pl
- make_Heavy;
+ # And Name.pm, UCD.pl
make_Name_pm;
make_UCD;
@@ -18833,13 +18488,11 @@ my @white_space_separators = ( # This used only for making the test script.
' '
);
-sub generate_separator($) {
+sub generate_separator($lhs) {
# This used only for making the test script. It generates the colon or
# equal separator between the property and property value, with random
# white space surrounding the separator
- my $lhs = shift;
-
return "" if $lhs eq ""; # No separator if there's only one (the r) side
# Choose space before and after randomly
@@ -18853,20 +18506,20 @@ sub generate_separator($) {
. $spaces_after;
}
-sub generate_tests($$$$$) {
+sub generate_tests($lhs, $rhs, $valid_code, $invalid_code, $warning) {
# This used only for making the test script. It generates test cases that
# are expected to compile successfully in perl. Note that the LHS and
# RHS are assumed to already be as randomized as the caller wants.
- my $lhs = shift; # The property: what's to the left of the colon
- # or equals separator
- my $rhs = shift; # The property value; what's to the right
- my $valid_code = shift; # A code point that's known to be in the
- # table given by LHS=RHS; undef if table is
- # empty
- my $invalid_code = shift; # A code point known to not be in the table;
- # undef if the table is all code points
- my $warning = shift;
+ # $lhs # The property: what's to the left of the colon
+ # or equals separator
+ # $rhs # The property value; what's to the right
+ # $valid_code # A code point that's known to be in the
+ # table given by LHS=RHS; undef if table is
+ # empty
+ # $invalid_code # A code point known to not be in the table;
+ # undef if the table is all code points
+ # $warning
# Get the colon or equal
my $separator = generate_separator($lhs);
@@ -18895,19 +18548,19 @@ EOC
return @output;
}
-sub generate_wildcard_tests($$$$$) {
+sub generate_wildcard_tests($lhs, $rhs, $valid_code, $invalid_code, $warning) {
# This used only for making the test script. It generates wildcardl
# matching test cases that are expected to compile successfully in perl.
- my $lhs = shift; # The property: what's to the left of the
- # or equals separator
- my $rhs = shift; # The property value; what's to the right
- my $valid_code = shift; # A code point that's known to be in the
- # table given by LHS=RHS; undef if table is
- # empty
- my $invalid_code = shift; # A code point known to not be in the table;
- # undef if the table is all code points
- my $warning = shift;
+ # $lhs # The property: what's to the left of the
+ # or equals separator
+ # $rhs # The property value; what's to the right
+ # $valid_code # A code point that's known to be in the
+ # table given by LHS=RHS; undef if table is
+ # empty
+ # $invalid_code # A code point known to not be in the table;
+ # undef if the table is all code points
+ # $warning
return if $lhs eq "";
return if $lhs =~ / ^ Is_ /x; # These are not currently supported
@@ -18923,16 +18576,16 @@ sub generate_wildcard_tests($$$$$) {
return @output;
}
-sub generate_error($$$) {
+sub generate_error($lhs, $rhs, $already_in_error=0) {
# This used only for making the test script. It generates test cases that
# are expected to not only not match, but to be syntax or similar errors
- my $lhs = shift; # The property: what's to the left of the
- # colon or equals separator
- my $rhs = shift; # The property value; what's to the right
- my $already_in_error = shift; # Boolean; if true it's known that the
- # unmodified LHS and RHS will cause an error.
- # This routine should not force another one
+ # $lhs # The property: what's to the left of the
+ # colon or equals separator
+ # $rhs # The property value; what's to the right
+ # $already_in_error # Boolean; if true it's known that the
+ # unmodified LHS and RHS will cause an error.
+ # This routine should not force another one
# Get the colon or equal
my $separator = generate_separator($lhs);
@@ -18964,14 +18617,11 @@ my @bad_loose_seps = (
':=',
);
-sub randomize_stricter_name {
+sub randomize_stricter_name($name) {
# This used only for making the test script. Take the input name and
# return a randomized, but valid version of it under the stricter matching
# rules.
- my $name = shift;
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
# If the name looks like a number (integer, floating, or rational), do
# some extra work
if ($name =~ qr{ ^ ( -? ) (\d+ ( ( [./] ) \d+ )? ) $ }x) {
@@ -19059,13 +18709,9 @@ sub randomize_stricter_name {
return join "", @sections;
}
-sub randomize_loose_name($;$) {
+sub randomize_loose_name($name, $want_error=0) {
# This used only for making the test script
- my $name = shift;
- my $want_error = shift; # if true, make an error
- Carp::carp_extra_args(\@_) if main::DEBUG && @_;
-
$name = randomize_stricter_name($name);
my @parts;
@@ -19133,6 +18779,7 @@ Test_GCB("1100 $nobreak 1161"); # Bug #70940
Expect(0, 0x2028, '\p{Print}', ""); # Bug # 71722
Expect(0, 0x2029, '\p{Print}', ""); # Bug # 71722
Expect(1, 0xFF10, '\p{XDigit}', ""); # Bug # 71726
+Error('\p{InKana}'); # 'Kana' is not a block so InKana shouldn't compile
# Make sure this gets tested; it was not part of the official test suite at
# the time this was added. Note that this is as it would appear in the
@@ -19140,6 +18787,8 @@ Expect(1, 0xFF10, '\p{XDigit}', ""); # Bug # 71726
# Test_WB()
Test_WB("$breakable 0020 $breakable 0020 $breakable 0308 $breakable");
Test_LB("$nobreak 200B $nobreak 0020 $nobreak 0020 $breakable 2060 $breakable");
+Expect(1, ord(" "), '\p{gc=:(?aa)s:}', ""); # /aa is valid
+Expect(1, ord(" "), '\p{gc=:(?-s)s:}', ""); # /-s is valid
EOF_CODE
# Sort these so get results in same order on different runs of this
@@ -19970,8 +19619,10 @@ my @input_file_objects = (
'kIRG_KPSource',
'kIRG_MSource',
'kIRG_KSource',
+ 'kIRG_SSource',
'kIRG_TSource',
'kIRG_USource',
+ 'kIRG_UKSource',
'kIRG_VSource',
],
Pre_Handler => \&setup_unihan,
@@ -20085,10 +19736,32 @@ my @input_file_objects = (
# Is in UAX #51 and not the UCD, so must be updated
# separately, and the first line edited to indicate the
# UCD release we're pretending it to be in. The UTC says
- # this is a transitional state.
+ # this is a transitional state, and in fact was moved to
+ # the UCD in 13.0
+ Withdrawn => v13.0.0,
Pre_Handler => \&setup_emojidata,
Has_Missings_Defaults => $NOT_IGNORED,
Each_Line_Handler => \&filter_emojidata_line,
+ UCD => 0,
+ ),
+ Input_file->new("$EMOJI/emoji.txt", v13.0.0,
+ Has_Missings_Defaults => $NOT_IGNORED,
+ UCD => 0,
+ ),
+ Input_file->new("$EMOJI/ReadMe.txt", v13.0.0,
+ Skip => $Documentation,
+ UCD => 0,
+ ),
+ Input_file->new('IdStatus.txt', v13.0.0,
+ Pre_Handler => \&setup_IdStatus,
+ Property => 'Identifier_Status',
+ UCD => 0,
+ ),
+ Input_file->new('IdType.txt', v13.0.0,
+ Pre_Handler => \&setup_IdType,
+ Each_Line_Handler => \&filter_IdType_line,
+ Property => 'Identifier_Type',
+ UCD => 0,
),
);
@@ -20436,6 +20109,10 @@ __DATA__
use strict;
use warnings;
+
+use feature 'signatures';
+
+no warnings 'experimental::signatures';
no warnings 'experimental::uniprop_wildcards';
# Test qr/\X/ and the \p{} regular expression constructs. This file is
@@ -20451,8 +20128,7 @@ my $Tests = 0;
my $Fails = 0;
# loc_tools.pl requires this function to be defined
-sub ok($@) {
- my ($pass, @msg) = @_;
+sub ok($pass, @msg) {
print "not " unless $pass;
print "ok ";
print ++$Tests;
@@ -20460,12 +20136,7 @@ sub ok($@) {
print "\n";
}
-sub Expect($$$$) {
- my $expected = shift;
- my $ord = shift;
- my $regex = shift;
- my $warning_type = shift; # Type of warning message, like 'deprecated'
- # or empty if none
+sub Expect($expected, $ord, $regex, $warning_type='') {
my $line = (caller)[2];
# Convert the code point to hex form
@@ -20519,8 +20190,7 @@ sub Expect($$$$) {
return;
}
-sub Error($) {
- my $regex = shift;
+sub Error($regex) {
$Tests++;
if (eval { 'x' =~ qr/$regex/; 1 }) {
$Fails++;
@@ -20560,7 +20230,7 @@ if (! defined $WB_Extend_or_Format_re) {
$WB_Extend_or_Format_re = eval 'qr/[\p{WB=Extend}\p{WB=Format}]/';
}
-sub _test_break($$) {
+sub _test_break($template, $break_type) {
# Test various break property matches. The 2nd parameter gives the
# property name. The input is a line from auxiliary/*Test.txt for the
# given property. Each such line is a sequence of Unicode (not native)
@@ -20576,9 +20246,6 @@ sub _test_break($$) {
# /(\X)/, Each \X should match the next cluster; and that is what is
# checked.
- my $template = shift;
- my $break_type = shift;
-
my $line = (caller 1)[2]; # Line number
my $comment = "";
@@ -20805,20 +20472,20 @@ sub _test_break($$) {
return;
}
-sub Test_GCB($) {
- _test_break(shift, 'gcb');
+sub Test_GCB($t) {
+ _test_break($t, 'gcb');
}
-sub Test_LB($) {
- _test_break(shift, 'lb');
+sub Test_LB($t) {
+ _test_break($t, 'lb');
}
-sub Test_SB($) {
- _test_break(shift, 'sb');
+sub Test_SB($t) {
+ _test_break($t, 'sb');
}
-sub Test_WB($) {
- _test_break(shift, 'wb');
+sub Test_WB($t) {
+ _test_break($t, 'wb');
}
sub Finished() {
diff --git a/gnu/usr.bin/perl/lib/unicore/version b/gnu/usr.bin/perl/lib/unicore/version
index 77903b35f3a..02161ca86e5 100644
--- a/gnu/usr.bin/perl/lib/unicore/version
+++ b/gnu/usr.bin/perl/lib/unicore/version
@@ -1 +1 @@
-12.1.0
+13.0.0
diff --git a/gnu/usr.bin/perl/lib/utf8_heavy.pl b/gnu/usr.bin/perl/lib/utf8_heavy.pl
deleted file mode 100644
index ec6dbb69dd7..00000000000
--- a/gnu/usr.bin/perl/lib/utf8_heavy.pl
+++ /dev/null
@@ -1,623 +0,0 @@
-package utf8;
-use strict;
-use warnings;
-use re "/aa"; # So we won't even try to look at above Latin1, potentially
- # resulting in a recursive call
-
-sub DEBUG () { 0 }
-$|=1 if DEBUG;
-
-sub DESTROY {}
-
-my %Cache;
-
-sub croak { require Carp; Carp::croak(@_) }
-
-# Digits may be separated by a single underscore
-my $digits = qr/ ( [0-9] _? )+ (?!:_) /x;
-
-# A sign can be surrounded by white space
-my $sign = qr/ \s* [+-]? \s* /x;
-
-my $f_float = qr/ $sign $digits+ \. $digits* # e.g., 5.0, 5.
- | $sign $digits* \. $digits+/x; # 0.7, .7
-
-# A number may be an integer, a rational, or a float with an optional exponent
-# We (shudder) accept a signed denominator
-my $number = qr{ ^ $sign $digits+ $
- | ^ $sign $digits+ \/ $sign $digits+ $
- | ^ $f_float (?: [Ee] [+-]? $digits )? $}x;
-
-sub _loose_name ($) {
- # Given a lowercase property or property-value name, return its
- # standardized version that is expected for look-up in the 'loose' hashes
- # in Heavy.pl (hence, this depends on what mktables does). This squeezes
- # out blanks, underscores and dashes. The complication stems from the
- # grandfathered-in 'L_', which retains a single trailing underscore.
-
-# integer or float (no exponent)
-my $integer_or_float_re = qr/ ^ -? \d+ (:? \. \d+ )? $ /x;
-
-# Also includes rationals
-my $numeric_re = qr! $integer_or_float_re | ^ -? \d+ / \d+ $ !x;
- return $_[0] if $_[0] =~ $numeric_re;
-
- (my $loose = $_[0]) =~ s/[-_ \t]//g;
-
- return $loose if $loose !~ / ^ (?: is | to )? l $/x;
- return 'l_' if $_[0] =~ / l .* _ /x; # If original had a trailing '_'
- return $loose;
-}
-
-##
-## "SWASH" == "SWATCH HASH". A "swatch" is a swatch of the Unicode landscape.
-## It's a data structure that encodes a set of Unicode characters.
-##
-
-{
- # If a floating point number is within this distance from the value of a
- # fraction, it is considered to be that fraction, even if many more digits
- # are specified that don't exactly match.
- my $min_floating_slop;
-
- # To guard against this program calling something that in turn ends up
- # calling this program with the same inputs, and hence infinitely
- # recursing, we keep a stack of the properties that are currently in
- # progress, pushed upon entry, popped upon return.
- my @recursed;
-
- sub SWASHNEW {
- my ($class, $type, $list, $minbits, $none) = @_;
- my $user_defined = 0;
- local $^D = 0 if $^D;
-
- $class = "" unless defined $class;
- print STDERR __LINE__, ": class=$class, type=$type, list=",
- (defined $list) ? $list : ':undef:',
- ", minbits=$minbits, none=$none\n" if DEBUG;
-
- ##
- ## Get the list of codepoints for the type.
- ## Called from swash_init (see utf8.c) or SWASHNEW itself.
- ##
- ## Callers of swash_init:
- ## op.c:pmtrans -- for tr/// and y///
- ## Unicode::UCD::prop_invlist
- ## Unicode::UCD::prop_invmap
- ##
- ## Given a $type, our goal is to fill $list with the set of codepoint
- ## ranges. If $type is false, $list passed is used.
- ##
- ## $minbits:
- ## For binary properties, $minbits must be 1.
- ## For character mappings (case and transliteration), $minbits must
- ## be a number except 1.
- ##
- ## $list (or that filled according to $type):
- ## Refer to perlunicode.pod, "User-Defined Character Properties."
- ##
- ## For binary properties, only characters with the property value
- ## of True should be listed. The 3rd column, if any, will be ignored
- ##
- ## $none is undocumented, so I'm (khw) trying to do some documentation
- ## of it now. It appears to be if there is a mapping in an input file
- ## that maps to 'XXXX', then that is replaced by $none+1, expressed in
- ## hexadecimal. It is used somehow in tr///.
- ##
- ## To make the parsing of $type clear, this code takes the a rather
- ## unorthodox approach of last'ing out of the block once we have the
- ## info we need. Were this to be a subroutine, the 'last' would just
- ## be a 'return'.
- ##
- # If a problem is found $type is returned;
- # Upon success, a new (or cached) blessed object is returned with
- # keys TYPE, BITS, EXTRAS, LIST, and NONE with values having the
- # same meanings as the input parameters.
- # SPECIALS contains a reference to any special-treatment hash in the
- # property.
- # INVERT_IT is non-zero if the result should be inverted before use
- # USER_DEFINED is non-zero if the result came from a user-defined
- my $file; ## file to load data from, and also part of the %Cache key.
-
- # Change this to get a different set of Unicode tables
- my $unicore_dir = 'unicore';
- my $invert_it = 0;
- my $list_is_from_mktables = 0; # Is $list returned from a mktables
- # generated file? If so, we know it's
- # well behaved.
-
- if ($type)
- {
- # Verify that this isn't a recursive call for this property.
- # Can't use croak, as it may try to recurse to here itself.
- my $class_type = $class . "::$type";
- if (grep { $_ eq $class_type } @recursed) {
- CORE::die "panic: Infinite recursion in SWASHNEW for '$type'\n";
- }
- push @recursed, $class_type;
-
- $type =~ s/^\s+//;
- $type =~ s/\s+$//;
-
- # regcomp.c surrounds the property name with '__" and '_i' if this
- # is to be caseless matching.
- my $caseless = $type =~ s/^(.*)__(.*)_i$/$1$2/;
-
- print STDERR __LINE__, ": type=$type, caseless=$caseless\n" if DEBUG;
-
- GETFILE:
- {
- ##
- ## It could be a user-defined property. Look in current
- ## package if no package given
- ##
-
-
- my $caller0 = caller(0);
- my $caller1 = $type =~ s/(.+):://
- ? $1
- : $caller0 eq 'main'
- ? 'main'
- : caller(1);
-
- if (defined $caller1 && $type =~ /^I[ns]\w+$/) {
- my $prop = "${caller1}::$type";
- if (exists &{$prop}) {
- # stolen from Scalar::Util::PP::tainted()
- my $tainted;
- {
- local($@, $SIG{__DIE__}, $SIG{__WARN__});
- local $^W = 0;
- no warnings;
- eval { kill 0 * $prop };
- $tainted = 1 if $@ =~ /^Insecure/;
- }
- die "Insecure user-defined property \\p{$prop}\n"
- if $tainted;
- no strict 'refs';
- $list = &{$prop}($caseless);
- $user_defined = 1;
- last GETFILE;
- }
- }
-
- # During Perl's compilation, this routine may be called before
- # the tables are constructed. If so, we have a chicken/egg
- # problem. If we die, the tables never get constructed, so
- # keep going, but return an empty table so only what the code
- # has compiled in internally (currently ASCII/Latin1 range
- # matching) will work.
- BEGIN {
- # Poor man's constant, to avoid a run-time check.
- $utf8::{miniperl}
- = \! defined &DynaLoader::boot_DynaLoader;
- }
- if (miniperl) {
- eval "require '$unicore_dir/Heavy.pl'";
- if ($@) {
- print STDERR __LINE__, ": '$@'\n" if DEBUG;
- pop @recursed if @recursed;
- return $type;
- }
- }
- else {
- require "$unicore_dir/Heavy.pl";
- }
- BEGIN { delete $utf8::{miniperl} }
-
- # All property names are matched caselessly
- my $property_and_table = CORE::lc $type;
- print STDERR __LINE__, ": $property_and_table\n" if DEBUG;
-
- # See if is of the compound form 'property=value', where the
- # value indicates the table we should use.
- my ($property, $table, @remainder) =
- split /\s*[:=]\s*/, $property_and_table, -1;
- if (@remainder) {
- pop @recursed if @recursed;
- return $type;
- }
-
- my $prefix;
- if (! defined $table) {
-
- # Here, is the single form. The property becomes empty, and
- # the whole value is the table.
- $table = $property;
- $prefix = $property = "";
- } else {
- print STDERR __LINE__, ": $property\n" if DEBUG;
-
- # Here it is the compound property=table form. The property
- # name is always loosely matched, and always can have an
- # optional 'is' prefix (which isn't true in the single
- # form).
- $property = _loose_name($property) =~ s/^is//r;
-
- # And convert to canonical form. Quit if not valid.
- $property = $utf8::loose_property_name_of{$property};
- if (! defined $property) {
- pop @recursed if @recursed;
- return $type;
- }
-
- $prefix = "$property=";
-
- # If the rhs looks like it is a number...
- print STDERR __LINE__, ": table=$table\n" if DEBUG;
-
- if ($table =~ $number) {
- print STDERR __LINE__, ": table=$table\n" if DEBUG;
-
- # Split on slash, in case it is a rational, like \p{1/5}
- my @parts = split m{ \s* / \s* }x, $table, -1;
- print __LINE__, ": $type\n" if @parts > 2 && DEBUG;
-
- foreach my $part (@parts) {
- print __LINE__, ": part=$part\n" if DEBUG;
-
- $part =~ s/^\+\s*//; # Remove leading plus
- $part =~ s/^-\s*/-/; # Remove blanks after unary
- # minus
-
- # Remove underscores between digits.
- $part =~ s/(?<= [0-9] ) _ (?= [0-9] ) //xg;
-
- # No leading zeros (but don't make a single '0'
- # into a null string)
- $part =~ s/ ^ ( -? ) 0+ /$1/x;
- $part .= '0' if $part eq '-' || $part eq "";
-
- # No trailing zeros after a decimal point
- $part =~ s/ ( \. [0-9]*? ) 0+ $ /$1/x;
-
- # Begin with a 0 if a leading decimal point
- $part =~ s/ ^ ( -? ) \. /${1}0./x;
-
- # Ensure not a trailing decimal point: turn into an
- # integer
- $part =~ s/ \. $ //x;
-
- print STDERR __LINE__, ": part=$part\n" if DEBUG;
- #return $type if $part eq "";
- }
-
- # If a rational...
- if (@parts == 2) {
-
- # If denominator is negative, get rid of it, and ...
- if ($parts[1] =~ s/^-//) {
-
- # If numerator is also negative, convert the
- # whole thing to positive, else move the minus
- # to the numerator
- if ($parts[0] !~ s/^-//) {
- $parts[0] = '-' . $parts[0];
- }
- }
- $table = join '/', @parts;
- }
- elsif ($property ne 'nv' || $parts[0] !~ /\./) {
-
- # Here is not numeric value, or doesn't have a
- # decimal point. No further manipulation is
- # necessary. (Note the hard-coded property name.
- # This could fail if other properties eventually
- # had fractions as well; perhaps the cjk ones
- # could evolve to do that. This hard-coding could
- # be fixed by mktables generating a list of
- # properties that could have fractions.)
- $table = $parts[0];
- } else {
-
- # Here is a floating point numeric_value. Convert
- # to rational. Get a normalized form, like
- # 5.00E-01, and look that up in the hash
-
- my $float = sprintf "%.*e",
- $utf8::e_precision,
- 0 + $parts[0];
-
- if (exists $utf8::nv_floating_to_rational{$float}) {
- $table = $utf8::nv_floating_to_rational{$float};
- } else {
- pop @recursed if @recursed;
- return $type;
- }
- }
- print STDERR __LINE__, ": $property=$table\n" if DEBUG;
- }
- }
-
- # Combine lhs (if any) and rhs to get something that matches
- # the syntax of the lookups.
- $property_and_table = "$prefix$table";
- print STDERR __LINE__, ": $property_and_table\n" if DEBUG;
-
- # First try stricter matching.
- $file = $utf8::stricter_to_file_of{$property_and_table};
-
- # If didn't find it, try again with looser matching by editing
- # out the applicable characters on the rhs and looking up
- # again.
- my $strict_property_and_table;
- if (! defined $file) {
-
- # This isn't used unless the name begins with 'to'
- $strict_property_and_table = $property_and_table =~ s/^to//r;
- $table = _loose_name($table);
- $property_and_table = "$prefix$table";
- print STDERR __LINE__, ": $property_and_table\n" if DEBUG;
- $file = $utf8::loose_to_file_of{$property_and_table};
- }
-
- # Add the constant and go fetch it in.
- if (defined $file) {
-
- # If the file name contains a !, it means to invert. The
- # 0+ makes sure result is numeric
- $invert_it = 0 + $file =~ s/!//;
-
- if ($utf8::why_deprecated{$file}) {
- warnings::warnif('deprecated', "Use of '$type' in \\p{} or \\P{} is deprecated because: $utf8::why_deprecated{$file};");
- }
-
- if ($caseless
- && exists $utf8::caseless_equivalent{$property_and_table})
- {
- $file = $utf8::caseless_equivalent{$property_and_table};
- }
-
- # The pseudo-directory '#' means that there really isn't a
- # file to read, the data is in-line as part of the string;
- # we extract it below.
- $file = "$unicore_dir/lib/$file.pl" unless $file =~ m!^#/!;
- last GETFILE;
- }
- print STDERR __LINE__, ": didn't find $property_and_table\n" if DEBUG;
-
- ##
- ## Last attempt -- see if it's a standard "To" name
- ## (e.g. "ToLower") ToTitle is used by ucfirst().
- ## The user-level way to access ToDigit() and ToFold()
- ## is to use Unicode::UCD.
- ##
- # Only check if caller wants non-binary
- if ($minbits != 1) {
- if ($property_and_table =~ s/^to//) {
- # Look input up in list of properties for which we have
- # mapping files. First do it with the strict approach
- if (defined ($file = $utf8::strict_property_to_file_of{
- $strict_property_and_table}))
- {
- $type = $utf8::file_to_swash_name{$file};
- print STDERR __LINE__, ": type set to $type\n"
- if DEBUG;
- $file = "$unicore_dir/$file.pl";
- last GETFILE;
- }
- elsif (defined ($file =
- $utf8::loose_property_to_file_of{$property_and_table}))
- {
- $type = $utf8::file_to_swash_name{$file};
- print STDERR __LINE__, ": type set to $type\n"
- if DEBUG;
- $file = "$unicore_dir/$file.pl";
- last GETFILE;
- } # If that fails see if there is a corresponding binary
- # property file
- elsif (defined ($file =
- $utf8::loose_to_file_of{$property_and_table}))
- {
-
- # Here, there is no map file for the property we
- # are trying to get the map of, but this is a
- # binary property, and there is a file for it that
- # can easily be translated to a mapping, so use
- # that, treating this as a binary property.
- # Setting 'minbits' here causes it to be stored as
- # such in the cache, so if someone comes along
- # later looking for just a binary, they get it.
- $minbits = 1;
-
- # The 0+ makes sure is numeric
- $invert_it = 0 + $file =~ s/!//;
- $file = "$unicore_dir/lib/$file.pl"
- unless $file =~ m!^#/!;
- last GETFILE;
- }
- }
- }
-
- ##
- ## If we reach this line, it's because we couldn't figure
- ## out what to do with $type. Ouch.
- ##
-
- pop @recursed if @recursed;
- return $type;
- } # end of GETFILE block
-
- if (defined $file) {
- print STDERR __LINE__, ": found it (file='$file')\n" if DEBUG;
-
- ##
- ## If we reach here, it was due to a 'last GETFILE' above
- ## (exception: user-defined properties and mappings), so we
- ## have a filename, so now we load it if we haven't already.
-
- # The pseudo-directory '#' means the result isn't really a
- # file, but is in-line, with semi-colons to be turned into
- # new-lines. Since it is in-line there is no advantage to
- # caching the result
- if ($file =~ s!^#/!!) {
- $list = $utf8::inline_definitions[$file];
- }
- else {
- # Here, we have an actual file to read in and load, but it
- # may already have been read-in and cached. The cache key
- # is the class and file to load, and whether the results
- # need to be inverted.
- my $found = $Cache{$class, $file, $invert_it};
- if ($found and ref($found) eq $class) {
- print STDERR __LINE__, ": Returning cached swash for '$class,$file,$invert_it' for \\p{$type}\n" if DEBUG;
- pop @recursed if @recursed;
- return $found;
- }
-
- local $@;
- local $!;
- $list = do $file; die $@ if $@;
- }
-
- $list_is_from_mktables = 1;
- }
- } # End of $type is non-null
-
- # Here, either $type was null, or we found the requested property and
- # read it into $list
-
- my $extras = "";
-
- my $bits = $minbits;
-
- # mktables lists don't have extras, like '&utf8::prop', so don't need
- # to separate them; also lists are already sorted, so don't need to do
- # that.
- if ($list && ! $list_is_from_mktables) {
- my $taint = substr($list,0,0); # maintain taint
-
- # Separate the extras from the code point list, and make sure
- # user-defined properties and tr/// are well-behaved for
- # downstream code.
- if ($user_defined || $none) {
- my @tmp = split(/^/m, $list);
- my %seen;
- no warnings;
-
- # The extras are anything that doesn't begin with a hex digit.
- $extras = join '', $taint, grep /^[^0-9a-fA-F]/, @tmp;
-
- # Remove the extras, and sort the remaining entries by the
- # numeric value of their beginning hex digits, removing any
- # duplicates.
- $list = join '', $taint,
- map { $_->[1] }
- sort { $a->[0] <=> $b->[0] }
- map { /^([0-9a-fA-F]+)/ && !$seen{$1}++ ? [ CORE::hex($1), $_ ] : () }
- @tmp; # XXX doesn't do ranges right
- }
- else {
- # mktables has gone to some trouble to make non-user defined
- # properties well-behaved, so we can skip the effort we do for
- # user-defined ones. Any extras are at the very beginning of
- # the string.
-
- # This regex splits out the first lines of $list into $1 and
- # strips them off from $list, until we get one that begins
- # with a hex number, alone on the line, or followed by a tab.
- # Either portion may be empty.
- $list =~ s/ \A ( .*? )
- (?: \z | (?= ^ [0-9a-fA-F]+ (?: \t | $) ) )
- //msx;
-
- $extras = "$taint$1";
- }
- }
-
- if ($none) {
- my $hextra = sprintf "%04x", $none + 1;
- $list =~ s/\tXXXX$/\t$hextra/mg;
- }
-
- if ($minbits != 1 && $minbits < 32) { # not binary property
- my $top = 0;
- while ($list =~ /^([0-9a-fA-F]+)(?:[\t]([0-9a-fA-F]+)?)(?:[ \t]([0-9a-fA-F]+))?/mg) {
- my $min = CORE::hex $1;
- my $max = defined $2 ? CORE::hex $2 : $min;
- my $val = defined $3 ? CORE::hex $3 : 0;
- $val += $max - $min if defined $3;
- $top = $val if $val > $top;
- }
- my $topbits =
- $top > 0xffff ? 32 :
- $top > 0xff ? 16 : 8;
- $bits = $topbits if $bits < $topbits;
- }
-
- my @extras;
- if ($extras) {
- for my $x ($extras) {
- my $taint = substr($x,0,0); # maintain taint
- pos $x = 0;
- while ($x =~ /^([^0-9a-fA-F\n])(.*)/mg) {
- my $char = "$1$taint";
- my $name = "$2$taint";
- print STDERR __LINE__, ": char [$char] => name [$name]\n"
- if DEBUG;
- if ($char =~ /[-+!&]/) {
- my ($c,$t) = split(/::/, $name, 2); # bogus use of ::, really
- my $subobj;
- if ($c eq 'utf8') {
- $subobj = utf8->SWASHNEW($t, "", $minbits, 0);
- }
- elsif (exists &$name) {
- $subobj = utf8->SWASHNEW($name, "", $minbits, 0);
- }
- elsif ($c =~ /^([0-9a-fA-F]+)/) {
- $subobj = utf8->SWASHNEW("", $c, $minbits, 0);
- }
- print STDERR __LINE__, ": returned from getting sub object for $name\n" if DEBUG;
- if (! ref $subobj) {
- pop @recursed if @recursed && $type;
- return $subobj;
- }
- push @extras, $name => $subobj;
- $bits = $subobj->{BITS} if $bits < $subobj->{BITS};
- $user_defined = $subobj->{USER_DEFINED}
- if $subobj->{USER_DEFINED};
- }
- }
- }
- }
-
- if (DEBUG) {
- print STDERR __LINE__, ": CLASS = $class, TYPE => $type, BITS => $bits, NONE => $none, INVERT_IT => $invert_it, USER_DEFINED => $user_defined";
- print STDERR "\nLIST =>\n$list" if defined $list;
- print STDERR "\nEXTRAS =>\n$extras" if defined $extras;
- print STDERR "\n";
- }
-
- my $SWASH = bless {
- TYPE => $type,
- BITS => $bits,
- EXTRAS => $extras,
- LIST => $list,
- NONE => $none,
- USER_DEFINED => $user_defined,
- @extras,
- } => $class;
-
- if ($file) {
- $Cache{$class, $file, $invert_it} = $SWASH;
- if ($type
- && exists $utf8::SwashInfo{$type}
- && exists $utf8::SwashInfo{$type}{'specials_name'})
- {
- my $specials_name = $utf8::SwashInfo{$type}{'specials_name'};
- no strict "refs";
- print STDERR "\nspecials_name => $specials_name\n" if DEBUG;
- $SWASH->{'SPECIALS'} = \%$specials_name;
- }
- $SWASH->{'INVERT_IT'} = $invert_it;
- }
-
- pop @recursed if @recursed && $type;
-
- return $SWASH;
- }
-}
-
-# Now SWASHGET is recasted into a C function S_swatch_get (see utf8.c).
-
-1;
diff --git a/gnu/usr.bin/perl/lib/warnings.pm b/gnu/usr.bin/perl/lib/warnings.pm
index a77c1fc87e0..a70c25f1250 100644
--- a/gnu/usr.bin/perl/lib/warnings.pm
+++ b/gnu/usr.bin/perl/lib/warnings.pm
@@ -5,7 +5,7 @@
package warnings;
-our $VERSION = "1.44";
+our $VERSION = "1.47";
# Verify that we're called correctly so that warnings will work.
# Can't use Carp, since Carp uses us!
@@ -106,6 +106,9 @@ our %Offsets = (
'experimental::private_use' => 140,
'experimental::uniprop_wildcards' => 142,
'experimental::vlb' => 144,
+
+ # Warnings Categories added in Perl 5.031
+ 'experimental::isa' => 146,
);
our %Bits = (
@@ -119,11 +122,12 @@ our %Bits = (
'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
- 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x51\x15\x50\x51\x01", # [51..56,58..62,66..68,70..72]
+ 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x51\x15\x50\x51\x05", # [51..56,58..62,66..68,70..73]
'experimental::alpha_assertions' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [67]
'experimental::bitwise' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [58]
'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [59]
'experimental::declared_refs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [66]
+ 'experimental::isa' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [73]
'experimental::lexical_subs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [52]
'experimental::postderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [55]
'experimental::private_use' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [70]
@@ -195,11 +199,12 @@ our %DeadBits = (
'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
- 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\xa2\x2a\xa0\xa2\x02", # [51..56,58..62,66..68,70..72]
+ 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\xa2\x2a\xa0\xa2\x0a", # [51..56,58..62,66..68,70..73]
'experimental::alpha_assertions' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [67]
'experimental::bitwise' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [58]
'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [59]
'experimental::declared_refs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [66]
+ 'experimental::isa' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [73]
'experimental::lexical_subs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [52]
'experimental::postderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [55]
'experimental::private_use' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [70]
@@ -262,8 +267,8 @@ our %DeadBits = (
# These are used by various things, including our own tests
our $NONE = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
-our $DEFAULT = "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x51\x55\x50\x51\x01", # [2,4,22,23,25,52..56,58..63,66..68,70..72]
-our $LAST_BIT = 146 ;
+our $DEFAULT = "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x51\x55\x50\x51\x05", # [2,4,22,23,25,52..56,58..63,66..68,70..73]
+our $LAST_BIT = 148 ;
our $BYTES = 19 ;
sub Croaker
@@ -684,6 +689,10 @@ disable compile-time warnings you need to rewrite the code like this:
my $b; chop $b;
}
+And note that unlike the first example, this will permanently set C<$^W>
+since it cannot both run during compile-time and be localized to a
+run-time block.
+
The other big problem with C<$^W> is the way you can inadvertently
change the warning setting in unexpected places in your code. For example,
when the code below is run (without the B<-w> flag), the second call
@@ -719,7 +728,7 @@ X<-w>
This is the existing flag. If the lexical warnings pragma is B<not>
used in any of you code, or any of the modules that you use, this flag
-will enable warnings everywhere. See L<Backward Compatibility> for
+will enable warnings everywhere. See L</Backward Compatibility> for
details of how this flag interacts with lexical warnings.
=item B<-W>
@@ -813,6 +822,8 @@ The current hierarchy is:
| |
| +- experimental::declared_refs
| |
+ | +- experimental::isa
+ | |
| +- experimental::lexical_subs
| |
| +- experimental::postderef
diff --git a/gnu/usr.bin/perl/locale.c b/gnu/usr.bin/perl/locale.c
index 894edced430..578c54f92ac 100644
--- a/gnu/usr.bin/perl/locale.c
+++ b/gnu/usr.bin/perl/locale.c
@@ -402,6 +402,7 @@ S_category_name(const int category)
* known at compile time; "do_setlocale_r", not known until run time */
# define do_setlocale_c(cat, locale) my_setlocale(cat, locale)
# define do_setlocale_r(cat, locale) my_setlocale(cat, locale)
+# define FIX_GLIBC_LC_MESSAGES_BUG(i)
#else /* Below uses POSIX 2008 */
@@ -415,6 +416,22 @@ S_category_name(const int category)
emulate_setlocale(cat, locale, cat ## _INDEX, TRUE)
# define do_setlocale_r(cat, locale) emulate_setlocale(cat, locale, 0, FALSE)
+# if ! defined(__GLIBC__) || ! defined(USE_LOCALE_MESSAGES)
+
+# define FIX_GLIBC_LC_MESSAGES_BUG(i)
+
+# else /* Invalidate glibc cache of loaded translations, see [perl #134264] */
+
+# include <libintl.h>
+# define FIX_GLIBC_LC_MESSAGES_BUG(i) \
+ STMT_START { \
+ if ((i) == LC_MESSAGES_INDEX) { \
+ textdomain(textdomain(NULL)); \
+ } \
+ } STMT_END
+
+# endif
+
/* A third array, parallel to the ones above to map from category to its
* equivalent mask */
const int category_masks[] = {
@@ -739,7 +756,7 @@ S_emulate_setlocale(const int category,
# endif
- }
+ } /* End of this being setlocale(LC_foo, NULL) */
/* Here, we are switching locales. */
@@ -774,16 +791,6 @@ S_emulate_setlocale(const int category,
if (! default_name || strEQ(default_name, "")) {
default_name = "C";
}
- else if (PL_scopestack_ix != 0) {
- /* To minimize other threads messing with the environment,
- * we copy the variable, making it a temporary. But this
- * doesn't work upon program initialization before any
- * scopes are created, and at this time, there's nothing
- * else going on that would interfere. So skip the copy
- * in that case */
- default_name = savepv(default_name);
- SAVEFREEPV(default_name);
- }
if (category != LC_ALL) {
const char * const name = PerlEnv_getenv(category_names[index]);
@@ -818,22 +825,19 @@ S_emulate_setlocale(const int category,
for (i = 0; i < LC_ALL_INDEX; i++) {
const char * const env_override
- = savepv(PerlEnv_getenv(category_names[i]));
+ = PerlEnv_getenv(category_names[i]);
const char * this_locale = ( env_override
&& strNE(env_override, ""))
? env_override
: default_name;
if (! emulate_setlocale(categories[i], this_locale, i, TRUE))
{
- Safefree(env_override);
return NULL;
}
if (strNE(this_locale, default_name)) {
did_override = TRUE;
}
-
- Safefree(env_override);
}
/* If all the categories are the same, we can set LC_ALL to
@@ -855,7 +859,7 @@ S_emulate_setlocale(const int category,
}
}
}
- }
+ } /* End of this being setlocale(LC_foo, "") */
else if (strchr(locale, ';')) {
/* LC_ALL may actually incude a conglomeration of various categories.
@@ -952,7 +956,8 @@ S_emulate_setlocale(const int category,
assert(category == LC_ALL);
return do_setlocale_c(LC_ALL, NULL);
- }
+ } /* End of this being setlocale(LC_ALL,
+ "LC_CTYPE=foo;LC_NUMERIC=bar;...") */
ready_to_set: ;
@@ -1006,7 +1011,9 @@ S_emulate_setlocale(const int category,
# endif
- /* If we are switching to the LC_ALL C locale, it already exists. Use
+ /* If this call is to switch to the LC_ALL C locale, it already exists, and
+ * in fact, we already have switched to it (in preparation for what
+ * normally is to come). But since we're already there, continue to use
* it instead of trying to create a new locale */
if (mask == LC_ALL_MASK && isNAME_C_OR_POSIX(locale)) {
@@ -1155,6 +1162,8 @@ S_emulate_setlocale(const int category,
Safefree(PL_curlocales[i]);
PL_curlocales[i] = savepv(locale);
}
+
+ FIX_GLIBC_LC_MESSAGES_BUG(LC_MESSAGES_INDEX);
}
else {
@@ -1169,6 +1178,8 @@ S_emulate_setlocale(const int category,
/* Then update the category's record */
Safefree(PL_curlocales[index]);
PL_curlocales[index] = savepv(locale);
+
+ FIX_GLIBC_LC_MESSAGES_BUG(index);
}
# endif
@@ -1235,7 +1246,7 @@ S_locking_setlocale(pTHX_
* ones. This is because as described earlier. If we know on input the
* index corresponding to the category into the array where we store the
* current locales, we don't have to calculate it. If the caller knows at
- * compile time what the index is, it it can pass it, setting
+ * compile time what the index is, it can pass it, setting
* 'is_index_valid' to TRUE; otherwise the index parameter is ignored.
*
*/
@@ -1702,13 +1713,13 @@ S_new_ctype(pTHX_ const char *newctype)
"isxdigit('%s') unexpectedly is %d\n",
name, cBOOL(isxdigit(i))));
}
- if (UNLIKELY(tolower(i) != (int) toLOWER_A(i))) {
+ if (UNLIKELY(tolower(i) != (int) toLOWER_A(i))) {
is_bad = TRUE;
DEBUG_L(PerlIO_printf(Perl_debug_log,
"tolower('%s')=0x%x instead of the expected 0x%x\n",
name, tolower(i), (int) toLOWER_A(i)));
}
- if (UNLIKELY(toupper(i) != (int) toUPPER_A(i))) {
+ if (UNLIKELY(toupper(i) != (int) toUPPER_A(i))) {
is_bad = TRUE;
DEBUG_L(PerlIO_printf(Perl_debug_log,
"toupper('%s')=0x%x instead of the expected 0x%x\n",
@@ -3286,7 +3297,7 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
#else /* USE_LOCALE */
# ifdef __GLIBC__
- const char * const language = savepv(PerlEnv_getenv("LANGUAGE"));
+ const char * const language = PerlEnv_getenv("LANGUAGE");
# endif
@@ -3296,8 +3307,8 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
: "";
const char* trial_locales[5]; /* 5 = 1 each for "", LC_ALL, LANG, "", C */
unsigned int trial_locales_count;
- const char * const lc_all = savepv(PerlEnv_getenv("LC_ALL"));
- const char * const lang = savepv(PerlEnv_getenv("LANG"));
+ const char * const lc_all = PerlEnv_getenv("LC_ALL");
+ const char * const lang = PerlEnv_getenv("LANG");
bool setlocale_failure = FALSE;
unsigned int i;
@@ -3437,6 +3448,18 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
# endif
# endif /* DEBUGGING */
+ /* Initialize the per-thread mbrFOO() state variables. See POSIX.xs for
+ * why these particular incantations are used. */
+#ifdef HAS_MBRLEN
+ memzero(&PL_mbrlen_ps, sizeof(PL_mbrlen_ps));
+#endif
+#ifdef HAS_MBRTOWC
+ memzero(&PL_mbrtowc_ps, sizeof(PL_mbrtowc_ps));
+#endif
+#ifdef HAS_WCTOMBR
+ wcrtomb(NULL, L'\0', &PL_wcrtomb_ps);
+#endif
+
/* Initialize the cache of the program's UTF-8ness for the always known
* locales C and POSIX */
my_strlcpy(PL_locale_utf8ness, C_and_POSIX_utf8ness,
@@ -3873,15 +3896,6 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
}
# endif
-# ifdef __GLIBC__
-
- Safefree(language);
-
-# endif
-
- Safefree(lc_all);
- Safefree(lang);
-
#endif /* USE_LOCALE */
#ifdef DEBUGGING
@@ -4405,11 +4419,6 @@ Perl__mem_collxfrm(pTHX_ const char *input_string,
return xbuf;
bad:
- Safefree(xbuf);
- if (s != input_string) {
- Safefree(s);
- }
- *xlen = 0;
# ifdef DEBUGGING
@@ -4419,6 +4428,12 @@ Perl__mem_collxfrm(pTHX_ const char *input_string,
# endif
+ Safefree(xbuf);
+ if (s != input_string) {
+ Safefree(s);
+ }
+ *xlen = 0;
+
return NULL;
}
@@ -4533,7 +4548,7 @@ S_switch_category_locale_to_template(pTHX_ const int switch_category, const int
Safefree(restore_to_locale);
DEBUG_Lv(PerlIO_printf(Perl_debug_log, "%s locale unchanged as %s\n",
- category_name(switch_category), restore_to_locale));
+ category_name(switch_category), template_locale));
return NULL;
}
@@ -5111,9 +5126,7 @@ Perl__is_cur_LC_category_utf8(pTHX_ int category)
Copy(delimited, utf8ness_cache, input_name_len_with_overhead - 1, char);
utf8ness_cache[input_name_len_with_overhead - 1] = is_utf8 + '0';
- if ((PL_locale_utf8ness[strlen(PL_locale_utf8ness)-1]
- & (PERL_UINTMAX_T) ~1) != '0')
- {
+ if ((PL_locale_utf8ness[strlen(PL_locale_utf8ness)-1] & ~1) != '0') {
Perl_croak(aTHX_
"panic: %s: %d: Corrupt utf8ness_cache=%s\nlen=%zu,"
" inserted_name=%s, its_len=%zu\n",
@@ -5143,6 +5156,7 @@ Perl__is_cur_LC_category_utf8(pTHX_ int category)
s++;
e = strchr(s, UTF8NESS_PREFIX[0]);
if (! e) {
+ e = PL_locale_utf8ness + strlen(PL_locale_utf8ness);
Perl_croak(aTHX_
"panic: %s: %d: Corrupt utf8ness_cache: missing"
" separator %.*s<-- HERE %s\n",
@@ -5250,9 +5264,9 @@ Perl_my_strerror(pTHX_ const int errnum)
Safefree(save_locale);
}
-# elif defined(HAS_POSIX_2008_LOCALE) \
- && defined(HAS_STRERROR_L) \
- && defined(HAS_DUPLOCALE)
+# elif defined(USE_POSIX_2008_LOCALE) \
+ && defined(HAS_STRERROR_L) \
+ && defined(HAS_DUPLOCALE)
/* This function is also trivial if we don't have to worry about thread
* safety and have strerror_l(), as it handles the switch of locales so we
diff --git a/gnu/usr.bin/perl/make_ext.pl b/gnu/usr.bin/perl/make_ext.pl
index 9bc4718d52d..87f8bf3b289 100644
--- a/gnu/usr.bin/perl/make_ext.pl
+++ b/gnu/usr.bin/perl/make_ext.pl
@@ -48,6 +48,20 @@ my $ext_dirs_re = '(?:' . join('|', @ext_dirs) . ')';
# by an '!ext' and are appropriate to the type of building being done.
# An extensions follows the format of Foo/Bar, which would be extension Foo::Bar
+# To fix dependency ordering, on *nix systems, edit Makefile.SH to create a
+# rule. That isn't sufficient for other systems; you also have to do
+# something in this file. See the code at
+# '# XXX hack for dependency # ordering'
+# below.
+#
+# The basic logic is:
+# 1) if there's a Makefile.PL in git for the module, use it. and call make
+# 2) If not, auto-generate one (normally)
+# 3) unless the auto-generation code figures out that the extension is
+# *really* simple, in which case don't. This will be for pure perl
+# modules, and all that is needed to be done is to copy from the source
+# to the dest directories.
+#
# It may be deleted in a later release of perl so try to
# avoid using it for other purposes.
@@ -201,20 +215,23 @@ elsif (IS_VMS) {
push @extspec, 'DynaLoader' if $dynaloader;
}
-{
+{ # XXX hack for dependency ordering
# Cwd needs to be built before Encode recurses into subdirectories.
- # Pod::Simple needs to be built before Pod::Functions
+ # Pod::Simple needs to be built before Pod::Functions, but after 'if'
# lib needs to be built before IO-Compress
# This seems to be the simplest way to ensure this ordering:
- my (@first, @other);
+ my (@first, @second, @other);
foreach (@extspec) {
- if ($_ eq 'Cwd' || $_ eq 'Pod/Simple' || $_ eq 'lib') {
+ if ($_ eq 'Cwd' || $_ eq 'if' || $_ eq 'lib') {
push @first, $_;
+ }
+ elsif ($_ eq 'Pod/Simple') {
+ push @second, $_;
} else {
push @other, $_;
}
}
- @extspec = (@first, @other);
+ @extspec = (@first, @second, @other);
}
if ($Config{osname} eq 'catamount' and @extspec) {
@@ -506,6 +523,7 @@ EOM
'INSTALLMAN3DIR=none';
}
push @args, @$pass_through;
+ push @args, 'PERL=' . $perl if $perl; # use miniperl to run the Makefile later
_quote_args(\@args) if IS_VMS;
print join(' ', $perl, @args), "\n" if $verbose;
my $code = do {
diff --git a/gnu/usr.bin/perl/make_patchnum.pl b/gnu/usr.bin/perl/make_patchnum.pl
index fc28d58f206..df352cbf34f 100644
--- a/gnu/usr.bin/perl/make_patchnum.pl
+++ b/gnu/usr.bin/perl/make_patchnum.pl
@@ -126,11 +126,40 @@ my $unpushed_commits = ' ';
my ($read, $branch, $snapshot_created, $commit_id, $describe)= ("") x 5;
my ($changed, $extra_info, $commit_title)= ("") x 3;
+my $git_patch_file;
if (my $patch_file= read_file(".patch")) {
($branch, $snapshot_created, $commit_id, $describe) = split /\s+/, $patch_file;
$extra_info = "git_snapshot_date='$snapshot_created'";
$commit_title = "Snapshot of:";
}
+elsif ($git_patch_file = read_file(".git_patch") and $git_patch_file !~ /\A\$Format:%H/) {
+ chomp $git_patch_file;
+ ($commit_id, my $commit_date, my $names)
+ = split /\|/, $git_patch_file;
+
+ my @names = split /,\s*/, $names;
+
+ ($branch) = map m{^HEAD -> (.*)}, @names;
+ if (!$branch) {
+ ($branch) = map m{^(blead|maint/.*)}, @names;
+ }
+ if (!$branch) {
+ ($branch) = map m{^tag: (.*)}, @names;
+ $describe = $branch;
+ }
+ if (!$branch) {
+ my ($pr) = map m{^refs/pull/([0-9]+)/}, @names;
+ $branch = "pull-request-$pr";
+ }
+ if (!$branch) {
+ $branch = $names[0] || $commit_id;
+ }
+
+ $describe ||= $commit_id;
+ $extra_info = "git_commit_date='$commit_date'\n";
+ $extra_info .= "git_snapshot_date='$commit_date'\n";
+ $commit_title = "Snapshot of:";
+}
elsif (-d "$srcdir/.git") {
# git branch | awk 'BEGIN{ORS=""} /\*/ { print $2 }'
($branch) = map { /\* ([^(]\S*)/ ? $1 : () } backtick("git branch");
diff --git a/gnu/usr.bin/perl/makedef.pl b/gnu/usr.bin/perl/makedef.pl
index 42436c71ea4..f1a7581c34d 100644
--- a/gnu/usr.bin/perl/makedef.pl
+++ b/gnu/usr.bin/perl/makedef.pl
@@ -59,7 +59,7 @@ BEGIN {
++$fold;
}
}
- my @PLATFORM = qw(aix win32 wince os2 netware vms test);
+ my @PLATFORM = qw(aix win32 os2 netware vms test);
my %PLATFORM;
@PLATFORM{@PLATFORM} = ();
@@ -75,8 +75,7 @@ require "./$ARGS{TARG_DIR}regen/embed_lib.pl";
# Is the following guard strictly necessary? Added during refactoring
# to keep the same behaviour when merging other code into here.
process_cc_flags(@Config{qw(ccflags optimize)})
- if $ARGS{PLATFORM} ne 'win32' && $ARGS{PLATFORM} ne 'wince'
- && $ARGS{PLATFORM} ne 'netware';
+ if $ARGS{PLATFORM} ne 'win32' && $ARGS{PLATFORM} ne 'netware';
# Add the compile-time options that miniperl was built with to %define.
# On Win32 these are not the same options as perl itself will be built
@@ -87,12 +86,9 @@ process_cc_flags(@Config{qw(ccflags optimize)})
# the user might have chosen to disable because the canned configs are
# minimal configs that don't include any of those options.
-#don't use the host Perl's -V defines for the WinCE Perl
-if($ARGS{PLATFORM} ne 'wince') {
- my @options = sort(Config::bincompat_options(), Config::non_bincompat_options());
- print STDERR "Options: (@options)\n" unless $ARGS{PLATFORM} eq 'test';
- $define{$_} = 1 foreach @options;
-}
+my @options = sort(Config::bincompat_options(), Config::non_bincompat_options());
+print STDERR "Options: (@options)\n" unless $ARGS{PLATFORM} eq 'test';
+$define{$_} = 1 foreach @options;
my %exportperlmalloc =
(
@@ -144,6 +140,7 @@ if (! $define{NO_LOCALE}) {
}
}
+# https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering
my $cctype = $ARGS{CCTYPE} =~ s/MSVC//r;
if (! $define{HAS_SETLOCALE} && $define{HAS_POSIX_2008_LOCALE}) {
$define{USE_POSIX_2008_LOCALE} = 1;
@@ -207,7 +204,7 @@ sub readvar {
my $file = $ARGS{TARG_DIR} . shift;
my $hash = shift;
my $proc = shift;
- open my $vars, '<', $file or die die "Cannot open $file: $!\n";
+ open my $vars, '<', $file or die "Cannot open $file: $!\n";
while (<$vars>) {
# All symbols have a Perl_ prefix because that's what embed.h sticks
@@ -402,6 +399,7 @@ unless ($define{'USE_ITHREADS'}) {
PL_regex_pad
PL_regex_padav
PL_dollarzero_mutex
+ PL_env_mutex
PL_hints_mutex
PL_locale_mutex
PL_lc_numeric_mutex
@@ -744,6 +742,18 @@ unless ($define{'USE_QUADMATH'}) {
++$skip{Perl_quadmath_format_single};
}
+unless ($Config{d_mbrlen}) {
+ ++$skip{PL_mbrlen_ps};
+}
+
+unless ($Config{d_mbrtowc}) {
+ ++$skip{PL_mbrtowc_ps};
+}
+
+unless ($Config{d_wcrtomb}) {
+ ++$skip{PL_wcrtomb_ps};
+}
+
###############################################################################
# At this point all skip lists should be completed, as we are about to test
@@ -752,12 +762,12 @@ unless ($define{'USE_QUADMATH'}) {
{
my %seen;
my ($embed) = setup_embed($ARGS{TARG_DIR});
- my $excludedre = $define{'NO_MATHOMS'} ? qr/[xmib]/ : qr/[xmi]/;
+ my $excludedre = $define{'NO_MATHOMS'} ? qr/[emib]/ : qr/[emi]/;
foreach (@$embed) {
my ($flags, $retval, $func, @args) = @$_;
next unless $func;
- if (($flags =~ /[AX]/ && $flags !~ $excludedre)
+ if (($flags =~ /[AXC]/ && $flags !~ $excludedre)
|| (!$define{'NO_MATHOMS'} && $flags =~ /b/))
{
# public API, so export
@@ -815,174 +825,165 @@ try_symbols(qw(
if ($ARGS{PLATFORM} eq 'win32') {
try_symbols(qw(
- win32_free_childdir
- win32_free_childenv
- win32_get_childdir
- win32_get_childenv
- win32_spawnvp
- ));
-}
-
-if ($ARGS{PLATFORM} eq 'wince') {
- ++$skip{'win32_isatty'}; # commit 4342f4d6df is win32-only
-}
-
-if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) {
- try_symbols(qw(
- Perl_init_os_extras
- Perl_thread_create
- Perl_win32_init
- Perl_win32_term
- RunPerl
- win32_async_check
- win32_errno
- win32_environ
- win32_abort
- win32_fstat
- win32_stat
- win32_pipe
- win32_popen
- win32_pclose
- win32_rename
- win32_setmode
- win32_chsize
- win32_lseek
- win32_tell
- win32_dup
- win32_dup2
- win32_open
- win32_close
- win32_eof
- win32_isatty
- win32_read
- win32_write
- win32_mkdir
- win32_rmdir
- win32_chdir
- win32_flock
- win32_execv
- win32_execvp
- win32_htons
- win32_ntohs
- win32_htonl
- win32_ntohl
- win32_inet_addr
- win32_inet_ntoa
- win32_socket
- win32_bind
- win32_listen
- win32_accept
- win32_connect
- win32_send
- win32_sendto
- win32_recv
- win32_recvfrom
- win32_shutdown
- win32_closesocket
- win32_ioctlsocket
- win32_setsockopt
- win32_getsockopt
- win32_getpeername
- win32_getsockname
- win32_gethostname
- win32_gethostbyname
- win32_gethostbyaddr
- win32_getprotobyname
- win32_getprotobynumber
- win32_getservbyname
- win32_getservbyport
- win32_select
- win32_endhostent
- win32_endnetent
- win32_endprotoent
- win32_endservent
- win32_getnetent
- win32_getnetbyname
- win32_getnetbyaddr
- win32_getprotoent
- win32_getservent
- win32_sethostent
- win32_setnetent
- win32_setprotoent
- win32_setservent
- win32_getenv
- win32_putenv
- win32_perror
- win32_malloc
- win32_calloc
- win32_realloc
- win32_free
- win32_sleep
- win32_pause
- win32_times
- win32_access
- win32_alarm
- win32_chmod
- win32_open_osfhandle
- win32_get_osfhandle
- win32_ioctl
- win32_link
- win32_unlink
- win32_utime
- win32_gettimeofday
- win32_uname
- win32_wait
- win32_waitpid
- win32_kill
- win32_str_os_error
- win32_opendir
- win32_readdir
- win32_telldir
- win32_seekdir
- win32_rewinddir
- win32_closedir
- win32_longpath
- win32_ansipath
- win32_os_id
- win32_getpid
- win32_crypt
- win32_dynaload
- win32_clearenv
- win32_stdin
- win32_stdout
- win32_stderr
- win32_ferror
- win32_feof
- win32_strerror
- win32_fprintf
- win32_printf
- win32_vfprintf
- win32_vprintf
- win32_fread
- win32_fwrite
- win32_fopen
- win32_fdopen
- win32_freopen
- win32_fclose
- win32_fputs
- win32_fputc
- win32_ungetc
- win32_getc
- win32_fileno
- win32_clearerr
- win32_fflush
- win32_ftell
- win32_fseek
- win32_fgetpos
- win32_fsetpos
- win32_rewind
- win32_tmpfile
- win32_setbuf
- win32_setvbuf
- win32_flushall
- win32_fcloseall
- win32_fgets
- win32_gets
- win32_fgetc
- win32_putc
- win32_puts
- win32_getchar
- win32_putchar
+ win32_free_childdir
+ win32_free_childenv
+ win32_get_childdir
+ win32_get_childenv
+ win32_spawnvp
+ Perl_init_os_extras
+ Perl_thread_create
+ Perl_win32_init
+ Perl_win32_term
+ RunPerl
+ win32_async_check
+ win32_errno
+ win32_environ
+ win32_abort
+ win32_fstat
+ win32_stat
+ win32_pipe
+ win32_popen
+ win32_pclose
+ win32_rename
+ win32_setmode
+ win32_chsize
+ win32_lseek
+ win32_tell
+ win32_dup
+ win32_dup2
+ win32_open
+ win32_close
+ win32_eof
+ win32_isatty
+ win32_read
+ win32_write
+ win32_mkdir
+ win32_rmdir
+ win32_chdir
+ win32_flock
+ win32_execv
+ win32_execvp
+ win32_htons
+ win32_ntohs
+ win32_htonl
+ win32_ntohl
+ win32_inet_addr
+ win32_inet_ntoa
+ win32_socket
+ win32_bind
+ win32_listen
+ win32_accept
+ win32_connect
+ win32_send
+ win32_sendto
+ win32_recv
+ win32_recvfrom
+ win32_shutdown
+ win32_closesocket
+ win32_ioctlsocket
+ win32_setsockopt
+ win32_getsockopt
+ win32_getpeername
+ win32_getsockname
+ win32_gethostname
+ win32_gethostbyname
+ win32_gethostbyaddr
+ win32_getprotobyname
+ win32_getprotobynumber
+ win32_getservbyname
+ win32_getservbyport
+ win32_select
+ win32_endhostent
+ win32_endnetent
+ win32_endprotoent
+ win32_endservent
+ win32_getnetent
+ win32_getnetbyname
+ win32_getnetbyaddr
+ win32_getprotoent
+ win32_getservent
+ win32_sethostent
+ win32_setnetent
+ win32_setprotoent
+ win32_setservent
+ win32_getenv
+ win32_putenv
+ win32_perror
+ win32_malloc
+ win32_calloc
+ win32_realloc
+ win32_free
+ win32_sleep
+ win32_pause
+ win32_times
+ win32_access
+ win32_alarm
+ win32_chmod
+ win32_open_osfhandle
+ win32_get_osfhandle
+ win32_ioctl
+ win32_link
+ win32_unlink
+ win32_utime
+ win32_gettimeofday
+ win32_uname
+ win32_wait
+ win32_waitpid
+ win32_kill
+ win32_str_os_error
+ win32_opendir
+ win32_readdir
+ win32_telldir
+ win32_seekdir
+ win32_rewinddir
+ win32_closedir
+ win32_longpath
+ win32_ansipath
+ win32_os_id
+ win32_getpid
+ win32_crypt
+ win32_dynaload
+ win32_clearenv
+ win32_stdin
+ win32_stdout
+ win32_stderr
+ win32_ferror
+ win32_feof
+ win32_strerror
+ win32_fprintf
+ win32_printf
+ win32_vfprintf
+ win32_vprintf
+ win32_fread
+ win32_fwrite
+ win32_fopen
+ win32_fdopen
+ win32_freopen
+ win32_fclose
+ win32_fputs
+ win32_fputc
+ win32_ungetc
+ win32_getc
+ win32_fileno
+ win32_clearerr
+ win32_fflush
+ win32_ftell
+ win32_fseek
+ win32_fgetpos
+ win32_fsetpos
+ win32_rewind
+ win32_tmpfile
+ win32_setbuf
+ win32_setvbuf
+ win32_flushall
+ win32_fcloseall
+ win32_fgets
+ win32_gets
+ win32_fgetc
+ win32_putc
+ win32_puts
+ win32_getchar
+ win32_putchar
));
}
elsif ($ARGS{PLATFORM} eq 'vms') {
@@ -1278,17 +1279,15 @@ elsif ($ARGS{PLATFORM} eq 'netware') {
));
}
-# When added this code was only run for Win32 and WinCE
+# When added this code was only run for Win32 (and WinCE at the time)
# Currently only Win32 links static extensions into the shared library.
-# The WinCE makefile doesn't appear to support static extensions, so this code
-# can't have any effect there.
# The NetWare Makefile doesn't support static extensions (and hardcodes the
# list of dynamic extensions, and the rules to build them)
# For *nix (and presumably OS/2) with a shared libperl, Makefile.SH compiles
# static extensions with -fPIC, but links them to perl, not libperl.so
# The VMS build scripts don't yet implement static extensions at all.
-if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) {
+if ($ARGS{PLATFORM} eq 'win32') {
# records of type boot_module for statically linked modules (except Dynaloader)
my $static_ext = $Config{static_ext} // "";
$static_ext =~ s/\//__/g;
@@ -1315,13 +1314,13 @@ if ($ARGS{PLATFORM} eq 'os2') {
# Start with platform specific headers:
-if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) {
+if ($ARGS{PLATFORM} eq 'win32') {
my $dll = $define{PERL_DLL} ? $define{PERL_DLL} =~ s/\.dll$//ir
: "perl$Config{api_revision}$Config{api_version}";
print "LIBRARY $dll\n";
# The DESCRIPTION module definition file statement is not supported
# by VC7 onwards.
- if ($ARGS{CCTYPE} =~ /^(?:MSVC60|GCC)$/) {
+ if ($ARGS{CCTYPE} eq 'GCC') {
print "DESCRIPTION 'Perl interpreter'\n";
}
print "EXPORTS\n";
@@ -1365,7 +1364,7 @@ elsif ($ARGS{PLATFORM} eq 'netware') {
my @symbols = $fold ? sort {lc $a cmp lc $b} keys %export : sort keys %export;
foreach my $symbol (@symbols) {
- if (PLATFORM eq 'win32' || PLATFORM eq 'wince') {
+ if (PLATFORM eq 'win32') {
# Remembering the origin file of each symbol is an alternative to PL_ matching
if (substr($symbol, 0, 3) eq 'PL_') {
print "\t$symbol DATA\n";
diff --git a/gnu/usr.bin/perl/malloc.c b/gnu/usr.bin/perl/malloc.c
index 0c80a0856f4..337efa80088 100644
--- a/gnu/usr.bin/perl/malloc.c
+++ b/gnu/usr.bin/perl/malloc.c
@@ -1223,6 +1223,15 @@ S_adjust_size_and_find_bucket(size_t *nbytes_p)
return bucket;
}
+/*
+These have the same interfaces as the C lib ones, so are considered documented
+
+=for apidoc malloc
+=for apidoc calloc
+=for apidoc realloc
+=cut
+*/
+
Malloc_t
Perl_malloc(size_t nbytes)
{
@@ -1321,8 +1330,9 @@ Perl_malloc(size_t nbytes)
MALLOC_UNLOCK;
DEBUG_m(PerlIO_printf(Perl_debug_log,
- "0x% "UVxf ": (%05lu) malloc %ld bytes\n",
- PTR2UV((Malloc_t)(p + CHUNK_SHIFT)), (unsigned long)(PL_an++),
+ "%p: (%05lu) malloc %ld bytes\n",
+ (Malloc_t)(p + CHUNK_SHIFT),
+ (unsigned long)(PL_an++),
(long)size));
FILLCHECK_DEADBEEF((unsigned char*)(p + CHUNK_SHIFT),
@@ -1670,7 +1680,8 @@ morecore(int bucket)
/* It's our first time. Initialize ourselves */
were_called = 1; /* Avoid a loop */
if (!MallocCfg[MallocCfg_skip_cfg_env]) {
- char *s = getenv("PERL_MALLOC_OPT"), *t = s, *off;
+ char *s = getenv("PERL_MALLOC_OPT"), *t = s;
+ const char *off;
const char *opts = PERL_MALLOC_OPT_CHARS;
int changed = 0;
@@ -1679,7 +1690,7 @@ morecore(int bucket)
IV val = 0;
t += 2;
- while (*t <= '9' && *t >= '0')
+ while (isDIGIT(*t))
val = 10*val + *t++ - '0';
if (!*t || *t == ';') {
if (MallocCfg[off - opts] != val)
@@ -2251,8 +2262,9 @@ Perl_dump_mstats(pTHX_ const char *s)
for (i = MIN_EVEN_REPORT; i <= buffer.topbucket; i += BUCKETS_PER_POW2) {
PerlIO_printf(Perl_error_log,
((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2)
- ? " %5"UVuf
- : ((i < 12*BUCKETS_PER_POW2) ? " %3"UVuf : " %"UVuf)),
+ ? " %5" UVuf
+ : ((i < 12*BUCKETS_PER_POW2) ? " %3" UVuf
+ : " %" UVuf)),
buffer.nfree[i]);
}
#ifdef BUCKETS_ROOT2
@@ -2270,8 +2282,8 @@ Perl_dump_mstats(pTHX_ const char *s)
for (i = MIN_EVEN_REPORT; i <= buffer.topbucket; i += BUCKETS_PER_POW2) {
PerlIO_printf(Perl_error_log,
((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2)
- ? " %5"IVdf
- : ((i < 12*BUCKETS_PER_POW2) ? " %3"IVdf : " %"IVdf)),
+ ? " %5" IVdf
+ : ((i < 12*BUCKETS_PER_POW2) ? " %3" IVdf : " %" IVdf)),
buffer.ntotal[i] - buffer.nfree[i]);
}
#ifdef BUCKETS_ROOT2
diff --git a/gnu/usr.bin/perl/mathoms.c b/gnu/usr.bin/perl/mathoms.c
index b8dcb8913dc..5149bd731ca 100644
--- a/gnu/usr.bin/perl/mathoms.c
+++ b/gnu/usr.bin/perl/mathoms.c
@@ -24,7 +24,7 @@
* versions of Perl which we cannot completely remove from the core
* code. There are two reasons functions should be here:
*
- * 1) A function has been been replaced by a macro within a minor release,
+ * 1) A function has been replaced by a macro within a minor release,
* so XS modules compiled against an older release will expect to
* still be able to link against the function
* 2) A function Perl_foo(...) with #define foo Perl_foo(aTHX_ ...)
@@ -71,6 +71,10 @@ C<-Accflags='-DNO_MATHOMS'>
*/
#else
+/* The functions in this file should be able to call other deprecated functions
+ * without a compiler warning */
+GCC_DIAG_IGNORE(-Wdeprecated-declarations)
+
/* ref() is now a macro using Perl_doref;
* this version provided for binary compatibility only.
*/
@@ -727,6 +731,10 @@ potentially warn under some level of strict-ness.
"Superseded" by C<sv_nosharing()>.
=cut
+
+PERL_UNLOCK_HOOK in intrpvar.h is the macro that refers to this, and guarantees
+that mathoms gets loaded.
+
*/
void
@@ -1140,38 +1148,6 @@ Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block)
return newATTRSUB(floor, o, proto, NULL, block);
}
-UV
-Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
-{
- PERL_ARGS_ASSERT_TO_UTF8_FOLD;
-
- return toFOLD_utf8(p, ustrp, lenp);
-}
-
-UV
-Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
-{
- PERL_ARGS_ASSERT_TO_UTF8_LOWER;
-
- return toLOWER_utf8(p, ustrp, lenp);
-}
-
-UV
-Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
-{
- PERL_ARGS_ASSERT_TO_UTF8_TITLE;
-
- return toTITLE_utf8(p, ustrp, lenp);
-}
-
-UV
-Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
-{
- PERL_ARGS_ASSERT_TO_UTF8_UPPER;
-
- return toUPPER_utf8(p, ustrp, lenp);
-}
-
SV *
Perl_sv_mortalcopy(pTHX_ SV *const oldstr)
{
@@ -1200,447 +1176,6 @@ ASCII_TO_NEED(const UV enc, const UV ch)
return ch;
}
-bool /* Made into a function, so can be deprecated */
-Perl_isIDFIRST_lazy(pTHX_ const char* p)
-{
- PERL_ARGS_ASSERT_ISIDFIRST_LAZY;
-
- return isIDFIRST_lazy_if(p,1);
-}
-
-bool /* Made into a function, so can be deprecated */
-Perl_isALNUM_lazy(pTHX_ const char* p)
-{
- PERL_ARGS_ASSERT_ISALNUM_LAZY;
-
- return isALNUM_lazy_if(p,1);
-}
-
-bool
-Perl_is_uni_alnum(pTHX_ UV c)
-{
- return isWORDCHAR_uni(c);
-}
-
-bool
-Perl_is_uni_alnumc(pTHX_ UV c)
-{
- return isALNUM_uni(c);
-}
-
-bool
-Perl_is_uni_alpha(pTHX_ UV c)
-{
- return isALPHA_uni(c);
-}
-
-bool
-Perl_is_uni_ascii(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isASCII_uni(c);
-}
-
-bool
-Perl_is_uni_blank(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isBLANK_uni(c);
-}
-
-bool
-Perl_is_uni_space(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isSPACE_uni(c);
-}
-
-bool
-Perl_is_uni_digit(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isDIGIT_uni(c);
-}
-
-bool
-Perl_is_uni_upper(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isUPPER_uni(c);
-}
-
-bool
-Perl_is_uni_lower(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isLOWER_uni(c);
-}
-
-bool
-Perl_is_uni_cntrl(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isCNTRL_L1(c);
-}
-
-bool
-Perl_is_uni_graph(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isGRAPH_uni(c);
-}
-
-bool
-Perl_is_uni_print(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isPRINT_uni(c);
-}
-
-bool
-Perl_is_uni_punct(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isPUNCT_uni(c);
-}
-
-bool
-Perl_is_uni_xdigit(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isXDIGIT_uni(c);
-}
-
-bool
-Perl_is_uni_alnum_lc(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isWORDCHAR_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_alnumc_lc(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isALPHANUMERIC_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_idfirst_lc(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- /* XXX Should probably be something that resolves to the old IDFIRST, but
- * this function is deprecated, so not bothering */
- return isIDFIRST_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_alpha_lc(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isALPHA_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_ascii_lc(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isASCII_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_blank_lc(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isBLANK_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_space_lc(pTHX_ UV c)
-{
- PERL_UNUSED_CONTEXT;
- return isSPACE_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_digit_lc(pTHX_ UV c)
-{
- return isDIGIT_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_idfirst(pTHX_ UV c)
-{
- U8 tmpbuf[UTF8_MAXBYTES+1];
- uvchr_to_utf8(tmpbuf, c);
- return _is_utf8_idstart(tmpbuf);
-}
-
-bool
-Perl_is_utf8_idfirst(pTHX_ const U8 *p) /* The naming is historical. */
-{
- PERL_ARGS_ASSERT_IS_UTF8_IDFIRST;
-
- return _is_utf8_idstart(p);
-}
-
-bool
-Perl_is_utf8_xidfirst(pTHX_ const U8 *p) /* The naming is historical. */
-{
- PERL_ARGS_ASSERT_IS_UTF8_XIDFIRST;
-
- return _is_utf8_xidstart(p);
-}
-
-bool
-Perl_is_utf8_idcont(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_IDCONT;
-
- return _is_utf8_idcont(p);
-}
-
-bool
-Perl_is_utf8_xidcont(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_XIDCONT;
-
- return _is_utf8_xidcont(p);
-}
-
-bool
-Perl_is_uni_upper_lc(pTHX_ UV c)
-{
- return isUPPER_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_lower_lc(pTHX_ UV c)
-{
- return isLOWER_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_cntrl_lc(pTHX_ UV c)
-{
- return isCNTRL_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_graph_lc(pTHX_ UV c)
-{
- return isGRAPH_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_print_lc(pTHX_ UV c)
-{
- return isPRINT_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_punct_lc(pTHX_ UV c)
-{
- return isPUNCT_LC_uvchr(c);
-}
-
-bool
-Perl_is_uni_xdigit_lc(pTHX_ UV c)
-{
- return isXDIGIT_LC_uvchr(c);
-}
-
-U32
-Perl_to_uni_upper_lc(pTHX_ U32 c)
-{
- /* XXX returns only the first character -- do not use XXX */
- /* XXX no locale support yet */
- STRLEN len;
- U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
- return (U32)to_uni_upper(c, tmpbuf, &len);
-}
-
-U32
-Perl_to_uni_title_lc(pTHX_ U32 c)
-{
- /* XXX returns only the first character XXX -- do not use XXX */
- /* XXX no locale support yet */
- STRLEN len;
- U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
- return (U32)to_uni_title(c, tmpbuf, &len);
-}
-
-U32
-Perl_to_uni_lower_lc(pTHX_ U32 c)
-{
- /* XXX returns only the first character -- do not use XXX */
- /* XXX no locale support yet */
- STRLEN len;
- U8 tmpbuf[UTF8_MAXBYTES_CASE+1];
- return (U32)to_uni_lower(c, tmpbuf, &len);
-}
-
-bool
-Perl_is_utf8_alnum(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_ALNUM;
-
- /* NOTE: "IsWord", not "IsAlnum", since Alnum is a true
- * descendant of isalnum(3), in other words, it doesn't
- * contain the '_'. --jhi */
- return isWORDCHAR_utf8(p);
-}
-
-bool
-Perl_is_utf8_alnumc(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_ALNUMC;
-
- return isALPHANUMERIC_utf8(p);
-}
-
-bool
-Perl_is_utf8_alpha(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_ALPHA;
-
- return isALPHA_utf8(p);
-}
-
-bool
-Perl_is_utf8_ascii(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_ASCII;
- PERL_UNUSED_CONTEXT;
-
- return isASCII_utf8(p);
-}
-
-bool
-Perl_is_utf8_blank(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_BLANK;
- PERL_UNUSED_CONTEXT;
-
- return isBLANK_utf8(p);
-}
-
-bool
-Perl_is_utf8_space(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_SPACE;
- PERL_UNUSED_CONTEXT;
-
- return isSPACE_utf8(p);
-}
-
-bool
-Perl_is_utf8_perl_space(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_PERL_SPACE;
- PERL_UNUSED_CONTEXT;
-
- /* Only true if is an ASCII space-like character, and ASCII is invariant
- * under utf8, so can just use the macro */
- return isSPACE_A(*p);
-}
-
-bool
-Perl_is_utf8_perl_word(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_PERL_WORD;
- PERL_UNUSED_CONTEXT;
-
- /* Only true if is an ASCII word character, and ASCII is invariant
- * under utf8, so can just use the macro */
- return isWORDCHAR_A(*p);
-}
-
-bool
-Perl_is_utf8_digit(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_DIGIT;
-
- return isDIGIT_utf8(p);
-}
-
-bool
-Perl_is_utf8_posix_digit(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_POSIX_DIGIT;
- PERL_UNUSED_CONTEXT;
-
- /* Only true if is an ASCII digit character, and ASCII is invariant
- * under utf8, so can just use the macro */
- return isDIGIT_A(*p);
-}
-
-bool
-Perl_is_utf8_upper(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_UPPER;
-
- return isUPPER_utf8(p);
-}
-
-bool
-Perl_is_utf8_lower(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_LOWER;
-
- return isLOWER_utf8(p);
-}
-
-bool
-Perl_is_utf8_cntrl(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_CNTRL;
- PERL_UNUSED_CONTEXT;
-
- return isCNTRL_utf8(p);
-}
-
-bool
-Perl_is_utf8_graph(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_GRAPH;
-
- return isGRAPH_utf8(p);
-}
-
-bool
-Perl_is_utf8_print(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_PRINT;
-
- return isPRINT_utf8(p);
-}
-
-bool
-Perl_is_utf8_punct(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_PUNCT;
-
- return isPUNCT_utf8(p);
-}
-
-bool
-Perl_is_utf8_xdigit(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_XDIGIT;
- PERL_UNUSED_CONTEXT;
-
- return isXDIGIT_utf8(p);
-}
-
-bool
-Perl_is_utf8_mark(pTHX_ const U8 *p)
-{
- PERL_ARGS_ASSERT_IS_UTF8_MARK;
-
- return _is_utf8_mark(p);
-}
-
/*
=for apidoc is_utf8_char
@@ -1661,14 +1196,15 @@ Perl_is_utf8_char(const U8 *s)
PERL_ARGS_ASSERT_IS_UTF8_CHAR;
/* Assumes we have enough space, which is why this is deprecated. But the
- * strnlen() makes it safe for the common case of NUL-terminated strings */
- return isUTF8_CHAR(s, s + my_strnlen((char *) s, UTF8SKIP(s)));
+ * UTF8_CHK_SKIP(s)) makes it safe for the common case of NUL-terminated
+ * strings */
+ return isUTF8_CHAR(s, s + UTF8_CHK_SKIP(s));
}
/*
=for apidoc is_utf8_char_buf
-This is identical to the macro L</isUTF8_CHAR>.
+This is identical to the macro L<perlapi/isUTF8_CHAR>.
=cut */
@@ -1714,7 +1250,7 @@ NULL) to -1. If those warnings are off, the computed value if well-defined (or
the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
next possible position in C<s> that could begin a non-malformed character.
-See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
+See L<perlapi/utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
=cut
*/
@@ -1729,7 +1265,7 @@ Perl_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
}
/*
-=for apidoc Am|HV *|pad_compname_type|PADOFFSET po
+=for apidoc pad_compname_type
Looks up the type of the lexical variable at position C<po> in the
currently-compiling pad. If the variable is typed, the stash of the
@@ -1761,6 +1297,128 @@ Perl_newSVsv(pTHX_ SV *const old)
return newSVsv(old);
}
+bool
+Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
+{
+ PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
+
+ return sv_utf8_downgrade(sv, fail_ok);
+}
+
+char *
+Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
+{
+ PERL_ARGS_ASSERT_SV_2PVUTF8;
+
+ return sv_2pvutf8(sv, lp);
+}
+
+char *
+Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
+{
+ PERL_ARGS_ASSERT_SV_2PVBYTE;
+
+ return sv_2pvbyte(sv, lp);
+}
+
+U8 *
+Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv)
+{
+ PERL_ARGS_ASSERT_UVUNI_TO_UTF8;
+
+ return uvoffuni_to_utf8_flags(d, uv, 0);
+}
+
+/*
+=for apidoc utf8n_to_uvuni
+
+Instead use L<perlapi/utf8_to_uvchr_buf>, or rarely, L<perlapi/utf8n_to_uvchr>.
+
+This function was useful for code that wanted to handle both EBCDIC and
+ASCII platforms with Unicode properties, but starting in Perl v5.20, the
+distinctions between the platforms have mostly been made invisible to most
+code, so this function is quite unlikely to be what you want. If you do need
+this precise functionality, use instead
+C<L<NATIVE_TO_UNI(utf8_to_uvchr_buf(...))|perlapi/utf8_to_uvchr_buf>>
+or C<L<NATIVE_TO_UNI(utf8n_to_uvchr(...))|perlapi/utf8n_to_uvchr>>.
+
+=cut
+*/
+
+UV
+Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
+{
+ PERL_ARGS_ASSERT_UTF8N_TO_UVUNI;
+
+ return NATIVE_TO_UNI(utf8n_to_uvchr(s, curlen, retlen, flags));
+}
+
+/*
+=for apidoc uvuni_to_utf8_flags
+
+Instead you almost certainly want to use L<perlapi/uvchr_to_utf8> or
+L<perlapi/uvchr_to_utf8_flags>.
+
+This function is a deprecated synonym for L</uvoffuni_to_utf8_flags>,
+which itself, while not deprecated, should be used only in isolated
+circumstances. These functions were useful for code that wanted to handle
+both EBCDIC and ASCII platforms with Unicode properties, but starting in Perl
+v5.20, the distinctions between the platforms have mostly been made invisible
+to most code, so this function is quite unlikely to be what you want.
+
+=cut
+*/
+
+U8 *
+Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
+{
+ PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS;
+
+ return uvoffuni_to_utf8_flags(d, uv, flags);
+}
+
+/*
+=for apidoc utf8_to_uvchr
+
+Returns the native code point of the first character in the string C<s>
+which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
+length, in bytes, of that character.
+
+Some, but not all, UTF-8 malformations are detected, and in fact, some
+malformed input could cause reading beyond the end of the input buffer, which
+is why this function is deprecated. Use L</utf8_to_uvchr_buf> instead.
+
+If C<s> points to one of the detected malformations, and UTF8 warnings are
+enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
+C<NULL>) to -1. If those warnings are off, the computed value if well-defined (or
+the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
+is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
+next possible position in C<s> that could begin a non-malformed character.
+See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
+
+=cut
+*/
+
+UV
+Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen)
+{
+ PERL_ARGS_ASSERT_UTF8_TO_UVCHR;
+
+ /* This function is unsafe if malformed UTF-8 input is given it, which is
+ * why the function is deprecated. If the first byte of the input
+ * indicates that there are more bytes remaining in the sequence that forms
+ * the character than there are in the input buffer, it can read past the
+ * end. But we can make it safe if the input string happens to be
+ * NUL-terminated, as many strings in Perl are, by refusing to read past a
+ * NUL, which is what UTF8_CHK_SKIP() does. A NUL indicates the start of
+ * the next character anyway. If the input isn't NUL-terminated, the
+ * function remains unsafe, as it always has been. */
+
+ return utf8_to_uvchr_buf(s, s + UTF8_CHK_SKIP(s), retlen);
+}
+
+GCC_DIAG_RESTORE
+
#endif /* NO_MATHOMS */
/*
diff --git a/gnu/usr.bin/perl/metaconfig.h b/gnu/usr.bin/perl/metaconfig.h
index 73e0ab0257a..baba5eac687 100644
--- a/gnu/usr.bin/perl/metaconfig.h
+++ b/gnu/usr.bin/perl/metaconfig.h
@@ -13,18 +13,5 @@
* Symbols should only be here temporarily. Once they are actually used,
* they should be removed from here.
*
- * HAS_BUILTIN_ADD_OVERFLOW
- * HAS_BUILTIN_MUL_OVERFLOW
- * HAS_BUILTIN_SUB_OVERFLOW
- * HAS_LOCALECONV_L
- * HAS_MBRLEN
- * HAS_MBRTOWC
- * HAS_NANOSLEEP
- * HAS_STRTOD_L
- * HAS_STRTOLD_L
- * I_WCHAR
- * I_WCTYPE
- * HAS_TOWLOWER
- * HAS_TOWUPPER
- * SETLOCALE_ACCEPTS_ANY_LOCALE_NAME
+ * HAS_WCRTOMB
*/
diff --git a/gnu/usr.bin/perl/mg.c b/gnu/usr.bin/perl/mg.c
index 910bbd19cb4..e603b60989d 100644
--- a/gnu/usr.bin/perl/mg.c
+++ b/gnu/usr.bin/perl/mg.c
@@ -41,6 +41,7 @@ tie.
#include "EXTERN.h"
#define PERL_IN_MG_C
#include "perl.h"
+#include "feature.h"
#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
# ifdef I_GRP
@@ -62,12 +63,6 @@ tie.
# include <sys/prctl.h>
#endif
-#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
-Signal_t Perl_csighandler(int sig, siginfo_t *, void *);
-#else
-Signal_t Perl_csighandler(int sig);
-#endif
-
#ifdef __Lynx__
/* Missing protos on LynxOS */
void setruid(uid_t id);
@@ -600,7 +595,7 @@ Perl_mg_free(pTHX_ SV *sv)
}
/*
-=for apidoc Am|void|mg_free_type|SV *sv|int how
+=for apidoc mg_free_type
Remove any magic of type C<how> from the SV C<sv>. See L</sv_magic>.
@@ -851,7 +846,7 @@ S_fixup_errno_string(pTHX_ SV* sv)
}
/*
-=for apidoc Am|SV *|sv_string_from_errnum|int errnum|SV *tgtsv
+=for apidoc sv_string_from_errnum
Generates the message string describing an OS error and returns it as
an SV. C<errnum> must be a value that C<errno> could take, identifying
@@ -1032,7 +1027,9 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
break;
case '\006': /* ^F */
- sv_setiv(sv, (IV)PL_maxsysfd);
+ if (nextchar == '\0') {
+ sv_setiv(sv, (IV)PL_maxsysfd);
+ }
break;
case '\007': /* ^GLOBAL_PHASE */
if (strEQ(remaining, "LOBAL_PHASE")) {
@@ -1481,19 +1478,45 @@ Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
return sv_unmagic(sv, mg->mg_type);
}
+
+#ifdef PERL_USE_3ARG_SIGHANDLER
Signal_t
-#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
-Perl_csighandler(int sig, siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
+Perl_csighandler(int sig, Siginfo_t *sip, void *uap)
+{
+ Perl_csighandler3(sig, sip, uap);
+}
#else
+Signal_t
Perl_csighandler(int sig)
+{
+ Perl_csighandler3(sig, NULL, NULL);
+}
#endif
+
+Signal_t
+Perl_csighandler1(int sig)
+{
+ Perl_csighandler3(sig, NULL, NULL);
+}
+
+/* Handler intended to directly handle signal calls from the kernel.
+ * (Depending on configuration, the kernel may actually call one of the
+ * wrappers csighandler() or csighandler1() instead.)
+ * It either queues up the signal or dispatches it immediately depending
+ * on whether safe signals are enabled and whether the signal is capable
+ * of being deferred (e.g. SEGV isn't).
+ */
+
+Signal_t
+Perl_csighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
{
#ifdef PERL_GET_SIG_CONTEXT
dTHXa(PERL_GET_SIG_CONTEXT);
#else
dTHX;
#endif
-#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
+
+#ifdef PERL_USE_3ARG_SIGHANDLER
#if defined(__cplusplus) && defined(__GNUC__)
/* g++ doesn't support PERL_UNUSED_DECL, so the sip and uap
* parameters would be warned about. */
@@ -1501,6 +1524,7 @@ Perl_csighandler(int sig)
PERL_UNUSED_ARG(uap);
#endif
#endif
+
#ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
(void) rsignal(sig, PL_csighandlerp);
if (PL_sig_ignoring[sig]) return;
@@ -1526,11 +1550,20 @@ Perl_csighandler(int sig)
(PL_signals & PERL_SIGNALS_UNSAFE_FLAG))
/* Call the perl level handler now--
* with risk we may be in malloc() or being destructed etc. */
-#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
- (*PL_sighandlerp)(sig, NULL, NULL);
+ {
+ if (PL_sighandlerp == Perl_sighandler)
+ /* default handler, so can call perly_sighandler() directly
+ * rather than via Perl_sighandler, passing the extra
+ * 'safe = false' arg
+ */
+ Perl_perly_sighandler(sig, NULL, NULL, 0 /* unsafe */);
+ else
+#ifdef PERL_USE_3ARG_SIGHANDLER
+ (*PL_sighandlerp)(sig, NULL, NULL);
#else
- (*PL_sighandlerp)(sig);
+ (*PL_sighandlerp)(sig);
#endif
+ }
else {
if (!PL_psig_pend) return;
/* Set a flag to say this signal is pending, that is awaiting delivery after
@@ -1608,11 +1641,19 @@ Perl_despatch_signals(pTHX)
}
#endif
PL_psig_pend[sig] = 0;
-#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
- (*PL_sighandlerp)(sig, NULL, NULL);
+ if (PL_sighandlerp == Perl_sighandler)
+ /* default handler, so can call perly_sighandler() directly
+ * rather than via Perl_sighandler, passing the extra
+ * 'safe = true' arg
+ */
+ Perl_perly_sighandler(sig, NULL, NULL, 1 /* safe */);
+ else
+#ifdef PERL_USE_3ARG_SIGHANDLER
+ (*PL_sighandlerp)(sig, NULL, NULL);
#else
- (*PL_sighandlerp)(sig);
+ (*PL_sighandlerp)(sig);
#endif
+
#ifdef HAS_SIGPROCMASK
if (!was_blocked)
LEAVE;
@@ -1712,7 +1753,8 @@ Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
Ideally we'd find some way of making SVs at (C) compile time, or
at least, doing most of the work. */
if (!PL_psig_name[i]) {
- PL_psig_name[i] = newSVpvn(s, len);
+ const char* name = PL_sig_name[i];
+ PL_psig_name[i] = newSVpvn(name, strlen(name));
SvREADONLY_on(PL_psig_name[i]);
}
} else {
@@ -1928,8 +1970,8 @@ Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
va_start(args, argc);
do {
- SV *const sv = va_arg(args, SV *);
- PUSHs(sv);
+ SV *const this_sv = va_arg(args, SV *);
+ PUSHs(this_sv);
} while (--argc);
va_end(args);
@@ -2840,7 +2882,9 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
Perl_croak(aTHX_ "${^ENCODING} is no longer supported");
break;
case '\006': /* ^F */
- PL_maxsysfd = SvIV(sv);
+ if (mg->mg_ptr[1] == '\0') {
+ PL_maxsysfd = SvIV(sv);
+ }
break;
case '\010': /* ^H */
{
@@ -2922,9 +2966,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) {
if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
if (!SvPOK(sv)) {
- if (!specialWARN(PL_compiling.cop_warnings))
- PerlMemShared_free(PL_compiling.cop_warnings);
- PL_compiling.cop_warnings = pWARN_STD;
+ free_and_set_cop_warnings(&PL_compiling, pWARN_STD);
break;
}
{
@@ -2936,26 +2978,22 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
not_all |= ptr[i] ^ 0x55;
}
if (!not_none) {
- if (!specialWARN(PL_compiling.cop_warnings))
- PerlMemShared_free(PL_compiling.cop_warnings);
- PL_compiling.cop_warnings = pWARN_NONE;
+ free_and_set_cop_warnings(&PL_compiling, pWARN_NONE);
} else if (len >= WARNsize && !not_all) {
- if (!specialWARN(PL_compiling.cop_warnings))
- PerlMemShared_free(PL_compiling.cop_warnings);
- PL_compiling.cop_warnings = pWARN_ALL;
- PL_dowarn |= G_WARN_ONCE ;
- }
- else {
- STRLEN len;
- const char *const p = SvPV_const(sv, len);
-
- PL_compiling.cop_warnings
- = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
+ free_and_set_cop_warnings(&PL_compiling, pWARN_ALL);
+ PL_dowarn |= G_WARN_ONCE ;
+ }
+ else {
+ STRLEN len;
+ const char *const p = SvPV_const(sv, len);
+
+ PL_compiling.cop_warnings
+ = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
p, len);
- if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
+ if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
PL_dowarn |= G_WARN_ONCE ;
- }
+ }
}
}
@@ -3078,7 +3116,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
#else
# define PERL_VMS_BANG 0
#endif
-#if defined(WIN32) && ! defined(UNDER_CE)
+#if defined(WIN32)
SETERRNO(win32_get_errno(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0),
(SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
#else
@@ -3307,12 +3345,62 @@ Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len)
return -1;
}
+
+/* Perl_sighandler(), Perl_sighandler1(), Perl_sighandler3():
+ * these three function are intended to be called by the OS as 'C' level
+ * signal handler functions in the case where unsafe signals are being
+ * used - i.e. they immediately invoke Perl_perly_sighandler() to call the
+ * perl-level sighandler, rather than deferring.
+ * In fact, the core itself will normally use Perl_csighandler as the
+ * OS-level handler; that function will then decide whether to queue the
+ * signal or call Perl_sighandler / Perl_perly_sighandler itself. So these
+ * functions are more useful for e.g. POSIX.xs when it wants explicit
+ * control of what's happening.
+ */
+
+
+#ifdef PERL_USE_3ARG_SIGHANDLER
+
Signal_t
-#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
-Perl_sighandler(int sig, siginfo_t *sip, void *uap)
+Perl_sighandler(int sig, Siginfo_t *sip, void *uap)
+{
+ Perl_perly_sighandler(sig, sip, uap, 0);
+}
+
#else
+
+Signal_t
Perl_sighandler(int sig)
+{
+ Perl_perly_sighandler(sig, NULL, NULL, 0);
+}
+
#endif
+
+Signal_t
+Perl_sighandler1(int sig)
+{
+ Perl_perly_sighandler(sig, NULL, NULL, 0);
+}
+
+Signal_t
+Perl_sighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
+{
+ Perl_perly_sighandler(sig, sip, uap, 0);
+}
+
+
+/* Invoke the perl-level signal handler. This function is called either
+ * directly from one of the C-level signals handlers (Perl_sighandler or
+ * Perl_csighandler), or for safe signals, later from
+ * Perl_despatch_signals() at a suitable safe point during execution.
+ *
+ * 'safe' is a boolean indicating the latter call path.
+ */
+
+Signal_t
+Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL,
+ void *uap PERL_UNUSED_DECL, bool safe)
{
#ifdef PERL_GET_SIG_CONTEXT
dTHXa(PERL_GET_SIG_CONTEXT);
@@ -3385,48 +3473,48 @@ Perl_sighandler(int sig)
PUSHSTACKi(PERLSI_SIGNAL);
PUSHMARK(SP);
PUSHs(sv);
+
#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
{
struct sigaction oact;
- if (sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
- if (sip) {
- HV *sih = newHV();
- SV *rv = newRV_noinc(MUTABLE_SV(sih));
- /* The siginfo fields signo, code, errno, pid, uid,
- * addr, status, and band are defined by POSIX/SUSv3. */
- (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
- (void)hv_stores(sih, "code", newSViv(sip->si_code));
-#ifdef HAS_SIGINFO_SI_ERRNO
- (void)hv_stores(sih, "errno", newSViv(sip->si_errno));
-#endif
-#ifdef HAS_SIGINFO_SI_STATUS
- (void)hv_stores(sih, "status", newSViv(sip->si_status));
-#endif
-#ifdef HAS_SIGINFO_SI_UID
- {
- SV *uid = newSV(0);
- sv_setuid(uid, sip->si_uid);
- (void)hv_stores(sih, "uid", uid);
- }
-#endif
-#ifdef HAS_SIGINFO_SI_PID
- (void)hv_stores(sih, "pid", newSViv(sip->si_pid));
-#endif
-#ifdef HAS_SIGINFO_SI_ADDR
- (void)hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
-#endif
-#ifdef HAS_SIGINFO_SI_BAND
- (void)hv_stores(sih, "band", newSViv(sip->si_band));
-#endif
- EXTEND(SP, 2);
- PUSHs(rv);
- mPUSHp((char *)sip, sizeof(*sip));
- }
+ if (sip && sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
+ HV *sih = newHV();
+ SV *rv = newRV_noinc(MUTABLE_SV(sih));
+ /* The siginfo fields signo, code, errno, pid, uid,
+ * addr, status, and band are defined by POSIX/SUSv3. */
+ (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
+ (void)hv_stores(sih, "code", newSViv(sip->si_code));
+# ifdef HAS_SIGINFO_SI_ERRNO
+ (void)hv_stores(sih, "errno", newSViv(sip->si_errno));
+# endif
+# ifdef HAS_SIGINFO_SI_STATUS
+ (void)hv_stores(sih, "status", newSViv(sip->si_status));
+# endif
+# ifdef HAS_SIGINFO_SI_UID
+ {
+ SV *uid = newSV(0);
+ sv_setuid(uid, sip->si_uid);
+ (void)hv_stores(sih, "uid", uid);
+ }
+# endif
+# ifdef HAS_SIGINFO_SI_PID
+ (void)hv_stores(sih, "pid", newSViv(sip->si_pid));
+# endif
+# ifdef HAS_SIGINFO_SI_ADDR
+ (void)hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
+# endif
+# ifdef HAS_SIGINFO_SI_BAND
+ (void)hv_stores(sih, "band", newSViv(sip->si_band));
+# endif
+ EXTEND(SP, 2);
+ PUSHs(rv);
+ mPUSHp((char *)sip, sizeof(*sip));
}
}
#endif
+
PUTBACK;
errsv_save = newSVsv(ERRSV);
@@ -3438,27 +3526,35 @@ Perl_sighandler(int sig)
SV * const errsv = ERRSV;
if (SvTRUE_NN(errsv)) {
SvREFCNT_dec(errsv_save);
+
#ifndef PERL_MICRO
- /* Handler "died", for example to get out of a restart-able read().
- * Before we re-do that on its behalf re-enable the signal which was
- * blocked by the system when we entered.
- */
-#ifdef HAS_SIGPROCMASK
-#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
- if (sip || uap)
-#endif
- {
+ /* Handler "died", for example to get out of a restart-able read().
+ * Before we re-do that on its behalf re-enable the signal which was
+ * blocked by the system when we entered.
+ */
+# ifdef HAS_SIGPROCMASK
+ if (!safe) {
+ /* safe signals called via dispatch_signals() set up a
+ * savestack destructor, unblock_sigmask(), to
+ * automatically unblock the handler at the end. If
+ * instead we get here directly, we have to do it
+ * ourselves
+ */
sigset_t set;
sigemptyset(&set);
sigaddset(&set,sig);
sigprocmask(SIG_UNBLOCK, &set, NULL);
}
-#else
+# else
/* Not clear if this will work */
+ /* XXX not clear if this should be protected by 'if (safe)'
+ * too */
+
(void)rsignal(sig, SIG_IGN);
(void)rsignal(sig, PL_csighandlerp);
-#endif
+# endif
#endif /* !PERL_MICRO */
+
die_sv(errsv);
}
else {
@@ -3574,6 +3670,7 @@ Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg)
PL_hints |= HINT_LOCALIZE_HH;
CopHINTHASH_set(&PL_compiling,
cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0));
+ magic_sethint_feature(key, NULL, 0, sv, 0);
return 0;
}
@@ -3598,6 +3695,10 @@ Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg)
MUTABLE_SV(mg->mg_ptr), 0, 0)
: cophh_delete_pvn(CopHINTHASH_get(&PL_compiling),
mg->mg_ptr, mg->mg_len, 0, 0));
+ if (mg->mg_len == HEf_SVKEY)
+ magic_sethint_feature(MUTABLE_SV(mg->mg_ptr), NULL, 0, NULL, FALSE);
+ else
+ magic_sethint_feature(NULL, mg->mg_ptr, mg->mg_len, NULL, FALSE);
return 0;
}
@@ -3616,6 +3717,7 @@ Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg)
PERL_UNUSED_ARG(mg);
cophh_free(CopHINTHASH_get(&PL_compiling));
CopHINTHASH_set(&PL_compiling, cophh_new_empty());
+ CLEARFEATUREBITS();
return 0;
}
diff --git a/gnu/usr.bin/perl/mkppport b/gnu/usr.bin/perl/mkppport
index 3a8210954e0..b463aafd885 100755
--- a/gnu/usr.bin/perl/mkppport
+++ b/gnu/usr.bin/perl/mkppport
@@ -7,7 +7,8 @@ use File::Compare qw( compare );
use File::Copy qw( copy );
use File::Basename qw( dirname );
-sub iterdirs(&);
+use feature 'signatures';
+no warnings 'experimental::signatures';
my $rootdir = dirname($0);
@@ -37,15 +38,14 @@ unless (@destdirs) {
# Remove all installed ppport.h files
if ($opt{clean}) {
- iterdirs {
- my($dir, $fulldir) = @_;
+ iterdirs( sub ($dir, $fulldir) {
my $dest = File::Spec->catfile($fulldir, 'ppport.h');
if (-f $dest) {
print "removing ppport.h for $dir\n";
unlink $dest or warn "WARNING: could not remove $dest: $!\n";
1 while unlink $dest; # remove any remaining versions
}
- };
+ } );
exit 0;
}
@@ -83,8 +83,7 @@ unless (-e 'ppport.h') {
}
# Now install the created ppport.h into extension directories
-iterdirs {
- my($dir, $fulldir) = @_;
+iterdirs( sub ($dir, $fulldir) {
my $dest = File::Spec->catfile($fulldir, 'ppport.h');
if (compare('ppport.h', $dest)) {
print "installing ppport.h for $dir\n";
@@ -93,17 +92,15 @@ iterdirs {
else {
print "ppport.h in $dir is up-to-date\n";
}
-};
+} );
exit 0;
#---------------------------------------
# Iterate through extension directories
#---------------------------------------
-sub iterdirs(&)
+sub iterdirs($code)
{
- my $code = shift;
-
for my $dir (@destdirs) {
my $fulldir = File::Spec->catdir($absroot, $dir);
if (-d $fulldir) {
@@ -118,9 +115,8 @@ sub iterdirs(&)
#----------------------------------------
# Read the list of extension directories
#----------------------------------------
-sub readlist
+sub readlist($list)
{
- my $list = shift;
my @dirs;
open LIST, $list or die "$list: $!\n";
while (<LIST>) {
diff --git a/gnu/usr.bin/perl/mro_core.c b/gnu/usr.bin/perl/mro_core.c
index c22e3373f16..1fc7c7ca9de 100644
--- a/gnu/usr.bin/perl/mro_core.c
+++ b/gnu/usr.bin/perl/mro_core.c
@@ -21,6 +21,7 @@
/*
=head1 MRO Functions
These functions are related to the method resolution order of perl classes
+Also see L<perlmroapi>.
=cut
*/
@@ -118,7 +119,8 @@ Perl_mro_get_from_name(pTHX_ SV *name) {
/*
=for apidoc mro_register
-Registers a custom mro plugin. See L<perlmroapi> for details.
+Registers a custom mro plugin. See L<perlmroapi> for details on this and other
+mro functions.
=cut
*/
@@ -857,15 +859,15 @@ Perl_mro_package_moved(pTHX_ HV * const stash, HV * const oldstash,
mro_isa_changed_in on each. */
hv_iterinit(stashes);
while((iter = hv_iternext(stashes))) {
- HV * const stash = *(HV **)HEK_KEY(HeKEY_hek(iter));
- if(HvENAME(stash)) {
+ HV * const this_stash = *(HV **)HEK_KEY(HeKEY_hek(iter));
+ if(HvENAME(this_stash)) {
/* We have to restore the original meta->isa (that
mro_gather_and_rename set aside for us) this way, in case
one class in this list is a superclass of a another class
that we have already encountered. In such a case, meta->isa
will have been overwritten without old entries being deleted
from PL_isarev. */
- struct mro_meta * const meta = HvMROMETA(stash);
+ struct mro_meta * const meta = HvMROMETA(this_stash);
if(meta->isa != (HV *)HeVAL(iter)){
SvREFCNT_dec(meta->isa);
meta->isa
@@ -874,7 +876,7 @@ Perl_mro_package_moved(pTHX_ HV * const stash, HV * const oldstash,
: (HV *)HeVAL(iter);
HeVAL(iter) = NULL; /* We donated our reference count. */
}
- mro_isa_changed_in(stash);
+ mro_isa_changed_in(this_stash);
}
}
}
diff --git a/gnu/usr.bin/perl/numeric.c b/gnu/usr.bin/perl/numeric.c
index 2ac50a35daa..0a3efb6df0e 100644
--- a/gnu/usr.bin/perl/numeric.c
+++ b/gnu/usr.bin/perl/numeric.c
@@ -34,8 +34,8 @@ values, including such things as replacements for the OS's atof() function
PERL_STATIC_INLINE NV
S_strtod(pTHX_ const char * const s, char ** e)
{
- NV result;
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
+ NV result;
STORE_LC_NUMERIC_SET_TO_NEEDED();
@@ -66,6 +66,8 @@ S_strtod(pTHX_ const char * const s, char ** e)
result = strtod(s, e);
+# else
+# error No strtod() equivalent found
# endif
RESTORE_LC_NUMERIC();
@@ -88,14 +90,14 @@ It properly handles the locale radix character, meaning it expects a dot except
when called from within the scope of S<C<use locale>>, in which case the radix
character should be that specified by the current locale.
-The synonym Strod() may be used instead.
+The synonym Strtod() may be used instead.
=cut
*/
NV
-my_strtod(const char * const s, char **e)
+Perl_my_strtod(const char * const s, char **e)
{
dTHX;
@@ -206,24 +208,31 @@ Perl_cast_uv(NV f)
converts a string representing a binary number to numeric form.
-On entry C<start> and C<*len> give the string to scan, C<*flags> gives
-conversion flags, and C<result> should be C<NULL> or a pointer to an NV.
-The scan stops at the end of the string, or the first invalid character.
-Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>, encountering an
-invalid character will also trigger a warning.
-On return C<*len> is set to the length of the scanned string,
-and C<*flags> gives output flags.
+On entry C<start> and C<*len_p> give the string to scan, C<*flags> gives
+conversion flags, and C<result> should be C<NULL> or a pointer to an NV. The
+scan stops at the end of the string, or at just before the first invalid
+character. Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>,
+encountering an invalid character (except NUL) will also trigger a warning. On
+return C<*len_p> is set to the length of the scanned string, and C<*flags>
+gives output flags.
If the value is <= C<UV_MAX> it is returned as a UV, the output flags are clear,
and nothing is written to C<*result>. If the value is > C<UV_MAX>, C<grok_bin>
returns C<UV_MAX>, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
-and writes the value to C<*result> (or the value is discarded if C<result>
-is NULL).
+and writes an approximation of the correct value into C<*result> (which is an
+NV; or the approximation is discarded if C<result> is NULL).
The binary number may optionally be prefixed with C<"0b"> or C<"b"> unless
-C<PERL_SCAN_DISALLOW_PREFIX> is set in C<*flags> on entry. If
-C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then the binary
-number may use C<"_"> characters to separate digits.
+C<PERL_SCAN_DISALLOW_PREFIX> is set in C<*flags> on entry.
+
+If C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then any or all pairs of
+digits may be separated from each other by a single underscore; also a single
+leading underscore is accepted.
+
+=for apidoc Amnh||PERL_SCAN_ALLOW_UNDERSCORES
+=for apidoc Amnh||PERL_SCAN_DISALLOW_PREFIX
+=for apidoc Amnh||PERL_SCAN_GREATER_THAN_UV_MAX
+=for apidoc Amnh||PERL_SCAN_SILENT_ILLDIGIT
=cut
@@ -235,93 +244,9 @@ on this platform.
UV
Perl_grok_bin(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
{
- const char *s = start;
- STRLEN len = *len_p;
- UV value = 0;
- NV value_nv = 0;
-
- const UV max_div_2 = UV_MAX / 2;
- const bool allow_underscores = cBOOL(*flags & PERL_SCAN_ALLOW_UNDERSCORES);
- bool overflowed = FALSE;
- char bit;
-
PERL_ARGS_ASSERT_GROK_BIN;
- if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
- /* strip off leading b or 0b.
- for compatibility silently suffer "b" and "0b" as valid binary
- numbers. */
- if (len >= 1) {
- if (isALPHA_FOLD_EQ(s[0], 'b')) {
- s++;
- len--;
- }
- else if (len >= 2 && s[0] == '0' && (isALPHA_FOLD_EQ(s[1], 'b'))) {
- s+=2;
- len-=2;
- }
- }
- }
-
- for (; len-- && (bit = *s); s++) {
- if (bit == '0' || bit == '1') {
- /* Write it in this wonky order with a goto to attempt to get the
- compiler to make the common case integer-only loop pretty tight.
- With gcc seems to be much straighter code than old scan_bin. */
- redo:
- if (!overflowed) {
- if (value <= max_div_2) {
- value = (value << 1) | (bit - '0');
- continue;
- }
- /* Bah. We're just overflowed. */
- /* diag_listed_as: Integer overflow in %s number */
- Perl_ck_warner_d(aTHX_ packWARN(WARN_OVERFLOW),
- "Integer overflow in binary number");
- overflowed = TRUE;
- value_nv = (NV) value;
- }
- value_nv *= 2.0;
- /* If an NV has not enough bits in its mantissa to
- * represent a UV this summing of small low-order numbers
- * is a waste of time (because the NV cannot preserve
- * the low-order bits anyway): we could just remember when
- * did we overflow and in the end just multiply value_nv by the
- * right amount. */
- value_nv += (NV)(bit - '0');
- continue;
- }
- if (bit == '_' && len && allow_underscores && (bit = s[1])
- && (bit == '0' || bit == '1'))
- {
- --len;
- ++s;
- goto redo;
- }
- if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
- Perl_ck_warner(aTHX_ packWARN(WARN_DIGIT),
- "Illegal binary digit '%c' ignored", *s);
- break;
- }
-
- if ( ( overflowed && value_nv > 4294967295.0)
-#if UVSIZE > 4
- || (!overflowed && value > 0xffffffff
- && ! (*flags & PERL_SCAN_SILENT_NON_PORTABLE))
-#endif
- ) {
- Perl_ck_warner(aTHX_ packWARN(WARN_PORTABLE),
- "Binary number > 0b11111111111111111111111111111111 non-portable");
- }
- *len_p = s - start;
- if (!overflowed) {
- *flags = 0;
- return value;
- }
- *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
- if (result)
- *result = value_nv;
- return UV_MAX;
+ return grok_bin(start, len_p, flags, result);
}
/*
@@ -330,119 +255,39 @@ Perl_grok_bin(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
converts a string representing a hex number to numeric form.
On entry C<start> and C<*len_p> give the string to scan, C<*flags> gives
-conversion flags, and C<result> should be C<NULL> or a pointer to an NV.
-The scan stops at the end of the string, or the first invalid character.
-Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>, encountering an
-invalid character will also trigger a warning.
-On return C<*len> is set to the length of the scanned string,
-and C<*flags> gives output flags.
+conversion flags, and C<result> should be C<NULL> or a pointer to an NV. The
+scan stops at the end of the string, or at just before the first invalid
+character. Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>,
+encountering an invalid character (except NUL) will also trigger a warning. On
+return C<*len_p> is set to the length of the scanned string, and C<*flags>
+gives output flags.
If the value is <= C<UV_MAX> it is returned as a UV, the output flags are clear,
and nothing is written to C<*result>. If the value is > C<UV_MAX>, C<grok_hex>
returns C<UV_MAX>, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
-and writes the value to C<*result> (or the value is discarded if C<result>
-is C<NULL>).
+and writes an approximation of the correct value into C<*result> (which is an
+NV; or the approximation is discarded if C<result> is NULL).
The hex number may optionally be prefixed with C<"0x"> or C<"x"> unless
-C<PERL_SCAN_DISALLOW_PREFIX> is set in C<*flags> on entry. If
-C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then the hex
-number may use C<"_"> characters to separate digits.
+C<PERL_SCAN_DISALLOW_PREFIX> is set in C<*flags> on entry.
+
+If C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then any or all pairs of
+digits may be separated from each other by a single underscore; also a single
+leading underscore is accepted.
=cut
-Not documented yet because experimental is C<PERL_SCAN_SILENT_NON_PORTABLE
+Not documented yet because experimental is C<PERL_SCAN_SILENT_NON_PORTABLE>
which suppresses any message for non-portable numbers, but which are valid
-on this platform.
+on this platform. But, C<*flags> will have the corresponding flag bit set.
*/
UV
Perl_grok_hex(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
{
- const char *s = start;
- STRLEN len = *len_p;
- UV value = 0;
- NV value_nv = 0;
- const UV max_div_16 = UV_MAX / 16;
- const bool allow_underscores = cBOOL(*flags & PERL_SCAN_ALLOW_UNDERSCORES);
- bool overflowed = FALSE;
-
PERL_ARGS_ASSERT_GROK_HEX;
- if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
- /* strip off leading x or 0x.
- for compatibility silently suffer "x" and "0x" as valid hex numbers.
- */
- if (len >= 1) {
- if (isALPHA_FOLD_EQ(s[0], 'x')) {
- s++;
- len--;
- }
- else if (len >= 2 && s[0] == '0' && (isALPHA_FOLD_EQ(s[1], 'x'))) {
- s+=2;
- len-=2;
- }
- }
- }
-
- for (; len-- && *s; s++) {
- if (isXDIGIT(*s)) {
- /* Write it in this wonky order with a goto to attempt to get the
- compiler to make the common case integer-only loop pretty tight.
- With gcc seems to be much straighter code than old scan_hex. */
- redo:
- if (!overflowed) {
- if (value <= max_div_16) {
- value = (value << 4) | XDIGIT_VALUE(*s);
- continue;
- }
- /* Bah. We're just overflowed. */
- /* diag_listed_as: Integer overflow in %s number */
- Perl_ck_warner_d(aTHX_ packWARN(WARN_OVERFLOW),
- "Integer overflow in hexadecimal number");
- overflowed = TRUE;
- value_nv = (NV) value;
- }
- value_nv *= 16.0;
- /* If an NV has not enough bits in its mantissa to
- * represent a UV this summing of small low-order numbers
- * is a waste of time (because the NV cannot preserve
- * the low-order bits anyway): we could just remember when
- * did we overflow and in the end just multiply value_nv by the
- * right amount of 16-tuples. */
- value_nv += (NV) XDIGIT_VALUE(*s);
- continue;
- }
- if (*s == '_' && len && allow_underscores && s[1]
- && isXDIGIT(s[1]))
- {
- --len;
- ++s;
- goto redo;
- }
- if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
- Perl_ck_warner(aTHX_ packWARN(WARN_DIGIT),
- "Illegal hexadecimal digit '%c' ignored", *s);
- break;
- }
-
- if ( ( overflowed && value_nv > 4294967295.0)
-#if UVSIZE > 4
- || (!overflowed && value > 0xffffffff
- && ! (*flags & PERL_SCAN_SILENT_NON_PORTABLE))
-#endif
- ) {
- Perl_ck_warner(aTHX_ packWARN(WARN_PORTABLE),
- "Hexadecimal number > 0xffffffff non-portable");
- }
- *len_p = s - start;
- if (!overflowed) {
- *flags = 0;
- return value;
- }
- *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
- if (result)
- *result = value_nv;
- return UV_MAX;
+ return grok_hex(start, len_p, flags, result);
}
/*
@@ -450,22 +295,26 @@ Perl_grok_hex(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
converts a string representing an octal number to numeric form.
-On entry C<start> and C<*len> give the string to scan, C<*flags> gives
-conversion flags, and C<result> should be C<NULL> or a pointer to an NV.
-The scan stops at the end of the string, or the first invalid character.
-Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>, encountering an
-8 or 9 will also trigger a warning.
-On return C<*len> is set to the length of the scanned string,
-and C<*flags> gives output flags.
+On entry C<start> and C<*len_p> give the string to scan, C<*flags> gives
+conversion flags, and C<result> should be C<NULL> or a pointer to an NV. The
+scan stops at the end of the string, or at just before the first invalid
+character. Unless C<PERL_SCAN_SILENT_ILLDIGIT> is set in C<*flags>,
+encountering an invalid character (except NUL) will also trigger a warning. On
+return C<*len_p> is set to the length of the scanned string, and C<*flags>
+gives output flags.
If the value is <= C<UV_MAX> it is returned as a UV, the output flags are clear,
and nothing is written to C<*result>. If the value is > C<UV_MAX>, C<grok_oct>
returns C<UV_MAX>, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
-and writes the value to C<*result> (or the value is discarded if C<result>
-is C<NULL>).
+and writes an approximation of the correct value into C<*result> (which is an
+NV; or the approximation is discarded if C<result> is NULL).
+
+If C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then any or all pairs of
+digits may be separated from each other by a single underscore; also a single
+leading underscore is accepted.
-If C<PERL_SCAN_ALLOW_UNDERSCORES> is set in C<*flags> then the octal
-number may use C<"_"> characters to separate digits.
+The C<PERL_SCAN_DISALLOW_PREFIX> flag is always treated as being set for
+this function.
=cut
@@ -477,76 +326,277 @@ on this platform.
UV
Perl_grok_oct(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
{
- const char *s = start;
+ PERL_ARGS_ASSERT_GROK_OCT;
+
+ return grok_oct(start, len_p, flags, result);
+}
+
+STATIC void
+S_output_non_portable(pTHX_ const U8 base)
+{
+ /* Display the proper message for a number in the given input base not
+ * fitting in 32 bits */
+ const char * which = (base == 2)
+ ? "Binary number > 0b11111111111111111111111111111111"
+ : (base == 8)
+ ? "Octal number > 037777777777"
+ : "Hexadecimal number > 0xffffffff";
+
+ PERL_ARGS_ASSERT_OUTPUT_NON_PORTABLE;
+
+ /* Also there are listings for the other two. That's because, since they
+ * are the first word, it would be hard for a user to find them there
+ * starting with a %s */
+ /* diag_listed_as: Hexadecimal number > 0xffffffff non-portable */
+ Perl_ck_warner(aTHX_ packWARN(WARN_PORTABLE), "%s non-portable", which);
+}
+
+UV
+Perl_grok_bin_oct_hex(pTHX_ const char *start,
+ STRLEN *len_p,
+ I32 *flags,
+ NV *result,
+ const unsigned shift, /* 1 for binary; 3 for octal;
+ 4 for hex */
+ const U8 class_bit,
+ const char prefix
+ )
+
+{
+ const char *s0 = start;
+ const char *s;
STRLEN len = *len_p;
+ STRLEN bytes_so_far; /* How many real digits have been processed */
UV value = 0;
NV value_nv = 0;
- const UV max_div_8 = UV_MAX / 8;
- const bool allow_underscores = cBOOL(*flags & PERL_SCAN_ALLOW_UNDERSCORES);
+ const PERL_UINT_FAST8_T base = 1 << shift; /* 2, 8, or 16 */
+ const UV max_div= UV_MAX / base; /* Value above which, the next digit
+ processed would overflow */
+ const I32 input_flags = *flags;
+ const bool allow_underscores =
+ cBOOL(input_flags & PERL_SCAN_ALLOW_UNDERSCORES);
bool overflowed = FALSE;
- PERL_ARGS_ASSERT_GROK_OCT;
+ /* In overflows, this keeps track of how much to multiply the overflowed NV
+ * by as we continue to parse the remaining digits */
+ NV factor = 0;
+
+ /* This function unifies the core of grok_bin, grok_oct, and grok_hex. It
+ * is optimized for hex conversion. For example, it uses XDIGIT_VALUE to
+ * find the numeric value of a digit. That requires more instructions than
+ * OCTAL_VALUE would, but gives the same result for the narrowed range of
+ * octal digits; same for binary. If it were ever critical to squeeze more
+ * performance from this, the function could become grok_hex, and a regen
+ * perl script could scan it and write out two edited copies for the other
+ * two functions. That would improve the performance of all three
+ * somewhat. Besides eliminating XDIGIT_VALUE for the other two, extra
+ * parameters are now passed to this to avoid conditionals. Those could
+ * become declared consts, like:
+ * const U8 base = 16;
+ * const U8 base = 8;
+ * ...
+ */
+
+ PERL_ARGS_ASSERT_GROK_BIN_OCT_HEX;
+
+ ASSUME(inRANGE(shift, 1, 4) && shift != 2);
+
+ /* Clear output flags; unlikely to find a problem that sets them */
+ *flags = 0;
+
+ if (!(input_flags & PERL_SCAN_DISALLOW_PREFIX)) {
+
+ /* strip off leading b or 0b; x or 0x.
+ for compatibility silently suffer "b" and "0b" as valid binary; "x"
+ and "0x" as valid hex numbers. */
+ if (len >= 1) {
+ if (isALPHA_FOLD_EQ(s0[0], prefix)) {
+ s0++;
+ len--;
+ }
+ else if (len >= 2 && s0[0] == '0' && (isALPHA_FOLD_EQ(s0[1], prefix))) {
+ s0+=2;
+ len-=2;
+ }
+ }
+ }
+
+ s = s0; /* s0 potentially advanced from 'start' */
+
+ /* Unroll the loop so that the first 8 digits are branchless except for the
+ * switch. A ninth hex one overflows a 32 bit word. */
+ switch (len) {
+ case 0:
+ return 0;
+ default:
+ if (UNLIKELY(! _generic_isCC(*s, class_bit))) break;
+ value = (value << shift) | XDIGIT_VALUE(*s);
+ s++;
+ /* FALLTHROUGH */
+ case 7:
+ if (UNLIKELY(! _generic_isCC(*s, class_bit))) break;
+ value = (value << shift) | XDIGIT_VALUE(*s);
+ s++;
+ /* FALLTHROUGH */
+ case 6:
+ if (UNLIKELY(! _generic_isCC(*s, class_bit))) break;
+ value = (value << shift) | XDIGIT_VALUE(*s);
+ s++;
+ /* FALLTHROUGH */
+ case 5:
+ if (UNLIKELY(! _generic_isCC(*s, class_bit))) break;
+ value = (value << shift) | XDIGIT_VALUE(*s);
+ s++;
+ /* FALLTHROUGH */
+ case 4:
+ if (UNLIKELY(! _generic_isCC(*s, class_bit))) break;
+ value = (value << shift) | XDIGIT_VALUE(*s);
+ s++;
+ /* FALLTHROUGH */
+ case 3:
+ if (UNLIKELY(! _generic_isCC(*s, class_bit))) break;
+ value = (value << shift) | XDIGIT_VALUE(*s);
+ s++;
+ /* FALLTHROUGH */
+ case 2:
+ if (UNLIKELY(! _generic_isCC(*s, class_bit))) break;
+ value = (value << shift) | XDIGIT_VALUE(*s);
+ s++;
+ /* FALLTHROUGH */
+ case 1:
+ if (UNLIKELY(! _generic_isCC(*s, class_bit))) break;
+ value = (value << shift) | XDIGIT_VALUE(*s);
+
+ if (LIKELY(len <= 8)) {
+ return value;
+ }
- for (; len-- && *s; s++) {
- if (isOCTAL(*s)) {
+ s++;
+ break;
+ }
+
+ bytes_so_far = s - s0;
+ factor = shift << bytes_so_far;
+ len -= bytes_so_far;
+
+ for (; len--; s++) {
+ if (_generic_isCC(*s, class_bit)) {
/* Write it in this wonky order with a goto to attempt to get the
compiler to make the common case integer-only loop pretty tight.
- */
+ With gcc seems to be much straighter code than old scan_hex.
+ (khw suspects that adding a LIKELY() just above would do the
+ same thing) */
redo:
- if (!overflowed) {
- if (value <= max_div_8) {
- value = (value << 3) | OCTAL_VALUE(*s);
- continue;
- }
- /* Bah. We're just overflowed. */
- /* diag_listed_as: Integer overflow in %s number */
- Perl_ck_warner_d(aTHX_ packWARN(WARN_OVERFLOW),
- "Integer overflow in octal number");
+ if (LIKELY(value <= max_div)) {
+ value = (value << shift) | XDIGIT_VALUE(*s);
+ /* Note XDIGIT_VALUE() is branchless, works on binary
+ * and octal as well, so can be used here, without
+ * slowing those down */
+ factor *= 1 << shift;
+ continue;
+ }
+
+ /* Bah. We are about to overflow. Instead, add the unoverflowed
+ * value to an NV that contains an approximation to the correct
+ * value. Each time through the loop we have increased 'factor' so
+ * that it gives how much the current approximation needs to
+ * effectively be shifted to make room for this new value */
+ value_nv *= factor;
+ value_nv += (NV) value;
+
+ /* Then we keep accumulating digits, until all are parsed. We
+ * start over using the current input value. This will be added to
+ * 'value_nv' eventually, either when all digits are gone, or we
+ * have overflowed this fresh start. */
+ value = XDIGIT_VALUE(*s);
+ factor = 1 << shift;
+
+ if (! overflowed) {
overflowed = TRUE;
- value_nv = (NV) value;
+ if ( ! (input_flags & PERL_SCAN_SILENT_OVERFLOW)
+ && ckWARN_d(WARN_OVERFLOW))
+ {
+ Perl_warner(aTHX_ packWARN(WARN_OVERFLOW),
+ "Integer overflow in %s number",
+ (base == 16) ? "hexadecimal"
+ : (base == 2)
+ ? "binary"
+ : "octal");
+ }
}
- value_nv *= 8.0;
- /* If an NV has not enough bits in its mantissa to
- * represent a UV this summing of small low-order numbers
- * is a waste of time (because the NV cannot preserve
- * the low-order bits anyway): we could just remember when
- * did we overflow and in the end just multiply value_nv by the
- * right amount of 8-tuples. */
- value_nv += (NV) OCTAL_VALUE(*s);
continue;
}
- if (*s == '_' && len && allow_underscores && isOCTAL(s[1])) {
+
+ if ( *s == '_'
+ && len
+ && allow_underscores
+ && _generic_isCC(s[1], class_bit)
+
+ /* Don't allow a leading underscore if the only-medial bit is
+ * set */
+ && ( LIKELY(s > s0)
+ || UNLIKELY((input_flags & PERL_SCAN_ALLOW_MEDIAL_UNDERSCORES)
+ != PERL_SCAN_ALLOW_MEDIAL_UNDERSCORES)))
+ {
--len;
++s;
goto redo;
}
- /* Allow \octal to work the DWIM way (that is, stop scanning
- * as soon as non-octal characters are seen, complain only if
- * someone seems to want to use the digits eight and nine. Since we
- * know it is not octal, then if isDIGIT, must be an 8 or 9). */
- if (isDIGIT(*s)) {
- if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
- Perl_ck_warner(aTHX_ packWARN(WARN_DIGIT),
- "Illegal octal digit '%c' ignored", *s);
+
+ if (*s) {
+ if ( ! (input_flags & PERL_SCAN_SILENT_ILLDIGIT)
+ && ckWARN(WARN_DIGIT))
+ {
+ if (base != 8) {
+ Perl_warner(aTHX_ packWARN(WARN_DIGIT),
+ "Illegal %s digit '%c' ignored",
+ ((base == 2)
+ ? "binary"
+ : "hexadecimal"),
+ *s);
+ }
+ else if (isDIGIT(*s)) { /* octal base */
+
+ /* Allow \octal to work the DWIM way (that is, stop
+ * scanning as soon as non-octal characters are seen,
+ * complain only if someone seems to want to use the digits
+ * eight and nine. Since we know it is not octal, then if
+ * isDIGIT, must be an 8 or 9). */
+ Perl_warner(aTHX_ packWARN(WARN_DIGIT),
+ "Illegal octal digit '%c' ignored", *s);
+ }
+ }
+
+ if (input_flags & PERL_SCAN_NOTIFY_ILLDIGIT) {
+ *flags |= PERL_SCAN_NOTIFY_ILLDIGIT;
+ }
}
+
break;
}
- if ( ( overflowed && value_nv > 4294967295.0)
+ *len_p = s - start;
+
+ if (LIKELY(! overflowed)) {
#if UVSIZE > 4
- || (!overflowed && value > 0xffffffff
- && ! (*flags & PERL_SCAN_SILENT_NON_PORTABLE))
+ if ( UNLIKELY(value > 0xffffffff)
+ && ! (input_flags & PERL_SCAN_SILENT_NON_PORTABLE))
+ {
+ output_non_portable(base);
+ *flags |= PERL_SCAN_SILENT_NON_PORTABLE;
+ }
#endif
- ) {
- Perl_ck_warner(aTHX_ packWARN(WARN_PORTABLE),
- "Octal number > 037777777777 non-portable");
- }
- *len_p = s - start;
- if (!overflowed) {
- *flags = 0;
return value;
}
- *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
+
+ /* Overflowed: Calculate the final overflow approximation */
+ value_nv *= factor;
+ value_nv += (NV) value;
+
+ output_non_portable(base);
+
+ *flags |= PERL_SCAN_GREATER_THAN_UV_MAX
+ | PERL_SCAN_SILENT_NON_PORTABLE;
if (result)
*result = value_nv;
return UV_MAX;
@@ -676,6 +726,13 @@ If an infinity or a not-a-number is recognized, C<*sp> will point to
one byte past the end of the recognized string. If the recognition fails,
zero is returned, and C<*sp> will not move.
+=for apidoc Amn|bool|IS_NUMBER_GREATER_THAN_UV_MAX
+=for apidoc Amn|bool|IS_NUMBER_INFINITY
+=for apidoc Amn|bool|IS_NUMBER_IN_UV
+=for apidoc Amn|bool|IS_NUMBER_NAN
+=for apidoc Amn|bool|IS_NUMBER_NEG
+=for apidoc Amn|bool|IS_NUMBER_NOT_INT
+
=cut
*/
@@ -727,7 +784,7 @@ Perl_grok_infnan(pTHX_ const char** sp, const char* send)
s++; if (s == send || isALPHA_FOLD_NE(*s, 'Y')) return fail;
s++;
} else if (odh) {
- while (*s == '0') { /* 1.#INF00 */
+ while (s < send && *s == '0') { /* 1.#INF00 */
s++;
}
}
@@ -741,10 +798,10 @@ Perl_grok_infnan(pTHX_ const char** sp, const char* send)
else if (isALPHA_FOLD_EQ(*s, 'D') && odh) { /* 1.#IND */
s++;
flags |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;
- while (*s == '0') { /* 1.#IND00 */
+ while (s < send && *s == '0') { /* 1.#IND00 */
s++;
}
- if (*s) {
+ if (s < send && *s) {
flags |= IS_NUMBER_TRAILING;
}
} else
@@ -947,6 +1004,8 @@ C<flags> allows only C<PERL_SCAN_TRAILING>, which allows for trailing
non-numeric text on an otherwise successful I<grok>, setting
C<IS_NUMBER_TRAILING> on the result.
+=for apidoc Amnh||PERL_SCAN_TRAILING
+
=for apidoc grok_number
Identical to C<grok_number_flags()> with C<flags> set to zero.
@@ -974,109 +1033,153 @@ Perl_grok_number_flags(pTHX_ const char *pv, STRLEN len, UV *valuep, U32 flags)
PERL_ARGS_ASSERT_GROK_NUMBER_FLAGS;
- while (s < send && isSPACE(*s))
- s++;
- if (s == send) {
- return 0;
- } else if (*s == '-') {
- s++;
- numtype = IS_NUMBER_NEG;
+ if (UNLIKELY(isSPACE(*s))) {
+ s++;
+ while (s < send) {
+ if (LIKELY(! isSPACE(*s))) goto non_space;
+ s++;
+ }
+ return 0;
+ non_space: ;
}
- else if (*s == '+')
- s++;
- if (s == send)
- return 0;
+ /* See if signed. This assumes it is more likely to be unsigned, so
+ * penalizes signed by an extra conditional; rewarding unsigned by one fewer
+ * (because we detect '+' and '-' with a single test and then add a
+ * conditional to determine which) */
+ if (UNLIKELY((*s & ~('+' ^ '-')) == ('+' & '-') )) {
+
+ /* Here, on ASCII platforms, *s is one of: 0x29 = ')', 2B = '+', 2D = '-',
+ * 2F = '/'. That is, it is either a sign, or a character that doesn't
+ * belong in a number at all (unless it's a radix character in a weird
+ * locale). Given this, it's far more likely to be a minus than the
+ * others. (On EBCDIC it is one of 42, 44, 46, 48, 4A, 4C, 4E, (not 40
+ * because can't be a space) 60, 62, 64, 66, 68, 6A, 6C, 6E. Again,
+ * only potentially a weird radix character, or 4E='+', or 60='-') */
+ if (LIKELY(*s == '-')) {
+ s++;
+ numtype = IS_NUMBER_NEG;
+ }
+ else if (LIKELY(*s == '+'))
+ s++;
+ else /* Can't just return failure here, as it could be a weird radix
+ character */
+ goto done_sign;
+
+ if (UNLIKELY(s == send))
+ return 0;
+ done_sign: ;
+ }
/* The first digit (after optional sign): note that might
* also point to "infinity" or "nan", or "1.#INF". */
d = s;
/* next must be digit or the radix separator or beginning of infinity/nan */
- if (isDIGIT(*s)) {
+ if (LIKELY(isDIGIT(*s))) {
/* UVs are at least 32 bits, so the first 9 decimal digits cannot
overflow. */
- UV value = *s - '0';
- /* This construction seems to be more optimiser friendly.
- (without it gcc does the isDIGIT test and the *s - '0' separately)
- With it gcc on arm is managing 6 instructions (6 cycles) per digit.
- In theory the optimiser could deduce how far to unroll the loop
- before checking for overflow. */
- if (++s < send) {
- int digit = *s - '0';
- if (inRANGE(digit, 0, 9)) {
+ UV value = *s - '0'; /* Process this first (perhaps only) digit */
+ int digit;
+
+ s++;
+
+ switch(send - s) {
+ default: /* 8 or more remaining characters */
+ digit = *s - '0';
+ if (UNLIKELY(! inRANGE(digit, 0, 9))) break;
+ value = value * 10 + digit;
+ s++;
+ /* FALLTHROUGH */
+ case 7:
+ digit = *s - '0';
+ if (UNLIKELY(! inRANGE(digit, 0, 9))) break;
value = value * 10 + digit;
- if (++s < send) {
- digit = *s - '0';
- if (inRANGE(digit, 0, 9)) {
- value = value * 10 + digit;
- if (++s < send) {
- digit = *s - '0';
- if (inRANGE(digit, 0, 9)) {
+ s++;
+ /* FALLTHROUGH */
+ case 6:
+ digit = *s - '0';
+ if (UNLIKELY(! inRANGE(digit, 0, 9))) break;
+ value = value * 10 + digit;
+ s++;
+ /* FALLTHROUGH */
+ case 5:
+ digit = *s - '0';
+ if (UNLIKELY(! inRANGE(digit, 0, 9))) break;
+ value = value * 10 + digit;
+ s++;
+ /* FALLTHROUGH */
+ case 4:
+ digit = *s - '0';
+ if (UNLIKELY(! inRANGE(digit, 0, 9))) break;
+ value = value * 10 + digit;
+ s++;
+ /* FALLTHROUGH */
+ case 3:
+ digit = *s - '0';
+ if (UNLIKELY(! inRANGE(digit, 0, 9))) break;
+ value = value * 10 + digit;
+ s++;
+ /* FALLTHROUGH */
+ case 2:
+ digit = *s - '0';
+ if (UNLIKELY(! inRANGE(digit, 0, 9))) break;
+ value = value * 10 + digit;
+ s++;
+ /* FALLTHROUGH */
+ case 1:
+ digit = *s - '0';
+ if (UNLIKELY(! inRANGE(digit, 0, 9))) break;
+ value = value * 10 + digit;
+ s++;
+ /* FALLTHROUGH */
+ case 0: /* This case means the string consists of just the one
+ digit we already have processed */
+
+ /* If we got here by falling through other than the default: case, we
+ * have processed the whole string, and know it consists entirely of
+ * digits, and can't have overflowed. */
+ if (s >= send) {
+ if (valuep)
+ *valuep = value;
+ return numtype|IS_NUMBER_IN_UV;
+ }
+
+ /* Here, there are extra characters beyond the first 9 digits. Use a
+ * loop to accumulate any remaining digits, until we get a non-digit or
+ * would overflow. Note that leading zeros could cause us to get here
+ * without being close to overflowing.
+ *
+ * (The conditional 's >= send' above could be eliminated by making the
+ * default: in the switch to instead be 'case 8:', and process longer
+ * strings separately by using the loop below. This would penalize
+ * these inputs by the extra instructions needed for looping. That
+ * could be eliminated by copying the unwound code from above to handle
+ * the firt 9 digits of these. khw didn't think this saving of a
+ * single conditional was worth it.) */
+ do {
+ digit = *s - '0';
+ if (! inRANGE(digit, 0, 9)) goto mantissa_done;
+ if ( value < uv_max_div_10
+ || ( value == uv_max_div_10
+ && digit <= uv_max_mod_10))
+ {
value = value * 10 + digit;
- if (++s < send) {
- digit = *s - '0';
- if (inRANGE(digit, 0, 9)) {
- value = value * 10 + digit;
- if (++s < send) {
- digit = *s - '0';
- if (inRANGE(digit, 0, 9)) {
- value = value * 10 + digit;
- if (++s < send) {
- digit = *s - '0';
- if (inRANGE(digit, 0, 9)) {
- value = value * 10 + digit;
- if (++s < send) {
- digit = *s - '0';
- if (inRANGE(digit, 0, 9)) {
- value = value * 10 + digit;
- if (++s < send) {
- digit = *s - '0';
- if (inRANGE(digit, 0, 9)) {
- value = value * 10 + digit;
- if (++s < send) {
- /* Now got 9 digits, so need to check
- each time for overflow. */
- digit = *s - '0';
- while ( inRANGE(digit, 0, 9)
- && (value < uv_max_div_10
- || (value == uv_max_div_10
- && digit <= uv_max_mod_10))) {
- value = value * 10 + digit;
- if (++s < send)
- digit = *s - '0';
- else
- break;
- }
- if (inRANGE(digit, 0, 9)
- && (s < send)) {
- /* value overflowed.
- skip the remaining digits, don't
- worry about setting *valuep. */
- do {
- s++;
- } while (s < send && isDIGIT(*s));
- numtype |=
- IS_NUMBER_GREATER_THAN_UV_MAX;
- goto skip_value;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
+ s++;
}
- }
- }
- }
- }
+ else { /* value would overflow. skip the remaining digits, don't
+ worry about setting *valuep. */
+ do {
+ s++;
+ } while (s < send && isDIGIT(*s));
+ numtype |=
+ IS_NUMBER_GREATER_THAN_UV_MAX;
+ goto skip_value;
+ }
+ } while (s < send);
+ } /* End switch on input length */
+
+ mantissa_done:
numtype |= IS_NUMBER_IN_UV;
if (valuep)
*valuep = value;
@@ -1087,7 +1190,7 @@ Perl_grok_number_flags(pTHX_ const char *pv, STRLEN len, UV *valuep, U32 flags)
while (s < send && isDIGIT(*s)) /* optional digits after the radix */
s++;
}
- }
+ } /* End of *s is a digit */
else if (GROK_NUMERIC_RADIX(&s, send)) {
numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */
/* no digits before the radix means we need digits after it */
@@ -1104,9 +1207,9 @@ Perl_grok_number_flags(pTHX_ const char *pv, STRLEN len, UV *valuep, U32 flags)
return 0;
}
- if (s > d && s < send) {
+ if (LIKELY(s > d) && s < send) {
/* we can have an optional exponent part */
- if (isALPHA_FOLD_EQ(*s, 'e')) {
+ if (UNLIKELY(isALPHA_FOLD_EQ(*s, 'e'))) {
s++;
if (s < send && (*s == '-' || *s == '+'))
s++;
@@ -1125,17 +1228,23 @@ Perl_grok_number_flags(pTHX_ const char *pv, STRLEN len, UV *valuep, U32 flags)
numtype |= IS_NUMBER_NOT_INT;
}
}
- while (s < send && isSPACE(*s))
+
+ while (s < send) {
+ if (LIKELY(! isSPACE(*s))) goto end_space;
s++;
- if (s >= send)
- return numtype;
- if (memEQs(pv, len, "0 but true")) {
+ }
+ return numtype;
+
+ end_space:
+
+ if (UNLIKELY(memEQs(pv, len, "0 but true"))) {
if (valuep)
*valuep = 0;
return IS_NUMBER_IN_UV;
}
+
/* We could be e.g. at "Inf" or "NaN", or at the "#" of "1.#INF". */
- if ((s + 2 < send) && strchr("inqs#", toFOLD(*s))) {
+ if ((s + 2 < send) && UNLIKELY(memCHRs("inqs#", toFOLD(*s)))) {
/* Really detect inf/nan. Start at d, not s, since the above
* code might have already consumed the "1." or "1". */
const int infnan = Perl_grok_infnan(aTHX_ &d, send);
@@ -1172,7 +1281,8 @@ If you constrain the portion of C<pv> that is looked at by this function (by
passing a non-NULL C<endptr>), and if the intial bytes of that portion form a
valid value, it will return TRUE, setting C<*endptr> to the byte following the
final digit of the value. But if there is no constraint at what's looked at,
-all of C<pv> must be valid in order for TRUE to be returned.
+all of C<pv> must be valid in order for TRUE to be returned. C<*endptr> is
+unchanged from its value on input if FALSE is returned;
The only characters this accepts are the decimal digits '0'..'9'.
@@ -1412,10 +1522,6 @@ Perl_my_atof(pTHX_ const char* s)
#if defined(NV_INF) || defined(NV_NAN)
-#ifdef USING_MSVC6
-# pragma warning(push)
-# pragma warning(disable:4756;disable:4056)
-#endif
static char*
S_my_atof_infnan(pTHX_ const char* s, bool negative, const char* send, NV* value)
{
@@ -1493,9 +1599,6 @@ S_my_atof_infnan(pTHX_ const char* s, bool negative, const char* send, NV* value
}
return NULL;
}
-#ifdef USING_MSVC6
-# pragma warning(pop)
-#endif
#endif /* if defined(NV_INF) || defined(NV_NAN) */
@@ -1555,6 +1658,15 @@ Perl_my_atof3(pTHX_ const char* orig, NV* value, const STRLEN len)
if ((endp = S_my_atof_infnan(aTHX_ s, negative, send, value)))
return endp;
+ /* strtold() accepts 0x-prefixed hex and in POSIX implementations,
+ 0b-prefixed binary numbers, which is backward incompatible
+ */
+ if ((len == 0 || len - (s-orig) >= 2) && *s == '0' &&
+ (isALPHA_FOLD_EQ(s[1], 'x') || isALPHA_FOLD_EQ(s[1], 'b'))) {
+ *value = 0;
+ return (char *)s+1;
+ }
+
/* If the length is passed in, the input string isn't NUL-terminated,
* and in it turns out the function below assumes it is; therefore we
* create a copy and NUL-terminate that */
@@ -1728,7 +1840,7 @@ Perl_my_atof3(pTHX_ const char* orig, NV* value, const STRLEN len)
/*
=for apidoc isinfnan
-C<Perl_isinfnan()> is utility function that returns true if the NV
+C<Perl_isinfnan()> is a utility function that returns true if the NV
argument is either an infinity or a C<NaN>, false otherwise. To test
in more detail, use C<Perl_isinf()> and C<Perl_isnan()>.
@@ -1752,7 +1864,7 @@ Perl_isinfnan(NV nv)
}
/*
-=for apidoc
+=for apidoc isinfnansv
Checks whether the argument would be either an infinity or C<NaN> when used
as a number, but is careful not to trigger non-numeric or uninitialized
diff --git a/gnu/usr.bin/perl/op.c b/gnu/usr.bin/perl/op.c
index 60b36275752..dae04f932e4 100644
--- a/gnu/usr.bin/perl/op.c
+++ b/gnu/usr.bin/perl/op.c
@@ -164,6 +164,7 @@ recursive, but it's recursive on basic blocks, not on tree nodes.
#include "keywords.h"
#include "feature.h"
#include "regcomp.h"
+#include "invlist_inline.h"
#define CALL_PEEP(o) PL_peepp(aTHX_ o)
#define CALL_RPEEP(o) PL_rpeepp(aTHX_ o)
@@ -171,44 +172,6 @@ recursive, but it's recursive on basic blocks, not on tree nodes.
static const char array_passed_to_stat[] = "Array passed to stat will be coerced to a scalar";
-/* Used to avoid recursion through the op tree in scalarvoid() and
- op_free()
-*/
-
-#define dDEFER_OP \
- SSize_t defer_stack_alloc = 0; \
- SSize_t defer_ix = -1; \
- OP **defer_stack = NULL;
-#define DEFER_OP_CLEANUP Safefree(defer_stack)
-#define DEFERRED_OP_STEP 100
-#define DEFER_OP(o) \
- STMT_START { \
- if (UNLIKELY(defer_ix == (defer_stack_alloc-1))) { \
- defer_stack_alloc += DEFERRED_OP_STEP; \
- assert(defer_stack_alloc > 0); \
- Renew(defer_stack, defer_stack_alloc, OP *); \
- } \
- defer_stack[++defer_ix] = o; \
- } STMT_END
-#define DEFER_REVERSE(count) \
- STMT_START { \
- UV cnt = (count); \
- if (cnt > 1) { \
- OP **top = defer_stack + defer_ix; \
- /* top - (cnt) + 1 isn't safe here */ \
- OP **bottom = top - (cnt - 1); \
- OP *tmp; \
- assert(bottom >= defer_stack); \
- while (top > bottom) { \
- tmp = *top; \
- *top-- = *bottom; \
- *bottom++ = tmp; \
- } \
- } \
- } STMT_END;
-
-#define POP_DEFERRED_OP() (defer_ix >= 0 ? defer_stack[defer_ix--] : (OP *)NULL)
-
/* remove any leading "empty" ops from the op_next chain whose first
* node's address is stored in op_p. Store the updated address of the
* first node in op_p.
@@ -246,13 +209,26 @@ S_prune_chain_head(OP** op_p)
#define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *))
#define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o)))
-/* malloc a new op slab (suitable for attaching to PL_compcv) */
+/* requires double parens and aTHX_ */
+#define DEBUG_S_warn(args) \
+ DEBUG_S( \
+ PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
+ )
+
+
+/* malloc a new op slab (suitable for attaching to PL_compcv).
+ * sz is in units of pointers */
static OPSLAB *
-S_new_slab(pTHX_ size_t sz)
+S_new_slab(pTHX_ OPSLAB *head, size_t sz)
{
+ OPSLAB *slab;
+
+ /* opslot_offset is only U16 */
+ assert(sz < U16_MAX);
+
#ifdef PERL_DEBUG_READONLY_OPS
- OPSLAB *slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
+ slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *),
PROT_READ|PROT_WRITE,
MAP_ANON|MAP_PRIVATE, -1, 0);
DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n",
@@ -261,23 +237,63 @@ S_new_slab(pTHX_ size_t sz)
perror("mmap failed");
abort();
}
- slab->opslab_size = (U16)sz;
#else
- OPSLAB *slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
+ slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *));
#endif
+ slab->opslab_size = (U16)sz;
+
#ifndef WIN32
/* The context is unused in non-Windows */
PERL_UNUSED_CONTEXT;
#endif
- slab->opslab_first = (OPSLOT *)((I32 **)slab + sz - 1);
+ slab->opslab_free_space = sz - DIFF(slab, &slab->opslab_slots);
+ slab->opslab_head = head ? head : slab;
+ DEBUG_S_warn((aTHX_ "allocated new op slab sz 0x%x, %p, head slab %p",
+ (unsigned int)slab->opslab_size, (void*)slab,
+ (void*)(slab->opslab_head)));
return slab;
}
-/* requires double parens and aTHX_ */
-#define DEBUG_S_warn(args) \
- DEBUG_S( \
- PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \
- )
+/* opslot_size includes the size of the slot header, and an op can't be smaller than BASEOP */
+#define OPSLOT_SIZE_BASE (SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
+#define OPSLOT_SIZE_TO_INDEX(sz) ((sz) - OPSLOT_SIZE_BASE)
+
+#define link_freed_op(slab, o) S_link_freed_op(aTHX_ slab, o)
+static void
+S_link_freed_op(pTHX_ OPSLAB *slab, OP *o) {
+ U16 sz = OpSLOT(o)->opslot_size;
+ U16 index = OPSLOT_SIZE_TO_INDEX(sz);
+
+ assert(sz >= OPSLOT_SIZE_BASE);
+ /* make sure the array is large enough to include ops this large */
+ if (!slab->opslab_freed) {
+ /* we don't have a free list array yet, make a new one */
+ slab->opslab_freed_size = index+1;
+ slab->opslab_freed = (OP**)PerlMemShared_calloc((slab->opslab_freed_size), sizeof(OP*));
+
+ if (!slab->opslab_freed)
+ croak_no_mem();
+ }
+ else if (index >= slab->opslab_freed_size) {
+ /* It's probably not worth doing exponential expansion here, the number of op sizes
+ is small.
+ */
+ /* We already have a list that isn't large enough, expand it */
+ size_t newsize = index+1;
+ OP **p = (OP **)PerlMemShared_realloc(slab->opslab_freed, newsize * sizeof(OP*));
+
+ if (!p)
+ croak_no_mem();
+
+ Zero(p+slab->opslab_freed_size, newsize - slab->opslab_freed_size, OP *);
+
+ slab->opslab_freed = p;
+ slab->opslab_freed_size = newsize;
+ }
+
+ o->op_next = slab->opslab_freed[index];
+ slab->opslab_freed[index] = o;
+}
/* Returns a sz-sized block of memory (suitable for holding an op) from
* a free slot in the chain of op slabs attached to PL_compcv.
@@ -288,11 +304,11 @@ S_new_slab(pTHX_ size_t sz)
void *
Perl_Slab_Alloc(pTHX_ size_t sz)
{
- OPSLAB *slab;
+ OPSLAB *head_slab; /* first slab in the chain */
OPSLAB *slab2;
OPSLOT *slot;
OP *o;
- size_t opsz, space;
+ size_t opsz;
/* We only allocate ops from the slab during subroutine compilation.
We find the slab via PL_compcv, hence that must be non-NULL. It could
@@ -315,77 +331,81 @@ Perl_Slab_Alloc(pTHX_ size_t sz)
details. */
if (!CvSTART(PL_compcv)) {
CvSTART(PL_compcv) =
- (OP *)(slab = S_new_slab(aTHX_ PERL_SLAB_SIZE));
+ (OP *)(head_slab = S_new_slab(aTHX_ NULL, PERL_SLAB_SIZE));
CvSLABBED_on(PL_compcv);
- slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
+ head_slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */
}
- else ++(slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
+ else ++(head_slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt;
opsz = SIZE_TO_PSIZE(sz);
sz = opsz + OPSLOT_HEADER_P;
- /* The slabs maintain a free list of OPs. In particular, constant folding
+ /* The head slab for each CV maintains a free list of OPs. In particular, constant folding
will free up OPs, so it makes sense to re-use them where possible. A
freed up slot is used in preference to a new allocation. */
- if (slab->opslab_freed) {
- OP **too = &slab->opslab_freed;
- o = *too;
- DEBUG_S_warn((aTHX_ "found free op at %p, slab %p", (void*)o, (void*)slab));
- while (o && DIFF(OpSLOT(o), OpSLOT(o)->opslot_next) < sz) {
- DEBUG_S_warn((aTHX_ "Alas! too small"));
- o = *(too = &o->op_next);
- if (o) { DEBUG_S_warn((aTHX_ "found another free op at %p", (void*)o)); }
- }
- if (o) {
- *too = o->op_next;
+ if (head_slab->opslab_freed &&
+ OPSLOT_SIZE_TO_INDEX(sz) < head_slab->opslab_freed_size) {
+ U16 base_index;
+
+ /* look for a large enough size with any freed ops */
+ for (base_index = OPSLOT_SIZE_TO_INDEX(sz);
+ base_index < head_slab->opslab_freed_size && !head_slab->opslab_freed[base_index];
+ ++base_index) {
+ }
+
+ if (base_index < head_slab->opslab_freed_size) {
+ /* found a freed op */
+ o = head_slab->opslab_freed[base_index];
+
+ DEBUG_S_warn((aTHX_ "realloced op at %p, slab %p, head slab %p",
+ (void*)o,
+ (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
+ (void*)head_slab));
+ head_slab->opslab_freed[base_index] = o->op_next;
Zero(o, opsz, I32 *);
o->op_slabbed = 1;
goto gotit;
}
}
-#define INIT_OPSLOT \
- slot->opslot_slab = slab; \
- slot->opslot_next = slab2->opslab_first; \
- slab2->opslab_first = slot; \
+#define INIT_OPSLOT(s) \
+ slot->opslot_offset = DIFF(slab2, slot) ; \
+ slot->opslot_size = s; \
+ slab2->opslab_free_space -= s; \
o = &slot->opslot_op; \
o->op_slabbed = 1
/* The partially-filled slab is next in the chain. */
- slab2 = slab->opslab_next ? slab->opslab_next : slab;
- if ((space = DIFF(&slab2->opslab_slots, slab2->opslab_first)) < sz) {
+ slab2 = head_slab->opslab_next ? head_slab->opslab_next : head_slab;
+ if (slab2->opslab_free_space < sz) {
/* Remaining space is too small. */
-
/* If we can fit a BASEOP, add it to the free chain, so as not
to waste it. */
- if (space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
+ if (slab2->opslab_free_space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) {
slot = &slab2->opslab_slots;
- INIT_OPSLOT;
+ INIT_OPSLOT(slab2->opslab_free_space);
o->op_type = OP_FREED;
- o->op_next = slab->opslab_freed;
- slab->opslab_freed = o;
+ link_freed_op(head_slab, o);
}
/* Create a new slab. Make this one twice as big. */
- slot = slab2->opslab_first;
- while (slot->opslot_next) slot = slot->opslot_next;
- slab2 = S_new_slab(aTHX_
- (DIFF(slab2, slot)+1)*2 > PERL_MAX_SLAB_SIZE
- ? PERL_MAX_SLAB_SIZE
- : (DIFF(slab2, slot)+1)*2);
- slab2->opslab_next = slab->opslab_next;
- slab->opslab_next = slab2;
+ slab2 = S_new_slab(aTHX_ head_slab,
+ slab2->opslab_size > PERL_MAX_SLAB_SIZE / 2
+ ? PERL_MAX_SLAB_SIZE
+ : slab2->opslab_size * 2);
+ slab2->opslab_next = head_slab->opslab_next;
+ head_slab->opslab_next = slab2;
}
- assert(DIFF(&slab2->opslab_slots, slab2->opslab_first) >= sz);
+ assert(slab2->opslab_size >= sz);
/* Create a new op slot */
- slot = (OPSLOT *)((I32 **)slab2->opslab_first - sz);
+ slot = (OPSLOT *)
+ ((I32 **)&slab2->opslab_slots
+ + slab2->opslab_free_space - sz);
assert(slot >= &slab2->opslab_slots);
- if (DIFF(&slab2->opslab_slots, slot)
- < SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P)
- slot = &slab2->opslab_slots;
- INIT_OPSLOT;
- DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p", (void*)o, (void*)slab));
+ INIT_OPSLOT(sz);
+ DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p, head slab %p",
+ (void*)o, (void*)slab2, (void*)head_slab));
gotit:
/* moresib == 0, op_sibling == 0 implies a solitary unattached op */
@@ -482,9 +502,11 @@ Perl_Slab_Free(pTHX_ void *op)
/* If this op is already freed, our refcount will get screwy. */
assert(o->op_type != OP_FREED);
o->op_type = OP_FREED;
- o->op_next = slab->opslab_freed;
- slab->opslab_freed = o;
- DEBUG_S_warn((aTHX_ "free op at %p, recorded in slab %p", (void*)o, (void*)slab));
+ link_freed_op(slab, o);
+ DEBUG_S_warn((aTHX_ "freeing op at %p, slab %p, head slab %p",
+ (void*)o,
+ (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset,
+ (void*)slab));
OpslabREFCNT_dec_padok(slab);
}
@@ -519,6 +541,7 @@ Perl_opslab_free(pTHX_ OPSLAB *slab)
PERL_UNUSED_CONTEXT;
DEBUG_S_warn((aTHX_ "freeing slab %p", (void*)slab));
assert(slab->opslab_refcnt == 1);
+ PerlMemShared_free(slab->opslab_freed);
do {
slab2 = slab->opslab_next;
#ifdef DEBUGGING
@@ -552,10 +575,13 @@ Perl_opslab_force_free(pTHX_ OPSLAB *slab)
PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE;
slab2 = slab;
do {
- OPSLOT *slot;
- for (slot = slab2->opslab_first;
- slot->opslot_next;
- slot = slot->opslot_next) {
+ OPSLOT *slot = (OPSLOT*)
+ ((I32**)&slab2->opslab_slots + slab2->opslab_free_space);
+ OPSLOT *end = (OPSLOT*)
+ ((I32**)slab2 + slab2->opslab_size);
+ for (; slot < end;
+ slot = (OPSLOT*) ((I32**)slot + slot->opslot_size) )
+ {
if (slot->opslot_op.op_type != OP_FREED
&& !(slot->opslot_op.op_savefree
#ifdef DEBUGGING
@@ -654,7 +680,7 @@ S_too_few_arguments_pv(pTHX_ OP *o, const char* name, U32 flags)
yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %s", name), flags);
return o;
}
-
+
STATIC OP *
S_too_many_arguments_pv(pTHX_ OP *o, const char *name, U32 flags)
{
@@ -673,14 +699,12 @@ S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid)
(int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0);
}
-/* remove flags var, its unused in all callers, move to to right end since gv
- and kid are always the same */
STATIC void
S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t)
{
SV * const namesv = cv_name((CV *)gv, NULL, 0);
PERL_ARGS_ASSERT_BAD_TYPE_GV;
-
+
yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)",
(int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv));
}
@@ -718,16 +742,22 @@ Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
&& isIDFIRST_utf8_safe((U8 *)name+1, name + len))
|| (name[1] == '_' && len > 2)))
{
+ const char * const type =
+ PL_parser->in_my == KEY_sigvar ? "subroutine signature" :
+ PL_parser->in_my == KEY_state ? "\"state\"" : "\"my\"";
+
if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1]))
&& isASCII(name[1])
- && (!isPRINT(name[1]) || strchr("\t\n\r\f", name[1]))) {
- /* diag_listed_as: Can't use global %s in "%s" */
- yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in \"%s\"",
- name[0], toCTRL(name[1]), (int)(len - 2), name + 2,
- PL_parser->in_my == KEY_state ? "state" : "my"));
+ && (!isPRINT(name[1]) || memCHRs("\t\n\r\f", name[1]))) {
+ /* diag_listed_as: Can't use global %s in %s */
+ yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in %s",
+ name[0], toCTRL(name[1]),
+ (int)(len - 2), name + 2,
+ type));
} else {
- yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in \"%s\"", (int) len, name,
- PL_parser->in_my == KEY_state ? "state" : "my"), flags & SVf_UTF8);
+ yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in %s",
+ (int) len, name,
+ type), flags & SVf_UTF8);
}
}
@@ -805,10 +835,10 @@ S_op_destroy(pTHX_ OP *o)
/* Destructor */
/*
-=for apidoc Am|void|op_free|OP *o
+=for apidoc op_free
-Free an op. Only use this when an op is no longer linked to from any
-optree.
+Free an op and its children. Only use this when an op is no longer linked
+to from any optree.
=cut
*/
@@ -818,13 +848,68 @@ Perl_op_free(pTHX_ OP *o)
{
dVAR;
OPCODE type;
- dDEFER_OP;
+ OP *top_op = o;
+ OP *next_op = o;
+ bool went_up = FALSE; /* whether we reached the current node by
+ following the parent pointer from a child, and
+ so have already seen this node */
- do {
+ if (!o || o->op_type == OP_FREED)
+ return;
+
+ if (o->op_private & OPpREFCOUNTED) {
+ /* if base of tree is refcounted, just decrement */
+ switch (o->op_type) {
+ case OP_LEAVESUB:
+ case OP_LEAVESUBLV:
+ case OP_LEAVEEVAL:
+ case OP_LEAVE:
+ case OP_SCOPE:
+ case OP_LEAVEWRITE:
+ {
+ PADOFFSET refcnt;
+ OP_REFCNT_LOCK;
+ refcnt = OpREFCNT_dec(o);
+ OP_REFCNT_UNLOCK;
+ if (refcnt) {
+ /* Need to find and remove any pattern match ops from
+ * the list we maintain for reset(). */
+ find_and_forget_pmops(o);
+ return;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ while (next_op) {
+ o = next_op;
+
+ /* free child ops before ourself, (then free ourself "on the
+ * way back up") */
+
+ if (!went_up && o->op_flags & OPf_KIDS) {
+ next_op = cUNOPo->op_first;
+ continue;
+ }
+
+ /* find the next node to visit, *then* free the current node
+ * (can't rely on o->op_* fields being valid after o has been
+ * freed) */
+
+ /* The next node to visit will be either the sibling, or the
+ * parent if no siblings left, or NULL if we've worked our way
+ * back up to the top node in the tree */
+ next_op = (o == top_op) ? NULL : o->op_sibparent;
+ went_up = cBOOL(!OpHAS_SIBLING(o)); /* parents are already visited */
+
+ /* Now process the current node */
/* Though ops may be freed twice, freeing the op after its slab is a
big no-no. */
- assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
+ assert(!o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0);
/* During the forced freeing of ops after compilation failure, kidops
may be freed before their parents. */
if (!o || o->op_type == OP_FREED)
@@ -843,7 +928,7 @@ Perl_op_free(pTHX_ OP *o)
* we can't spot faults in the main code, only
* evaled/required code */
#ifdef DEBUGGING
- if ( o->op_ppaddr == PL_ppaddr[o->op_type]
+ if ( o->op_ppaddr == PL_ppaddr[type]
&& PL_parser
&& !PL_parser->error_count)
{
@@ -851,54 +936,12 @@ Perl_op_free(pTHX_ OP *o)
}
#endif
- if (o->op_private & OPpREFCOUNTED) {
- switch (type) {
- case OP_LEAVESUB:
- case OP_LEAVESUBLV:
- case OP_LEAVEEVAL:
- case OP_LEAVE:
- case OP_SCOPE:
- case OP_LEAVEWRITE:
- {
- PADOFFSET refcnt;
- OP_REFCNT_LOCK;
- refcnt = OpREFCNT_dec(o);
- OP_REFCNT_UNLOCK;
- if (refcnt) {
- /* Need to find and remove any pattern match ops from the list
- we maintain for reset(). */
- find_and_forget_pmops(o);
- continue;
- }
- }
- break;
- default:
- break;
- }
- }
/* Call the op_free hook if it has been set. Do it now so that it's called
* at the right time for refcounted ops, but still before all of the kids
* are freed. */
CALL_OPFREEHOOK(o);
- if (o->op_flags & OPf_KIDS) {
- OP *kid, *nextkid;
- assert(cUNOPo->op_first); /* OPf_KIDS implies op_first non-null */
- for (kid = cUNOPo->op_first; kid; kid = nextkid) {
- nextkid = OpSIBLING(kid); /* Get before next freeing kid */
- if (kid->op_type == OP_FREED)
- /* During the forced freeing of ops after
- compilation failure, kidops may be freed before
- their parents. */
- continue;
- if (!(kid->op_flags & OPf_KIDS))
- /* If it has no kids, just free it now */
- op_free(kid);
- else
- DEFER_OP(kid);
- }
- }
if (type == OP_NULL)
type = (OPCODE)o->op_targ;
@@ -915,11 +958,10 @@ Perl_op_free(pTHX_ OP *o)
FreeOp(o);
if (PL_op == o)
PL_op = NULL;
- } while ( (o = POP_DEFERRED_OP()) );
-
- DEFER_OP_CLEANUP;
+ }
}
+
/* S_op_clear_gv(): free a GV attached to an OP */
STATIC
@@ -991,8 +1033,7 @@ Perl_op_clear(pTHX_ OP *o)
o->op_targ = 0;
break;
default:
- if (!(o->op_flags & OPf_REF)
- || (PL_check[o->op_type] != Perl_ck_ftst))
+ if (!(o->op_flags & OPf_REF) || !OP_IS_STAT(o->op_type))
break;
/* FALLTHROUGH */
case OP_GVSV:
@@ -1035,7 +1076,7 @@ Perl_op_clear(pTHX_ OP *o)
/** Bug #15654
Even if op_clear does a pad_free for the target of the op,
pad_free doesn't actually remove the sv that exists in the pad;
- instead it lives on. This results in that it could be reused as
+ instead it lives on. This results in that it could be reused as
a target later on when the pad was reallocated.
**/
if(o->op_targ) {
@@ -1055,7 +1096,7 @@ Perl_op_clear(pTHX_ OP *o)
case OP_TRANS:
case OP_TRANSR:
if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR)
- && (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)))
+ && (o->op_private & OPpTRANS_USE_SVOP))
{
#ifdef USE_ITHREADS
if (cPADOPo->op_padix > 0) {
@@ -1298,33 +1339,47 @@ S_forget_pmop(pTHX_ PMOP *const o)
}
}
}
- if (PL_curpm == o)
+ if (PL_curpm == o)
PL_curpm = NULL;
}
+
STATIC void
S_find_and_forget_pmops(pTHX_ OP *o)
{
+ OP* top_op = o;
+
PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS;
- if (o->op_flags & OPf_KIDS) {
- OP *kid = cUNOPo->op_first;
- while (kid) {
- switch (kid->op_type) {
- case OP_SUBST:
- case OP_SPLIT:
- case OP_MATCH:
- case OP_QR:
- forget_pmop((PMOP*)kid);
- }
- find_and_forget_pmops(kid);
- kid = OpSIBLING(kid);
- }
+ while (1) {
+ switch (o->op_type) {
+ case OP_SUBST:
+ case OP_SPLIT:
+ case OP_MATCH:
+ case OP_QR:
+ forget_pmop((PMOP*)o);
+ }
+
+ if (o->op_flags & OPf_KIDS) {
+ o = cUNOPo->op_first;
+ continue;
+ }
+
+ while (1) {
+ if (o == top_op)
+ return; /* at top; no parents/siblings to try */
+ if (OpHAS_SIBLING(o)) {
+ o = o->op_sibparent; /* process next sibling */
+ break;
+ }
+ o = o->op_sibparent; /*try parent's next sibling */
+ }
}
}
+
/*
-=for apidoc Am|void|op_null|OP *o
+=for apidoc op_null
Neutralizes an op when it is no longer needed, but is still linked to from
other ops.
@@ -1377,7 +1432,7 @@ op_sibling nodes. By analogy with the perl-level C<splice()> function, allows
you to delete zero or more sequential nodes, replacing them with zero or
more different nodes. Performs the necessary op_first/op_last
housekeeping on the parent node and op_sibling manipulation on the
-children. The last deleted node will be marked as as the last node by
+children. The last deleted node will be marked as the last node by
updating the op_sibling/op_sibparent or op_moresib field as appropriate.
Note that op_next is not manipulated, and nodes are not freed; that is the
@@ -1594,7 +1649,7 @@ Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other)
/* Contextualizers */
/*
-=for apidoc Am|OP *|op_contextualize|OP *o|I32 context
+=for apidoc op_contextualize
Applies a syntactic context to an op tree representing an expression.
C<o> is the op tree, and C<context> must be C<G_SCALAR>, C<G_ARRAY>,
@@ -1620,46 +1675,65 @@ Perl_op_contextualize(pTHX_ OP *o, I32 context)
/*
-=for apidoc Am|OP*|op_linklist|OP *o
+=for apidoc op_linklist
This function is the implementation of the L</LINKLIST> macro. It should
not be called directly.
=cut
*/
+
OP *
Perl_op_linklist(pTHX_ OP *o)
{
- OP *first;
+
+ OP **prevp;
+ OP *kid;
+ OP * top_op = o;
PERL_ARGS_ASSERT_OP_LINKLIST;
- if (o->op_next)
- return o->op_next;
+ while (1) {
+ /* Descend down the tree looking for any unprocessed subtrees to
+ * do first */
+ if (!o->op_next) {
+ if (o->op_flags & OPf_KIDS) {
+ o = cUNOPo->op_first;
+ continue;
+ }
+ o->op_next = o; /* leaf node; link to self initially */
+ }
- /* establish postfix order */
- first = cUNOPo->op_first;
- if (first) {
- OP *kid;
- o->op_next = LINKLIST(first);
- kid = first;
- for (;;) {
- OP *sibl = OpSIBLING(kid);
- if (sibl) {
- kid->op_next = LINKLIST(sibl);
- kid = sibl;
- } else {
- kid->op_next = o;
- break;
- }
- }
- }
- else
- o->op_next = o;
+ /* if we're at the top level, there either weren't any children
+ * to process, or we've worked our way back to the top. */
+ if (o == top_op)
+ return o->op_next;
+
+ /* o is now processed. Next, process any sibling subtrees */
- return o->op_next;
+ if (OpHAS_SIBLING(o)) {
+ o = OpSIBLING(o);
+ continue;
+ }
+
+ /* Done all the subtrees at this level. Go back up a level and
+ * link the parent in with all its (processed) children.
+ */
+
+ o = o->op_sibparent;
+ assert(!o->op_next);
+ prevp = &(o->op_next);
+ kid = (o->op_flags & OPf_KIDS) ? cUNOPo->op_first : NULL;
+ while (kid) {
+ *prevp = kid->op_next;
+ prevp = &(kid->op_next);
+ kid = OpSIBLING(kid);
+ }
+ *prevp = o;
+ }
}
+
static OP *
S_scalarkids(pTHX_ OP *o)
{
@@ -1816,122 +1890,181 @@ S_scalar_slice_warning(pTHX_ const OP *o)
SVfARG(name), lbrack, SVfARG(keysv), rbrack);
}
+
+
+/* apply scalar context to the o subtree */
+
OP *
Perl_scalar(pTHX_ OP *o)
{
- OP *kid;
+ OP * top_op = o;
- /* assumes no premature commitment */
- if (!o || (PL_parser && PL_parser->error_count)
- || (o->op_flags & OPf_WANT)
- || o->op_type == OP_RETURN)
- {
- return o;
- }
+ while (1) {
+ OP *next_kid = NULL; /* what op (if any) to process next */
+ OP *kid;
- o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
+ /* assumes no premature commitment */
+ if (!o || (PL_parser && PL_parser->error_count)
+ || (o->op_flags & OPf_WANT)
+ || o->op_type == OP_RETURN)
+ {
+ goto do_next;
+ }
- switch (o->op_type) {
- case OP_REPEAT:
- scalar(cBINOPo->op_first);
- if (o->op_private & OPpREPEAT_DOLIST) {
- kid = cLISTOPx(cUNOPo->op_first)->op_first;
- assert(kid->op_type == OP_PUSHMARK);
- if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
- op_null(cLISTOPx(cUNOPo->op_first)->op_first);
- o->op_private &=~ OPpREPEAT_DOLIST;
- }
- }
- break;
- case OP_OR:
- case OP_AND:
- case OP_COND_EXPR:
- for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
- scalar(kid);
- break;
- /* FALLTHROUGH */
- case OP_SPLIT:
- case OP_MATCH:
- case OP_QR:
- case OP_SUBST:
- case OP_NULL:
- default:
- if (o->op_flags & OPf_KIDS) {
- for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
- scalar(kid);
- }
- break;
- case OP_LEAVE:
- case OP_LEAVETRY:
- kid = cLISTOPo->op_first;
- scalar(kid);
- kid = OpSIBLING(kid);
- do_kids:
- while (kid) {
- OP *sib = OpSIBLING(kid);
- if (sib && kid->op_type != OP_LEAVEWHEN
- && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL
- || ( sib->op_targ != OP_NEXTSTATE
- && sib->op_targ != OP_DBSTATE )))
- scalarvoid(kid);
- else
- scalar(kid);
- kid = sib;
- }
- PL_curcop = &PL_compiling;
- break;
- case OP_SCOPE:
- case OP_LINESEQ:
- case OP_LIST:
- kid = cLISTOPo->op_first;
- goto do_kids;
- case OP_SORT:
- Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
- break;
- case OP_KVHSLICE:
- case OP_KVASLICE:
- {
- /* Warn about scalar context */
- const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
- const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
- SV *name;
- SV *keysv;
- const char *key = NULL;
+ o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_SCALAR;
- /* This warning can be nonsensical when there is a syntax error. */
- if (PL_parser && PL_parser->error_count)
- break;
+ switch (o->op_type) {
+ case OP_REPEAT:
+ scalar(cBINOPo->op_first);
+ /* convert what initially looked like a list repeat into a
+ * scalar repeat, e.g. $s = (1) x $n
+ */
+ if (o->op_private & OPpREPEAT_DOLIST) {
+ kid = cLISTOPx(cUNOPo->op_first)->op_first;
+ assert(kid->op_type == OP_PUSHMARK);
+ if (OpHAS_SIBLING(kid) && !OpHAS_SIBLING(OpSIBLING(kid))) {
+ op_null(cLISTOPx(cUNOPo->op_first)->op_first);
+ o->op_private &=~ OPpREPEAT_DOLIST;
+ }
+ }
+ break;
- if (!ckWARN(WARN_SYNTAX)) break;
+ case OP_OR:
+ case OP_AND:
+ case OP_COND_EXPR:
+ /* impose scalar context on everything except the condition */
+ next_kid = OpSIBLING(cUNOPo->op_first);
+ break;
- kid = cLISTOPo->op_first;
- kid = OpSIBLING(kid); /* get past pushmark */
- assert(OpSIBLING(kid));
- name = S_op_varname(aTHX_ OpSIBLING(kid));
- if (!name) /* XS module fiddling with the op tree */
- break;
- S_op_pretty(aTHX_ kid, &keysv, &key);
- assert(SvPOK(name));
- sv_chop(name,SvPVX(name)+1);
- if (key)
- /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
- Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
- "%%%" SVf "%c%s%c in scalar context better written "
- "as $%" SVf "%c%s%c",
- SVfARG(name), lbrack, key, rbrack, SVfARG(name),
- lbrack, key, rbrack);
- else
- /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
- Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
- "%%%" SVf "%c%" SVf "%c in scalar context better "
- "written as $%" SVf "%c%" SVf "%c",
- SVfARG(name), lbrack, SVfARG(keysv), rbrack,
- SVfARG(name), lbrack, SVfARG(keysv), rbrack);
- }
- }
- return o;
+ default:
+ if (o->op_flags & OPf_KIDS)
+ next_kid = cUNOPo->op_first; /* do all kids */
+ break;
+
+ /* the children of these ops are usually a list of statements,
+ * except the leaves, whose first child is a corresponding enter
+ */
+ case OP_SCOPE:
+ case OP_LINESEQ:
+ case OP_LIST:
+ kid = cLISTOPo->op_first;
+ goto do_kids;
+ case OP_LEAVE:
+ case OP_LEAVETRY:
+ kid = cLISTOPo->op_first;
+ scalar(kid);
+ kid = OpSIBLING(kid);
+ do_kids:
+ while (kid) {
+ OP *sib = OpSIBLING(kid);
+ /* Apply void context to all kids except the last, which
+ * is scalar (ignoring a trailing ex-nextstate in determining
+ * if it's the last kid). E.g.
+ * $scalar = do { void; void; scalar }
+ * Except that 'when's are always scalar, e.g.
+ * $scalar = do { given(..) {
+ * when (..) { scalar }
+ * when (..) { scalar }
+ * ...
+ * }}
+ */
+ if (!sib
+ || ( !OpHAS_SIBLING(sib)
+ && sib->op_type == OP_NULL
+ && ( sib->op_targ == OP_NEXTSTATE
+ || sib->op_targ == OP_DBSTATE )
+ )
+ )
+ {
+ /* tail call optimise calling scalar() on the last kid */
+ next_kid = kid;
+ goto do_next;
+ }
+ else if (kid->op_type == OP_LEAVEWHEN)
+ scalar(kid);
+ else
+ scalarvoid(kid);
+ kid = sib;
+ }
+ NOT_REACHED; /* NOTREACHED */
+ break;
+
+ case OP_SORT:
+ Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context");
+ break;
+
+ case OP_KVHSLICE:
+ case OP_KVASLICE:
+ {
+ /* Warn about scalar context */
+ const char lbrack = o->op_type == OP_KVHSLICE ? '{' : '[';
+ const char rbrack = o->op_type == OP_KVHSLICE ? '}' : ']';
+ SV *name;
+ SV *keysv;
+ const char *key = NULL;
+
+ /* This warning can be nonsensical when there is a syntax error. */
+ if (PL_parser && PL_parser->error_count)
+ break;
+
+ if (!ckWARN(WARN_SYNTAX)) break;
+
+ kid = cLISTOPo->op_first;
+ kid = OpSIBLING(kid); /* get past pushmark */
+ assert(OpSIBLING(kid));
+ name = S_op_varname(aTHX_ OpSIBLING(kid));
+ if (!name) /* XS module fiddling with the op tree */
+ break;
+ S_op_pretty(aTHX_ kid, &keysv, &key);
+ assert(SvPOK(name));
+ sv_chop(name,SvPVX(name)+1);
+ if (key)
+ /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
+ Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
+ "%%%" SVf "%c%s%c in scalar context better written "
+ "as $%" SVf "%c%s%c",
+ SVfARG(name), lbrack, key, rbrack, SVfARG(name),
+ lbrack, key, rbrack);
+ else
+ /* diag_listed_as: %%s[%s] in scalar context better written as $%s[%s] */
+ Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
+ "%%%" SVf "%c%" SVf "%c in scalar context better "
+ "written as $%" SVf "%c%" SVf "%c",
+ SVfARG(name), lbrack, SVfARG(keysv), rbrack,
+ SVfARG(name), lbrack, SVfARG(keysv), rbrack);
+ }
+ } /* switch */
+
+ /* If next_kid is set, someone in the code above wanted us to process
+ * that kid and all its remaining siblings. Otherwise, work our way
+ * back up the tree */
+ do_next:
+ while (!next_kid) {
+ if (o == top_op)
+ return top_op; /* at top; no parents/siblings to try */
+ if (OpHAS_SIBLING(o))
+ next_kid = o->op_sibparent;
+ else {
+ o = o->op_sibparent; /*try parent's next sibling */
+ switch (o->op_type) {
+ case OP_SCOPE:
+ case OP_LINESEQ:
+ case OP_LIST:
+ case OP_LEAVE:
+ case OP_LEAVETRY:
+ /* should really restore PL_curcop to its old value, but
+ * setting it to PL_compiling is better than do nothing */
+ PL_curcop = &PL_compiling;
+ }
+ }
+ }
+ o = next_kid;
+ } /* while */
}
+
+/* apply void context to the optree arg */
+
OP *
Perl_scalarvoid(pTHX_ OP *arg)
{
@@ -1939,14 +2072,14 @@ Perl_scalarvoid(pTHX_ OP *arg)
OP *kid;
SV* sv;
OP *o = arg;
- dDEFER_OP;
PERL_ARGS_ASSERT_SCALARVOID;
- do {
+ while (1) {
U8 want;
SV *useless_sv = NULL;
const char* useless = NULL;
+ OP * next_kid = NULL;
if (o->op_type == OP_NEXTSTATE
|| o->op_type == OP_DBSTATE
@@ -1960,7 +2093,7 @@ Perl_scalarvoid(pTHX_ OP *arg)
|| (PL_parser && PL_parser->error_count)
|| o->op_type == OP_RETURN || o->op_type == OP_REQUIRE || o->op_type == OP_LEAVEWHEN)
{
- continue;
+ goto get_next_op;
}
if ((o->op_private & OPpTARGET_MY)
@@ -1968,7 +2101,7 @@ Perl_scalarvoid(pTHX_ OP *arg)
{
/* newASSIGNOP has already applied scalar context, which we
leave, as if this op is inside SASSIGN. */
- continue;
+ goto get_next_op;
}
o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID;
@@ -2227,11 +2360,7 @@ Perl_scalarvoid(pTHX_ OP *arg)
case OP_COND_EXPR:
case OP_ENTERGIVEN:
case OP_ENTERWHEN:
- for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
- if (!(kid->op_flags & OPf_KIDS))
- scalarvoid(kid);
- else
- DEFER_OP(kid);
+ next_kid = OpSIBLING(cUNOPo->op_first);
break;
case OP_NULL:
@@ -2253,11 +2382,7 @@ Perl_scalarvoid(pTHX_ OP *arg)
case OP_LEAVEGIVEN:
case OP_LEAVEWHEN:
kids:
- for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
- if (!(kid->op_flags & OPf_KIDS))
- scalarvoid(kid);
- else
- DEFER_OP(kid);
+ next_kid = cLISTOPo->op_first;
break;
case OP_LIST:
/* If the first kid after pushmark is something that the padrange
@@ -2298,13 +2423,27 @@ Perl_scalarvoid(pTHX_ OP *arg)
"Useless use of %s in void context",
useless);
}
- } while ( (o = POP_DEFERRED_OP()) );
- DEFER_OP_CLEANUP;
+ get_next_op:
+ /* if a kid hasn't been nominated to process, continue with the
+ * next sibling, or if no siblings left, go back to the parent's
+ * siblings and so on
+ */
+ while (!next_kid) {
+ if (o == arg)
+ return arg; /* at top; no parents/siblings to try */
+ if (OpHAS_SIBLING(o))
+ next_kid = o->op_sibparent;
+ else
+ o = o->op_sibparent; /*try parent's next sibling */
+ }
+ o = next_kid;
+ }
return arg;
}
+
static OP *
S_listkids(pTHX_ OP *o)
{
@@ -2316,97 +2455,153 @@ S_listkids(pTHX_ OP *o)
return o;
}
+
+/* apply list context to the o subtree */
+
OP *
Perl_list(pTHX_ OP *o)
{
- OP *kid;
+ OP * top_op = o;
- /* assumes no premature commitment */
- if (!o || (o->op_flags & OPf_WANT)
- || (PL_parser && PL_parser->error_count)
- || o->op_type == OP_RETURN)
- {
- return o;
- }
+ while (1) {
+ OP *next_kid = NULL; /* what op (if any) to process next */
- if ((o->op_private & OPpTARGET_MY)
- && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
- {
- return o; /* As if inside SASSIGN */
- }
+ OP *kid;
+
+ /* assumes no premature commitment */
+ if (!o || (o->op_flags & OPf_WANT)
+ || (PL_parser && PL_parser->error_count)
+ || o->op_type == OP_RETURN)
+ {
+ goto do_next;
+ }
- o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
+ if ((o->op_private & OPpTARGET_MY)
+ && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
+ {
+ goto do_next; /* As if inside SASSIGN */
+ }
- switch (o->op_type) {
- case OP_FLOP:
- list(cBINOPo->op_first);
- break;
- case OP_REPEAT:
- if (o->op_private & OPpREPEAT_DOLIST
- && !(o->op_flags & OPf_STACKED))
- {
- list(cBINOPo->op_first);
- kid = cBINOPo->op_last;
- if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
- && SvIVX(kSVOP_sv) == 1)
- {
- op_null(o); /* repeat */
- op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
- /* const (rhs): */
- op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
- }
- }
- break;
- case OP_OR:
- case OP_AND:
- case OP_COND_EXPR:
- for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
- list(kid);
- break;
- default:
- case OP_MATCH:
- case OP_QR:
- case OP_SUBST:
- case OP_NULL:
- if (!(o->op_flags & OPf_KIDS))
- break;
- if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
- list(cBINOPo->op_first);
- return gen_constant_list(o);
- }
- listkids(o);
- break;
- case OP_LIST:
- listkids(o);
- if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
- op_null(cUNOPo->op_first); /* NULL the pushmark */
- op_null(o); /* NULL the list */
- }
- break;
- case OP_LEAVE:
- case OP_LEAVETRY:
- kid = cLISTOPo->op_first;
- list(kid);
- kid = OpSIBLING(kid);
- do_kids:
- while (kid) {
- OP *sib = OpSIBLING(kid);
- if (sib && kid->op_type != OP_LEAVEWHEN)
- scalarvoid(kid);
- else
- list(kid);
- kid = sib;
- }
- PL_curcop = &PL_compiling;
- break;
- case OP_SCOPE:
- case OP_LINESEQ:
- kid = cLISTOPo->op_first;
- goto do_kids;
- }
- return o;
+ o->op_flags = (o->op_flags & ~OPf_WANT) | OPf_WANT_LIST;
+
+ switch (o->op_type) {
+ case OP_REPEAT:
+ if (o->op_private & OPpREPEAT_DOLIST
+ && !(o->op_flags & OPf_STACKED))
+ {
+ list(cBINOPo->op_first);
+ kid = cBINOPo->op_last;
+ /* optimise away (.....) x 1 */
+ if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)
+ && SvIVX(kSVOP_sv) == 1)
+ {
+ op_null(o); /* repeat */
+ op_null(cUNOPx(cBINOPo->op_first)->op_first);/* pushmark */
+ /* const (rhs): */
+ op_free(op_sibling_splice(o, cBINOPo->op_first, 1, NULL));
+ }
+ }
+ break;
+
+ case OP_OR:
+ case OP_AND:
+ case OP_COND_EXPR:
+ /* impose list context on everything except the condition */
+ next_kid = OpSIBLING(cUNOPo->op_first);
+ break;
+
+ default:
+ if (!(o->op_flags & OPf_KIDS))
+ break;
+ /* possibly flatten 1..10 into a constant array */
+ if (!o->op_next && cUNOPo->op_first->op_type == OP_FLOP) {
+ list(cBINOPo->op_first);
+ gen_constant_list(o);
+ goto do_next;
+ }
+ next_kid = cUNOPo->op_first; /* do all kids */
+ break;
+
+ case OP_LIST:
+ if (cLISTOPo->op_first->op_type == OP_PUSHMARK) {
+ op_null(cUNOPo->op_first); /* NULL the pushmark */
+ op_null(o); /* NULL the list */
+ }
+ if (o->op_flags & OPf_KIDS)
+ next_kid = cUNOPo->op_first; /* do all kids */
+ break;
+
+ /* the children of these ops are usually a list of statements,
+ * except the leaves, whose first child is a corresponding enter
+ */
+ case OP_SCOPE:
+ case OP_LINESEQ:
+ kid = cLISTOPo->op_first;
+ goto do_kids;
+ case OP_LEAVE:
+ case OP_LEAVETRY:
+ kid = cLISTOPo->op_first;
+ list(kid);
+ kid = OpSIBLING(kid);
+ do_kids:
+ while (kid) {
+ OP *sib = OpSIBLING(kid);
+ /* Apply void context to all kids except the last, which
+ * is list. E.g.
+ * @a = do { void; void; list }
+ * Except that 'when's are always list context, e.g.
+ * @a = do { given(..) {
+ * when (..) { list }
+ * when (..) { list }
+ * ...
+ * }}
+ */
+ if (!sib) {
+ /* tail call optimise calling list() on the last kid */
+ next_kid = kid;
+ goto do_next;
+ }
+ else if (kid->op_type == OP_LEAVEWHEN)
+ list(kid);
+ else
+ scalarvoid(kid);
+ kid = sib;
+ }
+ NOT_REACHED; /* NOTREACHED */
+ break;
+
+ }
+
+ /* If next_kid is set, someone in the code above wanted us to process
+ * that kid and all its remaining siblings. Otherwise, work our way
+ * back up the tree */
+ do_next:
+ while (!next_kid) {
+ if (o == top_op)
+ return top_op; /* at top; no parents/siblings to try */
+ if (OpHAS_SIBLING(o))
+ next_kid = o->op_sibparent;
+ else {
+ o = o->op_sibparent; /*try parent's next sibling */
+ switch (o->op_type) {
+ case OP_SCOPE:
+ case OP_LINESEQ:
+ case OP_LIST:
+ case OP_LEAVE:
+ case OP_LEAVETRY:
+ /* should really restore PL_curcop to its old value, but
+ * setting it to PL_compiling is better than do nothing */
+ PL_curcop = &PL_compiling;
+ }
+ }
+
+
+ }
+ o = next_kid;
+ } /* while */
}
+
static OP *
S_scalarseq(pTHX_ OP *o)
{
@@ -2757,6 +2952,18 @@ S_maybe_multiconcat(pTHX_ OP *o)
targetop = OpSIBLING(topop);
if (!targetop) /* probably some sort of syntax error */
return;
+
+ /* don't optimise away assign in 'local $foo = ....' */
+ if ( (targetop->op_private & OPpLVAL_INTRO)
+ /* these are the common ops which do 'local', but
+ * not all */
+ && ( targetop->op_type == OP_GVSV
+ || targetop->op_type == OP_RV2SV
+ || targetop->op_type == OP_AELEM
+ || targetop->op_type == OP_HELEM
+ )
+ )
+ return;
}
else if ( topop->op_type == OP_CONCAT
&& (topop->op_flags & OPf_STACKED)
@@ -2782,7 +2989,7 @@ S_maybe_multiconcat(pTHX_ OP *o)
}
if (targetop) {
- /* Can targetop (the LHS) if it's a padsv, be be optimised
+ /* Can targetop (the LHS) if it's a padsv, be optimised
* away and use OPpTARGET_MY instead?
*/
if ( (targetop->op_type == OP_PADSV)
@@ -2961,6 +3168,8 @@ S_maybe_multiconcat(pTHX_ OP *o)
&& (SvPOK(sv) || SvIOK(sv))
&& (!SvGMAGICAL(sv))
) {
+ if (argop->op_private & OPpCONST_STRICT)
+ no_bareword_allowed(argop);
argp++->p = sv;
utf8 |= cBOOL(SvUTF8(sv));
nconst++;
@@ -3028,7 +3237,7 @@ S_maybe_multiconcat(pTHX_ OP *o)
* X .= Y
*
* otherwise we could be doing something like $x = "foo", which
- * if treated as as a concat, would fail to COW.
+ * if treated as a concat, would fail to COW.
*/
if (nargs + nconst + cBOOL(private_flags & OPpMULTICONCAT_APPEND) < 2)
return;
@@ -3100,7 +3309,7 @@ S_maybe_multiconcat(pTHX_ OP *o)
sv_utf8_upgrade_nomg(sv);
argp->p = SvPV_nomg(sv, argp->len);
total_len += argp->len;
-
+
/* see if any strings would grow if converted to utf8 */
if (!utf8) {
variant += variant_under_utf8_count((U8 *) argp->p,
@@ -3339,7 +3548,7 @@ S_maybe_multiconcat(pTHX_ OP *o)
lastkidop = pmop;
}
- /* Optimise
+ /* Optimise
* target = A.B.C...
* target .= A.B.C...
*/
@@ -3493,17 +3702,20 @@ Perl_optimize_optree(pTHX_ OP* o)
}
-/* helper for optimize_optree() which optimises on op then recurses
+/* helper for optimize_optree() which optimises one op then recurses
* to optimise any children.
*/
STATIC void
S_optimize_op(pTHX_ OP* o)
{
- dDEFER_OP;
+ OP *top_op = o;
PERL_ARGS_ASSERT_OPTIMIZE_OP;
- do {
+
+ while (1) {
+ OP * next_kid = NULL;
+
assert(o->op_type != OP_FREED);
switch (o->op_type) {
@@ -3521,26 +3733,44 @@ S_optimize_op(pTHX_ OP* o)
break;
case OP_SUBST:
- if (cPMOPo->op_pmreplrootu.op_pmreplroot)
- DEFER_OP(cPMOPo->op_pmreplrootu.op_pmreplroot);
+ if (cPMOPo->op_pmreplrootu.op_pmreplroot) {
+ /* we can't assume that op_pmreplroot->op_sibparent == o
+ * and that it is thus possible to walk back up the tree
+ * past op_pmreplroot. So, although we try to avoid
+ * recursing through op trees, do it here. After all,
+ * there are unlikely to be many nested s///e's within
+ * the replacement part of a s///e.
+ */
+ optimize_op(cPMOPo->op_pmreplrootu.op_pmreplroot);
+ }
break;
default:
break;
}
- if (o->op_flags & OPf_KIDS) {
- OP *kid;
- IV child_count = 0;
- for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) {
- DEFER_OP(kid);
- ++child_count;
- }
- DEFER_REVERSE(child_count);
+ if (o->op_flags & OPf_KIDS)
+ next_kid = cUNOPo->op_first;
+
+ /* if a kid hasn't been nominated to process, continue with the
+ * next sibling, or if no siblings left, go back to the parent's
+ * siblings and so on
+ */
+ while (!next_kid) {
+ if (o == top_op)
+ return; /* at top; no parents/siblings to try */
+ if (OpHAS_SIBLING(o))
+ next_kid = o->op_sibparent;
+ else
+ o = o->op_sibparent; /*try parent's next sibling */
}
- } while ( ( o = POP_DEFERRED_OP() ) );
- DEFER_OP_CLEANUP;
+ /* this label not yet used. Goto here if any code above sets
+ * next-kid
+ get_next_op:
+ */
+ o = next_kid;
+ }
}
@@ -3588,7 +3818,7 @@ S_op_relocate_sv(pTHX_ SV** svp, PADOFFSET* targp)
#endif
/*
-=for apidoc s|OP*|traverse_op_tree|OP* top|OP* o
+=for apidoc traverse_op_tree
Return the next op in a depth-first traversal of the op tree,
returning NULL when the traversal is complete.
@@ -3800,25 +4030,6 @@ S_finalize_op(pTHX_ OP* o)
} while (( o = traverse_op_tree(top, o)) != NULL);
}
-/*
-=for apidoc Amx|OP *|op_lvalue|OP *o|I32 type
-
-Propagate lvalue ("modifiable") context to an op and its children.
-C<type> represents the context type, roughly based on the type of op that
-would do the modifying, although C<local()> is represented by C<OP_NULL>,
-because it has no op type of its own (it is signalled by a flag on
-the lvalue op).
-
-This function detects things that can't be modified, such as C<$x+1>, and
-generates errors for them. For example, C<$x+1 = 2> would cause it to be
-called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
-
-It also flags things that need to behave specially in an lvalue context,
-such as C<$$x = 5> which might have to vivify a reference in C<$x>.
-
-=cut
-*/
-
static void
S_mark_padname_lvalue(pTHX_ PADNAME *pn)
{
@@ -3856,126 +4067,160 @@ S_vivifies(const OPCODE type)
return 0;
}
+
+/* apply lvalue reference (aliasing) context to the optree o.
+ * E.g. in
+ * \($x,$y) = (...)
+ * o would be the list ($x,$y) and type would be OP_AASSIGN.
+ * It may descend and apply this to children too, for example in
+ * \( $cond ? $x, $y) = (...)
+ */
+
static void
S_lvref(pTHX_ OP *o, I32 type)
{
dVAR;
OP *kid;
- switch (o->op_type) {
- case OP_COND_EXPR:
- for (kid = OpSIBLING(cUNOPo->op_first); kid;
- kid = OpSIBLING(kid))
- S_lvref(aTHX_ kid, type);
- /* FALLTHROUGH */
- case OP_PUSHMARK:
- return;
- case OP_RV2AV:
- if (cUNOPo->op_first->op_type != OP_GV) goto badref;
- o->op_flags |= OPf_STACKED;
- if (o->op_flags & OPf_PARENS) {
- if (o->op_private & OPpLVAL_INTRO) {
- yyerror(Perl_form(aTHX_ "Can't modify reference to "
- "localized parenthesized array in list assignment"));
- return;
- }
- slurpy:
- OpTYPE_set(o, OP_LVAVREF);
- o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
- o->op_flags |= OPf_MOD|OPf_REF;
- return;
- }
- o->op_private |= OPpLVREF_AV;
- goto checkgv;
- case OP_RV2CV:
- kid = cUNOPo->op_first;
- if (kid->op_type == OP_NULL)
- kid = cUNOPx(OpSIBLING(kUNOP->op_first))
- ->op_first;
- o->op_private = OPpLVREF_CV;
- if (kid->op_type == OP_GV)
- o->op_flags |= OPf_STACKED;
- else if (kid->op_type == OP_PADCV) {
- o->op_targ = kid->op_targ;
- kid->op_targ = 0;
- op_free(cUNOPo->op_first);
- cUNOPo->op_first = NULL;
- o->op_flags &=~ OPf_KIDS;
- }
- else goto badref;
- break;
- case OP_RV2HV:
- if (o->op_flags & OPf_PARENS) {
- parenhash:
- yyerror(Perl_form(aTHX_ "Can't modify reference to "
- "parenthesized hash in list assignment"));
- return;
- }
- o->op_private |= OPpLVREF_HV;
- /* FALLTHROUGH */
- case OP_RV2SV:
- checkgv:
- if (cUNOPo->op_first->op_type != OP_GV) goto badref;
- o->op_flags |= OPf_STACKED;
- break;
- case OP_PADHV:
- if (o->op_flags & OPf_PARENS) goto parenhash;
- o->op_private |= OPpLVREF_HV;
- /* FALLTHROUGH */
- case OP_PADSV:
- PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
- break;
- case OP_PADAV:
- PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
- if (o->op_flags & OPf_PARENS) goto slurpy;
- o->op_private |= OPpLVREF_AV;
- break;
- case OP_AELEM:
- case OP_HELEM:
- o->op_private |= OPpLVREF_ELEM;
- o->op_flags |= OPf_STACKED;
- break;
- case OP_ASLICE:
- case OP_HSLICE:
- OpTYPE_set(o, OP_LVREFSLICE);
- o->op_private &= OPpLVAL_INTRO;
- return;
- case OP_NULL:
- if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
- goto badref;
- else if (!(o->op_flags & OPf_KIDS))
- return;
- if (o->op_targ != OP_LIST) {
- S_lvref(aTHX_ cBINOPo->op_first, type);
- return;
- }
- /* FALLTHROUGH */
- case OP_LIST:
- for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) {
- assert((kid->op_flags & OPf_WANT) != OPf_WANT_VOID);
- S_lvref(aTHX_ kid, type);
- }
- return;
- case OP_STUB:
- if (o->op_flags & OPf_PARENS)
- return;
- /* FALLTHROUGH */
- default:
- badref:
- /* diag_listed_as: Can't modify reference to %s in %s assignment */
- yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
- o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
- ? "do block"
- : OP_DESC(o),
- PL_op_desc[type]));
- return;
- }
- OpTYPE_set(o, OP_LVREF);
- o->op_private &=
- OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
- if (type == OP_ENTERLOOP)
- o->op_private |= OPpLVREF_ITER;
+ OP * top_op = o;
+
+ while (1) {
+ switch (o->op_type) {
+ case OP_COND_EXPR:
+ o = OpSIBLING(cUNOPo->op_first);
+ continue;
+
+ case OP_PUSHMARK:
+ goto do_next;
+
+ case OP_RV2AV:
+ if (cUNOPo->op_first->op_type != OP_GV) goto badref;
+ o->op_flags |= OPf_STACKED;
+ if (o->op_flags & OPf_PARENS) {
+ if (o->op_private & OPpLVAL_INTRO) {
+ yyerror(Perl_form(aTHX_ "Can't modify reference to "
+ "localized parenthesized array in list assignment"));
+ goto do_next;
+ }
+ slurpy:
+ OpTYPE_set(o, OP_LVAVREF);
+ o->op_private &= OPpLVAL_INTRO|OPpPAD_STATE;
+ o->op_flags |= OPf_MOD|OPf_REF;
+ goto do_next;
+ }
+ o->op_private |= OPpLVREF_AV;
+ goto checkgv;
+
+ case OP_RV2CV:
+ kid = cUNOPo->op_first;
+ if (kid->op_type == OP_NULL)
+ kid = cUNOPx(OpSIBLING(kUNOP->op_first))
+ ->op_first;
+ o->op_private = OPpLVREF_CV;
+ if (kid->op_type == OP_GV)
+ o->op_flags |= OPf_STACKED;
+ else if (kid->op_type == OP_PADCV) {
+ o->op_targ = kid->op_targ;
+ kid->op_targ = 0;
+ op_free(cUNOPo->op_first);
+ cUNOPo->op_first = NULL;
+ o->op_flags &=~ OPf_KIDS;
+ }
+ else goto badref;
+ break;
+
+ case OP_RV2HV:
+ if (o->op_flags & OPf_PARENS) {
+ parenhash:
+ yyerror(Perl_form(aTHX_ "Can't modify reference to "
+ "parenthesized hash in list assignment"));
+ goto do_next;
+ }
+ o->op_private |= OPpLVREF_HV;
+ /* FALLTHROUGH */
+ case OP_RV2SV:
+ checkgv:
+ if (cUNOPo->op_first->op_type != OP_GV) goto badref;
+ o->op_flags |= OPf_STACKED;
+ break;
+
+ case OP_PADHV:
+ if (o->op_flags & OPf_PARENS) goto parenhash;
+ o->op_private |= OPpLVREF_HV;
+ /* FALLTHROUGH */
+ case OP_PADSV:
+ PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
+ break;
+
+ case OP_PADAV:
+ PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX);
+ if (o->op_flags & OPf_PARENS) goto slurpy;
+ o->op_private |= OPpLVREF_AV;
+ break;
+
+ case OP_AELEM:
+ case OP_HELEM:
+ o->op_private |= OPpLVREF_ELEM;
+ o->op_flags |= OPf_STACKED;
+ break;
+
+ case OP_ASLICE:
+ case OP_HSLICE:
+ OpTYPE_set(o, OP_LVREFSLICE);
+ o->op_private &= OPpLVAL_INTRO;
+ goto do_next;
+
+ case OP_NULL:
+ if (o->op_flags & OPf_SPECIAL) /* do BLOCK */
+ goto badref;
+ else if (!(o->op_flags & OPf_KIDS))
+ goto do_next;
+
+ /* the code formerly only recursed into the first child of
+ * a non ex-list OP_NULL. if we ever encounter such a null op with
+ * more than one child, need to decide whether its ok to process
+ * *all* its kids or not */
+ assert(o->op_targ == OP_LIST
+ || !(OpHAS_SIBLING(cBINOPo->op_first)));
+ /* FALLTHROUGH */
+ case OP_LIST:
+ o = cLISTOPo->op_first;
+ continue;
+
+ case OP_STUB:
+ if (o->op_flags & OPf_PARENS)
+ goto do_next;
+ /* FALLTHROUGH */
+ default:
+ badref:
+ /* diag_listed_as: Can't modify reference to %s in %s assignment */
+ yyerror(Perl_form(aTHX_ "Can't modify reference to %s in %s",
+ o->op_type == OP_NULL && o->op_flags & OPf_SPECIAL
+ ? "do block"
+ : OP_DESC(o),
+ PL_op_desc[type]));
+ goto do_next;
+ }
+
+ OpTYPE_set(o, OP_LVREF);
+ o->op_private &=
+ OPpLVAL_INTRO|OPpLVREF_ELEM|OPpLVREF_TYPE|OPpPAD_STATE;
+ if (type == OP_ENTERLOOP)
+ o->op_private |= OPpLVREF_ITER;
+
+ do_next:
+ while (1) {
+ if (o == top_op)
+ return; /* at top; no parents/siblings to try */
+ if (OpHAS_SIBLING(o)) {
+ o = o->op_sibparent;
+ break;
+ }
+ o = o->op_sibparent; /*try parent's next sibling */
+ }
+ } /* while */
}
+
PERL_STATIC_INLINE bool
S_potential_mod_type(I32 type)
{
@@ -3984,35 +4229,69 @@ S_potential_mod_type(I32 type)
|| type == OP_REFGEN || type == OP_LEAVESUBLV;
}
+
+/*
+=for apidoc op_lvalue
+
+Propagate lvalue ("modifiable") context to an op and its children.
+C<type> represents the context type, roughly based on the type of op that
+would do the modifying, although C<local()> is represented by C<OP_NULL>,
+because it has no op type of its own (it is signalled by a flag on
+the lvalue op).
+
+This function detects things that can't be modified, such as C<$x+1>, and
+generates errors for them. For example, C<$x+1 = 2> would cause it to be
+called with an op of type C<OP_ADD> and a C<type> argument of C<OP_SASSIGN>.
+
+It also flags things that need to behave specially in an lvalue context,
+such as C<$$x = 5> which might have to vivify a reference in C<$x>.
+
+=cut
+
+Perl_op_lvalue_flags() is a non-API lower-level interface to
+op_lvalue(). The flags param has these bits:
+ OP_LVALUE_NO_CROAK: return rather than croaking on error
+
+*/
+
OP *
Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
{
dVAR;
- OP *kid;
- /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
- int localize = -1;
+ OP *top_op = o;
if (!o || (PL_parser && PL_parser->error_count))
return o;
+ while (1) {
+ OP *kid;
+ /* -1 = error on localize, 0 = ignore localize, 1 = ok to localize */
+ int localize = -1;
+ OP *next_kid = NULL;
+
if ((o->op_private & OPpTARGET_MY)
&& (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */
{
- return o;
+ goto do_next;
}
- assert( (o->op_flags & OPf_WANT) != OPf_WANT_VOID );
+ /* elements of a list might be in void context because the list is
+ in scalar context or because they are attribute sub calls */
+ if ((o->op_flags & OPf_WANT) == OPf_WANT_VOID)
+ goto do_next;
if (type == OP_PRTF || type == OP_SPRINTF) type = OP_ENTERSUB;
switch (o->op_type) {
case OP_UNDEF:
PL_modcount++;
- return o;
+ goto do_next;
+
case OP_STUB:
if ((o->op_flags & OPf_PARENS))
break;
goto nomod;
+
case OP_ENTERSUB:
if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) &&
!(o->op_flags & OPf_STACKED)) {
@@ -4078,7 +4357,7 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
"subroutine call of &%" SVf " in %s",
SVfARG(namesv), PL_op_desc[type]),
SvUTF8(namesv));
- return o;
+ goto do_next;
}
}
/* FALLTHROUGH */
@@ -4093,7 +4372,7 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
? "do block"
: OP_DESC(o)),
type ? PL_op_desc[type] : "local"));
- return o;
+ goto do_next;
case OP_PREINC:
case OP_PREDEC:
@@ -4128,6 +4407,12 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
goto nomod;
else {
const I32 mods = PL_modcount;
+ /* we recurse rather than iterate here because we need to
+ * calculate and use the delta applied to PL_modcount by the
+ * first child. So in something like
+ * ($x, ($y) x 3) = split;
+ * split knows that 4 elements are wanted
+ */
modkids(cBINOPo->op_first, type);
if (type != OP_AASSIGN)
goto nomod;
@@ -4145,8 +4430,7 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
case OP_COND_EXPR:
localize = 1;
- for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
- op_lvalue(kid, type);
+ next_kid = OpSIBLING(cUNOPo->op_first);
break;
case OP_RV2AV:
@@ -4156,7 +4440,7 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
/* Treat \(@foo) like ordinary list, but still mark it as modi-
fiable since some contexts need to know. */
o->op_flags |= OPf_MOD;
- return o;
+ goto do_next;
}
/* FALLTHROUGH */
case OP_RV2GV:
@@ -4180,23 +4464,27 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
case OP_DBSTATE:
PL_modcount = RETURN_UNLIMITED_NUMBER;
break;
+
case OP_KVHSLICE:
case OP_KVASLICE:
case OP_AKEYS:
if (type == OP_LEAVESUBLV)
o->op_private |= OPpMAYBE_LVSUB;
goto nomod;
+
case OP_AVHVSWITCH:
if (type == OP_LEAVESUBLV
&& (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS)
o->op_private |= OPpMAYBE_LVSUB;
goto nomod;
+
case OP_AV2ARYLEN:
PL_hints |= HINT_BLOCK_SCOPE;
if (type == OP_LEAVESUBLV)
o->op_private |= OPpMAYBE_LVSUB;
PL_modcount++;
break;
+
case OP_RV2SV:
ref(cUNOPo->op_first, o->op_type);
localize = 1;
@@ -4225,7 +4513,7 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
/* Treat \(@foo) like ordinary list, but still mark it as modi-
fiable since some contexts need to know. */
o->op_flags |= OPf_MOD;
- return o;
+ goto do_next;
}
if (scalar_mod_type(o, type))
goto nomod;
@@ -4262,6 +4550,9 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
if (type == OP_LEAVESUBLV)
o->op_private |= OPpMAYBE_LVSUB;
if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) {
+ /* we recurse rather than iterate here because the child
+ * needs to be processed with a different 'type' parameter */
+
/* substr and vec */
/* If this op is in merely potential (non-fatal) modifiable
context, then apply OP_ENTERSUB context to
@@ -4296,7 +4587,7 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
case OP_LINESEQ:
localize = 0;
if (o->op_flags & OPf_KIDS)
- op_lvalue(cLISTOPo->op_last, type);
+ next_kid = cLISTOPo->op_last;
break;
case OP_NULL:
@@ -4329,30 +4620,31 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
/* this should trigger a "Can't modify transliteration" err */
op_lvalue(sib, type);
}
- op_lvalue(cBINOPo->op_first, type);
+ next_kid = cBINOPo->op_first;
+ /* we assume OP_NULLs which aren't ex-list have no more than 2
+ * children. If this assumption is wrong, increase the scan
+ * limit below */
+ assert( !OpHAS_SIBLING(next_kid)
+ || !OpHAS_SIBLING(OpSIBLING(next_kid)));
break;
}
/* FALLTHROUGH */
case OP_LIST:
localize = 0;
- for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid))
- /* elements might be in void context because the list is
- in scalar context or because they are attribute sub calls */
- if ( (kid->op_flags & OPf_WANT) != OPf_WANT_VOID )
- op_lvalue(kid, type);
+ next_kid = cLISTOPo->op_first;
break;
case OP_COREARGS:
- return o;
+ goto do_next;
case OP_AND:
case OP_OR:
if (type == OP_LEAVESUBLV
|| !S_vivifies(cLOGOPo->op_first->op_type))
- op_lvalue(cLOGOPo->op_first, type);
- if (type == OP_LEAVESUBLV
+ next_kid = cLOGOPo->op_first;
+ else if (type == OP_LEAVESUBLV
|| !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type))
- op_lvalue(OpSIBLING(cLOGOPo->op_first), type);
+ next_kid = OpSIBLING(cLOGOPo->op_first);
goto nomod;
case OP_SREFGEN:
@@ -4364,8 +4656,8 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
Perl_ck_warner_d(aTHX_
packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
"Declaring references is experimental");
- op_lvalue(cUNOPo->op_first, OP_NULL);
- return o;
+ next_kid = cUNOPo->op_first;
+ goto do_next;
}
if (type != OP_AASSIGN && type != OP_SASSIGN
&& type != OP_ENTERLOOP)
@@ -4395,7 +4687,7 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
if (o->op_type == OP_REFGEN)
op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */
op_null(o);
- return o;
+ goto do_next;
case OP_SPLIT:
if ((o->op_private & OPpSPLIT_ASSIGN)) {
@@ -4413,9 +4705,8 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
/* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that
their argument is a filehandle; thus \stat(".") should not set
it. AMS 20011102 */
- if (type == OP_REFGEN &&
- PL_check[o->op_type] == Perl_ck_ftst)
- return o;
+ if (type == OP_REFGEN && OP_IS_STAT(o->op_type))
+ goto do_next;
if (type != OP_LEAVESUBLV)
o->op_flags |= OPf_MOD;
@@ -4440,9 +4731,40 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)
else if (type != OP_GREPSTART && type != OP_ENTERSUB
&& type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB)
o->op_flags |= OPf_REF;
- return o;
+
+ do_next:
+ while (!next_kid) {
+ if (o == top_op)
+ return top_op; /* at top; no parents/siblings to try */
+ if (OpHAS_SIBLING(o)) {
+ next_kid = o->op_sibparent;
+ if (!OpHAS_SIBLING(next_kid)) {
+ /* a few node types don't recurse into their second child */
+ OP *parent = next_kid->op_sibparent;
+ I32 ptype = parent->op_type;
+ if ( (ptype == OP_NULL && parent->op_targ != OP_LIST)
+ || ( (ptype == OP_AND || ptype == OP_OR)
+ && (type != OP_LEAVESUBLV
+ && S_vivifies(next_kid->op_type))
+ )
+ ) {
+ /*try parent's next sibling */
+ o = parent;
+ next_kid = NULL;
+ }
+ }
+ }
+ else
+ o = o->op_sibparent; /*try parent's next sibling */
+
+ }
+ o = next_kid;
+
+ } /* while */
+
}
+
STATIC bool
S_scalar_mod_type(const OP *o, I32 type)
{
@@ -4537,104 +4859,143 @@ S_refkids(pTHX_ OP *o, I32 type)
return o;
}
+
+/* Apply reference (autovivification) context to the subtree at o.
+ * For example in
+ * push @{expression}, ....;
+ * o will be the head of 'expression' and type will be OP_RV2AV.
+ * It marks the op o (or a suitable child) as autovivifying, e.g. by
+ * setting OPf_MOD.
+ * For OP_RV2AV/OP_PADAV and OP_RV2HV/OP_PADHV sets OPf_REF too if
+ * set_op_ref is true.
+ *
+ * Also calls scalar(o).
+ */
+
OP *
Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref)
{
dVAR;
- OP *kid;
+ OP * top_op = o;
PERL_ARGS_ASSERT_DOREF;
if (PL_parser && PL_parser->error_count)
return o;
- switch (o->op_type) {
- case OP_ENTERSUB:
- if ((type == OP_EXISTS || type == OP_DEFINED) &&
- !(o->op_flags & OPf_STACKED)) {
- OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
- assert(cUNOPo->op_first->op_type == OP_NULL);
- op_null(((LISTOP*)cUNOPo->op_first)->op_first); /* disable pushmark */
- o->op_flags |= OPf_SPECIAL;
- }
- else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
- o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
- : type == OP_RV2HV ? OPpDEREF_HV
- : OPpDEREF_SV);
- o->op_flags |= OPf_MOD;
- }
+ while (1) {
+ switch (o->op_type) {
+ case OP_ENTERSUB:
+ if ((type == OP_EXISTS || type == OP_DEFINED) &&
+ !(o->op_flags & OPf_STACKED)) {
+ OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */
+ assert(cUNOPo->op_first->op_type == OP_NULL);
+ /* disable pushmark */
+ op_null(((LISTOP*)cUNOPo->op_first)->op_first);
+ o->op_flags |= OPf_SPECIAL;
+ }
+ else if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV){
+ o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
+ : type == OP_RV2HV ? OPpDEREF_HV
+ : OPpDEREF_SV);
+ o->op_flags |= OPf_MOD;
+ }
- break;
+ break;
- case OP_COND_EXPR:
- for (kid = OpSIBLING(cUNOPo->op_first); kid; kid = OpSIBLING(kid))
- doref(kid, type, set_op_ref);
- break;
- case OP_RV2SV:
- if (type == OP_DEFINED)
- o->op_flags |= OPf_SPECIAL; /* don't create GV */
- doref(cUNOPo->op_first, o->op_type, set_op_ref);
- /* FALLTHROUGH */
- case OP_PADSV:
- if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
- o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
- : type == OP_RV2HV ? OPpDEREF_HV
- : OPpDEREF_SV);
- o->op_flags |= OPf_MOD;
- }
- break;
+ case OP_COND_EXPR:
+ o = OpSIBLING(cUNOPo->op_first);
+ continue;
- case OP_RV2AV:
- case OP_RV2HV:
- if (set_op_ref)
- o->op_flags |= OPf_REF;
- /* FALLTHROUGH */
- case OP_RV2GV:
- if (type == OP_DEFINED)
- o->op_flags |= OPf_SPECIAL; /* don't create GV */
- doref(cUNOPo->op_first, o->op_type, set_op_ref);
- break;
+ case OP_RV2SV:
+ if (type == OP_DEFINED)
+ o->op_flags |= OPf_SPECIAL; /* don't create GV */
+ /* FALLTHROUGH */
+ case OP_PADSV:
+ if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
+ o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
+ : type == OP_RV2HV ? OPpDEREF_HV
+ : OPpDEREF_SV);
+ o->op_flags |= OPf_MOD;
+ }
+ if (o->op_flags & OPf_KIDS) {
+ type = o->op_type;
+ o = cUNOPo->op_first;
+ continue;
+ }
+ break;
- case OP_PADAV:
- case OP_PADHV:
- if (set_op_ref)
- o->op_flags |= OPf_REF;
- break;
+ case OP_RV2AV:
+ case OP_RV2HV:
+ if (set_op_ref)
+ o->op_flags |= OPf_REF;
+ /* FALLTHROUGH */
+ case OP_RV2GV:
+ if (type == OP_DEFINED)
+ o->op_flags |= OPf_SPECIAL; /* don't create GV */
+ type = o->op_type;
+ o = cUNOPo->op_first;
+ continue;
- case OP_SCALAR:
- case OP_NULL:
- if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
- break;
- doref(cBINOPo->op_first, type, set_op_ref);
- break;
- case OP_AELEM:
- case OP_HELEM:
- doref(cBINOPo->op_first, o->op_type, set_op_ref);
- if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
- o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
- : type == OP_RV2HV ? OPpDEREF_HV
- : OPpDEREF_SV);
- o->op_flags |= OPf_MOD;
- }
- break;
+ case OP_PADAV:
+ case OP_PADHV:
+ if (set_op_ref)
+ o->op_flags |= OPf_REF;
+ break;
- case OP_SCOPE:
- case OP_LEAVE:
- set_op_ref = FALSE;
- /* FALLTHROUGH */
- case OP_ENTER:
- case OP_LIST:
- if (!(o->op_flags & OPf_KIDS))
- break;
- doref(cLISTOPo->op_last, type, set_op_ref);
- break;
- default:
- break;
- }
- return scalar(o);
+ case OP_SCALAR:
+ case OP_NULL:
+ if (!(o->op_flags & OPf_KIDS) || type == OP_DEFINED)
+ break;
+ o = cBINOPo->op_first;
+ continue;
+
+ case OP_AELEM:
+ case OP_HELEM:
+ if (type == OP_RV2SV || type == OP_RV2AV || type == OP_RV2HV) {
+ o->op_private |= (type == OP_RV2AV ? OPpDEREF_AV
+ : type == OP_RV2HV ? OPpDEREF_HV
+ : OPpDEREF_SV);
+ o->op_flags |= OPf_MOD;
+ }
+ type = o->op_type;
+ o = cBINOPo->op_first;
+ continue;;
+
+ case OP_SCOPE:
+ case OP_LEAVE:
+ set_op_ref = FALSE;
+ /* FALLTHROUGH */
+ case OP_ENTER:
+ case OP_LIST:
+ if (!(o->op_flags & OPf_KIDS))
+ break;
+ o = cLISTOPo->op_last;
+ continue;
+ default:
+ break;
+ } /* switch */
+
+ while (1) {
+ if (o == top_op)
+ return scalar(top_op); /* at top; no parents/siblings to try */
+ if (OpHAS_SIBLING(o)) {
+ o = o->op_sibparent;
+ /* Normally skip all siblings and go straight to the parent;
+ * the only op that requires two children to be processed
+ * is OP_COND_EXPR */
+ if (!OpHAS_SIBLING(o)
+ && o->op_sibparent->op_type == OP_COND_EXPR)
+ break;
+ continue;
+ }
+ o = o->op_sibparent; /*try parent's next sibling */
+ }
+ } /* while */
}
+
STATIC OP *
S_dup_attrlist(pTHX_ OP *o)
{
@@ -5014,7 +5375,7 @@ Perl_my_attrs(pTHX_ OP *o, OP *attrs)
/* The listop in rops might have a pushmark at the beginning,
which will mess up list assignment. */
LISTOP * const lrops = (LISTOP *)rops; /* for brevity */
- if (rops->op_type == OP_LIST &&
+ if (rops->op_type == OP_LIST &&
lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK)
{
OP * const pushmark = lrops->op_first;
@@ -5136,8 +5497,126 @@ Perl_invert(pTHX_ OP *o)
return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o));
}
+OP *
+Perl_cmpchain_start(pTHX_ I32 type, OP *left, OP *right)
+{
+ dVAR;
+ BINOP *bop;
+ OP *op;
+
+ if (!left)
+ left = newOP(OP_NULL, 0);
+ if (!right)
+ right = newOP(OP_NULL, 0);
+ scalar(left);
+ scalar(right);
+ NewOp(0, bop, 1, BINOP);
+ op = (OP*)bop;
+ ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP);
+ OpTYPE_set(op, type);
+ cBINOPx(op)->op_flags = OPf_KIDS;
+ cBINOPx(op)->op_private = 2;
+ cBINOPx(op)->op_first = left;
+ cBINOPx(op)->op_last = right;
+ OpMORESIB_set(left, right);
+ OpLASTSIB_set(right, op);
+ return op;
+}
+
+OP *
+Perl_cmpchain_extend(pTHX_ I32 type, OP *ch, OP *right)
+{
+ dVAR;
+ BINOP *bop;
+ OP *op;
+
+ PERL_ARGS_ASSERT_CMPCHAIN_EXTEND;
+ if (!right)
+ right = newOP(OP_NULL, 0);
+ scalar(right);
+ NewOp(0, bop, 1, BINOP);
+ op = (OP*)bop;
+ ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP);
+ OpTYPE_set(op, type);
+ if (ch->op_type != OP_NULL) {
+ UNOP *lch;
+ OP *nch, *cleft, *cright;
+ NewOp(0, lch, 1, UNOP);
+ nch = (OP*)lch;
+ OpTYPE_set(nch, OP_NULL);
+ nch->op_flags = OPf_KIDS;
+ cleft = cBINOPx(ch)->op_first;
+ cright = cBINOPx(ch)->op_last;
+ cBINOPx(ch)->op_first = NULL;
+ cBINOPx(ch)->op_last = NULL;
+ cBINOPx(ch)->op_private = 0;
+ cBINOPx(ch)->op_flags = 0;
+ cUNOPx(nch)->op_first = cright;
+ OpMORESIB_set(cright, ch);
+ OpMORESIB_set(ch, cleft);
+ OpLASTSIB_set(cleft, nch);
+ ch = nch;
+ }
+ OpMORESIB_set(right, op);
+ OpMORESIB_set(op, cUNOPx(ch)->op_first);
+ cUNOPx(ch)->op_first = right;
+ return ch;
+}
+
+OP *
+Perl_cmpchain_finish(pTHX_ OP *ch)
+{
+ dVAR;
+
+ PERL_ARGS_ASSERT_CMPCHAIN_FINISH;
+ if (ch->op_type != OP_NULL) {
+ OPCODE cmpoptype = ch->op_type;
+ ch = CHECKOP(cmpoptype, ch);
+ if(!ch->op_next && ch->op_type == cmpoptype)
+ ch = fold_constants(op_integerize(op_std_init(ch)));
+ return ch;
+ } else {
+ OP *condop = NULL;
+ OP *rightarg = cUNOPx(ch)->op_first;
+ cUNOPx(ch)->op_first = OpSIBLING(rightarg);
+ OpLASTSIB_set(rightarg, NULL);
+ while (1) {
+ OP *cmpop = cUNOPx(ch)->op_first;
+ OP *leftarg = OpSIBLING(cmpop);
+ OPCODE cmpoptype = cmpop->op_type;
+ OP *nextrightarg;
+ bool is_last;
+ is_last = !(cUNOPx(ch)->op_first = OpSIBLING(leftarg));
+ OpLASTSIB_set(cmpop, NULL);
+ OpLASTSIB_set(leftarg, NULL);
+ if (is_last) {
+ ch->op_flags = 0;
+ op_free(ch);
+ nextrightarg = NULL;
+ } else {
+ nextrightarg = newUNOP(OP_CMPCHAIN_DUP, 0, leftarg);
+ leftarg = newOP(OP_NULL, 0);
+ }
+ cBINOPx(cmpop)->op_first = leftarg;
+ cBINOPx(cmpop)->op_last = rightarg;
+ OpMORESIB_set(leftarg, rightarg);
+ OpLASTSIB_set(rightarg, cmpop);
+ cmpop->op_flags = OPf_KIDS;
+ cmpop->op_private = 2;
+ cmpop = CHECKOP(cmpoptype, cmpop);
+ if(!cmpop->op_next && cmpop->op_type == cmpoptype)
+ cmpop = op_integerize(op_std_init(cmpop));
+ condop = condop ? newLOGOP(OP_CMPCHAIN_AND, 0, cmpop, condop) :
+ cmpop;
+ if (!nextrightarg)
+ return condop;
+ rightarg = nextrightarg;
+ }
+ }
+}
+
/*
-=for apidoc Amx|OP *|op_scope|OP *o
+=for apidoc op_scope
Wraps up an op tree with some additional ops so that at runtime a dynamic
scope will be created. The original ops run in the new dynamic scope,
@@ -5156,7 +5635,8 @@ Perl_op_scope(pTHX_ OP *o)
dVAR;
if (o) {
if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) {
- o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o);
+ o = op_prepend_elem(OP_LINESEQ,
+ newOP(OP_ENTER, (o->op_flags & OPf_WANT)), o);
OpTYPE_set(o, OP_LEAVE);
}
else if (o->op_type == OP_LINESEQ) {
@@ -5192,7 +5672,7 @@ Perl_op_unscope(pTHX_ OP *o)
}
/*
-=for apidoc Am|int|block_start|int full
+=for apidoc block_start
Handles compile-time scope entry.
Arranges for hints to be restored on block
@@ -5223,7 +5703,7 @@ Perl_block_start(pTHX_ int full)
}
/*
-=for apidoc Am|OP *|block_end|I32 floor|OP *seq
+=for apidoc block_end
Handles compile-time scope exit. C<floor>
is the savestack index returned by
@@ -5322,7 +5802,7 @@ Perl_block_end(pTHX_ I32 floor, OP *seq)
/*
=head1 Compile-time scope hooks
-=for apidoc Aox||blockhook_register
+=for apidoc blockhook_register
Register a set of hooks to be called when the Perl lexical scope changes
at compile time. See L<perlguts/"Compile-time scope hooks">.
@@ -5453,18 +5933,18 @@ Perl_localize(pTHX_ OP *o, I32 lex)
bool sigil = FALSE;
/* some heuristics to detect a potential error */
- while (*s && (strchr(", \t\n", *s)))
+ while (*s && (memCHRs(", \t\n", *s)))
s++;
while (1) {
- if (*s && (strchr("@$%", *s) || (!lex && *s == '*'))
+ if (*s && (memCHRs("@$%", *s) || (!lex && *s == '*'))
&& *++s
&& (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) {
s++;
sigil = TRUE;
while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s)))
s++;
- while (*s && (strchr(", \t\n", *s)))
+ while (*s && (memCHRs(", \t\n", *s)))
s++;
}
else
@@ -5542,9 +6022,10 @@ S_op_integerize(pTHX_ OP *o)
}
/* This function exists solely to provide a scope to limit
- setjmp/longjmp() messing with auto variables.
+ setjmp/longjmp() messing with auto variables. It cannot be inlined because
+ it uses setjmp
*/
-PERL_STATIC_INLINE int
+STATIC int
S_fold_constants_eval(pTHX) {
int ret = 0;
dJMPENV;
@@ -5746,7 +6227,11 @@ S_fold_constants(pTHX_ OP *const o)
return o;
}
-static OP *
+/* convert a constant range in list context into an OP_RV2AV, OP_CONST pair;
+ * the constant value being an AV holding the flattened range.
+ */
+
+static void
S_gen_constant_list(pTHX_ OP *o)
{
dVAR;
@@ -5765,7 +6250,7 @@ S_gen_constant_list(pTHX_ OP *o)
list(o);
if (PL_parser && PL_parser->error_count)
- return o; /* Don't attempt to run with errors */
+ return; /* Don't attempt to run with errors */
curop = LINKLIST(o);
old_next = o->op_next;
@@ -5832,7 +6317,7 @@ S_gen_constant_list(pTHX_ OP *o)
delete_eval_scope();
}
if (ret)
- return o;
+ return;
OpTYPE_set(o, OP_RV2AV);
o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */
@@ -5852,7 +6337,8 @@ S_gen_constant_list(pTHX_ OP *o)
SvREADONLY_on(*svp);
}
LINKLIST(o);
- return list(o);
+ list(o);
+ return;
}
/*
@@ -5862,7 +6348,7 @@ S_gen_constant_list(pTHX_ OP *o)
/* List constructors */
/*
-=for apidoc Am|OP *|op_append_elem|I32 optype|OP *first|OP *last
+=for apidoc op_append_elem
Append an item to the list of ops contained directly within a list-type
op, returning the lengthened list. C<first> is the list-type op,
@@ -5895,7 +6381,7 @@ Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last)
}
/*
-=for apidoc Am|OP *|op_append_list|I32 optype|OP *first|OP *last
+=for apidoc op_append_list
Concatenate the lists of ops contained directly within two list-type ops,
returning the combined list. C<first> and C<last> are the list-type ops
@@ -5933,7 +6419,7 @@ Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last)
}
/*
-=for apidoc Am|OP *|op_prepend_elem|I32 optype|OP *first|OP *last
+=for apidoc op_prepend_elem
Prepend an item to the list of ops contained directly within a list-type
op, returning the lengthened list. C<first> is the op to prepend to the
@@ -5971,7 +6457,7 @@ Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last)
}
/*
-=for apidoc Am|OP *|op_convert_list|I32 type|I32 flags|OP *o
+=for apidoc op_convert_list
Converts C<o> into a list op if it is not one already, and then converts it
into the specified C<type>, calling its check function, allocating a target if
@@ -6031,7 +6517,7 @@ Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o)
/*
=head1 Optree construction
-=for apidoc Am|OP *|newNULLLIST
+=for apidoc newNULLLIST
Constructs, checks, and returns a new C<stub> op, which represents an
empty list expression.
@@ -6078,7 +6564,7 @@ S_force_list(pTHX_ OP *o, bool nullit)
}
/*
-=for apidoc Am|OP *|newLISTOP|I32 type|I32 flags|OP *first|OP *last
+=for apidoc newLISTOP
Constructs, checks, and returns an op of any list type. C<type> is
the opcode. C<flags> gives the eight bits of C<op_flags>, except that
@@ -6138,7 +6624,7 @@ Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
}
/*
-=for apidoc Am|OP *|newOP|I32 type|I32 flags
+=for apidoc newOP
Constructs, checks, and returns an op of any base type (any type that
has no extra fields). C<type> is the opcode. C<flags> gives the
@@ -6178,7 +6664,7 @@ Perl_newOP(pTHX_ I32 type, I32 flags)
}
/*
-=for apidoc Am|OP *|newUNOP|I32 type|I32 flags|OP *first
+=for apidoc newUNOP
Constructs, checks, and returns an op of any unary type. C<type> is
the opcode. C<flags> gives the eight bits of C<op_flags>, except that
@@ -6188,6 +6674,8 @@ is automatically set. C<first> supplies an optional op to be the direct
child of the unary op; it is consumed by this function and become part
of the constructed op tree.
+=for apidoc Amnh||OPf_KIDS
+
=cut
*/
@@ -6267,7 +6755,7 @@ Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP *first, UNOP_AUX_item *aux)
}
/*
-=for apidoc Am|OP *|newMETHOP|I32 type|I32 flags|OP *first
+=for apidoc newMETHOP
Constructs, checks, and returns an op of method type with a method name
evaluated at runtime. C<type> is the opcode. C<flags> gives the eight
@@ -6324,7 +6812,7 @@ Perl_newMETHOP (pTHX_ I32 type, I32 flags, OP* dynamic_meth) {
}
/*
-=for apidoc Am|OP *|newMETHOP_named|I32 type|I32 flags|SV *const_meth
+=for apidoc newMETHOP_named
Constructs, checks, and returns an op of method type with a constant
method name. C<type> is the opcode. C<flags> gives the eight bits of
@@ -6343,7 +6831,7 @@ Perl_newMETHOP_named (pTHX_ I32 type, I32 flags, SV* const_meth) {
}
/*
-=for apidoc Am|OP *|newBINOP|I32 type|I32 flags|OP *first|OP *last
+=for apidoc newBINOP
Constructs, checks, and returns an op of any binary type. C<type>
is the opcode. C<flags> gives the eight bits of C<op_flags>, except
@@ -6396,25 +6884,44 @@ Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last)
return fold_constants(op_integerize(op_std_init((OP *)binop)));
}
-/* Helper function for S_pmtrans(): comparison function to sort an array
- * of codepoint range pairs. Sorts by start point, or if equal, by end
- * point */
-
-static int uvcompare(const void *a, const void *b)
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- __attribute__pure__;
-static int uvcompare(const void *a, const void *b)
+void
+Perl_invmap_dump(pTHX_ SV* invlist, UV *map)
{
- if (*((const UV *)a) < (*(const UV *)b))
- return -1;
- if (*((const UV *)a) > (*(const UV *)b))
- return 1;
- if (*((const UV *)a+1) < (*(const UV *)b+1))
- return -1;
- if (*((const UV *)a+1) > (*(const UV *)b+1))
- return 1;
- return 0;
+ const char indent[] = " ";
+
+ UV len = _invlist_len(invlist);
+ UV * array = invlist_array(invlist);
+ UV i;
+
+ PERL_ARGS_ASSERT_INVMAP_DUMP;
+
+ for (i = 0; i < len; i++) {
+ UV start = array[i];
+ UV end = (i + 1 < len) ? array[i+1] - 1 : IV_MAX;
+
+ PerlIO_printf(Perl_debug_log, "%s[%" UVuf "] 0x%04" UVXf, indent, i, start);
+ if (end == IV_MAX) {
+ PerlIO_printf(Perl_debug_log, " .. INFTY");
+ }
+ else if (end != start) {
+ PerlIO_printf(Perl_debug_log, " .. 0x%04" UVXf, end);
+ }
+ else {
+ PerlIO_printf(Perl_debug_log, " ");
+ }
+
+ PerlIO_printf(Perl_debug_log, "\t");
+
+ if (map[i] == TR_UNLISTED) {
+ PerlIO_printf(Perl_debug_log, "TR_UNLISTED\n");
+ }
+ else if (map[i] == TR_SPECIAL_HANDLING) {
+ PerlIO_printf(Perl_debug_log, "TR_SPECIAL_HANDLING\n");
+ }
+ else {
+ PerlIO_printf(Perl_debug_log, "0x%04" UVXf "\n", map[i]);
+ }
+ }
}
/* Given an OP_TRANS / OP_TRANSR op o, plus OP_CONST ops expr and repl
@@ -6426,8 +6933,8 @@ static int uvcompare(const void *a, const void *b)
* OPpTRANS_SQUASH
* OPpTRANS_DELETE
* flags as appropriate; this function may add
- * OPpTRANS_FROM_UTF
- * OPpTRANS_TO_UTF
+ * OPpTRANS_USE_SVOP
+ * OPpTRANS_CAN_FORCE_UTF8
* OPpTRANS_IDENTICAL
* OPpTRANS_GROWS
* flags
@@ -6436,340 +6943,1101 @@ static int uvcompare(const void *a, const void *b)
static OP *
S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
{
+ /* This function compiles a tr///, from data gathered from toke.c, into a
+ * form suitable for use by do_trans() in doop.c at runtime.
+ *
+ * It first normalizes the data, while discarding extraneous inputs; then
+ * writes out the compiled data. The normalization allows for complete
+ * analysis, and avoids some false negatives and positives earlier versions
+ * of this code had.
+ *
+ * The normalization form is an inversion map (described below in detail).
+ * This is essentially the compiled form for tr///'s that require UTF-8,
+ * and its easy to use it to write the 257-byte table for tr///'s that
+ * don't need UTF-8. That table is identical to what's been in use for
+ * many perl versions, except that it doesn't handle some edge cases that
+ * it used to, involving code points above 255. The UTF-8 form now handles
+ * these. (This could be changed with extra coding should it shown to be
+ * desirable.)
+ *
+ * If the complement (/c) option is specified, the lhs string (tstr) is
+ * parsed into an inversion list. Complementing these is trivial. Then a
+ * complemented tstr is built from that, and used thenceforth. This hides
+ * the fact that it was complemented from almost all successive code.
+ *
+ * One of the important characteristics to know about the input is whether
+ * the transliteration may be done in place, or does a temporary need to be
+ * allocated, then copied. If the replacement for every character in every
+ * possible string takes up no more bytes than the character it
+ * replaces, then it can be edited in place. Otherwise the replacement
+ * could overwrite a byte we are about to read, depending on the strings
+ * being processed. The comments and variable names here refer to this as
+ * "growing". Some inputs won't grow, and might even shrink under /d, but
+ * some inputs could grow, so we have to assume any given one might grow.
+ * On very long inputs, the temporary could eat up a lot of memory, so we
+ * want to avoid it if possible. For non-UTF-8 inputs, everything is
+ * single-byte, so can be edited in place, unless there is something in the
+ * pattern that could force it into UTF-8. The inversion map makes it
+ * feasible to determine this. Previous versions of this code pretty much
+ * punted on determining if UTF-8 could be edited in place. Now, this code
+ * is rigorous in making that determination.
+ *
+ * Another characteristic we need to know is whether the lhs and rhs are
+ * identical. If so, and no other flags are present, the only effect of
+ * the tr/// is to count the characters present in the input that are
+ * mentioned in the lhs string. The implementation of that is easier and
+ * runs faster than the more general case. Normalizing here allows for
+ * accurate determination of this. Previously there were false negatives
+ * possible.
+ *
+ * Instead of 'transliterated', the comments here use 'unmapped' for the
+ * characters that are left unchanged by the operation; otherwise they are
+ * 'mapped'
+ *
+ * The lhs of the tr/// is here referred to as the t side.
+ * The rhs of the tr/// is here referred to as the r side.
+ */
+
SV * const tstr = ((SVOP*)expr)->op_sv;
SV * const rstr = ((SVOP*)repl)->op_sv;
STRLEN tlen;
STRLEN rlen;
- const U8 *t = (U8*)SvPV_const(tstr, tlen);
- const U8 *r = (U8*)SvPV_const(rstr, rlen);
- Size_t i, j;
- bool grows = FALSE;
- OPtrans_map *tbl;
- SSize_t struct_size; /* malloced size of table struct */
-
+ const U8 * t0 = (U8*)SvPV_const(tstr, tlen);
+ const U8 * r0 = (U8*)SvPV_const(rstr, rlen);
+ const U8 * t = t0;
+ const U8 * r = r0;
+ UV t_count = 0, r_count = 0; /* Number of characters in search and
+ replacement lists */
+
+ /* khw thinks some of the private flags for this op are quaintly named.
+ * OPpTRANS_GROWS for example is TRUE if the replacement for some lhs
+ * character when represented in UTF-8 is longer than the original
+ * character's UTF-8 representation */
const bool complement = cBOOL(o->op_private & OPpTRANS_COMPLEMENT);
const bool squash = cBOOL(o->op_private & OPpTRANS_SQUASH);
const bool del = cBOOL(o->op_private & OPpTRANS_DELETE);
- SV* swash;
+
+ /* Set to true if there is some character < 256 in the lhs that maps to
+ * above 255. If so, a non-UTF-8 match string can be forced into being in
+ * UTF-8 by a tr/// operation. */
+ bool can_force_utf8 = FALSE;
+
+ /* What is the maximum expansion factor in UTF-8 transliterations. If a
+ * 2-byte UTF-8 encoded character is to be replaced by a 3-byte one, its
+ * expansion factor is 1.5. This number is used at runtime to calculate
+ * how much space to allocate for non-inplace transliterations. Without
+ * this number, the worst case is 14, which is extremely unlikely to happen
+ * in real life, and could require significant memory overhead. */
+ NV max_expansion = 1.;
+
+ UV t_range_count, r_range_count, min_range_count;
+ UV* t_array;
+ SV* t_invlist;
+ UV* r_map;
+ UV r_cp, t_cp;
+ UV t_cp_end = (UV) -1;
+ UV r_cp_end;
+ Size_t len;
+ AV* invmap;
+ UV final_map = TR_UNLISTED; /* The final character in the replacement
+ list, updated as we go along. Initialize
+ to something illegal */
+
+ bool rstr_utf8 = cBOOL(SvUTF8(rstr));
+ bool tstr_utf8 = cBOOL(SvUTF8(tstr));
+
+ const U8* tend = t + tlen;
+ const U8* rend = r + rlen;
+
+ SV * inverted_tstr = NULL;
+
+ Size_t i;
+ unsigned int pass2;
+
+ /* This routine implements detection of a transliteration having a longer
+ * UTF-8 representation than its source, by partitioning all the possible
+ * code points of the platform into equivalence classes of the same UTF-8
+ * byte length in the first pass. As it constructs the mappings, it carves
+ * these up into smaller chunks, but doesn't merge any together. This
+ * makes it easy to find the instances it's looking for. A second pass is
+ * done after this has been determined which merges things together to
+ * shrink the table for runtime. The table below is used for both ASCII
+ * and EBCDIC platforms. On EBCDIC, the byte length is not monotonically
+ * increasing for code points below 256. To correct for that, the macro
+ * CP_ADJUST defined below converts those code points to ASCII in the first
+ * pass, and we use the ASCII partition values. That works because the
+ * growth factor will be unaffected, which is all that is calculated during
+ * the first pass. */
+ UV PL_partition_by_byte_length[] = {
+ 0,
+ 0x80, /* Below this is 1 byte representations */
+ (32 * (1UL << ( UTF_ACCUMULATION_SHIFT))), /* 2 bytes below this */
+ (16 * (1UL << (2 * UTF_ACCUMULATION_SHIFT))), /* 3 bytes below this */
+ ( 8 * (1UL << (3 * UTF_ACCUMULATION_SHIFT))), /* 4 bytes below this */
+ ( 4 * (1UL << (4 * UTF_ACCUMULATION_SHIFT))), /* 5 bytes below this */
+ ( 2 * (1UL << (5 * UTF_ACCUMULATION_SHIFT))) /* 6 bytes below this */
+
+# ifdef UV_IS_QUAD
+ ,
+ ( ((UV) 1U << (6 * UTF_ACCUMULATION_SHIFT))) /* 7 bytes below this */
+# endif
+
+ };
PERL_ARGS_ASSERT_PMTRANS;
PL_hints |= HINT_BLOCK_SCOPE;
- if (SvUTF8(tstr))
- o->op_private |= OPpTRANS_FROM_UTF;
+ /* If /c, the search list is sorted and complemented. This is now done by
+ * creating an inversion list from it, and then trivially inverting that.
+ * The previous implementation used qsort, but creating the list
+ * automatically keeps it sorted as we go along */
+ if (complement) {
+ UV start, end;
+ SV * inverted_tlist = _new_invlist(tlen);
+ Size_t temp_len;
- if (SvUTF8(rstr))
- o->op_private |= OPpTRANS_TO_UTF;
+ DEBUG_y(PerlIO_printf(Perl_debug_log,
+ "%s: %d: tstr before inversion=\n%s\n",
+ __FILE__, __LINE__, _byte_dump_string(t, tend - t, 0)));
- if (o->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF)) {
+ while (t < tend) {
- /* for utf8 translations, op_sv will be set to point to a swash
- * containing codepoint ranges. This is done by first assembling
- * a textual representation of the ranges in listsv then compiling
- * it using swash_init(). For more details of the textual format,
- * see L<perlunicode.pod/"User-Defined Character Properties"> .
+ /* Non-utf8 strings don't have ranges, so each character is listed
+ * out */
+ if (! tstr_utf8) {
+ inverted_tlist = add_cp_to_invlist(inverted_tlist, *t);
+ t++;
+ }
+ else { /* But UTF-8 strings have been parsed in toke.c to have
+ * ranges if appropriate. */
+ UV t_cp;
+ Size_t t_char_len;
+
+ /* Get the first character */
+ t_cp = valid_utf8_to_uvchr(t, &t_char_len);
+ t += t_char_len;
+
+ /* If the next byte indicates that this wasn't the first
+ * element of a range, the range is just this one */
+ if (t >= tend || *t != RANGE_INDICATOR) {
+ inverted_tlist = add_cp_to_invlist(inverted_tlist, t_cp);
+ }
+ else { /* Otherwise, ignore the indicator byte, and get the
+ final element, and add the whole range */
+ t++;
+ t_cp_end = valid_utf8_to_uvchr(t, &t_char_len);
+ t += t_char_len;
+
+ inverted_tlist = _add_range_to_invlist(inverted_tlist,
+ t_cp, t_cp_end);
+ }
+ }
+ } /* End of parse through tstr */
+
+ /* The inversion list is done; now invert it */
+ _invlist_invert(inverted_tlist);
+
+ /* Now go through the inverted list and create a new tstr for the rest
+ * of the routine to use. Since the UTF-8 version can have ranges, and
+ * can be much more compact than the non-UTF-8 version, we create the
+ * string in UTF-8 even if not necessary. (This is just an intermediate
+ * value that gets thrown away anyway.) */
+ invlist_iterinit(inverted_tlist);
+ inverted_tstr = newSVpvs("");
+ while (invlist_iternext(inverted_tlist, &start, &end)) {
+ U8 temp[UTF8_MAXBYTES];
+ U8 * temp_end_pos;
+
+ /* IV_MAX keeps things from going out of bounds */
+ start = MIN(IV_MAX, start);
+ end = MIN(IV_MAX, end);
+
+ temp_end_pos = uvchr_to_utf8(temp, start);
+ sv_catpvn(inverted_tstr, (char *) temp, temp_end_pos - temp);
+
+ if (start != end) {
+ Perl_sv_catpvf(aTHX_ inverted_tstr, "%c", RANGE_INDICATOR);
+ temp_end_pos = uvchr_to_utf8(temp, end);
+ sv_catpvn(inverted_tstr, (char *) temp, temp_end_pos - temp);
+ }
+ }
+
+ /* Set up so the remainder of the routine uses this complement, instead
+ * of the actual input */
+ t0 = t = (U8*)SvPV_const(inverted_tstr, temp_len);
+ tend = t0 + temp_len;
+ tstr_utf8 = TRUE;
+
+ SvREFCNT_dec_NN(inverted_tlist);
+ }
+
+ /* For non-/d, an empty rhs means to use the lhs */
+ if (rlen == 0 && ! del) {
+ r0 = t0;
+ rend = tend;
+ rstr_utf8 = tstr_utf8;
+ }
+
+ t_invlist = _new_invlist(1);
+
+ /* Initialize to a single range */
+ t_invlist = _add_range_to_invlist(t_invlist, 0, UV_MAX);
+
+ /* For the first pass, the lhs is partitioned such that the
+ * number of UTF-8 bytes required to represent a code point in each
+ * partition is the same as the number for any other code point in
+ * that partion. We copy the pre-compiled partion. */
+ len = C_ARRAY_LENGTH(PL_partition_by_byte_length);
+ invlist_extend(t_invlist, len);
+ t_array = invlist_array(t_invlist);
+ Copy(PL_partition_by_byte_length, t_array, len, UV);
+ invlist_set_len(t_invlist, len, *(get_invlist_offset_addr(t_invlist)));
+ Newx(r_map, len + 1, UV);
+
+ /* Parse the (potentially adjusted) input, creating the inversion map.
+ * This is done in two passes. The first pass is to determine if the
+ * transliteration can be done in place. The inversion map it creates
+ * could be used, but generally would be larger and slower to run than the
+ * output of the second pass, which starts with a more compact table and
+ * allows more ranges to be merged */
+ for (pass2 = 0; pass2 < 2; pass2++) {
+ if (pass2) {
+ /* Initialize to a single range */
+ t_invlist = _add_range_to_invlist(t_invlist, 0, UV_MAX);
+
+ /* In the second pass, we just have the single range */
+ len = 1;
+ t_array = invlist_array(t_invlist);
+ }
+
+/* As noted earlier, we convert EBCDIC code points to Unicode in the first pass
+ * so as to get the well-behaved length 1 vs length 2 boundary. Only code
+ * points below 256 differ between the two character sets in this regard. For
+ * these, we also can't have any ranges, as they have to be individually
+ * converted. */
+#ifdef EBCDIC
+# define CP_ADJUST(x) ((pass2) ? (x) : NATIVE_TO_UNI(x))
+# define FORCE_RANGE_LEN_1(x) ((pass2) ? 0 : ((x) < 256))
+# define CP_SKIP(x) ((pass2) ? UVCHR_SKIP(x) : OFFUNISKIP(x))
+#else
+# define CP_ADJUST(x) (x)
+# define FORCE_RANGE_LEN_1(x) 0
+# define CP_SKIP(x) UVCHR_SKIP(x)
+#endif
+
+ /* And the mapping of each of the ranges is initialized. Initially,
+ * everything is TR_UNLISTED. */
+ for (i = 0; i < len; i++) {
+ r_map[i] = TR_UNLISTED;
+ }
+
+ t = t0;
+ t_count = 0;
+ r = r0;
+ r_count = 0;
+ t_range_count = r_range_count = 0;
+
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "%s: %d:\ntstr=%s\n",
+ __FILE__, __LINE__, _byte_dump_string(t, tend - t, 0)));
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "rstr=%s\n",
+ _byte_dump_string(r, rend - r, 0)));
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "/c=%d; /s=%d; /d=%d\n",
+ complement, squash, del));
+ DEBUG_y(invmap_dump(t_invlist, r_map));
+
+ /* Now go through the search list constructing an inversion map. The
+ * input is not necessarily in any particular order. Making it an
+ * inversion map orders it, potentially simplifying, and makes it easy
+ * to deal with at run time. This is the only place in core that
+ * generates an inversion map; if others were introduced, it might be
+ * better to create general purpose routines to handle them.
+ * (Inversion maps are created in perl in other places.)
+ *
+ * An inversion map consists of two parallel arrays. One is
+ * essentially an inversion list: an ordered list of code points such
+ * that each element gives the first code point of a range of
+ * consecutive code points that map to the element in the other array
+ * that has the same index as this one (in other words, the
+ * corresponding element). Thus the range extends up to (but not
+ * including) the code point given by the next higher element. In a
+ * true inversion map, the corresponding element in the other array
+ * gives the mapping of the first code point in the range, with the
+ * understanding that the next higher code point in the inversion
+ * list's range will map to the next higher code point in the map.
+ *
+ * So if at element [i], let's say we have:
+ *
+ * t_invlist r_map
+ * [i] A a
+ *
+ * This means that A => a, B => b, C => c.... Let's say that the
+ * situation is such that:
+ *
+ * [i+1] L -1
+ *
+ * This means the sequence that started at [i] stops at K => k. This
+ * illustrates that you need to look at the next element to find where
+ * a sequence stops. Except, the highest element in the inversion list
+ * begins a range that is understood to extend to the platform's
+ * infinity.
+ *
+ * This routine modifies traditional inversion maps to reserve two
+ * mappings:
+ *
+ * TR_UNLISTED (or -1) indicates that no code point in the range
+ * is listed in the tr/// searchlist. At runtime, these are
+ * always passed through unchanged. In the inversion map, all
+ * points in the range are mapped to -1, instead of increasing,
+ * like the 'L' in the example above.
+ *
+ * We start the parse with every code point mapped to this, and as
+ * we parse and find ones that are listed in the search list, we
+ * carve out ranges as we go along that override that.
+ *
+ * TR_SPECIAL_HANDLING (or -2) indicates that every code point in the
+ * range needs special handling. Again, all code points in the
+ * range are mapped to -2, instead of increasing.
+ *
+ * Under /d this value means the code point should be deleted from
+ * the transliteration when encountered.
+ *
+ * Otherwise, it marks that every code point in the range is to
+ * map to the final character in the replacement list. This
+ * happens only when the replacement list is shorter than the
+ * search one, so there are things in the search list that have no
+ * correspondence in the replacement list. For example, in
+ * tr/a-z/A/, 'A' is the final value, and the inversion map
+ * generated for this would be like this:
+ * \0 => -1
+ * a => A
+ * b-z => -2
+ * z+1 => -1
+ * 'A' appears once, then the remainder of the range maps to -2.
+ * The use of -2 isn't strictly necessary, as an inversion map is
+ * capable of representing this situation, but not nearly so
+ * compactly, and this is actually quite commonly encountered.
+ * Indeed, the original design of this code used a full inversion
+ * map for this. But things like
+ * tr/\0-\x{FFFF}/A/
+ * generated huge data structures, slowly, and the execution was
+ * also slow. So the current scheme was implemented.
+ *
+ * So, if the next element in our example is:
+ *
+ * [i+2] Q q
+ *
+ * Then all of L, M, N, O, and P map to TR_UNLISTED. If the next
+ * elements are
+ *
+ * [i+3] R z
+ * [i+4] S TR_UNLISTED
+ *
+ * Then Q => q; R => z; and S => TR_UNLISTED. If [i+4] (the 'S') is
+ * the final element in the arrays, every code point from S to infinity
+ * maps to TR_UNLISTED.
+ *
*/
+ /* Finish up range started in what otherwise would
+ * have been the final iteration */
+ while (t < tend || t_range_count > 0) {
+ bool adjacent_to_range_above = FALSE;
+ bool adjacent_to_range_below = FALSE;
+
+ bool merge_with_range_above = FALSE;
+ bool merge_with_range_below = FALSE;
+
+ UV span, invmap_range_length_remaining;
+ SSize_t j;
+ Size_t i;
+
+ /* If we are in the middle of processing a range in the 'target'
+ * side, the previous iteration has set us up. Otherwise, look at
+ * the next character in the search list */
+ if (t_range_count <= 0) {
+ if (! tstr_utf8) {
+
+ /* Here, not in the middle of a range, and not UTF-8. The
+ * next code point is the single byte where we're at */
+ t_cp = CP_ADJUST(*t);
+ t_range_count = 1;
+ t++;
+ }
+ else {
+ Size_t t_char_len;
+
+ /* Here, not in the middle of a range, and is UTF-8. The
+ * next code point is the next UTF-8 char in the input. We
+ * know the input is valid, because the toker constructed
+ * it */
+ t_cp = CP_ADJUST(valid_utf8_to_uvchr(t, &t_char_len));
+ t += t_char_len;
+
+ /* UTF-8 strings (only) have been parsed in toke.c to have
+ * ranges. See if the next byte indicates that this was
+ * the first element of a range. If so, get the final
+ * element and calculate the range size. If not, the range
+ * size is 1 */
+ if ( t < tend && *t == RANGE_INDICATOR
+ && ! FORCE_RANGE_LEN_1(t_cp))
+ {
+ t++;
+ t_range_count = valid_utf8_to_uvchr(t, &t_char_len)
+ - t_cp + 1;
+ t += t_char_len;
+ }
+ else {
+ t_range_count = 1;
+ }
+ }
- SV* const listsv = newSVpvs("# comment\n");
- SV* transv = NULL;
- const U8* tend = t + tlen;
- const U8* rend = r + rlen;
- STRLEN ulen;
- UV tfirst = 1;
- UV tlast = 0;
- IV tdiff;
- STRLEN tcount = 0;
- UV rfirst = 1;
- UV rlast = 0;
- IV rdiff;
- STRLEN rcount = 0;
- IV diff;
- I32 none = 0;
- U32 max = 0;
- I32 bits;
- I32 havefinal = 0;
- U32 final = 0;
- const I32 from_utf = o->op_private & OPpTRANS_FROM_UTF;
- const I32 to_utf = o->op_private & OPpTRANS_TO_UTF;
- U8* tsave = NULL;
- U8* rsave = NULL;
- const U32 flags = UTF8_ALLOW_DEFAULT;
-
- if (!from_utf) {
- STRLEN len = tlen;
- t = tsave = bytes_to_utf8(t, &len);
- tend = t + len;
- }
- if (!to_utf && rlen) {
- STRLEN len = rlen;
- r = rsave = bytes_to_utf8(r, &len);
- rend = r + len;
- }
+ /* Count the total number of listed code points * */
+ t_count += t_range_count;
+ }
-/* There is a snag with this code on EBCDIC: scan_const() in toke.c has
- * encoded chars in native encoding which makes ranges in the EBCDIC 0..255
- * odd. */
+ /* Similarly, get the next character in the replacement list */
+ if (r_range_count <= 0) {
+ if (r >= rend) {
- if (complement) {
- /* utf8 and /c:
- * replace t/tlen/tend with a version that has the ranges
- * complemented
- */
- U8 tmpbuf[UTF8_MAXBYTES+1];
- UV *cp;
- UV nextmin = 0;
- Newx(cp, 2*tlen, UV);
- i = 0;
- transv = newSVpvs("");
-
- /* convert search string into array of (start,end) range
- * codepoint pairs stored in cp[]. Most "ranges" will start
- * and end at the same char */
- while (t < tend) {
- cp[2*i] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
- t += ulen;
- /* the toker converts X-Y into (X, ILLEGAL_UTF8_BYTE, Y) */
- if (t < tend && *t == ILLEGAL_UTF8_BYTE) {
- t++;
- cp[2*i+1] = utf8n_to_uvchr(t, tend-t, &ulen, flags);
- t += ulen;
- }
- else {
- cp[2*i+1] = cp[2*i];
- }
- i++;
- }
+ /* But if we've exhausted the rhs, there is nothing to map
+ * to, except the special handling one, and we make the
+ * range the same size as the lhs one. */
+ r_cp = TR_SPECIAL_HANDLING;
+ r_range_count = t_range_count;
- /* sort the ranges */
- qsort(cp, i, 2*sizeof(UV), uvcompare);
-
- /* Create a utf8 string containing the complement of the
- * codepoint ranges. For example if cp[] contains [A,B], [C,D],
- * then transv will contain the equivalent of:
- * join '', map chr, 0, ILLEGAL_UTF8_BYTE, A - 1,
- * B + 1, ILLEGAL_UTF8_BYTE, C - 1,
- * D + 1, ILLEGAL_UTF8_BYTE, 0x7fffffff;
- * A range of a single char skips the ILLEGAL_UTF8_BYTE and
- * end cp.
- */
- for (j = 0; j < i; j++) {
- UV val = cp[2*j];
- diff = val - nextmin;
- if (diff > 0) {
- t = uvchr_to_utf8(tmpbuf,nextmin);
- sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
- if (diff > 1) {
- U8 range_mark = ILLEGAL_UTF8_BYTE;
- t = uvchr_to_utf8(tmpbuf, val - 1);
- sv_catpvn(transv, (char *)&range_mark, 1);
- sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
- }
- }
- val = cp[2*j+1];
- if (val >= nextmin)
- nextmin = val + 1;
- }
+ if (! del) {
+ DEBUG_yv(PerlIO_printf(Perl_debug_log,
+ "final_map =%" UVXf "\n", final_map));
+ }
+ }
+ else {
+ if (! rstr_utf8) {
+ r_cp = CP_ADJUST(*r);
+ r_range_count = 1;
+ r++;
+ }
+ else {
+ Size_t r_char_len;
- t = uvchr_to_utf8(tmpbuf,nextmin);
- sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
- {
- U8 range_mark = ILLEGAL_UTF8_BYTE;
- sv_catpvn(transv, (char *)&range_mark, 1);
- }
- t = uvchr_to_utf8(tmpbuf, 0x7fffffff);
- sv_catpvn(transv, (char*)tmpbuf, t - tmpbuf);
- t = (const U8*)SvPVX_const(transv);
- tlen = SvCUR(transv);
- tend = t + tlen;
- Safefree(cp);
- }
- else if (!rlen && !del) {
- r = t; rlen = tlen; rend = tend;
- }
+ r_cp = CP_ADJUST(valid_utf8_to_uvchr(r, &r_char_len));
+ r += r_char_len;
+ if ( r < rend && *r == RANGE_INDICATOR
+ && ! FORCE_RANGE_LEN_1(r_cp))
+ {
+ r++;
+ r_range_count = valid_utf8_to_uvchr(r,
+ &r_char_len) - r_cp + 1;
+ r += r_char_len;
+ }
+ else {
+ r_range_count = 1;
+ }
+ }
- if (!squash) {
- if ((!rlen && !del) || t == r ||
- (tlen == rlen && memEQ((char *)t, (char *)r, tlen)))
- {
- o->op_private |= OPpTRANS_IDENTICAL;
- }
- }
+ if (r_cp == TR_SPECIAL_HANDLING) {
+ r_range_count = t_range_count;
+ }
- /* extract char ranges from t and r and append them to listsv */
-
- while (t < tend || tfirst <= tlast) {
- /* see if we need more "t" chars */
- if (tfirst > tlast) {
- tfirst = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
- t += ulen;
- if (t < tend && *t == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
- t++;
- tlast = (I32)utf8n_to_uvchr(t, tend - t, &ulen, flags);
- t += ulen;
- }
- else
- tlast = tfirst;
- }
+ /* This is the final character so far */
+ final_map = r_cp + r_range_count - 1;
- /* now see if we need more "r" chars */
- if (rfirst > rlast) {
- if (r < rend) {
- rfirst = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
- r += ulen;
- if (r < rend && *r == ILLEGAL_UTF8_BYTE) { /* illegal utf8 val indicates range */
- r++;
- rlast = (I32)utf8n_to_uvchr(r, rend - r, &ulen, flags);
- r += ulen;
- }
- else
- rlast = rfirst;
- }
- else {
- if (!havefinal++)
- final = rlast;
- rfirst = rlast = 0xffffffff;
- }
- }
+ r_count += r_range_count;
+ }
+ }
+
+ /* Here, we have the next things ready in both sides. They are
+ * potentially ranges. We try to process as big a chunk as
+ * possible at once, but the lhs and rhs must be synchronized, so
+ * things like tr/A-Z/a-ij-z/ will need to be processed in 2 chunks
+ * */
+ min_range_count = MIN(t_range_count, r_range_count);
+
+ /* Search the inversion list for the entry that contains the input
+ * code point <cp>. The inversion map was initialized to cover the
+ * entire range of possible inputs, so this should not fail. So
+ * the return value is the index into the list's array of the range
+ * that contains <cp>, that is, 'i' such that array[i] <= cp <
+ * array[i+1] */
+ j = _invlist_search(t_invlist, t_cp);
+ assert(j >= 0);
+ i = j;
+
+ /* Here, the data structure might look like:
+ *
+ * index t r Meaning
+ * [i-1] J j # J-L => j-l
+ * [i] M -1 # M => default; as do N, O, P, Q
+ * [i+1] R x # R => x, S => x+1, T => x+2
+ * [i+2] U y # U => y, V => y+1, ...
+ * ...
+ * [-1] Z -1 # Z => default; as do Z+1, ... infinity
+ *
+ * where 'x' and 'y' above are not to be taken literally.
+ *
+ * The maximum chunk we can handle in this loop iteration, is the
+ * smallest of the three components: the lhs 't_', the rhs 'r_',
+ * and the remainder of the range in element [i]. (In pass 1, that
+ * range will have everything in it be of the same class; we can't
+ * cross into another class.) 'min_range_count' already contains
+ * the smallest of the first two values. The final one is
+ * irrelevant if the map is to the special indicator */
+
+ invmap_range_length_remaining = (i + 1 < len)
+ ? t_array[i+1] - t_cp
+ : IV_MAX - t_cp;
+ span = MAX(1, MIN(min_range_count, invmap_range_length_remaining));
+
+ /* The end point of this chunk is where we are, plus the span, but
+ * never larger than the platform's infinity */
+ t_cp_end = MIN(IV_MAX, t_cp + span - 1);
+
+ if (r_cp == TR_SPECIAL_HANDLING) {
+
+ /* If unmatched lhs code points map to the final map, use that
+ * value. This being set to TR_SPECIAL_HANDLING indicates that
+ * we don't have a final map: unmatched lhs code points are
+ * simply deleted */
+ r_cp_end = (del) ? TR_SPECIAL_HANDLING : final_map;
+ }
+ else {
+ r_cp_end = MIN(IV_MAX, r_cp + span - 1);
+
+ /* If something on the lhs is below 256, and something on the
+ * rhs is above, there is a potential mapping here across that
+ * boundary. Indeed the only way there isn't is if both sides
+ * start at the same point. That means they both cross at the
+ * same time. But otherwise one crosses before the other */
+ if (t_cp < 256 && r_cp_end > 255 && r_cp != t_cp) {
+ can_force_utf8 = TRUE;
+ }
+ }
- /* now see which range will peter out first, if either. */
- tdiff = tlast - tfirst;
- rdiff = rlast - rfirst;
- tcount += tdiff + 1;
- rcount += rdiff + 1;
+ /* If a character appears in the search list more than once, the
+ * 2nd and succeeding occurrences are ignored, so only do this
+ * range if haven't already processed this character. (The range
+ * has been set up so that all members in it will be of the same
+ * ilk) */
+ if (r_map[i] == TR_UNLISTED) {
+ DEBUG_yv(PerlIO_printf(Perl_debug_log,
+ "Processing %" UVxf "-%" UVxf " => %" UVxf "-%" UVxf "\n",
+ t_cp, t_cp_end, r_cp, r_cp_end));
+
+ /* This is the first definition for this chunk, hence is valid
+ * and needs to be processed. Here and in the comments below,
+ * we use the above sample data. The t_cp chunk must be any
+ * contiguous subset of M, N, O, P, and/or Q.
+ *
+ * In the first pass, calculate if there is any possible input
+ * string that has a character whose transliteration will be
+ * longer than it. If none, the transliteration may be done
+ * in-place, as it can't write over a so-far unread byte.
+ * Otherwise, a copy must first be made. This could be
+ * expensive for long inputs.
+ *
+ * In the first pass, the t_invlist has been partitioned so
+ * that all elements in any single range have the same number
+ * of bytes in their UTF-8 representations. And the r space is
+ * either a single byte, or a range of strictly monotonically
+ * increasing code points. So the final element in the range
+ * will be represented by no fewer bytes than the initial one.
+ * That means that if the final code point in the t range has
+ * at least as many bytes as the final code point in the r,
+ * then all code points in the t range have at least as many
+ * bytes as their corresponding r range element. But if that's
+ * not true, the transliteration of at least the final code
+ * point grows in length. As an example, suppose we had
+ * tr/\x{fff0}-\x{fff1}/\x{ffff}-\x{10000}/
+ * The UTF-8 for all but 10000 occupies 3 bytes on ASCII
+ * platforms. We have deliberately set up the data structure
+ * so that any range in the lhs gets split into chunks for
+ * processing, such that every code point in a chunk has the
+ * same number of UTF-8 bytes. We only have to check the final
+ * code point in the rhs against any code point in the lhs. */
+ if ( ! pass2
+ && r_cp_end != TR_SPECIAL_HANDLING
+ && CP_SKIP(t_cp_end) < CP_SKIP(r_cp_end))
+ {
+ /* Here, we will need to make a copy of the input string
+ * before doing the transliteration. The worst possible
+ * case is an expansion ratio of 14:1. This is rare, and
+ * we'd rather allocate only the necessary amount of extra
+ * memory for that copy. We can calculate the worst case
+ * for this particular transliteration is by keeping track
+ * of the expansion factor for each range.
+ *
+ * Consider tr/\xCB/\X{E000}/. The maximum expansion
+ * factor is 1 byte going to 3 if the target string is not
+ * UTF-8, but 2 bytes going to 3 if it is in UTF-8. We
+ * could pass two different values so doop could choose
+ * based on the UTF-8ness of the target. But khw thinks
+ * (perhaps wrongly) that is overkill. It is used only to
+ * make sure we malloc enough space.
+ *
+ * If no target string can force the result to be UTF-8,
+ * then we don't have to worry about the case of the target
+ * string not being UTF-8 */
+ NV t_size = (can_force_utf8 && t_cp < 256)
+ ? 1
+ : CP_SKIP(t_cp_end);
+ NV ratio = CP_SKIP(r_cp_end) / t_size;
+
+ o->op_private |= OPpTRANS_GROWS;
+
+ /* Now that we know it grows, we can keep track of the
+ * largest ratio */
+ if (ratio > max_expansion) {
+ max_expansion = ratio;
+ DEBUG_y(PerlIO_printf(Perl_debug_log,
+ "New expansion factor: %" NVgf "\n",
+ max_expansion));
+ }
+ }
- if (tdiff <= rdiff)
- diff = tdiff;
- else
- diff = rdiff;
+ /* The very first range is marked as adjacent to the
+ * non-existent range below it, as it causes things to "just
+ * work" (TradeMark)
+ *
+ * If the lowest code point in this chunk is M, it adjoins the
+ * J-L range */
+ if (t_cp == t_array[i]) {
+ adjacent_to_range_below = TRUE;
+
+ /* And if the map has the same offset from the beginning of
+ * the range as does this new code point (or both are for
+ * TR_SPECIAL_HANDLING), this chunk can be completely
+ * merged with the range below. EXCEPT, in the first pass,
+ * we don't merge ranges whose UTF-8 byte representations
+ * have different lengths, so that we can more easily
+ * detect if a replacement is longer than the source, that
+ * is if it 'grows'. But in the 2nd pass, there's no
+ * reason to not merge */
+ if ( (i > 0 && ( pass2
+ || CP_SKIP(t_array[i-1])
+ == CP_SKIP(t_cp)))
+ && ( ( r_cp == TR_SPECIAL_HANDLING
+ && r_map[i-1] == TR_SPECIAL_HANDLING)
+ || ( r_cp != TR_SPECIAL_HANDLING
+ && r_cp - r_map[i-1] == t_cp - t_array[i-1])))
+ {
+ merge_with_range_below = TRUE;
+ }
+ }
- if (rfirst == 0xffffffff) {
- diff = tdiff; /* oops, pretend rdiff is infinite */
- if (diff > 0)
- Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\tXXXX\n",
- (long)tfirst, (long)tlast);
- else
- Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\tXXXX\n", (long)tfirst);
- }
- else {
- if (diff > 0)
- Perl_sv_catpvf(aTHX_ listsv, "%04lx\t%04lx\t%04lx\n",
- (long)tfirst, (long)(tfirst + diff),
- (long)rfirst);
- else
- Perl_sv_catpvf(aTHX_ listsv, "%04lx\t\t%04lx\n",
- (long)tfirst, (long)rfirst);
-
- if (rfirst + diff > max)
- max = rfirst + diff;
- if (!grows)
- grows = (tfirst < rfirst &&
- UVCHR_SKIP(tfirst) < UVCHR_SKIP(rfirst + diff));
- rfirst += diff + 1;
- }
- tfirst += diff + 1;
- }
+ /* Similarly, if the highest code point in this chunk is 'Q',
+ * it adjoins the range above, and if the map is suitable, can
+ * be merged with it */
+ if ( t_cp_end >= IV_MAX - 1
+ || ( i + 1 < len
+ && t_cp_end + 1 == t_array[i+1]))
+ {
+ adjacent_to_range_above = TRUE;
+ if (i + 1 < len)
+ if ( ( pass2
+ || CP_SKIP(t_cp) == CP_SKIP(t_array[i+1]))
+ && ( ( r_cp == TR_SPECIAL_HANDLING
+ && r_map[i+1] == (UV) TR_SPECIAL_HANDLING)
+ || ( r_cp != TR_SPECIAL_HANDLING
+ && r_cp_end == r_map[i+1] - 1)))
+ {
+ merge_with_range_above = TRUE;
+ }
+ }
+
+ if (merge_with_range_below && merge_with_range_above) {
+
+ /* Here the new chunk looks like M => m, ... Q => q; and
+ * the range above is like R => r, .... Thus, the [i-1]
+ * and [i+1] ranges should be seamlessly melded so the
+ * result looks like
+ *
+ * [i-1] J j # J-T => j-t
+ * [i] U y # U => y, V => y+1, ...
+ * ...
+ * [-1] Z -1 # Z => default; as do Z+1, ... infinity
+ */
+ Move(t_array + i + 2, t_array + i, len - i - 2, UV);
+ Move(r_map + i + 2, r_map + i, len - i - 2, UV);
+ len -= 2;
+ invlist_set_len(t_invlist,
+ len,
+ *(get_invlist_offset_addr(t_invlist)));
+ }
+ else if (merge_with_range_below) {
+
+ /* Here the new chunk looks like M => m, .... But either
+ * (or both) it doesn't extend all the way up through Q; or
+ * the range above doesn't start with R => r. */
+ if (! adjacent_to_range_above) {
+
+ /* In the first case, let's say the new chunk extends
+ * through O. We then want:
+ *
+ * [i-1] J j # J-O => j-o
+ * [i] P -1 # P => -1, Q => -1
+ * [i+1] R x # R => x, S => x+1, T => x+2
+ * [i+2] U y # U => y, V => y+1, ...
+ * ...
+ * [-1] Z -1 # Z => default; as do Z+1, ...
+ * infinity
+ */
+ t_array[i] = t_cp_end + 1;
+ r_map[i] = TR_UNLISTED;
+ }
+ else { /* Adjoins the range above, but can't merge with it
+ (because 'x' is not the next map after q) */
+ /*
+ * [i-1] J j # J-Q => j-q
+ * [i] R x # R => x, S => x+1, T => x+2
+ * [i+1] U y # U => y, V => y+1, ...
+ * ...
+ * [-1] Z -1 # Z => default; as do Z+1, ...
+ * infinity
+ */
+
+ Move(t_array + i + 1, t_array + i, len - i - 1, UV);
+ Move(r_map + i + 1, r_map + i, len - i - 1, UV);
+ len--;
+ invlist_set_len(t_invlist, len,
+ *(get_invlist_offset_addr(t_invlist)));
+ }
+ }
+ else if (merge_with_range_above) {
+
+ /* Here the new chunk ends with Q => q, and the range above
+ * must start with R => r, so the two can be merged. But
+ * either (or both) the new chunk doesn't extend all the
+ * way down to M; or the mapping of the final code point
+ * range below isn't m */
+ if (! adjacent_to_range_below) {
+
+ /* In the first case, let's assume the new chunk starts
+ * with P => p. Then, because it's merge-able with the
+ * range above, that range must be R => r. We want:
+ *
+ * [i-1] J j # J-L => j-l
+ * [i] M -1 # M => -1, N => -1
+ * [i+1] P p # P-T => p-t
+ * [i+2] U y # U => y, V => y+1, ...
+ * ...
+ * [-1] Z -1 # Z => default; as do Z+1, ...
+ * infinity
+ */
+ t_array[i+1] = t_cp;
+ r_map[i+1] = r_cp;
+ }
+ else { /* Adjoins the range below, but can't merge with it
+ */
+ /*
+ * [i-1] J j # J-L => j-l
+ * [i] M x # M-T => x-5 .. x+2
+ * [i+1] U y # U => y, V => y+1, ...
+ * ...
+ * [-1] Z -1 # Z => default; as do Z+1, ...
+ * infinity
+ */
+ Move(t_array + i + 1, t_array + i, len - i - 1, UV);
+ Move(r_map + i + 1, r_map + i, len - i - 1, UV);
+ len--;
+ t_array[i] = t_cp;
+ r_map[i] = r_cp;
+ invlist_set_len(t_invlist, len,
+ *(get_invlist_offset_addr(t_invlist)));
+ }
+ }
+ else if (adjacent_to_range_below && adjacent_to_range_above) {
+ /* The new chunk completely fills the gap between the
+ * ranges on either side, but can't merge with either of
+ * them.
+ *
+ * [i-1] J j # J-L => j-l
+ * [i] M z # M => z, N => z+1 ... Q => z+4
+ * [i+1] R x # R => x, S => x+1, T => x+2
+ * [i+2] U y # U => y, V => y+1, ...
+ * ...
+ * [-1] Z -1 # Z => default; as do Z+1, ... infinity
+ */
+ r_map[i] = r_cp;
+ }
+ else if (adjacent_to_range_below) {
+ /* The new chunk adjoins the range below, but not the range
+ * above, and can't merge. Let's assume the chunk ends at
+ * O.
+ *
+ * [i-1] J j # J-L => j-l
+ * [i] M z # M => z, N => z+1, O => z+2
+ * [i+1] P -1 # P => -1, Q => -1
+ * [i+2] R x # R => x, S => x+1, T => x+2
+ * [i+3] U y # U => y, V => y+1, ...
+ * ...
+ * [-w] Z -1 # Z => default; as do Z+1, ... infinity
+ */
+ invlist_extend(t_invlist, len + 1);
+ t_array = invlist_array(t_invlist);
+ Renew(r_map, len + 1, UV);
+
+ Move(t_array + i + 1, t_array + i + 2, len - i - 1, UV);
+ Move(r_map + i + 1, r_map + i + 2, len - i - 1, UV);
+ r_map[i] = r_cp;
+ t_array[i+1] = t_cp_end + 1;
+ r_map[i+1] = TR_UNLISTED;
+ len++;
+ invlist_set_len(t_invlist, len,
+ *(get_invlist_offset_addr(t_invlist)));
+ }
+ else if (adjacent_to_range_above) {
+ /* The new chunk adjoins the range above, but not the range
+ * below, and can't merge. Let's assume the new chunk
+ * starts at O
+ *
+ * [i-1] J j # J-L => j-l
+ * [i] M -1 # M => default, N => default
+ * [i+1] O z # O => z, P => z+1, Q => z+2
+ * [i+2] R x # R => x, S => x+1, T => x+2
+ * [i+3] U y # U => y, V => y+1, ...
+ * ...
+ * [-1] Z -1 # Z => default; as do Z+1, ... infinity
+ */
+ invlist_extend(t_invlist, len + 1);
+ t_array = invlist_array(t_invlist);
+ Renew(r_map, len + 1, UV);
+
+ Move(t_array + i + 1, t_array + i + 2, len - i - 1, UV);
+ Move(r_map + i + 1, r_map + i + 2, len - i - 1, UV);
+ t_array[i+1] = t_cp;
+ r_map[i+1] = r_cp;
+ len++;
+ invlist_set_len(t_invlist, len,
+ *(get_invlist_offset_addr(t_invlist)));
+ }
+ else {
+ /* The new chunk adjoins neither the range above, nor the
+ * range below. Lets assume it is N..P => n..p
+ *
+ * [i-1] J j # J-L => j-l
+ * [i] M -1 # M => default
+ * [i+1] N n # N..P => n..p
+ * [i+2] Q -1 # Q => default
+ * [i+3] R x # R => x, S => x+1, T => x+2
+ * [i+4] U y # U => y, V => y+1, ...
+ * ...
+ * [-1] Z -1 # Z => default; as do Z+1, ... infinity
+ */
- /* compile listsv into a swash and attach to o */
+ DEBUG_yv(PerlIO_printf(Perl_debug_log,
+ "Before fixing up: len=%d, i=%d\n",
+ (int) len, (int) i));
+ DEBUG_yv(invmap_dump(t_invlist, r_map));
- none = ++max;
- if (del)
- ++max;
+ invlist_extend(t_invlist, len + 2);
+ t_array = invlist_array(t_invlist);
+ Renew(r_map, len + 2, UV);
- if (max > 0xffff)
- bits = 32;
- else if (max > 0xff)
- bits = 16;
- else
- bits = 8;
+ Move(t_array + i + 1,
+ t_array + i + 2 + 1, len - i - (2 - 1), UV);
+ Move(r_map + i + 1,
+ r_map + i + 2 + 1, len - i - (2 - 1), UV);
+
+ len += 2;
+ invlist_set_len(t_invlist, len,
+ *(get_invlist_offset_addr(t_invlist)));
+
+ t_array[i+1] = t_cp;
+ r_map[i+1] = r_cp;
+
+ t_array[i+2] = t_cp_end + 1;
+ r_map[i+2] = TR_UNLISTED;
+ }
+ DEBUG_yv(PerlIO_printf(Perl_debug_log,
+ "After iteration: span=%" UVuf ", t_range_count=%"
+ UVuf " r_range_count=%" UVuf "\n",
+ span, t_range_count, r_range_count));
+ DEBUG_yv(invmap_dump(t_invlist, r_map));
+ } /* End of this chunk needs to be processed */
+
+ /* Done with this chunk. */
+ t_cp += span;
+ if (t_cp >= IV_MAX) {
+ break;
+ }
+ t_range_count -= span;
+ if (r_cp != TR_SPECIAL_HANDLING) {
+ r_cp += span;
+ r_range_count -= span;
+ }
+ else {
+ r_range_count = 0;
+ }
+
+ } /* End of loop through the search list */
+
+ /* We don't need an exact count, but we do need to know if there is
+ * anything left over in the replacement list. So, just assume it's
+ * one byte per character */
+ if (rend > r) {
+ r_count++;
+ }
+ } /* End of passes */
+
+ SvREFCNT_dec(inverted_tstr);
+
+ DEBUG_y(PerlIO_printf(Perl_debug_log, "After everything: \n"));
+ DEBUG_y(invmap_dump(t_invlist, r_map));
+
+ /* We now have normalized the input into an inversion map.
+ *
+ * See if the lhs and rhs are equivalent. If so, this tr/// is a no-op
+ * except for the count, and streamlined runtime code can be used */
+ if (!del && !squash) {
+
+ /* They are identical if they point to same address, or if everything
+ * maps to UNLISTED or to itself. This catches things that not looking
+ * at the normalized inversion map doesn't catch, like tr/aa/ab/ or
+ * tr/\x{100}-\x{104}/\x{100}-\x{102}\x{103}-\x{104} */
+ if (r0 != t0) {
+ for (i = 0; i < len; i++) {
+ if (r_map[i] != TR_UNLISTED && r_map[i] != t_array[i]) {
+ goto done_identical_check;
+ }
+ }
+ }
+
+ /* Here have gone through entire list, and didn't find any
+ * non-identical mappings */
+ o->op_private |= OPpTRANS_IDENTICAL;
+
+ done_identical_check: ;
+ }
+
+ t_array = invlist_array(t_invlist);
+
+ /* If has components above 255, we generally need to use the inversion map
+ * implementation */
+ if ( can_force_utf8
+ || ( len > 0
+ && t_array[len-1] > 255
+ /* If the final range is 0x100-INFINITY and is a special
+ * mapping, the table implementation can handle it */
+ && ! ( t_array[len-1] == 256
+ && ( r_map[len-1] == TR_UNLISTED
+ || r_map[len-1] == TR_SPECIAL_HANDLING))))
+ {
+ SV* r_map_sv;
+
+ /* A UTF-8 op is generated, indicated by this flag. This op is an
+ * sv_op */
+ o->op_private |= OPpTRANS_USE_SVOP;
+
+ if (can_force_utf8) {
+ o->op_private |= OPpTRANS_CAN_FORCE_UTF8;
+ }
+
+ /* The inversion map is pushed; first the list. */
+ invmap = MUTABLE_AV(newAV());
+ av_push(invmap, t_invlist);
+
+ /* 2nd is the mapping */
+ r_map_sv = newSVpvn((char *) r_map, len * sizeof(UV));
+ av_push(invmap, r_map_sv);
+
+ /* 3rd is the max possible expansion factor */
+ av_push(invmap, newSVnv(max_expansion));
+
+ /* Characters that are in the search list, but not in the replacement
+ * list are mapped to the final character in the replacement list */
+ if (! del && r_count < t_count) {
+ av_push(invmap, newSVuv(final_map));
+ }
- swash = MUTABLE_SV(swash_init("utf8", "", listsv, bits, none));
#ifdef USE_ITHREADS
- cPADOPo->op_padix = pad_alloc(OP_TRANS, SVf_READONLY);
- SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
- PAD_SETSV(cPADOPo->op_padix, swash);
- SvPADTMP_on(swash);
- SvREADONLY_on(swash);
+ cPADOPo->op_padix = pad_alloc(OP_TRANS, SVf_READONLY);
+ SvREFCNT_dec(PAD_SVl(cPADOPo->op_padix));
+ PAD_SETSV(cPADOPo->op_padix, (SV *) invmap);
+ SvPADTMP_on(invmap);
+ SvREADONLY_on(invmap);
#else
- cSVOPo->op_sv = swash;
+ cSVOPo->op_sv = (SV *) invmap;
#endif
- SvREFCNT_dec(listsv);
- SvREFCNT_dec(transv);
- if (!del && havefinal && rlen)
- (void)hv_store(MUTABLE_HV(SvRV(swash)), "FINAL", 5,
- newSVuv((UV)final), 0);
+ }
+ else {
+ OPtrans_map *tbl;
+ unsigned short i;
+
+ /* The OPtrans_map struct already contains one slot; hence the -1. */
+ SSize_t struct_size = sizeof(OPtrans_map)
+ + (256 - 1 + 1)*sizeof(short);
+
+ /* Non-utf8 case: set o->op_pv to point to a simple 256+ entry lookup
+ * table. Entries with the value TR_UNMAPPED indicate chars not to be
+ * translated, while TR_DELETE indicates a search char without a
+ * corresponding replacement char under /d.
+ *
+ * In addition, an extra slot at the end is used to store the final
+ * repeating char, or TR_R_EMPTY under an empty replacement list, or
+ * TR_DELETE under /d; which makes the runtime code easier.
+ */
- Safefree(tsave);
- Safefree(rsave);
+ /* Indicate this is an op_pv */
+ o->op_private &= ~OPpTRANS_USE_SVOP;
- tlen = tcount;
- rlen = rcount;
- if (r < rend)
- rlen++;
- else if (rlast == 0xffffffff)
- rlen = 0;
+ tbl = (OPtrans_map*)PerlMemShared_calloc(struct_size, 1);
+ tbl->size = 256;
+ cPVOPo->op_pv = (char*)tbl;
- goto warnins;
- }
+ for (i = 0; i < len; i++) {
+ STATIC_ASSERT_DECL(TR_SPECIAL_HANDLING == TR_DELETE);
+ short upper = i >= len - 1 ? 256 : (short) t_array[i+1];
+ short to = (short) r_map[i];
+ short j;
+ bool do_increment = TRUE;
- /* Non-utf8 case: set o->op_pv to point to a simple 256+ entry lookup
- * table. Entries with the value -1 indicate chars not to be
- * translated, while -2 indicates a search char without a
- * corresponding replacement char under /d.
- *
- * Normally, the table has 256 slots. However, in the presence of
- * /c, the search charlist has an implicit \x{100}-\x{7fffffff}
- * added, and if there are enough replacement chars to start pairing
- * with the \x{100},... search chars, then a larger (> 256) table
- * is allocated.
- *
- * In addition, regardless of whether under /c, an extra slot at the
- * end is used to store the final repeating char, or -3 under an empty
- * replacement list, or -2 under /d; which makes the runtime code
- * easier.
- *
- * The toker will have already expanded char ranges in t and r.
- */
+ /* Any code points above our limit should be irrelevant */
+ if (t_array[i] >= tbl->size) break;
- /* Initially allocate 257-slot table: 256 for basic (non /c) usage,
- * plus final slot for repeat/-2/-3. Later we realloc if excess > * 0.
- * The OPtrans_map struct already contains one slot; hence the -1.
- */
- struct_size = sizeof(OPtrans_map) + (256 - 1 + 1)*sizeof(short);
- tbl = (OPtrans_map*)PerlMemShared_calloc(struct_size, 1);
- tbl->size = 256;
- cPVOPo->op_pv = (char*)tbl;
+ /* Set up the map */
+ if (to == (short) TR_SPECIAL_HANDLING && ! del) {
+ to = (short) final_map;
+ do_increment = FALSE;
+ }
+ else if (to < 0) {
+ do_increment = FALSE;
+ }
- if (complement) {
- Size_t excess;
+ /* Create a map for everything in this range. The value increases
+ * except for the special cases */
+ for (j = (short) t_array[i]; j < upper; j++) {
+ tbl->map[j] = to;
+ if (do_increment) to++;
+ }
+ }
- /* in this branch, j is a count of 'consumed' (i.e. paired off
- * with a search char) replacement chars (so j <= rlen always)
- */
- for (i = 0; i < tlen; i++)
- tbl->map[t[i]] = -1;
-
- for (i = 0, j = 0; i < 256; i++) {
- if (!tbl->map[i]) {
- if (j == rlen) {
- if (del)
- tbl->map[i] = -2;
- else if (rlen)
- tbl->map[i] = r[j-1];
- else
- tbl->map[i] = (short)i;
- }
- else {
- tbl->map[i] = r[j++];
- }
- if ( tbl->map[i] >= 0
- && UVCHR_IS_INVARIANT((UV)i)
- && !UVCHR_IS_INVARIANT((UV)(tbl->map[i]))
- )
- grows = TRUE;
- }
- }
+ tbl->map[tbl->size] = del
+ ? (short) TR_DELETE
+ : (short) rlen
+ ? (short) final_map
+ : (short) TR_R_EMPTY;
+ DEBUG_y(PerlIO_printf(Perl_debug_log,"%s: %d\n", __FILE__, __LINE__));
+ for (i = 0; i < tbl->size; i++) {
+ if (tbl->map[i] < 0) {
+ DEBUG_y(PerlIO_printf(Perl_debug_log," %02x=>%d",
+ (unsigned) i, tbl->map[i]));
+ }
+ else {
+ DEBUG_y(PerlIO_printf(Perl_debug_log," %02x=>%02x",
+ (unsigned) i, tbl->map[i]));
+ }
+ if ((i+1) % 8 == 0 || i + 1 == (short) tbl->size) {
+ DEBUG_y(PerlIO_printf(Perl_debug_log,"\n"));
+ }
+ }
+ DEBUG_y(PerlIO_printf(Perl_debug_log,"Final map 0x%x=>%02x\n",
+ (unsigned) tbl->size, tbl->map[tbl->size]));
+
+ SvREFCNT_dec(t_invlist);
+
+#if 0 /* code that added excess above-255 chars at the end of the table, in
+ case we ever want to not use the inversion map implementation for
+ this */
ASSUME(j <= rlen);
excess = rlen - j;
@@ -6790,54 +8058,29 @@ S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
}
else {
/* no more replacement chars than search chars */
- if (!rlen && !del && !squash)
- o->op_private |= OPpTRANS_IDENTICAL;
}
+#endif
- tbl->map[tbl->size] = del ? -2 : rlen ? r[rlen - 1] : -3;
}
- else {
- if (!rlen && !del) {
- r = t; rlen = tlen;
- if (!squash)
- o->op_private |= OPpTRANS_IDENTICAL;
- }
- else if (!squash && rlen == tlen && memEQ((char*)t, (char*)r, tlen)) {
- o->op_private |= OPpTRANS_IDENTICAL;
- }
- for (i = 0; i < 256; i++)
- tbl->map[i] = -1;
- for (i = 0, j = 0; i < tlen; i++,j++) {
- if (j >= rlen) {
- if (del) {
- if (tbl->map[t[i]] == -1)
- tbl->map[t[i]] = -2;
- continue;
- }
- --j;
- }
- if (tbl->map[t[i]] == -1) {
- if ( UVCHR_IS_INVARIANT(t[i])
- && ! UVCHR_IS_INVARIANT(r[j]))
- grows = TRUE;
- tbl->map[t[i]] = r[j];
- }
- }
- tbl->map[tbl->size] = del ? -1 : rlen ? -1 : -3;
- }
+ DEBUG_y(PerlIO_printf(Perl_debug_log,
+ "/d=%d, /s=%d, /c=%d, identical=%d, grows=%d,"
+ " use_svop=%d, can_force_utf8=%d,\nexpansion=%" NVgf "\n",
+ del, squash, complement,
+ cBOOL(o->op_private & OPpTRANS_IDENTICAL),
+ cBOOL(o->op_private & OPpTRANS_USE_SVOP),
+ cBOOL(o->op_private & OPpTRANS_GROWS),
+ cBOOL(o->op_private & OPpTRANS_CAN_FORCE_UTF8),
+ max_expansion));
- /* both non-utf8 and utf8 code paths end up here */
+ Safefree(r_map);
- warnins:
- if(del && rlen == tlen) {
- Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
- } else if(rlen > tlen && !complement) {
+ if(del && rlen != 0 && r_count == t_count) {
+ Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator");
+ } else if(r_count > t_count) {
Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list");
}
- if (grows)
- o->op_private |= OPpTRANS_GROWS;
op_free(expr);
op_free(repl);
@@ -6846,7 +8089,7 @@ S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl)
/*
-=for apidoc Am|OP *|newPMOP|I32 type|I32 flags
+=for apidoc newPMOP
Constructs, checks, and returns an op of any pattern matching type.
C<type> is the opcode. C<flags> gives the eight bits of C<op_flags>
@@ -6944,14 +8187,16 @@ S_set_haseval(pTHX)
*
* Flags currently has 2 bits of meaning:
* 1: isreg indicates that the pattern is part of a regex construct, eg
- * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
- * split "pattern", which aren't. In the former case, expr will be a list
- * if the pattern contains more than one term (eg /a$b/).
+ * $x =~ /pattern/ or split /pattern/, as opposed to $x =~ $pattern or
+ * split "pattern", which aren't. In the former case, expr will be a list
+ * if the pattern contains more than one term (eg /a$b/).
* 2: The pattern is for a split.
*
* When the pattern has been compiled within a new anon CV (for
* qr/(?{...})/ ), then floor indicates the savestack level just before
* the new sub was created
+ *
+ * tr/// is also handled.
*/
OP *
@@ -6981,24 +8226,24 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor)
is_compiletime = 1;
has_code = 0;
if (expr->op_type == OP_LIST) {
- OP *o;
- for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) {
- if (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)) {
- has_code = 1;
- assert(!o->op_next);
- if (UNLIKELY(!OpHAS_SIBLING(o))) {
- assert(PL_parser && PL_parser->error_count);
- /* This can happen with qr/ (?{(^{})/. Just fake up
- the op we were expecting to see, to avoid crashing
- elsewhere. */
- op_sibling_splice(expr, o, 0,
- newSVOP(OP_CONST, 0, &PL_sv_no));
- }
- o->op_next = OpSIBLING(o);
- }
- else if (o->op_type != OP_CONST && o->op_type != OP_PUSHMARK)
- is_compiletime = 0;
- }
+ OP *child;
+ for (child = cLISTOPx(expr)->op_first; child; child = OpSIBLING(child)) {
+ if (child->op_type == OP_NULL && (child->op_flags & OPf_SPECIAL)) {
+ has_code = 1;
+ assert(!child->op_next);
+ if (UNLIKELY(!OpHAS_SIBLING(child))) {
+ assert(PL_parser && PL_parser->error_count);
+ /* This can happen with qr/ (?{(^{})/. Just fake up
+ the op we were expecting to see, to avoid crashing
+ elsewhere. */
+ op_sibling_splice(expr, child, 0,
+ newSVOP(OP_CONST, 0, &PL_sv_no));
+ }
+ child->op_next = OpSIBLING(child);
+ }
+ else if (child->op_type != OP_CONST && child->op_type != OP_PUSHMARK)
+ is_compiletime = 0;
+ }
}
else if (expr->op_type != OP_CONST)
is_compiletime = 0;
@@ -7009,42 +8254,42 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor)
* also, mark any arrays as LIST/REF */
if (expr->op_type == OP_LIST) {
- OP *o;
- for (o = cLISTOPx(expr)->op_first; o; o = OpSIBLING(o)) {
+ OP *child;
+ for (child = cLISTOPx(expr)->op_first; child; child = OpSIBLING(child)) {
- if (o->op_type == OP_PADAV || o->op_type == OP_RV2AV) {
- assert( !(o->op_flags & OPf_WANT));
+ if (child->op_type == OP_PADAV || child->op_type == OP_RV2AV) {
+ assert( !(child->op_flags & OPf_WANT));
/* push the array rather than its contents. The regex
* engine will retrieve and join the elements later */
- o->op_flags |= (OPf_WANT_LIST | OPf_REF);
+ child->op_flags |= (OPf_WANT_LIST | OPf_REF);
continue;
}
- if (!(o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL)))
- continue;
- o->op_next = NULL; /* undo temporary hack from above */
- scalar(o);
- LINKLIST(o);
- if (cLISTOPo->op_first->op_type == OP_LEAVE) {
- LISTOP *leaveop = cLISTOPx(cLISTOPo->op_first);
- /* skip ENTER */
- assert(leaveop->op_first->op_type == OP_ENTER);
- assert(OpHAS_SIBLING(leaveop->op_first));
- o->op_next = OpSIBLING(leaveop->op_first);
- /* skip leave */
- assert(leaveop->op_flags & OPf_KIDS);
- assert(leaveop->op_last->op_next == (OP*)leaveop);
- leaveop->op_next = NULL; /* stop on last op */
- op_null((OP*)leaveop);
- }
- else {
- /* skip SCOPE */
- OP *scope = cLISTOPo->op_first;
- assert(scope->op_type == OP_SCOPE);
- assert(scope->op_flags & OPf_KIDS);
- scope->op_next = NULL; /* stop on last op */
- op_null(scope);
- }
+ if (!(child->op_type == OP_NULL && (child->op_flags & OPf_SPECIAL)))
+ continue;
+ child->op_next = NULL; /* undo temporary hack from above */
+ scalar(child);
+ LINKLIST(child);
+ if (cLISTOPx(child)->op_first->op_type == OP_LEAVE) {
+ LISTOP *leaveop = cLISTOPx(cLISTOPx(child)->op_first);
+ /* skip ENTER */
+ assert(leaveop->op_first->op_type == OP_ENTER);
+ assert(OpHAS_SIBLING(leaveop->op_first));
+ child->op_next = OpSIBLING(leaveop->op_first);
+ /* skip leave */
+ assert(leaveop->op_flags & OPf_KIDS);
+ assert(leaveop->op_last->op_next == (OP*)leaveop);
+ leaveop->op_next = NULL; /* stop on last op */
+ op_null((OP*)leaveop);
+ }
+ else {
+ /* skip SCOPE */
+ OP *scope = cLISTOPx(child)->op_first;
+ assert(scope->op_type == OP_SCOPE);
+ assert(scope->op_flags & OPf_KIDS);
+ scope->op_next = NULL; /* stop on last op */
+ op_null(scope);
+ }
/* XXX optimize_optree() must be called on o before
* CALL_PEEP(), as currently S_maybe_multiconcat() can't
@@ -7054,16 +8299,16 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor)
* to the same optree later (where hopefully it won't do any
* harm as it can't convert an op to multiconcat if it's
* already been converted */
- optimize_optree(o);
-
- /* have to peep the DOs individually as we've removed it from
- * the op_next chain */
- CALL_PEEP(o);
- S_prune_chain_head(&(o->op_next));
- if (is_compiletime)
- /* runtime finalizes as part of finalizing whole tree */
- finalize_optree(o);
- }
+ optimize_optree(child);
+
+ /* have to peep the DOs individually as we've removed it from
+ * the op_next chain */
+ CALL_PEEP(child);
+ S_prune_chain_head(&(child->op_next));
+ if (is_compiletime)
+ /* runtime finalizes as part of finalizing whole tree */
+ finalize_optree(child);
+ }
}
else if (expr->op_type == OP_PADAV || expr->op_type == OP_RV2AV) {
assert( !(expr->op_flags & OPf_WANT));
@@ -7330,7 +8575,7 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor)
}
/*
-=for apidoc Am|OP *|newSVOP|I32 type|I32 flags|SV *sv
+=for apidoc newSVOP
Constructs, checks, and returns an op of any type that involves an
embedded SV. C<type> is the opcode. C<flags> gives the eight bits
@@ -7367,7 +8612,7 @@ Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv)
}
/*
-=for apidoc Am|OP *|newDEFSVOP|
+=for apidoc newDEFSVOP
Constructs and returns an op to access C<$_>.
@@ -7383,7 +8628,7 @@ Perl_newDEFSVOP(pTHX)
#ifdef USE_ITHREADS
/*
-=for apidoc Am|OP *|newPADOP|I32 type|I32 flags|SV *sv
+=for apidoc newPADOP
Constructs, checks, and returns an op of any type that involves a
reference to a pad element. C<type> is the opcode. C<flags> gives the
@@ -7428,7 +8673,7 @@ Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv)
#endif /* USE_ITHREADS */
/*
-=for apidoc Am|OP *|newGVOP|I32 type|I32 flags|GV *gv
+=for apidoc newGVOP
Constructs, checks, and returns an op of any type that involves an
embedded reference to a GV. C<type> is the opcode. C<flags> gives the
@@ -7452,7 +8697,7 @@ Perl_newGVOP(pTHX_ I32 type, I32 flags, GV *gv)
}
/*
-=for apidoc Am|OP *|newPVOP|I32 type|I32 flags|char *pv
+=for apidoc newPVOP
Constructs, checks, and returns an op of any type that involves an
embedded C-level pointer (PV). C<type> is the opcode. C<flags> gives
@@ -7678,6 +8923,10 @@ decremented. In addition, the C<name> argument is modified.
If C<PERL_LOADMOD_DENY> is set, the module is loaded as if with C<no> rather
than C<use>.
+=for apidoc Amnh||PERL_LOADMOD_DENY
+=for apidoc Amnh||PERL_LOADMOD_NOIMPORT
+=for apidoc Amnh||PERL_LOADMOD_IMPORT_OPS
+
=cut */
void
@@ -7787,7 +9036,7 @@ Perl_dofile(pTHX_ OP *term, I32 force_builtin)
/*
=head1 Optree construction
-=for apidoc Am|OP *|newSLICEOP|I32 flags|OP *subscript|OP *listval
+=for apidoc newSLICEOP
Constructs, checks, and returns an C<lslice> (list slice) op. C<flags>
gives the eight bits of C<op_flags>, except that C<OPf_KIDS> will
@@ -7808,9 +9057,16 @@ Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval)
list(force_list(listval, 1)) );
}
+#define ASSIGN_SCALAR 0
#define ASSIGN_LIST 1
#define ASSIGN_REF 2
+/* given the optree o on the LHS of an assignment, determine whether its:
+ * ASSIGN_SCALAR $x = ...
+ * ASSIGN_LIST ($x) = ...
+ * ASSIGN_REF \$x = ...
+ */
+
STATIC I32
S_assignment_type(pTHX_ const OP *o)
{
@@ -7819,7 +9075,7 @@ S_assignment_type(pTHX_ const OP *o)
U8 ret;
if (!o)
- return TRUE;
+ return ASSIGN_LIST;
if (o->op_type == OP_SREFGEN)
{
@@ -7836,7 +9092,7 @@ S_assignment_type(pTHX_ const OP *o)
o = cUNOPo->op_first;
flags = o->op_flags;
type = o->op_type;
- ret = 0;
+ ret = ASSIGN_SCALAR;
}
if (type == OP_COND_EXPR) {
@@ -7848,7 +9104,7 @@ S_assignment_type(pTHX_ const OP *o)
return ASSIGN_LIST;
if ((t == ASSIGN_LIST) ^ (f == ASSIGN_LIST))
yyerror("Assignment to both a list and a scalar");
- return FALSE;
+ return ASSIGN_SCALAR;
}
if (type == OP_LIST &&
@@ -7860,10 +9116,10 @@ S_assignment_type(pTHX_ const OP *o)
type == OP_RV2AV || type == OP_RV2HV ||
type == OP_ASLICE || type == OP_HSLICE ||
type == OP_KVASLICE || type == OP_KVHSLICE || type == OP_REFGEN)
- return TRUE;
+ return ASSIGN_LIST;
if (type == OP_PADAV || type == OP_PADHV)
- return TRUE;
+ return ASSIGN_LIST;
if (type == OP_RV2SV)
return ret;
@@ -7901,7 +9157,7 @@ S_newONCEOP(pTHX_ OP *initop, OP *padop)
}
/*
-=for apidoc Am|OP *|newASSIGNOP|I32 flags|OP *left|I32 optype|OP *right
+=for apidoc newASSIGNOP
Constructs, checks, and returns an assignment op. C<left> and C<right>
supply the parameters of the assignment; they are consumed by this
@@ -8118,7 +9374,7 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right)
}
/*
-=for apidoc Am|OP *|newSTATEOP|I32 flags|char *label|OP *o
+=for apidoc newSTATEOP
Constructs a state op (COP). The state op is normally a C<nextstate> op,
but will be a C<dbstate> op if debugging is enabled for currently-compiled
@@ -8209,7 +9465,7 @@ Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o)
}
/*
-=for apidoc Am|OP *|newLOGOP|I32 type|I32 flags|OP *first|OP *other
+=for apidoc newLOGOP
Constructs, checks, and returns a logical (flow control) op. C<type>
is the opcode. C<flags> gives the eight bits of C<op_flags>, except
@@ -8230,17 +9486,26 @@ Perl_newLOGOP(pTHX_ I32 type, I32 flags, OP *first, OP *other)
return new_logop(type, flags, &first, &other);
}
+
+/* See if the optree o contains a single OP_CONST (plus possibly
+ * surrounding enter/nextstate/null etc). If so, return it, else return
+ * NULL.
+ */
+
STATIC OP *
S_search_const(pTHX_ OP *o)
{
PERL_ARGS_ASSERT_SEARCH_CONST;
+ redo:
switch (o->op_type) {
case OP_CONST:
return o;
case OP_NULL:
- if (o->op_flags & OPf_KIDS)
- return search_const(cUNOPo->op_first);
+ if (o->op_flags & OPf_KIDS) {
+ o = cUNOPo->op_first;
+ goto redo;
+ }
break;
case OP_LEAVE:
case OP_SCOPE:
@@ -8250,6 +9515,7 @@ S_search_const(pTHX_ OP *o)
if (!(o->op_flags & OPf_KIDS))
return NULL;
kid = cLISTOPo->op_first;
+
do {
switch (kid->op_type) {
case OP_ENTER:
@@ -8263,16 +9529,19 @@ S_search_const(pTHX_ OP *o)
goto last;
}
} while (kid);
+
if (!kid)
kid = cLISTOPo->op_last;
last:
- return search_const(kid);
+ o = kid;
+ goto redo;
}
}
return NULL;
}
+
STATIC OP *
S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
{
@@ -8472,7 +9741,7 @@ S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp)
}
/*
-=for apidoc Am|OP *|newCONDOP|I32 flags|OP *first|OP *trueop|OP *falseop
+=for apidoc newCONDOP
Constructs, checks, and returns a conditional-expression (C<cond_expr>)
op. C<flags> gives the eight bits of C<op_flags>, except that C<OPf_KIDS>
@@ -8547,7 +9816,7 @@ Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop)
}
/*
-=for apidoc Am|OP *|newRANGE|I32 flags|OP *left|OP *right
+=for apidoc newRANGE
Constructs and returns a C<range> op, with subordinate C<flip> and
C<flop> ops. C<flags> gives the eight bits of C<op_flags> for the
@@ -8614,7 +9883,7 @@ Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right)
}
/*
-=for apidoc Am|OP *|newLOOPOP|I32 flags|I32 debuggable|OP *expr|OP *block
+=for apidoc newLOOPOP
Constructs, checks, and returns an op tree expressing a loop. This is
only a loop in the control flow through the op tree; it does not have
@@ -8715,7 +9984,7 @@ Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block)
}
/*
-=for apidoc Am|OP *|newWHILEOP|I32 flags|I32 debuggable|LOOP *loop|OP *expr|OP *block|OP *cont|I32 has_my
+=for apidoc newWHILEOP
Constructs, checks, and returns an op tree expressing a C<while> loop.
This is a heavyweight loop, with structure that allows exiting the loop
@@ -8841,7 +10110,7 @@ Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop,
}
/*
-=for apidoc Am|OP *|newFOROP|I32 flags|OP *sv|OP *expr|OP *block|OP *cont
+=for apidoc newFOROP
Constructs, checks, and returns an op tree expressing a C<foreach>
loop (iteration through a list of values). This is a heavyweight loop,
@@ -8959,10 +10228,14 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
/* for my $x () sets OPpLVAL_INTRO;
* for our $x () sets OPpOUR_INTRO */
loop->op_private = (U8)iterpflags;
+
+ /* upgrade loop from a LISTOP to a LOOPOP;
+ * keep it in-place if there's space */
if (loop->op_slabbed
- && DIFF(loop, OpSLOT(loop)->opslot_next)
- < SIZE_TO_PSIZE(sizeof(LOOP)))
+ && OpSLOT(loop)->opslot_size
+ < SIZE_TO_PSIZE(sizeof(LOOP)) + OPSLOT_HEADER_P)
{
+ /* no space; allocate new op */
LOOP *tmp;
NewOp(1234,tmp,1,LOOP);
Copy(loop,tmp,1,LISTOP);
@@ -8973,6 +10246,7 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
}
else if (!loop->op_slabbed)
{
+ /* loop was malloc()ed */
loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP));
OpLASTSIB_set(loop->op_last, (OP*)loop);
}
@@ -8982,7 +10256,7 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont)
}
/*
-=for apidoc Am|OP *|newLOOPEX|I32 type|OP *label
+=for apidoc newLOOPEX
Constructs, checks, and returns a loop-exiting op (such as C<goto>
or C<last>). C<type> is the opcode. C<label> supplies the parameter
@@ -9027,7 +10301,7 @@ Perl_newLOOPEX(pTHX_ I32 type, OP *label)
SvPV_nolen_const(((SVOP*)label)->op_sv)));
}
}
-
+
/* If we have already created an op, we do not need the label. */
if (o)
op_free(label);
@@ -9122,7 +10396,10 @@ S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
return o;
}
-/* Does this look like a boolean operation? For these purposes
+
+/* For the purposes of 'when(implied_smartmatch)'
+ * versus 'when(boolean_expression)',
+ * does this look like a boolean operation? For these purposes
a boolean operation is:
- a subroutine call [*]
- a logical connective
@@ -9130,7 +10407,7 @@ S_newGIVWHENOP(pTHX_ OP *cond, OP *block,
- a filetest operator, with the exception of -s -M -A -C
- defined(), exists() or eof()
- /$re/ or $foo =~ /$re/
-
+
[*] possibly surprising
*/
STATIC bool
@@ -9170,9 +10447,9 @@ S_looks_like_bool(pTHX_ const OP *o)
case OP_SEQ: case OP_SNE: case OP_SLT:
case OP_SGT: case OP_SLE: case OP_SGE:
-
+
case OP_SMARTMATCH:
-
+
case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC:
case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC:
case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED:
@@ -9181,7 +10458,7 @@ S_looks_like_bool(pTHX_ const OP *o)
case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID:
case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY:
case OP_FTTEXT: case OP_FTBINARY:
-
+
case OP_DEFINED: case OP_EXISTS:
case OP_MATCH: case OP_EOF:
@@ -9195,12 +10472,12 @@ S_looks_like_bool(pTHX_ const OP *o)
if (o->op_private & OPpTRUEBOOL)
return TRUE;
return FALSE;
-
+
case OP_CONST:
/* Detect comparisons that have been optimized away */
if (cSVOPo->op_sv == &PL_sv_yes
|| cSVOPo->op_sv == &PL_sv_no)
-
+
return TRUE;
else
return FALSE;
@@ -9210,8 +10487,9 @@ S_looks_like_bool(pTHX_ const OP *o)
}
}
+
/*
-=for apidoc Am|OP *|newGIVENOP|OP *cond|OP *block|PADOFFSET defsv_off
+=for apidoc newGIVENOP
Constructs, checks, and returns an op tree expressing a C<given> block.
C<cond> supplies the expression to whose value C<$_> will be locally
@@ -9237,7 +10515,7 @@ Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off)
}
/*
-=for apidoc Am|OP *|newWHENOP|OP *cond|OP *block
+=for apidoc newWHENOP
Constructs, checks, and returns an op tree expressing a C<when> block.
C<cond> supplies the test expression, and C<block> supplies the block
@@ -9264,7 +10542,7 @@ Perl_newWHENOP(pTHX_ OP *cond, OP *block)
newDEFSVOP(),
scalar(ref_array_or_hash(cond)));
}
-
+
return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0);
}
@@ -9676,7 +10954,7 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
age sub (my sub foo; sub bar { sub foo { ... } }), outcv points to
the package sub. So check PadnameOUTER(name) too.
*/
- if (outcv == CvOUTSIDE(compcv) && !PadnameOUTER(name)) {
+ if (outcv == CvOUTSIDE(compcv) && !PadnameOUTER(name)) {
assert(!CvWEAKOUTSIDE(compcv));
SvREFCNT_dec(CvOUTSIDE(compcv));
CvWEAKOUTSIDE_on(compcv);
@@ -9855,7 +11133,7 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
}
/*
-=for apidoc m|CV *|newATTRSUB_x|I32 floor|OP *o|OP *proto|OP *attrs|OP *block|bool o_is_gv
+=for apidoc newATTRSUB_x
Construct a Perl subroutine, also performing some surrounding jobs.
@@ -10478,7 +11756,7 @@ S_process_special_blocks(pTHX_ I32 floor, const char *const fullname,
return FALSE;
} else {
if (*name == 'E') {
- if strEQ(name, "END") {
+ if (strEQ(name, "END")) {
DEBUG_x( dump_sub(gv) );
Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv));
} else
@@ -10520,7 +11798,7 @@ S_process_special_blocks(pTHX_ I32 floor, const char *const fullname,
}
/*
-=for apidoc Am|CV *|newCONSTSUB|HV *stash|const char *name|SV *sv
+=for apidoc newCONSTSUB
Behaves like L</newCONSTSUB_flags>, except that C<name> is nul-terminated
rather than of counted length, and no flags are set. (This means that
@@ -10536,7 +11814,7 @@ Perl_newCONSTSUB(pTHX_ HV *stash, const char *name, SV *sv)
}
/*
-=for apidoc Am|CV *|newCONSTSUB_flags|HV *stash|const char *name|STRLEN len|U32 flags|SV *sv
+=for apidoc newCONSTSUB_flags
Construct a constant subroutine, also performing some surrounding
jobs. A scalar constant-valued subroutine is eligible for inlining
@@ -10658,7 +11936,7 @@ Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len,
}
/*
-=for apidoc U||newXS
+=for apidoc newXS
Used by C<xsubpp> to hook up XSUBs as Perl subs. C<filename> needs to be
static storage, as it is used directly as CvFILE(), without a copy being made.
@@ -10696,7 +11974,7 @@ Perl_newXS_deffile(pTHX_ const char *name, XSUBADDR_t subaddr)
}
/*
-=for apidoc m|CV *|newXS_len_flags|const char *name|STRLEN len|XSUBADDR_t subaddr|const char *const filename|const char *const proto|SV **const_svp|U32 flags
+=for apidoc newXS_len_flags
Construct an XS subroutine, also performing some surrounding jobs.
@@ -10808,7 +12086,7 @@ Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len,
cv = NULL;
}
}
-
+
if (cv) /* must reuse cv if autoloaded */
cv_undef(cv);
else {
@@ -10968,7 +12246,7 @@ OP *
Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block)
{
SV * const cv = MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block));
- OP * anoncode =
+ OP * anoncode =
newSVOP(OP_ANONCODE, 0,
cv);
if (CvANONCONST(cv))
@@ -11507,8 +12785,10 @@ Perl_ck_eval(pTHX_ OP *o)
if ((PL_hints & HINT_LOCALIZE_HH) != 0
&& !(o->op_private & OPpEVAL_COPHH) && GvHV(PL_hintgv)) {
/* Store a copy of %^H that pp_entereval can pick up. */
- OP *hhop = newSVOP(OP_HINTSEVAL, 0,
- MUTABLE_SV(hv_copy_hints_hv(GvHV(PL_hintgv))));
+ HV *hh = hv_copy_hints_hv(GvHV(PL_hintgv));
+ OP *hhop;
+ STOREFEATUREBITSHH(hh);
+ hhop = newSVOP(OP_HINTSEVAL, 0, MUTABLE_SV(hh));
/* append hhop to only child */
op_sibling_splice(o, cUNOPo->op_first, 0, hhop);
@@ -11696,9 +12976,8 @@ Perl_ck_ftst(pTHX_ OP *o)
scalar((OP *) kid);
if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type))
o->op_private |= OPpFT_ACCESS;
- if (type != OP_STAT && type != OP_LSTAT
- && PL_check[kidtype] == Perl_ck_ftst
- && kidtype != OP_STAT && kidtype != OP_LSTAT
+ if (OP_IS_FILETEST(type)
+ && OP_IS_FILETEST(kidtype)
) {
o->op_private |= OPpFT_STACKED;
kid->op_private |= OPpFT_STACKING;
@@ -11795,7 +13074,7 @@ Perl_ck_fun(pTHX_ OP *o)
PL_op_desc[type]);
if (kid->op_type == OP_CONST
- && ( !SvROK(cSVOPx_sv(kid))
+ && ( !SvROK(cSVOPx_sv(kid))
|| SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV )
)
bad_type_pv(numargs, "array", o, kid);
@@ -12209,7 +13488,7 @@ Perl_ck_smartmatch(pTHX_ OP *o)
if (0 == (o->op_flags & OPf_SPECIAL)) {
OP *first = cBINOPo->op_first;
OP *second = OpSIBLING(first);
-
+
/* Implicitly take a reference to an array or hash */
/* remove the original two siblings, then add back the
@@ -12221,7 +13500,7 @@ Perl_ck_smartmatch(pTHX_ OP *o)
second = ref_array_or_hash(second);
op_sibling_splice(o, NULL, 0, second);
op_sibling_splice(o, NULL, 0, first);
-
+
/* Implicitly take a reference to a regular expression */
if (first->op_type == OP_MATCH && !(first->op_flags & OPf_STACKED)) {
OpTYPE_set(first, OP_QR);
@@ -12230,7 +13509,7 @@ Perl_ck_smartmatch(pTHX_ OP *o)
OpTYPE_set(second, OP_QR);
}
}
-
+
return o;
}
@@ -12466,7 +13745,16 @@ Perl_ck_refassign(pTHX_ OP *o)
OP * const kid = cUNOPx(kidparent)->op_first;
o->op_private |= OPpLVREF_CV;
if (kid->op_type == OP_GV) {
+ SV *sv = (SV*)cGVOPx_gv(kid);
varop = kidparent;
+ if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) {
+ /* a CVREF here confuses pp_refassign, so make sure
+ it gets a GV */
+ CV *const cv = (CV*)SvRV(sv);
+ SV *name_sv = sv_2mortal(newSVhek(CvNAME_HEK(cv)));
+ (void)gv_init_sv((GV*)sv, CvSTASH(cv), name_sv, 0);
+ assert(SvTYPE(sv) == SVt_PVGV);
+ }
goto detach_and_stack;
}
if (kid->op_type != OP_PADCV) goto bad;
@@ -12547,8 +13835,9 @@ Perl_ck_require(pTHX_ OP *o)
HEK *hek;
if (was_readonly) {
- SvREADONLY_off(sv);
- }
+ SvREADONLY_off(sv);
+ }
+
if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0);
s = SvPVX(sv);
@@ -12976,7 +14265,7 @@ Perl_ck_stringify(pTHX_ OP *o)
}
return ck_fun(o);
}
-
+
OP *
Perl_ck_join(pTHX_ OP *o)
{
@@ -13017,7 +14306,7 @@ Perl_ck_join(pTHX_ OP *o)
}
/*
-=for apidoc Am|CV *|rv2cv_op_cv|OP *cvop|U32 flags
+=for apidoc rv2cv_op_cv
Examines an op, which is expected to identify a subroutine at runtime,
and attempts to determine at compile time which subroutine it identifies.
@@ -13052,6 +14341,11 @@ referencing GV. The resulting C<GV*> is cast to C<CV*> to be returned.
A null pointer is returned as usual if there is no statically-determinable
subroutine.
+=for apidoc Amnh||OPpEARLY_CV
+=for apidoc Amnh||OPpENTERSUB_AMPER
+=for apidoc Amnh||RV2CVOPCV_MARK_EARLY
+=for apidoc Amnh||RV2CVOPCV_RETURN_NAME_GV
+
=cut
*/
@@ -13145,7 +14439,7 @@ Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags)
}
/*
-=for apidoc Am|OP *|ck_entersub_args_list|OP *entersubop
+=for apidoc ck_entersub_args_list
Performs the default fixup of the arguments part of an C<entersub>
op tree. This consists of applying list context to each of the
@@ -13182,7 +14476,7 @@ Perl_ck_entersub_args_list(pTHX_ OP *entersubop)
}
/*
-=for apidoc Am|OP *|ck_entersub_args_proto|OP *entersubop|GV *namegv|SV *protosv
+=for apidoc ck_entersub_args_proto
Performs the fixup of the arguments part of an C<entersub> op tree
based on a subroutine prototype. This makes various modifications to
@@ -13255,7 +14549,7 @@ Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
continue;
case '_':
/* _ must be at the end */
- if (proto[1] && !strchr(";@%", proto[1]))
+ if (proto[1] && !memCHRs(";@%", proto[1]))
goto oops;
/* FALLTHROUGH */
case '$':
@@ -13430,7 +14724,7 @@ Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
}
/*
-=for apidoc Am|OP *|ck_entersub_args_proto_or_list|OP *entersubop|GV *namegv|SV *protosv
+=for apidoc ck_entersub_args_proto_or_list
Performs the fixup of the arguments part of an C<entersub> op tree either
based on a subroutine prototype or using default list-context processing.
@@ -13487,7 +14781,7 @@ Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf,
SVfARG(namesv)), SvUTF8(namesv));
}
-
+
op_free(entersubop);
switch(cvflags >> 16) {
case 'F': return newSVOP(OP_CONST, 0,
@@ -13516,7 +14810,7 @@ Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
parent = aop;
aop = cUNOPx(aop)->op_first;
}
-
+
first = prev = aop;
aop = OpSIBLING(aop);
/* find last sibling */
@@ -13544,7 +14838,7 @@ Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
if (cvflags == (OP_ENTEREVAL | (1<<16)))
flags |= OPpEVAL_BYTES <<8;
-
+
switch (PL_opargs[opnum] & OA_CLASS_MASK) {
case OA_UNOP:
case OA_BASEOP_OR_UNOP:
@@ -13582,7 +14876,7 @@ Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv)
}
/*
-=for apidoc Am|void|cv_get_call_checker_flags|CV *cv|U32 gflags|Perl_call_checker *ckfun_p|SV **ckobj_p|U32 *ckflags_p
+=for apidoc cv_get_call_checker_flags
Retrieves the function that will be used to fix up a call to C<cv>.
Specifically, the function is applied to an C<entersub> op tree for a
@@ -13628,7 +14922,9 @@ C<gflags> is a bitset passed into C<cv_get_call_checker_flags>, in which
only the C<CALL_CHECKER_REQUIRE_GV> bit currently has a defined meaning
(for which see above). All other bits should be clear.
-=for apidoc Am|void|cv_get_call_checker|CV *cv|Perl_call_checker *ckfun_p|SV **ckobj_p
+=for apidoc Amnh||CALL_CHECKER_REQUIRE_GV
+
+=for apidoc cv_get_call_checker
The original form of L</cv_get_call_checker_flags>, which does not return
checker flags. When using a checker function returned by this function,
@@ -13667,7 +14963,7 @@ Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p)
}
/*
-=for apidoc Am|void|cv_set_call_checker_flags|CV *cv|Perl_call_checker ckfun|SV *ckobj|U32 ckflags
+=for apidoc cv_set_call_checker_flags
Sets the function that will be used to fix up a call to C<cv>.
Specifically, the function is applied to an C<entersub> op tree for a
@@ -13703,7 +14999,7 @@ bits should be clear.
The current setting for a particular CV can be retrieved by
L</cv_get_call_checker_flags>.
-=for apidoc Am|void|cv_set_call_checker|CV *cv|Perl_call_checker ckfun|SV *ckobj
+=for apidoc cv_set_call_checker
The original form of L</cv_set_call_checker_flags>, which passes it the
C<CALL_CHECKER_REQUIRE_GV> flag for backward-compatibility. The effect
@@ -13830,7 +15126,7 @@ Perl_ck_subr(pTHX_ OP *o)
if (CvISXSUB(cv) || !CvROOT(cv))
S_entersub_alloc_targ(aTHX_ o);
if (!namegv) {
- /* The original call checker API guarantees that a GV will be
+ /* The original call checker API guarantees that a GV will
be provided with the right name. So, if the old API was
used (or the REQUIRE_GV flag was passed), we have to reify
the CV’s GV, unless this is an anonymous sub. This is not
@@ -14014,10 +15310,26 @@ Perl_ck_length(pTHX_ OP *o)
}
+OP *
+Perl_ck_isa(pTHX_ OP *o)
+{
+ OP *classop = cBINOPo->op_last;
+
+ PERL_ARGS_ASSERT_CK_ISA;
+
+ /* Convert barename into PV */
+ if(classop->op_type == OP_CONST && classop->op_private & OPpCONST_BARE) {
+ /* TODO: Optionally convert package to raw HV here */
+ classop->op_private &= ~(OPpCONST_BARE|OPpCONST_STRICT);
+ }
+
+ return o;
+}
-/*
+
+/*
---------------------------------------------------------
-
+
Common vars in list assignment
There now follows some enums and static functions for detecting
@@ -14027,43 +15339,43 @@ Perl_ck_length(pTHX_ OP *o)
----
First some random observations:
-
+
* If a lexical var is an alias of something else, e.g.
for my $x ($lex, $pkg, $a[0]) {...}
then the act of aliasing will increase the reference count of the SV
-
+
* If a package var is an alias of something else, it may still have a
reference count of 1, depending on how the alias was created, e.g.
in *a = *b, $a may have a refcount of 1 since the GP is shared
with a single GvSV pointer to the SV. So If it's an alias of another
package var, then RC may be 1; if it's an alias of another scalar, e.g.
a lexical var or an array element, then it will have RC > 1.
-
+
* There are many ways to create a package alias; ultimately, XS code
may quite legally do GvSV(gv) = SvREFCNT_inc(sv) for example, so
run-time tracing mechanisms are unlikely to be able to catch all cases.
-
+
* When the LHS is all my declarations, the same vars can't appear directly
on the RHS, but they can indirectly via closures, aliasing and lvalue
subs. But those techniques all involve an increase in the lexical
scalar's ref count.
-
+
* When the LHS is all lexical vars (but not necessarily my declarations),
it is possible for the same lexicals to appear directly on the RHS, and
without an increased ref count, since the stack isn't refcounted.
This case can be detected at compile time by scanning for common lex
vars with PL_generation.
-
+
* lvalue subs defeat common var detection, but they do at least
return vars with a temporary ref count increment. Also, you can't
tell at compile time whether a sub call is lvalue.
-
-
+
+
So...
-
+
A: There are a few circumstances where there definitely can't be any
commonality:
-
+
LHS empty: () = (...);
RHS empty: (....) = ();
RHS contains only constants or other 'can't possibly be shared'
@@ -14076,165 +15388,165 @@ Perl_ck_length(pTHX_ OP *o)
RHS contains a single element with no aggregate on LHS: e.g.
($a,$b,$c) = ($x); again, once $a has been modified, its value
won't be used again.
-
+
B: If LHS are all 'my' lexical var declarations (or safe ops, which
we can ignore):
-
+
my ($a, $b, @c) = ...;
-
+
Due to closure and goto tricks, these vars may already have content.
For the same reason, an element on the RHS may be a lexical or package
alias of one of the vars on the left, or share common elements, for
example:
-
+
my ($x,$y) = f(); # $x and $y on both sides
sub f : lvalue { ($x,$y) = (1,2); $y, $x }
-
+
and
-
+
my $ra = f();
my @a = @$ra; # elements of @a on both sides
sub f { @a = 1..4; \@a }
-
-
+
+
First, just consider scalar vars on LHS:
-
+
RHS is safe only if (A), or in addition,
* contains only lexical *scalar* vars, where neither side's
- lexicals have been flagged as aliases
-
+ lexicals have been flagged as aliases
+
If RHS is not safe, then it's always legal to check LHS vars for
RC==1, since the only RHS aliases will always be associated
with an RC bump.
-
+
Note that in particular, RHS is not safe if:
-
+
* it contains package scalar vars; e.g.:
-
+
f();
my ($x, $y) = (2, $x_alias);
sub f { $x = 1; *x_alias = \$x; }
-
+
* It contains other general elements, such as flattened or
* spliced or single array or hash elements, e.g.
-
+
f();
- my ($x,$y) = @a; # or $a[0] or @a{@b} etc
-
+ my ($x,$y) = @a; # or $a[0] or @a{@b} etc
+
sub f {
($x, $y) = (1,2);
use feature 'refaliasing';
\($a[0], $a[1]) = \($y,$x);
}
-
+
It doesn't matter if the array/hash is lexical or package.
-
+
* it contains a function call that happens to be an lvalue
sub which returns one or more of the above, e.g.
-
+
f();
my ($x,$y) = f();
-
+
sub f : lvalue {
($x, $y) = (1,2);
*x1 = \$x;
$y, $x1;
}
-
+
(so a sub call on the RHS should be treated the same
as having a package var on the RHS).
-
+
* any other "dangerous" thing, such an op or built-in that
returns one of the above, e.g. pp_preinc
-
-
+
+
If RHS is not safe, what we can do however is at compile time flag
that the LHS are all my declarations, and at run time check whether
all the LHS have RC == 1, and if so skip the full scan.
-
+
Now consider array and hash vars on LHS: e.g. my (...,@a) = ...;
-
+
Here the issue is whether there can be elements of @a on the RHS
which will get prematurely freed when @a is cleared prior to
assignment. This is only a problem if the aliasing mechanism
is one which doesn't increase the refcount - only if RC == 1
will the RHS element be prematurely freed.
-
+
Because the array/hash is being INTROed, it or its elements
can't directly appear on the RHS:
-
+
my (@a) = ($a[0], @a, etc) # NOT POSSIBLE
-
+
but can indirectly, e.g.:
-
+
my $r = f();
my (@a) = @$r;
sub f { @a = 1..3; \@a }
-
+
So if the RHS isn't safe as defined by (A), we must always
mortalise and bump the ref count of any remaining RHS elements
when assigning to a non-empty LHS aggregate.
-
+
Lexical scalars on the RHS aren't safe if they've been involved in
aliasing, e.g.
-
+
use feature 'refaliasing';
-
+
f();
\(my $lex) = \$pkg;
my @a = ($lex,3); # equivalent to ($a[0],3)
-
+
sub f {
@a = (1,2);
\$pkg = \$a[0];
}
-
+
Similarly with lexical arrays and hashes on the RHS:
-
+
f();
my @b;
my @a = (@b);
-
+
sub f {
@a = (1,2);
\$b[0] = \$a[1];
\$b[1] = \$a[0];
}
-
-
-
+
+
+
C: As (B), but in addition the LHS may contain non-intro lexicals, e.g.
my $a; ($a, my $b) = (....);
-
+
The difference between (B) and (C) is that it is now physically
possible for the LHS vars to appear on the RHS too, where they
are not reference counted; but in this case, the compile-time
PL_generation sweep will detect such common vars.
-
+
So the rules for (C) differ from (B) in that if common vars are
detected, the runtime "test RC==1" optimisation can no longer be used,
and a full mark and sweep is required
-
+
D: As (C), but in addition the LHS may contain package vars.
-
+
Since package vars can be aliased without a corresponding refcount
increase, all bets are off. It's only safe if (A). E.g.
-
+
my ($x, $y) = (1,2);
-
+
for $x_alias ($x) {
($x_alias, $y) = (3, $x); # whoops
}
-
+
Ditto for LHS aggregate package vars.
-
+
E: Any other dangerous ops on LHS, e.g.
(f(), $a[0], @$r) = (...);
-
+
this is similar to (E) in that all bets are off. In addition, it's
impossible to determine at compile time whether the LHS
contains a scalar or an aggregate, e.g.
-
+
sub f : lvalue { @a }
(f()) = 1..3;
@@ -14290,7 +15602,6 @@ S_aassign_padcheck(pTHX_ OP* o, bool rhs)
'rhs' indicates whether we're scanning the LHS or RHS. If the former, we
set PL_generation on lexical vars; if the latter, we see if
PL_generation matches.
- 'top' indicates whether we're recursing or at the top level.
'scalars_p' is a pointer to a counter of the number of scalar SVs seen.
This fn will increment it by the number seen. It's not intended to
be an accurate count (especially as many ops can push a variable
@@ -14299,10 +15610,16 @@ S_aassign_padcheck(pTHX_ OP* o, bool rhs)
*/
static int
-S_aassign_scan(pTHX_ OP* o, bool rhs, bool top, int *scalars_p)
+S_aassign_scan(pTHX_ OP* o, bool rhs, int *scalars_p)
{
+ OP *top_op = o;
+ OP *effective_top_op = o;
+ int all_flags = 0;
+
+ while (1) {
+ bool top = o == effective_top_op;
int flags = 0;
- bool kid_top = FALSE;
+ OP* next_kid = NULL;
/* first, look for a solitary @_ on the RHS */
if ( rhs
@@ -14323,50 +15640,58 @@ S_aassign_scan(pTHX_ OP* o, bool rhs, bool top, int *scalars_p)
&& kid->op_type == OP_GV
&& cGVOPx_gv(kid) == PL_defgv
)
- flags |= AAS_DEFAV;
+ flags = AAS_DEFAV;
}
switch (o->op_type) {
case OP_GVSV:
(*scalars_p)++;
- return AAS_PKG_SCALAR;
+ all_flags |= AAS_PKG_SCALAR;
+ goto do_next;
case OP_PADAV:
case OP_PADHV:
(*scalars_p) += 2;
/* if !top, could be e.g. @a[0,1] */
- if (top && (o->op_flags & OPf_REF))
- return (o->op_private & OPpLVAL_INTRO)
- ? AAS_MY_AGG : AAS_LEX_AGG;
- return AAS_DANGEROUS;
+ all_flags |= (top && (o->op_flags & OPf_REF))
+ ? ((o->op_private & OPpLVAL_INTRO)
+ ? AAS_MY_AGG : AAS_LEX_AGG)
+ : AAS_DANGEROUS;
+ goto do_next;
case OP_PADSV:
{
int comm = S_aassign_padcheck(aTHX_ o, rhs)
? AAS_LEX_SCALAR_COMM : 0;
(*scalars_p)++;
- return (o->op_private & OPpLVAL_INTRO)
+ all_flags |= (o->op_private & OPpLVAL_INTRO)
? (AAS_MY_SCALAR|comm) : (AAS_LEX_SCALAR|comm);
+ goto do_next;
+
}
case OP_RV2AV:
case OP_RV2HV:
(*scalars_p) += 2;
if (cUNOPx(o)->op_first->op_type != OP_GV)
- return AAS_DANGEROUS; /* @{expr}, %{expr} */
+ all_flags |= AAS_DANGEROUS; /* @{expr}, %{expr} */
/* @pkg, %pkg */
/* if !top, could be e.g. @a[0,1] */
- if (top && (o->op_flags & OPf_REF))
- return AAS_PKG_AGG;
- return AAS_DANGEROUS;
+ else if (top && (o->op_flags & OPf_REF))
+ all_flags |= AAS_PKG_AGG;
+ else
+ all_flags |= AAS_DANGEROUS;
+ goto do_next;
case OP_RV2SV:
(*scalars_p)++;
if (cUNOPx(o)->op_first->op_type != OP_GV) {
(*scalars_p) += 2;
- return AAS_DANGEROUS; /* ${expr} */
+ all_flags |= AAS_DANGEROUS; /* ${expr} */
}
- return AAS_PKG_SCALAR; /* $pkg */
+ else
+ all_flags |= AAS_PKG_SCALAR; /* $pkg */
+ goto do_next;
case OP_SPLIT:
if (o->op_private & OPpSPLIT_ASSIGN) {
@@ -14378,30 +15703,36 @@ S_aassign_scan(pTHX_ OP* o, bool rhs, bool top, int *scalars_p)
* ... = @a;
*/
- if (o->op_flags & OPf_STACKED)
+ if (o->op_flags & OPf_STACKED) {
/* @{expr} = split() - the array expression is tacked
* on as an extra child to split - process kid */
- return S_aassign_scan(aTHX_ cLISTOPo->op_last, rhs,
- top, scalars_p);
+ next_kid = cLISTOPo->op_last;
+ goto do_next;
+ }
/* ... else array is directly attached to split op */
(*scalars_p) += 2;
- if (PL_op->op_private & OPpSPLIT_LEX)
- return (o->op_private & OPpLVAL_INTRO)
- ? AAS_MY_AGG : AAS_LEX_AGG;
- else
- return AAS_PKG_AGG;
+ all_flags |= (PL_op->op_private & OPpSPLIT_LEX)
+ ? ((o->op_private & OPpLVAL_INTRO)
+ ? AAS_MY_AGG : AAS_LEX_AGG)
+ : AAS_PKG_AGG;
+ goto do_next;
}
(*scalars_p)++;
/* other args of split can't be returned */
- return AAS_SAFE_SCALAR;
+ all_flags |= AAS_SAFE_SCALAR;
+ goto do_next;
case OP_UNDEF:
- /* undef counts as a scalar on the RHS:
- * (undef, $x) = ...; # only 1 scalar on LHS: always safe
+ /* undef on LHS following a var is significant, e.g.
+ * my $x = 1;
+ * @a = (($x, undef) = (2 => $x));
+ * # @a shoul be (2,1) not (2,2)
+ *
+ * undef on RHS counts as a scalar:
* ($x, $y) = (undef, $x); # 2 scalars on RHS: unsafe
*/
- if (rhs)
+ if ((!rhs && *scalars_p) || rhs)
(*scalars_p)++;
flags = AAS_SAFE_SCALAR;
break;
@@ -14411,16 +15742,14 @@ S_aassign_scan(pTHX_ OP* o, bool rhs, bool top, int *scalars_p)
/* these are all no-ops; they don't push a potentially common SV
* onto the stack, so they are neither AAS_DANGEROUS nor
* AAS_SAFE_SCALAR */
- return 0;
+ goto do_next;
case OP_PADRANGE: /* Ignore padrange; checking its siblings is enough */
break;
case OP_NULL:
case OP_LIST:
- /* these do nothing but may have children; but their children
- * should also be treated as top-level */
- kid_top = top;
+ /* these do nothing, but may have children */
break;
default:
@@ -14434,28 +15763,58 @@ S_aassign_scan(pTHX_ OP* o, bool rhs, bool top, int *scalars_p)
&& (o->op_private & OPpTARGET_MY))
{
(*scalars_p)++;
- return S_aassign_padcheck(aTHX_ o, rhs)
- ? AAS_LEX_SCALAR_COMM : AAS_LEX_SCALAR;
+ all_flags |= S_aassign_padcheck(aTHX_ o, rhs)
+ ? AAS_LEX_SCALAR_COMM : AAS_LEX_SCALAR;
+ goto do_next;
}
/* if its an unrecognised, non-dangerous op, assume that it
- * it the cause of at least one safe scalar */
+ * is the cause of at least one safe scalar */
(*scalars_p)++;
flags = AAS_SAFE_SCALAR;
break;
}
- /* XXX this assumes that all other ops are "transparent" - i.e. that
+ all_flags |= flags;
+
+ /* by default, process all kids next
+ * XXX this assumes that all other ops are "transparent" - i.e. that
* they can return some of their children. While this true for e.g.
* sort and grep, it's not true for e.g. map. We really need a
* 'transparent' flag added to regen/opcodes
*/
if (o->op_flags & OPf_KIDS) {
- OP *kid;
- for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid))
- flags |= S_aassign_scan(aTHX_ kid, rhs, kid_top, scalars_p);
+ next_kid = cUNOPo->op_first;
+ /* these ops do nothing but may have children; but their
+ * children should also be treated as top-level */
+ if ( o == effective_top_op
+ && (o->op_type == OP_NULL || o->op_type == OP_LIST)
+ )
+ effective_top_op = next_kid;
}
- return flags;
+
+
+ /* If next_kid is set, someone in the code above wanted us to process
+ * that kid and all its remaining siblings. Otherwise, work our way
+ * back up the tree */
+ do_next:
+ while (!next_kid) {
+ if (o == top_op)
+ return all_flags; /* at top; no parents/siblings to try */
+ if (OpHAS_SIBLING(o)) {
+ next_kid = o->op_sibparent;
+ if (o == effective_top_op)
+ effective_top_op = next_kid;
+ }
+ else
+ if (o == effective_top_op)
+ effective_top_op = o->op_sibparent;
+ o = o->op_sibparent; /* try parent's next sibling */
+
+ }
+ o = next_kid;
+ } /* while */
+
}
@@ -14592,12 +15951,11 @@ S_maybe_multideref(pTHX_ OP *start, OP *orig_o, UV orig_action, U8 hints)
bool next_is_hash = FALSE; /* is the next lookup to be a hash? */
bool is_last = FALSE; /* no more derefs to follow */
bool maybe_aelemfast = FALSE; /* we can replace with aelemfast? */
+ UV action_word = 0; /* all actions so far */
UNOP_AUX_item *arg = arg_buf;
UNOP_AUX_item *action_ptr = arg_buf;
- if (pass)
- action_ptr->uv = 0;
- arg++;
+ arg++; /* reserve slot for first action word */
switch (action) {
case MDEREF_HV_gvsv_vivify_rv2hv_helem:
@@ -14988,16 +16346,16 @@ S_maybe_multideref(pTHX_ OP *start, OP *orig_o, UV orig_action, U8 hints)
arg--;
}
- if (pass)
- action_ptr->uv |= (action << (action_ix * MDEREF_SHIFT));
+ action_word |= (action << (action_ix * MDEREF_SHIFT));
action_ix++;
action_count++;
- /* if there's no space for the next action, create a new slot
+ /* if there's no space for the next action, reserve a new slot
* for it *before* we start adding args for that action */
if ((action_ix + 1) * MDEREF_SHIFT > UVSIZE*8) {
- action_ptr = arg;
if (pass)
- arg->uv = 0;
+ action_ptr->uv = action_word;
+ action_word = 0;
+ action_ptr = arg;
arg++;
action_ix = 0;
}
@@ -15005,6 +16363,12 @@ S_maybe_multideref(pTHX_ OP *start, OP *orig_o, UV orig_action, U8 hints)
/* success! */
+ if (!action_ix)
+ /* slot reserved for next action word not now needed */
+ arg--;
+ else if (pass)
+ action_ptr->uv = action_word;
+
if (pass) {
OP *mderef;
OP *p, *q;
@@ -15702,8 +17066,17 @@ Perl_rpeep(pTHX_ OP *o)
this optimisation if the first NEXTSTATE has a label. */
if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) {
OP *nextop = o->op_next;
- while (nextop && nextop->op_type == OP_NULL)
- nextop = nextop->op_next;
+ while (nextop) {
+ switch (nextop->op_type) {
+ case OP_NULL:
+ case OP_SCALAR:
+ case OP_LINESEQ:
+ case OP_SCOPE:
+ nextop = nextop->op_next;
+ continue;
+ }
+ break;
+ }
if (nextop && (nextop->op_type == OP_NEXTSTATE)) {
op_null(o);
@@ -16191,13 +17564,14 @@ Perl_rpeep(pTHX_ OP *o)
}
break;
-
+
case OP_NOT:
break;
case OP_AND:
case OP_OR:
case OP_DOR:
+ case OP_CMPCHAIN_AND:
while (cLOGOP->op_other->op_type == OP_NULL)
cLOGOP->op_other = cLOGOP->op_other->op_next;
while (o->op_next && ( o->op_type == o->op_next->op_type
@@ -16221,7 +17595,7 @@ Perl_rpeep(pTHX_ OP *o)
DEFER(cLOGOP->op_other);
o->op_opt = 1;
break;
-
+
case OP_GREPWHILE:
if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR)
S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0);
@@ -16365,7 +17739,7 @@ Perl_rpeep(pTHX_ OP *o)
iter = enter->op_next;
if (!iter || iter->op_type != OP_ITER)
break;
-
+
expushmark = enter->op_first;
if (!expushmark || expushmark->op_type != OP_NULL
|| expushmark->op_targ != OP_PUSHMARK)
@@ -16518,10 +17892,10 @@ Perl_rpeep(pTHX_ OP *o)
PL_generation++;
/* scan LHS */
lscalars = 0;
- l = S_aassign_scan(aTHX_ cLISTOPo->op_last, FALSE, 1, &lscalars);
+ l = S_aassign_scan(aTHX_ cLISTOPo->op_last, FALSE, &lscalars);
/* scan RHS */
rscalars = 0;
- r = S_aassign_scan(aTHX_ cLISTOPo->op_first, TRUE, 1, &rscalars);
+ r = S_aassign_scan(aTHX_ cLISTOPo->op_first, TRUE, &rscalars);
lr = (l|r);
@@ -16621,13 +17995,13 @@ Perl_rpeep(pTHX_ OP *o)
break;
case OP_CUSTOM: {
- Perl_cpeep_t cpeep =
+ Perl_cpeep_t cpeep =
XopENTRYCUSTOM(o, xop_peep);
if (cpeep)
cpeep(aTHX_ o, oldop);
break;
}
-
+
}
/* did we just null the current op? If so, re-process it to handle
* eliding "empty" ops from the chain */
@@ -16652,7 +18026,7 @@ Perl_peep(pTHX_ OP *o)
/*
=head1 Custom Operators
-=for apidoc Ao||custom_op_xop
+=for apidoc Perl_custom_op_xop
Return the XOP structure for a given custom op. This macro should be
considered internal to C<OP_NAME> and the other access macros: use them instead.
This macro does call a function. Prior
@@ -16809,7 +18183,7 @@ Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field)
}
/*
-=for apidoc Ao||custom_op_register
+=for apidoc custom_op_register
Register a custom op. See L<perlguts/"Custom Operators">.
=cut
@@ -17063,7 +18437,7 @@ hook variables.
*/
/*
-=for apidoc Am|void|wrap_op_checker|Optype opcode|Perl_check_t new_checker|Perl_check_t *old_checker_p
+=for apidoc wrap_op_checker
Puts a C function into the chain of check functions for a specified op
type. This is the preferred way to manipulate the L</PL_check> array.
diff --git a/gnu/usr.bin/perl/op.h b/gnu/usr.bin/perl/op.h
index c9f05b22712..b9f6da82c9d 100644
--- a/gnu/usr.bin/perl/op.h
+++ b/gnu/usr.bin/perl/op.h
@@ -24,7 +24,7 @@
* !op_slabbed.
* op_savefree on savestack via SAVEFREEOP
* op_folded Result/remainder of a constant fold operation.
- * op_moresib this op is is not the last sibling
+ * op_moresib this op is not the last sibling
* op_spare One spare bit
* op_flags Flags common to all operations. See OPf_* below.
* op_private Flags peculiar to a particular operation (BUT,
@@ -85,7 +85,7 @@ Deprecated. Use C<GIMME_V> instead.
=cut
*/
-#define GIMME_V OP_GIMME(PL_op, block_gimme())
+#define GIMME_V Perl_gimme_V(aTHX)
/* Public flags */
@@ -146,6 +146,7 @@ Deprecated. Use C<GIMME_V> instead.
/* On OP_PADRANGE, push @_ */
/* On OP_DUMP, has no label */
/* On OP_UNSTACK, in a C-style for loop */
+ /* On OP_READLINE, it's for <<>>, not <> */
/* There is no room in op_flags for this one, so it has its own bit-
field member (op_folded) instead. The flag is only used to tell
op_convert_list to set op_folded. */
@@ -169,8 +170,9 @@ Deprecated. Use C<GIMME_V> instead.
* from data in regen/op_private */
-#define OPpTRANS_ALL (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE)
-
+#define OPpTRANS_ALL (OPpTRANS_USE_SVOP|OPpTRANS_CAN_FORCE_UTF8|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE)
+#define OPpTRANS_FROM_UTF OPpTRANS_USE_SVOP
+#define OPpTRANS_TO_UTF OPpTRANS_CAN_FORCE_UTF8
/* Mask for OP_ENTERSUB flags, the absence of which must be propagated
@@ -179,7 +181,7 @@ Deprecated. Use C<GIMME_V> instead.
/* things that can be elements of op_aux */
-typedef union {
+typedef union {
PADOFFSET pad_offset;
SV *sv;
IV iv;
@@ -327,48 +329,52 @@ struct pmop {
/* Set by the parser if it discovers an error, so the regex shouldn't be
* compiled */
-#define PMf_HAS_ERROR (1U<<(PMf_BASE_SHIFT+4))
+#define PMf_HAS_ERROR (1U<<(PMf_BASE_SHIFT+3))
/* 'use re "taint"' in scope: taint $1 etc. if target tainted */
-#define PMf_RETAINT (1U<<(PMf_BASE_SHIFT+5))
+#define PMf_RETAINT (1U<<(PMf_BASE_SHIFT+4))
/* match successfully only once per reset, with related flag RXf_USED in
* re->extflags holding state. This is used only for ?? matches, and only on
* OP_MATCH and OP_QR */
-#define PMf_ONCE (1U<<(PMf_BASE_SHIFT+6))
+#define PMf_ONCE (1U<<(PMf_BASE_SHIFT+5))
/* PMf_ONCE, i.e. ?pat?, has matched successfully. Not used under threading. */
-#define PMf_USED (1U<<(PMf_BASE_SHIFT+7))
+#define PMf_USED (1U<<(PMf_BASE_SHIFT+6))
/* subst replacement is constant */
-#define PMf_CONST (1U<<(PMf_BASE_SHIFT+8))
+#define PMf_CONST (1U<<(PMf_BASE_SHIFT+7))
/* keep 1st runtime pattern forever */
-#define PMf_KEEP (1U<<(PMf_BASE_SHIFT+9))
+#define PMf_KEEP (1U<<(PMf_BASE_SHIFT+8))
-#define PMf_GLOBAL (1U<<(PMf_BASE_SHIFT+10)) /* pattern had a g modifier */
+#define PMf_GLOBAL (1U<<(PMf_BASE_SHIFT+9)) /* pattern had a g modifier */
/* don't reset pos() if //g fails */
-#define PMf_CONTINUE (1U<<(PMf_BASE_SHIFT+11))
+#define PMf_CONTINUE (1U<<(PMf_BASE_SHIFT+10))
/* evaluating replacement as expr */
-#define PMf_EVAL (1U<<(PMf_BASE_SHIFT+12))
+#define PMf_EVAL (1U<<(PMf_BASE_SHIFT+11))
/* Return substituted string instead of modifying it. */
-#define PMf_NONDESTRUCT (1U<<(PMf_BASE_SHIFT+13))
+#define PMf_NONDESTRUCT (1U<<(PMf_BASE_SHIFT+12))
/* the pattern has a CV attached (currently only under qr/...(?{}).../) */
-#define PMf_HAS_CV (1U<<(PMf_BASE_SHIFT+14))
+#define PMf_HAS_CV (1U<<(PMf_BASE_SHIFT+13))
/* op_code_list is private; don't free it etc. It may well point to
* code within another sub, with different pad etc */
-#define PMf_CODELIST_PRIVATE (1U<<(PMf_BASE_SHIFT+15))
+#define PMf_CODELIST_PRIVATE (1U<<(PMf_BASE_SHIFT+14))
/* the PMOP is a QR (we should be able to detect that from the op type,
* but the regex compilation API passes just the pm flags, not the op
* itself */
-#define PMf_IS_QR (1U<<(PMf_BASE_SHIFT+16))
-#define PMf_USE_RE_EVAL (1U<<(PMf_BASE_SHIFT+17)) /* use re'eval' in scope */
+#define PMf_IS_QR (1U<<(PMf_BASE_SHIFT+15))
+#define PMf_USE_RE_EVAL (1U<<(PMf_BASE_SHIFT+16)) /* use re'eval' in scope */
+
+/* Means that this is a subpattern being compiled while processing a \p{}
+ * wildcard. This isn't called from op.c, but it is passed as a pm flag. */
+#define PMf_WILDCARD (1U<<(PMf_BASE_SHIFT+17))
/* See comments at the beginning of these defines about adding bits. The
* highest bit position should be used, so that if PMf_BASE_SHIFT gets
@@ -689,20 +695,27 @@ least an C<UNOP>.
#ifdef PERL_CORE
struct opslot {
- /* keep opslot_next first */
- OPSLOT * opslot_next; /* next slot */
- OPSLAB * opslot_slab; /* owner */
+ U16 opslot_size; /* size of this slot (in pointers) */
+ U16 opslot_offset; /* offset from start of slab (in ptr units) */
OP opslot_op; /* the op itself */
};
struct opslab {
- OPSLOT * opslab_first; /* first op in this slab */
OPSLAB * opslab_next; /* next slab */
- OP * opslab_freed; /* chain of freed ops */
- size_t opslab_refcnt; /* number of ops */
+ OPSLAB * opslab_head; /* first slab in chain */
+ OP ** opslab_freed; /* array of sized chains of freed ops (head only)*/
+ size_t opslab_refcnt; /* number of ops (head slab only) */
+ U16 opslab_freed_size; /* allocated size of opslab_freed */
+ U16 opslab_size; /* size of slab in pointers,
+ including header */
+ U16 opslab_free_space; /* space available in this slab
+ for allocating new ops (in ptr
+ units) */
# ifdef PERL_DEBUG_READONLY_OPS
- U16 opslab_size; /* size of slab in pointers */
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 */
};
@@ -711,7 +724,11 @@ struct opslab {
# define OPSLOT_HEADER_P (OPSLOT_HEADER/sizeof(I32 *))
# define OpSLOT(o) (assert_(o->op_slabbed) \
(OPSLOT *)(((char *)o)-OPSLOT_HEADER))
-# define OpSLAB(o) OpSLOT(o)->opslot_slab
+
+/* 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)
+
# define OpslabREFCNT_dec(slab) \
(((slab)->opslab_refcnt == 1) \
? opslab_free_nopad(slab) \
@@ -737,29 +754,29 @@ struct block_hooks {
=for apidoc mx|U32|BhkFLAGS|BHK *hk
Return the BHK's flags.
-=for apidoc mx|void *|BhkENTRY|BHK *hk|which
+=for apidoc mxu|void *|BhkENTRY|BHK *hk|which
Return an entry from the BHK structure. C<which> is a preprocessor token
indicating which entry to return. If the appropriate flag is not set
this will return C<NULL>. The type of the return value depends on which
entry you ask for.
-=for apidoc Amx|void|BhkENTRY_set|BHK *hk|which|void *ptr
+=for apidoc Amxu|void|BhkENTRY_set|BHK *hk|which|void *ptr
Set an entry in the BHK structure, and set the flags to indicate it is
valid. C<which> is a preprocessing token indicating which entry to set.
The type of C<ptr> depends on the entry.
-=for apidoc Amx|void|BhkDISABLE|BHK *hk|which
+=for apidoc Amxu|void|BhkDISABLE|BHK *hk|which
Temporarily disable an entry in this BHK structure, by clearing the
appropriate flag. C<which> is a preprocessor token indicating which
entry to disable.
-=for apidoc Amx|void|BhkENABLE|BHK *hk|which
+=for apidoc Amxu|void|BhkENABLE|BHK *hk|which
Re-enable an entry in this BHK structure, by setting the appropriate
flag. C<which> is a preprocessor token indicating which entry to enable.
This will assert (under -DDEBUGGING) if the entry doesn't contain a valid
pointer.
-=for apidoc mx|void|CALL_BLOCK_HOOKS|which|arg
+=for apidoc mxu|void|CALL_BLOCK_HOOKS|which|arg
Call all the registered block hooks for type C<which>. C<which> is a
preprocessing token; the type of C<arg> depends on C<which>.
@@ -1021,14 +1038,16 @@ C<sib> is non-null. For a higher-level interface, see C<L</op_sibling_splice>>.
#define OP_TYPE_ISNT_AND_WASNT(o, type) \
( (o) && OP_TYPE_ISNT_AND_WASNT_NN(o, type) )
+/* should match anything that uses ck_ftst in regen/opcodes */
+#define OP_IS_STAT(op) (OP_IS_FILETEST(op) || (op) == OP_LSTAT || (op) == OP_STAT)
-# define OpHAS_SIBLING(o) (cBOOL((o)->op_moresib))
-# define OpSIBLING(o) (0 + (o)->op_moresib ? (o)->op_sibparent : NULL)
-# define OpMORESIB_set(o, sib) ((o)->op_moresib = 1, (o)->op_sibparent = (sib))
-# define OpLASTSIB_set(o, parent) \
- ((o)->op_moresib = 0, (o)->op_sibparent = (parent))
-# define OpMAYBESIB_set(o, sib, parent) \
- ((o)->op_sibparent = ((o)->op_moresib = cBOOL(sib)) ? (sib) : (parent))
+#define OpHAS_SIBLING(o) (cBOOL((o)->op_moresib))
+#define OpSIBLING(o) (0 + (o)->op_moresib ? (o)->op_sibparent : NULL)
+#define OpMORESIB_set(o, sib) ((o)->op_moresib = 1, (o)->op_sibparent = (sib))
+#define OpLASTSIB_set(o, parent) \
+ ((o)->op_moresib = 0, (o)->op_sibparent = (parent))
+#define OpMAYBESIB_set(o, sib, parent) \
+ ((o)->op_sibparent = ((o)->op_moresib = cBOOL(sib)) ? (sib) : (parent))
#if !defined(PERL_CORE) && !defined(PERL_EXT)
/* for backwards compatibility only */
@@ -1098,11 +1117,27 @@ C<sib> is non-null. For a higher-level interface, see C<L</op_sibling_splice>>.
# define FATAL_ABOVE_FF_MSG \
"Use of strings with code points over 0xFF as arguments to " \
"%s operator is not allowed"
-# define DEPRECATED_ABOVE_FF_MSG \
- "Use of strings with code points over 0xFF as arguments to " \
- "%s operator is deprecated. This will be a fatal error in " \
- "Perl 5.32"
#endif
+#if defined(PERL_IN_OP_C) || defined(PERL_IN_DOOP_C) || defined(PERL_IN_PERL_C)
+# define TR_UNMAPPED (UV)-1
+# define TR_DELETE (UV)-2
+# define TR_R_EMPTY (UV)-3 /* rhs (replacement) is empty */
+# define TR_OOB (UV)-4 /* Something that isn't one of the others */
+# define TR_SPECIAL_HANDLING TR_DELETE /* Can occupy same value */
+# define TR_UNLISTED TR_UNMAPPED /* A synonym whose name is clearer
+ at times */
+#endif
+#if defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C)
+#define RANGE_INDICATOR ILLEGAL_UTF8_BYTE
+#endif
+
+/* stuff for OP_ARGCHECK */
+
+struct op_argcheck_aux {
+ UV params; /* number of positional parameters */
+ UV opt_params; /* number of optional positional parameters */
+ char slurpy; /* presence of slurpy: may be '\0', '@' or '%' */
+};
/*
diff --git a/gnu/usr.bin/perl/opcode.h b/gnu/usr.bin/perl/opcode.h
index ba3bd9e668d..195898e4c33 100644
--- a/gnu/usr.bin/perl/opcode.h
+++ b/gnu/usr.bin/perl/opcode.h
@@ -543,6 +543,9 @@ EXTCONST char* const PL_op_name[] = {
"lvrefslice",
"lvavref",
"anonconst",
+ "isa",
+ "cmpchain_and",
+ "cmpchain_dup",
"freed",
};
#endif
@@ -948,6 +951,9 @@ EXTCONST char* const PL_op_desc[] = {
"lvalue ref assignment",
"lvalue array reference",
"anonymous constant",
+ "derived class test",
+ "comparison chaining",
+ "comparand shuffling",
"freed op",
};
#endif
@@ -1365,6 +1371,9 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */
Perl_pp_lvrefslice,
Perl_pp_lvavref,
Perl_pp_anonconst,
+ Perl_pp_isa,
+ Perl_pp_cmpchain_and,
+ Perl_pp_cmpchain_dup,
}
#endif
#ifdef PERL_PPADDR_INITED
@@ -1778,6 +1787,9 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */
Perl_ck_null, /* lvrefslice */
Perl_ck_null, /* lvavref */
Perl_ck_null, /* anonconst */
+ Perl_ck_isa, /* isa */
+ Perl_ck_null, /* cmpchain_and */
+ Perl_ck_null, /* cmpchain_dup */
}
#endif
#ifdef PERL_CHECK_INITED
@@ -2187,6 +2199,9 @@ EXTCONST U32 PL_opargs[] = {
0x00000440, /* lvrefslice */
0x00000b40, /* lvavref */
0x00000144, /* anonconst */
+ 0x00000204, /* isa */
+ 0x00000300, /* cmpchain_and */
+ 0x00000100, /* cmpchain_dup */
};
#endif
@@ -2203,7 +2218,7 @@ END_EXTERN_C
#define OPpPADHV_ISKEYS 0x01
#define OPpRV2HV_ISKEYS 0x01
#define OPpSORT_NUMERIC 0x01
-#define OPpTRANS_FROM_UTF 0x01
+#define OPpTRANS_CAN_FORCE_UTF8 0x01
#define OPpARGELEM_AV 0x02
#define OPpCONST_NOVER 0x02
#define OPpCOREARGS_DEREF2 0x02
@@ -2212,7 +2227,7 @@ END_EXTERN_C
#define OPpHINT_STRICT_REFS 0x02
#define OPpITER_REVERSED 0x02
#define OPpSORT_INTEGER 0x02
-#define OPpTRANS_TO_UTF 0x02
+#define OPpTRANS_USE_SVOP 0x02
#define OPpARG2_MASK 0x03
#define OPpAVHVSWITCH_MASK 0x03
#define OPpARGELEM_HV 0x04
@@ -2331,8 +2346,6 @@ EXTCONST char PL_op_private_labels[] = {
'$','M','O','D','\0',
'+','1','\0',
'-','\0',
- '<','U','T','F','\0',
- '>','U','T','F','\0',
'A','M','P','E','R','\0',
'A','P','P','E','N','D','\0',
'A','S','S','I','G','N','\0',
@@ -2342,6 +2355,7 @@ EXTCONST char PL_op_private_labels[] = {
'B','O','O','L','\0',
'B','O','O','L','?','\0',
'B','Y','T','E','S','\0',
+ 'C','A','N','_','F','O','R','C','E','_','U','T','F','8','\0',
'C','O','M','P','L','\0',
'C','O','M','_','A','G','G','\0',
'C','O','M','_','R','C','1','\0',
@@ -2420,6 +2434,7 @@ EXTCONST char PL_op_private_labels[] = {
'T','A','R','G','M','Y','\0',
'U','N','I','\0',
'U','N','S','T','A','B','L','E','\0',
+ 'U','S','E','_','S','V','O','P','\0',
'U','T','F','\0',
'k','e','y','\0',
'o','f','f','s','e','t','\0',
@@ -2442,14 +2457,14 @@ EXTCONST char PL_op_private_labels[] = {
EXTCONST I16 PL_op_private_bitfields[] = {
0, 8, -1,
0, 8, -1,
- 0, 583, -1,
+ 0, 597, -1,
0, 8, -1,
0, 8, -1,
- 0, 590, -1,
- 0, 579, -1,
- 1, -1, 0, 547, 1, 40, 2, 290, -1,
- 4, -1, 1, 171, 2, 178, 3, 185, -1,
- 4, -1, 0, 547, 1, 40, 2, 290, 3, 117, -1,
+ 0, 604, -1,
+ 0, 593, -1,
+ 1, -1, 0, 552, 1, 30, 2, 295, -1,
+ 4, -1, 1, 176, 2, 183, 3, 190, -1,
+ 4, -1, 0, 552, 1, 30, 2, 295, 3, 122, -1,
};
@@ -2855,6 +2870,9 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = {
233, /* lvrefslice */
234, /* lvavref */
0, /* anonconst */
+ 12, /* isa */
+ 0, /* cmpchain_and */
+ 0, /* cmpchain_dup */
};
@@ -2873,76 +2891,76 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = {
*/
EXTCONST U16 PL_op_private_bitdefs[] = {
- 0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, chop, schop, defined, undef, study, preinc, i_preinc, predec, i_predec, postinc, i_postinc, postdec, i_postdec, negate, i_negate, not, complement, ucfirst, lcfirst, uc, lc, quotemeta, aeach, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, method, method_named, method_super, method_redir, method_redir_super, entergiven, leavegiven, enterwhen, leavewhen, untie, tied, dbmclose, getsockname, getpeername, lstat, stat, readlink, readdir, telldir, rewinddir, closedir, localtime, alarm, require, dofile, entertry, ghbyname, gnbyname, gpbyname, shostent, snetent, sprotoent, sservent, gpwnam, gpwuid, ggrnam, ggrgid, lock, once, fc, anonconst */
- 0x2f3c, 0x4119, /* pushmark */
+ 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 */
+ 0x2fdc, 0x41b9, /* pushmark */
0x00bd, /* wantarray, runcv */
- 0x0578, 0x19b0, 0x41cc, 0x3c88, 0x3465, /* const */
- 0x2f3c, 0x35b9, /* gvsv */
- 0x1815, /* gv */
- 0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, eq, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, seq, sne, scmp, bit_and, bit_xor, bit_or, sbit_and, sbit_xor, sbit_or, smartmatch, lslice, xor */
- 0x2f3c, 0x4118, 0x03d7, /* padsv */
- 0x2f3c, 0x4118, 0x06f4, 0x302c, 0x3e09, /* padav */
- 0x2f3c, 0x4118, 0x06f4, 0x0790, 0x302c, 0x3e08, 0x2aa1, /* padhv */
- 0x2f3c, 0x1b98, 0x03d6, 0x302c, 0x3388, 0x41c4, 0x0003, /* rv2gv */
- 0x2f3c, 0x35b8, 0x03d6, 0x41c4, 0x0003, /* rv2sv */
- 0x302c, 0x0003, /* av2arylen, akeys, values, keys */
- 0x32fc, 0x0fd8, 0x0d34, 0x028c, 0x44c8, 0x41c4, 0x0003, /* rv2cv */
- 0x06f4, 0x0790, 0x0003, /* ref */
+ 0x0438, 0x1a50, 0x426c, 0x3d28, 0x3505, /* const */
+ 0x2fdc, 0x3659, /* gvsv */
+ 0x18b5, /* gv */
+ 0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, eq, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, seq, sne, scmp, bit_and, bit_xor, bit_or, sbit_and, sbit_xor, sbit_or, smartmatch, lslice, xor, isa */
+ 0x2fdc, 0x41b8, 0x03d7, /* padsv */
+ 0x2fdc, 0x41b8, 0x05b4, 0x30cc, 0x3ea9, /* padav */
+ 0x2fdc, 0x41b8, 0x05b4, 0x0650, 0x30cc, 0x3ea8, 0x2b41, /* padhv */
+ 0x2fdc, 0x1c38, 0x03d6, 0x30cc, 0x3428, 0x4264, 0x0003, /* rv2gv */
+ 0x2fdc, 0x3658, 0x03d6, 0x4264, 0x0003, /* rv2sv */
+ 0x30cc, 0x0003, /* av2arylen, akeys, values, keys */
+ 0x339c, 0x1078, 0x0dd4, 0x014c, 0x4568, 0x4264, 0x0003, /* rv2cv */
+ 0x05b4, 0x0650, 0x0003, /* ref */
0x018f, /* bless, glob, sprintf, formline, unpack, pack, join, anonlist, anonhash, splice, warn, die, reset, exit, close, pipe_op, fileno, umask, binmode, tie, dbmopen, sselect, select, getc, read, enterwrite, sysopen, sysseek, sysread, syswrite, eof, tell, seek, truncate, fcntl, ioctl, send, recv, socket, sockpair, bind, connect, listen, accept, shutdown, gsockopt, ssockopt, open_dir, seekdir, gmtime, shmget, shmctl, shmread, shmwrite, msgget, msgctl, msgsnd, msgrcv, semop, semget, semctl, ghbyaddr, gnbyaddr, gpbynumber, gsbyname, gsbyport, syscall */
- 0x379c, 0x36b8, 0x27f4, 0x2730, 0x0003, /* backtick */
- 0x06f5, /* subst */
- 0x10dc, 0x2118, 0x0914, 0x3f4c, 0x24a8, 0x01e4, 0x0141, /* trans, transr */
- 0x0f1c, 0x0618, 0x0067, /* sassign */
- 0x0bd8, 0x0ad4, 0x09d0, 0x302c, 0x06e8, 0x0067, /* aassign */
- 0x4570, 0x0003, /* chomp, schomp, ncomplement, scomplement, sin, cos, exp, log, sqrt, int, hex, oct, abs, ord, chr, chroot, rmdir */
- 0x06f4, 0x302c, 0x0003, /* pos */
- 0x4570, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, i_modulo, add, i_add, subtract, i_subtract, left_shift, right_shift, nbit_and, nbit_xor, nbit_or */
- 0x1498, 0x0067, /* repeat */
- 0x3218, 0x4570, 0x0067, /* concat */
- 0x2f3c, 0x0358, 0x1b94, 0x4570, 0x42ac, 0x0003, /* multiconcat */
- 0x4570, 0x018f, /* stringify, atan2, rand, srand, crypt, push, unshift, flock, chdir, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */
- 0x06f4, 0x4570, 0x0003, /* length */
- 0x39f0, 0x302c, 0x012b, /* substr */
- 0x302c, 0x0067, /* vec */
- 0x3198, 0x06f4, 0x4570, 0x018f, /* index, rindex */
- 0x2f3c, 0x35b8, 0x06f4, 0x302c, 0x3e08, 0x41c4, 0x0003, /* rv2av */
+ 0x383c, 0x3758, 0x2894, 0x27d0, 0x0003, /* backtick */
+ 0x05b5, /* subst */
+ 0x117c, 0x21b8, 0x09b4, 0x3fec, 0x2548, 0x4884, 0x07c1, /* trans, transr */
+ 0x0fbc, 0x04d8, 0x0067, /* sassign */
+ 0x0c78, 0x0b74, 0x0a70, 0x30cc, 0x05a8, 0x0067, /* aassign */
+ 0x4610, 0x0003, /* chomp, schomp, ncomplement, scomplement, sin, cos, exp, log, sqrt, int, hex, oct, abs, ord, chr, chroot, rmdir */
+ 0x05b4, 0x30cc, 0x0003, /* pos */
+ 0x4610, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, i_modulo, add, i_add, subtract, i_subtract, left_shift, right_shift, nbit_and, nbit_xor, nbit_or */
+ 0x1538, 0x0067, /* repeat */
+ 0x32b8, 0x4610, 0x0067, /* concat */
+ 0x2fdc, 0x0218, 0x1c34, 0x4610, 0x434c, 0x0003, /* multiconcat */
+ 0x4610, 0x018f, /* stringify, atan2, rand, srand, crypt, push, unshift, flock, chdir, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */
+ 0x05b4, 0x4610, 0x0003, /* length */
+ 0x3a90, 0x30cc, 0x012b, /* substr */
+ 0x30cc, 0x0067, /* vec */
+ 0x3238, 0x05b4, 0x4610, 0x018f, /* index, rindex */
+ 0x2fdc, 0x3658, 0x05b4, 0x30cc, 0x3ea8, 0x4264, 0x0003, /* rv2av */
0x025f, /* aelemfast, aelemfast_lex */
- 0x2f3c, 0x2e38, 0x03d6, 0x302c, 0x0067, /* aelem, helem */
- 0x2f3c, 0x302c, 0x3e09, /* aslice, hslice */
- 0x302d, /* kvaslice, kvhslice */
- 0x2f3c, 0x3d58, 0x2b54, 0x0003, /* delete */
- 0x43f8, 0x0003, /* exists */
- 0x2f3c, 0x35b8, 0x06f4, 0x0790, 0x302c, 0x3e08, 0x41c4, 0x2aa1, /* rv2hv */
- 0x2f3c, 0x2e38, 0x1154, 0x1ab0, 0x302c, 0x41c4, 0x0003, /* multideref */
- 0x2f3c, 0x35b8, 0x0430, 0x2c4c, 0x2569, /* split */
- 0x2f3c, 0x21d9, /* list */
- 0x46dc, 0x4038, 0x13f0, 0x288c, 0x3ae8, 0x2984, 0x3521, /* sort */
- 0x288c, 0x0003, /* reverse */
- 0x06f4, 0x0003, /* grepwhile */
- 0x2cd8, 0x0003, /* flip, flop */
- 0x2f3c, 0x0003, /* cond_expr */
- 0x2f3c, 0x0fd8, 0x03d6, 0x028c, 0x44c8, 0x41c4, 0x2641, /* entersub */
- 0x3858, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */
+ 0x2fdc, 0x2ed8, 0x03d6, 0x30cc, 0x0067, /* aelem, helem */
+ 0x2fdc, 0x30cc, 0x3ea9, /* aslice, hslice */
+ 0x30cd, /* kvaslice, kvhslice */
+ 0x2fdc, 0x3df8, 0x2bf4, 0x0003, /* delete */
+ 0x4498, 0x0003, /* exists */
+ 0x2fdc, 0x3658, 0x05b4, 0x0650, 0x30cc, 0x3ea8, 0x4264, 0x2b41, /* rv2hv */
+ 0x2fdc, 0x2ed8, 0x11f4, 0x1b50, 0x30cc, 0x4264, 0x0003, /* multideref */
+ 0x2fdc, 0x3658, 0x02f0, 0x2cec, 0x2609, /* split */
+ 0x2fdc, 0x2279, /* list */
+ 0x477c, 0x40d8, 0x1490, 0x292c, 0x3b88, 0x2a24, 0x35c1, /* sort */
+ 0x292c, 0x0003, /* reverse */
+ 0x05b4, 0x0003, /* grepwhile */
+ 0x2d78, 0x0003, /* flip, flop */
+ 0x2fdc, 0x0003, /* cond_expr */
+ 0x2fdc, 0x1078, 0x03d6, 0x014c, 0x4568, 0x4264, 0x26e1, /* entersub */
+ 0x38f8, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */
0x02aa, 0x0003, /* argelem */
0x00bc, 0x018f, /* caller */
- 0x23b5, /* nextstate, dbstate */
- 0x2ddc, 0x3859, /* leave */
- 0x2f3c, 0x35b8, 0x104c, 0x3b65, /* enteriter */
- 0x3b65, /* iter */
- 0x2ddc, 0x0067, /* leaveloop */
- 0x47fc, 0x0003, /* last, next, redo, dump, goto */
- 0x379c, 0x36b8, 0x27f4, 0x2730, 0x018f, /* open */
- 0x1d50, 0x1fac, 0x1e68, 0x1c24, 0x0003, /* ftrread, ftrwrite, ftrexec, fteread, ftewrite, fteexec */
- 0x1d50, 0x1fac, 0x1e68, 0x0003, /* ftis, ftsize, ftmtime, ftatime, ftctime, ftrowned, fteowned, ftzero, ftsock, ftchr, ftblk, ftfile, ftdir, ftpipe, ftsuid, ftsgid, ftsvtx, ftlink, fttty, fttext, ftbinary */
- 0x4571, /* wait, getppid, time */
- 0x38f4, 0x0df0, 0x084c, 0x4648, 0x22c4, 0x0003, /* entereval */
- 0x30fc, 0x0018, 0x1304, 0x1221, /* coreargs */
- 0x302c, 0x00c7, /* avhvswitch */
- 0x2f3c, 0x01fb, /* padrange */
- 0x2f3c, 0x4118, 0x04f6, 0x2a0c, 0x1908, 0x0067, /* refassign */
- 0x2f3c, 0x4118, 0x04f6, 0x2a0c, 0x1908, 0x0003, /* lvref */
- 0x2f3d, /* lvrefslice */
- 0x2f3c, 0x4118, 0x0003, /* lvavref */
+ 0x2455, /* nextstate, dbstate */
+ 0x2e7c, 0x38f9, /* leave */
+ 0x2fdc, 0x3658, 0x10ec, 0x3c05, /* enteriter */
+ 0x3c05, /* iter */
+ 0x2e7c, 0x0067, /* leaveloop */
+ 0x49bc, 0x0003, /* last, next, redo, dump, goto */
+ 0x383c, 0x3758, 0x2894, 0x27d0, 0x018f, /* open */
+ 0x1df0, 0x204c, 0x1f08, 0x1cc4, 0x0003, /* ftrread, ftrwrite, ftrexec, fteread, ftewrite, fteexec */
+ 0x1df0, 0x204c, 0x1f08, 0x0003, /* ftis, ftsize, ftmtime, ftatime, ftctime, ftrowned, fteowned, ftzero, ftsock, ftchr, ftblk, ftfile, ftdir, ftpipe, ftsuid, ftsgid, ftsvtx, ftlink, fttty, fttext, ftbinary */
+ 0x4611, /* wait, getppid, time */
+ 0x3994, 0x0e90, 0x070c, 0x46e8, 0x2364, 0x0003, /* entereval */
+ 0x319c, 0x0018, 0x13a4, 0x12c1, /* coreargs */
+ 0x30cc, 0x00c7, /* avhvswitch */
+ 0x2fdc, 0x01fb, /* padrange */
+ 0x2fdc, 0x41b8, 0x04f6, 0x2aac, 0x19a8, 0x0067, /* refassign */
+ 0x2fdc, 0x41b8, 0x04f6, 0x2aac, 0x19a8, 0x0003, /* lvref */
+ 0x2fdd, /* lvrefslice */
+ 0x2fdc, 0x41b8, 0x0003, /* lvavref */
};
@@ -2985,8 +3003,8 @@ EXTCONST U8 PL_op_private_valid[] = {
/* QR */ (0),
/* SUBST */ (OPpTRUEBOOL),
/* SUBSTCONT */ (OPpARG1_MASK),
- /* TRANS */ (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE),
- /* TRANSR */ (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE),
+ /* TRANS */ (OPpTRANS_CAN_FORCE_UTF8|OPpTRANS_USE_SVOP|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE),
+ /* TRANSR */ (OPpTRANS_CAN_FORCE_UTF8|OPpTRANS_USE_SVOP|OPpTRANS_IDENTICAL|OPpTRANS_SQUASH|OPpTRANS_COMPLEMENT|OPpTRANS_GROWS|OPpTRANS_DELETE),
/* SASSIGN */ (OPpARG2_MASK|OPpASSIGN_BACKWARDS|OPpASSIGN_CV_TO_GV),
/* AASSIGN */ (OPpARG2_MASK|OPpASSIGN_TRUEBOOL|OPpMAYBE_LVSUB|OPpASSIGN_COMMON_AGG|OPpASSIGN_COMMON_RC1|OPpASSIGN_COMMON_SCALAR),
/* CHOP */ (OPpARG1_MASK),
@@ -3348,6 +3366,9 @@ EXTCONST U8 PL_op_private_valid[] = {
/* LVREFSLICE */ (OPpLVAL_INTRO),
/* LVAVREF */ (OPpARG1_MASK|OPpPAD_STATE|OPpLVAL_INTRO),
/* ANONCONST */ (OPpARG1_MASK),
+ /* ISA */ (OPpARG2_MASK),
+ /* CMPCHAIN_AND */ (OPpARG1_MASK),
+ /* CMPCHAIN_DUP */ (OPpARG1_MASK),
};
diff --git a/gnu/usr.bin/perl/opnames.h b/gnu/usr.bin/perl/opnames.h
index d87ba88f01c..0e325466d15 100644
--- a/gnu/usr.bin/perl/opnames.h
+++ b/gnu/usr.bin/perl/opnames.h
@@ -411,10 +411,13 @@ typedef enum opcode {
OP_LVREFSLICE = 394,
OP_LVAVREF = 395,
OP_ANONCONST = 396,
+ OP_ISA = 397,
+ OP_CMPCHAIN_AND = 398,
+ OP_CMPCHAIN_DUP = 399,
OP_max
} opcode;
-#define MAXO 397
+#define MAXO 400
#define OP_FREED MAXO
/* the OP_IS_* macros are optimized to a simple range check because
diff --git a/gnu/usr.bin/perl/os2/Changes b/gnu/usr.bin/perl/os2/Changes
index 127a7e272a0..dcc258ffb40 100644
--- a/gnu/usr.bin/perl/os2/Changes
+++ b/gnu/usr.bin/perl/os2/Changes
@@ -187,7 +187,7 @@ after 5.005_53:
New function OS2::Error(do_harderror,do_exception). Returns
undef if it was not called yet, otherwise bit 1 is
set if on previous call do_harderror was enabled, bit
- 2 is set if if on previous call do_exception was enabled.
+ 2 is set if on previous call do_exception was enabled.
This function enables/disables error popups associated with
hardware errors (Disk not ready etc.) and software exceptions.
diff --git a/gnu/usr.bin/perl/os2/dl_os2.c b/gnu/usr.bin/perl/os2/dl_os2.c
index 76fa9dc42d9..f15c465f621 100644
--- a/gnu/usr.bin/perl/os2/dl_os2.c
+++ b/gnu/usr.bin/perl/os2/dl_os2.c
@@ -121,7 +121,7 @@ dlopen(const char *path, int mode)
/* Not found. Check for non-FAT name and try truncated name. */
/* Don't know if this helps though... */
for (beg = dot = path + strlen(path);
- beg > path && !strchr(":/\\", *(beg-1));
+ beg > path && !memCHRs(":/\\", *(beg-1));
beg--)
if (*beg == '.')
dot = beg;
diff --git a/gnu/usr.bin/perl/os2/os2.c b/gnu/usr.bin/perl/os2/os2.c
index ae987cb06f1..0c9fa17831b 100644
--- a/gnu/usr.bin/perl/os2/os2.c
+++ b/gnu/usr.bin/perl/os2/os2.c
@@ -1400,7 +1400,7 @@ do_spawn3(pTHX_ char *cmd, int execf, int flag)
goto doshell;
for (s = cmd; *s; s++) {
- if (*s != ' ' && !isALPHA(*s) && strchr("$&*(){}[]'\";\\|?<>~`\n",*s)) {
+ if (*s != ' ' && !isALPHA(*s) && memCHRs("$&*(){}[]'\";\\|?<>~`\n",*s)) {
if (*s == '\n' && s[1] == '\0') {
*s = '\0';
break;
diff --git a/gnu/usr.bin/perl/os2/os2ish.h b/gnu/usr.bin/perl/os2/os2ish.h
index fb71cd0fd93..c82419eed79 100644
--- a/gnu/usr.bin/perl/os2/os2ish.h
+++ b/gnu/usr.bin/perl/os2/os2ish.h
@@ -77,7 +77,7 @@
* as the first line of a Perl program designed to be executed directly
* by name, instead of the standard Unix #!. If ALTERNATE_SHEBANG
* begins with a character other then #, then Perl will only treat
- * it as a command line if if finds the string "perl" in the first
+ * it as a command line if it finds the string "perl" in the first
* word; otherwise it's treated as the first line of code in the script.
* (IOW, Perl won't hand off to another interpreter via an alternate
* shebang sequence that might be legal Perl code.)
diff --git a/gnu/usr.bin/perl/pad.c b/gnu/usr.bin/perl/pad.c
index f73fc550f94..2bbb0563e01 100644
--- a/gnu/usr.bin/perl/pad.c
+++ b/gnu/usr.bin/perl/pad.c
@@ -121,12 +121,14 @@ to be generated in evals, such as
For state vars, C<SVs_PADSTALE> is overloaded to mean 'not yet initialised',
but this internal state is stored in a separate pad entry.
-=for apidoc AmxU|PADNAMELIST *|PL_comppad_name
+=for apidoc Amnh||SVs_PADSTALE
+
+=for apidoc AmnxU|PADNAMELIST *|PL_comppad_name
During compilation, this points to the array containing the names part
of the pad for the currently-compiling code.
-=for apidoc AmxU|PAD *|PL_comppad
+=for apidoc AmnxU|PAD *|PL_comppad
During compilation, this points to the array containing the values
part of the pad for the currently-compiling code. (At runtime a CV may
@@ -134,7 +136,7 @@ have many such value arrays; at compile time just one is constructed.)
At runtime, this points to the array containing the currently-relevant
values for the pad for the currently-executing code.
-=for apidoc AmxU|SV **|PL_curpad
+=for apidoc AmnxU|SV **|PL_curpad
Points directly to the body of the L</PL_comppad> array.
(I.e., this is C<PadARRAY(PL_comppad)>.)
@@ -173,7 +175,7 @@ Perl_set_padlist(CV * cv, PADLIST *padlist){
#endif
/*
-=for apidoc Am|PADLIST *|pad_new|int flags
+=for apidoc pad_new
Create a new padlist, updating the global variables for the
currently-compiling padlist to point to the new padlist. The following
@@ -516,7 +518,7 @@ Perl_cv_forget_slab(pTHX_ CV *cv)
}
/*
-=for apidoc m|PADOFFSET|pad_alloc_name|PADNAME *name|U32 flags|HV *typestash|HV *ourstash
+=for apidoc pad_alloc_name
Allocates a place in the currently-compiling
pad (via L<perlapi/pad_alloc>) and
@@ -561,7 +563,7 @@ S_pad_alloc_name(pTHX_ PADNAME *name, U32 flags, HV *typestash,
}
/*
-=for apidoc Am|PADOFFSET|pad_add_name_pvn|const char *namepv|STRLEN namelen|U32 flags|HV *typestash|HV *ourstash
+=for apidoc pad_add_name_pvn
Allocates a place in the currently-compiling pad for a named lexical
variable. Stores the name and other metadata in the name part of the
@@ -633,7 +635,7 @@ Perl_pad_add_name_pvn(pTHX_ const char *namepv, STRLEN namelen,
}
/*
-=for apidoc Am|PADOFFSET|pad_add_name_pv|const char *name|U32 flags|HV *typestash|HV *ourstash
+=for apidoc pad_add_name_pv
Exactly like L</pad_add_name_pvn>, but takes a nul-terminated string
instead of a string/length pair.
@@ -650,7 +652,7 @@ Perl_pad_add_name_pv(pTHX_ const char *name,
}
/*
-=for apidoc Am|PADOFFSET|pad_add_name_sv|SV *name|U32 flags|HV *typestash|HV *ourstash
+=for apidoc pad_add_name_sv
Exactly like L</pad_add_name_pvn>, but takes the name string in the form
of an SV instead of a string/length pair.
@@ -669,7 +671,7 @@ Perl_pad_add_name_sv(pTHX_ SV *name, U32 flags, HV *typestash, HV *ourstash)
}
/*
-=for apidoc Amx|PADOFFSET|pad_alloc|I32 optype|U32 tmptype
+=for apidoc pad_alloc
Allocates a place in the currently-compiling pad,
returning the offset of the allocated pad slot.
@@ -769,7 +771,7 @@ Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype)
}
/*
-=for apidoc Am|PADOFFSET|pad_add_anon|CV *func|I32 optype
+=for apidoc pad_add_anon
Allocates a place in the currently-compiling pad (via L</pad_alloc>)
for an anonymous function that is lexically scoped inside the
@@ -917,7 +919,7 @@ S_pad_check_dup(pTHX_ PADNAME *name, U32 flags, const HV *ourstash)
/*
-=for apidoc Am|PADOFFSET|pad_findmy_pvn|const char *namepv|STRLEN namelen|U32 flags
+=for apidoc pad_findmy_pvn
Given the name of a lexical variable, find its position in the
currently-compiling pad.
@@ -982,7 +984,7 @@ Perl_pad_findmy_pvn(pTHX_ const char *namepv, STRLEN namelen, U32 flags)
}
/*
-=for apidoc Am|PADOFFSET|pad_findmy_pv|const char *name|U32 flags
+=for apidoc pad_findmy_pv
Exactly like L</pad_findmy_pvn>, but takes a nul-terminated string
instead of a string/length pair.
@@ -998,7 +1000,7 @@ Perl_pad_findmy_pv(pTHX_ const char *name, U32 flags)
}
/*
-=for apidoc Am|PADOFFSET|pad_findmy_sv|SV *name|U32 flags
+=for apidoc pad_findmy_sv
Exactly like L</pad_findmy_pvn>, but takes the name string in the form
of an SV instead of a string/length pair.
@@ -1017,7 +1019,7 @@ Perl_pad_findmy_sv(pTHX_ SV *name, U32 flags)
}
/*
-=for apidoc Amp|PADOFFSET|find_rundefsvoffset
+=for apidoc find_rundefsvoffset
Until the lexical C<$_> feature was removed, this function would
find the position of the lexical C<$_> in the pad of the
@@ -1037,7 +1039,7 @@ Perl_find_rundefsvoffset(pTHX)
}
/*
-=for apidoc Am|SV *|find_rundefsv
+=for apidoc find_rundefsv
Returns the global variable C<$_>.
@@ -1051,7 +1053,7 @@ Perl_find_rundefsv(pTHX)
}
/*
-=for apidoc m|PADOFFSET|pad_findlex|const char *namepv|STRLEN namelen|U32 flags|const CV* cv|U32 seq|int warn|SV** out_capture|PADNAME** out_name|int *out_flags
+=for apidoc pad_findlex
Find a named lexical anywhere in a chain of nested pads. Add fake entries
in the inner pads if it's found in an outer one.
@@ -1086,10 +1088,10 @@ S_unavailable(pTHX_ PADNAME *name)
{
/* diag_listed_as: Variable "%s" is not available */
Perl_ck_warner(aTHX_ packWARN(WARN_CLOSURE),
- "%se \"%" PNf "\" is not available",
+ "%s \"%" PNf "\" is not available",
*PadnamePV(name) == '&'
- ? "Subroutin"
- : "Variabl",
+ ? "Subroutine"
+ : "Variable",
PNfARG(name));
}
@@ -1205,8 +1207,8 @@ S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv,
/* diag_listed_as: Variable "%s" will not stay
shared */
Perl_warner(aTHX_ packWARN(WARN_CLOSURE),
- "%se \"%" UTF8f "\" will not stay shared",
- *namepv == '&' ? "Subroutin" : "Variabl",
+ "%s \"%" UTF8f "\" will not stay shared",
+ *namepv == '&' ? "Subroutine" : "Variable",
UTF8fARG(1, namelen, namepv));
}
@@ -1334,7 +1336,7 @@ S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv,
#ifdef DEBUGGING
/*
-=for apidoc Am|SV *|pad_sv|PADOFFSET po
+=for apidoc pad_sv
Get the value at offset C<po> in the current (compiling or executing) pad.
Use macro C<PAD_SV> instead of calling this function directly.
@@ -1357,7 +1359,7 @@ Perl_pad_sv(pTHX_ PADOFFSET po)
}
/*
-=for apidoc Am|void|pad_setsv|PADOFFSET po|SV *sv
+=for apidoc pad_setsv
Set the value at offset C<po> in the current (compiling or executing) pad.
Use the macro C<PAD_SETSV()> rather than calling this function directly.
@@ -1382,7 +1384,7 @@ Perl_pad_setsv(pTHX_ PADOFFSET po, SV* sv)
#endif /* DEBUGGING */
/*
-=for apidoc m|void|pad_block_start|int full
+=for apidoc pad_block_start
Update the pad compilation state variables on entry to a new block.
@@ -1415,7 +1417,7 @@ Perl_pad_block_start(pTHX_ int full)
}
/*
-=for apidoc Am|U32|intro_my
+=for apidoc intro_my
"Introduce" C<my> variables to visible status. This is called during parsing
at the end of each statement to make lexical variables visible to subsequent
@@ -1468,7 +1470,7 @@ Perl_intro_my(pTHX)
}
/*
-=for apidoc m|void|pad_leavemy
+=for apidoc pad_leavemy
Cleanup at end of scope during compilation: set the max seq number for
lexicals in this scope and warn of any lexicals that never got introduced.
@@ -1524,7 +1526,7 @@ Perl_pad_leavemy(pTHX)
}
/*
-=for apidoc m|void|pad_swipe|PADOFFSET po|bool refadjust
+=for apidoc pad_swipe
Abandon the tmp in the current pad at offset C<po> and replace with a
new one.
@@ -1576,7 +1578,7 @@ Perl_pad_swipe(pTHX_ PADOFFSET po, bool refadjust)
}
/*
-=for apidoc m|void|pad_reset
+=for apidoc pad_reset
Mark all the current temporaries for reuse
@@ -1611,7 +1613,7 @@ S_pad_reset(pTHX)
}
/*
-=for apidoc Amx|void|pad_tidy|padtidy_type type
+=for apidoc pad_tidy
Tidy up a pad at the end of compilation of the code to which it belongs.
Jobs performed here are: remove most stuff from the pads of anonsub
@@ -1729,7 +1731,7 @@ Perl_pad_tidy(pTHX_ padtidy_type type)
}
/*
-=for apidoc m|void|pad_free|PADOFFSET po
+=for apidoc pad_free
Free the SV at offset po in the current pad.
@@ -1767,7 +1769,7 @@ Perl_pad_free(pTHX_ PADOFFSET po)
}
/*
-=for apidoc m|void|do_dump_pad|I32 level|PerlIO *file|PADLIST *padlist|int full
+=for apidoc do_dump_pad
Dump the contents of a padlist
@@ -1839,7 +1841,7 @@ Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full)
#ifdef DEBUGGING
/*
-=for apidoc m|void|cv_dump|CV *cv|const char *title
+=for apidoc cv_dump
dump the contents of a CV
@@ -1878,7 +1880,7 @@ S_cv_dump(pTHX_ const CV *cv, const char *title)
#endif /* DEBUGGING */
/*
-=for apidoc Am|CV *|cv_clone|CV *proto
+=for apidoc cv_clone
Clone a CV, making a lexical closure. C<proto> supplies the prototype
of the function: its code, pad structure, and other attributes.
@@ -2127,7 +2129,6 @@ S_cv_clone_pad(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned,
* from the parent */
if (const_sv && SvREFCNT(const_sv) == 2) {
const bool was_method = cBOOL(CvMETHOD(cv));
- bool copied = FALSE;
if (outside) {
PADNAME * const pn =
PadlistNAMESARRAY(CvPADLIST(outside))
@@ -2156,28 +2157,15 @@ S_cv_clone_pad(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned,
) == o
&& !OpSIBLING(o))
{
- Perl_ck_warner_d(aTHX_
- packWARN(WARN_DEPRECATED),
- "Constants from lexical "
- "variables potentially "
- "modified elsewhere are "
- "deprecated. This will not "
- "be allowed in Perl 5.32");
- /* We *copy* the lexical variable, and donate the
- copy to newCONSTSUB. Yes, this is ugly, and
- should be killed. We need to do this for the
- time being, however, because turning on SvPADTMP
- on a lexical will have observable effects
- elsewhere. */
- const_sv = newSVsv(const_sv);
- copied = TRUE;
+ Perl_croak(aTHX_
+ "Constants from lexical variables potentially modified "
+ "elsewhere are no longer permitted");
}
else
goto constoff;
}
}
- if (!copied)
- SvREFCNT_inc_simple_void_NN(const_sv);
+ SvREFCNT_inc_simple_void_NN(const_sv);
/* If the lexical is not used elsewhere, it is safe to turn on
SvPADTMP, since it is only when it is used in lvalue con-
text that the difference is observable. */
@@ -2279,6 +2267,8 @@ If C<flags> has the C<CV_NAME_NOTQUAL> bit set, then the package name will not b
included. If the first argument is neither a CV nor a GV, this flag is
ignored (subject to change).
+=for apidoc Amnh||CV_NAME_NOTQUAL
+
=cut
*/
@@ -2316,7 +2306,7 @@ Perl_cv_name(pTHX_ CV *cv, SV *sv, U32 flags)
}
/*
-=for apidoc m|void|pad_fixup_inner_anons|PADLIST *padlist|CV *old_cv|CV *new_cv
+=for apidoc pad_fixup_inner_anons
For any anon CVs in the pad, change C<CvOUTSIDE> of that CV from
C<old_cv> to C<new_cv> if necessary. Needed when a newly-compiled CV has to be
@@ -2388,7 +2378,7 @@ Perl_pad_fixup_inner_anons(pTHX_ PADLIST *padlist, CV *old_cv, CV *new_cv)
}
/*
-=for apidoc m|void|pad_push|PADLIST *padlist|int depth
+=for apidoc pad_push
Push a new pad frame onto the padlist, unless there's already a pad at
this depth, in which case don't bother creating a new one. Then give
@@ -2764,6 +2754,8 @@ that refer to outer lexicals. (See also L</newPADNAMEpvn>.) C<outer> is
the outer pad name that this one mirrors. The returned pad name has the
C<PADNAMEt_OUTER> flag already set.
+=for apidoc Amnh||PADNAMEt_OUTER
+
=cut
*/
diff --git a/gnu/usr.bin/perl/pad.h b/gnu/usr.bin/perl/pad.h
index 976dc058d41..6b31ace5f28 100644
--- a/gnu/usr.bin/perl/pad.h
+++ b/gnu/usr.bin/perl/pad.h
@@ -179,79 +179,79 @@ C<my>)
save C<PL_comppad> and C<PL_curpad>
-=for apidoc Amx|PAD **|PadlistARRAY|PADLIST padlist
+=for apidoc Amx|PAD **|PadlistARRAY|PADLIST * padlist
The C array of a padlist, containing the pads. Only subscript it with
numbers >= 1, as the 0th entry is not guaranteed to remain usable.
-=for apidoc Amx|SSize_t|PadlistMAX|PADLIST padlist
+=for apidoc Amx|SSize_t|PadlistMAX|PADLIST * padlist
The index of the last allocated space in the padlist. Note that the last
pad may be in an earlier slot. Any entries following it will be C<NULL> in
that case.
-=for apidoc Amx|PADNAMELIST *|PadlistNAMES|PADLIST padlist
+=for apidoc Amx|PADNAMELIST *|PadlistNAMES|PADLIST * padlist
The names associated with pad entries.
-=for apidoc Amx|PADNAME **|PadlistNAMESARRAY|PADLIST padlist
+=for apidoc Amx|PADNAME **|PadlistNAMESARRAY|PADLIST * padlist
The C array of pad names.
-=for apidoc Amx|SSize_t|PadlistNAMESMAX|PADLIST padlist
+=for apidoc Amx|SSize_t|PadlistNAMESMAX|PADLIST * padlist
The index of the last pad name.
-=for apidoc Amx|U32|PadlistREFCNT|PADLIST padlist
+=for apidoc Amx|U32|PadlistREFCNT|PADLIST * padlist
The reference count of the padlist. Currently this is always 1.
-=for apidoc Amx|PADNAME **|PadnamelistARRAY|PADNAMELIST pnl
+=for apidoc Amx|PADNAME **|PadnamelistARRAY|PADNAMELIST * pnl
The C array of pad names.
-=for apidoc Amx|SSize_t|PadnamelistMAX|PADNAMELIST pnl
+=for apidoc Amx|SSize_t|PadnamelistMAX|PADNAMELIST * pnl
The index of the last pad name.
-=for apidoc Amx|SSize_t|PadnamelistREFCNT|PADNAMELIST pnl
+=for apidoc Amx|SSize_t|PadnamelistREFCNT|PADNAMELIST * pnl
The reference count of the pad name list.
-=for apidoc Amx|void|PadnamelistREFCNT_dec|PADNAMELIST pnl
+=for apidoc Amx|void|PadnamelistREFCNT_dec|PADNAMELIST * pnl
Lowers the reference count of the pad name list.
-=for apidoc Amx|SV **|PadARRAY|PAD pad
+=for apidoc Amx|SV **|PadARRAY|PAD * pad
The C array of pad entries.
-=for apidoc Amx|SSize_t|PadMAX|PAD pad
+=for apidoc Amx|SSize_t|PadMAX|PAD * pad
The index of the last pad entry.
-=for apidoc Amx|char *|PadnamePV|PADNAME pn
+=for apidoc Amx|char *|PadnamePV|PADNAME * pn
The name stored in the pad name struct. This returns C<NULL> for a target
slot.
-=for apidoc Amx|STRLEN|PadnameLEN|PADNAME pn
+=for apidoc Amx|STRLEN|PadnameLEN|PADNAME * pn
The length of the name.
-=for apidoc Amx|bool|PadnameUTF8|PADNAME pn
+=for apidoc Amx|bool|PadnameUTF8|PADNAME * pn
Whether PadnamePV is in UTF-8. Currently, this is always true.
-=for apidoc Amx|SV *|PadnameSV|PADNAME pn
+=for apidoc Amx|SV *|PadnameSV|PADNAME * pn
Returns the pad name as a mortal SV.
-=for apidoc m|bool|PadnameIsOUR|PADNAME pn
+=for apidoc m|bool|PadnameIsOUR|PADNAME * pn
Whether this is an "our" variable.
=for apidoc m|HV *|PadnameOURSTASH
The stash in which this "our" variable was declared.
-=for apidoc m|bool|PadnameOUTER|PADNAME pn
+=for apidoc m|bool|PadnameOUTER|PADNAME * pn
Whether this entry belongs to an outer pad. Entries for which this is true
are often referred to as 'fake'.
-=for apidoc m|bool|PadnameIsSTATE|PADNAME pn
+=for apidoc m|bool|PadnameIsSTATE|PADNAME * pn
Whether this is a "state" variable.
-=for apidoc m|HV *|PadnameTYPE|PADNAME pn
+=for apidoc m|HV *|PadnameTYPE|PADNAME * pn
The stash associated with a typed lexical. This returns the C<%Foo::> hash
for C<my Foo $bar>.
-=for apidoc Amx|SSize_t|PadnameREFCNT|PADNAME pn
+=for apidoc Amx|SSize_t|PadnameREFCNT|PADNAME * pn
The reference count of the pad name.
-=for apidoc Amx|void|PadnameREFCNT_dec|PADNAME pn
+=for apidoc Amx|void|PadnameREFCNT_dec|PADNAME * pn
Lowers the reference count of the pad name.
@@ -492,7 +492,7 @@ Clone the state variables associated with running and compiling pads.
PL_cop_seqmax = proto_perl->Icop_seqmax;
/*
-=for apidoc Am|PADOFFSET|pad_add_name_pvs|"literal string" name|U32 flags|HV *typestash|HV *ourstash
+=for apidoc Am|PADOFFSET|pad_add_name_pvs|"name"|U32 flags|HV *typestash|HV *ourstash
Exactly like L</pad_add_name_pvn>, but takes a literal string
instead of a string/length pair.
@@ -504,7 +504,7 @@ instead of a string/length pair.
Perl_pad_add_name_pvn(aTHX_ STR_WITH_LEN(name), flags, typestash, ourstash)
/*
-=for apidoc Am|PADOFFSET|pad_findmy_pvs|"literal string" name|U32 flags
+=for apidoc Am|PADOFFSET|pad_findmy_pvs|"name"|U32 flags
Exactly like L</pad_findmy_pvn>, but takes a literal string
instead of a string/length pair.
diff --git a/gnu/usr.bin/perl/parser.h b/gnu/usr.bin/perl/parser.h
index 19c5c63ad34..abffd25c424 100644
--- a/gnu/usr.bin/perl/parser.h
+++ b/gnu/usr.bin/perl/parser.h
@@ -42,13 +42,14 @@ typedef struct yy_parser {
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
- int yylen; /* length of active reduction */
yy_stack_frame *stack; /* base of stack */
yy_stack_frame *stack_max1;/* (top-1)th element of allocated stack */
yy_stack_frame *ps; /* current stack frame */
+ int yylen; /* length of active reduction */
/* lexer state */
+ I32 lex_formbrack; /* bracket count at outer format level */
I32 lex_brackets; /* square and curly bracket count */
I32 lex_casemods; /* casemod count */
char *lex_brackstack;/* what kind of brackets to pop */
@@ -59,7 +60,7 @@ typedef struct yy_parser {
U8 expect; /* how to interpret ambiguous tokens */
bool preambled;
bool sub_no_recover; /* can't recover from a sublex error */
- I32 lex_formbrack; /* bracket count at outer format level */
+ U8 sub_error_count; /* the number of errors before sublexing */
OP *lex_inpat; /* in pattern $) and $| are special */
OP *lex_op; /* extra info to pass back on op */
SV *lex_repl; /* runtime replacement from s/// */
@@ -96,7 +97,6 @@ typedef struct yy_parser {
U16 in_my; /* we're compiling a "my"/"our" declaration */
U8 lex_state; /* next token is determined */
U8 error_count; /* how many compile errors so far, max 10 */
- U8 sub_error_count; /* the number of errors before sublexing */
HV *in_my_stash; /* declared class of this "my" declaration */
PerlIO *rsfp; /* current source file pointer */
AV *rsfp_filters; /* holds chain of active source filters */
@@ -112,11 +112,11 @@ typedef struct yy_parser {
line_t herelines; /* number of lines in here-doc */
line_t preambling; /* line # when processing $ENV{PERL5DB} */
- bool sig_seen; /* the currently parsing sub has a signature */
/* these are valid while parsing a subroutine signature */
- IV sig_elems; /* number of signature elements seen so far */
- IV sig_optelems; /* number of optional signature elems seen */
+ UV sig_elems; /* number of signature elements seen so far */
+ UV sig_optelems; /* number of optional signature elems seen */
char sig_slurpy; /* the sigil of the slurpy var (or null) */
+ bool sig_seen; /* the currently parsing sub has a signature */
bool recheck_utf8_validity;
diff --git a/gnu/usr.bin/perl/patchlevel.h b/gnu/usr.bin/perl/patchlevel.h
index d55a9c7ad95..3c504eef587 100644
--- a/gnu/usr.bin/perl/patchlevel.h
+++ b/gnu/usr.bin/perl/patchlevel.h
@@ -14,8 +14,8 @@
* exactly on the third column */
#define PERL_REVISION 5 /* age */
-#define PERL_VERSION 30 /* epoch */
-#define PERL_SUBVERSION 3 /* generation */
+#define PERL_VERSION 32 /* epoch */
+#define PERL_SUBVERSION 1 /* generation */
/* The following numbers describe the earliest compatible version of
Perl ("compatibility" here being defined as sufficient binary/API
@@ -35,7 +35,7 @@
changing them should not be necessary.
*/
#define PERL_API_REVISION 5
-#define PERL_API_VERSION 30
+#define PERL_API_VERSION 32
#define PERL_API_SUBVERSION 0
/*
XXX Note: The selection of non-default Configure options, such
diff --git a/gnu/usr.bin/perl/perl.c b/gnu/usr.bin/perl/perl.c
index e8a85dc58ef..071675cc5b8 100644
--- a/gnu/usr.bin/perl/perl.c
+++ b/gnu/usr.bin/perl/perl.c
@@ -3,7 +3,8 @@
*
* Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
* 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
- * 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Larry Wall and others
+ * 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 by Larry Wall
+ * and others
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
@@ -96,6 +97,7 @@ S_init_tls_and_interp(PerlInterpreter *my_perl)
HINTS_REFCNT_INIT;
LOCALE_INIT;
USER_PROP_MUTEX_INIT;
+ ENV_INIT;
MUTEX_INIT(&PL_dollarzero_mutex);
MUTEX_INIT(&PL_my_ctx_mutex);
# endif
@@ -216,26 +218,6 @@ Initializes a new Perl interpreter. See L<perlembed>.
=cut
*/
-static void
-S_fixup_platform_bugs(void)
-{
-#if defined(__GLIBC__) && IVSIZE == 8 \
- && ( __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 8))
- {
- IV l = 3;
- IV r = -10;
- /* Cannot do this check with inlined IV constants since
- * that seems to work correctly even with the buggy glibc. */
- if (l % r == -3) {
- dTHX;
- /* Yikes, we have the bug.
- * Patch in the workaround version. */
- PL_ppaddr[OP_I_MODULO] = &Perl_pp_i_modulo_glibc_bugfix;
- }
- }
-#endif
-}
-
void
perl_construct(pTHXx)
{
@@ -262,7 +244,10 @@ perl_construct(pTHXx)
SvREADONLY_on(&PL_sv_placeholder);
SvREFCNT(&PL_sv_placeholder) = SvREFCNT_IMMORTAL;
- PL_sighandlerp = (Sighandler_t) Perl_sighandler;
+ PL_sighandlerp = Perl_sighandler;
+ PL_sighandler1p = Perl_sighandler1;
+ PL_sighandler3p = Perl_sighandler3;
+
#ifdef PERL_USES_PL_PIDSTATUS
PL_pidstatus = newHV();
#endif
@@ -293,12 +278,13 @@ perl_construct(pTHXx)
init_ids();
- S_fixup_platform_bugs();
-
JMPENV_BOOTSTRAP;
STATUS_ALL_SUCCESS;
init_uniprops();
+ (void) uvchr_to_utf8_flags((U8 *) PL_TR_SPECIAL_HANDLING_UTF8,
+ TR_SPECIAL_HANDLING,
+ UNICODE_ALLOW_ABOVE_IV_MAX);
#if defined(LOCAL_PATCH_COUNT)
PL_localpatches = local_patches; /* For possible -v */
@@ -574,7 +560,7 @@ Perl_dump_sv_child(pTHX_ SV *sv)
#endif
/*
-=for apidoc Am|int|perl_destruct|PerlInterpreter *my_perl
+=for apidoc perl_destruct
Shuts down a Perl interpreter. See L<perlembed> for a tutorial.
@@ -627,7 +613,6 @@ perl_destruct(pTHXx)
PERL_WAIT_FOR_CHILDREN;
destruct_level = PL_perl_destruct_level;
-#if defined(DEBUGGING) || defined(PERL_TRACK_MEMPOOL)
{
const char * const s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL");
if (s) {
@@ -641,16 +626,13 @@ perl_destruct(pTHXx)
else
i = 0;
}
-#ifdef DEBUGGING
if (destruct_level < i) destruct_level = i;
-#endif
#ifdef PERL_TRACK_MEMPOOL
/* RT #114496, for perl_free */
PL_perl_destruct_level = i;
#endif
}
}
-#endif
if (PL_exit_flags & PERL_EXIT_DESTRUCT_END) {
dJMPENV;
@@ -1190,15 +1172,83 @@ perl_destruct(pTHXx)
PL_langinfo_buf = NULL;
}
- /* clear character classes */
#ifdef USE_LOCALE_CTYPE
SvREFCNT_dec(PL_warn_locale);
PL_warn_locale = NULL;
#endif
- if (!specialWARN(PL_compiling.cop_warnings))
- PerlMemShared_free(PL_compiling.cop_warnings);
- PL_compiling.cop_warnings = NULL;
+ SvREFCNT_dec(PL_AboveLatin1);
+ PL_AboveLatin1 = NULL;
+ SvREFCNT_dec(PL_Assigned_invlist);
+ PL_Assigned_invlist = NULL;
+ SvREFCNT_dec(PL_GCB_invlist);
+ PL_GCB_invlist = NULL;
+ SvREFCNT_dec(PL_HasMultiCharFold);
+ PL_HasMultiCharFold = NULL;
+ SvREFCNT_dec(PL_InMultiCharFold);
+ PL_InMultiCharFold = NULL;
+ SvREFCNT_dec(PL_Latin1);
+ PL_Latin1 = NULL;
+ SvREFCNT_dec(PL_LB_invlist);
+ PL_LB_invlist = NULL;
+ SvREFCNT_dec(PL_SB_invlist);
+ PL_SB_invlist = NULL;
+ SvREFCNT_dec(PL_SCX_invlist);
+ PL_SCX_invlist = NULL;
+ SvREFCNT_dec(PL_UpperLatin1);
+ PL_UpperLatin1 = NULL;
+ SvREFCNT_dec(PL_in_some_fold);
+ PL_in_some_fold = NULL;
+ SvREFCNT_dec(PL_utf8_foldclosures);
+ PL_utf8_foldclosures = NULL;
+ SvREFCNT_dec(PL_utf8_idcont);
+ PL_utf8_idcont = NULL;
+ SvREFCNT_dec(PL_utf8_idstart);
+ PL_utf8_idstart = NULL;
+ SvREFCNT_dec(PL_utf8_perl_idcont);
+ PL_utf8_perl_idcont = NULL;
+ SvREFCNT_dec(PL_utf8_perl_idstart);
+ PL_utf8_perl_idstart = NULL;
+ SvREFCNT_dec(PL_utf8_xidcont);
+ PL_utf8_xidcont = NULL;
+ SvREFCNT_dec(PL_utf8_xidstart);
+ PL_utf8_xidstart = NULL;
+ SvREFCNT_dec(PL_WB_invlist);
+ PL_WB_invlist = NULL;
+ SvREFCNT_dec(PL_utf8_toupper);
+ PL_utf8_toupper = NULL;
+ SvREFCNT_dec(PL_utf8_totitle);
+ PL_utf8_totitle = NULL;
+ SvREFCNT_dec(PL_utf8_tolower);
+ PL_utf8_tolower = NULL;
+ SvREFCNT_dec(PL_utf8_tofold);
+ PL_utf8_tofold = NULL;
+ SvREFCNT_dec(PL_utf8_tosimplefold);
+ PL_utf8_tosimplefold = NULL;
+ SvREFCNT_dec(PL_utf8_charname_begin);
+ PL_utf8_charname_begin = NULL;
+ SvREFCNT_dec(PL_utf8_charname_continue);
+ PL_utf8_charname_continue = NULL;
+ SvREFCNT_dec(PL_utf8_mark);
+ PL_utf8_mark = NULL;
+ SvREFCNT_dec(PL_InBitmap);
+ PL_InBitmap = NULL;
+ SvREFCNT_dec(PL_CCC_non0_non230);
+ PL_CCC_non0_non230 = NULL;
+ SvREFCNT_dec(PL_Private_Use);
+ PL_Private_Use = NULL;
+
+ for (i = 0; i < POSIX_CC_COUNT; i++) {
+ SvREFCNT_dec(PL_XPosix_ptrs[i]);
+ PL_XPosix_ptrs[i] = NULL;
+
+ if (i != _CC_CASED) { /* A copy of Alpha */
+ SvREFCNT_dec(PL_Posix_ptrs[i]);
+ PL_Posix_ptrs[i] = NULL;
+ }
+ }
+
+ free_and_set_cop_warnings(&PL_compiling, NULL);
cophh_free(CopHINTHASH_get(&PL_compiling));
CopHINTHASH_set(&PL_compiling, cophh_new_empty());
CopFILE_free(&PL_compiling);
@@ -1583,7 +1633,7 @@ Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr)
}
/*
-=for apidoc Am|int|perl_parse|PerlInterpreter *my_perl|XSINIT_t xsinit|int argc|char **argv|char **env
+=for apidoc perl_parse
Tells a Perl interpreter to parse a Perl script. This performs most
of the initialisation of a Perl interpreter. See L<perlembed> for
@@ -2019,8 +2069,6 @@ S_Internals_V(pTHX_ CV *cv)
# endif
#endif
-#undef PERL_BUILD_DATE
-
#ifdef PERL_BUILD_DATE
PUSHs(Perl_newSVpvn_flags(aTHX_
STR_WITH_LEN("Compiled at " PERL_BUILD_DATE),
@@ -2236,10 +2284,6 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
#endif
(s = PerlEnv_getenv("PERL5OPT")))
{
- /* s points to static memory in getenv(), which may be overwritten at
- * any time; use a mortal copy instead */
- s = SvPVX(sv_2mortal(newSVpv(s, 0)));
-
while (isSPACE(*s))
s++;
if (*s == '-' && *(s+1) == 'T') {
@@ -2268,7 +2312,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
d = s;
if (!*s)
break;
- if (!strchr("CDIMUdmtwW", *s))
+ if (!memCHRs("CDIMUdmtwW", *s))
Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s);
while (++s && *s) {
if (isSPACE(*s)) {
@@ -2569,7 +2613,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
}
/*
-=for apidoc Am|int|perl_run|PerlInterpreter *my_perl
+=for apidoc perl_run
Tells a Perl interpreter to run its main program. See L<perlembed>
for a tutorial.
@@ -2724,7 +2768,7 @@ S_run_body(pTHX_ I32 oldscope)
/*
=head1 SV Manipulation Functions
-=for apidoc p||get_sv
+=for apidoc get_sv
Returns the SV of the specified Perl scalar. C<flags> are passed to
C<gv_fetchpv>. If C<GV_ADD> is set and the
@@ -2750,7 +2794,7 @@ Perl_get_sv(pTHX_ const char *name, I32 flags)
/*
=head1 Array Manipulation Functions
-=for apidoc p||get_av
+=for apidoc get_av
Returns the AV of the specified Perl global or package array with the given
name (so it won't work on lexical variables). C<flags> are passed
@@ -2780,7 +2824,7 @@ Perl_get_av(pTHX_ const char *name, I32 flags)
/*
=head1 Hash Manipulation Functions
-=for apidoc p||get_hv
+=for apidoc get_hv
Returns the HV of the specified Perl hash. C<flags> are passed to
C<gv_fetchpv>. If C<GV_ADD> is set and the
@@ -2807,7 +2851,7 @@ Perl_get_hv(pTHX_ const char *name, I32 flags)
/*
=head1 CV Manipulation Functions
-=for apidoc p||get_cvn_flags
+=for apidoc get_cvn_flags
Returns the CV of the specified Perl subroutine. C<flags> are passed to
C<gv_fetchpvn_flags>. If C<GV_ADD> is set and the Perl subroutine does not
@@ -2815,7 +2859,7 @@ exist then it will be declared (which has the same effect as saying
C<sub name;>). If C<GV_ADD> is not set and the subroutine does not exist
then NULL is returned.
-=for apidoc p||get_cv
+=for apidoc get_cv
Uses C<strlen> to get the length of C<name>, then calls C<get_cvn_flags>.
@@ -2859,7 +2903,7 @@ Perl_get_cv(pTHX_ const char *name, I32 flags)
=head1 Callback Functions
-=for apidoc p||call_argv
+=for apidoc call_argv
Performs a callback to the specified named and package-scoped Perl subroutine
with C<argv> (a C<NULL>-terminated array of strings) as arguments. See
@@ -2890,7 +2934,7 @@ Perl_call_argv(pTHX_ const char *sub_name, I32 flags, char **argv)
}
/*
-=for apidoc p||call_pv
+=for apidoc call_pv
Performs a callback to the specified Perl sub. See L<perlcall>.
@@ -2908,7 +2952,7 @@ Perl_call_pv(pTHX_ const char *sub_name, I32 flags)
}
/*
-=for apidoc p||call_method
+=for apidoc call_method
Performs a callback to the specified Perl method. The blessed object must
be on the stack. See L<perlcall>.
@@ -2935,7 +2979,7 @@ Perl_call_method(pTHX_ const char *methname, I32 flags)
/* May be called with any of a CV, a GV, or an SV containing the name. */
/*
-=for apidoc p||call_sv
+=for apidoc call_sv
Performs a callback to the Perl sub specified by the SV.
@@ -2954,6 +2998,9 @@ not be depended on.
See L<perlcall>.
+=for apidoc Amnh||G_METHOD
+=for apidoc Amnh||G_METHOD_NAMED
+
=cut
*/
@@ -3098,11 +3145,15 @@ Perl_call_sv(pTHX_ SV *sv, volatile I32 flags)
/* Eval a string. The G_EVAL flag is always assumed. */
/*
-=for apidoc p||eval_sv
+=for apidoc eval_sv
Tells Perl to C<eval> the string in the SV. It supports the same flags
as C<call_sv>, with the obvious exception of C<G_EVAL>. See L<perlcall>.
+The C<G_RETHROW> flag can be used if you only need eval_sv() to
+execute code specified by a string, but not catch any errors.
+
+=for apidoc Amnh||G_RETHROW
=cut
*/
@@ -3184,6 +3235,11 @@ Perl_eval_sv(pTHX_ SV *sv, I32 flags)
goto redo_body;
}
fail:
+ if (flags & G_RETHROW) {
+ JMPENV_POP;
+ croak_sv(ERRSV);
+ }
+
PL_stack_sp = PL_stack_base + oldmark;
if ((flags & G_WANT) == G_ARRAY)
retval = 0;
@@ -3206,7 +3262,7 @@ Perl_eval_sv(pTHX_ SV *sv, I32 flags)
}
/*
-=for apidoc p||eval_pv
+=for apidoc eval_pv
Tells Perl to C<eval> the given string in scalar context and return an SV* result.
@@ -3220,8 +3276,14 @@ Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error)
PERL_ARGS_ASSERT_EVAL_PV;
- eval_sv(sv, G_SCALAR);
- SvREFCNT_dec(sv);
+ if (croak_on_error) {
+ sv_2mortal(sv);
+ eval_sv(sv, G_SCALAR | G_RETHROW);
+ }
+ else {
+ eval_sv(sv, G_SCALAR);
+ SvREFCNT_dec(sv);
+ }
{
dSP;
@@ -3229,14 +3291,6 @@ Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error)
PUTBACK;
}
- /* just check empty string or undef? */
- if (croak_on_error) {
- SV * const errsv = ERRSV;
- if(SvTRUE_NN(errsv))
- /* replace with croak_sv? */
- Perl_croak_nocontext("%s", SvPV_nolen_const(errsv));
- }
-
return sv;
}
@@ -3245,7 +3299,7 @@ Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error)
/*
=head1 Embedding Functions
-=for apidoc p||require_pv
+=for apidoc require_pv
Tells Perl to C<require> the file named by the string argument. It is
analogous to the Perl code C<eval "require '$file'">. It's even
@@ -3355,6 +3409,7 @@ Perl_get_debug_opts(pTHX_ const char **s, bool givehelp)
" B dump suBroutine definitions, including special Blocks like BEGIN\n",
" L trace some locale setting information--for Perl core development\n",
" i trace PerlIO layer processing\n",
+ " y trace y///, tr/// compilation and execution\n",
NULL
};
UV uv = 0;
@@ -3363,7 +3418,7 @@ Perl_get_debug_opts(pTHX_ const char **s, bool givehelp)
if (isALPHA(**s)) {
/* if adding extra options, remember to update DEBUG_MASK */
- static const char debopts[] = "psltocPmfrxuUHXDSTRJvCAqMBLi";
+ static const char debopts[] = "psltocPmfrxuUHXDSTRJvCAqMBLiy";
for (; isWORDCHAR(**s); (*s)++) {
const char * const d = strchr(debopts,**s);
@@ -3686,16 +3741,12 @@ Perl_moreswitches(pTHX_ const char *s)
return s;
case 'W':
PL_dowarn = G_WARN_ALL_ON|G_WARN_ON;
- if (!specialWARN(PL_compiling.cop_warnings))
- PerlMemShared_free(PL_compiling.cop_warnings);
- PL_compiling.cop_warnings = pWARN_ALL ;
+ free_and_set_cop_warnings(&PL_compiling, pWARN_ALL);
s++;
return s;
case 'X':
PL_dowarn = G_WARN_ALL_OFF;
- if (!specialWARN(PL_compiling.cop_warnings))
- PerlMemShared_free(PL_compiling.cop_warnings);
- PL_compiling.cop_warnings = pWARN_NONE ;
+ free_and_set_cop_warnings(&PL_compiling, pWARN_NONE);
s++;
return s;
case '*':
@@ -3784,7 +3835,7 @@ S_minus_v(pTHX)
#endif
PerlIO_printf(PIO_stdout,
- "\n\nCopyright 1987-2020, Larry Wall\n");
+ "\n\nCopyright 1987-2021, Larry Wall\n");
#ifdef MSDOS
PerlIO_printf(PIO_stdout,
"\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
@@ -3811,12 +3862,6 @@ S_minus_v(pTHX)
PerlIO_printf(PIO_stdout,
"BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n");
#endif
-#ifdef UNDER_CE
- PerlIO_printf(PIO_stdout,
- "WINCE port by Rainer Keuchel, 2001-2002\n"
- "Built on " __DATE__ " " __TIME__ "\n\n");
- wce_hitreturn();
-#endif
#ifdef __SYMBIAN32__
PerlIO_printf(PIO_stdout,
"Symbian port by Nokia, 2004-2005\n");
@@ -5132,6 +5177,15 @@ Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
}
}
+/*
+=for apidoc my_exit
+
+A wrapper for the C library L<exit(3)>, honoring what L<perlapi/PL_exit_flags>
+say to do.
+
+=cut
+*/
+
void
Perl_my_exit(pTHX_ U32 status)
{
@@ -5192,7 +5246,7 @@ Perl_my_failure_exit(pTHX)
* success/warning codes to fatal with out changing
* the POSIX status code. The severity makes VMS native
* status handling work, while UNIX mode programs use the
- * the POSIX exit codes.
+ * POSIX exit codes.
*/
if ((STATUS_NATIVE & (STS$K_SEVERE|STS$K_ERROR)) == 0) {
STATUS_NATIVE &= STS$M_COND_ID;
diff --git a/gnu/usr.bin/perl/perl.h b/gnu/usr.bin/perl/perl.h
index e5a55850f18..b0d35e27c72 100644
--- a/gnu/usr.bin/perl/perl.h
+++ b/gnu/usr.bin/perl/perl.h
@@ -116,11 +116,6 @@
/* <--- here ends the logic shared by perl.h and makedef.pl */
-/* Microsoft Visual C++ 6.0 needs special treatment in numerous places */
-#if defined(WIN32) && defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1300
-# define USING_MSVC6
-#endif
-
#undef START_EXTERN_C
#undef END_EXTERN_C
#undef EXTERN_C
@@ -299,9 +294,130 @@
: (REGEXP *)NULL)
#endif
+/* some compilers impersonate gcc */
+#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER)
+# define PERL_IS_GCC 1
+#endif
+/* In case Configure was not used (we are using a "canned config"
+ * such as Win32, or a cross-compilation setup, for example) try going
+ * by the gcc major and minor versions. One useful URL is
+ * http://www.ohse.de/uwe/articles/gcc-attributes.html,
+ * but contrary to this information warn_unused_result seems
+ * not to be in gcc 3.3.5, at least. --jhi
+ * Also, when building extensions with an installed perl, this allows
+ * the user to upgrade gcc and get the right attributes, rather than
+ * relying on the list generated at Configure time. --AD
+ * Set these up now otherwise we get confused when some of the <*thread.h>
+ * includes below indirectly pull in <perlio.h> (which needs to know if we
+ * have HASATTRIBUTE_FORMAT).
+ */
+#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
+# 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
+# define __attribute__deprecated__ __attribute__((deprecated))
+#endif
+#ifdef HASATTRIBUTE_FORMAT
+# define __attribute__format__(x,y,z) __attribute__((format(x,y,z)))
+#endif
+#ifdef HASATTRIBUTE_MALLOC
+# define __attribute__malloc__ __attribute__((__malloc__))
+#endif
+#ifdef HASATTRIBUTE_NONNULL
+# define __attribute__nonnull__(a) __attribute__((nonnull(a)))
+#endif
+#ifdef HASATTRIBUTE_NORETURN
+# define __attribute__noreturn__ __attribute__((noreturn))
+#endif
+#ifdef HASATTRIBUTE_PURE
+# define __attribute__pure__ __attribute__((pure))
+#endif
+#ifdef HASATTRIBUTE_UNUSED
+# define __attribute__unused__ __attribute__((unused))
+#endif
+#ifdef HASATTRIBUTE_WARN_UNUSED_RESULT
+# define __attribute__warn_unused_result__ __attribute__((warn_unused_result))
+#endif
+#ifdef HASATTRIBUTE_ALWAYS_INLINE
+/* always_inline is buggy in gcc <= 4.6 and causes compilation errors */
+# if !defined(PERL_IS_GCC) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7 || __GNUC__ > 4)
+# define __attribute__always_inline__ __attribute__((always_inline))
+# endif
+#endif
+
+/* If we haven't defined the attributes yet, define them to blank. */
+#ifndef __attribute__deprecated__
+# define __attribute__deprecated__
+#endif
+#ifndef __attribute__format__
+# define __attribute__format__(x,y,z)
+#endif
+#ifndef __attribute__malloc__
+# define __attribute__malloc__
+#endif
+#ifndef __attribute__nonnull__
+# define __attribute__nonnull__(a)
+#endif
+#ifndef __attribute__noreturn__
+# define __attribute__noreturn__
+#endif
+#ifndef __attribute__pure__
+# define __attribute__pure__
+#endif
+#ifndef __attribute__unused__
+# define __attribute__unused__
+#endif
+#ifndef __attribute__warn_unused_result__
+# define __attribute__warn_unused_result__
+#endif
+#ifndef __attribute__always_inline__
+# define __attribute__always_inline__
+#endif
+
+/* Some OS warn on NULL format to printf */
+#ifdef PRINTF_FORMAT_NULL_OK
+# define __attribute__format__null_ok__(x,y,z) __attribute__format__(x,y,z)
+#else
+# define __attribute__format__null_ok__(x,y,z)
+#endif
/*
* Because of backward compatibility reasons the PERL_UNUSED_DECL
@@ -315,20 +431,8 @@
*
*/
-#if defined(__SYMBIAN32__) && defined(__GNUC__)
-# ifdef __cplusplus
-# define PERL_UNUSED_DECL
-# else
-# define PERL_UNUSED_DECL __attribute__((unused))
-# endif
-#endif
-
#ifndef PERL_UNUSED_DECL
-# if defined(HASATTRIBUTE_UNUSED) && (!defined(__cplusplus) || __GNUC__ >= 4)
-# define PERL_UNUSED_DECL __attribute__unused__
-# else
-# define PERL_UNUSED_DECL
-# endif
+# define PERL_UNUSED_DECL __attribute__unused__
#endif
/* gcc -Wall:
@@ -395,6 +499,11 @@
# endif
#endif
+#if defined(_MSC_VER)
+/* XXX older MSVC versions have a smallish macro buffer */
+#define PERL_SMALL_MACRO_BUFFER
+#endif
+
/* on gcc (and clang), specify that a warning should be temporarily
* ignored; e.g.
*
@@ -533,12 +642,25 @@
#endif
/*
- * STMT_START { statements; } STMT_END;
- * can be used as a single statement, as in
- * if (x) STMT_START { ... } STMT_END; else ...
- *
- * Trying to select a version that gives no warnings...
- */
+=head1 Miscellaneous Functions
+
+=for apidoc AmnUu|void|STMT_START
+
+ STMT_START { statements; } STMT_END;
+
+can be used as a single statement, as in
+
+ if (x) STMT_START { ... } STMT_END; else ...
+
+These are often used in macro definitions. Note that you can't return a value
+out of them.
+
+=for apidoc AmnUhu|void|STMT_END
+
+=cut
+
+ Trying to select a version that gives no warnings...
+*/
#if !(defined(STMT_START) && defined(STMT_END))
# ifdef PERL_USE_GCC_BRACE_GROUPS
# define STMT_START (void)( /* gcc supports "({ STATEMENTS; })" */
@@ -553,11 +675,6 @@
# define BYTEORDER 0x1234
#endif
-/* Overall memory policy? */
-#ifndef CONSERVATIVE
-# define LIBERAL 1
-#endif
-
#if 'A' == 65 && 'I' == 73 && 'J' == 74 && 'Z' == 90
#define ASCIIish
#else
@@ -623,16 +740,24 @@
# define TAINT_WARN_get 0
# define TAINT_WARN_set(s) NOOP
#else
+ /* Set to tainted if we are running under tainting mode */
# define TAINT (PL_tainted = PL_tainting)
-# define TAINT_NOT (PL_tainted = FALSE)
-# define TAINT_IF(c) if (UNLIKELY(c)) { PL_tainted = PL_tainting; }
+
+# define TAINT_NOT (PL_tainted = FALSE) /* Untaint */
+# define TAINT_IF(c) if (UNLIKELY(c)) { TAINT; } /* Conditionally taint */
# define TAINT_ENV() if (UNLIKELY(PL_tainting)) { taint_env(); }
-# define TAINT_PROPER(s) if (UNLIKELY(PL_tainting)) { taint_proper(NULL, s); }
+ /* croak or warn if tainting */
+# define TAINT_PROPER(s) if (UNLIKELY(PL_tainting)) { \
+ taint_proper(NULL, s); \
+ }
# define TAINT_set(s) (PL_tainted = (s))
-# define TAINT_get (PL_tainted)
-# define TAINTING_get (PL_tainting)
+# define TAINT_get (cBOOL(UNLIKELY(PL_tainted))) /* Is something tainted? */
+# define TAINTING_get (cBOOL(UNLIKELY(PL_tainting))) /* Is taint checking enabled? */
# define TAINTING_set(s) (PL_tainting = (s))
-# define TAINT_WARN_get (PL_taint_warn)
+# define TAINT_WARN_get (PL_taint_warn) /* FALSE => tainting violations
+ are fatal
+ TRUE => they're just
+ warnings */
# define TAINT_WARN_set(s) (PL_taint_warn = (s))
#endif
@@ -706,6 +831,10 @@
# define MB_CUR_MAX 1uL
#endif
+# ifdef I_WCHAR
+# include <wchar.h>
+# endif
+
# include <stdarg.h>
#ifdef I_STDINT
@@ -1266,6 +1395,38 @@ EXTERN_C char *crypt(const char *, const char *);
EXTERN_C char *crypt(const char *, const char *);
#endif
+/*
+=head1 Errno
+
+=for apidoc m|void|SETERRNO|int errcode|int vmserrcode
+
+Set C<errno>, and on VMS set C<vaxc$errno>.
+
+=for apidoc mn|void|dSAVEDERRNO
+
+Declare variables needed to save C<errno> and any operating system
+specific error number.
+
+=for apidoc mn|void|dSAVE_ERRNO
+
+Declare variables needed to save C<errno> and any operating system
+specific error number, and save them for optional later restoration
+by C<RESTORE_ERRNO>.
+
+=for apidoc mn|void|SAVE_ERRNO
+
+Save C<errno> and any operating system specific error number for
+optional later restoration by C<RESTORE_ERRNO>. Requires
+C<dSAVEDERRNO> or C<dSAVE_ERRNO> in scope.
+
+=for apidoc mn|void|RESTORE_ERRNO
+
+Restore C<errno> and any operating system specific error number that
+was saved by C<dSAVE_ERRNO> or C<RESTORE_ERRNO>.
+
+=cut
+*/
+
#ifdef SETERRNO
# undef SETERRNO /* SOCKS might have defined this */
#endif
@@ -1337,6 +1498,29 @@ EXTERN_C char *crypt(const char *, const char *);
# define RESTORE_ERRNO (errno = saved_errno)
#endif
+/*
+=head1 Warning and Dieing
+
+=for apidoc Amn|SV *|ERRSV
+
+Returns the SV for C<$@>, creating it if needed.
+
+=for apidoc Am|void|CLEAR_ERRSV
+
+Clear the contents of C<$@>, setting it to the empty string.
+
+This replaces any read-only SV with a fresh SV and removes any magic.
+
+=for apidoc Am|void|SANE_ERRSV
+
+Clean up ERRSV so we can safely set it.
+
+This replaces any read-only SV with a fresh writable copy and removes
+any magic.
+
+=cut
+*/
+
#define ERRSV GvSVn(PL_errgv)
/* contains inlined gv_add_by_type */
@@ -1357,6 +1541,23 @@ EXTERN_C char *crypt(const char *, const char *);
} \
} STMT_END
+/* contains inlined gv_add_by_type */
+#define SANE_ERRSV() STMT_START { \
+ SV ** const svp = &GvSV(PL_errgv); \
+ if (!*svp) { \
+ *svp = newSVpvs(""); \
+ } else if (SvREADONLY(*svp)) { \
+ SV *dupsv = newSVsv(*svp); \
+ SvREFCNT_dec_NN(*svp); \
+ *svp = dupsv; \
+ } else { \
+ SV *const errsv = *svp; \
+ if (SvMAGICAL(errsv)) { \
+ mg_free(errsv); \
+ } \
+ } \
+ } STMT_END
+
#ifdef PERL_CORE
# define DEFSV (0 + GvSVn(PL_defgv))
@@ -1385,7 +1586,7 @@ EXTERN_C char *crypt(const char *, const char *);
#define UNKNOWN_ERRNO_MSG "(unknown)"
-#if VMS
+#ifdef VMS
#define Strerror(e) strerror((e), vaxc$errno)
#else
#define Strerror(e) strerror(e)
@@ -1582,9 +1783,17 @@ EXTERN_C char *crypt(const char *, const char *);
/* This used to be conditionally defined based on whether we had a sprintf()
* that correctly returns the string length (as required by C89), but we no
* 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. But we no longer document it
- * either (because using sprintf() rather than snprintf() is almost always
- * a bad idea). */
+ * a part of the API that's visible to modules.
+
+=head1 Miscellaneous Functions
+
+=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
+my_snprintf()
+
+=cut
+*/
#define my_sprintf sprintf
/*
@@ -1667,8 +1876,6 @@ EXTERN_C char *crypt(const char *, const char *);
#ifdef HAS_STRLCAT
# define my_strlcat strlcat
-#else
-# define my_strlcat Perl_my_strlcat
#endif
#if defined(PERL_CORE) || defined(PERL_EXT)
@@ -1681,14 +1888,10 @@ EXTERN_C char *crypt(const char *, const char *);
#ifdef HAS_STRLCPY
# define my_strlcpy strlcpy
-#else
-# define my_strlcpy Perl_my_strlcpy
#endif
#ifdef HAS_STRNLEN
# define my_strnlen strnlen
-#else
-# define my_strnlen Perl_my_strnlen
#endif
/*
@@ -1702,13 +1905,13 @@ typedef UVTYPE UV;
#if defined(USE_64_BIT_INT) && defined(HAS_QUAD)
# if QUADKIND == QUAD_IS_INT64_T && defined(INT64_MAX)
-# define IV_MAX INT64_MAX
-# define IV_MIN INT64_MIN
-# define UV_MAX UINT64_MAX
+# define IV_MAX ((IV)INT64_MAX)
+# define IV_MIN ((IV)INT64_MIN)
+# define UV_MAX ((UV)UINT64_MAX)
# ifndef UINT64_MIN
# define UINT64_MIN 0
# endif
-# define UV_MIN UINT64_MIN
+# define UV_MIN ((UV)UINT64_MIN)
# else
# define IV_MAX PERL_QUAD_MAX
# define IV_MIN PERL_QUAD_MIN
@@ -1719,17 +1922,17 @@ typedef UVTYPE UV;
# define UV_IS_QUAD
#else
# if defined(INT32_MAX) && IVSIZE == 4
-# define IV_MAX INT32_MAX
-# define IV_MIN INT32_MIN
+# define IV_MAX ((IV)INT32_MAX)
+# define IV_MIN ((IV)INT32_MIN)
# ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
-# define UV_MAX UINT32_MAX
+# define UV_MAX ((UV)UINT32_MAX)
# else
-# define UV_MAX 4294967295U
+# define UV_MAX ((UV)4294967295U)
# endif
# ifndef UINT32_MIN
# define UINT32_MIN 0
# endif
-# define UV_MIN UINT32_MIN
+# define UV_MIN ((UV)UINT32_MIN)
# else
# define IV_MAX PERL_LONG_MAX
# define IV_MIN PERL_LONG_MIN
@@ -1745,11 +1948,10 @@ typedef UVTYPE UV;
# else
# undef IV_IS_QUAD
# undef UV_IS_QUAD
-#if !defined(PERL_CORE) || defined(USING_MSVC6)
+#if !defined(PERL_CORE)
/* We think that removing this decade-old undef this will cause too much
breakage on CPAN for too little gain. (See RT #119753)
- However, we do need HAS_QUAD in the core for use by the drand48 code,
- but not for Win32 VC6 because it has poor __int64 support. */
+ However, we do need HAS_QUAD in the core for use by the drand48 code. */
# undef HAS_QUAD
#endif
# endif
@@ -1841,11 +2043,6 @@ typedef NVTYPE NV;
# include <ieeefp.h>
#endif
-#ifdef USING_MSVC6
-/* VC6 has broken NaN semantics: NaN == NaN returns true instead of false,
- * and for example NaN < IV_MIN. */
-# define NAN_COMPARE_BROKEN
-#endif
#if defined(__DECC) && defined(__osf__)
/* Also Tru64 cc has broken NaN comparisons. */
# define NAN_COMPARE_BROKEN
@@ -2290,10 +2487,6 @@ extern long double Perl_my_frexpl(long double x, int *e);
(Perl_fp_class_pdenorm(x) || Perl_fp_class_ndenorm(x))
#endif
-#ifdef UNDER_CE
-int isnan(double d);
-#endif
-
#ifndef Perl_isnan
# ifdef Perl_fp_class_nan
# define Perl_isnan(x) Perl_fp_class_nan(x)
@@ -2414,6 +2607,58 @@ int isnan(double d);
# define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
#endif
+/*
+=head1 Numeric functions
+
+=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
+platform in variables of the corresponding types.
+
+For signed types, the smallest representable number is the most negative
+number, the one furthest away from zero.
+
+For C99 and later compilers, these correspond to things like C<INT_MAX>, which
+are available to the C code. But these constants, furnished by Perl,
+allow code compiled on earlier compilers to portably have access to the same
+constants.
+
+=cut
+
+*/
+
typedef MEM_SIZE STRLEN;
typedef struct op OP;
@@ -2671,6 +2916,67 @@ typedef struct padname PADNAME;
# 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
+ * handlers, so don't enable for now.
+ * NB: POSIX::sigaction() supports both.
+ *
+ * # define PERL_USE_3ARG_SIGHANDLER
+ */
+#endif
+
+/* Siginfo_t:
+ * This is an alias for the OS's siginfo_t, except that where the OS
+ * doesn't support it, declare a dummy version instead. This allows us to
+ * have signal handler functions which always have a Siginfo_t parameter
+ * regardless of platform, (and which will just be passed a NULL value
+ * where the OS doesn't support HAS_SIGACTION).
+ */
+
+#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
+ typedef siginfo_t Siginfo_t;
+#else
+#ifdef si_signo /* minix */
+#undef si_signo
+#endif
+ typedef struct {
+ int si_signo;
+ } Siginfo_t;
+#endif
+
+
/*
* initialise to avoid floating-point exceptions from overflow, etc
*/
@@ -2788,55 +3094,6 @@ freeing any remaining Perl interpreters.
# endif
#endif
-/* In case Configure was not used (we are using a "canned config"
- * such as Win32, or a cross-compilation setup, for example) try going
- * by the gcc major and minor versions. One useful URL is
- * http://www.ohse.de/uwe/articles/gcc-attributes.html,
- * but contrary to this information warn_unused_result seems
- * not to be in gcc 3.3.5, at least. --jhi
- * Also, when building extensions with an installed perl, this allows
- * the user to upgrade gcc and get the right attributes, rather than
- * relying on the list generated at Configure time. --AD
- * Set these up now otherwise we get confused when some of the <*thread.h>
- * includes below indirectly pull in <perlio.h> (which needs to know if we
- * have HASATTRIBUTE_FORMAT).
- */
-
-#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
-# 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
-#endif
-#endif /* #ifndef PERL_MICRO */
-
/* 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++
@@ -3353,7 +3610,13 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex)
#define HEKfARG(p) ((void*)(p))
-/* Takes three arguments: is_utf8, length, str */
+/*
+=for apidoc Amnh||UTF8f
+=for apidoc Amh||UTF8fARG|bool is_utf8|Size_t byte_len|char *str
+
+=cut
+ * %4p is a custom format
+ */
#ifndef UTF8f
# define UTF8f "d%" UVuf "%4p"
#endif
@@ -3369,57 +3632,6 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex)
# define UVf UVuf
#endif
-#ifdef HASATTRIBUTE_DEPRECATED
-# define __attribute__deprecated__ __attribute__((deprecated))
-#endif
-#ifdef HASATTRIBUTE_FORMAT
-# define __attribute__format__(x,y,z) __attribute__((format(x,y,z)))
-#endif
-#ifdef HASATTRIBUTE_MALLOC
-# define __attribute__malloc__ __attribute__((__malloc__))
-#endif
-#ifdef HASATTRIBUTE_NONNULL
-# define __attribute__nonnull__(a) __attribute__((nonnull(a)))
-#endif
-#ifdef HASATTRIBUTE_NORETURN
-# define __attribute__noreturn__ __attribute__((noreturn))
-#endif
-#ifdef HASATTRIBUTE_PURE
-# define __attribute__pure__ __attribute__((pure))
-#endif
-#ifdef HASATTRIBUTE_UNUSED
-# define __attribute__unused__ __attribute__((unused))
-#endif
-#ifdef HASATTRIBUTE_WARN_UNUSED_RESULT
-# define __attribute__warn_unused_result__ __attribute__((warn_unused_result))
-#endif
-
-/* If we haven't defined the attributes yet, define them to blank. */
-#ifndef __attribute__deprecated__
-# define __attribute__deprecated__
-#endif
-#ifndef __attribute__format__
-# define __attribute__format__(x,y,z)
-#endif
-#ifndef __attribute__malloc__
-# define __attribute__malloc__
-#endif
-#ifndef __attribute__nonnull__
-# define __attribute__nonnull__(a)
-#endif
-#ifndef __attribute__noreturn__
-# define __attribute__noreturn__
-#endif
-#ifndef __attribute__pure__
-# define __attribute__pure__
-#endif
-#ifndef __attribute__unused__
-# define __attribute__unused__
-#endif
-#ifndef __attribute__warn_unused_result__
-# define __attribute__warn_unused_result__
-#endif
-
#if !defined(DEBUGGING) && !defined(NDEBUG)
# define NDEBUG 1
#endif
@@ -3434,20 +3646,30 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex)
# define NORETURN_FUNCTION_END NOT_REACHED; return 0
#endif
-/* Some OS warn on NULL format to printf */
-#ifdef PRINTF_FORMAT_NULL_OK
-# define __attribute__format__null_ok__(x,y,z) __attribute__format__(x,y,z)
-#else
-# define __attribute__format__null_ok__(x,y,z)
-#endif
-
#ifdef HAS_BUILTIN_EXPECT
# define EXPECT(expr,val) __builtin_expect(expr,val)
#else
# define EXPECT(expr,val) (expr)
#endif
+
+/*
+=head1 Miscellaneous Functions
+
+=for apidoc AmU|bool|LIKELY|const 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
+
+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.
+
+=cut
+*/
#define LIKELY(cond) EXPECT(cBOOL(cond),TRUE)
#define UNLIKELY(cond) EXPECT(cBOOL(cond),FALSE)
+
#ifdef HAS_BUILTIN_CHOOSE_EXPR
/* placeholder */
#endif
@@ -3464,8 +3686,11 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex)
STATIC_ASSERT_STMT expands to a statement and is suitable for use inside a
function.
*/
-#if (defined(static_assert) || (defined(__cplusplus) && __cplusplus >= 201103L)) && (!defined(__IBMC__) || __IBMC__ >= 1210)
-/* static_assert is a macro defined in <assert.h> in C11 or a compiler
+#if (! defined(__IBMC__) || __IBMC__ >= 1210) \
+ && (( defined(static_assert) && ( defined(_ISOC11_SOURCE) \
+ || (__STDC_VERSION__ - 0) >= 201101L)) \
+ || (defined(__cplusplus) && __cplusplus >= 201103L))
+/* XXX static_assert is a macro defined in <assert.h> in C11 or a compiler
builtin in C++11. But IBM XL C V11 does not support _Static_assert, no
matter what <assert.h> says.
*/
@@ -3521,9 +3746,9 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex)
# 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(0); __builtin_unreachable(); } STMT_END
+# define NOT_REACHED STMT_START { ASSUME(!"UNREACHABLE"); __builtin_unreachable(); } STMT_END
#else
-# define NOT_REACHED ASSUME(0)
+# define NOT_REACHED ASSUME(!"UNREACHABLE")
#endif
/* Some unistd.h's give a prototype for pause() even though
@@ -3642,6 +3867,14 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */
# define PERL_STATIC_INLINE_NO_RET PERL_STATIC_INLINE
#endif
+#ifndef PERL_STATIC_FORCE_INLINE
+# define PERL_STATIC_FORCE_INLINE PERL_STATIC_INLINE
+#endif
+
+#ifndef PERL_STATIC_FORCE_INLINE_NO_RET
+# define PERL_STATIC_FORCE_INLINE_NO_RET PERL_STATIC_INLINE
+#endif
+
#if !defined(OS2)
# include "iperlsys.h"
#endif
@@ -3667,13 +3900,13 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */
/* macros to define bit-fields in structs. */
#ifndef PERL_BITFIELD8
-# define PERL_BITFIELD8 unsigned
+# define PERL_BITFIELD8 U8
#endif
#ifndef PERL_BITFIELD16
-# define PERL_BITFIELD16 unsigned
+# define PERL_BITFIELD16 U16
#endif
#ifndef PERL_BITFIELD32
-# define PERL_BITFIELD32 unsigned
+# define PERL_BITFIELD32 U32
#endif
#include "sv.h"
@@ -3898,7 +4131,7 @@ my_swap16(const U16 x) {
#endif
#ifndef __cplusplus
-#if !(defined(WIN32) || defined(UNDER_CE) || defined(SYMBIAN))
+#if !(defined(WIN32) || defined(SYMBIAN))
Uid_t getuid (void);
Uid_t geteuid (void);
Gid_t getgid (void);
@@ -3949,7 +4182,8 @@ Gid_t getegid (void);
#define DEBUG_B_FLAG 0x02000000 /*33554432*/
#define DEBUG_L_FLAG 0x04000000 /*67108864*/
#define DEBUG_i_FLAG 0x08000000 /*134217728*/
-#define DEBUG_MASK 0x0FFFEFFF /* mask of all the standard flags */
+#define DEBUG_y_FLAG 0x10000000 /*268435456*/
+#define DEBUG_MASK 0x1FFFEFFF /* mask of all the standard flags */
#define DEBUG_DB_RECURSE_FLAG 0x40000000
#define DEBUG_TOP_FLAG 0x80000000 /* -D was given --> PL_debug |= FLAG */
@@ -3981,10 +4215,12 @@ Gid_t getegid (void);
# define DEBUG_B_TEST_ UNLIKELY(PL_debug & DEBUG_B_FLAG)
# 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_)
#ifdef DEBUGGING
@@ -4015,10 +4251,12 @@ Gid_t getegid (void);
# define DEBUG_B_TEST DEBUG_B_TEST_
# define DEBUG_L_TEST DEBUG_L_TEST_
# define DEBUG_i_TEST DEBUG_i_TEST_
+# define DEBUG_y_TEST DEBUG_y_TEST_
# define DEBUG_Xv_TEST DEBUG_Xv_TEST_
# define DEBUG_Uv_TEST DEBUG_Uv_TEST_
# define DEBUG_Pv_TEST DEBUG_Pv_TEST_
# define DEBUG_Lv_TEST DEBUG_Lv_TEST_
+# define DEBUG_yv_TEST DEBUG_yv_TEST_
# define PERL_DEB(a) a
# define PERL_DEB2(a,b) a
@@ -4052,10 +4290,11 @@ Gid_t getegid (void);
# define DEBUG_f(a) DEBUG__(DEBUG_f_TEST, a)
-# ifndef PERL_EXT_RE_BUILD
-# define DEBUG_r(a) DEBUG__(DEBUG_r_TEST, a)
-# else
+/* 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
+# else
+# define DEBUG_r(a) DEBUG__(DEBUG_r_TEST, a)
# endif /* PERL_EXT_RE_BUILD */
# define DEBUG_x(a) DEBUG__(DEBUG_x_TEST, a)
@@ -4067,6 +4306,7 @@ Gid_t getegid (void);
# define DEBUG_Uv(a) DEBUG__(DEBUG_Uv_TEST, a)
# define DEBUG_Pv(a) DEBUG__(DEBUG_Pv_TEST, a)
# define DEBUG_Lv(a) DEBUG__(DEBUG_Lv_TEST, a)
+# define DEBUG_yv(a) DEBUG__(DEBUG_yv_TEST, a)
# define DEBUG_S(a) DEBUG__(DEBUG_S_TEST, a)
# define DEBUG_T(a) DEBUG__(DEBUG_T_TEST, a)
@@ -4079,6 +4319,7 @@ Gid_t getegid (void);
# define DEBUG_B(a) DEBUG__(DEBUG_B_TEST, a)
# define DEBUG_L(a) DEBUG__(DEBUG_L_TEST, a)
# define DEBUG_i(a) DEBUG__(DEBUG_i_TEST, a)
+# define DEBUG_y(a) DEBUG__(DEBUG_y_TEST, a)
#else /* ! DEBUGGING below */
@@ -4109,10 +4350,12 @@ Gid_t getegid (void);
# define DEBUG_B_TEST (0)
# define DEBUG_L_TEST (0)
# define DEBUG_i_TEST (0)
+# define DEBUG_y_TEST (0)
# define DEBUG_Xv_TEST (0)
# define DEBUG_Uv_TEST (0)
# define DEBUG_Pv_TEST (0)
# define DEBUG_Lv_TEST (0)
+# define DEBUG_yv_TEST (0)
# define PERL_DEB(a)
# define PERL_DEB2(a,b) b
@@ -4143,10 +4386,12 @@ Gid_t getegid (void);
# define DEBUG_B(a)
# define DEBUG_L(a)
# define DEBUG_i(a)
+# define DEBUG_y(a)
# define DEBUG_Xv(a)
# define DEBUG_Uv(a)
# define DEBUG_Pv(a)
# define DEBUG_Lv(a)
+# define DEBUG_yv(a)
#endif /* DEBUGGING */
@@ -4466,12 +4711,14 @@ EXTCONST char PL_no_dir_func[]
EXTCONST char PL_no_func[]
INIT("The %s function is unimplemented");
EXTCONST char PL_no_myglob[]
- INIT("\"%s\" %se %s can't be in a package");
+ INIT("\"%s\" %s %s can't be in a package");
EXTCONST char PL_no_localize_ref[]
INIT("Can't localize through a reference");
EXTCONST char PL_memory_wrap[]
INIT("panic: memory wrap");
-
+EXTCONST char PL_extended_cp_format[]
+ INIT("Code point 0x%" UVXf " is not Unicode, requires a Perl extension,"
+ " and so is not portable");
EXTCONST char PL_Yes[]
INIT("1");
EXTCONST char PL_No[]
@@ -5481,7 +5728,7 @@ EXTCONST bool PL_valid_types_NV_set[];
#ifndef EBCDIC
/* The tables below are adapted from
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which requires this copyright
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which requires this copyright
* notice:
Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
@@ -5508,7 +5755,7 @@ SOFTWARE.
# ifdef DOINIT
# if 0 /* This is the original table given in
- http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ */
+ https://bjoern.hoehrmann.de/utf-8/decoder/dfa/ */
static U8 utf8d_C9[] = {
/* The first part of the table maps bytes to character classes that
* to reduce the size of the transition table and create bitmasks. */
@@ -5650,7 +5897,7 @@ EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
* that can be returned immediately.
*
* The "Implementation details" portion of
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ shows how
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/ shows how
* the first portion of the table maps each possible byte into a character
* class. And that the classes for those bytes which are start bytes have been
* carefully chosen so they serve as well to be used as a shift value to mask
@@ -5669,7 +5916,7 @@ EXTCONST U8 PL_extended_utf8_dfa_tab[] = {
* drops out immediately for that. In the dfa, classes 3 and 4 are used to
* distinguish EF vs the rest. Then special code is used to deal with ED,
* that's executed only when the dfa drops out. The code points started by ED
- * are half surrogates, and half hangul syllables. This means that 2048 of the
+ * are half surrogates, and half hangul syllables. This means that 2048 of
* the hangul syllables (about 18%) take longer than all other non-problematic
* code points to handle.
*
@@ -5799,7 +6046,7 @@ EXTCONST U8 PL_strict_utf8_dfa_tab[] = {
/* And below is yet another version of the above tables that accepts only UTF-8
* as defined by Corregidum #9. Hence no surrogates nor non-Unicode, but
* it allows non-characters. This is isomorphic to the original table
- * in http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+ * in https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
*
* The classes are
* 00-7F 0
@@ -5904,7 +6151,7 @@ EXTCONST U8 PL_c9_utf8_dfa_tab[];
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 be suppressed by setting PERL_NO_INLINE_FUNCTIONS. Doing this will
+ 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
@@ -6048,6 +6295,27 @@ typedef struct am_table_short AMTS;
# define IN_SOME_LOCALE_FORM_COMPILETIME \
cBOOL(PL_hints & (HINT_LOCALE|HINT_LOCALE_PARTIAL))
+/*
+=head1 Locale-related functions and macros
+
+=for apidoc Amn|bool|IN_LOCALE
+
+Evaluates to TRUE if the plain locale pragma without a parameter (S<C<use
+locale>>) is in effect.
+
+=for apidoc Amn|bool|IN_LOCALE_COMPILETIME
+
+Evaluates to TRUE if, when compiling a perl program (including an C<eval>) if
+the plain locale pragma without a parameter (S<C<use locale>>) is in effect.
+
+=for apidoc Amn|bool|IN_LOCALE_RUNTIME
+
+Evaluates to TRUE if, when executing a perl program (including an C<eval>) if
+the plain locale pragma without a parameter (S<C<use locale>>) is in effect.
+
+=cut
+*/
+
# define IN_LOCALE \
(IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
# define IN_SOME_LOCALE_FORM \
@@ -6074,7 +6342,7 @@ typedef struct am_table_short AMTS;
# if defined (PERL_CORE) || defined (PERL_IN_XSUB_RE)
/* This internal macro should be called from places that operate under
- * locale rules. It there is a problem with the current locale that
+ * locale rules. If there is a problem with the current locale that
* hasn't been raised yet, it will output a warning this time. Because
* this will so rarely be true, there is no point to optimize for time;
* instead it makes sense to minimize space used and do all the work in
@@ -6248,7 +6516,7 @@ typedef struct am_table_short AMTS;
else { \
PL_lc_numeric_mutex_depth++; \
DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
- "%s: %d: avoided lc_numeric_lock; depth=%d\n", \
+ "%s: %d: avoided lc_numeric_lock; new depth=%d\n", \
__FILE__, __LINE__, PL_lc_numeric_mutex_depth)); \
if (cond_to_panic_if_already_locked) { \
Perl_croak_nocontext("panic: %s: %d: Trying to change" \
@@ -6270,7 +6538,7 @@ typedef struct am_table_short AMTS;
else { \
PL_lc_numeric_mutex_depth--; \
DEBUG_Lv(PerlIO_printf(Perl_debug_log, \
- "%s: %d: avoided lc_numeric_unlock; depth=%d\n", \
+ "%s: %d: avoided lc_numeric_unlock; new depth=%d\n",\
__FILE__, __LINE__, PL_lc_numeric_mutex_depth)); \
} \
} STMT_END \
@@ -6308,7 +6576,7 @@ any executable statements.
=for apidoc Am|void|STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
-This is used by XS code that that is C<LC_NUMERIC> locale-aware to force the
+This is used by XS code that is C<LC_NUMERIC> locale-aware to force the
locale for category C<LC_NUMERIC> to be what perl thinks is the current
underlying locale. (The perl interpreter could be wrong about what the
underlying locale actually is if some C or XS code has called the C library
@@ -6369,7 +6637,15 @@ argument list, like this:
On threaded perls not operating with thread-safe functionality, this macro uses
a mutex to force a critical section. Therefore the matching RESTORE should be
-close by, and guaranteed to be called.
+close by, and guaranteed to be called; see L</WITH_LC_NUMERIC_SET_TO_NEEDED>
+for a more contained way to ensure that.
+
+=for apidoc Am|void|STORE_LC_NUMERIC_SET_TO_NEEDED_IN|bool in_lc_numeric
+
+Same as L</STORE_LC_NUMERIC_SET_TO_NEEDED> with in_lc_numeric provided
+as the precalculated value of C<IN_LC(LC_NUMERIC)>. It is the caller's
+responsibility to ensure that the status of C<PL_compiling> and C<PL_hints>
+cannot have changed since the precalculation.
=for apidoc Am|void|RESTORE_LC_NUMERIC
@@ -6390,6 +6666,36 @@ expression, but with an empty argument list, like this:
...
}
+=for apidoc Am|void|WITH_LC_NUMERIC_SET_TO_NEEDED|block
+
+This macro invokes the supplied statement or block within the context
+of a L</STORE_LC_NUMERIC_SET_TO_NEEDED> .. L</RESTORE_LC_NUMERIC> pair
+if required, so eg:
+
+ WITH_LC_NUMERIC_SET_TO_NEEDED(
+ SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis)
+ );
+
+is equivalent to:
+
+ {
+#ifdef USE_LOCALE_NUMERIC
+ DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
+ STORE_LC_NUMERIC_SET_TO_NEEDED();
+#endif
+ SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis);
+#ifdef USE_LOCALE_NUMERIC
+ RESTORE_LC_NUMERIC();
+#endif
+ }
+
+=for apidoc Am|void|WITH_LC_NUMERIC_SET_TO_NEEDED_IN|bool in_lc_numeric|block
+
+Same as L</WITH_LC_NUMERIC_SET_TO_NEEDED> with in_lc_numeric provided
+as the precalculated value of C<IN_LC(LC_NUMERIC)>. It is the caller's
+responsibility to ensure that the status of C<PL_compiling> and C<PL_hints>
+cannot have changed since the precalculation.
+
=cut
*/
@@ -6417,12 +6723,13 @@ expression, but with an empty argument list, like this:
# define DECLARATION_FOR_LC_NUMERIC_MANIPULATION \
void (*_restore_LC_NUMERIC_function)(pTHX) = NULL
-# define STORE_LC_NUMERIC_SET_TO_NEEDED() \
+# define STORE_LC_NUMERIC_SET_TO_NEEDED_IN(in) \
STMT_START { \
+ bool _in_lc_numeric = (in); \
LC_NUMERIC_LOCK( \
- ( ( IN_LC(LC_NUMERIC) && _NOT_IN_NUMERIC_UNDERLYING) \
- || (! IN_LC(LC_NUMERIC) && _NOT_IN_NUMERIC_STANDARD)));\
- if (IN_LC(LC_NUMERIC)) { \
+ ( ( _in_lc_numeric && _NOT_IN_NUMERIC_UNDERLYING) \
+ || (! _in_lc_numeric && _NOT_IN_NUMERIC_STANDARD))); \
+ if (_in_lc_numeric) { \
if (_NOT_IN_NUMERIC_UNDERLYING) { \
Perl_set_numeric_underlying(aTHX); \
_restore_LC_NUMERIC_function \
@@ -6438,6 +6745,9 @@ expression, but with an empty argument list, like this:
} \
} STMT_END
+# define STORE_LC_NUMERIC_SET_TO_NEEDED() \
+ STORE_LC_NUMERIC_SET_TO_NEEDED_IN(IN_LC(LC_NUMERIC))
+
# define RESTORE_LC_NUMERIC() \
STMT_START { \
if (_restore_LC_NUMERIC_function) { \
@@ -6512,22 +6822,65 @@ expression, but with an empty argument list, like this:
__FILE__, __LINE__, PL_numeric_standard)); \
} STMT_END
+# define WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric, block) \
+ STMT_START { \
+ DECLARATION_FOR_LC_NUMERIC_MANIPULATION; \
+ STORE_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric); \
+ block; \
+ RESTORE_LC_NUMERIC(); \
+ } STMT_END;
+
+# define WITH_LC_NUMERIC_SET_TO_NEEDED(block) \
+ WITH_LC_NUMERIC_SET_TO_NEEDED_IN(IN_LC(LC_NUMERIC), block)
+
#else /* !USE_LOCALE_NUMERIC */
# define SET_NUMERIC_STANDARD()
# define SET_NUMERIC_UNDERLYING()
# define IS_NUMERIC_RADIX(a, b) (0)
-# define DECLARATION_FOR_LC_NUMERIC_MANIPULATION
+# define DECLARATION_FOR_LC_NUMERIC_MANIPULATION dNOOP
# define STORE_LC_NUMERIC_SET_STANDARD()
# define STORE_LC_NUMERIC_FORCE_TO_UNDERLYING()
+# define STORE_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric)
# define STORE_LC_NUMERIC_SET_TO_NEEDED()
# define RESTORE_LC_NUMERIC()
# define LOCK_LC_NUMERIC_STANDARD()
# define UNLOCK_LC_NUMERIC_STANDARD()
+# define WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric, block) \
+ STMT_START { block; } STMT_END
+# define WITH_LC_NUMERIC_SET_TO_NEEDED(block) \
+ STMT_START { block; } STMT_END
#endif /* !USE_LOCALE_NUMERIC */
#define Atof my_atof
+
+/*
+
+=head1 Numeric functions
+
+=for apidoc AmTR|NV|Strtod|NN const char * const s|NULLOK char ** e
+
+This is a synonym for L</my_strtod>.
+
+=for apidoc AmTR|NV|Strtol|NN const char * const s|NULLOK char ** e|int base
+
+Platform and configuration independent C<strtol>. This expands to the
+appropriate C<strotol>-like function based on the platform and F<Configure>
+options>. For example it could expand to C<strtoll> or C<strtoq> instead of
+C<strtol>.
+
+=for apidoc AmTR|NV|Strtoul|NN const char * const s|NULLOK char ** e|int base
+
+Platform and configuration independent C<strtoul>. This expands to the
+appropriate C<strotoul>-like function based on the platform and F<Configure>
+options>. For example it could expand to C<strtoull> or C<strtouq> instead of
+C<strtoul>.
+
+=cut
+
+*/
+
#define Strtod my_strtod
#if defined(HAS_STRTOD) \
@@ -6597,6 +6950,14 @@ expression, but with an empty argument list, like this:
# define Atoul(s) Strtoul(s, NULL, 10)
#endif
+#define grok_bin(s,lp,fp,rp) \
+ grok_bin_oct_hex(s, lp, fp, rp, 1, _CC_BINDIGIT, 'b')
+#define grok_oct(s,lp,fp,rp) \
+ (*(fp) |= PERL_SCAN_DISALLOW_PREFIX, \
+ grok_bin_oct_hex(s, lp, fp, rp, 3, _CC_OCTDIGIT, '\0'))
+#define grok_hex(s,lp,fp,rp) \
+ grok_bin_oct_hex(s, lp, fp, rp, 4, _CC_XDIGIT, 'x')
+
#ifndef PERL_SCRIPT_MODE
#define PERL_SCRIPT_MODE "r"
#endif
@@ -6775,7 +7136,7 @@ expression, but with an empty argument list, like this:
#endif
#if defined(HAS_FLOCK) && !defined(HAS_FLOCK_PROTO)
-int flock(int fd, int op);
+EXTERN_C int flock(int fd, int op);
#endif
#ifndef O_RDONLY
@@ -6829,19 +7190,50 @@ int flock(int fd, int op);
#define IS_NUMBER_NAN 0x20 /* this is not */
#define IS_NUMBER_TRAILING 0x40 /* number has trailing trash */
+/*
+=head1 Numeric functions
+
+=for apidoc AmdR|bool|GROK_NUMERIC_RADIX|NN const char **sp|NN const char *send
+
+A synonym for L</grok_numeric_radix>
+
+=cut
+*/
#define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send)
-/* Input flags: */
+/* Number scan flags. All are used for input, the ones used for output are so
+ * marked */
#define PERL_SCAN_ALLOW_UNDERSCORES 0x01 /* grok_??? accept _ in numbers */
#define PERL_SCAN_DISALLOW_PREFIX 0x02 /* grok_??? reject 0x in hex etc */
-#define PERL_SCAN_SILENT_ILLDIGIT 0x04 /* grok_??? not warn about illegal digits */
-#define PERL_SCAN_SILENT_NON_PORTABLE 0x08 /* grok_??? not warn about very large
- numbers which are <= UV_MAX */
+
+/* grok_??? input: ignored; output: found overflow */
+#define PERL_SCAN_GREATER_THAN_UV_MAX 0x04
+
+/* grok_??? don't warn about illegal digits. To preserve total backcompat,
+ * this isn't set on output if one is found. Instead, see
+ * PERL_SCAN_NOTIFY_ILLDIGIT. */
+#define PERL_SCAN_SILENT_ILLDIGIT 0x08
+
#define PERL_SCAN_TRAILING 0x10 /* grok_number_flags() allow trailing
and set IS_NUMBER_TRAILING */
-/* Output flags: */
-#define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 /* should this merge with above? */
+/* These are considered experimental, so not exposed publicly */
+#if defined(PERL_CORE) || defined(PERL_EXT)
+/* grok_??? don't warn about very large numbers which are <= UV_MAX;
+ * output: found such a number */
+# define PERL_SCAN_SILENT_NON_PORTABLE 0x20
+
+/* If this is set on input, and no illegal digit is found, it will be cleared
+ * on output; otherwise unchanged */
+# define PERL_SCAN_NOTIFY_ILLDIGIT 0x40
+
+/* Don't warn on overflow; output flag still set */
+# define PERL_SCAN_SILENT_OVERFLOW 0x80
+
+/* Forbid a leading underscore, which the other one doesn't */
+# define PERL_SCAN_ALLOW_MEDIAL_UNDERSCORES (0x100|PERL_SCAN_ALLOW_UNDERSCORES)
+#endif
+
/* to let user control profiling */
#ifdef PERL_GPROF_CONTROL
@@ -6851,12 +7243,8 @@ extern void moncontrol(int);
#define PERL_GPROF_MONCONTROL(x)
#endif
-#ifdef UNDER_CE
-#include "wince.h"
-#endif
-
/* ISO 6429 NEL - C1 control NExt Line */
-/* See http://www.unicode.org/unicode/reports/tr13/ */
+/* See https://www.unicode.org/unicode/reports/tr13/ */
#define NEXT_LINE_CHAR NEXT_LINE_NATIVE
#ifndef PIPESOCK_MODE
@@ -6913,8 +7301,20 @@ extern void moncontrol(int);
#define PERL_SIGNALS_UNSAFE_FLAG 0x0001
-/* Use instead of abs() since abs() forces its argument to be an int,
- * but also beware since this evaluates its argument twice, so no x++. */
+/*
+=head1 Numeric functions
+
+=for apidoc Am|int|PERL_ABS|int
+
+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
+library ones force their argument to be what it is expecting, potentially
+leading to disaster. But also beware that this evaluates its argument twice,
+so no C<x++>.
+
+=cut
+*/
+
#define PERL_ABS(x) ((x) < 0 ? -(x) : (x))
#if defined(__DECC) && defined(__osf__)
@@ -6932,9 +7332,19 @@ extern void moncontrol(int);
# define do_aexec(really, mark,sp) do_aexec5(really, mark, sp, 0, 0)
#endif
-/* check embedded \0 characters in pathnames passed to syscalls,
- but allow one ending \0 */
-#define IS_SAFE_SYSCALL(p, len, what, op_name) (S_is_safe_syscall(aTHX_ (p), (len), (what), (op_name)))
+
+/*
+=head1 Miscellaneous Functions
+
+=for apidoc Am|bool|IS_SAFE_SYSCALL|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name
+
+Same as L</is_safe_syscall>.
+
+=cut
+
+Allows one ending \0
+*/
+#define IS_SAFE_SYSCALL(p, len, what, op_name) (Perl_is_safe_syscall(aTHX_ (p), (len), (what), (op_name)))
#define IS_SAFE_PATHNAME(p, len, op_name) IS_SAFE_SYSCALL((p), (len), "pathname", (op_name))
@@ -7200,7 +7610,9 @@ START_EXTERN_C
*/
/* The quadmath literals are anon structs which -Wc++-compat doesn't like. */
+# ifndef USE_CPLUSPLUS
GCC_DIAG_IGNORE_DECL(-Wc++-compat);
+# endif
# ifdef USE_QUADMATH
/* Cannot use HUGE_VALQ for PL_inf because not a compile-time
@@ -7270,7 +7682,9 @@ INFNAN_NV_U8_DECL PL_nan = { 0.0/0.0 }; /* keep last */
# endif
# endif
+# ifndef USE_CPLUSPLUS
GCC_DIAG_RESTORE_DECL;
+# endif
#else
diff --git a/gnu/usr.bin/perl/perlapi.h b/gnu/usr.bin/perl/perlapi.h
index 4cfbafecdfb..305c11d4133 100644
--- a/gnu/usr.bin/perl/perlapi.h
+++ b/gnu/usr.bin/perl/perlapi.h
@@ -99,48 +99,18 @@ END_EXTERN_C
#else /* !PERL_CORE */
-#undef PL_AboveLatin1
-#define PL_AboveLatin1 (*Perl_GAboveLatin1_ptr(NULL))
-#undef PL_Assigned_invlist
-#define PL_Assigned_invlist (*Perl_GAssigned_invlist_ptr(NULL))
-#undef PL_CCC_non0_non230
-#define PL_CCC_non0_non230 (*Perl_GCCC_non0_non230_ptr(NULL))
#undef PL_C_locale_obj
#define PL_C_locale_obj (*Perl_GC_locale_obj_ptr(NULL))
-#undef PL_GCB_invlist
-#define PL_GCB_invlist (*Perl_GGCB_invlist_ptr(NULL))
-#undef PL_HasMultiCharFold
-#define PL_HasMultiCharFold (*Perl_GHasMultiCharFold_ptr(NULL))
-#undef PL_InBitmap
-#define PL_InBitmap (*Perl_GInBitmap_ptr(NULL))
-#undef PL_InMultiCharFold
-#define PL_InMultiCharFold (*Perl_GInMultiCharFold_ptr(NULL))
-#undef PL_LB_invlist
-#define PL_LB_invlist (*Perl_GLB_invlist_ptr(NULL))
-#undef PL_Latin1
-#define PL_Latin1 (*Perl_GLatin1_ptr(NULL))
-#undef PL_NonFinalFold
-#define PL_NonFinalFold (*Perl_GNonFinalFold_ptr(NULL))
-#undef PL_Posix_ptrs
-#define PL_Posix_ptrs (*Perl_GPosix_ptrs_ptr(NULL))
-#undef PL_Private_Use
-#define PL_Private_Use (*Perl_GPrivate_Use_ptr(NULL))
-#undef PL_SB_invlist
-#define PL_SB_invlist (*Perl_GSB_invlist_ptr(NULL))
-#undef PL_SCX_invlist
-#define PL_SCX_invlist (*Perl_GSCX_invlist_ptr(NULL))
-#undef PL_UpperLatin1
-#define PL_UpperLatin1 (*Perl_GUpperLatin1_ptr(NULL))
-#undef PL_WB_invlist
-#define PL_WB_invlist (*Perl_GWB_invlist_ptr(NULL))
-#undef PL_XPosix_ptrs
-#define PL_XPosix_ptrs (*Perl_GXPosix_ptrs_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
@@ -149,6 +119,8 @@ END_EXTERN_C
#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
@@ -161,8 +133,6 @@ END_EXTERN_C
#define PL_hash_state (*Perl_Ghash_state_ptr(NULL))
#undef PL_hints_mutex
#define PL_hints_mutex (*Perl_Ghints_mutex_ptr(NULL))
-#undef PL_in_some_fold
-#define PL_in_some_fold (*Perl_Gin_some_fold_ptr(NULL))
#undef PL_keyword_plugin
#define PL_keyword_plugin (*Perl_Gkeyword_plugin_ptr(NULL))
#undef PL_keyword_plugin_mutex
@@ -245,36 +215,6 @@ END_EXTERN_C
#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_utf8_charname_begin
-#define PL_utf8_charname_begin (*Perl_Gutf8_charname_begin_ptr(NULL))
-#undef PL_utf8_charname_continue
-#define PL_utf8_charname_continue (*Perl_Gutf8_charname_continue_ptr(NULL))
-#undef PL_utf8_foldclosures
-#define PL_utf8_foldclosures (*Perl_Gutf8_foldclosures_ptr(NULL))
-#undef PL_utf8_idcont
-#define PL_utf8_idcont (*Perl_Gutf8_idcont_ptr(NULL))
-#undef PL_utf8_idstart
-#define PL_utf8_idstart (*Perl_Gutf8_idstart_ptr(NULL))
-#undef PL_utf8_mark
-#define PL_utf8_mark (*Perl_Gutf8_mark_ptr(NULL))
-#undef PL_utf8_perl_idcont
-#define PL_utf8_perl_idcont (*Perl_Gutf8_perl_idcont_ptr(NULL))
-#undef PL_utf8_perl_idstart
-#define PL_utf8_perl_idstart (*Perl_Gutf8_perl_idstart_ptr(NULL))
-#undef PL_utf8_tofold
-#define PL_utf8_tofold (*Perl_Gutf8_tofold_ptr(NULL))
-#undef PL_utf8_tolower
-#define PL_utf8_tolower (*Perl_Gutf8_tolower_ptr(NULL))
-#undef PL_utf8_tosimplefold
-#define PL_utf8_tosimplefold (*Perl_Gutf8_tosimplefold_ptr(NULL))
-#undef PL_utf8_totitle
-#define PL_utf8_totitle (*Perl_Gutf8_totitle_ptr(NULL))
-#undef PL_utf8_toupper
-#define PL_utf8_toupper (*Perl_Gutf8_toupper_ptr(NULL))
-#undef PL_utf8_xidcont
-#define PL_utf8_xidcont (*Perl_Gutf8_xidcont_ptr(NULL))
-#undef PL_utf8_xidstart
-#define PL_utf8_xidstart (*Perl_Gutf8_xidstart_ptr(NULL))
#undef PL_veto_cleanup
#define PL_veto_cleanup (*Perl_Gveto_cleanup_ptr(NULL))
#undef PL_watch_pvx
diff --git a/gnu/usr.bin/perl/perlio.c b/gnu/usr.bin/perl/perlio.c
index 904d47a57e3..39481eeb10a 100644
--- a/gnu/usr.bin/perl/perlio.c
+++ b/gnu/usr.bin/perl/perlio.c
@@ -1490,7 +1490,9 @@ PerlIO_openn(pTHX_ const char *layers, const char *mode, int fd,
int imode, int perm, PerlIO *f, int narg, SV **args)
{
if (!f && narg == 1 && *args == &PL_sv_undef) {
- if ((f = PerlIO_tmpfile())) {
+ imode = PerlIOUnix_oflags(mode);
+
+ if (imode != -1 && (f = PerlIO_tmpfile_flags(imode))) {
if (!layers || !*layers)
layers = Perl_PerlIO_context_layers(aTHX_ mode);
if (layers && *layers)
@@ -2816,6 +2818,7 @@ PerlIOUnix_close(pTHX_ PerlIO *f)
const int fd = PerlIOSelf(f, PerlIOUnix)->fd;
int code = 0;
if (PerlIOBase(f)->flags & PERLIO_F_OPEN) {
+ code = PerlIOBase_close(aTHX_ f);
if (PerlIOUnix_refcnt_dec(fd) > 0) {
PerlIOBase(f)->flags &= ~PERLIO_F_OPEN;
return 0;
@@ -3231,13 +3234,7 @@ PerlIOStdio_invalidate_fileno(pTHX_ FILE *f)
f->_file = -1;
return 1;
# elif defined(WIN32)
-# if defined(UNDER_CE)
- /* WIN_CE does not have access to FILE internals, it hardly has FILE
- structure at all
- */
-# else
PERLIO_FILE_file(f) = -1;
-# endif
return 1;
# else
#if 0
@@ -5049,44 +5046,60 @@ PerlIO_stdoutf(const char *fmt, ...)
PerlIO *
PerlIO_tmpfile(void)
{
+ return PerlIO_tmpfile_flags(0);
+}
+
+#define MKOSTEMP_MODES ( O_RDWR | O_CREAT | O_EXCL )
+#define MKOSTEMP_MODE_MASK ( O_ACCMODE | O_CREAT | O_EXCL | O_TRUNC )
+
+PerlIO *
+PerlIO_tmpfile_flags(int imode)
+{
#ifndef WIN32
dTHX;
#endif
PerlIO *f = NULL;
#ifdef WIN32
- const int fd = win32_tmpfd();
+ const int fd = win32_tmpfd_mode(imode);
if (fd >= 0)
f = PerlIO_fdopen(fd, "w+b");
-#elif ! defined(VMS) && ! defined(OS2)
+#elif ! defined(OS2)
int fd = -1;
char tempname[] = "/tmp/PerlIO_XXXXXX";
const char * const tmpdir = TAINTING_get ? NULL : PerlEnv_getenv("TMPDIR");
SV * sv = NULL;
int old_umask = umask(0177);
+ imode &= ~MKOSTEMP_MODE_MASK;
if (tmpdir && *tmpdir) {
/* if TMPDIR is set and not empty, we try that first */
sv = newSVpv(tmpdir, 0);
sv_catpv(sv, tempname + 4);
- fd = Perl_my_mkstemp_cloexec(SvPVX(sv));
+ fd = Perl_my_mkostemp_cloexec(SvPVX(sv), imode | O_VMS_DELETEONCLOSE);
}
if (fd < 0) {
SvREFCNT_dec(sv);
sv = NULL;
/* else we try /tmp */
- fd = Perl_my_mkstemp_cloexec(tempname);
+ fd = Perl_my_mkostemp_cloexec(tempname, imode | O_VMS_DELETEONCLOSE);
}
if (fd < 0) {
/* Try cwd */
sv = newSVpvs(".");
sv_catpv(sv, tempname + 4);
- fd = Perl_my_mkstemp_cloexec(SvPVX(sv));
+ fd = Perl_my_mkostemp_cloexec(SvPVX(sv), imode | O_VMS_DELETEONCLOSE);
}
umask(old_umask);
if (fd >= 0) {
- f = PerlIO_fdopen(fd, "w+");
+ /* fdopen() with a numeric mode */
+ char mode[8];
+ int writing = 1;
+ (void)PerlIO_intmode2str(imode | MKOSTEMP_MODES, mode, &writing);
+ f = PerlIO_fdopen(fd, mode);
if (f)
PerlIOBase(f)->flags |= PERLIO_F_TEMP;
+# ifndef VMS
PerlLIO_unlink(sv ? SvPVX_const(sv) : tempname);
+# endif
}
SvREFCNT_dec(sv);
#else /* !HAS_MKSTEMP, fallback to stdio tmpfile(). */
diff --git a/gnu/usr.bin/perl/perlio.h b/gnu/usr.bin/perl/perlio.h
index d515020618e..ee16ab8774e 100644
--- a/gnu/usr.bin/perl/perlio.h
+++ b/gnu/usr.bin/perl/perlio.h
@@ -286,6 +286,9 @@ PERL_CALLCONV SSize_t PerlIO_get_bufsiz(PerlIO *);
#ifndef PerlIO_tmpfile
PERL_CALLCONV PerlIO *PerlIO_tmpfile(void);
#endif
+#ifndef PerlIO_tmpfile_flags
+PERL_CALLCONV PerlIO *PerlIO_tmpfile_flags(int flags);
+#endif
#ifndef PerlIO_stdin
PERL_CALLCONV PerlIO *PerlIO_stdin(void);
#endif
diff --git a/gnu/usr.bin/perl/perlvars.h b/gnu/usr.bin/perl/perlvars.h
index e1113ac64c4..cd1523d5df5 100644
--- a/gnu/usr.bin/perl/perlvars.h
+++ b/gnu/usr.bin/perl/perlvars.h
@@ -73,8 +73,13 @@ PERLVARI(G, sig_trapped, int, 0)
/* If Perl has to ignore SIGPFE, this is its saved state.
* See perl.h macros PERL_FPU_INIT and PERL_FPU_{PRE,POST}_EXEC. */
PERLVAR(G, sigfpe_saved, Sighandler_t)
-PERLVARI(G, csighandlerp, Sighandler_t, Perl_csighandler)
- /* Pointer to C-level sighandler */
+
+/* these ptrs to functions are to avoid linkage problems; see
+ * perl-5.8.0-2193-g5c1546dc48
+ */
+PERLVARI(G, csighandlerp, Sighandler_t, Perl_csighandler)
+PERLVARI(G, csighandler1p, Sighandler1_t, Perl_csighandler1)
+PERLVARI(G, csighandler3p, Sighandler3_t, Perl_csighandler3)
#endif
/* This is constant on most architectures, a global on OS/2 */
@@ -99,6 +104,7 @@ PERLVARI(G, mmap_page_size, IV, 0)
#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
@@ -114,7 +120,7 @@ PERLVAR(G, C_locale_obj, locale_t)
PERLVARI(G, watch_pvx, char *, NULL)
/*
-=for apidoc AmU|Perl_check_t *|PL_check
+=for apidoc AmnU|Perl_check_t *|PL_check
Array, indexed by opcode, of functions that will be called for the "check"
phase of optree building during compilation of Perl code. For most (but
@@ -142,6 +148,24 @@ with the core's base checker at the end.
For thread safety, modules should not write directly to this array.
Instead, use the function L</wrap_op_checker>.
+=for apidoc Amn|enum perl_phase|PL_phase
+
+A value that indicates the current Perl interpreter's phase. Possible values
+include C<PERL_PHASE_CONSTRUCT>, C<PERL_PHASE_START>, C<PERL_PHASE_CHECK>,
+C<PERL_PHASE_INIT>, C<PERL_PHASE_RUN>, C<PERL_PHASE_END>, and
+C<PERL_PHASE_DESTRUCT>.
+
+For example, the following determines whether the interpreter is in
+global destruction:
+
+ if (PL_phase == PERL_PHASE_DESTRUCT) {
+ // we are in global destruction
+ }
+
+C<PL_phase> was introduced in Perl 5.14; in prior perls you can use
+C<PL_dirty> (boolean) to determine whether the interpreter is in global
+destruction. (Use of C<PL_dirty> is discouraged since 5.14.)
+
=cut
*/
@@ -176,7 +200,7 @@ PERLVARI(G, my_cxt_index, int, 0)
PERLVARI(G, veto_cleanup, int, FALSE) /* exit without cleanup */
/*
-=for apidoc AmUx|Perl_keyword_plugin_t|PL_keyword_plugin
+=for apidoc AmnUx|Perl_keyword_plugin_t|PL_keyword_plugin
Function pointer, pointing at a function used to handle extended keywords.
The function should be declared as
@@ -255,9 +279,9 @@ PERLVAR(G, malloc_mutex, perl_mutex) /* Mutex for malloc */
#endif
PERLVARI(G, hash_seed_set, bool, FALSE) /* perl.c */
-PERLVARA(G, hash_seed_w, PERL_HASH_SEED_WORDS, __PERL_HASH_WORD_TYPE) /* perl.c and hv.h */
+PERLVARA(G, hash_seed, PERL_HASH_SEED_BYTES, unsigned char) /* perl.c and hv.h */
#if defined(PERL_HASH_STATE_BYTES)
-PERLVARA(G, hash_state_w, PERL_HASH_STATE_WORDS, __PERL_HASH_WORD_TYPE) /* perl.c and hv.h */
+PERLVARA(G, hash_state, PERL_HASH_STATE_BYTES, unsigned char) /* 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 */
@@ -270,42 +294,6 @@ PERLVARA(G, hash_chars, (1+256) * sizeof(U32), unsigned char) /* perl.c and hv.h
PERLVAR(G, perllib_sep, char)
#endif
-PERLVAR(G, AboveLatin1, SV *)
-PERLVAR(G, Assigned_invlist, SV *)
-PERLVAR(G, GCB_invlist, SV *)
-PERLVAR(G, HasMultiCharFold, SV *)
-PERLVAR(G, InMultiCharFold, SV *)
-PERLVAR(G, Latin1, SV *)
-PERLVAR(G, LB_invlist, SV *)
-PERLVAR(G, NonFinalFold, SV *)
-PERLVAR(G, SB_invlist, SV *)
-PERLVAR(G, SCX_invlist, SV *)
-PERLVAR(G, UpperLatin1, SV *) /* Code points 128 - 255 */
-
-/* List of characters that participate in any fold defined by Unicode */
-PERLVAR(G, in_some_fold, SV *)
-
-PERLVAR(G, utf8_idcont, SV *)
-PERLVAR(G, utf8_idstart, SV *)
-PERLVAR(G, utf8_perl_idcont, SV *)
-PERLVAR(G, utf8_perl_idstart, SV *)
-PERLVAR(G, utf8_xidcont, SV *)
-PERLVAR(G, utf8_xidstart, SV *)
-PERLVAR(G, WB_invlist, SV *)
-PERLVARA(G, XPosix_ptrs, POSIX_CC_COUNT, SV *)
-PERLVARA(G, Posix_ptrs, POSIX_CC_COUNT, SV *)
-PERLVAR(G, utf8_toupper, SV *)
-PERLVAR(G, utf8_totitle, SV *)
-PERLVAR(G, utf8_tolower, SV *)
-PERLVAR(G, utf8_tofold, SV *)
-PERLVAR(G, utf8_tosimplefold, SV *)
-PERLVAR(G, utf8_charname_begin, SV *)
-PERLVAR(G, utf8_charname_continue, SV *)
-PERLVAR(G, utf8_mark, SV *)
-PERLVARI(G, InBitmap, SV *, NULL)
-PERLVAR(G, CCC_non0_non230, SV *)
-PERLVAR(G, Private_Use, SV *)
-
/* Definitions of user-defined \p{} properties, as the subs that define them
* are only called once */
PERLVARI(G, user_def_props, HV *, NULL)
@@ -317,11 +305,7 @@ PERLVAR(G, user_prop_mutex, perl_mutex) /* Mutex for manipulating
PL_user_defined_properties */
#endif
-/* Everything that folds to a given character, for case insensitivity regex
- * matching */
-PERLVAR(G, utf8_foldclosures, SV *)
-
-/* these record the best way to to perform certain IO operations while
+/* these record the best way to perform certain IO operations while
* atomically setting FD_CLOEXEC. On the first call, a probe is done
* and the result recorded for use by subsequent calls.
* In theory these variables aren't thread-safe, but the worst that can
diff --git a/gnu/usr.bin/perl/perly.act b/gnu/usr.bin/perl/perly.act
index 98e1572ce08..b2d2e673a3b 100644
--- a/gnu/usr.bin/perl/perly.act
+++ b/gnu/usr.bin/perl/perly.act
@@ -5,7 +5,7 @@
*/
case 2:
-#line 119 "perly.y" /* yacc.c:1648 */
+#line 121 "perly.y" /* yacc.c:1652 */
{
parser->expect = XSTATE;
(yyval.ival) = 0;
@@ -14,7 +14,7 @@ case 2:
break;
case 3:
-#line 124 "perly.y" /* yacc.c:1648 */
+#line 126 "perly.y" /* yacc.c:1652 */
{
newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval)));
PL_compiling.cop_seq = 0;
@@ -24,7 +24,7 @@ case 2:
break;
case 4:
-#line 130 "perly.y" /* yacc.c:1648 */
+#line 132 "perly.y" /* yacc.c:1652 */
{
parser->expect = XTERM;
(yyval.ival) = 0;
@@ -33,7 +33,7 @@ case 2:
break;
case 5:
-#line 135 "perly.y" /* yacc.c:1648 */
+#line 137 "perly.y" /* yacc.c:1652 */
{
PL_eval_root = (ps[0].val.opval);
(yyval.ival) = 0;
@@ -42,7 +42,7 @@ case 2:
break;
case 6:
-#line 140 "perly.y" /* yacc.c:1648 */
+#line 142 "perly.y" /* yacc.c:1652 */
{
parser->expect = XBLOCK;
(yyval.ival) = 0;
@@ -51,7 +51,7 @@ case 2:
break;
case 7:
-#line 145 "perly.y" /* yacc.c:1648 */
+#line 147 "perly.y" /* yacc.c:1652 */
{
PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[0].val.opval);
@@ -63,7 +63,7 @@ case 2:
break;
case 8:
-#line 153 "perly.y" /* yacc.c:1648 */
+#line 155 "perly.y" /* yacc.c:1652 */
{
parser->expect = XSTATE;
(yyval.ival) = 0;
@@ -72,7 +72,7 @@ case 2:
break;
case 9:
-#line 158 "perly.y" /* yacc.c:1648 */
+#line 160 "perly.y" /* yacc.c:1652 */
{
PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[0].val.opval);
@@ -84,7 +84,7 @@ case 2:
break;
case 10:
-#line 166 "perly.y" /* yacc.c:1648 */
+#line 168 "perly.y" /* yacc.c:1652 */
{
parser->expect = XSTATE;
(yyval.ival) = 0;
@@ -93,7 +93,7 @@ case 2:
break;
case 11:
-#line 171 "perly.y" /* yacc.c:1648 */
+#line 173 "perly.y" /* yacc.c:1652 */
{
PL_pad_reset_pending = TRUE;
PL_eval_root = (ps[0].val.opval);
@@ -105,7 +105,7 @@ case 2:
break;
case 12:
-#line 179 "perly.y" /* yacc.c:1648 */
+#line 181 "perly.y" /* yacc.c:1652 */
{
parser->expect = XSTATE;
(yyval.ival) = 0;
@@ -114,7 +114,7 @@ case 2:
break;
case 13:
-#line 184 "perly.y" /* yacc.c:1648 */
+#line 186 "perly.y" /* yacc.c:1652 */
{
PL_eval_root = (ps[0].val.opval);
(yyval.ival) = 0;
@@ -123,7 +123,25 @@ case 2:
break;
case 14:
-#line 192 "perly.y" /* yacc.c:1648 */
+#line 191 "perly.y" /* yacc.c:1652 */
+ {
+ parser->expect = XSTATE;
+ (yyval.ival) = 0;
+ }
+
+ break;
+
+ case 15:
+#line 196 "perly.y" /* yacc.c:1652 */
+ {
+ PL_eval_root = (ps[0].val.opval);
+ (yyval.ival) = 0;
+ }
+
+ break;
+
+ case 16:
+#line 204 "perly.y" /* yacc.c:1652 */
{ if (parser->copline > (line_t)(ps[-3].val.ival))
parser->copline = (line_t)(ps[-3].val.ival);
(yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval));
@@ -131,8 +149,8 @@ case 2:
break;
- case 15:
-#line 200 "perly.y" /* yacc.c:1648 */
+ case 17:
+#line 212 "perly.y" /* yacc.c:1652 */
{ if (parser->copline > (line_t)(ps[-6].val.ival))
parser->copline = (line_t)(ps[-6].val.ival);
(yyval.opval) = block_end((ps[-5].val.ival), (ps[-2].val.opval));
@@ -140,15 +158,15 @@ case 2:
break;
- case 16:
-#line 207 "perly.y" /* yacc.c:1648 */
+ case 18:
+#line 219 "perly.y" /* yacc.c:1652 */
{ (yyval.ival) = block_start(TRUE);
parser->parsed_sub = 0; }
break;
- case 17:
-#line 212 "perly.y" /* yacc.c:1648 */
+ case 19:
+#line 224 "perly.y" /* yacc.c:1652 */
{ if (parser->copline > (line_t)(ps[-3].val.ival))
parser->copline = (line_t)(ps[-3].val.ival);
(yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval));
@@ -156,21 +174,21 @@ case 2:
break;
- case 18:
-#line 219 "perly.y" /* yacc.c:1648 */
+ case 20:
+#line 231 "perly.y" /* yacc.c:1652 */
{ (yyval.ival) = block_start(FALSE);
parser->parsed_sub = 0; }
break;
- case 19:
-#line 225 "perly.y" /* yacc.c:1648 */
+ case 21:
+#line 237 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 20:
-#line 227 "perly.y" /* yacc.c:1648 */
+ case 22:
+#line 239 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval));
PL_pad_reset_pending = TRUE;
if ((ps[-1].val.opval) && (ps[0].val.opval))
@@ -179,14 +197,14 @@ case 2:
break;
- case 21:
-#line 236 "perly.y" /* yacc.c:1648 */
+ case 23:
+#line 248 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 22:
-#line 238 "perly.y" /* yacc.c:1648 */
+ case 24:
+#line 250 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval));
PL_pad_reset_pending = TRUE;
if ((ps[-1].val.opval) && (ps[0].val.opval))
@@ -195,22 +213,22 @@ case 2:
break;
- case 23:
-#line 247 "perly.y" /* yacc.c:1648 */
+ case 25:
+#line 259 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL;
}
break;
- case 24:
-#line 251 "perly.y" /* yacc.c:1648 */
+ case 26:
+#line 263 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 25:
-#line 255 "perly.y" /* yacc.c:1648 */
+ case 27:
+#line 267 "perly.y" /* yacc.c:1652 */
{
SV *label = cSVOPx_sv((ps[-1].val.opval));
(yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8,
@@ -220,8 +238,8 @@ case 2:
break;
- case 26:
-#line 262 "perly.y" /* yacc.c:1648 */
+ case 28:
+#line 274 "perly.y" /* yacc.c:1652 */
{
SV *label = cSVOPx_sv((ps[-1].val.opval));
(yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8,
@@ -231,14 +249,14 @@ case 2:
break;
- case 27:
-#line 272 "perly.y" /* yacc.c:1648 */
+ case 29:
+#line 284 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 28:
-#line 274 "perly.y" /* yacc.c:1648 */
+ case 30:
+#line 286 "perly.y" /* yacc.c:1652 */
{
CV *fmtcv = PL_compcv;
newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval));
@@ -251,8 +269,8 @@ case 2:
break;
- case 29:
-#line 286 "perly.y" /* yacc.c:1648 */
+ case 31:
+#line 298 "perly.y" /* yacc.c:1652 */
{
init_named_cv(PL_compcv, (ps[-1].val.opval));
parser->in_my = 0;
@@ -261,8 +279,8 @@ case 2:
break;
- case 30:
-#line 292 "perly.y" /* yacc.c:1648 */
+ case 32:
+#line 304 "perly.y" /* yacc.c:1652 */
{
SvREFCNT_inc_simple_void(PL_compcv);
(ps[-5].val.opval)->op_type == OP_CONST
@@ -276,8 +294,8 @@ case 2:
break;
- case 31:
-#line 307 "perly.y" /* yacc.c:1648 */
+ case 33:
+#line 319 "perly.y" /* yacc.c:1652 */
{
init_named_cv(PL_compcv, (ps[-1].val.opval));
parser->in_my = 0;
@@ -286,8 +304,8 @@ case 2:
break;
- case 32:
-#line 313 "perly.y" /* yacc.c:1648 */
+ case 34:
+#line 325 "perly.y" /* yacc.c:1652 */
{
SvREFCNT_inc_simple_void(PL_compcv);
(ps[-4].val.opval)->op_type == OP_CONST
@@ -301,8 +319,8 @@ case 2:
break;
- case 33:
-#line 324 "perly.y" /* yacc.c:1648 */
+ case 35:
+#line 336 "perly.y" /* yacc.c:1652 */
{
package((ps[-1].val.opval));
if ((ps[-2].val.opval))
@@ -312,14 +330,14 @@ case 2:
break;
- case 34:
-#line 331 "perly.y" /* yacc.c:1648 */
+ case 36:
+#line 343 "perly.y" /* yacc.c:1652 */
{ CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ }
break;
- case 35:
-#line 333 "perly.y" /* yacc.c:1648 */
+ case 37:
+#line 345 "perly.y" /* yacc.c:1652 */
{
SvREFCNT_inc_simple_void(PL_compcv);
utilize((ps[-6].val.ival), (ps[-5].val.ival), (ps[-3].val.opval), (ps[-2].val.opval), (ps[-1].val.opval));
@@ -329,8 +347,8 @@ case 2:
break;
- case 36:
-#line 340 "perly.y" /* yacc.c:1648 */
+ case 38:
+#line 352 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = block_end((ps[-4].val.ival),
newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval)));
@@ -339,8 +357,8 @@ case 2:
break;
- case 37:
-#line 346 "perly.y" /* yacc.c:1648 */
+ case 39:
+#line 358 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = block_end((ps[-4].val.ival),
newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval))));
@@ -349,8 +367,8 @@ case 2:
break;
- case 38:
-#line 352 "perly.y" /* yacc.c:1648 */
+ case 40:
+#line 364 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = block_end((ps[-3].val.ival), newGIVENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)), 0));
parser->copline = (line_t)(ps[-5].val.ival);
@@ -358,20 +376,20 @@ case 2:
break;
- case 39:
-#line 357 "perly.y" /* yacc.c:1648 */
+ case 41:
+#line 369 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); }
break;
- case 40:
-#line 359 "perly.y" /* yacc.c:1648 */
+ case 42:
+#line 371 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); }
break;
- case 41:
-#line 361 "perly.y" /* yacc.c:1648 */
+ case 43:
+#line 373 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = block_end((ps[-5].val.ival),
newWHILEOP(0, 1, NULL,
@@ -381,8 +399,8 @@ case 2:
break;
- case 42:
-#line 368 "perly.y" /* yacc.c:1648 */
+ case 44:
+#line 380 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = block_end((ps[-5].val.ival),
newWHILEOP(0, 1, NULL,
@@ -392,20 +410,20 @@ case 2:
break;
- case 43:
-#line 375 "perly.y" /* yacc.c:1648 */
+ case 45:
+#line 387 "perly.y" /* yacc.c:1652 */
{ parser->expect = XTERM; }
break;
- case 44:
-#line 377 "perly.y" /* yacc.c:1648 */
+ case 46:
+#line 389 "perly.y" /* yacc.c:1652 */
{ parser->expect = XTERM; }
break;
- case 45:
-#line 380 "perly.y" /* yacc.c:1648 */
+ case 47:
+#line 392 "perly.y" /* yacc.c:1652 */
{
OP *initop = (ps[-9].val.opval);
OP *forop = newWHILEOP(0, 1, NULL,
@@ -423,8 +441,8 @@ case 2:
break;
- case 46:
-#line 395 "perly.y" /* yacc.c:1648 */
+ case 48:
+#line 407 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = block_end((ps[-6].val.ival), newFOROP(0, (ps[-5].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
parser->copline = (line_t)(ps[-8].val.ival);
@@ -432,8 +450,8 @@ case 2:
break;
- case 47:
-#line 400 "perly.y" /* yacc.c:1648 */
+ case 49:
+#line 412 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0,
op_lvalue((ps[-6].val.opval), OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
@@ -442,14 +460,14 @@ case 2:
break;
- case 48:
-#line 406 "perly.y" /* yacc.c:1648 */
+ case 50:
+#line 418 "perly.y" /* yacc.c:1652 */
{ parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
break;
- case 49:
-#line 408 "perly.y" /* yacc.c:1648 */
+ case 51:
+#line 420 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = block_end(
(ps[-7].val.ival),
@@ -465,8 +483,8 @@ case 2:
break;
- case 50:
-#line 421 "perly.y" /* yacc.c:1648 */
+ case 52:
+#line 433 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = block_end((ps[-4].val.ival), newFOROP(
0, op_lvalue(newUNOP(OP_REFGEN, 0,
@@ -477,8 +495,8 @@ case 2:
break;
- case 51:
-#line 429 "perly.y" /* yacc.c:1648 */
+ case 53:
+#line 441 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = block_end((ps[-4].val.ival),
newFOROP(0, NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval)));
@@ -487,8 +505,8 @@ case 2:
break;
- case 52:
-#line 435 "perly.y" /* yacc.c:1648 */
+ case 54:
+#line 447 "perly.y" /* yacc.c:1652 */
{
/* a block is a loop that happens once */
(yyval.opval) = newWHILEOP(0, 1, NULL,
@@ -497,8 +515,8 @@ case 2:
break;
- case 53:
-#line 441 "perly.y" /* yacc.c:1648 */
+ case 55:
+#line 453 "perly.y" /* yacc.c:1652 */
{
package((ps[-2].val.opval));
if ((ps[-3].val.opval)) {
@@ -508,8 +526,8 @@ case 2:
break;
- case 54:
-#line 448 "perly.y" /* yacc.c:1648 */
+ case 56:
+#line 460 "perly.y" /* yacc.c:1652 */
{
/* a block is a loop that happens once */
(yyval.opval) = newWHILEOP(0, 1, NULL,
@@ -520,16 +538,16 @@ case 2:
break;
- case 55:
-#line 456 "perly.y" /* yacc.c:1648 */
+ case 57:
+#line 468 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = (ps[-1].val.opval);
}
break;
- case 56:
-#line 460 "perly.y" /* yacc.c:1648 */
+ case 58:
+#line 472 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0),
newSVOP(OP_CONST, 0, newSVpvs("Unimplemented")));
@@ -537,8 +555,8 @@ case 2:
break;
- case 57:
-#line 465 "perly.y" /* yacc.c:1648 */
+ case 59:
+#line 477 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = NULL;
parser->copline = NOLINE;
@@ -546,8 +564,8 @@ case 2:
break;
- case 58:
-#line 473 "perly.y" /* yacc.c:1648 */
+ case 60:
+#line 485 "perly.y" /* yacc.c:1652 */
{ OP *list;
if ((ps[0].val.opval)) {
OP *term = (ps[0].val.opval);
@@ -565,75 +583,75 @@ case 2:
break;
- case 59:
-#line 490 "perly.y" /* yacc.c:1648 */
+ case 61:
+#line 502 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 60:
-#line 492 "perly.y" /* yacc.c:1648 */
+ case 62:
+#line 504 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_unscope((ps[-1].val.opval)); }
break;
- case 61:
-#line 497 "perly.y" /* yacc.c:1648 */
+ case 63:
+#line 509 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 62:
-#line 499 "perly.y" /* yacc.c:1648 */
+ case 64:
+#line 511 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 63:
-#line 501 "perly.y" /* yacc.c:1648 */
+ case 65:
+#line 513 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
break;
- case 64:
-#line 503 "perly.y" /* yacc.c:1648 */
+ case 66:
+#line 515 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); }
break;
- case 65:
-#line 505 "perly.y" /* yacc.c:1648 */
+ case 67:
+#line 517 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); }
break;
- case 66:
-#line 507 "perly.y" /* yacc.c:1648 */
+ case 68:
+#line 519 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); }
break;
- case 67:
-#line 509 "perly.y" /* yacc.c:1648 */
+ case 69:
+#line 521 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL);
parser->copline = (line_t)(ps[-1].val.ival); }
break;
- case 68:
-#line 512 "perly.y" /* yacc.c:1648 */
+ case 70:
+#line 524 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); }
break;
- case 69:
-#line 517 "perly.y" /* yacc.c:1648 */
+ case 71:
+#line 529 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 70:
-#line 519 "perly.y" /* yacc.c:1648 */
+ case 72:
+#line 531 "perly.y" /* yacc.c:1652 */
{
((ps[0].val.opval))->op_flags |= OPf_PARENS;
(yyval.opval) = op_scope((ps[0].val.opval));
@@ -641,8 +659,8 @@ case 2:
break;
- case 71:
-#line 524 "perly.y" /* yacc.c:1648 */
+ case 73:
+#line 536 "perly.y" /* yacc.c:1652 */
{ parser->copline = (line_t)(ps[-5].val.ival);
(yyval.opval) = newCONDOP(0,
newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)),
@@ -652,153 +670,153 @@ case 2:
break;
- case 72:
-#line 534 "perly.y" /* yacc.c:1648 */
+ case 74:
+#line 546 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 73:
-#line 536 "perly.y" /* yacc.c:1648 */
+ case 75:
+#line 548 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_scope((ps[0].val.opval)); }
break;
- case 74:
-#line 541 "perly.y" /* yacc.c:1648 */
+ case 76:
+#line 553 "perly.y" /* yacc.c:1652 */
{ (yyval.ival) = (PL_min_intro_pending &&
PL_max_intro_pending >= PL_min_intro_pending);
intro_my(); }
break;
- case 75:
-#line 547 "perly.y" /* yacc.c:1648 */
+ case 77:
+#line 559 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 77:
-#line 553 "perly.y" /* yacc.c:1648 */
+ case 79:
+#line 565 "perly.y" /* yacc.c:1652 */
{ YYSTYPE tmplval;
(void)scan_num("1", &tmplval);
(yyval.opval) = tmplval.opval; }
break;
- case 79:
-#line 561 "perly.y" /* yacc.c:1648 */
+ case 81:
+#line 573 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = invert(scalar((ps[0].val.opval))); }
break;
- case 80:
-#line 566 "perly.y" /* yacc.c:1648 */
+ case 82:
+#line 578 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); intro_my(); }
break;
- case 81:
-#line 570 "perly.y" /* yacc.c:1648 */
+ case 83:
+#line 582 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); intro_my(); }
break;
- case 82:
-#line 573 "perly.y" /* yacc.c:1648 */
+ case 84:
+#line 585 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 83:
-#line 574 "perly.y" /* yacc.c:1648 */
+ case 85:
+#line 586 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 84:
-#line 578 "perly.y" /* yacc.c:1648 */
+ case 86:
+#line 590 "perly.y" /* yacc.c:1652 */
{ (yyval.ival) = start_subparse(FALSE, 0);
SAVEFREESV(PL_compcv); }
break;
- case 85:
-#line 584 "perly.y" /* yacc.c:1648 */
+ case 87:
+#line 596 "perly.y" /* yacc.c:1652 */
{ (yyval.ival) = start_subparse(FALSE, CVf_ANON);
SAVEFREESV(PL_compcv); }
break;
- case 86:
-#line 589 "perly.y" /* yacc.c:1648 */
+ case 88:
+#line 601 "perly.y" /* yacc.c:1652 */
{ (yyval.ival) = start_subparse(TRUE, 0);
SAVEFREESV(PL_compcv); }
break;
- case 89:
-#line 600 "perly.y" /* yacc.c:1648 */
+ case 91:
+#line 612 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 91:
-#line 606 "perly.y" /* yacc.c:1648 */
+ case 93:
+#line 618 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 92:
-#line 608 "perly.y" /* yacc.c:1648 */
+ case 94:
+#line 620 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 93:
-#line 610 "perly.y" /* yacc.c:1648 */
+ case 95:
+#line 622 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 94:
-#line 615 "perly.y" /* yacc.c:1648 */
+ case 96:
+#line 627 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 95:
-#line 617 "perly.y" /* yacc.c:1648 */
+ case 97:
+#line 629 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 96:
-#line 628 "perly.y" /* yacc.c:1648 */
+ case 98:
+#line 640 "perly.y" /* yacc.c:1652 */
{ parser->in_my = 0; (yyval.opval) = NULL; }
break;
- case 97:
-#line 630 "perly.y" /* yacc.c:1648 */
+ case 99:
+#line 642 "perly.y" /* yacc.c:1652 */
{ parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); }
break;
- case 98:
-#line 635 "perly.y" /* yacc.c:1648 */
+ case 100:
+#line 647 "perly.y" /* yacc.c:1652 */
{ (yyval.ival) = '@'; }
break;
- case 99:
-#line 637 "perly.y" /* yacc.c:1648 */
+ case 101:
+#line 649 "perly.y" /* yacc.c:1652 */
{ (yyval.ival) = '%'; }
break;
- case 100:
-#line 641 "perly.y" /* yacc.c:1648 */
+ case 102:
+#line 653 "perly.y" /* yacc.c:1652 */
{
I32 sigil = (ps[-2].val.ival);
OP *var = (ps[-1].val.opval);
@@ -817,26 +835,26 @@ case 2:
break;
- case 101:
-#line 660 "perly.y" /* yacc.c:1648 */
+ case 103:
+#line 672 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 102:
-#line 662 "perly.y" /* yacc.c:1648 */
+ case 104:
+#line 674 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newOP(OP_NULL, 0); }
break;
- case 103:
-#line 664 "perly.y" /* yacc.c:1648 */
+ case 105:
+#line 676 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 104:
-#line 670 "perly.y" /* yacc.c:1648 */
+ case 106:
+#line 682 "perly.y" /* yacc.c:1652 */
{
OP *var = (ps[-1].val.opval);
OP *defexpr = (ps[0].val.opval);
@@ -900,64 +918,70 @@ case 2:
break;
- case 105:
-#line 735 "perly.y" /* yacc.c:1648 */
+ case 107:
+#line 747 "perly.y" /* yacc.c:1652 */
{ parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
break;
- case 106:
-#line 737 "perly.y" /* yacc.c:1648 */
+ case 108:
+#line 749 "perly.y" /* yacc.c:1652 */
{ parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); }
break;
- case 107:
-#line 743 "perly.y" /* yacc.c:1648 */
+ case 109:
+#line 755 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[-1].val.opval); }
break;
- case 108:
-#line 745 "perly.y" /* yacc.c:1648 */
+ case 110:
+#line 757 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = op_append_list(OP_LINESEQ, (ps[-2].val.opval), (ps[0].val.opval));
}
break;
- case 109:
-#line 749 "perly.y" /* yacc.c:1648 */
+ case 111:
+#line 761 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 110:
-#line 754 "perly.y" /* yacc.c:1648 */
+ case 112:
+#line 766 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 111:
-#line 756 "perly.y" /* yacc.c:1648 */
+ case 113:
+#line 768 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 112:
-#line 760 "perly.y" /* yacc.c:1648 */
+ case 114:
+#line 772 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 113:
-#line 762 "perly.y" /* yacc.c:1648 */
+ case 115:
+#line 774 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 114:
-#line 766 "perly.y" /* yacc.c:1648 */
+ case 116:
+#line 778 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = (ps[-1].val.opval); }
+
+ break;
+
+ case 117:
+#line 781 "perly.y" /* yacc.c:1652 */
{
ENTER;
SAVEIV(parser->sig_elems);
@@ -971,11 +995,11 @@ case 2:
break;
- case 115:
-#line 778 "perly.y" /* yacc.c:1648 */
+ case 118:
+#line 792 "perly.y" /* yacc.c:1652 */
{
- OP *sigops = (ps[-1].val.opval);
- UNOP_AUX_item *aux;
+ OP *sigops = (ps[0].val.opval);
+ struct op_argcheck_aux *aux;
OP *check;
if (!FEATURE_SIGNATURES_IS_ENABLED)
@@ -987,21 +1011,32 @@ case 2:
packWARN(WARN_EXPERIMENTAL__SIGNATURES),
"The signatures feature is experimental");
- aux = (UNOP_AUX_item*)PerlMemShared_malloc(
- sizeof(UNOP_AUX_item) * 3);
- aux[0].iv = parser->sig_elems;
- aux[1].iv = parser->sig_optelems;
- aux[2].iv = parser->sig_slurpy;
- check = newUNOP_AUX(OP_ARGCHECK, 0, NULL, aux);
+ aux = (struct op_argcheck_aux*)
+ PerlMemShared_malloc(
+ sizeof(struct op_argcheck_aux));
+ aux->params = parser->sig_elems;
+ aux->opt_params = parser->sig_optelems;
+ aux->slurpy = parser->sig_slurpy;
+ check = newUNOP_AUX(OP_ARGCHECK, 0, NULL,
+ (UNOP_AUX_item *)aux);
sigops = op_prepend_elem(OP_LINESEQ, check, sigops);
sigops = op_prepend_elem(OP_LINESEQ,
newSTATEOP(0, NULL, NULL),
sigops);
/* a nextstate at the end handles context
* correctly for an empty sub body */
- (yyval.opval) = op_append_elem(OP_LINESEQ,
+ sigops = op_append_elem(OP_LINESEQ,
sigops,
newSTATEOP(0, NULL, NULL));
+ /* wrap the list of arg ops in a NULL aux op.
+ This serves two purposes. First, it makes
+ the arg list a separate subtree from the
+ body of the sub, and secondly the null op
+ may in future be upgraded to an OP_SIGNATURE
+ when implemented. For now leave it as
+ ex-argcheck */
+ (yyval.opval) = newUNOP_AUX(OP_ARGCHECK, 0, sigops, NULL);
+ op_null((yyval.opval));
parser->in_my = 0;
/* tell the toker that attrributes can follow
@@ -1019,20 +1054,20 @@ case 2:
break;
- case 116:
-#line 824 "perly.y" /* yacc.c:1648 */
+ case 119:
+#line 849 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 117:
-#line 825 "perly.y" /* yacc.c:1648 */
+ case 120:
+#line 850 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 118:
-#line 831 "perly.y" /* yacc.c:1648 */
+ case 121:
+#line 856 "perly.y" /* yacc.c:1652 */
{
if (parser->copline > (line_t)(ps[-2].val.ival))
parser->copline = (line_t)(ps[-2].val.ival);
@@ -1041,20 +1076,20 @@ case 2:
break;
- case 119:
-#line 841 "perly.y" /* yacc.c:1648 */
+ case 122:
+#line 866 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 120:
-#line 842 "perly.y" /* yacc.c:1648 */
+ case 123:
+#line 867 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 121:
-#line 846 "perly.y" /* yacc.c:1648 */
+ case 124:
+#line 871 "perly.y" /* yacc.c:1652 */
{
if (parser->copline > (line_t)(ps[-2].val.ival))
parser->copline = (line_t)(ps[-2].val.ival);
@@ -1064,32 +1099,32 @@ case 2:
break;
- case 122:
-#line 857 "perly.y" /* yacc.c:1648 */
+ case 125:
+#line 882 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
- case 123:
-#line 859 "perly.y" /* yacc.c:1648 */
+ case 126:
+#line 884 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
- case 124:
-#line 861 "perly.y" /* yacc.c:1648 */
+ case 127:
+#line 886 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
- case 126:
-#line 867 "perly.y" /* yacc.c:1648 */
+ case 129:
+#line 892 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[-1].val.opval); }
break;
- case 127:
-#line 869 "perly.y" /* yacc.c:1648 */
+ case 130:
+#line 894 "perly.y" /* yacc.c:1652 */
{
OP* term = (ps[0].val.opval);
(yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term);
@@ -1097,24 +1132,24 @@ case 2:
break;
- case 129:
-#line 878 "perly.y" /* yacc.c:1648 */
+ case 132:
+#line 903 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED,
op_prepend_elem(OP_LIST, newGVREF((ps[-2].val.ival),(ps[-1].val.opval)), (ps[0].val.opval)) );
}
break;
- case 130:
-#line 882 "perly.y" /* yacc.c:1648 */
+ case 133:
+#line 907 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED,
op_prepend_elem(OP_LIST, newGVREF((ps[-4].val.ival),(ps[-2].val.opval)), (ps[-1].val.opval)) );
}
break;
- case 131:
-#line 886 "perly.y" /* yacc.c:1648 */
+ case 134:
+#line 911 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, scalar((ps[-5].val.opval)), (ps[-1].val.opval)),
@@ -1123,8 +1158,8 @@ case 2:
break;
- case 132:
-#line 892 "perly.y" /* yacc.c:1648 */
+ case 135:
+#line 917 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, scalar((ps[-2].val.opval)),
newMETHOP(OP_METHOD, 0, (ps[0].val.opval))));
@@ -1132,8 +1167,8 @@ case 2:
break;
- case 133:
-#line 897 "perly.y" /* yacc.c:1648 */
+ case 136:
+#line 922 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)),
@@ -1142,8 +1177,8 @@ case 2:
break;
- case 134:
-#line 903 "perly.y" /* yacc.c:1648 */
+ case 137:
+#line 928 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, (ps[-3].val.opval), (ps[-1].val.opval)),
@@ -1152,27 +1187,33 @@ case 2:
break;
- case 135:
-#line 909 "perly.y" /* yacc.c:1648 */
+ case 138:
+#line 934 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); }
break;
- case 136:
-#line 911 "perly.y" /* yacc.c:1648 */
+ case 139:
+#line 936 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
break;
- case 137:
-#line 913 "perly.y" /* yacc.c:1648 */
+ case 140:
+#line 938 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
+
+ break;
+
+ case 141:
+#line 940 "perly.y" /* yacc.c:1652 */
{ SvREFCNT_inc_simple_void(PL_compcv);
(yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); }
break;
- case 138:
-#line 916 "perly.y" /* yacc.c:1648 */
+ case 142:
+#line 943 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST,
op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), (ps[-4].val.opval)));
@@ -1180,21 +1221,21 @@ case 2:
break;
- case 141:
-#line 931 "perly.y" /* yacc.c:1648 */
+ case 145:
+#line 958 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); }
break;
- case 142:
-#line 933 "perly.y" /* yacc.c:1648 */
+ case 146:
+#line 960 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval)));
}
break;
- case 143:
-#line 936 "perly.y" /* yacc.c:1648 */
+ case 147:
+#line 963 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP(OP_AELEM, 0,
ref(newAVREF((ps[-4].val.opval)),OP_RV2AV),
scalar((ps[-1].val.opval)));
@@ -1202,8 +1243,8 @@ case 2:
break;
- case 144:
-#line 941 "perly.y" /* yacc.c:1648 */
+ case 148:
+#line 968 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP(OP_AELEM, 0,
ref(newAVREF((ps[-3].val.opval)),OP_RV2AV),
scalar((ps[-1].val.opval)));
@@ -1211,31 +1252,31 @@ case 2:
break;
- case 145:
-#line 946 "perly.y" /* yacc.c:1648 */
+ case 149:
+#line 973 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval)));
}
break;
- case 146:
-#line 949 "perly.y" /* yacc.c:1648 */
+ case 150:
+#line 976 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP(OP_HELEM, 0,
ref(newHVREF((ps[-5].val.opval)),OP_RV2HV),
jmaybe((ps[-2].val.opval))); }
break;
- case 147:
-#line 953 "perly.y" /* yacc.c:1648 */
+ case 151:
+#line 980 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP(OP_HELEM, 0,
ref(newHVREF((ps[-4].val.opval)),OP_RV2HV),
jmaybe((ps[-2].val.opval))); }
break;
- case 148:
-#line 957 "perly.y" /* yacc.c:1648 */
+ case 152:
+#line 984 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
newCVREF(0, scalar((ps[-3].val.opval))));
if (parser->expect == XBLOCK)
@@ -1244,8 +1285,8 @@ case 2:
break;
- case 149:
-#line 963 "perly.y" /* yacc.c:1648 */
+ case 153:
+#line 990 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[-1].val.opval),
newCVREF(0, scalar((ps[-4].val.opval)))));
@@ -1255,8 +1296,8 @@ case 2:
break;
- case 150:
-#line 971 "perly.y" /* yacc.c:1648 */
+ case 154:
+#line 998 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[-1].val.opval),
newCVREF(0, scalar((ps[-3].val.opval)))));
@@ -1266,8 +1307,8 @@ case 2:
break;
- case 151:
-#line 978 "perly.y" /* yacc.c:1648 */
+ case 155:
+#line 1005 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
newCVREF(0, scalar((ps[-2].val.opval))));
if (parser->expect == XBLOCK)
@@ -1276,38 +1317,38 @@ case 2:
break;
- case 152:
-#line 984 "perly.y" /* yacc.c:1648 */
+ case 156:
+#line 1011 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); }
break;
- case 153:
-#line 986 "perly.y" /* yacc.c:1648 */
+ case 157:
+#line 1013 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); }
break;
- case 154:
-#line 988 "perly.y" /* yacc.c:1648 */
+ case 158:
+#line 1015 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); }
break;
- case 155:
-#line 993 "perly.y" /* yacc.c:1648 */
+ case 159:
+#line 1020 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); }
break;
- case 156:
-#line 995 "perly.y" /* yacc.c:1648 */
+ case 160:
+#line 1022 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
- case 157:
-#line 997 "perly.y" /* yacc.c:1648 */
+ case 161:
+#line 1024 "perly.y" /* yacc.c:1652 */
{ if ((ps[-1].val.ival) != OP_REPEAT)
scalar((ps[-2].val.opval));
(yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval)));
@@ -1315,112 +1356,184 @@ case 2:
break;
- case 158:
-#line 1002 "perly.y" /* yacc.c:1648 */
+ case 162:
+#line 1029 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
- case 159:
-#line 1004 "perly.y" /* yacc.c:1648 */
+ case 163:
+#line 1031 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
- case 160:
-#line 1006 "perly.y" /* yacc.c:1648 */
- { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+ case 164:
+#line 1033 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = (ps[0].val.opval); }
break;
- case 161:
-#line 1008 "perly.y" /* yacc.c:1648 */
- { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+ case 165:
+#line 1035 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = (ps[0].val.opval); }
break;
- case 162:
-#line 1010 "perly.y" /* yacc.c:1648 */
+ case 166:
+#line 1037 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
- case 163:
-#line 1012 "perly.y" /* yacc.c:1648 */
+ case 167:
+#line 1039 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
- case 164:
-#line 1014 "perly.y" /* yacc.c:1648 */
+ case 168:
+#line 1041 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
break;
- case 165:
-#line 1016 "perly.y" /* yacc.c:1648 */
+ case 169:
+#line 1043 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
- case 166:
-#line 1018 "perly.y" /* yacc.c:1648 */
+ case 170:
+#line 1045 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
- case 167:
-#line 1020 "perly.y" /* yacc.c:1648 */
+ case 171:
+#line 1047 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); }
break;
- case 168:
-#line 1022 "perly.y" /* yacc.c:1648 */
+ case 172:
+#line 1049 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
- case 169:
-#line 1027 "perly.y" /* yacc.c:1648 */
+ case 173:
+#line 1053 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
+
+ break;
+
+ case 174:
+#line 1055 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+
+ break;
+
+ case 175:
+#line 1057 "perly.y" /* yacc.c:1652 */
+ { yyerror("syntax error"); YYERROR; }
+
+ break;
+
+ case 176:
+#line 1059 "perly.y" /* yacc.c:1652 */
+ { yyerror("syntax error"); YYERROR; }
+
+ break;
+
+ case 177:
+#line 1063 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
+
+ break;
+
+ case 178:
+#line 1065 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
+
+ break;
+
+ case 179:
+#line 1069 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); }
+
+ break;
+
+ case 180:
+#line 1071 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); }
+
+ break;
+
+ case 181:
+#line 1073 "perly.y" /* yacc.c:1652 */
+ { yyerror("syntax error"); YYERROR; }
+
+ break;
+
+ case 182:
+#line 1075 "perly.y" /* yacc.c:1652 */
+ { yyerror("syntax error"); YYERROR; }
+
+ break;
+
+ case 183:
+#line 1079 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
+
+ break;
+
+ case 184:
+#line 1081 "perly.y" /* yacc.c:1652 */
+ { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); }
+
+ break;
+
+ case 185:
+#line 1086 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); }
break;
- case 170:
-#line 1029 "perly.y" /* yacc.c:1648 */
+ case 186:
+#line 1088 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 171:
-#line 1032 "perly.y" /* yacc.c:1648 */
+ case 187:
+#line 1091 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
break;
- case 172:
-#line 1034 "perly.y" /* yacc.c:1648 */
+ case 188:
+#line 1093 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); }
break;
- case 173:
-#line 1036 "perly.y" /* yacc.c:1648 */
+ case 189:
+#line 1095 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_POSTINC, 0,
op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); }
break;
- case 174:
-#line 1039 "perly.y" /* yacc.c:1648 */
+ case 190:
+#line 1098 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_POSTDEC, 0,
op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));}
break;
- case 175:
-#line 1042 "perly.y" /* yacc.c:1648 */
+ case 191:
+#line 1101 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_convert_list(OP_JOIN, 0,
op_append_elem(
OP_LIST,
@@ -1434,156 +1547,156 @@ case 2:
break;
- case 176:
-#line 1053 "perly.y" /* yacc.c:1648 */
+ case 192:
+#line 1112 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_PREINC, 0,
op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); }
break;
- case 177:
-#line 1056 "perly.y" /* yacc.c:1648 */
+ case 193:
+#line 1115 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_PREDEC, 0,
op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); }
break;
- case 178:
-#line 1063 "perly.y" /* yacc.c:1648 */
+ case 194:
+#line 1122 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newANONLIST((ps[-1].val.opval)); }
break;
- case 179:
-#line 1065 "perly.y" /* yacc.c:1648 */
+ case 195:
+#line 1124 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newANONLIST(NULL);}
break;
- case 180:
-#line 1067 "perly.y" /* yacc.c:1648 */
+ case 196:
+#line 1126 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newANONHASH((ps[-2].val.opval)); }
break;
- case 181:
-#line 1069 "perly.y" /* yacc.c:1648 */
+ case 197:
+#line 1128 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newANONHASH(NULL); }
break;
- case 182:
-#line 1071 "perly.y" /* yacc.c:1648 */
+ case 198:
+#line 1130 "perly.y" /* yacc.c:1652 */
{ SvREFCNT_inc_simple_void(PL_compcv);
(yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); }
break;
- case 183:
-#line 1074 "perly.y" /* yacc.c:1648 */
+ case 199:
+#line 1133 "perly.y" /* yacc.c:1652 */
{ SvREFCNT_inc_simple_void(PL_compcv);
(yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); }
break;
- case 184:
-#line 1080 "perly.y" /* yacc.c:1648 */
+ case 200:
+#line 1139 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));}
break;
- case 185:
-#line 1082 "perly.y" /* yacc.c:1648 */
+ case 201:
+#line 1141 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));}
break;
- case 190:
-#line 1090 "perly.y" /* yacc.c:1648 */
+ case 206:
+#line 1149 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); }
break;
- case 191:
-#line 1092 "perly.y" /* yacc.c:1648 */
+ case 207:
+#line 1151 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); }
break;
- case 192:
-#line 1094 "perly.y" /* yacc.c:1648 */
+ case 208:
+#line 1153 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); }
break;
- case 193:
-#line 1096 "perly.y" /* yacc.c:1648 */
+ case 209:
+#line 1155 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 194:
-#line 1098 "perly.y" /* yacc.c:1648 */
+ case 210:
+#line 1157 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = localize((ps[0].val.opval),0); }
break;
- case 195:
-#line 1100 "perly.y" /* yacc.c:1648 */
+ case 211:
+#line 1159 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = sawparens((ps[-1].val.opval)); }
break;
- case 196:
-#line 1102 "perly.y" /* yacc.c:1648 */
+ case 212:
+#line 1161 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 197:
-#line 1104 "perly.y" /* yacc.c:1648 */
+ case 213:
+#line 1163 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = sawparens(newNULLLIST()); }
break;
- case 198:
-#line 1106 "perly.y" /* yacc.c:1648 */
+ case 214:
+#line 1165 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 199:
-#line 1108 "perly.y" /* yacc.c:1648 */
+ case 215:
+#line 1167 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 200:
-#line 1110 "perly.y" /* yacc.c:1648 */
+ case 216:
+#line 1169 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 201:
-#line 1112 "perly.y" /* yacc.c:1648 */
+ case 217:
+#line 1171 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 202:
-#line 1114 "perly.y" /* yacc.c:1648 */
+ case 218:
+#line 1173 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));}
break;
- case 203:
-#line 1116 "perly.y" /* yacc.c:1648 */
+ case 219:
+#line 1175 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 204:
-#line 1118 "perly.y" /* yacc.c:1648 */
+ case 220:
+#line 1177 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_prepend_elem(OP_ASLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_ASLICE, 0,
@@ -1596,8 +1709,8 @@ case 2:
break;
- case 205:
-#line 1128 "perly.y" /* yacc.c:1648 */
+ case 221:
+#line 1187 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_prepend_elem(OP_KVASLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_KVASLICE, 0,
@@ -1610,8 +1723,8 @@ case 2:
break;
- case 206:
-#line 1138 "perly.y" /* yacc.c:1648 */
+ case 222:
+#line 1197 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_prepend_elem(OP_HSLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_HSLICE, 0,
@@ -1624,8 +1737,8 @@ case 2:
break;
- case 207:
-#line 1148 "perly.y" /* yacc.c:1648 */
+ case 223:
+#line 1207 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_prepend_elem(OP_KVHSLICE,
newOP(OP_PUSHMARK, 0),
newLISTOP(OP_KVHSLICE, 0,
@@ -1638,27 +1751,27 @@ case 2:
break;
- case 208:
-#line 1158 "perly.y" /* yacc.c:1648 */
+ case 224:
+#line 1217 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 209:
-#line 1160 "perly.y" /* yacc.c:1648 */
+ case 225:
+#line 1219 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); }
break;
- case 210:
-#line 1162 "perly.y" /* yacc.c:1648 */
+ case 226:
+#line 1221 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval)));
}
break;
- case 211:
-#line 1165 "perly.y" /* yacc.c:1648 */
+ case 227:
+#line 1224 "perly.y" /* yacc.c:1652 */
{
(yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval))));
@@ -1666,153 +1779,153 @@ case 2:
break;
- case 212:
-#line 1170 "perly.y" /* yacc.c:1648 */
+ case 228:
+#line 1229 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval))));
}
break;
- case 213:
-#line 1174 "perly.y" /* yacc.c:1648 */
+ case 229:
+#line 1233 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newSVREF((ps[-3].val.opval)); }
break;
- case 214:
-#line 1176 "perly.y" /* yacc.c:1648 */
+ case 230:
+#line 1235 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newAVREF((ps[-3].val.opval)); }
break;
- case 215:
-#line 1178 "perly.y" /* yacc.c:1648 */
+ case 231:
+#line 1237 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newHVREF((ps[-3].val.opval)); }
break;
- case 216:
-#line 1180 "perly.y" /* yacc.c:1648 */
+ case 232:
+#line 1239 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, 0,
scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); }
break;
- case 217:
-#line 1183 "perly.y" /* yacc.c:1648 */
+ case 233:
+#line 1242 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); }
break;
- case 218:
-#line 1185 "perly.y" /* yacc.c:1648 */
+ case 234:
+#line 1244 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL);
PL_hints |= HINT_BLOCK_SCOPE; }
break;
- case 219:
-#line 1188 "perly.y" /* yacc.c:1648 */
+ case 235:
+#line 1247 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); }
break;
- case 220:
-#line 1190 "perly.y" /* yacc.c:1648 */
+ case 236:
+#line 1249 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); }
break;
- case 221:
-#line 1192 "perly.y" /* yacc.c:1648 */
+ case 237:
+#line 1251 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newOP((ps[0].val.ival), 0); }
break;
- case 222:
-#line 1194 "perly.y" /* yacc.c:1648 */
+ case 238:
+#line 1253 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
break;
- case 223:
-#line 1196 "perly.y" /* yacc.c:1648 */
+ case 239:
+#line 1255 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); }
break;
- case 224:
-#line 1198 "perly.y" /* yacc.c:1648 */
+ case 240:
+#line 1257 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); }
break;
- case 225:
-#line 1200 "perly.y" /* yacc.c:1648 */
+ case 241:
+#line 1259 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); }
break;
- case 226:
-#line 1202 "perly.y" /* yacc.c:1648 */
+ case 242:
+#line 1261 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
break;
- case 227:
-#line 1204 "perly.y" /* yacc.c:1648 */
+ case 243:
+#line 1263 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED,
op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); }
break;
- case 228:
-#line 1207 "perly.y" /* yacc.c:1648 */
+ case 244:
+#line 1266 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newOP((ps[0].val.ival), 0); }
break;
- case 229:
-#line 1209 "perly.y" /* yacc.c:1648 */
+ case 245:
+#line 1268 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newOP((ps[-2].val.ival), 0);}
break;
- case 230:
-#line 1211 "perly.y" /* yacc.c:1648 */
+ case 246:
+#line 1270 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 231:
-#line 1213 "perly.y" /* yacc.c:1648 */
+ case 247:
+#line 1272 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[-2].val.opval); }
break;
- case 232:
-#line 1215 "perly.y" /* yacc.c:1648 */
+ case 248:
+#line 1274 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); }
break;
- case 233:
-#line 1217 "perly.y" /* yacc.c:1648 */
+ case 249:
+#line 1276 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = ((ps[-2].val.ival) == OP_NOT)
? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0)))
: newOP((ps[-2].val.ival), OPf_SPECIAL); }
break;
- case 234:
-#line 1221 "perly.y" /* yacc.c:1648 */
+ case 250:
+#line 1280 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); }
break;
- case 235:
-#line 1223 "perly.y" /* yacc.c:1648 */
+ case 251:
+#line 1282 "perly.y" /* yacc.c:1652 */
{
if ( (ps[0].val.opval)->op_type != OP_TRANS
&& (ps[0].val.opval)->op_type != OP_TRANSR
@@ -1826,186 +1939,186 @@ case 2:
break;
- case 236:
-#line 1234 "perly.y" /* yacc.c:1648 */
+ case 252:
+#line 1293 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); }
break;
- case 240:
-#line 1242 "perly.y" /* yacc.c:1648 */
+ case 256:
+#line 1301 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); }
break;
- case 241:
-#line 1244 "perly.y" /* yacc.c:1648 */
+ case 257:
+#line 1303 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = localize((ps[0].val.opval),1); }
break;
- case 242:
-#line 1246 "perly.y" /* yacc.c:1648 */
+ case 258:
+#line 1305 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); }
break;
- case 243:
-#line 1251 "perly.y" /* yacc.c:1648 */
+ case 259:
+#line 1310 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = sawparens((ps[-1].val.opval)); }
break;
- case 244:
-#line 1253 "perly.y" /* yacc.c:1648 */
+ case 260:
+#line 1312 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = sawparens(newNULLLIST()); }
break;
- case 245:
-#line 1256 "perly.y" /* yacc.c:1648 */
+ case 261:
+#line 1315 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 246:
-#line 1258 "perly.y" /* yacc.c:1648 */
+ case 262:
+#line 1317 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 247:
-#line 1260 "perly.y" /* yacc.c:1648 */
+ case 263:
+#line 1319 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 248:
-#line 1265 "perly.y" /* yacc.c:1648 */
+ case 264:
+#line 1324 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 249:
-#line 1267 "perly.y" /* yacc.c:1648 */
+ case 265:
+#line 1326 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 250:
-#line 1271 "perly.y" /* yacc.c:1648 */
+ case 266:
+#line 1330 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 251:
-#line 1273 "perly.y" /* yacc.c:1648 */
+ case 267:
+#line 1332 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 252:
-#line 1277 "perly.y" /* yacc.c:1648 */
+ case 268:
+#line 1336 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = NULL; }
break;
- case 253:
-#line 1279 "perly.y" /* yacc.c:1648 */
+ case 269:
+#line 1338 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
- case 254:
-#line 1285 "perly.y" /* yacc.c:1648 */
+ case 270:
+#line 1344 "perly.y" /* yacc.c:1652 */
{ parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); }
break;
- case 262:
-#line 1302 "perly.y" /* yacc.c:1648 */
+ case 278:
+#line 1361 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); }
break;
- case 263:
-#line 1306 "perly.y" /* yacc.c:1648 */
+ case 279:
+#line 1365 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newSVREF((ps[0].val.opval)); }
break;
- case 264:
-#line 1310 "perly.y" /* yacc.c:1648 */
+ case 280:
+#line 1369 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newAVREF((ps[0].val.opval));
if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
}
break;
- case 265:
-#line 1316 "perly.y" /* yacc.c:1648 */
+ case 281:
+#line 1375 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newHVREF((ps[0].val.opval));
if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival);
}
break;
- case 266:
-#line 1322 "perly.y" /* yacc.c:1648 */
+ case 282:
+#line 1381 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newAVREF((ps[0].val.opval)); }
break;
- case 267:
-#line 1324 "perly.y" /* yacc.c:1648 */
+ case 283:
+#line 1383 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newAVREF((ps[-3].val.opval)); }
break;
- case 268:
-#line 1328 "perly.y" /* yacc.c:1648 */
+ case 284:
+#line 1387 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newGVREF(0,(ps[0].val.opval)); }
break;
- case 270:
-#line 1333 "perly.y" /* yacc.c:1648 */
+ case 286:
+#line 1392 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newAVREF((ps[-2].val.opval)); }
break;
- case 272:
-#line 1338 "perly.y" /* yacc.c:1648 */
+ case 288:
+#line 1397 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newHVREF((ps[-2].val.opval)); }
break;
- case 274:
-#line 1343 "perly.y" /* yacc.c:1648 */
+ case 290:
+#line 1402 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); }
break;
- case 275:
-#line 1348 "perly.y" /* yacc.c:1648 */
+ case 291:
+#line 1407 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = scalar((ps[0].val.opval)); }
break;
- case 276:
-#line 1350 "perly.y" /* yacc.c:1648 */
+ case 292:
+#line 1409 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = scalar((ps[0].val.opval)); }
break;
- case 277:
-#line 1352 "perly.y" /* yacc.c:1648 */
+ case 293:
+#line 1411 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = op_scope((ps[0].val.opval)); }
break;
- case 278:
-#line 1355 "perly.y" /* yacc.c:1648 */
+ case 294:
+#line 1414 "perly.y" /* yacc.c:1652 */
{ (yyval.opval) = (ps[0].val.opval); }
break;
@@ -2016,6 +2129,6 @@ case 2:
/* Generated from:
- * 7aa97cfabf5b87a95ed263373e76c7af6d7e075e83d12e84ccdca9690c15a68d perly.y
- * b6fae5748f9bef6db4740aa5e122b84ac5181852d42474d0ecad621fa4253306 regen_perly.pl
+ * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y
+ * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl
* ex: set ro: */
diff --git a/gnu/usr.bin/perl/perly.h b/gnu/usr.bin/perl/perly.h
index 8e9d4c3f0d8..45cb6ba1216 100644
--- a/gnu/usr.bin/perl/perly.h
+++ b/gnu/usr.bin/perl/perly.h
@@ -4,14 +4,15 @@
Any changes made here will be lost!
*/
-#define PERL_BISON_VERSION 30000
+#define PERL_BISON_VERSION 30003
#ifdef PERL_CORE
-/* A Bison parser, made by GNU Bison 3.0.5. */
+/* A Bison parser, made by GNU Bison 3.3.2. */
/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
+ Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -39,6 +40,9 @@
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
+/* Undocumented macros, especially those whose name start with YY_,
+ are private implementation details. Do not rely on them. */
+
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
@@ -58,82 +62,87 @@ extern int yydebug;
GRAMBARESTMT = 261,
GRAMFULLSTMT = 262,
GRAMSTMTSEQ = 263,
- BAREWORD = 264,
- METHOD = 265,
- FUNCMETH = 266,
- THING = 267,
- PMFUNC = 268,
- PRIVATEREF = 269,
- QWLIST = 270,
- FUNC0OP = 271,
- FUNC0SUB = 272,
- UNIOPSUB = 273,
- LSTOPSUB = 274,
- PLUGEXPR = 275,
- PLUGSTMT = 276,
- LABEL = 277,
- FORMAT = 278,
- SUB = 279,
- SIGSUB = 280,
- ANONSUB = 281,
- ANON_SIGSUB = 282,
- PACKAGE = 283,
- USE = 284,
- WHILE = 285,
- UNTIL = 286,
- IF = 287,
- UNLESS = 288,
- ELSE = 289,
- ELSIF = 290,
- CONTINUE = 291,
- FOR = 292,
- GIVEN = 293,
- WHEN = 294,
- DEFAULT = 295,
- LOOPEX = 296,
- DOTDOT = 297,
- YADAYADA = 298,
- FUNC0 = 299,
- FUNC1 = 300,
- FUNC = 301,
- UNIOP = 302,
- LSTOP = 303,
- RELOP = 304,
- EQOP = 305,
- MULOP = 306,
- ADDOP = 307,
- DOLSHARP = 308,
- DO = 309,
- HASHBRACK = 310,
- NOAMP = 311,
- LOCAL = 312,
- MY = 313,
- REQUIRE = 314,
- COLONATTR = 315,
- FORMLBRACK = 316,
- FORMRBRACK = 317,
- PREC_LOW = 318,
- OROP = 319,
- DOROP = 320,
- ANDOP = 321,
- NOTOP = 322,
- ASSIGNOP = 323,
- OROR = 324,
- DORDOR = 325,
- ANDAND = 326,
- BITOROP = 327,
- BITANDOP = 328,
- SHIFTOP = 329,
- MATCHOP = 330,
- UMINUS = 331,
- REFGEN = 332,
- POWOP = 333,
- PREINC = 334,
- PREDEC = 335,
- POSTINC = 336,
- POSTDEC = 337,
- POSTJOIN = 338,
- ARROW = 339
+ 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
};
#endif
@@ -186,6 +195,6 @@ int yyparse (void);
/* Generated from:
- * 7aa97cfabf5b87a95ed263373e76c7af6d7e075e83d12e84ccdca9690c15a68d perly.y
- * b6fae5748f9bef6db4740aa5e122b84ac5181852d42474d0ecad621fa4253306 regen_perly.pl
+ * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y
+ * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl
* ex: set ro: */
diff --git a/gnu/usr.bin/perl/perly.tab b/gnu/usr.bin/perl/perly.tab
index f03bc0f46e0..4152221b33b 100644
--- a/gnu/usr.bin/perl/perly.tab
+++ b/gnu/usr.bin/perl/perly.tab
@@ -4,44 +4,44 @@
Any changes made here will be lost!
*/
-#define YYFINAL 14
+#define YYFINAL 16
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 3165
+#define YYLAST 3348
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 107
+#define YYNTOKENS 112
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 90
+#define YYNNTS 96
/* YYNRULES -- Number of rules. */
-#define YYNRULES 278
+#define YYNRULES 294
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 549
+#define YYNSTATES 572
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
- by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 339
+#define YYMAXUTOK 344
+/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, with out-of-bounds checking. */
#define YYTRANSLATE(YYX) \
- ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
- as returned by yylex, without out-of-bounds checking. */
+ as returned by yylex. */
static const yytype_uint8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 90, 2, 2, 104, 16, 17, 2,
- 102, 101, 105, 14, 79, 13, 19, 106, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 82, 103,
- 2, 18, 2, 81, 15, 2, 2, 2, 2, 2,
+ 2, 2, 2, 95, 2, 2, 109, 17, 18, 2,
+ 107, 106, 110, 15, 80, 14, 20, 111, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 83, 108,
+ 2, 19, 2, 82, 16, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 11, 2, 12, 2, 2, 2, 2, 2, 2,
+ 2, 12, 2, 13, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 9, 2, 10, 91, 2, 2, 2,
+ 2, 2, 2, 10, 2, 11, 96, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -55,48 +55,51 @@ static const yytype_uint8 yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
- 5, 6, 7, 8, 20, 21, 22, 23, 24, 25,
+ 5, 6, 7, 8, 9, 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, 65,
66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- 76, 77, 78, 80, 83, 84, 85, 86, 87, 88,
- 89, 92, 93, 94, 95, 96, 97, 98, 99, 100
+ 76, 77, 78, 79, 81, 84, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 97, 98, 99, 100,
+ 101, 102, 103, 104, 105
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 119, 119, 118, 130, 129, 140, 139, 153, 152,
- 166, 165, 179, 178, 191, 199, 207, 211, 219, 225,
- 226, 236, 237, 246, 250, 254, 261, 271, 273, 286,
- 283, 307, 302, 323, 331, 330, 339, 345, 351, 356,
- 358, 360, 367, 375, 377, 374, 394, 399, 406, 405,
- 420, 428, 434, 441, 440, 455, 459, 464, 472, 490,
- 491, 496, 498, 500, 502, 504, 506, 508, 511, 517,
- 518, 523, 534, 535, 541, 547, 548, 553, 556, 560,
- 565, 569, 573, 574, 578, 584, 589, 594, 595, 600,
- 601, 606, 607, 609, 614, 616, 628, 629, 634, 636,
- 640, 660, 661, 663, 669, 734, 736, 742, 744, 748,
- 754, 755, 760, 761, 766, 765, 824, 825, 830, 841,
- 842, 845, 856, 858, 860, 862, 866, 868, 873, 877,
- 881, 885, 891, 896, 902, 908, 910, 913, 912, 923,
- 924, 928, 932, 935, 940, 945, 948, 952, 956, 962,
- 970, 977, 983, 985, 987, 992, 994, 996, 1001, 1003,
- 1005, 1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 1026,
- 1028, 1031, 1033, 1035, 1038, 1041, 1052, 1055, 1062, 1064,
- 1066, 1068, 1070, 1073, 1079, 1081, 1085, 1086, 1087, 1088,
- 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107,
- 1109, 1111, 1113, 1115, 1117, 1127, 1137, 1147, 1157, 1159,
- 1161, 1164, 1169, 1173, 1175, 1177, 1179, 1182, 1184, 1187,
- 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1206, 1208,
- 1210, 1212, 1214, 1216, 1220, 1223, 1222, 1235, 1236, 1237,
- 1241, 1243, 1245, 1250, 1252, 1255, 1257, 1259, 1264, 1266,
- 1271, 1272, 1277, 1278, 1284, 1288, 1289, 1290, 1293, 1294,
- 1297, 1298, 1301, 1305, 1309, 1315, 1321, 1323, 1327, 1331,
- 1332, 1336, 1337, 1341, 1342, 1347, 1349, 1351, 1354
+ 0, 121, 121, 120, 132, 131, 142, 141, 155, 154,
+ 168, 167, 181, 180, 191, 190, 203, 211, 219, 223,
+ 231, 237, 238, 248, 249, 258, 262, 266, 273, 283,
+ 285, 298, 295, 319, 314, 335, 343, 342, 351, 357,
+ 363, 368, 370, 372, 379, 387, 389, 386, 406, 411,
+ 418, 417, 432, 440, 446, 453, 452, 467, 471, 476,
+ 484, 502, 503, 508, 510, 512, 514, 516, 518, 520,
+ 523, 529, 530, 535, 546, 547, 553, 559, 560, 565,
+ 568, 572, 577, 581, 585, 586, 590, 596, 601, 606,
+ 607, 612, 613, 618, 619, 621, 626, 628, 640, 641,
+ 646, 648, 652, 672, 673, 675, 681, 746, 748, 754,
+ 756, 760, 766, 767, 772, 773, 777, 781, 781, 849,
+ 850, 855, 866, 867, 870, 881, 883, 885, 887, 891,
+ 893, 898, 902, 906, 910, 916, 921, 927, 933, 935,
+ 937, 940, 939, 950, 951, 955, 959, 962, 967, 972,
+ 975, 979, 983, 989, 997, 1004, 1010, 1012, 1014, 1019,
+ 1021, 1023, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042,
+ 1044, 1046, 1048, 1052, 1054, 1056, 1058, 1062, 1064, 1068,
+ 1070, 1072, 1074, 1078, 1080, 1085, 1087, 1090, 1092, 1094,
+ 1097, 1100, 1111, 1114, 1121, 1123, 1125, 1127, 1129, 1132,
+ 1138, 1140, 1144, 1145, 1146, 1147, 1148, 1150, 1152, 1154,
+ 1156, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174,
+ 1176, 1186, 1196, 1206, 1216, 1218, 1220, 1223, 1228, 1232,
+ 1234, 1236, 1238, 1241, 1243, 1246, 1248, 1250, 1252, 1254,
+ 1256, 1258, 1260, 1262, 1265, 1267, 1269, 1271, 1273, 1275,
+ 1279, 1282, 1281, 1294, 1295, 1296, 1300, 1302, 1304, 1309,
+ 1311, 1314, 1316, 1318, 1323, 1325, 1330, 1331, 1336, 1337,
+ 1343, 1347, 1348, 1349, 1352, 1353, 1356, 1357, 1360, 1364,
+ 1368, 1374, 1380, 1382, 1386, 1390, 1391, 1395, 1396, 1400,
+ 1401, 1406, 1408, 1410, 1413
};
#endif
@@ -106,35 +109,37 @@ static const yytype_uint16 yyrline[] =
static const char *const yytname[] =
{
"$end", "error", "$undefined", "GRAMPROG", "GRAMEXPR", "GRAMBLOCK",
- "GRAMBARESTMT", "GRAMFULLSTMT", "GRAMSTMTSEQ", "'{'", "'}'", "'['",
- "']'", "'-'", "'+'", "'@'", "'%'", "'&'", "'='", "'.'", "BAREWORD",
- "METHOD", "FUNCMETH", "THING", "PMFUNC", "PRIVATEREF", "QWLIST",
- "FUNC0OP", "FUNC0SUB", "UNIOPSUB", "LSTOPSUB", "PLUGEXPR", "PLUGSTMT",
- "LABEL", "FORMAT", "SUB", "SIGSUB", "ANONSUB", "ANON_SIGSUB", "PACKAGE",
- "USE", "WHILE", "UNTIL", "IF", "UNLESS", "ELSE", "ELSIF", "CONTINUE",
- "FOR", "GIVEN", "WHEN", "DEFAULT", "LOOPEX", "DOTDOT", "YADAYADA",
- "FUNC0", "FUNC1", "FUNC", "UNIOP", "LSTOP", "RELOP", "EQOP", "MULOP",
- "ADDOP", "DOLSHARP", "DO", "HASHBRACK", "NOAMP", "LOCAL", "MY",
- "REQUIRE", "COLONATTR", "FORMLBRACK", "FORMRBRACK", "PREC_LOW", "OROP",
- "DOROP", "ANDOP", "NOTOP", "','", "ASSIGNOP", "'?'", "':'", "OROR",
- "DORDOR", "ANDAND", "BITOROP", "BITANDOP", "SHIFTOP", "MATCHOP", "'!'",
- "'~'", "UMINUS", "REFGEN", "POWOP", "PREINC", "PREDEC", "POSTINC",
- "POSTDEC", "POSTJOIN", "ARROW", "')'", "'('", "';'", "'$'", "'*'", "'/'",
- "$accept", "grammar", "@1", "@2", "@3", "@4", "@5", "@6", "block",
+ "GRAMBARESTMT", "GRAMFULLSTMT", "GRAMSTMTSEQ", "GRAMSUBSIGNATURE", "'{'",
+ "'}'", "'['", "']'", "'-'", "'+'", "'@'", "'%'", "'&'", "'='", "'.'",
+ "BAREWORD", "METHOD", "FUNCMETH", "THING", "PMFUNC", "PRIVATEREF",
+ "QWLIST", "FUNC0OP", "FUNC0SUB", "UNIOPSUB", "LSTOPSUB", "PLUGEXPR",
+ "PLUGSTMT", "LABEL", "FORMAT", "SUB", "SIGSUB", "ANONSUB", "ANON_SIGSUB",
+ "PACKAGE", "USE", "WHILE", "UNTIL", "IF", "UNLESS", "ELSE", "ELSIF",
+ "CONTINUE", "FOR", "GIVEN", "WHEN", "DEFAULT", "LOOPEX", "DOTDOT",
+ "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP", "LSTOP", "MULOP", "ADDOP",
+ "DOLSHARP", "DO", "HASHBRACK", "NOAMP", "LOCAL", "MY", "REQUIRE",
+ "COLONATTR", "FORMLBRACK", "FORMRBRACK", "SUBLEXSTART", "SUBLEXEND",
+ "PREC_LOW", "OROP", "DOROP", "ANDOP", "NOTOP", "','", "ASSIGNOP", "'?'",
+ "':'", "OROR", "DORDOR", "ANDAND", "BITOROP", "BITANDOP", "CHEQOP",
+ "NCEQOP", "CHRELOP", "NCRELOP", "SHIFTOP", "MATCHOP", "'!'", "'~'",
+ "UMINUS", "REFGEN", "POWOP", "PREINC", "PREDEC", "POSTINC", "POSTDEC",
+ "POSTJOIN", "ARROW", "')'", "'('", "';'", "'$'", "'*'", "'/'", "$accept",
+ "grammar", "@1", "@2", "@3", "@4", "@5", "@6", "@7", "block",
"formblock", "remember", "mblock", "mremember", "stmtseq", "formstmtseq",
- "fullstmt", "labfullstmt", "barestmt", "$@7", "$@8", "$@9", "$@10",
- "$@11", "@12", "$@13", "formline", "formarg", "sideff", "else", "cont",
+ "fullstmt", "labfullstmt", "barestmt", "$@8", "$@9", "$@10", "$@11",
+ "$@12", "@13", "$@14", "formline", "formarg", "sideff", "else", "cont",
"mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "formname",
"startsub", "startanonsub", "startformsub", "subname", "proto",
"subattrlist", "myattrlist", "sigvarname", "sigslurpsigil",
"sigslurpelem", "sigdefault", "sigscalarelem", "sigelem", "siglist",
- "siglistornull", "optsubsignature", "subsignature", "$@14", "optsubbody",
- "subbody", "optsigsubbody", "sigsubbody", "expr", "listexpr", "listop",
- "@15", "method", "subscripted", "termbinop", "termunop", "anonymous",
- "termdo", "term", "@16", "myattrterm", "myterm", "optlistexpr",
- "optexpr", "optrepl", "my_scalar", "my_var", "refgen_topic", "my_refgen",
- "amper", "scalar", "ary", "hsh", "arylen", "star", "sliceme", "kvslice",
- "gelem", "indirob", YY_NULLPTR
+ "siglistornull", "optsubsignature", "subsignature", "subsigguts", "$@15",
+ "optsubbody", "subbody", "optsigsubbody", "sigsubbody", "expr",
+ "listexpr", "listop", "@16", "method", "subscripted", "termbinop",
+ "termrelop", "relopchain", "termeqop", "eqopchain", "termunop",
+ "anonymous", "termdo", "term", "@17", "myattrterm", "myterm",
+ "optlistexpr", "optexpr", "optrepl", "my_scalar", "my_var",
+ "refgen_topic", "my_refgen", "amper", "scalar", "ary", "hsh", "arylen",
+ "star", "sliceme", "kvslice", "gelem", "indirob", YY_NULLPTR
};
#endif
@@ -143,89 +148,93 @@ static const char *const yytname[] =
(internal) symbol number NUM (which must be that of a token). */
static const yytype_uint16 yytoknum[] =
{
- 0, 256, 257, 258, 259, 260, 261, 262, 263, 123,
- 125, 91, 93, 45, 43, 64, 37, 38, 61, 46,
- 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 123, 125, 91, 93, 45, 43, 64, 37, 38, 61,
+ 46, 265, 266, 267, 268, 269, 270, 271, 272, 273,
274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, 317, 318, 319, 320, 321, 322, 44,
- 323, 63, 58, 324, 325, 326, 327, 328, 329, 330,
- 33, 126, 331, 332, 333, 334, 335, 336, 337, 338,
- 339, 41, 40, 59, 36, 42, 47
+ 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
+ 44, 324, 63, 58, 325, 326, 327, 328, 329, 330,
+ 331, 332, 333, 334, 335, 33, 126, 336, 337, 338,
+ 339, 340, 341, 342, 343, 344, 41, 40, 59, 36,
+ 42, 47
};
# endif
-#define YYPACT_NINF -450
+#define YYPACT_NINF -485
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-450)))
+ (!!((Yystate) == (-485)))
-#define YYTABLE_NINF -274
+#define YYTABLE_NINF -290
#define yytable_value_is_error(Yytable_value) \
- (!!((Yytable_value) == (-274)))
+ (!!((Yytable_value) == (-290)))
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- 598, -450, -450, -450, -450, -450, -450, 30, -450, 2860,
- 2, 1524, 1427, -450, -450, -450, 2005, 2860, 2860, -4,
- -4, -4, -450, -4, -4, -450, -450, 59, -62, -450,
- 2860, -450, -450, -450, -450, 2860, -29, -3, 0, 1910,
- 1813, -4, 1910, 2100, 28, 2860, 21, 2860, 2860, 2860,
- 2860, 2860, 2860, 2860, 2195, -4, -4, 83, 33, -450,
- 20, -450, -450, -450, -450, 3023, -450, -450, 5, 8,
- 49, 141, -450, 79, 162, 172, 110, -450, -450, -450,
- -450, -450, 28, 28, 104, -450, 37, 62, 66, 72,
- 199, 96, 112, 2, 44, -450, 130, -450, 120, 2098,
- 1427, -450, -450, -450, 651, 748, -450, 65, 358, 358,
- -450, -450, -450, -450, -450, -450, -450, 2860, 114, 124,
- 2860, 136, 413, 2, 107, 169, 3023, 144, 2290, 1813,
- -450, 413, 547, 33, -450, 481, 2860, -450, -450, 413,
- 237, 294, -450, -450, 2860, 413, 2955, 2385, 180, -450,
- -450, -450, 413, 33, 358, 358, 358, 165, 165, 255,
- -26, -450, -450, 2860, 2860, 2860, 2860, 2860, 2860, 2480,
- 2860, 2860, 2860, 2860, 2860, 2860, 2860, 2860, 2860, 2860,
- 2860, 2860, 2860, 2860, 2860, -450, -450, -450, 74, 2575,
- 2860, 2860, 2860, 2860, 2860, 2860, 2860, -450, 253, -450,
- -450, 256, -450, -450, -450, -450, -450, 187, 27, -450,
- -450, 191, -450, -450, -450, -450, 2, -450, -450, 2860,
- 2860, 2860, 2860, 2860, 2860, -450, -450, -450, -450, -450,
- 2860, 2860, 80, -450, -450, -450, 169, 254, -450, -450,
- -450, -14, 193, 2860, 33, -450, 290, -450, 2670, 358,
- 180, 45, 58, 75, -450, 238, 281, -450, 2860, 309,
- 244, 244, -450, 3023, 304, 109, -450, 318, 385, 1988,
- 1796, 827, 731, 3023, 2981, 1606, 1606, 400, 1701, 1893,
- 634, 358, 358, 2860, 2860, 218, 224, 225, -450, 233,
- 2765, -7, 249, 241, -450, -450, 364, 308, 184, 326,
- 222, 351, 231, 429, 845, -450, 338, -450, -450, 3,
- 307, 2860, 2860, 2860, 2860, -450, 261, -450, -450, 257,
- -450, -450, -450, -450, 1620, 7, -450, 2860, 2860, -450,
- 83, -450, 83, 83, 83, 83, 83, 263, -34, -450,
- 2860, -450, -450, 264, -450, -450, -450, 451, -450, 22,
- 497, -450, -450, -450, 260, 2860, 347, -450, -450, 2860,
- 473, 271, -450, -450, -450, -450, -450, 517, -450, -450,
- 2860, -450, 362, -450, 363, -450, 368, -450, 376, -450,
- -450, -450, 107, 169, -450, -450, 367, 298, 83, 311,
- 312, 83, 314, 303, -450, -450, -450, -450, 317, 305,
- 348, -450, 2860, 319, 329, -450, 2860, 330, -450, 424,
- -450, -450, 433, -450, -450, 46, -450, 274, -450, 3065,
- 399, -450, -450, 350, -450, -450, -450, -450, 356, 169,
- 361, -450, 2860, -450, -450, 444, 444, 2860, 2860, 444,
- -450, 320, 377, 444, 444, 83, -450, -450, 11, -450,
- -450, -450, -450, 418, 392, -450, -450, -450, -450, 393,
- 444, 444, -450, 98, 98, 402, 407, 130, 2860, 2860,
- 444, -450, -450, 942, -450, -450, 484, 484, -450, -450,
- -450, 436, 415, 1039, -450, -450, -450, -450, 1136, -450,
- 130, 130, -450, 444, 416, -450, -450, 444, 444, -450,
- 414, 432, 130, -450, -450, 439, 439, 11, -450, -450,
- 32, -450, -450, -450, 1233, -450, 2860, 130, 130, -450,
- 444, -450, 2860, -450, -450, -450, 458, 516, -450, -450,
- 435, -450, -450, -450, 130, 3023, -450, -450, -450, 444,
- 1716, -450, 1330, 98, 437, -450, -450, 444, -450
+ 739, -485, -485, -485, -485, -485, -485, -485, 28, -485,
+ 2976, 32, 1582, 1481, -485, -485, -485, -485, 2085, 2976,
+ 2976, 6, 6, 6, -485, 6, 6, -485, -485, 50,
+ -31, -485, 2976, -485, -485, -485, -485, 2976, -13, 20,
+ -33, 1986, 1885, 6, 1986, 2184, 4, 2976, 83, 2976,
+ 2976, 2976, 2976, 2976, 2976, 2976, 2283, 6, 6, 41,
+ -7, -485, 14, -485, -34, -1, -20, 22, -485, -485,
+ -485, 3151, -485, -485, 29, 56, 95, 102, -485, 153,
+ 247, 254, 157, -485, -485, -485, -485, -485, 4, 4,
+ 132, -485, 79, 100, 119, 130, 174, 146, 154, 32,
+ 152, -485, 217, -485, 160, 1984, 1481, -485, -485, -485,
+ 672, -485, 30, 774, -485, 111, 142, 142, -485, -485,
+ -485, -485, -485, -485, -485, 2976, 172, 207, 2976, 176,
+ 430, 32, 261, 216, 3151, 202, 2382, 2976, 1885, -485,
+ 430, 572, -7, -485, 476, 2976, -485, -485, 430, 299,
+ 197, -485, -485, 2976, 430, 3075, 2481, 242, -485, -485,
+ -485, 430, -7, 142, 142, 142, 57, 57, 306, 267,
+ -485, -485, 2976, 2976, 2976, 2976, 2976, 2976, 2580, -485,
+ -485, 2976, -485, -485, 2976, 2976, 2976, 2976, 2976, 2976,
+ 2976, 2976, 2976, 2976, 2976, 2976, 2976, 2976, 2976, 2976,
+ 2976, 2976, -485, -485, -485, 75, 2679, 2976, 2976, 2976,
+ 2976, 2976, 2976, 2976, -485, 307, -485, -485, 311, -485,
+ -485, -485, -485, -485, 224, 36, -485, -485, 226, -485,
+ -485, -485, -485, 32, -485, -485, 2976, 2976, 2976, 2976,
+ 2976, 2976, -485, -485, -485, -485, -485, 320, 320, -485,
+ -485, -485, 273, -485, -485, -485, 2976, 2976, 118, -485,
+ -485, -485, 216, 330, -485, -485, -485, 331, 284, 260,
+ 2976, -7, -485, 348, -485, 2778, 142, 242, 33, 55,
+ 67, -485, 342, 344, -485, 2976, 357, 294, 294, -485,
+ 3151, 249, 133, -485, 433, 430, 363, 3243, 504, 329,
+ 3151, 3105, 1667, 1667, 1767, 1867, 538, 363, 363, 430,
+ 430, 301, 142, 142, 2976, 2976, 271, 272, 274, -485,
+ 278, 2877, 23, 279, 270, -485, -485, 470, 253, 136,
+ 302, 158, 364, 162, 407, 875, -485, 372, -485, -485,
+ 1, 375, 2976, 2976, 2976, 2976, -485, 292, -485, -485,
+ 305, -485, -485, -485, -485, 1683, 34, -485, 2976, 2976,
+ -485, 41, -485, 41, 41, 41, 41, 41, -485, 332,
+ 332, 30, 308, -39, -485, 2976, -485, -485, 309, -485,
+ -485, -485, -485, 512, -485, 5, 516, -485, -485, -485,
+ 178, 2976, 416, -485, -485, 2976, 418, 193, -485, -485,
+ -485, -485, -485, 519, -485, -485, 2976, -485, 436, -485,
+ 438, -485, 440, -485, 447, -485, -485, -485, 261, 216,
+ -485, -485, 439, 353, 41, 358, 368, 41, 369, 356,
+ -485, -485, -485, -485, 374, 373, 401, -485, 2976, 381,
+ 387, 2976, -485, -485, -485, -485, 2976, 423, -485, 489,
+ -485, -485, 490, -485, -485, 19, -485, 239, -485, 3197,
+ 492, -485, -485, 398, -485, -485, -485, -485, 397, 216,
+ 404, -485, 2976, -485, -485, 496, 496, 2976, 2976, 496,
+ -485, 406, 408, 496, 496, 3151, 41, -485, -485, 410,
+ -485, -485, -485, -485, 445, 414, -485, -485, -485, -485,
+ 420, 496, 496, -485, 37, 37, 434, 435, 217, 2976,
+ 2976, 496, -485, -485, 976, -485, 1077, -485, -485, -485,
+ -485, 1178, -485, 217, 217, -485, 496, 442, -485, -485,
+ 496, 496, -485, 437, 449, 217, -485, -485, -10, -485,
+ -485, -485, 1279, -485, 2976, 217, 217, -485, 496, -485,
+ 472, 531, -485, -485, 465, -485, -485, -485, 217, -485,
+ -485, -485, 496, 1784, -485, 1380, 37, 467, -485, -485,
+ 496, -485
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -233,89 +242,94 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 0, 2, 4, 6, 8, 10, 12, 0, 16, 250,
- 0, 0, 0, 19, 1, 19, 0, 0, 0, 0,
- 0, 0, 237, 0, 0, 208, 235, 196, 230, 232,
- 226, 85, 239, 85, 85, 218, 228, 0, 0, 221,
- 248, 0, 0, 0, 0, 0, 0, 224, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 251, 125, 238,
- 203, 186, 187, 188, 189, 128, 193, 5, 209, 198,
- 201, 200, 202, 199, 0, 0, 0, 16, 7, 61,
- 27, 86, 0, 0, 0, 84, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 57, 72, 9, 0, 62,
- 0, 11, 24, 23, 0, 0, 179, 0, 169, 170,
- 275, 278, 277, 276, 264, 265, 262, 248, 0, 0,
- 0, 0, 227, 0, 89, 91, 219, 0, 0, 250,
- 222, 223, 275, 249, 135, 276, 0, 266, 185, 184,
- 0, 0, 87, 88, 248, 194, 0, 0, 241, 245,
- 247, 246, 225, 220, 171, 172, 191, 176, 177, 197,
- 0, 263, 268, 0, 0, 0, 126, 0, 0, 0,
+ 0, 2, 4, 6, 8, 10, 12, 14, 0, 18,
+ 266, 0, 0, 0, 21, 117, 1, 21, 0, 0,
+ 0, 0, 0, 0, 253, 0, 0, 224, 251, 212,
+ 246, 248, 242, 87, 255, 87, 87, 234, 244, 0,
+ 0, 237, 264, 0, 0, 0, 0, 0, 0, 240,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 267,
+ 128, 254, 219, 202, 164, 173, 165, 179, 203, 204,
+ 205, 131, 209, 5, 225, 214, 217, 216, 218, 215,
+ 0, 0, 0, 18, 7, 63, 29, 88, 0, 0,
+ 0, 86, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 59, 74, 9, 0, 64, 0, 11, 26, 25,
+ 0, 15, 112, 0, 195, 0, 185, 186, 291, 294,
+ 293, 292, 280, 281, 278, 264, 0, 0, 0, 0,
+ 243, 0, 91, 93, 235, 0, 0, 266, 266, 238,
+ 239, 291, 265, 138, 292, 0, 282, 201, 200, 0,
+ 0, 89, 90, 264, 210, 0, 0, 257, 261, 263,
+ 262, 241, 236, 187, 188, 207, 192, 193, 213, 0,
+ 279, 284, 0, 0, 0, 129, 0, 0, 0, 176,
+ 175, 0, 182, 181, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 173, 174, 175, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 19, 83, 84,
- 84, 0, 34, 16, 16, 16, 16, 16, 0, 16,
- 16, 0, 16, 16, 40, 56, 0, 52, 55, 0,
- 0, 0, 0, 0, 0, 26, 25, 20, 178, 133,
- 250, 0, 0, 231, 137, 90, 91, 93, 16, 229,
- 233, 0, 0, 0, 129, 181, 0, 212, 0, 192,
- 0, 198, 201, 200, 244, 0, 95, 240, 0, 195,
- 123, 124, 122, 127, 0, 0, 151, 0, 164, 160,
- 161, 157, 158, 155, 0, 166, 167, 165, 163, 162,
- 159, 168, 156, 0, 0, 270, 272, 0, 139, 0,
- 0, 0, 274, 132, 140, 210, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 82, 0, 29, 31, 0,
- 0, 77, 0, 0, 0, 260, 0, 261, 258, 0,
- 259, 255, 256, 257, 0, 0, 16, 0, 0, 73,
- 65, 66, 79, 63, 64, 67, 68, 0, 252, 153,
- 248, 16, 92, 112, 183, 234, 136, 0, 180, 197,
- 0, 242, 243, 94, 0, 0, 0, 144, 150, 0,
- 0, 0, 214, 215, 216, 267, 148, 0, 213, 217,
- 250, 211, 0, 142, 0, 204, 0, 205, 0, 14,
- 16, 28, 89, 91, 16, 33, 0, 0, 78, 0,
- 0, 80, 0, 0, 254, 16, 76, 81, 0, 0,
- 62, 48, 0, 0, 0, 134, 0, 0, 138, 0,
- 182, 114, 0, 113, 130, 195, 154, 0, 147, 190,
- 0, 143, 149, 0, 145, 206, 207, 141, 0, 91,
- 16, 53, 248, 74, 74, 0, 0, 0, 0, 0,
- 43, 0, 0, 0, 0, 253, 236, 19, 110, 19,
- 152, 146, 131, 0, 16, 120, 32, 119, 19, 0,
- 0, 0, 18, 69, 69, 0, 0, 72, 77, 0,
- 0, 38, 39, 0, 98, 99, 96, 96, 106, 105,
- 109, 111, 0, 0, 21, 117, 30, 116, 0, 35,
- 72, 72, 19, 0, 0, 36, 37, 0, 0, 51,
- 0, 0, 72, 118, 97, 101, 101, 107, 115, 121,
- 0, 54, 41, 42, 0, 70, 0, 72, 72, 44,
- 0, 47, 102, 104, 100, 108, 59, 0, 22, 17,
- 0, 46, 50, 74, 72, 103, 19, 58, 15, 0,
- 0, 49, 0, 69, 0, 60, 71, 0, 45
+ 0, 0, 189, 190, 191, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 21, 85, 86, 86, 0, 36,
+ 18, 18, 18, 18, 18, 0, 18, 18, 0, 18,
+ 18, 42, 58, 0, 54, 57, 0, 0, 0, 0,
+ 0, 0, 28, 27, 22, 100, 101, 98, 98, 108,
+ 107, 111, 113, 118, 194, 136, 266, 0, 0, 247,
+ 141, 92, 93, 95, 18, 245, 249, 0, 0, 0,
+ 0, 132, 197, 0, 228, 0, 208, 0, 214, 217,
+ 216, 260, 0, 97, 256, 0, 211, 126, 127, 125,
+ 130, 0, 0, 155, 0, 178, 184, 168, 161, 162,
+ 159, 0, 170, 171, 169, 167, 166, 183, 180, 177,
+ 174, 163, 172, 160, 0, 0, 286, 288, 0, 143,
+ 0, 0, 0, 290, 135, 144, 226, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 84, 0, 31, 33,
+ 0, 0, 79, 0, 0, 0, 276, 0, 277, 274,
+ 0, 275, 271, 272, 273, 0, 0, 18, 0, 0,
+ 75, 67, 68, 81, 65, 66, 69, 70, 99, 103,
+ 103, 109, 0, 268, 157, 264, 18, 94, 114, 199,
+ 250, 140, 139, 0, 196, 213, 0, 258, 259, 96,
+ 0, 0, 0, 148, 154, 0, 0, 0, 230, 231,
+ 232, 283, 152, 0, 229, 233, 266, 227, 0, 146,
+ 0, 220, 0, 221, 0, 16, 18, 30, 91, 93,
+ 18, 35, 0, 0, 80, 0, 0, 82, 0, 0,
+ 270, 18, 78, 83, 0, 0, 64, 50, 0, 0,
+ 0, 104, 106, 102, 110, 137, 0, 0, 142, 0,
+ 198, 117, 0, 115, 133, 211, 158, 0, 151, 206,
+ 0, 147, 153, 0, 149, 222, 223, 145, 0, 93,
+ 18, 55, 264, 76, 76, 0, 0, 0, 0, 0,
+ 45, 0, 0, 0, 0, 105, 269, 252, 21, 0,
+ 21, 156, 150, 134, 0, 18, 123, 34, 122, 21,
+ 0, 0, 0, 20, 71, 71, 0, 0, 74, 79,
+ 0, 0, 40, 41, 0, 116, 0, 23, 120, 32,
+ 119, 0, 37, 74, 74, 21, 0, 0, 38, 39,
+ 0, 0, 53, 0, 0, 74, 121, 124, 0, 56,
+ 43, 44, 0, 72, 0, 74, 74, 46, 0, 49,
+ 61, 0, 24, 19, 0, 48, 52, 76, 74, 21,
+ 60, 17, 0, 0, 51, 0, 71, 0, 62, 73,
+ 0, 47
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -450, -450, -450, -450, -450, -450, -450, -450, 321, -450,
- 26, -165, -450, -15, -450, 527, 440, 9, -450, -450,
- -450, -450, -450, -450, -450, -450, -450, -315, -449, -200,
- -428, -450, 78, 243, -289, 13, -450, -134, 221, -450,
- 175, 189, -232, 327, 106, -450, -450, 90, -450, 92,
- -450, -450, -450, -450, -450, -450, 131, -450, 156, -2,
- -16, -450, -450, -450, -450, -450, -450, -450, -450, 29,
- -450, -450, 465, -116, -126, -450, -450, 288, -450, -450,
- 406, 229, -38, -36, -450, -450, -450, -450, -450, 113
+ -485, -485, -485, -485, -485, -485, -485, -485, -485, 298,
+ -485, -5, -109, -485, -17, -485, 561, 471, 0, -485,
+ -485, -485, -485, -485, -485, -485, -485, -485, -340, -484,
+ -159, -456, -485, 74, 243, -336, 39, -485, -44, 143,
+ -485, 161, 173, -242, 324, 362, -485, -485, 234, -485,
+ 240, -485, -485, -485, -485, 168, -485, -485, 110, -485,
+ 165, -8, -37, -485, -485, -485, -485, -485, -485, -485,
+ -485, -485, -485, -485, -485, 103, -485, -485, 457, -124,
+ -130, -485, -485, 257, -485, -485, 399, 38, -45, -42,
+ -485, -485, -485, -485, -485, 13
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 7, 8, 9, 10, 11, 12, 13, 96, 381,
- 343, 463, 492, 104, 510, 227, 102, 103, 382, 383,
- 310, 468, 533, 441, 458, 528, 537, 98, 495, 217,
- 460, 397, 387, 331, 390, 399, 306, 202, 123, 198,
- 144, 236, 238, 257, 505, 477, 478, 523, 479, 480,
- 481, 482, 412, 413, 448, 486, 410, 456, 344, 99,
- 58, 59, 340, 293, 60, 61, 62, 63, 64, 65,
- 119, 66, 148, 134, 67, 407, 393, 318, 319, 210,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 161
+ -1, 8, 9, 10, 11, 12, 13, 14, 15, 102,
+ 417, 378, 504, 525, 110, 538, 244, 108, 109, 418,
+ 419, 341, 509, 557, 481, 499, 552, 560, 104, 528,
+ 234, 501, 433, 423, 362, 426, 435, 337, 219, 131,
+ 215, 153, 262, 264, 284, 369, 248, 249, 442, 250,
+ 251, 252, 253, 452, 453, 111, 112, 519, 450, 497,
+ 379, 105, 60, 61, 375, 324, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 127, 72, 157, 143,
+ 73, 447, 429, 349, 350, 227, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 170
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -323,771 +337,814 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 105, 229, 77, 242, 341, 77, 461, 57, 150, 396,
- 151, 77, 384, 110, 107, 496, 110, 190, 111, 191,
- 97, 111, 19, 20, 133, 392, 474, 475, 247, 167,
- 14, 168, 153, 258, 15, 398, 19, 20, 403, 404,
- 121, 141, 19, 20, 21, 166, 108, 109, 142, 163,
- 164, 165, 160, 143, 190, 526, 191, 355, -269, 122,
- -269, 163, 164, 165, 126, 307, 308, -269, 131, -269,
- 120, 139, 406, 127, 145, 259, 152, 228, 154, 155,
- 156, 157, 158, 283, -271, 284, -271, 345, -273, 285,
- 286, 287, 339, -244, 546, 288, 317, 55, 368, 128,
- 55, 133, 129, 197, 337, 540, 385, 189, 252, 226,
- 253, 55, 166, 442, 146, 476, -245, -243, 232, 196,
- 244, 357, 169, 147, 201, 55, 241, 57, 133, -247,
- 235, 55, 114, 115, 116, 527, 117, 118, 289, 203,
- 163, 164, 165, 493, 494, 255, -246, 215, 465, 466,
- -271, 430, -271, 136, 137, 163, 164, 165, 163, 164,
- 165, 260, 261, 262, 204, 264, 265, 267, 205, 162,
- 322, 192, 323, 193, 206, 249, 290, 216, 291, 292,
- 501, 194, 304, 195, 163, 164, 165, 296, 297, 298,
- 299, 300, 301, 302, 303, 263, 373, 454, 212, 268,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 213, 338, 230, 330, 332, 333,
- 334, 335, 336, 218, 408, 396, 231, 530, 57, 311,
- 312, 313, 314, 316, 375, 324, 325, 233, 327, 328,
- 237, 347, 243, 377, 423, 239, 350, 245, 113, 113,
- 113, 256, 113, 113, 124, 125, 354, 199, 200, 163,
- 164, 165, -274, -274, -274, 188, 258, 499, 207, 135,
- 113, 464, 416, 305, 467, 149, 309, 342, 471, 472,
- 315, 360, 361, 421, 113, 113, 450, 322, 367, 323,
- 512, 513, 208, 326, 346, 490, 491, 163, 164, 165,
- 348, 209, 521, 55, 353, 502, 163, 164, 165, 388,
- 332, 391, 391, 163, 164, 165, 459, 531, 532, 211,
- 355, 165, 400, 362, 133, 391, 391, 386, 515, 363,
- 364, 78, 517, 518, 541, 163, 164, 165, 365, 352,
- 112, 112, 112, 370, 112, 112, 163, 164, 165, 163,
- 164, 165, 402, 417, 369, 534, 380, 418, 135, 395,
- 130, 112, 112, 138, 405, 55, 411, 409, 57, 163,
- 164, 165, 424, 425, 543, 251, 112, 112, 426, 163,
- 164, 165, 548, 163, 164, 165, 427, 432, 419, 219,
- 220, 221, 222, 163, 164, 165, 223, 246, 224, 433,
- 391, 163, 164, 165, 445, 437, 428, 356, 440, 451,
- 431, 372, 434, 435, 214, 436, 133, 294, 439, 358,
- 443, 438, 469, 163, 164, 165, 163, 164, 165, 374,
- 444, 446, 473, 447, 483, 391, 391, 321, -274, 163,
- 164, 165, 449, 488, 234, 171, 172, 173, 174, -80,
- 112, 452, 184, 462, 376, 185, 186, 187, 188, 453,
- 171, 172, 173, 174, 455, 371, 388, 391, 177, 178,
- 179, 180, 181, 182, 183, 173, 174, 514, 470, 184,
- 409, -198, 185, 186, 187, 188, 180, 181, 182, 183,
- 190, 484, 191, -198, 184, 485, 489, 185, 186, 187,
- 188, 182, 183, 497, 163, 164, 165, 184, 498, 504,
- 185, 186, 187, 188, 391, 507, 508, 519, 516, 522,
- 113, 542, -198, -198, -198, -198, 163, 164, 165, -198,
- 536, -198, 378, 520, -198, 538, 539, 329, 547, 101,
- 225, -198, -198, -198, -198, 394, 500, -237, 163, 164,
- 165, 535, 414, 544, 321, 389, -198, -198, -198, -237,
- -198, -198, -198, -198, -198, -198, -198, -198, -198, -198,
- -198, 429, 163, 164, 165, -198, 420, 351, -198, -198,
- -198, -198, -198, 506, -198, 487, 457, -198, -237, -237,
- -237, -237, 163, 164, 165, -237, 524, -237, 415, 525,
- -237, 1, 2, 3, 4, 5, 6, -237, -237, -237,
- -237, 250, 112, 401, 320, 0, 0, 0, 422, 0,
- 0, 0, -237, -237, -237, 0, -237, -237, -237, -237,
- -237, -237, -237, -237, -237, -237, -237, 0, 0, 0,
- 0, -237, 0, 0, -237, -237, -237, -237, -237, 0,
- -237, -13, 79, -237, 0, 0, 0, 0, 0, 0,
- 77, 0, 16, 0, 17, 18, 19, 20, 21, 0,
- 0, 22, 23, 24, 25, 26, 0, 27, 28, 29,
- 30, 31, 32, 80, 100, 81, 82, 83, 33, 34,
- 84, 85, 86, 87, 88, 89, 173, 174, 0, 90,
- 91, 92, 93, 35, 0, 94, 36, 37, 38, 39,
- 40, 0, 0, 0, 0, 41, 42, 43, 44, 45,
- 46, 47, 0, 183, 0, 0, 0, 0, 184, 48,
- 0, 185, 186, 187, 188, 0, 0, 0, 0, 0,
- 0, 49, 50, 0, 51, 0, 52, 53, -3, 79,
- 0, 0, 0, 54, 95, 55, 56, 77, 0, 16,
- 0, 17, 18, 19, 20, 21, 0, 0, 22, 23,
- 24, 25, 26, 0, 27, 28, 29, 30, 31, 32,
- 80, 100, 81, 82, 83, 33, 34, 84, 85, 86,
- 87, 88, 89, 173, 0, 0, 90, 91, 92, 93,
- 35, 0, 94, 36, 37, 38, 39, 40, 0, 0,
- 0, 0, 41, 42, 43, 44, 45, 46, 47, 0,
- 183, 0, 0, 0, 0, 184, 48, 0, 185, 186,
- 187, 188, 0, 0, 0, 0, 0, 0, 49, 50,
- 0, 51, 0, 52, 53, 0, 79, 0, 0, 0,
- 54, 95, 55, 56, 77, 379, 16, 0, 17, 18,
- 19, 20, 21, 0, 0, 22, 23, 24, 25, 26,
- 0, 27, 28, 29, 30, 31, 32, 80, 100, 81,
- 82, 83, 33, 34, 84, 85, 86, 87, 88, 89,
- 0, 0, 0, 90, 91, 92, 93, 35, 0, 94,
- 36, 37, 38, 39, 40, 0, 0, 0, 0, 41,
- 42, 43, 44, 45, 46, 47, 183, 0, 0, 0,
- 0, 184, 0, 48, 185, 186, 187, 188, 0, 0,
- 0, 0, 0, 0, 0, 49, 50, 0, 51, 0,
- 52, 53, 0, 79, 0, 0, 0, 54, 95, 55,
- 56, 77, 503, 16, 0, 17, 18, 19, 20, 21,
- 0, 0, 22, 23, 24, 25, 26, 0, 27, 28,
- 29, 30, 31, 32, 80, 100, 81, 82, 83, 33,
- 34, 84, 85, 86, 87, 88, 89, 0, 0, 0,
- 90, 91, 92, 93, 35, 0, 94, 36, 37, 38,
- 39, 40, 0, 0, 0, 0, 41, 42, 43, 44,
- 45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
- 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 49, 50, 0, 51, 0, 52, 53, 0,
- 79, 0, 0, 0, 54, 95, 55, 56, 77, 509,
- 16, 0, 17, 18, 19, 20, 21, 0, 0, 22,
- 23, 24, 25, 26, 0, 27, 28, 29, 30, 31,
- 32, 80, 100, 81, 82, 83, 33, 34, 84, 85,
- 86, 87, 88, 89, 0, 0, 0, 90, 91, 92,
- 93, 35, 0, 94, 36, 37, 38, 39, 40, 0,
- 0, 0, 0, 41, 42, 43, 44, 45, 46, 47,
- 0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 49,
- 50, 0, 51, 0, 52, 53, 0, 79, 0, 0,
- 0, 54, 95, 55, 56, 77, 511, 16, 0, 17,
- 18, 19, 20, 21, 0, 0, 22, 23, 24, 25,
- 26, 0, 27, 28, 29, 30, 31, 32, 80, 100,
- 81, 82, 83, 33, 34, 84, 85, 86, 87, 88,
- 89, 0, 0, 0, 90, 91, 92, 93, 35, 0,
- 94, 36, 37, 38, 39, 40, 0, 0, 0, 0,
- 41, 42, 43, 44, 45, 46, 47, 0, 0, 0,
- 0, 0, 0, 0, 48, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 49, 50, 0, 51,
- 0, 52, 53, 0, 79, 0, 0, 0, 54, 95,
- 55, 56, 77, 529, 16, 0, 17, 18, 19, 20,
- 21, 0, 0, 22, 23, 24, 25, 26, 0, 27,
- 28, 29, 30, 31, 32, 80, 100, 81, 82, 83,
- 33, 34, 84, 85, 86, 87, 88, 89, 0, 0,
- 0, 90, 91, 92, 93, 35, 0, 94, 36, 37,
- 38, 39, 40, 0, 0, 0, 0, 41, 42, 43,
- 44, 45, 46, 47, 0, 0, 0, 0, 0, 0,
- 0, 48, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 49, 50, 0, 51, 0, 52, 53,
- 0, 79, 0, 0, 0, 54, 95, 55, 56, 77,
- 0, 16, 0, 17, 18, 19, 20, 21, 0, 0,
- 22, 23, 24, 25, 26, 0, 27, 28, 29, 30,
- 31, 32, 80, 100, 81, 82, 83, 33, 34, 84,
- 85, 86, 87, 88, 89, 0, 0, 0, 90, 91,
- 92, 93, 35, 0, 94, 36, 37, 38, 39, 40,
- 0, 0, 0, 0, 41, 42, 43, 44, 45, 46,
- 47, 0, 0, 545, 0, 0, 0, 0, 48, 0,
+ 113, 255, 59, 159, 17, 142, 160, 268, 269, 428,
+ 115, 420, 103, 162, 550, 432, 83, 285, 502, 434,
+ 376, 529, 439, 440, 176, 151, 177, 118, 16, 274,
+ 152, 391, 119, 83, 122, 123, 124, 150, 125, 126,
+ 137, 175, 83, 207, 118, 208, 245, 246, 169, 119,
+ 21, 22, 21, 22, 23, 145, 146, 179, 180, 121,
+ 121, 121, 128, 121, 121, -285, 207, -285, 208, 182,
+ 183, 171, 446, 175, 138, -260, 129, -287, 214, -287,
+ 144, 121, 569, 526, 527, 314, 158, 315, 142, -259,
+ 181, 316, 317, 318, 135, 121, 121, 319, 551, 21,
+ 22, 563, 482, -261, 348, -285, 243, -285, 271, 421,
+ 279, 184, -287, 280, -287, 57, 142, 172, 173, 174,
+ 258, 178, 116, 117, 254, -263, 372, 136, 267, 59,
+ 59, 374, 57, 404, 228, 130, 206, -262, 320, 247,
+ 134, 506, 507, 57, 140, 57, 393, 148, 282, 409,
+ 154, 270, 161, 218, 163, 164, 165, 166, 167, -290,
+ -290, -290, 205, -289, 287, 288, 289, 213, 291, 292,
+ 294, 411, 338, 339, 534, 413, 144, 470, 132, 133,
+ 353, 155, 321, 354, 322, 323, 220, 172, 173, 174,
+ 156, 456, 57, 278, 172, 173, 174, 335, 327, 328,
+ 329, 330, 331, 332, 333, 334, 461, 221, 554, 172,
+ 173, 174, 172, 173, 174, 342, 343, 344, 345, 347,
+ 373, 355, 356, 432, 358, 359, 222, 495, 361, 363,
+ 364, 365, 366, 367, 172, 173, 174, 223, 172, 173,
+ 174, 201, 224, 325, 202, 203, 204, 205, 59, 216,
+ 217, 448, 491, 229, 172, 173, 174, 209, 276, 210,
+ 232, 230, 383, 352, 211, 233, 212, 386, 235, 172,
+ 173, 174, 225, 172, 173, 174, 463, 390, 290, 256,
+ 257, 226, 259, 57, 295, 261, 263, 296, 297, 298,
+ 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
+ 309, 310, 311, 312, 313, 273, 396, 397, 265, 84,
+ 272, 353, 283, 403, 354, 172, 173, 174, 285, 120,
+ 120, 120, 346, 120, 120, 172, 173, 174, 336, 172,
+ 173, 174, 340, 357, 424, 363, 427, 427, 142, 139,
+ 120, 120, 147, 172, 173, 174, 368, 436, 500, 532,
+ 427, 427, 438, 371, 377, 120, 120, 392, 381, 384,
+ 121, 408, 186, 187, 540, 541, 382, 505, 389, 391,
+ 508, 449, 174, 286, 512, 513, 549, 406, 172, 173,
+ 174, 398, 399, 457, 400, 430, 555, 556, 401, 405,
+ 186, 416, 523, 524, 352, 200, 422, 231, 59, 564,
+ 201, 57, 535, 202, 203, 204, 205, 172, 173, 174,
+ 410, 468, 431, 441, 445, 471, 451, 543, 172, 173,
+ 174, 545, 546, 200, 186, 187, 478, 458, 201, 260,
+ 427, 202, 203, 204, 205, 142, 120, 380, 486, 558,
+ 172, 173, 174, 236, 237, 238, 239, 464, 388, 465,
+ 240, 466, 241, 566, 197, 198, 199, 200, 467, 473,
+ 472, 571, 201, 477, 474, 202, 203, 204, 205, 427,
+ 427, 514, 412, 516, 475, 476, -214, 172, 173, 174,
+ 479, 480, 521, 172, 173, 174, 207, 483, 208, -214,
+ 449, 186, 187, 484, 172, 173, 174, 487, 459, 488,
+ 490, 424, 427, 492, 493, 494, 503, -82, 542, 172,
+ 173, 174, 496, 510, 511, 414, 515, 517, -214, -214,
+ -214, -214, 518, 199, 200, -214, 460, -214, 522, 201,
+ -214, 360, 202, 203, 204, 205, 427, -214, -214, 394,
+ 530, 531, 565, 559, 485, 547, 172, 173, 174, 544,
+ -214, 561, -214, -214, -214, 548, -214, -214, -214, -214,
+ -214, -214, -214, -214, -214, -214, -214, -214, -214, -214,
+ -214, 562, -253, 570, 107, -214, 407, 242, -214, -214,
+ -214, -214, -214, 533, -214, -253, 425, -214, 172, 173,
+ 174, 469, 172, 173, 174, 172, 173, 174, 200, 186,
+ 187, 387, 567, 201, 443, 520, 202, 203, 204, 205,
+ 370, 444, 277, 437, -253, -253, -253, -253, 454, 489,
+ 120, -253, 455, -253, 351, 462, -253, 195, 196, 197,
+ 198, 199, 200, -253, -253, 498, 0, 201, 0, 0,
+ 202, 203, 204, 205, 0, 0, -253, 0, -253, -253,
+ -253, 0, -253, -253, -253, -253, -253, -253, -253, -253,
+ -253, -253, -253, -253, -253, -253, -253, 0, 0, 0,
+ 0, -253, -13, 85, -253, -253, -253, -253, -253, 0,
+ -253, 0, 83, -253, 18, 0, 19, 20, 21, 22,
+ 23, 0, 0, 24, 25, 26, 27, 28, 0, 29,
+ 30, 31, 32, 33, 34, 86, 106, 87, 88, 89,
+ 35, 36, 90, 91, 92, 93, 94, 95, 0, 0,
+ 0, 96, 97, 98, 99, 37, 0, 100, 38, 39,
+ 40, 41, 42, 0, 0, 43, 44, 45, 46, 47,
+ 48, 49, 1, 2, 3, 4, 5, 6, 7, 0,
+ 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 51, 52, 0,
+ 53, 0, 54, 55, -3, 85, 0, 0, 0, 56,
+ 101, 57, 58, 0, 83, 0, 18, 0, 19, 20,
+ 21, 22, 23, 0, 0, 24, 25, 26, 27, 28,
+ 0, 29, 30, 31, 32, 33, 34, 86, 106, 87,
+ 88, 89, 35, 36, 90, 91, 92, 93, 94, 95,
+ 0, 0, 0, 96, 97, 98, 99, 37, 0, 100,
+ 38, 39, 40, 41, 42, 0, 0, 43, 44, 45,
+ 46, 47, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 50, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,
+ 52, 0, 53, 0, 54, 55, 85, 0, 0, 0,
+ 0, 56, 101, 57, 58, 83, 415, 18, 0, 19,
+ 20, 21, 22, 23, 0, 0, 24, 25, 26, 27,
+ 28, 0, 29, 30, 31, 32, 33, 34, 86, 106,
+ 87, 88, 89, 35, 36, 90, 91, 92, 93, 94,
+ 95, 0, 0, 0, 96, 97, 98, 99, 37, 0,
+ 100, 38, 39, 40, 41, 42, 0, 0, 43, 44,
+ 45, 46, 47, 48, 49, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 50, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 50, 0, 51, 0, 52, 53, 0, 79, 0,
- 0, 0, 54, 95, 55, 56, 77, 0, 16, 0,
- 17, 18, 19, 20, 21, 0, 0, 22, 23, 24,
- 25, 26, 0, 27, 28, 29, 30, 31, 32, 80,
- 100, 81, 82, 83, 33, 34, 84, 85, 86, 87,
- 88, 89, 0, 0, 0, 90, 91, 92, 93, 35,
- 0, 94, 36, 37, 38, 39, 40, 0, 0, 0,
- 0, 41, 42, 43, 44, 45, 46, 47, 0, 0,
- 0, 0, 0, 0, 0, 48, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 49, 50, 0,
- 51, 0, 52, 53, 0, 79, 0, 0, 0, 54,
- 95, 55, 56, 77, 0, 16, 0, 17, 18, 19,
- 20, 21, 0, 0, 22, 23, 24, 25, 26, 0,
- 27, 28, 29, 30, 31, 32, 80, 0, 81, 82,
- 83, 33, 34, 84, 85, 86, 87, 88, 89, 0,
- 0, 0, 90, 91, 92, 93, 35, 0, 94, 36,
- 37, 38, 39, 40, 0, 0, 0, 0, 41, 42,
- 43, 44, 45, 46, 47, 0, 0, 0, 0, 0,
- 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 49, 50, 0, 51, 0, 52,
- 53, 79, 0, 0, 0, 0, 54, 95, 55, 56,
- 0, 16, 0, 17, 18, 19, 20, 21, 0, 0,
- 22, 23, 24, 25, 26, 0, 27, 28, 29, 30,
- 31, 32, 0, 0, 0, 0, 0, 33, 34, 0,
- 0, 0, 0, 0, 0, 0, 171, 172, 173, 174,
- 0, 0, 35, 0, 0, 36, 37, 38, 39, 40,
- 0, 0, 0, 0, 41, 42, 43, 44, 45, 46,
- 47, 179, 180, 181, 182, 183, 0, 0, 48, 0,
- 184, 0, 0, 185, 186, 187, 188, 0, 0, 0,
- 49, 50, 0, 51, 0, 52, 53, 79, 0, 0,
- 0, 0, 54, -75, 55, 56, 0, 16, 0, 17,
- 18, 19, 20, 21, 0, 0, 22, 23, 24, 25,
- 26, 0, 27, 28, 29, 30, 31, 32, 0, 0,
- 0, 0, 0, 33, 34, 0, 0, 0, 0, 0,
- 0, 171, 172, 173, 174, 0, 0, 0, 35, 0,
- 0, 36, 37, 38, 39, 40, 0, 0, 0, 0,
- 41, 42, 43, 44, 45, 46, 47, 0, 181, 182,
- 183, 0, 0, 0, 48, 184, 0, 0, 185, 186,
- 187, 188, 0, 0, 0, 0, 49, 50, 0, 51,
- 0, 52, 53, 0, 0, 0, 0, -75, 54, 0,
- 55, 56, 77, 0, 16, 0, 17, 18, 19, 20,
- 21, 0, 0, 132, 23, 24, 25, 26, 111, 27,
- 28, 29, 30, 31, 32, 0, 0, 0, 0, 0,
- 33, 34, 0, 0, 0, 0, 171, -274, 173, 174,
- 0, 0, 0, 0, 0, 35, 0, 0, 36, 37,
- 38, 39, 40, 0, 0, 0, 0, 41, 42, 43,
- 44, 45, 46, 47, 182, 183, 0, 0, 0, 0,
- 184, 48, 0, 185, 186, 187, 188, 0, 0, 0,
- 0, 0, 0, 49, 50, 0, 51, 0, 52, 53,
- 0, 0, 0, 0, 0, 54, 0, 55, 56, 77,
- 0, 16, 0, 17, 18, 19, 20, 21, 0, 0,
- 22, 23, 24, 25, 26, 0, 27, 28, 29, 30,
- 31, 32, 0, 0, 0, 0, 0, 33, 34, 0,
- 0, 0, 0, 171, 172, 173, 174, 0, 0, 0,
- 0, 0, 35, 0, 0, 36, 37, 38, 39, 40,
- 0, 0, 0, 0, 41, 42, 43, 44, 45, 46,
- 47, 182, 183, 0, 0, 0, 0, 184, 48, 0,
- 185, 186, 187, 188, 0, 0, 0, 0, 0, 0,
- 49, 50, 0, 51, 0, 52, 53, 0, 0, 0,
- 0, 0, 54, 0, 55, 56, 16, 106, 17, 18,
- 19, 20, 21, 0, 0, 22, 23, 24, 25, 26,
- 0, 27, 28, 29, 30, 31, 32, 0, 0, 0,
- 0, 0, 33, 34, 0, 0, 0, 0, -274, 0,
- 173, 174, 0, 0, 0, 0, 0, 35, 0, 0,
- 36, 37, 38, 39, 40, 0, 0, 0, 0, 41,
- 42, 43, 44, 45, 46, 47, 182, 183, 0, 0,
- 0, 0, 184, 48, 0, 185, 186, 187, 188, 0,
- 0, 0, 0, 0, 0, 49, 50, 0, 51, 0,
- 52, 53, 0, 0, 0, 0, 0, 54, 0, 55,
- 56, 16, 0, 17, 18, 19, 20, 21, 0, 0,
- 22, 23, 24, 25, 26, 0, 27, 28, 29, 30,
- 31, 32, 0, 0, 0, 0, 0, 33, 34, 219,
- 220, 221, 222, 0, 0, 0, 223, 0, 224, 0,
- 0, 0, 35, 0, 0, 36, 37, 38, 39, 40,
- 0, 0, 0, 0, 41, 42, 43, 44, 45, 46,
- 47, 0, 0, 163, 164, 165, 0, 0, 48, 0,
+ 51, 52, 0, 53, 0, 54, 55, 85, 0, 0,
+ 0, 0, 56, 101, 57, 58, 83, 536, 18, 0,
+ 19, 20, 21, 22, 23, 0, 0, 24, 25, 26,
+ 27, 28, 0, 29, 30, 31, 32, 33, 34, 86,
+ 106, 87, 88, 89, 35, 36, 90, 91, 92, 93,
+ 94, 95, 0, 0, 0, 96, 97, 98, 99, 37,
+ 0, 100, 38, 39, 40, 41, 42, 0, 0, 43,
+ 44, 45, 46, 47, 48, 49, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 50, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 50, 0, 51, 0, 52, 53, 0, 0, 0,
- 0, 0, 54, 140, 55, 56, 16, 0, 17, 18,
- 19, 20, 21, 0, 0, 22, 23, 24, 25, 26,
- 0, 27, 28, 29, 30, 31, 32, 0, 0, 0,
- 0, 0, 33, 34, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 35, 0, 0,
- 36, 37, 38, 39, 40, 0, 0, 0, 0, 41,
- 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
- 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 49, 50, 0, 51, 0,
- 52, 53, 0, 0, 0, 0, 159, 54, 0, 55,
- 56, 16, 0, 17, 18, 19, 20, 21, 0, 0,
- 22, 23, 24, 25, 26, 0, 27, 28, 29, 30,
- 31, 32, 0, 0, 0, 0, 0, 33, 34, 0,
+ 0, 51, 52, 0, 53, 0, 54, 55, 85, 0,
+ 0, 0, 0, 56, 101, 57, 58, 83, 537, 18,
+ 0, 19, 20, 21, 22, 23, 0, 0, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
+ 86, 106, 87, 88, 89, 35, 36, 90, 91, 92,
+ 93, 94, 95, 0, 0, 0, 96, 97, 98, 99,
+ 37, 0, 100, 38, 39, 40, 41, 42, 0, 0,
+ 43, 44, 45, 46, 47, 48, 49, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 35, 0, 0, 36, 37, 38, 39, 40,
- 0, 0, 0, 0, 41, 42, 43, 44, 45, 46,
- 47, 0, 0, 0, 0, 0, 0, 0, 48, 0,
+ 0, 0, 51, 52, 0, 53, 0, 54, 55, 85,
+ 0, 0, 0, 0, 56, 101, 57, 58, 83, 539,
+ 18, 0, 19, 20, 21, 22, 23, 0, 0, 24,
+ 25, 26, 27, 28, 0, 29, 30, 31, 32, 33,
+ 34, 86, 106, 87, 88, 89, 35, 36, 90, 91,
+ 92, 93, 94, 95, 0, 0, 0, 96, 97, 98,
+ 99, 37, 0, 100, 38, 39, 40, 41, 42, 0,
+ 0, 43, 44, 45, 46, 47, 48, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 50, 0, 51, 0, 52, 53, 0, 0, 0,
- 0, 240, 54, 0, 55, 56, 16, 0, 17, 18,
- 19, 20, 21, 0, 0, 22, 23, 24, 25, 26,
- 0, 27, 28, 29, 30, 31, 32, 0, 0, 0,
- 0, 0, 33, 34, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 35, 0, 0,
- 36, 37, 38, 39, 40, 0, 0, 0, 0, 41,
- 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
- 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 49, 50, 0, 51, 0,
- 52, 53, 0, 0, 0, 0, 254, 54, 0, 55,
- 56, 16, 0, 17, 18, 19, 20, 21, 0, 0,
- 22, 23, 24, 25, 26, 0, 27, 28, 29, 30,
- 31, 32, 0, 0, 0, 0, 0, 33, 34, 0,
+ 0, 0, 0, 51, 52, 0, 53, 0, 54, 55,
+ 85, 0, 0, 0, 0, 56, 101, 57, 58, 83,
+ 553, 18, 0, 19, 20, 21, 22, 23, 0, 0,
+ 24, 25, 26, 27, 28, 0, 29, 30, 31, 32,
+ 33, 34, 86, 106, 87, 88, 89, 35, 36, 90,
+ 91, 92, 93, 94, 95, 0, 0, 0, 96, 97,
+ 98, 99, 37, 0, 100, 38, 39, 40, 41, 42,
+ 0, 0, 43, 44, 45, 46, 47, 48, 49, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 35, 0, 0, 36, 37, 38, 39, 40,
- 0, 0, 0, 0, 41, 42, 43, 44, 45, 46,
- 47, 0, 0, 0, 0, 0, 0, 0, 48, 0,
+ 0, 0, 0, 0, 51, 52, 0, 53, 0, 54,
+ 55, 85, 0, 0, 0, 0, 56, 101, 57, 58,
+ 83, 0, 18, 0, 19, 20, 21, 22, 23, 0,
+ 0, 24, 25, 26, 27, 28, 0, 29, 30, 31,
+ 32, 33, 34, 86, 106, 87, 88, 89, 35, 36,
+ 90, 91, 92, 93, 94, 95, 0, 0, 0, 96,
+ 97, 98, 99, 37, 0, 100, 38, 39, 40, 41,
+ 42, 0, 0, 43, 44, 45, 46, 47, 48, 49,
+ 0, 0, 568, 0, 0, 0, 0, 0, 0, 50,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 50, 0, 51, 0, 52, 53, 0, 0, 0,
- 0, 266, 54, 0, 55, 56, 16, 0, 17, 18,
- 19, 20, 21, 0, 0, 22, 23, 24, 25, 26,
- 0, 27, 28, 29, 30, 31, 32, 0, 0, 0,
- 0, 0, 33, 34, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 35, 0, 0,
- 36, 37, 38, 39, 40, 0, 0, 0, 0, 41,
- 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
- 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 49, 50, 0, 51, 0,
- 52, 53, 0, 0, 0, 0, 295, 54, 0, 55,
- 56, 16, 0, 17, 18, 19, 20, 21, 0, 0,
- 22, 23, 24, 25, 26, 0, 27, 28, 29, 30,
- 31, 32, 0, 0, 0, 0, 0, 33, 34, 0,
+ 0, 0, 0, 0, 0, 51, 52, 0, 53, 0,
+ 54, 55, 85, 0, 0, 0, 0, 56, 101, 57,
+ 58, 83, 0, 18, 0, 19, 20, 21, 22, 23,
+ 0, 0, 24, 25, 26, 27, 28, 0, 29, 30,
+ 31, 32, 33, 34, 86, 106, 87, 88, 89, 35,
+ 36, 90, 91, 92, 93, 94, 95, 0, 0, 0,
+ 96, 97, 98, 99, 37, 0, 100, 38, 39, 40,
+ 41, 42, 0, 0, 43, 44, 45, 46, 47, 48,
+ 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 51, 52, 0, 53,
+ 0, 54, 55, 85, 0, 0, 0, 0, 56, 101,
+ 57, 58, 83, 0, 18, 0, 19, 20, 21, 22,
+ 23, 0, 0, 24, 25, 26, 27, 28, 0, 29,
+ 30, 31, 32, 33, 34, 86, 0, 87, 88, 89,
+ 35, 36, 90, 91, 92, 93, 94, 95, 0, 0,
+ 0, 96, 97, 98, 99, 37, 0, 100, 38, 39,
+ 40, 41, 42, 0, 0, 43, 44, 45, 46, 47,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 51, 52, 0,
+ 53, 0, 54, 55, 85, 0, 0, 0, 0, 56,
+ 101, 57, 58, 0, 0, 18, 0, 19, 20, 21,
+ 22, 23, 0, 0, 24, 25, 26, 27, 28, 0,
+ 29, 30, 31, 32, 33, 34, 0, 0, 0, 0,
+ 0, 35, 36, 0, 0, 0, 0, 0, 186, 187,
+ 0, 0, 0, 0, 0, 0, 37, 0, 0, 38,
+ 39, 40, 41, 42, 0, 0, 43, 44, 45, 46,
+ 47, 48, 49, 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 50, 0, 0, 0, 201, 0, 0, 202,
+ 203, 204, 205, 0, 0, 0, 0, 0, 51, 52,
+ 0, 53, 0, 54, 55, 85, 0, 0, 0, 0,
+ 56, -77, 57, 58, 0, 0, 18, 0, 19, 20,
+ 21, 22, 23, 0, 0, 24, 25, 26, 27, 28,
+ 0, 29, 30, 31, 32, 33, 34, 0, 0, 0,
+ 0, 0, 35, 36, 0, 0, 0, 0, 186, 187,
+ 0, 0, 0, 0, 0, 0, 0, 37, 0, 0,
+ 38, 39, 40, 41, 42, 0, 0, 43, 44, 45,
+ 46, 47, 48, 49, 193, 194, 195, 196, 197, 198,
+ 199, 200, 0, 50, 0, 0, 201, 0, 0, 202,
+ 203, 204, 205, 0, 0, 0, 0, 0, 0, 51,
+ 52, 0, 53, 0, 54, 55, 0, 0, 0, 0,
+ -77, 56, 0, 57, 58, 83, 0, 18, 0, 19,
+ 20, 21, 22, 23, 0, 0, 141, 25, 26, 27,
+ 28, 119, 29, 30, 31, 32, 33, 34, 0, 0,
+ 0, 0, 0, 35, 36, 0, 0, 0, 186, 187,
+ 0, 0, 0, 0, 0, 0, 0, 0, 37, 0,
+ 0, 38, 39, 40, 41, 42, 0, 0, 43, 44,
+ 45, 46, 47, 48, 49, 194, 195, 196, 197, 198,
+ 199, 200, 0, 0, 50, 0, 201, 0, 0, 202,
+ 203, 204, 205, 0, 0, 0, 0, 0, 0, 0,
+ 51, 52, 0, 53, 0, 54, 55, 0, 0, 0,
+ 0, 0, 56, 0, 57, 58, 83, 0, 18, 0,
+ 19, 20, 21, 22, 23, 0, 0, 24, 25, 26,
+ 27, 28, 0, 29, 30, 31, 32, 33, 34, 0,
+ 0, 0, 0, 0, 35, 36, 236, 237, 238, 239,
+ 0, 0, 0, 240, 0, 241, 0, 0, 0, 37,
+ 0, 0, 38, 39, 40, 41, 42, 0, 0, 43,
+ 44, 45, 46, 47, 48, 49, 0, 0, 0, 0,
+ 172, 173, 174, 0, 0, 50, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 35, 0, 0, 36, 37, 38, 39, 40,
- 0, 0, 0, 0, 41, 42, 43, 44, 45, 46,
- 47, 0, 0, 0, 0, 0, 0, 0, 48, 0,
+ 0, 51, 52, 0, 53, 0, 54, 55, 0, 0,
+ 0, 0, 0, 56, 0, 57, 58, 18, 114, 19,
+ 20, 21, 22, 23, 0, 0, 24, 25, 26, 27,
+ 28, 0, 29, 30, 31, 32, 33, 34, 0, 0,
+ 0, 0, 0, 35, 36, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 37, 0,
+ 0, 38, 39, 40, 41, 42, 0, 0, 43, 44,
+ 45, 46, 47, 48, 49, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 50, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 50, 0, 51, 0, 52, 53, 0, 0, 0,
- 0, 349, 54, 0, 55, 56, 16, 0, 17, 18,
- 19, 20, 21, 0, 0, 22, 23, 24, 25, 26,
- 0, 27, 28, 29, 30, 31, 32, 0, 0, 0,
- 0, 0, 33, 34, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 35, 0, 0,
- 36, 37, 38, 39, 40, 0, 0, 0, 0, 41,
- 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
- 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 49, 50, 0, 51, 0,
- 52, 53, 0, 0, 0, 0, 366, 54, 0, 55,
- 56, 16, 0, 17, 18, 19, 20, 21, 0, 0,
- 22, 23, 24, 25, 26, 0, 27, 28, 29, 30,
- 31, 32, 0, 0, 0, 0, 0, 33, 34, 0,
+ 51, 52, 0, 53, 0, 54, 55, 0, 0, 0,
+ 0, 0, 56, 0, 57, 58, 18, 0, 19, 20,
+ 21, 22, 23, 0, 0, 24, 25, 26, 27, 28,
+ 0, 29, 30, 31, 32, 33, 34, 0, 0, 0,
+ 0, 0, 35, 36, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 37, 0, 0,
+ 38, 39, 40, 41, 42, 0, 0, 43, 44, 45,
+ 46, 47, 48, 49, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 50, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 51,
+ 52, 0, 53, 0, 54, 55, 0, 0, 0, 0,
+ 0, 56, 149, 57, 58, 18, 0, 19, 20, 21,
+ 22, 23, 0, 0, 24, 25, 26, 27, 28, 0,
+ 29, 30, 31, 32, 33, 34, 0, 0, 0, 0,
+ 0, 35, 36, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 37, 0, 0, 38,
+ 39, 40, 41, 42, 0, 0, 43, 44, 45, 46,
+ 47, 48, 49, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 50, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 51, 52,
+ 0, 53, 0, 54, 55, 0, 0, 0, 0, 168,
+ 56, 0, 57, 58, 18, 0, 19, 20, 21, 22,
+ 23, 0, 0, 24, 25, 26, 27, 28, 0, 29,
+ 30, 31, 32, 33, 34, 0, 0, 0, 0, 0,
+ 35, 36, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 37, 0, 0, 38, 39,
+ 40, 41, 42, 0, 0, 43, 44, 45, 46, 47,
+ 48, 49, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 50, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 51, 52, 0,
+ 53, 0, 54, 55, 0, 0, 0, 0, 266, 56,
+ 0, 57, 58, 18, 0, 19, 20, 21, 22, 23,
+ 0, 0, 24, 25, 26, 27, 28, 0, 29, 30,
+ 31, 32, 33, 34, 0, 0, 0, 0, 0, 35,
+ 36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 37, 0, 0, 38, 39, 40,
+ 41, 42, 0, 0, 43, 44, 45, 46, 47, 48,
+ 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 50, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 51, 52, 0, 53,
+ 0, 54, 55, 0, 0, 0, 0, 281, 56, 0,
+ 57, 58, 18, 0, 19, 20, 21, 22, 23, 0,
+ 0, 24, 25, 26, 27, 28, 0, 29, 30, 31,
+ 32, 33, 34, 0, 0, 0, 0, 0, 35, 36,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 35, 0, 0, 36, 37, 38, 39, 40,
- 0, 0, 0, 0, 41, 42, 43, 44, 45, 46,
- 47, 0, 0, 0, 0, 0, 0, 0, 48, 0,
+ 0, 0, 0, 37, 0, 0, 38, 39, 40, 41,
+ 42, 0, 0, 43, 44, 45, 46, 47, 48, 49,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 50,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 49, 50, 0, 51, 0, 52, 53, 0, 0, 0,
- 0, 0, 54, 0, 55, 56, 16, 0, 17, 18,
- 19, 20, 21, 0, 0, 22, 23, 24, 25, 26,
- 0, 27, 28, 29, 30, 31, 32, 0, 0, 0,
- 0, 0, 33, 34, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 35, 0, 0,
- 36, 37, 38, 39, 40, 0, 0, 0, 0, 41,
- 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
- 0, 0, 0, 48, 170, 0, 0, 0, 0, 0,
- 0, 171, 172, 173, 174, 49, 50, 0, 51, 0,
- 52, 53, 0, 0, 0, 0, 0, 248, 0, 55,
- 56, 175, 176, 359, 177, 178, 179, 180, 181, 182,
- 183, 0, 0, 0, 0, 184, 170, 0, 185, 186,
- 187, 188, 0, 171, 172, 173, 174, 0, 0, 0,
+ 0, 0, 0, 0, 0, 51, 52, 0, 53, 0,
+ 54, 55, 0, 0, 0, 0, 293, 56, 0, 57,
+ 58, 18, 0, 19, 20, 21, 22, 23, 0, 0,
+ 24, 25, 26, 27, 28, 0, 29, 30, 31, 32,
+ 33, 34, 0, 0, 0, 0, 0, 35, 36, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 175, 176, 0, 177, 178, 179, 180,
- 181, 182, 183, 0, 0, 0, 0, 184, 170, 0,
- 185, 186, 187, 188, 0, 171, 172, 173, 174, 0,
+ 0, 0, 37, 0, 0, 38, 39, 40, 41, 42,
+ 0, 0, 43, 44, 45, 46, 47, 48, 49, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 176, 0, 177, 178,
- 179, 180, 181, 182, 183, 0, 0, 0, 0, 184,
- 0, 0, 185, 186, 187, 188
+ 0, 0, 0, 0, 51, 52, 0, 53, 0, 54,
+ 55, 0, 0, 0, 0, 326, 56, 0, 57, 58,
+ 18, 0, 19, 20, 21, 22, 23, 0, 0, 24,
+ 25, 26, 27, 28, 0, 29, 30, 31, 32, 33,
+ 34, 0, 0, 0, 0, 0, 35, 36, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 37, 0, 0, 38, 39, 40, 41, 42, 0,
+ 0, 43, 44, 45, 46, 47, 48, 49, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 51, 52, 0, 53, 0, 54, 55,
+ 0, 0, 0, 0, 385, 56, 0, 57, 58, 18,
+ 0, 19, 20, 21, 22, 23, 0, 0, 24, 25,
+ 26, 27, 28, 0, 29, 30, 31, 32, 33, 34,
+ 0, 0, 0, 0, 0, 35, 36, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 37, 0, 0, 38, 39, 40, 41, 42, 0, 0,
+ 43, 44, 45, 46, 47, 48, 49, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 50, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 51, 52, 0, 53, 0, 54, 55, 0,
+ 0, 0, 0, 402, 56, 0, 57, 58, 18, 0,
+ 19, 20, 21, 22, 23, 0, 0, 24, 25, 26,
+ 27, 28, 0, 29, 30, 31, 32, 33, 34, 0,
+ 0, 0, 0, 0, 35, 36, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 37,
+ 0, 0, 38, 39, 40, 41, 42, 0, 0, 43,
+ 44, 45, 46, 47, 48, 49, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 50, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 51, 52, 0, 53, 0, 54, 55, 0, 0,
+ 0, 0, 0, 56, 0, 57, 58, 18, 0, 19,
+ 20, 21, 22, 23, 0, 0, 24, 25, 26, 27,
+ 28, 0, 29, 30, 31, 32, 33, 34, 0, 0,
+ 0, 0, 0, 35, 36, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 37, 0,
+ 0, 38, 39, 40, 41, 42, 0, 0, 43, 44,
+ 45, 46, 47, 48, 49, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 50, 0, 0, 0, 0, 185,
+ 0, 0, 0, 0, 0, 0, 186, 187, 0, 0,
+ 51, 52, 0, 53, 0, 54, 55, 0, 0, 0,
+ 0, 0, 275, 0, 57, 58, 188, 189, 395, 190,
+ 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
+ 0, 0, 0, 0, 201, 185, 0, 202, 203, 204,
+ 205, 0, 186, 187, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 188, 189, 0, 190, 191, 192, 193, 194,
+ 195, 196, 197, 198, 199, 200, 0, 0, 0, 0,
+ 201, 185, 0, 202, 203, 204, 205, 0, 186, 187,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 189,
+ 0, 190, 191, 192, 193, 194, 195, 196, 197, 198,
+ 199, 200, 0, 0, 0, 0, 201, -290, 0, 202,
+ 203, 204, 205, 0, 186, 187, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 190, 191, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 0, 0,
+ 0, 0, 201, 0, 0, 202, 203, 204, 205
};
static const yytype_int16 yycheck[] =
{
- 15, 117, 9, 129, 236, 9, 434, 9, 46, 324,
- 46, 9, 9, 20, 16, 464, 20, 9, 25, 11,
- 11, 25, 15, 16, 40, 314, 15, 16, 144, 9,
- 0, 11, 48, 11, 8, 324, 15, 16, 327, 328,
- 102, 43, 15, 16, 17, 79, 17, 18, 20, 75,
- 76, 77, 54, 25, 9, 23, 11, 11, 9, 30,
- 11, 75, 76, 77, 35, 199, 200, 9, 39, 11,
- 11, 42, 106, 102, 45, 101, 47, 12, 49, 50,
- 51, 52, 53, 9, 9, 11, 11, 101, 9, 15,
- 16, 17, 12, 71, 543, 21, 69, 104, 105, 102,
- 104, 117, 102, 77, 230, 533, 103, 102, 146, 100,
- 146, 104, 79, 402, 93, 104, 71, 71, 120, 9,
- 136, 12, 102, 102, 20, 104, 128, 129, 144, 71,
- 23, 104, 19, 20, 21, 103, 23, 24, 64, 102,
- 75, 76, 77, 45, 46, 147, 71, 103, 437, 438,
- 9, 383, 11, 40, 41, 75, 76, 77, 75, 76,
- 77, 163, 164, 165, 102, 167, 168, 169, 102, 56,
- 208, 9, 208, 11, 102, 146, 102, 47, 104, 105,
- 469, 9, 197, 11, 75, 76, 77, 189, 190, 191,
- 192, 193, 194, 195, 196, 166, 12, 429, 102, 170,
- 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 102, 231, 102, 219, 220, 221,
- 222, 223, 224, 103, 340, 540, 102, 516, 230, 203,
- 204, 205, 206, 207, 12, 209, 210, 101, 212, 213,
- 71, 243, 129, 12, 370, 101, 248, 10, 19, 20,
- 21, 71, 23, 24, 33, 34, 258, 82, 83, 75,
- 76, 77, 97, 98, 99, 100, 11, 467, 69, 40,
- 41, 436, 12, 20, 439, 46, 20, 23, 443, 444,
- 93, 283, 284, 12, 55, 56, 12, 325, 290, 325,
- 490, 491, 93, 102, 101, 460, 461, 75, 76, 77,
- 10, 102, 502, 104, 23, 470, 75, 76, 77, 311,
- 312, 313, 314, 75, 76, 77, 432, 517, 518, 90,
- 11, 77, 324, 105, 340, 327, 328, 20, 493, 105,
- 105, 10, 497, 498, 534, 75, 76, 77, 105, 101,
- 19, 20, 21, 102, 23, 24, 75, 76, 77, 75,
- 76, 77, 326, 355, 105, 520, 18, 10, 129, 102,
- 39, 40, 41, 42, 101, 104, 102, 341, 370, 75,
- 76, 77, 10, 10, 539, 146, 55, 56, 10, 75,
- 76, 77, 547, 75, 76, 77, 10, 20, 359, 41,
- 42, 43, 44, 75, 76, 77, 48, 103, 50, 101,
- 402, 75, 76, 77, 406, 102, 380, 103, 103, 10,
- 384, 103, 101, 101, 93, 101, 432, 188, 101, 101,
- 101, 395, 102, 75, 76, 77, 75, 76, 77, 103,
- 101, 101, 447, 9, 449, 437, 438, 208, 53, 75,
- 76, 77, 9, 458, 123, 60, 61, 62, 63, 101,
- 129, 101, 94, 9, 103, 97, 98, 99, 100, 103,
- 60, 61, 62, 63, 103, 101, 468, 469, 83, 84,
- 85, 86, 87, 88, 89, 62, 63, 492, 101, 94,
- 454, 0, 97, 98, 99, 100, 86, 87, 88, 89,
- 9, 73, 11, 12, 94, 103, 103, 97, 98, 99,
- 100, 88, 89, 101, 75, 76, 77, 94, 101, 25,
- 97, 98, 99, 100, 516, 79, 101, 103, 102, 80,
- 291, 536, 41, 42, 43, 44, 75, 76, 77, 48,
- 72, 50, 103, 101, 53, 19, 101, 216, 101, 12,
- 100, 60, 61, 62, 63, 316, 468, 0, 75, 76,
- 77, 522, 101, 540, 325, 312, 75, 76, 77, 12,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 382, 75, 76, 77, 94, 103, 250, 97, 98,
- 99, 100, 101, 477, 103, 454, 430, 106, 41, 42,
- 43, 44, 75, 76, 77, 48, 506, 50, 101, 507,
- 53, 3, 4, 5, 6, 7, 8, 60, 61, 62,
- 63, 146, 291, 325, 208, -1, -1, -1, 101, -1,
- -1, -1, 75, 76, 77, -1, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, -1, -1, -1,
- -1, 94, -1, -1, 97, 98, 99, 100, 101, -1,
- 103, 0, 1, 106, -1, -1, -1, -1, -1, -1,
- 9, -1, 11, -1, 13, 14, 15, 16, 17, -1,
- -1, 20, 21, 22, 23, 24, -1, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 62, 63, -1, 48,
- 49, 50, 51, 52, -1, 54, 55, 56, 57, 58,
- 59, -1, -1, -1, -1, 64, 65, 66, 67, 68,
- 69, 70, -1, 89, -1, -1, -1, -1, 94, 78,
- -1, 97, 98, 99, 100, -1, -1, -1, -1, -1,
- -1, 90, 91, -1, 93, -1, 95, 96, 0, 1,
- -1, -1, -1, 102, 103, 104, 105, 9, -1, 11,
- -1, 13, 14, 15, 16, 17, -1, -1, 20, 21,
- 22, 23, 24, -1, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 62, -1, -1, 48, 49, 50, 51,
- 52, -1, 54, 55, 56, 57, 58, 59, -1, -1,
- -1, -1, 64, 65, 66, 67, 68, 69, 70, -1,
- 89, -1, -1, -1, -1, 94, 78, -1, 97, 98,
- 99, 100, -1, -1, -1, -1, -1, -1, 90, 91,
- -1, 93, -1, 95, 96, -1, 1, -1, -1, -1,
- 102, 103, 104, 105, 9, 10, 11, -1, 13, 14,
- 15, 16, 17, -1, -1, 20, 21, 22, 23, 24,
- -1, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- -1, -1, -1, 48, 49, 50, 51, 52, -1, 54,
- 55, 56, 57, 58, 59, -1, -1, -1, -1, 64,
- 65, 66, 67, 68, 69, 70, 89, -1, -1, -1,
- -1, 94, -1, 78, 97, 98, 99, 100, -1, -1,
- -1, -1, -1, -1, -1, 90, 91, -1, 93, -1,
- 95, 96, -1, 1, -1, -1, -1, 102, 103, 104,
- 105, 9, 10, 11, -1, 13, 14, 15, 16, 17,
- -1, -1, 20, 21, 22, 23, 24, -1, 26, 27,
+ 17, 125, 10, 48, 9, 42, 48, 137, 138, 345,
+ 18, 10, 12, 50, 24, 355, 10, 12, 474, 355,
+ 262, 505, 358, 359, 10, 21, 12, 21, 0, 153,
+ 26, 12, 26, 10, 21, 22, 23, 45, 25, 26,
+ 73, 80, 10, 10, 21, 12, 16, 17, 56, 26,
+ 16, 17, 16, 17, 18, 42, 43, 91, 92, 21,
+ 22, 23, 12, 25, 26, 10, 10, 12, 12, 89,
+ 90, 58, 111, 80, 107, 70, 107, 10, 83, 12,
+ 42, 43, 566, 46, 47, 10, 48, 12, 125, 70,
+ 91, 16, 17, 18, 107, 57, 58, 22, 108, 16,
+ 17, 557, 438, 70, 68, 10, 106, 12, 145, 108,
+ 155, 89, 10, 155, 12, 109, 153, 76, 77, 78,
+ 128, 107, 19, 20, 13, 70, 256, 107, 136, 137,
+ 138, 13, 109, 110, 96, 32, 107, 70, 63, 109,
+ 37, 477, 478, 109, 41, 109, 13, 44, 156, 13,
+ 47, 138, 49, 21, 51, 52, 53, 54, 55, 102,
+ 103, 104, 105, 10, 172, 173, 174, 10, 176, 177,
+ 178, 13, 216, 217, 510, 13, 138, 419, 35, 36,
+ 225, 98, 107, 225, 109, 110, 107, 76, 77, 78,
+ 107, 13, 109, 155, 76, 77, 78, 214, 206, 207,
+ 208, 209, 210, 211, 212, 213, 13, 107, 544, 76,
+ 77, 78, 76, 77, 78, 220, 221, 222, 223, 224,
+ 257, 226, 227, 563, 229, 230, 107, 469, 236, 237,
+ 238, 239, 240, 241, 76, 77, 78, 107, 76, 77,
+ 78, 99, 68, 205, 102, 103, 104, 105, 256, 88,
+ 89, 375, 13, 107, 76, 77, 78, 10, 155, 12,
+ 108, 107, 270, 225, 10, 48, 12, 275, 108, 76,
+ 77, 78, 98, 76, 77, 78, 406, 285, 175, 107,
+ 73, 107, 106, 109, 181, 24, 70, 184, 185, 186,
+ 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
+ 197, 198, 199, 200, 201, 108, 314, 315, 106, 11,
+ 11, 356, 70, 321, 356, 76, 77, 78, 12, 21,
+ 22, 23, 98, 25, 26, 76, 77, 78, 21, 76,
+ 77, 78, 21, 107, 342, 343, 344, 345, 375, 41,
+ 42, 43, 44, 76, 77, 78, 26, 355, 472, 508,
+ 358, 359, 357, 80, 24, 57, 58, 108, 74, 11,
+ 322, 108, 61, 62, 523, 524, 106, 476, 24, 12,
+ 479, 376, 78, 106, 483, 484, 535, 107, 76, 77,
+ 78, 110, 110, 391, 110, 347, 545, 546, 110, 110,
+ 61, 19, 501, 502, 356, 94, 21, 99, 406, 558,
+ 99, 109, 511, 102, 103, 104, 105, 76, 77, 78,
+ 108, 416, 107, 81, 106, 420, 107, 526, 76, 77,
+ 78, 530, 531, 94, 61, 62, 431, 11, 99, 131,
+ 438, 102, 103, 104, 105, 472, 138, 106, 446, 548,
+ 76, 77, 78, 42, 43, 44, 45, 11, 106, 11,
+ 49, 11, 51, 562, 91, 92, 93, 94, 11, 106,
+ 21, 570, 99, 107, 106, 102, 103, 104, 105, 477,
+ 478, 488, 108, 490, 106, 106, 0, 76, 77, 78,
+ 106, 108, 499, 76, 77, 78, 10, 106, 12, 13,
+ 495, 61, 62, 106, 76, 77, 78, 74, 395, 10,
+ 10, 509, 510, 11, 106, 108, 10, 106, 525, 76,
+ 77, 78, 108, 107, 106, 108, 106, 72, 42, 43,
+ 44, 45, 108, 93, 94, 49, 108, 51, 108, 99,
+ 54, 233, 102, 103, 104, 105, 544, 61, 62, 106,
+ 106, 106, 559, 71, 441, 108, 76, 77, 78, 107,
+ 74, 20, 76, 77, 78, 106, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 106, 0, 106, 13, 99, 106, 106, 102, 103,
+ 104, 105, 106, 509, 108, 13, 343, 111, 76, 77,
+ 78, 418, 76, 77, 78, 76, 77, 78, 94, 61,
+ 62, 277, 563, 99, 370, 495, 102, 103, 104, 105,
+ 248, 371, 155, 356, 42, 43, 44, 45, 106, 451,
+ 322, 49, 106, 51, 225, 106, 54, 89, 90, 91,
+ 92, 93, 94, 61, 62, 470, -1, 99, -1, -1,
+ 102, 103, 104, 105, -1, -1, 74, -1, 76, 77,
+ 78, -1, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, -1, -1, -1,
+ -1, 99, 0, 1, 102, 103, 104, 105, 106, -1,
+ 108, -1, 10, 111, 12, -1, 14, 15, 16, 17,
+ 18, -1, -1, 21, 22, 23, 24, 25, -1, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 42, 43, 44, -1, -1, -1,
- 48, 49, 50, 51, 52, -1, 54, 55, 56, 57,
- 58, 59, -1, -1, -1, -1, 64, 65, 66, 67,
- 68, 69, 70, -1, -1, -1, -1, -1, -1, -1,
- 78, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 90, 91, -1, 93, -1, 95, 96, -1,
- 1, -1, -1, -1, 102, 103, 104, 105, 9, 10,
- 11, -1, 13, 14, 15, 16, 17, -1, -1, 20,
- 21, 22, 23, 24, -1, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, -1, -1, -1, 48, 49, 50,
- 51, 52, -1, 54, 55, 56, 57, 58, 59, -1,
- -1, -1, -1, 64, 65, 66, 67, 68, 69, 70,
- -1, -1, -1, -1, -1, -1, -1, 78, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 90,
- 91, -1, 93, -1, 95, 96, -1, 1, -1, -1,
- -1, 102, 103, 104, 105, 9, 10, 11, -1, 13,
- 14, 15, 16, 17, -1, -1, 20, 21, 22, 23,
- 24, -1, 26, 27, 28, 29, 30, 31, 32, 33,
+ 38, 39, 40, 41, 42, 43, 44, 45, -1, -1,
+ -1, 49, 50, 51, 52, 53, -1, 55, 56, 57,
+ 58, 59, 60, -1, -1, 63, 64, 65, 66, 67,
+ 68, 69, 3, 4, 5, 6, 7, 8, 9, -1,
+ -1, 79, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 95, 96, -1,
+ 98, -1, 100, 101, 0, 1, -1, -1, -1, 107,
+ 108, 109, 110, -1, 10, -1, 12, -1, 14, 15,
+ 16, 17, 18, -1, -1, 21, 22, 23, 24, 25,
+ -1, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ -1, -1, -1, 49, 50, 51, 52, 53, -1, 55,
+ 56, 57, 58, 59, 60, -1, -1, 63, 64, 65,
+ 66, 67, 68, 69, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 79, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
+ 96, -1, 98, -1, 100, 101, 1, -1, -1, -1,
+ -1, 107, 108, 109, 110, 10, 11, 12, -1, 14,
+ 15, 16, 17, 18, -1, -1, 21, 22, 23, 24,
+ 25, -1, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, -1, -1, -1, 49, 50, 51, 52, 53, -1,
+ 55, 56, 57, 58, 59, 60, -1, -1, 63, 64,
+ 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 79, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 95, 96, -1, 98, -1, 100, 101, 1, -1, -1,
+ -1, -1, 107, 108, 109, 110, 10, 11, 12, -1,
+ 14, 15, 16, 17, 18, -1, -1, 21, 22, 23,
+ 24, 25, -1, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, -1, -1, -1, 48, 49, 50, 51, 52, -1,
- 54, 55, 56, 57, 58, 59, -1, -1, -1, -1,
- 64, 65, 66, 67, 68, 69, 70, -1, -1, -1,
- -1, -1, -1, -1, 78, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 90, 91, -1, 93,
- -1, 95, 96, -1, 1, -1, -1, -1, 102, 103,
- 104, 105, 9, 10, 11, -1, 13, 14, 15, 16,
- 17, -1, -1, 20, 21, 22, 23, 24, -1, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, -1, -1,
- -1, 48, 49, 50, 51, 52, -1, 54, 55, 56,
- 57, 58, 59, -1, -1, -1, -1, 64, 65, 66,
- 67, 68, 69, 70, -1, -1, -1, -1, -1, -1,
- -1, 78, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 90, 91, -1, 93, -1, 95, 96,
- -1, 1, -1, -1, -1, 102, 103, 104, 105, 9,
- -1, 11, -1, 13, 14, 15, 16, 17, -1, -1,
- 20, 21, 22, 23, 24, -1, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, -1, -1, -1, 48, 49,
- 50, 51, 52, -1, 54, 55, 56, 57, 58, 59,
- -1, -1, -1, -1, 64, 65, 66, 67, 68, 69,
- 70, -1, -1, 73, -1, -1, -1, -1, 78, -1,
+ 44, 45, -1, -1, -1, 49, 50, 51, 52, 53,
+ -1, 55, 56, 57, 58, 59, 60, -1, -1, 63,
+ 64, 65, 66, 67, 68, 69, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 79, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 90, 91, -1, 93, -1, 95, 96, -1, 1, -1,
- -1, -1, 102, 103, 104, 105, 9, -1, 11, -1,
- 13, 14, 15, 16, 17, -1, -1, 20, 21, 22,
- 23, 24, -1, 26, 27, 28, 29, 30, 31, 32,
+ -1, 95, 96, -1, 98, -1, 100, 101, 1, -1,
+ -1, -1, -1, 107, 108, 109, 110, 10, 11, 12,
+ -1, 14, 15, 16, 17, 18, -1, -1, 21, 22,
+ 23, 24, 25, -1, 27, 28, 29, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, -1, -1, -1, 48, 49, 50, 51, 52,
- -1, 54, 55, 56, 57, 58, 59, -1, -1, -1,
- -1, 64, 65, 66, 67, 68, 69, 70, -1, -1,
- -1, -1, -1, -1, -1, 78, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 90, 91, -1,
- 93, -1, 95, 96, -1, 1, -1, -1, -1, 102,
- 103, 104, 105, 9, -1, 11, -1, 13, 14, 15,
- 16, 17, -1, -1, 20, 21, 22, 23, 24, -1,
- 26, 27, 28, 29, 30, 31, 32, -1, 34, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, -1,
- -1, -1, 48, 49, 50, 51, 52, -1, 54, 55,
- 56, 57, 58, 59, -1, -1, -1, -1, 64, 65,
- 66, 67, 68, 69, 70, -1, -1, -1, -1, -1,
- -1, -1, 78, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 90, 91, -1, 93, -1, 95,
- 96, 1, -1, -1, -1, -1, 102, 103, 104, 105,
- -1, 11, -1, 13, 14, 15, 16, 17, -1, -1,
- 20, 21, 22, 23, 24, -1, 26, 27, 28, 29,
- 30, 31, -1, -1, -1, -1, -1, 37, 38, -1,
- -1, -1, -1, -1, -1, -1, 60, 61, 62, 63,
- -1, -1, 52, -1, -1, 55, 56, 57, 58, 59,
- -1, -1, -1, -1, 64, 65, 66, 67, 68, 69,
- 70, 85, 86, 87, 88, 89, -1, -1, 78, -1,
- 94, -1, -1, 97, 98, 99, 100, -1, -1, -1,
- 90, 91, -1, 93, -1, 95, 96, 1, -1, -1,
- -1, -1, 102, 103, 104, 105, -1, 11, -1, 13,
- 14, 15, 16, 17, -1, -1, 20, 21, 22, 23,
- 24, -1, 26, 27, 28, 29, 30, 31, -1, -1,
- -1, -1, -1, 37, 38, -1, -1, -1, -1, -1,
- -1, 60, 61, 62, 63, -1, -1, -1, 52, -1,
- -1, 55, 56, 57, 58, 59, -1, -1, -1, -1,
- 64, 65, 66, 67, 68, 69, 70, -1, 87, 88,
- 89, -1, -1, -1, 78, 94, -1, -1, 97, 98,
- 99, 100, -1, -1, -1, -1, 90, 91, -1, 93,
- -1, 95, 96, -1, -1, -1, -1, 101, 102, -1,
- 104, 105, 9, -1, 11, -1, 13, 14, 15, 16,
- 17, -1, -1, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, -1, -1, -1, -1, -1,
- 37, 38, -1, -1, -1, -1, 60, 61, 62, 63,
- -1, -1, -1, -1, -1, 52, -1, -1, 55, 56,
- 57, 58, 59, -1, -1, -1, -1, 64, 65, 66,
- 67, 68, 69, 70, 88, 89, -1, -1, -1, -1,
- 94, 78, -1, 97, 98, 99, 100, -1, -1, -1,
- -1, -1, -1, 90, 91, -1, 93, -1, 95, 96,
- -1, -1, -1, -1, -1, 102, -1, 104, 105, 9,
- -1, 11, -1, 13, 14, 15, 16, 17, -1, -1,
- 20, 21, 22, 23, 24, -1, 26, 27, 28, 29,
- 30, 31, -1, -1, -1, -1, -1, 37, 38, -1,
- -1, -1, -1, 60, 61, 62, 63, -1, -1, -1,
- -1, -1, 52, -1, -1, 55, 56, 57, 58, 59,
- -1, -1, -1, -1, 64, 65, 66, 67, 68, 69,
- 70, 88, 89, -1, -1, -1, -1, 94, 78, -1,
- 97, 98, 99, 100, -1, -1, -1, -1, -1, -1,
- 90, 91, -1, 93, -1, 95, 96, -1, -1, -1,
- -1, -1, 102, -1, 104, 105, 11, 12, 13, 14,
- 15, 16, 17, -1, -1, 20, 21, 22, 23, 24,
- -1, 26, 27, 28, 29, 30, 31, -1, -1, -1,
- -1, -1, 37, 38, -1, -1, -1, -1, 60, -1,
- 62, 63, -1, -1, -1, -1, -1, 52, -1, -1,
- 55, 56, 57, 58, 59, -1, -1, -1, -1, 64,
- 65, 66, 67, 68, 69, 70, 88, 89, -1, -1,
- -1, -1, 94, 78, -1, 97, 98, 99, 100, -1,
- -1, -1, -1, -1, -1, 90, 91, -1, 93, -1,
- 95, 96, -1, -1, -1, -1, -1, 102, -1, 104,
- 105, 11, -1, 13, 14, 15, 16, 17, -1, -1,
- 20, 21, 22, 23, 24, -1, 26, 27, 28, 29,
- 30, 31, -1, -1, -1, -1, -1, 37, 38, 41,
- 42, 43, 44, -1, -1, -1, 48, -1, 50, -1,
- -1, -1, 52, -1, -1, 55, 56, 57, 58, 59,
- -1, -1, -1, -1, 64, 65, 66, 67, 68, 69,
- 70, -1, -1, 75, 76, 77, -1, -1, 78, -1,
+ 43, 44, 45, -1, -1, -1, 49, 50, 51, 52,
+ 53, -1, 55, 56, 57, 58, 59, 60, -1, -1,
+ 63, 64, 65, 66, 67, 68, 69, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 79, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 90, 91, -1, 93, -1, 95, 96, -1, -1, -1,
- -1, -1, 102, 103, 104, 105, 11, -1, 13, 14,
- 15, 16, 17, -1, -1, 20, 21, 22, 23, 24,
- -1, 26, 27, 28, 29, 30, 31, -1, -1, -1,
- -1, -1, 37, 38, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 52, -1, -1,
- 55, 56, 57, 58, 59, -1, -1, -1, -1, 64,
- 65, 66, 67, 68, 69, 70, -1, -1, -1, -1,
- -1, -1, -1, 78, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 90, 91, -1, 93, -1,
- 95, 96, -1, -1, -1, -1, 101, 102, -1, 104,
- 105, 11, -1, 13, 14, 15, 16, 17, -1, -1,
- 20, 21, 22, 23, 24, -1, 26, 27, 28, 29,
- 30, 31, -1, -1, -1, -1, -1, 37, 38, -1,
+ -1, -1, 95, 96, -1, 98, -1, 100, 101, 1,
+ -1, -1, -1, -1, 107, 108, 109, 110, 10, 11,
+ 12, -1, 14, 15, 16, 17, 18, -1, -1, 21,
+ 22, 23, 24, 25, -1, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, -1, -1, -1, 49, 50, 51,
+ 52, 53, -1, 55, 56, 57, 58, 59, 60, -1,
+ -1, 63, 64, 65, 66, 67, 68, 69, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 79, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 52, -1, -1, 55, 56, 57, 58, 59,
- -1, -1, -1, -1, 64, 65, 66, 67, 68, 69,
- 70, -1, -1, -1, -1, -1, -1, -1, 78, -1,
+ -1, -1, -1, 95, 96, -1, 98, -1, 100, 101,
+ 1, -1, -1, -1, -1, 107, 108, 109, 110, 10,
+ 11, 12, -1, 14, 15, 16, 17, 18, -1, -1,
+ 21, 22, 23, 24, 25, -1, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, -1, -1, -1, 49, 50,
+ 51, 52, 53, -1, 55, 56, 57, 58, 59, 60,
+ -1, -1, 63, 64, 65, 66, 67, 68, 69, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 79, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 90, 91, -1, 93, -1, 95, 96, -1, -1, -1,
- -1, 101, 102, -1, 104, 105, 11, -1, 13, 14,
- 15, 16, 17, -1, -1, 20, 21, 22, 23, 24,
- -1, 26, 27, 28, 29, 30, 31, -1, -1, -1,
- -1, -1, 37, 38, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 52, -1, -1,
- 55, 56, 57, 58, 59, -1, -1, -1, -1, 64,
- 65, 66, 67, 68, 69, 70, -1, -1, -1, -1,
- -1, -1, -1, 78, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 90, 91, -1, 93, -1,
- 95, 96, -1, -1, -1, -1, 101, 102, -1, 104,
- 105, 11, -1, 13, 14, 15, 16, 17, -1, -1,
- 20, 21, 22, 23, 24, -1, 26, 27, 28, 29,
- 30, 31, -1, -1, -1, -1, -1, 37, 38, -1,
+ -1, -1, -1, -1, 95, 96, -1, 98, -1, 100,
+ 101, 1, -1, -1, -1, -1, 107, 108, 109, 110,
+ 10, -1, 12, -1, 14, 15, 16, 17, 18, -1,
+ -1, 21, 22, 23, 24, 25, -1, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, -1, -1, -1, 49,
+ 50, 51, 52, 53, -1, 55, 56, 57, 58, 59,
+ 60, -1, -1, 63, 64, 65, 66, 67, 68, 69,
+ -1, -1, 72, -1, -1, -1, -1, -1, -1, 79,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 95, 96, -1, 98, -1,
+ 100, 101, 1, -1, -1, -1, -1, 107, 108, 109,
+ 110, 10, -1, 12, -1, 14, 15, 16, 17, 18,
+ -1, -1, 21, 22, 23, 24, 25, -1, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, -1, -1, -1,
+ 49, 50, 51, 52, 53, -1, 55, 56, 57, 58,
+ 59, 60, -1, -1, 63, 64, 65, 66, 67, 68,
+ 69, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 79, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 95, 96, -1, 98,
+ -1, 100, 101, 1, -1, -1, -1, -1, 107, 108,
+ 109, 110, 10, -1, 12, -1, 14, 15, 16, 17,
+ 18, -1, -1, 21, 22, 23, 24, 25, -1, 27,
+ 28, 29, 30, 31, 32, 33, -1, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, -1, -1,
+ -1, 49, 50, 51, 52, 53, -1, 55, 56, 57,
+ 58, 59, 60, -1, -1, 63, 64, 65, 66, 67,
+ 68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 79, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 95, 96, -1,
+ 98, -1, 100, 101, 1, -1, -1, -1, -1, 107,
+ 108, 109, 110, -1, -1, 12, -1, 14, 15, 16,
+ 17, 18, -1, -1, 21, 22, 23, 24, 25, -1,
+ 27, 28, 29, 30, 31, 32, -1, -1, -1, -1,
+ -1, 38, 39, -1, -1, -1, -1, -1, 61, 62,
+ -1, -1, -1, -1, -1, -1, 53, -1, -1, 56,
+ 57, 58, 59, 60, -1, -1, 63, 64, 65, 66,
+ 67, 68, 69, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 79, -1, -1, -1, 99, -1, -1, 102,
+ 103, 104, 105, -1, -1, -1, -1, -1, 95, 96,
+ -1, 98, -1, 100, 101, 1, -1, -1, -1, -1,
+ 107, 108, 109, 110, -1, -1, 12, -1, 14, 15,
+ 16, 17, 18, -1, -1, 21, 22, 23, 24, 25,
+ -1, 27, 28, 29, 30, 31, 32, -1, -1, -1,
+ -1, -1, 38, 39, -1, -1, -1, -1, 61, 62,
+ -1, -1, -1, -1, -1, -1, -1, 53, -1, -1,
+ 56, 57, 58, 59, 60, -1, -1, 63, 64, 65,
+ 66, 67, 68, 69, 87, 88, 89, 90, 91, 92,
+ 93, 94, -1, 79, -1, -1, 99, -1, -1, 102,
+ 103, 104, 105, -1, -1, -1, -1, -1, -1, 95,
+ 96, -1, 98, -1, 100, 101, -1, -1, -1, -1,
+ 106, 107, -1, 109, 110, 10, -1, 12, -1, 14,
+ 15, 16, 17, 18, -1, -1, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, -1, -1,
+ -1, -1, -1, 38, 39, -1, -1, -1, 61, 62,
+ -1, -1, -1, -1, -1, -1, -1, -1, 53, -1,
+ -1, 56, 57, 58, 59, 60, -1, -1, 63, 64,
+ 65, 66, 67, 68, 69, 88, 89, 90, 91, 92,
+ 93, 94, -1, -1, 79, -1, 99, -1, -1, 102,
+ 103, 104, 105, -1, -1, -1, -1, -1, -1, -1,
+ 95, 96, -1, 98, -1, 100, 101, -1, -1, -1,
+ -1, -1, 107, -1, 109, 110, 10, -1, 12, -1,
+ 14, 15, 16, 17, 18, -1, -1, 21, 22, 23,
+ 24, 25, -1, 27, 28, 29, 30, 31, 32, -1,
+ -1, -1, -1, -1, 38, 39, 42, 43, 44, 45,
+ -1, -1, -1, 49, -1, 51, -1, -1, -1, 53,
+ -1, -1, 56, 57, 58, 59, 60, -1, -1, 63,
+ 64, 65, 66, 67, 68, 69, -1, -1, -1, -1,
+ 76, 77, 78, -1, -1, 79, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 95, 96, -1, 98, -1, 100, 101, -1, -1,
+ -1, -1, -1, 107, -1, 109, 110, 12, 13, 14,
+ 15, 16, 17, 18, -1, -1, 21, 22, 23, 24,
+ 25, -1, 27, 28, 29, 30, 31, 32, -1, -1,
+ -1, -1, -1, 38, 39, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 53, -1,
+ -1, 56, 57, 58, 59, 60, -1, -1, 63, 64,
+ 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 79, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 95, 96, -1, 98, -1, 100, 101, -1, -1, -1,
+ -1, -1, 107, -1, 109, 110, 12, -1, 14, 15,
+ 16, 17, 18, -1, -1, 21, 22, 23, 24, 25,
+ -1, 27, 28, 29, 30, 31, 32, -1, -1, -1,
+ -1, -1, 38, 39, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 53, -1, -1,
+ 56, 57, 58, 59, 60, -1, -1, 63, 64, 65,
+ 66, 67, 68, 69, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 79, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
+ 96, -1, 98, -1, 100, 101, -1, -1, -1, -1,
+ -1, 107, 108, 109, 110, 12, -1, 14, 15, 16,
+ 17, 18, -1, -1, 21, 22, 23, 24, 25, -1,
+ 27, 28, 29, 30, 31, 32, -1, -1, -1, -1,
+ -1, 38, 39, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 53, -1, -1, 56,
+ 57, 58, 59, 60, -1, -1, 63, 64, 65, 66,
+ 67, 68, 69, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 79, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 95, 96,
+ -1, 98, -1, 100, 101, -1, -1, -1, -1, 106,
+ 107, -1, 109, 110, 12, -1, 14, 15, 16, 17,
+ 18, -1, -1, 21, 22, 23, 24, 25, -1, 27,
+ 28, 29, 30, 31, 32, -1, -1, -1, -1, -1,
+ 38, 39, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 53, -1, -1, 56, 57,
+ 58, 59, 60, -1, -1, 63, 64, 65, 66, 67,
+ 68, 69, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 79, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 95, 96, -1,
+ 98, -1, 100, 101, -1, -1, -1, -1, 106, 107,
+ -1, 109, 110, 12, -1, 14, 15, 16, 17, 18,
+ -1, -1, 21, 22, 23, 24, 25, -1, 27, 28,
+ 29, 30, 31, 32, -1, -1, -1, -1, -1, 38,
+ 39, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 53, -1, -1, 56, 57, 58,
+ 59, 60, -1, -1, 63, 64, 65, 66, 67, 68,
+ 69, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 79, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 95, 96, -1, 98,
+ -1, 100, 101, -1, -1, -1, -1, 106, 107, -1,
+ 109, 110, 12, -1, 14, 15, 16, 17, 18, -1,
+ -1, 21, 22, 23, 24, 25, -1, 27, 28, 29,
+ 30, 31, 32, -1, -1, -1, -1, -1, 38, 39,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 53, -1, -1, 56, 57, 58, 59,
+ 60, -1, -1, 63, 64, 65, 66, 67, 68, 69,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 79,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 95, 96, -1, 98, -1,
+ 100, 101, -1, -1, -1, -1, 106, 107, -1, 109,
+ 110, 12, -1, 14, 15, 16, 17, 18, -1, -1,
+ 21, 22, 23, 24, 25, -1, 27, 28, 29, 30,
+ 31, 32, -1, -1, -1, -1, -1, 38, 39, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 53, -1, -1, 56, 57, 58, 59, 60,
+ -1, -1, 63, 64, 65, 66, 67, 68, 69, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 79, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 95, 96, -1, 98, -1, 100,
+ 101, -1, -1, -1, -1, 106, 107, -1, 109, 110,
+ 12, -1, 14, 15, 16, 17, 18, -1, -1, 21,
+ 22, 23, 24, 25, -1, 27, 28, 29, 30, 31,
+ 32, -1, -1, -1, -1, -1, 38, 39, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 52, -1, -1, 55, 56, 57, 58, 59,
- -1, -1, -1, -1, 64, 65, 66, 67, 68, 69,
- 70, -1, -1, -1, -1, -1, -1, -1, 78, -1,
+ -1, 53, -1, -1, 56, 57, 58, 59, 60, -1,
+ -1, 63, 64, 65, 66, 67, 68, 69, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 79, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 90, 91, -1, 93, -1, 95, 96, -1, -1, -1,
- -1, 101, 102, -1, 104, 105, 11, -1, 13, 14,
- 15, 16, 17, -1, -1, 20, 21, 22, 23, 24,
- -1, 26, 27, 28, 29, 30, 31, -1, -1, -1,
- -1, -1, 37, 38, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 52, -1, -1,
- 55, 56, 57, 58, 59, -1, -1, -1, -1, 64,
- 65, 66, 67, 68, 69, 70, -1, -1, -1, -1,
- -1, -1, -1, 78, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 90, 91, -1, 93, -1,
- 95, 96, -1, -1, -1, -1, 101, 102, -1, 104,
- 105, 11, -1, 13, 14, 15, 16, 17, -1, -1,
- 20, 21, 22, 23, 24, -1, 26, 27, 28, 29,
- 30, 31, -1, -1, -1, -1, -1, 37, 38, -1,
+ -1, -1, -1, 95, 96, -1, 98, -1, 100, 101,
+ -1, -1, -1, -1, 106, 107, -1, 109, 110, 12,
+ -1, 14, 15, 16, 17, 18, -1, -1, 21, 22,
+ 23, 24, 25, -1, 27, 28, 29, 30, 31, 32,
+ -1, -1, -1, -1, -1, 38, 39, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 52, -1, -1, 55, 56, 57, 58, 59,
- -1, -1, -1, -1, 64, 65, 66, 67, 68, 69,
- 70, -1, -1, -1, -1, -1, -1, -1, 78, -1,
+ 53, -1, -1, 56, 57, 58, 59, 60, -1, -1,
+ 63, 64, 65, 66, 67, 68, 69, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 79, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 90, 91, -1, 93, -1, 95, 96, -1, -1, -1,
- -1, 101, 102, -1, 104, 105, 11, -1, 13, 14,
- 15, 16, 17, -1, -1, 20, 21, 22, 23, 24,
- -1, 26, 27, 28, 29, 30, 31, -1, -1, -1,
- -1, -1, 37, 38, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 52, -1, -1,
- 55, 56, 57, 58, 59, -1, -1, -1, -1, 64,
- 65, 66, 67, 68, 69, 70, -1, -1, -1, -1,
- -1, -1, -1, 78, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 90, 91, -1, 93, -1,
- 95, 96, -1, -1, -1, -1, 101, 102, -1, 104,
- 105, 11, -1, 13, 14, 15, 16, 17, -1, -1,
- 20, 21, 22, 23, 24, -1, 26, 27, 28, 29,
- 30, 31, -1, -1, -1, -1, -1, 37, 38, -1,
+ -1, -1, 95, 96, -1, 98, -1, 100, 101, -1,
+ -1, -1, -1, 106, 107, -1, 109, 110, 12, -1,
+ 14, 15, 16, 17, 18, -1, -1, 21, 22, 23,
+ 24, 25, -1, 27, 28, 29, 30, 31, 32, -1,
+ -1, -1, -1, -1, 38, 39, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 53,
+ -1, -1, 56, 57, 58, 59, 60, -1, -1, 63,
+ 64, 65, 66, 67, 68, 69, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 79, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 52, -1, -1, 55, 56, 57, 58, 59,
- -1, -1, -1, -1, 64, 65, 66, 67, 68, 69,
- 70, -1, -1, -1, -1, -1, -1, -1, 78, -1,
+ -1, 95, 96, -1, 98, -1, 100, 101, -1, -1,
+ -1, -1, -1, 107, -1, 109, 110, 12, -1, 14,
+ 15, 16, 17, 18, -1, -1, 21, 22, 23, 24,
+ 25, -1, 27, 28, 29, 30, 31, 32, -1, -1,
+ -1, -1, -1, 38, 39, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 53, -1,
+ -1, 56, 57, 58, 59, 60, -1, -1, 63, 64,
+ 65, 66, 67, 68, 69, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 79, -1, -1, -1, -1, 54,
+ -1, -1, -1, -1, -1, -1, 61, 62, -1, -1,
+ 95, 96, -1, 98, -1, 100, 101, -1, -1, -1,
+ -1, -1, 107, -1, 109, 110, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+ -1, -1, -1, -1, 99, 54, -1, 102, 103, 104,
+ 105, -1, 61, 62, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 90, 91, -1, 93, -1, 95, 96, -1, -1, -1,
- -1, -1, 102, -1, 104, 105, 11, -1, 13, 14,
- 15, 16, 17, -1, -1, 20, 21, 22, 23, 24,
- -1, 26, 27, 28, 29, 30, 31, -1, -1, -1,
- -1, -1, 37, 38, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 52, -1, -1,
- 55, 56, 57, 58, 59, -1, -1, -1, -1, 64,
- 65, 66, 67, 68, 69, 70, -1, -1, -1, -1,
- -1, -1, -1, 78, 53, -1, -1, -1, -1, -1,
- -1, 60, 61, 62, 63, 90, 91, -1, 93, -1,
- 95, 96, -1, -1, -1, -1, -1, 102, -1, 104,
- 105, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, -1, -1, -1, -1, 94, 53, -1, 97, 98,
- 99, 100, -1, 60, 61, 62, 63, -1, -1, -1,
+ -1, -1, 81, 82, -1, 84, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, -1, -1, -1, -1,
+ 99, 54, -1, 102, 103, 104, 105, -1, 61, 62,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 80, 81, -1, 83, 84, 85, 86,
- 87, 88, 89, -1, -1, -1, -1, 94, 53, -1,
- 97, 98, 99, 100, -1, 60, 61, 62, 63, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 82,
+ -1, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, -1, -1, -1, -1, 99, 54, -1, 102,
+ 103, 104, 105, -1, 61, 62, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 81, -1, 83, 84,
- 85, 86, 87, 88, 89, -1, -1, -1, -1, 94,
- -1, -1, 97, 98, 99, 100
+ -1, -1, -1, -1, -1, -1, -1, 84, 85, 86,
+ 87, 88, 89, 90, 91, 92, 93, 94, -1, -1,
+ -1, -1, 99, -1, -1, 102, 103, 104, 105
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 3, 4, 5, 6, 7, 8, 108, 109, 110,
- 111, 112, 113, 114, 0, 117, 11, 13, 14, 15,
- 16, 17, 20, 21, 22, 23, 24, 26, 27, 28,
- 29, 30, 31, 37, 38, 52, 55, 56, 57, 58,
- 59, 64, 65, 66, 67, 68, 69, 70, 78, 90,
- 91, 93, 95, 96, 102, 104, 105, 166, 167, 168,
- 171, 172, 173, 174, 175, 176, 178, 181, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 9, 115, 1,
- 32, 34, 35, 36, 39, 40, 41, 42, 43, 44,
- 48, 49, 50, 51, 54, 103, 115, 124, 134, 166,
- 33, 122, 123, 124, 120, 120, 12, 166, 176, 176,
- 20, 25, 115, 188, 196, 196, 196, 196, 196, 177,
- 11, 102, 176, 145, 145, 145, 176, 102, 102, 102,
- 115, 176, 20, 167, 180, 188, 196, 196, 115, 176,
- 103, 166, 20, 25, 147, 176, 93, 102, 179, 188,
- 189, 190, 176, 167, 176, 176, 176, 176, 176, 101,
- 166, 196, 196, 75, 76, 77, 79, 9, 11, 102,
- 53, 60, 61, 62, 63, 80, 81, 83, 84, 85,
- 86, 87, 88, 89, 94, 97, 98, 99, 100, 102,
- 9, 11, 9, 11, 9, 11, 9, 117, 146, 147,
- 147, 20, 144, 102, 102, 102, 102, 69, 93, 102,
- 186, 188, 102, 102, 115, 103, 47, 136, 103, 41,
- 42, 43, 44, 48, 50, 123, 124, 122, 12, 180,
- 102, 102, 166, 101, 115, 23, 148, 71, 149, 101,
- 101, 166, 181, 196, 167, 10, 103, 180, 102, 176,
- 179, 188, 189, 190, 101, 166, 71, 150, 11, 101,
- 166, 166, 166, 176, 166, 166, 101, 166, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 9, 11, 15, 16, 17, 21, 64,
- 102, 104, 105, 170, 188, 101, 166, 166, 166, 166,
- 166, 166, 166, 166, 120, 20, 143, 144, 144, 20,
- 127, 117, 117, 117, 117, 93, 117, 69, 184, 185,
- 187, 188, 189, 190, 117, 117, 102, 117, 117, 115,
- 166, 140, 166, 166, 166, 166, 166, 181, 167, 12,
- 169, 149, 23, 117, 165, 101, 101, 166, 10, 101,
- 166, 150, 101, 23, 166, 11, 103, 12, 101, 82,
- 166, 166, 105, 105, 105, 105, 101, 166, 105, 105,
- 102, 101, 103, 12, 103, 12, 103, 12, 103, 10,
- 18, 116, 125, 126, 9, 103, 20, 139, 166, 140,
- 141, 166, 141, 183, 188, 102, 134, 138, 141, 142,
- 166, 184, 117, 141, 141, 101, 106, 182, 180, 117,
- 163, 102, 159, 160, 101, 101, 12, 166, 10, 176,
- 103, 12, 101, 181, 10, 10, 10, 10, 117, 148,
- 149, 117, 20, 101, 101, 101, 101, 102, 117, 101,
- 103, 130, 141, 101, 101, 166, 101, 9, 161, 9,
- 12, 10, 101, 103, 149, 103, 164, 165, 131, 180,
- 137, 137, 9, 118, 118, 141, 141, 118, 128, 102,
- 101, 118, 118, 120, 15, 16, 104, 152, 153, 155,
- 156, 157, 158, 120, 73, 103, 162, 163, 120, 103,
- 118, 118, 119, 45, 46, 135, 135, 101, 101, 136,
- 139, 141, 118, 10, 25, 151, 151, 79, 101, 10,
- 121, 10, 136, 136, 120, 118, 102, 118, 118, 103,
- 101, 136, 80, 154, 154, 156, 23, 103, 132, 10,
- 141, 136, 136, 129, 118, 176, 72, 133, 19, 101,
- 137, 136, 120, 118, 142, 73, 135, 101, 118
+ 0, 3, 4, 5, 6, 7, 8, 9, 113, 114,
+ 115, 116, 117, 118, 119, 120, 0, 123, 12, 14,
+ 15, 16, 17, 18, 21, 22, 23, 24, 25, 27,
+ 28, 29, 30, 31, 32, 38, 39, 53, 56, 57,
+ 58, 59, 60, 63, 64, 65, 66, 67, 68, 69,
+ 79, 95, 96, 98, 100, 101, 107, 109, 110, 173,
+ 174, 175, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 189, 192, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 10, 121, 1, 33, 35, 36, 37,
+ 40, 41, 42, 43, 44, 45, 49, 50, 51, 52,
+ 55, 108, 121, 130, 140, 173, 34, 128, 129, 130,
+ 126, 167, 168, 126, 13, 173, 187, 187, 21, 26,
+ 121, 199, 207, 207, 207, 207, 207, 188, 12, 107,
+ 187, 151, 151, 151, 187, 107, 107, 73, 107, 121,
+ 187, 21, 174, 191, 199, 207, 207, 121, 187, 108,
+ 173, 21, 26, 153, 187, 98, 107, 190, 199, 200,
+ 201, 187, 174, 187, 187, 187, 187, 187, 106, 173,
+ 207, 207, 76, 77, 78, 80, 10, 12, 107, 91,
+ 92, 91, 89, 90, 89, 54, 61, 62, 81, 82,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 99, 102, 103, 104, 105, 107, 10, 12, 10,
+ 12, 10, 12, 10, 123, 152, 153, 153, 21, 150,
+ 107, 107, 107, 107, 68, 98, 107, 197, 199, 107,
+ 107, 121, 108, 48, 142, 108, 42, 43, 44, 45,
+ 49, 51, 129, 130, 128, 16, 17, 109, 158, 159,
+ 161, 162, 163, 164, 13, 191, 107, 73, 173, 106,
+ 121, 24, 154, 70, 155, 106, 106, 173, 192, 192,
+ 207, 174, 11, 108, 191, 107, 187, 190, 199, 200,
+ 201, 106, 173, 70, 156, 12, 106, 173, 173, 173,
+ 187, 173, 173, 106, 173, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 10, 12, 16, 17, 18, 22,
+ 63, 107, 109, 110, 177, 199, 106, 173, 173, 173,
+ 173, 173, 173, 173, 173, 126, 21, 149, 150, 150,
+ 21, 133, 123, 123, 123, 123, 98, 123, 68, 195,
+ 196, 198, 199, 200, 201, 123, 123, 107, 123, 123,
+ 121, 173, 146, 173, 173, 173, 173, 173, 26, 157,
+ 157, 80, 192, 174, 13, 176, 155, 24, 123, 172,
+ 106, 74, 106, 173, 11, 106, 173, 156, 106, 24,
+ 173, 12, 108, 13, 106, 83, 173, 173, 110, 110,
+ 110, 110, 106, 173, 110, 110, 107, 106, 108, 13,
+ 108, 13, 108, 13, 108, 11, 19, 122, 131, 132,
+ 10, 108, 21, 145, 173, 146, 147, 173, 147, 194,
+ 199, 107, 140, 144, 147, 148, 173, 195, 123, 147,
+ 147, 81, 160, 160, 162, 106, 111, 193, 191, 123,
+ 170, 107, 165, 166, 106, 106, 13, 173, 11, 187,
+ 108, 13, 106, 192, 11, 11, 11, 11, 123, 154,
+ 155, 123, 21, 106, 106, 106, 106, 107, 123, 106,
+ 108, 136, 147, 106, 106, 187, 173, 74, 10, 167,
+ 10, 13, 11, 106, 108, 155, 108, 171, 172, 137,
+ 191, 143, 143, 10, 124, 124, 147, 147, 124, 134,
+ 107, 106, 124, 124, 126, 106, 126, 72, 108, 169,
+ 170, 126, 108, 124, 124, 125, 46, 47, 141, 141,
+ 106, 106, 142, 145, 147, 124, 11, 11, 127, 11,
+ 142, 142, 126, 124, 107, 124, 124, 108, 106, 142,
+ 24, 108, 138, 11, 147, 142, 142, 135, 124, 71,
+ 139, 20, 106, 143, 142, 126, 124, 148, 72, 141,
+ 106, 124
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 107, 109, 108, 110, 108, 111, 108, 112, 108,
- 113, 108, 114, 108, 115, 116, 117, 118, 119, 120,
- 120, 121, 121, 122, 122, 123, 123, 124, 124, 125,
- 124, 126, 124, 124, 127, 124, 124, 124, 124, 124,
- 124, 124, 124, 128, 129, 124, 124, 124, 130, 124,
- 124, 124, 124, 131, 124, 124, 124, 124, 132, 133,
- 133, 134, 134, 134, 134, 134, 134, 134, 134, 135,
- 135, 135, 136, 136, 137, 138, 138, 139, 139, 140,
- 141, 142, 143, 143, 144, 145, 146, 147, 147, 148,
- 148, 149, 149, 149, 150, 150, 151, 151, 152, 152,
- 153, 154, 154, 154, 155, 156, 156, 157, 157, 157,
- 158, 158, 159, 159, 161, 160, 162, 162, 163, 164,
- 164, 165, 166, 166, 166, 166, 167, 167, 167, 168,
- 168, 168, 168, 168, 168, 168, 168, 169, 168, 170,
- 170, 171, 171, 171, 171, 171, 171, 171, 171, 171,
- 171, 171, 171, 171, 171, 172, 172, 172, 172, 172,
- 172, 172, 172, 172, 172, 172, 172, 172, 172, 173,
- 173, 173, 173, 173, 173, 173, 173, 173, 174, 174,
- 174, 174, 174, 174, 175, 175, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
- 176, 176, 176, 176, 176, 177, 176, 176, 176, 176,
- 178, 178, 178, 179, 179, 179, 179, 179, 180, 180,
- 181, 181, 182, 182, 183, 184, 184, 184, 185, 185,
- 186, 186, 187, 188, 189, 190, 191, 191, 192, 193,
- 193, 194, 194, 195, 195, 196, 196, 196, 196
+ 0, 112, 114, 113, 115, 113, 116, 113, 117, 113,
+ 118, 113, 119, 113, 120, 113, 121, 122, 123, 124,
+ 125, 126, 126, 127, 127, 128, 128, 129, 129, 130,
+ 130, 131, 130, 132, 130, 130, 133, 130, 130, 130,
+ 130, 130, 130, 130, 130, 134, 135, 130, 130, 130,
+ 136, 130, 130, 130, 130, 137, 130, 130, 130, 130,
+ 138, 139, 139, 140, 140, 140, 140, 140, 140, 140,
+ 140, 141, 141, 141, 142, 142, 143, 144, 144, 145,
+ 145, 146, 147, 148, 149, 149, 150, 151, 152, 153,
+ 153, 154, 154, 155, 155, 155, 156, 156, 157, 157,
+ 158, 158, 159, 160, 160, 160, 161, 162, 162, 163,
+ 163, 163, 164, 164, 165, 165, 166, 168, 167, 169,
+ 169, 170, 171, 171, 172, 173, 173, 173, 173, 174,
+ 174, 174, 175, 175, 175, 175, 175, 175, 175, 175,
+ 175, 176, 175, 177, 177, 178, 178, 178, 178, 178,
+ 178, 178, 178, 178, 178, 178, 178, 178, 178, 179,
+ 179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
+ 179, 179, 179, 180, 180, 180, 180, 181, 181, 182,
+ 182, 182, 182, 183, 183, 184, 184, 184, 184, 184,
+ 184, 184, 184, 184, 185, 185, 185, 185, 185, 185,
+ 186, 186, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 188, 187, 187, 187, 187, 189, 189, 189, 190,
+ 190, 190, 190, 190, 191, 191, 192, 192, 193, 193,
+ 194, 195, 195, 195, 196, 196, 197, 197, 198, 199,
+ 200, 201, 202, 202, 203, 204, 204, 205, 205, 206,
+ 206, 207, 207, 207, 207
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
0, 2, 0, 4, 0, 3, 0, 3, 0, 3,
- 0, 3, 0, 3, 4, 7, 0, 4, 0, 0,
- 2, 0, 2, 1, 1, 2, 2, 1, 4, 0,
- 7, 0, 6, 4, 0, 7, 7, 7, 6, 6,
- 2, 8, 8, 0, 0, 13, 9, 8, 0, 10,
- 9, 7, 2, 0, 8, 2, 2, 1, 2, 0,
- 3, 1, 1, 3, 3, 3, 3, 3, 3, 0,
- 2, 6, 0, 2, 0, 0, 1, 0, 1, 1,
- 1, 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 0, 2, 1, 2, 1, 0, 1, 1, 1,
- 3, 0, 1, 2, 3, 1, 1, 2, 3, 1,
- 0, 1, 0, 1, 0, 4, 1, 1, 4, 1,
- 1, 5, 3, 3, 3, 1, 2, 3, 1, 3,
- 5, 6, 3, 3, 5, 2, 4, 0, 5, 1,
- 1, 5, 4, 5, 4, 5, 6, 5, 4, 5,
- 4, 3, 6, 4, 5, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 3, 2,
- 4, 3, 5, 4, 2, 2, 1, 1, 1, 1,
- 5, 2, 3, 1, 2, 3, 1, 2, 1, 1,
- 1, 1, 1, 1, 4, 4, 5, 5, 1, 1,
- 3, 4, 3, 4, 4, 4, 4, 4, 1, 2,
- 2, 1, 2, 2, 1, 2, 1, 2, 1, 3,
- 1, 3, 1, 3, 4, 0, 6, 1, 1, 1,
- 3, 2, 4, 3, 2, 1, 1, 1, 0, 1,
- 0, 1, 0, 2, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 4, 2, 1,
- 3, 1, 3, 1, 3, 1, 1, 1, 1
+ 0, 3, 0, 3, 0, 3, 4, 7, 0, 4,
+ 0, 0, 2, 0, 2, 1, 1, 2, 2, 1,
+ 4, 0, 7, 0, 6, 4, 0, 7, 7, 7,
+ 6, 6, 2, 8, 8, 0, 0, 13, 9, 8,
+ 0, 10, 9, 7, 2, 0, 8, 2, 2, 1,
+ 2, 0, 3, 1, 1, 3, 3, 3, 3, 3,
+ 3, 0, 2, 6, 0, 2, 0, 0, 1, 0,
+ 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
+ 1, 0, 1, 0, 2, 1, 2, 1, 0, 1,
+ 1, 1, 3, 0, 1, 2, 3, 1, 1, 2,
+ 3, 1, 0, 1, 0, 1, 3, 0, 2, 1,
+ 1, 4, 1, 1, 5, 3, 3, 3, 1, 2,
+ 3, 1, 3, 5, 6, 3, 3, 5, 2, 4,
+ 4, 0, 5, 1, 1, 5, 4, 5, 4, 5,
+ 6, 5, 4, 5, 4, 3, 6, 4, 5, 3,
+ 3, 3, 3, 3, 1, 1, 3, 3, 3, 3,
+ 3, 3, 3, 1, 3, 2, 2, 3, 3, 1,
+ 3, 2, 2, 3, 3, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 3, 2, 4, 3, 5, 4,
+ 2, 2, 1, 1, 1, 1, 5, 2, 3, 1,
+ 2, 3, 1, 2, 1, 1, 1, 1, 1, 1,
+ 4, 4, 5, 5, 1, 1, 3, 4, 3, 4,
+ 4, 4, 4, 4, 1, 2, 2, 1, 2, 2,
+ 1, 2, 1, 2, 1, 3, 1, 3, 1, 3,
+ 4, 0, 6, 1, 1, 1, 3, 2, 4, 3,
+ 2, 1, 1, 1, 0, 1, 0, 1, 0, 2,
+ 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
+ 2, 2, 2, 4, 2, 1, 3, 1, 3, 1,
+ 3, 1, 1, 1, 1
};
typedef enum {
@@ -1098,19 +1155,20 @@ typedef enum {
static const toketypes yy_type_tab[] =
{
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
- toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
- toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
- toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
+ toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival,
toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval,
toketype_opval, toketype_ival, toketype_opval, toketype_ival, toketype_opval, toketype_opval,
@@ -1120,16 +1178,17 @@ static const toketypes yy_type_tab[] =
toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval,
toketype_opval, toketype_opval, toketype_opval, toketype_ival,
toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval,
- toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival,
- toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
- toketype_opval, toketype_opval
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval,
+ toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval
};
/* Generated from:
- * 7aa97cfabf5b87a95ed263373e76c7af6d7e075e83d12e84ccdca9690c15a68d perly.y
- * b6fae5748f9bef6db4740aa5e122b84ac5181852d42474d0ecad621fa4253306 regen_perly.pl
+ * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y
+ * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl
* ex: set ro: */
diff --git a/gnu/usr.bin/perl/perly.y b/gnu/usr.bin/perl/perly.y
index 1170df80f2a..191341fbec6 100644
--- a/gnu/usr.bin/perl/perly.y
+++ b/gnu/usr.bin/perl/perly.y
@@ -20,7 +20,7 @@
* to run regen_perly.pl, which re-creates the files perly.h, perly.tab
* and perly.act which are derived from this.
*
- * The main job of of this grammar is to call the various newFOO()
+ * The main job of this grammar is to call the various newFOO()
* functions in op.c to build a syntax tree of OP structs.
* It relies on the lexer in toke.c to do the tokenizing.
*
@@ -43,7 +43,7 @@
GV *gvval;
}
-%token <ival> GRAMPROG GRAMEXPR GRAMBLOCK GRAMBARESTMT GRAMFULLSTMT GRAMSTMTSEQ
+%token <ival> GRAMPROG GRAMEXPR GRAMBLOCK GRAMBARESTMT GRAMFULLSTMT GRAMSTMTSEQ GRAMSUBSIGNATURE
%token <ival> '{' '}' '[' ']' '-' '+' '@' '%' '&' '=' '.'
@@ -56,10 +56,11 @@
%token <ival> GIVEN WHEN DEFAULT
%token <ival> LOOPEX DOTDOT YADAYADA
%token <ival> FUNC0 FUNC1 FUNC UNIOP LSTOP
-%token <ival> RELOP EQOP MULOP ADDOP
+%token <ival> MULOP ADDOP
%token <ival> DOLSHARP DO HASHBRACK NOAMP
%token <ival> LOCAL MY REQUIRE
%token <ival> COLONATTR FORMLBRACK FORMRBRACK
+%token <ival> SUBLEXSTART SUBLEXEND
%type <ival> grammar remember mremember
%type <ival> startsub startanonsub startformsub
@@ -75,9 +76,10 @@
%type <opval> refgen_topic formblock
%type <opval> subattrlist myattrlist myattrterm myterm
%type <opval> termbinop termunop anonymous termdo
+%type <opval> termrelop relopchain termeqop eqopchain
%type <ival> sigslurpsigil
%type <opval> sigvarname sigdefault sigscalarelem sigslurpelem
-%type <opval> sigelem siglist siglistornull subsignature optsubsignature
+%type <opval> sigelem siglist siglistornull subsigguts subsignature optsubsignature
%type <opval> subbody optsubbody sigsubbody optsigsubbody
%type <opval> formstmtseq formline formarg
@@ -96,8 +98,8 @@
%left <ival> ANDAND
%left <ival> BITOROP
%left <ival> BITANDOP
-%nonassoc EQOP
-%nonassoc RELOP
+%left <ival> CHEQOP NCEQOP
+%left <ival> CHRELOP NCRELOP
%nonassoc UNIOP UNIOPSUB
%nonassoc REQUIRE
%left <ival> SHIFTOP
@@ -185,6 +187,16 @@ grammar : GRAMPROG
PL_eval_root = $3;
$$ = 0;
}
+ | GRAMSUBSIGNATURE
+ {
+ parser->expect = XSTATE;
+ $<ival>$ = 0;
+ }
+ subsigguts
+ {
+ PL_eval_root = $3;
+ $$ = 0;
+ }
;
/* An ordinary block */
@@ -762,7 +774,10 @@ optsubsignature: /* NULL */
{ $$ = $1; }
/* Subroutine signature */
-subsignature: '('
+subsignature: '(' subsigguts ')'
+ { $$ = $2; }
+
+subsigguts:
{
ENTER;
SAVEIV(parser->sig_elems);
@@ -774,10 +789,9 @@ subsignature: '('
parser->in_my = KEY_sigvar;
}
siglistornull
- ')'
{
- OP *sigops = $3;
- UNOP_AUX_item *aux;
+ OP *sigops = $2;
+ struct op_argcheck_aux *aux;
OP *check;
if (!FEATURE_SIGNATURES_IS_ENABLED)
@@ -789,21 +803,32 @@ subsignature: '('
packWARN(WARN_EXPERIMENTAL__SIGNATURES),
"The signatures feature is experimental");
- aux = (UNOP_AUX_item*)PerlMemShared_malloc(
- sizeof(UNOP_AUX_item) * 3);
- aux[0].iv = parser->sig_elems;
- aux[1].iv = parser->sig_optelems;
- aux[2].iv = parser->sig_slurpy;
- check = newUNOP_AUX(OP_ARGCHECK, 0, NULL, aux);
+ aux = (struct op_argcheck_aux*)
+ PerlMemShared_malloc(
+ sizeof(struct op_argcheck_aux));
+ aux->params = parser->sig_elems;
+ aux->opt_params = parser->sig_optelems;
+ aux->slurpy = parser->sig_slurpy;
+ check = newUNOP_AUX(OP_ARGCHECK, 0, NULL,
+ (UNOP_AUX_item *)aux);
sigops = op_prepend_elem(OP_LINESEQ, check, sigops);
sigops = op_prepend_elem(OP_LINESEQ,
newSTATEOP(0, NULL, NULL),
sigops);
/* a nextstate at the end handles context
* correctly for an empty sub body */
- $$ = op_append_elem(OP_LINESEQ,
+ sigops = op_append_elem(OP_LINESEQ,
sigops,
newSTATEOP(0, NULL, NULL));
+ /* wrap the list of arg ops in a NULL aux op.
+ This serves two purposes. First, it makes
+ the arg list a separate subtree from the
+ body of the sub, and secondly the null op
+ may in future be upgraded to an OP_SIGNATURE
+ when implemented. For now leave it as
+ ex-argcheck */
+ $$ = newUNOP_AUX(OP_ARGCHECK, 0, sigops, NULL);
+ op_null($$);
parser->in_my = 0;
/* tell the toker that attrributes can follow
@@ -909,6 +934,8 @@ listop : LSTOP indirob listexpr /* map {...} @args or print $fh @args */
{ $$ = op_convert_list($1, 0, $2); }
| FUNC '(' optexpr ')' /* print (@args) */
{ $$ = op_convert_list($1, 0, $3); }
+ | FUNC SUBLEXSTART optexpr SUBLEXEND /* uc($arg) from "\U..." */
+ { $$ = op_convert_list($1, 0, $3); }
| LSTOPSUB startanonsub block /* sub f(&@); f { foo } ... */
{ SvREFCNT_inc_simple_void(PL_compcv);
$<opval>$ = newANONATTRSUB($2, 0, NULL, $3); }
@@ -1002,10 +1029,10 @@ termbinop: term ASSIGNOP term /* $x = $y, $x += $y */
{ $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
| term SHIFTOP term /* $x >> $y, $x << $y */
{ $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
- | term RELOP term /* $x > $y, etc. */
- { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
- | term EQOP term /* $x == $y, $x eq $y */
- { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
+ | termrelop %prec PREC_LOW /* $x > $y, etc. */
+ { $$ = $1; }
+ | termeqop %prec PREC_LOW /* $x == $y, $x cmp $y */
+ { $$ = $1; }
| term BITANDOP term /* $x & $y */
{ $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
| term BITOROP term /* $x | $y */
@@ -1022,6 +1049,38 @@ termbinop: term ASSIGNOP term /* $x = $y, $x += $y */
{ $$ = bind_match($2, $1, $3); }
;
+termrelop: relopchain %prec PREC_LOW
+ { $$ = cmpchain_finish($1); }
+ | term NCRELOP term
+ { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
+ | termrelop NCRELOP
+ { yyerror("syntax error"); YYERROR; }
+ | termrelop CHRELOP
+ { yyerror("syntax error"); YYERROR; }
+ ;
+
+relopchain: term CHRELOP term
+ { $$ = cmpchain_start($2, $1, $3); }
+ | relopchain CHRELOP term
+ { $$ = cmpchain_extend($2, $1, $3); }
+ ;
+
+termeqop: eqopchain %prec PREC_LOW
+ { $$ = cmpchain_finish($1); }
+ | term NCEQOP term
+ { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
+ | termeqop NCEQOP
+ { yyerror("syntax error"); YYERROR; }
+ | termeqop CHEQOP
+ { yyerror("syntax error"); YYERROR; }
+ ;
+
+eqopchain: term CHEQOP term
+ { $$ = cmpchain_start($2, $1, $3); }
+ | eqopchain CHEQOP term
+ { $$ = cmpchain_extend($2, $1, $3); }
+ ;
+
/* Unary operators and terms */
termunop : '-' term %prec UMINUS /* -$x */
{ $$ = newUNOP(OP_NEGATE, 0, scalar($2)); }
@@ -1230,7 +1289,7 @@ term : termbinop
} else
$<ival>$ = 0;
}
- '(' listexpr optrepl ')'
+ SUBLEXSTART listexpr optrepl SUBLEXEND
{ $$ = pmruntime($1, $4, $5, 1, $<ival>2); }
| BAREWORD
| listop
diff --git a/gnu/usr.bin/perl/plan9/config.plan9 b/gnu/usr.bin/perl/plan9/config.plan9
index 934138dfd85..e489b0a0549 100644
--- a/gnu/usr.bin/perl/plan9/config.plan9
+++ b/gnu/usr.bin/perl/plan9/config.plan9
@@ -244,7 +244,7 @@
* This symbol, if defined, indicates that the link routine is
* available to create hard links.
*/
-/* #define HAS_LINK /**/
+/* #define HAS_LINK / **/
/* HAS_LOCALECONV:
* This symbol, if defined, indicates that the localeconv routine is
@@ -262,7 +262,7 @@
* 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
@@ -382,7 +382,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_RENAME:
* This symbol, if defined, indicates that the rename routine is available
@@ -434,7 +434,7 @@
* This symbol, if defined, indicates that the setpgid(pid, gpid)
* routine is available to set process group ID.
*/
-#define HAS_SETPGID /**/
+#define HAS_SETPGID / **/
/* HAS_SETPGRP2:
* This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
@@ -520,7 +520,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
@@ -1233,7 +1233,7 @@
* This symbol, if defined, indicates that the "fast stdio"
* is available to manipulate the stdio buffers directly.
*/
-/*#define HAS_FAST_STDIO /**/
+/*#define HAS_FAST_STDIO / **/
/* HAS_FCHDIR:
* This symbol, if defined, indicates that the fchdir routine is
@@ -1754,7 +1754,7 @@
* This symbol, if defined, indicates that the ilogbl routine is
* available. If scalbnl is also present we can emulate frexpl.
*/
-/*#define HAS_ILOGBL /**/
+/*#define HAS_ILOGBL / **/
/* HAS_INT64_T:
* This symbol will defined if the C compiler supports int64_t.
@@ -2024,7 +2024,7 @@
* This symbol, if defined, indicates that the scalbnl routine is
* available. If ilogbl is also present we can emulate frexpl.
*/
-/*#define HAS_SCALBNL /**/
+/*#define HAS_SCALBNL / **/
/* HAS_SENDMSG:
* This symbol, if defined, indicates that the sendmsg routine is
@@ -3131,8 +3131,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 "/sys/lib/perl/5.30.3" /**/
-#define PRIVLIB_EXP "/sys/lib/perl/5.30.3" /**/
+#define PRIVLIB "/sys/lib/perl/5.32.1" /**/
+#define PRIVLIB_EXP "/sys/lib/perl/5.32.1" /**/
/* PTRSIZE:
* This symbol contains the size of a pointer, so that the C preprocessor
@@ -3259,9 +3259,9 @@
* removed. The elements in inc_version_list (inc_version_list.U) can
* be tacked onto this variable to generate a list of directories to search.
*/
-#define SITELIB "/sys/lib/perl/5.30.3/site_perl" /**/
-#define SITELIB_EXP "/sys/lib/perl/5.30.3/site_perl" /**/
-#define SITELIB_STEM "/sys/lib/perl/5.30.3/site_perl" /**/
+#define SITELIB "/sys/lib/perl/5.32.1/site_perl" /**/
+#define SITELIB_EXP "/sys/lib/perl/5.32.1/site_perl" /**/
+#define SITELIB_STEM "/sys/lib/perl/5.32.1/site_perl" /**/
/* Size_t_size:
* This symbol holds the size of a Size_t in bytes.
@@ -3549,13 +3549,13 @@
* This symbol, if defined, indicates that the copysignl routine is
* available. If aintl is also present we can emulate modfl.
*/
-/*#define HAS_COPYSIGNL /**/
+/*#define HAS_COPYSIGNL / **/
/* USE_CPLUSPLUS:
* This symbol, if defined, indicates that a C++ compiler was
* used to compiled Perl and will be used to compile extensions.
*/
-/*#define USE_CPLUSPLUS /**/
+/*#define USE_CPLUSPLUS / **/
/* HAS_DBMINIT_PROTO:
* This symbol, if defined, indicates that the system provides
diff --git a/gnu/usr.bin/perl/plan9/config_sh.sample b/gnu/usr.bin/perl/plan9/config_sh.sample
index 4eda90ffa7d..cd494c4e773 100644
--- a/gnu/usr.bin/perl/plan9/config_sh.sample
+++ b/gnu/usr.bin/perl/plan9/config_sh.sample
@@ -32,11 +32,11 @@ alignbytes='4'
aphostname='/bin/uname -n'
api_revision='5'
api_subversion='0'
-api_version='30'
-api_versionstring='5.30.0'
+api_version='32'
+api_versionstring='5.32.0'
ar='ar'
-archlib='/sys/lib/perl5/5.30.3/386'
-archlibexp='/sys/lib/perl5/5.30.3/386'
+archlib='/sys/lib/perl5/5.32.1/386'
+archlibexp='/sys/lib/perl5/5.32.1/386'
archname64=''
archname='386'
archobjs=''
@@ -116,6 +116,7 @@ d_asinh='undef'
d_atanh='undef'
d_atolf='undef'
d_atoll='define'
+d_attribute_always_inline='undef'
d_attribute_deprecated='undef'
d_attribute_format='undef'
d_attribute_malloc='undef'
@@ -537,6 +538,7 @@ d_sitearch='define'
d_snprintf='undef'
d_sockaddr_in6='undef'
d_sockaddr_sa_len='undef'
+d_sockaddr_storage='undef'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='define'
@@ -628,6 +630,7 @@ d_voidtty=''
d_vsnprintf='undef'
d_wait4='undef'
d_waitpid='define'
+d_wcrtomb='undef'
d_wcscmp='undef'
d_wcstombs='define'
d_wcsxfrm='undef'
@@ -815,17 +818,17 @@ inc_version_list=' '
inc_version_list_init='0'
incpath=''
inews=''
-installarchlib='/sys/lib/perl/5.30.3/386'
+installarchlib='/sys/lib/perl/5.32.1/386'
installbin='/usr/bin'
installman1dir='/sys/man/1pub'
installman3dir='/sys/man/2pub'
installprefix='/usr'
installprefixexp='/usr'
-installprivlib='/sys/lib/perl/5.30.3'
+installprivlib='/sys/lib/perl/5.32.1'
installscript='/usr/bin'
-installsitearch='/sys/lib/perl/5.30.3/site_perl/386'
+installsitearch='/sys/lib/perl/5.32.1/site_perl/386'
installsitebin='/usr/bin'
-installsitelib='/sys/lib/perl/5.30.3/site_perl'
+installsitelib='/sys/lib/perl/5.32.1/site_perl'
installstyle='lib/perl5'
installusrbinperl='undef'
installvendorarch=''
@@ -950,8 +953,8 @@ pmake=''
pr=''
prefix='/usr'
prefixexp='/usr'
-privlib='/sys/lib/perl/5.30.3'
-privlibexp='/sys/lib/perl/5.30.3'
+privlib='/sys/lib/perl/5.32.1'
+privlibexp='/sys/lib/perl/5.32.1'
procselfexe=''
prototype='define'
ptrsize='4'
@@ -1016,13 +1019,13 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0'
sig_size='50'
signal_t='void'
-sitearch='/sys/lib/perl/5.30.3/site_perl/386'
+sitearch='/sys/lib/perl/5.32.1/site_perl/386'
sitearchexp='/sys/lib/perl/site_perl/386'
sitebin='/usr/bin'
sitebinexp='/usr/bin'
-sitelib='/sys/lib/perl/5.30.3/site_perl'
-sitelib_stem='/sys/lib/perl/5.30.3/site_perl'
-sitelibexp='/sys/lib/perl/5.30.3/site_perl'
+sitelib='/sys/lib/perl/5.32.1/site_perl'
+sitelib_stem='/sys/lib/perl/5.32.1/site_perl'
+sitelibexp='/sys/lib/perl/5.32.1/site_perl'
siteprefix='/usr'
siteprefixexp='/usr'
sizesize='4'
@@ -1055,7 +1058,7 @@ stdio_stream_array=''
strerror_r_proto='0'
strings='/sys/include/ape/string.h'
submit=''
-subversion='3'
+subversion='1'
sysman='/sys/man/1pub'
tail=''
tar=''
@@ -1136,8 +1139,8 @@ vendorlib_stem=''
vendorlibexp=''
vendorprefix=''
vendorprefixexp=''
-version='5.30.3'
-version_patchlevel_string='version 30 subversion 3'
+version='5.32.1'
+version_patchlevel_string='version 32 subversion 1'
versiononly='undef'
vi=''
xlibpth=''
@@ -1150,10 +1153,10 @@ config_arg0='./Configure'
config_args=''
config_argc=0
PERL_REVISION=5
-PERL_VERSION=30
-PERL_SUBVERSION=3
+PERL_VERSION=32
+PERL_SUBVERSION=1
PERL_API_REVISION=5
-PERL_API_VERSION=30
+PERL_API_VERSION=32
PERL_API_SUBVERSION=0
PERL_PATCHLEVEL=
PERL_CONFIG_SH=true
diff --git a/gnu/usr.bin/perl/plan9/mkfile b/gnu/usr.bin/perl/plan9/mkfile
index 621a04cb3a6..588ade988ec 100644
--- a/gnu/usr.bin/perl/plan9/mkfile
+++ b/gnu/usr.bin/perl/plan9/mkfile
@@ -23,7 +23,7 @@ installman3dir = /sys/man/2
podnames = perl perlbook perldata perldebtut perldiag perldsc perlform perlfunc perlipc perllexwarn perllol perlmod perlmodlib perlmodinstall perlnewmod perlop perlootut perlopentut perlpacktut perlpod perlport perlrequick perlretut perlref perlreftut perlrequick perlrun perlsec perlstyle perlsub perlsyn perltie perltrap perlutil perlunifaq perluniintro perlvar
faqpodnames = perlfaq perlfaq1 perlfaq2 perlfaq3 perlfaq4 perlfaq5 perlfaq6 perlfaq7 perlfaq8 perlfaq9
advpodnames = perlapi perlapio perlcall perlclib perlcompile perldebguts perldbmfilter perldebug perldelta perldiag perlebcdic perlembed perlfilter perlfork perlguts perlhack perlintern perliol perllocale perlnumber perlobj perlpodspec perlre perlthrtut perltodo perlunicode perlunicook perlxs perlxs perlxstut
-archpodnames = perlaix perlamiga perlbeos perlbs2000 perlce perlcygwin perldgux perldos perlfreebsd perlhpux perlhurd perlirix perlmacos perlmpeix perlnetware perlos2 perlos390 perlos400 perlplan9 perlqnx perlsolaris perltru64 perlvms perlvos perlwin32
+archpodnames = perlaix perlamiga perlbeos perlbs2000 perlcygwin perldgux perldos perlfreebsd perlhpux perlhurd perlirix perlmacos perlnetware perlos2 perlos390 perlos400 perlplan9 perlqnx perlsolaris perltru64 perlvms perlvos perlwin32
histpods = perl5004delta perl5005delta perl561delta perl56delta perl570delta perl571delta perl572delta perl573delta perl58delta perlhist
libpods = ${podnames:%=pod/%.pod}
diff --git a/gnu/usr.bin/perl/plan9/plan9ish.h b/gnu/usr.bin/perl/plan9/plan9ish.h
index 5c326f674bd..fa81502ac90 100644
--- a/gnu/usr.bin/perl/plan9/plan9ish.h
+++ b/gnu/usr.bin/perl/plan9/plan9ish.h
@@ -25,14 +25,14 @@
* getgrgid() routines are available to get group entries.
* The getgrent() has a separate definition, HAS_GETGRENT.
*/
-/*#define HAS_GROUP /**/
+/*#define HAS_GROUP / **/
/* HAS_PASSWD
* This symbol, if defined, indicates that the getpwnam() and
* getpwuid() routines are available to get password entries.
* The getpwent() has a separate definition, HAS_GETPWENT.
*/
-/*#define HAS_PASSWD /**/
+/*#define HAS_PASSWD / **/
#define HAS_KILL
#define HAS_WAIT
@@ -42,7 +42,7 @@
* to remove all versions of a file if unlink() is called. This is
* probably only relevant for VMS.
*/
-/* #define UNLINK_ALL_VERSIONS /**/
+/* #define UNLINK_ALL_VERSIONS / **/
/* PLAN9:
* This symbol, if defined, indicates that the program is running under
@@ -86,7 +86,7 @@
* as the first line of a Perl program designed to be executed directly
* by name, instead of the standard Unix #!. If ALTERNATE_SHEBANG
* begins with a character other then #, then Perl will only treat
- * it as a command line if if finds the string "perl" in the first
+ * it as a command line if it finds the string "perl" in the first
* word; otherwise it's treated as the first line of code in the script.
* (IOW, Perl won't hand off to another interpreter via an alternate
* shebang sequence that might be legal Perl code.)
diff --git a/gnu/usr.bin/perl/pod/perl.pod b/gnu/usr.bin/perl/pod/perl.pod
index 187d62dfd1c..25ae560bfd6 100644
--- a/gnu/usr.bin/perl/pod/perl.pod
+++ b/gnu/usr.bin/perl/pod/perl.pod
@@ -21,7 +21,7 @@ For more information on these options, you can run C<perldoc perlrun>.
The F<perldoc> program gives you access to all the documentation that comes
with Perl. You can get more documentation, tutorials and community support
-online at L<http://www.perl.org/>.
+online at L<https://www.perl.org/>.
If you're new to Perl, you should start by running C<perldoc perlintro>,
which is a general intro for beginners and provides some background to help
@@ -34,7 +34,7 @@ For ease of access, the Perl manual has been split up into several sections.
# This section is parsed by Porting/pod_lib.pl for use by pod/buildtoc etc
-flag =g perlmodlib perlapi perlintern
+flag =g perluniprops perlmodlib perlapi perlintern
flag =go perltoc
flag =ro perlcn perljp perlko perltw
flag = perlvms
@@ -129,6 +129,7 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
perlebcdic Considerations for running Perl on EBCDIC platforms
perlsec Perl security
+ perlsecpolicy Perl security report handling policy
perlmod Perl modules: how they work
perlmodlib Perl modules: how to write and use
@@ -170,6 +171,7 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
perlhacktut Walk through the creation of a simple C code patch
perlhacktips Tips for Perl core C code hacking
perlpolicy Perl development policies
+ perlgov Perl Rules of Governance
perlgit Using git with the Perl repository
=head2 Miscellaneous
@@ -181,9 +183,12 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
perlhist Perl history records
perldelta Perl changes since previous version
+ perl5320delta Perl changes in version 5.32.0
+ perl5303delta Perl changes in version 5.30.3
perl5302delta Perl changes in version 5.30.2
perl5301delta Perl changes in version 5.30.1
perl5300delta Perl changes in version 5.30.0
+ perl5283delta Perl changes in version 5.28.3
perl5282delta Perl changes in version 5.28.2
perl5281delta Perl changes in version 5.28.1
perl5280delta Perl changes in version 5.28.0
@@ -261,7 +266,6 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp
perlamiga Perl notes for AmigaOS
perlandroid Perl notes for Android
perlbs2000 Perl notes for POSIX-BC BS2000
- perlce Perl notes for WinCE
perlcygwin Perl notes for Cygwin
perldos Perl notes for DOS
perlfreebsd Perl notes for FreeBSD
@@ -353,7 +357,7 @@ for a listing.
=head1 ENVIRONMENT
-See L<perlrun>.
+See L<perlrun/ENVIRONMENT>.
=head1 AUTHOR
@@ -373,10 +377,10 @@ see L<perlvar> for more information.
=head1 SEE ALSO
- http://www.perl.org/ the Perl homepage
- http://www.perl.com/ Perl articles (O'Reilly)
- http://www.cpan.org/ the Comprehensive Perl Archive
- http://www.pm.org/ the Perl Mongers
+ https://www.perl.org/ the Perl homepage
+ https://www.perl.com/ Perl articles
+ https://www.cpan.org/ the Comprehensive Perl Archive
+ https://www.pm.org/ the Perl Mongers
=head1 DIAGNOSTICS
diff --git a/gnu/usr.bin/perl/pod/perl5240delta.pod b/gnu/usr.bin/perl/pod/perl5240delta.pod
index f1468eefec8..740bdafbccc 100644
--- a/gnu/usr.bin/perl/pod/perl5240delta.pod
+++ b/gnu/usr.bin/perl/pod/perl5240delta.pod
@@ -1751,7 +1751,7 @@ target matched string was in UTF-8.
Narrow the filename check in F<strict.pm> and F<warnings.pm>. Previously,
it assumed that if the filename (without the F<.pmc?> extension) differed
from the package name, if was a misspelled use statement (i.e. C<use Strict>
-instead of C<use strict>). We now check whether there's really a
+instead of C<use strict>). We now check whether there's really a
miscapitalization happening, and not some other issue.
=item *
@@ -1761,7 +1761,7 @@ regexes. [perl #127599]
=item *
-Correctly raise an error when trying to compile patterns with
+Correctly raise an error when trying to compile patterns with
unterminated character classes while there are trailing backslashes.
[perl #126141].
@@ -1794,7 +1794,7 @@ complains about the unterminated here-doc. [perl #125540]
=item *
C<untie()> would sometimes return the last value returned by the C<UNTIE()>
-handler as well as it's normal value, messing up the stack. [perl
+handler as well as its normal value, messing up the stack. [perl
#126621]
=item *
@@ -2045,7 +2045,7 @@ Warning fatality is now ignored when rewinding the stack. This
prevents infinite recursion when the now fatal error also causes
rewinding of the stack. [perl #123398]
-=item *
+=item *
In perl v5.22.0, the logic changed when parsing a numeric parameter to the -C
option, such that the successfully parsed number was not saved as the option
diff --git a/gnu/usr.bin/perl/pod/perlapio.pod b/gnu/usr.bin/perl/pod/perlapio.pod
index 4aa3c113f38..f7509009bb7 100644
--- a/gnu/usr.bin/perl/pod/perlapio.pod
+++ b/gnu/usr.bin/perl/pod/perlapio.pod
@@ -66,7 +66,53 @@ perlapio - perl's IO abstraction interface.
const char *layers);
int PerlIO_binmode(PerlIO *f, int ptype, int imode,
const char *layers);
- void PerlIO_debug(const char *fmt,...)
+ void PerlIO_debug(const char *fmt,...);
+
+=for apidoc Amh|int |PerlIO_apply_layers|PerlIO *f|const char *mode|const char *layers
+=for apidoc Amh|int |PerlIO_binmode|PerlIO *f|int ptype|int imode|const char *layers
+=for apidoc ATmh|int |PerlIO_canset_cnt|PerlIO *f
+=for apidoc Amh|void |PerlIO_debug|const char *fmt|...
+=for apidoc ATmh|FILE *|PerlIO_exportFILE|PerlIO *f|const char *mode
+=for apidoc ATmh|int |PerlIO_fast_gets|PerlIO *f
+=for apidoc ATmh|PerlIO*|PerlIO_fdopen|int fd|const char *mode
+=for apidoc ATmh|FILE *|PerlIO_findFILE|PerlIO *f
+=for apidoc ATmh|int |PerlIO_getc|PerlIO *d
+=for apidoc ATmh|int |PerlIO_getpos|PerlIO *f|SV *save
+=for apidoc ATmh|int |PerlIO_has_base|PerlIO *f
+=for apidoc ATmh|int |PerlIO_has_cntptr|PerlIO *f
+=for apidoc ATmh|PerlIO*|PerlIO_importFILE|FILE *stdio|const char *mode
+=for apidoc ATmh|PerlIO*|PerlIO_open|const char *path|const char *mode
+=for apidoc Amh|int |PerlIO_printf|PerlIO *f|const char *fmt|...
+=for apidoc ATmh|int |PerlIO_putc|PerlIO *f|int ch
+=for apidoc ATmh|int |PerlIO_puts|PerlIO *f|const char *string
+=for apidoc ATmh|void |PerlIO_releaseFILE|PerlIO *f|FILE *stdio
+=for apidoc Amh|PerlIO *|PerlIO_reopen|const char *path|const char *mode|PerlIO *old
+=for apidoc ATmh|void |PerlIO_rewind|PerlIO *f
+=for apidoc ATmh|int |PerlIO_setpos|PerlIO *f|SV *saved
+=for apidoc Amh|int |PerlIO_stdoutf|const char *fmt|...
+=for apidoc ATmh|int |PerlIO_ungetc|PerlIO *f|int ch
+=for apidoc ATmh|int |PerlIO_vprintf|PerlIO *f|const char *fmt|va_list args
+
+=for apidoc PerlIO_stdin
+=for apidoc PerlIO_stdout
+=for apidoc PerlIO_stderr
+=for apidoc PerlIO_close
+=for apidoc PerlIO_write
+=for apidoc PerlIO_flush
+=for apidoc PerlIO_eof
+=for apidoc PerlIO_error
+=for apidoc PerlIO_clearerr
+=for apidoc PerlIO_read
+=for apidoc PerlIO_fileno
+=for apidoc PerlIO_setlinebuf
+=for apidoc PerlIO_tell
+=for apidoc PerlIO_seek
+=for apidoc PerlIO_get_cnt
+=for apidoc PerlIO_get_ptr
+=for apidoc PerlIO_set_ptrcnt
+=for apidoc PerlIO_set_cnt
+=for apidoc PerlIO_get_base
+=for apidoc PerlIO_get_bufsiz
=head1 DESCRIPTION
diff --git a/gnu/usr.bin/perl/pod/perlbook.pod b/gnu/usr.bin/perl/pod/perlbook.pod
index e03a1d3241c..ffed87c87a6 100644
--- a/gnu/usr.bin/perl/pod/perlbook.pod
+++ b/gnu/usr.bin/perl/pod/perlbook.pod
@@ -7,7 +7,7 @@ perlbook - Books about and related to Perl
There are many books on Perl and Perl-related. A few of these are
good, some are OK, but many aren't worth your money. There is a list
of these books, some with extensive reviews, at
-L<http://books.perl.org/> . We list some of the books here, and while
+L<https://www.perl.org/books/library.html> . We list some of the books here, and while
listing a book implies our
endorsement, don't think that not including a book means anything.
@@ -26,7 +26,7 @@ I<Programming Perl>:
by Tom Christiansen, brian d foy, Larry Wall with Jon Orwant
ISBN 978-0-596-00492-7 [4th edition February 2012]
ISBN 978-1-4493-9890-3 [ebook]
- http://oreilly.com/catalog/9780596004927
+ https://oreilly.com/catalog/9780596004927
=back
@@ -41,7 +41,7 @@ accomplish specific tasks:
with Foreword by Larry Wall
ISBN 978-0-596-00313-5 [2nd Edition August 2003]
ISBN 978-0-596-15888-0 [ebook]
- http://oreilly.com/catalog/9780596003135/
+ https://oreilly.com/catalog/9780596003135/
=back
@@ -56,7 +56,7 @@ programming:
by Randal L. Schwartz, Tom Phoenix, and brian d foy
ISBN 978-1-4493-0358-7 [6th edition June 2011]
ISBN 978-1-4493-0458-4 [ebook]
- http://www.learning-perl.com/
+ https://www.learning-perl.com/
=back
@@ -72,7 +72,7 @@ object-oriented programming, and modules:
foreword by Damian Conway
ISBN 978-1-4493-9309-0 [2nd edition August 2012]
ISBN 978-1-4493-0459-1 [ebook]
- http://www.intermediateperl.com/
+ https://www.intermediateperl.com/
=back
@@ -87,21 +87,21 @@ You might want to keep these desktop references close by your keyboard:
by Johan Vromans
ISBN 978-1-4493-0370-9 [5th edition July 2011]
ISBN 978-1-4493-0813-1 [ebook]
- http://oreilly.com/catalog/0636920018476/
+ https://oreilly.com/catalog/0636920018476/
=item I<Perl Debugger Pocket Reference>
by Richard Foley
ISBN 978-0-596-00503-0 [1st edition January 2004]
ISBN 978-0-596-55625-9 [ebook]
- http://oreilly.com/catalog/9780596005030/
+ https://oreilly.com/catalog/9780596005030/
=item I<Regular Expression Pocket Reference>
by Tony Stubblebine
ISBN 978-0-596-51427-3 [2nd edition July 2007]
ISBN 978-0-596-55782-9 [ebook]
- http://oreilly.com/catalog/9780596514273/
+ https://oreilly.com/catalog/9780596514273/
=back
@@ -119,14 +119,14 @@ You might want to keep these desktop references close by your keyboard:
by James Lee
ISBN 1-59059-391-X [3rd edition April 2010 & ebook]
- http://www.apress.com/9781430227939
+ https://www.apress.com/9781430227939
=item I<Learning Perl> (the "Llama Book")
by Randal L. Schwartz, Tom Phoenix, and brian d foy
ISBN 978-1-4493-0358-7 [6th edition June 2011]
ISBN 978-1-4493-0458-4 [ebook]
- http://www.learning-perl.com/
+ https://www.learning-perl.com/
=item I<Intermediate Perl> (the "Alpaca Book")
@@ -134,20 +134,20 @@ You might want to keep these desktop references close by your keyboard:
foreword by Damian Conway
ISBN 978-1-4493-9309-0 [2nd edition August 2012]
ISBN 978-1-4493-0459-1 [ebook]
- http://www.intermediateperl.com/
+ https://www.intermediateperl.com/
=item I<Mastering Perl>
by brian d foy
ISBN 9978-1-4493-9311-3 [2st edition January 2014]
ISBN 978-1-4493-6487-8 [ebook]
- http://www.masteringperl.org/
+ https://www.masteringperl.org/
=item I<Effective Perl Programming>
by Joseph N. Hall, Joshua A. McAdams, brian d foy
ISBN 0-321-49694-9 [2nd edition 2010]
- http://www.effectiveperlprogramming.com/
+ https://www.effectiveperlprogramming.com/
=back
@@ -159,7 +159,7 @@ You might want to keep these desktop references close by your keyboard:
by Sam Tregar
ISBN 1-59059-018-X [1st edition August 2002 & ebook]
- http://www.apress.com/9781590590188
+ https://www.apress.com/9781590590188
=item I<The Perl Cookbook>
@@ -167,20 +167,20 @@ You might want to keep these desktop references close by your keyboard:
with Foreword by Larry Wall
ISBN 978-0-596-00313-5 [2nd Edition August 2003]
ISBN 978-0-596-15888-0 [ebook]
- http://oreilly.com/catalog/9780596003135/
+ https://oreilly.com/catalog/9780596003135/
=item I<Automating System Administration with Perl>
by David N. Blank-Edelman
ISBN 978-0-596-00639-6 [2nd edition May 2009]
ISBN 978-0-596-80251-6 [ebook]
- http://oreilly.com/catalog/9780596006396
+ https://oreilly.com/catalog/9780596006396
=item I<Real World SQL Server Administration with Perl>
by Linchi Shea
ISBN 1-59059-097-X [1st edition July 2003 & ebook]
- http://www.apress.com/9781590590973
+ https://www.apress.com/9781590590973
=back
@@ -193,80 +193,80 @@ You might want to keep these desktop references close by your keyboard:
by Jan Goyvaerts and Steven Levithan
ISBN 978-1-4493-1943-4 [2nd edition August 2012]
ISBN 978-1-4493-2747-7 [ebook]
- http://shop.oreilly.com/product/0636920023630.do
+ https://shop.oreilly.com/product/0636920023630.do
=item I<Programming the Perl DBI>
by Tim Bunce and Alligator Descartes
ISBN 978-1-56592-699-8 [February 2000]
ISBN 978-1-4493-8670-2 [ebook]
- http://oreilly.com/catalog/9781565926998
+ https://oreilly.com/catalog/9781565926998
=item I<Perl Best Practices>
by Damian Conway
ISBN 978-0-596-00173-5 [1st edition July 2005]
ISBN 978-0-596-15900-9 [ebook]
- http://oreilly.com/catalog/9780596001735
+ https://oreilly.com/catalog/9780596001735
=item I<Higher-Order Perl>
by Mark-Jason Dominus
ISBN 1-55860-701-3 [1st edition March 2005]
- free ebook http://hop.perl.plover.com/book/
- http://hop.perl.plover.com/
+ free ebook https://hop.perl.plover.com/book/
+ https://hop.perl.plover.com/
=item I<Mastering Regular Expressions>
by Jeffrey E. F. Friedl
ISBN 978-0-596-52812-6 [3rd edition August 2006]
ISBN 978-0-596-55899-4 [ebook]
- http://oreilly.com/catalog/9780596528126
+ https://oreilly.com/catalog/9780596528126
=item I<Network Programming with Perl>
by Lincoln Stein
ISBN 0-201-61571-1 [1st edition 2001]
- http://www.pearsonhighered.com/educator/product/Network-Programming-with-Perl/9780201615715.page
+ https://www.pearsonhighered.com/educator/product/Network-Programming-with-Perl/9780201615715.page
=item I<Perl Template Toolkit>
by Darren Chamberlain, Dave Cross, and Andy Wardley
ISBN 978-0-596-00476-7 [December 2003]
ISBN 978-1-4493-8647-4 [ebook]
- http://oreilly.com/catalog/9780596004767
+ https://oreilly.com/catalog/9780596004767
=item I<Object Oriented Perl>
by Damian Conway
with foreword by Randal L. Schwartz
ISBN 1-884777-79-1 [1st edition August 1999 & ebook]
- http://www.manning.com/conway/
+ https://www.manning.com/conway/
=item I<Data Munging with Perl>
by Dave Cross
ISBN 1-930110-00-6 [1st edition 2001 & ebook]
- http://www.manning.com/cross
+ https://www.manning.com/cross
=item I<Mastering Perl/Tk>
by Steve Lidie and Nancy Walsh
ISBN 978-1-56592-716-2 [1st edition January 2002]
ISBN 978-0-596-10344-6 [ebook]
- http://oreilly.com/catalog/9781565927162
+ https://oreilly.com/catalog/9781565927162
=item I<Extending and Embedding Perl>
by Tim Jenness and Simon Cozens
ISBN 1-930110-82-0 [1st edition August 2002 & ebook]
- http://www.manning.com/jenness
+ https://www.manning.com/jenness
=item I<Pro Perl Debugging>
by Richard Foley with Andy Lester
ISBN 1-59059-454-1 [1st edition July 2005 & ebook]
- http://www.apress.com/9781590594544
+ https://www.apress.com/9781590594544
=back
@@ -274,7 +274,7 @@ You might want to keep these desktop references close by your keyboard:
Some of these books are available as free downloads.
-I<Higher-Order Perl>: L<http://hop.perl.plover.com/>
+I<Higher-Order Perl>: L<https://hop.perl.plover.com/>
I<Modern Perl>: L<http://onyxneon.com/books/modern_perl/>
@@ -304,7 +304,7 @@ Each version of Perl comes with the documentation that was current at
the time of release. This poses a problem for content such as book
lists. There are probably very nice books published after this list
was included in your Perl release, and you can check the latest
-released version at L<http://perldoc.perl.org/perlbook.html> .
+released version at L<https://perldoc.perl.org/perlbook.html> .
Some of the books we've listed appear almost ancient in internet
scale, but we've included those books because they still describe the
diff --git a/gnu/usr.bin/perl/pod/perlcall.pod b/gnu/usr.bin/perl/pod/perlcall.pod
index 9a268aa4c10..c3407166531 100644
--- a/gnu/usr.bin/perl/pod/perlcall.pod
+++ b/gnu/usr.bin/perl/pod/perlcall.pod
@@ -993,6 +993,8 @@ equivalent of C<$@>. We use a local temporary, C<err_tmp>, since
C<ERRSV> is a macro that calls a function, and C<SvTRUE(ERRSV)> would
end up calling that function multiple times.
+=for apidoc Amnh|GV *|PL_errgv
+
=item 3.
Note that the stack is popped using C<POPs> in the block where
diff --git a/gnu/usr.bin/perl/pod/perlcheat.pod b/gnu/usr.bin/perl/pod/perlcheat.pod
index 99a8dfc5472..0bdc392c148 100644
--- a/gnu/usr.bin/perl/pod/perlcheat.pod
+++ b/gnu/usr.bin/perl/pod/perlcheat.pod
@@ -83,7 +83,7 @@ people had useful suggestions. Thank you, Perl Monks.
A special thanks to Damian Conway, who didn't only suggest important changes,
but also took the time to count the number of listed features and make a
-Perl 6 version to show that Perl will stay Perl.
+Raku version to show that Perl will stay Perl.
=head1 AUTHOR
@@ -95,14 +95,14 @@ Juerd Waalboer <#####@juerd.nl>, with the help of many Perl Monks.
=item *
-L<http://perlmonks.org/?node_id=216602> - the original PM post
+L<https://perlmonks.org/?node_id=216602> - the original PM post
=item *
-L<http://perlmonks.org/?node_id=238031> - Damian Conway's Perl 6 version
+L<https://perlmonks.org/?node_id=238031> - Damian Conway's Raku version
=item *
-L<http://juerd.nl/site.plp/perlcheat> - home of the Perl Cheat Sheet
+L<https://juerd.nl/site.plp/perlcheat> - home of the Perl Cheat Sheet
=back
diff --git a/gnu/usr.bin/perl/pod/perlclib.pod b/gnu/usr.bin/perl/pod/perlclib.pod
index 176f8548ee2..180cb5d59c9 100644
--- a/gnu/usr.bin/perl/pod/perlclib.pod
+++ b/gnu/usr.bin/perl/pod/perlclib.pod
@@ -205,9 +205,9 @@ C<toUPPER_uni>, as described in L<perlapi/Character case changing>.)
atof(s) Atof(s)
atoi(s) grok_atoUV(s, &uv, &e)
atol(s) grok_atoUV(s, &uv, &e)
- strtod(s, &p) my_atof3(s, &nv, &p) is the closest we have
- strtol(s, &p, n) grok_atoUV(s, &uv, &e)
- strtoul(s, &p, n) grok_atoUV(s, &uv, &e)
+ strtod(s, &p) Strtod(s, &p)
+ strtol(s, &p, n) Strtol(s, &p, b)
+ strtoul(s, &p, n) Strtoul(s, &p, b)
Typical use is to do range checks on C<uv> before casting:
diff --git a/gnu/usr.bin/perl/pod/perlcommunity.pod b/gnu/usr.bin/perl/pod/perlcommunity.pod
index bb55b67a6c7..c3c04920582 100644
--- a/gnu/usr.bin/perl/pod/perlcommunity.pod
+++ b/gnu/usr.bin/perl/pod/perlcommunity.pod
@@ -16,8 +16,8 @@ way to get involved in the community.
=head2 Where to Find the Community
-There is a central directory for the Perl community: L<http://perl.org>
-maintained by the Perl Foundation (L<http://www.perlfoundation.org/>),
+There is a central directory for the Perl community: L<https://perl.org>
+maintained by the Perl Foundation (L<https://www.perlfoundation.org/>),
which tracks and provides services for a variety of other community sites.
=head2 Mailing Lists and Newsgroups
@@ -25,12 +25,12 @@ which tracks and provides services for a variety of other community sites.
Perl runs on e-mail; there is no doubt about it. The Camel book was originally
written mostly over e-mail and today Perl's development is co-ordinated through
mailing lists. The largest repository of Perl mailing lists is located at
-L<http://lists.perl.org>.
+L<https://lists.perl.org>.
Most Perl-related projects set up mailing lists for both users and
contributors. If you don't see a certain project listed at
-L<http://lists.perl.org>, check the particular website for that project.
-Most mailing lists are archived at L<http://nntp.perl.org/>.
+L<https://lists.perl.org>, check the particular website for that project.
+Most mailing lists are archived at L<https://www.nntp.perl.org/>.
=head2 IRC
@@ -38,10 +38,10 @@ The Perl community has a rather large IRC presence. For starters, it has its
own IRC network, L<irc://irc.perl.org>. General (not help-oriented) chat can be
found at L<irc://irc.perl.org/#perl>. Many other more specific chats are also
hosted on the network. Information about irc.perl.org is located on the
-network's website: L<http://www.irc.perl.org>. For a more help-oriented #perl,
-check out L<irc://irc.freenode.net/#perl>. Perl 6 development also has a
-presence in L<irc://irc.freenode.net/#perl6>. Most Perl-related channels will
-be kind enough to point you in the right direction if you ask nicely.
+network's website: L<https://www.irc.perl.org>. For a more help-oriented #perl,
+check out L<irc://irc.freenode.net/#perl>. Raku development also has a
+presence in L<irc://irc.freenode.net/#raku-dev>. Most Perl-related channels
+will be kind enough to point you in the right direction if you ask nicely.
Any large IRC network (Dalnet, EFnet) is also likely to have a #perl channel,
with varying activity levels.
@@ -56,7 +56,7 @@ websites, so only a few of the community's largest are mentioned here.
=over 4
-=item L<http://perl.com/>
+=item L<https://perl.com/>
Originally run by O'Reilly Media (the publisher of L<the Camel Book|perlbook>,
this site provides quality articles mostly about technical details of Perl.
@@ -75,26 +75,19 @@ Perlsphere is one of several aggregators of Perl-related blog feeds.
Perl Weekly is a weekly mailing list that keeps you up to date on conferences,
releases and notable blog posts.
-=item L<http://use.perl.org/>
-
-use Perl; used to provide a slashdot-style news/blog website covering all
-things Perl, from minutes of the meetings of the Perl 6 Design team to
-conference announcements with (ir)relevant discussion. It no longer accepts
-updates, but you can still use the site to read old entries and comments.
-
=back
=head3 Forums
=over 4
-=item L<http://www.perlmonks.org/>
+=item L<https://www.perlmonks.org/>
PerlMonks is one of the largest Perl forums, and describes itself as "A place
for individuals to polish, improve, and showcase their Perl skills." and "A
community which allows everyone to grow and learn from each other."
-=item L<http://stackoverflow.com/>
+=item L<https://stackoverflow.com/>
Stack Overflow is a free question-and-answer site for programmers. It's not
focussed solely on Perl, but it does have an active group of users who do
@@ -116,7 +109,7 @@ hackathons; and provides a mailing list or other continual contact method for
its members to keep in touch.
To find your local Perl Mongers (or PM as they're commonly abbreviated) group
-check the international Perl Mongers directory at L<http://www.pm.org/>.
+check the international Perl Mongers directory at L<https://www.pm.org/>.
=head2 Workshops
@@ -147,27 +140,42 @@ because someone will forget.
=head2 Conventions
-Perl has two major annual conventions: The Perl Conference (now part of OSCON),
+Perl had two major annual conventions: The Perl Conference (now part of OSCON),
put on by O'Reilly, and Yet Another Perl Conference or YAPC (pronounced
yap-see), which is localized into several regional YAPCs (North America,
-Europe, Asia) in a stunning grassroots display by the Perl community. For more
-information about either conference, check out their respective web pages:
-OSCON L<http://conferences.oreillynet.com/>; YAPC L<http://www.yapc.org>.
+Europe, Asia) in a stunning grassroots display by the Perl community.
+
+In 2016, YAPC was rebranded as The Perl Conference again. It is now referred
+to as The Perl and Raku Conference.
+
+OSCON had been discontinued.
+
+For more information about either conference, check out their respective web
+pages:
+
+=over 4
+
+=item * The Perl Conference
+
+L<http://perlconference.us/>.
+
+=item * OSCON
+
+L<https://www.oreilly.com/conferences/>
+
+=back
-A relatively new conference franchise with a large Perl portion is the
-Open Source Developers Conference or OSDC. First held in Australia it has
-recently also spread to Israel and France. More information can be found at:
-L<http://www.osdc.com.au/> for Australia, L<http://www.osdc.org.il>
-for Israel, and L<http://www.osdc.fr/> for France.
+An additional conference franchise with a large Perl portion was the
+Open Source Developers Conference or OSDC. First held in Australia, it
+also spread to Israel and France. More information can be found at:
+L<http://www.osdc.org.il> for Israel, and L<http://www.osdc.fr/> for France.
=head2 Calendar of Perl Events
The Perl Review, L<http://www.theperlreview.com> maintains a website
-and Google calendar
-(L<http://www.theperlreview.com/community_calendar>) for tracking
-workshops, hackathons, Perl Mongers meetings, and other events. Views
-of this calendar are at L<http://www.perl.org/events.html> and
-L<http://www.yapc.org>.
+and Google calendar for tracking
+workshops, hackathons, Perl Mongers meetings, and other events. A view
+of this calendar is available at L<https://www.perl.org/events.html>.
Not every event or Perl Mongers group is on that calendar, so don't lose
heart if you don't see yours posted. To have your event or group listed,
diff --git a/gnu/usr.bin/perl/pod/perldata.pod b/gnu/usr.bin/perl/pod/perldata.pod
index 2ab55687a2d..b50f817dcaa 100644
--- a/gnu/usr.bin/perl/pod/perldata.pod
+++ b/gnu/usr.bin/perl/pod/perldata.pod
@@ -1081,8 +1081,8 @@ returning a list of key/value pairs rather than just values:
# %removed is now (foo => 3, bar => 8)
# %h is now (blonk => 2, squink => 5)
-However, the result of such a slice cannot be localized or used
-in assignment. These are otherwise very much consistent with hash slices
+However, the result of such a slice cannot be localized or assigned to.
+These are otherwise very much consistent with hash slices
using the @ symbol.
=head3 Index/Value Array Slices
diff --git a/gnu/usr.bin/perl/pod/perldebguts.pod b/gnu/usr.bin/perl/pod/perldebguts.pod
index de413fd8130..cc908393cf8 100644
--- a/gnu/usr.bin/perl/pod/perldebguts.pod
+++ b/gnu/usr.bin/perl/pod/perldebguts.pod
@@ -14,9 +14,9 @@ Caveat lector.
Perl has special debugging hooks at compile-time and run-time used
to create debugging environments. These hooks are not to be confused
-with the I<perl -Dxxx> command described in L<perlrun>, which is
-usable only if a special Perl is built per the instructions in the
-F<INSTALL> podpage in the Perl source tree.
+with the I<perl -Dxxx> command described in L<perlrun|perlrun/-Dletters>,
+which is usable only if a special Perl is built per the instructions in
+the F<INSTALL> podpage in the Perl source tree.
For example, whenever you call Perl's built-in C<caller> function
from the package C<DB>, the arguments that the corresponding stack
@@ -562,7 +562,7 @@ will be lost.
=for regcomp.pl begin
- # TYPE arg-description [num-args] [longjump-len] DESCRIPTION
+ # TYPE arg-description [regnode-struct-suffix] [longjump-len] DESCRIPTION
# Exit points
@@ -582,16 +582,16 @@ will be lost.
GPOS no Matches where last m//g left off.
# Word Boundary Opcodes:
- BOUND no Like BOUNDA for non-utf8, otherwise match
- "" between any Unicode \w\W or \W\w
+ BOUND no Like BOUNDA for non-utf8, otherwise like
+ BOUNDU
BOUNDL no Like BOUND/BOUNDU, but \w and \W are
defined by current locale
BOUNDU no Match "" at any boundary of a given type
using /u rules.
BOUNDA no Match "" at any boundary between \w\W or
\W\w, where \w is [_a-zA-Z0-9]
- NBOUND no Like NBOUNDA for non-utf8, otherwise match
- "" between any Unicode \w\w or \W\W
+ NBOUND no Like NBOUNDA for non-utf8, otherwise like
+ BOUNDU
NBOUNDL no Like NBOUND/NBOUNDU, but \w and \W are
defined by current locale
NBOUNDU no Match "" at any non-boundary of a given
@@ -611,10 +611,27 @@ will be lost.
ANYOFPOSIXL sv Like ANYOFL, but matches [[:posix:]]
charclass_ classes
posixl
+
ANYOFH sv 1 Like ANYOF, but only has "High" matches,
- none in the bitmap; non-zero flags "f"
- means "f" is the first UTF-8 byte shared in
- common by all code points matched
+ none in the bitmap; the flags field
+ contains the lowest matchable UTF-8 start
+ byte
+ ANYOFHb sv 1 Like ANYOFH, but all matches share the same
+ UTF-8 start byte, given in the flags field
+ ANYOFHr sv 1 Like ANYOFH, but the flags field contains
+ packed bounds for all matchable UTF-8 start
+ bytes.
+ ANYOFHs sv 1 Like ANYOFHb, but has a string field that
+ gives the leading matchable UTF-8 bytes;
+ flags field is len
+ ANYOFR packed 1 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
+ ANYOFRb packed 1 Like ANYOFR, but all matches share the same
+ UTF-8 start byte, given in the flags field
+
ANYOFM byte 1 Like ANYOF, but matches an invariant byte
as determined by the mask and arg
NANYOFM byte 1 complement of ANYOFM
@@ -651,40 +668,48 @@ will be lost.
# Literals
- EXACT str Match this string (preceded by length).
- EXACTL str Like EXACT, but /l is in effect (used so
- locale-related warnings can be checked
- for).
- EXACTF str Match this string using /id rules (w/len);
- (string not UTF-8, not guaranteed to be
- folded).
- EXACTFL str Match this string using /il rules (w/len);
- (string not guaranteed to be folded).
- EXACTFU str Match this string using /iu rules (w/len);
- (string folded iff in UTF-8; non-UTF8
- folded length <= unfolded).
- EXACTFAA str Match this string using /iaa rules (w/len)
- (string folded iff in UTF-8; non-UTF8
- folded length <= unfolded).
-
- EXACTFUP str Match this string using /iu rules (w/len);
- (string not UTF-8, not guaranteed to be
- folded; and its Problematic).
+ EXACT str Match this string (flags field is the
+ length).
- EXACTFLU8 str Like EXACTFU, but use /il, UTF-8, folded,
- and everything in it is above 255.
- EXACTFAA_NO_TRIE str Match this string using /iaa rules (w/len)
+ # In a long string node, the U32 argument is the length, and is
+ # immediately followed by the string.
+ LEXACT len:str 1 Match this long string (preceded by length;
+ flags unused).
+ EXACTL str Like EXACT, but /l is in effect (used so
+ locale-related warnings can be checked for)
+ EXACTF str Like EXACT, but match using /id rules;
+ (string not UTF-8, ASCII folded; non-ASCII
+ not)
+ EXACTFL str Like EXACT, but match using /il rules;
+ (string not likely to be folded)
+ EXACTFU str Like EXACT, but match using /iu rules;
+ (string folded)
+
+ EXACTFAA str Like EXACT, but match using /iaa rules;
+ (string folded except in non-UTF8 patterns:
+ MICRO, SHARP S; folded length <= unfolded)
+
+ EXACTFUP str Like EXACT, but match using /iu rules;
+ (string not UTF-8, folded except MICRO,
+ SHARP S: hence Problematic)
+
+ EXACTFLU8 str Like EXACTFU, but use /il, UTF-8, (string
+ is folded, and everything in it is above
+ 255
+ EXACTFAA_NO_TRIE str Like EXACT, but match using /iaa rules
(string not UTF-8, not guaranteed to be
- folded, not currently trie-able).
+ folded, not currently trie-able)
- EXACT_ONLY8 str Like EXACT, but only UTF-8 encoded targets
+ EXACT_REQ8 str Like EXACT, but only UTF-8 encoded targets
can match
- EXACTFU_ONLY8 str Like EXACTFU, but only UTF-8 encoded
+ LEXACT_REQ8 len:str 1 Like LEXACT, but only UTF-8 encoded targets
+ can match
+ EXACTFU_REQ8 str Like EXACTFU, but only UTF-8 encoded
targets can match
EXACTFU_S_EDGE str /di rules, but nothing in it precludes /ui,
except begins and/or ends with [Ss];
- (string not UTF-8; compile-time only).
+ (string not UTF-8; compile-time only)
# Do nothing types
@@ -732,14 +757,14 @@ will be lost.
# Named references. Code in regcomp.c assumes that these all are after
# the numbered references
- NREF no-sv 1 Match some already matched string
- NREFF no-sv 1 Match already matched string, using /di
+ REFN no-sv 1 Match some already matched string
+ REFFN no-sv 1 Match already matched string, using /di
rules.
- NREFFL no-sv 1 Match already matched string, using /li
+ REFFLN no-sv 1 Match already matched string, using /li
rules.
- NREFFU num 1 Match already matched string, using /ui
+ REFFUN num 1 Match already matched string, using /ui
rules.
- NREFFA num 1 Match already matched string, using /aai
+ REFFAN num 1 Match already matched string, using /aai
rules.
# Support for long RE
@@ -791,7 +816,7 @@ will be lost.
GOSUB num/ofs 2L recurse to paren arg1 at (signed) ofs arg2
# Special conditionals
- NGROUPP no-sv 1 Whether the group matched.
+ GROUPPN no-sv 1 Whether the group matched.
INSUBP num 1 Whether we are in a specific recurse.
DEFINEP none 1 Never execute directly.
@@ -833,6 +858,9 @@ will be lost.
# mean "not seen anything to optimize yet".
PSEUDO off Pseudo opcode for internal use.
+ REGEX_SET depth p Regex set, temporary node used in pre-
+ optimization compilation
+
=for regcomp.pl end
=for unprinted-credits
diff --git a/gnu/usr.bin/perl/pod/perldelta.pod b/gnu/usr.bin/perl/pod/perldelta.pod
index 90c6f04f275..81e7f0737a5 100644
--- a/gnu/usr.bin/perl/pod/perldelta.pod
+++ b/gnu/usr.bin/perl/pod/perldelta.pod
@@ -2,72 +2,128 @@
=head1 NAME
-perldelta - what is new for perl v5.30.3
+perldelta - what is new for perl v5.32.1
=head1 DESCRIPTION
-This document describes differences between the 5.30.2 release and the 5.30.3
+This document describes differences between the 5.32.0 release and the 5.32.1
release.
-If you are upgrading from an earlier release such as 5.30.1, first read
-L<perl5302delta>, which describes differences between 5.30.1 and 5.30.2.
+If you are upgrading from an earlier release such as 5.31.0, first read
+L<perl5320delta>, which describes differences between 5.31.0 and 5.32.0.
-=head1 Security
+=head1 Incompatible Changes
-=head2 [CVE-2020-10543] Buffer overflow caused by a crafted regular expression
+There are no changes intentionally incompatible with Perl 5.32.0. If any
+exist, they are bugs, and we request that you submit a report. See
+L</Reporting Bugs> below.
-A signed C<size_t> integer overflow in the storage space calculations for
-nested regular expression quantifiers could cause a heap buffer overflow in
-Perl's regular expression compiler that overwrites memory allocated after the
-regular expression storage space with attacker supplied data.
+=head1 Modules and Pragmata
-The target system needs a sufficient amount of memory to allocate partial
-expansions of the nested quantifiers prior to the overflow occurring. This
-requirement is unlikely to be met on 64-bit systems.
+=head2 Updated Modules and Pragmata
-Discovered by: ManhND of The Tarantula Team, VinCSS (a member of Vingroup).
+=over 4
-=head2 [CVE-2020-10878] Integer overflow via malformed bytecode produced by a crafted regular expression
+=item *
-Integer overflows in the calculation of offsets between instructions for the
-regular expression engine could cause corruption of the intermediate language
-state of a compiled regular expression. An attacker could abuse this behaviour
-to insert instructions into the compiled form of a Perl regular expression.
+L<Data::Dumper> has been upgraded from version 2.174 to 2.174_01.
-Discovered by: Hugo van der Sanden and Slaven Rezic.
+A number of memory leaks have been fixed.
-=head2 [CVE-2020-12723] Buffer overflow caused by a crafted regular expression
+=item *
-Recursive calls to C<S_study_chunk()> by Perl's regular expression compiler to
-optimize the intermediate language representation of a regular expression could
-cause corruption of the intermediate language state of a compiled regular
-expression.
+L<DynaLoader> has been upgraded from version 1.47 to 1.47_01.
-Discovered by: Sergey Aleynikov.
+=item *
-=head2 Additional Note
+L<Module::CoreList> has been upgraded from version 5.20200620 to 5.20210123.
-An application written in Perl would only be vulnerable to any of the above
-flaws if it evaluates regular expressions supplied by the attacker. Evaluating
-regular expressions in this fashion is known to be dangerous since the regular
-expression engine does not protect against denial of service attacks in this
-usage scenario.
+=item *
-=head1 Incompatible Changes
+L<Opcode> has been upgraded from version 1.47 to 1.48.
-There are no changes intentionally incompatible with Perl 5.30.2. If any
-exist, they are bugs, and we request that you submit a report. See
-L</Reporting Bugs> below.
+A warning has been added about evaluating untrusted code with the perl
+interpreter.
-=head1 Modules and Pragmata
+=item *
-=head2 Updated Modules and Pragmata
+L<Safe> has been upgraded from version 2.41 to 2.41_01.
+
+A warning has been added about evaluating untrusted code with the perl
+interpreter.
+
+=back
+
+=head1 Documentation
+
+=head2 New Documentation
+
+=head3 L<perlgov>
+
+Documentation of the newly formed rules of governance for Perl.
+
+=head3 L<perlsecpolicy>
+
+Documentation of how the Perl security team operates and how the team evaluates
+new security reports.
+
+=head2 Changes to Existing Documentation
+
+We have attempted to update the documentation to reflect the changes listed in
+this document. If you find any we have missed, open an issue at
+L<https://github.com/Perl/perl5/issues>.
+
+Additionally, the following selected changes have been made:
+
+=head3 L<perlop>
=over 4
=item *
-L<Module::CoreList> has been upgraded from version 5.20200314 to 5.20200601_30.
+Document range op behaviour change.
+
+=back
+
+=head1 Diagnostics
+
+The following additions or changes have been made to diagnostic output,
+including warnings and fatal error messages. For the complete list of
+diagnostic messages, see L<perldiag>.
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+L<\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in mE<sol>%sE<sol>|perldiag/"\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/%s/">
+
+This error was incorrectly produced in some cases involving nested lookarounds.
+This has been fixed.
+
+[L<GH #18123|https://github.com/Perl/perl5/issues/18123>]
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+Newer 64-bit versions of the Intel C/C++ compiler are now recognized and have
+the correct flags set.
+
+=item *
+
+We now trap SIGBUS when F<Configure> checks for C<va_copy>.
+
+On several systems the attempt to determine if we need C<va_copy> or similar
+results in a SIGBUS instead of the expected SIGSEGV, which previously caused a
+core dump.
+
+[L<GH #18148|https://github.com/Perl/perl5/issues/18148>]
=back
@@ -76,21 +132,89 @@ L<Module::CoreList> has been upgraded from version 5.20200314 to 5.20200601_30.
Tests were added and changed to reflect the other additions and changes in this
release.
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item MacOS (Darwin)
+
+The hints file for darwin has been updated to handle future macOS versions
+beyond 10. Perl can now be built on macOS Big Sur.
+
+[L<GH #17946|https://github.com/Perl/perl5/issues/17946>,
+L<GH #18406|https://github.com/Perl/perl5/issues/18406>]
+
+=item Minix
+
+Build errors on Minix have been fixed.
+
+[L<GH #17908|https://github.com/Perl/perl5/issues/17908>]
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+Some list assignments involving C<undef> on the left-hand side were
+over-optimized and produced incorrect results.
+
+[L<GH #16685|https://github.com/Perl/perl5/issues/16685>,
+L<GH #17816|https://github.com/Perl/perl5/issues/17816>]
+
+=item *
+
+Fixed a bug in which some regexps with recursive subpatterns matched
+incorrectly.
+
+[L<GH #18096|https://github.com/Perl/perl5/issues/18096>]
+
+=item *
+
+Fixed a deadlock that hung the build when Perl is compiled for debugging memory
+problems and has PERL_MEM_LOG enabled.
+
+[L<GH #18341|https://github.com/Perl/perl5/issues/18341>]
+
+=item *
+
+Fixed a crash in the use of chained comparison operators when run under "no
+warnings 'uninitialized'".
+
+[L<GH #17917|https://github.com/Perl/perl5/issues/17917>,
+L<GH #18380|https://github.com/Perl/perl5/issues/18380>]
+
+=item *
+
+Exceptions thrown from destructors during global destruction are no longer
+swallowed.
+
+[L<GH #18063|https://github.com/Perl/perl5/issues/18063>]
+
+=back
+
=head1 Acknowledgements
-Perl 5.30.3 represents approximately 3 months of development since Perl 5.30.2
-and contains approximately 1,100 lines of changes across 42 files from 7
+Perl 5.32.1 represents approximately 7 months of development since Perl 5.32.0
+and contains approximately 7,000 lines of changes across 80 files from 23
authors.
Excluding auto-generated files, documentation and release tools, there were
-approximately 350 lines of changes to 8 .pm, .t, .c and .h files.
+approximately 1,300 lines of changes to 23 .pm, .t, .c and .h files.
Perl continues to flourish into its fourth decade thanks to a vibrant community
of users and developers. The following people are known to have contributed
-the improvements that became Perl 5.30.3:
+the improvements that became Perl 5.32.1:
-Chris 'BinGOs' Williams, Hugo van der Sanden, John Lightsey, Karl Williamson,
-Nicolas R., Sawyer X, Steve Hay.
+Adam Hartley, Andy Dougherty, Dagfinn Ilmari Mannsåker, Dan Book, David
+Mitchell, Graham Knop, Graham Ollis, Hauke D, H.Merijn Brand, Hugo van der
+Sanden, John Lightsey, Karen Etheridge, Karl Williamson, Leon Timmermans, Max
+Maischein, Nicolas R., Ricardo Signes, Richard Leach, Sawyer X, Sevan Janiyan,
+Steve Hay, Tom Hukins, Tony Cook.
The list above is almost certainly incomplete as it is automatically generated
from version control history. In particular, it does not include the names of
@@ -108,7 +232,7 @@ the F<AUTHORS> file in the Perl source distribution.
If you find what you think is a bug, you might check the perl bug database at
L<https://github.com/Perl/perl5/issues>. There may also be information at
-L<https://www.perl.org/>, the Perl Home Page.
+L<http://www.perl.org/>, the Perl Home Page.
If you believe you have an unreported bug, please open an issue at
L<https://github.com/Perl/perl5/issues>. Be sure to trim your bug down to a
diff --git a/gnu/usr.bin/perl/pod/perldiag.pod b/gnu/usr.bin/perl/pod/perldiag.pod
index 709dd44b4e4..41914a2072c 100644
--- a/gnu/usr.bin/perl/pod/perldiag.pod
+++ b/gnu/usr.bin/perl/pod/perldiag.pod
@@ -1499,7 +1499,7 @@ it's loaded, etc.
(P) The parser got confused when trying to parse a C<foreach> loop.
-=item Can't use global %s in "%s"
+=item Can't use global %s in %s
(F) You tried to declare a magical variable as a lexical variable. This
is not allowed, because the magic can be tied to only one location
@@ -1731,22 +1731,23 @@ another template code following the slash. See L<perlfunc/pack>.
=item Code point 0x%X is not Unicode, and not portable
-(S non_unicode) You had a code point that has never been in any
+(S non_unicode portable) You had a code point that has never been in any
standard, so it is likely that languages other than Perl will NOT
-understand it. At one time, it was legal in some standards to have code
-points up to 0x7FFF_FFFF, but not higher, and this code point is higher.
+understand it. This code point also will not fit in a 32-bit word on
+ASCII platforms and therefore is non-portable between systems.
+
+At one time, it was legal in some standards to have code points up to
+0x7FFF_FFFF, but not higher, and this code point is higher.
Acceptance of these code points is a Perl extension, and you should
expect that nothing other than Perl can handle them; Perl itself on
EBCDIC platforms before v5.24 does not handle them.
-Code points above 0xFFFF_FFFF require larger than a 32 bit word.
-
Perl also makes no guarantees that the representation of these code
points won't change at some point in the future, say when machines
become available that have larger than a 64-bit word. At that time,
-files written by an older Perl would require conversion before being
-readable by a newer Perl.
+files containing any of these, written by an older Perl might require
+conversion before being readable by a newer Perl.
=item Code point 0x%X is not Unicode, may not be portable
@@ -1833,10 +1834,9 @@ The message indicates the type of reference that was expected. This
usually indicates a syntax error in dereferencing the constant value.
See L<perlsub/"Constant Functions"> and L<constant>.
-=item Constants from lexical variables potentially modified elsewhere are
-deprecated. This will not be allowed in Perl 5.32
+=item Constants from lexical variables potentially modified elsewhere are no longer permitted
-(D deprecated) You wrote something like
+(F) You wrote something like
my $var;
$sub = sub () { $var };
@@ -1853,7 +1853,7 @@ breaks the behavior of closures, in which the subroutine captures
the variable itself, rather than its value, so future changes to the
variable are reflected in the subroutine's return value.
-This usage is deprecated, and will no longer be allowed in Perl 5.32,
+This usage was deprecated, and as of Perl 5.32 is no longer allowed,
making it possible to change the behavior in the future.
If you intended for the subroutine to be eligible for inlining, then
@@ -2292,36 +2292,18 @@ to denote a capturing group of the form
L<C<(?I<PARNO>)>|perlre/(?PARNO) (?-PARNO) (?+PARNO) (?R) (?0)>,
but omitted the C<")">.
-=item Expecting close paren for nested extended charclass in regex; marked
-by <-- HERE in m/%s/
-
-(F) While parsing a nested extended character class like:
-
- (?[ ... (?flags:(?[ ... ])) ... ])
- ^
-
-we expected to see a close paren ')' (marked by ^) but did not.
-
-=item Expecting close paren for wrapper for nested extended charclass in
-regex; marked by <-- HERE in m/%s/
-
-(F) While parsing a nested extended character class like:
-
- (?[ ... (?flags:(?[ ... ])) ... ])
- ^
+=item Expecting interpolated extended charclass in regex; marked by <--
+HERE in m/%s/
-we expected to see a close paren ')' (marked by ^) but did not.
+(F) It looked like you were attempting to interpolate an
+already-compiled extended character class, like so:
-=item Expecting '(?flags:(?[...' in regex; marked by S<<-- HERE> in m/%s/
+ my $thai_or_lao = qr/(?[ \p{Thai} + \p{Lao} ])/;
+ ...
+ qr/(?[ \p{Digit} & $thai_or_lao ])/;
-(F) The C<(?[...])> extended character class regular expression construct
-only allows character classes (including character class escapes like
-C<\d>), operators, and parentheses. The one exception is C<(?flags:...)>
-containing at least one flag and exactly one C<(?[...])> construct.
-This allows a regular expression containing just C<(?[...])> to be
-interpolated. If you see this error message, then you probably
-have some other C<(?...)> construct inside your character class. See
-L<perlrecharclass/Extended Bracketed Character Classes>.
+But the marked code isn't syntactically correct to be such an
+interpolated class.
=item Experimental aliasing via reference not enabled
@@ -2668,15 +2650,19 @@ zero-length sequence. When such an escape is used in a character
class its behavior is not well defined. Check that the correct
escape has been used, and the correct charname handler is in scope.
-=item Illegal binary digit '%c'
+=item Illegal %s digit '%c' ignored
-(F) You used a digit other than 0 or 1 in a binary number.
+(W digit) Here C<%s> is one of "binary", "octal", or "hex".
+You may have tried to use a digit other than one that is legal for the
+given type, such as only 0 and 1 for binary. For octals, this is raised
+only if the illegal character is an '8' or '9'. For hex, 'A' - 'F' and
+'a' - 'f' are legal.
+Interpretation of the number stopped just before the offending digit or
+character.
-=item Illegal binary digit %s ignored
+=item Illegal binary digit '%c'
-(W digit) You may have tried to use a digit other than 0 or 1 in a
-binary number. Interpretation of the binary number stopped before the
-offending digit.
+(F) You used a digit other than 0 or 1 in a binary number.
=item Illegal character after '_' in prototype for %s : %s
@@ -2732,12 +2718,6 @@ you must always specify a block of code. See L<perlsub>.
your logic, or you need to put a conditional in to guard against
meaningless input.
-=item Illegal hexadecimal digit %s ignored
-
-(W digit) You may have tried to use a character other than 0 - 9 or
-A - F, a - f in a hexadecimal number. Interpretation of the hexadecimal
-number stopped before the illegal character.
-
=item Illegal modulus zero
(F) You tried to divide a number by 0 to get the remainder. Most
@@ -2752,11 +2732,6 @@ two from 1 to 32 (or 64, if your platform supports that).
(F) You used an 8 or 9 in an octal number.
-=item Illegal octal digit %s ignored
-
-(W digit) You may have tried to use an 8 or 9 in an octal number.
-Interpretation of the octal number stopped before the 8 or 9.
-
=item Illegal operator following parameter in a subroutine signature
(F) A parameter in a subroutine signature, was followed by something
@@ -3123,6 +3098,12 @@ problem was discovered. See L<perlre>.
(F) The range specified in the tr/// or y/// operator had a minimum
character greater than the maximum character. See L<perlop>.
+=item Invalid reference to group in regex; marked by S<<-- HERE> in m/%s/
+
+(F) The capture group you specified can't possibly exist because the
+number you used is not within the legal range of possible values for
+this machine.
+
=item Invalid separator character %s in attribute list
(F) Something other than a colon or whitespace was seen between the
@@ -3176,6 +3157,20 @@ an arbitrary reference was blessed into the "version" class.
=item In '(*VERB...)', the '(' and '*' must be adjacent in regex;
marked by S<<-- HERE> in m/%s/
+=item Inverting a character class which contains a multi-character
+sequence is illegal in regex; marked by <-- HERE in m/%s/
+
+(F) You wrote something like
+
+ qr/\P{name=KATAKANA LETTER AINU P}/
+ qr/[^\p{name=KATAKANA LETTER AINU P}]/
+
+This name actually evaluates to a sequence of two Katakana characters,
+not just a single one, and it is illegal to try to take the complement
+of a sequence. (Mathematically it would mean any sequence of characters
+from 0 to infinity in length that weren't these two in a row, and that
+is likely not of any real use.)
+
(F) The two-character sequence C<"(*"> in this context in a regular
expression pattern should be an indivisible token, with nothing
intervening between the C<"("> and the C<"*">, but you separated them.
@@ -3207,6 +3202,14 @@ neither as a system call nor an ioctl call (SIOCATMARK).
Perl. The current valid ones are given in
L<perlrebackslash/\b{}, \b, \B{}, \B>.
+=item %s is forbidden - matches null string many times in regex; marked by S<<-- HERE> in
+m/%s/
+
+(F) The pattern you've specified might cause the regular expression to
+infinite loop so it is forbidden. The S<<-- HERE>
+shows whereabouts in the regular expression the problem was discovered.
+See L<perlre>.
+
=item %s() isn't allowed on :utf8 handles
(F) The sysread(), recv(), syswrite() and send() operators are
@@ -3263,6 +3266,12 @@ an anonymous subroutine, or a reference to a subroutine.
(W overload) You tried to overload a constant type the overload package is
unaware of.
+=item isa is experimental
+
+(S experimental::isa) This warning is emitted if you use the (C<isa>)
+operator. This operator is currently experimental and its behaviour may
+change in future releases of Perl.
+
=item -i used with no filenames on the command line, reading from STDIN
(S inplace) The C<-i> option was passed on the command line, indicating
@@ -3271,12 +3280,20 @@ given. This is usually a mistake, since editing STDIN in place doesn't
make sense, and can be confusing because it can make perl look like
it is hanging when it is really just trying to read from STDIN. You
should either pass a filename to edit, or remove C<-i> from the command
-line. See L<perlrun> for more details.
+line. See L<perlrun|perlrun/-i[extension]> for more details.
=item Junk on end of regexp in regex m/%s/
(P) The regular expression parser is confused.
+=item \K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/%s/
+
+(F) Your regular expression used C<\K> in a lookahead or lookbehind
+assertion, which currently isn't permitted.
+
+This may change in the future, see L<Support \K in
+lookarounds|https://github.com/Perl/perl5/issues/18134>.
+
=item Label not found for "last %s"
(F) You named a loop to break out of, but you're not currently in a loop
@@ -3835,8 +3852,8 @@ couldn't be created for some peculiar reason.
=item Module name required with -%c option
(F) The C<-M> or C<-m> options say that Perl should load some module, but
-you omitted the name of the module. Consult L<perlrun> for full details
-about C<-M> and C<-m>.
+you omitted the name of the module. Consult
+L<perlrun|perlrun/-m[-]module> for full details about C<-M> and C<-m>.
=item More than one argument to '%s' open
@@ -4007,7 +4024,7 @@ bracketed character class, for the same reason that C<.> in a character
class loses its specialness: it matches almost everything, which is
probably not what you want.
-=item \N{} in inverted character class or as a range end-point is restricted to one character in regex; marked by <-- HERE in m/%s/
+=item \N{} here is restricted to one character in regex; marked by <-- HERE in m/%s/
(F) Named Unicode character escapes (C<\N{...}>) may return a
multi-character sequence. Even though a character class is
@@ -4100,6 +4117,11 @@ for some reason the current debugger (e.g. F<perl5db.pl> or a C<Devel::>
module) didn't define a C<DB::sub> routine to be called at the beginning
of each ordinary subroutine call.
+=item No digits found for %s literal
+
+(F) No hexadecimal digits were found following C<0x> or no binary digits
+were found following C<0b>.
+
=item No directory specified for -I
(F) The B<-I> command-line switch requires a directory name as part of the
@@ -4143,6 +4165,15 @@ a hex one was expected, like
(?[ [ \xDG ] ])
(?[ [ \x{DEKA} ] ])
+=item Non-hex character '%c' terminates \x early. Resolved as "%s"
+
+(W digit) In parsing a hexadecimal numeric constant, a character was
+unexpectedly encountered that isn't hexadecimal. The resulting value
+is as indicated.
+
+Note that, within braces, every character starting with the first
+non-hexadecimal up to the ending brace is ignored.
+
=item Non-octal character in regex; marked by S<<-- HERE> in m/%s/
(F) In a regular expression, there was a non-octal character where
@@ -4150,12 +4181,22 @@ an octal one was expected, like
(?[ [ \o{1278} ] ])
-=item Non-octal character '%c'. Resolved as "%s"
+=item Non-octal character '%c' terminates \o early. Resolved as "%s"
(W digit) In parsing an octal numeric constant, a character was
unexpectedly encountered that isn't octal. The resulting value
is as indicated.
+When not using C<\o{...}>, you wrote something like C<\08>, or C<\179>
+in a double-quotish string. The resolution is as indicated, with all
+but the last digit treated as a single character, specified in octal.
+The last digit is the next character in the string. To tell Perl that
+this is indeed what you want, you can use the C<\o{ }> syntax, or use
+exactly three digits to specify the octal for the character.
+
+Note that, within braces, every character starting with the first
+non-octal up to the ending brace is ignored.
+
=item "no" not allowed in expression
(F) The "no" keyword is recognized and executed at compile time, and
@@ -4354,6 +4395,19 @@ the meantime, try using scientific notation (e.g. "1e6" instead of
a number. This happens, for example with C<\o{}>, with no number between
the braces.
+=item Numeric format result too large
+
+(F) The length of the result of a numeric format supplied to sprintf()
+or printf() would have been too large for the underlying C function to
+report. This limit is typically 2GB.
+
+=item Numeric variables with more than one digit may not start with '0'
+
+(F) The only numeric variable which is allowed to start with a 0 is C<$0>,
+and you mentioned a variable that starts with 0 that has more than one
+digit. You probably want to remove the leading 0, or if the intent was
+to express a variable name in octal you should convert to decimal.
+
=item Octal number > 037777777777 non-portable
(W portable) The octal number you specified is larger than 2**32-1
@@ -5426,6 +5480,8 @@ Supply these or check that you are using the right construct.
=item '%s' resolved to '\o{%s}%d'
+As of Perl 5.32, this message is no longer generated. Instead, see
+L</Non-octal character '%c' terminates \o early. Resolved as "%s">.
(W misc, regexp) You wrote something like C<\08>, or C<\179> in a
double-quotish string. All but the last digit is treated as a single
character, specified in octal. The last digit is the next character in
@@ -5649,7 +5705,7 @@ variables (like PATH) from the user it isn't running under, and isn't
in a location where the CGI server can't find it, basically, more or
less. Please see the following for more information:
- http://www.perl.org/CGI_MetaFAQ.html
+ https://www.perl.org/CGI_MetaFAQ.html
http://www.htmlhelp.org/faq/cgifaq.html
http://www.w3.org/Security/Faq/
@@ -5958,11 +6014,6 @@ assignment or as a subroutine argument for example).
(P) Perl tried to force the upgrade of an SV to a type which was actually
inferior to its current type.
-=item SWASHNEW didn't return an HV ref
-
-(P) Something went wrong internally when Perl was trying to look up
-Unicode characters.
-
=item Switch (?(condition)... contains too many branches in regex; marked by
S<<-- HERE> in m/%s/
@@ -6089,12 +6140,6 @@ a dirhandle. Check your control flow.
(W unopened) You tried to use the tell() function on a filehandle that
was either never opened or has since been closed.
-=item The alpha_assertions feature is experimental
-
-(S experimental::alpha_assertions) This feature is experimental
-and its behavior may change in any future release of perl. See
-L<perlre/Extended Patterns>.
-
=item The crypt() function is unimplemented due to excessive paranoia.
(F) Configure couldn't find the crypt() function on your machine,
@@ -6133,12 +6178,6 @@ warning:
no warnings "experimental::regex_sets";
-=item The script_run feature is experimental
-
-(S experimental::script_run) This feature is experimental
-and its behavior may in any future release of perl. See
-L<perlre/Script Runs>.
-
=item The signatures feature is experimental
(S experimental::signatures) This warning is emitted if you unwrap a
@@ -6428,69 +6467,10 @@ C<undef *foo>.
(A) You've accidentally run your script through B<csh> instead of Perl.
Check the #! line, or manually feed your script into Perl yourself.
-=item Unescaped left brace in regex is passed through in regex; marked by S<<-- HERE> in m/%s/
-
-(W regexp) The simple rule to remember, if you want to
-match a literal C<"{"> character (U+007B C<LEFT CURLY BRACKET>) in a
-regular expression pattern, is to escape each literal instance of it in
-some way. Generally easiest is to precede it with a backslash, like
-C<"\{"> or enclose it in square brackets (C<"[{]">). If the pattern
-delimiters are also braces, any matching right brace (C<"}">) should
-also be escaped to avoid confusing the parser, for example,
-
- qr{abc\{def\}ghi}
-
-Forcing literal C<"{"> characters to be escaped will enable the Perl
-language to be extended in various ways in future releases. To avoid
-needlessly breaking existing code, the restriction is is not enforced in
-contexts where there are unlikely to ever be extensions that could
-conflict with the use there of C<"{"> as a literal. Those that are
-not potentially ambiguous do not warn; those that are do raise a
-non-deprecation warning.
-
-In this release of Perl, some literal uses of C<"{"> are fatal, and some
-still just deprecated. This is because of an oversight: some uses of a
-literal C<"{"> that should have raised a deprecation warning starting in
-v5.20 did not warn until v5.26. By making the already-warned uses fatal
-now, some of the planned extensions can be made to the language sooner.
-The cases which are still allowed will be fatal in Perl 5.32.
-
-The contexts where no warnings or errors are raised are:
-
-=over 4
-
-=item *
-
-as the first character in a pattern, or following C<"^"> indicating to
-anchor the match to the beginning of a line.
-
-=item *
-
-as the first character following a C<"|"> indicating alternation.
-
-=item *
-
-as the first character in a parenthesized grouping like
-
- /foo({bar)/
- /foo(?:{bar)/
-
-=item *
-
-as the first character following a quantifier
-
- /\s*{/
-
-=back
-
-=for comment
-The text of the message above is duplicated below to allow splain (and
-'use diagnostics') to work. Since one is deprecated, and one not, khw
-thinks they can't be combined as one message.
-
-=item Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through in regex; marked by S<<-- HERE> in m/%s/
+=item Unescaped left brace in regex is illegal here in regex;
+marked by S<<-- HERE> in m/%s/
-(D deprecated, regexp) The simple rule to remember, if you want to
+(F) The simple rule to remember, if you want to
match a literal C<"{"> character (U+007B C<LEFT CURLY BRACKET>) in a
regular expression pattern, is to escape each literal instance of it in
some way. Generally easiest is to precede it with a backslash, like
@@ -6500,21 +6480,14 @@ also be escaped to avoid confusing the parser, for example,
qr{abc\{def\}ghi}
-Forcing literal C<"{"> characters to be escaped will enable the Perl
+Forcing literal C<"{"> characters to be escaped enables the Perl
language to be extended in various ways in future releases. To avoid
-needlessly breaking existing code, the restriction is is not enforced in
+needlessly breaking existing code, the restriction is not enforced in
contexts where there are unlikely to ever be extensions that could
conflict with the use there of C<"{"> as a literal. Those that are
not potentially ambiguous do not warn; those that are do raise a
non-deprecation warning.
-In this release of Perl, some literal uses of C<"{"> are fatal, and some
-still just deprecated. This is because of an oversight: some uses of a
-literal C<"{"> that should have raised a deprecation warning starting in
-v5.20 did not warn until v5.26. By making the already-warned uses fatal
-now, some of the planned extensions can be made to the language sooner.
-The cases which are still allowed will be fatal in Perl 5.32.
-
The contexts where no warnings or errors are raised are:
=over 4
@@ -6544,15 +6517,14 @@ as the first character following a quantifier
=back
=for comment
-The text of the message above is duplicated below to allow splain (and
-'use diagnostics') to work. Since one is fatal, and one not, they can't
-be combined as one message. Perhaps perldiag could be enhanced to
-handle this case.
+The text of the message above is mostly duplicated below (with changes)
+to allow splain (and 'use diagnostics') to work. Since one is fatal,
+and one not, they can't be combined as one message. Perhaps perldiag
+could be enhanced to handle this case.
-=item Unescaped left brace in regex is illegal here in regex;
-marked by S<<-- HERE> in m/%s/
+=item Unescaped left brace in regex is passed through in regex; marked by S<<-- HERE> in m/%s/
-(F) The simple rule to remember, if you want to
+(W regexp) The simple rule to remember, if you want to
match a literal C<"{"> character (U+007B C<LEFT CURLY BRACKET>) in a
regular expression pattern, is to escape each literal instance of it in
some way. Generally easiest is to precede it with a backslash, like
@@ -6562,20 +6534,14 @@ also be escaped to avoid confusing the parser, for example,
qr{abc\{def\}ghi}
-Forcing literal C<"{"> characters to be escaped will enable the Perl
+Forcing literal C<"{"> characters to be escaped enables the Perl
language to be extended in various ways in future releases. To avoid
-needlessly breaking existing code, the restriction is is not enforced in
+needlessly breaking existing code, the restriction is not enforced in
contexts where there are unlikely to ever be extensions that could
conflict with the use there of C<"{"> as a literal. Those that are
-not potentially ambiguous do not warn; those that are do raise a
-non-deprecation warning.
-
-In this release of Perl, some literal uses of C<"{"> are fatal, and some
-still just deprecated. This is because of an oversight: some uses of a
-literal C<"{"> that should have raised a deprecation warning starting in
-v5.20 did not warn until v5.26. By making the already-warned uses fatal
-now, some of the planned extensions can be made to the language sooner.
-The cases which are still allowed will be fatal in Perl 5.32.
+not potentially ambiguous do not warn; those that are raise this
+warning. This makes sure that an inadvertent typo doesn't silently
+cause the pattern to compile to something unintended.
The contexts where no warnings or errors are raised are:
@@ -6720,6 +6686,15 @@ The closing delimtter to match the opening one was not found. If the
opening one is escaped by preceding it with a backslash, the closing one
must also be so escaped.
+=item Unicode string properties are not implemented in (?[...]) in
+regex; marked by <-- HERE in m/%s/
+
+(F) A Unicode string property is one which expands to a sequence of
+multiple characters. An example is C<\p{name=KATAKANA LETTER AINU P}>,
+which is comprised of the sequence C<\N{KATAKANA LETTER SMALL H}>
+followed by C<\N{COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK}>.
+Extended character classes, C<(?[...])> currently cannot handle these.
+
=item Unicode surrogate U+%X is illegal in UTF-8
(S surrogate) You had a UTF-16 surrogate in a context where they are
@@ -6827,13 +6802,15 @@ discovered. See L<perlre>.
=item Unknown Unicode option letter '%c'
-(F) You specified an unknown Unicode option. See L<perlrun> documentation
-of the C<-C> switch for the list of known options.
+(F) You specified an unknown Unicode option. See
+L<perlrun|perlrun/-C [numberE<sol>list]> documentation of the C<-C> switch
+for the list of known options.
=item Unknown Unicode option value %d
-(F) You specified an unknown Unicode option. See L<perlrun> documentation
-of the C<-C> switch for the list of known options.
+(F) You specified an unknown Unicode option. See
+L<perlrun|perlrun/-C [numberE<sol>list]> documentation of the C<-C> switch
+for the list of known options.
=item Unknown verb pattern '%s' in regex; marked by S<<-- HERE> in m/%s/
@@ -7224,9 +7201,9 @@ modifier is not presently meaningful in substitutions.
use the /g modifier. Currently, /c is meaningful only when /g is
used. (This may change in the future.)
-=item Use of code point 0x%s is not allowed; the permissible max is 0x%x
+=item Use of code point 0x%s is not allowed; the permissible max is 0x%X
-=item Use of code point 0x%s is not allowed; the permissible max is 0x%x
+=item Use of code point 0x%s is not allowed; the permissible max is 0x%X
in regex; marked by <-- HERE in m/%s/
(F) You used a code point that is not allowed, because it is too large.
@@ -7313,6 +7290,15 @@ This was deprecated in Perl 5.004, and was made fatal in Perl 5.28.
(F) You attempted to use a feature of printf that is accessible from
only C. This usually means there's a better way to do it in Perl.
+=item Use of %s is not allowed in Unicode property wildcard
+subpatterns in regex; marked by S<<-- HERE> in m/%s/
+
+(F) You were using a wildcard subpattern a Unicode property value, and
+the subpattern contained something that is illegal. Not all regular
+expression capabilities are legal in such subpatterns, and this is one.
+Rewrite your subppattern to not use the offending construct.
+See L<perlunicode/Wildcards in Property Values>.
+
=item Use of -l on filehandle%s
(W io) A filehandle represents an opened file, and when you opened the file
@@ -7338,15 +7324,14 @@ C<~>) on a string containing a code point over 0xFF. The string bitwise
operators treat their operands as strings of bytes, and values beyond
0xFF are nonsensical in this context.
-This became fatal in Perl 5.28.
+Certain instances became fatal in Perl 5.28; others in perl 5.32.
-=item Use of strings with code points over 0xFF as arguments to C<vec>
-is deprecated. This will be a fatal error in Perl 5.32
+=item Use of strings with code points over 0xFF as arguments to vec is forbidden
-(D deprecated) You tried to use L<C<vec>|perlfunc/vec EXPR,OFFSET,BITS>
+(F) You tried to use L<C<vec>|perlfunc/vec EXPR,OFFSET,BITS>
on a string containing a code point over 0xFF, which is nonsensical here.
-Such usage will be a fatal error in Perl 5.32.
+This became fatal in Perl 5.32.
=item Use of tainted arguments in %s is deprecated
@@ -7433,6 +7418,22 @@ a range. For these, what should happen isn't clear at all. In
these circumstances, Perl discards all but the first character
of the returned sequence, which is not likely what you want.
+=item Using just the single character results returned by \p{} in
+(?[...]) in regex; marked by S<<-- HERE> in m/%s/
+
+(W regexp) Extended character classes currently cannot handle operands
+that evaluate to more than one character. These are removed from the
+results of the expansion of the C<\p{}>.
+
+This situation can happen, for example, in
+
+ (?[ \p{name=/KATAKANA/} ])
+
+"KATAKANA LETTER AINU P" is a legal Unicode name (technically a "named
+sequence"), but it is actually two characters. The above expression
+with match only the Unicode names containing KATAKANA that represent
+single characters.
+
=item Using /u for '%s' instead of /%s in regex; marked by S<<-- HERE> in m/%s/
(W regexp) You used a Unicode boundary (C<\b{...}> or C<\B{...}>) in a
@@ -7727,6 +7728,18 @@ can be determined from the template alone. This is not possible if
it contains any of the codes @, /, U, u, w or a *-length. Redesign
the template.
+=item While trying to resolve method call %s->%s() can not locate package "%s" yet it is mentioned in @%s::ISA (perhaps you forgot to load "%s"?)
+
+(W syntax) It is possible that the C<@ISA> contains a misspelled or never loaded
+package name, which can result in perl choosing an unexpected parent
+class's method to resolve the method call. If this is deliberate you
+can do something like
+
+ @Missing::Package::ISA = ();
+
+to silence the warnings, otherwise you should correct the package name, or
+ensure that the package is loaded prior to the method call.
+
=item %s() with negative argument
(S misc) Certain operations make no sense with negative arguments.
diff --git a/gnu/usr.bin/perl/pod/perldtrace.pod b/gnu/usr.bin/perl/pod/perldtrace.pod
index 2b603517f65..e0280d2973a 100644
--- a/gnu/usr.bin/perl/pod/perldtrace.pod
+++ b/gnu/usr.bin/perl/pod/perldtrace.pod
@@ -214,7 +214,7 @@ L<http://dtrace.org/guide/preface.html>
=item DTrace: Dynamic Tracing in Oracle Solaris, Mac OS X and FreeBSD
-L<http://www.amazon.com/DTrace-Dynamic-Tracing-Solaris-FreeBSD/dp/0132091518/>
+L<https://www.amazon.com/DTrace-Dynamic-Tracing-Solaris-FreeBSD/dp/0132091518/>
=back
diff --git a/gnu/usr.bin/perl/pod/perlebcdic.pod b/gnu/usr.bin/perl/pod/perlebcdic.pod
index 3f5fc2cf91c..0e0ab8bd87f 100644
--- a/gnu/usr.bin/perl/pod/perlebcdic.pod
+++ b/gnu/usr.bin/perl/pod/perlebcdic.pod
@@ -254,7 +254,7 @@ extensions are constructed to allow encoding of any code point that fits
in a 64-bit word.
UTF-EBCDIC is defined by
-L<Unicode Technical Report #16|http://www.unicode.org/reports/tr16>
+L<Unicode Technical Report #16|https://www.unicode.org/reports/tr16>
(often referred to as just TR16).
It is defined based on CCSID 1047, not allowing for the differences for
other code pages. This allows for easy interchange of text between
@@ -1877,9 +1877,9 @@ L<perllocale>, L<perlfunc>, L<perlunicode>, L<utf8>.
L<http://anubis.dkuug.dk/i18n/charmaps>
-L<http://www.unicode.org/>
+L<https://www.unicode.org/>
-L<http://www.unicode.org/unicode/reports/tr16/>
+L<https://www.unicode.org/unicode/reports/tr16/>
L<http://www.wps.com/projects/codes/>
B<ASCII: American Standard Code for Information Infiltration> Tom Jennings,
diff --git a/gnu/usr.bin/perl/pod/perlembed.pod b/gnu/usr.bin/perl/pod/perlembed.pod
index d6391f7a26f..88cb810cc79 100644
--- a/gnu/usr.bin/perl/pod/perlembed.pod
+++ b/gnu/usr.bin/perl/pod/perlembed.pod
@@ -161,7 +161,7 @@ you:
If the B<ExtUtils::Embed> module isn't part of your Perl distribution,
you can retrieve it from
-L<http://www.perl.com/perl/CPAN/modules/by-module/ExtUtils/>
+L<https://metacpan.org/pod/ExtUtils::Embed>
(If this documentation came from your Perl distribution, then you're
running 5.004 or better and you already have it.)
diff --git a/gnu/usr.bin/perl/pod/perlexperiment.pod b/gnu/usr.bin/perl/pod/perlexperiment.pod
index 6544926eda8..2bf2e85b1bb 100644
--- a/gnu/usr.bin/perl/pod/perlexperiment.pod
+++ b/gnu/usr.bin/perl/pod/perlexperiment.pod
@@ -26,12 +26,12 @@ Using this feature triggers warnings in the category
C<experimental::smartmatch>.
The ticket for this feature is
-L<[perl #119317]|https://rt.perl.org/rt3/Ticket/Display.html?id=119317>.
+L<[perl #13173]|https://github.com/Perl/perl5/issues/13173>.
=item Pluggable keywords
The ticket for this feature is
-L<[perl #119455]|https://rt.perl.org/rt3/Ticket/Display.html?id=119455>.
+L<[perl #13199]|https://github.com/Perl/perl5/issues/13199>.
See L<perlapi/PL_keyword_plugin> for the mechanism.
@@ -42,7 +42,7 @@ Introduced in Perl 5.11.2
Introduced in Perl 5.18
The ticket for this feature is
-L<[perl #119451]|https://rt.perl.org/rt3/Ticket/Display.html?id=119451>.
+L<[perl #13197]|https://github.com/Perl/perl5/issues/13197>.
See also: L<perlrecharclass/Extended Bracketed Character Classes>
@@ -57,7 +57,7 @@ Using this feature triggers warnings in the category
C<experimental::signatures>.
The ticket for this feature is
-L<[perl #121481]|https://rt.perl.org/Ticket/Display.html?id=121481>.
+L<[perl #13681]|https://github.com/Perl/perl5/issues/13681>.
=item Aliasing via reference
@@ -67,7 +67,7 @@ Using this feature triggers warnings in the category
C<experimental::refaliasing>.
The ticket for this feature is
-L<[perl #122947]|https://rt.perl.org/rt3/Ticket/Display.html?id=122947>.
+L<[perl #14150]|https://github.com/Perl/perl5/issues/14150>.
See also: L<perlref/Assigning to References>
@@ -79,7 +79,7 @@ Using this feature triggers warnings in the category
C<experimental::const_attr>.
The ticket for this feature is
-L<[perl #123630]|https://rt.perl.org/rt3/Ticket/Display.html?id=123630>.
+L<[perl #14428]|https://github.com/Perl/perl5/issues/14428>.
See also: L<perlsub/Constant Functions>
@@ -95,9 +95,9 @@ See L<re/'strict' mode>
=item The <:win32> IO pseudolayer
The ticket for this feature is
-L<[perl #119453]|https://rt.perl.org/rt3/Ticket/Display.html?id=119453>.
+L<[perl #13198]|https://github.com/Perl/perl5/issues/13198>.
-See also L<perlrun>
+See also L<perlrun/PERLIO>
=item Declaring a reference to a variable
@@ -107,34 +107,25 @@ Using this feature triggers warnings in the category
C<experimental::declared_refs>.
The ticket for this feature is
-L<[perl #128654]|https://rt.perl.org/rt3/Ticket/Display.html?id=128654>.
+L<[perl #15458]|https://github.com/Perl/perl5/issues/15458>.
See also: L<perlref/Declaring a Reference to a Variable>
=item There is an C<installhtml> target in the Makefile.
The ticket for this feature is
-L<[perl #116487]|https://rt.perl.org/rt3/Ticket/Display.html?id=116487>.
+L<[perl #12726]|https://github.com/Perl/perl5/issues/12726>.
-=item Unicode in Perl on EBCDIC
+=item (Limited) Variable-length look-behind
-=item Script runs
-
-Introduced in Perl 5.28.0
-
-Using this feature triggers warnings in the category
-C<experimental::script_run>.
-
-See also: L<perlre/Script Runs>
-
-=item Alphabetic assertions
-
-Introduced in Perl 5.28.0
+Introduced in Perl 5.30.0. Variability of up to 255 characters is
+handled.
Using this feature triggers warnings in the category
-C<experimental::alpha_assertions>.
+C<experimental::vlb>.
-See also: L<perlre/Extended Patterns>.
+See also: L<perlre/(*positive_lookbehind:I<pattern>)> and
+L<perlre/(*negative_lookbehind:I<pattern>)>
=back
@@ -232,7 +223,7 @@ Accepted in Perl 5.20.0
=item The <:pop> IO pseudolayer
-See also L<perlrun>
+See also L<perlrun/PERLIO>
Accepted in Perl 5.20.0
@@ -258,6 +249,18 @@ Introduced in Perl 5.22.0
Accepted in Perl 5.28.0
+=item Alphabetic assertions
+
+Introduced in Perl 5.28.0
+
+Accepted in Perl 5.32.0
+
+=item Script runs
+
+Introduced in Perl 5.28.0
+
+Accepted in Perl 5.32.0
+
=back
=head2 Removed features
diff --git a/gnu/usr.bin/perl/pod/perlfilter.pod b/gnu/usr.bin/perl/pod/perlfilter.pod
index 60d086401cf..0744e29f8d1 100644
--- a/gnu/usr.bin/perl/pod/perlfilter.pod
+++ b/gnu/usr.bin/perl/pod/perlfilter.pod
@@ -294,6 +294,9 @@ becomes M.)
1;
+=for apidoc filter_add
+=for apidoc filter_read
+
All Perl source filters are implemented as Perl classes and have the
same basic structure as the example above.
@@ -567,7 +570,7 @@ code chunks beginning with the division operator C</>. As a workaround
you must use C<m/.../> or C<m?...?> for such patterns. Also, the presence of
regexes specified with raw C<?...?> delimiters may cause mysterious
errors. The workaround is to use C<m?...?> instead. See
-L<http://search.cpan.org/perldoc?Switch#LIMITATIONS>
+L<https://search.cpan.org/perldoc?Switch#LIMITATIONS>
Currently the content of the C<__DATA__> block is not filtered.
diff --git a/gnu/usr.bin/perl/pod/perlfunc.pod b/gnu/usr.bin/perl/pod/perlfunc.pod
index 196a88d71f7..e95c54f4252 100644
--- a/gnu/usr.bin/perl/pod/perlfunc.pod
+++ b/gnu/usr.bin/perl/pod/perlfunc.pod
@@ -242,7 +242,7 @@ L<C<chroot>|/chroot FILENAME>,
L<C<fcntl>|/fcntl FILEHANDLE,FUNCTION,SCALAR>, L<C<glob>|/glob EXPR>,
L<C<ioctl>|/ioctl FILEHANDLE,FUNCTION,SCALAR>,
L<C<link>|/link OLDFILE,NEWFILE>, L<C<lstat>|/lstat FILEHANDLE>,
-L<C<mkdir>|/mkdir FILENAME,MODE>, L<C<open>|/open FILEHANDLE,EXPR>,
+L<C<mkdir>|/mkdir FILENAME,MODE>, L<C<open>|/open FILEHANDLE,MODE,EXPR>,
L<C<opendir>|/opendir DIRHANDLE,EXPR>, L<C<readlink>|/readlink EXPR>,
L<C<rename>|/rename OLDNAME,NEWNAME>, L<C<rmdir>|/rmdir FILENAME>,
L<C<select>|/select FILEHANDLE>, L<C<stat>|/stat FILEHANDLE>,
@@ -471,7 +471,7 @@ L<C<kill>|/kill SIGNAL, LIST>, L<C<link>|/link OLDFILE,NEWFILE>,
L<C<lstat>|/lstat FILEHANDLE>, L<C<msgctl>|/msgctl ID,CMD,ARG>,
L<C<msgget>|/msgget KEY,FLAGS>,
L<C<msgrcv>|/msgrcv ID,VAR,SIZE,TYPE,FLAGS>,
-L<C<msgsnd>|/msgsnd ID,MSG,FLAGS>, L<C<open>|/open FILEHANDLE,EXPR>,
+L<C<msgsnd>|/msgsnd ID,MSG,FLAGS>, L<C<open>|/open FILEHANDLE,MODE,EXPR>,
L<C<pipe>|/pipe READHANDLE,WRITEHANDLE>, L<C<readlink>|/readlink EXPR>,
L<C<rename>|/rename OLDNAME,NEWNAME>,
L<C<select>|/select RBITS,WBITS,EBITS,TIMEOUT>,
@@ -818,8 +818,8 @@ translation and marking it as bytes (as opposed to Unicode characters).
Note that, despite what may be implied in I<"Programming Perl"> (the
Camel, 3rd edition) or elsewhere, C<:raw> is I<not> simply the inverse of C<:crlf>.
Other layers that would affect the binary nature of the stream are
-I<also> disabled. See L<PerlIO>, L<perlrun>, and the discussion about the
-PERLIO environment variable.
+I<also> disabled. See L<PerlIO>, and the discussion about the PERLIO
+environment variable in L<perlrun|perlrun/PERLIO>.
The C<:bytes>, C<:crlf>, C<:utf8>, and any other directives of the
form C<:...>, are called I/O I<layers>. The L<open> pragma can be used to
@@ -839,7 +839,7 @@ while C<:encoding(UTF-8)> checks the data for actually being valid
UTF-8. More details can be found in L<PerlIO::encoding>.
In general, L<C<binmode>|/binmode FILEHANDLE, LAYER> should be called
-after L<C<open>|/open FILEHANDLE,EXPR> but before any I/O is done on the
+after L<C<open>|/open FILEHANDLE,MODE,EXPR> but before any I/O is done on the
filehandle. Calling L<C<binmode>|/binmode FILEHANDLE, LAYER> normally
flushes any pending buffered output data (and perhaps pending input
data) on the handle. An exception to this is the C<:encoding> layer
@@ -947,6 +947,10 @@ list context, caller returns
# 0 1 2
my ($package, $filename, $line) = caller;
+Like L<C<__FILE__>|/__FILE__> and L<C<__LINE__>|/__LINE__>, the filename and
+line number returned here may be altered by the mechanism described at
+L<perlsyn/"Plain Old Comments (Not!)">.
+
With EXPR, it returns some extra information that the debugger uses to
print a stack trace. The value of EXPR indicates how many call frames
to go back before the current one.
@@ -1228,9 +1232,10 @@ change your current working directory, which is unaffected.) For security
reasons, this call is restricted to the superuser. If FILENAME is
omitted, does a L<C<chroot>|/chroot FILENAME> to L<C<$_>|perlvar/$_>.
-B<NOTE:> It is good security practice to do C<chdir("/")>
+B<NOTE:> It is mandatory for security to C<chdir("/")>
(L<C<chdir>|/chdir EXPR> to the root directory) immediately after a
-L<C<chroot>|/chroot FILENAME>.
+L<C<chroot>|/chroot FILENAME>, otherwise the current working directory
+may be outside of the new root.
Portability issues: L<perlport/chroot>.
@@ -1248,12 +1253,12 @@ layer. Closes the currently selected filehandle if the argument is
omitted.
You don't have to close FILEHANDLE if you are immediately going to do
-another L<C<open>|/open FILEHANDLE,EXPR> on it, because
-L<C<open>|/open FILEHANDLE,EXPR> closes it for you. (See
-L<C<open>|/open FILEHANDLE,EXPR>.) However, an explicit
+another L<C<open>|/open FILEHANDLE,MODE,EXPR> on it, because
+L<C<open>|/open FILEHANDLE,MODE,EXPR> closes it for you. (See
+L<C<open>|/open FILEHANDLE,MODE,EXPR>.) However, an explicit
L<C<close>|/close FILEHANDLE> on an input file resets the line counter
(L<C<$.>|perlvar/$.>), while the implicit close done by
-L<C<open>|/open FILEHANDLE,EXPR> does not.
+L<C<open>|/open FILEHANDLE,MODE,EXPR> does not.
If the filehandle came from a piped open, L<C<close>|/close FILEHANDLE>
returns false if one of the other syscalls involved fails or if its
@@ -1476,7 +1481,7 @@ L<C<tie>|/tie VARIABLE,CLASSNAME,LIST> function.]
This binds a L<dbm(3)>, L<ndbm(3)>, L<sdbm(3)>, L<gdbm(3)>, or Berkeley
DB file to a hash. HASH is the name of the hash. (Unlike normal
-L<C<open>|/open FILEHANDLE,EXPR>, the first argument is I<not> a
+L<C<open>|/open FILEHANDLE,MODE,EXPR>, the first argument is I<not> a
filehandle, even though it looks like one). DBNAME is the name of the
database (without the F<.dir> or F<.pag> extension if any). If the
database does not exist, it is created with protection specified by MASK
@@ -1908,7 +1913,7 @@ X<dump> X<core> X<undump>
=for Pod::Functions create an immediate core dump
This function causes an immediate core dump. See also the B<-u>
-command-line switch in L<perlrun>, which does the same thing.
+command-line switch in L<perlrun|perlrun/-u>, which does the same thing.
Primarily this is so that you can use the B<undump> program (not
supplied) to turn your core dump into an executable binary after
having initialized all your variables at the beginning of the
@@ -2306,7 +2311,7 @@ Examples:
If you want to trap errors when loading an XS module, some problems with
the binary interface (such as Perl version skew) may be fatal even with
C<eval> unless C<$ENV{PERL_DL_NONLAZY}> is set. See
-L<perlrun>.
+L<perlrun|perlrun/PERL_DL_NONLAZY>.
Using the C<eval {}> form as an exception trap in libraries does have some
issues. Due to the current arguably broken state of C<__DIE__> hooks, you
@@ -2620,8 +2625,8 @@ L<Unicode::UCD/B<prop_invmap()>>.
For further information on casefolding, refer to
the Unicode Standard, specifically sections 3.13 C<Default Case Operations>,
4.2 C<Case-Normative>, and 5.18 C<Case Mappings>,
-available at L<http://www.unicode.org/versions/latest/>, as well as the
-Case Charts available at L<http://www.unicode.org/charts/case/>.
+available at L<https://www.unicode.org/versions/latest/>, as well as the
+Case Charts available at L<https://www.unicode.org/charts/case/>.
If EXPR is omitted, uses L<C<$_>|perlvar/$_>.
@@ -2700,6 +2705,8 @@ X<__FILE__>
=for Pod::Functions the name of the current source file
A special token that returns the name of the file in which it occurs.
+It can be altered by the mechanism described at
+L<perlsyn/"Plain Old Comments (Not!)">.
=item fileno FILEHANDLE
X<fileno>
@@ -2712,7 +2719,7 @@ Returns the file descriptor for a filehandle or directory handle,
or undefined if the
filehandle is not open. If there is no real file descriptor at the OS
level, as can happen with filehandles connected to memory objects via
-L<C<open>|/open FILEHANDLE,EXPR> with a reference for the third
+L<C<open>|/open FILEHANDLE,MODE,EXPR> with a reference for the third
argument, -1 is returned.
This is mainly useful for constructing bitmaps for
@@ -3954,6 +3961,8 @@ X<__LINE__>
=for Pod::Functions the current source line number
A special token that compiles to the current line number.
+It can be altered by the mechanism described at
+L<perlsyn/"Plain Old Comments (Not!)">.
=item link OLDFILE,NEWFILE
X<link>
@@ -4435,46 +4444,84 @@ Leading white space is ignored without warning, as too are any trailing
non-digits, such as a decimal point (L<C<oct>|/oct EXPR> only handles
non-negative integers, not negative integers or floating point).
-=item open FILEHANDLE,EXPR
-X<open> X<pipe> X<file, open> X<fopen>
-
=item open FILEHANDLE,MODE,EXPR
+X<open> X<pipe> X<file, open> X<fopen>
=item open FILEHANDLE,MODE,EXPR,LIST
=item open FILEHANDLE,MODE,REFERENCE
+=item open FILEHANDLE,EXPR
+
=item open FILEHANDLE
=for Pod::Functions open a file, pipe, or descriptor
-Opens the file whose filename is given by EXPR, and associates it with
-FILEHANDLE.
+Associates an internal FILEHANDLE with the external file specified by
+EXPR. That filehandle will subsequently allow you to perform
+I/O operations on that file, such as reading from it or writing to it.
+
+Instead of a filename, you may specify an external command
+(plus an optional argument list) or a scalar reference, in order to open
+filehandles on commands or in-memory scalars, respectively.
+
+A thorough reference to C<open> follows. For a gentler introduction to
+the basics of C<open>, see also the L<perlopentut> manual page.
+
+=over
+
+=item Working with files
+
+Most often, C<open> gets invoked with three arguments: the required
+FILEHANDLE (usually an empty scalar variable), followed by MODE (usually
+a literal describing the I/O mode the filehandle will use), and then the
+filename that the new filehandle will refer to.
+
+=over
-Simple examples to open a file for reading:
+=item Simple examples
+
+Reading from a file:
open(my $fh, "<", "input.txt")
- or die "Can't open < input.txt: $!";
+ or die "Can't open < input.txt: $!";
+
+ # Process every line in input.txt
+ while (my $line = <$fh>) {
+ #
+ # ... do something interesting with $line here ...
+ #
+ }
-and for writing:
+or writing to one:
open(my $fh, ">", "output.txt")
- or die "Can't open > output.txt: $!";
-
-(The following is a comprehensive reference to
-L<C<open>|/open FILEHANDLE,EXPR>: for a gentler introduction you may
-consider L<perlopentut>.)
-
-If FILEHANDLE is an undefined scalar variable (or array or hash element), a
-new filehandle is autovivified, meaning that the variable is assigned a
-reference to a newly allocated anonymous filehandle. Otherwise if
-FILEHANDLE is an expression, its value is the real filehandle. (This is
-considered a symbolic reference, so C<use strict "refs"> should I<not> be
-in effect.)
-
-If three (or more) arguments are specified, the open mode (including
-optional encoding) in the second argument are distinct from the filename in
-the third. If MODE is C<< < >> or nothing, the file is opened for input.
+ or die "Can't open > output.txt: $!";
+
+ print $fh "This line gets printed into output.txt.\n";
+
+For a summary of common filehandle operations such as these, see
+L<perlintro/Files and I/O>.
+
+=item About filehandles
+
+The first argument to C<open>, labeled FILEHANDLE in this reference, is
+usually a scalar variable. (Exceptions exist, described in "Other
+considerations", below.) If the call to C<open> succeeds, then the
+expression provided as FILEHANDLE will get assigned an open
+I<filehandle>. That filehandle provides an internal reference to the
+specified external file, conveniently stored in a Perl variable, and
+ready for I/O operations such as reading and writing.
+
+=item About modes
+
+When calling C<open> with three or more arguments, the second argument
+-- labeled MODE here -- defines the I<open mode>. MODE is usually a
+literal string comprising special characters that define the intended
+I/O role of the filehandle being created: whether it's read-only, or
+read-and-write, and so on.
+
+If MODE is C<< < >>, the file is opened for input (read-only).
If MODE is C<< > >>, the file is opened for output, with existing files
first being truncated ("clobbered") and nonexisting files newly created.
If MODE is C<<< >> >>>, the file is opened for appending, again being
@@ -4485,60 +4532,57 @@ indicate that you want both read and write access to the file; thus
C<< +< >> is almost always preferred for read/write updates--the
C<< +> >> mode would clobber the file first. You can't usually use
either read-write mode for updating textfiles, since they have
-variable-length records. See the B<-i> switch in L<perlrun> for a
-better approach. The file is created with permissions of C<0666>
-modified by the process's L<C<umask>|/umask EXPR> value.
+variable-length records. See the B<-i> switch in
+L<perlrun|perlrun/-i[extension]> for a better approach. The file is
+created with permissions of C<0666> modified by the process's
+L<C<umask>|/umask EXPR> value.
These various prefixes correspond to the L<fopen(3)> modes of C<r>,
C<r+>, C<w>, C<w+>, C<a>, and C<a+>.
-In the one- and two-argument forms of the call, the mode and filename
-should be concatenated (in that order), preferably separated by white
-space. You can--but shouldn't--omit the mode in these forms when that mode
-is C<< < >>. It is safe to use the two-argument form of
-L<C<open>|/open FILEHANDLE,EXPR> if the filename argument is a known literal.
+More examples of different modes in action:
-For three or more arguments if MODE is C<|->, the filename is
-interpreted as a command to which output is to be piped, and if MODE
-is C<-|>, the filename is interpreted as a command that pipes
-output to us. In the two-argument (and one-argument) form, one should
-replace dash (C<->) with the command.
-See L<perlipc/"Using open() for IPC"> for more examples of this.
-(You are not allowed to L<C<open>|/open FILEHANDLE,EXPR> to a command
-that pipes both in I<and> out, but see L<IPC::Open2>, L<IPC::Open3>, and
-L<perlipc/"Bidirectional Communication with Another Process"> for
-alternatives.)
+ # Open a file for concatenation
+ open(my $log, ">>", "/usr/spool/news/twitlog")
+ or warn "Couldn't open log file; discarding input";
-In the form of pipe opens taking three or more arguments, if LIST is specified
-(extra arguments after the command name) then LIST becomes arguments
-to the command invoked if the platform supports it. The meaning of
-L<C<open>|/open FILEHANDLE,EXPR> with more than three arguments for
-non-pipe modes is not yet defined, but experimental "layers" may give
-extra LIST arguments meaning.
+ # Open a file for reading and writing
+ open(my $dbase, "+<", "dbase.mine")
+ or die "Can't open 'dbase.mine' for update: $!";
-In the two-argument (and one-argument) form, opening C<< <- >>
-or C<-> opens STDIN and opening C<< >- >> opens STDOUT.
+=item Checking the return value
+
+Open returns nonzero on success, the undefined value otherwise. If the
+C<open> involved a pipe, the return value happens to be the pid of the
+subprocess.
+
+When opening a file, it's seldom a good idea to continue if the request
+failed, so C<open> is frequently used with L<C<die>|/die LIST>. Even if
+you want your code to do something other than C<die> on a failed open,
+you should still always check the return value from opening a file.
+
+=back
+
+=item Specifying I/O layers in MODE
-You may (and usually should) use the three-argument form of open to specify
-I/O layers (sometimes referred to as "disciplines") to apply to the handle
-that affect how the input and output are processed (see L<open> and
+You can use the three-argument form of open to specify
+I/O layers (sometimes referred to as "disciplines") to apply to the new
+filehandle. These affect how the input and output are processed (see
+L<open> and
L<PerlIO> for more details). For example:
- open(my $fh, "<:encoding(UTF-8)", $filename)
- || die "Can't open UTF-8 encoded $filename: $!";
+ open(my $fh, "<:encoding(UTF-8)", $filename)
+ || die "Can't open UTF-8 encoded $filename: $!";
-opens the UTF8-encoded file containing Unicode characters;
+This opens the UTF8-encoded file containing Unicode characters;
see L<perluniintro>. Note that if layers are specified in the
-three-argument form, then default layers stored in ${^OPEN} (see L<perlvar>;
-usually set by the L<open> pragma or the switch C<-CioD>) are ignored.
+three-argument form, then default layers stored in
+L<C<${^OPEN}>|perlvar/${^OPEN}>
+(usually set by the L<open> pragma or the switch C<-CioD>) are ignored.
Those layers will also be ignored if you specify a colon with no name
following it. In that case the default layer for the operating system
(:raw on Unix, :crlf on Windows) is used.
-Open returns nonzero on success, the undefined value otherwise. If
-the L<C<open>|/open FILEHANDLE,EXPR> involved a pipe, the return value
-happens to be the pid of the subprocess.
-
On some systems (in general, DOS- and Windows-based systems)
L<C<binmode>|/binmode FILEHANDLE, LAYER> is necessary when you're not
working with a text file. For the sake of portability it is a good idea
@@ -4546,41 +4590,7 @@ always to use it when appropriate, and never to use it when it isn't
appropriate. Also, people can set their I/O to be by default
UTF8-encoded Unicode, not bytes.
-When opening a file, it's seldom a good idea to continue
-if the request failed, so L<C<open>|/open FILEHANDLE,EXPR> is frequently
-used with L<C<die>|/die LIST>. Even if L<C<die>|/die LIST> won't do
-what you want (say, in a CGI script,
-where you want to format a suitable error message (but there are
-modules that can help with that problem)) always check
-the return value from opening a file.
-
-The filehandle will be closed when its reference count reaches zero.
-If it is a lexically scoped variable declared with L<C<my>|/my VARLIST>,
-that usually
-means the end of the enclosing scope. However, this automatic close
-does not check for errors, so it is better to explicitly close
-filehandles, especially those used for writing:
-
- close($handle)
- || warn "close failed: $!";
-
-An older style is to use a bareword as the filehandle, as
-
- open(FH, "<", "input.txt")
- or die "Can't open < input.txt: $!";
-
-Then you can use C<FH> as the filehandle, in C<< close FH >> and C<<
-<FH> >> and so on. Note that it's a global variable, so this form is
-not recommended in new code.
-
-As a shortcut a one-argument call takes the filename from the global
-scalar variable of the same name as the filehandle:
-
- $ARTICLE = 100;
- open(ARTICLE) or die "Can't find article $ARTICLE: $!\n";
-
-Here C<$ARTICLE> must be a global (package) scalar variable - not one
-declared with L<C<my>|/my VARLIST> or L<C<state>|/state VARLIST>.
+=item Using C<undef> for temporary files
As a special case the three-argument form with a read/write mode and the third
argument being L<C<undef>|/undef EXPR>:
@@ -4592,11 +4602,16 @@ opens a filehandle to a newly created empty anonymous temporary file.
sensible mode to use.) You will need to
L<C<seek>|/seek FILEHANDLE,POSITION,WHENCE> to do the reading.
-Perl is built using PerlIO by default. Unless you've
-changed this (such as building Perl with C<Configure -Uuseperlio>), you can
-open filehandles directly to Perl scalars via:
- open(my $fh, ">", \$variable) || ..
+=item Opening a filehandle into an in-memory scalar
+
+You can open filehandles directly to Perl scalars instead of a file or
+other resource external to the program. To do so, provide a reference to
+that scalar as the third argument to C<open>, like so:
+
+ open(my $memory, ">", \$var)
+ or die "Can't open memory file: $!";
+ print $memory "foo!\n"; # output will appear in $var
To (re)open C<STDOUT> or C<STDERR> as an in-memory file, close it first:
@@ -4611,18 +4626,28 @@ any code points over 0xFF.
Opening in-memory files I<can> fail for a variety of reasons. As with
any other C<open>, check the return value for success.
+I<Technical note>: This feature works only when Perl is built with
+PerlIO -- the default, except with older (pre-5.16) Perl installations
+that were configured to not include it (e.g. via C<Configure
+-Uuseperlio>). You can see whether your Perl was built with PerlIO by
+running C<perl -V:useperlio>. If it says C<'define'>, you have PerlIO;
+otherwise you don't.
+
See L<perliol> for detailed info on PerlIO.
-General examples:
+=item Opening a filehandle into a command
- open(my $log, ">>", "/usr/spool/news/twitlog");
- # if the open fails, output is discarded
+If MODE is C<|->, then the filename is
+interpreted as a command to which output is to be piped, and if MODE
+is C<-|>, the filename is interpreted as a command that pipes
+output to us. In the two-argument (and one-argument) form, one should
+replace dash (C<->) with the command.
+See L<perlipc/"Using open() for IPC"> for more examples of this.
+(You are not allowed to L<C<open>|/open FILEHANDLE,MODE,EXPR> to a command
+that pipes both in I<and> out, but see L<IPC::Open2>, L<IPC::Open3>, and
+L<perlipc/"Bidirectional Communication with Another Process"> for
+alternatives.)
- open(my $dbase, "+<", "dbase.mine") # open for update
- or die "Can't open 'dbase.mine' for update: $!";
-
- open(my $dbase, "+<dbase.mine") # ditto
- or die "Can't open 'dbase.mine' for update: $!";
open(my $article_fh, "-|", "caesar <$article") # decrypt
# article
@@ -4634,10 +4659,80 @@ General examples:
open(my $out_fh, "|-", "sort >Tmp$$") # $$ is our process id
or die "Can't start sort: $!";
- # in-memory files
- open(my $memory, ">", \$var)
- or die "Can't open memory file: $!";
- print $memory "foo!\n"; # output will appear in $var
+
+In the form of pipe opens taking three or more arguments, if LIST is specified
+(extra arguments after the command name) then LIST becomes arguments
+to the command invoked if the platform supports it. The meaning of
+L<C<open>|/open FILEHANDLE,MODE,EXPR> with more than three arguments for
+non-pipe modes is not yet defined, but experimental "layers" may give
+extra LIST arguments meaning.
+
+If you open a pipe on the command C<-> (that is, specify either C<|-> or C<-|>
+with the one- or two-argument forms of
+L<C<open>|/open FILEHANDLE,MODE,EXPR>), an implicit L<C<fork>|/fork> is done,
+so L<C<open>|/open FILEHANDLE,MODE,EXPR> returns twice: in the parent process
+it returns the pid
+of the child process, and in the child process it returns (a defined) C<0>.
+Use C<defined($pid)> or C<//> to determine whether the open was successful.
+
+For example, use either
+
+ my $child_pid = open(my $from_kid, "-|")
+ // die "Can't fork: $!";
+
+or
+
+ my $child_pid = open(my $to_kid, "|-")
+ // die "Can't fork: $!";
+
+followed by
+
+ if ($child_pid) {
+ # am the parent:
+ # either write $to_kid or else read $from_kid
+ ...
+ waitpid $child_pid, 0;
+ } else {
+ # am the child; use STDIN/STDOUT normally
+ ...
+ exit;
+ }
+
+The filehandle behaves normally for the parent, but I/O to that
+filehandle is piped from/to the STDOUT/STDIN of the child process.
+In the child process, the filehandle isn't opened--I/O happens from/to
+the new STDOUT/STDIN. Typically this is used like the normal
+piped open when you want to exercise more control over just how the
+pipe command gets executed, such as when running setuid and
+you don't want to have to scan shell commands for metacharacters.
+
+The following blocks are more or less equivalent:
+
+ open(my $fh, "|tr '[a-z]' '[A-Z]'");
+ open(my $fh, "|-", "tr '[a-z]' '[A-Z]'");
+ open(my $fh, "|-") || exec 'tr', '[a-z]', '[A-Z]';
+ open(my $fh, "|-", "tr", '[a-z]', '[A-Z]');
+
+ open(my $fh, "cat -n '$file'|");
+ open(my $fh, "-|", "cat -n '$file'");
+ open(my $fh, "-|") || exec "cat", "-n", $file;
+ open(my $fh, "-|", "cat", "-n", $file);
+
+The last two examples in each block show the pipe as "list form", which
+is not yet supported on all platforms. (If your platform has a real
+L<C<fork>|/fork>, such as Linux and macOS, you can use the list form; it
+also works on Windows with Perl 5.22 or later.) You would want to use
+the list form of the pipe so you can pass literal arguments to the
+command without risk of the shell interpreting any shell metacharacters
+in them. However, this also bars you from opening pipes to commands that
+intentionally contain shell metacharacters, such as:
+
+ open(my $fh, "|cat -n | expand -4 | lpr")
+ || die "Can't open pipeline to lpr: $!";
+
+See L<perlipc/"Safe Pipe Opens"> for more examples of this.
+
+=item Duping filehandles
You may also, in the Bourne shell tradition, specify an EXPR beginning
with C<< >& >>, in which case the rest of the string is interpreted
@@ -4654,11 +4749,15 @@ Here is a script that saves, redirects, and restores C<STDOUT> and
C<STDERR> using various methods:
#!/usr/bin/perl
- open(my $oldout, ">&STDOUT") or die "Can't dup STDOUT: $!";
- open(OLDERR, ">&", \*STDERR) or die "Can't dup STDERR: $!";
+ open(my $oldout, ">&STDOUT")
+ or die "Can't dup STDOUT: $!";
+ open(OLDERR, ">&", \*STDERR)
+ or die "Can't dup STDERR: $!";
- open(STDOUT, '>', "foo.out") or die "Can't redirect STDOUT: $!";
- open(STDERR, ">&STDOUT") or die "Can't dup STDOUT: $!";
+ open(STDOUT, '>', "foo.out")
+ or die "Can't redirect STDOUT: $!";
+ open(STDERR, ">&STDOUT")
+ or die "Can't dup STDOUT: $!";
select STDERR; $| = 1; # make unbuffered
select STDOUT; $| = 1; # make unbuffered
@@ -4666,8 +4765,10 @@ C<STDERR> using various methods:
print STDOUT "stdout 1\n"; # this works for
print STDERR "stderr 1\n"; # subprocesses too
- open(STDOUT, ">&", $oldout) or die "Can't dup \$oldout: $!";
- open(STDERR, ">&OLDERR") or die "Can't dup OLDERR: $!";
+ open(STDOUT, ">&", $oldout)
+ or die "Can't dup \$oldout: $!";
+ open(STDERR, ">&OLDERR")
+ or die "Can't dup OLDERR: $!";
print STDOUT "stdout 2\n";
print STDERR "stderr 2\n";
@@ -4703,72 +4804,74 @@ L<fdopen(3)> to implement the C<=> functionality. On many Unix systems,
L<fdopen(3)> fails when file descriptors exceed a certain value, typically 255.
For Perls 5.8.0 and later, PerlIO is (most often) the default.
-You can see whether your Perl was built with PerlIO by running
-C<perl -V:useperlio>. If it says C<'define'>, you have PerlIO;
-otherwise you don't.
+=item Legacy usage
-If you open a pipe on the command C<-> (that is, specify either C<|-> or C<-|>
-with the one- or two-argument forms of
-L<C<open>|/open FILEHANDLE,EXPR>), an implicit L<C<fork>|/fork> is done,
-so L<C<open>|/open FILEHANDLE,EXPR> returns twice: in the parent process
-it returns the pid
-of the child process, and in the child process it returns (a defined) C<0>.
-Use C<defined($pid)> or C<//> to determine whether the open was successful.
+This section describes ways to call C<open> outside of best practices;
+you may encounter these uses in older code. Perl does not consider their
+use deprecated, exactly, but neither is it recommended in new code, for
+the sake of clarity and readability.
-For example, use either
+=over
- my $child_pid = open(my $from_kid, "-|") // die "Can't fork: $!";
+=item Specifying mode and filename as a single argument
-or
+In the one- and two-argument forms of the call, the mode and filename
+should be concatenated (in that order), preferably separated by white
+space. You can--but shouldn't--omit the mode in these forms when that mode
+is C<< < >>. It is safe to use the two-argument form of
+L<C<open>|/open FILEHANDLE,MODE,EXPR> if the filename argument is a known literal.
- my $child_pid = open(my $to_kid, "|-") // die "Can't fork: $!";
+ open(my $dbase, "+<dbase.mine") # ditto
+ or die "Can't open 'dbase.mine' for update: $!";
-followed by
+In the two-argument (and one-argument) form, opening C<< <- >>
+or C<-> opens STDIN and opening C<< >- >> opens STDOUT.
- if ($child_pid) {
- # am the parent:
- # either write $to_kid or else read $from_kid
- ...
- waitpid $child_pid, 0;
- } else {
- # am the child; use STDIN/STDOUT normally
- ...
- exit;
- }
+New code should favor the three-argument form of C<open> over this older
+form. Declaring the mode and the filename as two distinct arguments
+avoids any confusion between the two.
-The filehandle behaves normally for the parent, but I/O to that
-filehandle is piped from/to the STDOUT/STDIN of the child process.
-In the child process, the filehandle isn't opened--I/O happens from/to
-the new STDOUT/STDIN. Typically this is used like the normal
-piped open when you want to exercise more control over just how the
-pipe command gets executed, such as when running setuid and
-you don't want to have to scan shell commands for metacharacters.
+=item Calling C<open> with one argument via global variables
-The following blocks are more or less equivalent:
+As a shortcut, a one-argument call takes the filename from the global
+scalar variable of the same name as the filehandle:
- open(my $fh, "|tr '[a-z]' '[A-Z]'");
- open(my $fh, "|-", "tr '[a-z]' '[A-Z]'");
- open(my $fh, "|-") || exec 'tr', '[a-z]', '[A-Z]';
- open(my $fh, "|-", "tr", '[a-z]', '[A-Z]');
+ $ARTICLE = 100;
+ open(ARTICLE)
+ or die "Can't find article $ARTICLE: $!\n";
- open(my $fh, "cat -n '$file'|");
- open(my $fh, "-|", "cat -n '$file'");
- open(my $fh, "-|") || exec "cat", "-n", $file;
- open(my $fh, "-|", "cat", "-n", $file);
+Here C<$ARTICLE> must be a global (package) scalar variable - not one
+declared with L<C<my>|/my VARLIST> or L<C<state>|/state VARLIST>.
-The last two examples in each block show the pipe as "list form", which is
-not yet supported on all platforms. A good rule of thumb is that if
-your platform has a real L<C<fork>|/fork> (in other words, if your platform is
-Unix, including Linux and MacOS X), you can use the list form. You would
-want to use the list form of the pipe so you can pass literal arguments
-to the command without risk of the shell interpreting any shell metacharacters
-in them. However, this also bars you from opening pipes to commands
-that intentionally contain shell metacharacters, such as:
+=item Assigning a filehandle to a bareword
- open(my $fh, "|cat -n | expand -4 | lpr")
- || die "Can't open pipeline to lpr: $!";
+An older style is to use a bareword as the filehandle, as
-See L<perlipc/"Safe Pipe Opens"> for more examples of this.
+ open(FH, "<", "input.txt")
+ or die "Can't open < input.txt: $!";
+
+Then you can use C<FH> as the filehandle, in C<< close FH >> and C<<
+<FH> >> and so on. Note that it's a global variable, so this form is
+not recommended when dealing with filehandles other than Perl's built-in ones (e.g. STDOUT and STDIN).
+
+=back
+
+=item Other considerations
+
+=over
+
+=item Automatic filehandle closure
+
+The filehandle will be closed when its reference count reaches zero. If
+it is a lexically scoped variable declared with L<C<my>|/my VARLIST>,
+that usually means the end of the enclosing scope. However, this
+automatic close does not check for errors, so it is better to explicitly
+close filehandles, especially those used for writing:
+
+ close($handle)
+ || warn "close failed: $!";
+
+=item Automatic pipe flushing
Perl will attempt to flush all files opened for
output before any operation that may do a fork, but this may not be
@@ -4785,30 +4888,42 @@ Closing any piped filehandle causes the parent process to wait for the
child to finish, then returns the status value in L<C<$?>|perlvar/$?> and
L<C<${^CHILD_ERROR_NATIVE}>|perlvar/${^CHILD_ERROR_NATIVE}>.
+=item Direct versus by-reference assignment of filehandles
+
+If FILEHANDLE -- the first argument in a call to C<open> -- is an
+undefined scalar variable (or array or hash element), a new filehandle
+is autovivified, meaning that the variable is assigned a reference to a
+newly allocated anonymous filehandle. Otherwise if FILEHANDLE is an
+expression, its value is the real filehandle. (This is considered a
+symbolic reference, so C<use strict "refs"> should I<not> be in effect.)
+
+=item Whitespace and special characters in the filename argument
+
The filename passed to the one- and two-argument forms of
-L<C<open>|/open FILEHANDLE,EXPR> will
+L<C<open>|/open FILEHANDLE,MODE,EXPR> will
have leading and trailing whitespace deleted and normal
redirection characters honored. This property, known as "magic open",
can often be used to good effect. A user could specify a filename of
F<"rsh cat file |">, or you could change certain filenames as needed:
$filename =~ s/(.*\.gz)\s*$/gzip -dc < $1|/;
- open(my $fh, $filename) or die "Can't open $filename: $!";
+ open(my $fh, $filename)
+ or die "Can't open $filename: $!";
Use the three-argument form to open a file with arbitrary weird characters in it,
open(my $fh, "<", $file)
- || die "Can't open $file: $!";
+ || die "Can't open $file: $!";
otherwise it's necessary to protect any leading and trailing whitespace:
$file =~ s#^(\s)#./$1#;
open(my $fh, "< $file\0")
- || die "Can't open $file: $!";
+ || die "Can't open $file: $!";
(this may not work on some bizarre filesystems). One should
conscientiously choose between the I<magic> and I<three-argument> form
-of L<C<open>|/open FILEHANDLE,EXPR>:
+of L<C<open>|/open FILEHANDLE,MODE,EXPR>:
open(my $in, $ARGV[0]) || die "Can't open $ARGV[0]: $!";
@@ -4816,16 +4931,18 @@ will allow the user to specify an argument of the form C<"rsh cat file |">,
but will not work on a filename that happens to have a trailing space, while
open(my $in, "<", $ARGV[0])
- || die "Can't open $ARGV[0]: $!";
+ || die "Can't open $ARGV[0]: $!";
will have exactly the opposite restrictions. (However, some shells
support the syntax C<< perl your_program.pl <( rsh cat file ) >>, which
produces a filename that can be opened normally.)
+=item Invoking C-style C<open>
+
If you want a "real" C L<open(2)>, then you should use the
L<C<sysopen>|/sysopen FILEHANDLE,FILENAME,MODE> function, which involves
no such magic (but uses different filemodes than Perl
-L<C<open>|/open FILEHANDLE,EXPR>, which corresponds to C L<fopen(3)>).
+L<C<open>|/open FILEHANDLE,MODE,EXPR>, which corresponds to C L<fopen(3)>).
This is another way to protect your filenames from interpretation. For
example:
@@ -4840,7 +4957,14 @@ example:
See L<C<seek>|/seek FILEHANDLE,POSITION,WHENCE> for some details about
mixing reading and writing.
-Portability issues: L<perlport/open>.
+=item Portability issues
+
+See L<perlport/open>.
+
+=back
+
+=back
+
=item opendir DIRHANDLE,EXPR
X<opendir>
@@ -6036,7 +6160,7 @@ This protects against those locales where characters such as C<"|"> are
considered to be word characters.
Otherwise, Perl quotes non-ASCII characters using an adaptation from
-Unicode (see L<http://www.unicode.org/reports/tr31/>).
+Unicode (see L<https://www.unicode.org/reports/tr31/>).
The only code points that are quoted are those that have any of the
Unicode properties: Pattern_Syntax, Pattern_White_Space, White_Space,
Default_Ignorable_Code_Point, or General_Category=Control.
@@ -6127,14 +6251,15 @@ results in the string being padded to the required size with C<"\0">
bytes before the result of the read is appended.
The call is implemented in terms of either Perl's or your system's native
-L<fread(3)> library function. To get a true L<read(2)> system call, see
+L<fread(3)> library function, via the L<PerlIO> layers applied to the
+handle. To get a true L<read(2)> system call, see
L<sysread|/sysread FILEHANDLE,SCALAR,LENGTH,OFFSET>.
Note the I<characters>: depending on the status of the filehandle,
either (8-bit) bytes or characters are read. By default, all
filehandles operate on bytes, but for example if the filehandle has
been opened with the C<:utf8> I/O layer (see
-L<C<open>|/open FILEHANDLE,EXPR>, and the L<open>
+L<C<open>|/open FILEHANDLE,MODE,EXPR>, and the L<open>
pragma), the I/O will operate on UTF8-encoded Unicode
characters, not bytes. Similarly for the C<:encoding> layer:
in that case pretty much any characters can be read.
@@ -6270,7 +6395,7 @@ multi-line) string. In list context, returns a list of lines
C<$INPUT_RECORD_SEPARATOR> in L<English>)).
This is the internal function implementing the C<qx/EXPR/>
operator, but you can use it directly. The C<qx/EXPR/>
-operator is discussed in more detail in L<perlop/"I/O Operators">.
+operator is discussed in more detail in L<perlop/"C<qx/I<STRING>/>">.
If EXPR is omitted, uses L<C<$_>|perlvar/$_>.
=item recv SOCKET,SCALAR,LENGTH,FLAGS
@@ -6682,8 +6807,8 @@ X<return>
Returns from a subroutine, L<C<eval>|/eval EXPR>,
L<C<do FILE>|/do EXPR>, L<C<sort>|/sort SUBNAME LIST> block or regex
-eval block (but not a L<C<grep>|/grep BLOCK LIST> or
-L<C<map>|/map BLOCK LIST> block) with the value
+eval block (but not a L<C<grep>|/grep BLOCK LIST>,
+L<C<map>|/map BLOCK LIST>, or L<C<do BLOCK>|/do BLOCK> block) with the value
given in EXPR. Evaluation of EXPR may be in list, scalar, or void
context, depending on how the return value will be used, and the context
may vary from one execution to the next (see
@@ -6789,8 +6914,8 @@ X<say>
=for Pod::Functions +say output a list to a filehandle, appending a newline
Just like L<C<print>|/print FILEHANDLE LIST>, but implicitly appends a
-newline. C<say LIST> is simply an abbreviation for
-C<{ local $\ = "\n"; print LIST }>. To use FILEHANDLE without a LIST to
+newline at the end of the LIST instead of any value L<C<$\>|perlvar/$\>
+might have. To use FILEHANDLE without a LIST to
print the contents of L<C<$_>|perlvar/$_> to it, you must use a bareword
filehandle like C<FH>, not an indirect one like C<$fh>.
@@ -8074,8 +8199,8 @@ as supported by the compiler used to build Perl:
64-bit integers)
t interpret integer as C type "ptrdiff_t" on Perl
5.14 or later
- z interpret integer as C type "size_t" on Perl 5.14
- or later
+ z interpret integer as C types "size_t" or
+ "ssize_t" on Perl 5.14 or later
As of 5.14, none of these raises an exception if they are not supported on
your platform. However, if warnings are enabled, a warning of the
@@ -8626,6 +8751,15 @@ parameters FILENAME, MODE, and PERMS.
Returns true on success and L<C<undef>|/undef EXPR> otherwise.
+L<PerlIO> layers will be applied to the handle the same way they would in an
+L<C<open>|/open FILEHANDLE,MODE,EXPR> call that does not specify layers. That is,
+the current value of L<C<${^OPEN}>|perlvar/${^OPEN}> as set by the L<open>
+pragma in a lexical scope, or the C<-C> commandline option or C<PERL_UNICODE>
+environment variable in the main program scope, falling back to the platform
+defaults as described in L<PerlIO/Defaults and how to override them>. If you
+want to remove any layers that may transform the byte stream, use
+L<C<binmode>|/binmode FILEHANDLE, LAYER> after opening it.
+
The possible values and flag bits of the MODE parameter are
system-dependent; they are available via the standard module
L<C<Fcntl>|Fcntl>. See the documentation of your operating system's
@@ -8645,7 +8779,7 @@ OS/390 and on the Macintosh; you probably don't want to
use them in new code.
If the file named by FILENAME does not exist and the
-L<C<open>|/open FILEHANDLE,EXPR> call creates
+L<C<open>|/open FILEHANDLE,MODE,EXPR> call creates
it (typically because MODE includes the C<O_CREAT> flag), then the value of
PERMS specifies the permissions of the newly created file. If you omit
the PERMS argument to L<C<sysopen>|/sysopen FILEHANDLE,FILENAME,MODE>,
@@ -8675,6 +8809,13 @@ L<C<sysopen>|/sysopen FILEHANDLE,FILENAME,MODE>, because
that takes away the user's option to have a more permissive umask.
Better to omit it. See L<C<umask>|/umask EXPR> for more on this.
+This function has no direct relation to the usage of
+L<C<sysread>|/sysread FILEHANDLE,SCALAR,LENGTH,OFFSET>,
+L<C<syswrite>|/syswrite FILEHANDLE,SCALAR,LENGTH,OFFSET>,
+or L<C<sysseek>|/sysseek FILEHANDLE,POSITION,WHENCE>. A handle opened with
+this function can be used with buffered IO just as one opened with
+L<C<open>|/open FILEHANDLE,MODE,EXPR> can be used with unbuffered IO.
+
Note that under Perls older than 5.8.0,
L<C<sysopen>|/sysopen FILEHANDLE,FILENAME,MODE> depends on the
L<fdopen(3)> C library function. On many Unix systems, L<fdopen(3)> is known
@@ -8695,13 +8836,14 @@ X<sysread>
=for Pod::Functions fixed-length unbuffered input from a filehandle
Attempts to read LENGTH bytes of data into variable SCALAR from the
-specified FILEHANDLE, using L<read(2)>. It bypasses
-buffered IO, so mixing this with other kinds of reads,
+specified FILEHANDLE, using L<read(2)>. It bypasses any L<PerlIO> layers
+including buffered IO (but is affected by the presence of the C<:utf8>
+layer as described later), so mixing this with other kinds of reads,
L<C<print>|/print FILEHANDLE LIST>, L<C<write>|/write FILEHANDLE>,
L<C<seek>|/seek FILEHANDLE,POSITION,WHENCE>,
L<C<tell>|/tell FILEHANDLE>, or L<C<eof>|/eof FILEHANDLE> can cause
confusion because the
-perlio or stdio layers usually buffer data. Returns the number of
+C<:perlio> or C<:crlf> layers usually buffer data. Returns the number of
bytes actually read, C<0> at end of file, or undef if there was an
error (in the latter case L<C<$!>|perlvar/$!> is also set). SCALAR will
be grown or
@@ -8724,7 +8866,7 @@ Note that if the filehandle has been marked as C<:utf8>, C<sysread> will
throw an exception. The C<:encoding(...)> layer implicitly
introduces the C<:utf8> layer. See
L<C<binmode>|/binmode FILEHANDLE, LAYER>,
-L<C<open>|/open FILEHANDLE,EXPR>, and the L<open> pragma.
+L<C<open>|/open FILEHANDLE,MODE,EXPR>, and the L<open> pragma.
=item sysseek FILEHANDLE,POSITION,WHENCE
X<sysseek> X<lseek>
@@ -8865,12 +9007,14 @@ X<syswrite>
Attempts to write LENGTH bytes of data from variable SCALAR to the
specified FILEHANDLE, using L<write(2)>. If LENGTH is
-not specified, writes whole SCALAR. It bypasses buffered IO, so
+not specified, writes whole SCALAR. It bypasses any L<PerlIO> layers
+including buffered IO (but is affected by the presence of the C<:utf8>
+layer as described later), so
mixing this with reads (other than C<sysread)>),
L<C<print>|/print FILEHANDLE LIST>, L<C<write>|/write FILEHANDLE>,
L<C<seek>|/seek FILEHANDLE,POSITION,WHENCE>,
L<C<tell>|/tell FILEHANDLE>, or L<C<eof>|/eof FILEHANDLE> may cause
-confusion because the perlio and stdio layers usually buffer data.
+confusion because the C<:perlio> and C<:crlf> layers usually buffer data.
Returns the number of bytes actually written, or L<C<undef>|/undef EXPR>
if there was an error (in this case the errno variable
L<C<$!>|perlvar/$!> is also set). If the LENGTH is greater than the
@@ -8887,7 +9031,7 @@ The C<:encoding(...)> layer implicitly introduces the C<:utf8> layer.
Alternately, if the handle is not marked with an encoding but you
attempt to write characters with code points over 255, raises an exception.
See L<C<binmode>|/binmode FILEHANDLE, LAYER>,
-L<C<open>|/open FILEHANDLE,EXPR>, and the L<open> pragma.
+L<C<open>|/open FILEHANDLE,MODE,EXPR>, and the L<open> pragma.
=item tell FILEHANDLE
X<tell>
@@ -9515,9 +9659,10 @@ I<only> meant to be used to assert that the running Perl is of a earlier
version than its argument and I<not> to undo the feature-enabling side effects
of C<use VERSION>.
-See L<perlmodlib> for a list of standard modules and pragmas. See L<perlrun>
-for the C<-M> and C<-m> command-line options to Perl that give
-L<C<use>|/use Module VERSION LIST> functionality from the command-line.
+See L<perlmodlib> for a list of standard modules and pragmas. See
+L<perlrun|perlrun/-m[-]module> for the C<-M> and C<-m> command-line
+options to Perl that give L<C<use>|/use Module VERSION LIST>
+functionality from the command-line.
=item utime LIST
X<utime>
@@ -9669,10 +9814,8 @@ to try to write off the beginning of the string (i.e., negative OFFSET).
If the string happens to be encoded as UTF-8 internally (and thus has
the UTF8 flag set), L<C<vec>|/vec EXPR,OFFSET,BITS> tries to convert it
to use a one-byte-per-character internal representation. However, if the
-string contains characters with values of 256 or higher, that conversion
-will fail, and a deprecation message will be raised. In that situation,
-C<vec> will operate on the underlying buffer regardless, in its internal
-UTF-8 representation. In Perl 5.32, this will be a fatal error.
+string contains characters with values of 256 or higher, a fatal error
+will occur.
Strings created with L<C<vec>|/vec EXPR,OFFSET,BITS> can also be
manipulated with the logical
diff --git a/gnu/usr.bin/perl/pod/perlgit.pod b/gnu/usr.bin/perl/pod/perlgit.pod
index 67aa0b40384..6ec1f1ea764 100644
--- a/gnu/usr.bin/perl/pod/perlgit.pod
+++ b/gnu/usr.bin/perl/pod/perlgit.pod
@@ -770,7 +770,7 @@ seen on github.com it must be a local branch whose first name
component is precisely C<smoke-me>.
The procedure for doing this is roughly as follows (using the example of
-of tonyc's smoke-me branch called win32stat):
+tonyc's smoke-me branch called win32stat):
First, make a local branch and switch to it:
diff --git a/gnu/usr.bin/perl/pod/perlguts.pod b/gnu/usr.bin/perl/pod/perlguts.pod
index 9a87c17f344..1d9f18aa20a 100644
--- a/gnu/usr.bin/perl/pod/perlguts.pod
+++ b/gnu/usr.bin/perl/pod/perlguts.pod
@@ -548,6 +548,8 @@ is only valid for the duration of a single perl process.
See L</Understanding the Magic of Tied Hashes and Arrays> for more
information on how to use the hash access functions on tied hashes.
+=for apidoc Amh|void|PERL_HASH|U32 hash|char *key|STRLEN klen
+
=head2 Hash API Extensions
Beginning with version 5.004, the following functions are also supported:
@@ -881,7 +883,7 @@ dynamic scopes: there can be multiple sets of mortal references hanging
around at the same time, with different death dates. Internally, the
actual determinant for when mortal xV references are destroyed depends
on two macros, SAVETMPS and FREETMPS. See L<perlcall> and L<perlxs>
-for more details on these macros.
+and L</Temporaries Stack> below for more details on these macros.
Mortal references are mainly used for xVs that are placed on perl's
main stack. The stack is problematic for reference tracking, because it
@@ -1285,6 +1287,52 @@ will be lost.
~ PERL_MAGIC_ext (none) Available for use by
extensions
+
+=for apidoc Amnh||PERL_MAGIC_sv
+=for apidoc Amnh||PERL_MAGIC_arylen
+=for apidoc Amnh||PERL_MAGIC_rhash
+=for apidoc Amnh||PERL_MAGIC_debugvar
+=for apidoc Amnh||PERL_MAGIC_pos
+=for apidoc Amnh||PERL_MAGIC_symtab
+=for apidoc Amnh||PERL_MAGIC_backref
+=for apidoc Amnh||PERL_MAGIC_arylen_p
+=for apidoc Amnh||PERL_MAGIC_bm
+=for apidoc Amnh||PERL_MAGIC_overload_table
+=for apidoc Amnh||PERL_MAGIC_regdata
+=for apidoc Amnh||PERL_MAGIC_regdatum
+=for apidoc Amnh||PERL_MAGIC_env
+=for apidoc Amnh||PERL_MAGIC_envelem
+=for apidoc Amnh||PERL_MAGIC_fm
+=for apidoc Amnh||PERL_MAGIC_regex_global
+=for apidoc Amnh||PERL_MAGIC_hints
+=for apidoc Amnh||PERL_MAGIC_hintselem
+=for apidoc Amnh||PERL_MAGIC_isa
+=for apidoc Amnh||PERL_MAGIC_isaelem
+=for apidoc Amnh||PERL_MAGIC_nkeys
+=for apidoc Amnh||PERL_MAGIC_dbfile
+=for apidoc Amnh||PERL_MAGIC_dbline
+=for apidoc Amnh||PERL_MAGIC_shared
+=for apidoc Amnh||PERL_MAGIC_shared_scalar
+=for apidoc Amnh||PERL_MAGIC_collxfrm
+=for apidoc Amnh||PERL_MAGIC_tied
+=for apidoc Amnh||PERL_MAGIC_tiedelem
+=for apidoc Amnh||PERL_MAGIC_tiedscalar
+=for apidoc Amnh||PERL_MAGIC_qr
+=for apidoc Amnh||PERL_MAGIC_sig
+=for apidoc Amnh||PERL_MAGIC_sigelem
+=for apidoc Amnh||PERL_MAGIC_taint
+=for apidoc Amnh||PERL_MAGIC_uvar
+=for apidoc Amnh||PERL_MAGIC_uvar_elem
+=for apidoc Amnh||PERL_MAGIC_vstring
+=for apidoc Amnh||PERL_MAGIC_vec
+=for apidoc Amnh||PERL_MAGIC_utf8
+=for apidoc Amnh||PERL_MAGIC_substr
+=for apidoc Amnh||PERL_MAGIC_nonelem
+=for apidoc Amnh||PERL_MAGIC_defelem
+=for apidoc Amnh||PERL_MAGIC_lvref
+=for apidoc Amnh||PERL_MAGIC_checkcall
+=for apidoc Amnh||PERL_MAGIC_ext
+
=for mg_vtable.pl end
When an uppercase and lowercase letter both exist in the table, then the
@@ -1606,34 +1654,49 @@ function takes C<int *>.
=item C<SV* save_scalar(GV *gv)>
+=for apidoc save_scalar
+
Equivalent to Perl code C<local $gv>.
=item C<AV* save_ary(GV *gv)>
+=for apidoc save_ary
+
=item C<HV* save_hash(GV *gv)>
+=for apidoc save_hash
+
Similar to C<save_scalar>, but localize C<@gv> and C<%gv>.
=item C<void save_item(SV *item)>
-Duplicates the current value of C<SV>, on the exit from the current
-C<ENTER>/C<LEAVE> I<pseudo-block> will restore the value of C<SV>
+=for apidoc save_item
+
+Duplicates the current value of C<SV>. On the exit from the current
+C<ENTER>/C<LEAVE> I<pseudo-block> the value of C<SV> will be restored
using the stored value. It doesn't handle magic. Use C<save_scalar> if
magic is affected.
=item C<void save_list(SV **sarg, I32 maxsarg)>
+=for apidoc save_list
+
A variant of C<save_item> which takes multiple arguments via an array
C<sarg> of C<SV*> of length C<maxsarg>.
=item C<SV* save_svref(SV **sptr)>
+=for apidoc save_svref
+
Similar to C<save_scalar>, but will reinstate an C<SV *>.
=item C<void save_aptr(AV **aptr)>
=item C<void save_hptr(HV **hptr)>
+=for apidoc save_aptr
+=for apidoc save_hptr
+
Similar to C<save_svref>, but localize C<AV *> and C<HV *>.
=back
@@ -1872,11 +1935,6 @@ using the macros described in this section. The macros provide the necessary
transparency between differences in the actual malloc implementation that is
used within perl.
-It is suggested that you enable the version of malloc that is distributed
-with Perl. It keeps pools of various sizes of unallocated memory in
-order to satisfy allocation requests more quickly. However, on some
-platforms, it may cause spurious malloc or free errors.
-
The following three macros are used to initially allocate memory :
Newx(pointer, number, type);
@@ -2306,6 +2364,8 @@ please see F<miniperlmain.c> for usage details. You may also need
to use C<dVAR> in your coding to "declare the global variables"
when you are using them. dTHX does this for you automatically.
+=for apidoc Amnh||dVAR
+
To see whether you have non-const data you can use a BSD (or GNU)
compatible C<nm>:
@@ -2367,6 +2427,12 @@ The first character could be 'p' for a B<p>rototype, 'a' for B<a>rgument,
or 'd' for B<d>eclaration, so we have C<pTHX>, C<aTHX> and C<dTHX>, and
their variants.
+=for apidoc Amnh||aTHX
+=for apidoc Amnh||aTHX_
+=for apidoc Amnh||dTHX
+=for apidoc Amnh||pTHX
+=for apidoc Amnh||pTHX_
+
When Perl is built without options that set PERL_IMPLICIT_CONTEXT, there is no
first argument containing the interpreter's context. The trailing underscore
in the pTHX_ macro indicates that the macro expansion needs a comma
@@ -2402,7 +2468,7 @@ Perl_warner), or use a context-free version.
The context-free version of Perl_warner is called
Perl_warner_nocontext, and does not take the extra argument. Instead
-it does dTHX; to get the context from thread-local storage. We
+it does C<dTHX;> to get the context from thread-local storage. We
C<#define warner Perl_warner_nocontext> so that extensions get source
compatibility at the expense of performance. (Passing an arg is
cheaper than grabbing it from thread-local storage.)
@@ -2413,6 +2479,8 @@ need only be aware of [pad]THX.
=head2 So what happened to dTHR?
+=for apidoc Amnh||dTHR
+
C<dTHR> was introduced in perl 5.005 to support the older thread model.
The older thread model now uses the C<THX> mechanism to pass context
pointers around, so C<dTHR> is not useful any more. Perl 5.6.0 and
@@ -2599,91 +2667,9 @@ that table:
Apd |SV** |av_fetch |AV* ar|I32 key|I32 lval
-The second column is the return type, the third column the name. Columns
-after that are the arguments. The first column is a set of flags:
-
-=over 3
-
-=item A
-
-This function is a part of the public
-API. All such functions should also
-have 'd', very few do not.
-
-=item p
-
-This function has a C<Perl_> prefix; i.e. it is defined as
-C<Perl_av_fetch>.
-
-=item d
-
-This function has documentation using the C<apidoc> feature which we'll
-look at in a second. Some functions have 'd' but not 'A'; docs are good.
-
-=back
-
-Other available flags are:
-
-=over 3
-
-=item s
-
-This is a static function and is defined as C<STATIC S_whatever>, and
-usually called within the sources as C<whatever(...)>.
-
-=item n
-
-This does not need an interpreter context, so the definition has no
-C<pTHX>, and it follows that callers don't use C<aTHX>. (See
-L</Background and PERL_IMPLICIT_CONTEXT>.)
-
-=item r
-
-This function never returns; C<croak>, C<exit> and friends.
-
-=item f
-
-This function takes a variable number of arguments, C<printf> style.
-The argument list should end with C<...>, like this:
-
- Afprd |void |croak |const char* pat|...
-
-=item M
-
-This function is part of the experimental development API, and may change
-or disappear without notice.
-
-=item o
-
-This function should not have a compatibility macro to define, say,
-C<Perl_parse> to C<parse>. It must be called as C<Perl_parse>.
-
-=item x
-
-This function isn't exported out of the Perl core.
-
-=item m
-
-This is implemented as a macro.
-
-=item X
-
-This function is explicitly exported.
-
-=item E
-
-This function is visible to extensions included in the Perl core.
-
-=item b
-
-Binary backward compatibility; this function is a macro but also has
-a C<Perl_> implementation (which is exported).
-
-=item others
-
-See the comments at the top of C<embed.fnc> for others.
-
-=back
+The first column is a set of flags, the second column the return type,
+the third column the name. Columns after that are the arguments.
+The flags are documented at the top of F<embed.fnc>.
If you edit F<embed.pl> or F<embed.fnc>, you will need to run
C<make regen_headers> to force a rebuild of F<embed.h> and other
@@ -2703,18 +2689,92 @@ following macros for portability
NVff NV %f-like
NVgf NV %g-like
+=for apidoc Amnh||IVdf
+=for apidoc Amnh||UVuf
+=for apidoc Amnh||UVof
+=for apidoc Amnh||UVxf
+=for apidoc Amnh||NVef
+=for apidoc Amnh||NVff
+=for apidoc Amnh||NVgf
+
These will take care of 64-bit integers and long doubles.
For example:
- printf("IV is %"IVdf"\n", iv);
+ printf("IV is %" IVdf "\n", iv);
-The IVdf will expand to whatever is the correct format for the IVs.
+The C<IVdf> will expand to whatever is the correct format for the IVs.
+Note that the spaces are required around the format in case the code is
+compiled with C++, to maintain compliance with its standard.
Note that there are different "long doubles": Perl will use
whatever the compiler has.
-If you are printing addresses of pointers, use UVxf combined
-with PTR2UV(), do not use %lx or %p.
+If you are printing addresses of pointers, use %p or UVxf combined
+with PTR2UV().
+
+=head2 Formatted Printing of SVs
+
+The contents of SVs may be printed using the C<SVf> format, like so:
+
+ Perl_croak(aTHX_ "This croaked because: %" SVf "\n", SvfARG(err_msg))
+
+where C<err_msg> is an SV.
+
+=for apidoc Amnh||SVf
+=for apidoc Amh||SVfARG|SV *sv
+
+Not all scalar types are printable. Simple values certainly are: one of
+IV, UV, NV, or PV. Also, if the SV is a reference to some value,
+either it will be dereferenced and the value printed, or information
+about the type of that value and its address are displayed. The results
+of printing any other type of SV are undefined and likely to lead to an
+interpreter crash. NVs are printed using a C<%g>-ish format.
+
+Note that the spaces are required around the C<SVf> in case the code is
+compiled with C++, to maintain compliance with its standard.
+
+Note that any filehandle being printed to under UTF-8 must be expecting
+UTF-8 in order to get good results and avoid Wide-character warnings.
+One way to do this for typical filehandles is to invoke perl with the
+C<-C>> parameter. (See L<perlrun/-C [numberE<sol>list]>.
+
+You can use this to concatenate two scalars:
+
+ SV *var1 = get_sv("var1", GV_ADD);
+ SV *var2 = get_sv("var2", GV_ADD);
+ SV *var3 = newSVpvf("var1=%" SVf " and var2=%" SVf,
+ SVfARG(var1), SVfARG(var2));
+
+=head2 Formatted Printing of Strings
+
+If you just want the bytes printed in a 7bit NUL-terminated string, you can
+just use C<%s> (assuming they are all really only 7bit). But if there is a
+possibility the value will be encoded as UTF-8 or contains bytes above
+C<0x7F> (and therefore 8bit), you should instead use the C<UTF8f> format.
+And as its parameter, use the C<UTF8fARG()> macro:
+
+ chr * msg;
+
+ /* U+2018: \xE2\x80\x98 LEFT SINGLE QUOTATION MARK
+ U+2019: \xE2\x80\x99 RIGHT SINGLE QUOTATION MARK */
+ if (can_utf8)
+ msg = "\xE2\x80\x98Uses fancy quotes\xE2\x80\x99";
+ else
+ msg = "'Uses simple quotes'";
+
+ Perl_croak(aTHX_ "The message is: %" UTF8f "\n",
+ UTF8fARG(can_utf8, strlen(msg), msg));
+
+The first parameter to C<UTF8fARG> is a boolean: 1 if the string is in
+UTF-8; 0 if string is in native byte encoding (Latin1).
+The second parameter is the number of bytes in the string to print.
+And the third and final parameter is a pointer to the first byte in the
+string.
+
+Note that any filehandle being printed to under UTF-8 must be expecting
+UTF-8 in order to get good results and avoid Wide-character warnings.
+One way to do this for typical filehandles is to invoke perl with the
+C<-C>> parameter. (See L<perlrun/-C [numberE<sol>list]>.
=head2 Formatted Printing of C<Size_t> and C<SSize_t>
@@ -2723,7 +2783,7 @@ print as in the
L<previous section|/Formatted Printing of IVs, UVs, and NVs>.
But if you're using C<PerlIO_printf()>, it's less typing and visual
-clutter to use the C<"%z"> length modifier (for I<siZe>):
+clutter to use the C<%z> length modifier (for I<siZe>):
PerlIO_printf("STRLEN is %zu\n", len);
@@ -2740,6 +2800,11 @@ use the follow macros to do it right.
PTR2NV(pointer)
INT2PTR(pointertotype, integer)
+=for apidoc Amh|void *|INT2PTR|type|int value
+=for apidoc Amh|UV|PTR2UV|void *
+=for apidoc Amh|IV|PTR2IV|void *
+=for apidoc Amh|NV|PTR2NV|void *
+
For example:
IV iv = ...;
@@ -2791,6 +2856,10 @@ such manual which details all the functions which are available to XS
writers. L<perlintern> is the autogenerated manual for the functions
which are not part of the API and are supposedly for internal use only.
+=for comment
+skip apidoc
+The following is an example and shouldn't be read as a real apidoc line
+
Source documentation is created by putting POD comments into the C
source, like this:
@@ -3211,6 +3280,240 @@ I<oldop> is the previous OP optimized, whose C<op_next> points to I<o>.
C<B::Generate> directly supports the creation of custom ops by name.
+=head1 Stacks
+
+Descriptions above occasionally refer to "the stack", but there are in fact
+many stack-like data structures within the perl interpreter. When otherwise
+unqualified, "the stack" usually refers to the value stack.
+
+The various stacks have different purposes, and operate in slightly different
+ways. Their differences are noted below.
+
+=head2 Value Stack
+
+This stack stores the values that regular perl code is operating on, usually
+intermediate values of expressions within a statement. The stack itself is
+formed of an array of SV pointers.
+
+The base of this stack is pointed to by the interpreter variable
+C<PL_stack_base>, of type C<SV **>.
+
+The head of the stack is C<PL_stack_sp>, and points to the most
+recently-pushed item.
+
+Items are pushed to the stack by using the C<PUSHs()> macro or its variants
+described above; C<XPUSHs()>, C<mPUSHs()>, C<mXPUSHs()> and the typed
+versions. Note carefully that the non-C<X> versions of these macros do not
+check the size of the stack and assume it to be big enough. These must be
+paired with a suitable check of the stack's size, such as the C<EXTEND> macro
+to ensure it is large enough. For example
+
+ EXTEND(SP, 4);
+ mPUSHi(10);
+ mPUSHi(20);
+ mPUSHi(30);
+ mPUSHi(40);
+
+This is slightly more performant than making four separate checks in four
+separate C<mXPUSHi()> calls.
+
+As a further performance optimisation, the various C<PUSH> macros all operate
+using a local variable C<SP>, rather than the interpreter-global variable
+C<PL_stack_sp>. This variable is declared by the C<dSP> macro - though it is
+normally implied by XSUBs and similar so it is rare you have to consider it
+directly. Once declared, the C<PUSH> macros will operate only on this local
+variable, so before invoking any other perl core functions you must use the
+C<PUTBACK> macro to return the value from the local C<SP> variable back to
+the interpreter variable. Similarly, after calling a perl core function which
+may have had reason to move the stack or push/pop values to it, you must use
+the C<SPAGAIN> macro which refreshes the local C<SP> value back from the
+interpreter one.
+
+Items are popped from the stack by using the C<POPs> macro or its typed
+versions, There is also a macro C<TOPs> that inspects the topmost item without
+removing it.
+
+Note specifically that SV pointers on the value stack do not contribute to the
+overall reference count of the xVs being referred to. If newly-created xVs are
+being pushed to the stack you must arrange for them to be destroyed at a
+suitable time; usually by using one of the C<mPUSH*> macros or C<sv_2mortal()>
+to mortalise the xV.
+
+=head2 Mark Stack
+
+The value stack stores individual perl scalar values as temporaries between
+expressions. Some perl expressions operate on entire lists; for that purpose
+we need to know where on the stack each list begins. This is the purpose of the
+mark stack.
+
+The mark stack stores integers as I32 values, which are the height of the
+value stack at the time before the list began; thus the mark itself actually
+points to the value stack entry one before the list. The list itself starts at
+C<mark + 1>.
+
+The base of this stack is pointed to by the interpreter variable
+C<PL_markstack>, of type C<I32 *>.
+
+The head of the stack is C<PL_markstack_ptr>, and points to the most
+recently-pushed item.
+
+Items are pushed to the stack by using the C<PUSHMARK()> macro. Even though
+the stack itself stores (value) stack indices as integers, the C<PUSHMARK>
+macro should be given a stack pointer directly; it will calculate the index
+offset by comparing to the C<PL_stack_sp> variable. Thus almost always the
+code to perform this is
+
+ PUSHMARK(SP);
+
+Items are popped from the stack by the C<POPMARK> macro. There is also a macro
+C<TOPMARK> that inspects the topmost item without removing it. These macros
+return I32 index values directly. There is also the C<dMARK> macro which
+declares a new SV double-pointer variable, called C<mark>, which points at the
+marked stack slot; this is the usual macro that C code will use when operating
+on lists given on the stack.
+
+As noted above, the C<mark> variable itself will point at the most recently
+pushed value on the value stack before the list begins, and so the list itself
+starts at C<mark + 1>. The values of the list may be iterated by code such as
+
+ for(SV **svp = mark + 1; svp <= PL_stack_sp; svp++) {
+ SV *item = *svp;
+ ...
+ }
+
+Note specifically in the case that the list is already empty, C<mark> will
+equal C<PL_stack_sp>.
+
+Because the C<mark> variable is converted to a pointer on the value stack,
+extra care must be taken if C<EXTEND> or any of the C<XPUSH> macros are
+invoked within the function, because the stack may need to be moved to
+extend it and so the existing pointer will now be invalid. If this may be a
+problem, a possible solution is to track the mark offset as an integer and
+track the mark itself later on after the stack had been moved.
+
+ I32 markoff = POPMARK;
+
+ ...
+
+ SP **mark = PL_stack_base + markoff;
+
+=head2 Temporaries Stack
+
+As noted above, xV references on the main value stack do not contribute to the
+reference count of an xV, and so another mechanism is used to track when
+temporary values which live on the stack must be released. This is the job of
+the temporaries stack.
+
+The temporaries stack stores pointers to xVs whose reference counts will be
+decremented soon.
+
+The base of this stack is pointed to by the interpreter variable
+C<PL_tmps_stack>, of type C<SV **>.
+
+The head of the stack is indexed by C<PL_tmps_ix>, an integer which stores the
+index in the array of the most recently-pushed item.
+
+There is no public API to directly push items to the temporaries stack. Instead,
+the API function C<sv_2mortal()> is used to mortalize an xV, adding its
+address to the temporaries stack.
+
+Likewise, there is no public API to read values from the temporaries stack.
+Instead. the macros C<SAVETMPS> and C<FREETPMS> are used. The C<SAVETMPS>
+macro establishes the base levels of the temporaries stack, by capturing the
+current value of C<PL_tmps_ix> into C<PL_tmps_floor> and saving the previous
+value to the save stack. Thereafter, whenever C<FREETMPS> is invoked all of
+the temporaries that have been pushed since that level are reclaimed.
+
+While it is common to see these two macros in pairs within an C<ENTER>/
+C<LEAVE> pair, it is not necessary to match them. It is permitted to invoke
+C<FREETMPS> multiple times since the most recent C<SAVETMPS>; for example in a
+loop iterating over elements of a list. While you can invoke C<SAVETMPS>
+multiple times within a scope pair, it is unlikely to be useful. Subsequent
+invocations will move the temporaries floor further up, thus effectively
+trapping the existing temporaries to only be released at the end of the scope.
+
+=head2 Save Stack
+
+The save stack is used by perl to implement the C<local> keyword and other
+similar behaviours; any cleanup operations that need to be performed when
+leaving the current scope. Items pushed to this stack generally capture the
+current value of some internal variable or state, which will be restored when
+the scope is unwound due to leaving, C<return>, C<die>, C<goto> or other
+reasons.
+
+Whereas other perl internal stacks store individual items all of the same type
+(usually SV pointers or integers), the items pushed to the save stack are
+formed of many different types, having multiple fields to them. For example,
+the C<SAVEt_INT> type needs to store both the address of the C<int> variable
+to restore, and the value to restore it to. This information could have been
+stored using fields of a C<struct>, but would have to be large enough to store
+three pointers in the largest case, which would waste a lot of space in most
+of the smaller cases.
+
+Instead, the stack stores information in a variable-length encoding of C<ANY>
+structures. The final value pushed is stored in the C<UV> field which encodes
+the kind of item held by the preceeding items; the count and types of which
+will depend on what kind of item is being stored. The kind field is pushed
+last because that will be the first field to be popped when unwinding items
+from the stack.
+
+The base of this stack is pointed to by the interpreter variable
+C<PL_savestack>, of type C<ANY *>.
+
+The head of the stack is indexed by C<PL_savestack_ix>, an integer which
+stores the index in the array at which the next item should be pushed. (Note
+that this is different to most other stacks, which reference the most
+recently-pushed item).
+
+Items are pushed to the save stack by using the various C<SAVE...()> macros.
+Many of these macros take a variable and store both its address and current
+value on the save stack, ensuring that value gets restored on scope exit.
+
+ SAVEI8(i8)
+ SAVEI16(i16)
+ SAVEI32(i32)
+ SAVEINT(i)
+ ...
+
+There are also a variety of other special-purpose macros which save particular
+types or values of interest. C<SAVETMPS> has already been mentioned above.
+Others include C<SAVEFREEPV> which arranges for a PV (i.e. a string buffer) to
+be freed, or C<SAVEDESTRUCTOR> which arranges for a given function pointer to
+be invoked on scope exit. A full list of such macros can be found in
+F<scope.h>.
+
+There is no public API for popping individual values or items from the save
+stack. Instead, via the scope stack, the C<ENTER> and C<LEAVE> pair form a way
+to start and stop nested scopes. Leaving a nested scope via C<LEAVE> will
+restore all of the saved values that had been pushed since the most recent
+C<ENTER>.
+
+=head2 Scope Stack
+
+As with the mark stack to the value stack, the scope stack forms a pair with
+the save stack. The scope stack stores the height of the save stack at which
+nested scopes begin, and allows the save stack to be unwound back to that
+point when the scope is left.
+
+When perl is built with debugging enabled, there is a second part to this
+stack storing human-readable string names describing the type of stack
+context. Each push operation saves the name as well as the height of the save
+stack, and each pop operation checks the topmost name with what is expected,
+causing an assertion failure if the name does not match.
+
+The base of this stack is pointed to by the interpreter variable
+C<PL_scopestack>, of type C<I32 *>. If enabled, the scope stack names are
+stored in a separate array pointed to by C<PL_scopestack_name>, of type
+C<const char **>.
+
+The head of the stack is indexed by C<PL_scopestack_ix>, an integer which
+stores the index of the array or arrays at which the next item should be
+pushed. (Note that this is different to most other stacks, which reference the
+most recently-pushed item).
+
+Values are pushed to the scope stack using the C<ENTER> macro, which begins a
+new nested scope. Any items pushed to the save stack are then restored at the
+next nested invocation of the C<LEAVE> macro.
=head1 Dynamic Scope and the Context Stack
@@ -3427,7 +3730,7 @@ Here is a typical example of context popping, as found in C<pp_leavesub>
The steps above are in a very specific order, designed to be the reverse
order of when the context was pushed. The first thing to do is to copy
-and/or protect any any return arguments and free any temps in the current
+and/or protect any return arguments and free any temps in the current
scope. Scope exits like an rvalue sub normally return a mortal copy of
their return args (as opposed to lvalue subs). It is important to make
this copy before the save stack is popped or variables are restored, or
diff --git a/gnu/usr.bin/perl/pod/perlhack.pod b/gnu/usr.bin/perl/pod/perlhack.pod
index 5c6695c82c9..8e856cfd4ee 100644
--- a/gnu/usr.bin/perl/pod/perlhack.pod
+++ b/gnu/usr.bin/perl/pod/perlhack.pod
@@ -137,14 +137,14 @@ are also referred to as the "Perl 5 Porters", "p5p" or just the
"porters".
A searchable archive of the list is available at
-L<http://markmail.org/search/?q=perl5-porters>. There is also an archive at
-L<http://archive.develooper.com/perl5-porters@perl.org/>.
+L<https://markmail.org/search/?q=perl5-porters>. There is also an archive at
+L<https://archive.develooper.com/perl5-porters@perl.org/>.
=head2 perl-changes mailing list
The perl5-changes mailing list receives a copy of each patch that gets
submitted to the maintenance and development branches of the perl
-repository. See L<http://lists.perl.org/list/perl5-changes.html> for
+repository. See L<https://lists.perl.org/list/perl5-changes.html> for
subscription and archive information.
=head2 #p5p on IRC
@@ -527,7 +527,7 @@ consideration.
Modules in the F<cpan/> directory of the source tree are maintained
outside of the Perl core. When the author updates the module, the
updates are simply copied into the core. See that module's
-documentation or its listing on L<http://search.cpan.org/> for more
+documentation or its listing on L<https://metacpan.org/> for more
information on reporting bugs and submitting patches.
In most cases, patches to modules in F<cpan/> should be sent upstream
@@ -684,7 +684,7 @@ still options for the future of prototypes that haven't been addressed.
Good patches (tight code, complete, correct) stand more chance of going
in. Sloppy or incorrect patches might be placed on the back burner
-until the pumpking has time to fix, or might be discarded altogether
+until fixes can be made, or they might be discarded altogether
without further notice.
=head3 Is the implementation generic enough to be portable?
@@ -721,7 +721,7 @@ man's pointless cruft.
=head3 Does it create too much work?
-Work for the pumpking, work for Perl programmers, work for module
+Work for the committers, work for Perl programmers, work for module
authors, ... Perl is supposed to be easy.
=head3 Patches speak louder than words
@@ -751,7 +751,7 @@ L<Test::More>, but avoids loading most modules and uses as few core
features as possible.
If you write your own test, use the L<Test Anything
-Protocol|http://testanything.org>.
+Protocol|https://testanything.org>.
=over 4
@@ -763,18 +763,22 @@ tested. Tests in F<t/opbasic>, for instance, have been placed there
rather than in F<t/op> because they test functionality which
F<t/test.pl> presumes has already been demonstrated to work.
-=item * F<t/cmd>, F<t/run>, F<t/io> and F<t/op>
+=item * All other subdirectories of F<t/>
Now that basic require() and subroutines are tested, you can use the
F<t/test.pl> library.
-You can also use certain libraries like Config conditionally, but be
+You can also use certain libraries like L<Config> conditionally, but be
sure to skip the test gracefully if it's not there.
-=item * Everything else
+=item * Test files not found under F<t/>
-Now that the core of Perl is tested, L<Test::More> can and should be
-used. You can also use the full suite of core modules in the tests.
+This category includes F<.t> files underneath directories such as F<dist>,
+F<ext> and F<lib>. Since the core of Perl has now been tested, L<Test::More>
+can and now should be used. You can also use the full suite of core modules
+in the tests. (As noted in L<"Patching a core module"> above, changes to
+F<.t> files found under F<cpan/> should be submitted to the upstream
+maintainers of those modules.)
=back
@@ -808,7 +812,7 @@ code point. This function returns C<"\xC2\xA0"> on an ASCII platform, and
C<"\x80\x41"> on an EBCDIC 1047 one.
But easiest is, if the character is specifiable as a literal, like
-C<"A"> or C<"%">, to use that; if not so specificable, you can use use
+C<"A"> or C<"%">, to use that; if not so specificable, you can use
C<\N{}> , if the side effects aren't troublesome. Simply specify all
your characters in hex, using C<\N{U+ZZ}> instead of C<\xZZ>. C<\N{}>
is the Unicode name, and so it
@@ -859,6 +863,12 @@ basic errors before you submit a patch.
Run F<miniperl> on F<t/base>, F<t/comp>, F<t/cmd>, F<t/run>, F<t/io>,
F<t/op>, F<t/uni> and F<t/mro> tests.
+F<miniperl> is a minimalistic perl built to bootstrap building
+extensions, utilties, documentation etc. It doesn't support dynamic
+loading and depending on the point in the build process will only have
+access to a limited set of core modules. F<miniperl> is not intended
+for day to day use.
+
=item * test.valgrind check.valgrind
(Only in Linux) Run all the tests using the memory leak + naughty
@@ -1053,7 +1063,7 @@ situation by using the Devel::PatchPerl library from CPAN (not included in the
core) to bring the source code at that commit to a buildable state.
Here's a real world example, taken from work done to resolve
-L<perl #72414|https://rt.perl.org/Ticket/Display.html?id=72414>.
+L<perl #10118|https://github.com/Perl/perl5/issues/10118>.
Use of F<Porting/bisect.pl> had identified commit
C<ba77e4cc9d1ceebf472c9c5c18b2377ee47062e6> as the commit in which a bug was
corrected. To confirm, a P5P developer wanted to configure and build perl at
@@ -1134,7 +1144,7 @@ source, and we'll do that later on.
Gisle Aas's "illustrated perlguts", also known as I<illguts>, has very
helpful pictures:
-L<http://search.cpan.org/dist/illguts/>
+L<https://search.cpan.org/dist/illguts/>
=item * L<perlxstut> and L<perlxs>
@@ -1152,18 +1162,18 @@ functions do, as well as the many macros used in the source.
=item * F<Porting/pumpkin.pod>
This is a collection of words of wisdom for a Perl porter; some of it
-is only useful to the pumpkin holder, but most of it applies to anyone
+is only useful to the pumpkin holders, but most of it applies to anyone
wanting to go about Perl development.
=back
=head1 CPAN TESTERS AND PERL SMOKERS
-The CPAN testers ( L<http://testers.cpan.org/> ) are a group of volunteers
+The CPAN testers ( L<http://cpantesters.org/> ) are a group of volunteers
who test CPAN modules on a variety of platforms.
-Perl Smokers ( L<http://www.nntp.perl.org/group/perl.daily-build/> and
-L<http://www.nntp.perl.org/group/perl.daily-build.reports/> )
+Perl Smokers ( L<https://www.nntp.perl.org/group/perl.daily-build/> and
+L<https://www.nntp.perl.org/group/perl.daily-build.reports/> )
automatically test Perl source releases on platforms with various
configurations.
diff --git a/gnu/usr.bin/perl/pod/perlhacktips.pod b/gnu/usr.bin/perl/pod/perlhacktips.pod
index d5c34dd5c18..d66869f92bf 100644
--- a/gnu/usr.bin/perl/pod/perlhacktips.pod
+++ b/gnu/usr.bin/perl/pod/perlhacktips.pod
@@ -432,7 +432,7 @@ Mixing declarations and code
That is C99 or C++. Some C compilers allow that, but you shouldn't.
-The gcc option C<-Wdeclaration-after-statements> scans for such
+The gcc option C<-Wdeclaration-after-statement> scans for such
problems (by default on starting from Perl 5.9.4).
=item *
@@ -648,6 +648,39 @@ you have to pass its length to C<newSVpv>.
=item *
+Perl strings are NOT the same as C strings: They may contain C<NUL>
+characters, whereas a C string is terminated by the first C<NUL>.
+That is why Perl API functions that deal with strings generally take a
+pointer to the first byte and either a length or a pointer to the byte
+just beyond the final one.
+
+And this is the reason that many of the C library string handling
+functions should not be used. They don't cope with the full generality
+of Perl strings. It may be that your test cases don't have embedded
+C<NUL>s, and so the tests pass, whereas there may well eventually arise
+real-world cases where they fail. A lesson here is to include C<NUL>s
+in your tests. Now it's fairly rare in most real world cases to get
+C<NUL>s, so your code may seem to work, until one day a C<NUL> comes
+along.
+
+Here's an example. It used to be a common paradigm, for decades, in the
+perl core to use S<C<strchr("list", c)>> to see if the character C<c> is
+any of the ones given in C<"list">, a double-quote-enclosed string of
+the set of characters that we are seeing if C<c> is one of. As long as
+C<c> isn't a C<NUL>, it works. But when C<c> is a C<NUL>, C<strchr>
+returns a pointer to the terminating C<NUL> in C<"list">. This likely
+will result in a segfault or a security issue when the caller uses that
+end pointer as the starting point to read from.
+
+A solution to this and many similar issues is to use the C<mem>I<-foo> C
+library functions instead. In this case C<memchr> can be used to see if
+C<c> is in C<"list"> and works even if C<c> is C<NUL>. These functions
+need an additional parameter to give the string length.
+In the case of literal string parameters, perl has defined macros that
+calculate the length for you. See L<perlapi/Miscellaneous Functions>.
+
+=item *
+
malloc(0), realloc(0), calloc(0, 0) are non-portable. To be portable
allocate at least one byte. (In general you should rarely need to work
at this low level, but instead use the various malloc wrappers.)
@@ -744,9 +777,10 @@ program, and to see in which C function we are at (without the debugging
information we might see only the numerical addresses of the functions,
which is not very helpful). It will also turn on the C<DEBUGGING>
compilation symbol which enables all the internal debugging code in Perl.
-There are a whole bunch of things you can debug with this: L<perlrun>
-lists them all, and the best way to find out about them is to play about
-with them. The most useful options are probably
+There are a whole bunch of things you can debug with this:
+L<perlrun|perlrun/-Dletters> lists them all, and the best way to find out
+about them is to play about with them. The most useful options are
+probably
l Context (loop) stack processing
s Stack snapshots (with v, displays all stacks)
@@ -1235,19 +1269,23 @@ To get valgrind and for more information see
=head2 AddressSanitizer
-AddressSanitizer is a clang and gcc extension, included in clang since
-v3.1 and gcc since v4.8. It checks illegal heap pointers, global
-pointers, stack pointers and use after free errors, and is fast enough
-that you can easily compile your debugging or optimized perl with it.
-It does not check memory leaks though. AddressSanitizer is available
-for Linux, Mac OS X and soon on Windows.
+AddressSanitizer ("ASan") consists of a compiler instrumentation module
+and a run-time C<malloc> library. ASan is available for a variety of
+architectures, operating systems, and compilers (see project link below).
+It checks for unsafe memory usage, such as use after free and buffer
+overflow conditions, and is fast enough that you can easily compile your
+debugging or optimized perl with it. Modern versions of ASan check for
+memory leaks by default on most platforms, otherwise (e.g. x86_64 OS X)
+this feature can be enabled via C<ASAN_OPTIONS=detect_leaks=1>.
+
To build perl with AddressSanitizer, your Configure invocation should
look like:
sh Configure -des -Dcc=clang \
- -Accflags=-faddress-sanitizer -Aldflags=-faddress-sanitizer \
- -Alddlflags=-shared\ -faddress-sanitizer
+ -Accflags=-fsanitize=address -Aldflags=-fsanitize=address \
+ -Alddlflags=-shared\ -fsanitize=address \
+ -fsanitize-blacklist=`pwd`/asan_ignore
where these arguments mean:
@@ -1258,25 +1296,31 @@ where these arguments mean:
This should be replaced by the full path to your clang executable if it
is not in your path.
-=item * -Accflags=-faddress-sanitizer
+=item * -Accflags=-fsanitize=address
Compile perl and extensions sources with AddressSanitizer.
-=item * -Aldflags=-faddress-sanitizer
+=item * -Aldflags=-fsanitize=address
Link the perl executable with AddressSanitizer.
-=item * -Alddlflags=-shared\ -faddress-sanitizer
+=item * -Alddlflags=-shared\ -fsanitize=address
Link dynamic extensions with AddressSanitizer. You must manually
specify C<-shared> because using C<-Alddlflags=-shared> will prevent
Configure from setting a default value for C<lddlflags>, which usually
contains C<-shared> (at least on Linux).
+=item * -fsanitize-blacklist=`pwd`/asan_ignore
+
+AddressSanitizer will ignore functions listed in the C<asan_ignore>
+file. (This file should contain a short explanation of why each of
+the functions is listed.)
+
=back
See also
-L<http://code.google.com/p/address-sanitizer/wiki/AddressSanitizer>.
+L<https://github.com/google/sanitizers/wiki/AddressSanitizer>.
=head1 PROFILING
diff --git a/gnu/usr.bin/perl/pod/perlhist.pod b/gnu/usr.bin/perl/pod/perlhist.pod
index 7cdab925615..6d689e2ee9b 100644
--- a/gnu/usr.bin/perl/pod/perlhist.pod
+++ b/gnu/usr.bin/perl/pod/perlhist.pod
@@ -34,7 +34,8 @@ Chris C<BinGOs> Williams, Zefram, Ævar Arnfjörð Bjarmason, Stevan
Little, Dave Rolsky, Max Maischein, Abigail, Jesse Luehrs, Tony Cook,
Dominic Hargreaves, Aaron Crane, Aristotle Pagaltzis, Matthew Horsfall,
Peter Martini, Sawyer X, Chad 'Exodist' Granum, Renee Bäcker, Eric Herman,
-John SJ Anderson, Karen Etheridge, Zak B. Elep, and Tom Hukins.
+John SJ Anderson, Karen Etheridge, Zak B. Elep, Tom Hukins, and Richard
+Leach.
=head2 PUMPKIN?
@@ -65,8 +66,8 @@ the strings?).
=head1 THE RECORDS
Pump- Release Date Notes
- king (by no means
- comprehensive,
+ kin (by no means
+ Holder comprehensive,
see Changes*
for details)
======================================================================
@@ -653,6 +654,8 @@ the strings?).
Steve 5.28.1 2018-Nov-29
Steve 5.28.2-RC1 2019-Apr-05
Steve 5.28.2 2019-Apr-19
+ Steve 5.28.3-RC1 2020-May-18
+ Steve 5.28.3 2020-Jun-01
Sawyer X 5.29.0 2018-Jun-26 The 5.29 development track
Steve 5.29.1 2018-Jul-20
@@ -689,6 +692,20 @@ the strings?).
Sawyer X 5.31.10 2020-Mar-20
Sawyer X 5.31.11 2020-Apr-28
+ Sawyer X 5.32.0-RC0 2020-May-30 The 5.32 maintenance track
+ Sawyer X 5.32.0-RC1 2020-Jun-07
+ Sawyer X 5.32.0 2020-Jun-20
+ Steve 5.32.1-RC1 2021-Jan-09
+ Steve 5.32.1 2021-Jan-23
+
+ Sawyer X 5.33.0 2020-Jul-17 The 5.33 development track
+ Ether 5.33.1 2020-Aug-20
+ Sawyer X 5.33.2 2020-Sep-20
+ Steve 5.33.3 2020-Oct-20
+ Tom H 5.33.4 2020-Nov-20
+ Max M 5.33.5 2020-Dec-20
+ Richard L 5.33.6 2021-Jan-20
+
=head2 SELECTED RELEASE SIZES
For example the notation "core: 212 29" in the release 1.000 means that
@@ -774,6 +791,7 @@ explained below.
5.26.0 9140 121 24925 1200 40643 3017 10514 2614 7854 211
5.28.0 13056 128 27267 1230 41745 3130 10952 2715 8185 218
5.30.0 13535 128 26294 1237 39643 3080 11083 2711 8252 222
+ 5.32.0 14147 127 25562 1255 40869 3098 11334 2734 8407 225
The "core"..."doc" mean the following files from the Perl source code
distribution. The glob notation ** means recursively, (.) means
@@ -1120,6 +1138,24 @@ the Perl source distribution for somewhat more selected releases.
win32 1313 65 1326 65 1331 65
x2p - - - - - -
+ 5.32.0
+
+ Configure: 588 1
+ Cross : 126 15
+ djgpp : 21 7
+ h2pl : 24 15
+ hints : 363 86
+ NetWare : 484 61
+ os2 : 552 70
+ plan9 : 308 17
+ Porting : 1482 75
+ qnx : 5 4
+ symbian : 307 54
+ utils : 583 52
+ vms : 527 12
+ vos : 12 7
+ win32 : 1011 47
+
=head2 SELECTED PATCH SIZES
The "diff lines kB" means that for example the patch 5.003_08, to be
diff --git a/gnu/usr.bin/perl/pod/perlintro.pod b/gnu/usr.bin/perl/pod/perlintro.pod
index 5c168c18e1e..36cf09e2e85 100644
--- a/gnu/usr.bin/perl/pod/perlintro.pod
+++ b/gnu/usr.bin/perl/pod/perlintro.pod
@@ -248,8 +248,8 @@ To get at hash elements:
You can get at lists of keys and values with C<keys()> and
C<values()>.
- my @fruits = keys %fruit_colors;
- my @colors = values %fruit_colors;
+ my @fruits = keys %fruit_color;
+ my @colors = values %fruit_color;
Hashes have no particular internal order, though you can sort the keys
and loop through them.
@@ -473,7 +473,7 @@ detail.)
= assignment
. string concatenation
- x string multiplication
+ x string multiplication (repeats strings)
.. range operator (creates a list of numbers or strings)
=back
diff --git a/gnu/usr.bin/perl/pod/perliol.pod b/gnu/usr.bin/perl/pod/perliol.pod
index b70a510aadd..a4bb7d674f3 100644
--- a/gnu/usr.bin/perl/pod/perliol.pod
+++ b/gnu/usr.bin/perl/pod/perliol.pod
@@ -21,7 +21,7 @@ maintain (source) compatibility.
The aim of the implementation is to provide the PerlIO API in a flexible
and platform neutral manner. It is also a trial of an "Object Oriented
-C, with vtables" approach which may be applied to Perl 6.
+C, with vtables" approach which may be applied to Raku.
=head2 Basic Structure
diff --git a/gnu/usr.bin/perl/pod/perlipc.pod b/gnu/usr.bin/perl/pod/perlipc.pod
index 902655dee6a..b5f7a296194 100644
--- a/gnu/usr.bin/perl/pod/perlipc.pod
+++ b/gnu/usr.bin/perl/pod/perlipc.pod
@@ -57,7 +57,7 @@ C<-1> on such platforms.
Some signals can be neither trapped nor ignored, such as the KILL and STOP
(but not the TSTP) signals. Note that ignoring signals makes them disappear.
If you only want them blocked temporarily without them getting lost you'll
-have to use POSIX' sigprocmask.
+have to use the C<POSIX> module's L<sigprocmask|POSIX/sigprocmask>.
Sending a signal to a negative process ID means that you send the signal
to the entire Unix process group. This code sends a hang-up signal to all
@@ -157,7 +157,7 @@ Here's an example:
eval {
local $SIG{ALRM} = sub { die $ALARM_EXCEPTION };
alarm 10;
- flock(FH, 2) # blocking write lock
+ flock($fh, 2) # blocking write lock
|| die "cannot flock: $!";
alarm 0;
};
@@ -407,41 +407,56 @@ out whether anyone (or anything) has accidentally removed our fifo.
unlink $FIFO; # discard any failure, will catch later
require POSIX; # delayed loading of heavy module
POSIX::mkfifo($FIFO, 0700)
- || die "can't mkfifo $FIFO: $!";
+ || die "can't mkfifo $FIFO: $!";
}
# next line blocks till there's a reader
- open (FIFO, "> $FIFO") || die "can't open $FIFO: $!";
- print FIFO "John Smith (smith\@host.org)\n", `fortune -s`;
- close(FIFO) || die "can't close $FIFO: $!";
+ open (my $fh, ">", $FIFO) || die "can't open $FIFO: $!";
+ print $fh "John Smith (smith\@host.org)\n", `fortune -s`;
+ close($fh) || die "can't close $FIFO: $!";
sleep 2; # to avoid dup signals
}
=head1 Using open() for IPC
Perl's basic open() statement can also be used for unidirectional
-interprocess communication by either appending or prepending a pipe
-symbol to the second argument to open(). Here's how to start
+interprocess communication by specifying the open mode as C<|-> or C<-|>.
+Here's how to start
something up in a child process you intend to write to:
- open(SPOOLER, "| cat -v | lpr -h 2>/dev/null")
+ open(my $spooler, "|-", "cat -v | lpr -h 2>/dev/null")
|| die "can't fork: $!";
local $SIG{PIPE} = sub { die "spooler pipe broke" };
- print SPOOLER "stuff\n";
- close SPOOLER || die "bad spool: $! $?";
+ print $spooler "stuff\n";
+ close $spooler || die "bad spool: $! $?";
And here's how to start up a child process you intend to read from:
- open(STATUS, "netstat -an 2>&1 |")
+ open(my $status, "-|", "netstat -an 2>&1")
|| die "can't fork: $!";
- while (<STATUS>) {
+ while (<$status>) {
next if /^(tcp|udp)/;
print;
}
- close STATUS || die "bad netstat: $! $?";
+ close $status || die "bad netstat: $! $?";
-If one can be sure that a particular program is a Perl script expecting
-filenames in @ARGV, the clever programmer can write something like this:
+Be aware that these operations are full Unix forks, which means they may
+not be correctly implemented on all alien systems. See L<perlport/open>
+for portability details.
+
+In the two-argument form of open(), a pipe open can be achieved by
+either appending or prepending a pipe symbol to the second argument:
+
+ open(my $spooler, "| cat -v | lpr -h 2>/dev/null")
+ || die "can't fork: $!";
+ open(my $status, "netstat -an 2>&1 |")
+ || die "can't fork: $!";
+
+This can be used even on systems that do not support forking, but this
+possibly allows code intended to read files to unexpectedly execute
+programs. If one can be sure that a particular program is a Perl script
+expecting filenames in @ARGV using the two-argument form of open() or the
+C<< <> >> operator, the clever programmer can write something like this:
% program f1 "cmd1|" - f2 "cmd2|" f3 < tmpfile
@@ -472,10 +487,10 @@ while readers of bogus commands return just a quick EOF, writers
to bogus commands will get hit with a signal, which they'd best be prepared
to handle. Consider:
- open(FH, "|bogus") || die "can't fork: $!";
- print FH "bang\n"; # neither necessary nor sufficient
- # to check print retval!
- close(FH) || die "can't close: $!";
+ open(my $fh, "|-", "bogus") || die "can't fork: $!";
+ print $fh "bang\n"; # neither necessary nor sufficient
+ # to check print retval!
+ close($fh) || die "can't close: $!";
The reason for not checking the return value from print() is because of
pipe buffering; physical writes are delayed. That won't blow up until the
@@ -483,9 +498,9 @@ close, and it will blow up with a SIGPIPE. To catch it, you could use
this:
$SIG{PIPE} = "IGNORE";
- open(FH, "|bogus") || die "can't fork: $!";
- print FH "bang\n";
- close(FH) || die "can't close: status=$?";
+ open(my $fh, "|-", "bogus") || die "can't fork: $!";
+ print $fh "bang\n";
+ close($fh) || die "can't close: status=$?";
=head2 Filehandles
@@ -519,13 +534,13 @@ output doesn't wind up on the user's terminal.
use POSIX "setsid";
sub daemonize {
- chdir("/") || die "can't chdir to /: $!";
- open(STDIN, "< /dev/null") || die "can't read /dev/null: $!";
- open(STDOUT, "> /dev/null") || die "can't write to /dev/null: $!";
- defined(my $pid = fork()) || die "can't fork: $!";
- exit if $pid; # non-zero now means I am the parent
- (setsid() != -1) || die "Can't start a new session: $!";
- open(STDERR, ">&STDOUT") || die "can't dup stdout: $!";
+ chdir("/") || die "can't chdir to /: $!";
+ open(STDIN, "<", "/dev/null") || die "can't read /dev/null: $!";
+ open(STDOUT, ">", "/dev/null") || die "can't write /dev/null: $!";
+ defined(my $pid = fork()) || die "can't fork: $!";
+ exit if $pid; # non-zero now means I am the parent
+ (setsid() != -1) || die "Can't start a new session: $!";
+ open(STDERR, ">&", STDOUT) || die "can't dup stdout: $!";
}
The fork() has to come before the setsid() to ensure you aren't a
@@ -540,6 +555,7 @@ other possible solutions.
Another interesting approach to IPC is making your single program go
multiprocess and communicate between--or even amongst--yourselves. The
+two-argument form of the
open() function will accept a file argument of either C<"-|"> or C<"|-">
to do a very interesting thing: it forks a child connected to the
filehandle you've opened. The child is running the same program as the
@@ -549,13 +565,13 @@ write to the filehandle you opened and your kid will find it in I<his>
STDIN. If you open a pipe I<from> minus, you can read from the filehandle
you opened whatever your kid writes to I<his> STDOUT.
- use English;
my $PRECIOUS = "/path/to/some/safe/file";
my $sleep_count;
my $pid;
+ my $kid_to_write;
do {
- $pid = open(KID_TO_WRITE, "|-");
+ $pid = open($kid_to_write, "|-");
unless (defined $pid) {
warn "cannot fork: $!";
die "bailing out" if $sleep_count++ > 6;
@@ -564,17 +580,17 @@ you opened whatever your kid writes to I<his> STDOUT.
} until defined $pid;
if ($pid) { # I am the parent
- print KID_TO_WRITE @some_data;
- close(KID_TO_WRITE) || warn "kid exited $?";
+ print $kid_to_write @some_data;
+ close($kid_to_write) || warn "kid exited $?";
} else { # I am the child
# drop permissions in setuid and/or setgid programs:
- ($EUID, $EGID) = ($UID, $GID);
- open (OUTFILE, "> $PRECIOUS")
+ ($>, $)) = ($<, $();
+ open (my $outfile, ">", $PRECIOUS)
|| die "can't open $PRECIOUS: $!";
while (<STDIN>) {
- print OUTFILE; # child's STDIN is parent's KID_TO_WRITE
+ print $outfile; # child STDIN is parent $kid_to_write
}
- close(OUTFILE) || die "can't close $PRECIOUS: $!";
+ close($outfile) || die "can't close $PRECIOUS: $!";
exit(0); # don't forget this!!
}
@@ -586,37 +602,37 @@ your arguments. Instead, use lower-level control to call exec() directly.
Here's a safe backtick or pipe open for read:
- my $pid = open(KID_TO_READ, "-|");
- defined($pid) || die "can't fork: $!";
+ my $pid = open(my $kid_to_read, "-|");
+ defined($pid) || die "can't fork: $!";
if ($pid) { # parent
- while (<KID_TO_READ>) {
+ while (<$kid_to_read>) {
# do something interesting
}
- close(KID_TO_READ) || warn "kid exited $?";
+ close($kid_to_read) || warn "kid exited $?";
} else { # child
- ($EUID, $EGID) = ($UID, $GID); # suid only
+ ($>, $)) = ($<, $(); # suid only
exec($program, @options, @args)
- || die "can't exec program: $!";
+ || die "can't exec program: $!";
# NOTREACHED
}
And here's a safe pipe open for writing:
- my $pid = open(KID_TO_WRITE, "|-");
- defined($pid) || die "can't fork: $!";
+ my $pid = open(my $kid_to_write, "|-");
+ defined($pid) || die "can't fork: $!";
$SIG{PIPE} = sub { die "whoops, $program pipe broke" };
if ($pid) { # parent
- print KID_TO_WRITE @data;
- close(KID_TO_WRITE) || warn "kid exited $?";
+ print $kid_to_write @data;
+ close($kid_to_write) || warn "kid exited $?";
} else { # child
- ($EUID, $EGID) = ($UID, $GID);
+ ($>, $)) = ($<, $();
exec($program, @options, @args)
- || die "can't exec program: $!";
+ || die "can't exec program: $!";
# NOTREACHED
}
@@ -626,23 +642,23 @@ example above is "safe" because it is simple and calls exec(). See
L</"Avoiding Pipe Deadlocks"> for general safety principles, but there
are extra gotchas with Safe Pipe Opens.
-In particular, if you opened the pipe using C<open FH, "|-">, then you
+In particular, if you opened the pipe using C<open $fh, "|-">, then you
cannot simply use close() in the parent process to close an unwanted
writer. Consider this code:
- my $pid = open(WRITER, "|-"); # fork open a kid
+ my $pid = open(my $writer, "|-"); # fork open a kid
defined($pid) || die "first fork failed: $!";
if ($pid) {
if (my $sub_pid = fork()) {
defined($sub_pid) || die "second fork failed: $!";
- close(WRITER) || die "couldn't close WRITER: $!";
+ close($writer) || die "couldn't close writer: $!";
# now do something else...
}
else {
- # first write to WRITER
+ # first write to $writer
# ...
# then when finished
- close(WRITER) || die "couldn't close WRITER: $!";
+ close($writer) || die "couldn't close writer: $!";
exit(0);
}
}
@@ -651,9 +667,9 @@ writer. Consider this code:
exit(0);
}
-In the example above, the true parent does not want to write to the WRITER
-filehandle, so it closes it. However, because WRITER was opened using
-C<open FH, "|-">, it has a special behavior: closing it calls
+In the example above, the true parent does not want to write to the $writer
+filehandle, so it closes it. However, because $writer was opened using
+C<open $fh, "|-">, it has a special behavior: closing it calls
waitpid() (see L<perlfunc/waitpid>), which waits for the subprocess
to exit. If the child process ends up waiting for something happening
in the section marked "do something else", you have deadlock.
@@ -665,27 +681,27 @@ during global destruction--in no predictable order.
To solve this, you must manually use pipe(), fork(), and the form of
open() which sets one file descriptor to another, as shown below:
- pipe(READER, WRITER) || die "pipe failed: $!";
- $pid = fork();
- defined($pid) || die "first fork failed: $!";
+ pipe(my $reader, my $writer) || die "pipe failed: $!";
+ my $pid = fork();
+ defined($pid) || die "first fork failed: $!";
if ($pid) {
- close READER;
+ close $reader;
if (my $sub_pid = fork()) {
- defined($sub_pid) || die "first fork failed: $!";
- close(WRITER) || die "can't close WRITER: $!";
+ defined($sub_pid) || die "first fork failed: $!";
+ close($writer) || die "can't close writer: $!";
}
else {
- # write to WRITER...
+ # write to $writer...
# ...
# then when finished
- close(WRITER) || die "can't close WRITER: $!";
+ close($writer) || die "can't close writer: $!";
exit(0);
}
- # write to WRITER...
+ # write to $writer...
}
else {
- open(STDIN, "<&READER") || die "can't reopen STDIN: $!";
- close(WRITER) || die "can't close WRITER: $!";
+ open(STDIN, "<&", $reader) || die "can't reopen STDIN: $!";
+ close($writer) || die "can't close writer: $!";
# do something...
exit(0);
}
@@ -696,20 +712,20 @@ metacharacters that may be in your command string.
So for example, instead of using:
- open(PS_PIPE, "ps aux|") || die "can't open ps pipe: $!";
+ open(my $ps_pipe, "-|", "ps aux") || die "can't open ps pipe: $!";
One would use either of these:
- open(PS_PIPE, "-|", "ps", "aux")
- || die "can't open ps pipe: $!";
+ open(my $ps_pipe, "-|", "ps", "aux")
+ || die "can't open ps pipe: $!";
- @ps_args = qw[ ps aux ];
- open(PS_PIPE, "-|", @ps_args)
- || die "can't open @ps_args|: $!";
+ my @ps_args = qw[ ps aux ];
+ open(my $ps_pipe, "-|", @ps_args)
+ || die "can't open @ps_args|: $!";
-Because there are more than three arguments to open(), forks the ps(1)
+Because there are more than three arguments to open(), it forks the ps(1)
command I<without> spawning a shell, and reads its standard output via the
-C<PS_PIPE> filehandle. The corresponding syntax to I<write> to command
+C<$ps_pipe> filehandle. The corresponding syntax to I<write> to command
pipes is to use C<"|-"> in place of C<"-|">.
This was admittedly a rather silly example, because you're using string
@@ -718,16 +734,13 @@ resort to the harder-to-read, multi-argument form of pipe open(). However,
whenever you cannot be assured that the program arguments are free of shell
metacharacters, the fancier form of open() should be used. For example:
- @grep_args = ("egrep", "-i", $some_pattern, @many_files);
- open(GREP_PIPE, "-|", @grep_args)
+ my @grep_args = ("egrep", "-i", $some_pattern, @many_files);
+ open(my $grep_pipe, "-|", @grep_args)
|| die "can't open @grep_args|: $!";
Here the multi-argument form of pipe open() is preferred because the
pattern and indeed even the filenames themselves might hold metacharacters.
-Be aware that these operations are full Unix forks, which means they may
-not be correctly implemented on all alien systems.
-
=head2 Avoiding Pipe Deadlocks
Whenever you have more than one subprocess, you must be careful that each
@@ -756,7 +769,7 @@ While this works reasonably well for unidirectional communication, what
about bidirectional communication? The most obvious approach doesn't work:
# THIS DOES NOT WORK!!
- open(PROG_FOR_READING_AND_WRITING, "| some program |")
+ open(my $prog_for_reading_and_writing, "| some program |")
If you forget to C<use warnings>, you'll miss out entirely on the
helpful diagnostic message:
@@ -764,8 +777,8 @@ helpful diagnostic message:
Can't do bidirectional pipe at -e line 1.
If you really want to, you can use the standard open2() from the
-C<IPC::Open2> module to catch both ends. There's also an open3() in
-C<IPC::Open3> for tridirectional I/O so you can also catch your child's
+L<IPC::Open2> module to catch both ends. There's also an open3() in
+L<IPC::Open3> for tridirectional I/O so you can also catch your child's
STDERR, but doing so would then require an awkward select() loop and
wouldn't allow you to use normal Perl input operations.
@@ -783,14 +796,14 @@ Unixy systems anyway. Which one of those is true?
Here's an example of using open2():
- use FileHandle;
use IPC::Open2;
- $pid = open2(*Reader, *Writer, "cat -un");
- print Writer "stuff\n";
- $got = <Reader>;
+ my $pid = open2(my $reader, my $writer, "cat -un");
+ print $writer "stuff\n";
+ my $got = <$reader>;
+ waitpid $pid, 0;
The problem with this is that buffering is really going to ruin your
-day. Even though your C<Writer> filehandle is auto-flushed so the process
+day. Even though your C<$writer> filehandle is auto-flushed so the process
on the other end gets your data in a timely manner, you can't usually do
anything to force that process to give its data to you in a similarly quick
fashion. In this special case, we could actually so, because we gave
@@ -813,68 +826,72 @@ this together by hand. This example only talks to itself, but you could
reopen the appropriate handles to STDIN and STDOUT and call other processes.
(The following example lacks proper error checking.)
- #!/usr/bin/perl -w
+ #!/usr/bin/perl
# pipe1 - bidirectional communication using two pipe pairs
# designed for the socketpair-challenged
- use IO::Handle; # thousands of lines just for autoflush :-(
- pipe(PARENT_RDR, CHILD_WTR); # XXX: check failure?
- pipe(CHILD_RDR, PARENT_WTR); # XXX: check failure?
- CHILD_WTR->autoflush(1);
- PARENT_WTR->autoflush(1);
+ use strict;
+ use warnings;
+ use IO::Handle; # enable autoflush method before Perl 5.14
+ pipe(my $parent_rdr, my $child_wtr); # XXX: check failure?
+ pipe(my $child_rdr, my $parent_wtr); # XXX: check failure?
+ $child_wtr->autoflush(1);
+ $parent_wtr->autoflush(1);
if ($pid = fork()) {
- close PARENT_RDR;
- close PARENT_WTR;
- print CHILD_WTR "Parent Pid $$ is sending this\n";
- chomp($line = <CHILD_RDR>);
+ close $parent_rdr;
+ close $parent_wtr;
+ print $child_wtr "Parent Pid $$ is sending this\n";
+ chomp(my $line = <$child_rdr>);
print "Parent Pid $$ just read this: '$line'\n";
- close CHILD_RDR; close CHILD_WTR;
+ close $child_rdr; close $child_wtr;
waitpid($pid, 0);
} else {
die "cannot fork: $!" unless defined $pid;
- close CHILD_RDR;
- close CHILD_WTR;
- chomp($line = <PARENT_RDR>);
+ close $child_rdr;
+ close $child_wtr;
+ chomp(my $line = <$parent_rdr>);
print "Child Pid $$ just read this: '$line'\n";
- print PARENT_WTR "Child Pid $$ is sending this\n";
- close PARENT_RDR;
- close PARENT_WTR;
+ print $parent_wtr "Child Pid $$ is sending this\n";
+ close $parent_rdr;
+ close $parent_wtr;
exit(0);
}
But you don't actually have to make two pipe calls. If you
have the socketpair() system call, it will do this all for you.
- #!/usr/bin/perl -w
+ #!/usr/bin/perl
# pipe2 - bidirectional communication using socketpair
# "the best ones always go both ways"
+ use strict;
+ use warnings;
use Socket;
- use IO::Handle; # thousands of lines just for autoflush :-(
+ use IO::Handle; # enable autoflush method before Perl 5.14
# We say AF_UNIX because although *_LOCAL is the
# POSIX 1003.1g form of the constant, many machines
# still don't have it.
- socketpair(CHILD, PARENT, AF_UNIX, SOCK_STREAM, PF_UNSPEC)
+ socketpair(my $child, my $parent, AF_UNIX, SOCK_STREAM, PF_UNSPEC)
|| die "socketpair: $!";
- CHILD->autoflush(1);
- PARENT->autoflush(1);
+ $child->autoflush(1);
+ $parent->autoflush(1);
if ($pid = fork()) {
- close PARENT;
- print CHILD "Parent Pid $$ is sending this\n";
- chomp($line = <CHILD>);
+ close $parent;
+ print $child "Parent Pid $$ is sending this\n";
+ chomp(my $line = <$child>);
print "Parent Pid $$ just read this: '$line'\n";
- close CHILD;
+ close $child;
waitpid($pid, 0);
} else {
die "cannot fork: $!" unless defined $pid;
- close CHILD;
- chomp($line = <PARENT>);
+ close $child;
+ chomp(my $line = <$parent>);
print "Child Pid $$ just read this: '$line'\n";
- print PARENT "Child Pid $$ is sending this\n";
- close PARENT;
+ print $parent "Child Pid $$ is sending this\n";
+ close $parent;
exit(0);
}
@@ -897,7 +914,7 @@ One of the major problems with ancient, antemillennial socket code in Perl
was that it used hard-coded values for some of the constants, which
severely hurt portability. If you ever see code that does anything like
explicitly setting C<$AF_INET = 2>, you know you're in for big trouble.
-An immeasurably superior approach is to use the C<Socket> module, which more
+An immeasurably superior approach is to use the L<Socket> module, which more
reliably grants access to the various constants and functions you'll need.
If you're not writing a server/client for an existing protocol like
@@ -927,26 +944,26 @@ communication that might extend to machines outside of your own system.
Here's a sample TCP client using Internet-domain sockets:
- #!/usr/bin/perl -w
+ #!/usr/bin/perl
use strict;
+ use warnings;
use Socket;
- my ($remote, $port, $iaddr, $paddr, $proto, $line);
- $remote = shift || "localhost";
- $port = shift || 2345; # random port
+ my $remote = shift || "localhost";
+ my $port = shift || 2345; # random port
if ($port =~ /\D/) { $port = getservbyname($port, "tcp") }
die "No port" unless $port;
- $iaddr = inet_aton($remote) || die "no host: $remote";
- $paddr = sockaddr_in($port, $iaddr);
+ my $iaddr = inet_aton($remote) || die "no host: $remote";
+ my $paddr = sockaddr_in($port, $iaddr);
- $proto = getprotobyname("tcp");
- socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
- connect(SOCK, $paddr) || die "connect: $!";
- while ($line = <SOCK>) {
+ my $proto = getprotobyname("tcp");
+ socket(my $sock, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
+ connect($sock, $paddr) || die "connect: $!";
+ while (my $line = <$sock>) {
print $line;
}
- close (SOCK) || die "close: $!";
+ close ($sock) || die "close: $!";
exit(0);
And here's a corresponding server to go along with it. We'll
@@ -955,8 +972,9 @@ the appropriate interface on multihomed hosts. If you want sit
on a particular interface (like the external side of a gateway
or firewall machine), fill this in with your real address instead.
- #!/usr/bin/perl -Tw
+ #!/usr/bin/perl -T
use strict;
+ use warnings;
BEGIN { $ENV{PATH} = "/usr/bin:/bin" }
use Socket;
use Carp;
@@ -969,17 +987,15 @@ or firewall machine), fill this in with your real address instead.
my $proto = getprotobyname("tcp");
- socket(Server, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
- setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))
- || die "setsockopt: $!";
- bind(Server, sockaddr_in($port, INADDR_ANY)) || die "bind: $!";
- listen(Server, SOMAXCONN) || die "listen: $!";
+ socket(my $server, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
+ setsockopt($server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))
+ || die "setsockopt: $!";
+ bind($server, sockaddr_in($port, INADDR_ANY)) || die "bind: $!";
+ listen($server, SOMAXCONN) || die "listen: $!";
logmsg "server started on port $port";
- my $paddr;
-
- for ( ; $paddr = accept(Client, Server); close Client) {
+ for (my $paddr; $paddr = accept(my $client, $server); close $client) {
my($port, $iaddr) = sockaddr_in($paddr);
my $name = gethostbyaddr($iaddr, AF_INET);
@@ -987,7 +1003,7 @@ or firewall machine), fill this in with your real address instead.
inet_ntoa($iaddr), "]
at port $port";
- print Client "Hello there, $name, it's now ",
+ print $client "Hello there, $name, it's now ",
scalar localtime(), $EOL;
}
@@ -996,8 +1012,9 @@ like most typical servers, it spawns (fork()s) a slave server to
handle the client request so that the master server can quickly
go back to service a new client.
- #!/usr/bin/perl -Tw
+ #!/usr/bin/perl -T
use strict;
+ use warnings;
BEGIN { $ENV{PATH} = "/usr/bin:/bin" }
use Socket;
use Carp;
@@ -1011,16 +1028,15 @@ go back to service a new client.
my $proto = getprotobyname("tcp");
- socket(Server, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
- setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))
- || die "setsockopt: $!";
- bind(Server, sockaddr_in($port, INADDR_ANY)) || die "bind: $!";
- listen(Server, SOMAXCONN) || die "listen: $!";
+ socket(my $server, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
+ setsockopt($server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1))
+ || die "setsockopt: $!";
+ bind($server, sockaddr_in($port, INADDR_ANY)) || die "bind: $!";
+ listen($server, SOMAXCONN) || die "listen: $!";
logmsg "server started on port $port";
my $waitedpid = 0;
- my $paddr;
use POSIX ":sys_wait_h";
use Errno;
@@ -1036,7 +1052,7 @@ go back to service a new client.
$SIG{CHLD} = \&REAPER;
while (1) {
- $paddr = accept(Client, Server) || do {
+ my $paddr = accept(my $client, $server) || do {
# try again if accept() returned because got a signal
next if $!{EINTR};
die "accept: $!";
@@ -1048,7 +1064,7 @@ go back to service a new client.
inet_ntoa($iaddr),
"] at port $port";
- spawn sub {
+ spawn $client, sub {
$| = 1;
print "Hello there, $name, it's now ",
scalar localtime(),
@@ -1056,14 +1072,15 @@ go back to service a new client.
exec "/usr/games/fortune" # XXX: "wrong" line terminators
or confess "can't exec fortune: $!";
};
- close Client;
+ close $client;
}
sub spawn {
+ my $client = shift;
my $coderef = shift;
unless (@_ == 0 && $coderef && ref($coderef) eq "CODE") {
- confess "usage: spawn CODEREF";
+ confess "usage: spawn CLIENT CODEREF";
}
my $pid;
@@ -1077,9 +1094,9 @@ go back to service a new client.
}
# else I'm the child -- go spawn
- open(STDIN, "<&Client") || die "can't dup client to stdin";
- open(STDOUT, ">&Client") || die "can't dup client to stdout";
- ## open(STDERR, ">&STDOUT") || die "can't dup stdout to stderr";
+ open(STDIN, "<&", $client) || die "can't dup client to stdin";
+ open(STDOUT, ">&", $client) || die "can't dup client to stdout";
+ ## open(STDERR, ">&", STDOUT) || die "can't dup stdout to stderr";
exit($coderef->());
}
@@ -1121,8 +1138,9 @@ Let's look at another TCP client. This one connects to the TCP "time"
service on a number of different machines and shows how far their clocks
differ from the system on which it's being run:
- #!/usr/bin/perl -w
+ #!/usr/bin/perl
use strict;
+ use warnings;
use Socket;
my $SECS_OF_70_YEARS = 2208988800;
@@ -1132,21 +1150,20 @@ differ from the system on which it's being run:
my $proto = getprotobyname("tcp");
my $port = getservbyname("time", "tcp");
my $paddr = sockaddr_in(0, $iaddr);
- my($host);
$| = 1;
printf "%-24s %8s %s\n", "localhost", 0, ctime();
- foreach $host (@ARGV) {
+ foreach my $host (@ARGV) {
printf "%-24s ", $host;
my $hisiaddr = inet_aton($host) || die "unknown host";
my $hispaddr = sockaddr_in($port, $hisiaddr);
- socket(SOCKET, PF_INET, SOCK_STREAM, $proto)
+ socket(my $socket, PF_INET, SOCK_STREAM, $proto)
|| die "socket: $!";
- connect(SOCKET, $hispaddr) || die "connect: $!";
+ connect($socket, $hispaddr) || die "connect: $!";
my $rtime = pack("C4", ());
- read(SOCKET, $rtime, 4);
- close(SOCKET);
+ read($socket, $rtime, 4);
+ close($socket);
my $histime = unpack("N", $rtime) - $SECS_OF_70_YEARS;
printf "%8d %s\n", $histime - time(), ctime($histime);
}
@@ -1170,15 +1187,15 @@ You can test for these with Perl's B<-S> file test:
Here's a sample Unix-domain client:
- #!/usr/bin/perl -w
+ #!/usr/bin/perl
use Socket;
use strict;
- my ($rendezvous, $line);
+ use warnings;
- $rendezvous = shift || "catsock";
- socket(SOCK, PF_UNIX, SOCK_STREAM, 0) || die "socket: $!";
- connect(SOCK, sockaddr_un($rendezvous)) || die "connect: $!";
- while (defined($line = <SOCK>)) {
+ my $rendezvous = shift || "catsock";
+ socket(my $sock, PF_UNIX, SOCK_STREAM, 0) || die "socket: $!";
+ connect($sock, sockaddr_un($rendezvous)) || die "connect: $!";
+ while (defined(my $line = <$sock>)) {
print $line;
}
exit(0);
@@ -1187,8 +1204,9 @@ And here's a corresponding server. You don't have to worry about silly
network terminators here because Unix domain sockets are guaranteed
to be on the localhost, and thus everything works right.
- #!/usr/bin/perl -Tw
+ #!/usr/bin/perl -T
use strict;
+ use warnings;
use Socket;
use Carp;
@@ -1200,10 +1218,10 @@ to be on the localhost, and thus everything works right.
my $uaddr = sockaddr_un($NAME);
my $proto = getprotobyname("tcp");
- socket(Server, PF_UNIX, SOCK_STREAM, 0) || die "socket: $!";
+ socket(my $server, PF_UNIX, SOCK_STREAM, 0) || die "socket: $!";
unlink($NAME);
- bind (Server, $uaddr) || die "bind: $!";
- listen(Server, SOMAXCONN) || die "listen: $!";
+ bind ($server, $uaddr) || die "bind: $!";
+ listen($server, SOMAXCONN) || die "listen: $!";
logmsg "server started on $NAME";
@@ -1222,22 +1240,23 @@ to be on the localhost, and thus everything works right.
for ( $waitedpid = 0;
- accept(Client, Server) || $waitedpid;
- $waitedpid = 0, close Client)
+ accept(my $client, $server) || $waitedpid;
+ $waitedpid = 0, close $client)
{
next if $waitedpid;
logmsg "connection on $NAME";
- spawn sub {
+ spawn $client, sub {
print "Hello there, it's now ", scalar localtime(), "\n";
exec("/usr/games/fortune") || die "can't exec fortune: $!";
};
}
sub spawn {
+ my $client = shift();
my $coderef = shift();
unless (@_ == 0 && $coderef && ref($coderef) eq "CODE") {
- confess "usage: spawn CODEREF";
+ confess "usage: spawn CLIENT CODEREF";
}
my $pid;
@@ -1253,9 +1272,12 @@ to be on the localhost, and thus everything works right.
# I'm the child -- go spawn
}
- open(STDIN, "<&Client") || die "can't dup client to stdin";
- open(STDOUT, ">&Client") || die "can't dup client to stdout";
- ## open(STDERR, ">&STDOUT") || die "can't dup stdout to stderr";
+ open(STDIN, "<&", $client)
+ || die "can't dup client to stdin";
+ open(STDOUT, ">&", $client)
+ || die "can't dup client to stdout";
+ ## open(STDERR, ">&", STDOUT)
+ ## || die "can't dup stdout to stderr";
exit($coderef->());
}
@@ -1290,9 +1312,11 @@ Here's a client that creates a TCP connection to the "daytime"
service at port 13 of the host name "localhost" and prints out everything
that the server there cares to provide.
- #!/usr/bin/perl -w
+ #!/usr/bin/perl
+ use strict;
+ use warnings;
use IO::Socket;
- $remote = IO::Socket::INET->new(
+ my $remote = IO::Socket::INET->new(
Proto => "tcp",
PeerAddr => "localhost",
PeerPort => "daytime(13)",
@@ -1337,22 +1361,6 @@ worked, but numeric literals make careful programmers nervous.
=back
-Notice how the return value from the C<new> constructor is used as
-a filehandle in the C<while> loop? That's what's called an I<indirect
-filehandle>, a scalar variable containing a filehandle. You can use
-it the same way you would a normal filehandle. For example, you
-can read one line from it this way:
-
- $line = <$handle>;
-
-all remaining lines from is this way:
-
- @lines = <$handle>;
-
-and send a line of data to it this way:
-
- print $handle "some data\n";
-
=head2 A Webget Client
Here's a simple client that takes a remote host to fetch a document
@@ -1360,16 +1368,18 @@ from, and then a list of files to get from that host. This is a
more interesting client than the previous one because it first sends
something to the server before fetching the server's response.
- #!/usr/bin/perl -w
+ #!/usr/bin/perl
+ use strict;
+ use warnings;
use IO::Socket;
unless (@ARGV > 1) { die "usage: $0 host url ..." }
- $host = shift(@ARGV);
- $EOL = "\015\012";
- $BLANK = $EOL x 2;
+ my $host = shift(@ARGV);
+ my $EOL = "\015\012";
+ my $BLANK = $EOL x 2;
for my $document (@ARGV) {
- $remote = IO::Socket::INET->new( Proto => "tcp",
- PeerAddr => $host,
- PeerPort => "http(80)",
+ my $remote = IO::Socket::INET->new( Proto => "tcp",
+ PeerAddr => $host,
+ PeerPort => "http(80)",
) || die "cannot connect to httpd on $host";
$remote->autoflush(1);
print $remote "GET $document HTTP/1.0" . $BLANK;
@@ -1439,30 +1449,30 @@ well, which is probably why it's spread to other systems.)
Here's the code:
- #!/usr/bin/perl -w
+ #!/usr/bin/perl
use strict;
+ use warnings;
use IO::Socket;
- my ($host, $port, $kidpid, $handle, $line);
unless (@ARGV == 2) { die "usage: $0 host port" }
- ($host, $port) = @ARGV;
+ my ($host, $port) = @ARGV;
# create a tcp connection to the specified host and port
- $handle = IO::Socket::INET->new(Proto => "tcp",
- PeerAddr => $host,
- PeerPort => $port)
+ my $handle = IO::Socket::INET->new(Proto => "tcp",
+ PeerAddr => $host,
+ PeerPort => $port)
|| die "can't connect to port $port on $host: $!";
$handle->autoflush(1); # so output gets there right away
print STDERR "[Connected to $host:$port]\n";
# split the program into two processes, identical twins
- die "can't fork: $!" unless defined($kidpid = fork());
+ die "can't fork: $!" unless defined(my $kidpid = fork());
# the if{} block runs only in the parent process
if ($kidpid) {
# copy the socket to standard output
- while (defined ($line = <$handle>)) {
+ while (defined (my $line = <$handle>)) {
print STDOUT $line;
}
kill("TERM", $kidpid); # send SIGTERM to child
@@ -1470,7 +1480,7 @@ Here's the code:
# the else{} block runs only in the child process
else {
# copy standard input to the socket
- while (defined ($line = <STDIN>)) {
+ while (defined (my $line = <STDIN>)) {
print $handle $line;
}
exit(0); # just in case
@@ -1552,26 +1562,28 @@ the client. Unlike most network servers, this one handles only one
incoming client at a time. Multitasking servers are covered in
Chapter 16 of the Camel.
-Here's the code. We'll
+Here's the code.
- #!/usr/bin/perl -w
+ #!/usr/bin/perl
+ use strict;
+ use warnings;
use IO::Socket;
use Net::hostent; # for OOish version of gethostbyaddr
- $PORT = 9000; # pick something not in use
+ my $PORT = 9000; # pick something not in use
- $server = IO::Socket::INET->new( Proto => "tcp",
- LocalPort => $PORT,
- Listen => SOMAXCONN,
- Reuse => 1);
+ my $server = IO::Socket::INET->new( Proto => "tcp",
+ LocalPort => $PORT,
+ Listen => SOMAXCONN,
+ Reuse => 1);
die "can't setup server" unless $server;
print "[Server $0 accepting clients]\n";
- while ($client = $server->accept()) {
+ while (my $client = $server->accept()) {
$client->autoflush(1);
print $client "Welcome to $0; type help for command list.\n";
- $hostinfo = gethostbyaddr($client->peeraddr);
+ my $hostinfo = gethostbyaddr($client->peeraddr);
printf "[Connect from %s]\n",
$hostinfo ? $hostinfo->name : $client->peerhost;
print $client "Command? ";
@@ -1614,45 +1626,42 @@ will check many of them asynchronously by simulating a multicast and then
using select() to do a timed-out wait for I/O. To do something similar
with TCP, you'd have to use a different socket handle for each host.
- #!/usr/bin/perl -w
+ #!/usr/bin/perl
use strict;
+ use warnings;
use Socket;
use Sys::Hostname;
- my ( $count, $hisiaddr, $hispaddr, $histime,
- $host, $iaddr, $paddr, $port, $proto,
- $rin, $rout, $rtime, $SECS_OF_70_YEARS);
-
- $SECS_OF_70_YEARS = 2_208_988_800;
+ my $SECS_OF_70_YEARS = 2_208_988_800;
- $iaddr = gethostbyname(hostname());
- $proto = getprotobyname("udp");
- $port = getservbyname("time", "udp");
- $paddr = sockaddr_in(0, $iaddr); # 0 means let kernel pick
+ my $iaddr = gethostbyname(hostname());
+ my $proto = getprotobyname("udp");
+ my $port = getservbyname("time", "udp");
+ my $paddr = sockaddr_in(0, $iaddr); # 0 means let kernel pick
- socket(SOCKET, PF_INET, SOCK_DGRAM, $proto) || die "socket: $!";
- bind(SOCKET, $paddr) || die "bind: $!";
+ socket(my $socket, PF_INET, SOCK_DGRAM, $proto) || die "socket: $!";
+ bind($socket, $paddr) || die "bind: $!";
$| = 1;
printf "%-12s %8s %s\n", "localhost", 0, scalar localtime();
- $count = 0;
- for $host (@ARGV) {
+ my $count = 0;
+ for my $host (@ARGV) {
$count++;
- $hisiaddr = inet_aton($host) || die "unknown host";
- $hispaddr = sockaddr_in($port, $hisiaddr);
- defined(send(SOCKET, 0, 0, $hispaddr)) || die "send $host: $!";
+ my $hisiaddr = inet_aton($host) || die "unknown host";
+ my $hispaddr = sockaddr_in($port, $hisiaddr);
+ defined(send($socket, 0, 0, $hispaddr)) || die "send $host: $!";
}
- $rin = "";
- vec($rin, fileno(SOCKET), 1) = 1;
+ my $rout = my $rin = "";
+ vec($rin, fileno($socket), 1) = 1;
# timeout after 10.0 seconds
while ($count && select($rout = $rin, undef, undef, 10.0)) {
- $rtime = "";
- $hispaddr = recv(SOCKET, $rtime, 4, 0) || die "recv: $!";
- ($port, $hisiaddr) = sockaddr_in($hispaddr);
- $host = gethostbyaddr($hisiaddr, AF_INET);
- $histime = unpack("N", $rtime) - $SECS_OF_70_YEARS;
+ my $rtime = "";
+ my $hispaddr = recv($socket, $rtime, 4, 0) || die "recv: $!";
+ my ($port, $hisiaddr) = sockaddr_in($hispaddr);
+ my $host = gethostbyaddr($hisiaddr, AF_INET);
+ my $histime = unpack("N", $rtime) - $SECS_OF_70_YEARS;
printf "%-12s ", $host;
printf "%8d %s\n", $histime - time(), scalar localtime($histime);
$count--;
@@ -1675,15 +1684,15 @@ Here's a small example showing shared memory usage.
use IPC::SysV qw(IPC_PRIVATE IPC_RMID S_IRUSR S_IWUSR);
- $size = 2000;
- $id = shmget(IPC_PRIVATE, $size, S_IRUSR | S_IWUSR);
+ my $size = 2000;
+ my $id = shmget(IPC_PRIVATE, $size, S_IRUSR | S_IWUSR);
defined($id) || die "shmget: $!";
print "shm key $id\n";
- $message = "Message #1";
+ my $message = "Message #1";
shmwrite($id, $message, 0, 60) || die "shmwrite: $!";
print "wrote: '$message'\n";
- shmread($id, $buff, 0, 60) || die "shmread: $!";
+ shmread($id, my $buff, 0, 60) || die "shmread: $!";
print "read : '$buff'\n";
# the buffer of shmread is zero-character end-padded.
@@ -1698,8 +1707,8 @@ Here's an example of a semaphore:
use IPC::SysV qw(IPC_CREAT);
- $IPC_KEY = 1234;
- $id = semget($IPC_KEY, 10, 0666 | IPC_CREAT);
+ my $IPC_KEY = 1234;
+ my $id = semget($IPC_KEY, 10, 0666 | IPC_CREAT);
defined($id) || die "semget: $!";
print "sem id $id\n";
@@ -1708,22 +1717,22 @@ Call the file F<take>:
# create a semaphore
- $IPC_KEY = 1234;
- $id = semget($IPC_KEY, 0, 0);
+ my $IPC_KEY = 1234;
+ my $id = semget($IPC_KEY, 0, 0);
defined($id) || die "semget: $!";
- $semnum = 0;
- $semflag = 0;
+ my $semnum = 0;
+ my $semflag = 0;
# "take" semaphore
# wait for semaphore to be zero
- $semop = 0;
- $opstring1 = pack("s!s!s!", $semnum, $semop, $semflag);
+ my $semop = 0;
+ my $opstring1 = pack("s!s!s!", $semnum, $semop, $semflag);
# Increment the semaphore count
$semop = 1;
- $opstring2 = pack("s!s!s!", $semnum, $semop, $semflag);
- $opstring = $opstring1 . $opstring2;
+ my $opstring2 = pack("s!s!s!", $semnum, $semop, $semflag);
+ my $opstring = $opstring1 . $opstring2;
semop($id, $opstring) || die "semop: $!";
@@ -1734,16 +1743,16 @@ Call this file F<give>:
# run this in the original process and you will see
# that the second process continues
- $IPC_KEY = 1234;
- $id = semget($IPC_KEY, 0, 0);
+ my $IPC_KEY = 1234;
+ my $id = semget($IPC_KEY, 0, 0);
die unless defined($id);
- $semnum = 0;
- $semflag = 0;
+ my $semnum = 0;
+ my $semflag = 0;
# Decrement the semaphore count
- $semop = -1;
- $opstring = pack("s!s!s!", $semnum, $semop, $semflag);
+ my $semop = -1;
+ my $opstring = pack("s!s!s!", $semnum, $semop, $semflag);
semop($id, $opstring) || die "semop: $!";
@@ -1786,8 +1795,9 @@ check return values from these functions. Always begin your socket
programs this way for optimal success, and don't forget to add the B<-T>
taint-checking flag to the C<#!> line for servers:
- #!/usr/bin/perl -Tw
+ #!/usr/bin/perl -T
use strict;
+ use warnings;
use sigtrap;
use Socket;
diff --git a/gnu/usr.bin/perl/pod/perllocale.pod b/gnu/usr.bin/perl/pod/perllocale.pod
index ec1af276034..e03dc84371e 100644
--- a/gnu/usr.bin/perl/pod/perllocale.pod
+++ b/gnu/usr.bin/perl/pod/perllocale.pod
@@ -42,9 +42,13 @@ C<ge>. Starting in v5.26, Perl can handle these reasonably as well,
depending on the platform's implementation. However, for earlier
releases or for better control, use L<Unicode::Collate>. There are
actually two slightly different types of UTF-8 locales: one for Turkic
-languages and one for everything else. Starting in Perl v5.30, Perl
-seamlessly handles both types; previously only the non-Turkic one was
-supported.
+languages and one for everything else.
+
+Starting in Perl v5.30, Perl detects Turkic locales by their
+behaviour, and seamlessly handles both types; previously only the
+non-Turkic one was supported. The name of the locale is ignored, if
+your system has a C<tr_TR.UTF-8> locale and it doesn't behave like a
+Turkic locale, perl will treat it like a non-Turkic locale.
Perl continues to support the old non UTF-8 locales as well. There are
currently no UTF-8 locales for EBCDIC platforms.
@@ -313,7 +317,7 @@ perform a char-by-char comparison, and only returns I<0> (equal) if the
operands are char-for-char identical. If you really want to know whether
two strings--which C<eq> and C<cmp> may consider different--are equal
as far as collation in the locale is concerned, see the discussion in
-L<Category C<LC_COLLATE>: Collation>.
+L</Category C<LC_COLLATE>: Collation>.
=item *
@@ -408,7 +412,10 @@ L<thread|threads>. The locale will change in all other threads at the
same time, and should your thread get paused by the operating system,
and another started, that thread will not have the locale it is
expecting. On some platforms, there can be a race leading to segfaults
-if two threads call this function nearly simultaneously.
+if two threads call this function nearly simultaneously. This warning
+does not apply on unthreaded builds, or on perls where
+C<${^SAFE_LOCALES}> exists and is non-zero; namely Perl 5.28 and later
+unthreaded or compiled to be locale-thread-safe.
You can switch locales as often as you wish at run time with the
C<POSIX::setlocale()> function:
@@ -477,7 +484,7 @@ be noticed, depending on your system's C library.
Note that when a form of C<use locale> that doesn't include all
categories is specified, Perl ignores the excluded categories.
-If C<set_locale()> fails for some reason (for example, an attempt to set
+If C<setlocale()> fails for some reason (for example, an attempt to set
to a locale unknown to the system), the locale for the category is not
changed, and the function returns C<undef>.
@@ -1018,7 +1025,7 @@ should use C<\w> with the C</a> regular expression modifier. See L</"SECURITY">
=head2 Category C<LC_NUMERIC>: Numeric Formatting
-After a proper C<POSIX::setlocale()> call, and within the scope of
+After a proper C<POSIX::setlocale()> call, and within the scope
of a C<use locale> form that includes numerics, Perl obeys the
C<LC_NUMERIC> locale information, which controls an application's idea
of how numbers should be formatted for human readability.
@@ -1465,7 +1472,7 @@ system's implementation of the locale system than by Perl.
The Unicode CLDR project extracts the POSIX portion of many of its
locales, available at
- http://unicode.org/Public/cldr/2.0.1/
+ https://unicode.org/Public/cldr/2.0.1/
(Newer versions of CLDR require you to compute the POSIX data yourself.
See L<http://unicode.org/Public/cldr/latest/>.)
@@ -1526,8 +1533,8 @@ instead use the L<PerlIO::locale> module, or the L<Encode::Locale>
module, both available from CPAN. The latter module also has methods to
ease the handling of C<ARGV> and environment variables, and can be used
on individual strings. If you know that all your locales will be
-UTF-8, as many are these days, you can use the L<B<-C>|perlrun/-C>
-command line switch.
+UTF-8, as many are these days, you can use the
+L<B<-C>|perlrun/-C [numberE<sol>list]> command line switch.
This form of the pragma allows essentially seamless handling of locales
with Unicode. The collation order will be by Unicode code point order.
@@ -1547,9 +1554,9 @@ multi-byte:
The only multi-byte (or wide character) locale that Perl is ever likely
to support is UTF-8. This is due to the difficulty of implementation,
the fact that high quality UTF-8 locales are now published for every
-area of the world (L<http://unicode.org/Public/cldr/2.0.1/> for
+area of the world (L<https://unicode.org/Public/cldr/2.0.1/> for
ones that are already set-up, but from an earlier version;
-L<http://unicode.org/Public/cldr/latest/> for the most up-to-date, but
+L<https://unicode.org/Public/cldr/latest/> for the most up-to-date, but
you have to extract the POSIX information yourself), and that
failing all that you can use the L<Encode> module to translate to/from
your locale. So, you'll have to do one of those things if you're using
@@ -1603,7 +1610,8 @@ lowercase of U+0178 is itself.
The same problems ensue if you enable automatic UTF-8-ification of your
standard file handles, default C<open()> layer, and C<@ARGV> on non-ISO8859-1,
non-UTF-8 locales (by using either the B<-C> command line switch or the
-C<PERL_UNICODE> environment variable; see L<perlrun>).
+C<PERL_UNICODE> environment variable; see
+L<perlrun|perlrun/-C [numberE<sol>list]>).
Things are read in as UTF-8, which would normally imply a Unicode
interpretation, but the presence of a locale causes them to be interpreted
in that locale instead. For example, a 0xD7 code point in the Unicode
diff --git a/gnu/usr.bin/perl/pod/perlmodinstall.pod b/gnu/usr.bin/perl/pod/perlmodinstall.pod
index 8cd44fd125a..aba1ab995ff 100644
--- a/gnu/usr.bin/perl/pod/perlmodinstall.pod
+++ b/gnu/usr.bin/perl/pod/perlmodinstall.pod
@@ -7,10 +7,10 @@ perlmodinstall - Installing CPAN Modules
You can think of a module as the fundamental unit of reusable Perl
code; see L<perlmod> for details. Whenever anyone creates a chunk of
Perl code that they think will be useful to the world, they register
-as a Perl developer at L<http://www.cpan.org/modules/04pause.html>
+as a Perl developer at L<https://www.cpan.org/modules/04pause.html>
so that they can then upload their code to the CPAN. The CPAN is the
Comprehensive Perl Archive Network and can be accessed at
-L<http://www.cpan.org/> , and searched at L<http://search.cpan.org/> .
+L<https://www.cpan.org/> , and searched at L<https://metacpan.org/> .
This documentation is for people who want to download CPAN modules
and install them on their own computer.
@@ -68,7 +68,7 @@ directory) and use this approach.
B<If you're on a Unix or Unix-like system,>
You can use Andreas Koenig's CPAN module
-( L<http://www.cpan.org/modules/by-module/CPAN> )
+( L<https://metacpan.org/release/CPAN> )
to automate the following steps, from DECOMPRESS through INSTALL.
A. DECOMPRESS
@@ -79,11 +79,11 @@ You can get gzip from L<ftp://prep.ai.mit.edu/pub/gnu/>
Or, you can combine this step with the next to save disk space:
- gzip -dc yourmodule.tar.gz | tar -xf -
+ gzip -dc yourmodule.tar.gz | tar -xof -
B. UNPACK
-Unpack the result with C<tar -xf yourmodule.tar>
+Unpack the result with C<tar -xof yourmodule.tar>
C. BUILD
@@ -128,7 +128,9 @@ steps below.
A. DECOMPRESS
-You can use the shareware Winzip ( L<http://www.winzip.com> ) to
+You can use the
+open source 7-zip ( L<https://www.7-zip.org/> )
+or the shareware Winzip ( L<https://www.winzip.com> ) to
decompress and unpack modules.
B. UNPACK
@@ -197,8 +199,8 @@ You will need the packages mentioned in F<README.dos> in the Perl distribution.
B<If you're on OS/2,>
-Get the EMX development suite and gzip/tar, from either Hobbes (
-L<http://hobbes.nmsu.edu> ) or Leo ( L<http://www.leo.org> ), and then follow
+Get the EMX development suite and gzip/tar from Hobbes (
+L<http://hobbes.nmsu.edu/h-browse.php?dir=/pub/os2/dev/emx/v0.9d> ), and then follow
the instructions for Unix.
=item *
@@ -333,7 +335,7 @@ not a module will work under your platform. If the module you want
isn't listed there, you can test it yourself and let CPAN Testers know,
you can join CPAN Testers, or you can request it be tested.
- http://testers.cpan.org/
+ https://cpantesters.org/
=head1 HEY
@@ -343,7 +345,7 @@ don't send me mail asking for help on how to install your modules.
There are too many modules, and too few Orwants, for me to be able to
answer or even acknowledge all your questions. Contact the module
author instead, ask someone familiar with Perl on your operating
-system, or if all else fails, file a ticket at L<http://rt.cpan.org/>.
+system, or if all else fails, file a ticket at L<https://rt.cpan.org/>.
=head1 AUTHOR
diff --git a/gnu/usr.bin/perl/pod/perlmodlib.PL b/gnu/usr.bin/perl/pod/perlmodlib.PL
index aed957ae516..989b8be592b 100644
--- a/gnu/usr.bin/perl/pod/perlmodlib.PL
+++ b/gnu/usr.bin/perl/pod/perlmodlib.PL
@@ -64,7 +64,6 @@ for my $filename (@files) {
die "p5p-controlled module $filename missing =head1 NAME\n"
if $filename !~ m{^(dist/|cpan/)}n # under our direct control
&& $filename !~ m{/_[^/]+\z} # not private
- && $filename !~ m{/unicore/} # not unicore
&& $filename ne 'lib/meta_notation.pm' # no pod
&& $filename ne 'lib/overload/numbers.pm'; # no pod
warn "$filename missing =head1 NAME\n" unless $Quiet;
@@ -239,7 +238,7 @@ CPAN stands for Comprehensive Perl Archive Network; it's a globally
replicated trove of Perl materials, including documentation, style
guides, tricks and traps, alternate ports to non-Unix systems and
occasional binary distributions for these. Search engines for
-CPAN can be found at http://www.cpan.org/
+CPAN can be found at https://www.cpan.org/
Most importantly, CPAN includes around a thousand unbundled modules,
some of which require a C compiler to build. Major categories of
@@ -1099,7 +1098,7 @@ Generated by Porting/make_modlib_cpan.pl
For an up-to-date listing of CPAN sites,
-see L<http://www.cpan.org/SITES> or L<ftp://www.cpan.org/SITES>.
+see L<https://www.cpan.org/SITES> or L<ftp://www.cpan.org/SITES>.
=head1 Modules: Creation, Use, and Abuse
@@ -1307,7 +1306,7 @@ unique in the first 8 characters. Nested modules make this easier.
For additional guidance on the naming of modules, please consult:
- http://pause.perl.org/pause/query?ACTION=pause_namingmodules
+ https://pause.perl.org/pause/query?ACTION=pause_namingmodules
or send mail to the <module-authors@perl.org> mailing list.
@@ -1427,11 +1426,11 @@ How to release and distribute a module.
If possible, register the module with CPAN. Follow the instructions
and links on:
- http://www.cpan.org/modules/04pause.html
+ https://www.cpan.org/modules/04pause.html
and upload to:
- http://pause.perl.org/
+ https://pause.perl.org/
and notify <modules@perl.org>. This will allow anyone to install
your module using the C<cpan> tool distributed with Perl.
diff --git a/gnu/usr.bin/perl/pod/perlmodstyle.pod b/gnu/usr.bin/perl/pod/perlmodstyle.pod
index 73e09b38cdd..74672acdb31 100644
--- a/gnu/usr.bin/perl/pod/perlmodstyle.pod
+++ b/gnu/usr.bin/perl/pod/perlmodstyle.pod
@@ -182,9 +182,9 @@ been done in Perl, and avoid re-inventing the wheel unless you have a
good reason.
Good places to look for pre-existing modules include
-L<http://search.cpan.org/> and L<https://metacpan.org>
+L<MetaCPAN|https://metacpan.org> and L<PrePAN|http://prepan.org>
and asking on C<module-authors@perl.org>
-(L<http://lists.perl.org/list/module-authors.html>).
+(L<https://lists.perl.org/list/module-authors.html>).
If an existing module B<almost> does what you want, consider writing a
patch, writing a subclass, or otherwise extending the existing module
@@ -255,7 +255,7 @@ developers.
You should also try to get feedback from people who are already familiar
with the module's application domain and the CPAN naming system. Authors
of similar modules, or modules with similar names, may be a good place to
-start, as are community sites like L<Perl Monks|http://www.perlmonks.org>.
+start, as are community sites like L<Perl Monks|https://www.perlmonks.org>.
=head1 DESIGNING AND WRITING YOUR MODULE
@@ -798,7 +798,7 @@ L<ExtUtils::MakeMaker>, L<Module::Build>
L<Test::Simple>, L<Test::Inline>, L<Carp::Assert>, L<Test::More>, L<Test::MockObject>
-=item L<http://pause.perl.org/>
+=item L<https://pause.perl.org/>
Perl Authors Upload Server. Contains links to information for module
authors.
diff --git a/gnu/usr.bin/perl/pod/perlmroapi.pod b/gnu/usr.bin/perl/pod/perlmroapi.pod
index 4d19cdab5f3..c585441fc92 100644
--- a/gnu/usr.bin/perl/pod/perlmroapi.pod
+++ b/gnu/usr.bin/perl/pod/perlmroapi.pod
@@ -79,10 +79,14 @@ stash, and a pointer to your C<mro_alg> structure:
meta = HvMROMETA(stash);
private_sv = MRO_GET_PRIVATE_DATA(meta, &my_mro_alg);
+=for apidoc mro_get_private_data
+
To set your private value, call C<Perl_mro_set_private_data()>:
Perl_mro_set_private_data(aTHX_ meta, &c3_alg, private_sv);
+=for apidoc mro_set_private_data
+
The private data cache will take ownership of a reference to private_sv,
much the same way that C<hv_store()> takes ownership of a reference to the
value that you pass it.
diff --git a/gnu/usr.bin/perl/pod/perlnewmod.pod b/gnu/usr.bin/perl/pod/perlnewmod.pod
index 61cc7bfc418..48003e6ad68 100644
--- a/gnu/usr.bin/perl/pod/perlnewmod.pod
+++ b/gnu/usr.bin/perl/pod/perlnewmod.pod
@@ -98,7 +98,7 @@ might not actually be any real demand for it out there. If you're unsure
about the demand your module will have, consider asking the
C<module-authors@perl.org> mailing list (send an email to
C<module-authors-subscribe@perl.org> to subscribe; see
-L<http://lists.perl.org/list/module-authors.html> for more information
+L<https://lists.perl.org/list/module-authors.html> for more information
and a link to the archives).
=item Choose a name
diff --git a/gnu/usr.bin/perl/pod/perlootut.pod b/gnu/usr.bin/perl/pod/perlootut.pod
index d7474b4b4da..b11f628e8e1 100644
--- a/gnu/usr.bin/perl/pod/perlootut.pod
+++ b/gnu/usr.bin/perl/pod/perlootut.pod
@@ -466,7 +466,7 @@ of Perl as "the first postmodern computer language".
C<Moose> provides a complete, modern OO system. Its biggest influence
is the Common Lisp Object System, but it also borrows ideas from
Smalltalk and several other languages. C<Moose> was created by Stevan
-Little, and draws heavily from his work on the Perl 6 OO design.
+Little, and draws heavily from his work on the Raku OO design.
Here is our C<File> class using C<Moose>:
diff --git a/gnu/usr.bin/perl/pod/perlop.pod b/gnu/usr.bin/perl/pod/perlop.pod
index 5b60a3b63c4..3e6c10f7676 100644
--- a/gnu/usr.bin/perl/pod/perlop.pod
+++ b/gnu/usr.bin/perl/pod/perlop.pod
@@ -36,7 +36,8 @@ C<(2 + 4) * 5>. So the expression yields C<2 + 20 == 22>, rather than
C<6 * 5 == 30>.
I<Operator associativity> defines what happens if a sequence of the same
-operators is used one after another: whether they will be grouped at the left
+operators is used one after another:
+usually that they will be grouped at the left
or the right. For example, in C<9 - 3 - 2>, subtraction is left associative,
so C<9 - 3> is grouped together as the left-hand operand of the second
subtraction, rather than C<3 - 2> being grouped together as the right-hand
@@ -59,6 +60,63 @@ special evaluation rules that can result in an operand not being evaluated at
all; in general, the top-level operator in an expression has control of
operand evaluation.
+Some comparison operators, as their associativity, I<chain> with some
+operators of the same precedence (but never with operators of different
+precedence). This chaining means that each comparison is performed
+on the two arguments surrounding it, with each interior argument taking
+part in two comparisons, and the comparison results are implicitly ANDed.
+Thus S<C<"$x E<lt> $y E<lt>= $z">> behaves exactly like S<C<"$x E<lt>
+$y && $y E<lt>= $z">>, assuming that C<"$y"> is as simple a scalar as
+it looks. The ANDing short-circuits just like C<"&&"> does, stopping
+the sequence of comparisons as soon as one yields false.
+
+In a chained comparison, each argument expression is evaluated at most
+once, even if it takes part in two comparisons, but the result of the
+evaluation is fetched for each comparison. (It is not evaluated
+at all if the short-circuiting means that it's not required for any
+comparisons.) This matters if the computation of an interior argument
+is expensive or non-deterministic. For example,
+
+ if($x < expensive_sub() <= $z) { ...
+
+is not entirely like
+
+ if($x < expensive_sub() && expensive_sub() <= $z) { ...
+
+but instead closer to
+
+ my $tmp = expensive_sub();
+ if($x < $tmp && $tmp <= $z) { ...
+
+in that the subroutine is only called once. However, it's not exactly
+like this latter code either, because the chained comparison doesn't
+actually involve any temporary variable (named or otherwise): there is
+no assignment. This doesn't make much difference where the expression
+is a call to an ordinary subroutine, but matters more with an lvalue
+subroutine, or if the argument expression yields some unusual kind of
+scalar by other means. For example, if the argument expression yields
+a tied scalar, then the expression is evaluated to produce that scalar
+at most once, but the value of that scalar may be fetched up to twice,
+once for each comparison in which it is actually used.
+
+In this example, the expression is evaluated only once, and the tied
+scalar (the result of the expression) is fetched for each comparison that
+uses it.
+
+ if ($x < $tied_scalar < $z) { ...
+
+In the next example, the expression is evaluated only once, and the tied
+scalar is fetched once as part of the operation within the expression.
+The result of that operation is fetched for each comparison, which
+normally doesn't matter unless that expression result is also magical due
+to operator overloading.
+
+ if ($x < $tied_scalar + 42 < $z) { ...
+
+Some operators are instead non-associative, meaning that it is a syntax
+error to use a sequence of those operators of the same precedence.
+For example, S<C<"$x .. $y .. $z">> is an error.
+
Perl operators have the following associativity and precedence,
listed from highest precedence to lowest. Operators borrowed from
C keep the same precedence relationship with each other, even where
@@ -76,8 +134,9 @@ values only, not array values.
left + - .
left << >>
nonassoc named unary operators
- nonassoc < > <= >= lt gt le ge
- nonassoc == != <=> eq ne cmp ~~
+ chained < > <= >= lt gt le ge
+ chain/na == != eq ne <=> cmp ~~
+ nonassoc isa
left &
left | ^
left &&
@@ -516,6 +575,12 @@ Binary C<"ge"> returns true if the left argument is stringwise greater
than or equal to the right argument.
X<< ge >>
+A sequence of relational operators, such as S<C<"$x E<lt> $y E<lt>=
+$z">>, performs chained comparisons, in the manner described above in
+the section L</"Operator Precedence and Associativity">.
+Beware that they do not chain with equality operators, which have lower
+precedence.
+
=head2 Equality Operators
X<equality> X<equal> X<equals> X<operator, equality>
@@ -527,6 +592,20 @@ Binary C<< "!=" >> returns true if the left argument is numerically not equal
to the right argument.
X<!=>
+Binary C<"eq"> returns true if the left argument is stringwise equal to
+the right argument.
+X<eq>
+
+Binary C<"ne"> returns true if the left argument is stringwise not equal
+to the right argument.
+X<ne>
+
+A sequence of the above equality operators, such as S<C<"$x == $y ==
+$z">>, performs chained comparisons, in the manner described above in
+the section L</"Operator Precedence and Associativity">.
+Beware that they do not chain with relational operators, which have
+higher precedence.
+
Binary C<< "<=>" >> returns -1, 0, or 1 depending on whether the left
argument is numerically less than, equal to, or greater than the right
argument. If your platform supports C<NaN>'s (not-a-numbers) as numeric
@@ -544,14 +623,6 @@ X<spaceship>
(Note that the L<bigint>, L<bigrat>, and L<bignum> pragmas all
support C<"NaN">.)
-Binary C<"eq"> returns true if the left argument is stringwise equal to
-the right argument.
-X<eq>
-
-Binary C<"ne"> returns true if the left argument is stringwise not equal
-to the right argument.
-X<ne>
-
Binary C<"cmp"> returns -1, 0, or 1 depending on whether the left
argument is stringwise less than, equal to, or greater than the right
argument.
@@ -561,6 +632,10 @@ Binary C<"~~"> does a smartmatch between its arguments. Smart matching
is described in the next section.
X<~~>
+The two-sided ordering operators C<"E<lt>=E<gt>"> and C<"cmp">, and the
+smartmatch operator C<"~~">, are non-associative with respect to each
+other and with respect to the equality operators of the same precedence.
+
C<"lt">, C<"le">, C<"ge">, C<"gt"> and C<"cmp"> use the collation (sort)
order specified by the current C<LC_COLLATE> locale if a S<C<use
locale>> form that includes collation is in effect. See L<perllocale>.
@@ -575,6 +650,25 @@ function, available in Perl v5.16 or later:
if ( fc($x) eq fc($y) ) { ... }
+=head2 Class Instance Operator
+X<isa operator>
+
+Binary C<isa> evaluates to true when the left argument is an object instance of
+the class (or a subclass derived from that class) given by the right argument.
+If the left argument is not defined, not a blessed object instance, nor does
+not derive from the class given by the right argument, the operator evaluates
+as false. The right argument may give the class either as a bareword or a
+scalar expression that yields a string class name:
+
+ if( $obj isa Some::Class ) { ... }
+
+ if( $obj isa "Different::Class" ) { ... }
+ if( $obj isa $name_of_class ) { ... }
+
+This is an experimental feature and is available from Perl 5.31.6 when enabled
+by C<use feature 'isa'>. It emits a warning in the C<experimental::isa>
+category.
+
=head2 Smartmatch Operator
First available in Perl 5.10.1 (the 5.10.0 version behaved differently),
@@ -1081,26 +1175,89 @@ And now some examples as a list operator:
@foo = @foo[0 .. $#foo]; # an expensive no-op
@foo = @foo[$#foo-4 .. $#foo]; # slice last 5 items
-The range operator (in list context) makes use of the magical
-auto-increment algorithm if the operands are strings. You
-can say
+Because each operand is evaluated in integer form, S<C<2.18 .. 3.14>> will
+return two elements in list context.
+
+ @list = (2.18 .. 3.14); # same as @list = (2 .. 3);
- @alphabet = ("A" .. "Z");
+The range operator in list context can make use of the magical
+auto-increment algorithm if both operands are strings, subject to the
+following rules:
-to get all normal letters of the English alphabet, or
+=over
- $hexdigit = (0 .. 9, "a" .. "f")[$num & 15];
+=item *
+
+With one exception (below), if both strings look like numbers to Perl,
+the magic increment will not be applied, and the strings will be treated
+as numbers (more specifically, integers) instead.
+
+For example, C<"-2".."2"> is the same as C<-2..2>, and
+C<"2.18".."3.14"> produces C<2, 3>.
+
+=item *
+
+The exception to the above rule is when the left-hand string begins with
+C<0> and is longer than one character, in this case the magic increment
+I<will> be applied, even though strings like C<"01"> would normally look
+like a number to Perl.
-to get a hexadecimal digit, or
+For example, C<"01".."04"> produces C<"01", "02", "03", "04">, and
+C<"00".."-1"> produces C<"00"> through C<"99"> - this may seem
+surprising, but see the following rules for why it works this way.
+To get dates with leading zeros, you can say:
@z2 = ("01" .. "31");
print $z2[$mday];
-to get dates with leading zeros.
+If you want to force strings to be interpreted as numbers, you could say
+
+ @numbers = ( 0+$first .. 0+$last );
+
+B<Note:> In Perl versions 5.30 and below, I<any> string on the left-hand
+side beginning with C<"0">, including the string C<"0"> itself, would
+cause the magic string increment behavior. This means that on these Perl
+versions, C<"0".."-1"> would produce C<"0"> through C<"99">, which was
+inconsistent with C<0..-1>, which produces the empty list. This also means
+that C<"0".."9"> now produces a list of integers instead of a list of
+strings.
+
+=item *
+
+If the initial value specified isn't part of a magical increment
+sequence (that is, a non-empty string matching C</^[a-zA-Z]*[0-9]*\z/>),
+only the initial value will be returned.
+
+For example, C<"ax".."az"> produces C<"ax", "ay", "az">, but
+C<"*x".."az"> produces only C<"*x">.
+
+=item *
+
+For other initial values that are strings that do follow the rules of the
+magical increment, the corresponding sequence will be returned.
+
+For example, you can say
+
+ @alphabet = ("A" .. "Z");
+
+to get all normal letters of the English alphabet, or
+
+ $hexdigit = (0 .. 9, "a" .. "f")[$num & 15];
+
+to get a hexadecimal digit.
+
+=item *
If the final value specified is not in the sequence that the magical
increment would produce, the sequence goes until the next value would
-be longer than the final value specified.
+be longer than the final value specified. If the length of the final
+string is shorter than the first, the empty list is returned.
+
+For example, C<"a".."--"> is the same as C<"a".."zz">, C<"0".."xx">
+produces C<"0"> through C<"99">, and C<"aaa".."--"> returns the empty
+list.
+
+=back
As of Perl 5.26, the list-context range operator on strings works as expected
in the scope of L<< S<C<"use feature 'unicode_strings">>|feature/The
@@ -1108,10 +1265,8 @@ in the scope of L<< S<C<"use feature 'unicode_strings">>|feature/The
that feature, it exhibits L<perlunicode/The "Unicode Bug">: its behavior
depends on the internal encoding of the range endpoint.
-If the initial value specified isn't part of a magical increment
-sequence (that is, a non-empty string matching C</^[a-zA-Z]*[0-9]*\z/>),
-only the initial value will be returned. So the following will only
-return an alpha:
+Because the magical increment only works on non-empty strings matching
+C</^[a-zA-Z]*[0-9]*\z/>, the following will only return an alpha:
use charnames "greek";
my @greek_small = ("\N{alpha}" .. "\N{omega}");
@@ -1131,11 +1286,6 @@ you could use the pattern C</(?:(?=\p{Greek})\p{Lower})+/> (or the
L<experimental feature|perlrecharclass/Extended Bracketed Character
Classes> C<S</(?[ \p{Greek} & \p{Lower} ])+/>>).
-Because each operand is evaluated in integer form, S<C<2.18 .. 3.14>> will
-return two elements in list context.
-
- @list = (2.18 .. 3.14); # same as @list = (2 .. 3);
-
=head2 Conditional Operator
X<operator, conditional> X<operator, ternary> X<ternary> X<?:>
@@ -1455,7 +1605,7 @@ X<\o{}>
\b backspace (BS)
\a alarm (bell) (BEL)
\e escape (ESC)
- \x{263A} [1,8] hex char (example: SMILEY)
+ \x{263A} [1,8] hex char (example shown: SMILEY)
\x1b [2,8] restricted range hex char (example: ESC)
\N{name} [3] named Unicode character or character sequence
\N{U+263D} [4,8] Unicode character (example: FIRST QUARTER MOON)
@@ -1660,7 +1810,7 @@ and although they often accept just C<"\012">, they seldom tolerate just
C<"\015">. If you get in the habit of using C<"\n"> for networking,
you may be burned some day.
X<newline> X<line terminator> X<eol> X<end of line>
-X<\r>
+X<\n> X<\r> X<\r\n>
For constructs that do interpolate, variables beginning with "C<$>"
or "C<@>" are interpolated. Subscripted variables such as C<$a[3]> or
@@ -2228,6 +2378,9 @@ to occur that you might want. Here are two common cases:
# expand tabs to 8-column spacing
1 while s/\t+/' ' x (length($&)*8 - length($`)%8)/e;
+X</c>While C<s///> accepts the C</c> flag, it has no effect beyond
+producing a warning if warnings are enabled.
+
=back
=head2 Quote-Like Operators
@@ -2251,7 +2404,7 @@ the delimiter or backslash is interpolated.
=item C<qq/I<STRING>/>
X<qq> X<quote, double> X<"> X<"">
-=item "I<STRING>"
+=item C<"I<STRING>">
A double-quoted, interpolated string.
@@ -2266,13 +2419,16 @@ X<qx> X<`> X<``> X<backtick>
=item C<`I<STRING>`>
A string which is (possibly) interpolated and then executed as a
-system command with F</bin/sh> or its equivalent. Shell wildcards,
-pipes, and redirections will be honored. The collected standard
-output of the command is returned; standard error is unaffected. In
-scalar context, it comes back as a single (potentially multi-line)
-string, or C<undef> if the command failed. In list context, returns a
+system command, via F</bin/sh> or its equivalent if required. Shell
+wildcards, pipes, and redirections will be honored. Similarly to
+C<system>, if the string contains no shell metacharacters then it will
+executed directly. The collected standard output of the command is
+returned; standard error is unaffected. In scalar context, it comes
+back as a single (potentially multi-line) string, or C<undef> if the
+shell (or command) could not be started. In list context, returns a
list of lines (however you've defined lines with C<$/> or
-C<$INPUT_RECORD_SEPARATOR>), or an empty list if the command failed.
+C<$INPUT_RECORD_SEPARATOR>), or an empty list if the shell (or command)
+could not be started.
Because backticks do not affect standard error, use shell file descriptor
syntax (assuming the shell supports this) if you care to address this.
diff --git a/gnu/usr.bin/perl/pod/perlpacktut.pod b/gnu/usr.bin/perl/pod/perlpacktut.pod
index ce3dba1799f..0ede0d59120 100644
--- a/gnu/usr.bin/perl/pod/perlpacktut.pod
+++ b/gnu/usr.bin/perl/pod/perlpacktut.pod
@@ -632,7 +632,7 @@ characters that are used in several European languages is in the next
range, up to 255. After some more Latin extensions we find the character
sets from languages using non-Roman alphabets, interspersed with a
variety of symbol sets such as currency symbols, Zapf Dingbats or Braille.
-(You might want to visit L<http://www.unicode.org/> for a look at some of
+(You might want to visit L<https://www.unicode.org/> for a look at some of
them - my personal favourites are Telugu and Kannada.)
The Unicode character sets associates characters with integers. Encoding
@@ -678,7 +678,8 @@ sequences and generally have a friendlier interface.
The pack code C<w> has been added to support a portable binary data
encoding scheme that goes way beyond simple integers. (Details can
-be found at L<http://Casbah.org/>, the Scarab project.) A BER (Binary Encoded
+be found at L<https://github.com/mworks-project/mw_scarab/blob/master/Scarab-0.1.00d19/doc/binary-serialization.txt>,
+the Scarab project.) A BER (Binary Encoded
Representation) compressed unsigned integer stores base 128
digits, most significant digit first, with as few digits as possible.
Bit eight (the high bit) is set on each byte except the last. There
@@ -868,8 +869,8 @@ a repeat count for a C<()>-group.
Intel HEX is a file format for representing binary data, mostly for
programming various chips, as a text file. (See
-L<http://en.wikipedia.org/wiki/.hex> for a detailed description, and
-L<http://en.wikipedia.org/wiki/SREC_(file_format)> for the Motorola
+L<https://en.wikipedia.org/wiki/.hex> for a detailed description, and
+L<https://en.wikipedia.org/wiki/SREC_(file_format)> for the Motorola
S-record format, which can be unravelled using the same technique.)
Each line begins with a colon (':') and is followed by a sequence of
hexadecimal characters, specifying a byte count I<n> (8 bit),
diff --git a/gnu/usr.bin/perl/pod/perlpod.pod b/gnu/usr.bin/perl/pod/perlpod.pod
index 41053afb07f..9f494a610e3 100644
--- a/gnu/usr.bin/perl/pod/perlpod.pod
+++ b/gnu/usr.bin/perl/pod/perlpod.pod
@@ -154,7 +154,11 @@ And perhaps most importantly, keep the items consistent: either use
"=item *" for all of them, to produce bullets; or use "=item 1.",
"=item 2.", etc., to produce numbered lists; or use "=item foo",
"=item bar", etc.--namely, things that look nothing like bullets or
-numbers.
+numbers. (If you have a list that contains both: 1) things that don't
+look like bullets nor numbers, plus 2) things that do, you should
+preface the bullet- or number-like items with C<ZE<lt>E<gt>>. See
+L<ZE<lt>E<gt>|/ZE<lt>E<gt> -- a null (zero-effect) formatting code>
+below for an example.)
If you start with bullets or numbers, stick with them, as
formatters use the first "=item" type to decide how to format the
@@ -540,6 +544,41 @@ EE<lt>...E<gt> code sometimes. For example, instead of
the "E<lt>" so they can't be considered
the part of a (fictitious) "NE<lt>...E<gt>" code).
+Another use is to indicate that I<stuff> in C<=item ZE<lt>E<gt>I<stuff...>>
+is not to be considered to be a bullet or number. For example,
+without the C<ZE<lt>E<gt>>, the line
+
+ =item Z<>500 Server error
+
+could possibly be parsed as an item in a numbered list when it isn't
+meant to be.
+
+Still another use is to maintain visual space between C<=item> lines.
+If you specify
+
+ =item foo
+
+ =item bar
+
+it will typically get rendered as
+
+ foo
+ bar
+
+That may be what you want, but if what you really want is
+
+ foo
+
+ bar
+
+you can use C<ZE<lt>E<gt>> to accomplish that
+
+ =item foo
+
+ Z<>
+
+ =item bar
+
=for comment
This was formerly explained as a "zero-width character". But it in
most parser models, it parses to nothing at all, as opposed to parsing
diff --git a/gnu/usr.bin/perl/pod/perlpodspec.pod b/gnu/usr.bin/perl/pod/perlpodspec.pod
index 3ae2cc56f41..847c4a9652d 100644
--- a/gnu/usr.bin/perl/pod/perlpodspec.pod
+++ b/gnu/usr.bin/perl/pod/perlpodspec.pod
@@ -98,6 +98,9 @@ no C<m/\A=cut/> line.
it wouldn't be worth the confusion of having perl and pod2whatever
actually disagree on what can constitute a Pod block.
+Note that a parser is not expected to distinguish between something that
+looks like pod, but is in a quoted string, such as a here document.
+
Within a Pod block, there are B<Pod paragraphs>. A Pod paragraph
consists of non-blank lines of text, separated by one or more blank
lines.
@@ -1229,21 +1232,21 @@ For example:
'pod', # what sort of link
"/Object Attributes" # original content
- L<http://www.perl.org/>
+ L<https://www.perl.org/>
=> undef, # link text
- "http://www.perl.org/", # possibly inferred link text
- "http://www.perl.org/", # name
+ "https://www.perl.org/", # possibly inferred link text
+ "https://www.perl.org/", # name
undef, # section
'url', # what sort of link
- "http://www.perl.org/" # original content
+ "https://www.perl.org/" # original content
- L<Perl.org|http://www.perl.org/>
+ L<Perl.org|https://www.perl.org/>
=> "Perl.org", # link text
- "http://www.perl.org/", # possibly inferred link text
- "http://www.perl.org/", # name
+ "https://www.perl.org/", # possibly inferred link text
+ "https://www.perl.org/", # name
undef, # section
'url', # what sort of link
- "Perl.org|http://www.perl.org/" # original content
+ "Perl.org|https://www.perl.org/" # original content
Note that you can distinguish URL-links from anything else by the
fact that they match C<m/\A\w+:[^:\s]\S*\z/>. So
diff --git a/gnu/usr.bin/perl/pod/perlpolicy.pod b/gnu/usr.bin/perl/pod/perlpolicy.pod
index 6a5e5ab148f..ba54b925988 100644
--- a/gnu/usr.bin/perl/pod/perlpolicy.pod
+++ b/gnu/usr.bin/perl/pod/perlpolicy.pod
@@ -24,22 +24,26 @@ some are actively patching their pet area (threads, Win32, the regexp
-engine), while others seem to do nothing but complain. In other
words, it's your usual mix of technical people.
+Among these people are the core Perl team. These are trusted volunteers
+involved in the ongoing development of the Perl language and interpreter.
+They are not required to be language developers or committers.
+
Over this group of porters presides Larry Wall. He has the final word
in what does and does not change in any of the Perl programming languages.
-These days, Larry spends most of his time on Perl 6, while Perl 5 is
-shepherded by a "pumpking", a porter responsible for deciding what
+These days, Larry spends most of his time on Raku, while Perl 5 is
+shepherded by a steering council of porters responsible for deciding what
goes into each release and ensuring that releases happen on a regular
basis.
Larry sees Perl development along the lines of the US government:
-there's the Legislature (the porters), the Executive branch (the
--pumpking), and the Supreme Court (Larry). The legislature can
-discuss and submit patches to the executive branch all they like, but
-the executive branch is free to veto them. Rarely, the Supreme Court
-will side with the executive branch over the legislature, or the
-legislature over the executive branch. Mostly, however, the
-legislature and the executive branch are supposed to get along and
-work out their differences without impeachment or court cases.
+there's the Legislature (the porters, represented by the core team), the
+Executive branch (the steering council), and the Supreme Court (Larry).
+The legislature can discuss and submit patches to the executive branch
+all they like, but the executive branch is free to veto them. Rarely,
+the Supreme Court will side with the executive branch over the
+legislature, or the legislature over the executive branch. Mostly,
+however, the legislature and the executive branch are supposed to get
+along and work out their differences without impeachment or court cases.
You might sometimes see reference to Rule 1 and Rule 2. Larry's power
as Supreme Court is expressed in The Rules:
@@ -61,6 +65,10 @@ regardless of whether he previously invoked Rule 1.
Got that? Larry is always right, even when he was wrong. It's rare
to see either Rule exercised, but they are often alluded to.
+For the specifics on how the members of the core team and steering
+council are elected or rotated, consult L<perlgov>, which spells it all
+out in detail.
+
=head1 MAINTENANCE AND SUPPORT
Perl 5 is developed by a community, not a corporate entity. Every change
@@ -84,9 +92,9 @@ the Perl community should expect from Perl's developers:
=item *
-We "officially" support the two most recent stable release series. 5.24.x
-and earlier are now out of support. As of the release of 5.30.0, we will
-"officially" end support for Perl 5.26.x, other than providing security
+We "officially" support the two most recent stable release series. 5.26.x
+and earlier are now out of support. As of the release of 5.32.0, we will
+"officially" end support for Perl 5.28.x, other than providing security
updates as described below.
=item *
@@ -168,7 +176,7 @@ Using a lexical pragma to enable or disable legacy behavior should be
considered when appropriate, and in the absence of any pragma legacy
behavior should be enabled. Which backward-incompatible changes are
controlled implicitly by a 'use v5.x.y' is a decision which should be
-made by the pumpking in consultation with the community.
+made by the steering council in consultation with the community.
Historically, we've held ourselves to a far higher standard than
backward-compatibility -- bugward-compatibility. Any accident of
@@ -263,8 +271,9 @@ perl (e.g. spelling corrections in documentation) should be resisted in order
to reduce the overall risk of overlooking something. The intention is to
create maintenance releases which are both worthwhile and which users can have
full confidence in the stability of. (A secondary concern is to avoid burning
-out the maint-pumpking or overwhelming other committers voting on changes to be
-included (see L</"Getting changes into a maint branch"> below).)
+out the maint-release manager or overwhelming other committers voting on
+changes to be included (see L</"Getting changes into a maint branch">
+below).)
The following types of change may be considered acceptable, as long as they do
not also fall into any of the "unacceptable" categories set out below:
@@ -328,7 +337,8 @@ The following types of change are NOT acceptable:
=item *
-Patches that break binary compatibility. (Please talk to a pumpking.)
+Patches that break binary compatibility. (Please talk to the steering
+council.)
=item *
@@ -356,11 +366,11 @@ be included.
=head2 Getting changes into a maint branch
-Historically, only the pumpking cherry-picked changes from bleadperl
-into maintperl. This has scaling problems. At the same time,
-maintenance branches of stable versions of Perl need to be treated with
-great care. To that end, as of Perl 5.12, we have a new process for
-maint branches.
+Historically, only the single-person project manager cherry-picked
+changes from bleadperl into maintperl. This has scaling problems. At
+the same time, maintenance branches of stable versions of Perl need to
+be treated with great care. To that end, as of Perl 5.12, we have a new
+process for maint branches.
Any committer may cherry-pick any commit from blead to a maint branch by
first adding an entry to the relevant voting file in the maint-votes branch
@@ -383,7 +393,7 @@ interested may be heard.
It is not necessary for voting to be held on cherry-picking perldelta
entries associated with changes that have already been cherry-picked, nor
-for the maint-pumpking to obtain votes on changes required by the
+for the maint-release manager to obtain votes on changes required by the
F<Porting/release_managers_guide.pod> where such changes can be applied by
the means of cherry-picking from blead.
@@ -436,7 +446,7 @@ should be respected whenever possible.
=item *
-Patches may be applied by the pumpkin holder without the explicit
+Patches may be applied by the steering council without the explicit
cooperation of the module author if and only if they are very minor,
time-critical in some fashion (such as urgent security fixes), or if
the module author cannot be reached. Those patches must still be
@@ -451,7 +461,7 @@ of the change acknowledged.
The version of the module distributed with Perl should, whenever
possible, be the latest version of the module as distributed by the
author (the latest non-beta version in the case of public Perl
-releases), although the pumpkin holder may hold off on upgrading the
+releases), although the steering council may hold off on upgrading the
version of the module distributed with Perl to the latest version
until the latest version has had sufficient testing.
@@ -464,10 +474,9 @@ reasonable compromises when there are disagreements).
As a last resort, however:
-
If the author's vision of the future of their module is sufficiently
-different from the vision of the pumpkin holder and perl5-porters as a
-whole so as to cause serious problems for Perl, the pumpkin holder may
+different from the vision of the steering council and perl5-porters as a
+whole so as to cause serious problems for Perl, the steering council may
choose to formally fork the version of the module in the Perl core from the
one maintained by the author. This should not be done lightly and
should B<always> if at all possible be done only after direct input
@@ -545,7 +554,7 @@ it doesn't need to fully describe how all old versions used to work.
=head1 STANDARDS OF CONDUCT
The official forum for the development of perl is the perl5-porters mailing
-list, mentioned above, and its bugtracker at rt.perl.org. Posting to the
+list, mentioned above, and its bugtracker at GitHub. Posting to the
list and the bugtracker is not a right: all participants in discussion are
expected to adhere to a standard of conduct.
@@ -582,8 +591,8 @@ decisions.
Unacceptable behavior will result in a public and clearly identified
warning. A second instance of unacceptable behavior from the same
-individual will result in removal from the mailing list and rt.perl.org,
-for a period of one calendar month. The rationale for this is to
+individual will result in removal from the mailing list and GitHub issue
+tracker, for a period of one calendar month. The rationale for this is to
provide an opportunity for the person to change the way they act.
After the time-limited ban has been lifted, a third instance of
@@ -597,8 +606,8 @@ question affirms they will not transgress again.
Removals, like warnings, are public.
The list of moderators will be public knowledge. At present, it is:
-Aaron Crane, Andy Dougherty, Karen Etheridge, Ricardo Signes, Sawyer X,
-Steffen Müller, Todd Rinaldo.
+Karen Etheridge, Ricardo Signes, Sawyer X,
+Steffen Müller, Todd Rinaldo, Aaron Crane.
=head1 CREDITS
diff --git a/gnu/usr.bin/perl/pod/perlport.pod b/gnu/usr.bin/perl/pod/perlport.pod
index b3ef9b5219a..1715eafa1b3 100644
--- a/gnu/usr.bin/perl/pod/perlport.pod
+++ b/gnu/usr.bin/perl/pod/perlport.pod
@@ -364,15 +364,15 @@ filenames.
Don't assume C<< > >> won't be the first character of a filename.
Always use the three-arg version of
-L<C<open>|perlfunc/open FILEHANDLE,EXPR>:
+L<C<open>|perlfunc/open FILEHANDLE,MODE,EXPR>:
open my $fh, '<', $existing_file) or die $!;
-Two-arg L<C<open>|perlfunc/open FILEHANDLE,EXPR> is magic and can
+Two-arg L<C<open>|perlfunc/open FILEHANDLE,MODE,EXPR> is magic and can
translate characters like C<< > >>, C<< < >>, and C<|> in filenames,
which is usually the wrong thing to do.
L<C<sysopen>|perlfunc/sysopen FILEHANDLE,FILENAME,MODE> and three-arg
-L<C<open>|perlfunc/open FILEHANDLE,EXPR> don't have this problem.
+L<C<open>|perlfunc/open FILEHANDLE,MODE,EXPR> don't have this problem.
Don't use C<:> as a part of a filename since many systems use that for
their own semantics (Mac OS Classic for separating pathname components,
@@ -413,7 +413,7 @@ L<C<close>|perlfunc/close FILEHANDLE> files when you are done with them.
Don't L<C<unlink>|perlfunc/unlink LIST> or
L<C<rename>|perlfunc/rename OLDNAME,NEWNAME> an open file. Don't
L<C<tie>|perlfunc/tie VARIABLE,CLASSNAME,LIST> or
-L<C<open>|perlfunc/open FILEHANDLE,EXPR> a file already tied or opened;
+L<C<open>|perlfunc/open FILEHANDLE,MODE,EXPR> a file already tied or opened;
L<C<untie>|perlfunc/untie VARIABLE> or
L<C<close>|perlfunc/close FILEHANDLE> it first.
@@ -561,7 +561,7 @@ portable. That means, no L<C<system>|perlfunc/system LIST>,
L<C<exec>|perlfunc/exec LIST>, L<C<fork>|perlfunc/fork>,
L<C<pipe>|perlfunc/pipe READHANDLE,WRITEHANDLE>,
L<C<``> or C<qxE<sol>E<sol>>|perlop/C<qxE<sol>I<STRING>E<sol>>>,
-L<C<open>|perlfunc/open FILEHANDLE,EXPR> with a C<|>, nor any of the other
+L<C<open>|perlfunc/open FILEHANDLE,MODE,EXPR> with a C<|>, nor any of the other
things that makes being a Perl hacker worth being.
Commands that launch external processes are generally supported on
@@ -670,7 +670,7 @@ When calculating specific times, such as for tests in time or date modules,
it may be appropriate to calculate an offset for the epoch.
use Time::Local qw(timegm);
- my $offset = timegm(0, 0, 0, 1, 0, 70);
+ my $offset = timegm(0, 0, 0, 1, 0, 1970);
The value for C<$offset> in Unix will be C<0>, but in Mac OS Classic
will be some large number. C<$offset> can then be added to a Unix time
@@ -827,7 +827,7 @@ Mailing list: cpan-testers-discuss@perl.org
=item *
-Testing results: L<http://www.cpantesters.org/>
+Testing results: L<https://www.cpantesters.org/>
=back
@@ -917,7 +917,7 @@ The DOS FAT filesystem can accommodate only "8.3" style filenames. Under
the "case-insensitive, but case-preserving" HPFS (OS/2) and NTFS (NT)
filesystems you may have to be careful about case returned with functions
like L<C<readdir>|perlfunc/readdir DIRHANDLE> or used with functions like
-L<C<open>|perlfunc/open FILEHANDLE,EXPR> or
+L<C<open>|perlfunc/open FILEHANDLE,MODE,EXPR> or
L<C<opendir>|perlfunc/opendir DIRHANDLE,EXPR>.
DOS also treats several filenames as special, such as F<AUX>, F<PRN>,
@@ -1032,12 +1032,12 @@ The C<Win32::*> modules in L<Win32>.
=item *
-The ActiveState Pages, L<http://www.activestate.com/>
+The ActiveState Pages, L<https://www.activestate.com/>
=item *
The Cygwin environment for Win32; F<README.cygwin> (installed
-as L<perlcygwin>), L<http://www.cygwin.com/>
+as L<perlcygwin>), L<https://www.cygwin.com/>
=item *
@@ -1378,7 +1378,7 @@ expand system variables in filenames if enclosed in angle brackets, so
C<< <System$Dir>.Modules >> would look for the file
S<C<$ENV{'System$Dir'} . 'Modules'>>. The obvious implication of this is
that B<fully qualified filenames can start with C<< <> >>> and the
-three-argument form of L<C<open>|perlfunc/open FILEHANDLE,EXPR> should
+three-argument form of L<C<open>|perlfunc/open FILEHANDLE,MODE,EXPR> should
always be used.
Because C<.> was in use as a directory separator and filenames could not
@@ -2277,7 +2277,7 @@ Some tests are known to fail:
=item *
F<ext/XS-APItest/t/call_checker.t> - see
-L<https://rt.perl.org/Ticket/Display.html?id=78502>
+L<https://github.com/Perl/perl5/issues/10750>
=item *
@@ -2534,7 +2534,7 @@ L<http://www.cpan.org/ports/index.html> for binary distributions.
=head1 SEE ALSO
L<perlaix>, L<perlamiga>, L<perlbs2000>,
-L<perlce>, L<perlcygwin>, L<perldos>,
+L<perlcygwin>, L<perldos>,
L<perlebcdic>, L<perlfreebsd>, L<perlhurd>, L<perlhpux>, L<perlirix>,
L<perlmacos>, L<perlmacosx>,
L<perlnetware>, L<perlos2>, L<perlos390>, L<perlos400>,
diff --git a/gnu/usr.bin/perl/pod/perlre.pod b/gnu/usr.bin/perl/pod/perlre.pod
index cc717075ac2..0a9e8ec21da 100644
--- a/gnu/usr.bin/perl/pod/perlre.pod
+++ b/gnu/usr.bin/perl/pod/perlre.pod
@@ -465,7 +465,7 @@ Use of C</x> means that if you want real
whitespace or C<"#"> characters in the pattern (outside a bracketed character
class, which is unaffected by C</x>), then you'll either have to
escape them (using backslashes or C<\Q...\E>) or encode them using octal,
-hex, or C<\N{}> escapes.
+hex, or C<\N{}> or C<\p{name=...}> escapes.
It is ineffective to try to continue a comment onto the next line by
escaping the C<\n> with a backslash or C<\Q>.
@@ -667,7 +667,7 @@ characters. The C<KELVIN SIGN>, for example matches the letters "k" and
"K"; and C<LATIN SMALL LIGATURE FF> matches the sequence "ff", which,
if you're not prepared, might make it look like a hexadecimal constant,
presenting another potential security issue. See
-L<http://unicode.org/reports/tr36> for a detailed discussion of Unicode
+L<https://unicode.org/reports/tr36> for a detailed discussion of Unicode
security issues.
This modifier may be specified to be the default by C<use feature
@@ -1593,9 +1593,6 @@ X<look-ahead, positive> X<lookahead, positive>
A zero-width positive lookahead assertion. For example, C</\w+(?=\t)/>
matches a word followed by a tab, without including the tab in C<$&>.
-The alphabetic forms are experimental; using them yields a warning in the
-C<experimental::alpha_assertions> category.
-
=item C<(?!I<pattern>)>
=item C<(*nla:I<pattern>)>
@@ -1616,9 +1613,6 @@ will not do what you want. That's because the C<(?!foo)> is just saying that
the next thing cannot be "foo"--and it's not, it's a "bar", so "foobar" will
match. Use lookbehind instead (see below).
-The alphabetic forms are experimental; using them yields a warning in the
-C<experimental::alpha_assertions> category.
-
=item C<(?<=I<pattern>)>
=item C<\K>
@@ -1681,9 +1675,6 @@ can be rewritten as the much more efficient
Use of the non-greedy modifier C<"?"> may not give you the expected
results if it is within a capturing group within the construct.
-The alphabetic forms (not including C<\K> are experimental; using them
-yields a warning in the C<experimental::alpha_assertions> category.
-
=item C<(?<!I<pattern>)>
=item C<(*nlb:I<pattern>)>
@@ -1724,9 +1715,6 @@ error, as that could match 256 C<"s"> characters in a row.
Use of the non-greedy modifier C<"?"> may not give you the expected
results if it is within a capturing group within the construct.
-The alphabetic forms are experimental; using them yields a warning in the
-C<experimental::alpha_assertions> category.
-
=back
=item C<< (?<I<NAME>>I<pattern>) >>
@@ -2327,9 +2315,6 @@ matches, but
does not.
-The alphabetic form (C<(*atomic:...)>) is experimental; using it
-yields a warning in the C<experimental::alpha_assertions> category.
-
=item C<(?[ ])>
See L<perlrecharclass/Extended Bracketed Character Classes>.
@@ -2594,7 +2579,7 @@ you can write either of these:
In Taiwan, Japan, and Korea, it is common for text to have a mixture of
characters from their native scripts and base Chinese. Perl follows
-Unicode's UTS 39 (L<http://unicode.org/reports/tr39/>) Unicode Security
+Unicode's UTS 39 (L<https://unicode.org/reports/tr39/>) Unicode Security
Mechanisms in allowing such mixtures. For example, the Japanese scripts
Katakana and Hiragana are commonly mixed together in practice, along
with some Chinese characters, and hence are treated as being in a single
@@ -2637,12 +2622,8 @@ to capture, if desired. You will have to do this if you plan to use
L</(*ACCEPT) (*ACCEPT:arg)> and not have it bypass the script run
checking.
-This feature is experimental, and the exact syntax and details of
-operation are subject to change; using it yields a warning in the
-C<experimental::script_run> category.
-
The C<Script_Extensions> property as modified by UTS 39
-(L<http://unicode.org/reports/tr39/>) is used as the basis for this
+(L<https://unicode.org/reports/tr39/>) is used as the basis for this
feature.
To summarize,
@@ -2677,7 +2658,7 @@ All characters in the sequence come from the Common script and/or the
Inherited script and/or a single other script.
The script of a character is determined by the C<Script_Extensions>
-property as modified by UTS 39 (L<http://unicode.org/reports/tr39/>), as
+property as modified by UTS 39 (L<https://unicode.org/reports/tr39/>), as
described above.
=item 3
@@ -2848,7 +2829,7 @@ As a shortcut C<(*MARK:I<NAME>)> can be written C<(*:I<NAME>)>.
=item C<(*THEN)> C<(*THEN:I<NAME>)>
-This is similar to the "cut group" operator C<::> from Perl 6. Like
+This is similar to the "cut group" operator C<::> from Raku. Like
C<(*PRUNE)>, this verb always matches, and when backtracked into on
failure, it causes the regex engine to try the next alternation in the
innermost enclosing group (capturing or otherwise) that has alternations.
@@ -2884,7 +2865,7 @@ backtrack and try I<C>; but the C<(*PRUNE)> verb will simply fail.
=item C<(*COMMIT)> C<(*COMMIT:I<arg>)>
X<(*COMMIT)>
-This is the Perl 6 "commit pattern" C<< <commit> >> or C<:::>. It's a
+This is the Raku "commit pattern" C<< <commit> >> or C<:::>. It's a
zero-width pattern similar to C<(*SKIP)>, except that when backtracked
into on failure it causes the match to fail outright. No further attempts
to find a valid match by advancing the start pointer will occur again.
diff --git a/gnu/usr.bin/perl/pod/perlrebackslash.pod b/gnu/usr.bin/perl/pod/perlrebackslash.pod
index cfd182a7e18..1a812a82003 100644
--- a/gnu/usr.bin/perl/pod/perlrebackslash.pod
+++ b/gnu/usr.bin/perl/pod/perlrebackslash.pod
@@ -446,7 +446,7 @@ Mnemonic: I<g>roup.
=head3 Relative referencing
C<\g-I<N>> (starting in Perl 5.10.0) is used for relative addressing. (It can
-be written as C<\g{-I<N>>.) It refers to the I<N>th group before the
+be written as C<\g{-I<N>}>.) It refers to the I<N>th group before the
C<\g{-I<N>}>.
The big advantage of this form is that it makes it much easier to write
@@ -520,11 +520,11 @@ match to the true end of the string under all conditions.
=item \G
C<\G> is usually used only in combination with the C</g> modifier. If the
-C</g> modifier is used and the match is done in scalar context, Perl
+C</g> modifier is used and the match is done in scalar context, Perl
remembers where in the source string the last match ended, and the next time,
it will start the match from where it ended the previous time.
-C<\G> matches the point where the previous match on that string ended,
+C<\G> matches the point where the previous match on that string ended,
or the beginning of that string if there was no previous match.
=for later add link to perlremodifiers
@@ -550,11 +550,11 @@ C<\b>
and C<\B> assume there's a non-word character before the beginning and after
the end of the source string; so C<\b> will match at the beginning (or end)
of the source string if the source string begins (or ends) with a word
-character. Otherwise, C<\B> will match.
+character. Otherwise, C<\B> will match.
Do not use something like C<\b=head\d\b> and expect it to match the
beginning of a line. It can't, because for there to be a boundary before
-the non-word "=", there must be a word character immediately previous.
+the non-word "=", there must be a word character immediately previous.
All plain C<\b> and C<\B> boundary determinations look for word
characters alone, not for
non-word characters nor for string ends. It may help to understand how
@@ -566,8 +566,8 @@ C<\b> and C<\B> work by equating them as follows:
In contrast, C<\b{...}> and C<\B{...}> may or may not match at the
beginning and end of the line, depending on the boundary type. These
implement the Unicode default boundaries, specified in
-L<http://www.unicode.org/reports/tr14/> and
-L<http://www.unicode.org/reports/tr29/>.
+L<https://www.unicode.org/reports/tr14/> and
+L<https://www.unicode.org/reports/tr29/>.
The boundary types are:
=over
@@ -583,9 +583,9 @@ whichever is most convenient for your situation.
=item C<\b{lb}>
This matches according to the default Unicode Line Breaking Algorithm
-(L<http://www.unicode.org/reports/tr14/>), as customized in that
+(L<https://www.unicode.org/reports/tr14/>), as customized in that
document
-(L<Example 7 of revision 35|http://www.unicode.org/reports/tr14/tr14-35.html#Example7>)
+(L<Example 7 of revision 35|https://www.unicode.org/reports/tr14/tr14-35.html#Example7>)
for better handling of numeric expressions.
This is suitable for many purposes, but the L<Unicode::LineBreak> module
@@ -597,7 +597,7 @@ customization.
This matches a Unicode "Sentence Boundary". This is an aid to parsing
natural language sentences. It gives good, but imperfect results. For
example, it thinks that "Mr. Smith" is two sentences. More details are
-at L<http://www.unicode.org/reports/tr29/>. Note also that it thinks
+at L<https://www.unicode.org/reports/tr29/>. Note also that it thinks
that anything matching L</\R> (except form feed and vertical tab) is a
sentence boundary. C<\b{sb}> works with text designed for
word-processors which wrap lines
@@ -617,7 +617,7 @@ expectations. This gives better (though not
perfect) results for natural language processing than plain C<\b>
(without braces) does. For example, it understands that apostrophes can
be in the middle of words and that parentheses aren't (see the examples
-below). More details are at L<http://www.unicode.org/reports/tr29/>.
+below). More details are at L<https://www.unicode.org/reports/tr29/>.
The current Unicode definition of a Word Boundary matches between every
white space character. Perl tailors this, starting in version 5.24, to
diff --git a/gnu/usr.bin/perl/pod/perlrecharclass.pod b/gnu/usr.bin/perl/pod/perlrecharclass.pod
index 2e09c4bac59..ee2f14d8ffd 100644
--- a/gnu/usr.bin/perl/pod/perlrecharclass.pod
+++ b/gnu/usr.bin/perl/pod/perlrecharclass.pod
@@ -140,7 +140,7 @@ C<\p{Numeric_Type=Digit}>, and so C<\d> doesn't match them.
The Tamil digits (U+0BE6 - U+0BEF) can also legally be
used in old-style Tamil numbers in which they would appear no more than
one in a row, separated by characters that mean "times 10", "times 100",
-etc. (See L<http://www.unicode.org/notes/tn21>.)
+etc. (See L<https://www.unicode.org/notes/tn21>.)
Any character not matched by C<\d> is matched by C<\D>.
@@ -366,7 +366,7 @@ it isn't already.
Note that almost all properties are immune to case-insensitive matching.
That is, adding a C</i> regular expression modifier does not change what
-they match. There are two sets that are affected. The first set is
+they match. But there are two sets that are affected. The first set is
C<Uppercase_Letter>,
C<Lowercase_Letter>,
and C<Titlecase_Letter>,
diff --git a/gnu/usr.bin/perl/pod/perlref.pod b/gnu/usr.bin/perl/pod/perlref.pod
index 4982b65c8d1..2c4cedfe64b 100644
--- a/gnu/usr.bin/perl/pod/perlref.pod
+++ b/gnu/usr.bin/perl/pod/perlref.pod
@@ -56,9 +56,7 @@ X<reference, creation> X<referencing>
References can be created in several ways.
-=over 4
-
-=item 1.
+=head3 Backslash Operator
X<\> X<backslash>
By using the backslash operator on a variable, subroutine, or value.
@@ -80,7 +78,7 @@ reference to a typeglob, which is actually a complete symbol table entry.
But see the explanation of the C<*foo{THING}> syntax below. However,
you can still use type globs and globrefs as though they were IO handles.
-=item 2.
+=head3 Square Brackets
X<array, anonymous> X<[> X<[]> X<square bracket>
X<bracket, square> X<arrayref> X<array reference> X<reference, array>
@@ -107,7 +105,7 @@ of C<@foo>, not a reference to C<@foo> itself. Likewise for C<%foo>,
except that the key references are to copies (since the keys are just
strings rather than full-fledged scalars).
-=item 3.
+=head3 Curly Brackets
X<hash, anonymous> X<{> X<{}> X<curly bracket>
X<bracket, curly> X<brace> X<hashref> X<hash reference> X<reference, hash>
@@ -150,7 +148,7 @@ On the other hand, if you want the other meaning, you can do this:
The leading C<+{> and C<{;> always serve to disambiguate
the expression to mean either the HASH reference, or the BLOCK.
-=item 4.
+=head3 Anonymous Subroutines
X<subroutine, anonymous> X<subroutine, reference> X<reference, subroutine>
X<scope, lexical> X<closure> X<lexical> X<lexical scope>
@@ -208,7 +206,7 @@ This applies only to lexical variables, by the way. Dynamic variables
continue to work as they have always worked. Closure is not something
that most Perl programmers need trouble themselves about to begin with.
-=item 5.
+=head3 Constructors
X<constructor> X<new>
References are often returned by special subroutines called constructors. Perl
@@ -234,14 +232,14 @@ better to use the direct method invocation approach:
$menubar = $main->Frame(-relief => "raised",
-borderwidth => 2)
-=item 6.
+=head3 Autovivification
X<autovivification>
References of the appropriate type can spring into existence if you
dereference them in a context that assumes they exist. Because we haven't
talked about dereferencing yet, we can't show you any examples yet.
-=item 7.
+=head3 Typeglob Slots
X<*foo{THING}> X<*>
A reference can be created by using a special syntax, lovingly known as
@@ -307,8 +305,6 @@ below, there's no risk of that happening.
return scalar <$fh>;
}
-=back
-
=head2 Using References
X<reference, use> X<dereferencing> X<dereference>
@@ -316,9 +312,7 @@ That's it for creating references. By now you're probably dying to
know how to use references to get back to your long-lost data. There
are several basic methods.
-=over 4
-
-=item 1.
+=head3 Simple Scalar
Anywhere you'd put an identifier (or chain of identifiers) as part
of a variable or subroutine name, you can replace the identifier with
@@ -341,7 +335,7 @@ However, a "simple scalar" includes an identifier that itself uses method
$refrefref = \\\"howdy";
print $$$$refrefref;
-=item 2.
+=head3 Block
Anywhere you'd put an identifier (or chain of identifiers) as part of a
variable or subroutine name, you can replace the identifier with a
@@ -377,7 +371,7 @@ Case 2 is also deceptive in that you're accessing a variable
called %hashref, not dereferencing through $hashref to the hash
it's presumably referencing. That would be case 3.
-=item 3.
+=head3 Arrow Notation
Subroutine calls and lookups of individual array elements arise often
enough that it gets cumbersome to use method 2. As a form of
@@ -414,7 +408,7 @@ multidimensional arrays just like C's:
Well, okay, not entirely like C's arrays, actually. C doesn't know how
to grow its arrays on demand. Perl does.
-=item 4.
+=head3 Objects
If a reference happens to be a reference to an object, then there are
probably methods to access the things referred to, and you should probably
@@ -424,7 +418,7 @@ encapsulation without a very good reason. Perl does not enforce
encapsulation. We are not totalitarians here. We do expect some basic
civility though.
-=back
+=head3 Miscellaneous Usage
Using a string or number as a reference produces a symbolic reference,
as explained above. Using a reference as a number produces an
diff --git a/gnu/usr.bin/perl/pod/perlreref.pod b/gnu/usr.bin/perl/pod/perlreref.pod
index b0c3f6b97ad..e54093ccf11 100644
--- a/gnu/usr.bin/perl/pod/perlreref.pod
+++ b/gnu/usr.bin/perl/pod/perlreref.pod
@@ -226,7 +226,7 @@ The possessive forms (new in Perl 5.10) prevent backtracking: what gets
matched by a pattern with a possessive quantifier will not be backtracked
into, even if that causes the whole match to fail.
-There is no quantifier C<{,n}>. That's interpreted as a literal string.
+There is no quantifier C<{,n}>. That's currently illegal.
=head2 EXTENDED CONSTRUCTS
@@ -234,15 +234,19 @@ There is no quantifier C<{,n}>. That's interpreted as a literal string.
(?:...) Groups subexpressions without capturing (cluster)
(?pimsx-imsx:...) Enable/disable option (as per m// modifiers)
(?=...) Zero-width positive lookahead assertion
- (?*pla:...) Same; avail experimentally starting in 5.28
+ (*pla:...) Same, starting in 5.32; experimentally in 5.28
+ (*positive_lookahead:...) Same, same versions as *pla
(?!...) Zero-width negative lookahead assertion
- (?*nla:...) Same; avail experimentally starting in 5.28
+ (*nla:...) Same, starting in 5.32; experimentally in 5.28
+ (*negative_lookahead:...) Same, same versions as *nla
(?<=...) Zero-width positive lookbehind assertion
- (?*plb:...) Same; avail experimentally starting in 5.28
+ (*plb:...) Same, starting in 5.32; experimentally in 5.28
+ (*positive_lookbehind:...) Same, same versions as *plb
(?<!...) Zero-width negative lookbehind assertion
- (?*nlb:...) Same; avail experimentally starting in 5.28
+ (*nlb:...) Same, starting in 5.32; experimentally in 5.28
+ (*negative_lookbehind:...) Same, same versions as *plb
(?>...) Grab what we can, prohibit backtracking
- (?*atomic:...) Same; avail experimentally starting in 5.28
+ (*atomic:...) Same, starting in 5.32; experimentally in 5.28
(?|...) Branch reset
(?<name>...) Named capture
(?'name'...) Named capture
@@ -257,10 +261,14 @@ There is no quantifier C<{,n}>. That's interpreted as a literal string.
(?P>name) Recurse into a named subpattern (python syntax)
(?(cond)yes|no)
(?(cond)yes) Conditional expression, where "(cond)" can be:
- (?=pat) lookahead
- (?!pat) negative lookahead
- (?<=pat) lookbehind
- (?<!pat) negative lookbehind
+ (?=pat) lookahead; also (*pla:pat)
+ (*positive_lookahead:pat)
+ (?!pat) negative lookahead; also (*nla:pat)
+ (*negative_lookahead:pat)
+ (?<=pat) lookbehind; also (*plb:pat)
+ (*lookbehind:pat)
+ (?<!pat) negative lookbehind; also (*nlb:pat)
+ (*negative_lookbehind:pat)
(N) subpattern N has matched something
(<name>) named subpattern has matched something
('name') named subpattern has matched something
diff --git a/gnu/usr.bin/perl/pod/perlretut.pod b/gnu/usr.bin/perl/pod/perlretut.pod
index 1e1cdd49b28..c3ca31e0977 100644
--- a/gnu/usr.bin/perl/pod/perlretut.pod
+++ b/gnu/usr.bin/perl/pod/perlretut.pod
@@ -939,7 +939,7 @@ prints
Even if there are no groupings in a regexp, it is still possible to
find out what exactly matched in a string. If you use them, Perl
will set C<$`> to the part of the string before the match, will set C<$&>
-to the part of the string that matched, and will set C<'$'> to the part
+to the part of the string that matched, and will set C<$'> to the part
of the string after the match. An example:
$x = "the cat caught the mouse";
@@ -951,7 +951,7 @@ first character position in the string and stopped; it never saw the
second "the".
If your code is to run on Perl versions earlier than
-5.20, it is worthwhile to note that using C<$`> and C<'$'>
+5.20, it is worthwhile to note that using C<$`> and C<$'>
slows down regexp matching quite a bit, while C<$&> slows it down to a
lesser extent, because if they are used in one regexp in a program,
they are generated for I<all> regexps in the program. So if raw
@@ -968,7 +968,7 @@ variables may be used. These are only set if the C</p> modifier is
present. Consequently they do not penalize the rest of the program. In
Perl 5.20, C<${^PREMATCH}>, C<${^MATCH}> and C<${^POSTMATCH}> are available
whether the C</p> has been used or not (the modifier is ignored), and
-C<$`>, C<'$'> and C<$&> do not cause any speed difference.
+C<$`>, C<$'> and C<$&> do not cause any speed difference.
=head2 Non-capturing groupings
@@ -1609,7 +1609,7 @@ C<'m'> delimiters act like quotes. If the regexp evaluates to the empty string,
the regexp in the I<last successful match> is used instead. So we have
"dog" =~ /d/; # 'd' matches
- "dogbert =~ //; # this matches the 'd' regexp used before
+ "dogbert" =~ //; # this matches the 'd' regexp used before
=head3 Global matching
@@ -1927,7 +1927,7 @@ terminated by C<\E> or thrown over by another C<\U> or C<\L>:
$x = "This word is in lower case:\L SHOUT\E";
$x =~ /shout/; # matches
- $x = "I STILL KEYPUNCH CARDS FOR MY 360"
+ $x = "I STILL KEYPUNCH CARDS FOR MY 360";
$x =~ /\Ukeypunch/; # matches punch card string
If there is no C<\E>, case is converted until the end of the
@@ -2001,9 +2001,20 @@ L<charnames> pragma:
print "\N{sigma} is Greek sigma\n";
An index of character names is available on-line from the Unicode
-Consortium, L<http://www.unicode.org/charts/charindex.html>; explanatory
+Consortium, L<https://www.unicode.org/charts/charindex.html>; explanatory
material with links to other resources at
-L<http://www.unicode.org/standard/where>.
+L<https://www.unicode.org/standard/where>.
+
+Starting in Perl v5.32, an alternative to C<\N{...}> for full names is
+available, and that is to say
+
+ /\p{Name=greek small letter sigma}/
+
+The casing of the character name is irrelevant when used in C<\p{}>, as
+are most spaces, underscores and hyphens. (A few outlier characters
+cause problems with ignoring all of them always. The details (which you
+can look up when you get more proficient, and if ever needed) are in
+L<https://www.unicode.org/reports/tr44/tr44-24.html#UAX44-LM2>).
The answer to requirement 2) is that a regexp (mostly)
uses Unicode characters. The "mostly" is for messy backward
@@ -2070,7 +2081,7 @@ RING>" is a grapheme cluster with base character "A" and combining character
as in the word E<Aring>ngstrom.
For the full and latest information about Unicode see the latest
-Unicode standard, or the Unicode Consortium's website L<http://www.unicode.org>
+Unicode standard, or the Unicode Consortium's website L<https://www.unicode.org>
As if all those classes weren't enough, Perl also defines POSIX-style
character classes. These have the form C<[:I<name>:]>, with I<name> the
@@ -2321,11 +2332,15 @@ characters on either side differ in their "word-ness".
The lookahead and lookbehind assertions are generalizations of the
anchor concept. Lookahead and lookbehind are zero-width assertions
that let us specify which characters we want to test for. The
-lookahead assertion is denoted by C<(?=regexp)> and the lookbehind
-assertion is denoted by C<< (?<=fixed-regexp) >>. Some examples are
+lookahead assertion is denoted by C<(?=regexp)> or (starting in 5.32,
+experimentally in 5.28) C<(*pla:regexp)> or
+C<(*positive_lookahead:regexp)>; and the lookbehind assertion is denoted
+by C<< (?<=fixed-regexp) >> or (starting in 5.32, experimentally in
+5.28) C<(*plb:fixed-regexp)> or C<(*positive_lookbehind:fixed-regexp)>.
+Some examples are
$x = "I catch the housecat 'Tom-cat' with catnip";
- $x =~ /cat(?=\s)/; # matches 'cat' in 'housecat'
+ $x =~ /cat(*pla:\s)/; # matches 'cat' in 'housecat'
@catwords = ($x =~ /(?<=\s)cat\w+/g); # matches,
# $catwords[0] = 'catch'
# $catwords[1] = 'catnip'
@@ -2333,15 +2348,19 @@ assertion is denoted by C<< (?<=fixed-regexp) >>. Some examples are
$x =~ /(?<=\s)cat(?=\s)/; # doesn't match; no isolated 'cat' in
# middle of $x
-Note that the parentheses in C<(?=regexp)> and C<< (?<=regexp) >> are
+Note that the parentheses in these are
non-capturing, since these are zero-width assertions. Thus in the
second regexp, the substrings captured are those of the whole regexp
-itself. Lookahead C<(?=regexp)> can match arbitrary regexps, but
-lookbehind C<< (?<=fixed-regexp) >> only works for regexps of fixed
-width, I<i.e.>, a fixed number of characters long. Thus
-C<< (?<=(ab|bc)) >> is fine, but C<< (?<=(ab)*) >> is not. The
-negated versions of the lookahead and lookbehind assertions are
+itself. Lookahead can match arbitrary regexps, but
+lookbehind prior to 5.30 C<< (?<=fixed-regexp) >> only works for regexps
+of fixed width, I<i.e.>, a fixed number of characters long. Thus
+C<< (?<=(ab|bc)) >> is fine, but C<< (?<=(ab)*) >> prior to 5.30 is not.
+
+The negated versions of the lookahead and lookbehind assertions are
denoted by C<(?!regexp)> and C<< (?<!fixed-regexp) >> respectively.
+Or, starting in 5.32 (experimentally in 5.28), C<(*nla:regexp)>,
+C<(*negative_lookahead:regexp)>, C<(*nlb:regexp)>, or
+C<(*negative_lookbehind:regexp)>.
They evaluate true if the regexps do I<not> match:
$x = "foobar";
@@ -2361,27 +2380,16 @@ by looking ahead and behind:
| (?<=-) (?=\S) # a '-' followed by any non-space
/x, $str; # @toks = qw(one two - - - 6 - 8)
-Starting in Perl 5.28, experimentally, alphabetic equivalents to these
-assertions are added, so you can use whichever is most memorable for
-your tastes.
-
- (?=...) (*pla:...) or (*positive_lookahead:...)
- (?!...) (*nla:...) or (*negative_lookahead:...)
- (?<=...) (*plb:...) or (*positive_lookbehind:...)
- (?<!...) (*nlb:...) or (*negative_lookbehind:...)
- (?>...) (*atomic:...)
-
-Using any of these will raise (unless turned off) a warning in the
-C<experimental::alpha_assertions> category.
-
=head2 Using independent subexpressions to prevent backtracking
-I<Independent subexpressions> are regular expressions, in the
-context of a larger regular expression, that function independently of
-the larger regular expression. That is, they consume as much or as
-little of the string as they wish without regard for the ability of
-the larger regexp to match. Independent subexpressions are represented
-by C<< (?>regexp) >>. We can illustrate their behavior by first
+I<Independent subexpressions> (or atomic subexpressions) are regular
+expressions, in the context of a larger regular expression, that
+function independently of the larger regular expression. That is, they
+consume as much or as little of the string as they wish without regard
+for the ability of the larger regexp to match. Independent
+subexpressions are represented by
+C<< (?>regexp) >> or (starting in 5.32, experimentally in 5.28)
+C<(*atomic:regexp)>. We can illustrate their behavior by first
considering an ordinary regexp:
$x = "ab";
diff --git a/gnu/usr.bin/perl/pod/perlrun.pod b/gnu/usr.bin/perl/pod/perlrun.pod
index 77660ef17d9..89a7aa8a7b4 100644
--- a/gnu/usr.bin/perl/pod/perlrun.pod
+++ b/gnu/usr.bin/perl/pod/perlrun.pod
@@ -28,7 +28,8 @@ places:
=item 1.
-Specified line by line via B<-e> or B<-E> switches on the command line.
+Specified line by line via L<-e|/-e commandline> or L<-E|/-E commandline>
+switches on the command line.
=item 2.
@@ -45,7 +46,7 @@ must explicitly specify a "-" for the program name.
=back
With methods 2 and 3, Perl starts parsing the input file from the
-beginning, unless you've specified a B<-x> switch, in which case it
+beginning, unless you've specified a L</-x> switch, in which case it
scans for the first line starting with C<#!> and containing the word
"perl", and starts there instead. This is useful for running a program
embedded in a larger message. (In this case you would indicate the end
@@ -55,7 +56,7 @@ The C<#!> line is always examined for switches as the line is being
parsed. Thus, if you're on a machine that allows only one argument
with the C<#!> line, or worse, doesn't even recognize the C<#!> line, you
still can get consistent switch behaviour regardless of how Perl was
-invoked, even if B<-x> was used to find the beginning of the program.
+invoked, even if L</-x> was used to find the beginning of the program.
Because historically some operating systems silently chopped off
kernel interpretation of the C<#!> line after 32 characters, some
@@ -65,24 +66,25 @@ You probably want to make sure that all your switches fall either
before or after that 32-character boundary. Most switches don't
actually care if they're processed redundantly, but getting a "-"
instead of a complete switch could cause Perl to try to execute
-standard input instead of your program. And a partial B<-I> switch
-could also cause odd results.
+standard input instead of your program. And a partial L<-I|/-Idirectory>
+switch could also cause odd results.
Some switches do care if they are processed twice, for instance
-combinations of B<-l> and B<-0>. Either put all the switches after
-the 32-character boundary (if applicable), or replace the use of
-B<-0>I<digits> by C<BEGIN{ $/ = "\0digits"; }>.
+combinations of L<-l|/-l[octnum]> and L<-0|/-0[octalE<sol>hexadecimal]>.
+Either put all the switches after the 32-character boundary (if
+applicable), or replace the use of B<-0>I<digits> by
+C<BEGIN{ $/ = "\0digits"; }>.
Parsing of the C<#!> switches starts wherever "perl" is mentioned in the line.
The sequences "-*" and "- " are specifically ignored so that you could,
if you were so inclined, say
#!/bin/sh
- #! -*-perl-*-
+ #! -*- perl -*- -p
eval 'exec perl -x -wS $0 ${1+"$@"}'
if 0;
-to let Perl see the B<-p> switch.
+to let Perl see the L</-p> switch.
A similar trick involves the I<env> program, if you have it.
@@ -122,7 +124,7 @@ Put
extproc perl -S -your_switches
-as the first line in C<*.cmd> file (B<-S> due to a bug in cmd.exe's
+as the first line in C<*.cmd> file (L</-S> due to a bug in cmd.exe's
`extproc' handling).
=item MS-DOS
@@ -246,16 +248,16 @@ You can also specify the separator character using hexadecimal notation:
B<-0xI<HHH...>>, where the C<I<H>> are valid hexadecimal digits. Unlike
the octal form, this one may be used to specify any Unicode character, even
those beyond 0xFF. So if you I<really> want a record separator of 0777,
-specify it as B<-0x1FF>. (This means that you cannot use the B<-x> option
+specify it as B<-0x1FF>. (This means that you cannot use the L</-x> option
with a directory name that consists of hexadecimal digits, or else Perl
will think you have specified a hex number to B<-0>.)
=item B<-a>
X<-a> X<autosplit>
-turns on autosplit mode when used with a B<-n> or B<-p>. An implicit
+turns on autosplit mode when used with a L</-n> or L</-p>. An implicit
split command to the @F array is done as the first thing inside the
-implicit while loop produced by the B<-n> or B<-p>.
+implicit while loop produced by the L</-n> or L</-p>.
perl -ane 'print pop(@F), "\n";'
@@ -266,9 +268,9 @@ is equivalent to
print pop(@F), "\n";
}
-An alternate delimiter may be specified using B<-F>.
+An alternate delimiter may be specified using L<-F|/-Fpattern>.
-B<-a> implicitly sets B<-n>.
+B<-a> implicitly sets L</-n>.
=item B<-C [I<number/list>]>
X<-C>
@@ -308,14 +310,15 @@ STDOUT and STDERR. Repeating letters is just redundant, not cumulative
nor toggling.
The C<io> options mean that any subsequent open() (or similar I/O
-operations) in the current file scope will have the C<:utf8> PerlIO layer
+operations) in main program scope will have the C<:utf8> PerlIO layer
implicitly applied to them, in other words, UTF-8 is expected from any
input stream, and UTF-8 is produced to any output stream. This is just
-the default, with explicit layers in open() and with binmode() one can
-manipulate streams as usual.
+the default set via L<C<${^OPEN}>|perlvar/${^OPEN}>,
+with explicit layers in open() and with binmode() one can
+manipulate streams as usual. This has no effect on code run in modules.
B<-C> on its own (not followed by any number or option list), or the
-empty string C<""> for the C<PERL_UNICODE> environment variable, has the
+empty string C<""> for the L</PERL_UNICODE> environment variable, has the
same effect as B<-CSDL>. In other words, the standard I/O handles and
the default C<open()> layer are UTF-8-fied I<but> only if the locale
environment variables indicate a UTF-8 locale. This behaviour follows
@@ -366,13 +369,13 @@ X<-d> X<-dt>
runs the program under the control of a debugging, profiling, or tracing
module installed as C<Devel::I<MOD>>. E.g., B<-d:DProf> executes the
-program using the C<Devel::DProf> profiler. As with the B<-M> flag, options
-may be passed to the C<Devel::I<MOD>> package where they will be received
-and interpreted by the C<Devel::I<MOD>::import> routine. Again, like B<-M>,
-use -B<-d:-I<MOD>> to call C<Devel::I<MOD>::unimport> instead of import. The
-comma-separated list of options must follow a C<=> character. If B<t> is
-specified, it indicates to the debugger that threads will be used in the
-code being debugged. See L<perldebug>.
+program using the C<Devel::DProf> profiler. As with the L<-M|/-M[-]module>
+flag, options may be passed to the C<Devel::I<MOD>> package where they will
+be received and interpreted by the C<Devel::I<MOD>::import> routine. Again,
+like B<-M>, use -B<-d:-I<MOD>> to call C<Devel::I<MOD>::unimport> instead of
+import. The comma-separated list of options must follow a C<=> character.
+If B<t> is specified, it indicates to the debugger that threads will be used
+in the code being debugged. See L<perldebug>.
=item B<-D>I<letters>
X<-D> X<DEBUGGING> X<-DDEBUGGING>
@@ -428,6 +431,7 @@ B<-D14> is equivalent to B<-Dtls>):
subject to change
134217728 i trace PerlIO layer processing. Set PERLIO_DEBUG to
the filename to trace to.
+ 268435456 y trace y///, tr/// compilation and execution
All these flags require B<-DDEBUGGING> when you compile the Perl
executable (but see C<:opd> in L<Devel::Peek> or L<re/'debug' mode>
@@ -461,8 +465,9 @@ to use semicolons where you would in a normal program.
=item B<-E> I<commandline>
X<-E>
-behaves just like B<-e>, except that it implicitly enables all
-optional features (in the main compilation unit). See L<feature>.
+behaves just like L<-e|/-e commandline>, except that it implicitly
+enables all optional features (in the main compilation unit). See
+L<feature>.
=item B<-f>
X<-f> X<sitecustomize> X<sitecustomize.pl>
@@ -500,11 +505,11 @@ perl, you can check the value of C<$Config{usesitecustomize}>.
=item B<-F>I<pattern>
X<-F>
-specifies the pattern to split on for B<-a>. The pattern may be
+specifies the pattern to split on for L</-a>. The pattern may be
surrounded by C<//>, C<"">, or C<''>, otherwise it will be put in single
quotes. You can't use literal whitespace or NUL characters in the pattern.
-B<-F> implicitly sets both B<-a> and B<-n>.
+B<-F> implicitly sets both L</-a> and L</-n>.
=item B<-h>
X<-h>
@@ -639,7 +644,7 @@ X<-l> X<$/> X<$\>
enables automatic line-ending processing. It has two separate
effects. First, it automatically chomps C<$/> (the input record
-separator) when used with B<-n> or B<-p>. Second, it assigns C<$\>
+separator) when used with L</-n> or L</-p>. Second, it assigns C<$\>
(the output record separator) to have the value of I<octnum> so
that any print statements will have that separator added back on.
If I<octnum> is omitted, sets C<$\> to the current value of
@@ -649,7 +654,8 @@ C<$/>. For instance, to trim lines to 80 columns:
Note that the assignment C<$\ = $/> is done when the switch is processed,
so the input record separator can be different than the output record
-separator if the B<-l> switch is followed by a B<-0> switch:
+separator if the B<-l> switch is followed by a
+L<-0|/-0[octalE<sol>hexadecimal]> switch:
gnufind / -print0 | perl -ln0e 'print "found $_" if -p'
@@ -721,7 +727,8 @@ This is faster than using the B<-exec> switch of I<find> because you don't
have to start a process on every filename found (but it's not faster
than using the B<-delete> switch available in newer versions of I<find>.
It does suffer from the bug of mishandling newlines in pathnames, which
-you can fix if you follow the example under B<-0>.
+you can fix if you follow the example under
+L<-0|/-0[octalE<sol>hexadecimal]>.
C<BEGIN> and C<END> blocks may be used to capture control before or after
the implicit program loop, just as in I<awk>.
@@ -743,7 +750,7 @@ makes it iterate over filename arguments somewhat like I<sed>:
If a file named by an argument cannot be opened for some reason, Perl
warns you about it, and moves on to the next file. Note that the
lines are printed automatically. An error occurring during printing is
-treated as fatal. To suppress printing use the B<-n> switch. A B<-p>
+treated as fatal. To suppress printing use the L</-n> switch. A B<-p>
overrides a B<-n> switch.
C<BEGIN> and C<END> blocks may be used to capture control before or after
@@ -770,7 +777,7 @@ warnings.
=item B<-S>
X<-S>
-makes Perl use the PATH environment variable to search for the
+makes Perl use the L</PATH> environment variable to search for the
program unless the name of the program contains path separators.
On some platforms, this also makes Perl append suffixes to the
@@ -778,7 +785,8 @@ filename while searching for it. For example, on Win32 platforms,
the ".bat" and ".cmd" suffixes are appended if a lookup for the
original name fails, and if the name does not already end in one
of those suffixes. If your Perl was compiled with C<DEBUGGING> turned
-on, using the B<-Dp> switch to Perl shows how the search progresses.
+on, using the L<-Dp|/-Dletters> switch to Perl shows how the search
+progresses.
Typically this is used to emulate C<#!> startup on platforms that don't
support C<#!>. It's also convenient when debugging a script that uses C<#!>,
@@ -795,7 +803,7 @@ The system ignores the first line and feeds the program to F</bin/sh>,
which proceeds to try to execute the Perl program as a shell script.
The shell executes the second line as a normal shell command, and thus
starts up the Perl interpreter. On some systems $0 doesn't always
-contain the full pathname, so the B<-S> tells Perl to search for the
+contain the full pathname, so the L</-S> tells Perl to search for the
program if necessary. After Perl locates the program, it parses the
lines and ignores them because the variable $running_under_some_shell
is never true. If the program will be interpreted by csh, you will need
@@ -823,14 +831,14 @@ program will be searched for strictly on the PATH.
=item B<-t>
X<-t>
-Like B<-T>, but taint checks will issue warnings rather than fatal
+Like L</-T>, but taint checks will issue warnings rather than fatal
errors. These warnings can now be controlled normally with C<no warnings
qw(taint)>.
B<Note: This is not a substitute for C<-T>!> This is meant to be
used I<only> as a temporary development aid while securing legacy code:
for real production code and for new secure code written from scratch,
-always use the real B<-T>.
+always use the real L</-T>.
=item B<-T>
X<-T>
@@ -949,6 +957,8 @@ X<-X>
Disables all warnings regardless of C<use warnings> or C<$^W>.
See L<warnings>.
+Forbidden in L</C<PERL5OPT>>.
+
=item B<-x>
X<-x>
@@ -991,12 +1001,12 @@ Used if C<chdir> has no argument.
=item LOGDIR
X<LOGDIR>
-Used if C<chdir> has no argument and HOME is not set.
+Used if C<chdir> has no argument and L</HOME> is not set.
=item PATH
X<PATH>
-Used in executing subprocesses, and in finding the program if B<-S> is
+Used in executing subprocesses, and in finding the program if L</-S> is
used.
=item PERL5LIB
@@ -1012,14 +1022,14 @@ matching the entries in C<$Config{inc_version_list}> are added.
(These typically would be for older compatible perl versions installed
in the same directory tree.)
-If PERL5LIB is not defined, PERLLIB is used. Directories are separated
+If PERL5LIB is not defined, L</PERLLIB> is used. Directories are separated
(like in PATH) by a colon on Unixish platforms and by a semicolon on
Windows (the proper path separator being given by the command C<perl
-V:I<path_sep>>).
When running taint checks, either because the program was running setuid or
-setgid, or the B<-T> or B<-t> switch was specified, neither PERL5LIB nor
-PERLLIB is consulted. The program should instead say:
+setgid, or the L</-T> or L</-t> switch was specified, neither PERL5LIB nor
+L</PERLLIB> is consulted. The program should instead say:
use lib "/my/directory";
@@ -1029,7 +1039,7 @@ X<PERL5OPT>
Command-line options (switches). Switches in this variable are treated
as if they were on every Perl command line. Only the B<-[CDIMTUWdmtw]>
switches are allowed. When running taint checks (either because the
-program was running setuid or setgid, or because the B<-T> or B<-t>
+program was running setuid or setgid, or because the L</-T> or L</-t>
switch was used), this variable is ignored. If PERL5OPT begins with
B<-T>, tainting will be enabled and subsequent options ignored. If
PERL5OPT begins with B<-t>, tainting will be enabled, a writable dot
@@ -1060,27 +1070,12 @@ variable are briefly summarized below. For more details see L<PerlIO>.
=over 8
-=item :bytes
-X<:bytes>
-
-A pseudolayer that turns the C<:utf8> flag I<off> for the layer below;
-unlikely to be useful on its own in the global PERLIO environment variable.
-You perhaps were thinking of C<:crlf:bytes> or C<:perlio:bytes>.
-
=item :crlf
X<:crlf>
A layer which does CRLF to C<"\n"> translation distinguishing "text" and
-"binary" files in the manner of MS-DOS and similar operating systems.
-(It currently does I<not> mimic MS-DOS as far as treating of Control-Z
-as being an end-of-file marker.)
-
-=item :mmap
-X<:mmap>
-
-A layer that implements "reading" of files by using I<mmap>(2) to
-make an entire file appear in the process's address space, and then
-using that as PerlIO's "buffer".
+"binary" files in the manner of MS-DOS and similar operating systems,
+and also provides buffering similar to C<:perlio> on these architectures.
=item :perlio
X<:perlio>
@@ -1089,24 +1084,6 @@ This is a re-implementation of stdio-like buffering written as a
PerlIO layer. As such it will call whatever layer is below it for
its operations, typically C<:unix>.
-=item :pop
-X<:pop>
-
-An experimental pseudolayer that removes the topmost layer.
-Use with the same care as is reserved for nitroglycerine.
-
-=item :raw
-X<:raw>
-
-A pseudolayer that manipulates other layers. Applying the C<:raw>
-layer is equivalent to calling C<binmode($fh)>. It makes the stream
-pass each byte as-is without translation. In particular, both CRLF
-translation and intuiting C<:utf8> from the locale are disabled.
-
-Unlike in earlier versions of Perl, C<:raw> is I<not>
-just the inverse of C<:crlf>: other layers which would affect the
-binary nature of the stream are also removed or disabled.
-
=item :stdio
X<:stdio>
@@ -1121,42 +1098,31 @@ X<:unix>
Low-level layer that calls C<read>, C<write>, C<lseek>, etc.
-=item :utf8
-X<:utf8>
-
-A pseudolayer that enables a flag in the layer below to tell Perl
-that output should be in utf8 and that input should be regarded as
-already in valid utf8 form. B<WARNING: It does not check for validity and as such
-should be handled with extreme caution for input, because security violations
-can occur with non-shortest UTF-8 encodings, etc.> Generally C<:encoding(UTF-8)> is
-the best option when reading UTF-8 encoded data.
-
=item :win32
X<:win32>
On Win32 platforms this I<experimental> layer uses native "handle" IO
rather than a Unix-like numeric file descriptor layer. Known to be
-buggy in this release (5.14).
+buggy in this release (5.30).
=back
-The default set of layers should give acceptable results on all platforms
+The default set of layers should give acceptable results on all platforms.
-For Unix platforms that will be the equivalent of "unix perlio" or "stdio".
-Configure is set up to prefer the "stdio" implementation if the system's library
-provides for fast access to the buffer; otherwise, it uses the "unix perlio"
-implementation.
+For Unix platforms that will be the equivalent of ":unix:perlio" or ":stdio".
+Configure is set up to prefer the ":stdio" implementation if the system's library
+provides for fast access to the buffer (not common on modern architectures);
+otherwise, it uses the ":unix:perlio" implementation.
-On Win32 the default in this release (5.14) is "unix crlf". Win32's "stdio"
+On Win32 the default in this release (5.30) is ":unix:crlf". Win32's ":stdio"
has a number of bugs/mis-features for Perl IO which are somewhat depending
-on the version and vendor of the C compiler. Using our own C<crlf> layer as
-the buffer avoids those issues and makes things more uniform. The C<crlf>
-layer provides CRLF conversion as well as buffering.
+on the version and vendor of the C compiler. Using our own C<:crlf> layer as
+the buffer avoids those issues and makes things more uniform.
-This release (5.14) uses C<unix> as the bottom layer on Win32, and so still
+This release (5.30) uses C<:unix> as the bottom layer on Win32, and so still
uses the C compiler's numeric file descriptor routines. There is an
-experimental native C<win32> layer, which is expected to be enhanced and
-should eventually become the default under Win32.
+experimental native C<:win32> layer, which is expected to be enhanced and
+may eventually become the default under Win32.
The PERLIO environment variable is completely ignored when Perl
is run in taint mode.
@@ -1165,8 +1131,8 @@ is run in taint mode.
X<PERLIO_DEBUG>
If set to the name of a file or device when Perl is run with the
-B<-Di> command-line switch, the logging of certain operations of
-the PerlIO subsystem will be redirected to the specified file rather
+L<-Di|/-Dletters> command-line switch, the logging of certain operations
+of the PerlIO subsystem will be redirected to the specified file rather
than going to stderr, which is the default. The file is opened in append
mode. Typical uses are in Unix:
@@ -1178,7 +1144,7 @@ and under Win32, the approximately equivalent:
perl -Di script ...
This functionality is disabled for setuid scripts, for scripts run
-with B<-T>, and for scripts run on a Perl built without C<-DDEBUGGING>
+with L</-T>, and for scripts run on a Perl built without C<-DDEBUGGING>
support.
=item PERLLIB
@@ -1186,7 +1152,7 @@ X<PERLLIB>
A list of directories in which to look for Perl library
files before looking in the standard library.
-If PERL5LIB is defined, PERLLIB is not used.
+If L</PERL5LIB> is defined, PERLLIB is not used.
The PERLLIB environment variable is completely ignored when Perl
is run in taint mode.
@@ -1199,7 +1165,7 @@ The command used to load the debugger code. The default is:
BEGIN { require "perl5db.pl" }
The PERL5DB environment variable is only used when Perl is started with
-a bare B<-d> switch.
+a bare L</-d> switch.
=item PERL5DB_THREADED
X<PERL5DB_THREADED>
@@ -1257,8 +1223,7 @@ after compilation.
=item PERL_DESTRUCT_LEVEL
X<PERL_DESTRUCT_LEVEL>
-Relevant only if your Perl executable was built with B<-DDEBUGGING>,
-this controls the behaviour of global destruction of objects and other
+Controls the behaviour of global destruction of objects and other
references. See L<perlhacktips/PERL_DESTRUCT_LEVEL> for more information.
=item PERL_DL_NONLAZY
@@ -1300,7 +1265,7 @@ L</PERL_HASH_SEED_DEBUG> for more information.
X<PERL_PERTURB_KEYS>
(Since Perl 5.18.0) Set to C<"0"> or C<"NO"> then traversing keys
-will be repeatable from run to run for the same PERL_HASH_SEED.
+will be repeatable from run to run for the same C<PERL_HASH_SEED>.
Insertion into a hash will not change the order, except to provide
for more space in the hash. When combined with setting PERL_HASH_SEED
this mode is as close to pre 5.18 behavior as you can get.
@@ -1337,8 +1302,8 @@ B<Note> that any information about the hash function, especially the hash
seed is B<sensitive information>: by knowing it, one can craft a denial-of-service
attack against Perl code, even remotely; see L<perlsec/"Algorithmic Complexity Attacks">
for more information. B<Do not disclose the hash seed> to people who
-don't need to know it. See also C<hash_seed()> and
-C<key_traversal_mask()> in L<Hash::Util>.
+don't need to know it. See also L<C<hash_seed()>|Hash::Util/hash_seed> and
+L<C<hash_traversal_mask()>|Hash::Util/hash_traversal_mask>.
An example output might be:
@@ -1379,12 +1344,12 @@ L<perlipc/"Deferred Signals (Safe Signals)">.
=item PERL_UNICODE
X<PERL_UNICODE>
-Equivalent to the B<-C> command-line switch. Note that this is not
-a boolean variable. Setting this to C<"1"> is not the right way to
-"enable Unicode" (whatever that would mean). You can use C<"0"> to
-"disable Unicode", though (or alternatively unset PERL_UNICODE in
-your shell before starting Perl). See the description of the B<-C>
-switch for more information.
+Equivalent to the L<-C|/-C [numberE<sol>list]> command-line switch. Note
+that this is not a boolean variable. Setting this to C<"1"> is not the
+right way to "enable Unicode" (whatever that would mean). You can use
+C<"0"> to "disable Unicode", though (or alternatively unset PERL_UNICODE
+in your shell before starting Perl). See the description of the
+L<-C|/-C [numberE<sol>list]> switch for more information.
=item PERL_USE_UNSAFE_INC
X<PERL_USE_UNSAFE_INC>
@@ -1398,7 +1363,7 @@ C<@INC> and should not be set in the environment for day-to-day use.
=item SYS$LOGIN (specific to the VMS port)
X<SYS$LOGIN>
-Used if chdir has no argument and HOME and LOGDIR are not set.
+Used if chdir has no argument and L</HOME> and L</LOGDIR> are not set.
=item PERL_INTERNAL_RAND_SEED
X<PERL_INTERNAL_RAND_SEED>
@@ -1432,3 +1397,116 @@ lines before doing anything else, just to keep people honest:
$ENV{PATH} = "/bin:/usr/bin"; # or whatever you need
$ENV{SHELL} = "/bin/sh" if exists $ENV{SHELL};
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
+
+=head1 ORDER OF APPLICATION
+
+Some options, in particular C<-I>, C<-M>, C<PERL5LIB> and C<PERL5OPT> can
+interact, and the order in which they are applied is important.
+
+Note that this section does not document what I<actually> happens inside the
+perl interpreter, it documents what I<effectively> happens.
+
+=over
+
+=item -I
+
+The effect of multiple C<-I> options is to C<unshift> them onto C<@INC>
+from right to left. So for example:
+
+ perl -I 1 -I 2 -I 3
+
+will first prepend C<3> onto the front of C<@INC>, then prepend C<2>, and
+then prepend C<1>. The result is that C<@INC> begins with:
+
+ qw(1 2 3)
+
+=item -M
+
+Multiple C<-M> options are processed from left to right. So this:
+
+ perl -Mlib=1 -Mlib=2 -Mlib=3
+
+will first use the L<lib> pragma to prepend C<1> to C<@INC>, then
+it will prepend C<2>, then it will prepend C<3>, resulting in an C<@INC>
+that begins with:
+
+ qw(3 2 1)
+
+=item the PERL5LIB environment variable
+
+This contains a list of directories, separated by colons. The entire list
+is prepended to C<@INC> in one go. This:
+
+ PERL5LIB=1:2:3 perl
+
+will result in an C<@INC> that begins with:
+
+ qw(1 2 3)
+
+=item combinations of -I, -M and PERL5LIB
+
+C<PERL5LIB> is applied first, then all the C<-I> arguments, then all the
+C<-M> arguments. This:
+
+ PERL5LIB=e1:e2 perl -I i1 -Mlib=m1 -I i2 -Mlib=m2
+
+will result in an C<@INC> that begins with:
+
+ qw(m2 m1 i1 i2 e1 e2)
+
+=item the PERL5OPT environment variable
+
+This contains a space separated list of switches. We only consider the
+effects of C<-M> and C<-I> in this section.
+
+After normal processing of C<-I> switches from the command line, all
+the C<-I> switches in C<PERL5OPT> are extracted. They are processed from
+left to right instead of from right to left. Also note that while
+whitespace is allowed between a C<-I> and its directory on the command
+line, it is not allowed in C<PERL5OPT>.
+
+After normal processing of C<-M> switches from the command line, all
+the C<-M> switches in C<PERL5OPT> are extracted. They are processed from
+left to right, I<i.e.> the same as those on the command line.
+
+An example may make this clearer:
+
+ export PERL5OPT="-Mlib=optm1 -Iopti1 -Mlib=optm2 -Iopti2"
+ export PERL5LIB=e1:e2
+ perl -I i1 -Mlib=m1 -I i2 -Mlib=m2
+
+will result in an C<@INC> that begins with:
+
+ qw(
+ optm2
+ optm1
+
+ m2
+ m1
+
+ opti2
+ opti1
+
+ i1
+ i2
+
+ e1
+ e2
+ )
+
+=item Other complications
+
+There are some complications that are ignored in the examples above:
+
+=over
+
+=item arch and version subdirs
+
+All of C<-I>, C<PERL5LIB> and C<use lib> will also prepend arch and version
+subdirs if they are present
+
+=item sitecustomize.pl
+
+=back
+
+=back
diff --git a/gnu/usr.bin/perl/pod/perlsec.pod b/gnu/usr.bin/perl/pod/perlsec.pod
index b210445685e..c110324876e 100644
--- a/gnu/usr.bin/perl/pod/perlsec.pod
+++ b/gnu/usr.bin/perl/pod/perlsec.pod
@@ -14,24 +14,14 @@ untrustworthy) programs to accomplish its purposes.
=head1 SECURITY VULNERABILITY CONTACT INFORMATION
-If you believe you have found a security vulnerability in Perl, please
-email the details to perl5-security-report@perl.org. This creates a new
-Request Tracker ticket in a special queue which isn't initially publicly
-accessible. The email will also be copied to a closed subscription
-unarchived mailing list which includes all the core committers, who will
-be able to help assess the impact of issues, figure out a resolution, and
-help co-ordinate the release of patches to mitigate or fix the problem
-across all platforms on which Perl is supported. Please only use this
-address for security issues in the Perl core, not for modules
-independently distributed on CPAN.
-
-When sending an initial request to the security email address, please
-don't Cc any other parties, because if they reply to all, the reply will
-generate yet another new ticket. Once you have received an initial reply
-with a C<[perl #NNNNNN]> ticket number in the headline, it's okay to Cc
-subsequent replies to third parties: all emails to the
-perl5-security-report address with the ticket number in the subject line
-will be added to the ticket; without it, a new ticket will be created.
+If you believe you have found a security vulnerability in the Perl
+interpreter or modules maintained in the core Perl codebase,
+email the details to
+L<perl-security@perl.org|mailto:perl-security@perl.org>.
+This address is a closed membership mailing list monitored by the Perl
+security team.
+
+See L<perlsecpolicy> for additional information.
=head1 SECURITY MECHANISMS AND CONCERNS
@@ -245,14 +235,14 @@ Unix-like environments that support #! and setuid or setgid scripts.)
=head2 Taint mode and @INC
-When the taint mode (C<-T>) is in effect, the "." directory is removed
-from C<@INC>, and the environment variables C<PERL5LIB> and C<PERLLIB>
+When the taint mode (C<-T>) is in effect, the environment variables
+C<PERL5LIB> and C<PERLLIB>
are ignored by Perl. You can still adjust C<@INC> from outside the
program by using the C<-I> command line option as explained in
-L<perlrun>. The two environment variables are ignored because
-they are obscured, and a user running a program could be unaware that
-they are set, whereas the C<-I> option is clearly visible and
-therefore permitted.
+L<perlrun|perlrun/-Idirectory>. The two environment variables are
+ignored because they are obscured, and a user running a program could
+be unaware that they are set, whereas the C<-I> option is clearly
+visible and therefore permitted.
Another way to modify C<@INC> without modifying the program, is to use
the C<lib> pragma, e.g.:
@@ -268,6 +258,11 @@ problem will be reported:
Insecure dependency in require while running with -T switch
+On versions of Perl before 5.26, activating taint mode will also remove
+the current directory (".") from the default value of C<@INC>. Since
+version 5.26, the current directory isn't included in C<@INC> by
+default.
+
=head2 Cleaning Up Your Path
For "Insecure C<$ENV{PATH}>" messages, you need to set C<$ENV{'PATH'}> to
@@ -621,4 +616,5 @@ the issues overlap.
=head1 SEE ALSO
-L<perlrun> for its description of cleaning up environment variables.
+L<perlrun/ENVIRONMENT> for its description of cleaning up environment
+variables.
diff --git a/gnu/usr.bin/perl/pod/perlsource.pod b/gnu/usr.bin/perl/pod/perlsource.pod
index 724c36a8bfd..d7694741e2e 100644
--- a/gnu/usr.bin/perl/pod/perlsource.pod
+++ b/gnu/usr.bin/perl/pod/perlsource.pod
@@ -197,17 +197,21 @@ patched.
=head2 Build system
-The Perl build system starts with the F<Configure> script in the root
-directory.
+The Perl build system on *nix-like systems starts with the F<Configure>
+script in the root directory.
Platform-specific pieces of the build system also live in
platform-specific directories like F<win32/>, F<vms/>, etc.
+Windows and VMS have their own Configure-like scripts, in their
+respective directories.
-The F<Configure> script is ultimately responsible for generating a
-F<Makefile>.
+The F<Configure> script (or a platform-specific similar script) is
+ultimately responsible for generating a F<Makefile> from F<Makefile.SH>.
The build system that Perl uses is called metaconfig. This system is
-maintained separately from the Perl core.
+maintained separately from the Perl core, and knows about the
+platform-specific Configure-like scripts, as well as F<Configure>
+itself.
The metaconfig system has its own git repository. Please see its README
file in L<https://github.com/Perl/metaconfig> for more details.
diff --git a/gnu/usr.bin/perl/pod/perlstyle.pod b/gnu/usr.bin/perl/pod/perlstyle.pod
index 5c2534581e9..adc0f0d69f3 100644
--- a/gnu/usr.bin/perl/pod/perlstyle.pod
+++ b/gnu/usr.bin/perl/pod/perlstyle.pod
@@ -8,12 +8,13 @@ Each programmer will, of course, have his or her own preferences in
regards to formatting, but there are some general guidelines that will
make your programs easier to read, understand, and maintain.
-The most important thing is to run your programs under the B<-w>
-flag at all times. You may turn it off explicitly for particular
-portions of code via the C<no warnings> pragma or the C<$^W> variable
-if you must. You should also always run under C<use strict> or know the
-reason why not. The C<use sigtrap> and even C<use diagnostics> pragmas
-may also prove useful.
+The most important thing is to use L<strict> and L<warnings> in all your
+code or know the reason why not to. You may turn them off explicitly for
+particular portions of code via C<no warnings> or C<no strict>, and this
+can be limited to the specific warnings or strict features you wish to
+disable. The B<-w> flag and C<$^W> variable should not be used for this
+purpose since they can affect code you use but did not write, such as
+modules from core or CPAN.
Regarding aesthetics of code lay out, about the only thing Larry
cares strongly about is that the closing curly bracket of
@@ -102,11 +103,11 @@ you I<SHOULD> do it that way. Perl is designed to give you several
ways to do anything, so consider picking the most readable one. For
instance
- open(FOO,$foo) || die "Can't open $foo: $!";
+ open(my $fh, '<', $foo) || die "Can't open $foo: $!";
is better than
- die "Can't open $foo: $!" unless open(FOO,$foo);
+ die "Can't open $foo: $!" unless open(my $fh, '<', $foo);
because the second way hides the main point of the statement in a
modifier. On the other hand
@@ -248,7 +249,7 @@ system call and arguments were, and (VERY IMPORTANT) should contain the
standard system error message for what went wrong. Here's a simple but
sufficient example:
- opendir(D, $dir) or die "can't opendir $dir: $!";
+ opendir(my $dh, $dir) or die "can't opendir $dir: $!";
=item *
@@ -262,7 +263,7 @@ Line up your transliterations when it makes sense:
Think about reusability. Why waste brainpower on a one-shot when you
might want to do something like it again? Consider generalizing your
code. Consider writing a module or object class. Consider making your
-code run cleanly with C<use strict> and C<use warnings> (or B<-w>) in
+code run cleanly with C<use strict> and C<use warnings> in
effect. Consider giving away your code. Consider changing your whole
world view. Consider... oh, never mind.
diff --git a/gnu/usr.bin/perl/pod/perlsub.pod b/gnu/usr.bin/perl/pod/perlsub.pod
index 4571cbcc211..b5c05d274e0 100644
--- a/gnu/usr.bin/perl/pod/perlsub.pod
+++ b/gnu/usr.bin/perl/pod/perlsub.pod
@@ -224,7 +224,12 @@ X<recursion>
&foo(); # the same
&foo; # foo() get current args, like foo(@_) !!
- foo; # like foo() IFF sub foo predeclared, else "foo"
+ use strict 'subs';
+ foo; # like foo() iff sub foo predeclared, else
+ # a compile-time error
+ no strict 'subs';
+ foo; # like foo() iff sub foo predeclared, else
+ # a literal string "foo"
Not only does the C<&> form make the argument list optional, it also
disables any prototype checking on arguments you do provide. This
diff --git a/gnu/usr.bin/perl/pod/perlsyn.pod b/gnu/usr.bin/perl/pod/perlsyn.pod
index 02cfb73b1af..81270f13f6c 100644
--- a/gnu/usr.bin/perl/pod/perlsyn.pod
+++ b/gnu/usr.bin/perl/pod/perlsyn.pod
@@ -137,13 +137,16 @@ Its truth or falsehood determines how the modifier will behave.
C<if> executes the statement once I<if> and only if the condition is
true. C<unless> is the opposite, it executes the statement I<unless>
-the condition is true (that is, if the condition is false).
+the condition is true (that is, if the condition is false). See
+L<perldata/Scalar values> for definitions of true and false.
print "Basset hounds got long ears" if length $ear >= 10;
go_outside() and play() unless $is_raining;
The C<for(each)> modifier is an iterator: it executes the statement once
for each item in the LIST (with C<$_> aliased to each item in turn).
+There is no syntax to specify a C-style for loop or a lexically scoped
+iteration variable in this form.
print "Hello $_!\n" for qw(world Dolly nurse);
@@ -633,7 +636,7 @@ right), you can say
use feature "switch";
to enable an experimental switch feature. This is loosely based on an
-old version of a Perl 6 proposal, but it no longer resembles the Perl 6
+old version of a Raku proposal, but it no longer resembles the Raku
construct. You also get the switch feature whenever you declare that your
code prefers to run under a version of Perl that is 5.10 or later. For
example:
@@ -704,7 +707,7 @@ Due to an unfortunate bug in how C<given> was implemented between Perl 5.10
and 5.16, under those implementations the version of C<$_> governed by
C<given> is merely a lexically scoped copy of the original, not a
dynamically scoped alias to the original, as it would be if it were a
-C<foreach> or under both the original and the current Perl 6 language
+C<foreach> or under both the original and the current Raku language
specification. This bug was fixed in Perl 5.18 (and lexicalized C<$_> itself
was removed in Perl 5.24).
@@ -1196,13 +1199,13 @@ interested in only the first match alone.
This doesn't work if you explicitly specify a loop variable, as
in C<for $item (@array)>. You have to use the default variable C<$_>.
-=head3 Differences from Perl 6
+=head3 Differences from Raku
The Perl 5 smartmatch and C<given>/C<when> constructs are not compatible
-with their Perl 6 analogues. The most visible difference and least
+with their Raku analogues. The most visible difference and least
important difference is that, in Perl 5, parentheses are required around
the argument to C<given()> and C<when()> (except when this last one is used
-as a statement modifier). Parentheses in Perl 6 are always optional in a
+as a statement modifier). Parentheses in Raku are always optional in a
control construct such as C<if()>, C<while()>, or C<when()>; they can't be
made optional in Perl 5 without a great deal of potential confusion,
because Perl 5 would parse the expression
@@ -1230,7 +1233,7 @@ this works in Perl 5:
say "that's all, folks!";
-But it doesn't work at all in Perl 6. Instead, you should
+But it doesn't work at all in Raku. Instead, you should
use the (parallelizable) C<any> operator:
if any(@primary) eq "red" {
@@ -1242,11 +1245,11 @@ use the (parallelizable) C<any> operator:
}
The table of smartmatches in L<perlop/"Smartmatch Operator"> is not
-identical to that proposed by the Perl 6 specification, mainly due to
-differences between Perl 6's and Perl 5's data models, but also because
-the Perl 6 spec has changed since Perl 5 rushed into early adoption.
+identical to that proposed by the Raku specification, mainly due to
+differences between Raku's and Perl 5's data models, but also because
+the Raku spec has changed since Perl 5 rushed into early adoption.
-In Perl 6, C<when()> will always do an implicit smartmatch with its
+In Raku, C<when()> will always do an implicit smartmatch with its
argument, while in Perl 5 it is convenient (albeit potentially confusing) to
suppress this implicit smartmatch in various rather loosely-defined
situations, as roughly outlined above. (The difference is largely because
diff --git a/gnu/usr.bin/perl/pod/perlthrtut.pod b/gnu/usr.bin/perl/pod/perlthrtut.pod
index 5a7ae7f68d3..a8560dd54f2 100644
--- a/gnu/usr.bin/perl/pod/perlthrtut.pod
+++ b/gnu/usr.bin/perl/pod/perlthrtut.pod
@@ -1081,19 +1081,19 @@ on your way to becoming a threaded Perl expert.
=head1 SEE ALSO
Annotated POD for L<threads>:
-L<http://annocpan.org/?mode=search&field=Module&name=threads>
+L<https://web.archive.org/web/20171028020148/http://annocpan.org/?mode=search&field=Module&name=threads>
Latest version of L<threads> on CPAN:
L<https://metacpan.org/pod/threads>
Annotated POD for L<threads::shared>:
-L<http://annocpan.org/?mode=search&field=Module&name=threads%3A%3Ashared>
+L<https://web.archive.org/web/20171028020148/http://annocpan.org/?mode=search&field=Module&name=threads%3A%3Ashared>
Latest version of L<threads::shared> on CPAN:
L<https://metacpan.org/pod/threads::shared>
Perl threads mailing list:
-L<http://lists.perl.org/list/ithreads.html>
+L<https://lists.perl.org/list/ithreads.html>
=head1 Bibliography
@@ -1104,7 +1104,7 @@ Here's a short bibliography courtesy of Jürgen Christoffel:
Birrell, Andrew D. An Introduction to Programming with
Threads. Digital Equipment Corporation, 1989, DEC-SRC Research Report
#35 online as
-L<ftp://ftp.dec.com/pub/DEC/SRC/research-reports/SRC-035.pdf>
+L<https://www.hpl.hp.com/techreports/Compaq-DEC/SRC-RR-35.pdf>
(highly recommended)
Robbins, Kay. A., and Steven Robbins. Practical Unix Programming: A
diff --git a/gnu/usr.bin/perl/pod/perltie.pod b/gnu/usr.bin/perl/pod/perltie.pod
index 5ee19c09ec0..1bb220691bb 100644
--- a/gnu/usr.bin/perl/pod/perltie.pod
+++ b/gnu/usr.bin/perl/pod/perltie.pod
@@ -171,7 +171,7 @@ X<UNTIE>
This method will be triggered when the C<untie> occurs. This can be useful
if the class needs to know when no further calls will be made. (Except DESTROY
-of course.) See L<The C<untie> Gotcha> below for more details.
+of course.) See L</The C<untie> Gotcha> below for more details.
=item DESTROY this
X<DESTROY>
@@ -301,7 +301,7 @@ spaces so we have a little more work to do here:
croak "length of $value is greater than $self->{ELEMSIZE}";
}
# fill in the blanks
- $self->EXTEND( $index ) if $index > $self->FETCHSIZE();
+ $self->STORESIZE( $index ) if $index > $self->FETCHSIZE();
# right justify to keep element size for smaller elements
$self->{ARRAY}->[$index] = sprintf "%$self->{ELEMSIZE}s", $value;
}
@@ -351,16 +351,24 @@ X<EXTEND>
Informative call that array is likely to grow to have I<count> entries.
Can be used to optimize allocation. This method need do nothing.
-In our example, we want to make sure there are no blank (C<undef>)
-entries, so C<EXTEND> will make use of C<STORESIZE> to fill elements
-as needed:
+In our example there is no reason to implement this method, so we leave
+it as a no-op. This method is only relevant to tied array implementations
+where there is the possibility of having the allocated size of the array
+be larger than is visible to a perl programmer inspecting the size of the
+array. Many tied array implementations will have no reason to implement it.
sub EXTEND {
my $self = shift;
my $count = shift;
- $self->STORESIZE( $count );
+ # nothing to see here, move along.
}
+B<NOTE:> It is generally an error to make this equivalent to STORESIZE.
+Perl may from time to time call EXTEND without wanting to actually change
+the array size directly. Any tied array should function correctly if this
+method is a no-op, even if perhaps they might not be as efficient as they
+would if this method was implemented.
+
=item EXISTS this, key
X<EXISTS>
@@ -482,7 +490,7 @@ In our example, we'll use a little shortcut if there is a I<LIST>:
=item UNTIE this
X<UNTIE>
-Will be called when C<untie> happens. (See L<The C<untie> Gotcha> below.)
+Will be called when C<untie> happens. (See L</The C<untie> Gotcha> below.)
=item DESTROY this
X<DESTROY>
@@ -838,7 +846,7 @@ L<Hash::Util/bucket_ratio> for a backwards compatibility path.
=item UNTIE this
X<UNTIE>
-This is called when C<untie> occurs. See L<The C<untie> Gotcha> below.
+This is called when C<untie> occurs. See L</The C<untie> Gotcha> below.
=item DESTROY this
X<DESTROY>
@@ -1017,7 +1025,7 @@ X<UNTIE>
As with the other types of ties, this method will be called when C<untie> happens.
It may be appropriate to "auto CLOSE" when this occurs. See
-L<The C<untie> Gotcha> below.
+L</The C<untie> Gotcha> below.
=item DESTROY this
X<DESTROY>
@@ -1042,7 +1050,7 @@ Here's how to use our little example:
X<UNTIE>
You can define for all tie types an UNTIE method that will be called
-at untie(). See L<The C<untie> Gotcha> below.
+at untie(). See L</The C<untie> Gotcha> below.
=head2 The C<untie> Gotcha
X<untie>
diff --git a/gnu/usr.bin/perl/pod/perltrap.pod b/gnu/usr.bin/perl/pod/perltrap.pod
index acb43925d19..b7eef0fb8df 100644
--- a/gnu/usr.bin/perl/pod/perltrap.pod
+++ b/gnu/usr.bin/perl/pod/perltrap.pod
@@ -5,7 +5,7 @@ perltrap - Perl traps for the unwary
=head1 DESCRIPTION
The biggest trap of all is forgetting to C<use warnings> or use the B<-w>
-switch; see L<warnings> and L<perlrun>. The second biggest trap is not
+switch; see L<warnings> and L<perlrun/-w>. The second biggest trap is not
making your entire program runnable under C<use strict>. The third biggest
trap is not reading the list of changes in this version of Perl; see
L<perldelta>.
diff --git a/gnu/usr.bin/perl/pod/perlunicode.pod b/gnu/usr.bin/perl/pod/perlunicode.pod
index 8f09a18fcaa..2fdb8e18093 100644
--- a/gnu/usr.bin/perl/pod/perlunicode.pod
+++ b/gnu/usr.bin/perl/pod/perlunicode.pod
@@ -24,7 +24,7 @@ everyone uses Unicode.
Unicode is a comprehensive standard. It specifies many things outside
the scope of Perl, such as how to display sequences of characters. For
a full discussion of all aspects of Unicode, see
-L<http://www.unicode.org>.
+L<https://www.unicode.org>.
=head2 Important Caveats
@@ -449,7 +449,8 @@ Also, there are typically various synonyms for the values the property
can be. For binary properties, C<"True"> has 3 synonyms: C<"T">,
C<"Yes">, and C<"Y">; and C<"False"> has correspondingly C<"F">,
C<"No">, and C<"N">. But be careful. A short form of a value for one
-property may not mean the same thing as the same short form for another.
+property may not mean the same thing as the short form spelled the same
+for another.
Thus, for the C<L</General_Category>> property, C<"L"> means
C<"Letter">, but for the L<C<Bidi_Class>|/Bidirectional Character Types>
property, C<"L"> means C<"Left">. A complete list of properties and
@@ -459,15 +460,20 @@ Upper/lower case differences in property names and values are irrelevant;
thus C<\p{Upper}> means the same thing as C<\p{upper}> or even C<\p{UpPeR}>.
Similarly, you can add or subtract underscores anywhere in the middle of a
word, so that these are also equivalent to C<\p{U_p_p_e_r}>. And white space
-is irrelevant adjacent to non-word characters, such as the braces and the equals
-or colon separators, so C<\p{ Upper }> and C<\p{ Upper_case : Y }> are
-equivalent to these as well. In fact, white space and even
-hyphens can usually be added or deleted anywhere. So even C<\p{ Up-per case = Yes}> is
-equivalent. All this is called "loose-matching" by Unicode. The few places
-where stricter matching is used is in the middle of numbers, and in the Perl
-extension properties that begin or end with an underscore. Stricter matching
-cares about white space (except adjacent to non-word characters),
-hyphens, and non-interior underscores.
+is generally irrelevant adjacent to non-word characters, such as the
+braces and the equals or colon separators, so C<\p{ Upper }> and
+C<\p{ Upper_case : Y }> are equivalent to these as well. In fact, white
+space and even hyphens can usually be added or deleted anywhere. So
+even C<\p{ Up-per case = Yes}> is equivalent. All this is called
+"loose-matching" by Unicode. The "name" property has some restrictions
+on this due to a few outlier names. Full details are given in
+L<https://www.unicode.org/reports/tr44/tr44-24.html#UAX44-LM2>.
+
+The few places where stricter matching is
+used is in the middle of numbers, the "name" property, and in the Perl
+extension properties that begin or end with an underscore. Stricter
+matching cares about white space (except adjacent to non-word
+characters), hyphens, and non-interior underscores.
You can also use negation in both C<\p{}> and C<\P{}> by introducing a caret
(C<^>) between the first brace and the property name: C<\p{^Tamil}> is
@@ -499,7 +505,7 @@ matching Unicode properties against non-Unicode code points.
Every Unicode character is assigned a general category, which is the "most
usual categorization of a character" (from
-L<http://www.unicode.org/reports/tr44>).
+L<https://www.unicode.org/reports/tr44>).
The compound way of writing these is like C<\p{General_Category=Number}>
(short: C<\p{gc:n}>). But Perl furnishes shortcuts in which everything up
@@ -598,7 +604,7 @@ property can have more values added in a future Unicode release. Those
listed above comprised the complete set for many Unicode releases, but
others were added in Unicode 6.3; you can always find what the
current ones are in L<perluniprops>. And
-L<http://www.unicode.org/reports/tr9/> describes how to use them.
+L<https://www.unicode.org/reports/tr9/> describes how to use them.
=head3 B<Scripts>
@@ -675,7 +681,7 @@ used in more than one script, they will be in C<sc=Common>, but only
if they are used in many scripts should they be in C<scx=Common>.
The explanation above has omitted some detail; refer to UAX#24 "Unicode
-Script Property": L<http://www.unicode.org/reports/tr24>.
+Script Property": L<https://www.unicode.org/reports/tr24>.
A complete list of scripts and their shortcuts is in L<perluniprops>.
@@ -703,7 +709,7 @@ those digits are shared across many scripts, and hence are in the
C<Common> script.
For more about scripts versus blocks, see UAX#24 "Unicode Script Property":
-L<http://www.unicode.org/reports/tr24>
+L<https://www.unicode.org/reports/tr24>
The C<Script_Extensions> or C<Script> properties are likely to be the
ones you want to use when processing
@@ -751,12 +757,12 @@ Unicode defines all its properties in the compound form, so all single-form
properties are Perl extensions. Most of these are just synonyms for the
Unicode ones, but some are genuine extensions, including several that are in
the compound form. And quite a few of these are actually recommended by Unicode
-(in L<http://www.unicode.org/reports/tr18>).
+(in L<https://www.unicode.org/reports/tr18>).
This section gives some details on all extensions that aren't just
synonyms for compound-form Unicode properties
(for those properties, you'll have to refer to the
-L<Unicode Standard|http://www.unicode.org/reports/tr44>.
+L<Unicode Standard|https://www.unicode.org/reports/tr44>.
=over
@@ -804,7 +810,7 @@ pre-composed character. An example is the C<"SUPERSCRIPT ONE">. It is
somewhat like a regular digit 1, but not exactly; its decomposition into
the digit 1 is called a "compatible" decomposition, specifically a
"super" decomposition. There are several such compatibility
-decompositions (see L<http://www.unicode.org/reports/tr44>), including
+decompositions (see L<https://www.unicode.org/reports/tr44>), including
one called "compat", which means some miscellaneous type of
decomposition that doesn't fit into the other decomposition categories
that Unicode has chosen.
@@ -921,9 +927,59 @@ L<perlrecharclass/POSIX Character Classes>.
=back
+=head2 Comparison of C<\N{...}> and C<\p{name=...}>
+
+Starting in Perl 5.32, you can specify a character by its name in
+regular expression patterns using C<\p{name=...}>. This is in addition
+to the longstanding method of using C<\N{...}>. The following
+summarizes the differences between these two:
+
+ \N{...} \p{Name=...}
+ can interpolate only with eval yes [1]
+ custom names yes no [2]
+ name aliases yes yes [3]
+ named sequences yes yes [4]
+ name value parsing exact Unicode loose [5]
+
+=over
+
+=item [1]
+
+The ability to interpolate means you can do something like
+
+ qr/\p{na=latin capital letter $which}/
+
+and specify C<$which> elsewhere.
+
+=item [2]
+
+You can create your own names for characters, and override official
+ones when using C<\N{...}>. See L<charnames/CUSTOM ALIASES>.
+
+=item [3]
+
+Some characters have multiple names (synonyms).
+
+=item [4]
+
+Some particular sequences of characters are given a single name, in
+addition to their individual ones.
+
+=item [5]
+
+Exact name value matching means you have to specify case, hyphens,
+underscores, and spaces precisely in the name you want. Loose matching
+follows the Unicode rules
+L<https://www.unicode.org/reports/tr44/tr44-24.html#UAX44-LM2>,
+where these are mostly irrelevant. Except for a few outlier character
+names, these are the same rules as are already used for any other
+C<\p{...}> property.
+
+=back
+
=head2 Wildcards in Property Values
-Starting in Perl 5.30, it is possible to do do something like this:
+Starting in Perl 5.30, it is possible to do something like this:
qr!\p{numeric_value=/\A[0-5]\z/}!
@@ -957,7 +1013,7 @@ delimits the end of the enclosing C<\p{}>. Like any pattern, certain
other delimiters are terminated by their mirror images. These are
C<"(">, C<"[>", and C<"E<lt>">. If the delimiter is any of C<"-">,
C<"_">, C<"+">, or C<"\">, or is the same delimiter as is used for the
-enclosing pattern, it must be be preceded by a backslash escape, both
+enclosing pattern, it must be preceded by a backslash escape, both
fore and aft.
Beware of using C<"$"> to indicate to match the end of the string. It
@@ -967,18 +1023,27 @@ C<$/>.
No modifiers may follow the final delimiter. Instead, use
L<perlre/(?adlupimnsx-imnsx)> and/or
L<perlre/(?adluimnsx-imnsx:pattern)> to specify modifiers.
+However, certain modifiers are illegal in your wildcard subpattern.
+The only character set modifier specifiable is C</aa>;
+any other character set, and C<-m>, and C<p>, and C<s> are all illegal.
+Specifying modifiers like C<qr/.../gc> that aren't legal in the
+C<(?...)> notation normally raise a warning, but with wildcard
+subpatterns, their use is an error. The C<m> modifier is ineffective;
+everything that matches will be a single line.
+
+By default, your pattern is matched case-insensitively, as if C</i> had
+been specified. You can change this by saying C<(?-i)> in your pattern.
+
+There are also certain operations that are illegal. You can't nest
+C<\p{...}> and C<\P{...}> calls within a wildcard subpattern, and C<\G>
+doesn't make sense, so is also prohibited.
+
+And the C<*> quantifier (or its equivalent C<(0,}>) is illegal.
This feature is not available when the left-hand side is prefixed by
C<Is_>, nor for any form that is marked as "Discouraged" in
L<perluniprops/Discouraged>.
-Perl wraps your pattern with C<(?iaa: ... )>. This is because nothing
-outside ASCII can match the Unicode property values available in this
-release, and they should match caselessly. If your pattern has a syntax
-error, this wrapping will be shown in the error message, even though you
-didn't specify it yourself. This could be confusing if you don't know
-about this.
-
This experimental feature has been added to begin to implement
L<https://www.unicode.org/reports/tr18/#Wildcard_Properties>. Using it
will raise a (default-on) warning in the
@@ -997,30 +1062,58 @@ example,
would match the same things.
+Another example that shows that within C<\p{...}>, C</x> isn't needed to
+have spaces:
+
+ qr!\p{scx= /Hebrew|Greek/ }!
+
+To be safe, we should have anchored the above example, to prevent
+matches for something like C<Hebrew_Braille>, but there aren't
+any script names like that, so far.
A warning is issued if none of the legal values for a property are
matched by your pattern. It's likely that a future release will raise a
warning if your pattern ends up causing every possible code point to
match.
-Another example that shows that within C<\p{...}>, C</x> isn't needed to
-have spaces:
+Starting in 5.32, the Name, Name Aliases, and Named Sequences properties
+are allowed to be matched. They are considered to be a single
+combination property, just as has long been the case for C<\N{}>. Loose
+matching doesn't work in exactly the same way for these as it does for
+the values of other properties. The rules are given in
+L<https://www.unicode.org/reports/tr44/tr44-24.html#UAX44-LM2>. As a
+result, Perl doesn't try loose matching for you, like it does in other
+properties. All letters in names are uppercase, but you can add C<(?i)>
+to your subpattern to ignore case. If you're uncertain where a blank
+is, you can use C< ?> in your subpattern. No character name contains an
+underscore, so don't bother trying to match one. The use of hyphens is
+particularly problematic; refer to the above link. But note that, as of
+Unicode 13.0, the only script in modern usage which has weirdnesses with
+these is Tibetan; also the two Korean characters U+116C HANGUL JUNGSEONG
+OE and U+1180 HANGUL JUNGSEONG O-E. Unicode makes no promises to not
+add hyphen-problematic names in the future.
- qr!\p{scx= /Hebrew|Greek/ }!
+Using wildcards on these is resource intensive, given the hundreds of
+thousands of legal names that must be checked against.
-To be safe, we should have anchored the above example, to prevent
-matches for something like C<Hebrew_Braile>, but there aren't
-any script names like that.
+An example of using Name property wildcards is
+
+ qr!\p{name=/(SMILING|GRINNING) FACE/}!
+
+Another is
-There are certain properties that it doesn't currently work with. These
-are:
+ qr/(?[ \p{name=\/CJK\/} - \p{ideographic} ])/
+
+which is the 200-ish (as of Unicode 13.0) CJK characters that aren't
+ideographs.
+
+There are certain properties that wildcard subpatterns don't currently
+work with. These are:
Bidi Mirroring Glyph
Bidi Paired Bracket
Case Folding
Decomposition Mapping
Equivalent Unified Ideograph
- Name
- Name Alias
Lowercase Mapping
NFKC Case Fold
Titlecase Mapping
@@ -1031,7 +1124,6 @@ Nor is the C<@I<unicode_property>@> form implemented.
Here's a complete example of matching IPV4 internet protocol addresses
in any (single) script
- no warnings 'experimental::script_run';
no warnings 'experimental::regex_sets';
no warnings 'experimental::uniprop_wildcards';
@@ -1067,7 +1159,9 @@ You can define your own binary character properties by defining subroutines
whose names begin with C<"In"> or C<"Is">. (The experimental feature
L<perlre/(?[ ])> provides an alternative which allows more complex
definitions.) The subroutines can be defined in any
-package. The user-defined properties can be used in the regular expression
+package. They override any Unicode properties expressed as the same
+names. The user-defined properties can be used in the regular
+expression
C<\p{}> and C<\P{}> constructs; if you are using a user-defined property from a
package other than the one you are in, you must specify its package in the
C<\p{}> or C<\P{}> construct.
@@ -1227,7 +1321,7 @@ See L<Encode>.
The following list of Unicode supported features for regular expressions describes
all features currently directly supported by core Perl. The references
to "Level I<N>" and the section numbers refer to
-L<UTS#18 "Unicode Regular Expressions"|http://www.unicode.org/reports/tr18>,
+L<UTS#18 "Unicode Regular Expressions"|https://www.unicode.org/reports/tr18>,
version 18, October 2016.
=head3 Level 1 - Basic Unicode Support
@@ -1247,13 +1341,12 @@ version 18, October 2016.
=item [2]
C<\p{...}> C<\P{...}>. This requirement is for a minimal list of
-properties. Perl supports these and all other Unicode character
-properties, as R2.7 asks (see L</"Unicode Character Properties"> above).
+properties. Perl supports these. See R2.7 for other properties.
=item [3]
Perl has C<\d> C<\D> C<\s> C<\S> C<\w> C<\W> C<\X> C<[:I<prop>:]>
C<[:^I<prop>:]>, plus all the properties specified by
-L<http://www.unicode.org/reports/tr18/#Compatibility_Properties>. These
+L<https://www.unicode.org/reports/tr18/#Compatibility_Properties>. These
are described above in L</Other Properties>
=item [4]
@@ -1319,7 +1412,7 @@ character.
The reason this is considered to be only partially implemented is that
Perl has L<C<qrE<sol>\b{lb}E<sol>>|perlrebackslash/\b{lb}> and
C<L<Unicode::LineBreak>> that are conformant with
-L<UAX#14 "Unicode Line Breaking Algorithm"|http://www.unicode.org/reports/tr14>.
+L<UAX#14 "Unicode Line Breaking Algorithm"|https://www.unicode.org/reports/tr14>.
The regular expression construct provides default behavior, while the
heavier-weight module provides customizable line breaking.
@@ -1355,70 +1448,51 @@ C<U+10FFFF> but also beyond C<U+10FFFF>
RL2.1 Canonical Equivalents - Retracted [9]
by Unicode
- RL2.2 Extended Grapheme Clusters - Partial [10]
+ RL2.2 Extended Grapheme Clusters and - Partial [10]
+ Character Classes with Strings
RL2.3 Default Word Boundaries - Done [11]
RL2.4 Default Case Conversion - Done
RL2.5 Name Properties - Done
RL2.6 Wildcards in Property Values - Partial [12]
- RL2.7 Full Properties - Done
+ RL2.7 Full Properties - Partial [13]
+ RL2.8 Optional Properties - Partial [14]
=over 4
=item [9]
Unicode has rewritten this portion of UTS#18 to say that getting
canonical equivalence (see UAX#15
-L<"Unicode Normalization Forms"|http://www.unicode.org/reports/tr15>)
+L<"Unicode Normalization Forms"|https://www.unicode.org/reports/tr15>)
is basically to be done at the programmer level. Use NFD to write
both your regular expressions and text to match them against (you
can use L<Unicode::Normalize>).
=item [10]
-Perl has C<\X> and C<\b{gcb}> but we don't have a "Grapheme Cluster Mode".
+Perl has C<\X> and C<\b{gcb}>. Unicode has retracted their "Grapheme
+Cluster Mode", and recently added string properties, which Perl does not
+yet support.
=item [11] see
-L<UAX#29 "Unicode Text Segmentation"|http://www.unicode.org/reports/tr29>,
+L<UAX#29 "Unicode Text Segmentation"|https://www.unicode.org/reports/tr29>,
=item [12] see
L</Wildcards in Property Values> above.
-=back
-
-=head3 Level 3 - Tailored Support
-
- RL3.1 Tailored Punctuation - Missing
- RL3.2 Tailored Grapheme Clusters - Missing [13]
- RL3.3 Tailored Word Boundaries - Missing
- RL3.4 Tailored Loose Matches - Retracted by Unicode
- RL3.5 Tailored Ranges - Retracted by Unicode
- RL3.6 Context Matching - Partial [14]
- RL3.7 Incremental Matches - Missing
- RL3.8 Unicode Set Sharing - Retracted by Unicode
- RL3.9 Possible Match Sets - Missing
- RL3.10 Folded Matching - Retracted by Unicode
- RL3.11 Submatchers - Partial [15]
-
-=over 4
-
=item [13]
-Perl has L<Unicode::Collate>, but it isn't integrated with regular
-expressions. See
-L<UTS#10 "Unicode Collation Algorithms"|http://www.unicode.org/reports/tr10>.
+Perl supports all the properties in the Unicode Character Database
+(UCD). It does not yet support the listed properties that come from
+other Unicode sources.
=item [14]
-Perl has C<(?<=x)> and C<(?=x)>, but this requirement says that it
-should be possible to specify that matches may occur only in a substring
-with the lookaheads and lookbehinds able to see beyond that matchable
-portion.
-
-=item [15]
-Perl has user-defined properties (L</"User-Defined Character
-Properties">) to look at single code points in ways beyond Unicode, and
-it might be possible, though probably not very clean, to use code blocks
-and things like C<(?(DEFINE)...)> (see L<perlre>) to do more specialized
-matching.
+The only optional property that Perl supports is Named Sequence. None
+of these properties are in the UCD.
=back
+=head3 Level 3 - Tailored Support
+
+This has been retracted by Unicode.
+
=head2 Unicode Encodings
Unicode characters are assigned to I<code points>, which are abstract
@@ -1625,7 +1699,7 @@ noncharacter code points from such text, because of the potential
security issues caused by deleting uninterpreted characters. (See
conformance clause C7 in Section 3.2, Conformance Requirements, and
L<Unicode Technical Report #36, "Unicode Security
-Considerations"|http://www.unicode.org/reports/tr36/#Substituting_for_Ill_Formed_Subsequences>)."
+Considerations"|https://www.unicode.org/reports/tr36/#Substituting_for_Ill_Formed_Subsequences>)."
=back
@@ -1776,7 +1850,7 @@ through C<0x10FFFF>.)
=head2 Security Implications of Unicode
First, read
-L<Unicode Security Considerations|http://www.unicode.org/reports/tr36>.
+L<Unicode Security Considerations|https://www.unicode.org/reports/tr36>.
Also, note the following:
@@ -1994,7 +2068,7 @@ In L<< C<split>'s special-case whitespace splitting|perlfunc/split >>.
Starting in Perl 5.28.0, the C<split> function with a pattern specified as
a string containing a single space handles whitespace characters consistently
-within the scope of of C<unicode_strings>. Prior to that, or outside its scope,
+within the scope of C<unicode_strings>. Prior to that, or outside its scope,
characters that are whitespace according to Unicode rules but not according to
ASCII rules were treated as field contents rather than field separators when
they appear in byte-encoded strings.
@@ -2042,7 +2116,7 @@ v5.20 and v5.22, however, the earliest usable version is Unicode 5.1.
Perl v5.18 and v5.24 are able to handle all earlier versions.
Download the files in the desired version of Unicode from the Unicode web
-site L<http://www.unicode.org>). These should replace the existing files in
+site L<https://www.unicode.org>). These should replace the existing files in
F<lib/unicore> in the Perl source tree. Follow the instructions in
F<README.perl> in that directory to change some of their names, and then build
perl (see L<INSTALL>).
@@ -2246,6 +2320,6 @@ C<Nd> compared with the 10 ASCII characters matching C<[0-9]>).
L<perlunitut>, L<perluniintro>, L<perluniprops>, L<Encode>, L<open>, L<utf8>, L<bytes>,
L<perlretut>, L<perlvar/"${^UNICODE}">,
-L<http://www.unicode.org/reports/tr44>).
+L<https://www.unicode.org/reports/tr44>).
=cut
diff --git a/gnu/usr.bin/perl/pod/perlunicook.pod b/gnu/usr.bin/perl/pod/perlunicook.pod
index eb395f795e4..c709e0fc73e 100644
--- a/gnu/usr.bin/perl/pod/perlunicook.pod
+++ b/gnu/usr.bin/perl/pod/perlunicook.pod
@@ -152,6 +152,13 @@ that is, it disregards case, whitespace, and underscores:
"\N{euro sign}" # :loose (from v5.16)
+Starting in v5.32, you can also use
+
+ qr/\p{name=euro sign}/
+
+to get official Unicode named characters in regular expressions. Loose
+matching is always done for these.
+
=head2 ℞ 9: Unicode named sequences
These look just like character names but return multiple codepoints.
diff --git a/gnu/usr.bin/perl/pod/perlunifaq.pod b/gnu/usr.bin/perl/pod/perlunifaq.pod
index ba391d423f6..da64f43d0ff 100644
--- a/gnu/usr.bin/perl/pod/perlunifaq.pod
+++ b/gnu/usr.bin/perl/pod/perlunifaq.pod
@@ -277,7 +277,7 @@ but this is considered bad style. Especially C<_utf8_on> can be dangerous, for
the same reason that C<:utf8> can.
There are some shortcuts for oneliners;
-see L<-C|perlrun/-C [numberE<sol>list]> in L<perlrun>.
+see L<-C in perlrun|perlrun/-C [numberE<sol>list]>.
=head2 What's the difference between C<UTF-8> and C<utf8>?
diff --git a/gnu/usr.bin/perl/pod/perluniintro.pod b/gnu/usr.bin/perl/pod/perluniintro.pod
index 5e263b4e635..14e8c513f0c 100644
--- a/gnu/usr.bin/perl/pod/perluniintro.pod
+++ b/gnu/usr.bin/perl/pod/perluniintro.pod
@@ -220,7 +220,8 @@ and removes the program's warning.
You can enable automatic UTF-8-ification of your standard file
handles, default C<open()> layer, and C<@ARGV> by using either
the C<-C> command line switch or the C<PERL_UNICODE> environment
-variable, see L<perlrun> for the documentation of the C<-C> switch.
+variable, see L<perlrun|perlrun/-C [numberE<sol>list]> for the
+documentation of the C<-C> switch.
Note that this means that Perl expects other software to work the same
way:
@@ -266,6 +267,11 @@ Similarly, they can be used in regular expression literals
$smiley =~ /\N{WHITE SMILING FACE}/;
$smiley =~ /\N{U+263a}/;
+or, starting in v5.32:
+
+ $smiley =~ /\p{Name=WHITE SMILING FACE}/;
+ $smiley =~ /\p{Name=whitesmilingface}/;
+
At run-time you can use:
use charnames ();
@@ -599,8 +605,8 @@ CAPITAL LETTER A's should be considered equal, or even A's of any case.
The long answer is that you need to consider character normalization
and casing issues: see L<Unicode::Normalize>, Unicode Technical Report #15,
-L<Unicode Normalization Forms|http://www.unicode.org/unicode/reports/tr15> and
-sections on case mapping in the L<Unicode Standard|http://www.unicode.org>.
+L<Unicode Normalization Forms|https://www.unicode.org/unicode/reports/tr15> and
+sections on case mapping in the L<Unicode Standard|https://www.unicode.org>.
As of Perl 5.8.0, the "Full" case-folding of I<Case
Mappings/SpecialCasing> is implemented, but bugs remain in C<qr//i> with them,
@@ -624,7 +630,7 @@ C<0x00C1> > C<0x00C0>.
The long answer is that "it depends", and a good answer cannot be
given without knowing (at the very least) the language context.
See L<Unicode::Collate>, and I<Unicode Collation Algorithm>
-L<http://www.unicode.org/unicode/reports/tr10/>
+L<https://www.unicode.org/unicode/reports/tr10/>
=back
@@ -911,19 +917,19 @@ show a decimal number in hexadecimal. If you have just the
Unicode Consortium
-L<http://www.unicode.org/>
+L<https://www.unicode.org/>
=item *
Unicode FAQ
-L<http://www.unicode.org/unicode/faq/>
+L<https://www.unicode.org/unicode/faq/>
=item *
Unicode Glossary
-L<http://www.unicode.org/glossary/>
+L<https://www.unicode.org/glossary/>
=item *
@@ -937,7 +943,7 @@ L<http://unicode.org/resources/readinglist.html>
Unicode Useful Resources
-L<http://www.unicode.org/unicode/onlinedat/resources.html>
+L<https://www.unicode.org/unicode/onlinedat/resources.html>
=item *
diff --git a/gnu/usr.bin/perl/pod/perlutil.pod b/gnu/usr.bin/perl/pod/perlutil.pod
index 0051f68b175..2703815464a 100644
--- a/gnu/usr.bin/perl/pod/perlutil.pod
+++ b/gnu/usr.bin/perl/pod/perlutil.pod
@@ -47,14 +47,6 @@ F<pod2usage> will just extract the "USAGE" section; some of
the utilities will automatically call F<pod2usage> on themselves when
you call them with C<-help>.
-=item L<podselect|podselect>
-
-F<pod2usage> is a special case of F<podselect>, a utility to extract
-named sections from documents written in POD. For instance, while
-utilities have "USAGE" sections, Perl modules usually have "SYNOPSIS"
-sections: C<podselect -s "SYNOPSIS" ...> will extract this section for
-a given file.
-
=item L<podchecker|podchecker>
If you're writing your own documentation in POD, the F<podchecker>
@@ -228,7 +220,7 @@ validate your packlists and even create a tarball from an installed module.
=head1 SEE ALSO
L<perldoc|perldoc>, L<pod2man|pod2man>, L<perlpod>,
-L<pod2html|pod2html>, L<pod2usage|pod2usage>, L<podselect|podselect>,
+L<pod2html|pod2html>, L<pod2usage|pod2usage>,
L<podchecker|podchecker>, L<splain|splain>, L<perldiag>,
C<roffitall|roffitall>, L<File::Find|File::Find>, L<pl2pm|pl2pm>,
L<perlbug|perlbug>, L<h2ph|h2ph>, L<h2xs|h2xs>, L<enc2xs>,
diff --git a/gnu/usr.bin/perl/pod/perlvar.pod b/gnu/usr.bin/perl/pod/perlvar.pod
index 6c54f76bc34..0d2da097735 100644
--- a/gnu/usr.bin/perl/pod/perlvar.pod
+++ b/gnu/usr.bin/perl/pod/perlvar.pod
@@ -437,12 +437,11 @@ is the subversion / 1e6. For example, Perl v5.10.1 would be "5.010001".
This variable can be used to determine whether the Perl interpreter
executing a script is in the right range of versions:
- warn "No PerlIO!\n" if $] lt '5.008';
+ warn "No PerlIO!\n" if "$]" < 5.008;
-When comparing C<$]>, string comparison operators are B<highly
-recommended>. The inherent limitations of binary floating point
-representation can sometimes lead to incorrect comparisons for some
-numbers on some architectures.
+When comparing C<$]>, numeric comparison operators should be used, but the
+variable should be stringified first to avoid issues where its original
+numeric value is inaccurate.
See also the documentation of C<use VERSION> and C<require VERSION>
for a convenient way to fail if the running Perl interpreter is too old.
@@ -453,9 +452,10 @@ object, which allows more flexible string comparisons.
The main advantage of C<$]> over C<$^V> is that it works the same on any
version of Perl. The disadvantages are that it can't easily be compared
to versions in other formats (e.g. literal v-strings, "v1.2.3" or
-version objects) and numeric comparisons can occasionally fail; it's good
-for string literal version checks and bad for comparing to a variable
-that hasn't been sanity-checked.
+version objects) and numeric comparisons are subject to the binary
+floating point representation; it's good for numeric literal version
+checks and bad for comparing to a variable that hasn't been
+sanity-checked.
The C<$OLD_PERL_VERSION> form was added in Perl v5.20.0 for historical
reasons but its use is discouraged. (If your reason to use C<$]> is to
@@ -483,9 +483,9 @@ time of the C<exec()>.
X<@F>
The array C<@F> contains the fields of each line read in when autosplit
-mode is turned on. See L<perlrun> for the B<-a> switch. This array
-is package-specific, and must be declared or given a full package name
-if not in package main when running under C<strict 'vars'>.
+mode is turned on. See L<perlrun|perlrun/-a> for the B<-a> switch. This
+array is package-specific, and must be declared or given a full package
+name if not in package main when running under C<strict 'vars'>.
=item @INC
X<@INC>
@@ -577,7 +577,7 @@ built, as determined during the configuration process. For examples
see L<perlport/PLATFORMS>.
The value is identical to C<$Config{'osname'}>. See also L<Config>
-and the B<-V> command-line switch documented in L<perlrun>.
+and the B<-V> command-line switch documented in L<perlrun|perlrun/-V>.
In Windows platforms, C<$^O> is not very helpful: since it is always
C<MSWin32>, it doesn't tell the difference between
@@ -607,7 +607,8 @@ The hash C<%SIG> contains signal handlers for signals. For example:
Using a value of C<'IGNORE'> usually has the effect of ignoring the
signal, except for the C<CHLD> signal. See L<perlipc> for more about
-this special case.
+this special case. Using an empty string or C<undef> as the value has
+the same effect as C<'DEFAULT'>.
Here are some other examples:
@@ -622,6 +623,11 @@ Here are some other examples:
Be sure not to use a bareword as the name of a signal handler,
lest you inadvertently call it.
+Using a string that doesn't correspond to any existing function or a
+glob that doesn't contain a code slot is equivalent to C<'IGNORE'>,
+but a warning is emitted when the handler is being called (the warning
+is not emitted for the internal hooks described below).
+
If your system has the C<sigaction()> function then signal handlers
are installed using it. This means you get reliable signal handling.
@@ -640,8 +646,9 @@ errors, like this:
local $SIG{__WARN__} = sub { die $_[0] };
eval $proggie;
-As the C<'IGNORE'> hook is not supported by C<__WARN__>, you can
-disable warnings using the empty subroutine:
+As the C<'IGNORE'> hook is not supported by C<__WARN__>, its effect is
+the same as using C<'DEFAULT'>. You can disable warnings using the
+empty subroutine:
local $SIG{__WARN__} = sub {};
@@ -661,6 +668,9 @@ at a distance like rewriting a pending exception in C<$@>. Plans to
rectify this have been scrapped, as users found that rewriting a
pending exception is actually a useful feature, and not a bug.
+The C<$SIG{__DIE__}> doesn't support C<'IGNORE'>; it has the same
+effect as C<'DEFAULT'>.
+
C<__DIE__>/C<__WARN__> handlers are very special in one respect: they
may be called to report (probable) errors found by the parser. In such
a case the parser may be in inconsistent state, so any attempt to
@@ -701,6 +711,14 @@ and B<-C> filetests are based on this value.
=item $^V
X<$^V> X<$PERL_VERSION>
+=for comment
+These are documented in the generated file lib/Config.pod. This looks
+like as good a place as any to give notice that they are documented.
+
+=for apidoc hAmn|int|PERL_VERSION
+=for apidoc hAmn|int|PERL_REVISION
+=for apidoc hAmn|int|PERL_SUBVERSION
+
The revision, version, and subversion of the Perl interpreter,
represented as a L<version> object.
@@ -744,9 +762,8 @@ is considerably faster, especially for files on network drives.
This variable could be set in the F<sitecustomize.pl> file to
configure the local Perl installation to use "sloppy" C<stat()> by
-default. See the documentation for B<-f> in
-L<perlrun|perlrun/"Command Switches"> for more information about site
-customization.
+default. See the documentation for B<-f> in L<perlrun|perlrun/-f>
+for more information about site customization.
This variable was added in Perl v5.10.0.
@@ -1418,7 +1435,7 @@ X<ARGVOUT>
The special filehandle that points to the currently open output file
when doing edit-in-place processing with B<-i>. Useful when you have
to do a lot of inserting and don't want to keep modifying C<$_>. See
-L<perlrun> for the B<-i> switch.
+L<perlrun|perlrun/-i[extension]> for the B<-i> switch.
=item IO::Handle->output_field_separator( EXPR )
@@ -2226,10 +2243,30 @@ This variable was added in Perl v5.6.0.
=item ${^OPEN}
X<${^OPEN}>
-An internal variable used by PerlIO. A string in two parts, separated
+An internal variable used by L<PerlIO>. A string in two parts, separated
by a C<\0> byte, the first part describes the input layers, the second
part describes the output layers.
+This is the mechanism that applies the lexical effects of the L<open>
+pragma, and the main program scope effects of the C<io> or C<D> options
+for the L<-C command-line switch|perlrun/-C [I<numberE<sol>list>]> and
+L<PERL_UNICODE environment variable|perlrun/PERL_UNICODE>.
+
+The functions C<accept()>, C<open()>, C<pipe()>, C<readpipe()> (as well
+as the related C<qx> and C<`STRING`> operators), C<socket()>,
+C<socketpair()>, and C<sysopen()> are affected by the lexical value of
+this variable. The implicit L</ARGV> handle opened by C<readline()> (or
+the related C<< <> >> and C<<< <<>> >>> operators) on passed filenames is
+also affected (but not if it opens C<STDIN>). If this variable is not
+set, these functions will set the default layers as described in
+L<PerlIO/Defaults and how to override them>.
+
+C<open()> ignores this variable (and the default layers) when called with
+3 arguments and explicit layers are specified. Indirect calls to these
+functions via modules like L<IO::Handle> are not affected as they occur
+in a different lexical scope. Directory handles such as opened by
+C<opendir()> are not currently affected.
+
This variable was added in Perl v5.8.0.
=item $PERLDB
@@ -2332,9 +2369,9 @@ This variable was added in Perl v5.28.0.
=item ${^UNICODE}
X<${^UNICODE}>
-Reflects certain Unicode settings of Perl. See L<perlrun>
-documentation for the C<-C> switch for more information about
-the possible values.
+Reflects certain Unicode settings of Perl. See
+L<perlrun|perlrun/-C [numberE<sol>list]> documentation for the C<-C>
+switch for more information about the possible values.
This variable is set during Perl startup and is thereafter read-only.
@@ -2357,7 +2394,8 @@ X<${^UTF8LOCALE}>
This variable indicates whether a UTF-8 locale was detected by perl at
startup. This information is used by perl when it's in
adjust-utf8ness-to-locale mode (as when run with the C<-CL> command-line
-switch); see L<perlrun> for more info on this.
+switch); see L<perlrun|perlrun/-C [numberE<sol>list]> for more info on
+this.
This variable was added in Perl v5.8.8.
diff --git a/gnu/usr.bin/perl/pp.c b/gnu/usr.bin/perl/pp.c
index 6d419cc7626..df80830b79e 100644
--- a/gnu/usr.bin/perl/pp.c
+++ b/gnu/usr.bin/perl/pp.c
@@ -1268,16 +1268,10 @@ PP(pp_multiply)
NV nr = SvNVX(svr);
NV result;
- if (
-#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
- !Perl_isnan(nl) && nl == (NV)(il = (IV)nl)
- && !Perl_isnan(nr) && nr == (NV)(ir = (IV)nr)
-#else
- nl == (NV)(il = (IV)nl) && nr == (NV)(ir = (IV)nr)
-#endif
- )
+ if (lossless_NV_to_IV(nl, &il) && lossless_NV_to_IV(nr, &ir)) {
/* nothing was lost by converting to IVs */
goto do_iv;
+ }
SP--;
result = nl * nr;
# if defined(__sgi) && defined(USE_LONG_DOUBLE) && LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE && NVSIZE == 16
@@ -1849,16 +1843,10 @@ PP(pp_subtract)
NV nl = SvNVX(svl);
NV nr = SvNVX(svr);
- if (
-#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
- !Perl_isnan(nl) && nl == (NV)(il = (IV)nl)
- && !Perl_isnan(nr) && nr == (NV)(ir = (IV)nr)
-#else
- nl == (NV)(il = (IV)nl) && nr == (NV)(ir = (IV)nr)
-#endif
- )
+ if (lossless_NV_to_IV(nl, &il) && lossless_NV_to_IV(nr, &ir)) {
/* nothing was lost by converting to IVs */
goto do_iv;
+ }
SP--;
TARGn(nl - nr, 0); /* args not GMG, so can't be tainted */
SETs(TARG);
@@ -1991,7 +1979,7 @@ static UV S_uv_shift(UV uv, int shift, bool left)
shift = -shift;
left = !left;
}
- if (shift >= IV_BITS) {
+ if (UNLIKELY(shift >= IV_BITS)) {
return 0;
}
return left ? uv << shift : uv >> shift;
@@ -1999,14 +1987,34 @@ static UV S_uv_shift(UV uv, int shift, bool left)
static IV S_iv_shift(IV iv, int shift, bool left)
{
- if (shift < 0) {
- shift = -shift;
- left = !left;
- }
- if (shift >= IV_BITS) {
- return iv < 0 && !left ? -1 : 0;
- }
- return left ? iv << shift : iv >> shift;
+ if (shift < 0) {
+ shift = -shift;
+ left = !left;
+ }
+
+ if (UNLIKELY(shift >= IV_BITS)) {
+ return iv < 0 && !left ? -1 : 0;
+ }
+
+ /* For left shifts, perl 5 has chosen to treat the value as unsigned for
+ * the * purposes of shifting, then cast back to signed. This is very
+ * different from Raku:
+ *
+ * $ raku -e 'say -2 +< 5'
+ * -64
+ *
+ * $ ./perl -le 'print -2 << 5'
+ * 18446744073709551552
+ * */
+ if (left) {
+ if (iv == IV_MIN) { /* Casting this to a UV is undefined behavior */
+ return 0;
+ }
+ return (IV) (((UV) iv) << shift);
+ }
+
+ /* Here is right shift */
+ return iv >> shift;
}
#define UV_LEFT_SHIFT(uv, shift) S_uv_shift(uv, shift, TRUE)
@@ -2535,23 +2543,22 @@ S_scomplement(pTHX_ SV *targ, SV *sv)
if (len && ! utf8_to_bytes(tmps, &len)) {
Perl_croak(aTHX_ FATAL_ABOVE_FF_MSG, PL_op_desc[PL_op->op_type]);
}
- SvCUR(TARG) = len;
+ SvCUR_set(TARG, len);
SvUTF8_off(TARG);
}
anum = len;
-#ifdef LIBERAL
{
long *tmpl;
- for ( ; anum && (unsigned long)tmps % sizeof(long); anum--, tmps++)
+ for ( ; anum && PTR2nat(tmps) % sizeof(long); anum--, tmps++)
*tmps = ~*tmps;
tmpl = (long*)tmps;
for ( ; anum >= (I32)sizeof(long); anum -= (I32)sizeof(long), tmpl++)
*tmpl = ~*tmpl;
tmps = (U8*)tmpl;
}
-#endif
+
for ( ; anum > 0; anum--, tmps++)
*tmps = ~*tmps;
}
@@ -2647,7 +2654,6 @@ PP(pp_i_divide)
PP(pp_i_modulo)
{
- /* This is the vanilla old i_modulo. */
dSP; dATARGET;
tryAMAGICbin_MG(modulo_amg, AMGf_assign);
{
@@ -2663,30 +2669,6 @@ PP(pp_i_modulo)
}
}
-#if defined(__GLIBC__) && IVSIZE == 8 \
- && ( __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 8))
-
-PP(pp_i_modulo_glibc_bugfix)
-{
- /* This is the i_modulo with the workaround for the _moddi3 bug
- * in (at least) glibc 2.2.5 (the PERL_ABS() the workaround).
- * See below for pp_i_modulo. */
- dSP; dATARGET;
- tryAMAGICbin_MG(modulo_amg, AMGf_assign);
- {
- dPOPTOPiirl_nomg;
- if (!right)
- DIE(aTHX_ "Illegal modulus zero");
- /* avoid FPE_INTOVF on some platforms when left is IV_MIN */
- if (right == -1)
- SETi( 0 );
- else
- SETi( left % PERL_ABS(right) );
- RETURN;
- }
-}
-#endif
-
PP(pp_i_add)
{
dSP; dATARGET;
@@ -2944,13 +2926,12 @@ PP(pp_srand)
"Integer overflow in srand");
anum = UV_MAX;
}
- (void)srand48_deterministic((Rand_seed_t)anum);
}
else {
anum = seed();
- (void)seedDrand01((Rand_seed_t)anum);
}
+ (void)seedDrand01((Rand_seed_t)anum);
PL_srand_called = TRUE;
if (anum)
XPUSHu(anum);
@@ -3078,11 +3059,16 @@ PP(pp_oct)
if (*tmps == '0')
tmps++, len--;
if (isALPHA_FOLD_EQ(*tmps, 'x')) {
+ tmps++, len--;
+ flags |= PERL_SCAN_DISALLOW_PREFIX;
hex:
result_uv = grok_hex (tmps, &len, &flags, &result_nv);
}
- else if (isALPHA_FOLD_EQ(*tmps, 'b'))
+ else if (isALPHA_FOLD_EQ(*tmps, 'b')) {
+ tmps++, len--;
+ flags |= PERL_SCAN_DISALLOW_PREFIX;
result_uv = grok_bin (tmps, &len, &flags, &result_nv);
+ }
else
result_uv = grok_oct (tmps, &len, &flags, &result_nv);
@@ -3534,11 +3520,16 @@ PP(pp_index)
push_result:
/* OPpTRUEBOOL indicates an '== -1' has been optimised away */
if (PL_op->op_private & OPpTRUEBOOL) {
- PUSHs( ((retval != -1) ^ cBOOL(PL_op->op_private & OPpINDEX_BOOLNEG))
- ? &PL_sv_yes : &PL_sv_no);
- if (PL_op->op_private & OPpTARGET_MY)
+ SV *result = ((retval != -1) ^ cBOOL(PL_op->op_private & OPpINDEX_BOOLNEG))
+ ? &PL_sv_yes : &PL_sv_no;
+ if (PL_op->op_private & OPpTARGET_MY) {
/* $lex = (index() == -1) */
- sv_setsv(TARG, TOPs);
+ sv_setsv_mg(TARG, result);
+ PUSHs(TARG);
+ }
+ else {
+ PUSHs(result);
+ }
}
else
PUSHi(retval);
@@ -3646,33 +3637,28 @@ PP(pp_crypt)
sv_utf8_downgrade(tsv, FALSE);
tmps = SvPV_const(tsv, len);
}
-# ifdef USE_ITHREADS
-# ifdef HAS_CRYPT_R
+# ifdef USE_ITHREADS
+# ifdef HAS_CRYPT_R
if (!PL_reentrant_buffer->_crypt_struct_buffer) {
/* This should be threadsafe because in ithreads there is only
* one thread per interpreter. If this would not be true,
* we would need a mutex to protect this malloc. */
PL_reentrant_buffer->_crypt_struct_buffer =
(struct crypt_data *)safemalloc(sizeof(struct crypt_data));
-#if defined(__GLIBC__) || defined(__EMX__)
+# if defined(__GLIBC__) || defined(__EMX__)
if (PL_reentrant_buffer->_crypt_struct_buffer) {
PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0;
-#if (defined(__GLIBC__) && __GLIBC__ == 2) && \
- (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4)
- /* work around glibc-2.2.5 bug, has been fixed at some
- * time in glibc-2.3.X */
- PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0;
-#endif
}
-#endif
+# endif
}
-# endif /* HAS_CRYPT_R */
-# endif /* USE_ITHREADS */
-# ifdef FCRYPT
+# endif /* HAS_CRYPT_R */
+# endif /* USE_ITHREADS */
+
+# ifdef FCRYPT
sv_setpv(TARG, fcrypt(tmps, SvPV_nolen_const(right)));
-# else
+# else
sv_setpv(TARG, PerlProc_crypt(tmps, SvPV_nolen_const(right)));
-# endif
+# endif
SvUTF8_off(TARG);
SETTARG;
RETURN;
@@ -3741,6 +3727,7 @@ PP(pp_ucfirst)
else if (DO_UTF8(source)) { /* Is the source utf8? */
doing_utf8 = TRUE;
ulen = UTF8SKIP(s);
+
if (op_type == OP_UCFIRST) {
#ifdef USE_LOCALE_CTYPE
_toTITLE_utf8_flags(s, s +slen, tmpbuf, &tculen, IN_LC_RUNTIME(LC_CTYPE));
@@ -5916,6 +5903,7 @@ PP(pp_reverse)
sv_setsv(TARG, DEFSV);
XPUSHs(TARG);
}
+ SvSETMAGIC(TARG); /* remove any utf8 length magic */
up = SvPV_force(TARG, len);
if (len > 1) {
@@ -6450,11 +6438,11 @@ PP(unimplemented_op)
Secondly, as the three ops we "panic" on are padmy, mapstart and custom,
if we get here for a custom op then that means that the custom op didn't
have an implementation. Given that OP_NAME() looks up the custom op
- by its pp_addr, likely it will return NULL, unless someone (unhelpfully)
- registers &PL_unimplemented_op as the address of their custom op.
+ by its op_ppaddr, likely it will return NULL, unless someone (unhelpfully)
+ registers &Perl_unimplemented_op as the address of their custom op.
NULL doesn't generate a useful error message. "custom" does. */
const char *const name = op_type >= OP_max
- ? "[out of range]" : PL_op_name[PL_op->op_type];
+ ? "[out of range]" : PL_op_name[op_type];
if(OP_IS_SOCKET(op_type))
DIE(aTHX_ PL_no_sock_func, name);
DIE(aTHX_ "panic: unimplemented op %s (#%d) called", name, op_type);
@@ -7102,7 +7090,7 @@ S_find_runcv_name(void)
return sv;
}
-/* Check a a subs arguments - i.e. that it has the correct number of args
+/* Check a sub's arguments - i.e. that it has the correct number of args
* (and anything else we might think of in future). Typically used with
* signatured subs.
*/
@@ -7110,16 +7098,16 @@ S_find_runcv_name(void)
PP(pp_argcheck)
{
OP * const o = PL_op;
- UNOP_AUX_item *aux = cUNOP_AUXo->op_aux;
- IV params = aux[0].iv;
- IV opt_params = aux[1].iv;
- char slurpy = (char)(aux[2].iv);
+ struct op_argcheck_aux *aux = (struct op_argcheck_aux *)cUNOP_AUXo->op_aux;
+ UV params = aux->params;
+ UV opt_params = aux->opt_params;
+ char slurpy = aux->slurpy;
AV *defav = GvAV(PL_defgv); /* @_ */
- IV argc;
+ UV argc;
bool too_few;
assert(!SvMAGICAL(defav));
- argc = (AvFILLp(defav) + 1);
+ argc = (UV)(AvFILLp(defav) + 1);
too_few = (argc < (params - opt_params));
if (UNLIKELY(too_few || (!slurpy && argc > params)))
@@ -7136,6 +7124,42 @@ PP(pp_argcheck)
return NORMAL;
}
+PP(pp_isa)
+{
+ dSP;
+ SV *left, *right;
+
+ right = POPs;
+ left = TOPs;
+
+ SETs(boolSV(sv_isa_sv(left, right)));
+ RETURN;
+}
+
+PP(pp_cmpchain_and)
+{
+ dSP;
+ SV *result = POPs;
+ PUTBACK;
+ if (SvTRUE_NN(result)) {
+ return cLOGOP->op_other;
+ } else {
+ TOPs = result;
+ return NORMAL;
+ }
+}
+
+PP(pp_cmpchain_dup)
+{
+ dSP;
+ SV *right = TOPs;
+ SV *left = TOPm1s;
+ TOPm1s = right;
+ TOPs = left;
+ XPUSHs(right);
+ RETURN;
+}
+
/*
* ex: set ts=8 sts=4 sw=4 et:
*/
diff --git a/gnu/usr.bin/perl/pp.h b/gnu/usr.bin/perl/pp.h
index 98540be682d..1ab9a47f115 100644
--- a/gnu/usr.bin/perl/pp.h
+++ b/gnu/usr.bin/perl/pp.h
@@ -13,18 +13,18 @@
/*
=head1 Stack Manipulation Macros
-=for apidoc AmU||SP
+=for apidoc AmnU||SP
Stack pointer. This is usually handled by C<xsubpp>. See C<L</dSP>> and
C<SPAGAIN>.
-=for apidoc AmU||MARK
+=for apidoc AmnU||MARK
Stack marker variable for the XSUB. See C<L</dMARK>>.
=for apidoc Am|void|PUSHMARK|SP
Opening bracket for arguments on a callback. See C<L</PUTBACK>> and
L<perlcall>.
-=for apidoc Ams||dSP
+=for apidoc Amns||dSP
Declares a local copy of perl's stack pointer for the XSUB, available via
the C<SP> macro. See C<L</SP>>.
@@ -35,17 +35,17 @@ a local copy of perl's stack pointer, available via the C<SP> macro.
See C<L<perlapi/SP>>. (Available for backward source code compatibility with
the old (Perl 5.005) thread model.)
-=for apidoc Ams||dMARK
+=for apidoc Amns||dMARK
Declare a stack marker variable, C<mark>, for the XSUB. See C<L</MARK>> and
C<L</dORIGMARK>>.
-=for apidoc Ams||dORIGMARK
+=for apidoc Amns||dORIGMARK
Saves the original stack mark for the XSUB. See C<L</ORIGMARK>>.
-=for apidoc AmU||ORIGMARK
+=for apidoc AmnU||ORIGMARK
The original stack mark for the XSUB. See C<L</dORIGMARK>>.
-=for apidoc Ams||SPAGAIN
+=for apidoc Amns||SPAGAIN
Refetch the stack pointer. Used after a callback. See L<perlcall>.
=cut */
@@ -67,8 +67,8 @@ Refetch the stack pointer. Used after a callback. See L<perlcall>.
PL_markstack_ptr, (IV)*mark_stack_entry))); \
} STMT_END
-#define TOPMARK S_TOPMARK(aTHX)
-#define POPMARK S_POPMARK(aTHX)
+#define TOPMARK Perl_TOPMARK(aTHX)
+#define POPMARK Perl_POPMARK(aTHX)
#define INCMARK \
STMT_START { \
@@ -102,7 +102,7 @@ Refetch the stack pointer. Used after a callback. See L<perlcall>.
#define DIE return Perl_die
/*
-=for apidoc Ams||PUTBACK
+=for apidoc Amns||PUTBACK
Closing bracket for XSUB arguments. This is usually handled by C<xsubpp>.
See C<L</PUSHMARK>> and L<perlcall> for other uses.
@@ -243,7 +243,7 @@ Push an SV onto the stack and mortalizes the SV. The stack must have room
for this element. Does not use C<TARG>. See also C<L</PUSHs>> and
C<L</mXPUSHs>>.
-=for apidoc Am|void|PUSHmortal
+=for apidoc Amn|void|PUSHmortal
Push a new mortal SV onto the stack. The stack must have room for this
element. Does not use C<TARG>. See also C<L</PUSHs>>, C<L</XPUSHmortal>> and
C<L</XPUSHs>>.
@@ -270,7 +270,7 @@ C<L</XPUSHu>>.
Push an SV onto the stack, extending the stack if necessary and mortalizes
the SV. Does not use C<TARG>. See also C<L</XPUSHs>> and C<L</mPUSHs>>.
-=for apidoc Am|void|XPUSHmortal
+=for apidoc Amn|void|XPUSHmortal
Push a new mortal SV onto the stack, extending the stack if necessary.
Does not use C<TARG>. See also C<L</XPUSHs>>, C<L</PUSHmortal>> and
C<L</PUSHs>>.
@@ -356,7 +356,7 @@ Does not use C<TARG>. See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
/* EXTEND_SKIP(): used for where you would normally call EXTEND(), but
* you know for sure that a previous op will have already extended the
- * stack sufficiently. For example pp_enteriter ensures that that there
+ * stack sufficiently. For example pp_enteriter ensures that there
* is always at least 1 free slot, so pp_iter can return &PL_sv_yes/no
* without checking each time. Calling EXTEND_SKIP() defeats the HWM
* debugging mechanism which would otherwise whine
@@ -638,7 +638,7 @@ Does not use C<TARG>. See also C<L</XPUSHu>>, C<L</mPUSHu>> and C<L</PUSHu>>.
#define opASSIGN (PL_op->op_flags & OPf_STACKED)
/*
-=for apidoc mU||LVRET
+=for apidoc mnU||LVRET
True if this op will be the return value of an lvalue subroutine
=cut */
diff --git a/gnu/usr.bin/perl/pp_ctl.c b/gnu/usr.bin/perl/pp_ctl.c
index 2507e28c9a5..3797ec434e1 100644
--- a/gnu/usr.bin/perl/pp_ctl.c
+++ b/gnu/usr.bin/perl/pp_ctl.c
@@ -33,10 +33,16 @@
#include "EXTERN.h"
#define PERL_IN_PP_CTL_C
#include "perl.h"
+#include "feature.h"
#define RUN_PP_CATCHABLY(thispp) \
STMT_START { if (CATCH_GET) return docatch(thispp); } STMT_END
+#define dopopto_cursub() \
+ (PL_curstackinfo->si_cxsubix >= 0 \
+ ? PL_curstackinfo->si_cxsubix \
+ : dopoptosub_at(cxstack, cxstack_ix))
+
#define dopoptosub(plop) dopoptosub_at(cxstack, (plop))
PP(pp_wantarray)
@@ -50,7 +56,7 @@ PP(pp_wantarray)
if (!(cx = caller_cx(1,NULL))) RETPUSHUNDEF;
}
else {
- cxix = dopoptosub(cxstack_ix);
+ cxix = dopopto_cursub();
if (cxix < 0)
RETPUSHUNDEF;
cx = &cxstack[cxix];
@@ -256,7 +262,7 @@ PP(pp_substcont)
(void)SvPOK_only_UTF8(targ);
}
- /* update the taint state of various various variables in
+ /* update the taint state of various variables in
* preparation for final exit.
* See "how taint works" above pp_subst() */
if (TAINTING_get) {
@@ -343,7 +349,7 @@ PP(pp_substcont)
}
if (old != rx)
(void)ReREFCNT_inc(rx);
- /* update the taint state of various various variables in preparation
+ /* update the taint state of various variables in preparation
* for calling the code block.
* See "how taint works" above pp_subst() */
if (TAINTING_get) {
@@ -875,15 +881,12 @@ PP(pp_formline)
arg &= ~(FORM_NUM_POINT|FORM_NUM_BLANK);
#ifdef USE_QUADMATH
{
- const char* qfmt = quadmath_format_single(fmt);
int len;
- if (!qfmt)
+ if (!quadmath_format_valid(fmt))
Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", fmt);
- len = quadmath_snprintf(t, max, qfmt, (int) fieldsize, (int) arg, value);
+ len = quadmath_snprintf(t, max, fmt, (int) fieldsize, (int) arg, value);
if (len == -1)
- Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
- if (qfmt != fmt)
- Safefree(fmt);
+ Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", fmt);
}
#else
/* we generate fmt ourselves so it is safe */
@@ -1196,14 +1199,18 @@ PP(pp_flip)
}
/* This code tries to decide if "$left .. $right" should use the
- magical string increment, or if the range is numeric (we make
- an exception for .."0" [#18165]). AMS 20021031. */
+ magical string increment, or if the range is numeric. Initially,
+ an exception was made for *any* string beginning with "0" (see
+ [#18165], AMS 20021031), but now that is only applied when the
+ string's length is also >1 - see the rules now documented in
+ perlop [#133695] */
#define RANGE_IS_NUMERIC(left,right) ( \
SvNIOKp(left) || (SvOK(left) && !SvPOKp(left)) || \
SvNIOKp(right) || (SvOK(right) && !SvPOKp(right)) || \
(((!SvOK(left) && SvOK(right)) || ((!SvOK(left) || \
- looks_like_number(left)) && SvPOKp(left) && *SvPVX_const(left) != '0')) \
+ looks_like_number(left)) && SvPOKp(left) \
+ && !(*SvPVX_const(left) == '0' && SvCUR(left)>1 ) )) \
&& (!SvOK(right) || looks_like_number(right))))
PP(pp_flop)
@@ -1380,10 +1387,12 @@ Perl_dowantarray(pTHX)
return (gimme == G_VOID) ? G_SCALAR : gimme;
}
+/* note that this function has mostly been superseded by Perl_gimme_V */
+
U8
Perl_block_gimme(pTHX)
{
- const I32 cxix = dopoptosub(cxstack_ix);
+ const I32 cxix = dopopto_cursub();
U8 gimme;
if (cxix < 0)
return G_VOID;
@@ -1398,7 +1407,7 @@ Perl_block_gimme(pTHX)
I32
Perl_is_lvalue_sub(pTHX)
{
- const I32 cxix = dopoptosub(cxstack_ix);
+ const I32 cxix = dopopto_cursub();
assert(cxix >= 0); /* We should only be called from inside subs */
if (CxLVAL(cxstack + cxix) && CvLVALUE(cxstack[cxix].blk_sub.cv))
@@ -1707,7 +1716,11 @@ Perl_die_unwind(pTHX_ SV *msv)
* when unlocalising a tied var). So we do a dance with
* mortalising and SAVEFREEing.
*/
- sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
+ if (PL_phase == PERL_PHASE_DESTRUCT) {
+ exceptsv = sv_mortalcopy(exceptsv);
+ } else {
+ exceptsv = sv_2mortal(SvREFCNT_inc_simple_NN(exceptsv));
+ }
/*
* Historically, perl used to set ERRSV ($@) early in the die
@@ -1738,9 +1751,13 @@ Perl_die_unwind(pTHX_ SV *msv)
* perls 5.13.{1..7} which had late setting of $@ without this
* early-setting hack.
*/
- if (!(in_eval & EVAL_KEEPERR))
+ if (!(in_eval & EVAL_KEEPERR)) {
+ /* remove any read-only/magic from the SV, so we don't
+ get infinite recursion when setting ERRSV */
+ SANE_ERRSV();
sv_setsv_flags(ERRSV, exceptsv,
(SV_GMAGIC|SV_DO_COW_SVSETSV|SV_NOSTEAL));
+ }
if (in_eval & EVAL_KEEPERR) {
Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "\t(in cleanup) %" SVf,
@@ -1802,8 +1819,10 @@ Perl_die_unwind(pTHX_ SV *msv)
*/
S_pop_eval_context_maybe_croak(aTHX_ cx, exceptsv, 2);
- if (!(in_eval & EVAL_KEEPERR))
+ if (!(in_eval & EVAL_KEEPERR)) {
+ SANE_ERRSV();
sv_setsv(ERRSV, exceptsv);
+ }
PL_restartjmpenv = restartjmpenv;
PL_restartop = restartop;
JMPENV_JUMP(3);
@@ -1850,7 +1869,7 @@ frame for the sub call itself.
const PERL_CONTEXT *
Perl_caller_cx(pTHX_ I32 count, const PERL_CONTEXT **dbcxp)
{
- I32 cxix = dopoptosub(cxstack_ix);
+ I32 cxix = dopopto_cursub();
const PERL_CONTEXT *cx;
const PERL_CONTEXT *ccstack = cxstack;
const PERL_SI *top_si = PL_curstackinfo;
@@ -2452,7 +2471,7 @@ PP(pp_return)
{
dSP; dMARK;
PERL_CONTEXT *cx;
- const I32 cxix = dopoptosub(cxstack_ix);
+ const I32 cxix = dopopto_cursub();
assert(cxstack_ix >= 0);
if (cxix < cxstack_ix) {
@@ -2823,7 +2842,7 @@ PP(pp_goto)
DIE(aTHX_ "Goto undefined subroutine");
}
- cxix = dopoptosub(cxstack_ix);
+ cxix = dopopto_cursub();
if (cxix < 0) {
DIE(aTHX_ "Can't goto subroutine outside a subroutine");
}
@@ -2945,6 +2964,9 @@ PP(pp_goto)
* this is a cx_popblock(), less all the stuff we already did
* for cx_topblock() earlier */
PL_curcop = cx->blk_oldcop;
+ /* this is cx_popsub, less all the stuff we already did */
+ PL_curstackinfo->si_cxsubix = cx->blk_sub.old_cxsubix;
+
CX_POP(cx);
/* Push a mark for the start of arglist */
@@ -3465,6 +3487,7 @@ S_doeval_compile(pTHX_ U8 gimme, CV* outside, U32 seq, HV *hh)
if (clear_hints) {
PL_hints = 0;
hv_clear(GvHV(PL_hintgv));
+ CLEARFEATUREBITS();
}
else {
PL_hints = saveop->op_private & OPpEVAL_COPHH
@@ -3482,6 +3505,7 @@ S_doeval_compile(pTHX_ U8 gimme, CV* outside, U32 seq, HV *hh)
/* SAVEHINTS created a new HV in PL_hintgv, which we need to GC */
SvREFCNT_dec(GvHV(PL_hintgv));
GvHV(PL_hintgv) = hh;
+ FETCHFEATUREBITSHH(hh);
}
}
SAVECOMPILEWARNINGS();
@@ -3841,7 +3865,7 @@ S_require_file(pTHX_ SV *sv)
if (op_is_require) {
/* can optimize to only perform one single lookup */
svp_cached = hv_fetch(GvHVn(PL_incgv), (char*) name, len, 0);
- if ( svp_cached && *svp_cached != &PL_sv_undef ) RETPUSHYES;
+ if ( svp_cached && (SvGETMAGIC(*svp_cached), SvOK(*svp_cached)) ) RETPUSHYES;
}
#endif
@@ -3886,7 +3910,10 @@ S_require_file(pTHX_ SV *sv)
/* reuse the previous hv_fetch result if possible */
SV * const * const svp = svp_cached ? svp_cached : hv_fetch(GvHVn(PL_incgv), unixname, unixlen, 0);
if ( svp ) {
- if (*svp != &PL_sv_undef)
+ /* we already did a get magic if this was cached */
+ if (!svp_cached)
+ SvGETMAGIC(*svp);
+ if (SvOK(*svp))
RETPUSHYES;
else
DIE(aTHX_ "Attempt to reload %s aborted.\n"
@@ -3953,7 +3980,7 @@ S_require_file(pTHX_ SV *sv)
}
/* ... but if we fail, still search @INC for code references;
- * these are applied even on on-searchable paths (except
+ * these are applied even on non-searchable paths (except
* if we got EACESS).
*
* For searchable paths, just search @INC normally
diff --git a/gnu/usr.bin/perl/pp_hot.c b/gnu/usr.bin/perl/pp_hot.c
index 7d5ffc02fde..95f6d644114 100644
--- a/gnu/usr.bin/perl/pp_hot.c
+++ b/gnu/usr.bin/perl/pp_hot.c
@@ -34,6 +34,7 @@
#include "EXTERN.h"
#define PERL_IN_PP_HOT_C
#include "perl.h"
+#include "regcomp.h"
/* Hot code. */
@@ -639,7 +640,7 @@ PP(pp_multiconcat)
* one set of segment lengths.
*
* * If the string has different plain and utf8 representations
- * (e.g. "\x80"), then then aux[PERL_MULTICONCAT_IX_PLAIN_PV/LEN]]
+ * (e.g. "\x80"), then aux[PERL_MULTICONCAT_IX_PLAIN_PV/LEN]]
* holds the plain rep, while aux[PERL_MULTICONCAT_IX_UTF8_PV/LEN]
* holds the utf8 rep, and there are 2 sets of segment lengths,
* with the utf8 set following after the plain set.
@@ -686,7 +687,7 @@ PP(pp_multiconcat)
* calculate how much extra growth is needed for all the chars
* which will expand to two utf8 bytes.
* Also, if the growth is non-zero, negate the length to indicate
- * that this this is a variant string. Conversely, un-negate the
+ * that this is a variant string. Conversely, un-negate the
* length on utf8 args (which was only needed to flag non-utf8
* args in this loop */
for (svpv_p = svpv_buf; svpv_p < svpv_end; svpv_p++) {
@@ -1435,16 +1436,10 @@ PP(pp_add)
NV nl = SvNVX(svl);
NV nr = SvNVX(svr);
- if (
-#if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan)
- !Perl_isnan(nl) && nl == (NV)(il = (IV)nl)
- && !Perl_isnan(nr) && nr == (NV)(ir = (IV)nr)
-#else
- nl == (NV)(il = (IV)nl) && nr == (NV)(ir = (IV)nr)
-#endif
- )
+ if (lossless_NV_to_IV(nl, &il) && lossless_NV_to_IV(nr, &ir)) {
/* nothing was lost by converting to IVs */
goto do_iv;
+ }
SP--;
TARGn(nl + nr, 0); /* args not GMG, so can't be tainted */
SETs(TARG);
@@ -2743,8 +2738,8 @@ PP(pp_aassign)
if (!SvIMMORTAL(lsv)) {
sv_set_undef(lsv);
SvSETMAGIC(lsv);
- *relem++ = lsv;
}
+ *relem++ = lsv;
break;
} /* switch */
} /* while */
@@ -2895,6 +2890,47 @@ PP(pp_qr)
RETURN;
}
+STATIC bool
+S_are_we_in_Debug_EXECUTE_r(pTHX)
+{
+ /* Given a 'use re' is in effect, does it ask for outputting execution
+ * debug info?
+ *
+ * This is separated from the sole place it's called, an inline function,
+ * because it is the large-ish slow portion of the function */
+
+ DECLARE_AND_GET_RE_DEBUG_FLAGS_NON_REGEX;
+
+ return cBOOL(RE_DEBUG_FLAG(RE_DEBUG_EXECUTE_MASK));
+}
+
+PERL_STATIC_INLINE bool
+S_should_we_output_Debug_r(pTHX_ regexp *prog)
+{
+ PERL_ARGS_ASSERT_SHOULD_WE_OUTPUT_DEBUG_R;
+
+ /* pp_match can output regex debugging info. This function returns a
+ * boolean as to whether or not it should.
+ *
+ * Under -Dr, it should. Any reasonable compiler will optimize this bit of
+ * code away on non-debugging builds. */
+ if (UNLIKELY(DEBUG_r_TEST)) {
+ return TRUE;
+ }
+
+ /* If the regex engine is using the non-debugging execution routine, then
+ * no debugging should be output. Same if the field is NULL that pluggable
+ * engines are not supposed to fill. */
+ if ( LIKELY(prog->engine->exec == &Perl_regexec_flags)
+ || UNLIKELY(prog->engine->op_comp == NULL))
+ {
+ return FALSE;
+ }
+
+ /* Otherwise have to check */
+ return S_are_we_in_Debug_EXECUTE_r(aTHX);
+}
+
PP(pp_match)
{
dSP; dTARG;
@@ -2950,7 +2986,9 @@ PP(pp_match)
pm->op_pmflags & PMf_USED
#endif
) {
- DEBUG_r(PerlIO_printf(Perl_debug_log, "?? already matched once"));
+ if (UNLIKELY(should_we_output_Debug_r(prog))) {
+ PerlIO_printf(Perl_debug_log, "?? already matched once");
+ }
goto nope;
}
@@ -2972,9 +3010,11 @@ PP(pp_match)
}
if (RXp_MINLEN(prog) >= 0 && (STRLEN)RXp_MINLEN(prog) > len) {
- DEBUG_r(PerlIO_printf(Perl_debug_log, "String shorter than min possible regex match (%"
- UVuf " < %" IVdf ")\n",
- (UV)len, (IV)RXp_MINLEN(prog)));
+ if (UNLIKELY(should_we_output_Debug_r(prog))) {
+ PerlIO_printf(Perl_debug_log,
+ "String shorter than min possible regex match (%zd < %zd)\n",
+ len, RXp_MINLEN(prog));
+ }
goto nope;
}
@@ -3275,9 +3315,9 @@ Perl_do_readline(pTHX)
}
for (t1 = SvPVX_const(sv); *t1; t1++)
#ifdef __VMS
- if (strchr("*%?", *t1))
+ if (memCHRs("*%?", *t1))
#else
- if (strchr("$&*(){}[]'\";\\|?<>~`", *t1))
+ if (memCHRs("$&*(){}[]'\";\\|?<>~`", *t1))
#endif
break;
if (*t1 && PerlLIO_lstat(SvPVX_const(sv), &statbuf) < 0) {
diff --git a/gnu/usr.bin/perl/pp_pack.c b/gnu/usr.bin/perl/pp_pack.c
index 33cb086db2f..8ac5316e85f 100644
--- a/gnu/usr.bin/perl/pp_pack.c
+++ b/gnu/usr.bin/perl/pp_pack.c
@@ -212,8 +212,9 @@ S_mul128(pTHX_ SV *sv, U8 m)
/* Explosives and implosives. */
-#define ISUUCHAR(ch) (NATIVE_TO_LATIN1(ch) >= NATIVE_TO_LATIN1(' ') \
- && NATIVE_TO_LATIN1(ch) < NATIVE_TO_LATIN1('a'))
+#define ISUUCHAR(ch) inRANGE(NATIVE_TO_LATIN1(ch), \
+ NATIVE_TO_LATIN1(' '), \
+ NATIVE_TO_LATIN1('a') - 1)
/* type modifiers */
#define TYPE_IS_SHRIEKING 0x100
@@ -1779,9 +1780,9 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
} /* End of switch */
if (checksum) {
- if (strchr("fFdD", TYPE_NO_MODIFIERS(datumtype)) ||
+ if (memCHRs("fFdD", TYPE_NO_MODIFIERS(datumtype)) ||
(checksum > bits_in_uv &&
- strchr("cCsSiIlLnNUWvVqQjJ", TYPE_NO_MODIFIERS(datumtype))) ) {
+ memCHRs("cCsSiIlLnNUWvVqQjJ", TYPE_NO_MODIFIERS(datumtype))) ) {
NV trouble, anv;
anv = (NV) (1 << (checksum & 15));
@@ -2135,7 +2136,7 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist )
switch (howlen) {
case e_star:
- len = strchr("@Xxu", TYPE_NO_MODIFIERS(datumtype)) ?
+ len = memCHRs("@Xxu", TYPE_NO_MODIFIERS(datumtype)) ?
0 : items;
break;
default:
@@ -2160,7 +2161,7 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist )
if (symptr->flags & FLAG_SLASH) {
IV count;
if (!found) Perl_croak(aTHX_ "Code missing after '/' in pack");
- if (strchr("aAZ", lookahead.code)) {
+ if (memCHRs("aAZ", lookahead.code)) {
if (lookahead.howlen == e_number) count = lookahead.length;
else {
if (items > 0) {
diff --git a/gnu/usr.bin/perl/pp_proto.h b/gnu/usr.bin/perl/pp_proto.h
index 407cbd14a3a..6ddb1f6634d 100644
--- a/gnu/usr.bin/perl/pp_proto.h
+++ b/gnu/usr.bin/perl/pp_proto.h
@@ -42,6 +42,8 @@ PERL_CALLCONV OP *Perl_pp_chroot(pTHX);
PERL_CALLCONV OP *Perl_pp_clonecv(pTHX);
PERL_CALLCONV OP *Perl_pp_close(pTHX);
PERL_CALLCONV OP *Perl_pp_closedir(pTHX);
+PERL_CALLCONV OP *Perl_pp_cmpchain_and(pTHX);
+PERL_CALLCONV OP *Perl_pp_cmpchain_dup(pTHX);
PERL_CALLCONV OP *Perl_pp_complement(pTHX);
PERL_CALLCONV OP *Perl_pp_concat(pTHX);
PERL_CALLCONV OP *Perl_pp_cond_expr(pTHX);
@@ -126,6 +128,7 @@ PERL_CALLCONV OP *Perl_pp_index(pTHX);
PERL_CALLCONV OP *Perl_pp_int(pTHX);
PERL_CALLCONV OP *Perl_pp_introcv(pTHX);
PERL_CALLCONV OP *Perl_pp_ioctl(pTHX);
+PERL_CALLCONV OP *Perl_pp_isa(pTHX);
PERL_CALLCONV OP *Perl_pp_iter(pTHX);
PERL_CALLCONV OP *Perl_pp_join(pTHX);
PERL_CALLCONV OP *Perl_pp_kvaslice(pTHX);
@@ -297,9 +300,4 @@ PERL_CALLCONV OP *Perl_pp_warn(pTHX);
PERL_CALLCONV OP *Perl_pp_xor(pTHX);
PERL_CALLCONV OP *Perl_unimplemented_op(pTHX);
-/* alternative functions */
-#if defined(__GLIBC__) && IVSIZE == 8 && ( __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 8))
-PERL_CALLCONV OP *Perl_pp_i_modulo_glibc_bugfix(pTHX);
-#endif
-
/* ex: set ro: */
diff --git a/gnu/usr.bin/perl/pp_sort.c b/gnu/usr.bin/perl/pp_sort.c
index b4a9dd91e7c..a3a7352aace 100644
--- a/gnu/usr.bin/perl/pp_sort.c
+++ b/gnu/usr.bin/perl/pp_sort.c
@@ -30,22 +30,13 @@
#define PERL_IN_PP_SORT_C
#include "perl.h"
-#if defined(UNDER_CE)
-/* looks like 'small' is reserved word for WINCE (or somesuch)*/
-#define small xsmall
-#endif
-
-#define sv_cmp_static Perl_sv_cmp
-#define sv_cmp_locale_static Perl_sv_cmp_locale
-
#ifndef SMALLSORT
-#define SMALLSORT (200)
+#define SMALLSORT (200)
#endif
-/* Flags for qsortsv and mergesortsv */
-#define SORTf_DESC 1
-#define SORTf_STABLE 2
-#define SORTf_UNSTABLE 8
+/* Flags for sortsv_flags */
+#define SORTf_STABLE 1
+#define SORTf_UNSTABLE 2
/*
* The mergesort implementation is by Peter M. Mcilroy <pmcilroy@lucent.com>.
@@ -65,8 +56,8 @@
*/
-typedef char * aptr; /* pointer for arithmetic on sizes */
-typedef SV * gptr; /* pointers in our lists */
+typedef char * aptr; /* pointer for arithmetic on sizes */
+typedef SV * gptr; /* pointers in our lists */
/* Binary merge internal sort, with a few special mods
** for the special perl environment it now finds itself in.
@@ -79,31 +70,31 @@ typedef SV * gptr; /* pointers in our lists */
/* Pointer types for arithmetic and storage and convenience casts */
-#define APTR(P) ((aptr)(P))
-#define GPTP(P) ((gptr *)(P))
+#define APTR(P) ((aptr)(P))
+#define GPTP(P) ((gptr *)(P))
#define GPPP(P) ((gptr **)(P))
/* byte offset from pointer P to (larger) pointer Q */
-#define BYTEOFF(P, Q) (APTR(Q) - APTR(P))
+#define BYTEOFF(P, Q) (APTR(Q) - APTR(P))
#define PSIZE sizeof(gptr)
/* If PSIZE is power of 2, make PSHIFT that power, if that helps */
-#ifdef PSHIFT
-#define PNELEM(P, Q) (BYTEOFF(P,Q) >> (PSHIFT))
-#define PNBYTE(N) ((N) << (PSHIFT))
-#define PINDEX(P, N) (GPTP(APTR(P) + PNBYTE(N)))
+#ifdef PSHIFT
+#define PNELEM(P, Q) (BYTEOFF(P,Q) >> (PSHIFT))
+#define PNBYTE(N) ((N) << (PSHIFT))
+#define PINDEX(P, N) (GPTP(APTR(P) + PNBYTE(N)))
#else
/* Leave optimization to compiler */
-#define PNELEM(P, Q) (GPTP(Q) - GPTP(P))
-#define PNBYTE(N) ((N) * (PSIZE))
-#define PINDEX(P, N) (GPTP(P) + (N))
+#define PNELEM(P, Q) (GPTP(Q) - GPTP(P))
+#define PNBYTE(N) ((N) * (PSIZE))
+#define PINDEX(P, N) (GPTP(P) + (N))
#endif
/* Pointer into other corresponding to pointer into this */
-#define POTHER(P, THIS, OTHER) GPTP(APTR(OTHER) + BYTEOFF(THIS,P))
+#define POTHER(P, THIS, OTHER) GPTP(APTR(OTHER) + BYTEOFF(THIS,P))
#define FROMTOUPTO(src, dst, lim) do *dst++ = *src++; while(src<lim)
@@ -114,7 +105,7 @@ typedef SV * gptr; /* pointers in our lists */
** NEXT is used as an lvalue, too.
*/
-#define NEXT(P) (*GPPP(P))
+#define NEXT(P) (*GPPP(P))
/* PTHRESH is the minimum number of pairs with the same sense to justify
@@ -122,7 +113,7 @@ typedef SV * gptr; /* pointers in our lists */
** not just elements, so PTHRESH == 8 means a run of 16.
*/
-#define PTHRESH (8)
+#define PTHRESH (8)
/* RTHRESH is the number of elements in a run that must compare low
** to the low element from the opposing run before we justify
@@ -171,12 +162,12 @@ typedef SV * gptr; /* pointers in our lists */
** In any event, after the check (if any), we have two main cases.
**
** 1) Short run. b <= q < p <= r <= t.
-** b through q is a run (perhaps trivial)
-** q through p are uninteresting pairs
-** p through r is a run
+** b through q is a run (perhaps trivial)
+** q through p are uninteresting pairs
+** p through r is a run
**
** 2) Long run. b < r <= q < t.
-** b through q is a run (of length >= 2 * PTHRESH)
+** b through q is a run (of length >= 2 * PTHRESH)
**
** Note that degenerate cases are not only possible, but likely.
** For example, if the pair following b compares with opposite sense,
@@ -184,7 +175,7 @@ typedef SV * gptr; /* pointers in our lists */
*/
-static IV
+PERL_STATIC_FORCE_INLINE IV __attribute__always_inline__
dynprep(pTHX_ gptr *list1, gptr *list2, size_t nmemb, const SVCOMPARE_t cmp)
{
I32 sense;
@@ -196,63 +187,63 @@ dynprep(pTHX_ gptr *list1, gptr *list2, size_t nmemb, const SVCOMPARE_t cmp)
last = PINDEX(b, nmemb);
sense = (cmp(aTHX_ *b, *(b+1)) > 0);
for (p2 = list2; b < last; ) {
- /* We just started, or just reversed sense.
- ** Set t at end of pairs with the prevailing sense.
- */
- for (p = b+2, t = p; ++p < last; t = ++p) {
- if ((cmp(aTHX_ *t, *p) > 0) != sense) break;
- }
- q = b;
- /* Having laid out the playing field, look for long runs */
- do {
- p = r = b + (2 * PTHRESH);
- if (r >= t) p = r = t; /* too short to care about */
- else {
- while (((cmp(aTHX_ *(p-1), *p) > 0) == sense) &&
- ((p -= 2) > q)) {}
- if (p <= q) {
- /* b through r is a (long) run.
- ** Extend it as far as possible.
- */
- p = q = r;
- while (((p += 2) < t) &&
- ((cmp(aTHX_ *(p-1), *p) > 0) == sense)) q = p;
- r = p = q + 2; /* no simple pairs, no after-run */
- }
- }
- if (q > b) { /* run of greater than 2 at b */
- gptr *savep = p;
-
- p = q += 2;
- /* pick up singleton, if possible */
- if ((p == t) &&
- ((t + 1) == last) &&
- ((cmp(aTHX_ *(p-1), *p) > 0) == sense))
- savep = r = p = q = last;
- p2 = NEXT(p2) = p2 + (p - b); ++runs;
- if (sense)
- while (b < --p) {
- const gptr c = *b;
- *b++ = *p;
- *p = c;
- }
- p = savep;
- }
- while (q < p) { /* simple pairs */
- p2 = NEXT(p2) = p2 + 2; ++runs;
- if (sense) {
- const gptr c = *q++;
- *(q-1) = *q;
- *q++ = c;
- } else q += 2;
- }
- if (((b = p) == t) && ((t+1) == last)) {
- NEXT(p2) = p2 + 1; ++runs;
- b++;
- }
- q = r;
- } while (b < t);
- sense = !sense;
+ /* We just started, or just reversed sense.
+ ** Set t at end of pairs with the prevailing sense.
+ */
+ for (p = b+2, t = p; ++p < last; t = ++p) {
+ if ((cmp(aTHX_ *t, *p) > 0) != sense) break;
+ }
+ q = b;
+ /* Having laid out the playing field, look for long runs */
+ do {
+ p = r = b + (2 * PTHRESH);
+ if (r >= t) p = r = t; /* too short to care about */
+ else {
+ while (((cmp(aTHX_ *(p-1), *p) > 0) == sense) &&
+ ((p -= 2) > q)) {}
+ if (p <= q) {
+ /* b through r is a (long) run.
+ ** Extend it as far as possible.
+ */
+ p = q = r;
+ while (((p += 2) < t) &&
+ ((cmp(aTHX_ *(p-1), *p) > 0) == sense)) q = p;
+ r = p = q + 2; /* no simple pairs, no after-run */
+ }
+ }
+ if (q > b) { /* run of greater than 2 at b */
+ gptr *savep = p;
+
+ p = q += 2;
+ /* pick up singleton, if possible */
+ if ((p == t) &&
+ ((t + 1) == last) &&
+ ((cmp(aTHX_ *(p-1), *p) > 0) == sense))
+ savep = r = p = q = last;
+ p2 = NEXT(p2) = p2 + (p - b); ++runs;
+ if (sense)
+ while (b < --p) {
+ const gptr c = *b;
+ *b++ = *p;
+ *p = c;
+ }
+ p = savep;
+ }
+ while (q < p) { /* simple pairs */
+ p2 = NEXT(p2) = p2 + 2; ++runs;
+ if (sense) {
+ const gptr c = *q++;
+ *(q-1) = *q;
+ *q++ = c;
+ } else q += 2;
+ }
+ if (((b = p) == t) && ((t+1) == last)) {
+ NEXT(p2) = p2 + 1; ++runs;
+ b++;
+ }
+ q = r;
+ } while (b < t);
+ sense = !sense;
}
return runs;
}
@@ -339,27 +330,12 @@ dynprep(pTHX_ gptr *list1, gptr *list2, size_t nmemb, const SVCOMPARE_t cmp)
*/
typedef struct {
- IV offset; /* offset of 1st of 2 runs at this level */
- IV runs; /* how many runs must be combined into 1 */
-} off_runs; /* pseudo-stack element */
-
-
-static I32
-cmp_desc(pTHX_ gptr const a, gptr const b)
-{
- return -PL_sort_RealCmp(aTHX_ a, b);
-}
+ IV offset; /* offset of 1st of 2 runs at this level */
+ IV runs; /* how many runs must be combined into 1 */
+} off_runs; /* pseudo-stack element */
-/*
-=for apidoc sortsv_flags
-
-In-place sort an array of SV pointers with the given comparison routine,
-with various SORTf_* flag options.
-
-=cut
-*/
-void
-Perl_sortsv_flags(pTHX_ gptr *base, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
+PERL_STATIC_FORCE_INLINE void
+S_sortsv_flags_impl(pTHX_ gptr *base, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
{
IV i, run, offset;
I32 sense, level;
@@ -370,19 +346,13 @@ Perl_sortsv_flags(pTHX_ gptr *base, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
gptr small[SMALLSORT];
gptr *which[3];
off_runs stack[60], *stackp;
- SVCOMPARE_t savecmp = NULL;
- PERL_ARGS_ASSERT_SORTSV_FLAGS;
- if (nmemb <= 1) return; /* sorted trivially */
-
- if ((flags & SORTf_DESC) != 0) {
- savecmp = PL_sort_RealCmp; /* Save current comparison routine, if any */
- PL_sort_RealCmp = cmp; /* Put comparison routine where cmp_desc can find it */
- cmp = cmp_desc;
- }
+ PERL_UNUSED_ARG(flags);
+ PERL_ARGS_ASSERT_SORTSV_FLAGS_IMPL;
+ if (nmemb <= 1) return; /* sorted trivially */
- if (nmemb <= SMALLSORT) aux = small; /* use stack for aux array */
- else { Newx(aux,nmemb,gptr); } /* allocate auxiliary array */
+ if (nmemb <= SMALLSORT) aux = small; /* use stack for aux array */
+ else { Newx(aux,nmemb,gptr); } /* allocate auxiliary array */
level = 0;
stackp = stack;
stackp->runs = dynprep(aTHX_ base, aux, nmemb, cmp);
@@ -390,381 +360,311 @@ Perl_sortsv_flags(pTHX_ gptr *base, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
which[0] = which[2] = base;
which[1] = aux;
for (;;) {
- /* On levels where both runs have be constructed (stackp->runs == 0),
- * merge them, and note the offset of their end, in case the offset
- * is needed at the next level up. Hop up a level, and,
- * as long as stackp->runs is 0, keep merging.
- */
- IV runs = stackp->runs;
- if (runs == 0) {
- gptr *list1, *list2;
- iwhich = level & 1;
- list1 = which[iwhich]; /* area where runs are now */
- list2 = which[++iwhich]; /* area for merged runs */
- do {
- gptr *l1, *l2, *tp2;
- offset = stackp->offset;
- f1 = p1 = list1 + offset; /* start of first run */
- p = tp2 = list2 + offset; /* where merged run will go */
- t = NEXT(p); /* where first run ends */
- f2 = l1 = POTHER(t, list2, list1); /* ... on the other side */
- t = NEXT(t); /* where second runs ends */
- l2 = POTHER(t, list2, list1); /* ... on the other side */
- offset = PNELEM(list2, t);
- while (f1 < l1 && f2 < l2) {
- /* If head 1 is larger than head 2, find ALL the elements
- ** in list 2 strictly less than head1, write them all,
- ** then head 1. Then compare the new heads, and repeat,
- ** until one or both lists are exhausted.
- **
- ** In all comparisons (after establishing
- ** which head to merge) the item to merge
- ** (at pointer q) is the first operand of
- ** the comparison. When we want to know
- ** if "q is strictly less than the other",
- ** we can't just do
- ** cmp(q, other) < 0
- ** because stability demands that we treat equality
- ** as high when q comes from l2, and as low when
- ** q was from l1. So we ask the question by doing
- ** cmp(q, other) <= sense
- ** and make sense == 0 when equality should look low,
- ** and -1 when equality should look high.
- */
-
- gptr *q;
- if (cmp(aTHX_ *f1, *f2) <= 0) {
- q = f2; b = f1; t = l1;
- sense = -1;
- } else {
- q = f1; b = f2; t = l2;
- sense = 0;
- }
-
-
- /* ramp up
- **
- ** Leave t at something strictly
- ** greater than q (or at the end of the list),
- ** and b at something strictly less than q.
- */
- for (i = 1, run = 0 ;;) {
- if ((p = PINDEX(b, i)) >= t) {
- /* off the end */
- if (((p = PINDEX(t, -1)) > b) &&
- (cmp(aTHX_ *q, *p) <= sense))
- t = p;
- else b = p;
- break;
- } else if (cmp(aTHX_ *q, *p) <= sense) {
- t = p;
- break;
- } else b = p;
- if (++run >= RTHRESH) i += i;
- }
-
-
- /* q is known to follow b and must be inserted before t.
- ** Increment b, so the range of possibilities is [b,t).
- ** Round binary split down, to favor early appearance.
- ** Adjust b and t until q belongs just before t.
- */
-
- b++;
- while (b < t) {
- p = PINDEX(b, (PNELEM(b, t) - 1) / 2);
- if (cmp(aTHX_ *q, *p) <= sense) {
- t = p;
- } else b = p + 1;
- }
-
-
- /* Copy all the strictly low elements */
-
- if (q == f1) {
- FROMTOUPTO(f2, tp2, t);
- *tp2++ = *f1++;
- } else {
- FROMTOUPTO(f1, tp2, t);
- *tp2++ = *f2++;
- }
- }
-
-
- /* Run out remaining list */
- if (f1 == l1) {
- if (f2 < l2) FROMTOUPTO(f2, tp2, l2);
- } else FROMTOUPTO(f1, tp2, l1);
- p1 = NEXT(p1) = POTHER(tp2, list2, list1);
-
- if (--level == 0) goto done;
- --stackp;
- t = list1; list1 = list2; list2 = t; /* swap lists */
- } while ((runs = stackp->runs) == 0);
- }
-
-
- stackp->runs = 0; /* current run will finish level */
- /* While there are more than 2 runs remaining,
- * turn them into exactly 2 runs (at the "other" level),
- * each made up of approximately half the runs.
- * Stack the second half for later processing,
- * and set about producing the first half now.
- */
- while (runs > 2) {
- ++level;
- ++stackp;
- stackp->offset = offset;
- runs -= stackp->runs = runs / 2;
- }
- /* We must construct a single run from 1 or 2 runs.
- * All the original runs are in which[0] == base.
- * The run we construct must end up in which[level&1].
- */
- iwhich = level & 1;
- if (runs == 1) {
- /* Constructing a single run from a single run.
- * If it's where it belongs already, there's nothing to do.
- * Otherwise, copy it to where it belongs.
- * A run of 1 is either a singleton at level 0,
- * or the second half of a split 3. In neither event
- * is it necessary to set offset. It will be set by the merge
- * that immediately follows.
- */
- if (iwhich) { /* Belongs in aux, currently in base */
- f1 = b = PINDEX(base, offset); /* where list starts */
- f2 = PINDEX(aux, offset); /* where list goes */
- t = NEXT(f2); /* where list will end */
- offset = PNELEM(aux, t); /* offset thereof */
- t = PINDEX(base, offset); /* where it currently ends */
- FROMTOUPTO(f1, f2, t); /* copy */
- NEXT(b) = t; /* set up parallel pointer */
- } else if (level == 0) goto done; /* single run at level 0 */
- } else {
- /* Constructing a single run from two runs.
- * The merge code at the top will do that.
- * We need only make sure the two runs are in the "other" array,
- * so they'll end up in the correct array after the merge.
- */
- ++level;
- ++stackp;
- stackp->offset = offset;
- stackp->runs = 0; /* take care of both runs, trigger merge */
- if (!iwhich) { /* Merged runs belong in aux, copy 1st */
- f1 = b = PINDEX(base, offset); /* where first run starts */
- f2 = PINDEX(aux, offset); /* where it will be copied */
- t = NEXT(f2); /* where first run will end */
- offset = PNELEM(aux, t); /* offset thereof */
- p = PINDEX(base, offset); /* end of first run */
- t = NEXT(t); /* where second run will end */
- t = PINDEX(base, PNELEM(aux, t)); /* where it now ends */
- FROMTOUPTO(f1, f2, t); /* copy both runs */
- NEXT(b) = p; /* paralleled pointer for 1st */
- NEXT(p) = t; /* ... and for second */
- }
- }
+ /* On levels where both runs have be constructed (stackp->runs == 0),
+ * merge them, and note the offset of their end, in case the offset
+ * is needed at the next level up. Hop up a level, and,
+ * as long as stackp->runs is 0, keep merging.
+ */
+ IV runs = stackp->runs;
+ if (runs == 0) {
+ gptr *list1, *list2;
+ iwhich = level & 1;
+ list1 = which[iwhich]; /* area where runs are now */
+ list2 = which[++iwhich]; /* area for merged runs */
+ do {
+ gptr *l1, *l2, *tp2;
+ offset = stackp->offset;
+ f1 = p1 = list1 + offset; /* start of first run */
+ p = tp2 = list2 + offset; /* where merged run will go */
+ t = NEXT(p); /* where first run ends */
+ f2 = l1 = POTHER(t, list2, list1); /* ... on the other side */
+ t = NEXT(t); /* where second runs ends */
+ l2 = POTHER(t, list2, list1); /* ... on the other side */
+ offset = PNELEM(list2, t);
+ while (f1 < l1 && f2 < l2) {
+ /* If head 1 is larger than head 2, find ALL the elements
+ ** in list 2 strictly less than head1, write them all,
+ ** then head 1. Then compare the new heads, and repeat,
+ ** until one or both lists are exhausted.
+ **
+ ** In all comparisons (after establishing
+ ** which head to merge) the item to merge
+ ** (at pointer q) is the first operand of
+ ** the comparison. When we want to know
+ ** if "q is strictly less than the other",
+ ** we can't just do
+ ** cmp(q, other) < 0
+ ** because stability demands that we treat equality
+ ** as high when q comes from l2, and as low when
+ ** q was from l1. So we ask the question by doing
+ ** cmp(q, other) <= sense
+ ** and make sense == 0 when equality should look low,
+ ** and -1 when equality should look high.
+ */
+
+ gptr *q;
+ if (cmp(aTHX_ *f1, *f2) <= 0) {
+ q = f2; b = f1; t = l1;
+ sense = -1;
+ } else {
+ q = f1; b = f2; t = l2;
+ sense = 0;
+ }
+
+
+ /* ramp up
+ **
+ ** Leave t at something strictly
+ ** greater than q (or at the end of the list),
+ ** and b at something strictly less than q.
+ */
+ for (i = 1, run = 0 ;;) {
+ if ((p = PINDEX(b, i)) >= t) {
+ /* off the end */
+ if (((p = PINDEX(t, -1)) > b) &&
+ (cmp(aTHX_ *q, *p) <= sense))
+ t = p;
+ else b = p;
+ break;
+ } else if (cmp(aTHX_ *q, *p) <= sense) {
+ t = p;
+ break;
+ } else b = p;
+ if (++run >= RTHRESH) i += i;
+ }
+
+
+ /* q is known to follow b and must be inserted before t.
+ ** Increment b, so the range of possibilities is [b,t).
+ ** Round binary split down, to favor early appearance.
+ ** Adjust b and t until q belongs just before t.
+ */
+
+ b++;
+ while (b < t) {
+ p = PINDEX(b, (PNELEM(b, t) - 1) / 2);
+ if (cmp(aTHX_ *q, *p) <= sense) {
+ t = p;
+ } else b = p + 1;
+ }
+
+
+ /* Copy all the strictly low elements */
+
+ if (q == f1) {
+ FROMTOUPTO(f2, tp2, t);
+ *tp2++ = *f1++;
+ } else {
+ FROMTOUPTO(f1, tp2, t);
+ *tp2++ = *f2++;
+ }
+ }
+
+
+ /* Run out remaining list */
+ if (f1 == l1) {
+ if (f2 < l2) FROMTOUPTO(f2, tp2, l2);
+ } else FROMTOUPTO(f1, tp2, l1);
+ p1 = NEXT(p1) = POTHER(tp2, list2, list1);
+
+ if (--level == 0) goto done;
+ --stackp;
+ t = list1; list1 = list2; list2 = t; /* swap lists */
+ } while ((runs = stackp->runs) == 0);
+ }
+
+
+ stackp->runs = 0; /* current run will finish level */
+ /* While there are more than 2 runs remaining,
+ * turn them into exactly 2 runs (at the "other" level),
+ * each made up of approximately half the runs.
+ * Stack the second half for later processing,
+ * and set about producing the first half now.
+ */
+ while (runs > 2) {
+ ++level;
+ ++stackp;
+ stackp->offset = offset;
+ runs -= stackp->runs = runs / 2;
+ }
+ /* We must construct a single run from 1 or 2 runs.
+ * All the original runs are in which[0] == base.
+ * The run we construct must end up in which[level&1].
+ */
+ iwhich = level & 1;
+ if (runs == 1) {
+ /* Constructing a single run from a single run.
+ * If it's where it belongs already, there's nothing to do.
+ * Otherwise, copy it to where it belongs.
+ * A run of 1 is either a singleton at level 0,
+ * or the second half of a split 3. In neither event
+ * is it necessary to set offset. It will be set by the merge
+ * that immediately follows.
+ */
+ if (iwhich) { /* Belongs in aux, currently in base */
+ f1 = b = PINDEX(base, offset); /* where list starts */
+ f2 = PINDEX(aux, offset); /* where list goes */
+ t = NEXT(f2); /* where list will end */
+ offset = PNELEM(aux, t); /* offset thereof */
+ t = PINDEX(base, offset); /* where it currently ends */
+ FROMTOUPTO(f1, f2, t); /* copy */
+ NEXT(b) = t; /* set up parallel pointer */
+ } else if (level == 0) goto done; /* single run at level 0 */
+ } else {
+ /* Constructing a single run from two runs.
+ * The merge code at the top will do that.
+ * We need only make sure the two runs are in the "other" array,
+ * so they'll end up in the correct array after the merge.
+ */
+ ++level;
+ ++stackp;
+ stackp->offset = offset;
+ stackp->runs = 0; /* take care of both runs, trigger merge */
+ if (!iwhich) { /* Merged runs belong in aux, copy 1st */
+ f1 = b = PINDEX(base, offset); /* where first run starts */
+ f2 = PINDEX(aux, offset); /* where it will be copied */
+ t = NEXT(f2); /* where first run will end */
+ offset = PNELEM(aux, t); /* offset thereof */
+ p = PINDEX(base, offset); /* end of first run */
+ t = NEXT(t); /* where second run will end */
+ t = PINDEX(base, PNELEM(aux, t)); /* where it now ends */
+ FROMTOUPTO(f1, f2, t); /* copy both runs */
+ NEXT(b) = p; /* paralleled pointer for 1st */
+ NEXT(p) = t; /* ... and for second */
+ }
+ }
}
done:
- if (aux != small) Safefree(aux); /* free iff allocated */
- if (savecmp != NULL) {
- PL_sort_RealCmp = savecmp; /* Restore current comparison routine, if any */
- }
+ if (aux != small) Safefree(aux); /* free iff allocated */
+
return;
}
/*
- * The quicksort implementation was derived from source code contributed
- * by Tom Horsley.
- *
- * NOTE: this code was derived from Tom Horsley's qsort replacement
- * and should not be confused with the original code.
- */
-
-/* Copyright (C) Tom Horsley, 1997. All rights reserved.
+=head1 SV Manipulation Functions
- Permission granted to distribute under the same terms as perl which are
- (briefly):
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of either:
-
- a) the GNU General Public License as published by the Free
- Software Foundation; either version 1, or (at your option) any
- later version, or
-
- b) the "Artistic License" which comes with this Kit.
-
- Details on the perl license can be found in the perl source code which
- may be located via the www.perl.com web page.
-
- This is the most wonderfulest possible qsort I can come up with (and
- still be mostly portable) My (limited) tests indicate it consistently
- does about 20% fewer calls to compare than does the qsort in the Visual
- C++ library, other vendors may vary.
-
- Some of the ideas in here can be found in "Algorithms" by Sedgewick,
- others I invented myself (or more likely re-invented since they seemed
- pretty obvious once I watched the algorithm operate for a while).
-
- Most of this code was written while watching the Marlins sweep the Giants
- in the 1997 National League Playoffs - no Braves fans allowed to use this
- code (just kidding :-).
-
- I realize that if I wanted to be true to the perl tradition, the only
- comment in this file would be something like:
+=for apidoc sortsv_flags
- ...they shuffled back towards the rear of the line. 'No, not at the
- rear!' the slave-driver shouted. 'Three files up. And stay there...
+In-place sort an array of SV pointers with the given comparison routine,
+with various SORTf_* flag options.
- However, I really needed to violate that tradition just so I could keep
- track of what happens myself, not to mention some poor fool trying to
- understand this years from now :-).
+=cut
*/
+void
+Perl_sortsv_flags(pTHX_ gptr *base, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
+{
+ PERL_ARGS_ASSERT_SORTSV_FLAGS;
-/* ********************************************************** Configuration */
-
-#ifndef QSORT_ORDER_GUESS
-#define QSORT_ORDER_GUESS 2 /* Select doubling version of the netBSD trick */
-#endif
-
-/* QSORT_MAX_STACK is the largest number of partitions that can be stacked up for
- future processing - a good max upper bound is log base 2 of memory size
- (32 on 32 bit machines, 64 on 64 bit machines, etc). In reality can
- safely be smaller than that since the program is taking up some space and
- most operating systems only let you grab some subset of contiguous
- memory (not to mention that you are normally sorting data larger than
- 1 byte element size :-).
-*/
-#ifndef QSORT_MAX_STACK
-#define QSORT_MAX_STACK 32
-#endif
+ sortsv_flags_impl(base, nmemb, cmp, flags);
+}
-/* QSORT_BREAK_EVEN is the size of the largest partition we should insertion sort.
- Anything bigger and we use qsort. If you make this too small, the qsort
- will probably break (or become less efficient), because it doesn't expect
- the middle element of a partition to be the same as the right or left -
- you have been warned).
-*/
-#ifndef QSORT_BREAK_EVEN
-#define QSORT_BREAK_EVEN 6
-#endif
+/*
+ * Each of sortsv_* functions contains an inlined copy of
+ * sortsv_flags_impl() with an inlined comparator. Basically, we are
+ * emulating C++ templates by using __attribute__((always_inline)).
+ *
+ * The purpose of that is to avoid the function call overhead inside
+ * the sorting routine, which calls the comparison function multiple
+ * times per sorted item.
+ */
-/* QSORT_PLAY_SAFE is the size of the largest partition we're willing
- to go quadratic on. We innoculate larger partitions against
- quadratic behavior by shuffling them before sorting. This is not
- an absolute guarantee of non-quadratic behavior, but it would take
- staggeringly bad luck to pick extreme elements as the pivot
- from randomized data.
-*/
-#ifndef QSORT_PLAY_SAFE
-#define QSORT_PLAY_SAFE 255
-#endif
+static void
+sortsv_amagic_i_ncmp(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_amagic_i_ncmp, flags);
+}
-/* ************************************************************* Data Types */
+static void
+sortsv_amagic_i_ncmp_desc(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_amagic_i_ncmp_desc, flags);
+}
-/* hold left and right index values of a partition waiting to be sorted (the
- partition includes both left and right - right is NOT one past the end or
- anything like that).
-*/
-struct partition_stack_entry {
- int left;
- int right;
-#ifdef QSORT_ORDER_GUESS
- int qsort_break_even;
-#endif
-};
+static void
+sortsv_i_ncmp(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_sv_i_ncmp, flags);
+}
-/* ******************************************************* Shorthand Macros */
+static void
+sortsv_i_ncmp_desc(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_sv_i_ncmp_desc, flags);
+}
-/* Note that these macros will be used from inside the qsort function where
- we happen to know that the variable 'elt_size' contains the size of an
- array element and the variable 'temp' points to enough space to hold a
- temp element and the variable 'array' points to the array being sorted
- and 'compare' is the pointer to the compare routine.
+static void
+sortsv_amagic_ncmp(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_amagic_ncmp, flags);
+}
- Also note that there are very many highly architecture specific ways
- these might be sped up, but this is simply the most generally portable
- code I could think of.
-*/
+static void
+sortsv_amagic_ncmp_desc(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_amagic_ncmp_desc, flags);
+}
-/* Return < 0 == 0 or > 0 as the value of elt1 is < elt2, == elt2, > elt2
-*/
-#define qsort_cmp(elt1, elt2) \
- ((*compare)(aTHX_ array[elt1], array[elt2]))
+static void
+sortsv_ncmp(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_sv_ncmp, flags);
+}
-#ifdef QSORT_ORDER_GUESS
-#define QSORT_NOTICE_SWAP swapped++;
-#else
-#define QSORT_NOTICE_SWAP
-#endif
+static void
+sortsv_ncmp_desc(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_sv_ncmp_desc, flags);
+}
-/* swaps contents of array elements elt1, elt2.
-*/
-#define qsort_swap(elt1, elt2) \
- STMT_START { \
- QSORT_NOTICE_SWAP \
- temp = array[elt1]; \
- array[elt1] = array[elt2]; \
- array[elt2] = temp; \
- } STMT_END
-
-/* rotate contents of elt1, elt2, elt3 such that elt1 gets elt2, elt2 gets
- elt3 and elt3 gets elt1.
-*/
-#define qsort_rotate(elt1, elt2, elt3) \
- STMT_START { \
- QSORT_NOTICE_SWAP \
- temp = array[elt1]; \
- array[elt1] = array[elt2]; \
- array[elt2] = array[elt3]; \
- array[elt3] = temp; \
- } STMT_END
+static void
+sortsv_amagic_cmp(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_amagic_cmp, flags);
+}
-/* ************************************************************ Debug stuff */
+static void
+sortsv_amagic_cmp_desc(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_amagic_cmp_desc, flags);
+}
-#ifdef QSORT_DEBUG
+static void
+sortsv_cmp(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, Perl_sv_cmp, flags);
+}
static void
-break_here()
+sortsv_cmp_desc(pTHX_ gptr *base, size_t nmemb, U32 flags)
{
- return; /* good place to set a breakpoint */
+ sortsv_flags_impl(base, nmemb, S_cmp_desc, flags);
}
-#define qsort_assert(t) (void)( (t) || (break_here(), 0) )
+#ifdef USE_LOCALE_COLLATE
static void
-doqsort_all_asserts(
- void * array,
- size_t num_elts,
- size_t elt_size,
- int (*compare)(const void * elt1, const void * elt2),
- int pc_left, int pc_right, int u_left, int u_right)
+sortsv_amagic_cmp_locale(pTHX_ gptr *base, size_t nmemb, U32 flags)
{
- int i;
-
- qsort_assert(pc_left <= pc_right);
- qsort_assert(u_right < pc_left);
- qsort_assert(pc_right < u_left);
- for (i = u_right + 1; i < pc_left; ++i) {
- qsort_assert(qsort_cmp(i, pc_left) < 0);
- }
- for (i = pc_left; i < pc_right; ++i) {
- qsort_assert(qsort_cmp(i, pc_right) == 0);
- }
- for (i = pc_right + 1; i < u_left; ++i) {
- qsort_assert(qsort_cmp(pc_right, i) < 0);
- }
+ sortsv_flags_impl(base, nmemb, S_amagic_cmp_locale, flags);
}
-#define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) \
- doqsort_all_asserts(array, num_elts, elt_size, compare, \
- PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT)
-
-#else
+static void
+sortsv_amagic_cmp_locale_desc(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_amagic_cmp_locale_desc, flags);
+}
-#define qsort_assert(t) ((void)0)
+static void
+sortsv_cmp_locale(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, Perl_sv_cmp_locale, flags);
+}
-#define qsort_all_asserts(PC_LEFT, PC_RIGHT, U_LEFT, U_RIGHT) ((void)0)
+static void
+sortsv_cmp_locale_desc(pTHX_ gptr *base, size_t nmemb, U32 flags)
+{
+ sortsv_flags_impl(base, nmemb, S_cmp_locale_desc, flags);
+}
#endif
@@ -810,170 +710,168 @@ PP(pp_sort)
const U8 priv = PL_op->op_private;
const U8 flags = PL_op->op_flags;
U32 sort_flags = 0;
- void (*sortsvp)(pTHX_ SV **array, size_t nmemb, SVCOMPARE_t cmp, U32 flags)
- = Perl_sortsv_flags;
- I32 all_SIVs = 1;
+ I32 all_SIVs = 1, descending = 0;
if ((priv & OPpSORT_DESCEND) != 0)
- sort_flags |= SORTf_DESC;
+ descending = 1;
if ((priv & OPpSORT_STABLE) != 0)
- sort_flags |= SORTf_STABLE;
+ sort_flags |= SORTf_STABLE;
if ((priv & OPpSORT_UNSTABLE) != 0)
- sort_flags |= SORTf_UNSTABLE;
+ sort_flags |= SORTf_UNSTABLE;
if (gimme != G_ARRAY) {
- SP = MARK;
- EXTEND(SP,1);
- RETPUSHUNDEF;
+ SP = MARK;
+ EXTEND(SP,1);
+ RETPUSHUNDEF;
}
ENTER;
SAVEVPTR(PL_sortcop);
if (flags & OPf_STACKED) {
- if (flags & OPf_SPECIAL) {
+ if (flags & OPf_SPECIAL) {
OP *nullop = OpSIBLING(cLISTOP->op_first); /* pass pushmark */
assert(nullop->op_type == OP_NULL);
- PL_sortcop = nullop->op_next;
- }
- else {
- GV *autogv = NULL;
- HV *stash;
- cv = sv_2cv(*++MARK, &stash, &gv, GV_ADD);
- check_cv:
- if (cv && SvPOK(cv)) {
- const char * const proto = SvPV_nolen_const(MUTABLE_SV(cv));
- if (proto && strEQ(proto, "$$")) {
- hasargs = TRUE;
- }
- }
- if (cv && CvISXSUB(cv) && CvXSUB(cv)) {
- is_xsub = 1;
- }
- else if (!(cv && CvROOT(cv))) {
- if (gv) {
- goto autoload;
- }
- else if (!CvANON(cv) && (gv = CvGV(cv))) {
- if (cv != GvCV(gv)) cv = GvCV(gv);
- autoload:
- if (!autogv && (
- autogv = gv_autoload_pvn(
- GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
- GvNAMEUTF8(gv) ? SVf_UTF8 : 0
- )
- )) {
- cv = GvCVu(autogv);
- goto check_cv;
- }
- else {
- SV *tmpstr = sv_newmortal();
- gv_efullname3(tmpstr, gv, NULL);
- DIE(aTHX_ "Undefined sort subroutine \"%" SVf "\" called",
- SVfARG(tmpstr));
- }
- }
- else {
- DIE(aTHX_ "Undefined subroutine in sort");
- }
- }
-
- if (is_xsub)
- PL_sortcop = (OP*)cv;
- else
- PL_sortcop = CvSTART(cv);
- }
+ PL_sortcop = nullop->op_next;
+ }
+ else {
+ GV *autogv = NULL;
+ HV *stash;
+ cv = sv_2cv(*++MARK, &stash, &gv, GV_ADD);
+ check_cv:
+ if (cv && SvPOK(cv)) {
+ const char * const proto = SvPV_nolen_const(MUTABLE_SV(cv));
+ if (proto && strEQ(proto, "$$")) {
+ hasargs = TRUE;
+ }
+ }
+ if (cv && CvISXSUB(cv) && CvXSUB(cv)) {
+ is_xsub = 1;
+ }
+ else if (!(cv && CvROOT(cv))) {
+ if (gv) {
+ goto autoload;
+ }
+ else if (!CvANON(cv) && (gv = CvGV(cv))) {
+ if (cv != GvCV(gv)) cv = GvCV(gv);
+ autoload:
+ if (!autogv && (
+ autogv = gv_autoload_pvn(
+ GvSTASH(gv), GvNAME(gv), GvNAMELEN(gv),
+ GvNAMEUTF8(gv) ? SVf_UTF8 : 0
+ )
+ )) {
+ cv = GvCVu(autogv);
+ goto check_cv;
+ }
+ else {
+ SV *tmpstr = sv_newmortal();
+ gv_efullname3(tmpstr, gv, NULL);
+ DIE(aTHX_ "Undefined sort subroutine \"%" SVf "\" called",
+ SVfARG(tmpstr));
+ }
+ }
+ else {
+ DIE(aTHX_ "Undefined subroutine in sort");
+ }
+ }
+
+ if (is_xsub)
+ PL_sortcop = (OP*)cv;
+ else
+ PL_sortcop = CvSTART(cv);
+ }
}
else {
- PL_sortcop = NULL;
+ PL_sortcop = NULL;
}
/* optimiser converts "@a = sort @a" to "sort \@a". In this case,
* push (@a) onto stack, then assign result back to @a at the end of
* this function */
if (priv & OPpSORT_INPLACE) {
- assert( MARK+1 == SP && *SP && SvTYPE(*SP) == SVt_PVAV);
- (void)POPMARK; /* remove mark associated with ex-OP_AASSIGN */
- av = MUTABLE_AV((*SP));
+ assert( MARK+1 == SP && *SP && SvTYPE(*SP) == SVt_PVAV);
+ (void)POPMARK; /* remove mark associated with ex-OP_AASSIGN */
+ av = MUTABLE_AV((*SP));
if (SvREADONLY(av))
Perl_croak_no_modify();
- max = AvFILL(av) + 1;
+ max = AvFILL(av) + 1;
MEXTEND(SP, max);
- if (SvMAGICAL(av)) {
- for (i=0; i < max; i++) {
- SV **svp = av_fetch(av, i, FALSE);
- *SP++ = (svp) ? *svp : NULL;
- }
- }
+ if (SvMAGICAL(av)) {
+ for (i=0; i < max; i++) {
+ SV **svp = av_fetch(av, i, FALSE);
+ *SP++ = (svp) ? *svp : NULL;
+ }
+ }
else {
SV **svp = AvARRAY(av);
assert(svp || max == 0);
- for (i = 0; i < max; i++)
+ for (i = 0; i < max; i++)
*SP++ = *svp++;
- }
+ }
SP--;
p1 = p2 = SP - (max-1);
}
else {
- p2 = MARK+1;
- max = SP - MARK;
- }
+ p2 = MARK+1;
+ max = SP - MARK;
+ }
/* shuffle stack down, removing optional initial cv (p1!=p2), plus
* any nulls; also stringify or converting to integer or number as
* required any args */
copytmps = cBOOL(PL_sortcop);
for (i=max; i > 0 ; i--) {
- if ((*p1 = *p2++)) { /* Weed out nulls. */
- if (copytmps && SvPADTMP(*p1)) {
- *p1 = sv_mortalcopy(*p1);
+ if ((*p1 = *p2++)) { /* Weed out nulls. */
+ if (copytmps && SvPADTMP(*p1)) {
+ *p1 = sv_mortalcopy(*p1);
}
- SvTEMP_off(*p1);
- if (!PL_sortcop) {
- if (priv & OPpSORT_NUMERIC) {
- if (priv & OPpSORT_INTEGER) {
- if (!SvIOK(*p1))
- (void)sv_2iv_flags(*p1, SV_GMAGIC|SV_SKIP_OVERLOAD);
- }
- else {
- if (!SvNSIOK(*p1))
- (void)sv_2nv_flags(*p1, SV_GMAGIC|SV_SKIP_OVERLOAD);
- if (all_SIVs && !SvSIOK(*p1))
- all_SIVs = 0;
- }
- }
- else {
- if (!SvPOK(*p1))
- (void)sv_2pv_flags(*p1, 0,
- SV_GMAGIC|SV_CONST_RETURN|SV_SKIP_OVERLOAD);
- }
- if (SvAMAGIC(*p1))
- overloading = 1;
- }
- p1++;
- }
- else
- max--;
+ SvTEMP_off(*p1);
+ if (!PL_sortcop) {
+ if (priv & OPpSORT_NUMERIC) {
+ if (priv & OPpSORT_INTEGER) {
+ if (!SvIOK(*p1))
+ (void)sv_2iv_flags(*p1, SV_GMAGIC|SV_SKIP_OVERLOAD);
+ }
+ else {
+ if (!SvNSIOK(*p1))
+ (void)sv_2nv_flags(*p1, SV_GMAGIC|SV_SKIP_OVERLOAD);
+ if (all_SIVs && !SvSIOK(*p1))
+ all_SIVs = 0;
+ }
+ }
+ else {
+ if (!SvPOK(*p1))
+ (void)sv_2pv_flags(*p1, 0,
+ SV_GMAGIC|SV_CONST_RETURN|SV_SKIP_OVERLOAD);
+ }
+ if (SvAMAGIC(*p1))
+ overloading = 1;
+ }
+ p1++;
+ }
+ else
+ max--;
}
if (max > 1) {
- SV **start;
- if (PL_sortcop) {
- PERL_CONTEXT *cx;
- const bool oldcatch = CATCH_GET;
+ SV **start;
+ if (PL_sortcop) {
+ PERL_CONTEXT *cx;
+ const bool oldcatch = CATCH_GET;
I32 old_savestack_ix = PL_savestack_ix;
- SAVEOP();
-
- CATCH_SET(TRUE);
- PUSHSTACKi(PERLSI_SORT);
- if (!hasargs && !is_xsub) {
- SAVEGENERICSV(PL_firstgv);
- SAVEGENERICSV(PL_secondgv);
- PL_firstgv = MUTABLE_GV(SvREFCNT_inc(
- gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV)
- ));
- PL_secondgv = MUTABLE_GV(SvREFCNT_inc(
- gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV)
- ));
+ SAVEOP();
+
+ CATCH_SET(TRUE);
+ PUSHSTACKi(PERLSI_SORT);
+ if (!hasargs && !is_xsub) {
+ SAVEGENERICSV(PL_firstgv);
+ SAVEGENERICSV(PL_secondgv);
+ PL_firstgv = MUTABLE_GV(SvREFCNT_inc(
+ gv_fetchpvs("a", GV_ADD|GV_NOTQUAL, SVt_PV)
+ ));
+ PL_secondgv = MUTABLE_GV(SvREFCNT_inc(
+ gv_fetchpvs("b", GV_ADD|GV_NOTQUAL, SVt_PV)
+ ));
/* make sure the GP isn't removed out from under us for
* the SAVESPTR() */
save_gp(PL_firstgv, 0);
@@ -981,97 +879,136 @@ PP(pp_sort)
/* we don't want modifications localized */
GvINTRO_off(PL_firstgv);
GvINTRO_off(PL_secondgv);
- SAVEGENERICSV(GvSV(PL_firstgv));
- SvREFCNT_inc(GvSV(PL_firstgv));
- SAVEGENERICSV(GvSV(PL_secondgv));
- SvREFCNT_inc(GvSV(PL_secondgv));
- }
+ SAVEGENERICSV(GvSV(PL_firstgv));
+ SvREFCNT_inc(GvSV(PL_firstgv));
+ SAVEGENERICSV(GvSV(PL_secondgv));
+ SvREFCNT_inc(GvSV(PL_secondgv));
+ }
gimme = G_SCALAR;
- cx = cx_pushblock(CXt_NULL, gimme, PL_stack_base, old_savestack_ix);
- if (!(flags & OPf_SPECIAL)) {
- cx->cx_type = CXt_SUB|CXp_MULTICALL;
- cx_pushsub(cx, cv, NULL, hasargs);
- if (!is_xsub) {
- PADLIST * const padlist = CvPADLIST(cv);
-
- if (++CvDEPTH(cv) >= 2)
- pad_push(padlist, CvDEPTH(cv));
- PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
-
- if (hasargs) {
- /* This is mostly copied from pp_entersub */
- AV * const av = MUTABLE_AV(PAD_SVl(0));
-
- cx->blk_sub.savearray = GvAV(PL_defgv);
- GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
- }
-
- }
- }
+ cx = cx_pushblock(CXt_NULL, gimme, PL_stack_base, old_savestack_ix);
+ if (!(flags & OPf_SPECIAL)) {
+ cx->cx_type = CXt_SUB|CXp_MULTICALL;
+ cx_pushsub(cx, cv, NULL, hasargs);
+ if (!is_xsub) {
+ PADLIST * const padlist = CvPADLIST(cv);
+
+ if (++CvDEPTH(cv) >= 2)
+ pad_push(padlist, CvDEPTH(cv));
+ PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
+
+ if (hasargs) {
+ /* This is mostly copied from pp_entersub */
+ AV * const av = MUTABLE_AV(PAD_SVl(0));
+
+ cx->blk_sub.savearray = GvAV(PL_defgv);
+ GvAV(PL_defgv) = MUTABLE_AV(SvREFCNT_inc_simple(av));
+ }
+
+ }
+ }
- start = p1 - max;
- sortsvp(aTHX_ start, max,
- (is_xsub ? S_sortcv_xsub : hasargs ? S_sortcv_stacked : S_sortcv),
- sort_flags);
+ start = p1 - max;
+ Perl_sortsv_flags(aTHX_ start, max,
+ (is_xsub ? S_sortcv_xsub : hasargs ? S_sortcv_stacked : S_sortcv),
+ sort_flags);
/* Reset cx, in case the context stack has been reallocated. */
cx = CX_CUR();
- PL_stack_sp = PL_stack_base + cx->blk_oldsp;
+ PL_stack_sp = PL_stack_base + cx->blk_oldsp;
CX_LEAVE_SCOPE(cx);
- if (!(flags & OPf_SPECIAL)) {
+ if (!(flags & OPf_SPECIAL)) {
assert(CxTYPE(cx) == CXt_SUB);
cx_popsub(cx);
- }
+ }
else
assert(CxTYPE(cx) == CXt_NULL);
/* there isn't a POPNULL ! */
- cx_popblock(cx);
+ cx_popblock(cx);
CX_POP(cx);
- POPSTACK;
- CATCH_SET(oldcatch);
- }
- else {
- MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
- start = ORIGMARK+1;
- sortsvp(aTHX_ start, max,
- (priv & OPpSORT_NUMERIC)
- ? ( ( ( priv & OPpSORT_INTEGER) || all_SIVs)
- ? ( overloading ? S_amagic_i_ncmp : S_sv_i_ncmp)
- : ( overloading ? S_amagic_ncmp : S_sv_ncmp ) )
- : (
+ POPSTACK;
+ CATCH_SET(oldcatch);
+ }
+ else {
+ MEXTEND(SP, 20); /* Can't afford stack realloc on signal. */
+ start = ORIGMARK+1;
+ if (priv & OPpSORT_NUMERIC) {
+ if ((priv & OPpSORT_INTEGER) || all_SIVs) {
+ if (overloading)
+ if (descending)
+ sortsv_amagic_i_ncmp_desc(aTHX_ start, max, sort_flags);
+ else
+ sortsv_amagic_i_ncmp(aTHX_ start, max, sort_flags);
+ else
+ if (descending)
+ sortsv_i_ncmp_desc(aTHX_ start, max, sort_flags);
+ else
+ sortsv_i_ncmp(aTHX_ start, max, sort_flags);
+ }
+ else {
+ if (overloading)
+ if (descending)
+ sortsv_amagic_ncmp_desc(aTHX_ start, max, sort_flags);
+ else
+ sortsv_amagic_ncmp(aTHX_ start, max, sort_flags);
+ else
+ if (descending)
+ sortsv_ncmp_desc(aTHX_ start, max, sort_flags);
+ else
+ sortsv_ncmp(aTHX_ start, max, sort_flags);
+ }
+ }
#ifdef USE_LOCALE_COLLATE
- IN_LC_RUNTIME(LC_COLLATE)
- ? ( overloading
- ? (SVCOMPARE_t)S_amagic_cmp_locale
- : (SVCOMPARE_t)sv_cmp_locale_static)
- :
+ else if(IN_LC_RUNTIME(LC_COLLATE)) {
+ if (overloading)
+ if (descending)
+ sortsv_amagic_cmp_locale_desc(aTHX_ start, max, sort_flags);
+ else
+ sortsv_amagic_cmp_locale(aTHX_ start, max, sort_flags);
+ else
+ if (descending)
+ sortsv_cmp_locale_desc(aTHX_ start, max, sort_flags);
+ else
+ sortsv_cmp_locale(aTHX_ start, max, sort_flags);
+ }
#endif
- ( overloading ? (SVCOMPARE_t)S_amagic_cmp : (SVCOMPARE_t)sv_cmp_static)),
- sort_flags);
- }
- if ((priv & OPpSORT_REVERSE) != 0) {
- SV **q = start+max-1;
- while (start < q) {
- SV * const tmp = *start;
- *start++ = *q;
- *q-- = tmp;
- }
- }
+ else {
+ if (overloading)
+ if (descending)
+ sortsv_amagic_cmp_desc(aTHX_ start, max, sort_flags);
+ else
+ sortsv_amagic_cmp(aTHX_ start, max, sort_flags);
+ else
+ if (descending)
+ sortsv_cmp_desc(aTHX_ start, max, sort_flags);
+ else
+ sortsv_cmp(aTHX_ start, max, sort_flags);
+ }
+ }
+ if ((priv & OPpSORT_REVERSE) != 0) {
+ SV **q = start+max-1;
+ while (start < q) {
+ SV * const tmp = *start;
+ *start++ = *q;
+ *q-- = tmp;
+ }
+ }
}
if (av) {
/* copy back result to the array */
SV** const base = MARK+1;
+ SSize_t max_minus_one = max - 1; /* attempt to work around mingw bug */
if (SvMAGICAL(av)) {
- for (i = 0; i < max; i++)
+ for (i = 0; i <= max_minus_one; i++)
base[i] = newSVsv(base[i]);
av_clear(av);
- av_extend(av, max);
- for (i=0; i < max; i++) {
+ if (max_minus_one >= 0)
+ av_extend(av, max_minus_one);
+ for (i=0; i <= max_minus_one; i++) {
SV * const sv = base[i];
SV ** const didstore = av_store(av, i, sv);
if (SvSMAGICAL(sv))
@@ -1087,7 +1024,7 @@ PP(pp_sort)
* in the meantime. So bump and unbump the relevant refcounts
* first.
*/
- for (i = 0; i < max; i++) {
+ for (i = 0; i <= max_minus_one; i++) {
SV *sv = base[i];
assert(sv);
if (SvREFCNT(sv) > 1)
@@ -1096,11 +1033,11 @@ PP(pp_sort)
SvREFCNT_inc_simple_void_NN(sv);
}
av_clear(av);
- if (max > 0) {
- av_extend(av, max);
+ if (max_minus_one >= 0) {
+ av_extend(av, max_minus_one);
Copy(base, AvARRAY(av), max, SV*);
}
- AvFILLp(av) = max - 1;
+ AvFILLp(av) = max_minus_one;
AvREIFY_off(av);
AvREAL_on(av);
}
@@ -1153,22 +1090,22 @@ S_sortcv_stacked(pTHX_ SV *const a, SV *const b)
PERL_ARGS_ASSERT_SORTCV_STACKED;
if (AvREAL(av)) {
- av_clear(av);
- AvREAL_off(av);
- AvREIFY_on(av);
+ av_clear(av);
+ AvREAL_off(av);
+ AvREIFY_on(av);
}
if (AvMAX(av) < 1) {
- SV **ary = AvALLOC(av);
- if (AvARRAY(av) != ary) {
- AvMAX(av) += AvARRAY(av) - AvALLOC(av);
- AvARRAY(av) = ary;
- }
- if (AvMAX(av) < 1) {
- Renew(ary,2,SV*);
- AvMAX(av) = 1;
- AvARRAY(av) = ary;
- AvALLOC(av) = ary;
- }
+ SV **ary = AvALLOC(av);
+ if (AvARRAY(av) != ary) {
+ AvMAX(av) += AvARRAY(av) - AvALLOC(av);
+ AvARRAY(av) = ary;
+ }
+ if (AvMAX(av) < 1) {
+ Renew(ary,2,SV*);
+ AvMAX(av) = 1;
+ AvARRAY(av) = ary;
+ AvALLOC(av) = ary;
+ }
}
AvFILLp(av) = 1;
@@ -1217,7 +1154,7 @@ S_sortcv_xsub(pTHX_ SV *const a, SV *const b)
}
-static I32
+PERL_STATIC_FORCE_INLINE I32
S_sv_ncmp(pTHX_ SV *const a, SV *const b)
{
I32 cmp = do_ncmp(a, b);
@@ -1225,14 +1162,22 @@ S_sv_ncmp(pTHX_ SV *const a, SV *const b)
PERL_ARGS_ASSERT_SV_NCMP;
if (cmp == 2) {
- if (ckWARN(WARN_UNINITIALIZED)) report_uninit(NULL);
- return 0;
+ if (ckWARN(WARN_UNINITIALIZED)) report_uninit(NULL);
+ return 0;
}
return cmp;
}
-static I32
+PERL_STATIC_FORCE_INLINE I32
+S_sv_ncmp_desc(pTHX_ SV *const a, SV *const b)
+{
+ PERL_ARGS_ASSERT_SV_NCMP_DESC;
+
+ return -S_sv_ncmp(aTHX_ a, b);
+}
+
+PERL_STATIC_FORCE_INLINE I32
S_sv_i_ncmp(pTHX_ SV *const a, SV *const b)
{
const IV iv1 = SvIV(a);
@@ -1243,14 +1188,22 @@ S_sv_i_ncmp(pTHX_ SV *const a, SV *const b)
return iv1 < iv2 ? -1 : iv1 > iv2 ? 1 : 0;
}
+PERL_STATIC_FORCE_INLINE I32
+S_sv_i_ncmp_desc(pTHX_ SV *const a, SV *const b)
+{
+ PERL_ARGS_ASSERT_SV_I_NCMP_DESC;
+
+ return -S_sv_i_ncmp(aTHX_ a, b);
+}
+
#define tryCALL_AMAGICbin(left,right,meth) \
(SvAMAGIC(left)||SvAMAGIC(right)) \
- ? amagic_call(left, right, meth, 0) \
- : NULL;
+ ? amagic_call(left, right, meth, 0) \
+ : NULL;
#define SORT_NORMAL_RETURN_VALUE(val) (((val) > 0) ? 1 : ((val) ? -1 : 0))
-static I32
+PERL_STATIC_FORCE_INLINE I32
S_amagic_ncmp(pTHX_ SV *const a, SV *const b)
{
SV * const tmpsv = tryCALL_AMAGICbin(a,b,ncmp_amg);
@@ -1262,15 +1215,23 @@ S_amagic_ncmp(pTHX_ SV *const a, SV *const b)
const I32 i = SvIVX(tmpsv);
return SORT_NORMAL_RETURN_VALUE(i);
}
- else {
- const NV d = SvNV(tmpsv);
- return SORT_NORMAL_RETURN_VALUE(d);
- }
+ else {
+ const NV d = SvNV(tmpsv);
+ return SORT_NORMAL_RETURN_VALUE(d);
+ }
}
return S_sv_ncmp(aTHX_ a, b);
}
-static I32
+PERL_STATIC_FORCE_INLINE I32
+S_amagic_ncmp_desc(pTHX_ SV *const a, SV *const b)
+{
+ PERL_ARGS_ASSERT_AMAGIC_NCMP_DESC;
+
+ return -S_amagic_ncmp(aTHX_ a, b);
+}
+
+PERL_STATIC_FORCE_INLINE I32
S_amagic_i_ncmp(pTHX_ SV *const a, SV *const b)
{
SV * const tmpsv = tryCALL_AMAGICbin(a,b,ncmp_amg);
@@ -1282,15 +1243,23 @@ S_amagic_i_ncmp(pTHX_ SV *const a, SV *const b)
const I32 i = SvIVX(tmpsv);
return SORT_NORMAL_RETURN_VALUE(i);
}
- else {
- const NV d = SvNV(tmpsv);
- return SORT_NORMAL_RETURN_VALUE(d);
- }
+ else {
+ const NV d = SvNV(tmpsv);
+ return SORT_NORMAL_RETURN_VALUE(d);
+ }
}
return S_sv_i_ncmp(aTHX_ a, b);
}
-static I32
+PERL_STATIC_FORCE_INLINE I32
+S_amagic_i_ncmp_desc(pTHX_ SV *const a, SV *const b)
+{
+ PERL_ARGS_ASSERT_AMAGIC_I_NCMP_DESC;
+
+ return -S_amagic_i_ncmp(aTHX_ a, b);
+}
+
+PERL_STATIC_FORCE_INLINE I32
S_amagic_cmp(pTHX_ SV *const str1, SV *const str2)
{
SV * const tmpsv = tryCALL_AMAGICbin(str1,str2,scmp_amg);
@@ -1302,17 +1271,33 @@ S_amagic_cmp(pTHX_ SV *const str1, SV *const str2)
const I32 i = SvIVX(tmpsv);
return SORT_NORMAL_RETURN_VALUE(i);
}
- else {
- const NV d = SvNV(tmpsv);
- return SORT_NORMAL_RETURN_VALUE(d);
- }
+ else {
+ const NV d = SvNV(tmpsv);
+ return SORT_NORMAL_RETURN_VALUE(d);
+ }
}
return sv_cmp(str1, str2);
}
+PERL_STATIC_FORCE_INLINE I32
+S_amagic_cmp_desc(pTHX_ SV *const str1, SV *const str2)
+{
+ PERL_ARGS_ASSERT_AMAGIC_CMP_DESC;
+
+ return -S_amagic_cmp(aTHX_ str1, str2);
+}
+
+PERL_STATIC_FORCE_INLINE I32
+S_cmp_desc(pTHX_ SV *const str1, SV *const str2)
+{
+ PERL_ARGS_ASSERT_CMP_DESC;
+
+ return -sv_cmp(str1, str2);
+}
+
#ifdef USE_LOCALE_COLLATE
-static I32
+PERL_STATIC_FORCE_INLINE I32
S_amagic_cmp_locale(pTHX_ SV *const str1, SV *const str2)
{
SV * const tmpsv = tryCALL_AMAGICbin(str1,str2,scmp_amg);
@@ -1324,14 +1309,30 @@ S_amagic_cmp_locale(pTHX_ SV *const str1, SV *const str2)
const I32 i = SvIVX(tmpsv);
return SORT_NORMAL_RETURN_VALUE(i);
}
- else {
- const NV d = SvNV(tmpsv);
- return SORT_NORMAL_RETURN_VALUE(d);
- }
+ else {
+ const NV d = SvNV(tmpsv);
+ return SORT_NORMAL_RETURN_VALUE(d);
+ }
}
return sv_cmp_locale(str1, str2);
}
+PERL_STATIC_FORCE_INLINE I32
+S_amagic_cmp_locale_desc(pTHX_ SV *const str1, SV *const str2)
+{
+ PERL_ARGS_ASSERT_AMAGIC_CMP_LOCALE_DESC;
+
+ return -S_amagic_cmp_locale(aTHX_ str1, str2);
+}
+
+PERL_STATIC_FORCE_INLINE I32
+S_cmp_locale_desc(pTHX_ SV *const str1, SV *const str2)
+{
+ PERL_ARGS_ASSERT_CMP_LOCALE_DESC;
+
+ return -sv_cmp_locale(str1, str2);
+}
+
#endif
/*
diff --git a/gnu/usr.bin/perl/pp_sys.c b/gnu/usr.bin/perl/pp_sys.c
index 304e1b50f8d..a431bbe30ba 100644
--- a/gnu/usr.bin/perl/pp_sys.c
+++ b/gnu/usr.bin/perl/pp_sys.c
@@ -498,7 +498,7 @@ PP(pp_die)
}
}
}
- else if (SvPOK(errsv) && SvCUR(errsv)) {
+ else if (SvOK(errsv) && (SvPV_nomg(errsv,len), len)) {
exsv = sv_mortalcopy(errsv);
sv_catpvs(exsv, "\t...propagated");
}
@@ -2179,9 +2179,9 @@ PP(pp_tell)
}
#if LSEEKSIZE > IVSIZE
- PUSHn( do_tell(gv) );
+ PUSHn( (NV)do_tell(gv) );
#else
- PUSHi( do_tell(gv) );
+ PUSHi( (IV)do_tell(gv) );
#endif
RETURN;
}
@@ -2763,9 +2763,13 @@ PP(pp_getpeername)
if (!IoIFP(io))
goto nuts;
- sv = sv_2mortal(newSV(257));
- (void)SvPOK_only(sv);
+#ifdef HAS_SOCKADDR_STORAGE
+ len = sizeof(struct sockaddr_storage);
+#else
len = 256;
+#endif
+ sv = sv_2mortal(newSV(len+1));
+ (void)SvPOK_only(sv);
SvCUR_set(sv, len);
*SvEND(sv) ='\0';
fd = PerlIO_fileno(IoIFP(io));
@@ -4619,6 +4623,11 @@ PP(pp_setpgrp)
#endif
}
+/*
+ * The glibc headers typedef __priority_which_t to an enum under C, but
+ * under C++, it keeps it as int. -Wc++-compat doesn't know this, so we
+ * need to explicitly cast it to shut up the warning.
+ */
#if defined(__GLIBC__) && ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || (__GLIBC__ > 2))
# define PRIORITY_WHICH_T(which) (__priority_which_t)which
#else
@@ -4661,9 +4670,9 @@ PP(pp_time)
{
dSP; dTARGET;
#ifdef BIG_TIME
- XPUSHn( time(NULL) );
+ XPUSHn( (NV)time(NULL) );
#else
- XPUSHi( time(NULL) );
+ XPUSHu( (UV)time(NULL) );
#endif
RETURN;
}
@@ -4863,7 +4872,7 @@ PP(pp_sleep)
}
}
(void)time(&when);
- XPUSHi(when - lasttime);
+ XPUSHu((UV)(when - lasttime));
RETURN;
}
@@ -5279,8 +5288,8 @@ PP(pp_shostent)
DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
#endif
break;
-#ifdef HAS_SETNETENT
case OP_SNETENT:
+#ifdef HAS_SETNETENT
PerlSock_setnetent(stayopen);
#else
DIE(aTHX_ PL_no_sock_func, PL_op_desc[PL_op->op_type]);
@@ -5432,7 +5441,7 @@ PP(pp_gpwent)
* it is only included in special cases.
*
* In Digital UNIX/Tru64 if using the getespw*() (which seems to be
- * be preferred interface, even though also the getprpw*() interface
+ * the preferred interface, even though also the getprpw*() interface
* is available) one needs to link with -lsecurity -ldb -laud -lm.
* One also needs to call set_auth_parameters() in main() before
* doing anything else, whether one is using getespw*() or getprpw*().
diff --git a/gnu/usr.bin/perl/proto.h b/gnu/usr.bin/perl/proto.h
index d3fecc05d1b..02ef4edb3b8 100644
--- a/gnu/usr.bin/perl/proto.h
+++ b/gnu/usr.bin/perl/proto.h
@@ -22,8 +22,19 @@ PERL_CALLCONV UV ASCII_TO_NEED(const UV enc, const UV ch)
__attribute__deprecated__
__attribute__warn_unused_result__
__attribute__pure__;
+#define PERL_ARGS_ASSERT_ASCII_TO_NEED
#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE I32 * Perl_CvDEPTH(const CV * const sv);
+#define PERL_ARGS_ASSERT_CVDEPTH \
+ assert(sv)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE GV * Perl_CvGV(pTHX_ CV *sv);
+#define PERL_ARGS_ASSERT_CVGV \
+ assert(sv)
+#endif
PERL_CALLCONV int Perl_Gv_AMupdate(pTHX_ HV* stash, bool destructing);
#define PERL_ARGS_ASSERT_GV_AMUPDATE \
assert(stash)
@@ -32,12 +43,20 @@ PERL_CALLCONV UV NATIVE_TO_NEED(const UV enc, const UV ch)
__attribute__deprecated__
__attribute__warn_unused_result__
__attribute__pure__;
+#define PERL_ARGS_ASSERT_NATIVE_TO_NEED
#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE I32 Perl_POPMARK(pTHX);
+#define PERL_ARGS_ASSERT_POPMARK
+#endif
PERL_CALLCONV const char * Perl_PerlIO_context_layers(pTHX_ const char *mode);
+#define PERL_ARGS_ASSERT_PERLIO_CONTEXT_LAYERS
PERL_CALLCONV int Perl_PerlLIO_dup2_cloexec(pTHX_ int oldfd, int newfd);
+#define PERL_ARGS_ASSERT_PERLLIO_DUP2_CLOEXEC
PERL_CALLCONV int Perl_PerlLIO_dup_cloexec(pTHX_ int oldfd)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_PERLLIO_DUP_CLOEXEC
PERL_CALLCONV int Perl_PerlLIO_open3_cloexec(pTHX_ const char *file, int flag, int perm)
__attribute__warn_unused_result__;
@@ -49,110 +68,125 @@ PERL_CALLCONV int Perl_PerlLIO_open_cloexec(pTHX_ const char *file, int flag)
#define PERL_ARGS_ASSERT_PERLLIO_OPEN_CLOEXEC \
assert(file)
+/* PERL_CALLCONV const XOP * Perl_custom_op_xop(pTHX_ const OP *o); */
+#define PERL_ARGS_ASSERT_PERL_CUSTOM_OP_XOP
PERL_CALLCONV const char* Perl_setlocale(const int category, const char* locale);
+#define PERL_ARGS_ASSERT_PERL_SETLOCALE
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE struct regexp * Perl_ReANY(const REGEXP * const re);
+#define PERL_ARGS_ASSERT_REANY \
+ assert(re)
+#endif
PERL_CALLCONV void* Perl_Slab_Alloc(pTHX_ size_t sz)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SLAB_ALLOC
PERL_CALLCONV void Perl_Slab_Free(pTHX_ void *op);
#define PERL_ARGS_ASSERT_SLAB_FREE \
assert(op)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void Perl_SvAMAGIC_off(SV *sv);
+#define PERL_ARGS_ASSERT_SVAMAGIC_OFF \
+ assert(sv)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void Perl_SvAMAGIC_on(SV *sv);
+#define PERL_ARGS_ASSERT_SVAMAGIC_ON \
+ assert(sv)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void Perl_SvREFCNT_dec(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SVREFCNT_DEC
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void Perl_SvREFCNT_dec_NN(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SVREFCNT_DEC_NN \
+ assert(sv)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE SV * Perl_SvREFCNT_inc(SV *sv);
+#define PERL_ARGS_ASSERT_SVREFCNT_INC
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE SV * Perl_SvREFCNT_inc_NN(SV *sv);
+#define PERL_ARGS_ASSERT_SVREFCNT_INC_NN \
+ assert(sv)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void Perl_SvREFCNT_inc_void(SV *sv);
+#define PERL_ARGS_ASSERT_SVREFCNT_INC_VOID
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE I32 Perl_TOPMARK(pTHX);
+#define PERL_ARGS_ASSERT_TOPMARK
+#endif
PERL_CALLCONV char * Perl__byte_dump_string(pTHX_ const U8 * const start, const STRLEN len, const bool format);
#define PERL_ARGS_ASSERT__BYTE_DUMP_STRING \
assert(start)
PERL_CALLCONV void Perl__force_out_malformed_utf8_message(pTHX_ const U8 *const p, const U8 * const e, const U32 flags, const bool die_here);
#define PERL_ARGS_ASSERT__FORCE_OUT_MALFORMED_UTF8_MESSAGE \
assert(p); assert(e)
-PERL_CALLCONV Size_t Perl__inverse_folds(pTHX_ const UV cp, unsigned int * first_folds_to, const unsigned int ** remaining_folds_to)
+PERL_CALLCONV Size_t Perl__inverse_folds(pTHX_ const UV cp, U32 * first_folds_to, const U32 ** remaining_folds_to)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT__INVERSE_FOLDS \
assert(first_folds_to); assert(remaining_folds_to)
PERL_CALLCONV bool Perl__is_in_locale_category(pTHX_ const bool compiling, const int category);
+#define PERL_ARGS_ASSERT__IS_IN_LOCALE_CATEGORY
PERL_CALLCONV bool Perl__is_uni_FOO(pTHX_ const U8 classnum, const UV c)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT__IS_UNI_FOO
PERL_CALLCONV bool Perl__is_uni_perl_idcont(pTHX_ UV c)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT__IS_UNI_PERL_IDCONT
PERL_CALLCONV bool Perl__is_uni_perl_idstart(pTHX_ UV c)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT__IS_UNI_PERL_IDSTART
-PERL_CALLCONV bool Perl__is_utf8_FOO(pTHX_ U8 classnum, const U8 * const p, const char * const name, const char * const alternative, const bool use_utf8, const bool use_locale, const char * const file, const unsigned line)
+PERL_CALLCONV bool Perl__is_utf8_FOO(pTHX_ const U8 classnum, const U8 *p, const U8 * const e)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT__IS_UTF8_FOO \
- assert(p); assert(name); assert(alternative); assert(file)
-
-PERL_CALLCONV bool Perl__is_utf8_FOO_with_len(pTHX_ const U8 classnum, const U8 *p, const U8 * const e)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT__IS_UTF8_FOO_WITH_LEN \
assert(p); assert(e)
-PERL_CALLCONV STRLEN Perl__is_utf8_char_helper(const U8 * const s, const U8 * e, const U32 flags)
- __attribute__warn_unused_result__
- __attribute__pure__;
-#define PERL_ARGS_ASSERT__IS_UTF8_CHAR_HELPER \
- assert(s); assert(e)
-
-PERL_CALLCONV bool Perl__is_utf8_idcont(pTHX_ const U8 *p)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT__IS_UTF8_IDCONT \
- assert(p)
-
-PERL_CALLCONV bool Perl__is_utf8_idstart(pTHX_ const U8 *p)
+PERL_CALLCONV bool Perl__is_utf8_perl_idcont(pTHX_ const U8 *p, const U8 * const e)
__attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT__IS_UTF8_IDSTART \
- assert(p)
-
-PERL_CALLCONV bool Perl__is_utf8_mark(pTHX_ const U8 *p)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT__IS_UTF8_MARK \
- assert(p)
-
-PERL_CALLCONV bool Perl__is_utf8_perl_idcont_with_len(pTHX_ const U8 *p, const U8 * const e)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT__IS_UTF8_PERL_IDCONT_WITH_LEN \
+#define PERL_ARGS_ASSERT__IS_UTF8_PERL_IDCONT \
assert(p); assert(e)
-PERL_CALLCONV bool Perl__is_utf8_perl_idstart_with_len(pTHX_ const U8 *p, const U8 * const e)
+PERL_CALLCONV bool Perl__is_utf8_perl_idstart(pTHX_ const U8 *p, const U8 * const e)
__attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT__IS_UTF8_PERL_IDSTART_WITH_LEN \
+#define PERL_ARGS_ASSERT__IS_UTF8_PERL_IDSTART \
assert(p); assert(e)
-PERL_CALLCONV bool Perl__is_utf8_xidcont(pTHX_ const U8 *p)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT__IS_UTF8_XIDCONT \
- assert(p)
-
-PERL_CALLCONV bool Perl__is_utf8_xidstart(pTHX_ const U8 *p)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT__IS_UTF8_XIDSTART \
- assert(p)
-
PERL_CALLCONV UV Perl__to_uni_fold_flags(pTHX_ UV c, U8 *p, STRLEN *lenp, U8 flags);
#define PERL_ARGS_ASSERT__TO_UNI_FOLD_FLAGS \
assert(p); assert(lenp)
-PERL_CALLCONV UV Perl__to_utf8_fold_flags(pTHX_ const U8 *p, const U8 *e, U8* ustrp, STRLEN *lenp, U8 flags, const char * const file, const int line);
+PERL_CALLCONV UV Perl__to_utf8_fold_flags(pTHX_ const U8 *p, const U8 *e, U8* ustrp, STRLEN *lenp, U8 flags);
#define PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS \
- assert(p); assert(ustrp); assert(file)
-PERL_CALLCONV UV Perl__to_utf8_lower_flags(pTHX_ const U8 *p, const U8* e, U8* ustrp, STRLEN *lenp, bool flags, const char * const file, const int line);
+ assert(p); assert(ustrp)
+PERL_CALLCONV UV Perl__to_utf8_lower_flags(pTHX_ const U8 *p, const U8* e, U8* ustrp, STRLEN *lenp, bool flags);
#define PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS \
- assert(p); assert(ustrp); assert(file)
-PERL_CALLCONV UV Perl__to_utf8_title_flags(pTHX_ const U8 *p, const U8* e, U8* ustrp, STRLEN *lenp, bool flags, const char * const file, const int line);
+ assert(p); assert(ustrp)
+PERL_CALLCONV UV Perl__to_utf8_title_flags(pTHX_ const U8 *p, const U8* e, U8* ustrp, STRLEN *lenp, bool flags);
#define PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS \
- assert(p); assert(ustrp); assert(file)
-PERL_CALLCONV UV Perl__to_utf8_upper_flags(pTHX_ const U8 *p, const U8 *e, U8* ustrp, STRLEN *lenp, bool flags, const char * const file, const int line);
+ assert(p); assert(ustrp)
+PERL_CALLCONV UV Perl__to_utf8_upper_flags(pTHX_ const U8 *p, const U8 *e, U8* ustrp, STRLEN *lenp, bool flags);
#define PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS \
- assert(p); assert(ustrp); assert(file)
+ assert(p); assert(ustrp)
PERL_CALLCONV UV Perl__utf8n_to_uvchr_msgs_helper(const U8 *s, STRLEN curlen, STRLEN *retlen, const U32 flags, U32 * errors, AV ** msgs);
#define PERL_ARGS_ASSERT__UTF8N_TO_UVCHR_MSGS_HELPER \
assert(s)
PERL_CALLCONV void Perl__warn_problematic_locale(void);
+#define PERL_ARGS_ASSERT__WARN_PROBLEMATIC_LOCALE
PERL_CALLCONV_NO_RET void Perl_abort_execution(pTHX_ const char * const msg, const char * const name)
__attribute__noreturn__;
#define PERL_ARGS_ASSERT_ABORT_EXECUTION \
assert(msg); assert(name)
PERL_CALLCONV LOGOP* Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP *other);
+#define PERL_ARGS_ASSERT_ALLOC_LOGOP
PERL_CALLCONV PADOFFSET Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags);
#define PERL_ARGS_ASSERT_ALLOCMY \
assert(name)
@@ -163,8 +197,9 @@ PERL_CALLCONV SV * Perl_amagic_deref_call(pTHX_ SV *ref, int method);
#define PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL \
assert(ref)
PERL_CALLCONV bool Perl_amagic_is_enabled(pTHX_ int method);
+#define PERL_ARGS_ASSERT_AMAGIC_IS_ENABLED
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_append_utf8_from_native_byte(const U8 byte, U8** dest);
+PERL_STATIC_INLINE void Perl_append_utf8_from_native_byte(const U8 byte, U8** dest);
#define PERL_ARGS_ASSERT_APPEND_UTF8_FROM_NATIVE_BYTE \
assert(dest)
#endif
@@ -175,7 +210,9 @@ PERL_CALLCONV void Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv, co
#define PERL_ARGS_ASSERT_APPLY_ATTRS_STRING \
assert(stashpv); assert(cv); assert(attrstr)
PERL_CALLCONV void Perl_atfork_lock(void);
+#define PERL_ARGS_ASSERT_ATFORK_LOCK
PERL_CALLCONV void Perl_atfork_unlock(void);
+#define PERL_ARGS_ASSERT_ATFORK_UNLOCK
PERL_CALLCONV SV** Perl_av_arylen_p(pTHX_ AV *av);
#define PERL_ARGS_ASSERT_AV_ARYLEN_P \
assert(av)
@@ -243,11 +280,12 @@ PERL_CALLCONV SV* Perl_av_shift(pTHX_ AV *av)
PERL_CALLCONV SV** Perl_av_store(pTHX_ AV *av, SSize_t key, SV *val);
#define PERL_ARGS_ASSERT_AV_STORE \
assert(av)
-/* PERL_CALLCONV SSize_t Perl_av_tindex(pTHX_ AV *av)
+/* PERL_CALLCONV SSize_t av_tindex(pTHX_ AV *av)
__attribute__warn_unused_result__; */
+#define PERL_ARGS_ASSERT_AV_TINDEX
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE SSize_t S_av_top_index(pTHX_ AV *av)
+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)
@@ -266,19 +304,25 @@ PERL_CALLCONV OP* Perl_bind_match(pTHX_ I32 type, OP *left, OP *right)
PERL_CALLCONV OP* Perl_block_end(pTHX_ I32 floor, OP* seq)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_BLOCK_END
PERL_CALLCONV U8 Perl_block_gimme(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_BLOCK_GIMME
PERL_CALLCONV int Perl_block_start(pTHX_ int full)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_BLOCK_START
PERL_CALLCONV void Perl_blockhook_register(pTHX_ BHK *hk);
#define PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER \
assert(hk)
PERL_CALLCONV void Perl_boot_core_PerlIO(pTHX);
+#define PERL_ARGS_ASSERT_BOOT_CORE_PERLIO
PERL_CALLCONV void Perl_boot_core_UNIVERSAL(pTHX);
+#define PERL_ARGS_ASSERT_BOOT_CORE_UNIVERSAL
PERL_CALLCONV void Perl_boot_core_mro(pTHX);
+#define PERL_ARGS_ASSERT_BOOT_CORE_MRO
PERL_CALLCONV int Perl_bytes_cmp_utf8(pTHX_ const U8 *b, STRLEN blen, const U8 *u, STRLEN ulen);
#define PERL_ARGS_ASSERT_BYTES_CMP_UTF8 \
assert(b); assert(u)
@@ -295,6 +339,7 @@ PERL_CALLCONV I32 Perl_call_argv(pTHX_ const char* sub_name, I32 flags, char** a
#define PERL_ARGS_ASSERT_CALL_ARGV \
assert(sub_name); assert(argv)
PERL_CALLCONV void Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr);
+#define PERL_ARGS_ASSERT_CALL_ATEXIT
PERL_CALLCONV void Perl_call_list(pTHX_ I32 oldscope, AV *paramList);
#define PERL_ARGS_ASSERT_CALL_LIST \
assert(paramList)
@@ -308,9 +353,11 @@ PERL_CALLCONV I32 Perl_call_sv(pTHX_ SV* sv, volatile I32 flags);
#define PERL_ARGS_ASSERT_CALL_SV \
assert(sv)
PERL_CALLCONV const PERL_CONTEXT * Perl_caller_cx(pTHX_ I32 level, const PERL_CONTEXT **dbcxp);
+#define PERL_ARGS_ASSERT_CALLER_CX
PERL_CALLCONV Malloc_t Perl_calloc(MEM_SIZE elements, MEM_SIZE size)
__attribute__malloc__
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CALLOC
PERL_CALLCONV bool Perl_cando(pTHX_ Mode_t mode, bool effective, const Stat_t* statbufp)
__attribute__warn_unused_result__;
@@ -319,15 +366,19 @@ PERL_CALLCONV bool Perl_cando(pTHX_ Mode_t mode, bool effective, const Stat_t* s
PERL_CALLCONV I32 Perl_cast_i32(NV f)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CAST_I32
PERL_CALLCONV IV Perl_cast_iv(NV f)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CAST_IV
PERL_CALLCONV U32 Perl_cast_ulong(NV f)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CAST_ULONG
PERL_CALLCONV UV Perl_cast_uv(NV f)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CAST_UV
PERL_CALLCONV bool Perl_check_utf8_print(pTHX_ const U8 *s, const STRLEN len);
#define PERL_ARGS_ASSERT_CHECK_UTF8_PRINT \
@@ -429,6 +480,11 @@ PERL_CALLCONV OP * Perl_ck_index(pTHX_ OP *o)
#define PERL_ARGS_ASSERT_CK_INDEX \
assert(o)
+PERL_CALLCONV OP * Perl_ck_isa(pTHX_ OP *o)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CK_ISA \
+ assert(o)
+
PERL_CALLCONV OP * Perl_ck_join(pTHX_ OP *o)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_CK_JOIN \
@@ -587,10 +643,12 @@ PERL_CALLCONV void Perl_ck_warner_d(pTHX_ U32 err, const char* pat, ...)
PERL_CALLCONV bool Perl_ckwarn(pTHX_ U32 w)
__attribute__warn_unused_result__
__attribute__pure__;
+#define PERL_ARGS_ASSERT_CKWARN
PERL_CALLCONV bool Perl_ckwarn_d(pTHX_ U32 w)
__attribute__warn_unused_result__
__attribute__pure__;
+#define PERL_ARGS_ASSERT_CKWARN_D
PERL_CALLCONV void Perl_clear_defarray(pTHX_ AV* av, bool abandon);
#define PERL_ARGS_ASSERT_CLEAR_DEFARRAY \
@@ -598,6 +656,24 @@ PERL_CALLCONV void Perl_clear_defarray(pTHX_ AV* av, bool abandon);
PERL_CALLCONV const COP* Perl_closest_cop(pTHX_ const COP *cop, const OP *o, const OP *curop, bool opnext);
#define PERL_ARGS_ASSERT_CLOSEST_COP \
assert(cop)
+PERL_CALLCONV OP* Perl_cmpchain_extend(pTHX_ I32 type, OP* ch, OP* right)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CMPCHAIN_EXTEND \
+ assert(ch)
+
+PERL_CALLCONV OP* Perl_cmpchain_finish(pTHX_ OP* ch)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CMPCHAIN_FINISH \
+ assert(ch)
+
+PERL_CALLCONV OP* Perl_cmpchain_start(pTHX_ I32 type, OP* left, OP* right)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CMPCHAIN_START
+
+PERL_CALLCONV const char * Perl_cntrl_to_mnemonic(const U8 c)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CNTRL_TO_MNEMONIC
+
PERL_CALLCONV const char * Perl_cop_fetch_label(pTHX_ COP *const cop, STRLEN *len, U32 *flags);
#define PERL_ARGS_ASSERT_COP_FETCH_LABEL \
assert(cop)
@@ -611,25 +687,32 @@ PERL_CALLCONV OP * Perl_coresub_op(pTHX_ SV *const coreargssv, const int code, c
#define PERL_ARGS_ASSERT_CORESUB_OP \
assert(coreargssv)
PERL_CALLCONV void Perl_create_eval_scope(pTHX_ OP *retop, U32 flags);
+#define PERL_ARGS_ASSERT_CREATE_EVAL_SCOPE
PERL_CALLCONV_NO_RET void Perl_croak(pTHX_ const char* pat, ...)
__attribute__noreturn__
__attribute__format__null_ok__(__printf__,pTHX_1,pTHX_2);
+#define PERL_ARGS_ASSERT_CROAK
PERL_CALLCONV_NO_RET void Perl_croak_caller(const char* pat, ...)
__attribute__noreturn__
__attribute__format__null_ok__(__printf__,1,2);
+#define PERL_ARGS_ASSERT_CROAK_CALLER
-PERL_STATIC_NO_RET void S_croak_memory_wrap(void)
+PERL_CALLCONV_NO_RET void Perl_croak_memory_wrap(void)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_CROAK_MEMORY_WRAP
PERL_CALLCONV_NO_RET void Perl_croak_no_mem(void)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_CROAK_NO_MEM
PERL_CALLCONV_NO_RET void Perl_croak_no_modify(void)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_CROAK_NO_MODIFY
PERL_CALLCONV_NO_RET void Perl_croak_popstack(void)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_CROAK_POPSTACK
PERL_CALLCONV_NO_RET void Perl_croak_sv(pTHX_ SV *baseex)
__attribute__noreturn__;
@@ -641,9 +724,15 @@ PERL_CALLCONV_NO_RET void Perl_croak_xs_usage(const CV *const cv, const char *co
#define PERL_ARGS_ASSERT_CROAK_XS_USAGE \
assert(cv); assert(params)
+PERL_CALLCONV Signal_t Perl_csighandler1(int sig);
+#define PERL_ARGS_ASSERT_CSIGHANDLER1
+PERL_CALLCONV Signal_t Perl_csighandler3(int sig, Siginfo_t *info, void *uap);
+#define PERL_ARGS_ASSERT_CSIGHANDLER3
PERL_CALLCONV regexp_engine const * Perl_current_re_engine(pTHX);
+#define PERL_ARGS_ASSERT_CURRENT_RE_ENGINE
#ifndef NO_MATHOMS
PERL_CALLCONV const char * Perl_custom_op_desc(pTHX_ const OP *o)
+ __attribute__deprecated__
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_CUSTOM_OP_DESC \
assert(o)
@@ -656,6 +745,7 @@ PERL_CALLCONV XOPRETANY Perl_custom_op_get_field(pTHX_ const OP *o, const xop_fl
#ifndef NO_MATHOMS
PERL_CALLCONV const char * Perl_custom_op_name(pTHX_ const OP *o)
+ __attribute__deprecated__
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_CUSTOM_OP_NAME \
assert(o)
@@ -664,7 +754,6 @@ PERL_CALLCONV const char * Perl_custom_op_name(pTHX_ const OP *o)
PERL_CALLCONV void Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop);
#define PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER \
assert(ppaddr); assert(xop)
-/* PERL_CALLCONV const XOP * Perl_custom_op_xop(pTHX_ const OP *o); */
PERL_CALLCONV void Perl_cv_ckproto_len_flags(pTHX_ const CV* cv, const GV* gv, const char* p, const STRLEN len, const U32 flags);
#define PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS \
assert(cv)
@@ -676,11 +765,14 @@ PERL_CALLCONV CV* Perl_cv_clone_into(pTHX_ CV* proto, CV *target);
assert(proto); assert(target)
PERL_CALLCONV SV* Perl_cv_const_sv(const CV *const cv)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CV_CONST_SV
PERL_CALLCONV SV* Perl_cv_const_sv_or_av(const CV *const cv)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CV_CONST_SV_OR_AV
PERL_CALLCONV void Perl_cv_forget_slab(pTHX_ CV *cv);
+#define PERL_ARGS_ASSERT_CV_FORGET_SLAB
PERL_CALLCONV void Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p);
#define PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER \
assert(cv); assert(ckfun_p); assert(ckobj_p)
@@ -716,6 +808,7 @@ PERL_CALLCONV void Perl_cx_dump(pTHX_ PERL_CONTEXT* cx);
assert(cx)
PERL_CALLCONV I32 Perl_cxinc(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_CXINC
PERL_CALLCONV void Perl_deb(pTHX_ const char* pat, ...)
__attribute__format__(__printf__,pTHX_1,pTHX_2);
@@ -723,18 +816,23 @@ PERL_CALLCONV void Perl_deb(pTHX_ const char* pat, ...)
assert(pat)
PERL_CALLCONV void Perl_deb_stack_all(pTHX);
+#define PERL_ARGS_ASSERT_DEB_STACK_ALL
PERL_CALLCONV I32 Perl_debop(pTHX_ const OP* o);
#define PERL_ARGS_ASSERT_DEBOP \
assert(o)
PERL_CALLCONV void Perl_debprofdump(pTHX);
+#define PERL_ARGS_ASSERT_DEBPROFDUMP
PERL_CALLCONV I32 Perl_debstack(pTHX);
+#define PERL_ARGS_ASSERT_DEBSTACK
PERL_CALLCONV I32 Perl_debstackptrs(pTHX);
+#define PERL_ARGS_ASSERT_DEBSTACKPTRS
PERL_CALLCONV SV * Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DEFELEM_TARGET \
assert(sv)
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);
#define PERL_ARGS_ASSERT_DELIMCPY \
assert(to); assert(toend); assert(from); assert(fromend); assert(retlen)
@@ -742,9 +840,11 @@ PERL_CALLCONV char* Perl_delimcpy_no_escape(char* to, const char* toend, const c
#define PERL_ARGS_ASSERT_DELIMCPY_NO_ESCAPE \
assert(to); assert(toend); assert(from); assert(fromend); 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, ...)
__attribute__noreturn__
__attribute__format__null_ok__(__printf__,pTHX_1,pTHX_2);
+#define PERL_ARGS_ASSERT_DIE
PERL_CALLCONV_NO_RET OP* Perl_die_sv(pTHX_ SV *baseex)
__attribute__noreturn__;
@@ -765,11 +865,14 @@ PERL_CALLCONV bool Perl_do_aexec5(pTHX_ SV* really, SV** mark, SV** sp, int fd,
#define PERL_ARGS_ASSERT_DO_AEXEC5 \
assert(mark); assert(sp)
#ifndef NO_MATHOMS
-PERL_CALLCONV int Perl_do_binmode(pTHX_ PerlIO *fp, int iotype, int mode);
+PERL_CALLCONV int Perl_do_binmode(pTHX_ PerlIO *fp, int iotype, int mode)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_DO_BINMODE \
assert(fp)
#endif
+
PERL_CALLCONV bool Perl_do_close(pTHX_ GV* gv, bool not_implicit);
+#define PERL_ARGS_ASSERT_DO_CLOSE
PERL_CALLCONV void Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full);
#define PERL_ARGS_ASSERT_DO_DUMP_PAD \
assert(file)
@@ -808,10 +911,12 @@ PERL_CALLCONV bool Perl_do_open6(pTHX_ GV *gv, const char *oname, STRLEN len, Pe
#define PERL_ARGS_ASSERT_DO_OPEN6 \
assert(gv); assert(oname)
#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_do_open9(pTHX_ GV *gv, const char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs, I32 num);
+PERL_CALLCONV bool Perl_do_open9(pTHX_ GV *gv, const char *name, I32 len, int as_raw, int rawmode, int rawperm, PerlIO *supplied_fp, SV *svs, I32 num)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_DO_OPEN9 \
assert(gv); assert(name); assert(svs)
#endif
+
PERL_CALLCONV bool Perl_do_open_raw(pTHX_ GV *gv, const char *oname, STRLEN len, int rawmode, int rawperm, Stat_t *statbufp);
#define PERL_ARGS_ASSERT_DO_OPEN_RAW \
assert(gv); assert(oname)
@@ -826,8 +931,10 @@ PERL_CALLCONV bool Perl_do_print(pTHX_ SV* sv, PerlIO* fp);
assert(fp)
PERL_CALLCONV OP* Perl_do_readline(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_DO_READLINE
PERL_CALLCONV bool Perl_do_seek(pTHX_ GV* gv, Off_t pos, int whence);
+#define PERL_ARGS_ASSERT_DO_SEEK
PERL_CALLCONV void Perl_do_sprintf(pTHX_ SV* sv, SSize_t len, SV** sarg);
#define PERL_ARGS_ASSERT_DO_SPRINTF \
assert(sv); assert(sarg)
@@ -845,6 +952,11 @@ PERL_CALLCONV Off_t Perl_do_tell(pTHX_ GV* gv)
PERL_CALLCONV Size_t Perl_do_trans(pTHX_ SV* sv);
#define PERL_ARGS_ASSERT_DO_TRANS \
assert(sv)
+PERL_CALLCONV I16 Perl_do_uniprop_match(const char * const key, const U16 key_len)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_DO_UNIPROP_MATCH \
+ assert(key)
+
PERL_CALLCONV UV Perl_do_vecget(pTHX_ SV* sv, STRLEN offset, int size);
#define PERL_ARGS_ASSERT_DO_VECGET \
assert(sv)
@@ -859,13 +971,16 @@ PERL_CALLCONV OP* Perl_dofile(pTHX_ OP* term, I32 force_builtin);
assert(term)
PERL_CALLCONV bool Perl_doing_taint(int argc, char** argv, char** env)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_DOING_TAINT
PERL_CALLCONV OP * Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref);
#define PERL_ARGS_ASSERT_DOREF \
assert(o)
PERL_CALLCONV void Perl_dounwind(pTHX_ I32 cxix);
+#define PERL_ARGS_ASSERT_DOUNWIND
PERL_CALLCONV U8 Perl_dowantarray(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_DOWANTARRAY
PERL_CALLCONV void Perl_drand48_init_r(perl_drand48_t *random_state, U32 seed);
#define PERL_ARGS_ASSERT_DRAND48_INIT_R \
@@ -874,8 +989,11 @@ PERL_CALLCONV double Perl_drand48_r(perl_drand48_t *random_state);
#define PERL_ARGS_ASSERT_DRAND48_R \
assert(random_state)
PERL_CALLCONV void Perl_dump_all(pTHX);
+#define PERL_ARGS_ASSERT_DUMP_ALL
PERL_CALLCONV void Perl_dump_all_perl(pTHX_ bool justperl);
+#define PERL_ARGS_ASSERT_DUMP_ALL_PERL
PERL_CALLCONV void Perl_dump_eval(pTHX);
+#define PERL_ARGS_ASSERT_DUMP_EVAL
PERL_CALLCONV void Perl_dump_form(pTHX_ const GV* gv);
#define PERL_ARGS_ASSERT_DUMP_FORM \
assert(gv)
@@ -900,6 +1018,7 @@ PERL_CALLCONV void Perl_dump_vindent(pTHX_ I32 level, PerlIO *file, const char*
#define PERL_ARGS_ASSERT_DUMP_VINDENT \
assert(file); assert(pat)
PERL_CALLCONV STRLEN* Perl_dup_warnings(pTHX_ STRLEN* warnings);
+#define PERL_ARGS_ASSERT_DUP_WARNINGS
PERL_CALLCONV void Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv);
#define PERL_ARGS_ASSERT_EMULATE_COP_IO \
assert(c); assert(sv)
@@ -917,10 +1036,8 @@ PERL_CALLCONV char* Perl_fbm_instr(pTHX_ unsigned char* big, unsigned char* bige
#define PERL_ARGS_ASSERT_FBM_INSTR \
assert(big); assert(bigend); assert(littlestr)
-PERL_CALLCONV bool Perl_feature_is_enabled(pTHX_ const char *const name, STRLEN namelen);
-#define PERL_ARGS_ASSERT_FEATURE_IS_ENABLED \
- assert(name)
PERL_CALLCONV SV* Perl_filter_add(pTHX_ filter_t funcp, SV* datasv);
+#define PERL_ARGS_ASSERT_FILTER_ADD
PERL_CALLCONV void Perl_filter_del(pTHX_ filter_t funcp);
#define PERL_ARGS_ASSERT_FILTER_DEL \
assert(funcp)
@@ -933,15 +1050,20 @@ PERL_CALLCONV void Perl_finalize_optree(pTHX_ OP* o);
#define PERL_ARGS_ASSERT_FINALIZE_OPTREE \
assert(o)
PERL_CALLCONV CV * Perl_find_lexical_cv(pTHX_ PADOFFSET off);
+#define PERL_ARGS_ASSERT_FIND_LEXICAL_CV
PERL_CALLCONV CV* Perl_find_runcv(pTHX_ U32 *db_seqp)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_FIND_RUNCV
PERL_CALLCONV CV* Perl_find_runcv_where(pTHX_ U8 cond, IV arg, U32 *db_seqp)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_FIND_RUNCV_WHERE
PERL_CALLCONV SV* Perl_find_rundefsv(pTHX);
+#define PERL_ARGS_ASSERT_FIND_RUNDEFSV
PERL_CALLCONV PADOFFSET Perl_find_rundefsvoffset(pTHX)
__attribute__deprecated__;
+#define PERL_ARGS_ASSERT_FIND_RUNDEFSVOFFSET
PERL_CALLCONV char* Perl_find_script(pTHX_ const char *scriptname, bool dosearch, const char *const *const search_ext, I32 flags);
#define PERL_ARGS_ASSERT_FIND_SCRIPT \
@@ -962,6 +1084,7 @@ PERL_STATIC_INLINE I32 Perl_foldEQ_locale(const char* a, const char* b, I32 len)
assert(a); assert(b)
#endif
/* PERL_CALLCONV I32 foldEQ_utf8(pTHX_ const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2); */
+#define PERL_ARGS_ASSERT_FOLDEQ_UTF8
PERL_CALLCONV I32 Perl_foldEQ_utf8_flags(pTHX_ const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2, U32 flags);
#define PERL_ARGS_ASSERT_FOLDEQ_UTF8_FLAGS \
assert(s1); assert(s2)
@@ -971,7 +1094,9 @@ PERL_CALLCONV char* Perl_form(pTHX_ const char* pat, ...)
assert(pat)
PERL_CALLCONV void Perl_free_tied_hv_pool(pTHX);
+#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)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_GET_AND_CHECK_BACKSLASH_N_NAME \
@@ -982,6 +1107,7 @@ PERL_CALLCONV AV* Perl_get_av(pTHX_ const char *name, I32 flags);
assert(name)
PERL_CALLCONV void* Perl_get_context(void)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_GET_CONTEXT
PERL_CALLCONV CV* Perl_get_cv(pTHX_ const char* name, I32 flags);
#define PERL_ARGS_ASSERT_GET_CV \
@@ -992,6 +1118,10 @@ PERL_CALLCONV CV* Perl_get_cvn_flags(pTHX_ const char* name, STRLEN len, I32 fla
PERL_CALLCONV void Perl_get_db_sub(pTHX_ SV **svp, CV *cv);
#define PERL_ARGS_ASSERT_GET_DB_SUB \
assert(cv)
+PERL_CALLCONV const char * Perl_get_deprecated_property_msg(const Size_t warning_offset)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_GET_DEPRECATED_PROPERTY_MSG
+
PERL_CALLCONV void Perl_get_hash_seed(pTHX_ unsigned char * const seed_buffer);
#define PERL_ARGS_ASSERT_GET_HASH_SEED \
assert(seed_buffer)
@@ -1001,41 +1131,61 @@ PERL_CALLCONV HV* Perl_get_hv(pTHX_ const char *name, I32 flags);
PERL_CALLCONV const char* Perl_get_no_modify(pTHX)
__attribute__warn_unused_result__
__attribute__pure__;
+#define PERL_ARGS_ASSERT_GET_NO_MODIFY
PERL_CALLCONV char** Perl_get_op_descs(pTHX)
__attribute__warn_unused_result__
__attribute__pure__;
+#define PERL_ARGS_ASSERT_GET_OP_DESCS
PERL_CALLCONV char** Perl_get_op_names(pTHX)
__attribute__warn_unused_result__
__attribute__pure__;
+#define PERL_ARGS_ASSERT_GET_OP_NAMES
PERL_CALLCONV U32* Perl_get_opargs(pTHX)
__attribute__warn_unused_result__
__attribute__pure__;
+#define PERL_ARGS_ASSERT_GET_OPARGS
PERL_CALLCONV PPADDR_t* Perl_get_ppaddr(pTHX)
__attribute__warn_unused_result__
__attribute__pure__;
+#define PERL_ARGS_ASSERT_GET_PPADDR
+
+PERL_CALLCONV SV * Perl_get_prop_definition(pTHX_ const int table_index)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_GET_PROP_DEFINITION
+
+PERL_CALLCONV const char * const * Perl_get_prop_values(const int table_index)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_GET_PROP_VALUES
PERL_CALLCONV REGEXP * Perl_get_re_arg(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_GET_RE_ARG
PERL_CALLCONV SV* Perl_get_sv(pTHX_ const char *name, I32 flags);
#define PERL_ARGS_ASSERT_GET_SV \
assert(name)
PERL_CALLCONV MGVTBL* Perl_get_vtbl(pTHX_ int vtbl_id)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_GET_VTBL
PERL_CALLCONV int Perl_getcwd_sv(pTHX_ SV* sv);
#define PERL_ARGS_ASSERT_GETCWD_SV \
assert(sv)
PERL_CALLCONV void Perl_gp_free(pTHX_ GV* gv);
+#define PERL_ARGS_ASSERT_GP_FREE
PERL_CALLCONV GP* Perl_gp_ref(pTHX_ GP* gp);
+#define PERL_ARGS_ASSERT_GP_REF
PERL_CALLCONV bool Perl_grok_atoUV(const char* pv, UV* valptr, const char** endptr);
#define PERL_ARGS_ASSERT_GROK_ATOUV \
assert(pv); assert(valptr)
PERL_CALLCONV UV Perl_grok_bin(pTHX_ const char* start, STRLEN* len_p, I32* flags, NV *result);
#define PERL_ARGS_ASSERT_GROK_BIN \
assert(start); assert(len_p); assert(flags)
+PERL_CALLCONV UV Perl_grok_bin_oct_hex(pTHX_ const char* start, STRLEN* len_p, I32* flags, NV *result, const unsigned shift, const U8 lookup_bit, const char prefix);
+#define PERL_ARGS_ASSERT_GROK_BIN_OCT_HEX \
+ assert(start); assert(len_p); assert(flags)
PERL_CALLCONV UV Perl_grok_hex(pTHX_ const char* start, STRLEN* len_p, I32* flags, NV *result);
#define PERL_ARGS_ASSERT_GROK_HEX \
assert(start); assert(len_p); assert(flags)
@@ -1058,16 +1208,21 @@ PERL_CALLCONV UV Perl_grok_oct(pTHX_ const char* start, STRLEN* len_p, I32* flag
assert(start); assert(len_p); assert(flags)
#ifndef NO_MATHOMS
PERL_CALLCONV GV* Perl_gv_AVadd(pTHX_ GV *gv);
+#define PERL_ARGS_ASSERT_GV_AVADD
#endif
#ifndef NO_MATHOMS
PERL_CALLCONV GV* Perl_gv_HVadd(pTHX_ GV *gv);
+#define PERL_ARGS_ASSERT_GV_HVADD
#endif
#ifndef NO_MATHOMS
PERL_CALLCONV GV* Perl_gv_IOadd(pTHX_ GV* gv);
+#define PERL_ARGS_ASSERT_GV_IOADD
#endif
PERL_CALLCONV GV* Perl_gv_add_by_type(pTHX_ GV *gv, svtype type);
+#define PERL_ARGS_ASSERT_GV_ADD_BY_TYPE
/* PERL_CALLCONV GV* gv_autoload4(pTHX_ HV* stash, const char* name, STRLEN len, I32 method)
__attribute__warn_unused_result__; */
+#define PERL_ARGS_ASSERT_GV_AUTOLOAD4
PERL_CALLCONV GV* Perl_gv_autoload_pv(pTHX_ HV* stash, const char* namepv, U32 flags)
__attribute__warn_unused_result__;
@@ -1093,11 +1248,14 @@ PERL_CALLCONV SV* Perl_gv_const_sv(pTHX_ GV* gv)
assert(gv)
PERL_CALLCONV void Perl_gv_dump(pTHX_ GV* gv);
+#define PERL_ARGS_ASSERT_GV_DUMP
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_gv_efullname(pTHX_ SV* sv, const GV* gv);
+PERL_CALLCONV void Perl_gv_efullname(pTHX_ SV* sv, const GV* gv)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_GV_EFULLNAME \
assert(sv); assert(gv)
#endif
+
#ifndef NO_MATHOMS
PERL_CALLCONV void Perl_gv_efullname3(pTHX_ SV* sv, const GV* gv, const char* prefix);
#define PERL_ARGS_ASSERT_GV_EFULLNAME3 \
@@ -1113,7 +1271,9 @@ PERL_CALLCONV GV* Perl_gv_fetchfile_flags(pTHX_ const char *const name, const ST
#define PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS \
assert(name)
/* PERL_CALLCONV GV* gv_fetchmeth(pTHX_ HV* stash, const char* name, STRLEN len, I32 level); */
+#define PERL_ARGS_ASSERT_GV_FETCHMETH
/* PERL_CALLCONV GV* gv_fetchmeth_autoload(pTHX_ HV* stash, const char* name, STRLEN len, I32 level); */
+#define PERL_ARGS_ASSERT_GV_FETCHMETH_AUTOLOAD
PERL_CALLCONV GV* Perl_gv_fetchmeth_pv(pTHX_ HV* stash, const char* name, I32 level, U32 flags);
#define PERL_ARGS_ASSERT_GV_FETCHMETH_PV \
assert(name)
@@ -1159,10 +1319,12 @@ PERL_CALLCONV GV* Perl_gv_fetchsv(pTHX_ SV *name, I32 flags, const svtype sv_typ
#define PERL_ARGS_ASSERT_GV_FETCHSV \
assert(name)
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_gv_fullname(pTHX_ SV* sv, const GV* gv);
+PERL_CALLCONV void Perl_gv_fullname(pTHX_ SV* sv, const GV* gv)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_GV_FULLNAME \
assert(sv); assert(gv)
#endif
+
#ifndef NO_MATHOMS
PERL_CALLCONV void Perl_gv_fullname3(pTHX_ SV* sv, const GV* gv, const char* prefix);
#define PERL_ARGS_ASSERT_GV_FULLNAME3 \
@@ -1173,8 +1335,10 @@ PERL_CALLCONV void Perl_gv_fullname4(pTHX_ SV* sv, const GV* gv, const char* pre
assert(sv); assert(gv)
PERL_CALLCONV CV* Perl_gv_handler(pTHX_ HV* stash, I32 id)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_GV_HANDLER
/* PERL_CALLCONV void gv_init(pTHX_ GV* gv, HV* stash, const char* name, STRLEN len, int multi); */
+#define PERL_ARGS_ASSERT_GV_INIT
PERL_CALLCONV void Perl_gv_init_pv(pTHX_ GV* gv, HV* stash, const char* name, U32 flags);
#define PERL_ARGS_ASSERT_GV_INIT_PV \
assert(gv); assert(name)
@@ -1214,15 +1378,18 @@ PERL_CALLCONV SV* Perl_hv_bucket_ratio(pTHX_ HV *hv)
assert(hv)
PERL_CALLCONV void Perl_hv_clear(pTHX_ HV *hv);
+#define PERL_ARGS_ASSERT_HV_CLEAR
PERL_CALLCONV void Perl_hv_clear_placeholders(pTHX_ HV *hv);
#define PERL_ARGS_ASSERT_HV_CLEAR_PLACEHOLDERS \
assert(hv)
PERL_CALLCONV void* Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char* key, STRLEN klen, int flags, int action, SV *val, U32 hash);
+#define PERL_ARGS_ASSERT_HV_COMMON
PERL_CALLCONV void* Perl_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 klen_i32, const int action, SV *val, const U32 hash);
#define PERL_ARGS_ASSERT_HV_COMMON_KEY_LEN \
assert(key)
PERL_CALLCONV HV * Perl_hv_copy_hints_hv(pTHX_ HV *const ohv)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_HV_COPY_HINTS_HV
PERL_CALLCONV void Perl_hv_delayfree_ent(pTHX_ HV *hv, HE *entry);
#define PERL_ARGS_ASSERT_HV_DELAYFREE_ENT \
@@ -1361,42 +1528,59 @@ PERL_CALLCONV SV* Perl_hv_scalar(pTHX_ HV *hv)
#ifndef NO_MATHOMS
PERL_CALLCONV SV** Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash);
+#define PERL_ARGS_ASSERT_HV_STORE
#endif
#ifndef NO_MATHOMS
PERL_CALLCONV HE* Perl_hv_store_ent(pTHX_ HV *hv, SV *key, SV *val, U32 hash);
+#define PERL_ARGS_ASSERT_HV_STORE_ENT
#endif
#ifndef NO_MATHOMS
PERL_CALLCONV SV** Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash, int flags);
+#define PERL_ARGS_ASSERT_HV_STORE_FLAGS
#endif
/* PERL_CALLCONV void hv_undef(pTHX_ HV *hv); */
+#define PERL_ARGS_ASSERT_HV_UNDEF
PERL_CALLCONV void Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags);
+#define PERL_ARGS_ASSERT_HV_UNDEF_FLAGS
/* PERL_CALLCONV I32 ibcmp(pTHX_ const char* a, const char* b, I32 len)
__attribute__warn_unused_result__
__attribute__pure__; */
+#define PERL_ARGS_ASSERT_IBCMP
/* PERL_CALLCONV I32 ibcmp_locale(pTHX_ const char* a, const char* b, I32 len)
__attribute__warn_unused_result__
__attribute__pure__; */
+#define PERL_ARGS_ASSERT_IBCMP_LOCALE
/* PERL_CALLCONV I32 ibcmp_utf8(pTHX_ const char *s1, char **pe1, UV l1, bool u1, const char *s2, char **pe2, UV l2, bool u2); */
+#define PERL_ARGS_ASSERT_IBCMP_UTF8
PERL_CALLCONV void Perl_init_argv_symbols(pTHX_ int argc, char **argv);
#define PERL_ARGS_ASSERT_INIT_ARGV_SYMBOLS \
assert(argv)
PERL_CALLCONV void Perl_init_constants(pTHX);
+#define PERL_ARGS_ASSERT_INIT_CONSTANTS
PERL_CALLCONV void Perl_init_dbargs(pTHX);
+#define PERL_ARGS_ASSERT_INIT_DBARGS
PERL_CALLCONV void Perl_init_debugger(pTHX);
+#define PERL_ARGS_ASSERT_INIT_DEBUGGER
PERL_CALLCONV int Perl_init_i18nl10n(pTHX_ int printwarn);
+#define PERL_ARGS_ASSERT_INIT_I18NL10N
#ifndef NO_MATHOMS
-PERL_CALLCONV int Perl_init_i18nl14n(pTHX_ int printwarn);
+PERL_CALLCONV int Perl_init_i18nl14n(pTHX_ int printwarn)
+ __attribute__deprecated__;
+#define PERL_ARGS_ASSERT_INIT_I18NL14N
#endif
+
PERL_CALLCONV void Perl_init_named_cv(pTHX_ CV *cv, OP *nameop);
#define PERL_ARGS_ASSERT_INIT_NAMED_CV \
assert(cv); assert(nameop)
PERL_CALLCONV void Perl_init_stacks(pTHX);
+#define PERL_ARGS_ASSERT_INIT_STACKS
PERL_CALLCONV void Perl_init_tm(pTHX_ struct tm *ptm);
#define PERL_ARGS_ASSERT_INIT_TM \
assert(ptm)
PERL_CALLCONV void Perl_init_uniprops(pTHX);
+#define PERL_ARGS_ASSERT_INIT_UNIPROPS
#ifndef NO_MATHOMS
PERL_CALLCONV char* Perl_instr(const char* big, const char* little)
__attribute__warn_unused_result__
@@ -1406,316 +1590,82 @@ PERL_CALLCONV char* Perl_instr(const char* big, const char* little)
#endif
PERL_CALLCONV U32 Perl_intro_my(pTHX);
+#define PERL_ARGS_ASSERT_INTRO_MY
PERL_CALLCONV OP* Perl_invert(pTHX_ OP* cmd)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_INVERT
+PERL_CALLCONV void Perl_invmap_dump(pTHX_ SV* invlist, UV * map);
+#define PERL_ARGS_ASSERT_INVMAP_DUMP \
+ assert(invlist); assert(map)
PERL_CALLCONV bool Perl_io_close(pTHX_ IO* io, GV *gv, bool not_implicit, bool warn_on_fail);
#define PERL_ARGS_ASSERT_IO_CLOSE \
assert(io)
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_isALNUM_lazy(pTHX_ const char* p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_ISALNUM_LAZY \
- assert(p)
-#endif
-
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE Size_t S_isC9_STRICT_UTF8_CHAR(const U8 * const s0, const U8 * const e)
+PERL_STATIC_INLINE Size_t Perl_isC9_STRICT_UTF8_CHAR(const U8 * const s0, const U8 * const e)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_ISC9_STRICT_UTF8_CHAR \
assert(s0); assert(e)
#endif
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_isIDFIRST_lazy(pTHX_ const char* p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_ISIDFIRST_LAZY \
- assert(p)
-#endif
-
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE Size_t S_isSTRICT_UTF8_CHAR(const U8 * const s0, const U8 * const e)
+PERL_STATIC_INLINE Size_t Perl_isSTRICT_UTF8_CHAR(const U8 * const s0, const U8 * const e)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_ISSTRICT_UTF8_CHAR \
assert(s0); assert(e)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE Size_t S_isUTF8_CHAR(const U8 * const s0, const U8 * const e)
+PERL_STATIC_INLINE Size_t Perl_isUTF8_CHAR(const U8 * const s0, const U8 * const e)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_ISUTF8_CHAR \
assert(s0); assert(e)
#endif
-/* PERL_CALLCONV bool Perl_is_ascii_string(const U8* const s, STRLEN len)
+/* PERL_CALLCONV bool is_ascii_string(const U8* const s, STRLEN len)
__attribute__warn_unused_result__
__attribute__pure__; */
+#define PERL_ARGS_ASSERT_IS_ASCII_STRING
-/* PERL_CALLCONV bool Perl_is_c9strict_utf8_string(const U8 *s, STRLEN len)
+/* PERL_CALLCONV bool is_c9strict_utf8_string(const U8 *s, STRLEN len)
__attribute__warn_unused_result__; */
+#define PERL_ARGS_ASSERT_IS_C9STRICT_UTF8_STRING
/* PERL_CALLCONV bool is_c9strict_utf8_string_loc(const U8 *s, STRLEN len, const U8 **ep); */
+#define PERL_ARGS_ASSERT_IS_C9STRICT_UTF8_STRING_LOC
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_is_c9strict_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el);
+PERL_STATIC_INLINE bool Perl_is_c9strict_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el);
#define PERL_ARGS_ASSERT_IS_C9STRICT_UTF8_STRING_LOCLEN \
assert(s)
#endif
-/* PERL_CALLCONV bool Perl_is_invariant_string(const U8* const s, STRLEN len)
+/* PERL_CALLCONV bool is_invariant_string(const U8* const s, STRLEN len)
__attribute__warn_unused_result__
__attribute__pure__; */
+#define PERL_ARGS_ASSERT_IS_INVARIANT_STRING
PERL_CALLCONV I32 Perl_is_lvalue_sub(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_IS_LVALUE_SUB
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_is_safe_syscall(pTHX_ const char *pv, STRLEN len, const char *what, const char *op_name)
+PERL_STATIC_INLINE bool Perl_is_safe_syscall(pTHX_ const char *pv, STRLEN len, const char *what, const char *op_name)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_IS_SAFE_SYSCALL \
assert(pv); assert(what); assert(op_name)
#endif
-/* PERL_CALLCONV bool Perl_is_strict_utf8_string(const U8 *s, STRLEN len)
+/* PERL_CALLCONV bool is_strict_utf8_string(const U8 *s, STRLEN len)
__attribute__warn_unused_result__; */
+#define PERL_ARGS_ASSERT_IS_STRICT_UTF8_STRING
/* PERL_CALLCONV bool is_strict_utf8_string_loc(const U8 *s, STRLEN len, const U8 **ep); */
+#define PERL_ARGS_ASSERT_IS_STRICT_UTF8_STRING_LOC
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_is_strict_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el);
+PERL_STATIC_INLINE bool Perl_is_strict_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el);
#define PERL_ARGS_ASSERT_IS_STRICT_UTF8_STRING_LOCLEN \
assert(s)
#endif
#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_alnum(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_alnum_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_alnumc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_alnumc_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_alpha(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_alpha_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_ascii(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__
- __attribute__pure__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_ascii_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__
- __attribute__pure__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_blank(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__
- __attribute__pure__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_blank_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__
- __attribute__pure__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_cntrl(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__
- __attribute__pure__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_cntrl_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__
- __attribute__pure__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_digit(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_digit_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_graph(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_graph_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_idfirst(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_idfirst_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_lower(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_lower_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_print(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_print_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_punct(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_punct_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_space(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__
- __attribute__pure__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_space_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__
- __attribute__pure__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_upper(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_upper_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_xdigit(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__
- __attribute__pure__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_uni_xdigit_lc(pTHX_ UV c)
- __attribute__deprecated__
- __attribute__warn_unused_result__
- __attribute__pure__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_alnum(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_ALNUM \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_alnumc(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_ALNUMC \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_alpha(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_ALPHA \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_ascii(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_ASCII \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_blank(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_BLANK \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
PERL_CALLCONV STRLEN Perl_is_utf8_char(const U8 *s)
__attribute__deprecated__;
#define PERL_ARGS_ASSERT_IS_UTF8_CHAR \
@@ -1727,132 +1677,38 @@ PERL_CALLCONV STRLEN Perl_is_utf8_char_buf(const U8 *buf, const U8 *buf_end);
#define PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF \
assert(buf); assert(buf_end)
#endif
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_cntrl(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_CNTRL \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_digit(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_DIGIT \
- assert(p)
-#endif
+PERL_CALLCONV STRLEN Perl_is_utf8_char_helper(const U8 * const s, const U8 * e, const U32 flags)
+ __attribute__warn_unused_result__
+ __attribute__pure__;
+#define PERL_ARGS_ASSERT_IS_UTF8_CHAR_HELPER \
+ assert(s); assert(e)
/* PERL_CALLCONV bool is_utf8_fixed_width_buf_flags(const U8 * const s, STRLEN len, const U32 flags); */
+#define PERL_ARGS_ASSERT_IS_UTF8_FIXED_WIDTH_BUF_FLAGS
/* PERL_CALLCONV bool is_utf8_fixed_width_buf_loc_flags(const U8 * const s, STRLEN len, const U8 **ep, const U32 flags); */
+#define PERL_ARGS_ASSERT_IS_UTF8_FIXED_WIDTH_BUF_LOC_FLAGS
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_is_utf8_fixed_width_buf_loclen_flags(const U8 * const s, STRLEN len, const U8 **ep, STRLEN *el, const U32 flags);
+PERL_STATIC_INLINE bool Perl_is_utf8_fixed_width_buf_loclen_flags(const U8 * const s, STRLEN len, const U8 **ep, STRLEN *el, const U32 flags);
#define PERL_ARGS_ASSERT_IS_UTF8_FIXED_WIDTH_BUF_LOCLEN_FLAGS \
assert(s)
#endif
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_graph(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_GRAPH \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_idcont(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_IDCONT \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_idfirst(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_IDFIRST \
- assert(p)
-#endif
-
/* PERL_CALLCONV bool is_utf8_invariant_string(const U8* const s, STRLEN len)
__attribute__warn_unused_result__; */
+#define PERL_ARGS_ASSERT_IS_UTF8_INVARIANT_STRING
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep)
+PERL_STATIC_INLINE bool Perl_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_IS_UTF8_INVARIANT_STRING_LOC \
assert(s)
#endif
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_lower(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_LOWER \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_mark(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_MARK \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_perl_space(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_PERL_SPACE \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_perl_word(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_PERL_WORD \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_posix_digit(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_POSIX_DIGIT \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_print(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_PRINT \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_punct(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_PUNCT \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_space(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_SPACE \
- assert(p)
-#endif
-
-/* PERL_CALLCONV bool Perl_is_utf8_string(const U8 *s, STRLEN len)
+/* PERL_CALLCONV bool is_utf8_string(const U8 *s, STRLEN len)
__attribute__warn_unused_result__; */
+#define PERL_ARGS_ASSERT_IS_UTF8_STRING
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_is_utf8_string_flags(const U8 *s, STRLEN len, const U32 flags)
+PERL_STATIC_INLINE bool Perl_is_utf8_string_flags(const U8 *s, STRLEN len, const U32 flags)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_IS_UTF8_STRING_FLAGS \
assert(s)
@@ -1864,62 +1720,33 @@ PERL_CALLCONV bool Perl_is_utf8_string_loc(const U8 *s, const STRLEN len, const
assert(s); assert(ep)
#endif
/* PERL_CALLCONV bool is_utf8_string_loc_flags(const U8 *s, STRLEN len, const U8 **ep, const U32 flags); */
+#define PERL_ARGS_ASSERT_IS_UTF8_STRING_LOC_FLAGS
#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE bool Perl_is_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el);
#define PERL_ARGS_ASSERT_IS_UTF8_STRING_LOCLEN \
assert(s)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_is_utf8_string_loclen_flags(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el, const U32 flags);
+PERL_STATIC_INLINE bool Perl_is_utf8_string_loclen_flags(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el, const U32 flags);
#define PERL_ARGS_ASSERT_IS_UTF8_STRING_LOCLEN_FLAGS \
assert(s)
#endif
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_upper(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_UPPER \
- assert(p)
-#endif
-
/* PERL_CALLCONV bool is_utf8_valid_partial_char(const U8 * const s, const U8 * const e)
__attribute__warn_unused_result__
__attribute__pure__; */
+#define PERL_ARGS_ASSERT_IS_UTF8_VALID_PARTIAL_CHAR
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_is_utf8_valid_partial_char_flags(const U8 * const s, const U8 * const e, const U32 flags)
+PERL_STATIC_INLINE bool Perl_is_utf8_valid_partial_char_flags(const U8 * const s, const U8 * const e, const U32 flags)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_IS_UTF8_VALID_PARTIAL_CHAR_FLAGS \
assert(s); assert(e)
#endif
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_xdigit(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_XDIGIT \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_xidcont(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_XIDCONT \
- assert(p)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV bool Perl_is_utf8_xidfirst(pTHX_ const U8 *p)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_XIDFIRST \
- assert(p)
-#endif
-
PERL_CALLCONV bool Perl_isinfnan(NV nv)
__attribute__warn_unused_result__
__attribute__pure__;
+#define PERL_ARGS_ASSERT_ISINFNAN
PERL_CALLCONV bool Perl_isinfnansv(pTHX_ SV *sv);
#define PERL_ARGS_ASSERT_ISINFNANSV \
@@ -1940,19 +1767,27 @@ PERL_CALLCONV void Perl_leave_adjust_stacks(pTHX_ SV **from_sp, SV **to_sp, U8 g
#define PERL_ARGS_ASSERT_LEAVE_ADJUST_STACKS \
assert(from_sp); assert(to_sp)
PERL_CALLCONV void Perl_leave_scope(pTHX_ I32 base);
+#define PERL_ARGS_ASSERT_LEAVE_SCOPE
PERL_CALLCONV bool Perl_lex_bufutf8(pTHX);
+#define PERL_ARGS_ASSERT_LEX_BUFUTF8
PERL_CALLCONV void Perl_lex_discard_to(pTHX_ char* ptr);
#define PERL_ARGS_ASSERT_LEX_DISCARD_TO \
assert(ptr)
PERL_CALLCONV char* Perl_lex_grow_linestr(pTHX_ STRLEN len);
+#define PERL_ARGS_ASSERT_LEX_GROW_LINESTR
PERL_CALLCONV bool Perl_lex_next_chunk(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_LEX_NEXT_CHUNK
PERL_CALLCONV I32 Perl_lex_peek_unichar(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_LEX_PEEK_UNICHAR
PERL_CALLCONV void Perl_lex_read_space(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_LEX_READ_SPACE
PERL_CALLCONV void Perl_lex_read_to(pTHX_ char* ptr);
#define PERL_ARGS_ASSERT_LEX_READ_TO \
assert(ptr)
PERL_CALLCONV I32 Perl_lex_read_unichar(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_LEX_READ_UNICHAR
PERL_CALLCONV void Perl_lex_start(pTHX_ SV* line, PerlIO *rsfp, U32 flags);
+#define PERL_ARGS_ASSERT_LEX_START
PERL_CALLCONV void Perl_lex_stuff_pv(pTHX_ const char* pv, U32 flags);
#define PERL_ARGS_ASSERT_LEX_STUFF_PV \
assert(pv)
@@ -1966,6 +1801,12 @@ PERL_CALLCONV void Perl_lex_unstuff(pTHX_ char* ptr);
#define PERL_ARGS_ASSERT_LEX_UNSTUFF \
assert(ptr)
PERL_CALLCONV OP* Perl_list(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_LIST
+PERL_CALLCONV HV* Perl_load_charnames(pTHX_ SV * char_name, const char * context, const STRLEN context_len, const char ** error_msg)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_LOAD_CHARNAMES \
+ assert(char_name); assert(context); assert(error_msg)
+
PERL_CALLCONV void Perl_load_module(pTHX_ U32 flags, SV* name, SV* ver, ...);
#define PERL_ARGS_ASSERT_LOAD_MODULE \
assert(name)
@@ -2005,6 +1846,7 @@ PERL_CALLCONV int Perl_magic_copycallchecker(pTHX_ SV* sv, MAGIC *mg, SV *nsv, c
#define PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER \
assert(sv); assert(mg); assert(nsv)
PERL_CALLCONV void Perl_magic_dump(pTHX_ const MAGIC *mg);
+#define PERL_ARGS_ASSERT_MAGIC_DUMP
PERL_CALLCONV int Perl_magic_existspack(pTHX_ SV* sv, const MAGIC* mg);
#define PERL_ARGS_ASSERT_MAGIC_EXISTSPACK \
assert(sv); assert(mg)
@@ -2143,8 +1985,10 @@ PERL_CALLCONV int Perl_magic_wipepack(pTHX_ SV* sv, MAGIC* mg);
PERL_CALLCONV Malloc_t Perl_malloc(MEM_SIZE nbytes)
__attribute__malloc__
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_MALLOC
PERL_CALLCONV I32 * Perl_markstack_grow(pTHX);
+#define PERL_ARGS_ASSERT_MARKSTACK_GROW
PERL_CALLCONV SV* Perl_mess(pTHX_ const char* pat, ...)
__attribute__format__(__printf__,pTHX_1,pTHX_2);
#define PERL_ARGS_ASSERT_MESS \
@@ -2154,6 +1998,7 @@ PERL_CALLCONV SV* Perl_mess_sv(pTHX_ SV* basemsg, bool consume);
#define PERL_ARGS_ASSERT_MESS_SV \
assert(basemsg)
PERL_CALLCONV Free_t Perl_mfree(Malloc_t where);
+#define PERL_ARGS_ASSERT_MFREE
PERL_CALLCONV int Perl_mg_clear(pTHX_ SV* sv);
#define PERL_ARGS_ASSERT_MG_CLEAR \
assert(sv)
@@ -2162,6 +2007,7 @@ PERL_CALLCONV int Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen)
assert(sv); assert(nsv)
PERL_CALLCONV MAGIC* Perl_mg_find(const SV* sv, int type)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_MG_FIND
PERL_CALLCONV MAGIC* Perl_mg_find_mglob(pTHX_ SV* sv)
__attribute__warn_unused_result__;
@@ -2170,6 +2016,7 @@ PERL_CALLCONV MAGIC* Perl_mg_find_mglob(pTHX_ SV* sv)
PERL_CALLCONV MAGIC* Perl_mg_findext(const SV* sv, int type, const MGVTBL *vtbl)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_MG_FINDEXT
PERL_CALLCONV int Perl_mg_free(pTHX_ SV* sv);
#define PERL_ARGS_ASSERT_MG_FREE \
@@ -2204,10 +2051,19 @@ PERL_CALLCONV void Perl_mini_mktime(struct tm *ptm);
#define PERL_ARGS_ASSERT_MINI_MKTIME \
assert(ptm)
PERL_CALLCONV int Perl_mode_from_discipline(pTHX_ const char* s, STRLEN len);
+#define PERL_ARGS_ASSERT_MODE_FROM_DISCIPLINE
PERL_CALLCONV void * Perl_more_bodies(pTHX_ const svtype sv_type, const size_t body_size, const size_t arena_size);
+#define PERL_ARGS_ASSERT_MORE_BODIES
PERL_CALLCONV const char* Perl_moreswitches(pTHX_ const char* s);
#define PERL_ARGS_ASSERT_MORESWITCHES \
assert(s)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE char * Perl_mortal_getenv(const char * str)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_MORTAL_GETENV \
+ assert(str)
+#endif
+
PERL_CALLCONV const struct mro_alg * Perl_mro_get_from_name(pTHX_ SV *name);
#define PERL_ARGS_ASSERT_MRO_GET_FROM_NAME \
assert(name)
@@ -2257,19 +2113,32 @@ PERL_CALLCONV OP * Perl_my_attrs(pTHX_ OP *o, OP *attrs);
#define PERL_ARGS_ASSERT_MY_ATTRS \
assert(o)
PERL_CALLCONV void Perl_my_clearenv(pTHX);
+#define PERL_ARGS_ASSERT_MY_CLEARENV
PERL_CALLCONV int Perl_my_dirfd(DIR* dir);
+#define PERL_ARGS_ASSERT_MY_DIRFD
PERL_CALLCONV_NO_RET void Perl_my_exit(pTHX_ U32 status)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_MY_EXIT
PERL_CALLCONV_NO_RET void Perl_my_failure_exit(pTHX)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_MY_FAILURE_EXIT
PERL_CALLCONV I32 Perl_my_fflush_all(pTHX);
+#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);
+#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)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_MY_MKOSTEMP_CLOEXEC \
+ assert(templte)
+
PERL_CALLCONV int Perl_my_mkstemp_cloexec(char *templte)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_MY_MKSTEMP_CLOEXEC \
@@ -2279,17 +2148,22 @@ PERL_CALLCONV PerlIO* Perl_my_popen_list(pTHX_ const char* mode, int n, SV ** ar
#define PERL_ARGS_ASSERT_MY_POPEN_LIST \
assert(mode); assert(args)
PERL_CALLCONV void Perl_my_setenv(pTHX_ const char* nam, const char* val);
+#define PERL_ARGS_ASSERT_MY_SETENV
PERL_CALLCONV int Perl_my_snprintf(char *buffer, const Size_t len, const char *format, ...)
__attribute__format__(__printf__,3,4);
#define PERL_ARGS_ASSERT_MY_SNPRINTF \
assert(buffer); assert(format)
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);
+#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);
+#define PERL_ARGS_ASSERT_MY_STRERROR
PERL_CALLCONV char * Perl_my_strftime(pTHX_ const char *fmt, int sec, int min, int hour, int mday, int mon, int year, int wday, int yday, int isdst)
__attribute__format__(__strftime__,pTHX_1,0);
#define PERL_ARGS_ASSERT_MY_STRFTIME \
@@ -2301,25 +2175,34 @@ PERL_CALLCONV NV Perl_my_strtod(const char * const s, char ** e)
assert(s)
PERL_CALLCONV void Perl_my_unexec(pTHX);
+#define PERL_ARGS_ASSERT_MY_UNEXEC
PERL_CALLCONV int Perl_my_vsnprintf(char *buffer, const Size_t len, const char *format, va_list ap);
#define PERL_ARGS_ASSERT_MY_VSNPRINTF \
assert(buffer); assert(format)
PERL_CALLCONV OP* Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block);
+#define PERL_ARGS_ASSERT_NEWANONATTRSUB
PERL_CALLCONV OP* Perl_newANONHASH(pTHX_ OP* o)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWANONHASH
PERL_CALLCONV OP* Perl_newANONLIST(pTHX_ OP* o)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWANONLIST
PERL_CALLCONV OP* Perl_newANONSUB(pTHX_ I32 floor, OP* proto, OP* block);
+#define PERL_ARGS_ASSERT_NEWANONSUB
PERL_CALLCONV OP* Perl_newASSIGNOP(pTHX_ I32 flags, OP* left, I32 optype, OP* right)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWASSIGNOP
/* PERL_CALLCONV CV* newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block); */
+#define PERL_ARGS_ASSERT_NEWATTRSUB
PERL_CALLCONV CV* Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block, bool o_is_gv);
+#define PERL_ARGS_ASSERT_NEWATTRSUB_X
#ifndef NO_MATHOMS
PERL_CALLCONV AV* Perl_newAV(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWAV
#endif
PERL_CALLCONV OP* Perl_newAVREF(pTHX_ OP* o)
@@ -2329,6 +2212,7 @@ PERL_CALLCONV OP* Perl_newAVREF(pTHX_ OP* o)
PERL_CALLCONV OP* Perl_newBINOP(pTHX_ I32 type, I32 flags, OP* first, OP* last)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWBINOP
PERL_CALLCONV OP* Perl_newCONDOP(pTHX_ I32 flags, OP* first, OP* trueop, OP* falseop)
__attribute__warn_unused_result__;
@@ -2336,14 +2220,19 @@ PERL_CALLCONV OP* Perl_newCONDOP(pTHX_ I32 flags, OP* first, OP* trueop, OP* fal
assert(first)
PERL_CALLCONV CV* Perl_newCONSTSUB(pTHX_ HV* stash, const char* name, SV* sv);
+#define PERL_ARGS_ASSERT_NEWCONSTSUB
PERL_CALLCONV CV* Perl_newCONSTSUB_flags(pTHX_ HV* stash, const char* name, STRLEN len, U32 flags, SV* sv);
+#define PERL_ARGS_ASSERT_NEWCONSTSUB_FLAGS
PERL_CALLCONV OP* Perl_newCVREF(pTHX_ I32 flags, OP* o)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWCVREF
PERL_CALLCONV OP* Perl_newDEFSVOP(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWDEFSVOP
PERL_CALLCONV void Perl_newFORM(pTHX_ I32 floor, OP* o, OP* block);
+#define PERL_ARGS_ASSERT_NEWFORM
PERL_CALLCONV OP* Perl_newFOROP(pTHX_ I32 flags, OP* sv, OP* expr, OP* block, OP* cont)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_NEWFOROP \
@@ -2364,8 +2253,10 @@ PERL_CALLCONV OP* Perl_newGVOP(pTHX_ I32 type, I32 flags, GV* gv)
PERL_CALLCONV OP* Perl_newGVREF(pTHX_ I32 type, OP* o)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWGVREF
/* PERL_CALLCONV GV* newGVgen(pTHX_ const char* pack); */
+#define PERL_ARGS_ASSERT_NEWGVGEN
PERL_CALLCONV GV* Perl_newGVgen_flags(pTHX_ const char* pack, U32 flags)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_NEWGVGEN_FLAGS \
@@ -2374,6 +2265,7 @@ PERL_CALLCONV GV* Perl_newGVgen_flags(pTHX_ const char* pack, U32 flags)
#ifndef NO_MATHOMS
PERL_CALLCONV HV* Perl_newHV(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWHV
#endif
PERL_CALLCONV OP* Perl_newHVREF(pTHX_ OP* o)
@@ -2383,14 +2275,17 @@ PERL_CALLCONV OP* Perl_newHVREF(pTHX_ OP* o)
PERL_CALLCONV HV* Perl_newHVhv(pTHX_ HV *hv)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWHVHV
#ifndef NO_MATHOMS
PERL_CALLCONV IO* Perl_newIO(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWIO
#endif
PERL_CALLCONV OP* Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP* first, OP* last)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWLISTOP
PERL_CALLCONV OP* Perl_newLOGOP(pTHX_ I32 optype, I32 flags, OP *first, OP *other)
__attribute__warn_unused_result__;
@@ -2404,6 +2299,7 @@ PERL_CALLCONV OP* Perl_newLOOPEX(pTHX_ I32 type, OP* label)
PERL_CALLCONV OP* Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP* expr, OP* block)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWLOOPOP
PERL_CALLCONV OP* Perl_newMETHOP(pTHX_ I32 type, I32 flags, OP* dynamic_meth)
__attribute__warn_unused_result__;
@@ -2420,12 +2316,15 @@ PERL_CALLCONV CV * Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, O
assert(o)
PERL_CALLCONV OP* Perl_newNULLLIST(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWNULLLIST
PERL_CALLCONV OP* Perl_newOP(pTHX_ I32 optype, I32 flags)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWOP
PERL_CALLCONV PADNAMELIST * Perl_newPADNAMELIST(size_t max)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWPADNAMELIST
PERL_CALLCONV PADNAME * Perl_newPADNAMEouter(PADNAME *outer)
__attribute__warn_unused_result__;
@@ -2439,12 +2338,14 @@ PERL_CALLCONV PADNAME * Perl_newPADNAMEpvn(const char *s, STRLEN len)
PERL_CALLCONV OP* Perl_newPMOP(pTHX_ I32 type, I32 flags)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWPMOP
PERL_CALLCONV void Perl_newPROG(pTHX_ OP* o);
#define PERL_ARGS_ASSERT_NEWPROG \
assert(o)
PERL_CALLCONV OP* Perl_newPVOP(pTHX_ I32 type, I32 flags, char* pv)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWPVOP
PERL_CALLCONV OP* Perl_newRANGE(pTHX_ I32 flags, OP* left, OP* right)
__attribute__warn_unused_result__;
@@ -2463,18 +2364,22 @@ PERL_CALLCONV SV* Perl_newRV_noinc(pTHX_ SV *const tmpRef)
PERL_CALLCONV OP* Perl_newSLICEOP(pTHX_ I32 flags, OP* subscript, OP* listop)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSLICEOP
PERL_CALLCONV OP* Perl_newSTATEOP(pTHX_ I32 flags, char* label, OP* o)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSTATEOP
PERL_CALLCONV CV* Perl_newSTUB(pTHX_ GV *gv, bool fake);
#define PERL_ARGS_ASSERT_NEWSTUB \
assert(gv)
#ifndef NO_MATHOMS
PERL_CALLCONV CV* Perl_newSUB(pTHX_ I32 floor, OP* o, OP* proto, OP* block);
+#define PERL_ARGS_ASSERT_NEWSUB
#endif
PERL_CALLCONV SV* Perl_newSV(pTHX_ const STRLEN len)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSV
PERL_CALLCONV OP* Perl_newSVOP(pTHX_ I32 type, I32 flags, SV* sv)
__attribute__warn_unused_result__;
@@ -2488,6 +2393,7 @@ PERL_CALLCONV OP* Perl_newSVREF(pTHX_ OP* o)
PERL_CALLCONV SV* Perl_newSV_type(pTHX_ const svtype type)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSV_TYPE
PERL_CALLCONV SV* Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
__attribute__warn_unused_result__;
@@ -2496,18 +2402,23 @@ PERL_CALLCONV SV* Perl_newSVavdefelem(pTHX_ AV *av, SSize_t ix, bool extendible)
PERL_CALLCONV SV* Perl_newSVhek(pTHX_ const HEK *const hek)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSVHEK
PERL_CALLCONV SV* Perl_newSViv(pTHX_ const IV i)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSVIV
PERL_CALLCONV SV* Perl_newSVnv(pTHX_ const NV n)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSVNV
PERL_CALLCONV SV* Perl_newSVpv(pTHX_ const char *const s, const STRLEN len)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSVPV
PERL_CALLCONV SV* Perl_newSVpv_share(pTHX_ const char* s, U32 hash)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSVPV_SHARE
PERL_CALLCONV SV* Perl_newSVpvf(pTHX_ const char *const pat, ...)
__attribute__warn_unused_result__
@@ -2517,12 +2428,15 @@ PERL_CALLCONV SV* Perl_newSVpvf(pTHX_ const char *const pat, ...)
PERL_CALLCONV SV* Perl_newSVpvn(pTHX_ const char *const buffer, const STRLEN len)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSVPVN
PERL_CALLCONV SV* Perl_newSVpvn_flags(pTHX_ const char *const s, const STRLEN len, const U32 flags)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSVPVN_FLAGS
PERL_CALLCONV SV* Perl_newSVpvn_share(pTHX_ const char* s, I32 len, U32 hash)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSVPVN_SHARE
PERL_CALLCONV SV* Perl_newSVrv(pTHX_ SV *const rv, const char *const classname);
#define PERL_ARGS_ASSERT_NEWSVRV \
@@ -2530,22 +2444,28 @@ PERL_CALLCONV SV* Perl_newSVrv(pTHX_ SV *const rv, const char *const classname);
#ifndef NO_MATHOMS
PERL_CALLCONV SV* Perl_newSVsv(pTHX_ SV *const old)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSVSV
#endif
PERL_CALLCONV SV* Perl_newSVsv_flags(pTHX_ SV *const old, I32 flags)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSVSV_FLAGS
-/* PERL_CALLCONV SV* Perl_newSVsv_nomg(pTHX_ SV *const old)
+/* PERL_CALLCONV SV* newSVsv_nomg(pTHX_ SV *const old)
__attribute__warn_unused_result__; */
+#define PERL_ARGS_ASSERT_NEWSVSV_NOMG
PERL_CALLCONV SV* Perl_newSVuv(pTHX_ const UV u)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWSVUV
PERL_CALLCONV OP* Perl_newUNOP(pTHX_ I32 type, I32 flags, OP* first)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWUNOP
PERL_CALLCONV OP* Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP* first, UNOP_AUX_item *aux)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWUNOP_AUX
PERL_CALLCONV OP* Perl_newWHENOP(pTHX_ OP* cond, OP* block)
__attribute__warn_unused_result__;
@@ -2554,6 +2474,7 @@ PERL_CALLCONV OP* Perl_newWHENOP(pTHX_ OP* cond, OP* block)
PERL_CALLCONV OP* Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP* loop, OP* expr, OP* block, OP* cont, I32 has_my)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEWWHILEOP
PERL_CALLCONV CV* Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename);
#define PERL_ARGS_ASSERT_NEWXS \
@@ -2569,6 +2490,7 @@ PERL_CALLCONV CV * Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len, XSUB
assert(subaddr)
PERL_CALLCONV PERL_SI* Perl_new_stackinfo(pTHX_ I32 stitems, I32 cxitems)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEW_STACKINFO
PERL_CALLCONV SV* Perl_new_version(pTHX_ SV *ver);
#define PERL_ARGS_ASSERT_NEW_VERSION \
@@ -2581,6 +2503,12 @@ PERL_CALLCONV STRLEN * Perl_new_warnings_bitfield(pTHX_ STRLEN *buffer, const ch
PERL_CALLCONV PerlIO* Perl_nextargv(pTHX_ GV* gv, bool nomagicopen);
#define PERL_ARGS_ASSERT_NEXTARGV \
assert(gv)
+PERL_CALLCONV char* Perl_ninstr(const char* big, const char* bigend, const char* little, const char* lend)
+ __attribute__warn_unused_result__
+ __attribute__pure__;
+#define PERL_ARGS_ASSERT_NINSTR \
+ assert(big); assert(bigend); assert(little); assert(lend)
+
PERL_CALLCONV_NO_RET void Perl_noperl_die(const char* pat, ...)
__attribute__noreturn__
__attribute__format__(__printf__,1,2);
@@ -2588,7 +2516,9 @@ PERL_CALLCONV_NO_RET void Perl_noperl_die(const char* pat, ...)
assert(pat)
PERL_CALLCONV int Perl_nothreadhook(pTHX);
+#define PERL_ARGS_ASSERT_NOTHREADHOOK
PERL_CALLCONV void Perl_notify_parser_that_changed_to_utf8(pTHX);
+#define PERL_ARGS_ASSERT_NOTIFY_PARSER_THAT_CHANGED_TO_UTF8
PERL_CALLCONV OP* Perl_oopsAV(pTHX_ OP* o)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_OOPSAV \
@@ -2600,8 +2530,11 @@ PERL_CALLCONV OP* Perl_oopsHV(pTHX_ OP* o)
assert(o)
PERL_CALLCONV OP* Perl_op_append_elem(pTHX_ I32 optype, OP* first, OP* last);
+#define PERL_ARGS_ASSERT_OP_APPEND_ELEM
PERL_CALLCONV OP* Perl_op_append_list(pTHX_ I32 optype, OP* first, OP* last);
+#define PERL_ARGS_ASSERT_OP_APPEND_LIST
PERL_CALLCONV OPclass Perl_op_class(pTHX_ const OP *o);
+#define PERL_ARGS_ASSERT_OP_CLASS
PERL_CALLCONV void Perl_op_clear(pTHX_ OP* o);
#define PERL_ARGS_ASSERT_OP_CLEAR \
assert(o)
@@ -2610,16 +2543,20 @@ PERL_CALLCONV OP* Perl_op_contextualize(pTHX_ OP* o, I32 context);
assert(o)
PERL_CALLCONV OP* Perl_op_convert_list(pTHX_ I32 optype, I32 flags, OP* o)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_OP_CONVERT_LIST
PERL_CALLCONV void Perl_op_dump(pTHX_ const OP *o);
#define PERL_ARGS_ASSERT_OP_DUMP \
assert(o)
PERL_CALLCONV void Perl_op_free(pTHX_ OP* arg);
+#define PERL_ARGS_ASSERT_OP_FREE
PERL_CALLCONV OP* Perl_op_linklist(pTHX_ OP *o);
#define PERL_ARGS_ASSERT_OP_LINKLIST \
assert(o)
/* PERL_CALLCONV OP* op_lvalue(pTHX_ OP* o, I32 type); */
+#define PERL_ARGS_ASSERT_OP_LVALUE
PERL_CALLCONV OP* Perl_op_lvalue_flags(pTHX_ OP* o, I32 type, U32 flags);
+#define PERL_ARGS_ASSERT_OP_LVALUE_FLAGS
PERL_CALLCONV void Perl_op_null(pTHX_ OP* o);
#define PERL_ARGS_ASSERT_OP_NULL \
assert(o)
@@ -2627,11 +2564,17 @@ PERL_CALLCONV OP* Perl_op_parent(OP *o);
#define PERL_ARGS_ASSERT_OP_PARENT \
assert(o)
PERL_CALLCONV OP* Perl_op_prepend_elem(pTHX_ I32 optype, OP* first, OP* last);
+#define PERL_ARGS_ASSERT_OP_PREPEND_ELEM
PERL_CALLCONV void Perl_op_refcnt_lock(pTHX);
+#define PERL_ARGS_ASSERT_OP_REFCNT_LOCK
PERL_CALLCONV void Perl_op_refcnt_unlock(pTHX);
+#define PERL_ARGS_ASSERT_OP_REFCNT_UNLOCK
PERL_CALLCONV OP* Perl_op_scope(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_OP_SCOPE
PERL_CALLCONV OP* Perl_op_sibling_splice(OP *parent, OP *start, int del_count, OP* insert);
+#define PERL_ARGS_ASSERT_OP_SIBLING_SPLICE
PERL_CALLCONV OP* Perl_op_unscope(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_OP_UNSCOPE
PERL_CALLCONV void Perl_optimize_optree(pTHX_ OP* o);
#define PERL_ARGS_ASSERT_OPTIMIZE_OPTREE \
assert(o)
@@ -2665,10 +2608,13 @@ PERL_CALLCONV void Perl_pad_add_weakref(pTHX_ CV* func);
#define PERL_ARGS_ASSERT_PAD_ADD_WEAKREF \
assert(func)
PERL_CALLCONV PADOFFSET Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype);
+#define PERL_ARGS_ASSERT_PAD_ALLOC
PERL_CALLCONV void Perl_pad_block_start(pTHX_ int full);
+#define PERL_ARGS_ASSERT_PAD_BLOCK_START
#ifndef NO_MATHOMS
PERL_CALLCONV HV* Perl_pad_compname_type(pTHX_ const PADOFFSET po)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_PAD_COMPNAME_TYPE
#endif
PERL_CALLCONV PADOFFSET Perl_pad_findmy_pv(pTHX_ const char* name, U32 flags);
@@ -2684,15 +2630,20 @@ PERL_CALLCONV void Perl_pad_fixup_inner_anons(pTHX_ PADLIST *padlist, CV *old_cv
#define PERL_ARGS_ASSERT_PAD_FIXUP_INNER_ANONS \
assert(padlist); assert(old_cv); assert(new_cv)
PERL_CALLCONV void Perl_pad_free(pTHX_ PADOFFSET po);
+#define PERL_ARGS_ASSERT_PAD_FREE
PERL_CALLCONV OP * Perl_pad_leavemy(pTHX);
+#define PERL_ARGS_ASSERT_PAD_LEAVEMY
PERL_CALLCONV PADLIST* Perl_pad_new(pTHX_ int flags)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_PAD_NEW
PERL_CALLCONV void Perl_pad_push(pTHX_ PADLIST *padlist, int depth);
#define PERL_ARGS_ASSERT_PAD_PUSH \
assert(padlist)
PERL_CALLCONV void Perl_pad_swipe(pTHX_ PADOFFSET po, bool refadjust);
+#define PERL_ARGS_ASSERT_PAD_SWIPE
PERL_CALLCONV void Perl_pad_tidy(pTHX_ padtidy_type type);
+#define PERL_ARGS_ASSERT_PAD_TIDY
PERL_CALLCONV PAD ** Perl_padlist_store(pTHX_ PADLIST *padlist, I32 key, PAD *val);
#define PERL_ARGS_ASSERT_PADLIST_STORE \
assert(padlist)
@@ -2711,14 +2662,25 @@ PERL_CALLCONV PADNAME ** Perl_padnamelist_store(pTHX_ PADNAMELIST *pnl, SSize_t
#define PERL_ARGS_ASSERT_PADNAMELIST_STORE \
assert(pnl)
PERL_CALLCONV OP* Perl_parse_arithexpr(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_PARSE_ARITHEXPR
PERL_CALLCONV OP* Perl_parse_barestmt(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_PARSE_BARESTMT
PERL_CALLCONV OP* Perl_parse_block(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_PARSE_BLOCK
PERL_CALLCONV OP* Perl_parse_fullexpr(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_PARSE_FULLEXPR
PERL_CALLCONV OP* Perl_parse_fullstmt(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_PARSE_FULLSTMT
PERL_CALLCONV SV* Perl_parse_label(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_PARSE_LABEL
PERL_CALLCONV OP* Perl_parse_listexpr(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_PARSE_LISTEXPR
PERL_CALLCONV OP* Perl_parse_stmtseq(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_PARSE_STMTSEQ
+PERL_CALLCONV OP* Perl_parse_subsignature(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_PARSE_SUBSIGNATURE
PERL_CALLCONV OP* Perl_parse_termexpr(pTHX_ U32 flags);
+#define PERL_ARGS_ASSERT_PARSE_TERMEXPR
PERL_CALLCONV U32 Perl_parse_unicode_opts(pTHX_ const char **popt);
#define PERL_ARGS_ASSERT_PARSE_UNICODE_OPTS \
assert(popt)
@@ -2726,7 +2688,9 @@ PERL_CALLCONV void Perl_parser_free(pTHX_ const yy_parser *parser);
#define PERL_ARGS_ASSERT_PARSER_FREE \
assert(parser)
PERL_CALLCONV void Perl_peep(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_PEEP
PERL_CALLCONV PerlInterpreter* perl_alloc(void);
+#define PERL_ARGS_ASSERT_PERL_ALLOC
PERL_CALLCONV void perl_construct(PerlInterpreter *my_perl);
#define PERL_ARGS_ASSERT_PERL_CONSTRUCT \
assert(my_perl)
@@ -2742,11 +2706,15 @@ PERL_CALLCONV int perl_parse(PerlInterpreter *my_perl, XSINIT_t xsinit, int argc
PERL_CALLCONV int perl_run(PerlInterpreter *my_perl);
#define PERL_ARGS_ASSERT_PERL_RUN \
assert(my_perl)
+PERL_CALLCONV Signal_t Perl_perly_sighandler(int sig, Siginfo_t *info, void *uap, bool safe);
+#define PERL_ARGS_ASSERT_PERLY_SIGHANDLER
PERL_CALLCONV void Perl_pmop_dump(pTHX_ PMOP* pm);
+#define PERL_ARGS_ASSERT_PMOP_DUMP
PERL_CALLCONV OP* Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor);
#define PERL_ARGS_ASSERT_PMRUNTIME \
assert(o); assert(expr)
PERL_CALLCONV void Perl_pop_scope(pTHX);
+#define PERL_ARGS_ASSERT_POP_SCOPE
PERL_CALLCONV void Perl_populate_isa(pTHX_ const char *name, STRLEN len, ...);
#define PERL_ARGS_ASSERT_POPULATE_ISA \
assert(name)
@@ -2757,6 +2725,7 @@ PERL_CALLCONV I32 Perl_pregexec(pTHX_ REGEXP * const prog, char* stringarg, char
#define PERL_ARGS_ASSERT_PREGEXEC \
assert(prog); assert(stringarg); assert(strend); assert(strbeg); assert(screamer)
PERL_CALLCONV void Perl_pregfree(pTHX_ REGEXP* r);
+#define PERL_ARGS_ASSERT_PREGFREE
PERL_CALLCONV void Perl_pregfree2(pTHX_ REGEXP *rx);
#define PERL_ARGS_ASSERT_PREGFREE2 \
assert(rx)
@@ -2765,6 +2734,7 @@ PERL_CALLCONV const char* Perl_prescan_version(pTHX_ const char *s, bool strict,
assert(s)
PERL_CALLCONV void Perl_ptr_table_clear(pTHX_ PTR_TBL_t *const tbl)
__attribute__deprecated__;
+#define PERL_ARGS_ASSERT_PTR_TABLE_CLEAR
PERL_CALLCONV void* Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void *const sv)
__attribute__warn_unused_result__;
@@ -2772,8 +2742,10 @@ PERL_CALLCONV void* Perl_ptr_table_fetch(pTHX_ PTR_TBL_t *const tbl, const void
assert(tbl)
PERL_CALLCONV void Perl_ptr_table_free(pTHX_ PTR_TBL_t *const tbl);
+#define PERL_ARGS_ASSERT_PTR_TABLE_FREE
PERL_CALLCONV PTR_TBL_t* Perl_ptr_table_new(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_PTR_TABLE_NEW
PERL_CALLCONV void Perl_ptr_table_split(pTHX_ PTR_TBL_t *const tbl);
#define PERL_ARGS_ASSERT_PTR_TABLE_SPLIT \
@@ -2782,6 +2754,7 @@ PERL_CALLCONV void Perl_ptr_table_store(pTHX_ PTR_TBL_t *const tbl, const void *
#define PERL_ARGS_ASSERT_PTR_TABLE_STORE \
assert(tbl); assert(newsv)
PERL_CALLCONV void Perl_push_scope(pTHX);
+#define PERL_ARGS_ASSERT_PUSH_SCOPE
PERL_CALLCONV char* Perl_pv_display(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim);
#define PERL_ARGS_ASSERT_PV_DISPLAY \
assert(dsv); assert(pv)
@@ -2811,17 +2784,19 @@ PERL_CALLCONV REGEXP* Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_cou
assert(eng)
PERL_CALLCONV Malloc_t Perl_realloc(Malloc_t where, MEM_SIZE nbytes)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_REALLOC
PERL_CALLCONV void Perl_reentrant_free(pTHX);
+#define PERL_ARGS_ASSERT_REENTRANT_FREE
PERL_CALLCONV void Perl_reentrant_init(pTHX);
+#define PERL_ARGS_ASSERT_REENTRANT_INIT
PERL_CALLCONV void* Perl_reentrant_retry(const char *f, ...);
#define PERL_ARGS_ASSERT_REENTRANT_RETRY \
assert(f)
PERL_CALLCONV void Perl_reentrant_size(pTHX);
-#ifndef NO_MATHOMS
-PERL_CALLCONV OP* Perl_ref(pTHX_ OP* o, I32 type);
-#endif
+#define PERL_ARGS_ASSERT_REENTRANT_SIZE
PERL_CALLCONV HV * Perl_refcounted_he_chain_2hv(pTHX_ const struct refcounted_he *c, U32 flags);
+#define PERL_ARGS_ASSERT_REFCOUNTED_HE_CHAIN_2HV
PERL_CALLCONV SV * Perl_refcounted_he_fetch_pv(pTHX_ const struct refcounted_he *chain, const char *key, U32 hash, U32 flags);
#define PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PV \
assert(key)
@@ -2832,7 +2807,9 @@ PERL_CALLCONV SV * Perl_refcounted_he_fetch_sv(pTHX_ const struct refcounted_he
#define PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_SV \
assert(key)
PERL_CALLCONV void Perl_refcounted_he_free(pTHX_ struct refcounted_he *he);
+#define PERL_ARGS_ASSERT_REFCOUNTED_HE_FREE
PERL_CALLCONV struct refcounted_he * Perl_refcounted_he_inc(pTHX_ struct refcounted_he *he);
+#define PERL_ARGS_ASSERT_REFCOUNTED_HE_INC
PERL_CALLCONV struct refcounted_he * Perl_refcounted_he_new_pv(pTHX_ struct refcounted_he *parent, const char *key, U32 hash, SV *value, U32 flags);
#define PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PV \
assert(key)
@@ -2891,15 +2868,20 @@ PERL_CALLCONV void Perl_regfree_internal(pTHX_ REGEXP *const rx);
#define PERL_ARGS_ASSERT_REGFREE_INTERNAL \
assert(rx)
PERL_CALLCONV void Perl_reginitcolors(pTHX);
+#define PERL_ARGS_ASSERT_REGINITCOLORS
PERL_CALLCONV regnode* Perl_regnext(pTHX_ regnode* p)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_REGNEXT
PERL_CALLCONV void Perl_repeatcpy(char* to, const char* from, I32 len, IV count);
#define PERL_ARGS_ASSERT_REPEATCPY \
assert(to); assert(from)
PERL_CALLCONV void Perl_report_evil_fh(pTHX_ const GV *gv);
+#define PERL_ARGS_ASSERT_REPORT_EVIL_FH
PERL_CALLCONV void Perl_report_uninit(pTHX_ const SV *uninit_sv);
+#define PERL_ARGS_ASSERT_REPORT_UNINIT
PERL_CALLCONV void Perl_report_wrongway_fh(pTHX_ const GV *gv, const char have);
+#define PERL_ARGS_ASSERT_REPORT_WRONGWAY_FH
PERL_CALLCONV void Perl_require_pv(pTHX_ const char* pv);
#define PERL_ARGS_ASSERT_REQUIRE_PV \
assert(pv)
@@ -2910,14 +2892,20 @@ PERL_CALLCONV char* Perl_rninstr(const char* big, const char* bigend, const char
assert(big); assert(bigend); assert(little); assert(lend)
PERL_CALLCONV void Perl_rpeep(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_RPEEP
PERL_CALLCONV Sighandler_t Perl_rsignal(pTHX_ int i, Sighandler_t t);
+#define PERL_ARGS_ASSERT_RSIGNAL
PERL_CALLCONV int Perl_rsignal_restore(pTHX_ int i, Sigsave_t* t);
+#define PERL_ARGS_ASSERT_RSIGNAL_RESTORE
PERL_CALLCONV int Perl_rsignal_save(pTHX_ int i, Sighandler_t t1, Sigsave_t* save);
#define PERL_ARGS_ASSERT_RSIGNAL_SAVE \
assert(save)
PERL_CALLCONV Sighandler_t Perl_rsignal_state(pTHX_ int i);
+#define PERL_ARGS_ASSERT_RSIGNAL_STATE
PERL_CALLCONV int Perl_runops_debug(pTHX);
+#define PERL_ARGS_ASSERT_RUNOPS_DEBUG
PERL_CALLCONV int Perl_runops_standard(pTHX);
+#define PERL_ARGS_ASSERT_RUNOPS_STANDARD
PERL_CALLCONV CV* Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags);
#define PERL_ARGS_ASSERT_RV2CV_OP_CV \
assert(cvop)
@@ -2927,14 +2915,18 @@ PERL_CALLCONV void Perl_rxres_save(pTHX_ void **rsp, REGEXP *rx);
PERL_CALLCONV Malloc_t Perl_safesyscalloc(MEM_SIZE elements, MEM_SIZE size)
__attribute__malloc__
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SAFESYSCALLOC
PERL_CALLCONV Free_t Perl_safesysfree(Malloc_t where);
+#define PERL_ARGS_ASSERT_SAFESYSFREE
PERL_CALLCONV Malloc_t Perl_safesysmalloc(MEM_SIZE nbytes)
__attribute__malloc__
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SAFESYSMALLOC
PERL_CALLCONV Malloc_t Perl_safesysrealloc(Malloc_t where, MEM_SIZE nbytes)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SAFESYSREALLOC
PERL_CALLCONV void Perl_save_I16(pTHX_ I16* intp);
#define PERL_ARGS_ASSERT_SAVE_I16 \
@@ -2948,11 +2940,13 @@ PERL_CALLCONV void Perl_save_I8(pTHX_ I8* bytep);
PERL_CALLCONV void Perl_save_adelete(pTHX_ AV *av, SSize_t key);
#define PERL_ARGS_ASSERT_SAVE_ADELETE \
assert(av)
-/* PERL_CALLCONV void Perl_save_aelem(pTHX_ AV* av, SSize_t idx, SV **sptr); */
+/* PERL_CALLCONV void save_aelem(pTHX_ AV* av, SSize_t idx, SV **sptr); */
+#define PERL_ARGS_ASSERT_SAVE_AELEM
PERL_CALLCONV void Perl_save_aelem_flags(pTHX_ AV* av, SSize_t idx, SV **sptr, const U32 flags);
#define PERL_ARGS_ASSERT_SAVE_AELEM_FLAGS \
assert(av); assert(sptr)
PERL_CALLCONV I32 Perl_save_alloc(pTHX_ I32 size, I32 pad);
+#define PERL_ARGS_ASSERT_SAVE_ALLOC
PERL_CALLCONV void Perl_save_aptr(pTHX_ AV** aptr);
#define PERL_ARGS_ASSERT_SAVE_APTR \
assert(aptr)
@@ -2972,14 +2966,18 @@ PERL_CALLCONV void Perl_save_destructor(pTHX_ DESTRUCTORFUNC_NOCONTEXT_t f, void
#define PERL_ARGS_ASSERT_SAVE_DESTRUCTOR \
assert(p)
PERL_CALLCONV void Perl_save_destructor_x(pTHX_ DESTRUCTORFUNC_t f, void* p);
+#define PERL_ARGS_ASSERT_SAVE_DESTRUCTOR_X
#ifndef NO_MATHOMS
PERL_CALLCONV void Perl_save_freeop(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_SAVE_FREEOP
#endif
#ifndef NO_MATHOMS
PERL_CALLCONV void Perl_save_freepv(pTHX_ char* pv);
+#define PERL_ARGS_ASSERT_SAVE_FREEPV
#endif
#ifndef NO_MATHOMS
PERL_CALLCONV void Perl_save_freesv(pTHX_ SV* sv);
+#define PERL_ARGS_ASSERT_SAVE_FREESV
#endif
PERL_CALLCONV void Perl_save_generic_pvref(pTHX_ char** str);
#define PERL_ARGS_ASSERT_SAVE_GENERIC_PVREF \
@@ -2996,11 +2994,13 @@ PERL_CALLCONV HV* Perl_save_hash(pTHX_ GV* gv);
PERL_CALLCONV void Perl_save_hdelete(pTHX_ HV *hv, SV *keysv);
#define PERL_ARGS_ASSERT_SAVE_HDELETE \
assert(hv); assert(keysv)
-/* PERL_CALLCONV void Perl_save_helem(pTHX_ HV *hv, SV *key, SV **sptr); */
+/* PERL_CALLCONV void save_helem(pTHX_ HV *hv, SV *key, SV **sptr); */
+#define PERL_ARGS_ASSERT_SAVE_HELEM
PERL_CALLCONV void Perl_save_helem_flags(pTHX_ HV *hv, SV *key, SV **sptr, const U32 flags);
#define PERL_ARGS_ASSERT_SAVE_HELEM_FLAGS \
assert(hv); assert(key); assert(sptr)
PERL_CALLCONV void Perl_save_hints(pTHX);
+#define PERL_ARGS_ASSERT_SAVE_HINTS
PERL_CALLCONV void Perl_save_hptr(pTHX_ HV** hptr);
#define PERL_ARGS_ASSERT_SAVE_HPTR \
assert(hptr)
@@ -3014,36 +3014,48 @@ PERL_CALLCONV void Perl_save_iv(pTHX_ IV *ivp);
#define PERL_ARGS_ASSERT_SAVE_IV \
assert(ivp)
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_save_list(pTHX_ SV** sarg, I32 maxsarg);
+PERL_CALLCONV void Perl_save_list(pTHX_ SV** sarg, I32 maxsarg)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SAVE_LIST \
assert(sarg)
#endif
+
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_save_long(pTHX_ long* longp);
+PERL_CALLCONV void Perl_save_long(pTHX_ long* longp)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SAVE_LONG \
assert(longp)
#endif
+
#ifndef NO_MATHOMS
PERL_CALLCONV void Perl_save_mortalizesv(pTHX_ SV* sv);
#define PERL_ARGS_ASSERT_SAVE_MORTALIZESV \
assert(sv)
#endif
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_save_nogv(pTHX_ GV* gv);
+PERL_CALLCONV void Perl_save_nogv(pTHX_ GV* gv)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SAVE_NOGV \
assert(gv)
#endif
+
#ifndef NO_MATHOMS
PERL_CALLCONV void Perl_save_op(pTHX);
+#define PERL_ARGS_ASSERT_SAVE_OP
#endif
PERL_CALLCONV void Perl_save_padsv_and_mortalize(pTHX_ PADOFFSET off);
+#define PERL_ARGS_ASSERT_SAVE_PADSV_AND_MORTALIZE
PERL_CALLCONV void Perl_save_pptr(pTHX_ char** pptr);
#define PERL_ARGS_ASSERT_SAVE_PPTR \
assert(pptr)
PERL_CALLCONV void Perl_save_pushi32ptr(pTHX_ const I32 i, void *const ptr, const int type);
+#define PERL_ARGS_ASSERT_SAVE_PUSHI32PTR
PERL_CALLCONV void Perl_save_pushptr(pTHX_ void *const ptr, const int type);
+#define PERL_ARGS_ASSERT_SAVE_PUSHPTR
PERL_CALLCONV void Perl_save_pushptrptr(pTHX_ void *const ptr1, void *const ptr2, const int type);
+#define PERL_ARGS_ASSERT_SAVE_PUSHPTRPTR
PERL_CALLCONV void Perl_save_re_context(pTHX);
+#define PERL_ARGS_ASSERT_SAVE_RE_CONTEXT
PERL_CALLCONV SV* Perl_save_scalar(pTHX_ GV* gv);
#define PERL_ARGS_ASSERT_SAVE_SCALAR \
assert(gv)
@@ -3068,18 +3080,22 @@ PERL_CALLCONV void Perl_save_vptr(pTHX_ void *ptr);
PERL_CALLCONV char* Perl_savepv(pTHX_ const char* pv)
__attribute__malloc__
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SAVEPV
-PERL_CALLCONV char* Perl_savepvn(pTHX_ const char* pv, I32 len)
+PERL_CALLCONV char* Perl_savepvn(pTHX_ const char* pv, Size_t len)
__attribute__malloc__
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SAVEPVN
PERL_CALLCONV char* Perl_savesharedpv(pTHX_ const char* pv)
__attribute__malloc__
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SAVESHAREDPV
PERL_CALLCONV char* Perl_savesharedpvn(pTHX_ const char *const pv, const STRLEN len)
__attribute__malloc__
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SAVESHAREDPVN
PERL_CALLCONV char* Perl_savesharedsvpv(pTHX_ SV *sv)
__attribute__malloc__
@@ -3088,7 +3104,9 @@ PERL_CALLCONV char* Perl_savesharedsvpv(pTHX_ SV *sv)
assert(sv)
PERL_CALLCONV void Perl_savestack_grow(pTHX);
+#define PERL_ARGS_ASSERT_SAVESTACK_GROW
PERL_CALLCONV void Perl_savestack_grow_cnt(pTHX_ I32 need);
+#define PERL_ARGS_ASSERT_SAVESTACK_GROW_CNT
PERL_CALLCONV char* Perl_savesvpv(pTHX_ SV* sv)
__attribute__malloc__
__attribute__warn_unused_result__;
@@ -3096,8 +3114,11 @@ PERL_CALLCONV char* Perl_savesvpv(pTHX_ SV* sv)
assert(sv)
PERL_CALLCONV void Perl_savetmps(pTHX);
+#define PERL_ARGS_ASSERT_SAVETMPS
PERL_CALLCONV OP* Perl_sawparens(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_SAWPARENS
PERL_CALLCONV OP* Perl_scalar(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_SCALAR
PERL_CALLCONV OP* Perl_scalarvoid(pTHX_ OP* o);
#define PERL_ARGS_ASSERT_SCALARVOID \
assert(o)
@@ -3128,23 +3149,36 @@ PERL_CALLCONV char* Perl_scan_word(pTHX_ char *s, char *dest, STRLEN destlen, in
#define PERL_ARGS_ASSERT_SCAN_WORD \
assert(s); assert(dest); assert(slp)
PERL_CALLCONV U32 Perl_seed(pTHX);
+#define PERL_ARGS_ASSERT_SEED
PERL_CALLCONV void Perl_set_caret_X(pTHX);
+#define PERL_ARGS_ASSERT_SET_CARET_X
PERL_CALLCONV void Perl_set_context(void *t);
#define PERL_ARGS_ASSERT_SET_CONTEXT \
assert(t)
PERL_CALLCONV void Perl_set_numeric_standard(pTHX);
+#define PERL_ARGS_ASSERT_SET_NUMERIC_STANDARD
PERL_CALLCONV void Perl_set_numeric_underlying(pTHX);
+#define PERL_ARGS_ASSERT_SET_NUMERIC_UNDERLYING
PERL_CALLCONV void Perl_setdefout(pTHX_ GV* gv);
#define PERL_ARGS_ASSERT_SETDEFOUT \
assert(gv)
PERL_CALLCONV void Perl_setfd_cloexec(int fd);
+#define PERL_ARGS_ASSERT_SETFD_CLOEXEC
PERL_CALLCONV void Perl_setfd_cloexec_for_nonsysfd(pTHX_ int fd);
+#define PERL_ARGS_ASSERT_SETFD_CLOEXEC_FOR_NONSYSFD
PERL_CALLCONV void Perl_setfd_cloexec_or_inhexec_by_sysfdness(pTHX_ int fd);
+#define PERL_ARGS_ASSERT_SETFD_CLOEXEC_OR_INHEXEC_BY_SYSFDNESS
PERL_CALLCONV void Perl_setfd_inhexec(int fd);
+#define PERL_ARGS_ASSERT_SETFD_INHEXEC
PERL_CALLCONV void Perl_setfd_inhexec_for_sysfd(pTHX_ int fd);
+#define PERL_ARGS_ASSERT_SETFD_INHEXEC_FOR_SYSFD
PERL_CALLCONV HEK* Perl_share_hek(pTHX_ const char* str, SSize_t len, U32 hash);
#define PERL_ARGS_ASSERT_SHARE_HEK \
assert(str)
+PERL_CALLCONV Signal_t Perl_sighandler1(int sig);
+#define PERL_ARGS_ASSERT_SIGHANDLER1
+PERL_CALLCONV Signal_t Perl_sighandler3(int sig, Siginfo_t *info, void *uap);
+#define PERL_ARGS_ASSERT_SIGHANDLER3
PERL_CALLCONV char* Perl_skipspace_flags(pTHX_ char *s, U32 flags)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_SKIPSPACE_FLAGS \
@@ -3163,6 +3197,7 @@ PERL_CALLCONV PerlIO* Perl_start_glob(pTHX_ SV *tmpglob, IO *io);
#define PERL_ARGS_ASSERT_START_GLOB \
assert(tmpglob); assert(io)
PERL_CALLCONV I32 Perl_start_subparse(pTHX_ I32 is_format, U32 flags);
+#define PERL_ARGS_ASSERT_START_SUBPARSE
PERL_CALLCONV NV Perl_str_to_version(pTHX_ SV *sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_STR_TO_VERSION \
@@ -3194,6 +3229,7 @@ PERL_CALLCONV IV Perl_sv_2iv_flags(pTHX_ SV *const sv, const I32 flags);
#define PERL_ARGS_ASSERT_SV_2IV_FLAGS \
assert(sv)
PERL_CALLCONV SV* Perl_sv_2mortal(pTHX_ SV *const sv);
+#define PERL_ARGS_ASSERT_SV_2MORTAL
PERL_CALLCONV SV* Perl_sv_2num(pTHX_ SV *const sv);
#define PERL_ARGS_ASSERT_SV_2NUM \
assert(sv)
@@ -3215,9 +3251,14 @@ PERL_CALLCONV char* Perl_sv_2pv_nolen(pTHX_ SV* sv)
assert(sv)
#endif
+#ifndef NO_MATHOMS
PERL_CALLCONV char* Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp);
#define PERL_ARGS_ASSERT_SV_2PVBYTE \
assert(sv)
+#endif
+PERL_CALLCONV char* Perl_sv_2pvbyte_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags);
+#define PERL_ARGS_ASSERT_SV_2PVBYTE_FLAGS \
+ assert(sv)
#ifndef NO_MATHOMS
PERL_CALLCONV char* Perl_sv_2pvbyte_nolen(pTHX_ SV* sv)
__attribute__warn_unused_result__;
@@ -3225,9 +3266,14 @@ PERL_CALLCONV char* Perl_sv_2pvbyte_nolen(pTHX_ SV* sv)
assert(sv)
#endif
+#ifndef NO_MATHOMS
PERL_CALLCONV char* Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp);
#define PERL_ARGS_ASSERT_SV_2PVUTF8 \
assert(sv)
+#endif
+PERL_CALLCONV char* Perl_sv_2pvutf8_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags);
+#define PERL_ARGS_ASSERT_SV_2PVUTF8_FLAGS \
+ assert(sv)
#ifndef NO_MATHOMS
PERL_CALLCONV char* Perl_sv_2pvutf8_nolen(pTHX_ SV* sv)
__attribute__warn_unused_result__;
@@ -3301,14 +3347,20 @@ PERL_CALLCONV void Perl_sv_chop(pTHX_ SV *const sv, const char *const ptr);
#define PERL_ARGS_ASSERT_SV_CHOP \
assert(sv)
PERL_CALLCONV I32 Perl_sv_clean_all(pTHX);
+#define PERL_ARGS_ASSERT_SV_CLEAN_ALL
PERL_CALLCONV void Perl_sv_clean_objs(pTHX);
+#define PERL_ARGS_ASSERT_SV_CLEAN_OBJS
PERL_CALLCONV void Perl_sv_clear(pTHX_ SV *const orig_sv);
#define PERL_ARGS_ASSERT_SV_CLEAR \
assert(orig_sv)
PERL_CALLCONV I32 Perl_sv_cmp(pTHX_ SV *const sv1, SV *const sv2);
+#define PERL_ARGS_ASSERT_SV_CMP
PERL_CALLCONV I32 Perl_sv_cmp_flags(pTHX_ SV *const sv1, SV *const sv2, const U32 flags);
+#define PERL_ARGS_ASSERT_SV_CMP_FLAGS
PERL_CALLCONV I32 Perl_sv_cmp_locale(pTHX_ SV *const sv1, SV *const sv2);
+#define PERL_ARGS_ASSERT_SV_CMP_LOCALE
PERL_CALLCONV I32 Perl_sv_cmp_locale_flags(pTHX_ SV *const sv1, SV *const sv2, const U32 flags);
+#define PERL_ARGS_ASSERT_SV_CMP_LOCALE_FLAGS
#ifndef NO_MATHOMS
PERL_CALLCONV void Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv);
#define PERL_ARGS_ASSERT_SV_COPYPV \
@@ -3317,9 +3369,12 @@ PERL_CALLCONV void Perl_sv_copypv(pTHX_ SV *const dsv, SV *const ssv);
PERL_CALLCONV void Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags);
#define PERL_ARGS_ASSERT_SV_COPYPV_FLAGS \
assert(dsv); assert(ssv)
-/* PERL_CALLCONV void Perl_sv_copypv_nomg(pTHX_ SV *const dsv, SV *const ssv); */
+/* PERL_CALLCONV void sv_copypv_nomg(pTHX_ SV *const dsv, SV *const ssv); */
+#define PERL_ARGS_ASSERT_SV_COPYPV_NOMG
PERL_CALLCONV void Perl_sv_dec(pTHX_ SV *const sv);
+#define PERL_ARGS_ASSERT_SV_DEC
PERL_CALLCONV void Perl_sv_dec_nomg(pTHX_ SV *const sv);
+#define PERL_ARGS_ASSERT_SV_DEC_NOMG
PERL_CALLCONV void Perl_sv_del_backref(pTHX_ SV *const tsv, SV *const sv);
#define PERL_ARGS_ASSERT_SV_DEL_BACKREF \
assert(tsv); assert(sv)
@@ -3344,6 +3399,7 @@ PERL_CALLCONV bool Perl_sv_derived_from_sv(pTHX_ SV* sv, SV *namesv, U32 flags)
assert(sv); assert(namesv)
PERL_CALLCONV bool Perl_sv_destroyable(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SV_DESTROYABLE
PERL_CALLCONV bool Perl_sv_does(pTHX_ SV* sv, const char *const name)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_SV_DOES \
@@ -3365,10 +3421,13 @@ PERL_CALLCONV bool Perl_sv_does_sv(pTHX_ SV* sv, SV* namesv, U32 flags)
assert(sv); assert(namesv)
PERL_CALLCONV void Perl_sv_dump(pTHX_ SV* sv);
+#define PERL_ARGS_ASSERT_SV_DUMP
#ifndef NO_MATHOMS
PERL_CALLCONV I32 Perl_sv_eq(pTHX_ SV* sv1, SV* sv2);
+#define PERL_ARGS_ASSERT_SV_EQ
#endif
PERL_CALLCONV I32 Perl_sv_eq_flags(pTHX_ SV* sv1, SV* sv2, const U32 flags);
+#define PERL_ARGS_ASSERT_SV_EQ_FLAGS
#ifndef NO_MATHOMS
PERL_CALLCONV void Perl_sv_force_normal(pTHX_ SV *sv);
#define PERL_ARGS_ASSERT_SV_FORCE_NORMAL \
@@ -3378,10 +3437,12 @@ PERL_CALLCONV void Perl_sv_force_normal_flags(pTHX_ SV *const sv, const U32 flag
#define PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS \
assert(sv)
PERL_CALLCONV void Perl_sv_free(pTHX_ SV *const sv);
+#define PERL_ARGS_ASSERT_SV_FREE
PERL_CALLCONV void Perl_sv_free2(pTHX_ SV *const sv, const U32 refcnt);
#define PERL_ARGS_ASSERT_SV_FREE2 \
assert(sv)
PERL_CALLCONV void Perl_sv_free_arenas(pTHX);
+#define PERL_ARGS_ASSERT_SV_FREE_ARENAS
PERL_CALLCONV SV* Perl_sv_get_backrefs(SV *const sv);
#define PERL_ARGS_ASSERT_SV_GET_BACKREFS \
assert(sv)
@@ -3392,7 +3453,9 @@ PERL_CALLCONV char* Perl_sv_grow(pTHX_ SV *const sv, STRLEN newlen);
#define PERL_ARGS_ASSERT_SV_GROW \
assert(sv)
PERL_CALLCONV void Perl_sv_inc(pTHX_ SV *const sv);
+#define PERL_ARGS_ASSERT_SV_INC
PERL_CALLCONV void Perl_sv_inc_nomg(pTHX_ SV *const sv);
+#define PERL_ARGS_ASSERT_SV_INC_NOMG
#ifndef NO_MATHOMS
PERL_CALLCONV void Perl_sv_insert(pTHX_ SV *const bigstr, const STRLEN offset, const STRLEN len, const char *const little, const STRLEN littlelen);
#define PERL_ARGS_ASSERT_SV_INSERT \
@@ -3404,14 +3467,24 @@ PERL_CALLCONV void Perl_sv_insert_flags(pTHX_ SV *const bigstr, const STRLEN off
PERL_CALLCONV int Perl_sv_isa(pTHX_ SV* sv, const char *const name);
#define PERL_ARGS_ASSERT_SV_ISA \
assert(name)
+PERL_CALLCONV bool Perl_sv_isa_sv(pTHX_ SV* sv, SV* namesv)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SV_ISA_SV \
+ assert(sv); assert(namesv)
+
PERL_CALLCONV int Perl_sv_isobject(pTHX_ SV* sv);
+#define PERL_ARGS_ASSERT_SV_ISOBJECT
#ifndef NO_MATHOMS
-PERL_CALLCONV IV Perl_sv_iv(pTHX_ SV* sv);
+PERL_CALLCONV IV Perl_sv_iv(pTHX_ SV* sv)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SV_IV \
assert(sv)
#endif
+
PERL_CALLCONV STRLEN Perl_sv_len(pTHX_ SV *const sv);
+#define PERL_ARGS_ASSERT_SV_LEN
PERL_CALLCONV STRLEN Perl_sv_len_utf8(pTHX_ SV *const sv);
+#define PERL_ARGS_ASSERT_SV_LEN_UTF8
PERL_CALLCONV STRLEN Perl_sv_len_utf8_nomg(pTHX_ SV *const sv);
#define PERL_ARGS_ASSERT_SV_LEN_UTF8_NOMG \
assert(sv)
@@ -3427,33 +3500,47 @@ PERL_CALLCONV MAGIC * Perl_sv_magicext_mglob(pTHX_ SV *sv);
#ifndef NO_MATHOMS
PERL_CALLCONV SV* Perl_sv_mortalcopy(pTHX_ SV *const oldsv)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SV_MORTALCOPY
#endif
PERL_CALLCONV SV* Perl_sv_mortalcopy_flags(pTHX_ SV *const oldsv, U32 flags)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SV_MORTALCOPY_FLAGS
PERL_CALLCONV SV* Perl_sv_newmortal(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SV_NEWMORTAL
PERL_CALLCONV SV* Perl_sv_newref(pTHX_ SV *const sv);
+#define PERL_ARGS_ASSERT_SV_NEWREF
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_sv_nolocking(pTHX_ SV *sv);
+PERL_CALLCONV void Perl_sv_nolocking(pTHX_ SV *sv)
+ __attribute__deprecated__;
+#define PERL_ARGS_ASSERT_SV_NOLOCKING
#endif
+
PERL_CALLCONV void Perl_sv_nosharing(pTHX_ SV *sv);
+#define PERL_ARGS_ASSERT_SV_NOSHARING
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_sv_nounlocking(pTHX_ SV *sv);
+PERL_CALLCONV void Perl_sv_nounlocking(pTHX_ SV *sv)
+ __attribute__deprecated__;
+#define PERL_ARGS_ASSERT_SV_NOUNLOCKING
#endif
+
#ifndef NO_MATHOMS
-PERL_CALLCONV NV Perl_sv_nv(pTHX_ SV* sv);
+PERL_CALLCONV NV Perl_sv_nv(pTHX_ SV* sv)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SV_NV \
assert(sv)
#endif
+
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_sv_only_taint_gmagic(SV *sv);
+PERL_STATIC_INLINE bool Perl_sv_only_taint_gmagic(SV *sv);
#define PERL_ARGS_ASSERT_SV_ONLY_TAINT_GMAGIC \
assert(sv)
#endif
PERL_CALLCONV char* Perl_sv_peek(pTHX_ SV* sv);
+#define PERL_ARGS_ASSERT_SV_PEEK
PERL_CALLCONV void Perl_sv_pos_b2u(pTHX_ SV *const sv, I32 *const offsetp);
#define PERL_ARGS_ASSERT_SV_POS_B2U \
assert(offsetp)
@@ -3481,18 +3568,22 @@ PERL_CALLCONV char* Perl_sv_pvbyte(pTHX_ SV *sv)
#endif
#ifndef NO_MATHOMS
-PERL_CALLCONV char* Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp);
+PERL_CALLCONV char* Perl_sv_pvbyten(pTHX_ SV *sv, STRLEN *lp)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SV_PVBYTEN \
assert(sv); assert(lp)
#endif
+
PERL_CALLCONV char* Perl_sv_pvbyten_force(pTHX_ SV *const sv, STRLEN *const lp);
#define PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE \
assert(sv)
#ifndef NO_MATHOMS
-PERL_CALLCONV char* Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp);
+PERL_CALLCONV char* Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SV_PVN \
assert(sv); assert(lp)
#endif
+
#ifndef NO_MATHOMS
PERL_CALLCONV char* Perl_sv_pvn_force(pTHX_ SV* sv, STRLEN* lp);
#define PERL_ARGS_ASSERT_SV_PVN_FORCE \
@@ -3502,10 +3593,12 @@ PERL_CALLCONV char* Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp
#define PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS \
assert(sv)
#ifndef NO_MATHOMS
-PERL_CALLCONV char* Perl_sv_pvn_nomg(pTHX_ SV* sv, STRLEN* lp);
+PERL_CALLCONV char* Perl_sv_pvn_nomg(pTHX_ SV* sv, STRLEN* lp)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SV_PVN_NOMG \
assert(sv)
#endif
+
#ifndef NO_MATHOMS
PERL_CALLCONV char* Perl_sv_pvutf8(pTHX_ SV *sv)
__attribute__warn_unused_result__;
@@ -3514,10 +3607,12 @@ PERL_CALLCONV char* Perl_sv_pvutf8(pTHX_ SV *sv)
#endif
#ifndef NO_MATHOMS
-PERL_CALLCONV char* Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp);
+PERL_CALLCONV char* Perl_sv_pvutf8n(pTHX_ SV *sv, STRLEN *lp)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SV_PVUTF8N \
assert(sv); assert(lp)
#endif
+
PERL_CALLCONV char* Perl_sv_pvutf8n_force(pTHX_ SV *const sv, STRLEN *const lp);
#define PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE \
assert(sv)
@@ -3536,10 +3631,12 @@ PERL_CALLCONV void Perl_sv_replace(pTHX_ SV *const sv, SV *const nsv);
#define PERL_ARGS_ASSERT_SV_REPLACE \
assert(sv); assert(nsv)
PERL_CALLCONV void Perl_sv_report_used(pTHX);
+#define PERL_ARGS_ASSERT_SV_REPORT_USED
PERL_CALLCONV void Perl_sv_reset(pTHX_ const char* s, HV *const stash);
#define PERL_ARGS_ASSERT_SV_RESET \
assert(s)
PERL_CALLCONV void Perl_sv_resetpvn(pTHX_ const char* s, STRLEN len, HV *const stash);
+#define PERL_ARGS_ASSERT_SV_RESETPVN
PERL_CALLCONV SV* Perl_sv_rvunweaken(pTHX_ SV *const sv);
#define PERL_ARGS_ASSERT_SV_RVUNWEAKEN \
assert(sv)
@@ -3584,15 +3681,19 @@ PERL_CALLCONV void Perl_sv_setpvf_mg(pTHX_ SV *const sv, const char *const pat,
assert(sv); assert(pat)
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_sv_setpviv(pTHX_ SV *const sv, const IV num);
+PERL_CALLCONV void Perl_sv_setpviv(pTHX_ SV *const sv, const IV num)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SV_SETPVIV \
assert(sv)
#endif
+
#ifndef NO_MATHOMS
-PERL_CALLCONV void Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv);
+PERL_CALLCONV void Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SV_SETPVIV_MG \
assert(sv)
#endif
+
PERL_CALLCONV void Perl_sv_setpvn(pTHX_ SV *const sv, const char *const ptr, const STRLEN len);
#define PERL_ARGS_ASSERT_SV_SETPVN \
assert(sv)
@@ -3632,6 +3733,7 @@ PERL_CALLCONV void Perl_sv_setuv_mg(pTHX_ SV *const sv, const UV u);
#define PERL_ARGS_ASSERT_SV_SETUV_MG \
assert(sv)
PERL_CALLCONV SV* Perl_sv_string_from_errnum(pTHX_ int errnum, SV* tgtsv);
+#define PERL_ARGS_ASSERT_SV_STRING_FROM_ERRNUM
#ifndef NO_MATHOMS
PERL_CALLCONV void Perl_sv_taint(pTHX_ SV* sv);
#define PERL_ARGS_ASSERT_SV_TAINT \
@@ -3643,6 +3745,7 @@ PERL_CALLCONV bool Perl_sv_tainted(pTHX_ SV *const sv)
assert(sv)
PERL_CALLCONV I32 Perl_sv_true(pTHX_ SV *const sv);
+#define PERL_ARGS_ASSERT_SV_TRUE
PERL_CALLCONV char* Perl_sv_uni_display(pTHX_ SV *dsv, SV *ssv, STRLEN pvlim, UV flags)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_SV_UNI_DISPLAY \
@@ -3684,9 +3787,16 @@ PERL_CALLCONV void Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len);
PERL_CALLCONV bool Perl_sv_utf8_decode(pTHX_ SV *const sv);
#define PERL_ARGS_ASSERT_SV_UTF8_DECODE \
assert(sv)
+#ifndef NO_MATHOMS
PERL_CALLCONV bool Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok);
#define PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE \
assert(sv)
+#endif
+PERL_CALLCONV bool Perl_sv_utf8_downgrade_flags(pTHX_ SV *const sv, const bool fail_ok, const U32 flags);
+#define PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE_FLAGS \
+ assert(sv)
+/* PERL_CALLCONV bool sv_utf8_downgrade_nomg(pTHX_ SV *const sv, const bool fail_ok); */
+#define PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE_NOMG
PERL_CALLCONV void Perl_sv_utf8_encode(pTHX_ SV *const sv);
#define PERL_ARGS_ASSERT_SV_UTF8_ENCODE \
assert(sv)
@@ -3695,16 +3805,20 @@ PERL_CALLCONV STRLEN Perl_sv_utf8_upgrade(pTHX_ SV *sv);
#define PERL_ARGS_ASSERT_SV_UTF8_UPGRADE \
assert(sv)
#endif
-/* PERL_CALLCONV STRLEN Perl_sv_utf8_upgrade_flags(pTHX_ SV *const sv, const I32 flags); */
+/* PERL_CALLCONV STRLEN sv_utf8_upgrade_flags(pTHX_ SV *const sv, const I32 flags); */
+#define PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS
PERL_CALLCONV STRLEN Perl_sv_utf8_upgrade_flags_grow(pTHX_ SV *const sv, const I32 flags, STRLEN extra);
#define PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW \
assert(sv)
/* PERL_CALLCONV STRLEN sv_utf8_upgrade_nomg(pTHX_ SV *sv); */
+#define PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_NOMG
#ifndef NO_MATHOMS
-PERL_CALLCONV UV Perl_sv_uv(pTHX_ SV* sv);
+PERL_CALLCONV UV Perl_sv_uv(pTHX_ SV* sv)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_SV_UV \
assert(sv)
#endif
+
PERL_CALLCONV void Perl_sv_vcatpvf(pTHX_ SV *const sv, const char *const pat, va_list *const args);
#define PERL_ARGS_ASSERT_SV_VCATPVF \
assert(sv); assert(pat)
@@ -3726,16 +3840,10 @@ PERL_CALLCONV void Perl_sv_vsetpvf_mg(pTHX_ SV *const sv, const char *const pat,
PERL_CALLCONV void Perl_sv_vsetpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, va_list *const args, SV **const svargs, const Size_t sv_count, bool *const maybe_tainted);
#define PERL_ARGS_ASSERT_SV_VSETPVFN \
assert(sv); assert(pat)
-PERL_CALLCONV UV Perl_swash_fetch(pTHX_ SV *swash, const U8 *ptr, bool do_utf8);
-#define PERL_ARGS_ASSERT_SWASH_FETCH \
- assert(swash); assert(ptr)
-PERL_CALLCONV SV* Perl_swash_init(pTHX_ const char* pkg, const char* name, SV* listsv, I32 minbits, I32 none)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_SWASH_INIT \
- assert(pkg); assert(name); assert(listsv)
-
PERL_CALLCONV void Perl_switch_to_global_locale(void);
+#define PERL_ARGS_ASSERT_SWITCH_TO_GLOBAL_LOCALE
PERL_CALLCONV bool Perl_sync_locale(void);
+#define PERL_ARGS_ASSERT_SYNC_LOCALE
PERL_CALLCONV void Perl_sys_init(int* argc, char*** argv);
#define PERL_ARGS_ASSERT_SYS_INIT \
assert(argc); assert(argv)
@@ -3743,91 +3851,57 @@ PERL_CALLCONV void Perl_sys_init3(int* argc, char*** argv, char*** env);
#define PERL_ARGS_ASSERT_SYS_INIT3 \
assert(argc); assert(argv); assert(env)
PERL_CALLCONV void Perl_sys_term(void);
+#define PERL_ARGS_ASSERT_SYS_TERM
PERL_CALLCONV void Perl_taint_env(pTHX);
+#define PERL_ARGS_ASSERT_TAINT_ENV
PERL_CALLCONV void Perl_taint_proper(pTHX_ const char* f, const char *const s);
#define PERL_ARGS_ASSERT_TAINT_PROPER \
assert(s)
PERL_CALLCONV void Perl_thread_locale_init(void);
+#define PERL_ARGS_ASSERT_THREAD_LOCALE_INIT
PERL_CALLCONV void Perl_thread_locale_term(void);
+#define PERL_ARGS_ASSERT_THREAD_LOCALE_TERM
PERL_CALLCONV OP * Perl_tied_method(pTHX_ SV *methname, SV **sp, SV *const sv, const MAGIC *const mg, const U32 flags, U32 argc, ...);
#define PERL_ARGS_ASSERT_TIED_METHOD \
assert(methname); assert(sp); assert(sv); assert(mg)
PERL_CALLCONV SSize_t Perl_tmps_grow_p(pTHX_ SSize_t ix);
-/* PERL_CALLCONV UV Perl_to_uni_fold(pTHX_ UV c, U8 *p, STRLEN *lenp); */
+#define PERL_ARGS_ASSERT_TMPS_GROW_P
+/* PERL_CALLCONV UV to_uni_fold(pTHX_ UV c, U8 *p, STRLEN *lenp); */
+#define PERL_ARGS_ASSERT_TO_UNI_FOLD
PERL_CALLCONV UV Perl_to_uni_lower(pTHX_ UV c, U8 *p, STRLEN *lenp);
#define PERL_ARGS_ASSERT_TO_UNI_LOWER \
assert(p); assert(lenp)
-#ifndef NO_MATHOMS
-PERL_CALLCONV U32 Perl_to_uni_lower_lc(pTHX_ U32 c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
PERL_CALLCONV UV Perl_to_uni_title(pTHX_ UV c, U8 *p, STRLEN *lenp);
#define PERL_ARGS_ASSERT_TO_UNI_TITLE \
assert(p); assert(lenp)
-#ifndef NO_MATHOMS
-PERL_CALLCONV U32 Perl_to_uni_title_lc(pTHX_ U32 c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
PERL_CALLCONV UV Perl_to_uni_upper(pTHX_ UV c, U8 *p, STRLEN *lenp);
#define PERL_ARGS_ASSERT_TO_UNI_UPPER \
assert(p); assert(lenp)
-#ifndef NO_MATHOMS
-PERL_CALLCONV U32 Perl_to_uni_upper_lc(pTHX_ U32 c)
- __attribute__deprecated__
- __attribute__warn_unused_result__;
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV UV Perl_to_utf8_fold(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
- __attribute__deprecated__;
-#define PERL_ARGS_ASSERT_TO_UTF8_FOLD \
- assert(p); assert(ustrp)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV UV Perl_to_utf8_lower(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
- __attribute__deprecated__;
-#define PERL_ARGS_ASSERT_TO_UTF8_LOWER \
- assert(p); assert(ustrp)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV UV Perl_to_utf8_title(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
- __attribute__deprecated__;
-#define PERL_ARGS_ASSERT_TO_UTF8_TITLE \
- assert(p); assert(ustrp)
-#endif
-
-#ifndef NO_MATHOMS
-PERL_CALLCONV UV Perl_to_utf8_upper(pTHX_ const U8 *p, U8* ustrp, STRLEN *lenp)
- __attribute__deprecated__;
-#define PERL_ARGS_ASSERT_TO_UTF8_UPPER \
- assert(p); assert(ustrp)
-#endif
-
PERL_CALLCONV bool Perl_try_amagic_bin(pTHX_ int method, int flags);
+#define PERL_ARGS_ASSERT_TRY_AMAGIC_BIN
PERL_CALLCONV bool Perl_try_amagic_un(pTHX_ int method, int flags);
+#define PERL_ARGS_ASSERT_TRY_AMAGIC_UN
#ifndef NO_MATHOMS
-PERL_CALLCONV SSize_t Perl_unpack_str(pTHX_ const char *pat, const char *patend, const char *s, const char *strbeg, const char *strend, char **new_s, I32 ocnt, U32 flags);
+PERL_CALLCONV SSize_t Perl_unpack_str(pTHX_ const char *pat, const char *patend, const char *s, const char *strbeg, const char *strend, char **new_s, I32 ocnt, U32 flags)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_UNPACK_STR \
assert(pat); assert(patend); assert(s); assert(strend)
#endif
+
PERL_CALLCONV SSize_t Perl_unpackstring(pTHX_ const char *pat, const char *patend, const char *s, const char *strend, U32 flags);
#define PERL_ARGS_ASSERT_UNPACKSTRING \
assert(pat); assert(patend); assert(s); assert(strend)
PERL_CALLCONV void Perl_unshare_hek(pTHX_ HEK* hek);
+#define PERL_ARGS_ASSERT_UNSHARE_HEK
PERL_CALLCONV void Perl_unsharepvn(pTHX_ const char* sv, I32 len, U32 hash);
+#define PERL_ARGS_ASSERT_UNSHAREPVN
PERL_CALLCONV SV* Perl_upg_version(pTHX_ SV *ver, bool qv);
#define PERL_ARGS_ASSERT_UPG_VERSION \
assert(ver)
-PERL_CALLCONV U8* Perl_utf16_to_utf8(pTHX_ U8* p, U8 *d, I32 bytelen, I32 *newlen);
+PERL_CALLCONV U8* Perl_utf16_to_utf8(pTHX_ U8* p, U8 *d, Size_t bytelen, Size_t *newlen);
#define PERL_ARGS_ASSERT_UTF16_TO_UTF8 \
assert(p); assert(d); assert(newlen)
-PERL_CALLCONV U8* Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8 *d, I32 bytelen, I32 *newlen);
+PERL_CALLCONV U8* Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8 *d, Size_t bytelen, Size_t *newlen);
#define PERL_ARGS_ASSERT_UTF16_TO_UTF8_REVERSED \
assert(p); assert(d); assert(newlen)
#ifndef PERL_NO_INLINE_FUNCTIONS
@@ -3873,14 +3947,21 @@ PERL_CALLCONV STRLEN Perl_utf8_length(pTHX_ const U8* s, const U8 *e)
PERL_CALLCONV U8* Perl_utf8_to_bytes(pTHX_ U8 *s, STRLEN *lenp);
#define PERL_ARGS_ASSERT_UTF8_TO_BYTES \
assert(s); assert(lenp)
+#ifndef NO_MATHOMS
PERL_CALLCONV UV Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen)
__attribute__deprecated__;
#define PERL_ARGS_ASSERT_UTF8_TO_UVCHR \
assert(s)
+#endif
PERL_CALLCONV UV Perl_utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen);
#define PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF \
assert(s); assert(send)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE UV Perl_utf8_to_uvchr_buf_helper(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen);
+#define PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF_HELPER \
+ assert(s); assert(send)
+#endif
#ifndef NO_MATHOMS
PERL_CALLCONV UV Perl_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen)
__attribute__deprecated__;
@@ -3900,19 +3981,26 @@ PERL_CALLCONV UV Perl_utf8n_to_uvchr_error(const U8 *s, STRLEN curlen, STRLEN *r
#define PERL_ARGS_ASSERT_UTF8N_TO_UVCHR_ERROR \
assert(s)
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE UV S_utf8n_to_uvchr_msgs(const U8 *s, STRLEN curlen, STRLEN *retlen, const U32 flags, U32 * errors, AV ** msgs);
+PERL_STATIC_INLINE UV Perl_utf8n_to_uvchr_msgs(const U8 *s, STRLEN curlen, STRLEN *retlen, const U32 flags, U32 * errors, AV ** msgs);
#define PERL_ARGS_ASSERT_UTF8N_TO_UVCHR_MSGS \
assert(s)
#endif
-PERL_CALLCONV UV Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags);
+#ifndef NO_MATHOMS
+PERL_CALLCONV UV Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_UTF8N_TO_UVUNI \
assert(s)
+#endif
+
PERL_CALLCONV void Perl_utilize(pTHX_ int aver, I32 floor, OP* version, OP* idop, OP* arg);
#define PERL_ARGS_ASSERT_UTILIZE \
assert(idop)
/* PERL_CALLCONV U8* uvchr_to_utf8(pTHX_ U8 *d, UV uv); */
+#define PERL_ARGS_ASSERT_UVCHR_TO_UTF8
/* PERL_CALLCONV U8* uvchr_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags); */
+#define PERL_ARGS_ASSERT_UVCHR_TO_UTF8_FLAGS
/* PERL_CALLCONV U8* uvchr_to_utf8_flags_msgs(pTHX_ U8 *d, UV uv, UV flags, HV ** msgs); */
+#define PERL_ARGS_ASSERT_UVCHR_TO_UTF8_FLAGS_MSGS
PERL_CALLCONV U8* Perl_uvoffuni_to_utf8_flags(pTHX_ U8 *d, UV uv, const UV flags);
#define PERL_ARGS_ASSERT_UVOFFUNI_TO_UTF8_FLAGS \
assert(d)
@@ -3922,9 +4010,13 @@ PERL_CALLCONV U8* Perl_uvoffuni_to_utf8_flags_msgs(pTHX_ U8 *d, UV uv, const UV
PERL_CALLCONV U8* Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv);
#define PERL_ARGS_ASSERT_UVUNI_TO_UTF8 \
assert(d)
-PERL_CALLCONV U8* Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags);
+#ifndef NO_MATHOMS
+PERL_CALLCONV U8* Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS \
assert(d)
+#endif
+
#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE UV Perl_valid_utf8_to_uvchr(const U8 *s, STRLEN *retlen)
__attribute__warn_unused_result__;
@@ -3947,6 +4039,7 @@ PERL_CALLCONV int Perl_vcmp(pTHX_ SV *lhv, SV *rhv);
assert(lhv); assert(rhv)
PERL_CALLCONV_NO_RET void Perl_vcroak(pTHX_ const char* pat, va_list* args)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_VCROAK
PERL_CALLCONV void Perl_vdeb(pTHX_ const char* pat, va_list* args);
#define PERL_ARGS_ASSERT_VDEB \
@@ -4009,11 +4102,13 @@ PERL_CALLCONV void Perl_warner(pTHX_ U32 err, const char* pat, ...)
PERL_CALLCONV I32 Perl_was_lvalue_sub(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_WAS_LVALUE_SUB
PERL_CALLCONV void Perl_watch(pTHX_ char** addr);
#define PERL_ARGS_ASSERT_WATCH \
assert(addr)
/* PERL_CALLCONV I32 whichsig(pTHX_ const char* sig); */
+#define PERL_ARGS_ASSERT_WHICHSIG
PERL_CALLCONV I32 Perl_whichsig_pv(pTHX_ const char* sig);
#define PERL_ARGS_ASSERT_WHICHSIG_PV \
assert(sig)
@@ -4033,6 +4128,7 @@ PERL_CALLCONV void Perl_write_to_stderr(pTHX_ SV* msv);
#define PERL_ARGS_ASSERT_WRITE_TO_STDERR \
assert(msv)
PERL_CALLCONV void Perl_xs_boot_epilog(pTHX_ const I32 ax);
+#define PERL_ARGS_ASSERT_XS_BOOT_EPILOG
PERL_CALLCONV I32 Perl_xs_handshake(const U32 key, void * v_my_perl, const char * file, ...);
#define PERL_ARGS_ASSERT_XS_HANDSHAKE \
assert(v_my_perl); assert(file)
@@ -4043,10 +4139,15 @@ PERL_CALLCONV int Perl_yyerror_pv(pTHX_ const char *const s, U32 flags);
#define PERL_ARGS_ASSERT_YYERROR_PV \
assert(s)
PERL_CALLCONV int Perl_yyerror_pvn(pTHX_ const char *const s, STRLEN len, U32 flags);
+#define PERL_ARGS_ASSERT_YYERROR_PVN
PERL_CALLCONV int Perl_yylex(pTHX);
+#define PERL_ARGS_ASSERT_YYLEX
PERL_CALLCONV int Perl_yyparse(pTHX_ int gramtype);
+#define PERL_ARGS_ASSERT_YYPARSE
PERL_CALLCONV void Perl_yyquit(pTHX);
+#define PERL_ARGS_ASSERT_YYQUIT
PERL_CALLCONV void Perl_yyunlex(pTHX);
+#define PERL_ARGS_ASSERT_YYUNLEX
#if ! defined(HAS_MEMRCHR) && (defined(PERL_CORE) || defined(PERL_EXT))
#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE void * S_my_memrchr(const char * s, const char c, const STRLEN len);
@@ -4054,6 +4155,13 @@ PERL_STATIC_INLINE void * S_my_memrchr(const char * s, const char c, const STRLE
assert(s)
#endif
#endif
+#if !(!defined(PERL_EXT_RE_BUILD))
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
+PERL_CALLCONV SV* Perl_get_re_gclass_nonbitmap_data(pTHX_ const regexp *prog, const struct regnode *node, bool doinit, SV **listsvp, SV **lonly_utf8_locale, SV **output_invlist);
+#define PERL_ARGS_ASSERT_GET_RE_GCLASS_NONBITMAP_DATA \
+ assert(node)
+# endif
+#endif
#if !(defined(DEBUGGING))
# if !defined(NV_PRESERVES_UV)
# if defined(PERL_IN_SV_C)
@@ -4063,26 +4171,16 @@ STATIC int S_sv_2iuv_non_preserve(pTHX_ SV *const sv);
# endif
# endif
#endif
-#if !(defined(HAS_MEMMEM))
-PERL_CALLCONV char* Perl_ninstr(const char* big, const char* bigend, const char* little, const char* lend)
- __attribute__warn_unused_result__
- __attribute__pure__;
-#define PERL_ARGS_ASSERT_NINSTR \
- assert(big); assert(bigend); assert(little); assert(lend)
-
-#endif
#if !(defined(HAS_NL_LANGINFO) && defined(PERL_LANGINFO_H))
PERL_CALLCONV const char* Perl_langinfo(const int item);
+#define PERL_ARGS_ASSERT_PERL_LANGINFO
#endif
#if !(defined(HAS_NL_LANGINFO))
# if defined(PERL_IN_LOCALE_C)
STATIC const char* S_my_nl_langinfo(const int item, bool toggle);
+#define PERL_ARGS_ASSERT_MY_NL_LANGINFO
# endif
#endif
-#if !(defined(HAS_SIGACTION) && defined(SA_SIGINFO))
-PERL_CALLCONV Signal_t Perl_csighandler(int sig);
-PERL_CALLCONV Signal_t Perl_sighandler(int sig);
-#endif
#if !(defined(PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION))
PERL_CALLCONV bool Perl_do_exec(pTHX_ const char* cmd);
#define PERL_ARGS_ASSERT_DO_EXEC \
@@ -4095,6 +4193,12 @@ PERL_CALLCONV void* Perl_my_cxt_init(pTHX_ int *indexp, size_t size);
assert(indexp)
# endif
#endif
+#if !(defined(PERL_USE_3ARG_SIGHANDLER))
+PERL_CALLCONV Signal_t Perl_csighandler(int sig);
+#define PERL_ARGS_ASSERT_CSIGHANDLER
+PERL_CALLCONV Signal_t Perl_sighandler(int sig);
+#define PERL_ARGS_ASSERT_SIGHANDLER
+#endif
#if !(defined(_MSC_VER))
PERL_CALLCONV_NO_RET int Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg)
__attribute__noreturn__;
@@ -4104,8 +4208,9 @@ PERL_CALLCONV_NO_RET int Perl_magic_regdatum_set(pTHX_ SV* sv, MAGIC* mg)
#endif
#if !defined(EBCDIC)
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE unsigned int S__variant_byte_number(PERL_UINTMAX_T word)
+PERL_STATIC_INLINE unsigned int Perl_variant_byte_number(PERL_UINTMAX_T word)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_VARIANT_BYTE_NUMBER
#endif
#endif
@@ -4142,22 +4247,28 @@ PERL_CALLCONV I32 Perl_same_dirent(pTHX_ const char* a, const char* b);
PERL_CALLCONV int Perl_signbit(NV f)
__attribute__warn_unused_result__
__attribute__pure__;
+#define PERL_ARGS_ASSERT_PERL_SIGNBIT
#endif
#if !defined(HAS_STRLCAT)
PERL_CALLCONV Size_t Perl_my_strlcat(char *dst, const char *src, Size_t size);
+#define PERL_ARGS_ASSERT_MY_STRLCAT
#endif
#if !defined(HAS_STRLCPY)
PERL_CALLCONV Size_t Perl_my_strlcpy(char *dst, const char *src, Size_t size);
+#define PERL_ARGS_ASSERT_MY_STRLCPY
#endif
#if !defined(HAS_STRNLEN)
-PERL_CALLCONV Size_t Perl_my_strnlen(const char *str, Size_t maxlen);
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE Size_t Perl_my_strnlen(const char *str, Size_t maxlen);
#define PERL_ARGS_ASSERT_MY_STRNLEN \
assert(str)
#endif
+#endif
#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
PERL_CALLCONV I32 Perl_my_chsize(pTHX_ int fd, Off_t length)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_MY_CHSIZE
#endif
#if !defined(NV_PRESERVES_UV)
@@ -4205,9 +4316,6 @@ PERL_STATIC_INLINE void S_invlist_clear(pTHX_ SV* invlist);
#define PERL_ARGS_ASSERT_INVLIST_CLEAR \
assert(invlist)
#endif
-STATIC void S_invlist_extend(pTHX_ SV* const invlist, const UV len);
-#define PERL_ARGS_ASSERT_INVLIST_EXTEND \
- assert(invlist)
#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE UV S_invlist_max(SV* const invlist)
__attribute__warn_unused_result__;
@@ -4226,11 +4334,6 @@ STATIC void S_invlist_replace_list_destroys_src(pTHX_ SV *dest, SV *src);
#define PERL_ARGS_ASSERT_INVLIST_REPLACE_LIST_DESTROYS_SRC \
assert(dest); assert(src)
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_invlist_set_len(pTHX_ SV* const invlist, const UV len, const bool offset);
-#define PERL_ARGS_ASSERT_INVLIST_SET_LEN \
- assert(invlist)
-#endif
-#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE void S_invlist_set_previous_index(SV* const invlist, const IV index);
#define PERL_ARGS_ASSERT_INVLIST_SET_PREVIOUS_INDEX \
assert(invlist)
@@ -4241,9 +4344,15 @@ PERL_STATIC_INLINE void S_invlist_trim(SV* invlist);
assert(invlist)
#endif
# endif
+# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
+PERL_CALLCONV SV* Perl_get_regclass_nonbitmap_data(pTHX_ const regexp *prog, const struct regnode *node, bool doinit, SV **listsvp, SV **lonly_utf8_locale, SV **output_invlist);
+#define PERL_ARGS_ASSERT_GET_REGCLASS_NONBITMAP_DATA \
+ assert(node)
+# endif
#endif
#if !defined(PERL_IMPLICIT_SYS)
PERL_CALLCONV I32 Perl_my_pclose(pTHX_ PerlIO* ptr);
+#define PERL_ARGS_ASSERT_MY_PCLOSE
PERL_CALLCONV PerlIO* Perl_my_popen(pTHX_ const char* cmd, const char* mode);
#define PERL_ARGS_ASSERT_MY_POPEN \
assert(cmd); assert(mode)
@@ -4257,95 +4366,99 @@ STATIC SV * S_incpush_if_exists(pTHX_ AV *const av, SV *dir, SV *const stem);
#endif
#if !defined(PERL_NO_INLINE_FUNCTIONS)
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_popblock(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_popblock(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_POPBLOCK \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_popeval(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_popeval(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_POPEVAL \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_popformat(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_popformat(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_POPFORMAT \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_popgiven(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_popgiven(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_POPGIVEN \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_poploop(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_poploop(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_POPLOOP \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_popsub(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_popsub(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_POPSUB \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_popsub_args(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_popsub_args(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_POPSUB_ARGS \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_popsub_common(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_popsub_common(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_POPSUB_COMMON \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_popwhen(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_popwhen(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_POPWHEN \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE PERL_CONTEXT * S_cx_pushblock(pTHX_ U8 type, U8 gimme, SV** sp, I32 saveix);
+PERL_STATIC_INLINE PERL_CONTEXT * Perl_cx_pushblock(pTHX_ U8 type, U8 gimme, SV** sp, I32 saveix);
#define PERL_ARGS_ASSERT_CX_PUSHBLOCK \
assert(sp)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv);
+PERL_STATIC_INLINE void Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv);
#define PERL_ARGS_ASSERT_CX_PUSHEVAL \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_pushformat(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, GV *gv);
+PERL_STATIC_INLINE void Perl_cx_pushformat(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, GV *gv);
#define PERL_ARGS_ASSERT_CX_PUSHFORMAT \
assert(cx); assert(cv)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_pushgiven(pTHX_ PERL_CONTEXT *cx, SV *orig_defsv);
+PERL_STATIC_INLINE void Perl_cx_pushgiven(pTHX_ PERL_CONTEXT *cx, SV *orig_defsv);
#define PERL_ARGS_ASSERT_CX_PUSHGIVEN \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_pushloop_for(pTHX_ PERL_CONTEXT *cx, void *itervarp, SV *itersave);
+PERL_STATIC_INLINE void Perl_cx_pushloop_for(pTHX_ PERL_CONTEXT *cx, void *itervarp, SV *itersave);
#define PERL_ARGS_ASSERT_CX_PUSHLOOP_FOR \
assert(cx); assert(itervarp)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_pushloop_plain(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_pushloop_plain(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_PUSHLOOP_PLAIN \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_pushsub(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, bool hasargs);
+PERL_STATIC_INLINE void Perl_cx_pushsub(pTHX_ PERL_CONTEXT *cx, CV *cv, OP *retop, bool hasargs);
#define PERL_ARGS_ASSERT_CX_PUSHSUB \
assert(cx); assert(cv)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_pushwhen(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_pushwhen(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_PUSHWHEN \
assert(cx)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_cx_topblock(pTHX_ PERL_CONTEXT *cx);
+PERL_STATIC_INLINE void Perl_cx_topblock(pTHX_ PERL_CONTEXT *cx);
#define PERL_ARGS_ASSERT_CX_TOPBLOCK \
assert(cx)
#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE U8 Perl_gimme_V(pTHX);
+#define PERL_ARGS_ASSERT_GIMME_V
+#endif
#endif
#if !defined(PERL_NO_UTF16_FILTER)
# if defined(PERL_IN_TOKE_C)
@@ -4378,6 +4491,13 @@ PERL_CALLCONV bool Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
#define PERL_ARGS_ASSERT_DO_EXEC3 \
assert(incmd)
#endif
+#if 0 /* Not currently used, but may be needed in the future */
+# if defined(PERL_IN_UTF8_C)
+STATIC void S_warn_on_first_deprecated_use(pTHX_ const char * const name, const char * const alternative, const bool use_locale, const char * const file, const unsigned line);
+#define PERL_ARGS_ASSERT_WARN_ON_FIRST_DEPRECATED_USE \
+ assert(name); assert(alternative); assert(file)
+# endif
+#endif
#if defined (HAS_SOCKETPAIR) || (defined (HAS_SOCKET) && defined(SOCK_DGRAM) && defined(AF_INET) && defined(PF_INET))
PERL_CALLCONV int Perl_PerlSock_socketpair_cloexec(pTHX_ int domain, int type, int protocol, int *pairfd)
__attribute__warn_unused_result__;
@@ -4398,6 +4518,7 @@ PERL_CALLCONV void Perl_pad_setsv(pTHX_ PADOFFSET po, SV* sv);
#define PERL_ARGS_ASSERT_PAD_SETSV \
assert(sv)
PERL_CALLCONV SV* Perl_pad_sv(pTHX_ PADOFFSET po);
+#define PERL_ARGS_ASSERT_PAD_SV
PERL_CALLCONV void Perl_set_padlist(CV * cv, PADLIST * padlist);
#define PERL_ARGS_ASSERT_SET_PADLIST \
assert(cv)
@@ -4411,6 +4532,7 @@ STATIC void S_print_collxfrm_input_and_return(pTHX_ const char * const s, const
assert(s); assert(e)
STATIC char * S_setlocale_debug_string(const int category, const char* const locale, const char* const retval)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SETLOCALE_DEBUG_STRING
# endif
# endif
@@ -4432,7 +4554,7 @@ STATIC void S_dump_trie_interim_table(pTHX_ const struct _reg_trie_data *trie, H
STATIC const regnode* S_dumpuntil(pTHX_ const regexp *r, const regnode *start, const regnode *node, const regnode *last, const regnode *plast, SV* sv, I32 indent, U32 depth);
#define PERL_ARGS_ASSERT_DUMPUNTIL \
assert(r); assert(start); assert(node); assert(sv)
-STATIC bool S_put_charclass_bitmap_innards(pTHX_ SV* sv, char* bitmap, SV* nonbitmap_invlist, SV* only_utf8_locale_invlist, const regnode * const node, const bool force_as_is_display);
+STATIC bool S_put_charclass_bitmap_innards(pTHX_ SV* sv, char* bitmap, SV* nonbitmap_invlist, SV* only_utf8_locale_invlist, const regnode * const node, const U8 flags, const bool force_as_is_display);
#define PERL_ARGS_ASSERT_PUT_CHARCLASS_BITMAP_INNARDS \
assert(sv)
STATIC SV* S_put_charclass_bitmap_innards_common(pTHX_ SV* invlist, SV* posixes, SV* only_utf8, SV* not_utf8, SV* only_utf8_locale, const bool invert);
@@ -4451,7 +4573,9 @@ PERL_CALLCONV int Perl_re_indentf(pTHX_ const char *fmt, U32 depth, ...);
#define PERL_ARGS_ASSERT_RE_INDENTF \
assert(fmt)
STATIC void S_regdump_extflags(pTHX_ const char *lead, const U32 flags);
+#define PERL_ARGS_ASSERT_REGDUMP_EXTFLAGS
STATIC void S_regdump_intflags(pTHX_ const char *lead, const U32 flags);
+#define PERL_ARGS_ASSERT_REGDUMP_INTFLAGS
STATIC bool S_regtail_study(pTHX_ RExC_state_t *pRExC_state, regnode_offset p, const regnode_offset val, U32 depth)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_REGTAIL_STUDY \
@@ -4497,14 +4621,6 @@ PERL_CALLCONV void Perl_dump_sv_child(pTHX_ SV *sv);
#define PERL_ARGS_ASSERT_DUMP_SV_CHILD \
assert(sv)
#endif
-#if defined(HAS_MEMMEM)
-PERL_CALLCONV char* Perl_ninstr(const char* big, const char* bigend, const char* little, const char* lend)
- __attribute__warn_unused_result__
- __attribute__pure__;
-#define PERL_ARGS_ASSERT_NINSTR \
- assert(big); assert(bigend); assert(little); assert(lend)
-
-#endif
#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
PERL_CALLCONV I32 Perl_do_ipcctl(pTHX_ I32 optype, SV** mark, SV** sp);
#define PERL_ARGS_ASSERT_DO_IPCCTL \
@@ -4528,10 +4644,12 @@ PERL_CALLCONV I32 Perl_do_shmio(pTHX_ I32 optype, SV** mark, SV** sp);
#if defined(HAS_NL_LANGINFO)
# if defined(PERL_IN_LOCALE_C)
STATIC const char* S_my_nl_langinfo(const nl_item item, bool toggle);
+#define PERL_ARGS_ASSERT_MY_NL_LANGINFO
# endif
#endif
#if defined(HAS_NL_LANGINFO) && defined(PERL_LANGINFO_H)
PERL_CALLCONV const char* Perl_langinfo(const nl_item item);
+#define PERL_ARGS_ASSERT_PERL_LANGINFO
#endif
#if defined(HAS_PIPE)
PERL_CALLCONV int Perl_PerlProc_pipe_cloexec(pTHX_ int *pipefd)
@@ -4540,21 +4658,21 @@ PERL_CALLCONV int Perl_PerlProc_pipe_cloexec(pTHX_ int *pipefd)
assert(pipefd)
#endif
-#if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
-PERL_CALLCONV Signal_t Perl_csighandler(int sig, siginfo_t *info, void *uap);
-PERL_CALLCONV Signal_t Perl_sighandler(int sig, siginfo_t *info, void *uap);
-#endif
#if defined(HAS_SOCKET)
PERL_CALLCONV int Perl_PerlSock_accept_cloexec(pTHX_ int listenfd, struct sockaddr *addr, Sock_size_t *addrlen)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_PERLSOCK_ACCEPT_CLOEXEC
PERL_CALLCONV int Perl_PerlSock_socket_cloexec(pTHX_ int domain, int type, int protocol)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_PERLSOCK_SOCKET_CLOEXEC
#endif
#if defined(HAVE_INTERP_INTERN)
PERL_CALLCONV void Perl_sys_intern_clear(pTHX);
+#define PERL_ARGS_ASSERT_SYS_INTERN_CLEAR
PERL_CALLCONV void Perl_sys_intern_init(pTHX);
+#define PERL_ARGS_ASSERT_SYS_INTERN_INIT
# if defined(USE_ITHREADS)
PERL_CALLCONV void Perl_sys_intern_dup(pTHX_ struct interp_intern* src, struct interp_intern* dst);
#define PERL_ARGS_ASSERT_SYS_INTERN_DUP \
@@ -4570,6 +4688,7 @@ PERL_CALLCONV int Perl_get_mstats(pTHX_ perl_mstats_t *buf, int buflen, int leve
assert(buf)
PERL_CALLCONV MEM_SIZE Perl_malloc_good_size(size_t nbytes)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_MALLOC_GOOD_SIZE
PERL_CALLCONV MEM_SIZE Perl_malloced_size(void *p)
__attribute__warn_unused_result__;
@@ -4613,7 +4732,7 @@ PERL_CALLCONV void Perl_Slab_to_rw(pTHX_ OPSLAB *const slab);
#endif
#if defined(PERL_CORE) || defined (PERL_EXT)
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_is_utf8_non_invariant_string(const U8* const s, STRLEN len)
+PERL_STATIC_INLINE bool Perl_is_utf8_non_invariant_string(const U8* const s, STRLEN len)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_IS_UTF8_NON_INVARIANT_STRING \
assert(s)
@@ -4642,6 +4761,7 @@ PERL_STATIC_INLINE Size_t S_variant_under_utf8_count(const U8* const s, const U8
#if defined(PERL_CR_FILTER)
# if defined(PERL_IN_TOKE_C)
STATIC I32 S_cr_textfilter(pTHX_ int idx, SV *sv, int maxlen);
+#define PERL_ARGS_ASSERT_CR_TEXTFILTER
STATIC void S_strip_return(pTHX_ SV *sv);
#define PERL_ARGS_ASSERT_STRIP_RETURN \
assert(sv)
@@ -4662,21 +4782,27 @@ PERL_CALLCONV PADOFFSET Perl_op_refcnt_dec(pTHX_ OP *o);
#define PERL_ARGS_ASSERT_OP_REFCNT_DEC \
assert(o)
PERL_CALLCONV OP * Perl_op_refcnt_inc(pTHX_ OP *o);
+#define PERL_ARGS_ASSERT_OP_REFCNT_INC
#endif
#if defined(PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION)
-/* PERL_CALLCONV bool Perl_do_exec(pTHX_ const char* cmd); */
+PERL_CALLCONV bool Perl_do_exec(pTHX_ const char* cmd);
+#define PERL_ARGS_ASSERT_DO_EXEC \
+ assert(cmd)
#endif
#if defined(PERL_DONT_CREATE_GVSV)
#ifndef NO_MATHOMS
PERL_CALLCONV GV* Perl_gv_SVadd(pTHX_ GV *gv);
+#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)
@@ -4692,6 +4818,7 @@ PERL_CALLCONV void* Perl_my_cxt_init(pTHX_ const char *my_cxt_key, size_t size);
PERL_CALLCONV_NO_RET void Perl_croak_nocontext(const char* pat, ...)
__attribute__noreturn__
__attribute__format__null_ok__(__printf__,1,2);
+#define PERL_ARGS_ASSERT_CROAK_NOCONTEXT
PERL_CALLCONV void Perl_deb_nocontext(const char* pat, ...)
__attribute__format__(__printf__,1,2);
@@ -4701,6 +4828,7 @@ PERL_CALLCONV void Perl_deb_nocontext(const char* pat, ...)
PERL_CALLCONV_NO_RET OP* Perl_die_nocontext(const char* pat, ...)
__attribute__noreturn__
__attribute__format__null_ok__(__printf__,1,2);
+#define PERL_ARGS_ASSERT_DIE_NOCONTEXT
PERL_CALLCONV char* Perl_form_nocontext(const char* pat, ...)
__attribute__format__(__printf__,1,2);
@@ -4709,6 +4837,7 @@ PERL_CALLCONV char* Perl_form_nocontext(const char* pat, ...)
#ifndef NO_MATHOMS
PERL_CALLCONV int Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...)
+ __attribute__deprecated__
__attribute__format__(__printf__,2,3);
#define PERL_ARGS_ASSERT_FPRINTF_NOCONTEXT \
assert(stream); assert(format)
@@ -4729,6 +4858,7 @@ PERL_CALLCONV SV* Perl_newSVpvf_nocontext(const char *const pat, ...)
#ifndef NO_MATHOMS
PERL_CALLCONV int Perl_printf_nocontext(const char *format, ...)
+ __attribute__deprecated__
__attribute__format__(__printf__,1,2);
#define PERL_ARGS_ASSERT_PRINTF_NOCONTEXT \
assert(format)
@@ -4794,6 +4924,7 @@ STATIC void S_exec_failed(pTHX_ const char *cmd, int fd, int do_report);
assert(cmd)
STATIC bool S_ingroup(pTHX_ Gid_t testgid, bool effective)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_INGROUP
STATIC bool S_openn_cleanup(pTHX_ GV *gv, IO *io, PerlIO *fp, char *mode, const char *oname, PerlIO *saveifp, PerlIO *saveofp, int savefd, char savetype, int writing, bool was_fdopen, const char *type, Stat_t *statbufp);
#define PERL_ARGS_ASSERT_OPENN_CLEANUP \
@@ -4803,39 +4934,35 @@ STATIC IO * S_openn_setup(pTHX_ GV *gv, char *mode, PerlIO **saveifp, PerlIO **s
assert(gv); assert(mode); assert(saveifp); assert(saveofp); assert(savefd); assert(savetype)
#endif
#if defined(PERL_IN_DOOP_C)
-STATIC Size_t S_do_trans_complex(pTHX_ SV * const sv)
+STATIC Size_t S_do_trans_complex(pTHX_ SV * const sv, const OPtrans_map * const tbl)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_COMPLEX \
- assert(sv)
+ assert(sv); assert(tbl)
-STATIC Size_t S_do_trans_complex_utf8(pTHX_ SV * const sv)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_DO_TRANS_COMPLEX_UTF8 \
- assert(sv)
-
-STATIC Size_t S_do_trans_count(pTHX_ SV * const sv)
+STATIC Size_t S_do_trans_count(pTHX_ SV * const sv, const OPtrans_map * const tbl)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DO_TRANS_COUNT \
- assert(sv)
+ assert(sv); assert(tbl)
-STATIC Size_t S_do_trans_count_utf8(pTHX_ SV * const sv)
+STATIC Size_t S_do_trans_count_invmap(pTHX_ SV * const sv, AV * const map)
__attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_DO_TRANS_COUNT_UTF8 \
- assert(sv)
+#define PERL_ARGS_ASSERT_DO_TRANS_COUNT_INVMAP \
+ assert(sv); assert(map)
-STATIC Size_t S_do_trans_simple(pTHX_ SV * const sv)
+STATIC Size_t S_do_trans_invmap(pTHX_ SV * const sv, AV * const map)
__attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_DO_TRANS_SIMPLE \
- assert(sv)
+#define PERL_ARGS_ASSERT_DO_TRANS_INVMAP \
+ assert(sv); assert(map)
-STATIC Size_t S_do_trans_simple_utf8(pTHX_ SV * const sv)
+STATIC Size_t S_do_trans_simple(pTHX_ SV * const sv, const OPtrans_map * const tbl)
__attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_DO_TRANS_SIMPLE_UTF8 \
- assert(sv)
+#define PERL_ARGS_ASSERT_DO_TRANS_SIMPLE \
+ assert(sv); assert(tbl)
#endif
#if defined(PERL_IN_DUMP_C)
STATIC CV* S_deb_curcv(pTHX_ I32 ix);
+#define PERL_ARGS_ASSERT_DEB_CURCV
STATIC void S_debprof(pTHX_ const OP *o);
#define PERL_ARGS_ASSERT_DEBPROF \
assert(o)
@@ -4843,6 +4970,7 @@ STATIC SV* S_pm_description(pTHX_ const PMOP *pm);
#define PERL_ARGS_ASSERT_PM_DESCRIPTION \
assert(pm)
STATIC UV S_sequence_num(pTHX_ const OP *o);
+#define PERL_ARGS_ASSERT_SEQUENCE_NUM
#endif
#if defined(PERL_IN_DUMP_C) || defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_SCOPE_C)
PERL_CALLCONV void Perl_hv_kill_backrefs(pTHX_ HV *hv);
@@ -4855,6 +4983,7 @@ STATIC bool S_find_default_stash(pTHX_ HV **stash, const char *name, STRLEN len,
assert(stash); assert(name)
#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE GV* S_gv_fetchmeth_internal(pTHX_ HV* stash, SV* meth, const char* name, STRLEN len, I32 level, U32 flags);
+#define PERL_ARGS_ASSERT_GV_FETCHMETH_INTERNAL
#endif
STATIC void S_gv_init_svtype(pTHX_ GV *gv, const svtype sv_type);
#define PERL_ARGS_ASSERT_GV_INIT_SVTYPE \
@@ -4873,9 +5002,6 @@ PERL_STATIC_INLINE HV* S_gv_stashpvn_internal(pTHX_ const char* name, U32 namele
#define PERL_ARGS_ASSERT_GV_STASHPVN_INTERNAL \
assert(name)
#endif
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE HV* S_gv_stashsvpvn_cached(pTHX_ SV *namesv, const char* name, U32 namelen, I32 flags);
-#endif
STATIC void S_maybe_multimagic_gv(pTHX_ GV *gv, const char *name, const svtype sv_type);
#define PERL_ARGS_ASSERT_MAYBE_MULTIMAGIC_GV \
assert(gv); assert(name)
@@ -4891,6 +5017,9 @@ PERL_CALLCONV void Perl_sv_add_backref(pTHX_ SV *const tsv, SV *const sv);
#define PERL_ARGS_ASSERT_SV_ADD_BACKREF \
assert(tsv); assert(sv)
#endif
+#if defined(PERL_IN_GV_C) || defined(PERL_IN_UNIVERSAL_C)
+PERL_CALLCONV HV* Perl_gv_stashsvpvn_cached(pTHX_ SV *namesv, const char* name, U32 namelen, I32 flags);
+#endif
#if defined(PERL_IN_HV_C)
STATIC void S_clear_placeholders(pTHX_ HV *hv, U32 items);
#define PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS \
@@ -4905,6 +5034,7 @@ STATIC struct xpvhv_aux* S_hv_auxinit_internal(struct xpvhv_aux *iter);
#define PERL_ARGS_ASSERT_HV_AUXINIT_INTERNAL \
assert(iter)
STATIC SV* S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, int k_flags, I32 d_flags, U32 hash);
+#define PERL_ARGS_ASSERT_HV_DELETE_COMMON
STATIC SV* S_hv_free_ent_ret(pTHX_ HV *hv, HE *entry);
#define PERL_ARGS_ASSERT_HV_FREE_ENT_RET \
assert(hv); assert(entry)
@@ -4921,9 +5051,11 @@ PERL_STATIC_NO_RET void S_hv_notallowed(pTHX_ int flags, const char *key, I32 kl
STATIC HE* S_new_he(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NEW_HE
#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE U32 S_ptr_hash(PTRV u);
+#define PERL_ARGS_ASSERT_PTR_HASH
#endif
STATIC SV * S_refcounted_he_value(pTHX_ const struct refcounted_he *he);
#define PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE \
@@ -4940,6 +5072,7 @@ STATIC HEK* S_share_hek_flags(pTHX_ const char *str, STRLEN len, U32 hash, int f
assert(str)
STATIC void S_unshare_hek_or_pvn(pTHX_ const HEK* hek, const char* str, I32 len, U32 hash);
+#define PERL_ARGS_ASSERT_UNSHARE_HEK_OR_PVN
#endif
#if defined(PERL_IN_HV_C) || defined(PERL_IN_MG_C) || defined(PERL_IN_SV_C)
PERL_CALLCONV void Perl_sv_kill_backrefs(pTHX_ SV *const sv, AV *const av);
@@ -4961,22 +5094,30 @@ PERL_STATIC_INLINE const char * S_save_to_buffer(const char * string, char **buf
# if defined(USE_LOCALE)
STATIC const char* S_category_name(const int category);
+#define PERL_ARGS_ASSERT_CATEGORY_NAME
STATIC void S_new_collate(pTHX_ const char* newcoll);
+#define PERL_ARGS_ASSERT_NEW_COLLATE
STATIC void S_new_ctype(pTHX_ const char* newctype);
#define PERL_ARGS_ASSERT_NEW_CTYPE \
assert(newctype)
STATIC void S_new_numeric(pTHX_ const char* newnum);
+#define PERL_ARGS_ASSERT_NEW_NUMERIC
STATIC void S_restore_switched_locale(pTHX_ const int category, const char * const original_locale);
+#define PERL_ARGS_ASSERT_RESTORE_SWITCHED_LOCALE
STATIC void S_set_numeric_radix(pTHX_ const bool use_locale);
+#define PERL_ARGS_ASSERT_SET_NUMERIC_RADIX
STATIC char* S_stdize_locale(pTHX_ char* locs);
#define PERL_ARGS_ASSERT_STDIZE_LOCALE \
assert(locs)
STATIC const char* S_switch_category_locale_to_template(pTHX_ const int switch_category, const int template_category, const char * template_locale);
+#define PERL_ARGS_ASSERT_SWITCH_CATEGORY_LOCALE_TO_TEMPLATE
# if defined(USE_POSIX_2008_LOCALE)
STATIC const char* S_emulate_setlocale(const int category, const char* locale, unsigned int index, const bool is_index_valid);
+#define PERL_ARGS_ASSERT_EMULATE_SETLOCALE
# endif
# if defined(WIN32)
STATIC char* S_win32_setlocale(pTHX_ int category, const char* locale);
+#define PERL_ARGS_ASSERT_WIN32_SETLOCALE
# endif
# endif
#endif
@@ -5003,10 +5144,12 @@ STATIC int S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth);
#define PERL_ARGS_ASSERT_MAGIC_METHPACK \
assert(sv); assert(mg); assert(meth)
STATIC void S_restore_magic(pTHX_ const void *p);
+#define PERL_ARGS_ASSERT_RESTORE_MAGIC
STATIC void S_save_magic_flags(pTHX_ I32 mgs_ix, SV *sv, U32 flags);
#define PERL_ARGS_ASSERT_SAVE_MAGIC_FLAGS \
assert(sv)
STATIC void S_unwind_handler_stack(pTHX_ const void *p);
+#define PERL_ARGS_ASSERT_UNWIND_HANDLER_STACK
#endif
#if defined(PERL_IN_MG_C) || defined(PERL_IN_PP_C)
PERL_CALLCONV bool Perl_translate_substr_offsets(STRLEN curlen, IV pos1_iv, bool pos1_is_uv, IV len_iv, bool len_is_uv, STRLEN *posp, STRLEN *lenp);
@@ -5024,6 +5167,10 @@ STATIC AV* S_mro_get_linear_isa_dfs(pTHX_ HV* stash, U32 level);
#define PERL_ARGS_ASSERT_MRO_GET_LINEAR_ISA_DFS \
assert(stash)
#endif
+#if defined(PERL_IN_NUMERIC_C)
+STATIC void S_output_non_portable(pTHX_ const U8 shift);
+#define PERL_ARGS_ASSERT_OUTPUT_NON_PORTABLE
+#endif
#if defined(PERL_IN_OP_C)
STATIC void S_apply_attrs(pTHX_ HV *stash, SV *target, OP *attrs);
#define PERL_ARGS_ASSERT_APPLY_ATTRS \
@@ -5033,6 +5180,7 @@ STATIC void S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp
assert(stash); assert(target); assert(imopsp)
STATIC I32 S_assignment_type(pTHX_ const OP *o)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_ASSIGNMENT_TYPE
STATIC void S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t);
#define PERL_ARGS_ASSERT_BAD_TYPE_GV \
@@ -5059,10 +5207,12 @@ STATIC OP* S_fold_constants(pTHX_ OP * const o);
#define PERL_ARGS_ASSERT_FOLD_CONSTANTS \
assert(o)
STATIC OP* S_force_list(pTHX_ OP* arg, bool nullit);
+#define PERL_ARGS_ASSERT_FORCE_LIST
STATIC void S_forget_pmop(pTHX_ PMOP *const o);
#define PERL_ARGS_ASSERT_FORGET_PMOP \
assert(o)
-STATIC OP* S_gen_constant_list(pTHX_ OP* o);
+STATIC void S_gen_constant_list(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_GEN_CONSTANT_LIST
STATIC void S_inplace_aassign(pTHX_ OP* o);
#define PERL_ARGS_ASSERT_INPLACE_AASSIGN \
assert(o)
@@ -5072,10 +5222,12 @@ STATIC bool S_is_handle_constructor(const OP *o, I32 numargs)
assert(o)
STATIC OP* S_listkids(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_LISTKIDS
STATIC bool S_looks_like_bool(pTHX_ const OP* o);
#define PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL \
assert(o)
STATIC OP* S_modkids(pTHX_ OP *o, I32 type);
+#define PERL_ARGS_ASSERT_MODKIDS
STATIC void S_move_proto_attr(pTHX_ OP **proto, OP **attrs, const GV *name, bool curstash);
#define PERL_ARGS_ASSERT_MOVE_PROTO_ATTR \
assert(proto); assert(attrs); assert(name)
@@ -5087,6 +5239,7 @@ STATIC OP* S_newGIVWHENOP(pTHX_ OP* cond, OP *block, I32 enter_opcode, I32 leave
assert(block)
#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE OP* S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth);
+#define PERL_ARGS_ASSERT_NEWMETHOP_INTERNAL
#endif
STATIC OP* S_new_logop(pTHX_ I32 type, I32 flags, OP **firstp, OP **otherp)
__attribute__warn_unused_result__;
@@ -5121,15 +5274,20 @@ STATIC bool S_process_special_blocks(pTHX_ I32 floor, const char *const fullname
#define PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS \
assert(fullname); assert(gv); assert(cv)
STATIC OP* S_ref_array_or_hash(pTHX_ OP* cond);
+#define PERL_ARGS_ASSERT_REF_ARRAY_OR_HASH
STATIC OP* S_refkids(pTHX_ OP* o, I32 type);
+#define PERL_ARGS_ASSERT_REFKIDS
STATIC bool S_scalar_mod_type(const OP *o, I32 type)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SCALAR_MOD_TYPE
STATIC OP* S_scalarboolean(pTHX_ OP *o);
#define PERL_ARGS_ASSERT_SCALARBOOLEAN \
assert(o)
STATIC OP* S_scalarkids(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_SCALARKIDS
STATIC OP* S_scalarseq(pTHX_ OP* o);
+#define PERL_ARGS_ASSERT_SCALARSEQ
STATIC OP* S_search_const(pTHX_ OP *o)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_SEARCH_CONST \
@@ -5173,12 +5331,27 @@ STATIC PADOFFSET S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 fla
#define PERL_ARGS_ASSERT_PAD_FINDLEX \
assert(namepv); assert(cv); assert(out_name); assert(out_flags)
STATIC void S_pad_reset(pTHX);
+#define PERL_ARGS_ASSERT_PAD_RESET
+#endif
+#if defined(PERL_IN_PAD_C) || defined(PERL_IN_OP_C)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE bool S_PadnameIN_SCOPE(const PADNAME * const pn, const U32 seq);
+#define PERL_ARGS_ASSERT_PADNAMEIN_SCOPE \
+ assert(pn)
+#endif
+#endif
+#if defined(PERL_IN_PERLY_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C)
+#ifndef NO_MATHOMS
+PERL_CALLCONV OP* Perl_ref(pTHX_ OP* o, I32 type);
+#define PERL_ARGS_ASSERT_REF
+#endif
#endif
#if defined(PERL_IN_PERL_C)
STATIC void S_find_beginning(pTHX_ SV* linestr_sv, PerlIO *rsfp);
#define PERL_ARGS_ASSERT_FIND_BEGINNING \
assert(linestr_sv); assert(rsfp)
STATIC void S_forbid_setid(pTHX_ const char flag, const bool suidscript);
+#define PERL_ARGS_ASSERT_FORBID_SETID
STATIC void S_incpush(pTHX_ const char *const dir, STRLEN len, U32 flags);
#define PERL_ARGS_ASSERT_INCPUSH \
assert(dir)
@@ -5186,32 +5359,43 @@ STATIC void S_incpush_use_sep(pTHX_ const char *p, STRLEN len, U32 flags);
#define PERL_ARGS_ASSERT_INCPUSH_USE_SEP \
assert(p)
STATIC void S_init_ids(pTHX);
+#define PERL_ARGS_ASSERT_INIT_IDS
STATIC void S_init_interp(pTHX);
+#define PERL_ARGS_ASSERT_INIT_INTERP
STATIC void S_init_main_stash(pTHX);
+#define PERL_ARGS_ASSERT_INIT_MAIN_STASH
STATIC void S_init_perllib(pTHX);
+#define PERL_ARGS_ASSERT_INIT_PERLLIB
STATIC void S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env);
#define PERL_ARGS_ASSERT_INIT_POSTDUMP_SYMBOLS \
assert(argv)
STATIC void S_init_predump_symbols(pTHX);
+#define PERL_ARGS_ASSERT_INIT_PREDUMP_SYMBOLS
STATIC SV* S_mayberelocate(pTHX_ const char *const dir, STRLEN len, U32 flags);
#define PERL_ARGS_ASSERT_MAYBERELOCATE \
assert(dir)
PERL_STATIC_NO_RET void S_minus_v(pTHX)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_MINUS_V
PERL_STATIC_NO_RET void S_my_exit_jump(pTHX)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_MY_EXIT_JUMP
STATIC void S_nuke_stacks(pTHX);
+#define PERL_ARGS_ASSERT_NUKE_STACKS
STATIC PerlIO * S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript);
#define PERL_ARGS_ASSERT_OPEN_SCRIPT \
assert(scriptname); assert(suidscript)
STATIC void* S_parse_body(pTHX_ char **env, XSINIT_t xsinit);
+#define PERL_ARGS_ASSERT_PARSE_BODY
PERL_STATIC_NO_RET void S_run_body(pTHX_ I32 oldscope)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_RUN_BODY
PERL_STATIC_NO_RET void S_usage(pTHX)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_USAGE
#endif
#if defined(PERL_IN_PP_C)
@@ -5219,6 +5403,7 @@ STATIC size_t S_do_chomp(pTHX_ SV *retval, SV *sv, bool chomping);
#define PERL_ARGS_ASSERT_DO_CHOMP \
assert(retval); assert(sv)
STATIC OP* S_do_delete_local(pTHX);
+#define PERL_ARGS_ASSERT_DO_DELETE_LOCAL
STATIC SV* S_refto(pTHX_ SV* sv)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_REFTO \
@@ -5226,6 +5411,13 @@ STATIC SV* S_refto(pTHX_ SV* sv)
#endif
#if defined(PERL_IN_PP_C) || defined(PERL_IN_PP_HOT_C)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE bool S_lossless_NV_to_IV(const NV nv, IV * ivp)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_LOSSLESS_NV_TO_IV \
+ assert(ivp)
+#endif
+
PERL_CALLCONV GV* Perl_softref2xv(pTHX_ SV *const sv, const char *const what, const svtype type, SV ***spp)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_SOFTREF2XV \
@@ -5242,10 +5434,13 @@ STATIC void S_destroy_matcher(pTHX_ PMOP* matcher);
#define PERL_ARGS_ASSERT_DESTROY_MATCHER \
assert(matcher)
STATIC OP* S_do_smartmatch(pTHX_ HV* seen_this, HV* seen_other, const bool copied);
+#define PERL_ARGS_ASSERT_DO_SMARTMATCH
STATIC OP* S_docatch(pTHX_ Perl_ppaddr_t firstpp)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_DOCATCH
STATIC bool S_doeval_compile(pTHX_ U8 gimme, CV* outside, U32 seq, HV* hh);
+#define PERL_ARGS_ASSERT_DOEVAL_COMPILE
STATIC OP* S_dofindlabel(pTHX_ OP *o, const char *label, STRLEN len, U32 flags, OP **opstack, OP **oplimit)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_DOFINDLABEL \
@@ -5256,9 +5451,11 @@ STATIC MAGIC * S_doparseform(pTHX_ SV *sv);
assert(sv)
STATIC I32 S_dopoptoeval(pTHX_ I32 startingblock)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_DOPOPTOEVAL
STATIC I32 S_dopoptogivenfor(pTHX_ I32 startingblock)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_DOPOPTOGIVENFOR
STATIC I32 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
__attribute__warn_unused_result__;
@@ -5267,6 +5464,7 @@ STATIC I32 S_dopoptolabel(pTHX_ const char *label, STRLEN len, U32 flags)
STATIC I32 S_dopoptoloop(pTHX_ I32 startingblock)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_DOPOPTOLOOP
STATIC I32 S_dopoptosub_at(pTHX_ const PERL_CONTEXT* cxstk, I32 startingblock)
__attribute__warn_unused_result__;
@@ -5275,6 +5473,7 @@ STATIC I32 S_dopoptosub_at(pTHX_ const PERL_CONTEXT* cxstk, I32 startingblock)
STATIC I32 S_dopoptowhen(pTHX_ I32 startingblock)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_DOPOPTOWHEN
STATIC PMOP* S_make_matcher(pTHX_ REGEXP* re)
__attribute__warn_unused_result__;
@@ -5288,6 +5487,7 @@ STATIC bool S_matcher_matches_sv(pTHX_ PMOP* matcher, SV* sv)
STATIC bool S_num_overflow(NV value, I32 fldsize, I32 frcsize)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_NUM_OVERFLOW
#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE bool S_path_is_searchable(const char *name)
@@ -5320,6 +5520,14 @@ PERL_STATIC_INLINE HV* S_opmethod_stash(pTHX_ SV* meth);
#define PERL_ARGS_ASSERT_OPMETHOD_STASH \
assert(meth)
#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE bool S_should_we_output_Debug_r(pTHX_ regexp * prog)
+ __attribute__warn_unused_result__
+ __attribute__always_inline__;
+#define PERL_ARGS_ASSERT_SHOULD_WE_OUTPUT_DEBUG_R \
+ assert(prog)
+#endif
+
#endif
#if defined(PERL_IN_PP_PACK_C)
STATIC int S_div128(pTHX_ SV *pnum, bool *done);
@@ -5371,15 +5579,55 @@ STATIC SSize_t S_unpack_rec(pTHX_ struct tempsym* symptr, const char *s, const c
assert(symptr); assert(s); assert(strbeg); assert(strend)
#endif
#if defined(PERL_IN_PP_SORT_C)
-STATIC I32 S_amagic_cmp(pTHX_ SV *const str1, SV *const str2);
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_amagic_cmp(pTHX_ SV *const str1, SV *const str2)
+ __attribute__always_inline__;
#define PERL_ARGS_ASSERT_AMAGIC_CMP \
assert(str1); assert(str2)
-STATIC I32 S_amagic_i_ncmp(pTHX_ SV *const a, SV *const b);
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_amagic_cmp_desc(pTHX_ SV *const str1, SV *const str2)
+ __attribute__always_inline__;
+#define PERL_ARGS_ASSERT_AMAGIC_CMP_DESC \
+ assert(str1); assert(str2)
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_amagic_i_ncmp(pTHX_ SV *const a, SV *const b)
+ __attribute__always_inline__;
#define PERL_ARGS_ASSERT_AMAGIC_I_NCMP \
assert(a); assert(b)
-STATIC I32 S_amagic_ncmp(pTHX_ SV *const a, SV *const b);
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_amagic_i_ncmp_desc(pTHX_ SV *const a, SV *const b)
+ __attribute__always_inline__;
+#define PERL_ARGS_ASSERT_AMAGIC_I_NCMP_DESC \
+ assert(a); assert(b)
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_amagic_ncmp(pTHX_ SV *const a, SV *const b)
+ __attribute__always_inline__;
#define PERL_ARGS_ASSERT_AMAGIC_NCMP \
assert(a); assert(b)
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_amagic_ncmp_desc(pTHX_ SV *const a, SV *const b)
+ __attribute__always_inline__;
+#define PERL_ARGS_ASSERT_AMAGIC_NCMP_DESC \
+ assert(a); assert(b)
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_cmp_desc(pTHX_ SV *const str1, SV *const str2)
+ __attribute__always_inline__;
+#define PERL_ARGS_ASSERT_CMP_DESC \
+ assert(str1); assert(str2)
+#endif
+
STATIC I32 S_sortcv(pTHX_ SV *const a, SV *const b);
#define PERL_ARGS_ASSERT_SORTCV \
assert(a); assert(b)
@@ -5389,16 +5637,63 @@ STATIC I32 S_sortcv_stacked(pTHX_ SV *const a, SV *const b);
STATIC I32 S_sortcv_xsub(pTHX_ SV *const a, SV *const b);
#define PERL_ARGS_ASSERT_SORTCV_XSUB \
assert(a); assert(b)
-STATIC I32 S_sv_i_ncmp(pTHX_ SV *const a, SV *const b);
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE void S_sortsv_flags_impl(pTHX_ SV** array, size_t num_elts, SVCOMPARE_t cmp, U32 flags)
+ __attribute__always_inline__;
+#define PERL_ARGS_ASSERT_SORTSV_FLAGS_IMPL \
+ assert(cmp)
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_sv_i_ncmp(pTHX_ SV *const a, SV *const b)
+ __attribute__always_inline__;
#define PERL_ARGS_ASSERT_SV_I_NCMP \
assert(a); assert(b)
-STATIC I32 S_sv_ncmp(pTHX_ SV *const a, SV *const b);
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_sv_i_ncmp_desc(pTHX_ SV *const a, SV *const b)
+ __attribute__always_inline__;
+#define PERL_ARGS_ASSERT_SV_I_NCMP_DESC \
+ assert(a); assert(b)
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_sv_ncmp(pTHX_ SV *const a, SV *const b)
+ __attribute__always_inline__;
#define PERL_ARGS_ASSERT_SV_NCMP \
assert(a); assert(b)
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_sv_ncmp_desc(pTHX_ SV *const a, SV *const b)
+ __attribute__always_inline__;
+#define PERL_ARGS_ASSERT_SV_NCMP_DESC \
+ assert(a); assert(b)
+#endif
+
# if defined(USE_LOCALE_COLLATE)
-STATIC I32 S_amagic_cmp_locale(pTHX_ SV *const str1, SV *const str2);
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_amagic_cmp_locale(pTHX_ SV *const str1, SV *const str2)
+ __attribute__always_inline__;
#define PERL_ARGS_ASSERT_AMAGIC_CMP_LOCALE \
assert(str1); assert(str2)
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_amagic_cmp_locale_desc(pTHX_ SV *const str1, SV *const str2)
+ __attribute__always_inline__;
+#define PERL_ARGS_ASSERT_AMAGIC_CMP_LOCALE_DESC \
+ assert(str1); assert(str2)
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_FORCE_INLINE I32 S_cmp_locale_desc(pTHX_ SV *const str1, SV *const str2)
+ __attribute__always_inline__;
+#define PERL_ARGS_ASSERT_CMP_LOCALE_DESC \
+ assert(str1); assert(str2)
+#endif
+
# endif
#endif
#if defined(PERL_IN_PP_SYS_C)
@@ -5406,21 +5701,12 @@ STATIC OP* S_doform(pTHX_ CV *cv, GV *gv, OP *retop);
#define PERL_ARGS_ASSERT_DOFORM \
assert(cv); assert(gv)
STATIC SV * S_space_join_names_mortal(pTHX_ char *const *array);
+#define PERL_ARGS_ASSERT_SPACE_JOIN_NAMES_MORTAL
#endif
#if defined(PERL_IN_REGCOMP_C)
-STATIC SV* S__make_exactf_invlist(pTHX_ RExC_state_t *pRExC_state, regnode *node)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT__MAKE_EXACTF_INVLIST \
- assert(pRExC_state); assert(node)
-
STATIC void S_add_above_Latin1_folds(pTHX_ RExC_state_t *pRExC_state, const U8 cp, SV** invlist);
#define PERL_ARGS_ASSERT_ADD_ABOVE_LATIN1_FOLDS \
assert(pRExC_state); assert(invlist)
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE SV* S_add_cp_to_invlist(pTHX_ SV* invlist, const UV cp)
- __attribute__warn_unused_result__;
-#endif
-
STATIC U32 S_add_data(RExC_state_t* const pRExC_state, const char* const s, const U32 n)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_ADD_DATA \
@@ -5432,14 +5718,14 @@ STATIC AV* S_add_multi_match(pTHX_ AV* multi_char_matches, SV* multi_string, con
STATIC void S_change_engine_size(pTHX_ RExC_state_t *pRExC_state, const Ptrdiff_t size);
#define PERL_ARGS_ASSERT_CHANGE_ENGINE_SIZE \
assert(pRExC_state)
-STATIC const char * S_cntrl_to_mnemonic(const U8 c)
+STATIC REGEXP* S_compile_wildcard(pTHX_ const char * subpattern, const STRLEN len, const bool ignore_case)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_COMPILE_WILDCARD \
+ assert(subpattern)
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE U8 S_compute_EXACTish(RExC_state_t *pRExC_state);
+STATIC U8 S_compute_EXACTish(RExC_state_t *pRExC_state);
#define PERL_ARGS_ASSERT_COMPUTE_EXACTISH \
assert(pRExC_state)
-#endif
STATIC regnode * S_construct_ahocorasick_from_trie(pTHX_ RExC_state_t *pRExC_state, regnode *source, U32 depth);
#define PERL_ARGS_ASSERT_CONSTRUCT_AHOCORASICK_FROM_TRIE \
assert(pRExC_state); assert(source)
@@ -5448,6 +5734,14 @@ STATIC int S_edit_distance(const UV *src, const UV *tgt, const STRLEN x, const S
#define PERL_ARGS_ASSERT_EDIT_DISTANCE \
assert(src); assert(tgt)
+STATIC I32 S_execute_wildcard(pTHX_ REGEXP * const prog, char* stringarg, char* strend, char* strbeg, SSize_t minend, SV* screamer, U32 nosave);
+#define PERL_ARGS_ASSERT_EXECUTE_WILDCARD \
+ assert(prog); assert(stringarg); assert(strend); assert(strbeg); assert(screamer)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE Size_t S_find_first_differing_byte_pos(const U8 * s1, const U8 * s2, const Size_t max);
+#define PERL_ARGS_ASSERT_FIND_FIRST_DIFFERING_BYTE_POS \
+ assert(s1); assert(s2)
+#endif
STATIC SV * S_get_ANYOFM_contents(pTHX_ const regnode * n)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_GET_ANYOFM_CONTENTS \
@@ -5456,39 +5750,28 @@ STATIC SV * S_get_ANYOFM_contents(pTHX_ const regnode * n)
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)
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE STRLEN* S_get_invlist_iter_addr(SV* invlist)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR \
- assert(invlist)
-#endif
-
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)
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE regnode_offset S_handle_named_backref(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, char * parse_start, char ch);
+STATIC regnode_offset S_handle_named_backref(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, char * parse_start, char ch);
#define PERL_ARGS_ASSERT_HANDLE_NAMED_BACKREF \
assert(pRExC_state); assert(flagp); assert(parse_start)
-#endif
+STATIC bool S_handle_names_wildcard(pTHX_ const char * wname, const STRLEN wname_len, SV ** prop_definition, AV ** strings);
+#define PERL_ARGS_ASSERT_HANDLE_NAMES_WILDCARD \
+ assert(wname); assert(prop_definition); assert(strings)
STATIC int S_handle_possible_posix(pTHX_ RExC_state_t *pRExC_state, const char* const s, char ** updated_parse_ptr, AV** posix_warnings, const bool check_only);
#define PERL_ARGS_ASSERT_HANDLE_POSSIBLE_POSIX \
assert(pRExC_state); assert(s)
STATIC regnode_offset S_handle_regex_sets(pTHX_ RExC_state_t *pRExC_state, SV ** return_invlist, I32 *flagp, U32 depth, char * const oregcomp_parse);
#define PERL_ARGS_ASSERT_HANDLE_REGEX_SETS \
assert(pRExC_state); assert(flagp); assert(oregcomp_parse)
-PERL_CALLCONV SV * Perl_handle_user_defined_property(pTHX_ const char * name, const STRLEN name_len, const bool is_utf8, const bool to_fold, const bool runtime, const bool deferrable, SV* contents, bool *user_defined_ptr, SV * msg, const STRLEN level);
+STATIC SV * S_handle_user_defined_property(pTHX_ const char * name, const STRLEN name_len, const bool is_utf8, const bool to_fold, const bool runtime, const bool deferrable, SV* contents, bool *user_defined_ptr, SV * msg, const STRLEN level);
#define PERL_ARGS_ASSERT_HANDLE_USER_DEFINED_PROPERTY \
assert(name); assert(contents); assert(user_defined_ptr); assert(msg)
-STATIC SV* S_invlist_contents(pTHX_ SV* const invlist, const bool traditional_style)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_INVLIST_CONTENTS \
- assert(invlist)
-
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE UV S_invlist_highest(SV* const invlist)
+PERL_STATIC_INLINE SV* S_invlist_contents(pTHX_ SV* const invlist, const bool traditional_style)
__attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_INVLIST_HIGHEST \
+#define PERL_ARGS_ASSERT_INVLIST_CONTENTS \
assert(invlist)
#endif
@@ -5500,19 +5783,11 @@ PERL_STATIC_INLINE bool S_invlist_is_iterating(SV* const invlist)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_invlist_iterfinish(SV* invlist);
-#define PERL_ARGS_ASSERT_INVLIST_ITERFINISH \
- assert(invlist)
-#endif
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_invlist_iterinit(SV* invlist);
-#define PERL_ARGS_ASSERT_INVLIST_ITERINIT \
+PERL_STATIC_INLINE UV S_invlist_lowest(SV* const invlist)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_INVLIST_LOWEST \
assert(invlist)
#endif
-STATIC bool S_invlist_iternext(SV* invlist, UV* start, UV* end)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_INVLIST_ITERNEXT \
- assert(invlist); assert(start); assert(end)
STATIC bool S_is_ssc_worth_it(const RExC_state_t * pRExC_state, const regnode_ssc * ssc);
#define PERL_ARGS_ASSERT_IS_SSC_WORTH_IT \
@@ -5520,6 +5795,11 @@ STATIC bool S_is_ssc_worth_it(const RExC_state_t * pRExC_state, const regnode_ss
STATIC U32 S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan, UV *min_subtract, bool *unfolded_multi_char, U32 flags, regnode *val, U32 depth);
#define PERL_ARGS_ASSERT_JOIN_EXACT \
assert(pRExC_state); assert(scan); assert(min_subtract); assert(unfolded_multi_char)
+STATIC SV* S_make_exactf_invlist(pTHX_ RExC_state_t *pRExC_state, regnode *node)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_MAKE_EXACTF_INVLIST \
+ assert(pRExC_state); assert(node)
+
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)
@@ -5537,7 +5817,7 @@ STATIC void S_output_posix_warnings(pTHX_ RExC_state_t *pRExC_state, AV* posix_w
STATIC void S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state);
#define PERL_ARGS_ASSERT_PARSE_LPAREN_QUESTION_FLAGS \
assert(pRExC_state)
-PERL_CALLCONV SV * Perl_parse_uniprop_string(pTHX_ const char * const name, const Size_t name_len, const bool is_utf8, const bool to_fold, const bool runtime, const bool deferrable, bool * user_defined_ptr, SV * msg, const STRLEN level);
+STATIC SV * S_parse_uniprop_string(pTHX_ const char * const name, Size_t name_len, const bool is_utf8, const bool to_fold, const bool runtime, const bool deferrable, AV ** strings, bool * user_defined_ptr, SV * msg, const STRLEN level);
#define PERL_ARGS_ASSERT_PARSE_UNIPROP_STRING \
assert(name); assert(user_defined_ptr); assert(msg)
STATIC void S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr);
@@ -5546,10 +5826,11 @@ STATIC void S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr)
STATIC void S_rck_elide_nothing(pTHX_ regnode *node);
#define PERL_ARGS_ASSERT_RCK_ELIDE_NOTHING \
assert(node)
-PERL_STATIC_NO_RET void S_re_croak2(pTHX_ bool utf8, const char* pat1, const char* pat2, ...)
- __attribute__noreturn__;
-#define PERL_ARGS_ASSERT_RE_CROAK2 \
- assert(pat1); assert(pat2)
+PERL_STATIC_NO_RET void S_re_croak(pTHX_ bool utf8, const char* pat, ...)
+ __attribute__noreturn__
+ __attribute__format__(__printf__,pTHX_2,pTHX_3);
+#define PERL_ARGS_ASSERT_RE_CROAK \
+ assert(pat)
STATIC regnode_offset S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth);
#define PERL_ARGS_ASSERT_REG \
@@ -5582,6 +5863,7 @@ STATIC regnode_offset S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U3
assert(pRExC_state); assert(flagp)
STATIC unsigned int S_regex_set_precedence(const U8 my_operator)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_REGEX_SET_PRECEDENCE
STATIC void S_reginsert(pTHX_ RExC_state_t *pRExC_state, const U8 op, const regnode_offset operand, const U32 depth);
#define PERL_ARGS_ASSERT_REGINSERT \
@@ -5592,6 +5874,9 @@ STATIC regnode_offset S_regnode_guts(pTHX_ RExC_state_t *pRExC_state, const U8 o
STATIC regnode_offset S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth);
#define PERL_ARGS_ASSERT_REGPIECE \
assert(pRExC_state); assert(flagp)
+STATIC regnode_offset S_regpnode(pTHX_ RExC_state_t *pRExC_state, U8 op, SV * arg);
+#define PERL_ARGS_ASSERT_REGPNODE \
+ assert(pRExC_state); assert(arg)
STATIC bool S_regtail(pTHX_ RExC_state_t * pRExC_state, const regnode_offset p, const regnode_offset val, const U32 depth)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_REGTAIL \
@@ -5609,38 +5894,30 @@ STATIC void S_set_regex_pv(pTHX_ RExC_state_t *pRExC_state, REGEXP *Rx);
STATIC void S_skip_to_be_ignored_text(pTHX_ RExC_state_t *pRExC_state, char ** p, const bool force_to_xmod);
#define PERL_ARGS_ASSERT_SKIP_TO_BE_IGNORED_TEXT \
assert(pRExC_state); assert(p)
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_ssc_add_range(pTHX_ regnode_ssc *ssc, UV const start, UV const end);
+STATIC void S_ssc_add_range(pTHX_ regnode_ssc *ssc, UV const start, UV const end);
#define PERL_ARGS_ASSERT_SSC_ADD_RANGE \
assert(ssc)
-#endif
STATIC void S_ssc_and(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc, const regnode_charclass *and_with);
#define PERL_ARGS_ASSERT_SSC_AND \
assert(pRExC_state); assert(ssc); assert(and_with)
STATIC void S_ssc_anything(pTHX_ regnode_ssc *ssc);
#define PERL_ARGS_ASSERT_SSC_ANYTHING \
assert(ssc)
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_ssc_clear_locale(regnode_ssc *ssc);
+STATIC void S_ssc_clear_locale(regnode_ssc *ssc);
#define PERL_ARGS_ASSERT_SSC_CLEAR_LOCALE \
assert(ssc)
-#endif
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_ssc_cp_and(pTHX_ regnode_ssc *ssc, UV const cp);
+STATIC void S_ssc_cp_and(pTHX_ regnode_ssc *ssc, UV const cp);
#define PERL_ARGS_ASSERT_SSC_CP_AND \
assert(ssc)
-#endif
STATIC void S_ssc_finalize(pTHX_ RExC_state_t *pRExC_state, regnode_ssc *ssc);
#define PERL_ARGS_ASSERT_SSC_FINALIZE \
assert(pRExC_state); assert(ssc)
STATIC void S_ssc_init(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc);
#define PERL_ARGS_ASSERT_SSC_INIT \
assert(pRExC_state); assert(ssc)
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_ssc_intersection(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert_2nd);
+STATIC void S_ssc_intersection(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert_2nd);
#define PERL_ARGS_ASSERT_SSC_INTERSECTION \
assert(ssc); assert(invlist)
-#endif
STATIC int S_ssc_is_anything(const regnode_ssc *ssc)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_SSC_IS_ANYTHING \
@@ -5654,20 +5931,127 @@ STATIC int S_ssc_is_cp_posixl_init(const RExC_state_t *pRExC_state, const regnod
STATIC void S_ssc_or(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc, const regnode_charclass *or_with);
#define PERL_ARGS_ASSERT_SSC_OR \
assert(pRExC_state); assert(ssc); assert(or_with)
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE void S_ssc_union(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert_2nd);
+STATIC void S_ssc_union(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert_2nd);
#define PERL_ARGS_ASSERT_SSC_UNION \
assert(ssc); assert(invlist)
-#endif
STATIC SSize_t S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp, SSize_t *minlenp, SSize_t *deltap, regnode *last, struct scan_data_t *data, I32 stopparen, U32 recursed_depth, regnode_ssc *and_withp, U32 flags, U32 depth, bool was_mutate_ok);
#define PERL_ARGS_ASSERT_STUDY_CHUNK \
assert(pRExC_state); assert(scanp); assert(minlenp); assert(deltap); assert(last)
#endif
-#if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C)
+#if defined(PERL_IN_REGCOMP_C) || defined (PERL_IN_DUMP_C) || defined(PERL_IN_OP_C)
PERL_CALLCONV void Perl__invlist_dump(pTHX_ PerlIO *file, I32 level, const char* const indent, SV* const invlist);
#define PERL_ARGS_ASSERT__INVLIST_DUMP \
assert(file); assert(indent); assert(invlist)
#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DOOP_C) || defined(PERL_IN_OP_C)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE SV* S_add_cp_to_invlist(pTHX_ SV* invlist, const UV cp)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_ADD_CP_TO_INVLIST
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void S_invlist_extend(pTHX_ SV* const invlist, const UV len);
+#define PERL_ARGS_ASSERT_INVLIST_EXTEND \
+ assert(invlist)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE UV S_invlist_highest(SV* const invlist)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_INVLIST_HIGHEST \
+ assert(invlist)
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void S_invlist_set_len(pTHX_ SV* const invlist, const UV len, const bool offset);
+#define PERL_ARGS_ASSERT_INVLIST_SET_LEN \
+ assert(invlist)
+#endif
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DOOP_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_UTF8_C)
+PERL_CALLCONV SV* Perl__add_range_to_invlist(pTHX_ SV* invlist, UV start, UV end)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT__ADD_RANGE_TO_INVLIST
+
+/* PERL_CALLCONV void _invlist_intersection(pTHX_ SV* const a, SV* const b, SV** i); */
+#define PERL_ARGS_ASSERT__INVLIST_INTERSECTION
+PERL_CALLCONV void Perl__invlist_intersection_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, const bool complement_b, SV** i);
+#define PERL_ARGS_ASSERT__INVLIST_INTERSECTION_MAYBE_COMPLEMENT_2ND \
+ assert(b); assert(i)
+PERL_CALLCONV void Perl__invlist_invert(pTHX_ SV* const invlist);
+#define PERL_ARGS_ASSERT__INVLIST_INVERT \
+ assert(invlist)
+/* PERL_CALLCONV void _invlist_subtract(pTHX_ SV* const a, SV* const b, SV** result); */
+#define PERL_ARGS_ASSERT__INVLIST_SUBTRACT
+/* PERL_CALLCONV void _invlist_union(pTHX_ SV* const a, SV* const b, SV** output); */
+#define PERL_ARGS_ASSERT__INVLIST_UNION
+PERL_CALLCONV void Perl__invlist_union_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, const bool complement_b, SV** output);
+#define PERL_ARGS_ASSERT__INVLIST_UNION_MAYBE_COMPLEMENT_2ND \
+ assert(b); assert(output)
+PERL_CALLCONV SV* Perl__new_invlist(pTHX_ IV initial_size)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT__NEW_INVLIST
+
+PERL_CALLCONV SV* Perl__setup_canned_invlist(pTHX_ const STRLEN size, const UV element0, UV** other_elements_ptr)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT__SETUP_CANNED_INVLIST \
+ assert(other_elements_ptr)
+
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DQUOTE_C) || defined(PERL_IN_TOKE_C)
+PERL_CALLCONV const char * Perl_form_alien_digit_msg(pTHX_ const U8 which, const STRLEN valids_len, const char * const first_bad, const char * const send, const bool UTF, const bool braced)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_FORM_ALIEN_DIGIT_MSG \
+ assert(first_bad); assert(send)
+
+PERL_CALLCONV bool Perl_grok_bslash_c(pTHX_ const char source, U8 * result, const char** message, U32 * packed_warn)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_GROK_BSLASH_C \
+ assert(result); assert(message)
+
+PERL_CALLCONV bool Perl_grok_bslash_o(pTHX_ char** s, const char* const send, UV* uv, const char** message, U32 * packed_warn, const bool strict, const bool allow_UV_MAX, const bool utf8)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_GROK_BSLASH_O \
+ assert(s); assert(send); assert(uv); assert(message)
+
+PERL_CALLCONV bool Perl_grok_bslash_x(pTHX_ char** s, const char* const send, UV* uv, const char** message, U32 * packed_warn, const bool strict, const bool allow_UV_MAX, const bool utf8)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_GROK_BSLASH_X \
+ assert(s); assert(send); assert(uv); assert(message)
+
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_DQUOTE_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C)
+PERL_CALLCONV const char * Perl_form_cp_too_large_msg(pTHX_ const U8 which, const char * string, const Size_t len, const UV cp)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_FORM_CP_TOO_LARGE_MSG
+
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_OP_C)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE STRLEN* S_get_invlist_iter_addr(SV* invlist)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR \
+ assert(invlist)
+#endif
+
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void S_invlist_iterfinish(SV* invlist);
+#define PERL_ARGS_ASSERT_INVLIST_ITERFINISH \
+ assert(invlist)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE void S_invlist_iterinit(SV* invlist);
+#define PERL_ARGS_ASSERT_INVLIST_ITERINIT \
+ assert(invlist)
+#endif
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE bool S_invlist_iternext(SV* invlist, UV* start, UV* end)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_INVLIST_ITERNEXT \
+ assert(invlist); assert(start); assert(end)
+#endif
+
+#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PERL_C) || defined(PERL_IN_UTF8_C)
PERL_CALLCONV bool Perl__invlistEQ(pTHX_ SV* const a, SV* const b, const bool complement_b);
#define PERL_ARGS_ASSERT__INVLISTEQ \
@@ -5678,18 +6062,24 @@ PERL_CALLCONV SV* Perl__new_invlist_C_array(pTHX_ const UV* const list)
assert(list)
#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_PP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UNIVERSAL_C)
+#ifndef PERL_NO_INLINE_FUNCTIONS
+PERL_STATIC_INLINE const char * S_get_regex_charset_name(const U32 flags, STRLEN* const lenp);
+#define PERL_ARGS_ASSERT_GET_REGEX_CHARSET_NAME \
+ assert(lenp)
+#endif
+#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-PERL_CALLCONV SV* Perl__get_regclass_nonbitmap_data(pTHX_ const regexp *prog, const struct regnode *node, bool doinit, SV **listsvp, SV **lonly_utf8_locale, SV **output_invlist);
-#define PERL_ARGS_ASSERT__GET_REGCLASS_NONBITMAP_DATA \
- assert(node)
-PERL_CALLCONV int Perl_re_printf(pTHX_ const char *fmt, ...);
+PERL_CALLCONV int Perl_re_printf(pTHX_ const char *fmt, ...)
+ __attribute__format__(__printf__,pTHX_1,pTHX_2);
#define PERL_ARGS_ASSERT_RE_PRINTF \
assert(fmt)
+
PERL_CALLCONV void Perl_regprop(pTHX_ const regexp *prog, SV* sv, const regnode* o, const regmatch_info *reginfo, const RExC_state_t *pRExC_state);
#define PERL_ARGS_ASSERT_REGPROP \
assert(sv); assert(o)
#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_PP_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C) || defined(PERL_IN_DOOP_C)
#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE bool S__invlist_contains_cp(SV* const invlist, const UV cp)
__attribute__warn_unused_result__;
@@ -5726,68 +6116,36 @@ PERL_STATIC_INLINE UV* S_invlist_array(SV* const invlist)
#ifndef PERL_NO_INLINE_FUNCTIONS
PERL_STATIC_INLINE bool S_is_invlist(SV* const invlist)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_IS_INVLIST
#endif
#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C)
+PERL_CALLCONV bool Perl_is_grapheme(pTHX_ const U8 * strbeg, const U8 * s, const U8 *strend, const UV cp)
+ __attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_IS_GRAPHEME \
+ assert(strbeg); assert(s); assert(strend)
+
+#endif
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C)
+PERL_CALLCONV UV Perl__to_fold_latin1(const U8 c, U8 *p, STRLEN *lenp, const unsigned int flags);
+#define PERL_ARGS_ASSERT__TO_FOLD_LATIN1 \
+ assert(p); assert(lenp)
+#endif
#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_SV_C)
PERL_CALLCONV SV* Perl_invlist_clone(pTHX_ SV* const invlist, SV* newlist);
#define PERL_ARGS_ASSERT_INVLIST_CLONE \
assert(invlist)
#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_DQUOTE_C)
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C)
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE char* S_form_short_octal_warning(pTHX_ const char * const s, const STRLEN len)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_FORM_SHORT_OCTAL_WARNING \
- assert(s)
-#endif
-
-PERL_CALLCONV char Perl_grok_bslash_c(pTHX_ const char source, const bool output_warning)
- __attribute__warn_unused_result__;
-
-PERL_CALLCONV bool Perl_grok_bslash_o(pTHX_ char** s, const char* const send, UV* uv, const char** error_msg, const bool output_warning, const bool strict, const bool silence_non_portable, const bool utf8)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_GROK_BSLASH_O \
- assert(s); assert(send); assert(uv); assert(error_msg)
-
-PERL_CALLCONV bool Perl_grok_bslash_x(pTHX_ char** s, const char* const send, UV* uv, const char** error_msg, const bool output_warning, const bool strict, const bool silence_non_portable, const bool utf8)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_GROK_BSLASH_X \
- assert(s); assert(send); assert(uv); assert(error_msg)
-
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE I32 S_regcurly(const char *s)
+PERL_STATIC_INLINE bool S_regcurly(const char *s)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_REGCURLY \
assert(s)
#endif
#endif
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_UTF8_C)
-PERL_CALLCONV SV* Perl__add_range_to_invlist(pTHX_ SV* invlist, UV start, UV end)
- __attribute__warn_unused_result__;
-
-/* PERL_CALLCONV void _invlist_intersection(pTHX_ SV* const a, SV* const b, SV** i); */
-PERL_CALLCONV void Perl__invlist_intersection_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, const bool complement_b, SV** i);
-#define PERL_ARGS_ASSERT__INVLIST_INTERSECTION_MAYBE_COMPLEMENT_2ND \
- assert(b); assert(i)
-PERL_CALLCONV void Perl__invlist_invert(pTHX_ SV* const invlist);
-#define PERL_ARGS_ASSERT__INVLIST_INVERT \
- assert(invlist)
-/* PERL_CALLCONV void _invlist_subtract(pTHX_ SV* const a, SV* const b, SV** result); */
-/* PERL_CALLCONV void _invlist_union(pTHX_ SV* const a, SV* const b, SV** output); */
-PERL_CALLCONV void Perl__invlist_union_maybe_complement_2nd(pTHX_ SV* const a, SV* const b, const bool complement_b, SV** output);
-#define PERL_ARGS_ASSERT__INVLIST_UNION_MAYBE_COMPLEMENT_2ND \
- assert(b); assert(output)
-PERL_CALLCONV SV* Perl__new_invlist(pTHX_ IV initial_size)
- __attribute__warn_unused_result__;
-
-PERL_CALLCONV SV* Perl__setup_canned_invlist(pTHX_ const STRLEN size, const UV element0, UV** other_elements_ptr)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT__SETUP_CANNED_INVLIST \
- assert(other_elements_ptr)
-
-#endif
#if defined(PERL_IN_REGEXEC_C)
STATIC LB_enum S_advance_one_LB(pTHX_ U8 ** curpos, const U8 * const strend, const bool utf8_target)
__attribute__warn_unused_result__;
@@ -5930,20 +6288,15 @@ STATIC void S_to_utf8_substr(pTHX_ regexp * prog);
#define PERL_ARGS_ASSERT_TO_UTF8_SUBSTR \
assert(prog)
#endif
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_TOKE_C)
-PERL_CALLCONV bool Perl__is_grapheme(pTHX_ const U8 * strbeg, const U8 * s, const U8 *strend, const UV cp)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT__IS_GRAPHEME \
- assert(strbeg); assert(s); assert(strend)
-
-#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
STATIC SV* S_save_scalar_at(pTHX_ SV **sptr, const U32 flags);
#define PERL_ARGS_ASSERT_SAVE_SCALAR_AT \
assert(sptr)
@@ -5982,6 +6335,7 @@ STATIC void S_glob_assign_glob(pTHX_ SV *const dstr, SV *const sstr, const int d
#define PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB \
assert(dstr); assert(sstr)
STATIC SV * S_more_sv(pTHX);
+#define PERL_ARGS_ASSERT_MORE_SV
STATIC void S_not_a_number(pTHX_ SV *const sv);
#define PERL_ARGS_ASSERT_NOT_A_NUMBER \
assert(sv)
@@ -6052,11 +6406,14 @@ STATIC void S_unreferenced_to_tmp_stack(pTHX_ AV *const unreferenced);
#if defined(PERL_IN_SV_C) || defined (PERL_IN_OP_C)
PERL_CALLCONV SV * Perl_varname(pTHX_ const GV *const gv, const char gvtype, PADOFFSET targ, const SV *const keyname, SSize_t aindex, int subscript_type)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_VARNAME
#endif
#if defined(PERL_IN_TOKE_C)
STATIC int S_ao(pTHX_ int toketype);
+#define PERL_ARGS_ASSERT_AO
STATIC void S_check_uni(pTHX);
+#define PERL_ARGS_ASSERT_CHECK_UNI
STATIC void S_checkcomma(pTHX_ const char *s, const char *name, const char *what);
#define PERL_ARGS_ASSERT_CHECKCOMMA \
assert(s); assert(name); assert(what)
@@ -6074,7 +6431,9 @@ STATIC void S_force_ident(pTHX_ const char *s, int kind);
#define PERL_ARGS_ASSERT_FORCE_IDENT \
assert(s)
STATIC void S_force_ident_maybe_lex(pTHX_ char pit);
+#define PERL_ARGS_ASSERT_FORCE_IDENT_MAYBE_LEX
STATIC void S_force_next(pTHX_ I32 type);
+#define PERL_ARGS_ASSERT_FORCE_NEXT
STATIC char* S_force_strict_version(pTHX_ char *s);
#define PERL_ARGS_ASSERT_FORCE_STRICT_VERSION \
assert(s)
@@ -6103,6 +6462,7 @@ STATIC I32 S_lop(pTHX_ I32 f, U8 x, char *s);
assert(s)
PERL_STATIC_NO_RET void S_missingterm(pTHX_ char *s, STRLEN len)
__attribute__noreturn__;
+#define PERL_ARGS_ASSERT_MISSINGTERM
STATIC SV* S_new_constant(pTHX_ const char *s, STRLEN len, const char *key, STRLEN keylen, SV *sv, SV *pv, const char *type, STRLEN typelen, const char ** error_msg);
#define PERL_ARGS_ASSERT_NEW_CONSTANT \
@@ -6114,6 +6474,7 @@ STATIC void S_parse_ident(pTHX_ char **s, char **d, char * const e, int allow_pa
#define PERL_ARGS_ASSERT_PARSE_IDENT \
assert(s); assert(d); assert(e)
STATIC int S_pending_ident(pTHX);
+#define PERL_ARGS_ASSERT_PENDING_IDENT
STATIC char* S_scan_const(pTHX_ char *start)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_SCAN_CONST \
@@ -6154,12 +6515,15 @@ STATIC char* S_scan_trans(pTHX_ char *start)
STATIC I32 S_sublex_done(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SUBLEX_DONE
STATIC I32 S_sublex_push(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SUBLEX_PUSH
STATIC I32 S_sublex_start(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_SUBLEX_START
STATIC char* S_swallow_bom(pTHX_ U8 *s)
__attribute__warn_unused_result__;
@@ -6175,22 +6539,19 @@ STATIC SV* S_tokeq(pTHX_ SV *sv);
#define PERL_ARGS_ASSERT_TOKEQ \
assert(sv)
STATIC void S_update_debugger_info(pTHX_ SV *orig_sv, const char *const buf, STRLEN len);
+#define PERL_ARGS_ASSERT_UPDATE_DEBUGGER_INFO
STATIC int S_yywarn(pTHX_ const char *const s, U32 flags);
#define PERL_ARGS_ASSERT_YYWARN \
assert(s)
#endif
#if defined(PERL_IN_UNIVERSAL_C)
-STATIC bool S_isa_lookup(pTHX_ HV *stash, const char * const name, STRLEN len, U32 flags);
-#define PERL_ARGS_ASSERT_ISA_LOOKUP \
- assert(stash); assert(name)
+STATIC bool S_isa_lookup(pTHX_ HV *stash, SV *namesv, const char * name, STRLEN len, U32 flags);
+STATIC bool S_sv_derived_from_svpvn(pTHX_ SV *sv, SV *namesv, const char * name, const STRLEN len, U32 flags);
#endif
#if defined(PERL_IN_UTF8_C)
-STATIC UV S__to_utf8_case(pTHX_ const UV uv1, const U8 *p, U8* ustrp, STRLEN *lenp, SV *invlist, const int * const invmap, const unsigned int * const * const aux_tables, const U8 * const aux_table_lengths, const char * const normal);
+STATIC UV S__to_utf8_case(pTHX_ const UV uv1, const U8 *p, U8* ustrp, STRLEN *lenp, SV *invlist, const I32 * const invmap, const U32 * const * const aux_tables, const U8 * const aux_table_lengths, const char * const normal);
#define PERL_ARGS_ASSERT__TO_UTF8_CASE \
assert(ustrp); assert(lenp); assert(invlist); assert(invmap); assert(normal)
-STATIC U32 S_check_and_deprecate(pTHX_ const U8 * p, const U8 ** e, const unsigned type, const bool use_locale, const char * const file, const unsigned line);
-#define PERL_ARGS_ASSERT_CHECK_AND_DEPRECATE \
- assert(p); assert(e); assert(file)
STATIC UV S_check_locale_boundary_crossing(pTHX_ const U8* const p, const UV result, U8* const ustrp, STRLEN *lenp)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_CHECK_LOCALE_BOUNDARY_CROSSING \
@@ -6211,16 +6572,9 @@ PERL_STATIC_INLINE int S_isFF_OVERLONG(const U8 * const s, const STRLEN len)
#endif
#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_is_utf8_common(pTHX_ const U8 *const p, SV* const invlist)
+PERL_STATIC_INLINE bool S_is_utf8_common(pTHX_ const U8 *const p, const U8 *const e, SV* const invlist)
__attribute__warn_unused_result__;
#define PERL_ARGS_ASSERT_IS_UTF8_COMMON \
- assert(p)
-#endif
-
-#ifndef PERL_NO_INLINE_FUNCTIONS
-PERL_STATIC_INLINE bool S_is_utf8_common_with_len(pTHX_ const U8 *const p, const U8 *const e, SV* const invlist)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_IS_UTF8_COMMON_WITH_LEN \
assert(p); assert(e)
#endif
@@ -6236,18 +6590,9 @@ STATIC HV * S_new_msg_hv(pTHX_ const char * const message, U32 categories, U32 f
#define PERL_ARGS_ASSERT_NEW_MSG_HV \
assert(message)
-STATIC U8* S_swash_scan_list_line(pTHX_ U8* l, U8* const lend, UV* min, UV* max, UV* val, const bool wants_value, const U8* const typestr)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_SWASH_SCAN_LIST_LINE \
- assert(l); assert(lend); assert(min); assert(max); assert(val); assert(typestr)
-
-STATIC SV* S_swatch_get(pTHX_ SV* swash, UV start, UV span)
- __attribute__warn_unused_result__;
-#define PERL_ARGS_ASSERT_SWATCH_GET \
- assert(swash)
-
STATIC U8 S_to_lower_latin1(const U8 c, U8 *p, STRLEN *lenp, const char dummy)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_TO_LOWER_LATIN1
STATIC UV S_turkic_fc(pTHX_ const U8 * const p, const U8 * const e, U8* ustrp, STRLEN *lenp);
#define PERL_ARGS_ASSERT_TURKIC_FC \
@@ -6263,24 +6608,19 @@ STATIC char * S_unexpected_non_continuation_text(pTHX_ const U8 * const s, STRLE
#define PERL_ARGS_ASSERT_UNEXPECTED_NON_CONTINUATION_TEXT \
assert(s)
-STATIC void S_warn_on_first_deprecated_use(pTHX_ const char * const name, const char * const alternative, const bool use_locale, const char * const file, const unsigned line);
-#define PERL_ARGS_ASSERT_WARN_ON_FIRST_DEPRECATED_USE \
- assert(name); assert(alternative); assert(file)
#endif
#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C)
PERL_CALLCONV UV Perl__to_upper_title_latin1(pTHX_ const U8 c, U8 *p, STRLEN *lenp, const char S_or_s);
#define PERL_ARGS_ASSERT__TO_UPPER_TITLE_LATIN1 \
assert(p); assert(lenp)
#endif
-#if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C)
-PERL_CALLCONV UV Perl__to_fold_latin1(const U8 c, U8 *p, STRLEN *lenp, const unsigned int flags);
-#define PERL_ARGS_ASSERT__TO_FOLD_LATIN1 \
- assert(p); assert(lenp)
-#endif
#if defined(PERL_IN_UTIL_C)
STATIC bool S_ckwarn_common(pTHX_ U32 w);
+#define PERL_ARGS_ASSERT_CKWARN_COMMON
STATIC bool S_invoke_exception_hook(pTHX_ SV *ex, bool warn);
+#define PERL_ARGS_ASSERT_INVOKE_EXCEPTION_HOOK
STATIC SV* S_mess_alloc(pTHX);
+#define PERL_ARGS_ASSERT_MESS_ALLOC
STATIC SV * S_with_queued_errors(pTHX_ SV *ex);
#define PERL_ARGS_ASSERT_WITH_QUEUED_ERRORS \
assert(ex)
@@ -6306,6 +6646,13 @@ PERL_CALLCONV Malloc_t Perl_mem_log_realloc(const UV n, const UV typesize, const
#endif
#if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C)
STATIC void S_pidgone(pTHX_ Pid_t pid, int status);
+#define PERL_ARGS_ASSERT_PIDGONE
+#endif
+#if defined(PERL_USE_3ARG_SIGHANDLER)
+PERL_CALLCONV Signal_t Perl_csighandler(int sig, Siginfo_t *info, void *uap);
+#define PERL_ARGS_ASSERT_CSIGHANDLER
+PERL_CALLCONV Signal_t Perl_sighandler(int sig, Siginfo_t *info, void *uap);
+#define PERL_ARGS_ASSERT_SIGHANDLER
#endif
#if defined(UNLINK_ALL_VERSIONS)
PERL_CALLCONV I32 Perl_unlnk(pTHX_ const char* f);
@@ -6317,8 +6664,11 @@ PERL_CALLCONV bool Perl_dump_c_backtrace(pTHX_ PerlIO* fp, int max_depth, int sk
#define PERL_ARGS_ASSERT_DUMP_C_BACKTRACE \
assert(fp)
/* PERL_CALLCONV void free_c_backtrace(pTHX_ Perl_c_backtrace* bt); */
+#define PERL_ARGS_ASSERT_FREE_C_BACKTRACE
PERL_CALLCONV Perl_c_backtrace* Perl_get_c_backtrace(pTHX_ int max_depth, int skip);
+#define PERL_ARGS_ASSERT_GET_C_BACKTRACE
PERL_CALLCONV SV* Perl_get_c_backtrace_dump(pTHX_ int max_depth, int skip);
+#define PERL_ARGS_ASSERT_GET_C_BACKTRACE_DUMP
#endif
#if defined(USE_DTRACE)
PERL_CALLCONV void Perl_dtrace_probe_call(pTHX_ CV *cv, bool is_call);
@@ -6331,6 +6681,7 @@ PERL_CALLCONV void Perl_dtrace_probe_op(pTHX_ const OP *op);
#define PERL_ARGS_ASSERT_DTRACE_PROBE_OP \
assert(op)
PERL_CALLCONV void Perl_dtrace_probe_phase(pTHX_ enum perl_phase phase);
+#define PERL_ARGS_ASSERT_DTRACE_PROBE_PHASE
#endif
#if defined(USE_ITHREADS)
PERL_CALLCONV PADOFFSET Perl_alloccopstash(pTHX_ HV *hv);
@@ -6443,16 +6794,19 @@ PERL_CALLCONV SV* Perl_sv_dup_inc(pTHX_ const SV *const sstr, CLONE_PARAMS *cons
#endif
#if defined(USE_LOCALE) && ( defined(PERL_IN_LOCALE_C) || defined(PERL_IN_MG_C) || defined (PERL_EXT_POSIX) || defined (PERL_EXT_LANGINFO))
PERL_CALLCONV bool Perl__is_cur_LC_category_utf8(pTHX_ int category);
+#define PERL_ARGS_ASSERT__IS_CUR_LC_CATEGORY_UTF8
#endif
#if defined(USE_LOCALE_COLLATE)
PERL_CALLCONV int Perl_magic_setcollxfrm(pTHX_ SV* sv, MAGIC* mg);
#define PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM \
assert(sv); assert(mg)
#ifndef NO_MATHOMS
-PERL_CALLCONV char* Perl_mem_collxfrm(pTHX_ const char* input_string, STRLEN len, STRLEN* xlen);
+PERL_CALLCONV char* Perl_mem_collxfrm(pTHX_ const char* input_string, STRLEN len, STRLEN* xlen)
+ __attribute__deprecated__;
#define PERL_ARGS_ASSERT_MEM_COLLXFRM \
assert(input_string); assert(xlen)
#endif
+
#ifndef NO_MATHOMS
PERL_CALLCONV char* Perl_sv_collxfrm(pTHX_ SV *const sv, STRLEN *const nxp);
#define PERL_ARGS_ASSERT_SV_COLLXFRM \
@@ -6464,39 +6818,60 @@ PERL_CALLCONV char* Perl_sv_collxfrm_flags(pTHX_ SV *const sv, STRLEN *const nxp
#endif
#if defined(USE_PERLIO)
PERL_CALLCONV void Perl_PerlIO_clearerr(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_CLEARERR
PERL_CALLCONV int Perl_PerlIO_close(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_CLOSE
PERL_CALLCONV int Perl_PerlIO_eof(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_EOF
PERL_CALLCONV int Perl_PerlIO_error(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_ERROR
PERL_CALLCONV int Perl_PerlIO_fileno(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_FILENO
PERL_CALLCONV int Perl_PerlIO_fill(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_FILL
PERL_CALLCONV int Perl_PerlIO_flush(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_FLUSH
PERL_CALLCONV STDCHAR * Perl_PerlIO_get_base(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_GET_BASE
PERL_CALLCONV SSize_t Perl_PerlIO_get_bufsiz(pTHX_ PerlIO *f)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_PERLIO_GET_BUFSIZ
PERL_CALLCONV SSize_t Perl_PerlIO_get_cnt(pTHX_ PerlIO *f)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_PERLIO_GET_CNT
PERL_CALLCONV STDCHAR * Perl_PerlIO_get_ptr(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_GET_PTR
PERL_CALLCONV SSize_t Perl_PerlIO_read(pTHX_ PerlIO *f, void *vbuf, Size_t count);
#define PERL_ARGS_ASSERT_PERLIO_READ \
assert(vbuf)
PERL_CALLCONV void Perl_PerlIO_restore_errno(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_RESTORE_ERRNO
PERL_CALLCONV void Perl_PerlIO_save_errno(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_SAVE_ERRNO
PERL_CALLCONV int Perl_PerlIO_seek(pTHX_ PerlIO *f, Off_t offset, int whence);
+#define PERL_ARGS_ASSERT_PERLIO_SEEK
PERL_CALLCONV void Perl_PerlIO_set_cnt(pTHX_ PerlIO *f, SSize_t cnt);
+#define PERL_ARGS_ASSERT_PERLIO_SET_CNT
PERL_CALLCONV void Perl_PerlIO_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR *ptr, SSize_t cnt);
+#define PERL_ARGS_ASSERT_PERLIO_SET_PTRCNT
PERL_CALLCONV void Perl_PerlIO_setlinebuf(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_SETLINEBUF
PERL_CALLCONV PerlIO * Perl_PerlIO_stderr(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_PERLIO_STDERR
PERL_CALLCONV PerlIO * Perl_PerlIO_stdin(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_PERLIO_STDIN
PERL_CALLCONV PerlIO * Perl_PerlIO_stdout(pTHX)
__attribute__warn_unused_result__;
+#define PERL_ARGS_ASSERT_PERLIO_STDOUT
PERL_CALLCONV Off_t Perl_PerlIO_tell(pTHX_ PerlIO *f);
+#define PERL_ARGS_ASSERT_PERLIO_TELL
PERL_CALLCONV SSize_t Perl_PerlIO_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
#define PERL_ARGS_ASSERT_PERLIO_UNREAD \
assert(vbuf)
@@ -6508,8 +6883,8 @@ PERL_CALLCONV SSize_t Perl_PerlIO_write(pTHX_ PerlIO *f, const void *vbuf, Size_
PERL_CALLCONV bool Perl_quadmath_format_needed(const char* format);
#define PERL_ARGS_ASSERT_QUADMATH_FORMAT_NEEDED \
assert(format)
-PERL_CALLCONV const char* Perl_quadmath_format_single(const char* format);
-#define PERL_ARGS_ASSERT_QUADMATH_FORMAT_SINGLE \
+PERL_CALLCONV bool Perl_quadmath_format_valid(const char* format);
+#define PERL_ARGS_ASSERT_QUADMATH_FORMAT_VALID \
assert(format)
#endif
#if defined(WIN32)
diff --git a/gnu/usr.bin/perl/reentr.c b/gnu/usr.bin/perl/reentr.c
index 166777e891e..8ddda7bfc0c 100644
--- a/gnu/usr.bin/perl/reentr.c
+++ b/gnu/usr.bin/perl/reentr.c
@@ -25,13 +25,14 @@
* various library calls, such as getpwent_r. The wrapping is done so
* that other files like pp_sys.c calling those library functions need not
* care about the differences between various platforms' idiosyncrasies
- * regarding these reentrant interfaces.
+ * regarding these reentrant interfaces.
*/
#include "EXTERN.h"
#define PERL_IN_REENTR_C
#include "perl.h"
#include "reentr.h"
+#include "keywords.h"
#define RenewDouble(data_pointer, size_pointer, type) \
STMT_START { \
@@ -43,474 +44,635 @@
void
Perl_reentrant_size(pTHX) {
PERL_UNUSED_CONTEXT;
+
+ /* Set the sizes of the reentrant buffers */
+
#ifdef USE_REENTRANT_API
-#define REENTRANTSMALLSIZE 256 /* Make something up. */
-#define REENTRANTUSUALSIZE 4096 /* Make something up. */
-#ifdef HAS_ASCTIME_R
+# define REENTRANTSMALLSIZE 256 /* Make something up. */
+# define REENTRANTUSUALSIZE 4096 /* Make something up. */
+
+# ifdef HAS_ASCTIME_R
PL_reentrant_buffer->_asctime_size = REENTRANTSMALLSIZE;
-#endif /* HAS_ASCTIME_R */
-#ifdef HAS_CRYPT_R
-#endif /* HAS_CRYPT_R */
-#ifdef HAS_CTIME_R
+# endif /* HAS_ASCTIME_R */
+
+# ifdef HAS_CRYPT_R
+# endif /* HAS_CRYPT_R */
+
+# ifdef HAS_CTIME_R
PL_reentrant_buffer->_ctime_size = REENTRANTSMALLSIZE;
-#endif /* HAS_CTIME_R */
-#ifdef HAS_GETGRNAM_R
-# if defined(HAS_SYSCONF) && defined(_SC_GETGR_R_SIZE_MAX) && !defined(__GLIBC__)
+# endif /* HAS_CTIME_R */
+
+# ifdef HAS_GETGRNAM_R
+# if defined(HAS_SYSCONF) && defined(_SC_GETGR_R_SIZE_MAX) && !defined(__GLIBC__)
PL_reentrant_buffer->_grent_size = sysconf(_SC_GETGR_R_SIZE_MAX);
if (PL_reentrant_buffer->_grent_size == (size_t) -1)
PL_reentrant_buffer->_grent_size = REENTRANTUSUALSIZE;
-# elif defined(__osf__) && defined(__alpha) && defined(SIABUFSIZ)
+# elif defined(__osf__) && defined(__alpha) && defined(SIABUFSIZ)
PL_reentrant_buffer->_grent_size = SIABUFSIZ;
-# elif defined(__sgi)
+# elif defined(__sgi)
PL_reentrant_buffer->_grent_size = BUFSIZ;
-# else
+# else
PL_reentrant_buffer->_grent_size = REENTRANTUSUALSIZE;
-# endif
-#endif /* HAS_GETGRNAM_R */
-#ifdef HAS_GETHOSTBYNAME_R
-#if !(GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
+# endif
+# endif /* HAS_GETGRNAM_R */
+
+# ifdef HAS_GETHOSTBYNAME_R
+# if !(GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
PL_reentrant_buffer->_hostent_size = REENTRANTUSUALSIZE;
-#endif
-#endif /* HAS_GETHOSTBYNAME_R */
-#ifdef HAS_GETLOGIN_R
+# endif
+# endif /* HAS_GETHOSTBYNAME_R */
+
+# ifdef HAS_GETLOGIN_R
PL_reentrant_buffer->_getlogin_size = REENTRANTSMALLSIZE;
-#endif /* HAS_GETLOGIN_R */
-#ifdef HAS_GETNETBYNAME_R
-#if !(GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
+# endif /* HAS_GETLOGIN_R */
+
+# ifdef HAS_GETNETBYNAME_R
+# if !(GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
PL_reentrant_buffer->_netent_size = REENTRANTUSUALSIZE;
-#endif
-#endif /* HAS_GETNETBYNAME_R */
-#ifdef HAS_GETPROTOBYNAME_R
-#if !(GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
+# endif
+# endif /* HAS_GETNETBYNAME_R */
+
+# ifdef HAS_GETPROTOBYNAME_R
+# if !(GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
PL_reentrant_buffer->_protoent_size = REENTRANTUSUALSIZE;
-#endif
-#endif /* HAS_GETPROTOBYNAME_R */
-#ifdef HAS_GETPWNAM_R
-# if defined(HAS_SYSCONF) && defined(_SC_GETPW_R_SIZE_MAX) && !defined(__GLIBC__)
+# endif
+# endif /* HAS_GETPROTOBYNAME_R */
+
+# ifdef HAS_GETPWNAM_R
+# if defined(HAS_SYSCONF) && defined(_SC_GETPW_R_SIZE_MAX) && !defined(__GLIBC__)
PL_reentrant_buffer->_pwent_size = sysconf(_SC_GETPW_R_SIZE_MAX);
if (PL_reentrant_buffer->_pwent_size == (size_t) -1)
PL_reentrant_buffer->_pwent_size = REENTRANTUSUALSIZE;
-# elif defined(__osf__) && defined(__alpha) && defined(SIABUFSIZ)
+# elif defined(__osf__) && defined(__alpha) && defined(SIABUFSIZ)
PL_reentrant_buffer->_pwent_size = SIABUFSIZ;
-# elif defined(__sgi)
+# elif defined(__sgi)
PL_reentrant_buffer->_pwent_size = BUFSIZ;
-# else
+# else
PL_reentrant_buffer->_pwent_size = REENTRANTUSUALSIZE;
-# endif
-#endif /* HAS_GETPWNAM_R */
-#ifdef HAS_GETSERVBYNAME_R
-#if !(GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD)
+# endif
+# endif /* HAS_GETPWNAM_R */
+
+# ifdef HAS_GETSERVBYNAME_R
+# if !(GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD)
PL_reentrant_buffer->_servent_size = REENTRANTUSUALSIZE;
-#endif
-#endif /* HAS_GETSERVBYNAME_R */
-#ifdef HAS_GETSPNAM_R
-# if defined(HAS_SYSCONF) && defined(_SC_GETPW_R_SIZE_MAX) && !defined(__GLIBC__)
+# endif
+# endif /* HAS_GETSERVBYNAME_R */
+
+# ifdef HAS_GETSPNAM_R
+# if defined(HAS_SYSCONF) && defined(_SC_GETPW_R_SIZE_MAX) && !defined(__GLIBC__)
PL_reentrant_buffer->_spent_size = sysconf(_SC_GETPW_R_SIZE_MAX);
if (PL_reentrant_buffer->_spent_size == (size_t) -1)
PL_reentrant_buffer->_spent_size = REENTRANTUSUALSIZE;
-# elif defined(__osf__) && defined(__alpha) && defined(SIABUFSIZ)
+# elif defined(__osf__) && defined(__alpha) && defined(SIABUFSIZ)
PL_reentrant_buffer->_spent_size = SIABUFSIZ;
-# elif defined(__sgi)
+# elif defined(__sgi)
PL_reentrant_buffer->_spent_size = BUFSIZ;
-# else
+# else
PL_reentrant_buffer->_spent_size = REENTRANTUSUALSIZE;
-# endif
-#endif /* HAS_GETSPNAM_R */
-#ifdef HAS_READDIR_R
+# endif
+# endif /* HAS_GETSPNAM_R */
+
+# ifdef HAS_GMTIME_R
+# endif /* HAS_GMTIME_R */
+
+# ifdef HAS_LOCALTIME_R
+# endif /* HAS_LOCALTIME_R */
+
+# ifdef HAS_READDIR_R
/* This is the size Solaris recommends.
* (though we go static, should use pathconf() instead) */
PL_reentrant_buffer->_readdir_size = sizeof(struct dirent) + MAXPATHLEN + 1;
-#endif /* HAS_READDIR_R */
-#ifdef HAS_READDIR64_R
+# endif /* HAS_READDIR_R */
+
+# ifdef HAS_READDIR64_R
/* This is the size Solaris recommends.
* (though we go static, should use pathconf() instead) */
PL_reentrant_buffer->_readdir64_size = sizeof(struct dirent64) + MAXPATHLEN + 1;
-#endif /* HAS_READDIR64_R */
-#ifdef HAS_SETLOCALE_R
+# endif /* HAS_READDIR64_R */
+
+# ifdef HAS_SETLOCALE_R
PL_reentrant_buffer->_setlocale_size = REENTRANTSMALLSIZE;
-#endif /* HAS_SETLOCALE_R */
-#ifdef HAS_STRERROR_R
+# endif /* HAS_SETLOCALE_R */
+
+# ifdef HAS_STRERROR_R
PL_reentrant_buffer->_strerror_size = REENTRANTSMALLSIZE;
-#endif /* HAS_STRERROR_R */
-#ifdef HAS_TTYNAME_R
+# endif /* HAS_STRERROR_R */
+
+# ifdef HAS_TTYNAME_R
PL_reentrant_buffer->_ttyname_size = REENTRANTSMALLSIZE;
-#endif /* HAS_TTYNAME_R */
+# endif /* HAS_TTYNAME_R */
+
#endif /* USE_REENTRANT_API */
+
}
void
Perl_reentrant_init(pTHX) {
PERL_UNUSED_CONTEXT;
+
+ /* Initialize the whole thing */
+
#ifdef USE_REENTRANT_API
+
Newx(PL_reentrant_buffer, 1, REENTR);
Perl_reentrant_size(aTHX);
-#ifdef HAS_ASCTIME_R
+
+# ifdef HAS_ASCTIME_R
Newx(PL_reentrant_buffer->_asctime_buffer, PL_reentrant_buffer->_asctime_size, char);
-#endif /* HAS_ASCTIME_R */
-#ifdef HAS_CRYPT_R
-#if CRYPT_R_PROTO != REENTRANT_PROTO_B_CCD
+# endif /* HAS_ASCTIME_R */
+
+# ifdef HAS_CRYPT_R
+# if CRYPT_R_PROTO != REENTRANT_PROTO_B_CCD
PL_reentrant_buffer->_crypt_struct_buffer = 0;
-#endif
-#endif /* HAS_CRYPT_R */
-#ifdef HAS_CTIME_R
+# endif
+# endif /* HAS_CRYPT_R */
+
+# ifdef HAS_CTIME_R
Newx(PL_reentrant_buffer->_ctime_buffer, PL_reentrant_buffer->_ctime_size, char);
-#endif /* HAS_CTIME_R */
-#ifdef HAS_GETGRNAM_R
+# endif /* HAS_CTIME_R */
+
+# ifdef HAS_GETGRNAM_R
# ifdef USE_GRENT_FPTR
PL_reentrant_buffer->_grent_fptr = NULL;
# endif
Newx(PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, char);
-#endif /* HAS_GETGRNAM_R */
-#ifdef HAS_GETHOSTBYNAME_R
-#if !(GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
+# endif /* HAS_GETGRNAM_R */
+
+# ifdef HAS_GETHOSTBYNAME_R
+# if !(GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
Newx(PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, char);
-#endif
-#endif /* HAS_GETHOSTBYNAME_R */
-#ifdef HAS_GETLOGIN_R
+# endif
+# endif /* HAS_GETHOSTBYNAME_R */
+
+# ifdef HAS_GETLOGIN_R
Newx(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size, char);
-#endif /* HAS_GETLOGIN_R */
-#ifdef HAS_GETNETBYNAME_R
-#if !(GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
+# endif /* HAS_GETLOGIN_R */
+
+# ifdef HAS_GETNETBYNAME_R
+# if !(GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
Newx(PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, char);
-#endif
-#endif /* HAS_GETNETBYNAME_R */
-#ifdef HAS_GETPROTOBYNAME_R
-#if !(GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
+# endif
+# endif /* HAS_GETNETBYNAME_R */
+
+# ifdef HAS_GETPROTOBYNAME_R
+# if !(GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
Newx(PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, char);
-#endif
-#endif /* HAS_GETPROTOBYNAME_R */
-#ifdef HAS_GETPWNAM_R
+# endif
+# endif /* HAS_GETPROTOBYNAME_R */
+
+# ifdef HAS_GETPWNAM_R
# ifdef USE_PWENT_FPTR
PL_reentrant_buffer->_pwent_fptr = NULL;
# endif
Newx(PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, char);
-#endif /* HAS_GETPWNAM_R */
-#ifdef HAS_GETSERVBYNAME_R
-#if !(GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD)
+# endif /* HAS_GETPWNAM_R */
+
+# ifdef HAS_GETSERVBYNAME_R
+# if !(GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD)
Newx(PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, char);
-#endif
-#endif /* HAS_GETSERVBYNAME_R */
-#ifdef HAS_GETSPNAM_R
+# endif
+# endif /* HAS_GETSERVBYNAME_R */
+
+# ifdef HAS_GETSPNAM_R
# ifdef USE_SPENT_FPTR
PL_reentrant_buffer->_spent_fptr = NULL;
# endif
Newx(PL_reentrant_buffer->_spent_buffer, PL_reentrant_buffer->_spent_size, char);
-#endif /* HAS_GETSPNAM_R */
-#ifdef HAS_READDIR_R
+# endif /* HAS_GETSPNAM_R */
+
+# ifdef HAS_GMTIME_R
+# endif /* HAS_GMTIME_R */
+
+# ifdef HAS_LOCALTIME_R
+# endif /* HAS_LOCALTIME_R */
+
+# ifdef HAS_READDIR_R
PL_reentrant_buffer->_readdir_struct = (struct dirent*)safemalloc(PL_reentrant_buffer->_readdir_size);
-#endif /* HAS_READDIR_R */
-#ifdef HAS_READDIR64_R
+# endif /* HAS_READDIR_R */
+
+# ifdef HAS_READDIR64_R
PL_reentrant_buffer->_readdir64_struct = (struct dirent64*)safemalloc(PL_reentrant_buffer->_readdir64_size);
-#endif /* HAS_READDIR64_R */
-#ifdef HAS_SETLOCALE_R
+# endif /* HAS_READDIR64_R */
+
+# ifdef HAS_SETLOCALE_R
Newx(PL_reentrant_buffer->_setlocale_buffer, PL_reentrant_buffer->_setlocale_size, char);
-#endif /* HAS_SETLOCALE_R */
-#ifdef HAS_STRERROR_R
+# endif /* HAS_SETLOCALE_R */
+
+# ifdef HAS_STRERROR_R
Newx(PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size, char);
-#endif /* HAS_STRERROR_R */
-#ifdef HAS_TTYNAME_R
+# endif /* HAS_STRERROR_R */
+
+# ifdef HAS_TTYNAME_R
Newx(PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size, char);
-#endif /* HAS_TTYNAME_R */
+# endif /* HAS_TTYNAME_R */
+
#endif /* USE_REENTRANT_API */
+
}
void
Perl_reentrant_free(pTHX) {
PERL_UNUSED_CONTEXT;
+
+ /* Tear down */
+
#ifdef USE_REENTRANT_API
-#ifdef HAS_ASCTIME_R
+
+# ifdef HAS_ASCTIME_R
Safefree(PL_reentrant_buffer->_asctime_buffer);
-#endif /* HAS_ASCTIME_R */
-#ifdef HAS_CRYPT_R
-#if CRYPT_R_PROTO != REENTRANT_PROTO_B_CCD
+# endif /* HAS_ASCTIME_R */
+
+# ifdef HAS_CRYPT_R
+# if CRYPT_R_PROTO != REENTRANT_PROTO_B_CCD
Safefree(PL_reentrant_buffer->_crypt_struct_buffer);
-#endif
-#endif /* HAS_CRYPT_R */
-#ifdef HAS_CTIME_R
+# endif
+# endif /* HAS_CRYPT_R */
+
+# ifdef HAS_CTIME_R
Safefree(PL_reentrant_buffer->_ctime_buffer);
-#endif /* HAS_CTIME_R */
-#ifdef HAS_GETGRNAM_R
+# endif /* HAS_CTIME_R */
+
+# ifdef HAS_GETGRNAM_R
Safefree(PL_reentrant_buffer->_grent_buffer);
-#endif /* HAS_GETGRNAM_R */
-#ifdef HAS_GETHOSTBYNAME_R
-#if !(GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
+# endif /* HAS_GETGRNAM_R */
+
+# ifdef HAS_GETHOSTBYNAME_R
+# if !(GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
Safefree(PL_reentrant_buffer->_hostent_buffer);
-#endif
-#endif /* HAS_GETHOSTBYNAME_R */
-#ifdef HAS_GETLOGIN_R
+# endif
+# endif /* HAS_GETHOSTBYNAME_R */
+
+# ifdef HAS_GETLOGIN_R
Safefree(PL_reentrant_buffer->_getlogin_buffer);
-#endif /* HAS_GETLOGIN_R */
-#ifdef HAS_GETNETBYNAME_R
-#if !(GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
+# endif /* HAS_GETLOGIN_R */
+
+# ifdef HAS_GETNETBYNAME_R
+# if !(GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
Safefree(PL_reentrant_buffer->_netent_buffer);
-#endif
-#endif /* HAS_GETNETBYNAME_R */
-#ifdef HAS_GETPROTOBYNAME_R
-#if !(GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
+# endif
+# endif /* HAS_GETNETBYNAME_R */
+
+# ifdef HAS_GETPROTOBYNAME_R
+# if !(GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD)
Safefree(PL_reentrant_buffer->_protoent_buffer);
-#endif
-#endif /* HAS_GETPROTOBYNAME_R */
-#ifdef HAS_GETPWNAM_R
+# endif
+# endif /* HAS_GETPROTOBYNAME_R */
+
+# ifdef HAS_GETPWNAM_R
Safefree(PL_reentrant_buffer->_pwent_buffer);
-#endif /* HAS_GETPWNAM_R */
-#ifdef HAS_GETSERVBYNAME_R
-#if !(GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD)
+# endif /* HAS_GETPWNAM_R */
+
+# ifdef HAS_GETSERVBYNAME_R
+# if !(GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD)
Safefree(PL_reentrant_buffer->_servent_buffer);
-#endif
-#endif /* HAS_GETSERVBYNAME_R */
-#ifdef HAS_GETSPNAM_R
+# endif
+# endif /* HAS_GETSERVBYNAME_R */
+
+# ifdef HAS_GETSPNAM_R
Safefree(PL_reentrant_buffer->_spent_buffer);
-#endif /* HAS_GETSPNAM_R */
-#ifdef HAS_READDIR_R
+# endif /* HAS_GETSPNAM_R */
+
+# ifdef HAS_GMTIME_R
+# endif /* HAS_GMTIME_R */
+
+# ifdef HAS_LOCALTIME_R
+# endif /* HAS_LOCALTIME_R */
+
+# ifdef HAS_READDIR_R
Safefree(PL_reentrant_buffer->_readdir_struct);
-#endif /* HAS_READDIR_R */
-#ifdef HAS_READDIR64_R
+# endif /* HAS_READDIR_R */
+
+# ifdef HAS_READDIR64_R
Safefree(PL_reentrant_buffer->_readdir64_struct);
-#endif /* HAS_READDIR64_R */
-#ifdef HAS_SETLOCALE_R
+# endif /* HAS_READDIR64_R */
+
+# ifdef HAS_SETLOCALE_R
Safefree(PL_reentrant_buffer->_setlocale_buffer);
-#endif /* HAS_SETLOCALE_R */
-#ifdef HAS_STRERROR_R
+# endif /* HAS_SETLOCALE_R */
+
+# ifdef HAS_STRERROR_R
Safefree(PL_reentrant_buffer->_strerror_buffer);
-#endif /* HAS_STRERROR_R */
-#ifdef HAS_TTYNAME_R
+# endif /* HAS_STRERROR_R */
+
+# ifdef HAS_TTYNAME_R
Safefree(PL_reentrant_buffer->_ttyname_buffer);
-#endif /* HAS_TTYNAME_R */
+# endif /* HAS_TTYNAME_R */
+
Safefree(PL_reentrant_buffer);
+
#endif /* USE_REENTRANT_API */
}
void*
Perl_reentrant_retry(const char *f, ...)
{
+ /* This function is set up to be called if the normal function returns
+ * failure with errno ERANGE, which indicates the buffer is too small.
+ * This function calls the failing one again with a larger buffer.
+ *
+ * What has happened is that, due to the magic of C preprocessor macro
+ * expansion, when the original code called function 'foo(args)', it was
+ * instead compiled into something like a call of 'foo_r(args, buffer)'
+ * Below we retry with 'foo', but the preprocessor has changed that into
+ * 'foo_r', so this function will end up calling itself recursively, each
+ * time with a larger buffer. If PERL_REENTRANT_MAXSIZE is defined, it
+ * won't increase beyond that, instead failing. */
+
void *retptr = NULL;
va_list ap;
+
+ I32 key = 0;
+
#ifdef USE_REENTRANT_API
+
dTHX;
+
+ key = Perl_keyword (aTHX_ f, strlen(f), FALSE /* not feature enabled */);
+
/* Easier to special case this here than in embed.pl. (Look at what it
generates for proto.h) */
PERL_ARGS_ASSERT_REENTRANT_RETRY;
+
+#endif
+
+ if (key == 0) {
+
+#ifdef HAS_GETSPNAM_R
+
+ /* This is a #define as has no corresponding keyword */
+ if (strEQ(f, "getspnam")) {
+ key = KEY_getspnam;
+ }
+
#endif
+
+ }
+ else if (key < 0) {
+ key = -key;
+ }
+
va_start(ap, f);
- {
+
#ifdef USE_REENTRANT_API
-# if defined(USE_HOSTENT_BUFFER) || defined(USE_GRENT_BUFFER) || defined(USE_NETENT_BUFFER) || defined(USE_PWENT_BUFFER) || defined(USE_PROTOENT_BUFFER) || defined(USE_SERVENT_BUFFER)
- void *p0;
-# endif
-# if defined(USE_SERVENT_BUFFER)
- void *p1;
-# endif
-# if defined(USE_HOSTENT_BUFFER)
- size_t asize;
-# endif
-# if defined(USE_HOSTENT_BUFFER) || defined(USE_NETENT_BUFFER) || defined(USE_PROTOENT_BUFFER) || defined(USE_SERVENT_BUFFER)
- int anint;
-# endif
- switch (PL_op->op_type) {
-#ifdef USE_HOSTENT_BUFFER
- case OP_GHBYADDR:
- case OP_GHBYNAME:
- case OP_GHOSTENT:
+ switch (key) {
+
+# ifdef USE_HOSTENT_BUFFER
+
+ case KEY_gethostbyaddr:
+ case KEY_gethostbyname:
+ case KEY_endhostent:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ char * host_addr;
+ Size_t asize;
+ char * host_name;
+ int anint;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_hostent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- RenewDouble(PL_reentrant_buffer->_hostent_buffer,
- &PL_reentrant_buffer->_hostent_size, char);
- switch (PL_op->op_type) {
- case OP_GHBYADDR:
- p0 = va_arg(ap, void *);
- asize = va_arg(ap, size_t);
+# endif
+ RenewDouble(PL_reentrant_buffer->_hostent_buffer,
+ &PL_reentrant_buffer->_hostent_size, char);
+ switch (key) {
+ case KEY_gethostbyaddr:
+ host_addr = va_arg(ap, char *);
+ asize = va_arg(ap, Size_t);
anint = va_arg(ap, int);
- retptr = gethostbyaddr(p0, asize, anint); break;
- case OP_GHBYNAME:
- p0 = va_arg(ap, void *);
- retptr = gethostbyname((char *)p0); break;
- case OP_GHOSTENT:
+ /* socklen_t is what Posix 2001 says this should be */
+ retptr = gethostbyaddr(host_addr, (socklen_t) asize, anint); break;
+ case KEY_gethostbyname:
+ host_name = va_arg(ap, char *);
+ retptr = gethostbyname(host_name); break;
+ case KEY_endhostent:
retptr = gethostent(); break;
default:
SETERRNO(ERANGE, LIB_INVARG);
break;
- }
}
}
break;
-#endif
-#ifdef USE_GRENT_BUFFER
- case OP_GGRNAM:
- case OP_GGRGID:
- case OP_GGRENT:
+
+# endif
+# ifdef USE_GRENT_BUFFER
+
+ case KEY_getgrent:
+ case KEY_getgrgid:
+ case KEY_getgrnam:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ char * name;
+ Gid_t gid;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_grent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- Gid_t gid;
- RenewDouble(PL_reentrant_buffer->_grent_buffer,
- &PL_reentrant_buffer->_grent_size, char);
- switch (PL_op->op_type) {
- case OP_GGRNAM:
- p0 = va_arg(ap, void *);
- retptr = getgrnam((char *)p0); break;
- case OP_GGRGID:
-#if Gid_t_size < INTSIZE
- gid = (Gid_t)va_arg(ap, int);
-#else
+# endif
+ RenewDouble(PL_reentrant_buffer->_grent_buffer,
+ &PL_reentrant_buffer->_grent_size, char);
+ switch (key) {
+ case KEY_getgrnam:
+ name = va_arg(ap, char *);
+ retptr = getgrnam(name); break;
+ case KEY_getgrgid:
+# if Gid_t_size < INTSIZE
+ gid = (Gid_t)va_arg(ap, int);
+# else
gid = va_arg(ap, Gid_t);
-#endif
+# endif
retptr = getgrgid(gid); break;
- case OP_GGRENT:
+ case KEY_getgrent:
retptr = getgrent(); break;
default:
SETERRNO(ERANGE, LIB_INVARG);
break;
- }
}
}
break;
-#endif
-#ifdef USE_NETENT_BUFFER
- case OP_GNBYADDR:
- case OP_GNBYNAME:
- case OP_GNETENT:
+
+# endif
+# ifdef USE_NETENT_BUFFER
+
+ case KEY_getnetbyaddr:
+ case KEY_getnetbyname:
+ case KEY_getnetent:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ char * name;
+ Netdb_net_t net;
+ int anint;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_netent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- Netdb_net_t net;
- RenewDouble(PL_reentrant_buffer->_netent_buffer,
- &PL_reentrant_buffer->_netent_size, char);
- switch (PL_op->op_type) {
- case OP_GNBYADDR:
- net = va_arg(ap, Netdb_net_t);
- anint = va_arg(ap, int);
- retptr = getnetbyaddr(net, anint); break;
- case OP_GNBYNAME:
- p0 = va_arg(ap, void *);
- retptr = getnetbyname((char *)p0); break;
- case OP_GNETENT:
- retptr = getnetent(); break;
- default:
- SETERRNO(ERANGE, LIB_INVARG);
- break;
- }
+# endif
+ RenewDouble(PL_reentrant_buffer->_netent_buffer,
+ &PL_reentrant_buffer->_netent_size, char);
+ switch (key) {
+ case KEY_getnetbyaddr:
+ net = va_arg(ap, Netdb_net_t);
+ anint = va_arg(ap, int);
+ retptr = getnetbyaddr(net, anint); break;
+ case KEY_getnetbyname:
+ name = va_arg(ap, char *);
+ retptr = getnetbyname(name); break;
+ case KEY_getnetent:
+ retptr = getnetent(); break;
+ default:
+ SETERRNO(ERANGE, LIB_INVARG);
+ break;
}
}
break;
-#endif
-#ifdef USE_PWENT_BUFFER
- case OP_GPWNAM:
- case OP_GPWUID:
- case OP_GPWENT:
+
+# endif
+# ifdef USE_PWENT_BUFFER
+
+ case KEY_getpwnam:
+ case KEY_getpwuid:
+ case KEY_getpwent:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ Uid_t uid;
+ char * name;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_pwent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- Uid_t uid;
- RenewDouble(PL_reentrant_buffer->_pwent_buffer,
- &PL_reentrant_buffer->_pwent_size, char);
- switch (PL_op->op_type) {
- case OP_GPWNAM:
- p0 = va_arg(ap, void *);
- retptr = getpwnam((char *)p0); break;
- case OP_GPWUID:
-#if Uid_t_size < INTSIZE
+
+# endif
+ RenewDouble(PL_reentrant_buffer->_pwent_buffer,
+ &PL_reentrant_buffer->_pwent_size, char);
+ switch (key) {
+ case KEY_getpwnam:
+ name = va_arg(ap, char *);
+ retptr = getpwnam(name); break;
+ case KEY_getpwuid:
+
+# if Uid_t_size < INTSIZE
uid = (Uid_t)va_arg(ap, int);
-#else
+# else
uid = va_arg(ap, Uid_t);
-#endif
+# endif
retptr = getpwuid(uid); break;
-#if defined(HAS_GETPWENT) || defined(HAS_GETPWENT_R)
- case OP_GPWENT:
+
+# if defined(HAS_GETPWENT) || defined(HAS_GETPWENT_R)
+
+ case KEY_getpwent:
retptr = getpwent(); break;
-#endif
+# endif
default:
SETERRNO(ERANGE, LIB_INVARG);
break;
- }
- }
+ }
}
break;
-#endif
-#ifdef USE_PROTOENT_BUFFER
- case OP_GPBYNAME:
- case OP_GPBYNUMBER:
- case OP_GPROTOENT:
+
+# endif
+# ifdef USE_SPENT_BUFFER
+
+ case KEY_getspnam:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ char * name;
+
+# ifdef PERL_REENTRANT_MAXSIZE
+ if (PL_reentrant_buffer->_spent_size <=
+ PERL_REENTRANT_MAXSIZE / 2)
+
+# endif
+ RenewDouble(PL_reentrant_buffer->_spent_buffer,
+ &PL_reentrant_buffer->_spent_size, char);
+ switch (key) {
+ case KEY_getspnam:
+ name = va_arg(ap, char *);
+ retptr = getspnam(name); break;
+ default:
+ SETERRNO(ERANGE, LIB_INVARG);
+ break;
+ }
+ }
+ break;
+
+# endif
+# ifdef USE_PROTOENT_BUFFER
+
+ case KEY_getprotobyname:
+ case KEY_getprotobynumber:
+ case KEY_getprotoent:
+ {
+ char * name;
+ int anint;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_protoent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- RenewDouble(PL_reentrant_buffer->_protoent_buffer,
- &PL_reentrant_buffer->_protoent_size, char);
- switch (PL_op->op_type) {
- case OP_GPBYNAME:
- p0 = va_arg(ap, void *);
- retptr = getprotobyname((char *)p0); break;
- case OP_GPBYNUMBER:
+# endif
+ RenewDouble(PL_reentrant_buffer->_protoent_buffer,
+ &PL_reentrant_buffer->_protoent_size, char);
+ switch (key) {
+ case KEY_getprotobyname:
+ name = va_arg(ap, char *);
+ retptr = getprotobyname(name); break;
+ case KEY_getprotobynumber:
anint = va_arg(ap, int);
retptr = getprotobynumber(anint); break;
- case OP_GPROTOENT:
+ case KEY_getprotoent:
retptr = getprotoent(); break;
default:
SETERRNO(ERANGE, LIB_INVARG);
break;
- }
}
}
break;
-#endif
-#ifdef USE_SERVENT_BUFFER
- case OP_GSBYNAME:
- case OP_GSBYPORT:
- case OP_GSERVENT:
+
+# endif
+# ifdef USE_SERVENT_BUFFER
+
+ case KEY_getservbyname:
+ case KEY_getservbyport:
+ case KEY_getservent:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ char * name;
+ char * proto;
+ int anint;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_servent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- RenewDouble(PL_reentrant_buffer->_servent_buffer,
- &PL_reentrant_buffer->_servent_size, char);
- switch (PL_op->op_type) {
- case OP_GSBYNAME:
- p0 = va_arg(ap, void *);
- p1 = va_arg(ap, void *);
- retptr = getservbyname((char *)p0, (char *)p1); break;
- case OP_GSBYPORT:
+# endif
+ RenewDouble(PL_reentrant_buffer->_servent_buffer,
+ &PL_reentrant_buffer->_servent_size, char);
+ switch (key) {
+ case KEY_getservbyname:
+ name = va_arg(ap, char *);
+ proto = va_arg(ap, char *);
+ retptr = getservbyname(name, proto); break;
+ case KEY_getservbyport:
anint = va_arg(ap, int);
- p0 = va_arg(ap, void *);
- retptr = getservbyport(anint, (char *)p0); break;
- case OP_GSERVENT:
+ name = va_arg(ap, char *);
+ retptr = getservbyport(anint, name); break;
+ case KEY_getservent:
retptr = getservent(); break;
default:
SETERRNO(ERANGE, LIB_INVARG);
break;
- }
}
}
break;
-#endif
+
+# endif
+
default:
/* Not known how to retry, so just fail. */
break;
}
+
#else
+
PERL_UNUSED_ARG(f);
+
#endif
- }
+
va_end(ap);
return retptr;
}
diff --git a/gnu/usr.bin/perl/regcharclass.h b/gnu/usr.bin/perl/regcharclass.h
index 1d9748037f2..0bc48500f0d 100644
--- a/gnu/usr.bin/perl/regcharclass.h
+++ b/gnu/usr.bin/perl/regcharclass.h
@@ -240,7 +240,7 @@
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds(1)
+ &regcharclass_multi_char_folds::multi_char_folds('u', 'a')
*/
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) \
@@ -459,7 +459,7 @@
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds(0)
+ &regcharclass_multi_char_folds::multi_char_folds('l', 'a')
*/
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_latin1_safe(s,e) \
@@ -476,6 +476,122 @@
: 0 )
/*
+ THREE_CHAR_FOLD: A three-character multi-char fold
+
+ &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 )\
+ : ( 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 )\
+ : ( ( 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 )\
+ : ( ( 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 )
+
+/*
+ THREE_CHAR_FOLD: A three-character multi-char fold
+
+ &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 )
+
+/*
+ THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
+
+ &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 ) \
+ : ( 0xCA == ((const U8*)s)[0] ) ? \
+ ( ( 0xBC == ((const U8*)s)[1] ) ? 2 : 0 ) \
+ : ( 0xCE == ((const U8*)s)[0] ) ? \
+ ( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) ? 2 \
+ : ( 0xB1 == ((const U8*)s)[1] || 0xB7 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : ( 0xB9 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x88 == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : 0 ) \
+ : ( 0xCF == ((const U8*)s)[0] ) ? \
+ ( ( 0x81 == ((const U8*)s)[1] || 0x8E == ((const U8*)s)[1] ) ? 2 \
+ : ( 0x85 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCC == ((const U8*)s)[2] ) && ( 0x88 == ((const U8*)s)[3] || 0x93 == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : ( 0x89 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xCD == ((const U8*)s)[2] ) && ( 0x82 == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : 0 ) \
+ : ( 0xD5 == ((const U8*)s)[0] ) ? \
+ ( ( 0xA5 == ((const U8*)s)[1] || 0xB4 == ((const U8*)s)[1] || 0xBE == ((const U8*)s)[1] ) ? 2 : 0 )\
+ : ( 0xE1 == ((const U8*)s)[0] ) ? \
+ ( ( 0xBC == ((const U8*)s)[1] ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xD8 ) == 0x80 ) ? 3 : 0 ) \
+ : ( ( 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 ) \
+ : ( 0xCA == ((const U8*)s)[0] ) ? \
+ ( ( 0xBC == ((const U8*)s)[1] ) ? 2 : 0 ) \
+ : ( 0xCE == ((const U8*)s)[0] ) ? \
+ ( ( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) || ( ( ((const U8*)s)[1] & 0xF7 ) == 0xB1 ) || ((const U8*)s)[1] == 0xB7 ) ? 2 : 0 )\
+ : ( 0xCF == ((const U8*)s)[0] ) ? \
+ ( ( ( ( ((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 )\
+ : ( 0xE1 == ((const U8*)s)[0] ) ? \
+ ( ( 0xBC == ((const U8*)s)[1] ) ? \
+ ( ( ( ((const U8*)s)[2] & 0xD8 ) == 0x80 ) ? 3 : 0 ) \
+ : ( ( 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 ) \
+ : ( 0xCA == ((const U8*)s)[0] ) ? \
+ ( ( 0xBC == ((const U8*)s)[1] ) ? 2 : 0 ) \
+ : ( 0xCE == ((const U8*)s)[0] ) ? \
+ ( ( ( ( ((const U8*)s)[1] & 0xFD ) == 0xAC ) || ( ( ((const U8*)s)[1] & 0xF7 ) == 0xB1 ) || ((const U8*)s)[1] == 0xB7 ) ? 2 : 0 )\
+ : ( 0xCF == ((const U8*)s)[0] ) ? \
+ ( ( ( ( ((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] )\
+: 0 )
+
+/*
+ THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
+
+ &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 ) \
+ : 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 ) )\
+: 0 )
+
+/*
FOLDS_TO_MULTI: characters that fold to multi-char strings
\p{_Perl_Folds_To_Multi_Char}
@@ -858,7 +974,7 @@
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds(1)
+ &regcharclass_multi_char_folds::multi_char_folds('u', 'a')
*/
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) \
@@ -1075,7 +1191,7 @@
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds(0)
+ &regcharclass_multi_char_folds::multi_char_folds('l', 'a')
*/
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_latin1_safe(s,e) \
@@ -1092,6 +1208,120 @@
: 0 )
/*
+ THREE_CHAR_FOLD: A three-character multi-char fold
+
+ &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 )\
+ : ( 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 )\
+ : ( ( 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 )\
+ : ( ( 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 )
+
+/*
+ THREE_CHAR_FOLD: A three-character multi-char fold
+
+ &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 )
+
+/*
+ THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
+
+ &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 ) \
+ : ( 0xAB == ((const U8*)s)[0] ) ? \
+ ( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 ) \
+ : ( 0xB4 == ((const U8*)s)[0] ) ? \
+ ( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ? 2 \
+ : ( 0x58 == ((const U8*)s)[1] || 0x66 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : ( 0x68 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x49 == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : 0 ) \
+ : ( 0xB5 == ((const U8*)s)[0] ) ? \
+ ( ( 0x42 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ? 2 \
+ : ( 0x46 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x49 == ((const U8*)s)[3] || 0x62 == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : ( 0x4A == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xB1 == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : 0 ) \
+ : ( 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 )\
+ : 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 ) \
+ : ( 0xAB == ((const U8*)s)[0] ) ? \
+ ( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 ) \
+ : ( 0xB4 == ((const U8*)s)[0] ) ? \
+ ( ( 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 )\
+ : ( 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 )\
+ : 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 ) \
+ : ( 0xAB == ((const U8*)s)[0] ) ? \
+ ( ( 0x70 == ((const U8*)s)[1] ) ? 2 : 0 ) \
+ : ( 0xB4 == ((const U8*)s)[0] ) ? \
+ ( ( 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 )\
+: 0 )
+
+/*
+ THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
+
+ &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 ) \
+ : 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 ) )\
+: 0 )
+
+/*
FOLDS_TO_MULTI: characters that fold to multi-char strings
\p{_Perl_Folds_To_Multi_Char}
@@ -1475,7 +1705,7 @@
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds(1)
+ &regcharclass_multi_char_folds::multi_char_folds('u', 'a')
*/
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_utf8_safe_part0(s,e) \
@@ -1692,7 +1922,7 @@
/*
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
- &regcharclass_multi_char_folds::multi_char_folds(0)
+ &regcharclass_multi_char_folds::multi_char_folds('l', 'a')
*/
/*** GENERATED CODE ***/
#define is_MULTI_CHAR_FOLD_latin1_safe(s,e) \
@@ -1709,6 +1939,120 @@
: 0 )
/*
+ THREE_CHAR_FOLD: A three-character multi-char fold
+
+ &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 )\
+ : ( 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 )\
+ : ( ( 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 )\
+ : ( ( 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 )
+
+/*
+ THREE_CHAR_FOLD: A three-character multi-char fold
+
+ &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 )
+
+/*
+ THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
+
+ &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 ) \
+ : ( 0xAA == ((const U8*)s)[0] ) ? \
+ ( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 ) \
+ : ( 0xB3 == ((const U8*)s)[0] ) ? \
+ ( ( 0x53 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ? 2 \
+ : ( 0x58 == ((const U8*)s)[1] || 0x65 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : ( 0x67 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x49 == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : 0 ) \
+ : ( 0xB4 == ((const U8*)s)[0] ) ? \
+ ( ( 0x42 == ((const U8*)s)[1] || 0x55 == ((const U8*)s)[1] ) ? 2 \
+ : ( 0x46 == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAD == ((const U8*)s)[2] ) && ( 0x49 == ((const U8*)s)[3] || 0x5F == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : ( 0x4A == ((const U8*)s)[1] ) ? \
+ ( ( ( 0xAF == ((const U8*)s)[2] ) && ( 0x43 == ((const U8*)s)[3] ) ) ? 4 : 2 )\
+ : 0 ) \
+ : ( 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 )\
+ : 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 ) \
+ : ( 0xAA == ((const U8*)s)[0] ) ? \
+ ( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 ) \
+ : ( 0xB3 == ((const U8*)s)[0] ) ? \
+ ( ( ((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 )\
+ : ( 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 )\
+ : 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 ) \
+ : ( 0xAA == ((const U8*)s)[0] ) ? \
+ ( ( 0x6A == ((const U8*)s)[1] ) ? 2 : 0 ) \
+ : ( 0xB3 == ((const U8*)s)[0] ) ? \
+ ( ( ((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 )\
+: 0 )
+
+/*
+ THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
+
+ &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 ) \
+ : 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 ) )\
+: 0 )
+
+/*
FOLDS_TO_MULTI: characters that fold to multi-char strings
\p{_Perl_Folds_To_Multi_Char}
@@ -1855,55 +2199,57 @@
#endif /* PERL_REGCHARCLASS_H_ */
/* Generated from:
- * d34c77b7e7a94986cc82056919f4ffc1503b73091561e16bd8ef145ac0fd04c5 lib/Unicode/UCD.pm
- * 5e91b649379ec79af7cfb6b09410a24557cba4c6d733cd0a2b8a78a1448736d2 lib/unicore/ArabicShaping.txt
- * f5feb19cd084b2b1568fbc0f94f4b4b54941406e7fb36c7570f8352fd5022dbe lib/unicore/BidiBrackets.txt
- * e6cbd8ffe94f2e0fbfa6695d6c06c1e72eef7d3aa93cb6329d111285198b5e62 lib/unicore/BidiMirroring.txt
- * a28b205afe8625fffdb6544a5fe14cf02b91493d9900f07820fa2102a17548f7 lib/unicore/Blocks.txt
- * 9c772627c6ee77eea6a17b42927b8ee28ca05dc65d6a511062104baaf3d12294 lib/unicore/CaseFolding.txt
- * abc8394c5bde62453118b00c1c5842160a04d7fffb2e829ee5426b846596d081 lib/unicore/CompositionExclusions.txt
- * 2fc081011d8fabaf7cf4937732dd5a6d6a57e492c43f3adfeded513387ee0ec3 lib/unicore/DAge.txt
- * a6eb7a8671fb532fbd88c37fd7b20b5b2e7dbfc8b121f74c14abe2947db0da68 lib/unicore/DCoreProperties.txt
- * 92dcdda84142194a1596f22180fcdf8c0e7f86897f09cc9203c7dc636c549f5f lib/unicore/DNormalizationProps.txt
- * 904500178b2e752635bef27aaed3a2a3718a100bce35ff96b3890be7a8315d8f lib/unicore/EastAsianWidth.txt
- * 1989b03d93023d8f5cc33eebf0d2ea80c8bd8f8c97843059ea039acb582c2078 lib/unicore/EmojiData.txt
- * d7930c2a7318e66b4ba756d5e5b41fbc586c2ad43d450ae9d320a758510bae2e lib/unicore/EquivalentUnifiedIdeograph.txt
- * 8606af08712a8c18fe268d418e2e5a87eddee6e190cce4c2d5a76b4fadf035e8 lib/unicore/HangulSyllableType.txt
- * 49a1bf18b048454154881f6a8a605b5e2fc73e85fcc4df1cb26d52e8c2aeb9bf lib/unicore/IndicPositionalCategory.txt
- * 1b6f3ef6e00e5b2e2a93d2d3c954ca1cce368599c5f11874cd0f0ce222d4637b lib/unicore/IndicSyllabicCategory.txt
- * 285c5c1ae458bc3ccd6a1398a94d2d67ce6bc1d7fc0f098762836050345e9434 lib/unicore/Jamo.txt
- * 961f842fc70b5afd1d82c6645e68c10d1f701382aed38ae38cb2ff27f671903c lib/unicore/LineBreak.txt
- * ff61a0687d2f32c0dd1094254b8bde967883b43c2d4d50fd17531d498e41ab2c lib/unicore/NameAliases.txt
- * d3eb9a288ebeaf9de1237989f490705e287b6f610b59d2459fb1b7c2d8e39c39 lib/unicore/NamedSequences.txt
- * d30d3ee430cf3527449d024954f053e419fa4aa2246eb59e5cd8d621af0c4b3f lib/unicore/PropList.txt
- * efce54f7c715a332c19b3d14c6a0eea30c6cde91caf6ff0d21c755be933736f4 lib/unicore/PropValueAliases.txt
- * d3cc3f9f0b6a8f0b7ef1d6ef202675426c28f4a75de01fc69ed977a93a00982b lib/unicore/PropertyAliases.txt
- * 3746848c181b5dbc1e614dfac9b8a5e3568e6525c693ac14e692ac55dec57e91 lib/unicore/ScriptExtensions.txt
- * e6313a8edfd24f36c7a006fbcf1d1b7245b5dd009c6dde80441f0da08b822c43 lib/unicore/Scripts.txt
- * 817ce2e9edca8e075a153f54b8f3b020345e37652cd2bda9b1495c366af17e7e lib/unicore/SpecialCasing.txt
- * 93ab1acd8fd9d450463b50ae77eab151a7cda48f98b25b56baed8070f80fc936 lib/unicore/UnicodeData.txt
- * ec5ba64af58297a46de17848eb984d2b231adb304de92e9d0d3befdbf9dc2551 lib/unicore/VerticalOrientation.txt
- * 95bd55cf803b93eb0b4990cf0e1d70ede263b36412d9c6921fd6f15cef058961 lib/unicore/auxiliary/GCBTest.txt
- * 39d73448fd257e6082f83ddf4c8bf6feb191e85dc8fc56b1a8512482de5e3dea lib/unicore/auxiliary/GraphemeBreakProperty.txt
- * f385e70f79f5959ae66d64b00f4bda39db6cef78e5363a0cdd88db46eafc6c8f lib/unicore/auxiliary/LBTest.txt
- * 7d6c909af97d0ab545a132d412f6e4e65c7eb5158514a7feb9bf00bcd05875f9 lib/unicore/auxiliary/SBTest.txt
- * c47d674ef4170c46185bf56f7a4c6627f65f012295e0994f7dc4aea51f8fd8cf lib/unicore/auxiliary/SentenceBreakProperty.txt
- * 3e3320bbbe775de7f1a0b9a30021eb949116a9b05cb461c90596c5ecf1743831 lib/unicore/auxiliary/WBTest.txt
- * f221f89fe3bb3becc00de726d5694c4b7f464c316baff6d339b2ff3900bcb96c lib/unicore/auxiliary/WordBreakProperty.txt
- * db2c41c618bab54b00e58223ad11cec550f9b9fd1a471de236e660da92fe4870 lib/unicore/extracted/DBidiClass.txt
- * fecd8a1c49935d794c4c1012f4158aa536a13049a4c10d01aaf7b5f90f3b2cbc lib/unicore/extracted/DBinaryProperties.txt
- * db6f38fb4aa8b9181b5e6a9f320de9d5c2c9b5687116a619b3cb90138b025e0b lib/unicore/extracted/DCombiningClass.txt
- * 2524f69c175831fd84bfbaf13ea37992f41db167d728c51b1d0002c1d0b130b0 lib/unicore/extracted/DDecompositionType.txt
- * 16852301d54ae59b5cfe0daa6b8e17fb688ed055d59b2a5a11eaafc650cc9d30 lib/unicore/extracted/DEastAsianWidth.txt
- * 78f898b988049a5bea5039cea6ffe87a92596859ac660a6c438519b512fe2ee6 lib/unicore/extracted/DGeneralCategory.txt
- * 33441692403901287c834f96bd33b671133a6f74e2732c61a497608b9e434932 lib/unicore/extracted/DJoinGroup.txt
- * a792ac5ef602e3bace679cc96d7491701dcdb73d81c782253de88fdcc5e70e50 lib/unicore/extracted/DJoinType.txt
- * 78e2600e24fa7d5ab62117de50b382f8b31b08401c37a0782c38dacb340b64e7 lib/unicore/extracted/DLineBreak.txt
- * 1bde4ad73e271c6349fbd1972e54f38bba5cc1900c28f678e79b9e8909b31793 lib/unicore/extracted/DNumType.txt
- * 6278722699123f3890e4b1cc42011e96d8960e4958a3b93484361530983d2611 lib/unicore/extracted/DNumValues.txt
- * b3d90fc23817ea4e33e9a90107c0a6c7b23314efd5712905ed172624d5524693 lib/unicore/mktables
- * a712c758275b460d18fa77a26ed3589689bb3f69dcc1ea99b913e32db92a5cd2 lib/unicore/version
+ * d60b1a3dffe16c4aaaf3f00d21993bb320d05e9828b106182214764d4c69935c lib/Unicode/UCD.pm
+ * ce96627d4fc91b4fd886c409caeb9b76cf7bd345e12f05c6701add7f233f6437 lib/unicore/ArabicShaping.txt
+ * 0e69eef3da722cc104522d8372e86d5b86bb7afcc761b0c991e39e832294946d lib/unicore/BidiBrackets.txt
+ * a00d9d21585106a52113fb7b1d3d0373a5835be72e76862fb559ebddd474d70e lib/unicore/BidiMirroring.txt
+ * 81a82b6a9fcf1a9c12f588d7a1decd73a9afdc4cac95b0eb7e576e7942d6c19f lib/unicore/Blocks.txt
+ * 99d231d7c91688bbe8ca8ccebcc2f46b5b222f844babe4827295bae11e2abe5f lib/unicore/CaseFolding.txt
+ * 38badafd818d8405324fe298c0676be0c95186368c84b5368375fd871a645144 lib/unicore/CompositionExclusions.txt
+ * e779a443d3aa2a3166a15becaa2b737c922480e32c0453d5956093633555078f lib/unicore/DAge.txt
+ * a5d45f59b39deaab3c72ce8c1a2e212a5e086dff11b1f9d5bb0e352642e82248 lib/unicore/DCoreProperties.txt
+ * 3ac44e11c84bdaf6b207d2c2c20eed857ae17052393fc7f71b0fe951186ba906 lib/unicore/DNormalizationProps.txt
+ * 4f822ec7a9ebbb3138ad29bade8b9688d25b39c7a3c0b7431f01e7229e4fcb6e lib/unicore/EastAsianWidth.txt
+ * fc535aa1047a70105ab9a22c2b4c3f363a2ff02fe48ebbc5eeb9873b2752ff0b lib/unicore/EquivalentUnifiedIdeograph.txt
+ * b9c5158ce944d2fec57e0e4ecb716bdabfc3bdde73525f1772fe03f61a30d473 lib/unicore/HangulSyllableType.txt
+ * 36c1b2a626ff1fb23b8b21e6ea8712698f8ce668dded1cb48b8ddf6a6a1b04e9 lib/unicore/IdStatus.txt
+ * 4857c4ffa3898e6128b2d46b0a02e499a663fb91464a69ef3611096f01293acc lib/unicore/IdType.txt
+ * 69197b019fa5f2fb0d8c6ed1ed8acb9f2e8b5b8f45a947953ffa652f3bf54983 lib/unicore/IndicPositionalCategory.txt
+ * 6604e2f0fde7428675364aa0006bc686b79488dcc60ae8cb29800af2be3352e8 lib/unicore/IndicSyllabicCategory.txt
+ * 84ead63924aaa74b988b2eaf254a8733276ed108633ce2ef77a9ee1de7818162 lib/unicore/Jamo.txt
+ * d5abcd8f54c8a2aa912924c485ccf7f968ad98feaa303d8e9a29ad89172f1faf lib/unicore/LineBreak.txt
+ * 985128e8c8b2540233331d9b27d897d2c23bd5bcf1d05da960befce6efc59542 lib/unicore/NameAliases.txt
+ * 27282b8aa01d4d0c44aef436cb74195ae8639ffa187aeee4e6247af76febea76 lib/unicore/NamedSequences.txt
+ * 485b5a3ed25dbf1f94dfa5a9b69d8b4550ffd0c33045ccc55ccfd7c80b2a40cf lib/unicore/PropList.txt
+ * 6b3902e9268cd843fe65cbdea992108c9528343ec0679f800b96f356bb553e5a lib/unicore/PropValueAliases.txt
+ * 2bd5777847e3d6add3c7e5c0d1393ddcab89e5a0ac3ff498cb0c53041f0b86e4 lib/unicore/PropertyAliases.txt
+ * 03a61dc89422e44cc2b73e8e893321007880ab69e2a4d281c0f1bc29c602b9d0 lib/unicore/ScriptExtensions.txt
+ * 9a5ed1ec9b5f0d7147e9371ad792ab39203611af7637cff2aa4a5c663b172cde lib/unicore/Scripts.txt
+ * 6424312f1dc39b22e0ff9c0ffb13dfad424d9b03e6a6dc6bca941f6bf5ef1ffd lib/unicore/SpecialCasing.txt
+ * bdbffbbfc8ad4d3a6d01b5891510458f3d36f7170422af4ea2bed3211a73e8bb lib/unicore/UnicodeData.txt
+ * 160f41816234addb511901d5f21febd69574578dd93de6ef8153e35693325575 lib/unicore/VerticalOrientation.txt
+ * 32dfb37d21db530529a6ec3dc13d96f21f8e7c7faf7ff3db8a9760cd76cec81d lib/unicore/auxiliary/GCBTest.txt
+ * 2bd3c5e2d62701ff81fb3ec318e179a4618cabb1493b1e0dd2b4e7e56c5437c4 lib/unicore/auxiliary/GraphemeBreakProperty.txt
+ * c51fbebfa82a0f36473b44bfd71d5ef6cb6a1f81fb313375dc9a1910d79bb2b6 lib/unicore/auxiliary/LBTest.txt
+ * 80b0107750818d8f370bd120b6fe56b6855b60581f72affe8b60409a469b4b65 lib/unicore/auxiliary/SBTest.txt
+ * 09e3166ebab166ac630a227f77f4e794ebd433271abd5588f5a67e7f199c71ee lib/unicore/auxiliary/SentenceBreakProperty.txt
+ * bf5373ce28a5df06796c93dc159dd15a997bb2950c92704b40ae8190cfc3716d lib/unicore/auxiliary/WBTest.txt
+ * a2b7373cf2fe3fa3b26dbb53405ca849985f771ff47f1c61743978003ff80499 lib/unicore/auxiliary/WordBreakProperty.txt
+ * d2686f400a638c80775d7c662556fb8fa8dd3bbe4aa548d9d31624264c6e1bb1 lib/unicore/emoji/emoji.txt
+ * b827ae5da8c2b08947cc9a120a7b7fd2f1676fb160b508df78075381635b127c lib/unicore/extracted/DBidiClass.txt
+ * 6fdc5b5ef40444a8f0c772e6b67c00498d4216fe0c0fdf76744ce338f2ad3810 lib/unicore/extracted/DBinaryProperties.txt
+ * e14928a5bf6ad5958a80332bd42e96e14420080a95c660e5da29384e496755d0 lib/unicore/extracted/DCombiningClass.txt
+ * 579a03281fbe87b78d5d9a8523de4d255edd7e4ca6eab0e4c7729de97e9b89b1 lib/unicore/extracted/DDecompositionType.txt
+ * ad83c59b257e9d480ffd3001d4ac240c5fed7cb1919453e1c4e8877035256bcd lib/unicore/extracted/DEastAsianWidth.txt
+ * 4502f0969e4e6558c4b4c6ca4c23dad70b863d61dd3d5eed1a62a6c3c99fd570 lib/unicore/extracted/DGeneralCategory.txt
+ * 00bb88b89e2adb646f3177f9444e2d3192386b81a5de9556104b338274b253e1 lib/unicore/extracted/DJoinGroup.txt
+ * ac835b6e11a60c9820d3cf2d1cb0558dd68efb8f53f404a51632e4726690a6d7 lib/unicore/extracted/DJoinType.txt
+ * baba9dfc133e3cb770a89aaf0973b1341fa61c2da6c176baf6428898b3b568d8 lib/unicore/extracted/DLineBreak.txt
+ * 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt
+ * 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt
+ * ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables
+ * 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version
* 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl
- * 830144f6afdd047b009754ffa06134397268f6638837fe85283483eb0cfdd558 regen/regcharclass.pl
- * c6b0b0b7e4ac4f5a57d203e84194749987477ea55b2366e3b343aadf8cc7d6b5 regen/regcharclass_multi_char_folds.pl
+ * f9a393e7add8c7c2728356473ce5b52246d51295b2da0c48fb6f0aa21799e2bb regen/regcharclass.pl
+ * b549b9989c6987563dad8f8ad6b984c8026cdc283d60ea34457959c5d4b4ade0 regen/regcharclass_multi_char_folds.pl
* ex: set ro: */
diff --git a/gnu/usr.bin/perl/regcomp.c b/gnu/usr.bin/perl/regcomp.c
index b07191dbade..0da659cf809 100644
--- a/gnu/usr.bin/perl/regcomp.c
+++ b/gnu/usr.bin/perl/regcomp.c
@@ -70,6 +70,63 @@
* precedence is structured in regular expressions. Serious changes in
* regular-expression syntax might require a total rethink.
*/
+
+/* Note on debug output:
+ *
+ * This is set up so that -Dr turns on debugging like all other flags that are
+ * enabled by -DDEBUGGING. -Drv gives more verbose output. This applies to
+ * all regular expressions encountered in a program, and gives a huge amount of
+ * output for all but the shortest programs.
+ *
+ * The ability to output pattern debugging information lexically, and with much
+ * finer grained control was added, with 'use re qw(Debug ....);' available even
+ * in non-DEBUGGING builds. This is accomplished by copying the contents of
+ * regcomp.c to ext/re/re_comp.c, and regexec.c is copied to ext/re/re_exec.c.
+ * Those files are compiled and linked into the perl executable, and they are
+ * compiled essentially as if DEBUGGING were enabled, and controlled by calls
+ * to re.pm.
+ *
+ * That would normally mean linking errors when two functions of the same name
+ * are attempted to be placed into the same executable. That is solved in one
+ * of four ways:
+ * 1) Static functions aren't known outside the file they are in, so for the
+ * many functions of that type in this file, it just isn't a problem.
+ * 2) Most externally known functions are enclosed in
+ * #ifndef PERL_IN_XSUB_RE
+ * ...
+ * #endif
+ * blocks, so there is only one defintion for them in the whole
+ * executable, the one in regcomp.c (or regexec.c). The implication of
+ * that is any debugging info that comes from them is controlled only by
+ * -Dr. Further, any static function they call will also be the version
+ * in regcomp.c (or regexec.c), so its debugging will also be by -Dr.
+ * 3) About a dozen external functions are re-#defined in ext/re/re_top.h, to
+ * have different names, so that what gets loaded in the executable is
+ * 'Perl_foo' from regcomp.c (and regexec.c), and the identical function
+ * from re_comp.c (and re_exec.c), but with the name 'my_foo' Debugging
+ * in the 'Perl_foo' versions is controlled by -Dr, but the 'my_foo'
+ * versions and their callees are under control of re.pm. The catch is
+ * that references to all these go through the regexp_engine structure,
+ * which is initialized in regcomp.h to the Perl_foo versions, and
+ * substituted out in lexical scopes where 'use re' is in effect to the
+ * 'my_foo' ones. That structure is public API, so it would be a hard
+ * sell to add any additional members.
+ * 4) For functions in regcomp.c and re_comp.c that are called only from,
+ * respectively, regexec.c and re_exec.c, they can have two different
+ * names, depending on #ifdef'ing PERL_IN_XSUB_RE, in both regexec.c and
+ * embed.fnc.
+ *
+ * The bottom line is that if you add code to one of the public functions
+ * listed in ext/re/re_top.h, debugging automagically works. But if you write
+ * a new function that needs to do debugging or there is a chain of calls from
+ * it that need to do debugging, all functions in the chain should use options
+ * 2) or 4) above.
+ *
+ * A function may have to be split so that debugging stuff is static, but it
+ * calls out to some other function that only gets compiled in regcomp.c to
+ * access data that we don't want to duplicate.
+ */
+
#include "EXTERN.h"
#define PERL_IN_REGCOMP_C
#include "perl.h"
@@ -78,11 +135,11 @@
#ifdef PERL_IN_XSUB_RE
# include "re_comp.h"
EXTERN_C const struct regexp_engine my_reg_engine;
+EXTERN_C const struct regexp_engine wild_reg_engine;
#else
# include "regcomp.h"
#endif
-#include "dquote_inline.h"
#include "invlist_inline.h"
#include "unicode_constants.h"
@@ -115,7 +172,7 @@ typedef struct scan_frame {
/* Certain characters are output as a sequence with the first being a
* backslash. */
-#define isBACKSLASHED_PUNCT(c) strchr("-[]\\^", c)
+#define isBACKSLASHED_PUNCT(c) memCHRs("-[]\\^", c)
struct RExC_state_t {
@@ -141,9 +198,16 @@ struct RExC_state_t {
regnode_offset emit; /* Code-emit pointer */
I32 naughty; /* How bad is this pattern? */
I32 sawback; /* Did we see \1, ...? */
- U32 seen;
SSize_t size; /* Number of regnode equivalents in
pattern */
+ Size_t sets_depth; /* Counts recursion depth of already-
+ compiled regex set patterns */
+ U32 seen;
+
+ I32 parens_buf_size; /* #slots malloced open/close_parens */
+ regnode_offset *open_parens; /* offsets to open parens */
+ regnode_offset *close_parens; /* offsets to close parens */
+ HV *paren_names; /* Paren names */
/* position beyond 'precomp' of the warning message furthest away from
* 'precomp'. During the parse, no warnings are raised for any problems
@@ -164,9 +228,6 @@ struct RExC_state_t {
I32 nestroot; /* root parens we are in - used by
accept */
I32 seen_zerolen;
- regnode_offset *open_parens; /* offsets to open parens */
- regnode_offset *close_parens; /* offsets to close parens */
- I32 parens_buf_size; /* #slots malloced open/close_parens */
regnode *end_op; /* END node in program */
I32 utf8; /* whether the pattern is utf8 or not */
I32 orig_utf8; /* whether the pattern was originally in utf8 */
@@ -175,39 +236,32 @@ struct RExC_state_t {
I32 uni_semantics; /* If a d charset modifier should use unicode
rules, even if the pattern is not in
utf8 */
- HV *paren_names; /* Paren names */
- regnode **recurse; /* Recurse regops */
I32 recurse_count; /* Number of recurse regops we have generated */
+ regnode **recurse; /* Recurse regops */
U8 *study_chunk_recursed; /* bitmap of which subs we have moved
through */
U32 study_chunk_recursed_bytes; /* bytes in bitmap */
- I32 in_lookbehind;
+ I32 in_lookaround;
I32 contains_locale;
I32 override_recoding;
-#ifdef EBCDIC
- I32 recode_x_to_native;
-#endif
+ I32 recode_x_to_native;
I32 in_multi_char_class;
+ int code_index; /* next code_blocks[] slot */
struct reg_code_blocks *code_blocks;/* positions of literal (?{})
within pattern */
- int code_index; /* next code_blocks[] slot */
SSize_t maxlen; /* mininum possible number of chars in string to match */
scan_frame *frame_head;
scan_frame *frame_last;
U32 frame_count;
AV *warn_text;
HV *unlexed_names;
-#ifdef ADD_TO_REGEXEC
- char *starttry; /* -Dr: where regtry was called. */
-#define RExC_starttry (pRExC_state->starttry)
-#endif
SV *runtime_code_qr; /* qr with the runtime code blocks */
#ifdef DEBUGGING
const char *lastparse;
I32 lastnum;
- AV *paren_name_list; /* idx -> name */
U32 study_chunk_recursed_count;
+ AV *paren_name_list; /* idx -> name */
SV *mysv1;
SV *mysv2;
@@ -225,6 +279,8 @@ struct RExC_state_t {
bool study_started;
bool in_script_run;
bool use_BRANCHJ;
+ bool sWARN_EXPERIMENTAL__VLB;
+ bool sWARN_EXPERIMENTAL__REGEX_SETS;
};
#define RExC_flags (pRExC_state->flags)
@@ -245,7 +301,6 @@ struct RExC_state_t {
#define RExC_seen_d_op (pRExC_state->seen_d_op) /* Seen something that differs
under /d from /u ? */
-
#ifdef RE_TRACK_PATTERN_OFFSETS
# define RExC_offsets (RExC_rxi->u.offsets) /* I am not like the
others */
@@ -270,14 +325,21 @@ struct RExC_state_t {
#define RExC_paren_names (pRExC_state->paren_names)
#define RExC_recurse (pRExC_state->recurse)
#define RExC_recurse_count (pRExC_state->recurse_count)
+#define RExC_sets_depth (pRExC_state->sets_depth)
#define RExC_study_chunk_recursed (pRExC_state->study_chunk_recursed)
#define RExC_study_chunk_recursed_bytes \
(pRExC_state->study_chunk_recursed_bytes)
-#define RExC_in_lookbehind (pRExC_state->in_lookbehind)
+#define RExC_in_lookaround (pRExC_state->in_lookaround)
#define RExC_contains_locale (pRExC_state->contains_locale)
+#define RExC_recode_x_to_native (pRExC_state->recode_x_to_native)
+
#ifdef EBCDIC
-# define RExC_recode_x_to_native (pRExC_state->recode_x_to_native)
+# define SET_recode_x_to_native(x) \
+ STMT_START { RExC_recode_x_to_native = (x); } STMT_END
+#else
+# define SET_recode_x_to_native(x) NOOP
#endif
+
#define RExC_in_multi_char_class (pRExC_state->in_multi_char_class)
#define RExC_frame_head (pRExC_state->frame_head)
#define RExC_frame_last (pRExC_state->frame_last)
@@ -287,6 +349,8 @@ struct RExC_state_t {
#define RExC_warn_text (pRExC_state->warn_text)
#define RExC_in_script_run (pRExC_state->in_script_run)
#define RExC_use_BRANCHJ (pRExC_state->use_BRANCHJ)
+#define RExC_warned_WARN_EXPERIMENTAL__VLB (pRExC_state->sWARN_EXPERIMENTAL__VLB)
+#define RExC_warned_WARN_EXPERIMENTAL__REGEX_SETS (pRExC_state->sWARN_EXPERIMENTAL__REGEX_SETS)
#define RExC_unlexed_names (pRExC_state->unlexed_names)
/* Heuristic check on the complexity of the pattern: if TOO_NAUGHTY, we set
@@ -339,9 +403,14 @@ struct RExC_state_t {
#define PBYTE(u8str,paren) ((U8*)(u8str))[(paren) >> 3]
#define PBITVAL(paren) (1 << ((paren) & 7))
-#define PAREN_TEST(u8str,paren) ( PBYTE(u8str,paren) & PBITVAL(paren))
-#define PAREN_SET(u8str,paren) PBYTE(u8str,paren) |= PBITVAL(paren)
-#define PAREN_UNSET(u8str,paren) PBYTE(u8str,paren) &= (~PBITVAL(paren))
+#define PAREN_OFFSET(depth) \
+ (RExC_study_chunk_recursed + (depth) * RExC_study_chunk_recursed_bytes)
+#define PAREN_TEST(depth, paren) \
+ (PBYTE(PAREN_OFFSET(depth), paren) & PBITVAL(paren))
+#define PAREN_SET(depth, paren) \
+ (PBYTE(PAREN_OFFSET(depth), paren) |= PBITVAL(paren))
+#define PAREN_UNSET(depth, paren) \
+ (PBYTE(PAREN_OFFSET(depth), paren) &= ~PBITVAL(paren))
#define REQUIRE_UTF8(flagp) STMT_START { \
if (!UTF) { \
@@ -350,10 +419,15 @@ struct RExC_state_t {
} \
} STMT_END
+/* /u is to be chosen if we are supposed to use Unicode rules, or if the
+ * pattern is in UTF-8. This latter condition is in case the outermost rules
+ * are locale. See GH #17278 */
+#define toUSE_UNI_CHARSET_NOT_DEPENDS (RExC_uni_semantics || UTF)
+
/* Change from /d into /u rules, and restart the parse. RExC_uni_semantics is
* a flag that indicates we need to override /d with /u as a result of
* something in the pattern. It should only be used in regards to calling
- * set_regex_charset() or get_regex_charse() */
+ * set_regex_charset() or get_regex_charset() */
#define REQUIRE_UNI_RULES(flagp, restart_retval) \
STMT_START { \
if (DEPENDS_SEMANTICS) { \
@@ -422,6 +496,20 @@ struct RExC_state_t {
#define _invlist_intersection_complement_2nd(a, b, output) \
_invlist_intersection_maybe_complement_2nd(a, b, TRUE, output)
+/* We add a marker if we are deferring expansion of a property that is both
+ * 1) potentiallly user-defined; and
+ * 2) could also be an official Unicode property.
+ *
+ * Without this marker, any deferred expansion can only be for a user-defined
+ * one. This marker shouldn't conflict with any that could be in a legal name,
+ * and is appended to its name to indicate this. There is a string and
+ * character form */
+#define DEFERRED_COULD_BE_OFFICIAL_MARKERs "~"
+#define DEFERRED_COULD_BE_OFFICIAL_MARKERc '~'
+
+/* What is infinity for optimization purposes */
+#define OPTIMIZE_INFTY SSize_t_MAX
+
/* About scan_data_t.
During optimisation we recurse through the regexp program performing
@@ -456,7 +544,7 @@ struct RExC_state_t {
- max_offset
Only used for floating strings. This is the rightmost point that
- the string can appear at. If set to SSize_t_MAX it indicates that the
+ the string can appear at. If set to OPTIMIZE_INFTY it indicates that the
string can occur infinitely far to the right.
For fixed strings, it is equal to min_offset.
@@ -745,6 +833,10 @@ static const scan_data_t zero_scan_data = {
Perl_croak(aTHX_ msg " in regex m/%" UTF8f "%s/", \
arg, UTF8fARG(UTF, len, RExC_precomp), ellipses))
+#define FAIL3(msg,arg1,arg2) _FAIL( \
+ Perl_croak(aTHX_ msg " in regex m/%" UTF8f "%s/", \
+ arg1, arg2, UTF8fARG(UTF, len, RExC_precomp), ellipses))
+
/*
* Simple_vFAIL -- like FAIL, but marks the current location in the scan
*/
@@ -765,7 +857,7 @@ static const scan_data_t zero_scan_data = {
* Like Simple_vFAIL(), but accepts two arguments.
*/
#define Simple_vFAIL2(m,a1) STMT_START { \
- S_re_croak2(aTHX_ UTF, m, REPORT_LOCATION, a1, \
+ S_re_croak(aTHX_ UTF, m REPORT_LOCATION, a1, \
REPORT_LOCATION_ARGS(RExC_parse)); \
} STMT_END
@@ -782,7 +874,7 @@ static const scan_data_t zero_scan_data = {
* Like Simple_vFAIL(), but accepts three arguments.
*/
#define Simple_vFAIL3(m, a1, a2) STMT_START { \
- S_re_croak2(aTHX_ UTF, m, REPORT_LOCATION, a1, a2, \
+ S_re_croak(aTHX_ UTF, m REPORT_LOCATION, a1, a2, \
REPORT_LOCATION_ARGS(RExC_parse)); \
} STMT_END
@@ -798,7 +890,7 @@ static const scan_data_t zero_scan_data = {
* Like Simple_vFAIL(), but accepts four arguments.
*/
#define Simple_vFAIL4(m, a1, a2, a3) STMT_START { \
- S_re_croak2(aTHX_ UTF, m, REPORT_LOCATION, a1, a2, a3, \
+ S_re_croak(aTHX_ UTF, m REPORT_LOCATION, a1, a2, a3, \
REPORT_LOCATION_ARGS(RExC_parse)); \
} STMT_END
@@ -810,13 +902,13 @@ static const scan_data_t zero_scan_data = {
/* A specialized version of vFAIL2 that works with UTF8f */
#define vFAIL2utf8f(m, a1) STMT_START { \
PREPARE_TO_DIE; \
- S_re_croak2(aTHX_ UTF, m, REPORT_LOCATION, a1, \
+ S_re_croak(aTHX_ UTF, m REPORT_LOCATION, a1, \
REPORT_LOCATION_ARGS(RExC_parse)); \
} STMT_END
#define vFAIL3utf8f(m, a1, a2) STMT_START { \
PREPARE_TO_DIE; \
- S_re_croak2(aTHX_ UTF, m, REPORT_LOCATION, a1, a2, \
+ S_re_croak(aTHX_ UTF, m REPORT_LOCATION, a1, a2, \
REPORT_LOCATION_ARGS(RExC_parse)); \
} STMT_END
@@ -864,11 +956,27 @@ static const scan_data_t zero_scan_data = {
} STMT_END
/* m is not necessarily a "literal string", in this macro */
-#define reg_warn_non_literal_string(loc, m) \
- _WARN_HELPER(loc, packWARN(WARN_REGEXP), \
- Perl_warner(aTHX_ packWARN(WARN_REGEXP), \
+#define warn_non_literal_string(loc, packed_warn, m) \
+ _WARN_HELPER(loc, packed_warn, \
+ Perl_warner(aTHX_ packed_warn, \
"%s" REPORT_LOCATION, \
m, REPORT_LOCATION_ARGS(loc)))
+#define reg_warn_non_literal_string(loc, m) \
+ warn_non_literal_string(loc, packWARN(WARN_REGEXP), m)
+
+#define ckWARN2_non_literal_string(loc, packwarn, m, a1) \
+ STMT_START { \
+ char * format; \
+ Size_t format_size = strlen(m) + strlen(REPORT_LOCATION)+ 1;\
+ Newx(format, format_size, char); \
+ my_strlcpy(format, m, format_size); \
+ my_strlcat(format, REPORT_LOCATION, format_size); \
+ SAVEFREEPV(format); \
+ _WARN_HELPER(loc, packwarn, \
+ Perl_ck_warner(aTHX_ packwarn, \
+ format, \
+ a1, REPORT_LOCATION_ARGS(loc))); \
+ } STMT_END
#define ckWARNreg(loc,m) \
_WARN_HELPER(loc, packWARN(WARN_REGEXP), \
@@ -948,10 +1056,15 @@ static const scan_data_t zero_scan_data = {
REPORT_LOCATION_ARGS(loc)))
#define ckWARNexperimental(loc, class, m) \
- _WARN_HELPER(loc, packWARN(class), \
+ STMT_START { \
+ if (! RExC_warned_ ## class) { /* warn once per compilation */ \
+ RExC_warned_ ## class = 1; \
+ _WARN_HELPER(loc, packWARN(class), \
Perl_ck_warner_d(aTHX_ packWARN(class), \
m REPORT_LOCATION, \
- REPORT_LOCATION_ARGS(loc)))
+ REPORT_LOCATION_ARGS(loc)));\
+ } \
+ } STMT_END
/* Convert between a pointer to a node and its offset from the beginning of the
* program */
@@ -1129,7 +1242,7 @@ static void
S_debug_studydata(pTHX_ const char *where, scan_data_t *data,
U32 depth, int is_inf)
{
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
DEBUG_OPTIMISE_MORE_r({
if (!data)
@@ -1183,7 +1296,7 @@ static void
S_debug_peep(pTHX_ const char *str, const RExC_state_t *pRExC_state,
regnode *scan, U32 depth, U32 flags)
{
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
DEBUG_OPTIMISE_r({
regnode *Next;
@@ -1360,29 +1473,6 @@ S_edit_distance(const UV* src,
/* END of edit_distance() stuff
* ========================================================= */
-/* is c a control character for which we have a mnemonic? */
-#define isMNEMONIC_CNTRL(c) _IS_MNEMONIC_CNTRL_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c)
-
-STATIC const char *
-S_cntrl_to_mnemonic(const U8 c)
-{
- /* Returns the mnemonic string that represents character 'c', if one
- * exists; NULL otherwise. The only ones that exist for the purposes of
- * this routine are a few control characters */
-
- switch (c) {
- case '\a': return "\\a";
- case '\b': return "\\b";
- case ESC_NATIVE: return "\\e";
- case '\f': return "\\f";
- case '\n': return "\\n";
- case '\r': return "\\r";
- case '\t': return "\\t";
- }
-
- return NULL;
-}
-
/* Mark that we cannot extend a found fixed substring at this point.
Update the longest found anchored substring or the longest found
floating substrings if needed. */
@@ -1394,7 +1484,7 @@ S_scan_commit(pTHX_ const RExC_state_t *pRExC_state, scan_data_t *data,
const STRLEN l = CHR_SVLEN(data->last_found);
SV * const longest_sv = data->substrs[data->cur_is_floating].str;
const STRLEN old_l = CHR_SVLEN(longest_sv);
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_SCAN_COMMIT;
@@ -1406,20 +1496,20 @@ S_scan_commit(pTHX_ const RExC_state_t *pRExC_state, scan_data_t *data,
if (!i) /* fixed */
data->substrs[0].max_offset = data->substrs[0].min_offset;
else { /* float */
- data->substrs[1].max_offset = (l
+ data->substrs[1].max_offset =
+ (is_inf)
+ ? OPTIMIZE_INFTY
+ : (l
? data->last_start_max
- : (data->pos_delta > SSize_t_MAX - data->pos_min
- ? SSize_t_MAX
+ /* temporary underflow guard for 5.32 */
+ : data->pos_delta < 0 ? OPTIMIZE_INFTY
+ : (data->pos_delta > OPTIMIZE_INFTY - data->pos_min
+ ? OPTIMIZE_INFTY
: data->pos_min + data->pos_delta));
- if (is_inf
- || (STRLEN)data->substrs[1].max_offset > (STRLEN)SSize_t_MAX)
- data->substrs[1].max_offset = SSize_t_MAX;
}
- if (data->flags & SF_BEFORE_EOL)
- data->substrs[i].flags |= (data->flags & SF_BEFORE_EOL);
- else
- data->substrs[i].flags &= ~SF_BEFORE_EOL;
+ data->substrs[i].flags &= ~SF_BEFORE_EOL;
+ data->substrs[i].flags |= data->flags & SF_BEFORE_EOL;
data->substrs[i].minlenp = minlenp;
data->substrs[i].lookbehind = 0;
}
@@ -1580,7 +1670,9 @@ S_get_ANYOF_cp_list_for_ssc(pTHX_ const RExC_state_t *pRExC_state,
unsigned int i;
const U32 n = ARG(node);
bool new_node_has_latin1 = FALSE;
- const U8 flags = OP(node) == ANYOFH ? 0 : ANYOF_FLAGS(node);
+ const U8 flags = (inRANGE(OP(node), ANYOFH, ANYOFRb))
+ ? 0
+ : ANYOF_FLAGS(node);
PERL_ARGS_ASSERT_GET_ANYOF_CP_LIST_FOR_SSC;
@@ -1633,7 +1725,7 @@ S_get_ANYOF_cp_list_for_ssc(pTHX_ const RExC_state_t *pRExC_state,
}
/* Add in the points from the bit map */
- if (OP(node) != ANYOFH) {
+ if (! inRANGE(OP(node), ANYOFH, ANYOFRb)) {
for (i = 0; i < NUM_ANYOF_CODE_POINTS; i++) {
if (ANYOF_BITMAP_TEST(node, i)) {
unsigned int start = i++;
@@ -1720,7 +1812,9 @@ S_ssc_and(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc,
* another SSC or a regular ANYOF class. Can create false positives. */
SV* anded_cp_list;
- U8 and_with_flags = (OP(and_with) == ANYOFH) ? 0 : ANYOF_FLAGS(and_with);
+ U8 and_with_flags = inRANGE(OP(and_with), ANYOFH, ANYOFRb)
+ ? 0
+ : ANYOF_FLAGS(and_with);
U8 anded_flags;
PERL_ARGS_ASSERT_SSC_AND;
@@ -1904,7 +1998,9 @@ S_ssc_or(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc,
SV* ored_cp_list;
U8 ored_flags;
- U8 or_with_flags = (OP(or_with) == ANYOFH) ? 0 : ANYOF_FLAGS(or_with);
+ U8 or_with_flags = inRANGE(OP(or_with), ANYOFH, ANYOFRb)
+ ? 0
+ : ANYOF_FLAGS(or_with);
PERL_ARGS_ASSERT_SSC_OR;
@@ -1977,7 +2073,7 @@ S_ssc_or(pTHX_ const RExC_state_t *pRExC_state, regnode_ssc *ssc,
);
}
-PERL_STATIC_INLINE void
+STATIC void
S_ssc_union(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert2nd)
{
PERL_ARGS_ASSERT_SSC_UNION;
@@ -1990,7 +2086,7 @@ S_ssc_union(pTHX_ regnode_ssc *ssc, SV* const invlist, const bool invert2nd)
&ssc->invlist);
}
-PERL_STATIC_INLINE void
+STATIC void
S_ssc_intersection(pTHX_ regnode_ssc *ssc,
SV* const invlist,
const bool invert2nd)
@@ -2005,7 +2101,7 @@ S_ssc_intersection(pTHX_ regnode_ssc *ssc,
&ssc->invlist);
}
-PERL_STATIC_INLINE void
+STATIC void
S_ssc_add_range(pTHX_ regnode_ssc *ssc, const UV start, const UV end)
{
PERL_ARGS_ASSERT_SSC_ADD_RANGE;
@@ -2015,7 +2111,7 @@ S_ssc_add_range(pTHX_ regnode_ssc *ssc, const UV start, const UV end)
ssc->invlist = _add_range_to_invlist(ssc->invlist, start, end);
}
-PERL_STATIC_INLINE void
+STATIC void
S_ssc_cp_and(pTHX_ regnode_ssc *ssc, const UV cp)
{
/* AND just the single code point 'cp' into the SSC 'ssc' */
@@ -2033,7 +2129,7 @@ S_ssc_cp_and(pTHX_ regnode_ssc *ssc, const UV cp)
SvREFCNT_dec_NN(cp_list);
}
-PERL_STATIC_INLINE void
+STATIC void
S_ssc_clear_locale(regnode_ssc *ssc)
{
/* Set the SSC 'ssc' to not match any locale things */
@@ -2128,6 +2224,7 @@ S_ssc_finalize(pTHX_ RExC_state_t *pRExC_state, regnode_ssc *ssc)
populate_ANYOF_from_invlist( (regnode *) ssc, &invlist);
set_ANYOF_arg(pRExC_state, (regnode *) ssc, invlist, NULL, NULL);
+ SvREFCNT_dec(invlist);
/* Make sure is clone-safe */
ssc->invlist = NULL;
@@ -2180,7 +2277,7 @@ S_dump_trie(pTHX_ const struct _reg_trie_data *trie, HV *widecharmap,
SV *sv=sv_newmortal();
int colwidth= widecharmap ? 6 : 4;
U16 word;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_DUMP_TRIE;
@@ -2274,7 +2371,7 @@ S_dump_trie_interim_list(pTHX_ const struct _reg_trie_data *trie,
U32 state;
SV *sv=sv_newmortal();
int colwidth= widecharmap ? 6 : 4;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_LIST;
@@ -2335,7 +2432,7 @@ S_dump_trie_interim_table(pTHX_ const struct _reg_trie_data *trie,
U16 charid;
SV *sv=sv_newmortal();
int colwidth= widecharmap ? 6 : 4;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_TABLE;
@@ -2518,7 +2615,8 @@ is the recommended Unicode-aware way of saying
if (UTF) { \
SV *zlopp = newSV(UTF8_MAXBYTES); \
unsigned char *flrbbbbb = (unsigned char *) SvPVX(zlopp); \
- unsigned const char *const kapow = uvchr_to_utf8(flrbbbbb, val); \
+ unsigned char *const kapow = uvchr_to_utf8(flrbbbbb, val); \
+ *kapow = '\0'; \
SvCUR_set(zlopp, kapow - flrbbbbb); \
SvPOK_on(zlopp); \
SvUTF8_on(zlopp); \
@@ -2679,7 +2777,7 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
STRLEN trie_charcount=0;
#endif
SV *re_trie_maxbuff;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_MAKE_TRIE;
#ifndef DEBUGGING
@@ -2687,7 +2785,7 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
#endif
switch (flags) {
- case EXACT: case EXACT_ONLY8: case EXACTL: break;
+ case EXACT: case EXACT_REQ8: case EXACTL: break;
case EXACTFAA:
case EXACTFUP:
case EXACTFU:
@@ -2702,7 +2800,7 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
trie->wordcount = word_count;
RExC_rxi->data->data[ data_slot ] = (void*)trie;
trie->charmap = (U16 *) PerlMemShared_calloc( 256, sizeof(U16) );
- if (flags == EXACT || flags == EXACT_ONLY8 || flags == EXACTL)
+ if (flags == EXACT || flags == EXACT_REQ8 || flags == EXACTL)
trie->bitmap = (char *) PerlMemShared_calloc( ANYOF_BITMAP_SIZE, 1 );
trie->wordinfo = (reg_trie_wordinfo *) PerlMemShared_calloc(
trie->wordcount+1, sizeof(reg_trie_wordinfo));
@@ -2783,8 +2881,8 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
if ( noper < tail
&& ( OP(noper) == flags
- || (flags == EXACT && OP(noper) == EXACT_ONLY8)
- || (flags == EXACTFU && ( OP(noper) == EXACTFU_ONLY8
+ || (flags == EXACT && OP(noper) == EXACT_REQ8)
+ || (flags == EXACTFU && ( OP(noper) == EXACTFU_REQ8
|| OP(noper) == EXACTFUP))))
{
uc= (U8*)STRING(noper);
@@ -3004,8 +3102,8 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
if ( noper < tail
&& ( OP(noper) == flags
- || (flags == EXACT && OP(noper) == EXACT_ONLY8)
- || (flags == EXACTFU && ( OP(noper) == EXACTFU_ONLY8
+ || (flags == EXACT && OP(noper) == EXACT_REQ8)
+ || (flags == EXACTFU && ( OP(noper) == EXACTFU_REQ8
|| OP(noper) == EXACTFUP))))
{
const U8 *uc= (U8*)STRING(noper);
@@ -3238,8 +3336,8 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
if ( noper < tail
&& ( OP(noper) == flags
- || (flags == EXACT && OP(noper) == EXACT_ONLY8)
- || (flags == EXACTFU && ( OP(noper) == EXACTFU_ONLY8
+ || (flags == EXACT && OP(noper) == EXACT_REQ8)
+ || (flags == EXACTFU && ( OP(noper) == EXACTFU_REQ8
|| OP(noper) == EXACTFUP))))
{
const U8 *uc= (U8*)STRING(noper);
@@ -3560,9 +3658,10 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
if ( state==1 ) {
OP( convert ) = nodetype;
str=STRING(convert);
- STR_LEN(convert)=0;
+ setSTR_LEN(convert, 0);
}
- STR_LEN(convert) += len;
+ assert( ( STR_LEN(convert) + len ) < 256 );
+ setSTR_LEN(convert, (U8)(STR_LEN(convert) + len));
while (len--)
*str++ = *ch++;
} else {
@@ -3576,7 +3675,8 @@ S_make_trie(pTHX_ RExC_state_t *pRExC_state, regnode *startbranch,
trie->prefixlen = (state-1);
if (str) {
regnode *n = convert+NODE_SZ_STR(convert);
- NEXT_OFF(convert) = NODE_SZ_STR(convert);
+ assert( NODE_SZ_STR(convert) <= U16_MAX );
+ NEXT_OFF(convert) = (U16)(NODE_SZ_STR(convert));
trie->startstate = state;
trie->minlen -= (state - 1);
trie->maxlen -= (state - 1);
@@ -3767,7 +3867,7 @@ S_construct_ahocorasick_from_trie(pTHX_ RExC_state_t *pRExC_state, regnode *sour
reg_ac_data *aho;
const U32 data_slot = add_data( pRExC_state, STR_WITH_LEN("T"));
regnode *stclass;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_CONSTRUCT_AHOCORASICK_FROM_TRIE;
PERL_UNUSED_CONTEXT;
@@ -3908,7 +4008,7 @@ S_construct_ahocorasick_from_trie(pTHX_ RExC_state_t *pRExC_state, regnode *sour
* character folded sequences. Since a single character can fold into
* such a sequence, the minimum match length for this node is less than
* the number of characters in the node. This routine returns in
- * *min_subtract how many characters to subtract from the the actual
+ * *min_subtract how many characters to subtract from the actual
* length of the string to get a real minimum match length; it is 0 if
* there are no multi-char foldeds. This delta is used by the caller to
* adjust the min length of the match, and the delta between min and max,
@@ -4002,10 +4102,6 @@ S_construct_ahocorasick_from_trie(pTHX_ RExC_state_t *pRExC_state, regnode *sour
* using /iaa matching will be doing so almost entirely with ASCII
* strings, so this should rarely be encountered in practice */
-#define JOIN_EXACT(scan,min_subtract,unfolded_multi_char, flags) \
- if (PL_regkind[OP(scan)] == EXACT) \
- join_exact(pRExC_state,(scan),(min_subtract),unfolded_multi_char, (flags), NULL, depth+1)
-
STATIC U32
S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
UV *min_subtract, bool *unfolded_multi_char,
@@ -4020,7 +4116,7 @@ S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
U32 stopnow = 0;
#ifdef DEBUGGING
regnode *stop = scan;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
#else
PERL_UNUSED_ARG(depth);
#endif
@@ -4068,16 +4164,16 @@ S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
/* Joining something that requires UTF-8 with something that
* doesn't, means the result requires UTF-8. */
- if (OP(scan) == EXACT && (OP(n) == EXACT_ONLY8)) {
- OP(scan) = EXACT_ONLY8;
+ if (OP(scan) == EXACT && (OP(n) == EXACT_REQ8)) {
+ OP(scan) = EXACT_REQ8;
}
- else if (OP(scan) == EXACT_ONLY8 && (OP(n) == EXACT)) {
+ else if (OP(scan) == EXACT_REQ8 && (OP(n) == EXACT)) {
; /* join is compatible, no need to change OP */
}
- else if ((OP(scan) == EXACTFU) && (OP(n) == EXACTFU_ONLY8)) {
- OP(scan) = EXACTFU_ONLY8;
+ else if ((OP(scan) == EXACTFU) && (OP(n) == EXACTFU_REQ8)) {
+ OP(scan) = EXACTFU_REQ8;
}
- else if ((OP(scan) == EXACTFU_ONLY8) && (OP(n) == EXACTFU)) {
+ else if ((OP(scan) == EXACTFU_REQ8) && (OP(n) == EXACTFU)) {
; /* join is compatible, no need to change OP */
}
else if (OP(scan) == EXACTFU && OP(n) == EXACTFU) {
@@ -4100,7 +4196,7 @@ S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
* node. And if the only adjacent node is EXACTF, they get
* absorbed into that, under the theory that a longer node is
* better than two shorter ones, even if one is EXACTFU. Note
- * that EXACTFU_ONLY8 is generated only for UTF-8 patterns,
+ * that EXACTFU_REQ8 is generated only for UTF-8 patterns,
* and the EXACTFU_S_EDGE ones only for non-UTF-8. */
if (STRING(n)[STR_LEN(n)-1] == 's') {
@@ -4169,7 +4265,8 @@ S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
merged++;
NEXT_OFF(scan) += NEXT_OFF(n);
- STR_LEN(scan) += STR_LEN(n);
+ assert( ( STR_LEN(scan) + STR_LEN(n) ) < 256 );
+ setSTR_LEN(scan, (U8)(STR_LEN(scan) + STR_LEN(n)));
next = n + NODE_SZ_STR(n);
/* Now we can overwrite *n : */
Move(STRING(n), STRING(scan) + oldl, STR_LEN(n), char);
@@ -4208,7 +4305,7 @@ S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
* this final joining, sequences could have been split over boundaries, and
* hence missed). The sequences only happen in folding, hence for any
* non-EXACT EXACTish node */
- if (OP(scan) != EXACT && OP(scan) != EXACT_ONLY8 && OP(scan) != EXACTL) {
+ if (OP(scan) != EXACT && OP(scan) != EXACT_REQ8 && OP(scan) != EXACTL) {
U8* s0 = (U8*) STRING(scan);
U8* s = s0;
U8* s_end = s0 + STR_LEN(scan);
@@ -4349,7 +4446,7 @@ S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
s++;
}
}
- else {
+ else if (OP(scan) != EXACTFAA_NO_TRIE) {
/* Non-UTF-8 pattern, not EXACTFAA node. Look for the multi-char
* folds that are all Latin1. As explained in the comments
@@ -4381,7 +4478,7 @@ S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
/* EXACTF nodes need to know that the minimum length
* changed so that a sharp s in the string can match this
* ss in the pattern, but they remain EXACTF nodes, as they
- * won't match this unless the target string is is UTF-8,
+ * won't match this unless the target string is in UTF-8,
* which we don't know until runtime. EXACTFL nodes can't
* transform into EXACTFU nodes */
if (OP(scan) != EXACTF && OP(scan) != EXACTFL) {
@@ -4394,23 +4491,6 @@ S_join_exact(pTHX_ RExC_state_t *pRExC_state, regnode *scan,
}
#endif
}
-
- if ( STR_LEN(scan) == 1
- && isALPHA_A(* STRING(scan))
- && ( OP(scan) == EXACTFAA
- || ( OP(scan) == EXACTFU
- && ! HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(* STRING(scan)))))
- {
- U8 mask = ~ ('A' ^ 'a'); /* These differ in just one bit */
-
- /* Replace a length 1 ASCII fold pair node with an ANYOFM node,
- * with the mask set to the complement of the bit that differs
- * between upper and lower case, and the lowest code point of the
- * pair (which the '&' forces) */
- OP(scan) = ANYOFM;
- ARG_SET(scan, *STRING(scan) & mask);
- FLAGS(scan) = mask;
- }
}
#ifdef DEBUGGING
@@ -4508,6 +4588,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
/* and_withp: Valid if flags & SCF_DO_STCLASS_OR */
{
dVAR;
+ SSize_t final_minlen;
/* There must be at least this number of characters to match */
SSize_t min = 0;
I32 pars = 0, code;
@@ -4519,9 +4600,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
scan_data_t data_fake;
SV *re_trie_maxbuff = NULL;
regnode *first_non_open = scan;
- SSize_t stopmin = SSize_t_MAX;
+ SSize_t stopmin = OPTIMIZE_INFTY;
scan_frame *frame = NULL;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_STUDY_CHUNK;
RExC_study_started= 1;
@@ -4551,15 +4632,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
U32 j;
for ( j = 0 ; j < recursed_depth ; j++ ) {
for ( i = 0 ; i < (U32)RExC_total_parens ; i++ ) {
- if (
- PAREN_TEST(RExC_study_chunk_recursed +
- ( j * RExC_study_chunk_recursed_bytes), i )
- && (
- !j ||
- !PAREN_TEST(RExC_study_chunk_recursed +
- (( j - 1 ) * RExC_study_chunk_recursed_bytes), i)
- )
- ) {
+ if (PAREN_TEST(j, i) && (!j || !PAREN_TEST(j - 1, i))) {
Perl_re_printf( aTHX_ " %d",(int)i);
break;
}
@@ -4591,16 +4664,22 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
* parsing code, as each (?:..) is handled by a different invocation of
* reg() -- Yves
*/
- if (mutate_ok)
- JOIN_EXACT(scan,&min_subtract, &unfolded_multi_char, 0);
+ if (PL_regkind[OP(scan)] == EXACT
+ && OP(scan) != LEXACT
+ && OP(scan) != LEXACT_REQ8
+ && mutate_ok
+ ) {
+ join_exact(pRExC_state, scan, &min_subtract, &unfolded_multi_char,
+ 0, NULL, depth + 1);
+ }
/* Follow the next-chain of the current node and optimize
away all the NOTHINGs from it.
*/
rck_elide_nothing(scan);
- /* The principal pseudo-switch. Cannot be a switch, since we
- look into several different things. */
+ /* The principal pseudo-switch. Cannot be a switch, since we look into
+ * several different things. */
if ( OP(scan) == DEFINEP ) {
SSize_t minlen = 0;
SSize_t deltanext = 0;
@@ -4645,7 +4724,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
/* NOTE - There is similar code to this block below for
* handling TRIE nodes on a re-study. If you change stuff here
* check there too. */
- SSize_t max1 = 0, min1 = SSize_t_MAX, num = 0;
+ SSize_t max1 = 0, min1 = OPTIMIZE_INFTY, num = 0;
regnode_ssc accum;
regnode * const startbranch=scan;
@@ -4697,9 +4776,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
if (min1 > minnext)
min1 = minnext;
- if (deltanext == SSize_t_MAX) {
+ if (deltanext == OPTIMIZE_INFTY) {
is_inf = is_inf_internal = 1;
- max1 = SSize_t_MAX;
+ max1 = OPTIMIZE_INFTY;
} else if (max1 < minnext + deltanext)
max1 = minnext + deltanext;
scan = next;
@@ -4724,17 +4803,17 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
min1 = 0;
if (flags & SCF_DO_SUBSTR) {
data->pos_min += min1;
- if (data->pos_delta >= SSize_t_MAX - (max1 - min1))
- data->pos_delta = SSize_t_MAX;
+ if (data->pos_delta >= OPTIMIZE_INFTY - (max1 - min1))
+ data->pos_delta = OPTIMIZE_INFTY;
else
data->pos_delta += max1 - min1;
if (max1 != min1 || is_inf)
data->cur_is_floating = 1;
}
min += min1;
- if (delta == SSize_t_MAX
- || SSize_t_MAX - delta - (max1 - min1) < 0)
- delta = SSize_t_MAX;
+ if (delta == OPTIMIZE_INFTY
+ || OPTIMIZE_INFTY - delta - (max1 - min1) < 0)
+ delta = OPTIMIZE_INFTY;
else
delta += max1 - min1;
if (flags & SCF_DO_STCLASS_OR) {
@@ -4816,7 +4895,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
if ( SvIV(re_trie_maxbuff)>=0 ) {
regnode *cur;
regnode *first = (regnode *)NULL;
- regnode *last = (regnode *)NULL;
+ regnode *prev = (regnode *)NULL;
regnode *tail = scan;
U8 trietype = 0;
U32 count=0;
@@ -4894,9 +4973,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
----------------+-----------
NOTHING | NOTHING
EXACT | EXACT
- EXACT_ONLY8 | EXACT
+ EXACT_REQ8 | EXACT
EXACTFU | EXACTFU
- EXACTFU_ONLY8 | EXACTFU
+ EXACTFU_REQ8 | EXACTFU
EXACTFUP | EXACTFU
EXACTFAA | EXACTFAA
EXACTL | EXACTL
@@ -4906,10 +4985,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
*/
#define TRIE_TYPE(X) ( ( NOTHING == (X) ) \
? NOTHING \
- : ( EXACT == (X) || EXACT_ONLY8 == (X) ) \
+ : ( EXACT == (X) || EXACT_REQ8 == (X) ) \
? EXACT \
: ( EXACTFU == (X) \
- || EXACTFU_ONLY8 == (X) \
+ || EXACTFU_REQ8 == (X) \
|| EXACTFUP == (X) ) \
? EXACTFU \
: ( EXACTFAA == (X) ) \
@@ -4947,7 +5026,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
REG_NODE_NUM(noper_next), SvPV_nolen_const(RExC_mysv));
}
Perl_re_printf( aTHX_ "(First==%d,Last==%d,Cur==%d,tt==%s,ntt==%s,nntt==%s)\n",
- REG_NODE_NUM(first), REG_NODE_NUM(last), REG_NODE_NUM(cur),
+ REG_NODE_NUM(first), REG_NODE_NUM(prev), REG_NODE_NUM(cur),
PL_reg_name[trietype], PL_reg_name[noper_trietype], PL_reg_name[noper_next_trietype]
);
});
@@ -4993,7 +5072,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
} else {
if ( trietype == NOTHING )
trietype = noper_trietype;
- last = cur;
+ prev = cur;
}
if (first)
count++;
@@ -5003,7 +5082,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
* noper may either be a triable node which can
* not be tried together with the current trie,
* or a non triable node */
- if ( last ) {
+ if ( prev ) {
/* If last is set and trietype is not
* NOTHING then we have found at least two
* triable branch sequences in a row of a
@@ -5016,7 +5095,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
make_trie( pRExC_state,
startbranch, first, cur, tail,
count, trietype, depth+1 );
- last = NULL; /* note: we clear/update
+ prev = NULL; /* note: we clear/update
first, trietype etc below,
so we dont do it here */
}
@@ -5045,12 +5124,12 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
Perl_re_indentf( aTHX_ "- %s (%d) <SCAN FINISHED> ",
depth+1, SvPV_nolen_const( RExC_mysv ), REG_NODE_NUM(cur));
Perl_re_printf( aTHX_ "(First==%d, Last==%d, Cur==%d, tt==%s)\n",
- REG_NODE_NUM(first), REG_NODE_NUM(last), REG_NODE_NUM(cur),
+ REG_NODE_NUM(first), REG_NODE_NUM(prev), REG_NODE_NUM(cur),
PL_reg_name[trietype]
);
});
- if ( last && trietype ) {
+ if ( prev && trietype ) {
if ( trietype != NOTHING ) {
/* the last branch of the sequence was part of
* a trie, so we have to construct it here
@@ -5095,9 +5174,8 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
OP(opt)= OPTIMIZED;
}
}
- } /* end if ( last) */
+ } /* end if ( prev) */
} /* TRIE_MAXBUF is non zero */
-
} /* do trie */
}
@@ -5144,15 +5222,19 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
* might result in a minlen of 1 and not of 4,
* but this doesn't make us mismatch, just try a bit
* harder than we should.
- * */
+ *
+ * However we must assume this GOSUB is infinite, to
+ * avoid wrongly applying other optimizations in the
+ * enclosing scope - see GH 18096, for example.
+ */
+ is_inf = is_inf_internal = 1;
scan= regnext(scan);
continue;
}
if (
!recursed_depth
- ||
- !PAREN_TEST(RExC_study_chunk_recursed + ((recursed_depth-1) * RExC_study_chunk_recursed_bytes), paren)
+ || !PAREN_TEST(recursed_depth - 1, paren)
) {
/* it is quite possible that there are more efficient ways
* to do this. We maintain a bitmap per level of recursion
@@ -5167,13 +5249,13 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
if (!recursed_depth) {
Zero(RExC_study_chunk_recursed, RExC_study_chunk_recursed_bytes, U8);
} else {
- Copy(RExC_study_chunk_recursed + ((recursed_depth-1) * RExC_study_chunk_recursed_bytes),
- RExC_study_chunk_recursed + (recursed_depth * RExC_study_chunk_recursed_bytes),
+ Copy(PAREN_OFFSET(recursed_depth - 1),
+ PAREN_OFFSET(recursed_depth),
RExC_study_chunk_recursed_bytes, U8);
}
/* we havent recursed into this paren yet, so recurse into it */
DEBUG_STUDYDATA("gosub-set", data, depth, is_inf);
- PAREN_SET(RExC_study_chunk_recursed + (recursed_depth * RExC_study_chunk_recursed_bytes), paren);
+ PAREN_SET(recursed_depth, paren);
my_recursed_depth= recursed_depth + 1;
} else {
DEBUG_STUDYDATA("gosub-inf", data, depth, is_inf);
@@ -5236,29 +5318,34 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
}
}
else if ( OP(scan) == EXACT
- || OP(scan) == EXACT_ONLY8
+ || OP(scan) == LEXACT
+ || OP(scan) == EXACT_REQ8
+ || OP(scan) == LEXACT_REQ8
|| OP(scan) == EXACTL)
{
- SSize_t l = STR_LEN(scan);
+ SSize_t bytelen = STR_LEN(scan), charlen;
UV uc;
- assert(l);
+ assert(bytelen);
if (UTF) {
const U8 * const s = (U8*)STRING(scan);
- uc = utf8_to_uvchr_buf(s, s + l, NULL);
- l = utf8_length(s, s + l);
+ uc = utf8_to_uvchr_buf(s, s + bytelen, NULL);
+ charlen = utf8_length(s, s + bytelen);
} else {
uc = *((U8*)STRING(scan));
+ charlen = bytelen;
}
- min += l;
+ min += charlen;
if (flags & SCF_DO_SUBSTR) { /* Update longest substr. */
/* The code below prefers earlier match for fixed
offset, later match for variable offset. */
if (data->last_end == -1) { /* Update the start info. */
data->last_start_min = data->pos_min;
- data->last_start_max = is_inf
- ? SSize_t_MAX : data->pos_min + data->pos_delta;
+ data->last_start_max =
+ is_inf ? OPTIMIZE_INFTY
+ : (data->pos_delta > OPTIMIZE_INFTY - data->pos_min)
+ ? OPTIMIZE_INFTY : data->pos_min + data->pos_delta;
}
- sv_catpvn(data->last_found, STRING(scan), STR_LEN(scan));
+ sv_catpvn(data->last_found, STRING(scan), bytelen);
if (UTF)
SvUTF8_on(data->last_found);
{
@@ -5266,11 +5353,10 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
MAGIC * const mg = SvUTF8(sv) && SvMAGICAL(sv) ?
mg_find(sv, PERL_MAGIC_utf8) : NULL;
if (mg && mg->mg_len >= 0)
- mg->mg_len += utf8_length((U8*)STRING(scan),
- (U8*)STRING(scan)+STR_LEN(scan));
+ mg->mg_len += charlen;
}
- data->last_end = data->pos_min + l;
- data->pos_min += l; /* As in the first entry. */
+ data->last_end = data->pos_min + charlen;
+ data->pos_min += charlen; /* As in the first entry. */
data->flags &= ~SF_BEFORE_EOL;
}
@@ -5292,25 +5378,43 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
}
else if (PL_regkind[OP(scan)] == EXACT) {
/* But OP != EXACT!, so is EXACTFish */
- SSize_t l = STR_LEN(scan);
+ SSize_t bytelen = STR_LEN(scan), charlen;
const U8 * s = (U8*)STRING(scan);
+ /* Replace a length 1 ASCII fold pair node with an ANYOFM node,
+ * with the mask set to the complement of the bit that differs
+ * between upper and lower case, and the lowest code point of the
+ * pair (which the '&' forces) */
+ if ( bytelen == 1
+ && isALPHA_A(*s)
+ && ( OP(scan) == EXACTFAA
+ || ( OP(scan) == EXACTFU
+ && ! HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(*s)))
+ && mutate_ok
+ ) {
+ U8 mask = ~ ('A' ^ 'a'); /* These differ in just one bit */
+
+ OP(scan) = ANYOFM;
+ ARG_SET(scan, *s & mask);
+ FLAGS(scan) = mask;
+ /* we're not EXACTFish any more, so restudy */
+ continue;
+ }
+
/* Search for fixed substrings supports EXACT only. */
if (flags & SCF_DO_SUBSTR) {
assert(data);
scan_commit(pRExC_state, data, minlenp, is_inf);
}
- if (UTF) {
- l = utf8_length(s, s + l);
- }
+ charlen = UTF ? (SSize_t) utf8_length(s, s + bytelen) : bytelen;
if (unfolded_multi_char) {
RExC_seen |= REG_UNFOLDED_MULTI_SEEN;
}
- min += l - min_subtract;
+ min += charlen - min_subtract;
assert (min >= 0);
delta += min_subtract;
if (flags & SCF_DO_SUBSTR) {
- data->pos_min += l - min_subtract;
+ data->pos_min += charlen - min_subtract;
if (data->pos_min < 0) {
data->pos_min = 0;
}
@@ -5321,7 +5425,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
}
if (flags & SCF_DO_STCLASS) {
- SV* EXACTF_invlist = _make_exactf_invlist(pRExC_state, scan);
+ SV* EXACTF_invlist = make_exactf_invlist(pRExC_state, scan);
assert(EXACTF_invlist);
if (flags & SCF_DO_STCLASS_AND) {
@@ -5358,7 +5462,9 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
if (flags & (SCF_DO_SUBSTR | SCF_DO_STCLASS)) {
next = NEXTOPER(scan);
if ( OP(next) == EXACT
- || OP(next) == EXACT_ONLY8
+ || OP(next) == LEXACT
+ || OP(next) == EXACT_REQ8
+ || OP(next) == LEXACT_REQ8
|| OP(next) == EXACTL
|| (flags & SCF_DO_STCLASS))
{
@@ -5528,11 +5634,11 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
}
min += minnext * mincount;
- is_inf_internal |= deltanext == SSize_t_MAX
+ is_inf_internal |= deltanext == OPTIMIZE_INFTY
|| (maxcount == REG_INFTY && minnext + deltanext > 0);
is_inf |= is_inf_internal;
if (is_inf) {
- delta = SSize_t_MAX;
+ delta = OPTIMIZE_INFTY;
} else {
delta += (minnext + deltanext) * maxcount
- minnext * mincount;
@@ -5730,7 +5836,7 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
data->last_start_min += minnext * (mincount - 1);
data->last_start_max =
is_inf
- ? SSize_t_MAX
+ ? OPTIMIZE_INFTY
: data->last_start_max +
(maxcount - 1) * (minnext + data->pos_delta);
}
@@ -5739,18 +5845,18 @@ S_study_chunk(pTHX_ RExC_state_t *pRExC_state, regnode **scanp,
data->pos_min += minnext * (mincount - counted);
#if 0
Perl_re_printf( aTHX_ "counted=%" UVuf " deltanext=%" UVuf
- " SSize_t_MAX=%" UVuf " minnext=%" UVuf
+ " OPTIMIZE_INFTY=%" UVuf " minnext=%" UVuf
" maxcount=%" UVuf " mincount=%" UVuf "\n",
- (UV)counted, (UV)deltanext, (UV)SSize_t_MAX, (UV)minnext, (UV)maxcount,
+ (UV)counted, (UV)deltanext, (UV)OPTIMIZE_INFTY, (UV)minnext, (UV)maxcount,
(UV)mincount);
-if (deltanext != SSize_t_MAX)
+if (deltanext != OPTIMIZE_INFTY)
Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
(UV)(-counted * deltanext + (minnext + deltanext) * maxcount
- - minnext * mincount), (UV)(SSize_t_MAX - data->pos_delta));
+ - minnext * mincount), (UV)(OPTIMIZE_INFTY - data->pos_delta));
#endif
- if (deltanext == SSize_t_MAX
- || -counted * deltanext + (minnext + deltanext) * maxcount - minnext * mincount >= SSize_t_MAX - data->pos_delta)
- data->pos_delta = SSize_t_MAX;
+ if (deltanext == OPTIMIZE_INFTY
+ || -counted * deltanext + (minnext + deltanext) * maxcount - minnext * mincount >= OPTIMIZE_INFTY - data->pos_delta)
+ data->pos_delta = OPTIMIZE_INFTY;
else
data->pos_delta += - counted * deltanext +
(minnext + deltanext) * maxcount - minnext * mincount;
@@ -5769,7 +5875,7 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
data->last_end = data->pos_min;
data->last_start_min = data->pos_min - last_chrs;
data->last_start_max = is_inf
- ? SSize_t_MAX
+ ? OPTIMIZE_INFTY
: data->pos_min + data->pos_delta - last_chrs;
}
data->cur_is_floating = 1; /* float */
@@ -5783,10 +5889,8 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
continue;
default:
-#ifdef DEBUGGING
Perl_croak(aTHX_ "panic: unexpected varying REx opcode %d",
OP(scan));
-#endif
case REF:
case CLUMP:
if (flags & SCF_DO_SUBSTR) {
@@ -5832,13 +5936,13 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
flags &= ~SCF_DO_STCLASS;
}
min++;
- if (delta != SSize_t_MAX)
+ if (delta != OPTIMIZE_INFTY)
delta++; /* Because of the 2 char string cr-lf */
if (flags & SCF_DO_SUBSTR) {
/* Cannot expect anything... */
scan_commit(pRExC_state, data, minlenp, is_inf);
data->pos_min += 1;
- if (data->pos_delta != SSize_t_MAX) {
+ if (data->pos_delta != OPTIMIZE_INFTY) {
data->pos_delta += 1;
}
data->cur_is_floating = 1; /* float */
@@ -5900,6 +6004,9 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
case ANYOFL:
case ANYOFPOSIXL:
case ANYOFH:
+ case ANYOFHb:
+ case ANYOFHr:
+ case ANYOFHs:
case ANYOF:
if (flags & SCF_DO_STCLASS_AND)
ssc_and(pRExC_state, data->start_class,
@@ -5909,7 +6016,10 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
(regnode_charclass *) scan);
break;
- case NANYOFM:
+ case NANYOFM: /* NANYOFM already contains the inversion of the
+ input ANYOF data, so, unlike things like
+ NPOSIXA, don't change 'invert' to TRUE */
+ /* FALLTHROUGH */
case ANYOFM:
{
SV* cp_list = get_ANYOFM_contents(scan);
@@ -5925,6 +6035,26 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
break;
}
+ case ANYOFR:
+ case ANYOFRb:
+ {
+ SV* cp_list = NULL;
+
+ cp_list = _add_range_to_invlist(cp_list,
+ ANYOFRbase(scan),
+ ANYOFRbase(scan) + ANYOFRdelta(scan));
+
+ if (flags & SCF_DO_STCLASS_OR) {
+ ssc_union(data->start_class, cp_list, invert);
+ }
+ else if (flags & SCF_DO_STCLASS_AND) {
+ ssc_intersection(data->start_class, cp_list, invert);
+ }
+
+ SvREFCNT_dec_NN(cp_list);
+ break;
+ }
+
case NPOSIXL:
invert = 1;
/* FALLTHROUGH */
@@ -6214,7 +6344,6 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
}
#endif
}
-
else if (OP(scan) == OPEN) {
if (stopparen != (I32)ARG(scan))
pars++;
@@ -6280,7 +6409,7 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
regnode *trie_node= scan;
regnode *tail= regnext(scan);
reg_trie_data *trie = (reg_trie_data*)RExC_rxi->data->data[ ARG(scan) ];
- SSize_t max1 = 0, min1 = SSize_t_MAX;
+ SSize_t max1 = 0, min1 = OPTIMIZE_INFTY;
regnode_ssc accum;
if (flags & SCF_DO_SUBSTR) { /* XXXX Add !SUSPEND? */
@@ -6336,9 +6465,9 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
if (min1 > (SSize_t)(minnext + trie->minlen))
min1 = minnext + trie->minlen;
- if (deltanext == SSize_t_MAX) {
+ if (deltanext == OPTIMIZE_INFTY) {
is_inf = is_inf_internal = 1;
- max1 = SSize_t_MAX;
+ max1 = OPTIMIZE_INFTY;
} else if (max1 < (SSize_t)(minnext + deltanext + trie->maxlen))
max1 = minnext + deltanext + trie->maxlen;
@@ -6367,11 +6496,11 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
data->cur_is_floating = 1; /* float */
}
min += min1;
- if (delta != SSize_t_MAX) {
- if (SSize_t_MAX - (max1 - min1) >= delta)
+ if (delta != OPTIMIZE_INFTY) {
+ if (OPTIMIZE_INFTY - (max1 - min1) >= delta)
delta += max1 - min1;
else
- delta = SSize_t_MAX;
+ delta = OPTIMIZE_INFTY;
}
if (flags & SCF_DO_STCLASS_OR) {
ssc_or(pRExC_state, data->start_class, (regnode_charclass *) &accum);
@@ -6417,6 +6546,11 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
if (trie->jump) /* no more substrings -- for now /grr*/
flags &= ~SCF_DO_SUBSTR;
}
+ else if (OP(scan) == REGEX_SET) {
+ Perl_croak(aTHX_ "panic: %s regnode should be resolved"
+ " before optimization", reg_name[REGEX_SET]);
+ }
+
#endif /* old or new */
#endif /* TRIE_STUDY_OPT */
@@ -6447,10 +6581,10 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
DEBUG_STUDYDATA("pre-fin", data, depth, is_inf);
*scanp = scan;
- *deltap = is_inf_internal ? SSize_t_MAX : delta;
+ *deltap = is_inf_internal ? OPTIMIZE_INFTY : delta;
if (flags & SCF_DO_SUBSTR && is_inf)
- data->pos_delta = SSize_t_MAX - data->pos_min;
+ data->pos_delta = OPTIMIZE_INFTY - data->pos_min;
if (is_par > (I32)U8_MAX)
is_par = 0;
if (is_par && pars==1 && data) {
@@ -6468,18 +6602,16 @@ Perl_re_printf( aTHX_ "LHS=%" UVuf " RHS=%" UVuf "\n",
DEBUG_STUDYDATA("post-fin", data, depth, is_inf);
- {
- SSize_t final_minlen= min < stopmin ? min : stopmin;
+ final_minlen = min < stopmin
+ ? min : stopmin;
- if (!(RExC_seen & REG_UNBOUNDED_QUANTIFIER_SEEN)) {
- if (final_minlen > SSize_t_MAX - delta)
- RExC_maxlen = SSize_t_MAX;
- else if (RExC_maxlen < final_minlen + delta)
- RExC_maxlen = final_minlen + delta;
- }
- return final_minlen;
+ if (!(RExC_seen & REG_UNBOUNDED_QUANTIFIER_SEEN)) {
+ if (final_minlen > OPTIMIZE_INFTY - delta)
+ RExC_maxlen = OPTIMIZE_INFTY;
+ else if (RExC_maxlen < final_minlen + delta)
+ RExC_maxlen = final_minlen + delta;
}
- NOT_REACHED; /* NOTREACHED */
+ return final_minlen;
}
STATIC U32
@@ -6587,7 +6719,7 @@ REGEXP *
Perl_pregcomp(pTHX_ SV * const pattern, const U32 flags)
{
regexp_engine const *eng = current_re_engine();
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_PREGCOMP;
@@ -6609,7 +6741,9 @@ REGEXP *
Perl_re_compile(pTHX_ SV * const pattern, U32 rx_flags)
{
SV *pat = pattern; /* defeat constness! */
+
PERL_ARGS_ASSERT_RE_COMPILE;
+
return Perl_re_op_compile(aTHX_ &pat, 1, NULL,
#ifdef PERL_IN_XSUB_RE
&my_reg_engine,
@@ -6619,7 +6753,6 @@ Perl_re_compile(pTHX_ SV * const pattern, U32 rx_flags)
NULL, NULL, rx_flags, 0);
}
-
static void
S_free_codeblocks(pTHX_ struct reg_code_blocks *cbs)
{
@@ -6671,7 +6804,7 @@ S_pat_upgrade_to_utf8(pTHX_ RExC_state_t * const pRExC_state,
int n=0;
STRLEN s = 0;
bool do_end = 0;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
DEBUG_PARSE_r(Perl_re_printf( aTHX_
"UTF8 mismatch! Converting to utf8 for resizing and compile\n"));
@@ -6798,7 +6931,7 @@ S_concat_pat(pTHX_ RExC_state_t * const pRExC_state,
/* we make the assumption here that each op in the list of
* op_siblings maps to one SV pushed onto the stack,
* except for code blocks, with have both an OP_NULL and
- * and OP_CONST.
+ * an OP_CONST.
* This allows us to match up the list of SVs against the
* list of OPs to find the next code block.
*
@@ -6848,7 +6981,7 @@ S_concat_pat(pTHX_ RExC_state_t * const pRExC_state,
pRExC_state->code_blocks->count -= n;
n = 0;
}
- else {
+ else {
/* ... or failing that, try "" overload */
while (SvAMAGIC(msv)
&& (sv = AMG_CALLunary(msv, string_amg))
@@ -7011,7 +7144,7 @@ S_compile_runtime_code(pTHX_ RExC_state_t * const pRExC_state,
{
SV *qr;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
if (pRExC_state->runtime_code_qr) {
/* this is the second time we've been called; this should
@@ -7308,7 +7441,7 @@ S_set_regex_pv(pTHX_ RExC_state_t *pRExC_state, REGEXP *Rx)
const char* name;
name = get_regex_charset_name(RExC_rx->extflags, &len);
- if strEQ(name, DEPENDS_PAT_MODS) { /* /d under UTF-8 => /u */
+ if (strEQ(name, DEPENDS_PAT_MODS)) { /* /d under UTF-8 => /u */
assert(RExC_utf8);
name = UNICODE_PAT_MODS;
len = sizeof(UNICODE_PAT_MODS) - 1;
@@ -7372,7 +7505,7 @@ S_set_regex_pv(pTHX_ RExC_state_t *pRExC_state, REGEXP *Rx)
*
* pm_flags contains the PMf_* flags, typically based on those from the
* pm_flags field of the related PMOP. Currently we're only interested in
- * PMf_HAS_CV, PMf_IS_QR, PMf_USE_RE_EVAL.
+ * PMf_HAS_CV, PMf_IS_QR, PMf_USE_RE_EVAL, PMf_WILDCARD.
*
* For many years this code had an initial sizing pass that calculated
* (sometimes incorrectly, leading to security holes) the size needed for the
@@ -7385,7 +7518,7 @@ S_set_regex_pv(pTHX_ RExC_state_t *pRExC_state, REGEXP *Rx)
* length of the pattern. Patches welcome to improve that guess. That amount
* of space is malloc'd and then immediately freed, and then clawed back node
* by node. This design is to minimze, to the extent possible, memory churn
- * when doing the the reallocs.
+ * when doing the reallocs.
*
* A separate parentheses counting pass may be needed in some cases.
* (Previously the sizing pass did this.) Patches welcome to reduce the number
@@ -7431,34 +7564,12 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
int restudied = 0;
RExC_state_t copyRExC_state;
#endif
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_RE_OP_COMPILE;
DEBUG_r(if (!PL_colorset) reginitcolors());
- /* Initialize these here instead of as-needed, as is quick and avoids
- * having to test them each time otherwise */
- if (! PL_InBitmap) {
-#ifdef DEBUGGING
- char * dump_len_string;
-#endif
-
- /* This is calculated here, because the Perl program that generates the
- * static global ones doesn't currently have access to
- * NUM_ANYOF_CODE_POINTS */
- PL_InBitmap = _new_invlist(2);
- PL_InBitmap = _add_range_to_invlist(PL_InBitmap, 0,
- NUM_ANYOF_CODE_POINTS - 1);
-#ifdef DEBUGGING
- dump_len_string = PerlEnv_getenv("PERL_DUMP_RE_MAX_LEN");
- if ( ! dump_len_string
- || ! grok_atoUV(dump_len_string, (UV *)&PL_dump_re_max_len, NULL))
- {
- PL_dump_re_max_len = 60; /* A reasonable default */
- }
-#endif
- }
pRExC_state->warn_text = NULL;
pRExC_state->unlexed_names = NULL;
@@ -7579,6 +7690,8 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
RExC_frame_count= 0;
RExC_latest_warn_offset = 0;
RExC_use_BRANCHJ = 0;
+ RExC_warned_WARN_EXPERIMENTAL__VLB = 0;
+ RExC_warned_WARN_EXPERIMENTAL__REGEX_SETS = 0;
RExC_total_parens = 0;
RExC_open_parens = NULL;
RExC_close_parens = NULL;
@@ -7628,6 +7741,12 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
&& memEQ(RX_PRECOMP(old_re), exp, plen)
&& !runtime_code /* with runtime code, always recompile */ )
{
+ DEBUG_COMPILE_r({
+ SV *dsv= sv_newmortal();
+ RE_PV_QUOTED_DECL(s, RExC_utf8, dsv, exp, plen, PL_dump_re_max_len);
+ Perl_re_printf( aTHX_ "%sSkipping recompilation of unchanged REx%s %s\n",
+ PL_colors[4], PL_colors[5], s);
+ });
return old_re;
}
@@ -7639,7 +7758,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
rx_flags = orig_rx_flags;
- if ( (UTF || RExC_uni_semantics)
+ if ( toUSE_UNI_CHARSET_NOT_DEPENDS
&& initial_charset == REGEX_DEPENDS_CHARSET)
{
@@ -7670,11 +7789,9 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
RExC_seen = 0;
RExC_maxlen = 0;
- RExC_in_lookbehind = 0;
+ RExC_in_lookaround = 0;
RExC_seen_zerolen = *exp == '^' ? -1 : 0;
-#ifdef EBCDIC
RExC_recode_x_to_native = 0;
-#endif
RExC_in_multi_char_class = 0;
RExC_start = RExC_copy_start_in_constructed = RExC_copy_start_in_input = RExC_precomp = exp;
@@ -7686,6 +7803,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
RExC_study_chunk_recursed = NULL;
RExC_study_chunk_recursed_bytes= 0;
RExC_recurse_count = 0;
+ RExC_sets_depth = 0;
pRExC_state->code_index = 0;
/* Initialize the string in the compiled pattern. This is so that there is
@@ -7877,7 +7995,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
DEBUG_OFFSETS_r(if (RExC_offsets) {
const STRLEN len = RExC_offsets[0];
STRLEN i;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
Perl_re_printf( aTHX_
"Offsets: [%" UVuf "]\n\t", (UV)RExC_offsets[0]);
for (i = 1; i <= len; i++) {
@@ -7892,6 +8010,16 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
SetProgLen(RExC_rxi,RExC_size);
#endif
+ DEBUG_DUMP_PRE_OPTIMIZE_r({
+ SV * const sv = sv_newmortal();
+ RXi_GET_DECL(RExC_rx, ri);
+ DEBUG_RExC_seen();
+ Perl_re_printf( aTHX_ "Program before optimization:\n");
+
+ (void)dumpuntil(RExC_rx, ri->program, ri->program + 1, NULL, NULL,
+ sv, 0, 0);
+ });
+
DEBUG_OPTIMISE_r(
Perl_re_printf( aTHX_ "Starting post parse optimization\n");
);
@@ -8014,7 +8142,9 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
/* Ignore EXACT as we deal with it later. */
if (PL_regkind[OP(first)] == EXACT) {
if ( OP(first) == EXACT
- || OP(first) == EXACT_ONLY8
+ || OP(first) == LEXACT
+ || OP(first) == EXACT_REQ8
+ || OP(first) == LEXACT_REQ8
|| OP(first) == EXACTL)
{
NOOP; /* Empty, get anchored substr later. */
@@ -8162,7 +8292,7 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
RExC_rx->substrs->data[i].max_offset = data.substrs[i].max_offset;
/* Don't offset infinity */
- if (data.substrs[i].max_offset < SSize_t_MAX)
+ if (data.substrs[i].max_offset < OPTIMIZE_INFTY)
RExC_rx->substrs->data[i].max_offset -= data.substrs[i].lookbehind;
SvREFCNT_inc_simple_void_NN(data.substrs[i].str);
}
@@ -8360,7 +8490,9 @@ Perl_re_op_compile(pTHX_ SV ** const patternp, int pat_count,
&& nop == END)
RExC_rx->extflags |= RXf_WHITE;
else if ( RExC_rx->extflags & RXf_SPLIT
- && (fop == EXACT || fop == EXACT_ONLY8 || fop == EXACTL)
+ && ( fop == EXACT || fop == LEXACT
+ || fop == EXACT_REQ8 || fop == LEXACT_REQ8
+ || fop == EXACTL)
&& STR_LEN(first) == 1
&& *(STRING(first)) == ' '
&& nop == END )
@@ -8559,7 +8691,7 @@ SV*
Perl_reg_named_buff_nextkey(pTHX_ REGEXP * const r, const U32 flags)
{
struct regexp *const rx = ReANY(r);
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REG_NAMED_BUFF_NEXTKEY;
@@ -8704,8 +8836,8 @@ Perl_reg_numbered_buff_fetch(pTHX_ REGEXP * const r, const I32 paren,
i = rx->sublen + rx->suboffset - rx->offs[0].end;
}
else
- if ( 0 <= n && n <= (I32)rx->nparens &&
- (s1 = rx->offs[n].start) != -1 &&
+ if (inRANGE(n, 0, (I32)rx->nparens) &&
+ (s1 = rx->offs[n].start) != -1 &&
(t1 = rx->offs[n].end) != -1)
{
/* $&, ${^MATCH}, $1 ... */
@@ -8846,7 +8978,7 @@ Perl_reg_numbered_buff_length(pTHX_ REGEXP * const r, const SV * const sv,
i = t1 - s1;
if (is_utf8_string_loclen((U8*)s, i, &ep, &el))
- i = el;
+ i = el;
}
return i;
}
@@ -8950,7 +9082,7 @@ S_reg_scan_name(pTHX_ RExC_state_t *pRExC_state, U32 flags)
Perl_re_printf( aTHX_ "%16s",""); \
\
if (RExC_lastnum!=RExC_emit) \
- Perl_re_printf( aTHX_ "|%4d", RExC_emit); \
+ Perl_re_printf( aTHX_ "|%4zu", RExC_emit); \
else \
Perl_re_printf( aTHX_ "|%4s",""); \
Perl_re_printf( aTHX_ "|%*s%-4s", \
@@ -9058,23 +9190,6 @@ S__invlist_array_init(SV* const invlist, const bool will_have_0)
return zero_addr + *offset;
}
-PERL_STATIC_INLINE void
-S_invlist_set_len(pTHX_ SV* const invlist, const UV len, const bool offset)
-{
- /* Sets the current number of elements stored in the inversion list.
- * Updates SvCUR correspondingly */
- PERL_UNUSED_CONTEXT;
- PERL_ARGS_ASSERT_INVLIST_SET_LEN;
-
- assert(is_invlist(invlist));
-
- SvCUR_set(invlist,
- (len == 0)
- ? 0
- : TO_INTERNAL_SIZE(len + offset));
- assert(SvLEN(invlist) == 0 || SvCUR(invlist) <= SvLEN(invlist));
-}
-
STATIC void
S_invlist_replace_list_destroys_src(pTHX_ SV * dest, SV * src)
{
@@ -9225,6 +9340,7 @@ S_initialize_invlist_guts(pTHX_ SV* invlist, const Size_t initial_size)
invlist_iterfinish(invlist);
*get_invlist_previous_index_addr(invlist) = 0;
+ SvPOK_on(invlist); /* This allows B to extract the PV */
}
SV*
@@ -9299,25 +9415,12 @@ Perl__new_invlist_C_array(pTHX_ const UV* const list)
invlist_iterfinish(invlist);
SvREADONLY_on(invlist);
+ SvPOK_on(invlist);
return invlist;
}
STATIC void
-S_invlist_extend(pTHX_ SV* const invlist, const UV new_max)
-{
- /* Grow the maximum size of an inversion list */
-
- PERL_ARGS_ASSERT_INVLIST_EXTEND;
-
- assert(is_invlist(invlist));
-
- /* Add one to account for the zero element at the beginning which may not
- * be counted by the calling parameters */
- SvGROW((SV *)invlist, TO_INTERNAL_SIZE(new_max + 1));
-}
-
-STATIC void
S__append_range_to_invlist(pTHX_ SV* const invlist,
const UV start, const UV end)
{
@@ -9658,7 +9761,7 @@ Perl__invlist_union_maybe_complement_2nd(pTHX_ SV* const a, SV* const b,
* one of them */
while (i_a < len_a && i_b < len_b) {
UV cp; /* The element to potentially add to the union's array */
- bool cp_in_set; /* is it in the the input list's set or not */
+ bool cp_in_set; /* is it in the input list's set or not */
/* We need to take one or the other of the two inputs for the union.
* Since we are merging two sorted lists, we take the smaller of the
@@ -10303,11 +10406,6 @@ Perl__setup_canned_invlist(pTHX_ const STRLEN size, const UV element0,
#endif
-PERL_STATIC_INLINE SV*
-S_add_cp_to_invlist(pTHX_ SV* invlist, const UV cp) {
- return _add_range_to_invlist(invlist, cp, cp);
-}
-
#ifndef PERL_IN_XSUB_RE
void
Perl__invlist_invert(pTHX_ SV* const invlist)
@@ -10358,106 +10456,26 @@ Perl_invlist_clone(pTHX_ SV* const invlist, SV* new_invlist)
#endif
-PERL_STATIC_INLINE STRLEN*
-S_get_invlist_iter_addr(SV* invlist)
-{
- /* Return the address of the UV that contains the current iteration
- * position */
-
- PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR;
-
- assert(is_invlist(invlist));
-
- return &(((XINVLIST*) SvANY(invlist))->iterator);
-}
-
-PERL_STATIC_INLINE void
-S_invlist_iterinit(SV* invlist) /* Initialize iterator for invlist */
-{
- PERL_ARGS_ASSERT_INVLIST_ITERINIT;
-
- *get_invlist_iter_addr(invlist) = 0;
-}
-
-PERL_STATIC_INLINE void
-S_invlist_iterfinish(SV* invlist)
-{
- /* Terminate iterator for invlist. This is to catch development errors.
- * Any iteration that is interrupted before completed should call this
- * function. Functions that add code points anywhere else but to the end
- * of an inversion list assert that they are not in the middle of an
- * iteration. If they were, the addition would make the iteration
- * problematical: if the iteration hadn't reached the place where things
- * were being added, it would be ok */
-
- PERL_ARGS_ASSERT_INVLIST_ITERFINISH;
-
- *get_invlist_iter_addr(invlist) = (STRLEN) UV_MAX;
-}
-
-STATIC bool
-S_invlist_iternext(SV* invlist, UV* start, UV* end)
-{
- /* An C<invlist_iterinit> call on <invlist> must be used to set this up.
- * This call sets in <*start> and <*end>, the next range in <invlist>.
- * Returns <TRUE> if successful and the next call will return the next
- * range; <FALSE> if was already at the end of the list. If the latter,
- * <*start> and <*end> are unchanged, and the next call to this function
- * will start over at the beginning of the list */
-
- STRLEN* pos = get_invlist_iter_addr(invlist);
- UV len = _invlist_len(invlist);
- UV *array;
-
- PERL_ARGS_ASSERT_INVLIST_ITERNEXT;
-
- if (*pos >= len) {
- *pos = (STRLEN) UV_MAX; /* Force iterinit() to be required next time */
- return FALSE;
- }
-
- array = invlist_array(invlist);
-
- *start = array[(*pos)++];
-
- if (*pos >= len) {
- *end = UV_MAX;
- }
- else {
- *end = array[(*pos)++] - 1;
- }
-
- return TRUE;
-}
-
PERL_STATIC_INLINE UV
-S_invlist_highest(SV* const invlist)
+S_invlist_lowest(SV* const invlist)
{
- /* Returns the highest code point that matches an inversion list. This API
- * has an ambiguity, as it returns 0 under either the highest is actually
+ /* Returns the lowest code point that matches an inversion list. This API
+ * has an ambiguity, as it returns 0 under either the lowest is actually
* 0, or if the list is empty. If this distinction matters to you, check
* for emptiness before calling this function */
UV len = _invlist_len(invlist);
UV *array;
- PERL_ARGS_ASSERT_INVLIST_HIGHEST;
+ PERL_ARGS_ASSERT_INVLIST_LOWEST;
if (len == 0) {
- return 0;
+ return 0;
}
array = invlist_array(invlist);
- /* The last element in the array in the inversion list always starts a
- * range that goes to infinity. That range may be for code points that are
- * matched in the inversion list, or it may be for ones that aren't
- * matched. In the latter case, the highest code point in the set is one
- * less than the beginning of this range; otherwise it is the final element
- * of this range: infinity */
- return (ELEMENT_RANGE_MATCHES_INVLIST(len - 1))
- ? UV_MAX
- : array[len - 1] - 1;
+ return array[0];
}
STATIC SV *
@@ -10638,7 +10656,7 @@ Perl__invlistEQ(pTHX_ SV* const a, SV* const b, const bool complement_b)
* call SvREFCNT_dec() when done with it.
*/
STATIC SV*
-S__make_exactf_invlist(pTHX_ RExC_state_t *pRExC_state, regnode *node)
+S_make_exactf_invlist(pTHX_ RExC_state_t *pRExC_state, regnode *node)
{
dVAR;
const U8 * s = (U8*)STRING(node);
@@ -10647,7 +10665,7 @@ S__make_exactf_invlist(pTHX_ RExC_state_t *pRExC_state, regnode *node)
/* Start out big enough for 2 separate code points */
SV* invlist = _new_invlist(4);
- PERL_ARGS_ASSERT__MAKE_EXACTF_INVLIST;
+ PERL_ARGS_ASSERT_MAKE_EXACTF_INVLIST;
if (! UTF) {
uc = *s;
@@ -10701,7 +10719,7 @@ S__make_exactf_invlist(pTHX_ RExC_state_t *pRExC_state, regnode *node)
fc = uc = utf8_to_uvchr_buf(s, s + bytelen, NULL);
/* The only code points that aren't folded in a UTF EXACTFish
- * node are are the problematic ones in EXACTFL nodes */
+ * node are the problematic ones in EXACTFL nodes */
if (OP(node) == EXACTFL && is_PROBLEMATIC_LOCALE_FOLDEDS_START_cp(uc)) {
/* We need to check for the possibility that this EXACTFL
* node begins with a multi-char fold. Therefore we fold
@@ -10753,8 +10771,8 @@ S__make_exactf_invlist(pTHX_ RExC_state_t *pRExC_state, regnode *node)
}
else { /* Single char fold */
unsigned int k;
- unsigned int first_fold;
- const unsigned int * remaining_folds;
+ U32 first_fold;
+ const U32 * remaining_folds;
Size_t folds_count;
/* It matches itself */
@@ -10841,7 +10859,7 @@ S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
RExC_parse++;
has_use_defaults = TRUE;
STD_PMMOD_FLAGS_CLEAR(&RExC_flags);
- cs = (RExC_uni_semantics)
+ cs = (toUSE_UNI_CHARSET_NOT_DEPENDS)
? REGEX_UNICODE_CHARSET
: REGEX_DEPENDS_CHARSET;
set_regex_charset(&RExC_flags, cs);
@@ -10849,16 +10867,34 @@ S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
else {
cs = get_regex_charset(RExC_flags);
if ( cs == REGEX_DEPENDS_CHARSET
- && RExC_uni_semantics)
+ && (toUSE_UNI_CHARSET_NOT_DEPENDS))
{
cs = REGEX_UNICODE_CHARSET;
}
}
while (RExC_parse < RExC_end) {
- /* && strchr("iogcmsx", *RExC_parse) */
+ /* && memCHRs("iogcmsx", *RExC_parse) */
/* (?g), (?gc) and (?o) are useless here
and must be globally applied -- japhy */
+ if ((RExC_pm_flags & PMf_WILDCARD)) {
+ if (flagsp == & negflags) {
+ if (*RExC_parse == 'm') {
+ RExC_parse++;
+ /* diag_listed_as: Use of %s is not allowed in Unicode
+ property wildcard subpatterns in regex; marked by <--
+ HERE in m/%s/ */
+ vFAIL("Use of modifier '-m' is not allowed in Unicode"
+ " property wildcard subpatterns");
+ }
+ }
+ else {
+ if (*RExC_parse == 's') {
+ goto modifier_illegal_in_wildcard;
+ }
+ }
+ }
+
switch (*RExC_parse) {
/* Code for the imsxn flags */
@@ -10915,7 +10951,7 @@ S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
* pattern (or target, not known until runtime) are
* utf8, or something in the pattern indicates unicode
* semantics */
- cs = (RExC_uni_semantics)
+ cs = (toUSE_UNI_CHARSET_NOT_DEPENDS)
? REGEX_UNICODE_CHARSET
: REGEX_DEPENDS_CHARSET;
has_charset_modifier = DEPENDS_PAT_MOD;
@@ -10938,8 +10974,12 @@ S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
vFAIL2("Regexp modifier \"%c\" may not appear after the \"-\"",
*(RExC_parse - 1));
NOT_REACHED; /*NOTREACHED*/
- case ONCE_PAT_MOD: /* 'o' */
case GLOBAL_PAT_MOD: /* 'g' */
+ if (RExC_pm_flags & PMf_WILDCARD) {
+ goto modifier_illegal_in_wildcard;
+ }
+ /*FALLTHROUGH*/
+ case ONCE_PAT_MOD: /* 'o' */
if (ckWARN(WARN_REGEXP)) {
const I32 wflagbit = *RExC_parse == 'o'
? WASTED_O
@@ -10960,6 +11000,9 @@ S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
break;
case CONTINUE_PAT_MOD: /* 'c' */
+ if (RExC_pm_flags & PMf_WILDCARD) {
+ goto modifier_illegal_in_wildcard;
+ }
if (ckWARN(WARN_REGEXP)) {
if (! (wastedflags & WASTED_C) ) {
wastedflags |= WASTED_GC;
@@ -10974,6 +11017,9 @@ S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
}
break;
case KEEPCOPY_PAT_MOD: /* 'p' */
+ if (RExC_pm_flags & PMf_WILDCARD) {
+ goto modifier_illegal_in_wildcard;
+ }
if (flagsp == &negflags) {
ckWARNreg(RExC_parse + 1,"Useless use of (?-p)");
} else {
@@ -10994,6 +11040,18 @@ S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
case ':':
case ')':
+ if ( (RExC_pm_flags & PMf_WILDCARD)
+ && cs != REGEX_ASCII_MORE_RESTRICTED_CHARSET)
+ {
+ RExC_parse++;
+ /* diag_listed_as: Use of %s is not allowed in Unicode
+ property wildcard subpatterns in regex; marked by <--
+ HERE in m/%s/ */
+ vFAIL2("Use of modifier '%c' is not allowed in Unicode"
+ " property wildcard subpatterns",
+ has_charset_modifier);
+ }
+
if ((posflags & (RXf_PMf_EXTENDED|RXf_PMf_EXTENDED_MORE)) == RXf_PMf_EXTENDED) {
negflags |= RXf_PMf_EXTENDED_MORE;
}
@@ -11019,6 +11077,13 @@ S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
}
vFAIL("Sequence (?... not terminated");
+
+ modifier_illegal_in_wildcard:
+ RExC_parse++;
+ /* diag_listed_as: Use of %s is not allowed in Unicode property wildcard
+ subpatterns in regex; marked by <-- HERE in m/%s/ */
+ vFAIL2("Use of modifier '%c' is not allowed in Unicode property wildcard"
+ " subpatterns", *(RExC_parse - 1));
}
/*
@@ -11037,7 +11102,7 @@ S_parse_lparen_question_flags(pTHX_ RExC_state_t *pRExC_state)
#define REGTAIL_STUDY(x,y,z) regtail((x),(y),(z),depth+1)
#endif
-PERL_STATIC_INLINE regnode_offset
+STATIC regnode_offset
S_handle_named_backref(pTHX_ RExC_state_t *pRExC_state,
I32 *flagp,
char * parse_start,
@@ -11048,7 +11113,7 @@ S_handle_named_backref(pTHX_ RExC_state_t *pRExC_state,
char* name_start = RExC_parse;
U32 num = 0;
SV *sv_dat = reg_scan_name(pRExC_state, REG_RSN_RETURN_DATA);
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_HANDLE_NAMED_BACKREF;
@@ -11065,14 +11130,14 @@ S_handle_named_backref(pTHX_ RExC_state_t *pRExC_state,
RExC_sawback = 1;
ret = reganode(pRExC_state,
((! FOLD)
- ? NREF
+ ? REFN
: (ASCII_FOLD_RESTRICTED)
- ? NREFFA
+ ? REFFAN
: (AT_LEAST_UNI_SEMANTICS)
- ? NREFFU
+ ? REFFUN
: (LOC)
- ? NREFFL
- : NREFF),
+ ? REFFLN
+ : REFFN),
num);
*flagp |= HASWIDTH;
@@ -11112,16 +11177,16 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
I32 after_freeze = 0;
I32 num; /* numeric backreferences */
SV * max_open; /* Max number of unclosed parens */
+ I32 was_in_lookaround = RExC_in_lookaround;
char * parse_start = RExC_parse; /* MJD */
char * const oregcomp_parse = RExC_parse;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REG;
DEBUG_PARSE("reg ");
-
max_open = get_sv(RE_COMPILE_RECURSION_LIMIT, GV_ADD);
assert(max_open);
if (!SvIOK(max_open)) {
@@ -11347,12 +11412,6 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
goto parse_rest;
}
- /* By doing this here, we avoid extra warnings for nested
- * script runs */
- ckWARNexperimental(RExC_parse,
- WARN_EXPERIMENTAL__SCRIPT_RUN,
- "The script_run feature is experimental");
-
if (paren == 's') {
/* Here, we're starting a new regular script run */
ret = reg_node(pRExC_state, SROPEN);
@@ -11393,14 +11452,11 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
lookbehind_alpha_assertions:
RExC_seen |= REG_LOOKBEHIND_SEEN;
- RExC_in_lookbehind++;
/*FALLTHROUGH*/
alpha_assertions:
- ckWARNexperimental(RExC_parse,
- WARN_EXPERIMENTAL__ALPHA_ASSERTIONS,
- "The alpha_assertions feature is experimental");
+ RExC_in_lookaround++;
RExC_seen_zerolen++;
if (! start_arg) {
@@ -11444,7 +11500,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
}
if ( arg_required && !start_arg ) {
vFAIL3("Verb pattern '%.*s' has a mandatory argument",
- verb_len, start_verb);
+ (int) verb_len, start_verb);
}
if (internal_argval == -1) {
ret = reganode(pRExC_state, op, 0);
@@ -11471,6 +11527,10 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
bool is_logical = 0;
const char * const seqstart = RExC_parse;
const char * endptr;
+ const char non_existent_group_msg[]
+ = "Reference to nonexistent group";
+ const char impossible_group[] = "Invalid reference to group";
+
if (has_intervening_patws) {
RExC_parse++;
vFAIL("In '(?...)', the '(' and '?' must be adjacent");
@@ -11510,9 +11570,10 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
RExC_parse += SKIP_IF_CHAR(RExC_parse, RExC_end);
/* diag_listed_as: Sequence (?%s...) not recognized in regex; marked by <-- HERE in m/%s/ */
vFAIL3("Sequence (%.*s...) not recognized",
- RExC_parse-seqstart, seqstart);
+ (int) (RExC_parse - seqstart), seqstart);
NOT_REACHED; /*NOTREACHED*/
case '<': /* (?<...) */
+ /* If you want to support (?<*...), first reconcile with GH #17363 */
if (*RExC_parse == '!')
paren = ',';
else if (*RExC_parse != '=')
@@ -11530,7 +11591,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
|| *RExC_parse != paren)
{
vFAIL2("Sequence (?%c... not terminated",
- paren=='>' ? '<' : paren);
+ paren=='>' ? '<' : (char) paren);
}
{
HE *he_str;
@@ -11598,15 +11659,16 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
}
RExC_seen |= REG_LOOKBEHIND_SEEN;
- RExC_in_lookbehind++;
+ RExC_in_lookaround++;
RExC_parse++;
if (RExC_parse >= RExC_end) {
vFAIL("Sequence (?... not terminated");
}
-
- /* FALLTHROUGH */
+ RExC_seen_zerolen++;
+ break;
case '=': /* (?=...) */
RExC_seen_zerolen++;
+ RExC_in_lookaround++;
break;
case '!': /* (?!...) */
RExC_seen_zerolen++;
@@ -11618,6 +11680,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
nextchar(pRExC_state);
return ret;
}
+ RExC_in_lookaround++;
break;
case '|': /* (?|...) */
/* branch reset, behave like a (?:...) except that
@@ -11695,10 +11758,17 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
) {
num = (I32)unum;
RExC_parse = (char*)endptr;
- } else
- num = I32_MAX;
+ }
+ else { /* Overflow, or something like that. Position
+ beyond all digits for the message */
+ while (RExC_parse < RExC_end && isDIGIT(*RExC_parse)) {
+ RExC_parse++;
+ }
+ vFAIL(impossible_group);
+ }
if (is_neg) {
- /* Some limit for num? */
+ /* -num is always representable on 1 and 2's complement
+ * machines */
num = -num;
}
}
@@ -11706,45 +11776,43 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
vFAIL("Expecting close bracket");
gen_recurse_regop:
- if ( paren == '-' ) {
+ if (paren == '-' || paren == '+') {
+
+ /* Don't overflow */
+ if (UNLIKELY(I32_MAX - RExC_npar < num)) {
+ RExC_parse++;
+ vFAIL(impossible_group);
+ }
+
/*
Diagram of capture buffer numbering.
Top line is the normal capture buffer numbers
Bottom line is the negative indexing as from
the X (the (?-2))
- + 1 2 3 4 5 X 6 7
+ 1 2 3 4 5 X Y 6 7
+ /(a(x)y)(a(b(c(?+2)d)e)f)(g(h))/
/(a(x)y)(a(b(c(?-2)d)e)f)(g(h))/
- - 5 4 3 2 1 X x x
+ - 5 4 3 2 1 X Y x x
+ Resolve to absolute group. Recall that RExC_npar is +1 of
+ the actual parenthesis group number. For lookahead, we
+ have to compensate for that. Using the above example, when
+ we get to Y in the parse, num is 2 and RExC_npar is 6. We
+ want 7 for +2, and 4 for -2.
*/
- num = RExC_npar + num;
- if (num < 1) {
+ if ( paren == '+' ) {
+ num--;
+ }
- /* It might be a forward reference; we can't fail until
- * we know, by completing the parse to get all the
- * groups, and then reparsing */
- if (ALL_PARENS_COUNTED) {
- RExC_parse++;
- vFAIL("Reference to nonexistent group");
- }
- else {
- REQUIRE_PARENS_PASS;
- }
+ num += RExC_npar;
+
+ if (paren == '-' && num < 1) {
+ RExC_parse++;
+ vFAIL(non_existent_group_msg);
}
- } else if ( paren == '+' ) {
- num = RExC_npar + num - 1;
}
- /* We keep track how many GOSUB items we have produced.
- To start off the ARG2L() of the GOSUB holds its "id",
- which is used later in conjunction with RExC_recurse
- to calculate the offset we need to jump for the GOSUB,
- which it will store in the final representation.
- We have to defer the actual calculation until much later
- as the regop may move.
- */
- ret = reg2Lanode(pRExC_state, GOSUB, num, RExC_recurse_count);
if (num >= RExC_npar) {
/* It might be a forward reference; we can't fail until we
@@ -11753,13 +11821,23 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
if (ALL_PARENS_COUNTED) {
if (num >= RExC_total_parens) {
RExC_parse++;
- vFAIL("Reference to nonexistent group");
+ vFAIL(non_existent_group_msg);
}
}
else {
REQUIRE_PARENS_PASS;
}
}
+
+ /* We keep track how many GOSUB items we have produced.
+ To start off the ARG2L() of the GOSUB holds its "id",
+ which is used later in conjunction with RExC_recurse
+ to calculate the offset we need to jump for the GOSUB,
+ which it will store in the final representation.
+ We have to defer the actual calculation until much later
+ as the regop may move.
+ */
+ ret = reg2Lanode(pRExC_state, GOSUB, num, RExC_recurse_count);
RExC_recurse_count++;
DEBUG_OPTIMISE_MORE_r(Perl_re_printf( aTHX_
"%*s%*s Recurse #%" UVuf " to %" IVdf "\n",
@@ -11922,7 +12000,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
RExC_rxi->data->data[num]=(void*)sv_dat;
SvREFCNT_inc_simple_void_NN(sv_dat);
}
- ret = reganode(pRExC_state, NGROUPP, num);
+ ret = reganode(pRExC_state, GROUPPN, num);
goto insert_if_check_paren;
}
else if (memBEGINs(RExC_parse,
@@ -12085,6 +12163,8 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
ckWARNreg(RExC_parse, "Empty (?) without any modifiers");
}
/* FALLTHROUGH */
+ case '*': /* If you want to support (?*...), first reconcile with GH #17363 */
+ /* FALLTHROUGH */
default: /* e.g., (?i) */
RExC_parse = (char *) seqstart + 1;
parse_flags:
@@ -12101,16 +12181,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
goto parse_rest;
} /* end switch */
}
- else {
- if (*RExC_parse == '{') {
- ckWARNregdep(RExC_parse + 1,
- "Unescaped left brace in regex is "
- "deprecated here (and will be fatal "
- "in Perl 5.32), passed through");
- }
- /* Not bothering to indent here, as the above 'else' is temporary
- * */
- if (!(RExC_flags & RXf_PMf_NOCAPTURE)) { /* (...) */
+ else if (!(RExC_flags & RXf_PMf_NOCAPTURE)) { /* (...) */
capturing_parens:
parno = RExC_npar;
RExC_npar++;
@@ -12164,7 +12235,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
if (RExC_open_parens && !RExC_open_parens[parno])
{
DEBUG_OPTIMISE_MORE_r(Perl_re_printf( aTHX_
- "%*s%*s Setting open paren #%" IVdf " to %d\n",
+ "%*s%*s Setting open paren #%" IVdf " to %zu\n",
22, "| |", (int)(depth * 2 + 1), "",
(IV)parno, ret));
RExC_open_parens[parno]= ret;
@@ -12177,7 +12248,6 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
/* with RXf_PMf_NOCAPTURE treat (...) as (?:...) */
paren = ':';
ret = 0;
- }
}
}
else /* ! paren */
@@ -12260,7 +12330,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
ender = reganode(pRExC_state, CLOSE, parno);
if ( RExC_close_parens ) {
DEBUG_OPTIMISE_MORE_r(Perl_re_printf( aTHX_
- "%*s%*s Setting close paren #%" IVdf " to %d\n",
+ "%*s%*s Setting close paren #%" IVdf " to %zu\n",
22, "| |", (int)(depth * 2 + 1), "",
(IV)parno, ender));
RExC_close_parens[parno]= ender;
@@ -12294,7 +12364,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
RExC_end_op = REGNODE_p(ender);
if (RExC_close_parens) {
DEBUG_OPTIMISE_MORE_r(Perl_re_printf( aTHX_
- "%*s%*s Setting close paren #0 (END) to %d\n",
+ "%*s%*s Setting close paren #0 (END) to %zu\n",
22, "| |", (int)(depth * 2 + 1), "",
ender));
@@ -12412,7 +12482,7 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
/* restore original flags, but keep (?p) and, if we've encountered
* something in the parse that changes /d rules into /u, keep the /u */
RExC_flags = oregflags | (RExC_flags & RXf_PMf_KEEPCOPY);
- if (DEPENDS_SEMANTICS && RExC_uni_semantics) {
+ if (DEPENDS_SEMANTICS && toUSE_UNI_CHARSET_NOT_DEPENDS) {
set_regex_charset(&RExC_flags, REGEX_UNICODE_CHARSET);
}
if (RExC_parse >= RExC_end || UCHARAT(RExC_parse) != ')') {
@@ -12431,11 +12501,11 @@ S_reg(pTHX_ RExC_state_t *pRExC_state, I32 paren, I32 *flagp, U32 depth)
NOT_REACHED; /* NOTREACHED */
}
- if (RExC_in_lookbehind) {
- RExC_in_lookbehind--;
- }
if (after_freeze > RExC_npar)
RExC_npar = after_freeze;
+
+ RExC_in_lookaround = was_in_lookaround;
+
return(ret);
}
@@ -12458,7 +12528,7 @@ S_regbranch(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, I32 first, U32 depth)
regnode_offset chain = 0;
regnode_offset latest;
I32 flags = 0, c = 0;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGBRANCH;
@@ -12555,7 +12625,7 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
/* Save the original in case we change the emitted regop to a FAIL. */
const regnode_offset orig_emit = RExC_emit;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGPIECE;
@@ -12633,6 +12703,23 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
do_curly:
if ((flags&SIMPLE)) {
if (min == 0 && max == REG_INFTY) {
+
+ /* Going from 0..inf is currently forbidden in wildcard
+ * subpatterns. The only reason is to make it harder to
+ * write patterns that take a long long time to halt, and
+ * because the use of this construct isn't necessary in
+ * matching Unicode property values */
+ if (RExC_pm_flags & PMf_WILDCARD) {
+ RExC_parse++;
+ /* diag_listed_as: Use of %s is not allowed in Unicode
+ property wildcard subpatterns in regex; marked by
+ <-- HERE in m/%s/ */
+ vFAIL("Use of quantifier '*' is not allowed in"
+ " Unicode property wildcard subpatterns");
+ /* Note, don't need to worry about {0,}, as a '}' isn't
+ * legal at all in wildcards, so wouldn't get this far
+ * */
+ }
reginsert(pRExC_state, STAR, ret, depth+1);
MARK_NAUGHTY(4);
RExC_seen |= REG_UNBOUNDED_QUANTIFIER_SEEN;
@@ -12735,12 +12822,22 @@ S_regpiece(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
}
nest_check:
if (!(flags&(HASWIDTH|POSTPONED)) && max > REG_INFTY/3) {
- ckWARN2reg(RExC_parse,
- "%" UTF8f " matches null string many times",
- UTF8fARG(UTF, (RExC_parse >= origparse
- ? RExC_parse - origparse
- : 0),
- origparse));
+ if (origparse[0] == '\\' && origparse[1] == 'K') {
+ vFAIL2utf8f(
+ "%" UTF8f " is forbidden - matches null string many times",
+ UTF8fARG(UTF, (RExC_parse >= origparse
+ ? RExC_parse - origparse
+ : 0),
+ origparse));
+ /* NOT-REACHED */
+ } else {
+ ckWARN2reg(RExC_parse,
+ "%" UTF8f " matches null string many times",
+ UTF8fARG(UTF, (RExC_parse >= origparse
+ ? RExC_parse - origparse
+ : 0),
+ origparse));
+ }
}
if (*RExC_parse == '?') {
@@ -12869,12 +12966,10 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
char *save_start;
I32 flags;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_GROK_BSLASH_N;
- GET_RE_DEBUG_FLAGS;
-
assert(cBOOL(node_p) ^ cBOOL(code_point_p)); /* Exactly one should be set */
assert(! (node_p && cp_count)); /* At most 1 should be set */
@@ -13002,9 +13097,9 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
value = (U8 *) SvPV(value_sv, value_len);
/* See if the result is one code point vs 0 or multiple */
- if (value_len > 0 && value_len <= (UV) ((SvUTF8(value_sv))
- ? UTF8SKIP(value)
- : 1))
+ if (inRANGE(value_len, 1, ((UV) SvUTF8(value_sv)
+ ? UTF8SKIP(value)
+ : 1)))
{
/* Here, exactly one code point. If that isn't what is wanted,
* fail */
@@ -13055,11 +13150,9 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
sv_catsv(substitute_parse, value_sv);
sv_catpv(substitute_parse, ")");
-#ifdef EBCDIC
/* The value should already be native, so no need to convert on EBCDIC
* platforms.*/
assert(! RExC_recode_x_to_native);
-#endif
}
else { /* \N{U+...} */
@@ -13075,48 +13168,30 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
* thing. */
do { /* Loop until the ending brace */
- UV cp = 0;
- char * start_digit; /* The first of the current code point */
- if (! isXDIGIT(*RExC_parse)) {
+ I32 flags = PERL_SCAN_SILENT_OVERFLOW
+ | PERL_SCAN_SILENT_ILLDIGIT
+ | PERL_SCAN_NOTIFY_ILLDIGIT
+ | PERL_SCAN_ALLOW_MEDIAL_UNDERSCORES
+ | PERL_SCAN_DISALLOW_PREFIX;
+ STRLEN len = endbrace - RExC_parse;
+ NV overflow_value;
+ char * start_digit = RExC_parse;
+ UV cp = grok_hex(RExC_parse, &len, &flags, &overflow_value);
+
+ if (len == 0) {
RExC_parse++;
+ bad_NU:
vFAIL("Invalid hexadecimal number in \\N{U+...}");
}
- start_digit = RExC_parse;
- count++;
-
- /* Loop through the hex digits of the current code point */
- do {
- /* Adding this digit will shift the result 4 bits. If that
- * result would be above the legal max, it's overflow */
- if (cp > MAX_LEGAL_CP >> 4) {
-
- /* Find the end of the code point */
- do {
- RExC_parse ++;
- } while (isXDIGIT(*RExC_parse) || *RExC_parse == '_');
-
- /* Be sure to synchronize this message with the similar one
- * in utf8.c */
- vFAIL4("Use of code point 0x%.*s is not allowed; the"
- " permissible max is 0x%" UVxf,
- (int) (RExC_parse - start_digit), start_digit,
- MAX_LEGAL_CP);
- }
-
- /* Accumulate this (valid) digit into the running total */
- cp = (cp << 4) + READ_XDIGIT(RExC_parse);
+ RExC_parse += len;
- /* READ_XDIGIT advanced the input pointer. Ignore a single
- * underscore separator */
- if (*RExC_parse == '_' && isXDIGIT(RExC_parse[1])) {
- RExC_parse++;
- }
- } while (isXDIGIT(*RExC_parse));
+ if (cp > MAX_LEGAL_CP) {
+ vFAIL(form_cp_too_large_msg(16, start_digit, len, 0));
+ }
- /* Here, have accumulated the next code point */
- if (RExC_parse >= endbrace) { /* If done ... */
- if (count != 1) {
+ if (RExC_parse >= endbrace) { /* Got to the closing '}' */
+ if (count) {
goto do_concat;
}
@@ -13133,18 +13208,19 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
return TRUE;
}
- /* Here, the only legal thing would be a multiple character
- * sequence (of the form "\N{U+c1.c2. ... }". So the next
- * character must be a dot (and the one after that can't be the
- * endbrace, or we'd have something like \N{U+100.} ) */
+ /* Here, the parse stopped bfore the ending brace. This is legal
+ * only if that character is a dot separating code points, like a
+ * multiple character sequence (of the form "\N{U+c1.c2. ... }".
+ * So the next character must be a dot (and the one after that
+ * can't be the endbrace, or we'd have something like \N{U+100.} )
+ * */
if (*RExC_parse != '.' || RExC_parse + 1 >= endbrace) {
RExC_parse += (RExC_orig_utf8) /* point to after 1st invalid */
- ? UTF8SKIP(RExC_parse)
- : 1;
- if (RExC_parse >= endbrace) { /* Guard against malformed utf8 */
- RExC_parse = endbrace;
- }
- vFAIL("Invalid hexadecimal number in \\N{U+...}");
+ ? UTF8SKIP(RExC_parse)
+ : 1;
+ RExC_parse = MIN(endbrace, RExC_parse);/* Guard against
+ malformed utf8 */
+ goto bad_NU;
}
/* Here, looks like its really a multiple character sequence. Fail
@@ -13162,7 +13238,7 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
* but go through the motions of code point counting and error
* checking, if the caller doesn't want a node returned. */
- if (node_p && count == 1) {
+ if (node_p && ! substitute_parse) {
substitute_parse = newSVpvs("?:");
}
@@ -13192,12 +13268,9 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
sv_catpvs(substitute_parse, ")");
-#ifdef EBCDIC
/* The values are Unicode, and therefore have to be converted to native
* on a non-Unicode (meaning non-ASCII) platform. */
- RExC_recode_x_to_native = 1;
-#endif
-
+ SET_recode_x_to_native(1);
}
/* Here, we have the string the name evaluates to, ready to be parsed,
@@ -13222,9 +13295,7 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
RExC_start = save_start;
RExC_parse = endbrace;
RExC_end = orig_end;
-#ifdef EBCDIC
- RExC_recode_x_to_native = 0;
-#endif
+ SET_recode_x_to_native(0);
SvREFCNT_dec_NN(substitute_parse);
@@ -13241,7 +13312,7 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
}
-PERL_STATIC_INLINE U8
+STATIC U8
S_compute_EXACTish(RExC_state_t *pRExC_state)
{
U8 op;
@@ -13402,9 +13473,8 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
char *parse_start;
U8 op;
int invert = 0;
- U8 arg;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
*flagp = WORST; /* Tentatively. */
@@ -13519,35 +13589,68 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
/* Special Escapes */
case 'A':
RExC_seen_zerolen++;
- ret = reg_node(pRExC_state, SBOL);
- /* SBOL is shared with /^/ so we set the flags so we can tell
- * /\A/ from /^/ in split. */
- FLAGS(REGNODE_p(ret)) = 1;
- *flagp |= SIMPLE;
+ /* Under wildcards, this is changed to match \n; should be
+ * invisible to the user, as they have to compile under /m */
+ if (RExC_pm_flags & PMf_WILDCARD) {
+ ret = reg_node(pRExC_state, MBOL);
+ }
+ else {
+ ret = reg_node(pRExC_state, SBOL);
+ /* SBOL is shared with /^/ so we set the flags so we can tell
+ * /\A/ from /^/ in split. */
+ FLAGS(REGNODE_p(ret)) = 1;
+ *flagp |= SIMPLE; /* Wrong, but too late to fix for 5.32 */
+ }
goto finish_meta_pat;
case 'G':
+ if (RExC_pm_flags & PMf_WILDCARD) {
+ RExC_parse++;
+ /* diag_listed_as: Use of %s is not allowed in Unicode property
+ wildcard subpatterns in regex; marked by <-- HERE in m/%s/
+ */
+ vFAIL("Use of '\\G' is not allowed in Unicode property"
+ " wildcard subpatterns");
+ }
ret = reg_node(pRExC_state, GPOS);
RExC_seen |= REG_GPOS_SEEN;
*flagp |= SIMPLE;
goto finish_meta_pat;
case 'K':
- RExC_seen_zerolen++;
- ret = reg_node(pRExC_state, KEEPS);
- *flagp |= SIMPLE;
- /* XXX:dmq : disabling in-place substitution seems to
- * be necessary here to avoid cases of memory corruption, as
- * with: C<$_="x" x 80; s/x\K/y/> -- rgs
- */
- RExC_seen |= REG_LOOKBEHIND_SEEN;
- goto finish_meta_pat;
+ if (!RExC_in_lookaround) {
+ RExC_seen_zerolen++;
+ ret = reg_node(pRExC_state, KEEPS);
+ *flagp |= SIMPLE;
+ /* XXX:dmq : disabling in-place substitution seems to
+ * be necessary here to avoid cases of memory corruption, as
+ * with: C<$_="x" x 80; s/x\K/y/> -- rgs
+ */
+ RExC_seen |= REG_LOOKBEHIND_SEEN;
+ goto finish_meta_pat;
+ }
+ else {
+ ++RExC_parse; /* advance past the 'K' */
+ vFAIL("\\K not permitted in lookahead/lookbehind");
+ }
case 'Z':
- ret = reg_node(pRExC_state, SEOL);
- *flagp |= SIMPLE;
+ if (RExC_pm_flags & PMf_WILDCARD) {
+ /* See comment under \A above */
+ ret = reg_node(pRExC_state, MEOL);
+ }
+ else {
+ ret = reg_node(pRExC_state, SEOL);
+ *flagp |= SIMPLE; /* Wrong, but too late to fix for 5.32 */
+ }
RExC_seen_zerolen++; /* Do not optimize RE away */
goto finish_meta_pat;
case 'z':
- ret = reg_node(pRExC_state, EOS);
- *flagp |= SIMPLE;
+ if (RExC_pm_flags & PMf_WILDCARD) {
+ /* See comment under \A above */
+ ret = reg_node(pRExC_state, MEOL);
+ }
+ else {
+ ret = reg_node(pRExC_state, EOS);
+ *flagp |= SIMPLE; /* Wrong, but too late to fix for 5.32 */
+ }
RExC_seen_zerolen++; /* Do not optimize RE away */
goto finish_meta_pat;
case 'C':
@@ -13557,13 +13660,6 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
*flagp |= HASWIDTH;
goto finish_meta_pat;
- case 'W':
- invert = 1;
- /* FALLTHROUGH */
- case 'w':
- arg = ANYOF_WORDCHAR;
- goto join_posix;
-
case 'B':
invert = 1;
/* FALLTHROUGH */
@@ -13682,85 +13778,26 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
goto finish_meta_pat;
}
- case 'D':
- invert = 1;
- /* FALLTHROUGH */
- case 'd':
- arg = ANYOF_DIGIT;
- if (! DEPENDS_SEMANTICS) {
- goto join_posix;
- }
-
- /* \d doesn't have any matches in the upper Latin1 range, hence /d
- * is equivalent to /u. Changing to /u saves some branches at
- * runtime */
- op = POSIXU;
- goto join_posix_op_known;
-
case 'R':
ret = reg_node(pRExC_state, LNBREAK);
*flagp |= HASWIDTH|SIMPLE;
goto finish_meta_pat;
- case 'H':
- invert = 1;
- /* FALLTHROUGH */
+ case 'd':
+ case 'D':
case 'h':
- arg = ANYOF_BLANK;
- op = POSIXU;
- goto join_posix_op_known;
-
- case 'V':
- invert = 1;
- /* FALLTHROUGH */
- case 'v':
- arg = ANYOF_VERTWS;
- op = POSIXU;
- goto join_posix_op_known;
-
- case 'S':
- invert = 1;
- /* FALLTHROUGH */
- case 's':
- arg = ANYOF_SPACE;
-
- join_posix:
-
- op = POSIXD + get_regex_charset(RExC_flags);
- if (op > POSIXA) { /* /aa is same as /a */
- op = POSIXA;
- }
- else if (op == POSIXL) {
- RExC_contains_locale = 1;
- }
- else if (op == POSIXD) {
- RExC_seen_d_op = TRUE;
- }
-
- join_posix_op_known:
-
- if (invert) {
- op += NPOSIXD - POSIXD;
- }
-
- ret = reg_node(pRExC_state, op);
- FLAGS(REGNODE_p(ret)) = namedclass_to_classnum(arg);
-
- *flagp |= HASWIDTH|SIMPLE;
- /* FALLTHROUGH */
-
- finish_meta_pat:
- if ( UCHARAT(RExC_parse + 1) == '{'
- && UNLIKELY(! new_regcurly(RExC_parse + 1, RExC_end)))
- {
- RExC_parse += 2;
- vFAIL("Unescaped left brace in regex is illegal here");
- }
- nextchar(pRExC_state);
- Set_Node_Length(REGNODE_p(ret), 2); /* MJD */
- break;
+ case 'H':
case 'p':
case 'P':
+ case 's':
+ case 'S':
+ case 'v':
+ case 'V':
+ case 'w':
+ case 'W':
+ /* These all have the same meaning inside [brackets], and it knows
+ * how to do the best optimizations for them. So, pretend we found
+ * these within brackets, and let it do the work */
RExC_parse--;
ret = regclass(pRExC_state, flagp, depth+1,
@@ -13779,10 +13816,21 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
FAIL2("panic: regclass returned failure to regatom, flags=%#" UVxf,
(UV) *flagp);
- RExC_parse--;
+ RExC_parse--; /* regclass() leaves this one too far ahead */
+ finish_meta_pat:
+ /* The escapes above that don't take a parameter can't be
+ * followed by a '{'. But 'pX', 'p{foo}' and
+ * correspondingly 'P' can be */
+ if ( RExC_parse - parse_start == 1
+ && UCHARAT(RExC_parse + 1) == '{'
+ && UNLIKELY(! new_regcurly(RExC_parse + 1, RExC_end)))
+ {
+ RExC_parse += 2;
+ vFAIL("Unescaped left brace in regex is illegal here");
+ }
Set_Node_Offset(REGNODE_p(ret), parse_start);
- Set_Node_Cur_Length(REGNODE_p(ret), parse_start - 2);
+ Set_Node_Length(REGNODE_p(ret), RExC_parse - parse_start + 1); /* MJD */
nextchar(pRExC_state);
break;
case 'N':
@@ -13903,7 +13951,7 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
&& num >= RExC_npar
/* cannot be an octal escape if it starts with 8 */
&& *RExC_parse != '8'
- /* cannot be an octal escape it it starts with 9 */
+ /* cannot be an octal escape if it starts with 9 */
&& *RExC_parse != '9'
) {
/* Probably not meant to be a backref, instead likely
@@ -14003,14 +14051,15 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
STRLEN len = 0;
UV ender = 0;
char *p;
- char *s;
-
-/* This allows us to fill a node with just enough spare so that if the final
- * character folds, its expansion is guaranteed to fit */
-#define MAX_NODE_STRING_SIZE (255-UTF8_MAXBYTES_CASE)
-
+ char *s, *old_s = NULL, *old_old_s = NULL;
char *s0;
- U8 upper_parse = MAX_NODE_STRING_SIZE;
+ U32 max_string_len = 255;
+
+ /* We may have to reparse the node, artificially stopping filling
+ * it early, based on info gleaned in the first parse. This
+ * variable gives where we stop. Make it above the normal stopping
+ * place first time through; otherwise it would stop too early */
+ U32 upper_fill = max_string_len + 1;
/* We start out as an EXACT node, even if under /i, until we find a
* character which is in a fold. The algorithm now segregates into
@@ -14024,9 +14073,17 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
U8 node_type = EXACT;
/* Assume the node will be fully used; the excess is given back at
- * the end. We can't make any other length assumptions, as a byte
- * input sequence could shrink down. */
- Ptrdiff_t initial_size = STR_SZ(256);
+ * the end. Under /i, we may need to temporarily add the fold of
+ * an extra character or two at the end to check for splitting
+ * multi-char folds, so allocate extra space for that. We can't
+ * make any other length assumptions, as a byte input sequence
+ * could shrink down. */
+ Ptrdiff_t current_string_nodes = STR_SZ(max_string_len
+ + ((! FOLD)
+ ? 0
+ : 2 * ((UTF)
+ ? UTF8_MAXBYTES_CASE
+ /* Max non-UTF-8 expansion is 2 */ : 2)));
bool next_is_quantifier;
char * oldp = NULL;
@@ -14057,10 +14114,15 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
/* So is the MICRO SIGN */
bool has_micro_sign = FALSE;
+ /* Set when we fill up the current node and there is still more
+ * text to process */
+ bool overflowed;
+
/* Allocate an EXACT node. The node_type may change below to
* another EXACTish node, but since the size of the node doesn't
* change, it works */
- ret = regnode_guts(pRExC_state, node_type, initial_size, "exact");
+ ret = regnode_guts(pRExC_state, node_type, current_string_nodes,
+ "exact");
FILL_NODE(ret, node_type);
RExC_emit++;
@@ -14070,6 +14132,19 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
reparse:
+ p = RExC_parse;
+ len = 0;
+ s = s0;
+ node_type = EXACT;
+ oldp = NULL;
+ maybe_exactfu = FOLD && (DEPENDS_SEMANTICS || LOC);
+ maybe_SIMPLE = SIMPLE;
+ requires_utf8_target = FALSE;
+ has_ss = FALSE;
+ has_micro_sign = FALSE;
+
+ continue_parse:
+
/* This breaks under rare circumstances. If folding, we do not
* want to split a node at a character that is a non-final in a
* multi-char fold, as an input string could just happen to want to
@@ -14084,24 +14159,32 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
|| UTF8_IS_INVARIANT(UCHARAT(RExC_parse))
|| UTF8_IS_START(UCHARAT(RExC_parse)));
+ overflowed = FALSE;
+
/* Here, we have a literal character. Find the maximal string of
* them in the input that we can fit into a single EXACTish node.
* We quit at the first non-literal or when the node gets full, or
* under /i the categorization of folding/non-folding character
* changes */
- for (p = RExC_parse; len < upper_parse && p < RExC_end; ) {
+ while (p < RExC_end && len < upper_fill) {
/* In most cases each iteration adds one byte to the output.
* The exceptions override this */
Size_t added_len = 1;
oldp = p;
+ old_old_s = old_s;
+ old_s = s;
/* White space has already been ignored */
assert( (RExC_flags & RXf_PMf_EXTENDED) == 0
|| ! is_PATWS_safe((p), RExC_end, UTF));
switch ((U8)*p) {
+ const char* message;
+ U32 packed_warn;
+ U8 grok_c_char;
+
case '^':
case '$':
case '.':
@@ -14217,67 +14300,70 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
p++;
break;
case 'o':
- {
- UV result;
- const char* error_msg;
-
- bool valid = grok_bslash_o(&p,
- RExC_end,
- &result,
- &error_msg,
- TO_OUTPUT_WARNINGS(p),
- (bool) RExC_strict,
- TRUE, /* Output warnings
- for non-
- portables */
- UTF);
- if (! valid) {
- RExC_parse = p; /* going to die anyway; point
- to exact spot of failure */
- vFAIL(error_msg);
- }
- UPDATE_WARNINGS_LOC(p - 1);
- ender = result;
- break;
- }
+ if (! grok_bslash_o(&p,
+ RExC_end,
+ &ender,
+ &message,
+ &packed_warn,
+ (bool) RExC_strict,
+ FALSE, /* No illegal cp's */
+ UTF))
+ {
+ RExC_parse = p; /* going to die anyway; point to
+ exact spot of failure */
+ vFAIL(message);
+ }
+
+ if (message && TO_OUTPUT_WARNINGS(p)) {
+ warn_non_literal_string(p, packed_warn, message);
+ }
+ break;
case 'x':
- {
- UV result = UV_MAX; /* initialize to erroneous
- value */
- const char* error_msg;
-
- bool valid = grok_bslash_x(&p,
- RExC_end,
- &result,
- &error_msg,
- TO_OUTPUT_WARNINGS(p),
- (bool) RExC_strict,
- TRUE, /* Silence warnings
- for non-
- portables */
- UTF);
- if (! valid) {
- RExC_parse = p; /* going to die anyway; point
- to exact spot of failure */
- vFAIL(error_msg);
- }
- UPDATE_WARNINGS_LOC(p - 1);
- ender = result;
+ if (! grok_bslash_x(&p,
+ RExC_end,
+ &ender,
+ &message,
+ &packed_warn,
+ (bool) RExC_strict,
+ FALSE, /* No illegal cp's */
+ UTF))
+ {
+ RExC_parse = p; /* going to die anyway; point
+ to exact spot of failure */
+ vFAIL(message);
+ }
+
+ if (message && TO_OUTPUT_WARNINGS(p)) {
+ warn_non_literal_string(p, packed_warn, message);
+ }
- if (ender < 0x100) {
#ifdef EBCDIC
- if (RExC_recode_x_to_native) {
- ender = LATIN1_TO_NATIVE(ender);
- }
+ if (ender < 0x100) {
+ if (RExC_recode_x_to_native) {
+ ender = LATIN1_TO_NATIVE(ender);
+ }
+ }
#endif
- }
- break;
- }
+ break;
case 'c':
- p++;
- ender = grok_bslash_c(*p, TO_OUTPUT_WARNINGS(p));
- UPDATE_WARNINGS_LOC(p);
p++;
+ if (! grok_bslash_c(*p, &grok_c_char,
+ &message, &packed_warn))
+ {
+ /* going to die anyway; point to exact spot of
+ * failure */
+ RExC_parse = p + ((UTF)
+ ? UTF8_SAFE_SKIP(p, RExC_end)
+ : 1);
+ vFAIL(message);
+ }
+
+ ender = grok_c_char;
+ p++;
+ if (message && TO_OUTPUT_WARNINGS(p)) {
+ warn_non_literal_string(p, packed_warn, message);
+ }
+
break;
case '8': case '9': /* must be a backreference */
--p;
@@ -14312,17 +14398,19 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
/* FALLTHROUGH */
case '0':
{
- I32 flags = PERL_SCAN_SILENT_ILLDIGIT;
+ I32 flags = PERL_SCAN_SILENT_ILLDIGIT
+ | PERL_SCAN_NOTIFY_ILLDIGIT;
STRLEN numlen = 3;
ender = grok_oct(p, &numlen, &flags, NULL);
p += numlen;
- if ( isDIGIT(*p) /* like \08, \178 */
- && ckWARN(WARN_REGEXP)
- && numlen < 3)
+ if ( (flags & PERL_SCAN_NOTIFY_ILLDIGIT)
+ && isDIGIT(*p) /* like \08, \178 */
+ && ckWARN(WARN_REGEXP))
{
reg_warn_non_literal_string(
- p + 1,
- form_short_octal_warning(p, numlen));
+ p + 1,
+ form_alien_digit_msg(8, numlen, p,
+ RExC_end, UTF, FALSE));
}
}
break;
@@ -14399,6 +14487,14 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
if (ender > 255) {
REQUIRE_UTF8(flagp);
+ if ( UNICODE_IS_PERL_EXTENDED(ender)
+ && TO_OUTPUT_WARNINGS(p))
+ {
+ ckWARN2_non_literal_string(p,
+ packWARN(WARN_PORTABLE),
+ PL_extended_cp_format,
+ ender);
+ }
}
/* We need to check if the next non-ignored thing is a
@@ -14427,20 +14523,29 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
/* Ready to add 'ender' to the node */
if (! FOLD) { /* The simple case, just append the literal */
+ not_fold_common:
- not_fold_common:
- if (UVCHR_IS_INVARIANT(ender) || ! UTF) {
- *(s++) = (char) ender;
- }
- else {
- U8 * new_s = uvchr_to_utf8((U8*)s, ender);
- added_len = (char *) new_s - s;
- s = (char *) new_s;
+ /* Don't output if it would overflow */
+ if (UNLIKELY(len > max_string_len - ((UTF)
+ ? UVCHR_SKIP(ender)
+ : 1)))
+ {
+ overflowed = TRUE;
+ break;
+ }
- if (ender > 255) {
- requires_utf8_target = TRUE;
- }
+ if (UVCHR_IS_INVARIANT(ender) || ! UTF) {
+ *(s++) = (char) ender;
+ }
+ else {
+ U8 * new_s = uvchr_to_utf8((U8*)s, ender);
+ added_len = (char *) new_s - s;
+ s = (char *) new_s;
+
+ if (ender > 255) {
+ requires_utf8_target = TRUE;
}
+ }
}
else if (LOC && is_PROBLEMATIC_LOCALE_FOLD_cp(ender)) {
@@ -14504,22 +14609,35 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
goto loopdone;
}
- if (UTF) { /* Use the folded value */
+ if (UTF) { /* Alway use the folded value for UTF-8
+ patterns */
if (UVCHR_IS_INVARIANT(ender)) {
+ if (UNLIKELY(len + 1 > max_string_len)) {
+ overflowed = TRUE;
+ break;
+ }
+
*(s)++ = (U8) toFOLD(ender);
}
else {
- ender = _to_uni_fold_flags(
+ UV folded = _to_uni_fold_flags(
ender,
- (U8 *) s,
+ (U8 *) s, /* We have allocated extra space
+ in 's' so can't run off the
+ end */
&added_len,
FOLD_FLAGS_FULL | ((ASCII_FOLD_RESTRICTED)
? FOLD_FLAGS_NOMIX_ASCII
: 0));
+ if (UNLIKELY(len + added_len > max_string_len)) {
+ overflowed = TRUE;
+ break;
+ }
+
s += added_len;
- if ( ender > 255
- && LIKELY(ender != GREEK_SMALL_LETTER_MU))
+ if ( folded > 255
+ && LIKELY(folded != GREEK_SMALL_LETTER_MU))
{
/* U+B5 folds to the MU, so its possible for a
* non-UTF-8 target to match it */
@@ -14527,63 +14645,77 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
}
}
}
- else {
-
- /* Here is non-UTF8. First, see if the character's
- * fold differs between /d and /u. */
- if (PL_fold[ender] != PL_fold_latin1[ender]) {
- maybe_exactfu = FALSE;
+ else { /* Here is non-UTF8. */
+
+ /* The fold will be one or (rarely) two characters.
+ * Check that there's room for at least a single one
+ * before setting any flags, etc. Because otherwise an
+ * overflowing character could cause a flag to be set
+ * even though it doesn't end up in this node. (For
+ * the two character fold, we check again, before
+ * setting any flags) */
+ if (UNLIKELY(len + 1 > max_string_len)) {
+ overflowed = TRUE;
+ break;
}
#if UNICODE_MAJOR_VERSION > 3 /* no multifolds in early Unicode */ \
|| (UNICODE_MAJOR_VERSION == 3 && ( UNICODE_DOT_VERSION > 0) \
|| UNICODE_DOT_DOT_VERSION > 0)
- /* On non-ancient Unicode versions, this includes the
- * multi-char fold SHARP S to 'ss' */
-
- if ( UNLIKELY(ender == LATIN_SMALL_LETTER_SHARP_S)
- || ( isALPHA_FOLD_EQ(ender, 's')
- && len > 0
- && isALPHA_FOLD_EQ(*(s-1), 's')))
- {
- /* Here, we have one of the following:
- * a) a SHARP S. This folds to 'ss' only under
- * /u rules. If we are in that situation,
- * fold the SHARP S to 'ss'. See the comments
- * for join_exact() as to why we fold this
- * non-UTF at compile time, and no others.
- * b) 'ss'. When under /u, there's nothing
- * special needed to be done here. The
- * previous iteration handled the first 's',
- * and this iteration will handle the second.
- * If, on the otherhand it's not /u, we have
- * to exclude the possibility of moving to /u,
- * so that we won't generate an unwanted
- * match, unless, at runtime, the target
- * string is in UTF-8.
- * */
+ /* On non-ancient Unicodes, check for the only possible
+ * multi-char fold */
+ if (UNLIKELY(ender == LATIN_SMALL_LETTER_SHARP_S)) {
+ /* This potential multi-char fold means the node
+ * can't be simple (because it could match more
+ * than a single char). And in some cases it will
+ * match 'ss', so set that flag */
+ maybe_SIMPLE = 0;
has_ss = TRUE;
- maybe_exactfu = FALSE; /* Can't generate an
- EXACTFU node (unless we
- already are in one) */
- if (UNLIKELY(ender == LATIN_SMALL_LETTER_SHARP_S)) {
- maybe_SIMPLE = 0;
- if (node_type == EXACTFU) {
- *(s++) = 's';
-
- /* Let the code below add in the extra 's' */
- ender = 's';
- added_len = 2;
+
+ /* It can't change to be an EXACTFU (unless already
+ * is one). We fold it iff under /u rules. */
+ if (node_type != EXACTFU) {
+ maybe_exactfu = FALSE;
+ }
+ else {
+ if (UNLIKELY(len + 2 > max_string_len)) {
+ overflowed = TRUE;
+ break;
}
+
+ *(s++) = 's';
+ *(s++) = 's';
+ added_len = 2;
+
+ goto done_with_this_char;
}
}
+ else if ( UNLIKELY(isALPHA_FOLD_EQ(ender, 's'))
+ && LIKELY(len > 0)
+ && UNLIKELY(isALPHA_FOLD_EQ(*(s-1), 's')))
+ {
+ /* Also, the sequence 'ss' is special when not
+ * under /u. If the target string is UTF-8, it
+ * should match SHARP S; otherwise it won't. So,
+ * here we have to exclude the possibility of this
+ * node moving to /u.*/
+ has_ss = TRUE;
+ maybe_exactfu = FALSE;
+ }
#endif
+ /* Here, the fold will be a single character */
- else if (UNLIKELY(ender == MICRO_SIGN)) {
+ if (UNLIKELY(ender == MICRO_SIGN)) {
has_micro_sign = TRUE;
}
+ else if (PL_fold[ender] != PL_fold_latin1[ender]) {
+
+ /* If the character's fold differs between /d and
+ * /u, this can't change to be an EXACTFU node */
+ maybe_exactfu = FALSE;
+ }
*(s++) = (DEPENDS_SEMANTICS)
? (char) toFOLD(ender)
@@ -14598,6 +14730,8 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
}
} /* End of adding current character to the node */
+ done_with_this_char:
+
len += added_len;
if (next_is_quantifier) {
@@ -14609,168 +14743,507 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
} /* End of loop through literal characters */
- /* Here we have either exhausted the input or ran out of room in
- * the node. (If we encountered a character that can't be in the
- * node, transfer is made directly to <loopdone>, and so we
- * wouldn't have fallen off the end of the loop.) In the latter
- * case, we artificially have to split the node into two, because
- * we just don't have enough space to hold everything. This
- * creates a problem if the final character participates in a
- * multi-character fold in the non-final position, as a match that
- * should have occurred won't, due to the way nodes are matched,
- * and our artificial boundary. So back off until we find a non-
- * problematic character -- one that isn't at the beginning or
- * middle of such a fold. (Either it doesn't participate in any
- * folds, or appears only in the final position of all the folds it
- * does participate in.) A better solution with far fewer false
- * positives, and that would fill the nodes more completely, would
- * be to actually have available all the multi-character folds to
- * test against, and to back-off only far enough to be sure that
- * this node isn't ending with a partial one. <upper_parse> is set
- * further below (if we need to reparse the node) to include just
- * up through that final non-problematic character that this code
- * identifies, so when it is set to less than the full node, we can
- * skip the rest of this */
- if (FOLD && p < RExC_end && upper_parse == MAX_NODE_STRING_SIZE) {
- PERL_UINT_FAST8_T backup_count = 0;
-
- const STRLEN full_len = len;
-
- assert(len >= MAX_NODE_STRING_SIZE);
-
- /* Here, <s> points to just beyond where we have output the
- * final character of the node. Look backwards through the
- * string until find a non- problematic character */
-
- if (! UTF) {
-
- /* This has no multi-char folds to non-UTF characters */
- if (ASCII_FOLD_RESTRICTED) {
- goto loopdone;
+ /* Here we have either exhausted the input or run out of room in
+ * the node. If the former, we are done. (If we encountered a
+ * character that can't be in the node, transfer is made directly
+ * to <loopdone>, and so we wouldn't have fallen off the end of the
+ * loop.) */
+ if (LIKELY(! overflowed)) {
+ goto loopdone;
+ }
+
+ /* Here we have run out of room. We can grow plain EXACT and
+ * LEXACT nodes. If the pattern is gigantic enough, though,
+ * eventually we'll have to artificially chunk the pattern into
+ * multiple nodes. */
+ if (! LOC && (node_type == EXACT || node_type == LEXACT)) {
+ Size_t overhead = 1 + regarglen[OP(REGNODE_p(ret))];
+ Size_t overhead_expansion = 0;
+ char temp[256];
+ Size_t max_nodes_for_string;
+ Size_t achievable;
+ SSize_t delta;
+
+ /* Here we couldn't fit the final character in the current
+ * node, so it will have to be reparsed, no matter what else we
+ * do */
+ p = oldp;
+
+ /* If would have overflowed a regular EXACT node, switch
+ * instead to an LEXACT. The code below is structured so that
+ * the actual growing code is common to changing from an EXACT
+ * or just increasing the LEXACT size. This means that we have
+ * to save the string in the EXACT case before growing, and
+ * then copy it afterwards to its new location */
+ if (node_type == EXACT) {
+ overhead_expansion = regarglen[LEXACT] - regarglen[EXACT];
+ RExC_emit += overhead_expansion;
+ Copy(s0, temp, len, char);
+ }
+
+ /* Ready to grow. If it was a plain EXACT, the string was
+ * saved, and the first few bytes of it overwritten by adding
+ * an argument field. We assume, as we do elsewhere in this
+ * file, that one byte of remaining input will translate into
+ * one byte of output, and if that's too small, we grow again,
+ * if too large the excess memory is freed at the end */
+
+ max_nodes_for_string = U16_MAX - overhead - overhead_expansion;
+ achievable = MIN(max_nodes_for_string,
+ current_string_nodes + STR_SZ(RExC_end - p));
+ delta = achievable - current_string_nodes;
+
+ /* If there is just no more room, go finish up this chunk of
+ * the pattern. */
+ if (delta <= 0) {
+ goto loopdone;
+ }
+
+ change_engine_size(pRExC_state, delta + overhead_expansion);
+ current_string_nodes += delta;
+ max_string_len
+ = sizeof(struct regnode) * current_string_nodes;
+ upper_fill = max_string_len + 1;
+
+ /* If the length was small, we know this was originally an
+ * EXACT node now converted to LEXACT, and the string has to be
+ * restored. Otherwise the string was untouched. 260 is just
+ * a number safely above 255 so don't have to worry about
+ * getting it precise */
+ if (len < 260) {
+ node_type = LEXACT;
+ FILL_NODE(ret, node_type);
+ s0 = STRING(REGNODE_p(ret));
+ Copy(temp, s0, len, char);
+ s = s0 + len;
+ }
+
+ goto continue_parse;
+ }
+ else if (FOLD) {
+ bool splittable = FALSE;
+ bool backed_up = FALSE;
+ char * e; /* should this be U8? */
+ char * s_start; /* should this be U8? */
+
+ /* Here is /i. Running out of room creates a problem if we are
+ * folding, and the split happens in the middle of a
+ * multi-character fold, as a match that should have occurred,
+ * won't, due to the way nodes are matched, and our artificial
+ * boundary. So back off until we aren't splitting such a
+ * fold. If there is no such place to back off to, we end up
+ * taking the entire node as-is. This can happen if the node
+ * consists entirely of 'f' or entirely of 's' characters (or
+ * things that fold to them) as 'ff' and 'ss' are
+ * multi-character folds.
+ *
+ * The Unicode standard says that multi character folds consist
+ * of either two or three characters. That means we would be
+ * splitting one if the final character in the node is at the
+ * beginning of either type, or is the second of a three
+ * character fold.
+ *
+ * At this point:
+ * ender is the code point of the character that won't fit
+ * in the node
+ * s points to just beyond the final byte in the node.
+ * It's where we would place ender if there were
+ * room, and where in fact we do place ender's fold
+ * in the code below, as we've over-allocated space
+ * for s0 (hence s) to allow for this
+ * e starts at 's' and advances as we append things.
+ * old_s is the same as 's'. (If ender had fit, 's' would
+ * have been advanced to beyond it).
+ * old_old_s points to the beginning byte of the final
+ * character in the node
+ * p points to the beginning byte in the input of the
+ * character beyond 'ender'.
+ * oldp points to the beginning byte in the input of
+ * 'ender'.
+ *
+ * In the case of /il, we haven't folded anything that could be
+ * affected by the locale. That means only above-Latin1
+ * characters that fold to other above-latin1 characters get
+ * folded at compile time. To check where a good place to
+ * split nodes is, everything in it will have to be folded.
+ * The boolean 'maybe_exactfu' keeps track in /il if there are
+ * any unfolded characters in the node. */
+ bool need_to_fold_loc = LOC && ! maybe_exactfu;
+
+ /* If we do need to fold the node, we need a place to store the
+ * folded copy, and a way to map back to the unfolded original
+ * */
+ char * locfold_buf = NULL;
+ Size_t * loc_correspondence = NULL;
+
+ if (! need_to_fold_loc) { /* The normal case. Just
+ initialize to the actual node */
+ e = s;
+ s_start = s0;
+ s = old_old_s; /* Point to the beginning of the final char
+ that fits in the node */
+ }
+ else {
+
+ /* Here, we have filled a /il node, and there are unfolded
+ * characters in it. If the runtime locale turns out to be
+ * UTF-8, there are possible multi-character folds, just
+ * like when not under /l. The node hence can't terminate
+ * in the middle of such a fold. To determine this, we
+ * have to create a folded copy of this node. That means
+ * reparsing the node, folding everything assuming a UTF-8
+ * locale. (If at runtime it isn't such a locale, the
+ * actions here wouldn't have been necessary, but we have
+ * to assume the worst case.) If we find we need to back
+ * off the folded string, we do so, and then map that
+ * position back to the original unfolded node, which then
+ * gets output, truncated at that spot */
+
+ char * redo_p = RExC_parse;
+ char * redo_e;
+ char * old_redo_e;
+
+ /* Allow enough space assuming a single byte input folds to
+ * a single byte output, plus assume that the two unparsed
+ * characters (that we may need) fold to the largest number
+ * of bytes possible, plus extra for one more worst case
+ * scenario. In the loop below, if we start eating into
+ * that final spare space, we enlarge this initial space */
+ Size_t size = max_string_len + (3 * UTF8_MAXBYTES_CASE) + 1;
+
+ Newxz(locfold_buf, size, char);
+ Newxz(loc_correspondence, size, Size_t);
+
+ /* Redo this node's parse, folding into 'locfold_buf' */
+ redo_p = RExC_parse;
+ old_redo_e = redo_e = locfold_buf;
+ while (redo_p <= oldp) {
+
+ old_redo_e = redo_e;
+ loc_correspondence[redo_e - locfold_buf]
+ = redo_p - RExC_parse;
+
+ if (UTF) {
+ Size_t added_len;
+
+ (void) _to_utf8_fold_flags((U8 *) redo_p,
+ (U8 *) RExC_end,
+ (U8 *) redo_e,
+ &added_len,
+ FOLD_FLAGS_FULL);
+ redo_e += added_len;
+ redo_p += UTF8SKIP(redo_p);
+ }
+ else {
+
+ /* Note that if this code is run on some ancient
+ * Unicode versions, SHARP S doesn't fold to 'ss',
+ * but rather than clutter the code with #ifdef's,
+ * as is done above, we ignore that possibility.
+ * This is ok because this code doesn't affect what
+ * gets matched, but merely where the node gets
+ * split */
+ if (UCHARAT(redo_p) != LATIN_SMALL_LETTER_SHARP_S) {
+ *redo_e++ = toLOWER_L1(UCHARAT(redo_p));
+ }
+ else {
+ *redo_e++ = 's';
+ *redo_e++ = 's';
+ }
+ redo_p++;
+ }
+
+
+ /* If we're getting so close to the end that a
+ * worst-case fold in the next character would cause us
+ * to overflow, increase, assuming one byte output byte
+ * per one byte input one, plus room for another worst
+ * case fold */
+ if ( redo_p <= oldp
+ && redo_e > locfold_buf + size
+ - (UTF8_MAXBYTES_CASE + 1))
+ {
+ Size_t new_size = size
+ + (oldp - redo_p)
+ + UTF8_MAXBYTES_CASE + 1;
+ Ptrdiff_t e_offset = redo_e - locfold_buf;
+
+ Renew(locfold_buf, new_size, char);
+ Renew(loc_correspondence, new_size, Size_t);
+ size = new_size;
+
+ redo_e = locfold_buf + e_offset;
+ }
}
- while (--s >= s0 && IS_NON_FINAL_FOLD(*s)) {
- backup_count++;
+ /* Set so that things are in terms of the folded, temporary
+ * string */
+ s = old_redo_e;
+ s_start = locfold_buf;
+ e = redo_e;
+
+ }
+
+ /* Here, we have 's', 's_start' and 'e' set up to point to the
+ * input that goes into the node, folded.
+ *
+ * If the final character of the node and the fold of ender
+ * form the first two characters of a three character fold, we
+ * need to peek ahead at the next (unparsed) character in the
+ * input to determine if the three actually do form such a
+ * fold. Just looking at that character is not generally
+ * sufficient, as it could be, for example, an escape sequence
+ * that evaluates to something else, and it needs to be folded.
+ *
+ * khw originally thought to just go through the parse loop one
+ * extra time, but that doesn't work easily as that iteration
+ * could cause things to think that the parse is over and to
+ * goto loopdone. The character could be a '$' for example, or
+ * the character beyond could be a quantifier, and other
+ * glitches as well.
+ *
+ * The solution used here for peeking ahead is to look at that
+ * next character. If it isn't ASCII punctuation, then it will
+ * be something that continues in an EXACTish node if there
+ * were space. We append the fold of it to s, having reserved
+ * enough room in s0 for the purpose. If we can't reasonably
+ * peek ahead, we instead assume the worst case: that it is
+ * something that would form the completion of a multi-char
+ * fold.
+ *
+ * If we can't split between s and ender, we work backwards
+ * character-by-character down to s0. At each current point
+ * see if we are at the beginning of a multi-char fold. If so,
+ * that means we would be splitting the fold across nodes, and
+ * so we back up one and try again.
+ *
+ * If we're not at the beginning, we still could be at the
+ * final two characters of a (rare) three character fold. We
+ * check if the sequence starting at the character before the
+ * current position (and including the current and next
+ * characters) is a three character fold. If not, the node can
+ * be split here. If it is, we have to backup two characters
+ * and try again.
+ *
+ * Otherwise, the node can be split at the current position.
+ *
+ * The same logic is used for UTF-8 patterns and not */
+ if (UTF) {
+ Size_t added_len;
+
+ /* Append the fold of ender */
+ (void) _to_uni_fold_flags(
+ ender,
+ (U8 *) e,
+ &added_len,
+ FOLD_FLAGS_FULL | ((ASCII_FOLD_RESTRICTED)
+ ? FOLD_FLAGS_NOMIX_ASCII
+ : 0));
+ e += added_len;
+
+ /* 's' and the character folded to by ender may be the
+ * first two of a three-character fold, in which case the
+ * node should not be split here. That may mean examining
+ * the so-far unparsed character starting at 'p'. But if
+ * ender folded to more than one character, we already have
+ * three characters to look at. Also, we first check if
+ * the sequence consisting of s and the next character form
+ * the first two of some three character fold. If not,
+ * there's no need to peek ahead. */
+ if ( added_len <= UTF8SKIP(e - added_len)
+ && UNLIKELY(is_THREE_CHAR_FOLD_HEAD_utf8_safe(s, e)))
+ {
+ /* Here, the two do form the beginning of a potential
+ * three character fold. The unexamined character may
+ * or may not complete it. Peek at it. It might be
+ * something that ends the node or an escape sequence,
+ * in which case we don't know without a lot of work
+ * what it evaluates to, so we have to assume the worst
+ * case: that it does complete the fold, and so we
+ * can't split here. All such instances will have
+ * that character be an ASCII punctuation character,
+ * like a backslash. So, for that case, backup one and
+ * drop down to try at that position */
+ if (isPUNCT(*p)) {
+ s = (char *) utf8_hop_back((U8 *) s, -1,
+ (U8 *) s_start);
+ backed_up = TRUE;
+ }
+ else {
+ /* Here, since it's not punctuation, it must be a
+ * real character, and we can append its fold to
+ * 'e' (having deliberately reserved enough space
+ * for this eventuality) and drop down to check if
+ * the three actually do form a folded sequence */
+ (void) _to_utf8_fold_flags(
+ (U8 *) p, (U8 *) RExC_end,
+ (U8 *) e,
+ &added_len,
+ FOLD_FLAGS_FULL | ((ASCII_FOLD_RESTRICTED)
+ ? FOLD_FLAGS_NOMIX_ASCII
+ : 0));
+ e += added_len;
+ }
}
- len = s - s0 + 1;
- }
- else {
- /* Point to the first byte of the final character */
- s = (char *) utf8_hop_back((U8 *) s, -1, (U8 *) s0);
+ /* Here, we either have three characters available in
+ * sequence starting at 's', or we have two characters and
+ * know that the following one can't possibly be part of a
+ * three character fold. We go through the node backwards
+ * until we find a place where we can split it without
+ * breaking apart a multi-character fold. At any given
+ * point we have to worry about if such a fold begins at
+ * the current 's', and also if a three-character fold
+ * begins at s-1, (containing s and s+1). Splitting in
+ * either case would break apart a fold */
+ do {
+ char *prev_s = (char *) utf8_hop_back((U8 *) s, -1,
+ (U8 *) s_start);
+
+ /* If is a multi-char fold, can't split here. Backup
+ * one char and try again */
+ if (UNLIKELY(is_MULTI_CHAR_FOLD_utf8_safe(s, e))) {
+ s = prev_s;
+ backed_up = TRUE;
+ continue;
+ }
- while (s >= s0) { /* Search backwards until find
- a non-problematic char */
- if (UTF8_IS_INVARIANT(*s)) {
+ /* If the two characters beginning at 's' are part of a
+ * three character fold starting at the character
+ * before s, we can't split either before or after s.
+ * Backup two chars and try again */
+ if ( LIKELY(s > s_start)
+ && UNLIKELY(is_THREE_CHAR_FOLD_utf8_safe(prev_s, e)))
+ {
+ s = prev_s;
+ s = (char *) utf8_hop_back((U8 *) s, -1, (U8 *) s_start);
+ backed_up = TRUE;
+ continue;
+ }
- /* There are no ascii characters that participate
- * in multi-char folds under /aa. In EBCDIC, the
- * non-ascii invariants are all control characters,
- * so don't ever participate in any folds. */
- if (ASCII_FOLD_RESTRICTED
- || ! IS_NON_FINAL_FOLD(*s))
- {
- break;
- }
+ /* Here there's no multi-char fold between s and the
+ * next character following it. We can split */
+ splittable = TRUE;
+ break;
+
+ } while (s > s_start); /* End of loops backing up through the node */
+
+ /* Here we either couldn't find a place to split the node,
+ * or else we broke out of the loop setting 'splittable' to
+ * true. In the latter case, the place to split is between
+ * the first and second characters in the sequence starting
+ * at 's' */
+ if (splittable) {
+ s += UTF8SKIP(s);
+ }
+ }
+ else { /* Pattern not UTF-8 */
+ if ( ender != LATIN_SMALL_LETTER_SHARP_S
+ || ASCII_FOLD_RESTRICTED)
+ {
+ assert( toLOWER_L1(ender) < 256 );
+ *e++ = (char)(toLOWER_L1(ender)); /* should e and the cast be U8? */
+ }
+ else {
+ *e++ = 's';
+ *e++ = 's';
+ }
+
+ if ( e - s <= 1
+ && UNLIKELY(is_THREE_CHAR_FOLD_HEAD_latin1_safe(s, e)))
+ {
+ if (isPUNCT(*p)) {
+ s--;
+ backed_up = TRUE;
}
- else if (UTF8_IS_DOWNGRADEABLE_START(*s)) {
- if (! IS_NON_FINAL_FOLD(EIGHT_BIT_UTF8_TO_NATIVE(
- *s, *(s+1))))
+ else {
+ if ( UCHARAT(p) != LATIN_SMALL_LETTER_SHARP_S
+ || ASCII_FOLD_RESTRICTED)
{
- break;
+ assert( toLOWER_L1(ender) < 256 );
+ *e++ = (char)(toLOWER_L1(ender)); /* should e and the cast be U8? */
+ }
+ else {
+ *e++ = 's';
+ *e++ = 's';
}
}
- else if (! _invlist_contains_cp(
- PL_NonFinalFold,
- valid_utf8_to_uvchr((U8 *) s, NULL)))
- {
- break;
+ }
+
+ do {
+ if (UNLIKELY(is_MULTI_CHAR_FOLD_latin1_safe(s, e))) {
+ s--;
+ backed_up = TRUE;
+ continue;
}
- /* Here, the current character is problematic in that
- * it does occur in the non-final position of some
- * fold, so try the character before it, but have to
- * special case the very first byte in the string, so
- * we don't read outside the string */
- s = (s == s0) ? s -1 : (char *) utf8_hop((U8 *) s, -1);
- backup_count++;
- } /* End of loop backwards through the string */
-
- /* If there were only problematic characters in the string,
- * <s> will point to before s0, in which case the length
- * should be 0, otherwise include the length of the
- * non-problematic character just found */
- len = (s < s0) ? 0 : s - s0 + UTF8SKIP(s);
- }
+ if ( LIKELY(s > s_start)
+ && UNLIKELY(is_THREE_CHAR_FOLD_latin1_safe(s - 1, e)))
+ {
+ s -= 2;
+ backed_up = TRUE;
+ continue;
+ }
- /* Here, have found the final character, if any, that is
- * non-problematic as far as ending the node without splitting
- * it across a potential multi-char fold. <len> contains the
- * number of bytes in the node up-to and including that
- * character, or is 0 if there is no such character, meaning
- * the whole node contains only problematic characters. In
- * this case, give up and just take the node as-is. We can't
- * do any better */
- if (len == 0) {
- len = full_len;
+ splittable = TRUE;
+ break;
- } else {
+ } while (s > s_start);
- /* Here, the node does contain some characters that aren't
- * problematic. If we didn't have to backup any, then the
- * final character in the node is non-problematic, and we
- * can take the node as-is */
- if (backup_count == 0) {
- goto loopdone;
+ if (splittable) {
+ s++;
}
- else if (backup_count == 1) {
+ }
- /* If the final character is problematic, but the
- * penultimate is not, back-off that last character to
- * later start a new node with it */
- p = oldp;
- goto loopdone;
+ /* Here, we are done backing up. If we didn't backup at all
+ * (the likely case), just proceed */
+ if (backed_up) {
+
+ /* If we did find a place to split, reparse the entire node
+ * stopping where we have calculated. */
+ if (splittable) {
+
+ /* If we created a temporary folded string under /l, we
+ * have to map that back to the original */
+ if (need_to_fold_loc) {
+ upper_fill = loc_correspondence[s - s_start];
+ if (upper_fill == 0) {
+ FAIL2("panic: loc_correspondence[%d] is 0",
+ (int) (s - s_start));
+ }
+ Safefree(locfold_buf);
+ Safefree(loc_correspondence);
+ }
+ else {
+ upper_fill = s - s0;
+ }
+ goto reparse;
}
- /* Here, the final non-problematic character is earlier
- * in the input than the penultimate character. What we do
- * is reparse from the beginning, going up only as far as
- * this final ok one, thus guaranteeing that the node ends
- * in an acceptable character. The reason we reparse is
- * that we know how far in the character is, but we don't
- * know how to correlate its position with the input parse.
- * An alternate implementation would be to build that
- * correlation as we go along during the original parse,
- * but that would entail extra work for every node, whereas
- * this code gets executed only when the string is too
- * large for the node, and the final two characters are
- * problematic, an infrequent occurrence. Yet another
- * possible strategy would be to save the tail of the
- * string, and the next time regatom is called, initialize
- * with that. The problem with this is that unless you
- * back off one more character, you won't be guaranteed
- * regatom will get called again, unless regbranch,
- * regpiece ... are also changed. If you do back off that
- * extra character, so that there is input guaranteed to
- * force calling regatom, you can't handle the case where
- * just the first character in the node is acceptable. I
- * (khw) decided to try this method which doesn't have that
- * pitfall; if performance issues are found, we can do a
- * combination of the current approach plus that one */
- upper_parse = len;
- len = 0;
- s = s0;
- goto reparse;
+ /* Here the node consists entirely of non-final multi-char
+ * folds. (Likely it is all 'f's or all 's's.) There's no
+ * decent place to split it, so give up and just take the
+ * whole thing */
+ len = old_s - s0;
+ }
+
+ if (need_to_fold_loc) {
+ Safefree(locfold_buf);
+ Safefree(loc_correspondence);
}
} /* End of verifying node ends with an appropriate char */
+ /* We need to start the next node at the character that didn't fit
+ * in this one */
+ p = oldp;
+
loopdone: /* Jumped to when encounters something that shouldn't be
in the node */
/* Free up any over-allocated space; cast is to silence bogus
* warning in MS VC */
change_engine_size(pRExC_state,
- - (Ptrdiff_t) (initial_size - STR_SZ(len)));
+ - (Ptrdiff_t) (current_string_nodes - STR_SZ(len)));
/* I (khw) don't know if you can get here with zero length, but the
* old code handled this situation by creating a zero-length EXACT
@@ -14781,15 +15254,21 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
else {
/* If the node type is EXACT here, check to see if it
- * should be EXACTL, or EXACT_ONLY8. */
+ * should be EXACTL, or EXACT_REQ8. */
if (node_type == EXACT) {
if (LOC) {
node_type = EXACTL;
}
else if (requires_utf8_target) {
- node_type = EXACT_ONLY8;
+ node_type = EXACT_REQ8;
}
- } else if (FOLD) {
+ }
+ else if (node_type == LEXACT) {
+ if (requires_utf8_target) {
+ node_type = LEXACT_REQ8;
+ }
+ }
+ else if (FOLD) {
if ( UNLIKELY(has_micro_sign || has_ss)
&& (node_type == EXACTFU || ( node_type == EXACTF
&& maybe_exactfu)))
@@ -14824,6 +15303,11 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
}
else if (node_type == EXACTF) { /* Means is /di */
+ /* This intermediate variable is needed solely because
+ * the asserts in the macro where used exceed Win32's
+ * literal string capacity */
+ char first_char = * STRING(REGNODE_p(ret));
+
/* If 'maybe_exactfu' is clear, then we need to stay
* /di. If it is set, it means there are no code
* points that match differently depending on UTF8ness
@@ -14832,7 +15316,7 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
if (! maybe_exactfu) {
RExC_seen_d_op = TRUE;
}
- else if ( isALPHA_FOLD_EQ(* STRING(REGNODE_p(ret)), 's')
+ else if ( isALPHA_FOLD_EQ(first_char, 's')
|| isALPHA_FOLD_EQ(ender, 's'))
{
/* But, if the node begins or ends in an 's' we
@@ -14852,16 +15336,16 @@ S_regatom(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth)
}
if (requires_utf8_target && node_type == EXACTFU) {
- node_type = EXACTFU_ONLY8;
+ node_type = EXACTFU_REQ8;
}
}
OP(REGNODE_p(ret)) = node_type;
- STR_LEN(REGNODE_p(ret)) = len;
+ setSTR_LEN(REGNODE_p(ret), len);
RExC_emit += STR_SZ(len);
/* If the node isn't a single character, it can't be SIMPLE */
- if (len > (Size_t) ((UTF) ? UVCHR_SKIP(ender) : 1)) {
+ if (len > (Size_t) ((UTF) ? UTF8SKIP(STRING(REGNODE_p(ret))) : 1)) {
maybe_SIMPLE = 0;
}
@@ -14913,7 +15397,7 @@ S_populate_ANYOF_from_invlist(pTHX_ regnode *node, SV** invlist_ptr)
assert(PL_regkind[OP(node)] == ANYOF);
/* There is no bitmap for this node type */
- if (OP(node) == ANYOFH) {
+ if (inRANGE(OP(node), ANYOFH, ANYOFRb)) {
return;
}
@@ -15844,15 +16328,16 @@ S_handle_regex_sets(pTHX_ RExC_state_t *pRExC_state, SV** return_invlist,
with left paren in stack is; -1 if none.
*/
STRLEN len; /* Temporary */
- regnode_offset node; /* Temporary, and final regnode returned by
+ regnode_offset node; /* Temporary, and final regnode returned by
this function */
const bool save_fold = FOLD; /* Temporary */
char *save_end, *save_parse; /* Temporaries */
const bool in_locale = LOC; /* we turn off /l during processing */
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_HANDLE_REGEX_SETS;
+ PERL_UNUSED_ARG(oregcomp_parse); /* Only for Set_Node_Length */
DEBUG_PARSE("xcls");
@@ -15979,14 +16464,16 @@ redo_curchar:
SV* rhs; /* Operand to the right of the operator */
SV* fence_ptr; /* Pointer to top element of the fence
stack */
-
case '(':
if ( RExC_parse < RExC_end - 2
&& UCHARAT(RExC_parse + 1) == '?'
&& UCHARAT(RExC_parse + 2) == '^')
{
- /* If is a '(?', could be an embedded '(?^flags:(?[...])'.
+ const regnode_offset orig_emit = RExC_emit;
+ SV * resultant_invlist;
+
+ /* If is a '(?^', could be an embedded '(?^flags:(?[...])'.
* This happens when we have some thing like
*
* my $thai_or_lao = qr/(?[ \p{Thai} + \p{Lao} ])/;
@@ -15995,62 +16482,36 @@ redo_curchar:
*
* Here we would be handling the interpolated
* '$thai_or_lao'. We handle this by a recursive call to
- * ourselves which returns the inversion list the
- * interpolated expression evaluates to. We use the flags
- * from the interpolated pattern. */
- U32 save_flags = RExC_flags;
- const char * save_parse;
-
- RExC_parse += 2; /* Skip past the '(?' */
- save_parse = RExC_parse;
-
- /* Parse the flags for the '(?'. We already know the first
- * flag to parse is a '^' */
- parse_lparen_question_flags(pRExC_state);
-
- if ( RExC_parse >= RExC_end - 4
- || UCHARAT(RExC_parse) != ':'
- || UCHARAT(++RExC_parse) != '('
- || UCHARAT(++RExC_parse) != '?'
- || UCHARAT(++RExC_parse) != '[')
- {
-
- /* In combination with the above, this moves the
- * pointer to the point just after the first erroneous
- * character. */
- if (RExC_parse >= RExC_end - 4) {
- RExC_parse = RExC_end;
- }
- else if (RExC_parse != save_parse) {
- RExC_parse += (UTF)
- ? UTF8_SAFE_SKIP(RExC_parse, RExC_end)
- : 1;
- }
- vFAIL("Expecting '(?flags:(?[...'");
- }
+ * reg which returns the inversion list the
+ * interpolated expression evaluates to. Actually, the
+ * return is a special regnode containing a pointer to that
+ * inversion list. If the return isn't that regnode alone,
+ * we know that this wasn't such an interpolation, which is
+ * an error: we need to get a single inversion list back
+ * from the recursion */
- /* Recurse, with the meat of the embedded expression */
RExC_parse++;
- if (! handle_regex_sets(pRExC_state, &current, flagp,
- depth+1, oregcomp_parse))
- {
- RETURN_FAIL_ON_RESTART(*flagp, flagp);
- }
+ RExC_sets_depth++;
- /* Here, 'current' contains the embedded expression's
- * inversion list, and RExC_parse points to the trailing
- * ']'; the next character should be the ')' */
- RExC_parse++;
- if (UCHARAT(RExC_parse) != ')')
- vFAIL("Expecting close paren for nested extended charclass");
+ node = reg(pRExC_state, 2, flagp, depth+1);
+ RETURN_FAIL_ON_RESTART(*flagp, flagp);
- /* Then the ')' matching the original '(' handled by this
- * case: statement */
- RExC_parse++;
- if (UCHARAT(RExC_parse) != ')')
- vFAIL("Expecting close paren for wrapper for nested extended charclass");
+ if ( OP(REGNODE_p(node)) != REGEX_SET
+ /* If more than a single node returned, the nested
+ * parens evaluated to more than just a (?[...]),
+ * which isn't legal */
+ || RExC_emit != orig_emit
+ + NODE_STEP_REGNODE
+ + regarglen[REGEX_SET])
+ {
+ vFAIL("Expecting interpolated extended charclass");
+ }
+ resultant_invlist = (SV *) ARGp(REGNODE_p(node));
+ current = invlist_clone(resultant_invlist, NULL);
+ SvREFCNT_dec(resultant_invlist);
- RExC_flags = save_flags;
+ RExC_sets_depth--;
+ RExC_emit = orig_emit;
goto handle_operand;
}
@@ -16093,6 +16554,8 @@ redo_curchar:
goto regclass_failed;
}
+ assert(current);
+
/* regclass() will return with parsing just the \ sequence,
* leaving the parse pointer at the next thing to parse */
RExC_parse--;
@@ -16130,9 +16593,7 @@ redo_curchar:
goto regclass_failed;
}
- if (! current) {
- break;
- }
+ assert(current);
/* function call leaves parse pointing to the ']', except if we
* faked it */
@@ -16438,84 +16899,96 @@ redo_curchar:
return END;
}
- /* Otherwise generate a resultant node, based on 'final'. regclass() is
- * expecting a string of ranges and individual code points */
- invlist_iterinit(final);
- result_string = newSVpvs("");
- while (invlist_iternext(final, &start, &end)) {
- if (start == end) {
- Perl_sv_catpvf(aTHX_ result_string, "\\x{%" UVXf "}", start);
- }
- else {
- Perl_sv_catpvf(aTHX_ result_string, "\\x{%" UVXf "}-\\x{%" UVXf "}",
- start, end);
- }
+ if (RExC_sets_depth) { /* If within a recursive call, return in a special
+ regnode */
+ RExC_parse++;
+ node = regpnode(pRExC_state, REGEX_SET, final);
}
+ else {
- /* About to generate an ANYOF (or similar) node from the inversion list we
- * have calculated */
- save_parse = RExC_parse;
- RExC_parse = SvPV(result_string, len);
- save_end = RExC_end;
- RExC_end = RExC_parse + len;
- TURN_OFF_WARNINGS_IN_SUBSTITUTE_PARSE;
+ /* Otherwise generate a resultant node, based on 'final'. regclass()
+ * is expecting a string of ranges and individual code points */
+ invlist_iterinit(final);
+ result_string = newSVpvs("");
+ while (invlist_iternext(final, &start, &end)) {
+ if (start == end) {
+ Perl_sv_catpvf(aTHX_ result_string, "\\x{%" UVXf "}", start);
+ }
+ else {
+ Perl_sv_catpvf(aTHX_ result_string, "\\x{%" UVXf "}-\\x{%"
+ UVXf "}", start, end);
+ }
+ }
+
+ /* About to generate an ANYOF (or similar) node from the inversion list
+ * we have calculated */
+ save_parse = RExC_parse;
+ RExC_parse = SvPV(result_string, len);
+ save_end = RExC_end;
+ RExC_end = RExC_parse + len;
+ TURN_OFF_WARNINGS_IN_SUBSTITUTE_PARSE;
+
+ /* We turn off folding around the call, as the class we have
+ * constructed already has all folding taken into consideration, and we
+ * don't want regclass() to add to that */
+ RExC_flags &= ~RXf_PMf_FOLD;
+ /* regclass() can only return RESTART_PARSE and NEED_UTF8 if multi-char
+ * folds are allowed. */
+ node = regclass(pRExC_state, flagp, depth+1,
+ FALSE, /* means parse the whole char class */
+ FALSE, /* don't allow multi-char folds */
+ TRUE, /* silence non-portable warnings. The above may
+ very well have generated non-portable code
+ points, but they're valid on this machine */
+ FALSE, /* similarly, no need for strict */
+
+ /* We can optimize into something besides an ANYOF,
+ * except under /l, which needs to be ANYOF because of
+ * runtime checks for locale sanity, etc */
+ ! in_locale,
+ NULL
+ );
- /* We turn off folding around the call, as the class we have constructed
- * already has all folding taken into consideration, and we don't want
- * regclass() to add to that */
- RExC_flags &= ~RXf_PMf_FOLD;
- /* regclass() can only return RESTART_PARSE and NEED_UTF8 if multi-char
- * folds are allowed. */
- node = regclass(pRExC_state, flagp, depth+1,
- FALSE, /* means parse the whole char class */
- FALSE, /* don't allow multi-char folds */
- TRUE, /* silence non-portable warnings. The above may very
- well have generated non-portable code points, but
- they're valid on this machine */
- FALSE, /* similarly, no need for strict */
- FALSE, /* Require return to be an ANYOF */
- NULL
- );
+ RESTORE_WARNINGS;
+ RExC_parse = save_parse + 1;
+ RExC_end = save_end;
+ SvREFCNT_dec_NN(final);
+ SvREFCNT_dec_NN(result_string);
- RESTORE_WARNINGS;
- RExC_parse = save_parse + 1;
- RExC_end = save_end;
- SvREFCNT_dec_NN(final);
- SvREFCNT_dec_NN(result_string);
-
- if (save_fold) {
- RExC_flags |= RXf_PMf_FOLD;
- }
-
- if (!node) {
- RETURN_FAIL_ON_RESTART(*flagp, flagp);
- goto regclass_failed;
- }
-
- /* Fix up the node type if we are in locale. (We have pretended we are
- * under /u for the purposes of regclass(), as this construct will only
- * work under UTF-8 locales. But now we change the opcode to be ANYOFL (so
- * as to cause any warnings about bad locales to be output in regexec.c),
- * and add the flag that indicates to check if not in a UTF-8 locale. The
- * reason we above forbid optimization into something other than an ANYOF
- * node is simply to minimize the number of code changes in regexec.c.
- * Otherwise we would have to create new EXACTish node types and deal with
- * them. This decision could be revisited should this construct become
- * popular.
- *
- * (One might think we could look at the resulting ANYOF node and suppress
- * the flag if everything is above 255, as those would be UTF-8 only,
- * but this isn't true, as the components that led to that result could
- * have been locale-affected, and just happen to cancel each other out
- * under UTF-8 locales.) */
- if (in_locale) {
- set_regex_charset(&RExC_flags, REGEX_LOCALE_CHARSET);
+ if (save_fold) {
+ RExC_flags |= RXf_PMf_FOLD;
+ }
- assert(OP(REGNODE_p(node)) == ANYOF);
+ if (!node) {
+ RETURN_FAIL_ON_RESTART(*flagp, flagp);
+ goto regclass_failed;
+ }
- OP(REGNODE_p(node)) = ANYOFL;
- ANYOF_FLAGS(REGNODE_p(node))
- |= ANYOFL_SHARED_UTF8_LOCALE_fold_HAS_MATCHES_nonfold_REQD;
+ /* Fix up the node type if we are in locale. (We have pretended we are
+ * under /u for the purposes of regclass(), as this construct will only
+ * work under UTF-8 locales. But now we change the opcode to be ANYOFL
+ * (so as to cause any warnings about bad locales to be output in
+ * regexec.c), and add the flag that indicates to check if not in a
+ * UTF-8 locale. The reason we above forbid optimization into
+ * something other than an ANYOF node is simply to minimize the number
+ * of code changes in regexec.c. Otherwise we would have to create new
+ * EXACTish node types and deal with them. This decision could be
+ * revisited should this construct become popular.
+ *
+ * (One might think we could look at the resulting ANYOF node and
+ * suppress the flag if everything is above 255, as those would be
+ * UTF-8 only, but this isn't true, as the components that led to that
+ * result could have been locale-affected, and just happen to cancel
+ * each other out under UTF-8 locales.) */
+ if (in_locale) {
+ set_regex_charset(&RExC_flags, REGEX_LOCALE_CHARSET);
+
+ assert(OP(REGNODE_p(node)) == ANYOF);
+
+ OP(REGNODE_p(node)) = ANYOFL;
+ ANYOF_FLAGS(REGNODE_p(node))
+ |= ANYOFL_SHARED_UTF8_LOCALE_fold_HAS_MATCHES_nonfold_REQD;
+ }
}
nextchar(pRExC_state);
@@ -16627,8 +17100,8 @@ S_add_above_Latin1_folds(pTHX_ RExC_state_t *pRExC_state, const U8 cp, SV** invl
current Unicode version */
{
Size_t folds_count;
- unsigned int first_fold;
- const unsigned int * remaining_folds;
+ U32 first_fold;
+ const U32 * remaining_folds;
UV folded_cp;
if (isASCII(cp)) {
@@ -16684,6 +17157,7 @@ S_output_posix_warnings(pTHX_ RExC_state_t *pRExC_state, AV* posix_warnings)
PERL_ARGS_ASSERT_OUTPUT_POSIX_WARNINGS;
if (! TO_OUTPUT_WARNINGS(RExC_parse)) {
+ CLEAR_POSIX_WARNINGS();
return;
}
@@ -16702,6 +17176,22 @@ S_output_posix_warnings(pTHX_ RExC_state_t *pRExC_state, AV* posix_warnings)
UPDATE_WARNINGS_LOC(RExC_parse);
}
+PERL_STATIC_INLINE Size_t
+S_find_first_differing_byte_pos(const U8 * s1, const U8 * s2, const Size_t max)
+{
+ const U8 * const start = s1;
+ const U8 * const send = start + max;
+
+ PERL_ARGS_ASSERT_FIND_FIRST_DIFFERING_BYTE_POS;
+
+ while (s1 < send && *s1 == *s2) {
+ s1++; s2++;
+ }
+
+ return s1 - start;
+}
+
+
STATIC AV *
S_add_multi_match(pTHX_ AV* multi_char_matches, SV* multi_string, const STRLEN cp_count)
{
@@ -16761,10 +17251,10 @@ S_add_multi_match(pTHX_ AV* multi_char_matches, SV* multi_string, const STRLEN c
*
* There is a line below that uses the same white space criteria but is outside
* this macro. Both here and there must use the same definition */
-#define SKIP_BRACKETED_WHITE_SPACE(do_skip, p) \
+#define SKIP_BRACKETED_WHITE_SPACE(do_skip, p, stop_p) \
STMT_START { \
if (do_skip) { \
- while (isBLANK_A(UCHARAT(p))) \
+ while (p < stop_p && isBLANK_A(UCHARAT(p))) \
{ \
p++; \
} \
@@ -16911,13 +17401,14 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
what gets folded */
U32 has_runtime_dependency = 0; /* OR of the above flags */
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGCLASS;
#ifndef DEBUGGING
PERL_UNUSED_ARG(depth);
#endif
+ assert(! (ret_invlist && allow_mutiple_chars));
/* If wants an inversion list returned, we can't optimize to something
* else. */
@@ -16939,7 +17430,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
initial_listsv_len = SvCUR(listsv);
SvTEMP_off(listsv); /* Grr, TEMPs and mortals are conflated. */
- SKIP_BRACKETED_WHITE_SPACE(skip_white, RExC_parse);
+ SKIP_BRACKETED_WHITE_SPACE(skip_white, RExC_parse, RExC_end);
assert(RExC_parse <= RExC_end);
@@ -16948,7 +17439,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
invert = TRUE;
allow_mutiple_chars = FALSE;
MARK_NAUGHTY(1);
- SKIP_BRACKETED_WHITE_SPACE(skip_white, RExC_parse);
+ SKIP_BRACKETED_WHITE_SPACE(skip_white, RExC_parse, RExC_end);
}
/* Check that they didn't say [:posix:] instead of [[:posix:]] */
@@ -16995,12 +17486,12 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
output_posix_warnings(pRExC_state, posix_warnings);
}
+ SKIP_BRACKETED_WHITE_SPACE(skip_white, RExC_parse, RExC_end);
+
if (RExC_parse >= stop_ptr) {
break;
}
- SKIP_BRACKETED_WHITE_SPACE(skip_white, RExC_parse);
-
if (UCHARAT(RExC_parse) == ']') {
break;
}
@@ -17098,6 +17589,9 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
* is already in 'value'. Otherwise, need to translate the escape
* into what it signifies. */
if (! skip_white || ! isBLANK_A(value)) switch ((I32)value) {
+ const char * message;
+ U32 packed_warn;
+ U8 grok_c_char;
case 'w': namedclass = ANYOF_WORDCHAR; break;
case 'W': namedclass = ANYOF_NWORDCHAR; break;
@@ -17145,7 +17639,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
{
if (strict) {
RExC_parse--;
- vFAIL("\\N{} in inverted character class or as a range end-point is restricted to one character");
+ vFAIL("\\N{} here is restricted to one character");
}
ckWARNreg(RExC_parse, "Using just the first character returned by \\N{} in character class");
break; /* <value> contains the first code
@@ -17180,6 +17674,15 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
{
char *e;
+ if (RExC_pm_flags & PMf_WILDCARD) {
+ RExC_parse++;
+ /* diag_listed_as: Use of %s is not allowed in Unicode
+ property wildcard subpatterns in regex; marked by <--
+ HERE in m/%s/ */
+ vFAIL3("Use of '\\%c%c' is not allowed in Unicode property"
+ " wildcard subpatterns", (char) value, *(RExC_parse - 1));
+ }
+
/* \p means they want Unicode semantics */
REQUIRE_UNI_RULES(flagp, 0);
@@ -17243,6 +17746,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
/* If set TRUE, the property is user-defined as opposed to
* official Unicode */
bool user_defined = FALSE;
+ AV * strings = NULL;
SV * prop_definition = parse_uniprop_string(
name, n, UTF, FOLD,
@@ -17253,6 +17757,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
* this call */
! cBOOL(ret_invlist),
+ &strings,
&user_defined,
msg,
0 /* Base level */
@@ -17270,7 +17775,66 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
SvCUR(msg), SvPVX(msg)));
}
- if (! is_invlist(prop_definition)) {
+ assert(prop_definition || strings);
+
+ if (strings) {
+ if (ret_invlist) {
+ if (! prop_definition) {
+ RExC_parse = e + 1;
+ vFAIL("Unicode string properties are not implemented in (?[...])");
+ }
+ else {
+ ckWARNreg(e + 1,
+ "Using just the single character results"
+ " returned by \\p{} in (?[...])");
+ }
+ }
+ else if (! RExC_in_multi_char_class) {
+ if (invert ^ (value == 'P')) {
+ RExC_parse = e + 1;
+ vFAIL("Inverting a character class which contains"
+ " a multi-character sequence is illegal");
+ }
+
+ /* For each multi-character string ... */
+ while (av_tindex(strings) >= 0) {
+ /* ... Each entry is itself an array of code
+ * points. */
+ AV * this_string = (AV *) av_shift( strings);
+ STRLEN cp_count = av_tindex(this_string) + 1;
+ SV * final = newSV(cp_count * 4);
+ SvPVCLEAR(final);
+
+ /* Create another string of sequences of \x{...} */
+ while (av_tindex(this_string) >= 0) {
+ SV * character = av_shift(this_string);
+ UV cp = SvUV(character);
+
+ if (cp > 255) {
+ REQUIRE_UTF8(flagp);
+ }
+ Perl_sv_catpvf(aTHX_ final, "\\x{%" UVXf "}",
+ cp);
+ SvREFCNT_dec_NN(character);
+ }
+ SvREFCNT_dec_NN(this_string);
+
+ /* And add that to the list of such things */
+ multi_char_matches
+ = add_multi_match(multi_char_matches,
+ final,
+ cp_count);
+ }
+ }
+ SvREFCNT_dec_NN(strings);
+ }
+
+ if (! prop_definition) { /* If we got only a string,
+ this iteration didn't really
+ find a character */
+ element_count--;
+ }
+ else if (! is_invlist(prop_definition)) {
/* Here, the definition isn't known, so we have gotten
* returned a string that will be evaluated if and when
@@ -17348,53 +17912,74 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
case 'a': value = '\a'; break;
case 'o':
RExC_parse--; /* function expects to be pointed at the 'o' */
- {
- const char* error_msg;
- bool valid = grok_bslash_o(&RExC_parse,
- RExC_end,
- &value,
- &error_msg,
- TO_OUTPUT_WARNINGS(RExC_parse),
- strict,
- silence_non_portable,
- UTF);
- if (! valid) {
- vFAIL(error_msg);
- }
- UPDATE_WARNINGS_LOC(RExC_parse - 1);
- }
- non_portable_endpoint++;
+ if (! grok_bslash_o(&RExC_parse,
+ RExC_end,
+ &value,
+ &message,
+ &packed_warn,
+ strict,
+ cBOOL(range), /* MAX_UV allowed for range
+ upper limit */
+ UTF))
+ {
+ vFAIL(message);
+ }
+ else if (message && TO_OUTPUT_WARNINGS(RExC_parse)) {
+ warn_non_literal_string(RExC_parse, packed_warn, message);
+ }
+
+ if (value < 256) {
+ non_portable_endpoint++;
+ }
break;
case 'x':
RExC_parse--; /* function expects to be pointed at the 'x' */
- {
- const char* error_msg;
- bool valid = grok_bslash_x(&RExC_parse,
- RExC_end,
- &value,
- &error_msg,
- TO_OUTPUT_WARNINGS(RExC_parse),
- strict,
- silence_non_portable,
- UTF);
- if (! valid) {
- vFAIL(error_msg);
- }
- UPDATE_WARNINGS_LOC(RExC_parse - 1);
- }
- non_portable_endpoint++;
+ if (! grok_bslash_x(&RExC_parse,
+ RExC_end,
+ &value,
+ &message,
+ &packed_warn,
+ strict,
+ cBOOL(range), /* MAX_UV allowed for range
+ upper limit */
+ UTF))
+ {
+ vFAIL(message);
+ }
+ else if (message && TO_OUTPUT_WARNINGS(RExC_parse)) {
+ warn_non_literal_string(RExC_parse, packed_warn, message);
+ }
+
+ if (value < 256) {
+ non_portable_endpoint++;
+ }
break;
case 'c':
- value = grok_bslash_c(*RExC_parse, TO_OUTPUT_WARNINGS(RExC_parse));
- UPDATE_WARNINGS_LOC(RExC_parse);
- RExC_parse++;
+ if (! grok_bslash_c(*RExC_parse, &grok_c_char, &message,
+ &packed_warn))
+ {
+ /* going to die anyway; point to exact spot of
+ * failure */
+ RExC_parse += (UTF)
+ ? UTF8_SAFE_SKIP(RExC_parse, RExC_end)
+ : 1;
+ vFAIL(message);
+ }
+
+ value = grok_c_char;
+ RExC_parse++;
+ if (message && TO_OUTPUT_WARNINGS(RExC_parse)) {
+ warn_non_literal_string(RExC_parse, packed_warn, message);
+ }
+
non_portable_endpoint++;
break;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7':
{
/* Take 1-3 octal digits */
- I32 flags = PERL_SCAN_SILENT_ILLDIGIT;
+ I32 flags = PERL_SCAN_SILENT_ILLDIGIT
+ | PERL_SCAN_NOTIFY_ILLDIGIT;
numlen = (strict) ? 4 : 3;
value = grok_oct(--RExC_parse, &numlen, &flags, NULL);
RExC_parse += numlen;
@@ -17405,17 +17990,20 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
: 1;
vFAIL("Need exactly 3 octal digits");
}
- else if ( numlen < 3 /* like \08, \178 */
+ else if ( (flags & PERL_SCAN_NOTIFY_ILLDIGIT)
&& RExC_parse < RExC_end
&& isDIGIT(*RExC_parse)
&& ckWARN(WARN_REGEXP))
{
reg_warn_non_literal_string(
RExC_parse + 1,
- form_short_octal_warning(RExC_parse, numlen));
+ form_alien_digit_msg(8, numlen, RExC_parse,
+ RExC_end, UTF, FALSE));
}
}
- non_portable_endpoint++;
+ if (value < 256) {
+ non_portable_endpoint++;
+ }
break;
}
default:
@@ -17592,7 +18180,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
}
} /* end of namedclass \blah */
- SKIP_BRACKETED_WHITE_SPACE(skip_white, RExC_parse);
+ SKIP_BRACKETED_WHITE_SPACE(skip_white, RExC_parse, RExC_end);
/* If 'range' is set, 'value' is the ending of a range--check its
* validity. (If value isn't a single code point in the case of a
@@ -17635,7 +18223,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
char* next_char_ptr = RExC_parse + 1;
/* Get the next real char after the '-' */
- SKIP_BRACKETED_WHITE_SPACE(skip_white, next_char_ptr);
+ SKIP_BRACKETED_WHITE_SPACE(skip_white, next_char_ptr, RExC_end);
/* If the '-' is at the end of the class (just before the ']',
* it is a literal minus; otherwise it is a range */
@@ -17677,7 +18265,21 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
/* non-Latin1 code point implies unicode semantics. */
if (value > 255) {
+ if (value > MAX_LEGAL_CP && ( value != UV_MAX
+ || prevvalue > MAX_LEGAL_CP))
+ {
+ vFAIL(form_cp_too_large_msg(16, NULL, 0, value));
+ }
REQUIRE_UNI_RULES(flagp, 0);
+ if ( ! silence_non_portable
+ && UNICODE_IS_PERL_EXTENDED(value)
+ && TO_OUTPUT_WARNINGS(RExC_parse))
+ {
+ ckWARN2_non_literal_string(RExC_parse,
+ packWARN(WARN_PORTABLE),
+ PL_extended_cp_format,
+ value);
+ }
}
/* Ready to process either the single value, or the completed range.
@@ -17758,7 +18360,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
* printable should have each end point be a portable value
* for it (preferably like 'A', but we don't warn if it is
* a (portable) Unicode name or code point), and the range
- * must be be all digits or all letters of the same case.
+ * must be all digits or all letters of the same case.
* Otherwise, the range is non-portable and unclear as to
* what it contains */
if ( (isPRINT_A(prevvalue) || isPRINT_A(value))
@@ -17863,7 +18465,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
literal
);
}
- else if isMNEMONIC_CNTRL(value) {
+ else if (isMNEMONIC_CNTRL(value)) {
vWARN4(RExC_parse,
"\"%.*s\" is more clearly written simply as \"%s\"",
(int) (RExC_parse - rangebegin),
@@ -17950,7 +18552,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
}
#endif
- /* Look at the longest folds first */
+ /* Look at the longest strings first */
for (cp_count = av_tindex_skip_len_mg(multi_char_matches);
cp_count > 0;
cp_count--)
@@ -17976,15 +18578,21 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
}
/* If the character class contains anything else besides these
- * multi-character folds, have to include it in recursive parsing */
+ * multi-character strings, have to include it in recursive parsing */
if (element_count) {
- sv_catpvs(substitute_parse, "|[");
+ bool has_l_bracket = orig_parse > RExC_start && *(orig_parse - 1) == '[';
+
+ sv_catpvs(substitute_parse, "|");
+ if (has_l_bracket) { /* Add an [ if the original had one */
+ sv_catpvs(substitute_parse, "[");
+ }
constructed_prefix_len = SvCUR(substitute_parse);
sv_catpvn(substitute_parse, orig_parse, RExC_parse - orig_parse);
- /* Put in a closing ']' only if not going off the end, as otherwise
- * we are adding something that really isn't there */
- if (RExC_parse < RExC_end) {
+ /* Put in a closing ']' to match any opening one, but not if going
+ * off the end, as otherwise we are adding something that really
+ * isn't there */
+ if (has_l_bracket && RExC_parse < RExC_end) {
sv_catpvs(substitute_parse, "]");
}
}
@@ -18062,8 +18670,8 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
STRLEN foldlen;
unsigned int k;
Size_t folds_count;
- unsigned int first_fold;
- const unsigned int * remaining_folds;
+ U32 first_fold;
+ const U32 * remaining_folds;
if (j < 256) {
@@ -18375,14 +18983,11 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
|= ANYOFL_FOLD
| ANYOFL_SHARED_UTF8_LOCALE_fold_HAS_MATCHES_nonfold_REQD;
}
- else if (cp_list) { /* Look to see if a 0-255 code point is in list */
- UV start, end;
- invlist_iterinit(cp_list);
- if (invlist_iternext(cp_list, &start, &end) && start < 256) {
- anyof_flags |= ANYOFL_FOLD;
- has_runtime_dependency |= HAS_L_RUNTIME_DEPENDENCY;
- }
- invlist_iterfinish(cp_list);
+ else if (cp_list && invlist_lowest(cp_list) < 256) {
+ /* If nothing is below 256, has no locale dependency; otherwise it
+ * does */
+ anyof_flags |= ANYOFL_FOLD;
+ has_runtime_dependency |= HAS_L_RUNTIME_DEPENDENCY;
}
}
else if ( DEPENDS_SEMANTICS
@@ -18405,17 +19010,17 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
invert = FALSE;
}
- if (ret_invlist) {
- *ret_invlist = cp_list;
-
- return RExC_emit;
- }
-
/* All possible optimizations below still have these characteristics.
* (Multi-char folds aren't SIMPLE, but they don't get this far in this
* routine) */
*flagp |= HASWIDTH|SIMPLE;
+ if (ret_invlist) {
+ *ret_invlist = cp_list;
+
+ return (cp_list) ? RExC_emit : 0;
+ }
+
if (anyof_flags & ANYOF_LOCALE_FLAGS) {
RExC_contains_locale = 1;
}
@@ -18427,9 +19032,10 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
if (optimizable) {
PERL_UINT_FAST8_T i;
- Size_t partial_cp_count = 0;
+ UV partial_cp_count = 0;
UV start[MAX_FOLD_FROMS+1] = { 0 }; /* +1 for the folded-to char */
UV end[MAX_FOLD_FROMS+1] = { 0 };
+ bool single_range = FALSE;
if (cp_list) { /* Count the code points in enough ranges that we would
see all the ones possible in any fold in this version
@@ -18443,6 +19049,9 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
partial_cp_count += end[i] - start[i] + 1;
}
+ if (i == 1) {
+ single_range = TRUE;
+ }
invlist_iterfinish(cp_list);
}
@@ -18478,6 +19087,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
goto not_anyof;
}
}
+
/* For well-behaved locales, some classes are subsets of others,
* so complementing the subset and including the non-complemented
* superset should match everything, like [\D[:alnum:]], and
@@ -18582,7 +19192,8 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
/* Next see if can optimize classes that contain just a few code points
* into an EXACTish node. The reason to do this is to let the
- * optimizer join this node with adjacent EXACTish ones.
+ * optimizer join this node with adjacent EXACTish ones, and ANYOF
+ * nodes require conversion to code point from UTF-8.
*
* An EXACTFish node can be generated even if not under /i, and vice
* versa. But care must be taken. An EXACTFish node has to be such
@@ -18601,21 +19212,13 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
* participates in no fold whatsoever, and having it EXACT tells the
* optimizer the target string cannot match unless it has a colon in
* it.
- *
- * We don't typically generate an EXACTish node if doing so would
- * require changing the pattern to UTF-8, as that affects /d and
- * otherwise is slower. However, under /i, not changing to UTF-8 can
- * miss some potential multi-character folds. We calculate the
- * EXACTish node, and then decide if something would be missed if we
- * don't upgrade */
+ */
if ( ! posixl
&& ! invert
/* Only try if there are no more code points in the class than
* in the max possible fold */
- && partial_cp_count > 0 && partial_cp_count <= MAX_FOLD_FROMS + 1
-
- && (start[0] < 256 || UTF || FOLD))
+ && inRANGE(partial_cp_count, 1, MAX_FOLD_FROMS + 1))
{
if (partial_cp_count == 1 && ! upper_latin1_only_utf8_matches)
{
@@ -18624,13 +19227,23 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
if (LOC) {
- /* Here is /l: Use EXACTL, except /li indicates EXACTFL,
- * as that means there is a fold not known until runtime so
- * shows as only a single code point here. */
- op = (FOLD) ? EXACTFL : EXACTL;
+ /* Here is /l: Use EXACTL, except if there is a fold not
+ * known until runtime so shows as only a single code point
+ * here. For code points above 255, we know which can
+ * cause problems by having a potential fold to the Latin1
+ * range. */
+ if ( ! FOLD
+ || ( start[0] > 255
+ && ! is_PROBLEMATIC_LOCALE_FOLD_cp(start[0])))
+ {
+ op = EXACTL;
+ }
+ else {
+ op = EXACTFL;
+ }
}
else if (! FOLD) { /* Not /l and not /i */
- op = (start[0] < 256) ? EXACT : EXACT_ONLY8;
+ op = (start[0] < 256) ? EXACT : EXACT_REQ8;
}
else if (start[0] < 256) { /* /i, not /l, and the code point is
small */
@@ -18660,8 +19273,8 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
applies to it */
op = _invlist_contains_cp(PL_InMultiCharFold,
start[0])
- ? EXACTFU_ONLY8
- : EXACT_ONLY8;
+ ? EXACTFU_REQ8
+ : EXACT_REQ8;
}
value = start[0];
@@ -18746,7 +19359,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
* points) in the ASCII range, so we can't use it here to
* artificially restrict the fold domain, so we check if
* the class does or does not match some EXACTFish node.
- * Further, if we aren't under /i, and and the folded-to
+ * Further, if we aren't under /i, and the folded-to
* character is part of a multi-character fold, we can't do
* this optimization, as the sequence around it could be
* that multi-character fold, and we don't here know the
@@ -18763,8 +19376,8 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
U8 foldbuf[UTF8_MAXBYTES_CASE];
UV folded = _to_uni_fold_flags(start[0],
foldbuf, &foldlen, 0);
- unsigned int first_fold;
- const unsigned int * remaining_folds;
+ U32 first_fold;
+ const U32 * remaining_folds;
Size_t folds_to_this_cp_count = _inverse_folds(
folded,
&first_fold,
@@ -18825,7 +19438,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
? EXACTFLU8
: (ASCII_FOLD_RESTRICTED)
? EXACTFAA
- : EXACTFU_ONLY8;
+ : EXACTFU_REQ8;
value = folded;
}
} /* Below, the lowest code point < 256 */
@@ -18877,45 +19490,43 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
}
if (op != END) {
+ U8 len;
- /* Here, we have calculated what EXACTish node we would use.
- * But we don't use it if it would require converting the
- * pattern to UTF-8, unless not using it could cause us to miss
- * some folds (hence be buggy) */
-
- if (! UTF && value > 255) {
- SV * in_multis = NULL;
-
- assert(FOLD);
-
- /* If there is no code point that is part of a multi-char
- * fold, then there aren't any matches, so we don't do this
- * optimization. Otherwise, it could match depending on
- * the context around us, so we do upgrade */
- _invlist_intersection(PL_InMultiCharFold, cp_list, &in_multis);
- if (UNLIKELY(_invlist_len(in_multis) != 0)) {
+ /* Here, we have calculated what EXACTish node to use. Have to
+ * convert to UTF-8 if not already there */
+ if (value > 255) {
+ if (! UTF) {
+ SvREFCNT_dec(cp_list);;
REQUIRE_UTF8(flagp);
}
- else {
- op = END;
+
+ /* This is a kludge to the special casing issues with this
+ * ligature under /aa. FB05 should fold to FB06, but the
+ * call above to _to_uni_fold_flags() didn't find this, as
+ * it didn't use the /aa restriction in order to not miss
+ * other folds that would be affected. This is the only
+ * instance likely to ever be a problem in all of Unicode.
+ * So special case it. */
+ if ( value == LATIN_SMALL_LIGATURE_LONG_S_T
+ && ASCII_FOLD_RESTRICTED)
+ {
+ value = LATIN_SMALL_LIGATURE_ST;
}
}
- if (op != END) {
- U8 len = (UTF) ? UVCHR_SKIP(value) : 1;
+ len = (UTF) ? UVCHR_SKIP(value) : 1;
- ret = regnode_guts(pRExC_state, op, len, "exact");
- FILL_NODE(ret, op);
- RExC_emit += 1 + STR_SZ(len);
- STR_LEN(REGNODE_p(ret)) = len;
- if (len == 1) {
- *STRING(REGNODE_p(ret)) = (U8) value;
- }
- else {
- uvchr_to_utf8((U8 *) STRING(REGNODE_p(ret)), value);
- }
- goto not_anyof;
+ ret = regnode_guts(pRExC_state, op, len, "exact");
+ FILL_NODE(ret, op);
+ RExC_emit += 1 + STR_SZ(len);
+ setSTR_LEN(REGNODE_p(ret), len);
+ if (len == 1) {
+ *STRINGs(REGNODE_p(ret)) = (U8) value;
+ }
+ else {
+ uvchr_to_utf8((U8 *) STRINGs(REGNODE_p(ret)), value);
}
+ goto not_anyof;
}
}
@@ -18958,7 +19569,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
if (invlist_highest(cp_list) <= max_permissible) {
UV this_start, this_end;
- UV lowest_cp = UV_MAX; /* inited to suppress compiler warn */
+ UV lowest_cp = UV_MAX; /* init'ed to suppress compiler warn */
U8 bits_differing = 0;
Size_t full_cp_count = 0;
bool first_time = TRUE;
@@ -18995,7 +19606,6 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
full_cp_count += this_end - this_start + 1;
}
- invlist_iterfinish(cp_list);
/* At the end of the loop, we count how many bits differ from
* the bits in lowest code point, call the count 'd'. If the
@@ -19024,8 +19634,10 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
ret = reganode(pRExC_state, op, lowest_cp);
FLAGS(REGNODE_p(ret)) = ANYOFM_mask;
}
+
+ done_anyofm:
+ invlist_iterfinish(cp_list);
}
- done_anyofm:
if (inverted) {
_invlist_invert(cp_list);
@@ -19034,6 +19646,13 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
if (op != END) {
goto not_anyof;
}
+
+ /* XXX We could create an ANYOFR_LOW node here if we saved above if
+ * all were invariants, it wasn't inverted, and there is a single
+ * range. This would be faster than some of the posix nodes we
+ * create below like /\d/a, but would be twice the size. Without
+ * having actually measured the gain, khw doesn't think the
+ * tradeoff is really worth it */
}
if (! (anyof_flags & ANYOF_LOCALE_FLAGS)) {
@@ -19150,52 +19769,163 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
SvREFCNT_dec(intersection);
}
- /* If didn't find an optimization and there is no need for a
- * bitmap, optimize to indicate that */
+ /* If it is a single contiguous range, ANYOFR is an efficient regnode,
+ * both in size and speed. Currently, a 20 bit range base (smallest
+ * code point in the range), and a 12 bit maximum delta are packed into
+ * a 32 bit word. This allows for using it on all of the Unicode code
+ * points except for the highest plane, which is only for private use
+ * code points. khw doubts that a bigger delta is likely in real world
+ * applications */
+ if ( single_range
+ && ! has_runtime_dependency
+ && anyof_flags == 0
+ && start[0] < (1 << ANYOFR_BASE_BITS)
+ && end[0] - start[0]
+ < ((1U << (sizeof(((struct regnode_1 *)NULL)->arg1)
+ * CHARBITS - ANYOFR_BASE_BITS))))
+
+ {
+ U8 low_utf8[UTF8_MAXBYTES+1];
+ U8 high_utf8[UTF8_MAXBYTES+1];
+
+ ret = reganode(pRExC_state, ANYOFR,
+ (start[0] | (end[0] - start[0]) << ANYOFR_BASE_BITS));
+
+ /* Place the lowest UTF-8 start byte in the flags field, so as to
+ * allow efficient ruling out at run time of many possible inputs.
+ * */
+ (void) uvchr_to_utf8(low_utf8, start[0]);
+ (void) uvchr_to_utf8(high_utf8, end[0]);
+
+ /* If all code points share the same first byte, this can be an
+ * ANYOFRb. Otherwise store the lowest UTF-8 start byte which can
+ * quickly rule out many inputs at run-time without having to
+ * compute the code point from UTF-8. For EBCDIC, we use I8, as
+ * not doing that transformation would not rule out nearly so many
+ * things */
+ if (low_utf8[0] == high_utf8[0]) {
+ OP(REGNODE_p(ret)) = ANYOFRb;
+ ANYOF_FLAGS(REGNODE_p(ret)) = low_utf8[0];
+ }
+ else {
+ ANYOF_FLAGS(REGNODE_p(ret))
+ = NATIVE_UTF8_TO_I8(low_utf8[0]);
+ }
+
+ goto not_anyof;
+ }
+
+ /* If didn't find an optimization and there is no need for a bitmap,
+ * optimize to indicate that */
if ( start[0] >= NUM_ANYOF_CODE_POINTS
&& ! LOC
&& ! upper_latin1_only_utf8_matches
&& anyof_flags == 0)
{
+ U8 low_utf8[UTF8_MAXBYTES+1];
UV highest_cp = invlist_highest(cp_list);
- /* If the lowest and highest code point in the class have the same
- * UTF-8 first byte, then all do, and we can store that byte for
- * regexec.c to use so that it can more quickly scan the target
- * string for potential matches for this class. We co-opt the the
- * flags field for this. Zero means, they don't have the same
- * first byte. We do accept here very large code points (for
- * future use), but don't bother with this optimization for them,
- * as it would cause other complications */
- if (highest_cp > IV_MAX) {
- anyof_flags = 0;
- }
- else {
- U8 low_utf8[UTF8_MAXBYTES+1];
+ /* Currently the maximum allowed code point by the system is
+ * IV_MAX. Higher ones are reserved for future internal use. This
+ * particular regnode can be used for higher ones, but we can't
+ * calculate the code point of those. IV_MAX suffices though, as
+ * it will be a large first byte */
+ Size_t low_len = uvchr_to_utf8(low_utf8, MIN(start[0], IV_MAX))
+ - low_utf8;
+
+ /* We store the lowest possible first byte of the UTF-8
+ * representation, using the flags field. This allows for quick
+ * ruling out of some inputs without having to convert from UTF-8
+ * to code point. For EBCDIC, we use I8, as not doing that
+ * transformation would not rule out nearly so many things */
+ anyof_flags = NATIVE_UTF8_TO_I8(low_utf8[0]);
+
+ op = ANYOFH;
+
+ /* If the first UTF-8 start byte for the highest code point in the
+ * range is suitably small, we may be able to get an upper bound as
+ * well */
+ if (highest_cp <= IV_MAX) {
U8 high_utf8[UTF8_MAXBYTES+1];
+ Size_t high_len = uvchr_to_utf8(high_utf8, highest_cp)
+ - high_utf8;
+
+ /* If the lowest and highest are the same, we can get an exact
+ * first byte instead of a just minimum or even a sequence of
+ * exact leading bytes. We signal these with different
+ * regnodes */
+ if (low_utf8[0] == high_utf8[0]) {
+ Size_t len = find_first_differing_byte_pos(low_utf8,
+ high_utf8,
+ MIN(low_len, high_len));
- (void) uvchr_to_utf8(low_utf8, start[0]);
- (void) uvchr_to_utf8(high_utf8, invlist_highest(cp_list));
+ if (len == 1) {
- anyof_flags = (low_utf8[0] == high_utf8[0])
- ? low_utf8[0]
- : 0;
+ /* No need to convert to I8 for EBCDIC as this is an
+ * exact match */
+ anyof_flags = low_utf8[0];
+ op = ANYOFHb;
+ }
+ else {
+ op = ANYOFHs;
+ ret = regnode_guts(pRExC_state, op,
+ regarglen[op] + STR_SZ(len),
+ "anyofhs");
+ FILL_NODE(ret, op);
+ ((struct regnode_anyofhs *) REGNODE_p(ret))->str_len
+ = len;
+ Copy(low_utf8, /* Add the common bytes */
+ ((struct regnode_anyofhs *) REGNODE_p(ret))->string,
+ len, U8);
+ RExC_emit += NODE_SZ_STR(REGNODE_p(ret));
+ set_ANYOF_arg(pRExC_state, REGNODE_p(ret), cp_list,
+ NULL, only_utf8_locale_list);
+ goto not_anyof;
+ }
+ }
+ else if (NATIVE_UTF8_TO_I8(high_utf8[0]) <= MAX_ANYOF_HRx_BYTE)
+ {
+
+ /* Here, the high byte is not the same as the low, but is
+ * small enough that its reasonable to have a loose upper
+ * bound, which is packed in with the strict lower bound.
+ * See comments at the definition of MAX_ANYOF_HRx_BYTE.
+ * On EBCDIC platforms, I8 is used. On ASCII platforms I8
+ * is the same thing as UTF-8 */
+
+ U8 bits = 0;
+ U8 max_range_diff = MAX_ANYOF_HRx_BYTE - anyof_flags;
+ U8 range_diff = NATIVE_UTF8_TO_I8(high_utf8[0])
+ - anyof_flags;
+
+ if (range_diff <= max_range_diff / 8) {
+ bits = 3;
+ }
+ else if (range_diff <= max_range_diff / 4) {
+ bits = 2;
+ }
+ else if (range_diff <= max_range_diff / 2) {
+ bits = 1;
+ }
+ anyof_flags = (anyof_flags - 0xC0) << 2 | bits;
+ op = ANYOFHr;
+ }
}
- op = ANYOFH;
+ goto done_finding_op;
}
} /* End of seeing if can optimize it into a different node */
is_anyof: /* It's going to be an ANYOF node. */
- if (op != ANYOFH) {
- op = (has_runtime_dependency & HAS_D_RUNTIME_DEPENDENCY)
- ? ANYOFD
- : ((posixl)
- ? ANYOFPOSIXL
- : ((LOC)
- ? ANYOFL
- : ANYOF));
- }
+ op = (has_runtime_dependency & HAS_D_RUNTIME_DEPENDENCY)
+ ? ANYOFD
+ : ((posixl)
+ ? ANYOFPOSIXL
+ : ((LOC)
+ ? ANYOFL
+ : ANYOF));
+
+ done_finding_op:
ret = regnode_guts(pRExC_state, op, regarglen[op], "anyof");
FILL_NODE(ret, op); /* We set the argument later */
@@ -19237,8 +19967,11 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
set_ANYOF_arg(pRExC_state, REGNODE_p(ret), cp_list,
(HAS_NONLOCALE_RUNTIME_PROPERTY_DEFINITION)
- ? listsv : NULL,
+ ? listsv
+ : NULL,
only_utf8_locale_list);
+ SvREFCNT_dec(cp_list);;
+ SvREFCNT_dec(only_utf8_locale_list);
return ret;
not_anyof:
@@ -19249,6 +19982,7 @@ S_regclass(pTHX_ RExC_state_t *pRExC_state, I32 *flagp, U32 depth,
Set_Node_Offset_Length(REGNODE_p(ret), orig_parse - RExC_start,
RExC_parse - orig_parse);;
SvREFCNT_dec(cp_list);;
+ SvREFCNT_dec(only_utf8_locale_list);
return ret;
}
@@ -19289,15 +20023,17 @@ S_set_ANYOF_arg(pTHX_ RExC_state_t* const pRExC_state,
SV *rv;
if (cp_list) {
- av_store(av, INVLIST_INDEX, cp_list);
+ av_store(av, INVLIST_INDEX, SvREFCNT_inc_NN(cp_list));
}
if (only_utf8_locale_list) {
- av_store(av, ONLY_LOCALE_MATCHES_INDEX, only_utf8_locale_list);
+ av_store(av, ONLY_LOCALE_MATCHES_INDEX,
+ SvREFCNT_inc_NN(only_utf8_locale_list));
}
if (runtime_defns) {
- av_store(av, DEFERRED_USER_DEFINED_INDEX, SvREFCNT_inc(runtime_defns));
+ av_store(av, DEFERRED_USER_DEFINED_INDEX,
+ SvREFCNT_inc_NN(runtime_defns));
}
rv = newRV_noinc(MUTABLE_SV(av));
@@ -19307,14 +20043,13 @@ S_set_ANYOF_arg(pTHX_ RExC_state_t* const pRExC_state,
}
}
-#if !defined(PERL_IN_XSUB_RE) || defined(PLUGGABLE_RE_EXTENSION)
SV *
-Perl__get_regclass_nonbitmap_data(pTHX_ const regexp *prog,
- const regnode* node,
- bool doinit,
- SV** listsvp,
- SV** only_utf8_locale_ptr,
- SV** output_invlist)
+
+#if !defined(PERL_IN_XSUB_RE) || defined(PLUGGABLE_RE_EXTENSION)
+Perl_get_regclass_nonbitmap_data(pTHX_ const regexp *prog, const regnode* node, bool doinit, SV** listsvp, SV** only_utf8_locale_ptr, SV** output_invlist)
+#else
+Perl_get_re_gclass_nonbitmap_data(pTHX_ const regexp *prog, const regnode* node, bool doinit, SV** listsvp, SV** only_utf8_locale_ptr, SV** output_invlist)
+#endif
{
/* For internal core use only.
@@ -19350,7 +20085,11 @@ Perl__get_regclass_nonbitmap_data(pTHX_ const regexp *prog,
RXi_GET_DECL(prog, progi);
const struct reg_data * const data = prog ? progi->data : NULL;
- PERL_ARGS_ASSERT__GET_REGCLASS_NONBITMAP_DATA;
+#if !defined(PERL_IN_XSUB_RE) || defined(PLUGGABLE_RE_EXTENSION)
+ PERL_ARGS_ASSERT_GET_REGCLASS_NONBITMAP_DATA;
+#else
+ PERL_ARGS_ASSERT_GET_RE_GCLASS_NONBITMAP_DATA;
+#endif
assert(! output_invlist || listsvp);
if (data && data->count) {
@@ -19407,10 +20146,10 @@ Perl__get_regclass_nonbitmap_data(pTHX_ const regexp *prog,
STATIC_ASSERT_STMT(ONLY_LOCALE_MATCHES_INDEX == 1 + INVLIST_INDEX);
STATIC_ASSERT_STMT(DEFERRED_USER_DEFINED_INDEX == 1 + ONLY_LOCALE_MATCHES_INDEX);
- av_store(av, INVLIST_INDEX, invlist);
+ ary[INVLIST_INDEX] = invlist;
av_fill(av, (ary[ONLY_LOCALE_MATCHES_INDEX])
- ? ONLY_LOCALE_MATCHES_INDEX:
- INVLIST_INDEX);
+ ? ONLY_LOCALE_MATCHES_INDEX
+ : INVLIST_INDEX);
si = NULL;
}
}
@@ -19443,25 +20182,22 @@ Perl__get_regclass_nonbitmap_data(pTHX_ const regexp *prog,
UV prev_cp = 0;
U8 count = 0;
- /* Ignore everything before the first new-line */
- while (*si_string != '\n' && remaining > 0) {
- si_string++;
- remaining--;
- }
- assert(remaining > 0);
-
+ /* Ignore everything before and including the first new-line */
+ si_string = (const char *) memchr(si_string, '\n', SvCUR(si));
+ assert (si_string != NULL);
si_string++;
- remaining--;
+ remaining = SvPVX(si) + SvCUR(si) - si_string;
while (remaining > 0) {
/* The data consists of just strings defining user-defined
* property names, but in prior incarnations, and perhaps
* somehow from pluggable regex engines, it could still
- * hold hex code point definitions. Each component of a
- * range would be separated by a tab, and each range by a
- * new-line. If these are found, instead add them to the
- * inversion list */
+ * hold hex code point definitions, all of which should be
+ * legal (or it wouldn't have gotten this far). Each
+ * component of a range would be separated by a tab, and
+ * each range by a new-line. If these are found, instead
+ * add them to the inversion list */
I32 grok_flags = PERL_SCAN_SILENT_ILLDIGIT
|PERL_SCAN_SILENT_NON_PORTABLE;
STRLEN len = remaining;
@@ -19493,26 +20229,34 @@ Perl__get_regclass_nonbitmap_data(pTHX_ const regexp *prog,
continue;
}
- /* Here, didn't find a legal hex number. Just add it from
- * here to the next \n */
+ /* Here, didn't find a legal hex number. Just add the text
+ * from here up to the next \n, omitting any trailing
+ * markers. */
remaining -= len;
- while (*(si_string + len) != '\n' && remaining > 0) {
- remaining--;
- len++;
- }
- if (*(si_string + len) == '\n') {
- len++;
- remaining--;
- }
+ len = strcspn(si_string,
+ DEFERRED_COULD_BE_OFFICIAL_MARKERs "\n");
+ remaining -= len;
if (matches_string) {
- sv_catpvn(matches_string, si_string, len - 1);
+ sv_catpvn(matches_string, si_string, len);
}
else {
- matches_string = newSVpvn(si_string, len - 1);
+ matches_string = newSVpvn(si_string, len);
}
- si_string += len;
sv_catpvs(matches_string, " ");
+
+ si_string += len;
+ if ( remaining
+ && UCHARAT(si_string)
+ == DEFERRED_COULD_BE_OFFICIAL_MARKERc)
+ {
+ si_string++;
+ remaining--;
+ }
+ if (remaining && UCHARAT(si_string) == '\n') {
+ si_string++;
+ remaining--;
+ }
} /* end of loop through the text */
assert(matches_string);
@@ -19548,7 +20292,6 @@ Perl__get_regclass_nonbitmap_data(pTHX_ const regexp *prog,
return invlist;
}
-#endif /* !defined(PERL_IN_XSUB_RE) || defined(PLUGGABLE_RE_EXTENSION) */
/* reg_skipcomment()
@@ -19671,8 +20414,9 @@ S_nextchar(pTHX_ RExC_state_t *pRExC_state)
STATIC void
S_change_engine_size(pTHX_ RExC_state_t *pRExC_state, const Ptrdiff_t size)
{
- /* 'size' is the delta to add or subtract from the current memory allocated
- * to the regex engine being constructed */
+ /* 'size' is the delta number of smallest regnode equivalents to add or
+ * subtract from the current memory allocated to the regex engine being
+ * constructed. */
PERL_ARGS_ASSERT_CHANGE_ENGINE_SIZE;
@@ -19704,14 +20448,14 @@ S_change_engine_size(pTHX_ RExC_state_t *pRExC_state, const Ptrdiff_t size)
STATIC regnode_offset
S_regnode_guts(pTHX_ RExC_state_t *pRExC_state, const U8 op, const STRLEN extra_size, const char* const name)
{
- /* Allocate a regnode for 'op', with 'extra_size' extra space. It aligns
- * and increments RExC_size and RExC_emit
+ /* Allocate a regnode for 'op', with 'extra_size' extra (smallest) regnode
+ * equivalents space. It aligns and increments RExC_size
*
* It returns the regnode's offset into the regex engine program */
const regnode_offset ret = RExC_emit;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGNODE_GUTS;
@@ -19777,6 +20521,22 @@ S_reganode(pTHX_ RExC_state_t *pRExC_state, U8 op, U32 arg)
return(ret);
}
+/*
+- regpnode - emit a temporary node with a SV* argument
+*/
+STATIC regnode_offset /* Location. */
+S_regpnode(pTHX_ RExC_state_t *pRExC_state, U8 op, SV * arg)
+{
+ const regnode_offset ret = regnode_guts(pRExC_state, op, regarglen[op], "regpnode");
+ regnode_offset ptr = ret;
+
+ PERL_ARGS_ASSERT_REGPNODE;
+
+ FILL_ADVANCE_NODE_ARGp(ptr, op, arg);
+ RExC_emit = ptr;
+ return(ret);
+}
+
STATIC regnode_offset
S_reg2Lanode(pTHX_ RExC_state_t *pRExC_state, const U8 op, const U32 arg1, const I32 arg2)
{
@@ -19817,7 +20577,7 @@ S_reginsert(pTHX_ RExC_state_t *pRExC_state, const U8 op,
regnode *place;
const int offset = regarglen[(U8)op];
const int size = NODE_STEP_REGNODE + offset;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGINSERT;
PERL_UNUSED_CONTEXT;
@@ -19921,7 +20681,7 @@ S_regtail(pTHX_ RExC_state_t * pRExC_state,
const U32 depth)
{
regnode_offset scan;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGTAIL;
#ifndef DEBUGGING
@@ -19935,7 +20695,7 @@ S_regtail(pTHX_ RExC_state_t * pRExC_state,
DEBUG_PARSE_r({
DEBUG_PARSE_MSG((scan==p ? "tail" : ""));
regprop(RExC_rx, RExC_mysv, REGNODE_p(scan), NULL, pRExC_state);
- Perl_re_printf( aTHX_ "~ %s (%d) %s %s\n",
+ Perl_re_printf( aTHX_ "~ %s (%zu) %s %s\n",
SvPV_nolen_const(RExC_mysv), scan,
(temp == NULL ? "->" : ""),
(temp == NULL ? PL_reg_name[OP(REGNODE_p(val))] : "")
@@ -19946,6 +20706,7 @@ S_regtail(pTHX_ RExC_state_t * pRExC_state,
scan = REGNODE_OFFSET(temp);
}
+ assert(val >= scan);
if (reg_off_by_arg[OP(REGNODE_p(scan))]) {
assert((UV) (val - scan) <= U32_MAX);
ARG_SET(REGNODE_p(scan), val - scan);
@@ -19994,7 +20755,7 @@ S_regtail_study(pTHX_ RExC_state_t *pRExC_state, regnode_offset p,
#ifdef EXPERIMENTAL_INPLACESCAN
I32 min = 0;
#endif
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGTAIL_STUDY;
@@ -20014,15 +20775,17 @@ S_regtail_study(pTHX_ RExC_state_t *pRExC_state, regnode_offset p,
#endif
if ( exact ) {
switch (OP(REGNODE_p(scan))) {
+ case LEXACT:
case EXACT:
- case EXACT_ONLY8:
+ case LEXACT_REQ8:
+ case EXACT_REQ8:
case EXACTL:
case EXACTF:
case EXACTFU_S_EDGE:
case EXACTFAA_NO_TRIE:
case EXACTFAA:
case EXACTFU:
- case EXACTFU_ONLY8:
+ case EXACTFU_REQ8:
case EXACTFLU8:
case EXACTFUP:
case EXACTFL:
@@ -20039,7 +20802,7 @@ S_regtail_study(pTHX_ RExC_state_t *pRExC_state, regnode_offset p,
DEBUG_PARSE_r({
DEBUG_PARSE_MSG((scan==p ? "tsdy" : ""));
regprop(RExC_rx, RExC_mysv, REGNODE_p(scan), NULL, pRExC_state);
- Perl_re_printf( aTHX_ "~ %s (%d) -> %s\n",
+ Perl_re_printf( aTHX_ "~ %s (%zu) -> %s\n",
SvPV_nolen_const(RExC_mysv),
scan,
PL_reg_name[exact]);
@@ -20196,7 +20959,7 @@ Perl_regdump(pTHX_ const regexp *r)
SV * const sv = sv_newmortal();
SV *dsv= sv_newmortal();
RXi_GET_DECL(r, ri);
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGDUMP;
@@ -20338,17 +21101,22 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
dVAR;
int k;
RXi_GET_DECL(prog, progi);
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGPROP;
SvPVCLEAR(sv);
- if (OP(o) > REGNODE_MAX) /* regnode.type is unsigned */
- /* It would be nice to FAIL() here, but this may be called from
- regexec.c, and it would be hard to supply pRExC_state. */
- Perl_croak(aTHX_ "Corrupted regexp opcode %d > %d",
- (int)OP(o), (int)REGNODE_MAX);
+ if (OP(o) > REGNODE_MAX) { /* regnode.type is unsigned */
+ if (pRExC_state) { /* This gives more info, if we have it */
+ FAIL3("panic: corrupted regexp opcode %d > %d",
+ (int)OP(o), (int)REGNODE_MAX);
+ }
+ else {
+ Perl_croak(aTHX_ "panic: corrupted regexp opcode %d > %d",
+ (int)OP(o), (int)REGNODE_MAX);
+ }
+ }
sv_catpv(sv, PL_reg_name[OP(o)]); /* Take off const! */
k = PL_regkind[OP(o)];
@@ -20402,6 +21170,7 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
NULL,
NULL,
NULL,
+ 0,
FALSE
);
sv_catpvs(sv, "]");
@@ -20431,7 +21200,7 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
name_list= RExC_paren_name_list;
}
if (name_list) {
- if ( k != REF || (OP(o) < NREF)) {
+ if ( k != REF || (OP(o) < REFN)) {
SV **name= av_fetch(name_list, parno, 0 );
if (name)
Perl_sv_catpvf(aTHX_ sv, " '%" SVf "'", SVfARG(*name));
@@ -20484,8 +21253,10 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
else if (k == LOGICAL)
/* 2: embedded, otherwise 1 */
Perl_sv_catpvf(aTHX_ sv, "[%d]", o->flags);
- else if (k == ANYOF) {
- const U8 flags = (OP(o) == ANYOFH) ? 0 : ANYOF_FLAGS(o);
+ else if (k == ANYOF || k == ANYOFR) {
+ U8 flags;
+ char * bitmap;
+ U32 arg;
bool do_sep = FALSE; /* Do we need to separate various components of
the output? */
/* Set if there is still an unresolved user-defined property */
@@ -20500,7 +21271,18 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
/* And things that aren't in the bitmap, but are small enough to be */
SV* bitmap_range_not_in_bitmap = NULL;
- const bool inverted = flags & ANYOF_INVERT;
+ bool inverted;
+
+ if (inRANGE(OP(o), ANYOFH, ANYOFRb)) {
+ flags = 0;
+ bitmap = NULL;
+ arg = 0;
+ }
+ else {
+ flags = ANYOF_FLAGS(o);
+ bitmap = ANYOF_BITMAP(o);
+ arg = ARG(o);
+ }
if (OP(o) == ANYOFL || OP(o) == ANYOFPOSIXL) {
if (ANYOFL_UTF8_LOCALE_REQD(flags)) {
@@ -20511,17 +21293,34 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
}
}
+ inverted = flags & ANYOF_INVERT;
+
/* If there is stuff outside the bitmap, get it */
- if (ARG(o) != ANYOF_ONLY_HAS_BITMAP) {
- (void) _get_regclass_nonbitmap_data(prog, o, FALSE,
+ if (arg != ANYOF_ONLY_HAS_BITMAP) {
+ if (inRANGE(OP(o), ANYOFR, ANYOFRb)) {
+ nonbitmap_invlist = _add_range_to_invlist(nonbitmap_invlist,
+ ANYOFRbase(o),
+ ANYOFRbase(o) + ANYOFRdelta(o));
+ }
+ else {
+#if !defined(PERL_IN_XSUB_RE) || defined(PLUGGABLE_RE_EXTENSION)
+ (void) get_regclass_nonbitmap_data(prog, o, FALSE,
&unresolved,
&only_utf8_locale_invlist,
&nonbitmap_invlist);
+#else
+ (void) get_re_gclass_nonbitmap_data(prog, o, FALSE,
+ &unresolved,
+ &only_utf8_locale_invlist,
+ &nonbitmap_invlist);
+#endif
+ }
+
/* The non-bitmap data may contain stuff that could fit in the
* bitmap. This could come from a user-defined property being
* finally resolved when this call was done; or much more likely
* because there are matches that require UTF-8 to be valid, and so
- * aren't in the bitmap. This is teased apart later */
+ * aren't in the bitmap (or ANYOFR). This is teased apart later */
_invlist_intersection(nonbitmap_invlist,
PL_InBitmap,
&bitmap_range_not_in_bitmap);
@@ -20541,19 +21340,26 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
/* Ready to start outputting. First, the initial left bracket */
Perl_sv_catpvf(aTHX_ sv, "[%s", PL_colors[0]);
- if (OP(o) != ANYOFH) {
+ /* ANYOFH by definition doesn't have anything that will fit inside the
+ * bitmap; ANYOFR may or may not. */
+ if ( ! inRANGE(OP(o), ANYOFH, ANYOFHr)
+ && ( ! inRANGE(OP(o), ANYOFR, ANYOFRb)
+ || ANYOFRbase(o) < NUM_ANYOF_CODE_POINTS))
+ {
/* Then all the things that could fit in the bitmap */
do_sep = put_charclass_bitmap_innards(sv,
- ANYOF_BITMAP(o),
+ bitmap,
bitmap_range_not_in_bitmap,
only_utf8_locale_invlist,
o,
+ flags,
/* Can't try inverting for a
* better display if there
* are things that haven't
* been resolved */
- unresolved != NULL);
+ unresolved != NULL
+ || inRANGE(OP(o), ANYOFR, ANYOFRb));
SvREFCNT_dec(bitmap_range_not_in_bitmap);
/* If there are user-defined properties which haven't been defined
@@ -20639,11 +21445,30 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
/* And finally the matching, closing ']' */
Perl_sv_catpvf(aTHX_ sv, "%s]", PL_colors[1]);
- if (OP(o) == ANYOFH && FLAGS(o) != 0) {
- Perl_sv_catpvf(aTHX_ sv, " (First UTF-8 byte=\\x%02x)", FLAGS(o));
+ if (OP(o) == ANYOFHs) {
+ Perl_sv_catpvf(aTHX_ sv, " (Leading UTF-8 bytes=%s", _byte_dump_string((U8 *) ((struct regnode_anyofhs *) o)->string, FLAGS(o), 1));
+ }
+ else if (inRANGE(OP(o), ANYOFH, ANYOFRb)) {
+ U8 lowest = (OP(o) != ANYOFHr)
+ ? FLAGS(o)
+ : LOWEST_ANYOF_HRx_BYTE(FLAGS(o));
+ U8 highest = (OP(o) == ANYOFHr)
+ ? HIGHEST_ANYOF_HRx_BYTE(FLAGS(o))
+ : (OP(o) == ANYOFH || OP(o) == ANYOFR)
+ ? 0xFF
+ : lowest;
+#ifndef EBCDIC
+ if (OP(o) != ANYOFR || ! isASCII(ANYOFRbase(o) + ANYOFRdelta(o)))
+#endif
+ {
+ Perl_sv_catpvf(aTHX_ sv, " (First UTF-8 byte=%02X", lowest);
+ if (lowest != highest) {
+ Perl_sv_catpvf(aTHX_ sv, "-%02X", highest);
+ }
+ Perl_sv_catpvf(aTHX_ sv, ")");
+ }
}
-
SvREFCNT_dec(unresolved);
}
else if (k == ANYOFM) {
@@ -20654,7 +21479,7 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
_invlist_invert(cp_list);
}
- put_charclass_bitmap_innards(sv, NULL, cp_list, NULL, NULL, TRUE);
+ put_charclass_bitmap_innards(sv, NULL, cp_list, NULL, NULL, 0, TRUE);
Perl_sv_catpvf(aTHX_ sv, "%s]", PL_colors[1]);
SvREFCNT_dec(cp_list);
@@ -20719,19 +21544,25 @@ Perl_regprop(pTHX_ const regexp *prog, SV *sv, const regnode *o, const regmatch_
SV *
Perl_re_intuit_string(pTHX_ REGEXP * const r)
{ /* Assume that RE_INTUIT is set */
+ /* Returns an SV containing a string that must appear in the target for it
+ * to match, or NULL if nothing is known that must match.
+ *
+ * CAUTION: the SV can be freed during execution of the regex engine */
+
struct regexp *const prog = ReANY(r);
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_RE_INTUIT_STRING;
PERL_UNUSED_CONTEXT;
DEBUG_COMPILE_r(
{
- const char * const s = SvPV_nolen_const(RX_UTF8(r)
+ if (prog->maxlen > 0) {
+ const char * const s = SvPV_nolen_const(RX_UTF8(r)
? prog->check_utf8 : prog->check_substr);
- if (!PL_colorset) reginitcolors();
- Perl_re_printf( aTHX_
+ if (!PL_colorset) reginitcolors();
+ Perl_re_printf( aTHX_
"%sUsing REx %ssubstr:%s \"%s%.60s%s%s\"\n",
PL_colors[4],
RX_UTF8(r) ? "utf8 " : "",
@@ -20739,6 +21570,7 @@ Perl_re_intuit_string(pTHX_ REGEXP * const r)
s,
PL_colors[1],
(strlen(s) > PL_dump_re_max_len ? "..." : ""));
+ }
} );
/* use UTF8 check substring if regexp pattern itself is in UTF8 */
@@ -20768,7 +21600,7 @@ void
Perl_pregfree2(pTHX_ REGEXP *rx)
{
struct regexp *const r = ReANY(rx);
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_PREGFREE2;
@@ -20932,7 +21764,7 @@ Perl_regfree_internal(pTHX_ REGEXP * const rx)
{
struct regexp *const r = ReANY(rx);
RXi_GET_DECL(r, ri);
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGFREE_INTERNAL;
@@ -21314,34 +22146,30 @@ Perl_regnext(pTHX_ regnode *p)
#endif
STATIC void
-S_re_croak2(pTHX_ bool utf8, const char* pat1, const char* pat2,...)
+S_re_croak(pTHX_ bool utf8, const char* pat,...)
{
va_list args;
- STRLEN l1 = strlen(pat1);
- STRLEN l2 = strlen(pat2);
+ STRLEN len = strlen(pat);
char buf[512];
SV *msv;
const char *message;
- PERL_ARGS_ASSERT_RE_CROAK2;
-
- if (l1 > 510)
- l1 = 510;
- if (l1 + l2 > 510)
- l2 = 510 - l1;
- Copy(pat1, buf, l1 , char);
- Copy(pat2, buf + l1, l2 , char);
- buf[l1 + l2] = '\n';
- buf[l1 + l2 + 1] = '\0';
- va_start(args, pat2);
+ PERL_ARGS_ASSERT_RE_CROAK;
+
+ if (len > 510)
+ len = 510;
+ Copy(pat, buf, len , char);
+ buf[len] = '\n';
+ buf[len + 1] = '\0';
+ va_start(args, pat);
msv = vmess(buf, &args);
va_end(args);
- message = SvPV_const(msv, l1);
- if (l1 > 512)
- l1 = 512;
- Copy(message, buf, l1 , char);
- /* l1-1 to avoid \n */
- Perl_croak(aTHX_ "%" UTF8f, UTF8fARG(utf8, l1-1, buf));
+ message = SvPV_const(msv, len);
+ if (len > 512)
+ len = 512;
+ Copy(message, buf, len , char);
+ /* len-1 to avoid \n */
+ Perl_croak(aTHX_ "%" UTF8f, UTF8fARG(utf8, len-1, buf));
}
/* XXX Here's a total kludge. But we need to re-enter for swash routines. */
@@ -21572,9 +22400,14 @@ S_put_range(pTHX_ SV *sv, UV start, const UV end, const bool allow_literals)
/* As a final resort, output the range or subrange as hex. */
- this_end = (end < NUM_ANYOF_CODE_POINTS)
- ? end
- : NUM_ANYOF_CODE_POINTS - 1;
+ if (start >= NUM_ANYOF_CODE_POINTS) {
+ this_end = end;
+ }
+ else { /* Have to split range at the bitmap boundary */
+ this_end = (end < NUM_ANYOF_CODE_POINTS)
+ ? end
+ : NUM_ANYOF_CODE_POINTS - 1;
+ }
#if NUM_ANYOF_CODE_POINTS > 256
format = (this_end < 256)
? "\\x%02" UVXf "-\\x%02" UVXf
@@ -21730,6 +22563,7 @@ S_put_charclass_bitmap_innards(pTHX_ SV *sv,
SV *nonbitmap_invlist,
SV *only_utf8_locale_invlist,
const regnode * const node,
+ const U8 flags,
const bool force_as_is_display)
{
/* Appends to 'sv' a displayable version of the innards of the bracketed
@@ -21746,6 +22580,7 @@ S_put_charclass_bitmap_innards(pTHX_ SV *sv,
* 'node' is the regex pattern ANYOF node. It is needed only when the
* above two parameters are not null, and is passed so that this
* routine can tease apart the various reasons for them.
+ * 'flags' is the flags field of 'node'
* 'force_as_is_display' is TRUE if this routine should definitely NOT try
* to invert things to see if that leads to a cleaner display. If
* FALSE, this routine is free to use its judgment about doing this.
@@ -21784,8 +22619,6 @@ S_put_charclass_bitmap_innards(pTHX_ SV *sv,
literally */
SV* inverted_display; /* The output string when we invert the inputs */
- U8 flags = (node) ? ANYOF_FLAGS(node) : 0;
-
bool invert = cBOOL(flags & ANYOF_INVERT); /* Is the input to be inverted
to match? */
/* We are biased in favor of displaying things without them being inverted,
@@ -21907,7 +22740,7 @@ S_put_charclass_bitmap_innards(pTHX_ SV *sv,
int inverted_bias, as_is_bias;
- /* We will apply our bias to whichever of the the results doesn't have
+ /* We will apply our bias to whichever of the results doesn't have
* the '^' */
if (invert) {
invert = FALSE;
@@ -22006,7 +22839,7 @@ S_dumpuntil(pTHX_ const regexp *r, const regnode *start, const regnode *node,
const regnode *optstart= NULL;
RXi_GET_DECL(r, ri);
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_DUMPUNTIL;
@@ -22131,7 +22964,7 @@ S_dumpuntil(pTHX_ const regexp *r, const regnode *start, const regnode *node,
else if ( op == PLUS || op == STAR) {
DUMPUNTIL(NEXTOPER(node), NEXTOPER(node) + 1);
}
- else if (PL_regkind[(U8)op] == EXACT) {
+ else if (PL_regkind[(U8)op] == EXACT || op == ANYOFHs) {
/* Literal string, where present. */
node += NODE_SZ_STR(node) - 1;
node = NEXTOPER(node);
@@ -22154,23 +22987,34 @@ S_dumpuntil(pTHX_ const regexp *r, const regnode *start, const regnode *node,
#ifndef PERL_IN_XSUB_RE
-#include "uni_keywords.h"
+# include "uni_keywords.h"
void
Perl_init_uniprops(pTHX)
{
dVAR;
+# ifdef DEBUGGING
+ char * dump_len_string;
+
+ dump_len_string = PerlEnv_getenv("PERL_DUMP_RE_MAX_LEN");
+ if ( ! dump_len_string
+ || ! grok_atoUV(dump_len_string, (UV *)&PL_dump_re_max_len, NULL))
+ {
+ PL_dump_re_max_len = 60; /* A reasonable default */
+ }
+# endif
+
PL_user_def_props = newHV();
-#ifdef USE_ITHREADS
+# ifdef USE_ITHREADS
HvSHAREKEYS_off(PL_user_def_props);
PL_user_def_props_aTHX = aTHX;
-#endif
+# endif
- /* Set up the inversion list global variables */
+ /* Set up the inversion list interpreter-level variables */
PL_XPosix_ptrs[_CC_ASCII] = _new_invlist_C_array(uni_prop_ptrs[UNI_ASCII]);
PL_XPosix_ptrs[_CC_ALPHANUMERIC] = _new_invlist_C_array(uni_prop_ptrs[UNI_XPOSIXALNUM]);
@@ -22212,6 +23056,7 @@ Perl_init_uniprops(pTHX)
PL_LB_invlist = _new_invlist_C_array(_Perl_LB_invlist);
PL_SCX_invlist = _new_invlist_C_array(_Perl_SCX_invlist);
+ PL_InBitmap = _new_invlist_C_array(InBitmap_invlist);
PL_AboveLatin1 = _new_invlist_C_array(AboveLatin1_invlist);
PL_Latin1 = _new_invlist_C_array(Latin1_invlist);
PL_UpperLatin1 = _new_invlist_C_array(UpperLatin1_invlist);
@@ -22229,9 +23074,6 @@ Perl_init_uniprops(pTHX)
UNI__PERL_FOLDS_TO_MULTI_CHAR]);
PL_InMultiCharFold = _new_invlist_C_array(uni_prop_ptrs[
UNI__PERL_IS_IN_MULTI_CHAR_FOLD]);
- PL_NonFinalFold = _new_invlist_C_array(uni_prop_ptrs[
- UNI__PERL_NON_FINAL_FOLDS]);
-
PL_utf8_toupper = _new_invlist_C_array(Uppercase_Mapping_invlist);
PL_utf8_tolower = _new_invlist_C_array(Lowercase_Mapping_invlist);
PL_utf8_totitle = _new_invlist_C_array(Titlecase_Mapping_invlist);
@@ -22242,15 +23084,52 @@ Perl_init_uniprops(pTHX)
PL_CCC_non0_non230 = _new_invlist_C_array(_Perl_CCC_non0_non230_invlist);
PL_Private_Use = _new_invlist_C_array(uni_prop_ptrs[UNI_CO]);
-#ifdef UNI_XIDC
+# ifdef UNI_XIDC
/* The below are used only by deprecated functions. They could be removed */
PL_utf8_xidcont = _new_invlist_C_array(uni_prop_ptrs[UNI_XIDC]);
PL_utf8_idcont = _new_invlist_C_array(uni_prop_ptrs[UNI_IDC]);
PL_utf8_xidstart = _new_invlist_C_array(uni_prop_ptrs[UNI_XIDS]);
-#endif
+# endif
}
-#if 0
+/* These four functions are compiled only in regcomp.c, where they have access
+ * to the data they return. They are a way for re_comp.c to get access to that
+ * data without having to compile the whole data structures. */
+
+I16
+Perl_do_uniprop_match(const char * const key, const U16 key_len)
+{
+ PERL_ARGS_ASSERT_DO_UNIPROP_MATCH;
+
+ return match_uniprop((U8 *) key, key_len);
+}
+
+SV *
+Perl_get_prop_definition(pTHX_ const int table_index)
+{
+ PERL_ARGS_ASSERT_GET_PROP_DEFINITION;
+
+ /* Create and return the inversion list */
+ return _new_invlist_C_array(uni_prop_ptrs[table_index]);
+}
+
+const char * const *
+Perl_get_prop_values(const int table_index)
+{
+ PERL_ARGS_ASSERT_GET_PROP_VALUES;
+
+ return UNI_prop_value_ptrs[table_index];
+}
+
+const char *
+Perl_get_deprecated_property_msg(const Size_t warning_offset)
+{
+ PERL_ARGS_ASSERT_GET_DEPRECATED_PROPERTY_MSG;
+
+ return deprecated_property_msgs[warning_offset];
+}
+
+# if 0
This code was mainly added for backcompat to give a warning for non-portable
code points in user-defined properties. But experiments showed that the
@@ -22280,10 +23159,111 @@ S_get_extended_utf8_msg(pTHX_ const UV cp)
return SvPVX(*msg);
}
+# endif
+#endif /* end of ! PERL_IN_XSUB_RE */
+
+STATIC REGEXP *
+S_compile_wildcard(pTHX_ const char * subpattern, const STRLEN len,
+ const bool ignore_case)
+{
+ /* Pretends that the input subpattern is qr/subpattern/aam, compiling it
+ * possibly with /i if the 'ignore_case' parameter is true. Use /aa
+ * because nothing outside of ASCII will match. Use /m because the input
+ * string may be a bunch of lines strung together.
+ *
+ * Also sets up the debugging info */
+
+ U32 flags = PMf_MULTILINE|PMf_WILDCARD;
+ U32 rx_flags;
+ SV * subpattern_sv = sv_2mortal(newSVpvn(subpattern, len));
+ REGEXP * subpattern_re;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
+
+ PERL_ARGS_ASSERT_COMPILE_WILDCARD;
+
+ if (ignore_case) {
+ flags |= PMf_FOLD;
+ }
+ set_regex_charset(&flags, REGEX_ASCII_MORE_RESTRICTED_CHARSET);
+
+ /* Like in op.c, we copy the compile time pm flags to the rx ones */
+ rx_flags = flags & RXf_PMf_COMPILETIME;
+
+#ifndef PERL_IN_XSUB_RE
+ /* Use the core engine if this file is regcomp.c. That means no
+ * 'use re "Debug ..." is in effect, so the core engine is sufficient */
+ subpattern_re = Perl_re_op_compile(aTHX_ &subpattern_sv, 1, NULL,
+ &PL_core_reg_engine,
+ NULL, NULL,
+ rx_flags, flags);
+#else
+ if (isDEBUG_WILDCARD) {
+ /* Use the special debugging engine if this file is re_comp.c and wants
+ * to output the wildcard matching. This uses whatever
+ * 'use re "Debug ..." is in effect */
+ subpattern_re = Perl_re_op_compile(aTHX_ &subpattern_sv, 1, NULL,
+ &my_reg_engine,
+ NULL, NULL,
+ rx_flags, flags);
+ }
+ else {
+ /* Use the special wildcard engine if this file is re_comp.c and
+ * doesn't want to output the wildcard matching. This uses whatever
+ * 'use re "Debug ..." is in effect for compilation, but this engine
+ * structure has been set up so that it uses the core engine for
+ * execution, so no execution debugging as a result of re.pm will be
+ * displayed. */
+ subpattern_re = Perl_re_op_compile(aTHX_ &subpattern_sv, 1, NULL,
+ &wild_reg_engine,
+ NULL, NULL,
+ rx_flags, flags);
+ /* XXX The above has the effect that any user-supplied regex engine
+ * won't be called for matching wildcards. That might be good, or bad.
+ * It could be changed in several ways. The reason it is done the
+ * current way is to avoid having to save and restore
+ * ^{^RE_DEBUG_FLAGS} around the execution. save_scalar() perhaps
+ * could be used. Another suggestion is to keep the authoritative
+ * value of the debug flags in a thread-local variable and add set/get
+ * magic to ${^RE_DEBUG_FLAGS} to keep the C level variable up to date.
+ * Still another is to pass a flag, say in the engine's intflags that
+ * would be checked each time before doing the debug output */
+ }
#endif
+ assert(subpattern_re); /* Should have died if didn't compile successfully */
+ return subpattern_re;
+}
+
+STATIC I32
+S_execute_wildcard(pTHX_ REGEXP * const prog, char* stringarg, char *strend,
+ char *strbeg, SSize_t minend, SV *screamer, U32 nosave)
+{
+ I32 result;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
+
+ PERL_ARGS_ASSERT_EXECUTE_WILDCARD;
+
+ ENTER;
+
+ /* The compilation has set things up so that if the program doesn't want to
+ * see the wildcard matching procedure, it will get the core execution
+ * engine, which is subject only to -Dr. So we have to turn that off
+ * around this procedure */
+ if (! isDEBUG_WILDCARD) {
+ /* Note! Casts away 'volatile' */
+ SAVEI32(PL_debug);
+ PL_debug &= ~ DEBUG_r_FLAG;
+ }
+
+ result = CALLREGEXEC(prog, stringarg, strend, strbeg, minend, screamer,
+ NULL, nosave);
+ LEAVE;
+
+ return result;
+}
+
SV *
-Perl_handle_user_defined_property(pTHX_
+S_handle_user_defined_property(pTHX_
/* Parses the contents of a user-defined property definition; returning the
* expanded definition if possible. If so, the return is an inversion
@@ -22453,7 +23433,7 @@ Perl_handle_user_defined_property(pTHX_
goto return_failure;
}
-#if 0 /* See explanation at definition above of get_extended_utf8_msg() */
+# if 0 /* See explanation at definition above of get_extended_utf8_msg() */
if ( UNICODE_IS_PERL_EXTENDED(min)
|| UNICODE_IS_PERL_EXTENDED(max))
@@ -22471,7 +23451,7 @@ Perl_handle_user_defined_property(pTHX_
sv_catpvs(msg, "\"");
}
-#endif
+# endif
/* Here, this line contains a legal range */
this_definition = sv_2mortal(_new_invlist(2));
@@ -22498,6 +23478,7 @@ Perl_handle_user_defined_property(pTHX_
this_definition = parse_uniprop_string(s0, s - s0,
is_utf8, to_fold, runtime,
deferrable,
+ NULL,
user_defined_ptr, msg,
(name_len == 0)
? level /* Don't increase level
@@ -22580,21 +23561,21 @@ Perl_handle_user_defined_property(pTHX_
/* As explained below, certain operations need to take place in the first
* thread created. These macros switch contexts */
-#ifdef USE_ITHREADS
-# define DECLARATION_FOR_GLOBAL_CONTEXT \
+# ifdef USE_ITHREADS
+# define DECLARATION_FOR_GLOBAL_CONTEXT \
PerlInterpreter * save_aTHX = aTHX;
-# define SWITCH_TO_GLOBAL_CONTEXT \
+# define SWITCH_TO_GLOBAL_CONTEXT \
PERL_SET_CONTEXT((aTHX = PL_user_def_props_aTHX))
-# define RESTORE_CONTEXT PERL_SET_CONTEXT((aTHX = save_aTHX));
-# define CUR_CONTEXT aTHX
-# define ORIGINAL_CONTEXT save_aTHX
-#else
-# define DECLARATION_FOR_GLOBAL_CONTEXT
-# define SWITCH_TO_GLOBAL_CONTEXT NOOP
-# define RESTORE_CONTEXT NOOP
-# define CUR_CONTEXT NULL
-# define ORIGINAL_CONTEXT NULL
-#endif
+# define RESTORE_CONTEXT PERL_SET_CONTEXT((aTHX = save_aTHX));
+# define CUR_CONTEXT aTHX
+# define ORIGINAL_CONTEXT save_aTHX
+# else
+# define DECLARATION_FOR_GLOBAL_CONTEXT dNOOP
+# define SWITCH_TO_GLOBAL_CONTEXT NOOP
+# define RESTORE_CONTEXT NOOP
+# define CUR_CONTEXT NULL
+# define ORIGINAL_CONTEXT NULL
+# endif
STATIC void
S_delete_recursion_entry(pTHX_ void *key)
@@ -22657,8 +23638,8 @@ S_get_fq_name(pTHX_
return fq_name;
}
-SV *
-Perl_parse_uniprop_string(pTHX_
+STATIC SV *
+S_parse_uniprop_string(pTHX_
/* Parse the interior of a \p{}, \P{}. Returns its definition if knowable
* now. If so, the return is an inversion list.
@@ -22680,26 +23661,29 @@ Perl_parse_uniprop_string(pTHX_
* Other parameters will be set on return as described below */
const char * const name, /* The first non-blank in the \p{}, \P{} */
- const Size_t name_len, /* Its length in bytes, not including any
+ Size_t name_len, /* Its length in bytes, not including any
trailing space */
const bool is_utf8, /* ? Is 'name' encoded in UTF-8 */
const bool to_fold, /* ? Is this under /i */
const bool runtime, /* TRUE if this is being called at run time */
const bool deferrable, /* TRUE if it's ok for the definition to not be
known at this call */
+ AV ** strings, /* To return string property values, like named
+ sequences */
bool *user_defined_ptr, /* Upon return from this function it will be
set to TRUE if any component is a
user-defined property */
SV * msg, /* Any error or warning msg(s) are appended to
this */
- const STRLEN level) /* Recursion level of this call */
+ const STRLEN level) /* Recursion level of this call */
{
dVAR;
char* lookup_name; /* normalized name for lookup in our tables */
unsigned lookup_len; /* Its length */
- bool stricter = FALSE; /* Some properties have stricter name
- normalization rules, which we decide upon
- based on parsing */
+ enum { Not_Strict = 0, /* Some properties have stricter name */
+ Strict, /* normalization rules, which we decide */
+ As_Is /* upon based on parsing */
+ } stricter = Not_Strict;
/* nv= or numeric_value=, or possibly one of the cjk numeric properties
* (though it requires extra effort to download them from Unicode and
@@ -22711,12 +23695,12 @@ Perl_parse_uniprop_string(pTHX_
int slash_pos = -1; /* Where the '/' is found, or negative if none */
int table_index = 0; /* The entry number for this property in the table
of all Unicode property names */
- bool starts_with_In_or_Is = FALSE; /* ? Does the name start with 'In' or
- 'Is' */
+ bool starts_with_Is = FALSE; /* ? Does the name start with 'Is' */
Size_t lookup_offset = 0; /* Used to ignore the first few characters of
the normalized name in certain situations */
Size_t non_pkg_begin = 0; /* Offset of first byte in 'name' that isn't
part of a package name */
+ Size_t lun_non_pkg_begin = 0; /* Similarly for 'lookup_name' */
bool could_be_user_defined = TRUE; /* ? Could this be a user-defined
property rather than a Unicode
one. */
@@ -22729,6 +23713,15 @@ Perl_parse_uniprop_string(pTHX_
qualified name */
bool invert_return = FALSE; /* ? Do we need to complement the result before
returning it */
+ bool stripped_utf8_pkg = FALSE; /* Set TRUE if the input includes an
+ explicit utf8:: package that we strip
+ off */
+ /* The expansion of properties that could be either user-defined or
+ * official unicode ones is deferred until runtime, including a marker for
+ * those that might be in the latter category. This boolean indicates if
+ * we've seen that marker. If not, what we're parsing can't be such an
+ * official Unicode property whose expansion was deferred */
+ bool could_be_deferred_official = FALSE;
PERL_ARGS_ASSERT_PARSE_UNIPROP_STRING;
@@ -22787,6 +23780,19 @@ Perl_parse_uniprop_string(pTHX_
break;
}
+ /* If this looks like it is a marker we inserted at compile time,
+ * set a flag and otherwise ignore it. If it isn't in the final
+ * position, keep it as it would have been user input. */
+ if ( UNLIKELY(cur == DEFERRED_COULD_BE_OFFICIAL_MARKERc)
+ && ! deferrable
+ && could_be_user_defined
+ && i == name_len - 1)
+ {
+ name_len--;
+ could_be_deferred_official = TRUE;
+ continue;
+ }
+
/* Otherwise, this character is part of the name. */
lookup_name[j++] = cur;
@@ -22803,6 +23809,7 @@ Perl_parse_uniprop_string(pTHX_
i++;
non_pkg_begin = i + 1;
lookup_name[j++] = ':';
+ lun_non_pkg_begin = j;
}
else { /* Only word chars (and '::') can be in a user-defined name */
could_be_user_defined = FALSE;
@@ -22810,7 +23817,7 @@ Perl_parse_uniprop_string(pTHX_
} /* End of parsing through the lhs of the property name (or all of it if
no rhs) */
-#define STRLENs(s) (sizeof("" s "") - 1)
+# define STRLENs(s) (sizeof("" s "") - 1)
/* If there is a single package name 'utf8::', it is ambiguous. It could
* be for a user-defined property, or it could be a Unicode property, as
@@ -22820,13 +23827,14 @@ Perl_parse_uniprop_string(pTHX_
lookup_name += STRLENs("utf8::");
j -= STRLENs("utf8::");
equals_pos -= STRLENs("utf8::");
+ stripped_utf8_pkg = TRUE;
}
/* Here, we are either done with the whole property name, if it was simple;
* or are positioned just after the '=' if it is compound. */
if (equals_pos >= 0) {
- assert(! stricter); /* We shouldn't have set this yet */
+ assert(stricter == Not_Strict); /* We shouldn't have set this yet */
/* Space immediately after the '=' is ignored */
i++;
@@ -22839,27 +23847,31 @@ Perl_parse_uniprop_string(pTHX_
/* Most punctuation after the equals indicates a subpattern, like
* \p{foo=/bar/} */
if ( isPUNCT_A(name[i])
- && name[i] != '-'
- && name[i] != '+'
- && name[i] != '_'
- && name[i] != '{')
+ && name[i] != '-'
+ && name[i] != '+'
+ && name[i] != '_'
+ && name[i] != '{'
+ /* A backslash means the real delimitter is the next character,
+ * but it must be punctuation */
+ && (name[i] != '\\' || (i < name_len && isPUNCT_A(name[i+1]))))
{
- /* Find the property. The table includes the equals sign, so we
- * use 'j' as-is */
- table_index = match_uniprop((U8 *) lookup_name, j);
- if (table_index) {
- const char * const * prop_values
- = UNI_prop_value_ptrs[table_index];
- SV * subpattern;
- Size_t subpattern_len;
+ bool special_property = memEQs(lookup_name, j - 1, "name")
+ || memEQs(lookup_name, j - 1, "na");
+ if (! special_property) {
+ /* Find the property. The table includes the equals sign, so
+ * we use 'j' as-is */
+ table_index = do_uniprop_match(lookup_name, j);
+ }
+ if (special_property || table_index) {
REGEXP * subpattern_re;
char open = name[i++];
char close;
const char * pos_in_brackets;
+ const char * const * prop_values;
bool escaped = 0;
- /* A backslash means the real delimitter is the next character.
- * */
+ /* Backslash => delimitter is the character following. We
+ * already checked that it is punctuation */
if (open == '\\') {
open = name[i++];
escaped = 1;
@@ -22870,12 +23882,16 @@ Perl_parse_uniprop_string(pTHX_
* set of closing is so that if the opening is something like
* ']', the closing will be that as well. Something similar is
* done in toke.c */
- pos_in_brackets = strchr("([<)]>)]>", open);
+ pos_in_brackets = memCHRs("([<)]>)]>", open);
close = (pos_in_brackets) ? pos_in_brackets[3] : open;
if ( i >= name_len
|| name[name_len-1] != close
- || (escaped && name[name_len-2] != '\\'))
+ || (escaped && name[name_len-2] != '\\')
+ /* Also make sure that there are enough characters.
+ * e.g., '\\\' would show up incorrectly as legal even
+ * though it is too short */
+ || (SSize_t) (name_len - i - 1 - escaped) < 0)
{
sv_catpvs(msg, "Unicode property wildcard not terminated");
goto append_name_to_msg;
@@ -22885,20 +23901,43 @@ Perl_parse_uniprop_string(pTHX_
packWARN(WARN_EXPERIMENTAL__UNIPROP_WILDCARDS),
"The Unicode property wildcards feature is experimental");
- /* Now create and compile the wildcard subpattern. Use /iaa
- * because nothing outside of ASCII will match, and it the
- * property values should all match /i. Note that when the
- * pattern fails to compile, our added text to the user's
- * pattern will be displayed to the user, which is not so
- * desirable. */
- subpattern_len = name_len - i - 1 - escaped;
- subpattern = Perl_newSVpvf(aTHX_ "(?iaa:%.*s)",
- (unsigned) subpattern_len,
- name + i);
- subpattern = sv_2mortal(subpattern);
- subpattern_re = re_compile(subpattern, 0);
- assert(subpattern_re); /* Should have died if didn't compile
- successfully */
+ if (special_property) {
+ const char * error_msg;
+ const char * revised_name = name + i;
+ Size_t revised_name_len = name_len - (i + 1 + escaped);
+
+ /* Currently, the only 'special_property' is name, which we
+ * lookup in _charnames.pm */
+
+ if (! load_charnames(newSVpvs("placeholder"),
+ revised_name, revised_name_len,
+ &error_msg))
+ {
+ sv_catpv(msg, error_msg);
+ goto append_name_to_msg;
+ }
+
+ /* Farm this out to a function just to make the current
+ * function less unwieldy */
+ if (handle_names_wildcard(revised_name, revised_name_len,
+ &prop_definition,
+ strings))
+ {
+ return prop_definition;
+ }
+
+ goto failed;
+ }
+
+ prop_values = get_prop_values(table_index);
+
+ /* Now create and compile the wildcard subpattern. Use /i
+ * because the property values are supposed to match with case
+ * ignored. */
+ subpattern_re = compile_wildcard(name + i,
+ name_len - i - 1 - escaped,
+ TRUE /* /i */
+ );
/* For each legal property value, see if the supplied pattern
* matches it. */
@@ -22907,7 +23946,7 @@ Perl_parse_uniprop_string(pTHX_
const Size_t len = strlen(entry);
SV* entry_sv = newSVpvn_flags(entry, len, SVs_TEMP);
- if (pregexec(subpattern_re,
+ if (execute_wildcard(subpattern_re,
(char *) entry,
(char *) entry + len,
(char *) entry, 0,
@@ -22931,6 +23970,7 @@ Perl_parse_uniprop_string(pTHX_
to_fold,
runtime,
deferrable,
+ NULL,
user_defined_ptr,
msg,
level + 1);
@@ -22953,31 +23993,20 @@ Perl_parse_uniprop_string(pTHX_
}
/* Here's how khw thinks we should proceed to handle the properties
- * not yet done: Bidi Mirroring Glyph
- Bidi Paired Bracket
+ * not yet done: Bidi Mirroring Glyph can map to ""
+ Bidi Paired Bracket can map to ""
Case Folding (both full and simple)
+ Shouldn't /i be good enough for Full
Decomposition Mapping
- Equivalent Unified Ideograph
- Name
- Name Alias
+ Equivalent Unified Ideograph can map to ""
Lowercase Mapping (both full and simple)
- NFKC Case Fold
+ NFKC Case Fold can map to ""
Titlecase Mapping (both full and simple)
Uppercase Mapping (both full and simple)
- * Move the part that looks at the property values into a perl
- * script, like utf8_heavy.pl is done. This makes things somewhat
- * easier, but most importantly, it avoids always adding all these
- * strings to the memory usage when the feature is little-used.
- *
- * The property values would all be concatenated into a single
- * string per property with each value on a separate line, and the
- * code point it's for on alternating lines. Then we match the
- * user's input pattern m//mg, without having to worry about their
- * uses of '^' and '$'. Only the values that aren't the default
- * would be in the strings. Code points would be in UTF-8. The
- * search pattern that we would construct would look like
- * (?: \n (code-point_re) \n (?aam: user-re ) \n )
- * And so $1 would contain the code point that matched the user-re.
+ * Handle these the same way Name is done, using say, _wild.pm, but
+ * having both loose and full, like in charclass_invlists.h.
+ * Perhaps move block and script to that as they are somewhat large
+ * in charclass_invlists.h.
* For properties where the default is the code point itself, such
* as any of the case changing mappings, the string would otherwise
* consist of all Unicode code points in UTF-8 strung together.
@@ -22986,18 +24015,123 @@ Perl_parse_uniprop_string(pTHX_
* error. Otherwise run the pattern against every code point in
* the ssc. The ssc is kind of like tr18's 3.9 Possible Match Sets
* And it might be good to create an API to return the ssc.
- *
- * For the name properties, a new function could be created in
- * charnames which essentially does the same thing as above,
- * sharing Name.pl with the other charname functions. Don't know
- * about loose name matching, or algorithmically determined names.
- * Decomposition.pl similarly.
- *
- * It might be that a new pattern modifier would have to be
- * created, like /t for resTricTed, which changed the behavior of
- * some constructs in their subpattern, like \A. */
+ * Or handle them like the algorithmic names are done
+ */
} /* End of is a wildcard subppattern */
+ /* \p{name=...} is handled specially. Instead of using the normal
+ * mechanism involving charclass_invlists.h, it uses _charnames.pm
+ * which has the necessary (huge) data accessible to it, and which
+ * doesn't get loaded unless necessary. The legal syntax for names is
+ * somewhat different than other properties due both to the vagaries of
+ * a few outlier official names, and the fact that only a few ASCII
+ * characters are permitted in them */
+ if ( memEQs(lookup_name, j - 1, "name")
+ || memEQs(lookup_name, j - 1, "na"))
+ {
+ dSP;
+ HV * table;
+ SV * character;
+ const char * error_msg;
+ CV* lookup_loose;
+ SV * character_name;
+ STRLEN character_len;
+ UV cp;
+
+ stricter = As_Is;
+
+ /* Since the RHS (after skipping initial space) is passed unchanged
+ * to charnames, and there are different criteria for what are
+ * legal characters in the name, just parse it here. A character
+ * name must begin with an ASCII alphabetic */
+ if (! isALPHA(name[i])) {
+ goto failed;
+ }
+ lookup_name[j++] = name[i];
+
+ for (++i; i < name_len; i++) {
+ /* Official names can only be in the ASCII range, and only
+ * certain characters */
+ if (! isASCII(name[i]) || ! isCHARNAME_CONT(name[i])) {
+ goto failed;
+ }
+ lookup_name[j++] = name[i];
+ }
+
+ /* Finished parsing, save the name into an SV */
+ character_name = newSVpvn(lookup_name + equals_pos, j - equals_pos);
+
+ /* Make sure _charnames is loaded. (The parameters give context
+ * for any errors generated */
+ table = load_charnames(character_name, name, name_len, &error_msg);
+ if (table == NULL) {
+ sv_catpv(msg, error_msg);
+ goto append_name_to_msg;
+ }
+
+ lookup_loose = get_cv("_charnames::_loose_regcomp_lookup", 0);
+ if (! lookup_loose) {
+ Perl_croak(aTHX_
+ "panic: Can't find '_charnames::_loose_regcomp_lookup");
+ }
+
+ PUSHSTACKi(PERLSI_REGCOMP);
+ ENTER ;
+ SAVETMPS;
+ save_re_context();
+
+ PUSHMARK(SP) ;
+ XPUSHs(character_name);
+ PUTBACK;
+ call_sv(MUTABLE_SV(lookup_loose), G_SCALAR);
+
+ SPAGAIN ;
+
+ character = POPs;
+ SvREFCNT_inc_simple_void_NN(character);
+
+ PUTBACK ;
+ FREETMPS ;
+ LEAVE ;
+ POPSTACK;
+
+ if (! SvOK(character)) {
+ goto failed;
+ }
+
+ cp = valid_utf8_to_uvchr((U8 *) SvPVX(character), &character_len);
+ if (character_len == SvCUR(character)) {
+ prop_definition = add_cp_to_invlist(NULL, cp);
+ }
+ else {
+ AV * this_string;
+
+ /* First of the remaining characters in the string. */
+ char * remaining = SvPVX(character) + character_len;
+
+ if (strings == NULL) {
+ goto failed; /* XXX Perhaps a specific msg instead, like
+ 'not available here' */
+ }
+
+ if (*strings == NULL) {
+ *strings = newAV();
+ }
+
+ this_string = newAV();
+ av_push(this_string, newSVuv(cp));
+
+ do {
+ cp = valid_utf8_to_uvchr((U8 *) remaining, &character_len);
+ av_push(this_string, newSVuv(cp));
+ remaining += character_len;
+ } while (remaining < SvEND(character));
+
+ av_push(*strings, (SV *) this_string);
+ }
+
+ return prop_definition;
+ }
/* Certain properties whose values are numeric need special handling.
* They may optionally be prefixed by 'is'. Ignore that prefix for the
@@ -23050,12 +24184,12 @@ Perl_parse_uniprop_string(pTHX_
* But the numeric type properties can have the alphas [Ee] to
* signify an exponent, and it is still a number with stricter
* rules. So look for an alpha that signifies not-strict */
- stricter = TRUE;
+ stricter = Strict;
for (k = i; k < name_len; k++) {
if ( isALPHA_A(name[k])
&& (! is_nv_type || ! isALPHA_FOLD_EQ(name[k], 'E')))
{
- stricter = FALSE;
+ stricter = Not_Strict;
break;
}
}
@@ -23093,7 +24227,7 @@ Perl_parse_uniprop_string(pTHX_
&& memNEs(lookup_name + 4, j - 4, "space")
&& memNEs(lookup_name + 4, j - 4, "word"))
{
- stricter = TRUE;
+ stricter = Strict;
/* We set the inputs back to 0 and the code below will reparse,
* using strict */
@@ -23168,7 +24302,9 @@ Perl_parse_uniprop_string(pTHX_
}
/* Store the first real character in the denominator */
- lookup_name[j++] = name[i];
+ if (i < name_len) {
+ lookup_name[j++] = name[i];
+ }
}
}
@@ -23186,11 +24322,15 @@ Perl_parse_uniprop_string(pTHX_
/* If the original input began with 'In' or 'Is', it could be a subroutine
* call to a user-defined property instead of a Unicode property name. */
- if ( non_pkg_begin + name_len > 2
+ if ( name_len - non_pkg_begin > 2
&& name[non_pkg_begin+0] == 'I'
&& (name[non_pkg_begin+1] == 'n' || name[non_pkg_begin+1] == 's'))
{
- starts_with_In_or_Is = TRUE;
+ /* Names that start with In have different characterstics than those
+ * that start with Is */
+ if (name[non_pkg_begin+1] == 's') {
+ starts_with_Is = TRUE;
+ }
}
else {
could_be_user_defined = FALSE;
@@ -23210,7 +24350,32 @@ Perl_parse_uniprop_string(pTHX_
/* Here, the name could be for a user defined property, which are
* implemented as subs. */
user_sub = get_cvn_flags(name, name_len, 0);
- if (user_sub) {
+ if (! user_sub) {
+
+ /* Here, the property name could be a user-defined one, but there
+ * is no subroutine to handle it (as of now). Defer handling it
+ * until runtime. Otherwise, a block defined by Unicode in a later
+ * release would get the synonym InFoo added for it, and existing
+ * code that used that name would suddenly break if it referred to
+ * the property before the sub was declared. See [perl #134146] */
+ if (deferrable) {
+ goto definition_deferred;
+ }
+
+ /* Here, we are at runtime, and didn't find the user property. It
+ * could be an official property, but only if no package was
+ * specified, or just the utf8:: package. */
+ if (could_be_deferred_official) {
+ lookup_name += lun_non_pkg_begin;
+ j -= lun_non_pkg_begin;
+ }
+ else if (! stripped_utf8_pkg) {
+ goto unknown_user_defined;
+ }
+
+ /* Drop down to look up in the official properties */
+ }
+ else {
const char insecure[] = "Insecure user-defined property";
/* Here, there is a sub by the correct name. Normally we call it
@@ -23374,7 +24539,7 @@ Perl_parse_uniprop_string(pTHX_
* for this property in the hash. So we have the go ahead to
* expand the definition ourselves. */
- PUSHSTACKi(PERLSI_MAGIC);
+ PUSHSTACKi(PERLSI_REGCOMP);
ENTER;
/* Create a temporary placeholder in the hash to detect recursion
@@ -23410,6 +24575,7 @@ Perl_parse_uniprop_string(pTHX_
* but not yet used. */
save_item(PL_subname);
+ /* G_SCALAR guarantees a single return value */
(void) call_sv(user_sub_sv, G_EVAL|G_SCALAR);
SPAGAIN;
@@ -23437,7 +24603,7 @@ Perl_parse_uniprop_string(pTHX_
(void) POPs;
prop_definition = NULL;
}
- else { /* G_SCALAR guarantees a single return value */
+ else {
SV * contents = POPs;
/* The contents is supposed to be the expansion of the property
@@ -23524,19 +24690,22 @@ Perl_parse_uniprop_string(pTHX_
/* Get the index into our pointer table of the inversion list corresponding
* to the property */
- table_index = match_uniprop((U8 *) lookup_name, lookup_len);
+ table_index = do_uniprop_match(lookup_name, lookup_len);
/* If it didn't find the property ... */
if (table_index == 0) {
- /* Try again stripping off any initial 'In' or 'Is' */
- if (starts_with_In_or_Is) {
+ /* Try again stripping off any initial 'Is'. This is because we
+ * promise that an initial Is is optional. The same isn't true of
+ * names that start with 'In'. Those can match only blocks, and the
+ * lookup table already has those accounted for. */
+ if (starts_with_Is) {
lookup_name += 2;
lookup_len -= 2;
equals_pos -= 2;
slash_pos -= 2;
- table_index = match_uniprop((U8 *) lookup_name, lookup_len);
+ table_index = do_uniprop_match(lookup_name, lookup_len);
}
if (table_index == 0) {
@@ -23554,9 +24723,7 @@ Perl_parse_uniprop_string(pTHX_
* property hasn't been encountered yet, but at runtime, it's
* an error to try to use an undefined one */
if (! deferrable) {
- if (SvCUR(msg) > 0) sv_catpvs(msg, "; ");
- sv_catpvs(msg, "Unknown user-defined property name");
- goto append_name_to_msg;
+ goto unknown_user_defined;;
}
goto definition_deferred;
@@ -23702,7 +24869,7 @@ Perl_parse_uniprop_string(pTHX_
}
/* Here, we have the number in canonical form. Try that */
- table_index = match_uniprop((U8 *) canonical, strlen(canonical));
+ table_index = do_uniprop_match(canonical, strlen(canonical));
if (table_index == 0) {
goto failed;
}
@@ -23726,7 +24893,8 @@ Perl_parse_uniprop_string(pTHX_
table_index %= MAX_UNI_KEYWORD_INDEX;
Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
"Use of '%.*s' in \\p{} or \\P{} is deprecated because: %s",
- (int) name_len, name, deprecated_property_msgs[warning_offset]);
+ (int) name_len, name,
+ get_deprecated_property_msg(warning_offset));
}
/* In a few properties, a different property is used under /i. These are
@@ -23754,10 +24922,9 @@ Perl_parse_uniprop_string(pTHX_
}
/* Create and return the inversion list */
- prop_definition =_new_invlist_C_array(uni_prop_ptrs[table_index]);
+ prop_definition = get_prop_definition(table_index);
sv_2mortal(prop_definition);
-
/* See if there is a private use override to add to this definition */
{
COPHH * hinthash = (IN_PERL_COMPILETIME)
@@ -23817,6 +24984,10 @@ Perl_parse_uniprop_string(pTHX_
}
return prop_definition;
+ unknown_user_defined:
+ if (SvCUR(msg) > 0) sv_catpvs(msg, "; ");
+ sv_catpvs(msg, "Unknown user-defined property name");
+ goto append_name_to_msg;
failed:
if (non_pkg_begin != 0) {
@@ -23843,22 +25014,473 @@ Perl_parse_uniprop_string(pTHX_
definition_deferred:
- /* Here it could yet to be defined, so defer evaluation of this
- * until its needed at runtime. We need the fully qualified property name
- * to avoid ambiguity, and a trailing newline */
- if (! fq_name) {
- fq_name = S_get_fq_name(aTHX_ name, name_len, is_utf8,
- non_pkg_begin != 0 /* If has "::" */
- );
- }
- sv_catpvs(fq_name, "\n");
+ {
+ bool is_qualified = non_pkg_begin != 0; /* If has "::" */
- *user_defined_ptr = TRUE;
- return fq_name;
+ /* Here it could yet to be defined, so defer evaluation of this until
+ * its needed at runtime. We need the fully qualified property name to
+ * avoid ambiguity */
+ if (! fq_name) {
+ fq_name = S_get_fq_name(aTHX_ name, name_len, is_utf8,
+ is_qualified);
+ }
+
+ /* If it didn't come with a package, or the package is utf8::, this
+ * actually could be an official Unicode property whose inclusion we
+ * are deferring until runtime to make sure that it isn't overridden by
+ * a user-defined property of the same name (which we haven't
+ * encountered yet). Add a marker to indicate this possibility, for
+ * use at such time when we first need the definition during pattern
+ * matching execution */
+ if (! is_qualified || memBEGINPs(name, non_pkg_begin, "utf8::")) {
+ sv_catpvs(fq_name, DEFERRED_COULD_BE_OFFICIAL_MARKERs);
+ }
+
+ /* We also need a trailing newline */
+ sv_catpvs(fq_name, "\n");
+
+ *user_defined_ptr = TRUE;
+ return fq_name;
+ }
}
+STATIC bool
+S_handle_names_wildcard(pTHX_ const char * wname, /* wildcard name to match */
+ const STRLEN wname_len, /* Its length */
+ SV ** prop_definition,
+ AV ** strings)
+{
+ /* Deal with Name property wildcard subpatterns; returns TRUE if there were
+ * any matches, adding them to prop_definition */
+
+ dSP;
+
+ CV * get_names_info; /* entry to charnames.pm to get info we need */
+ SV * names_string; /* Contains all character names, except algo */
+ SV * algorithmic_names; /* Contains info about algorithmically
+ generated character names */
+ REGEXP * subpattern_re; /* The user's pattern to match with */
+ struct regexp * prog; /* The compiled pattern */
+ char * all_names_start; /* lib/unicore/Name.pl string of every
+ (non-algorithmic) character name */
+ char * cur_pos; /* We match, effectively using /gc; this is
+ where we are now */
+ bool found_matches = FALSE; /* Did any name match so far? */
+ SV * empty; /* For matching zero length names */
+ SV * must_sv; /* Contains the substring, if any, that must be
+ in a name for the subpattern to match */
+ const char * must; /* The PV of 'must' */
+ STRLEN must_len; /* And its length */
+ SV * syllable_name = NULL; /* For Hangul syllables */
+ const char hangul_prefix[] = "HANGUL SYLLABLE ";
+ const STRLEN hangul_prefix_len = sizeof(hangul_prefix) - 1;
+
+ /* By inspection, there are a maximum of 7 bytes in the suffix of a hangul
+ * syllable name, and these are immutable and guaranteed by the Unicode
+ * standard to never be extended */
+ const STRLEN syl_max_len = hangul_prefix_len + 7;
+
+ IV i;
+
+ PERL_ARGS_ASSERT_HANDLE_NAMES_WILDCARD;
+
+ /* Make sure _charnames is loaded. (The parameters give context
+ * for any errors generated */
+ get_names_info = get_cv("_charnames::_get_names_info", 0);
+ if (! get_names_info) {
+ Perl_croak(aTHX_ "panic: Can't find '_charnames::_get_names_info");
+ }
+
+ /* Get the charnames data */
+ PUSHSTACKi(PERLSI_REGCOMP);
+ ENTER ;
+ SAVETMPS;
+ save_re_context();
+
+ PUSHMARK(SP) ;
+ PUTBACK;
+
+ /* Special _charnames entry point that returns the info this routine
+ * requires */
+ call_sv(MUTABLE_SV(get_names_info), G_ARRAY);
+
+ SPAGAIN ;
+
+ /* Data structure for names which end in their very own code points */
+ algorithmic_names = POPs;
+ SvREFCNT_inc_simple_void_NN(algorithmic_names);
+
+ /* The lib/unicore/Name.pl string */
+ names_string = POPs;
+ SvREFCNT_inc_simple_void_NN(names_string);
+
+ PUTBACK ;
+ FREETMPS ;
+ LEAVE ;
+ POPSTACK;
+
+ if ( ! SvROK(names_string)
+ || ! SvROK(algorithmic_names))
+ { /* Perhaps should panic instead XXX */
+ SvREFCNT_dec(names_string);
+ SvREFCNT_dec(algorithmic_names);
+ return FALSE;
+ }
+
+ names_string = sv_2mortal(SvRV(names_string));
+ all_names_start = SvPVX(names_string);
+ cur_pos = all_names_start;
+
+ algorithmic_names= sv_2mortal(SvRV(algorithmic_names));
+
+ /* Compile the subpattern consisting of the name being looked for */
+ subpattern_re = compile_wildcard(wname, wname_len, FALSE /* /-i */ );
+
+ must_sv = re_intuit_string(subpattern_re);
+ if (must_sv) {
+ /* regexec.c can free the re_intuit_string() return. GH #17734 */
+ must_sv = sv_2mortal(newSVsv(must_sv));
+ must = SvPV(must_sv, must_len);
+ }
+ else {
+ must = "";
+ must_len = 0;
+ }
+
+ /* (Note: 'must' could contain a NUL. And yet we use strspn() below on it.
+ * This works because the NUL causes the function to return early, thus
+ * showing that there are characters in it other than the acceptable ones,
+ * which is our desired result.) */
+
+ prog = ReANY(subpattern_re);
+
+ /* If only nothing is matched, skip to where empty names are looked for */
+ if (prog->maxlen == 0) {
+ goto check_empty;
+ }
+
+ /* And match against the string of all names /gc. Don't even try if it
+ * must match a character not found in any name. */
+ if (strspn(must, "\n -0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ()") == must_len)
+ {
+ while (execute_wildcard(subpattern_re,
+ cur_pos,
+ SvEND(names_string),
+ all_names_start, 0,
+ names_string,
+ 0))
+ { /* Here, matched. */
+
+ /* Note the string entries look like
+ * 00001\nSTART OF HEADING\n\n
+ * so we could match anywhere in that string. We have to rule out
+ * matching a code point line */
+ char * this_name_start = all_names_start
+ + RX_OFFS(subpattern_re)->start;
+ char * this_name_end = all_names_start
+ + RX_OFFS(subpattern_re)->end;
+ char * cp_start;
+ char * cp_end;
+ UV cp = 0; /* Silences some compilers */
+ AV * this_string = NULL;
+ bool is_multi = FALSE;
+
+ /* If matched nothing, advance to next possible match */
+ if (this_name_start == this_name_end) {
+ cur_pos = (char *) memchr(this_name_end + 1, '\n',
+ SvEND(names_string) - this_name_end);
+ if (cur_pos == NULL) {
+ break;
+ }
+ }
+ else {
+ /* Position the next match to start beyond the current returned
+ * entry */
+ cur_pos = (char *) memchr(this_name_end, '\n',
+ SvEND(names_string) - this_name_end);
+ }
+
+ /* Back up to the \n just before the beginning of the character. */
+ cp_end = (char *) my_memrchr(all_names_start,
+ '\n',
+ this_name_start - all_names_start);
+
+ /* If we didn't find a \n, it means it matched somewhere in the
+ * initial '00000' in the string, so isn't a real match */
+ if (cp_end == NULL) {
+ continue;
+ }
+
+ this_name_start = cp_end + 1; /* The name starts just after */
+ cp_end--; /* the \n, and the code point */
+ /* ends just before it */
+
+ /* All code points are 5 digits long */
+ cp_start = cp_end - 4;
+
+ /* This shouldn't happen, as we found a \n, and the first \n is
+ * further along than what we subtracted */
+ assert(cp_start >= all_names_start);
+
+ if (cp_start == all_names_start) {
+ *prop_definition = add_cp_to_invlist(*prop_definition, 0);
+ continue;
+ }
+
+ /* If the character is a blank, we either have a named sequence, or
+ * something is wrong */
+ if (*(cp_start - 1) == ' ') {
+ cp_start = (char *) my_memrchr(all_names_start,
+ '\n',
+ cp_start - all_names_start);
+ cp_start++;
+ }
+
+ assert(cp_start != NULL && cp_start >= all_names_start + 2);
+
+ /* Except for the first line in the string, the sequence before the
+ * code point is \n\n. If that isn't the case here, we didn't
+ * match the name of a character. (We could have matched a named
+ * sequence, not currently handled */
+ if (*(cp_start - 1) != '\n' || *(cp_start - 2) != '\n') {
+ continue;
+ }
+
+ /* We matched! Add this to the list */
+ found_matches = TRUE;
+
+ /* Loop through all the code points in the sequence */
+ while (cp_start < cp_end) {
+
+ /* Calculate this code point from its 5 digits */
+ cp = (XDIGIT_VALUE(cp_start[0]) << 16)
+ + (XDIGIT_VALUE(cp_start[1]) << 12)
+ + (XDIGIT_VALUE(cp_start[2]) << 8)
+ + (XDIGIT_VALUE(cp_start[3]) << 4)
+ + XDIGIT_VALUE(cp_start[4]);
+
+ cp_start += 6; /* Go past any blank */
+
+ if (cp_start < cp_end || is_multi) {
+ if (this_string == NULL) {
+ this_string = newAV();
+ }
+
+ is_multi = TRUE;
+ av_push(this_string, newSVuv(cp));
+ }
+ }
+
+ if (is_multi) { /* Was more than one code point */
+ if (*strings == NULL) {
+ *strings = newAV();
+ }
+
+ av_push(*strings, (SV *) this_string);
+ }
+ else { /* Only a single code point */
+ *prop_definition = add_cp_to_invlist(*prop_definition, cp);
+ }
+ } /* End of loop through the non-algorithmic names string */
+ }
+
+ /* There are also character names not in 'names_string'. These are
+ * algorithmically generatable. Try this pattern on each possible one.
+ * (khw originally planned to leave this out given the large number of
+ * matches attempted; but the speed turned out to be quite acceptable
+ *
+ * There are plenty of opportunities to optimize to skip many of the tests.
+ * beyond the rudimentary ones already here */
+
+ /* First see if the subpattern matches any of the algorithmic generatable
+ * Hangul syllable names.
+ *
+ * We know none of these syllable names will match if the input pattern
+ * requires more bytes than any syllable has, or if the input pattern only
+ * matches an empty name, or if the pattern has something it must match and
+ * one of the characters in that isn't in any Hangul syllable. */
+ if ( prog->minlen <= (SSize_t) syl_max_len
+ && prog->maxlen > 0
+ && (strspn(must, "\n ABCDEGHIJKLMNOPRSTUWY") == must_len))
+ {
+ /* These constants, names, values, and algorithm are adapted from the
+ * Unicode standard, version 5.1, section 3.12, and should never
+ * change. */
+ const char * JamoL[] = {
+ "G", "GG", "N", "D", "DD", "R", "M", "B", "BB",
+ "S", "SS", "", "J", "JJ", "C", "K", "T", "P", "H"
+ };
+ const int LCount = C_ARRAY_LENGTH(JamoL);
+
+ const char * JamoV[] = {
+ "A", "AE", "YA", "YAE", "EO", "E", "YEO", "YE", "O", "WA",
+ "WAE", "OE", "YO", "U", "WEO", "WE", "WI", "YU", "EU", "YI",
+ "I"
+ };
+ const int VCount = C_ARRAY_LENGTH(JamoV);
+
+ const char * JamoT[] = {
+ "", "G", "GG", "GS", "N", "NJ", "NH", "D", "L",
+ "LG", "LM", "LB", "LS", "LT", "LP", "LH", "M", "B",
+ "BS", "S", "SS", "NG", "J", "C", "K", "T", "P", "H"
+ };
+ const int TCount = C_ARRAY_LENGTH(JamoT);
+
+ int L, V, T;
+
+ /* This is the initial Hangul syllable code point; each time through the
+ * inner loop, it maps to the next higher code point. For more info,
+ * see the Hangul syllable section of the Unicode standard. */
+ int cp = 0xAC00;
+
+ syllable_name = sv_2mortal(newSV(syl_max_len));
+ sv_setpvn(syllable_name, hangul_prefix, hangul_prefix_len);
+
+ for (L = 0; L < LCount; L++) {
+ for (V = 0; V < VCount; V++) {
+ for (T = 0; T < TCount; T++) {
+
+ /* Truncate back to the prefix, which is unvarying */
+ SvCUR_set(syllable_name, hangul_prefix_len);
+
+ sv_catpv(syllable_name, JamoL[L]);
+ sv_catpv(syllable_name, JamoV[V]);
+ sv_catpv(syllable_name, JamoT[T]);
+
+ if (execute_wildcard(subpattern_re,
+ SvPVX(syllable_name),
+ SvEND(syllable_name),
+ SvPVX(syllable_name), 0,
+ syllable_name,
+ 0))
+ {
+ *prop_definition = add_cp_to_invlist(*prop_definition,
+ cp);
+ found_matches = TRUE;
+ }
+
+ cp++;
+ }
+ }
+ }
+ }
+
+ /* The rest of the algorithmically generatable names are of the form
+ * "PREFIX-code_point". The prefixes and the code point limits of each
+ * were returned to us in the array 'algorithmic_names' from data in
+ * lib/unicore/Name.pm. 'code_point' in the name is expressed in hex. */
+ for (i = 0; i <= av_top_index((AV *) algorithmic_names); i++) {
+ IV j;
+
+ /* Each element of the array is a hash, giving the details for the
+ * series of names it covers. There is the base name of the characters
+ * in the series, and the low and high code points in the series. And,
+ * for optimization purposes a string containing all the legal
+ * characters that could possibly be in a name in this series. */
+ HV * this_series = (HV *) SvRV(* av_fetch((AV *) algorithmic_names, i, 0));
+ SV * prefix = * hv_fetchs(this_series, "name", 0);
+ IV low = SvIV(* hv_fetchs(this_series, "low", 0));
+ IV high = SvIV(* hv_fetchs(this_series, "high", 0));
+ char * legal = SvPVX(* hv_fetchs(this_series, "legal", 0));
+
+ /* Pre-allocate an SV with enough space */
+ SV * algo_name = sv_2mortal(Perl_newSVpvf(aTHX_ "%s-0000",
+ SvPVX(prefix)));
+ if (high >= 0x10000) {
+ sv_catpvs(algo_name, "0");
+ }
+
+ /* This series can be skipped entirely if the pattern requires
+ * something longer than any name in the series, or can only match an
+ * empty name, or contains a character not found in any name in the
+ * series */
+ if ( prog->minlen <= (SSize_t) SvCUR(algo_name)
+ && prog->maxlen > 0
+ && (strspn(must, legal) == must_len))
+ {
+ for (j = low; j <= high; j++) { /* For each code point in the series */
+
+ /* Get its name, and see if it matches the subpattern */
+ Perl_sv_setpvf(aTHX_ algo_name, "%s-%X", SvPVX(prefix),
+ (unsigned) j);
+
+ if (execute_wildcard(subpattern_re,
+ SvPVX(algo_name),
+ SvEND(algo_name),
+ SvPVX(algo_name), 0,
+ algo_name,
+ 0))
+ {
+ *prop_definition = add_cp_to_invlist(*prop_definition, j);
+ found_matches = TRUE;
+ }
+ }
+ }
+ }
+
+ check_empty:
+ /* Finally, see if the subpattern matches an empty string */
+ empty = newSVpvs("");
+ if (execute_wildcard(subpattern_re,
+ SvPVX(empty),
+ SvEND(empty),
+ SvPVX(empty), 0,
+ empty,
+ 0))
+ {
+ /* Many code points have empty names. Currently these are the \p{GC=C}
+ * ones, minus CC and CF */
+
+ SV * empty_names_ref = get_prop_definition(UNI_C);
+ SV * empty_names = invlist_clone(empty_names_ref, NULL);
+
+ SV * subtract = get_prop_definition(UNI_CC);
+
+ _invlist_subtract(empty_names, subtract, &empty_names);
+ SvREFCNT_dec_NN(empty_names_ref);
+ SvREFCNT_dec_NN(subtract);
+
+ subtract = get_prop_definition(UNI_CF);
+ _invlist_subtract(empty_names, subtract, &empty_names);
+ SvREFCNT_dec_NN(subtract);
+
+ _invlist_union(*prop_definition, empty_names, prop_definition);
+ found_matches = TRUE;
+ SvREFCNT_dec_NN(empty_names);
+ }
+ SvREFCNT_dec_NN(empty);
+
+#if 0
+ /* If we ever were to accept aliases for, say private use names, we would
+ * need to do something fancier to find empty names. The code below works
+ * (at the time it was written), and is slower than the above */
+ const char empties_pat[] = "^.";
+ if (strNE(name, empties_pat)) {
+ SV * empty = newSVpvs("");
+ if (execute_wildcard(subpattern_re,
+ SvPVX(empty),
+ SvEND(empty),
+ SvPVX(empty), 0,
+ empty,
+ 0))
+ {
+ SV * empties = NULL;
+
+ (void) handle_names_wildcard(empties_pat, strlen(empties_pat), &empties);
+
+ _invlist_union_complement_2nd(*prop_definition, empties, prop_definition);
+ SvREFCNT_dec_NN(empties);
+
+ found_matches = TRUE;
+ }
+ SvREFCNT_dec_NN(empty);
+ }
#endif
+ SvREFCNT_dec_NN(subpattern_re);
+ return found_matches;
+}
+
/*
* ex: set ts=8 sts=4 sw=4 et:
*/
diff --git a/gnu/usr.bin/perl/regcomp.h b/gnu/usr.bin/perl/regcomp.h
index 5002e2b38d3..312c9055e75 100644
--- a/gnu/usr.bin/perl/regcomp.h
+++ b/gnu/usr.bin/perl/regcomp.h
@@ -31,36 +31,6 @@
#endif
/*
- * The "internal use only" fields in regexp.h are present to pass info from
- * compile to execute that permits the execute phase to run lots faster on
- * simple cases. They are:
- *
- * regstart sv that must begin a match; NULL if none obvious
- * reganch is the match anchored (at beginning-of-line only)?
- * regmust string (pointer into program) that match must include, or NULL
- * [regmust changed to SV* for bminstr()--law]
- * regmlen length of regmust string
- * [regmlen not used currently]
- *
- * Regstart and reganch permit very fast decisions on suitable starting points
- * for a match, cutting down the work a lot. Regmust permits fast rejection
- * of lines that cannot possibly match. The regmust tests are costly enough
- * that pregcomp() supplies a regmust only if the r.e. contains something
- * potentially expensive (at present, the only such thing detected is * or +
- * at the start of the r.e., which can involve a lot of backup). Regmlen is
- * supplied because the test in pregexec() needs it and pregcomp() is computing
- * it anyway.
- * [regmust is now supplied always. The tests that use regmust have a
- * heuristic that disables the test if it usually matches.]
- *
- * [In fact, we now use regmust in many cases to locate where the search
- * starts in the string, so if regback is >= 0, the regmust search is never
- * wasted effort. The regback variable says how many characters back from
- * where regmust matched is the earliest possible start of the match.
- * For instance, /[a-z].foo/ has a regmust of 'foo' and a regback of 2.]
- */
-
-/*
* Structure for regexp "program". This is essentially a linear encoding
* of a nondeterministic finite-state machine (aka syntax charts or
* "railroad normal form" in parsing technology). Each node is an opcode
@@ -95,7 +65,6 @@
private to the engine itself. It now lives here. */
typedef struct regexp_internal {
- int name_list_idx; /* Optional data index of an array of paren names */
union {
U32 *offsets; /* offset annotations 20001228 MJD
data about mapping the program to the
@@ -112,6 +81,7 @@
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 (?{}) */
+ int name_list_idx; /* Optional data index of an array of paren names */
regnode program[1]; /* Unwarranted chumminess with compiler. */
} regexp_internal;
@@ -156,6 +126,22 @@ struct regnode_string {
char string[1];
};
+struct regnode_lstring { /* Constructed this way to keep the string aligned. */
+ U8 flags;
+ U8 type;
+ U16 next_off;
+ U32 str_len; /* Only 18 bits allowed before would overflow 'next_off' */
+ char string[1];
+};
+
+struct regnode_anyofhs { /* Constructed this way to keep the string aligned. */
+ U8 str_len;
+ U8 type;
+ U16 next_off;
+ U32 arg1; /* set by set_ANYOF_arg() */
+ char string[1];
+};
+
/* Argument bearing node - workhorse,
arg1 is often for the data field */
struct regnode_1 {
@@ -165,6 +151,15 @@ struct regnode_1 {
U32 arg1;
};
+/* Node whose argument is 'SV *'. This needs to be used very carefully in
+ * situations where pointers won't become invalid because of, say re-mallocs */
+struct regnode_p {
+ U8 flags;
+ U8 type;
+ U16 next_off;
+ SV * arg1;
+};
+
/* Similar to a regnode_1 but with an extra signed argument */
struct regnode_2L {
U8 flags;
@@ -183,21 +178,6 @@ struct regnode_2 {
U16 arg2;
};
-/* This give the number of code points that can be in the bitmap of an ANYOF
- * node. The shift number must currently be one of: 8..12. It can't be less
- * than 8 (256) because some code relies on it being at least that. Above 12
- * (4096), and you start running into warnings that some data structure widths
- * have been exceeded, though the test suite as of this writing still passes
- * for up through 16, which is as high as anyone would ever want to go,
- * encompassing all of the Unicode BMP, and thus including all the economically
- * important world scripts. At 12 most of them are: including Arabic,
- * Cyrillic, Greek, Hebrew, Indian subcontinent, Latin, and Thai; but not Han,
- * Japanese, nor Korean. (The regarglen structure in regnodes.h is a U8, and
- * the trie types TRIEC and AHOCORASICKC are larger than U8 for shift values
- * above 12.) Be sure to benchmark before changing, as larger sizes do
- * significantly slow down the test suite */
-#define NUM_ANYOF_CODE_POINTS (1 << 8)
-
#define ANYOF_BITMAP_SIZE (NUM_ANYOF_CODE_POINTS / 8) /* 8 bits/Byte */
/* Note that these form structs which are supersets of the next smaller one, by
@@ -295,11 +275,13 @@ struct regnode_ssc {
#undef ARG2
#define ARG(p) ARG_VALUE(ARG_LOC(p))
+#define ARGp(p) ARG_VALUE(ARGp_LOC(p))
#define ARG1(p) ARG_VALUE(ARG1_LOC(p))
#define ARG2(p) ARG_VALUE(ARG2_LOC(p))
#define ARG2L(p) ARG_VALUE(ARG2L_LOC(p))
#define ARG_SET(p, val) ARG__SET(ARG_LOC(p), (val))
+#define ARGp_SET(p, val) ARG__SET(ARGp_LOC(p), (val))
#define ARG1_SET(p, val) ARG__SET(ARG1_LOC(p), (val))
#define ARG2_SET(p, val) ARG__SET(ARG2_LOC(p), (val))
#define ARG2L_SET(p, val) ARG__SET(ARG2L_LOC(p), (val))
@@ -324,19 +306,61 @@ struct regnode_ssc {
#undef OP
#undef OPERAND
-#undef MASK
#undef STRING
#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 */
-#define OPERAND(p) (((struct regnode_string *)p)->string)
-#define MASK(p) ((char*)OPERAND(p))
-#define STR_LEN(p) (((struct regnode_string *)p)->str_len)
-#define STRING(p) (((struct regnode_string *)p)->string)
-#define STR_SZ(l) ((l + sizeof(regnode) - 1) / sizeof(regnode))
-#define NODE_SZ_STR(p) (STR_SZ(STR_LEN(p))+1)
+#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) \
+ ((struct regnode_string *)p)->string)
+#define OPERANDs(p) STRINGs(p)
+
+/* Long strings. Currently limited to length 18 bits, which handles a 262000
+ * byte string. The limiting factor is the 16 bit 'next_off' field, which
+ * points to the next regnode, so the furthest away it can be is 2**16. On
+ * most architectures, regnodes are 2**2 bytes long, so that yields 2**18
+ * bytes. Should a longer string be desired, we could increase it to 26 bits
+ * fairly easily, by changing this node to have longj type which causes the ARG
+ * field to be used for the link to the next regnode (although code would have
+ * to be changed to account for this), and then use a combination of the flags
+ * and next_off fields for the length. To get 34 bit length, also change the
+ * node to be an ARG2L, using the second 32 bit field for the length, and not
+ * using the flags nor next_off fields at all. One could have an llstring node
+ * and even an lllstring type. */
+#define STR_LENl(p) (__ASSERT_(OP(p) == LEXACT || OP(p) == LEXACT_REQ8) \
+ (((struct regnode_lstring *)p)->str_len))
+#define STRINGl(p) (__ASSERT_(OP(p) == LEXACT || OP(p) == LEXACT_REQ8) \
+ (((struct regnode_lstring *)p)->string))
+#define OPERANDl(p) STRINGl(p)
+
+#define STR_LEN(p) ((OP(p) == LEXACT || OP(p) == LEXACT_REQ8) \
+ ? STR_LENl(p) : STR_LENs(p))
+#define STRING(p) ((OP(p) == LEXACT || OP(p) == LEXACT_REQ8) \
+ ? STRINGl(p) : STRINGs(p))
+#define OPERAND(p) STRING(p)
+
+/* The number of (smallest) regnode equivalents that a string of length l bytes
+ * occupies */
+#define STR_SZ(l) (((l) + sizeof(regnode) - 1) / sizeof(regnode))
+
+/* The number of (smallest) regnode equivalents that the EXACTISH node 'p'
+ * occupies */
+#define NODE_SZ_STR(p) (STR_SZ(STR_LEN(p)) + 1 + regarglen[(p)->type])
+
+#define setSTR_LEN(p,v) \
+ STMT_START{ \
+ if (OP(p) == LEXACT || OP(p) == LEXACT_REQ8) \
+ ((struct regnode_lstring *)(p))->str_len = (v); \
+ else \
+ ((struct regnode_string *)(p))->str_len = (v); \
+ } STMT_END
+
+#define ANYOFR_BASE_BITS 20
+#define ANYOFRbase(p) (ARG(p) & ((1 << ANYOFR_BASE_BITS) - 1))
+#define ANYOFRdelta(p) (ARG(p) >> ANYOFR_BASE_BITS)
#undef NODE_ALIGN
#undef ARG_LOC
@@ -345,6 +369,7 @@ struct regnode_ssc {
#define NODE_ALIGN(node)
#define ARG_LOC(p) (((struct regnode_1 *)p)->arg1)
+#define ARGp_LOC(p) (((struct regnode_p *)p)->arg1)
#define ARG1_LOC(p) (((struct regnode_2 *)p)->arg1)
#define ARG2_LOC(p) (((struct regnode_2 *)p)->arg2)
#define ARG2L_LOC(p) (((struct regnode_2L *)p)->arg2)
@@ -352,8 +377,6 @@ struct regnode_ssc {
#define NODE_STEP_REGNODE 1 /* sizeof(regnode)/sizeof(regnode) */
#define EXTRA_STEP_2ARGS EXTRA_SIZE(struct regnode_2)
-#define NODE_STEP_B 4
-
#define NEXTOPER(p) ((p) + NODE_STEP_REGNODE)
#define PREVOPER(p) ((p) - NODE_STEP_REGNODE)
@@ -375,6 +398,12 @@ struct regnode_ssc {
* that have a longer argument */ \
(offset) += regarglen[op]; \
} STMT_END
+#define FILL_ADVANCE_NODE_ARGp(offset, op, arg) \
+ STMT_START { \
+ ARGp_SET(REGNODE_p(offset), arg); \
+ FILL_ADVANCE_NODE(offset, op); \
+ (offset) += regarglen[op]; \
+ } STMT_END
#define FILL_ADVANCE_NODE_2L_ARG(offset, op, arg1, arg2) \
STMT_START { \
ARG_SET(REGNODE_p(offset), arg1); \
@@ -415,7 +444,7 @@ struct regnode_ssc {
* 2) A subset of item 1) is if all possible code points outside the bitmap
* match. This is a common occurrence when the class is complemented,
* like /[^ij]/. Therefore a bit is reserved to indicate this,
- * rather than having a more expensive inversion list created,
+ * rather than having an inversion list created,
* ANYOF_MATCHES_ALL_ABOVE_BITMAP.
* 3) Under /d rules, it can happen that code points that are in the upper
* latin1 range (\x80-\xFF or their equivalents on EBCDIC platforms) match
@@ -715,6 +744,8 @@ struct regnode_ssc {
# define UCHARAT(p) ((int)*(p)&CHARMASK)
#endif
+/* Number of regnode equivalents that 'guy' occupies beyond the size of the
+ * smallest regnode. */
#define EXTRA_SIZE(guy) ((sizeof(guy)-1)/sizeof(struct regnode))
#define REG_ZERO_LEN_SEEN 0x00000001
@@ -997,88 +1028,112 @@ re.pm, especially to the documentation.
#define RE_DEBUG_EXECUTE_TRIE 0x000400
/* Extra */
-#define RE_DEBUG_EXTRA_MASK 0xFF0000
-#define RE_DEBUG_EXTRA_TRIE 0x010000
-#define RE_DEBUG_EXTRA_OFFSETS 0x020000
-#define RE_DEBUG_EXTRA_OFFDEBUG 0x040000
-#define RE_DEBUG_EXTRA_STATE 0x080000
-#define RE_DEBUG_EXTRA_OPTIMISE 0x100000
-#define RE_DEBUG_EXTRA_BUFFERS 0x400000
-#define RE_DEBUG_EXTRA_GPOS 0x800000
+#define RE_DEBUG_EXTRA_MASK 0x3FF0000
+#define RE_DEBUG_EXTRA_TRIE 0x0010000
+#define RE_DEBUG_EXTRA_OFFSETS 0x0020000
+#define RE_DEBUG_EXTRA_OFFDEBUG 0x0040000
+#define RE_DEBUG_EXTRA_STATE 0x0080000
+#define RE_DEBUG_EXTRA_OPTIMISE 0x0100000
+#define RE_DEBUG_EXTRA_BUFFERS 0x0400000
+#define RE_DEBUG_EXTRA_GPOS 0x0800000
+#define RE_DEBUG_EXTRA_DUMP_PRE_OPTIMIZE 0x1000000
+#define RE_DEBUG_EXTRA_WILDCARD 0x2000000
/* combined */
-#define RE_DEBUG_EXTRA_STACK 0x280000
+#define RE_DEBUG_EXTRA_STACK 0x0280000
-#define RE_DEBUG_FLAG(x) (re_debug_flags & x)
+#define RE_DEBUG_FLAG(x) (re_debug_flags & (x))
/* Compile */
#define DEBUG_COMPILE_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_COMPILE_MASK)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_COMPILE_MASK)) x )
#define DEBUG_PARSE_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_COMPILE_PARSE)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_COMPILE_PARSE)) x )
#define DEBUG_OPTIMISE_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_COMPILE_OPTIMISE)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_COMPILE_OPTIMISE)) x )
#define DEBUG_DUMP_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_COMPILE_DUMP)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_COMPILE_DUMP)) x )
#define DEBUG_TRIE_COMPILE_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_COMPILE_TRIE)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_COMPILE_TRIE)) x )
#define DEBUG_FLAGS_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_COMPILE_FLAGS)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_COMPILE_FLAGS)) x )
#define DEBUG_TEST_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_COMPILE_TEST)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_COMPILE_TEST)) x )
/* Execute */
#define DEBUG_EXECUTE_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXECUTE_MASK)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXECUTE_MASK)) x )
#define DEBUG_INTUIT_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXECUTE_INTUIT)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXECUTE_INTUIT)) x )
#define DEBUG_MATCH_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXECUTE_MATCH)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXECUTE_MATCH)) x )
#define DEBUG_TRIE_EXECUTE_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXECUTE_TRIE)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXECUTE_TRIE)) x )
/* Extra */
#define DEBUG_EXTRA_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXTRA_MASK)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_MASK)) x )
#define DEBUG_OFFSETS_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXTRA_OFFSETS)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_OFFSETS)) x )
#define DEBUG_STATE_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXTRA_STATE)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_STATE)) x )
#define DEBUG_STACK_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXTRA_STACK)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_STACK)) x )
#define DEBUG_BUFFERS_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXTRA_BUFFERS)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_BUFFERS)) x )
#define DEBUG_OPTIMISE_MORE_r(x) DEBUG_r( \
if (DEBUG_v_TEST || ((RE_DEBUG_EXTRA_OPTIMISE|RE_DEBUG_COMPILE_OPTIMISE) == \
- (re_debug_flags & (RE_DEBUG_EXTRA_OPTIMISE|RE_DEBUG_COMPILE_OPTIMISE)))) x )
+ RE_DEBUG_FLAG(RE_DEBUG_EXTRA_OPTIMISE|RE_DEBUG_COMPILE_OPTIMISE))) x )
#define MJD_OFFSET_DEBUG(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXTRA_OFFDEBUG)) \
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_OFFDEBUG)) \
Perl_warn_nocontext x )
#define DEBUG_TRIE_COMPILE_MORE_r(x) DEBUG_TRIE_COMPILE_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXTRA_TRIE)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_TRIE)) x )
#define DEBUG_TRIE_EXECUTE_MORE_r(x) DEBUG_TRIE_EXECUTE_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXTRA_TRIE)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_TRIE)) x )
#define DEBUG_TRIE_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & (RE_DEBUG_COMPILE_TRIE \
- | RE_DEBUG_EXECUTE_TRIE ))) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_COMPILE_TRIE \
+ | RE_DEBUG_EXECUTE_TRIE )) x )
#define DEBUG_GPOS_r(x) DEBUG_r( \
- if (DEBUG_v_TEST || (re_debug_flags & RE_DEBUG_EXTRA_GPOS)) x )
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_GPOS)) x )
+
+#define DEBUG_DUMP_PRE_OPTIMIZE_r(x) DEBUG_r( \
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_DUMP_PRE_OPTIMIZE)) x )
/* initialization */
-/* get_sv() can return NULL during global destruction. */
-#define GET_RE_DEBUG_FLAGS DEBUG_r({ \
- SV * re_debug_flags_sv = NULL; \
+/* Get the debug flags for code not in regcomp.c nor regexec.c. This doesn't
+ * initialize the variable if it isn't already there, instead it just assumes
+ * the flags are 0 */
+#define DECLARE_AND_GET_RE_DEBUG_FLAGS_NON_REGEX \
+ volatile IV re_debug_flags = 0; PERL_UNUSED_VAR(re_debug_flags); \
+ STMT_START { \
+ 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; \
- if (re_debug_flags_sv) { \
- if (!SvIOK(re_debug_flags_sv)) \
- sv_setuv(re_debug_flags_sv, RE_DEBUG_COMPILE_DUMP | RE_DEBUG_EXECUTE_MASK ); \
- re_debug_flags=SvIV(re_debug_flags_sv); \
- }\
-})
+ if (re_debug_flags_sv && SvIOK(re_debug_flags_sv)) \
+ re_debug_flags=SvIV(re_debug_flags_sv); \
+ } STMT_END
+
#ifdef DEBUGGING
-#define GET_RE_DEBUG_FLAGS_DECL volatile IV re_debug_flags = 0; \
- PERL_UNUSED_VAR(re_debug_flags); GET_RE_DEBUG_FLAGS;
+/* For use in regcomp.c and regexec.c, Get the debug flags, and initialize to
+ * 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 { \
+ 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; \
+ if (re_debug_flags_sv) { \
+ if (!SvIOK(re_debug_flags_sv)) /* If doesnt exist set to default */\
+ sv_setuv(re_debug_flags_sv, \
+ /* These defaults should be kept in sync with re.pm */ \
+ 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))
#define RE_PV_COLOR_DECL(rpv,rlen,isuni,dsv,pv,l,m,c1,c2) \
const char * const rpv = \
@@ -1107,12 +1162,13 @@ re.pm, especially to the documentation.
#else /* if not DEBUGGING */
-#define GET_RE_DEBUG_FLAGS_DECL
-#define RE_PV_COLOR_DECL(rpv,rlen,isuni,dsv,pv,l,m,c1,c2)
+#define DECLARE_AND_GET_RE_DEBUG_FLAGS dNOOP
+#define RE_PV_COLOR_DECL(rpv,rlen,isuni,dsv,pv,l,m,c1,c2) dNOOP
#define RE_SV_ESCAPE(rpv,isuni,dsv,sv,m)
-#define RE_PV_QUOTED_DECL(rpv,isuni,dsv,pv,l,m)
+#define RE_PV_QUOTED_DECL(rpv,isuni,dsv,pv,l,m) dNOOP
#define RE_SV_DUMPLEN(ItEm)
#define RE_SV_TAIL(ItEm)
+#define isDEBUG_WILDCARD 0
#endif /* DEBUG RELATED DEFINES */
@@ -1126,6 +1182,31 @@ typedef enum {
WB_BOUND
} bound_type;
+/* This unpacks the FLAGS field of ANYOF[HR]x nodes. The value it contains
+ * gives the strict lower bound for the UTF-8 start byte of any code point
+ * matchable by the node, and a loose upper bound as well.
+ *
+ * The low bound is stored in the upper 6 bits, plus 0xC0.
+ * The loose upper bound is determined from the lowest 2 bits and the low bound
+ * (called x) as follows:
+ *
+ * 11 The upper limit of the range can be as much as (EF - x) / 8
+ * 10 The upper limit of the range can be as much as (EF - x) / 4
+ * 01 The upper limit of the range can be as much as (EF - x) / 2
+ * 00 The upper limit of the range can be as much as EF
+ *
+ * For motivation of this design, see commit message in
+ * 3146c00a633e9cbed741e10146662fbcedfdb8d3 */
+#ifdef EBCDIC
+# define MAX_ANYOF_HRx_BYTE 0xF4
+#else
+# define MAX_ANYOF_HRx_BYTE 0xEF
+#endif
+#define LOWEST_ANYOF_HRx_BYTE(b) (((b) >> 2) + 0xC0)
+#define HIGHEST_ANYOF_HRx_BYTE(b) \
+ (LOWEST_ANYOF_HRx_BYTE(b) \
+ + ((MAX_ANYOF_HRx_BYTE - LOWEST_ANYOF_HRx_BYTE(b)) >> ((b) & 3)))
+
#endif /* PERL_REGCOMP_H_ */
/*
diff --git a/gnu/usr.bin/perl/regcomp.sym b/gnu/usr.bin/perl/regcomp.sym
index a35beca0634..7c0bf7a4842 100644
--- a/gnu/usr.bin/perl/regcomp.sym
+++ b/gnu/usr.bin/perl/regcomp.sym
@@ -11,14 +11,39 @@
# Note that the order in this file is important.
#
# Format for first section:
-# NAME \s+ TYPE, arg-description [num-args] [flags] [longjump] ; DESCRIPTION
+# NAME \s+ TYPE, arg-description [struct regnode suffix] [flags] [longjump] ; DESCRIPTION
+# arg-description is currently unused
+# suffix is appended to 'struct_regnode_' giving which one to use. If empty,
+# it means plain 'struct regnode'. If the regnode is a string one, this
+# should instead refer to the base regnode, without the char[1] element
+# of the structure
# flag <S> means is REGNODE_SIMPLE; flag <V> means is REGNODE_VARIES; <.> is
-# a placeholder
-# longjump is 1 if the (first) argument holds the next offset.
-#
+# a placeholder
+# longjump is 1 if the (first) argument holds the next offset (instead of the
+# usual 'next_offset' field
#
# run perl regen.pl after editing this file
+# +- suffix of which struct regnode to use e.g.,
+# | +- flags (S or V) struct regnode_1
+# un- | | +- longjmp (0, blank, or 1) blank means 0
+# Name Type used | | | ; comment
+# --------------------------------------------------------------------------
+# IFMATCH BRANCHJ, off 1 . 1 ; Succeeds if the following matches.
+# UNLESSM BRANCHJ, off 1 . 1 ; Fails if the following matches.
+# SUSPEND BRANCHJ, off 1 V 1 ; "Independent" sub-RE.
+# IFTHEN BRANCHJ, off 1 V 1 ; Switch, should be preceded by switcher.
+# GROUPP GROUPP, num 1 ; Whether the group matched.
+#
+# If we were to start running out of regnodes, many of the ones that are
+# complements could be combined with their non-complement mates. For example,
+# POSIXU could have the flags field have the bottom bit mean do we complement
+# or not, and the type be shifted left 1 bit. Then all that would be needed to
+# extract which to do is a mask for the complement bit, and a right shift for
+# the other, an inconsequential increase in instructions. It might actually be
+# clearer and slightly faster given the case statement and assignment are
+# removed. Note that not everything could be collapsed: NPOSIXA, for example,
+# would require special handling for performance.
#* Exit points
@@ -45,12 +70,12 @@ GPOS GPOS, no ; Matches where last m//g left off.
# in regcomp.c uses the enum value of the modifier as an offset from the /d
# version. The complements must come after the non-complements.
# BOUND, POSIX and their complements are affected, as well as EXACTF.
-BOUND BOUND, no ; Like BOUNDA for non-utf8, otherwise match "" between any Unicode \w\W or \W\w
+BOUND BOUND, no ; Like BOUNDA for non-utf8, otherwise like BOUNDU
BOUNDL BOUND, no ; Like BOUND/BOUNDU, but \w and \W are defined by current locale
BOUNDU BOUND, no ; Match "" at any boundary of a given type using /u rules.
BOUNDA BOUND, no ; Match "" at any boundary between \w\W or \W\w, where \w is [_a-zA-Z0-9]
# All NBOUND nodes are required by code in regexec.c to be greater than all BOUND ones
-NBOUND NBOUND, no ; Like NBOUNDA for non-utf8, otherwise match "" between any Unicode \w\w or \W\W
+NBOUND NBOUND, no ; Like NBOUNDA for non-utf8, otherwise like BOUNDU
NBOUNDL NBOUND, no ; Like NBOUND/NBOUNDU, but \w and \W are defined by current locale
NBOUNDU NBOUND, no ; Match "" at any non-boundary of a given type using using /u rules.
NBOUNDA NBOUND, no ; Match "" betweeen any \w\w or \W\W, where \w is [_a-zA-Z0-9]
@@ -62,9 +87,18 @@ ANYOF ANYOF, sv charclass S ; Match character in (or not in) this
ANYOFD ANYOF, sv charclass S ; Like ANYOF, but /d is in effect
ANYOFL ANYOF, sv charclass S ; Like ANYOF, but /l is in effect
ANYOFPOSIXL ANYOF, sv charclass_posixl S ; Like ANYOFL, but matches [[:posix:]] classes
-ANYOFH ANYOF, sv 1 S ; Like ANYOF, but only has "High" matches, none in the bitmap; non-zero flags "f" means "f" is the first UTF-8 byte shared in common by all code points matched
-ANYOFM ANYOFM byte 1 S ; Like ANYOF, but matches an invariant byte as determined by the mask and arg
-NANYOFM ANYOFM byte 1 S ; complement of ANYOFM
+
+# Must be sequential
+ANYOFH ANYOF, sv 1 S ; Like ANYOF, but only has "High" matches, none in the bitmap; the flags field contains the lowest matchable UTF-8 start byte
+ANYOFHb ANYOF, sv 1 S ; Like ANYOFH, but all matches share the same UTF-8 start byte, given in the flags field
+ANYOFHr ANYOF, sv 1 S ; Like ANYOFH, but the flags field contains packed bounds for all matchable UTF-8 start bytes.
+ANYOFHs ANYOF, sv 1 S ; Like ANYOFHb, but has a string field that gives the leading matchable UTF-8 bytes; flags field is len
+ANYOFR ANYOFR, packed 1 S ; 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
+ANYOFRb ANYOFR, packed 1 S ; Like ANYOFR, but all matches share the same UTF-8 start byte, given in the flags field
+# There is no ANYOFRr because khw doesn't think there are likely to be real-world cases where such a large range is used.
+
+ANYOFM ANYOFM, byte 1 S ; Like ANYOF, but matches an invariant byte as determined by the mask and arg
+NANYOFM ANYOFM, byte 1 S ; complement of ANYOFM
#* POSIX Character Classes:
# Order of the below is important. See ordering comment above.
@@ -96,32 +130,42 @@ BRANCH BRANCH, node 0 V ; Match this alternative, or the next...
#*Literals
# NOTE: the relative ordering of these types is important do not change it
-EXACT EXACT, str ; Match this string (preceded by length).
-EXACTL EXACT, str ; Like EXACT, but /l is in effect (used so locale-related warnings can be checked for).
-EXACTF EXACT, str ; Match this string using /id rules (w/len); (string not UTF-8, not guaranteed to be folded).
-EXACTFL EXACT, str ; Match this string using /il rules (w/len); (string not guaranteed to be folded).
-EXACTFU EXACT, str ; Match this string using /iu rules (w/len); (string folded iff in UTF-8; non-UTF8 folded length <= unfolded).
-EXACTFAA EXACT, str ; Match this string using /iaa rules (w/len) (string folded iff in UTF-8; non-UTF8 folded length <= unfolded).
+EXACT EXACT, str ; Match this string (flags field is the length).
+
+#* In a long string node, the U32 argument is the length, and is
+#* immediately followed by the string.
+LEXACT EXACT, len:str 1; Match this long string (preceded by length; flags unused).
+EXACTL EXACT, str ; Like EXACT, but /l is in effect (used so locale-related warnings can be checked for)
+EXACTF EXACT, str ; Like EXACT, but match using /id rules; (string not UTF-8, ASCII folded; non-ASCII not)
+EXACTFL EXACT, str ; Like EXACT, but match using /il rules; (string not likely to be folded)
+EXACTFU EXACT, str ; Like EXACT, but match using /iu rules; (string folded)
+
+# The reason MICRO and SHARP S aren't folded in non-UTF8 patterns is because
+# they would fold to something that requires UTF-8. SHARP S would normally
+# fold to 'ss', but because of /aa, it instead folds to a pair of LATIN SMALL
+# LETTER LONG S characters (U+017F)
+EXACTFAA EXACT, str ; Like EXACT, but match using /iaa rules; (string folded except in non-UTF8 patterns: MICRO, SHARP S; folded length <= unfolded)
# End of important relative ordering.
-EXACTFUP EXACT, str ; Match this string using /iu rules (w/len); (string not UTF-8, not guaranteed to be folded; and its Problematic).
+EXACTFUP EXACT, str ; Like EXACT, but match using /iu rules; (string not UTF-8, folded except MICRO, SHARP S: hence Problematic)
# In order for a non-UTF-8 EXACTFAA to think the pattern is pre-folded when
# matching a UTF-8 target string, there would have to be something like an
# EXACTFAA_MICRO which would not be considered pre-folded for UTF-8 targets,
# since the fold of the MICRO SIGN would not be done, and would be
# representable in the UTF-8 target string.
-EXACTFLU8 EXACT, str ; Like EXACTFU, but use /il, UTF-8, folded, and everything in it is above 255.
-EXACTFAA_NO_TRIE EXACT, str ; Match this string using /iaa rules (w/len) (string not UTF-8, not guaranteed to be folded, not currently trie-able).
+EXACTFLU8 EXACT, str ; Like EXACTFU, but use /il, UTF-8, (string is folded, and everything in it is above 255
+EXACTFAA_NO_TRIE EXACT, str ; Like EXACT, but match using /iaa rules (string not UTF-8, not guaranteed to be folded, not currently trie-able)
-EXACT_ONLY8 EXACT, str ; Like EXACT, but only UTF-8 encoded targets can match
-EXACTFU_ONLY8 EXACT, str ; Like EXACTFU, but only UTF-8 encoded targets can match
-# One could add EXACTFAA8 and and something that has the same effect for /l,
+EXACT_REQ8 EXACT, str ; Like EXACT, but only UTF-8 encoded targets can match
+LEXACT_REQ8 EXACT, len:str 1 ; Like LEXACT, but only UTF-8 encoded targets can match
+EXACTFU_REQ8 EXACT, str ; Like EXACTFU, but only UTF-8 encoded targets can match
+# One could add EXACTFAA8 and something that has the same effect for /l,
# but these would be extremely uncommon
-EXACTFU_S_EDGE EXACT, str ; /di rules, but nothing in it precludes /ui, except begins and/or ends with [Ss]; (string not UTF-8; compile-time only).
+EXACTFU_S_EDGE EXACT, str ; /di rules, but nothing in it precludes /ui, except begins and/or ends with [Ss]; (string not UTF-8; compile-time only)
#*Do nothing types
@@ -166,11 +210,11 @@ REFFA REF, num 1 V ; Match already matched string, using /aai rul
#*Named references. Code in regcomp.c assumes that these all are after
#*the numbered references
-NREF REF, no-sv 1 V ; Match some already matched string
-NREFF REF, no-sv 1 V ; Match already matched string, using /di rules.
-NREFFL REF, no-sv 1 V ; Match already matched string, using /li rules.
-NREFFU REF, num 1 V ; Match already matched string, using /ui rules.
-NREFFA REF, num 1 V ; Match already matched string, using /aai rules.
+REFN REF, no-sv 1 V ; Match some already matched string
+REFFN REF, no-sv 1 V ; Match already matched string, using /di rules.
+REFFLN REF, no-sv 1 V ; Match already matched string, using /li rules.
+REFFUN REF, num 1 V ; Match already matched string, using /ui rules.
+REFFAN REF, num 1 V ; Match already matched string, using /aai rules.
#*Support for long RE
LONGJMP LONGJMP, off 1 . 1 ; Jump far away.
@@ -183,7 +227,6 @@ SUSPEND BRANCHJ, off 1 V 1 ; "Independent" sub-RE.
IFTHEN BRANCHJ, off 1 V 1 ; Switch, should be preceded by switcher.
GROUPP GROUPP, num 1 ; Whether the group matched.
-
#*The heavy worker
EVAL EVAL, evl/flags 2L ; Execute some Perl code.
@@ -214,7 +257,7 @@ AHOCORASICKC TRIE,trie charclass ; Same as AHOCORASICK, but with embedded c
GOSUB GOSUB, num/ofs 2L ; recurse to paren arg1 at (signed) ofs arg2
#*Special conditionals
-NGROUPP NGROUPP, no-sv 1 ; Whether the group matched.
+GROUPPN GROUPPN, no-sv 1 ; Whether the group matched.
INSUBP INSUBP, num 1 ; Whether we are in a specific recurse.
DEFINEP DEFINEP, none 1 ; Never execute directly.
@@ -254,6 +297,8 @@ OPTIMIZED NOTHING, off ; Placeholder for dump.
#* mean "not seen anything to optimize yet".
PSEUDO PSEUDO, off ; Pseudo opcode for internal use.
+REGEX_SET REGEX_SET, depth p S ; Regex set, temporary node used in pre-optimization compilation
+
-------------------------------------------------------------------------------
# Format for second section:
# REGOP \t typelist [ \t typelist]
diff --git a/gnu/usr.bin/perl/regen/ebcdic.pl b/gnu/usr.bin/perl/regen/ebcdic.pl
index cfb4d4ea078..863e9b9adc5 100644
--- a/gnu/usr.bin/perl/regen/ebcdic.pl
+++ b/gnu/usr.bin/perl/regen/ebcdic.pl
@@ -51,10 +51,11 @@ sub get_column_headers ($$;$) {
return $header . "*/\n";
}
-sub output_table_start($$$) {
- my ($out_fh, $TYPE, $name) = @_;
+sub output_table_start($$$;$) {
+ my ($out_fh, $TYPE, $name, $size) = @_;
- my $declaration = "EXTCONST $TYPE $name\[\]";
+ $size = "" unless defined $size;
+ my $declaration = "EXTCONST $TYPE $name\[$size\]";
print $out_fh <<EOF;
# ifndef DOINIT
$declaration;
@@ -73,7 +74,7 @@ sub output_table ($$;$) {
# 0 => print in decimal
# 1 => print in hex (translates code point to code point)
- # >= 2 => is a dfa table, like http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+ # >= 2 => is a dfa table, like https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
# The number is how many columns in the part after the code point
# portion.
#
@@ -97,7 +98,7 @@ sub output_table ($$;$) {
print $out_fh <<'EOF';
/* The table below is adapted from
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* See copyright notice at the beginning of this file.
*/
@@ -214,7 +215,7 @@ print $out_fh <<'END';
* More info is in utfebcdic.h
*
* Some of the tables are adapted from
- * http://bjoern.hoehrmann.de/utf-8/decoder/dfa/
+ * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/
* which requires this copyright notice:
Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>
@@ -245,6 +246,7 @@ shift @charsets; # ASCII is the 0th, and we don't deal with that here.
foreach my $charset (@charsets) {
# we process the whole array several times, make a copy
my @a2e = @{get_a2n($charset)};
+ my @e2a;
print $out_fh "\n" . get_conditional_compile_line_start($charset);
print $out_fh "\n";
@@ -253,7 +255,6 @@ foreach my $charset (@charsets) {
output_table(\@a2e, "PL_a2e");
{ # Construct the inverse
- my @e2a;
for my $i (0 .. 255) {
$e2a[$a2e[$i]] = $i;
}
@@ -481,6 +482,7 @@ END
my @perl_extended_utf8_dfa;
my @i8 = (
+ # 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, # 00-0F
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 10-1F
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 20-2F
@@ -593,7 +595,7 @@ END
# N2
# N6 Start byte is F[357]. Continuation byte BF transitions to N12;
# other continuations to N2
- # N5 Start byte is F8. Continuation bytes A[0-7] are illegal
+ # N7 Start byte is F8. Continuation bytes A[0-7] are illegal
# (overlong); continuations A[9BDF] and B[13579BDF] transition to
# N14; the other continuations to N3
# N8 Start byte is F9. Continuation byte A0 transitions to N3; A1
@@ -606,13 +608,19 @@ END
# illegal (non-chars); the other continuations are legal
# N12 Initial sequence is F[357] BF. Continuation bytes BF
# transitions to N13; the other continuations to N1
- # N13 Initial sequence is F[1357] BF BF or F8 x BF (where x is
- # something that can lead to a non-char. Continuation bytes BE
- # and BF are illegal (non-chars); the other continuations are
+ # N13 Initial sequence is F[1357] BF BF or F8 x y BF (where x and y
+ # are something that can lead to a non-char. Continuation bytes
+ # BE and BF are illegal (non-chars); the other continuations are
# legal
# N14 Initial sequence is F8 A[9BDF]; or F8 B[13579BDF]; or F9 A1.
- # Continuation byte BF transitions to N13; the other
+ # Continuation byte BF transitions to N15; the other
+ # continuations to N2
+ # N15 Initial sequence is F8 A[9BDF] BF; or F8 B[13579BDF] BF; or
+ # F9 A1 BF. Continuation byte BF transitions to N16; the other
# continuations to N2
+ # N16 Initial sequence is F8 A[9BDF] BF BF; or F8 B[13579BDF] BF BF;
+ # or F9 A1 BF BF. Continuation bytes BE and BF are illegal
+ # (non-chars); the other continuations are legal
# 1 Reject. All transitions not mentioned above (except the single
# byte ones (as they are always legal) are to this state.
@@ -632,9 +640,11 @@ END
my $N12 = $N11 + $NUM_CLASSES;
my $N13 = $N12 + $NUM_CLASSES;
my $N14 = $N13 + $NUM_CLASSES;
+ my $N15 = $N14 + $NUM_CLASSES;
my @strict_utf8_dfa;
my @i8 = (
+ # 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, # 00-0F
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 10-1F
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 20-2F
@@ -671,7 +681,8 @@ END
1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, # N11
1,1, 1, 1, 1, 1, 1, 1, 1, 1, $N1, $N1, $N1, $N1, $N1, $N1, $N1, $N1, $N1, $N1, $N1, $N1,$N13, # N12
1,1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, # N13
- 1,1, 1, 1, 1, 1, 1, 1, 1, 1, $N2, $N2, $N2, $N2, $N2, $N2, $N2, $N2, $N2, $N2, $N2, $N2,$N13, # N14
+ 1,1, 1, 1, 1, 1, 1, 1, 1, 1, $N2, $N2, $N2, $N2, $N2, $N2, $N2, $N2, $N2, $N2, $N2, $N2,$N15, # N14
+ 1,1, 1, 1, 1, 1, 1, 1, 1, 1, $N1, $N1, $N1, $N1, $N1, $N1, $N1, $N1, $N1, $N1, $N1, $N1,$N13, # N15
);
output_table(\@strict_utf8_dfa, "PL_strict_utf8_dfa_tab", $NUM_CLASSES);
}
@@ -733,6 +744,7 @@ END
my @C9_utf8_dfa;
my @i8 = (
+ # 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, # 00-0F
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 10-1F
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # 20-2F
diff --git a/gnu/usr.bin/perl/regen/embed.pl b/gnu/usr.bin/perl/regen/embed.pl
index ed49f5fd5bd..5c33127e86e 100644
--- a/gnu/usr.bin/perl/regen/embed.pl
+++ b/gnu/usr.bin/perl/regen/embed.pl
@@ -1,5 +1,5 @@
#!/usr/bin/perl -w
-#
+#
# Regenerate (overwriting only if changed):
#
# embed.h
@@ -51,7 +51,7 @@ sub full_name ($$) { # Returns the function name with potentially the
my ($func, $flags) = @_;
return "Perl_$func" if $flags =~ /p/;
- return "S_$func" if $flags =~ /[si]/;
+ return "S_$func" if $flags =~ /[SIi]/;
return $func;
}
@@ -81,15 +81,16 @@ my ($embed, $core, $ext, $api) = setup_embed();
}
my ($flags,$retval,$plain_func,@args) = @$_;
- if ($flags =~ / ( [^AabDdEfiMmnOoPpRrsUWXx] ) /x) {
+ if ($flags =~ / ( [^AabCDdEefFGhIiMmNnOoPpRrSsTUuWXx] ) /x) {
die_at_end "flag $1 is not legal (for function $plain_func)";
}
my @nonnull;
+ my $args_assert_line = ( $flags !~ /G/ );
my $has_depth = ( $flags =~ /W/ );
- my $has_context = ( $flags !~ /n/ );
+ my $has_context = ( $flags !~ /T/ );
my $never_returns = ( $flags =~ /r/ );
my $binarycompat = ( $flags =~ /b/ );
- my $commented_out = ( ! $binarycompat && $flags =~ /m/ );
+ my $commented_out = ( $flags =~ /m/ );
my $is_malloc = ( $flags =~ /a/ );
my $can_ignore = ( $flags !~ /R/ ) && ( $flags !~ /P/ ) && !$is_malloc;
my @names_of_nn;
@@ -99,21 +100,34 @@ my ($embed, $core, $ext, $api) = setup_embed();
warn "It is nonsensical to require the return value of a void function ($plain_func) to be checked";
}
- die_at_end "$plain_func: s flag is mutually exclusive from the i and p plags"
- if $flags =~ /s/ && $flags =~ /[ip]/;
+ die_at_end "$plain_func: S and p flags are mutually exclusive"
+ if $flags =~ /S/ && $flags =~ /p/;
+ die_at_end "$plain_func: m and $1 flags are mutually exclusive"
+ if $flags =~ /m/ && $flags =~ /([pS])/;
+
+ die_at_end "$plain_func: u flag only usable with m" if $flags =~ /u/
+ && $flags !~ /m/;
my $static_inline = 0;
- if ($flags =~ /([si])/) {
+ if ($flags =~ /([SIi])/) {
my $type;
if ($never_returns) {
- $type = $1 eq 's' ? "PERL_STATIC_NO_RET" : "PERL_STATIC_INLINE_NO_RET";
+ $type = {
+ 'S' => 'PERL_STATIC_NO_RET',
+ 'i' => 'PERL_STATIC_INLINE_NO_RET',
+ 'I' => 'PERL_STATIC_FORCE_INLINE_NO_RET'
+ }->{$1};
}
else {
- $type = $1 eq 's' ? "STATIC" : "PERL_STATIC_INLINE";
+ $type = {
+ 'S' => 'STATIC',
+ 'i' => 'PERL_STATIC_INLINE',
+ 'I' => 'PERL_STATIC_FORCE_INLINE'
+ }->{$1};
}
$retval = "$type $retval";
die_at_end "Don't declare static function '$plain_func' pure" if $flags =~ /P/;
- $static_inline = $type eq 'PERL_STATIC_INLINE';
+ $static_inline = $type =~ /^PERL_STATIC(?:_FORCE)?_INLINE/;
}
else {
if ($never_returns) {
@@ -123,15 +137,33 @@ my ($embed, $core, $ext, $api) = setup_embed();
$retval = "PERL_CALLCONV $retval";
}
}
+
+ die_at_end "For '$plain_func', M flag requires p flag"
+ if $flags =~ /M/ && $flags !~ /p/;
+ die_at_end "For '$plain_func', C flag requires one of [pIimb] flags"
+ if $flags =~ /C/ && $flags !~ /[Iibmp]/;
+ die_at_end "For '$plain_func', X flag requires one of [Iip] flags"
+ if $flags =~ /X/ && $flags !~ /[Iip]/;
+ die_at_end "For '$plain_func', X and m flags are mutually exclusive"
+ if $flags =~ /X/ && $flags =~ /m/;
+ die_at_end "For '$plain_func', [Ii] with [ACX] requires p flag"
+ if $flags =~ /[Ii]/ && $flags =~ /[ACX]/ && $flags !~ /p/;
+ die_at_end "For '$plain_func', b and m flags are mutually exclusive"
+ . " (try M flag)" if $flags =~ /b/ && $flags =~ /m/;
+ die_at_end "For '$plain_func', b flag without M flag requires D flag"
+ if $flags =~ /b/ && $flags !~ /M/ && $flags !~ /D/;
+ die_at_end "For '$plain_func', I and i flags are mutually exclusive"
+ if $flags =~ /I/ && $flags =~ /i/;
+
$func = full_name($plain_func, $flags);
$ret = "";
- $ret .= "#ifndef NO_MATHOMS\n" if $binarycompat;
- $ret .= "#ifndef PERL_NO_INLINE_FUNCTIONS\n" if $static_inline;
$ret .= "$retval\t$func(";
if ( $has_context ) {
$ret .= @args ? "pTHX_ " : "pTHX";
}
if (@args) {
+ die_at_end "n flag is contradicted by having arguments"
+ if $flags =~ /n/;
my $n;
for my $arg ( @args ) {
++$n;
@@ -180,6 +212,9 @@ my ($embed, $core, $ext, $api) = setup_embed();
if ( $flags =~ /P/ ) {
push @attrs, "__attribute__pure__";
}
+ if ( $flags =~ /I/ ) {
+ push @attrs, "__attribute__always_inline__";
+ }
if( $flags =~ /f/ ) {
my $prefix = $has_context ? 'pTHX_' : '';
my ($args, $pat);
@@ -209,18 +244,24 @@ my ($embed, $core, $ext, $api) = setup_embed();
$prefix, $pat, $args;
}
}
+ elsif ((grep { $_ eq '...' } @args) && $flags !~ /F/) {
+ die_at_end "$plain_func: Function with '...' arguments must have"
+ . " f or F flag";
+ }
if ( @attrs ) {
$ret .= "\n";
$ret .= join( "\n", map { "\t\t\t$_" } @attrs );
}
$ret .= ";";
$ret = "/* $ret */" if $commented_out;
- if (@names_of_nn) {
- $ret .= "\n#define PERL_ARGS_ASSERT_\U$plain_func\E\t\\\n\t"
- . join '; ', map "assert($_)", @names_of_nn;
- }
- $ret .= "\n#endif" if $static_inline;
- $ret .= "\n#endif" if $binarycompat;
+
+ $ret .= "\n#define PERL_ARGS_ASSERT_\U$plain_func\E"
+ if $args_assert_line || @names_of_nn;
+ $ret .= "\t\\\n\t" . join '; ', map "assert($_)", @names_of_nn
+ if @names_of_nn;
+
+ $ret = "#ifndef PERL_NO_INLINE_FUNCTIONS\n$ret\n#endif" if $static_inline;
+ $ret = "#ifndef NO_MATHOMS\n$ret\n#endif" if $binarycompat;
$ret .= @attrs ? "\n\n" : "\n";
print $pr $ret;
@@ -302,9 +343,9 @@ sub embed_h {
}
my $ret = "";
my ($flags,$retval,$func,@args) = @$_;
- unless ($flags =~ /[om]/) {
+ unless ($flags =~ /[omM]/) {
my $args = scalar @args;
- if ($flags =~ /n/) {
+ if ($flags =~ /T/) {
my $full_name = full_name($func, $flags);
next if $full_name eq $func; # Don't output a no-op.
$ret = hide($func, $full_name);
diff --git a/gnu/usr.bin/perl/regen/embed_lib.pl b/gnu/usr.bin/perl/regen/embed_lib.pl
index af991cbdf4b..d7e1c5a0b69 100644
--- a/gnu/usr.bin/perl/regen/embed_lib.pl
+++ b/gnu/usr.bin/perl/regen/embed_lib.pl
@@ -33,7 +33,8 @@ sub add_level {
@entries = @$funcs;
} else {
foreach (@$funcs) {
- if ($_->[0] =~ /A/) {
+ if ($_->[0] =~ /[AC]/) { # 'C' is like 'A' for our purposes
+ # here
push @entries, $_ if $wanted eq 'A';
} elsif ($_->[0] =~ /E/) {
push @entries, $_ if $wanted eq 'E';
diff --git a/gnu/usr.bin/perl/regen/feature.pl b/gnu/usr.bin/perl/regen/feature.pl
index 12bf5a8068d..667f524a7c1 100644
--- a/gnu/usr.bin/perl/regen/feature.pl
+++ b/gnu/usr.bin/perl/regen/feature.pl
@@ -35,6 +35,8 @@ my %feature = (
unicode_strings => 'unicode',
fc => 'fc',
signatures => 'signatures',
+ isa => 'isa',
+ indirect => 'indirect',
);
# NOTE: If a feature is ever enabled in a non-contiguous range of Perl
@@ -44,27 +46,29 @@ my %feature = (
# 5.odd implies the next 5.even, but an explicit 5.even can override it.
my %feature_bundle = (
all => [ keys %feature ],
- default => [qw()],
- "5.9.5" => [qw(say state switch)],
- "5.10" => [qw(say state switch)],
- "5.11" => [qw(say state switch unicode_strings)],
- "5.13" => [qw(say state switch unicode_strings)],
+ default => [qw(indirect)],
+ "5.9.5" => [qw(say state switch indirect)],
+ "5.10" => [qw(say state switch indirect)],
+ "5.11" => [qw(say state switch unicode_strings indirect)],
+ "5.13" => [qw(say state switch unicode_strings indirect)],
"5.15" => [qw(say state switch unicode_strings unicode_eval
- evalbytes current_sub fc)],
+ evalbytes current_sub fc indirect)],
"5.17" => [qw(say state switch unicode_strings unicode_eval
- evalbytes current_sub fc)],
+ evalbytes current_sub fc indirect)],
"5.19" => [qw(say state switch unicode_strings unicode_eval
- evalbytes current_sub fc)],
+ evalbytes current_sub fc indirect)],
"5.21" => [qw(say state switch unicode_strings unicode_eval
- evalbytes current_sub fc)],
+ evalbytes current_sub fc indirect)],
"5.23" => [qw(say state switch unicode_strings unicode_eval
- evalbytes current_sub fc postderef_qq)],
+ evalbytes current_sub fc postderef_qq indirect)],
"5.25" => [qw(say state switch unicode_strings unicode_eval
- evalbytes current_sub fc postderef_qq)],
+ evalbytes current_sub fc postderef_qq indirect)],
"5.27" => [qw(say state switch unicode_strings unicode_eval
- evalbytes current_sub fc postderef_qq bitwise)],
+ evalbytes current_sub fc postderef_qq bitwise indirect)],
"5.29" => [qw(say state switch unicode_strings unicode_eval
- evalbytes current_sub fc postderef_qq bitwise)],
+ evalbytes current_sub fc postderef_qq bitwise indirect)],
+ "5.31" => [qw(say state switch unicode_strings unicode_eval
+ evalbytes current_sub fc postderef_qq bitwise indirect)],
);
my @noops = qw( postderef lexical_subs );
@@ -74,6 +78,17 @@ my @removed = qw( array_base );
###########################################################################
# More data generated from the above
+if (keys %feature > 32) {
+ die "cop_features only has room for 32 features";
+}
+
+my %feature_bits;
+my $mask = 1;
+for my $feature (sort keys %feature) {
+ $feature_bits{$feature} = $mask;
+ $mask <<= 1;
+}
+
for (keys %feature_bundle) {
next unless /^5\.(\d*[13579])\z/;
$feature_bundle{"5.".($1+1)} ||= $feature_bundle{$_};
@@ -177,11 +192,11 @@ for(sort { length $a <=> length $b || $a cmp $b } keys %feature) {
print $pm ");\n\n";
print $pm "our %feature_bundle = (\n";
-$width = length longest values %UniqueBundles;
+my $bund_width = length longest values %UniqueBundles;
for( sort { $UniqueBundles{$a} cmp $UniqueBundles{$b} }
keys %UniqueBundles ) {
my $bund = $UniqueBundles{$_};
- print $pm qq' "$bund"' . " "x($width-length $bund)
+ print $pm qq' "$bund"' . " "x($bund_width-length $bund)
. qq' => [qw($_)],\n';
}
print $pm ");\n\n";
@@ -251,6 +266,12 @@ print $h <<EOH;
EOH
+for (sort keys %feature_bits) {
+ printf $h "#define FEATURE_%s_BIT%*s %#06x\n", uc($feature{$_}),
+ $width-length($feature{$_}), "", $feature_bits{$_};
+}
+print $h "\n";
+
my $count;
for (@HintedBundles) {
(my $key = uc) =~ y/.//d;
@@ -265,12 +286,10 @@ print $h <<'EOH';
#define CURRENT_FEATURE_BUNDLE \
((CURRENT_HINTS & HINT_FEATURE_MASK) >> HINT_FEATURE_SHIFT)
-/* Avoid using ... && Perl_feature_is_enabled(...) as that triggers a bug in
- the HP-UX cc on PA-RISC */
-#define FEATURE_IS_ENABLED(name) \
- ((CURRENT_HINTS \
- & HINT_LOCALIZE_HH) \
- ? Perl_feature_is_enabled(aTHX_ STR_WITH_LEN(name)) : FALSE)
+#define FEATURE_IS_ENABLED_MASK(mask) \
+ ((CURRENT_HINTS & HINT_LOCALIZE_HH) \
+ ? (PL_curcop->cop_features & (mask)) : FALSE)
+
/* The longest string we pass in. */
EOH
@@ -289,44 +308,44 @@ for (
my $NAME = uc $name;
if ($last && $first eq 'DEFAULT') { # '>= DEFAULT' warns
print $h <<EOI;
-#define FEATURE_$NAME\_IS_ENABLED \\
+#define FEATURE_${NAME}_IS_ENABLED \\
( \\
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last \\
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
- FEATURE_IS_ENABLED("$name")) \\
+ FEATURE_IS_ENABLED_MASK(FEATURE_${NAME}_BIT)) \\
)
EOI
}
elsif ($last) {
print $h <<EOH3;
-#define FEATURE_$NAME\_IS_ENABLED \\
+#define FEATURE_${NAME}_IS_ENABLED \\
( \\
(CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_$first && \\
CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_$last) \\
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
- FEATURE_IS_ENABLED("$name")) \\
+ FEATURE_IS_ENABLED_MASK(FEATURE_${NAME}_BIT)) \\
)
EOH3
}
elsif ($first) {
print $h <<EOH4;
-#define FEATURE_$NAME\_IS_ENABLED \\
+#define FEATURE_${NAME}_IS_ENABLED \\
( \\
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_$first \\
|| (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
- FEATURE_IS_ENABLED("$name")) \\
+ FEATURE_IS_ENABLED_MASK(FEATURE_${NAME}_BIT)) \\
)
EOH4
}
else {
print $h <<EOH5;
-#define FEATURE_$NAME\_IS_ENABLED \\
+#define FEATURE_${NAME}_IS_ENABLED \\
( \\
CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \\
- FEATURE_IS_ENABLED("$name") \\
+ FEATURE_IS_ENABLED_MASK(FEATURE_${NAME}_BIT) \\
)
EOH5
@@ -335,6 +354,19 @@ EOH5
print $h <<EOH;
+#define SAVEFEATUREBITS() SAVEI32(PL_compiling.cop_features)
+
+#define CLEARFEATUREBITS() (PL_compiling.cop_features = 0)
+
+#define STOREFEATUREBITSHH(hh) \\
+ (hv_stores((hh), "feature/bits", newSVuv(PL_compiling.cop_features)))
+
+#define FETCHFEATUREBITSHH(hh) \\
+ STMT_START { \\
+ SV **fbsv = hv_fetchs((hh), "feature/bits", FALSE); \\
+ PL_compiling.cop_features = fbsv ? SvUV(*fbsv) : 0; \\
+ } STMT_END
+
#endif /* PERL_CORE or PERL_EXT */
#ifdef PERL_IN_OP_C
@@ -368,6 +400,63 @@ print $h <<EOJ;
}
#endif /* PERL_IN_OP_C */
+#ifdef PERL_IN_MG_C
+
+#define magic_sethint_feature(keysv, keypv, keylen, valsv, valbool) \\
+ S_magic_sethint_feature(aTHX_ (keysv), (keypv), (keylen), (valsv), (valbool))
+PERL_STATIC_INLINE void
+S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen,
+ SV *valsv, bool valbool) {
+ if (keysv)
+ keypv = SvPV_const(keysv, keylen);
+
+ if (memBEGINs(keypv, keylen, "feature_")) {
+ const char *subf = keypv + (sizeof("feature_")-1);
+ U32 mask = 0;
+ switch (*subf) {
+EOJ
+
+my %pref;
+for my $key (sort values %feature) {
+ push @{$pref{substr($key, 0, 1)}}, $key;
+}
+
+for my $pref (sort keys %pref) {
+ print $h <<EOS;
+ case '$pref':
+EOS
+ my $first = 1;
+ for my $subkey (@{$pref{$pref}}) {
+ my $rest = substr($subkey, 1);
+ my $if = $first ? "if" : "else if";
+ print $h <<EOJ;
+ $if (keylen == sizeof("feature_$subkey")-1
+ && memcmp(subf+1, "$rest", keylen - sizeof("feature_")) == 0) {
+ mask = FEATURE_\U${subkey}\E_BIT;
+ break;
+ }
+EOJ
+
+ $first = 0;
+ }
+ print $h <<EOS;
+ return;
+
+EOS
+}
+
+print $h <<EOJ;
+ default:
+ return;
+ }
+ if (valsv ? SvTRUE(valsv) : valbool)
+ PL_compiling.cop_features |= mask;
+ else
+ PL_compiling.cop_features &= ~mask;
+ }
+}
+#endif /* PERL_IN_MG_C */
+
#endif /* PERL_FEATURE_H_ */
EOJ
@@ -380,7 +469,7 @@ read_only_bottom_close_and_rename($h);
__END__
package feature;
-our $VERSION = '1.54';
+our $VERSION = '1.58';
FEATURES
@@ -665,6 +754,26 @@ Reference to a Variable> for examples.
This feature is available from Perl 5.26 onwards.
+=head2 The 'isa' feature
+
+This allows the use of the C<isa> infix operator, which tests whether the
+scalar given by the left operand is an object of the class given by the
+right operand. See L<perlop/Class Instance Operator> for more details.
+
+This feature is available from Perl 5.32 onwards.
+
+=head2 The 'indirect' feature
+
+This feature allows the use of L<indirect object
+syntax|perlobj/Indirect Object Syntax> for method calls, e.g. C<new
+Foo 1, 2;>. It is enabled by default, but can be turned off to
+disallow indirect object syntax.
+
+This feature is available under this name from Perl 5.32 onwards. In
+previous versions, it was simply on all the time. To disallow (or
+warn on) indirect object syntax on older Perls, see the L<indirect>
+CPAN module.
+
=head1 FEATURE BUNDLES
It's possible to load multiple features together, using
@@ -761,7 +870,7 @@ sub __common {
my $import = shift;
my $bundle_number = $^H & $hint_mask;
my $features = $bundle_number != $hint_mask
- && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
+ && $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]};
if ($features) {
# Features are enabled implicitly via bundle hints.
# Delete any keys that may be left over from last time.
diff --git a/gnu/usr.bin/perl/regen/keywords.pl b/gnu/usr.bin/perl/regen/keywords.pl
index 9619d86faff..ffc4882efab 100644
--- a/gnu/usr.bin/perl/regen/keywords.pl
+++ b/gnu/usr.bin/perl/regen/keywords.pl
@@ -46,6 +46,7 @@ my %feature_kw = (
evalbytes => 'evalbytes',
__SUB__ => '__SUB__',
fc => 'fc',
+ isa => 'isa',
);
my %pos = map { ($_ => 1) } @{$by_strength{'+'}};
@@ -217,6 +218,7 @@ __END__
-index
-int
-ioctl
+-isa
-join
-keys
-kill
diff --git a/gnu/usr.bin/perl/regen/lib_cleanup.pl b/gnu/usr.bin/perl/regen/lib_cleanup.pl
index 61039b2838f..5c5c4e24ef6 100644
--- a/gnu/usr.bin/perl/regen/lib_cleanup.pl
+++ b/gnu/usr.bin/perl/regen/lib_cleanup.pl
@@ -74,12 +74,6 @@ foreach my $file (@ext) {
$package = $1;
last;
}
- elsif (/^\s*package\s*$/) {
- # If they're hiding their package name, we ignore them
- ++$ignore{"/$path"};
- $package='';
- last;
- }
}
close $fh
or die "Can't close $file: $!";
diff --git a/gnu/usr.bin/perl/regen/mg_vtable.pl b/gnu/usr.bin/perl/regen/mg_vtable.pl
index f5213b2c21e..04dde482697 100644
--- a/gnu/usr.bin/perl/regen/mg_vtable.pl
+++ b/gnu/usr.bin/perl/regen/mg_vtable.pl
@@ -200,8 +200,10 @@ EOH
$mg_order{(uc $byte) . $byte} = $name;
}
my @rows;
+ my @names;
foreach (sort keys %mg_order) {
my $name = $mg_order{$_};
+ push @names, $name;
my $data = $mg{$name};
my $i = ord $data->{char};
unless ($data->{unknown_to_sv_magic}) {
@@ -272,7 +274,10 @@ EOH
printf $format, $type, $vtbl, $desc;
printf $format, '', '', $_ foreach @cont;
}
- print "\n";
+ print "\n\n";
+
+ print "=for apidoc Amnh||PERL_MAGIC_$_\n" for @names;
+ print "\n";
while (<$oldguts>) {
last if /^=for mg_vtable.pl end/;
diff --git a/gnu/usr.bin/perl/regen/mk_PL_charclass.pl b/gnu/usr.bin/perl/regen/mk_PL_charclass.pl
index 42fd8edf6e1..10802d6ae88 100644
--- a/gnu/usr.bin/perl/regen/mk_PL_charclass.pl
+++ b/gnu/usr.bin/perl/regen/mk_PL_charclass.pl
@@ -49,6 +49,9 @@ my %bit_names = (
XDIGIT => 0,
VERTSPACE => 0,
IS_IN_SOME_FOLD => '_Perl_Any_Folds',
+ BINDIGIT => [ ord '0', ord '1' ],
+ OCTDIGIT => [ ord '0', ord '1', ord '2', ord '3',
+ ord '4', ord '5', ord '6', ord '7' ],
# These are the control characters that there are mnemonics for
MNEMONIC_CNTRL => [ ord "\a", ord "\b", ord "\e", ord "\f",
@@ -377,15 +380,6 @@ foreach my $charset (get_supported_code_pages()) {
# are in UTF-EBCDIC; these are based on the fundamental
# characteristics of UTF-EBCDIC.
if (@utf_to_i8) {
- if ($i8 >= 0xC5 && $i8 != 0xE0) {
- $out[$index] .= '|(1U<<_CC_UTF8_IS_START)';
- if ($i8 <= 0xC7) {
- $out[$index] .= '|(1U<<_CC_UTF8_IS_DOWNGRADEABLE_START)';
- }
- }
- if (($i8 & 0xE0) == 0xA0) {
- $out[$index] .= '|(1U<<_CC_UTF8_IS_CONTINUATION)';
- }
if ($i8 >= 0xF1) {
$out[$index] .=
'|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE)';
diff --git a/gnu/usr.bin/perl/regen/mk_invlists.pl b/gnu/usr.bin/perl/regen/mk_invlists.pl
index 8a0c1f071f7..8c848ccce91 100644
--- a/gnu/usr.bin/perl/regen/mk_invlists.pl
+++ b/gnu/usr.bin/perl/regen/mk_invlists.pl
@@ -13,7 +13,7 @@ use Unicode::UCD qw(prop_aliases
);
require './regen/regen_lib.pl';
require './regen/charset_translations.pl';
-require './lib/unicore/Heavy.pl';
+require './lib/unicore/UCD.pl';
use re "/aa";
# This program outputs charclass_invlists.h, which contains various inversion
@@ -61,6 +61,35 @@ my $max_hdr_len = 3; # In headings, how wide a name is allowed?
print $out_fh "/* See the generating file for comments */\n\n";
+print $out_fh <<'EOF';
+/* This gives the number of code points that can be in the bitmap of an ANYOF
+ * node. The shift number must currently be one of: 8..12. It can't be less
+ * than 8 (256) because some code relies on it being at least that. Above 12
+ * (4096), and you start running into warnings that some data structure widths
+ * have been exceeded, though the test suite as of this writing still passes
+ * for up through 16, which is as high as anyone would ever want to go,
+ * encompassing all of the Unicode BMP, and thus including all the economically
+ * important world scripts. At 12 most of them are: including Arabic,
+ * Cyrillic, Greek, Hebrew, Indian subcontinent, Latin, and Thai; but not Han,
+ * Japanese, nor Korean. (The regarglen structure in regnodes.h is a U8, and
+ * the trie types TRIEC and AHOCORASICKC are larger than U8 for shift values
+ * above 12.) Be sure to benchmark before changing, as larger sizes do
+ * significantly slow down the test suite */
+
+EOF
+
+my $num_anyof_code_points = '(1 << 8)';
+
+print $out_fh "#define NUM_ANYOF_CODE_POINTS $num_anyof_code_points\n\n";
+
+$num_anyof_code_points = eval $num_anyof_code_points;
+
+no warnings 'once';
+print $out_fh <<"EOF";
+/* The precision to use in "%.*e" formats */
+#define PL_E_FORMAT_PRECISION $Unicode::UCD::e_precision
+EOF
+
# enums that should be made public
my %public_enums = (
_Perl_SCX => 1
@@ -93,8 +122,8 @@ my @a2n;
my %prop_name_aliases;
# Invert this hash so that for each canonical name, we get a list of things
# that map to it (excluding itself)
-foreach my $name (sort keys %utf8::loose_property_name_of) {
- my $canonical = $utf8::loose_property_name_of{$name};
+foreach my $name (sort keys %Unicode::UCD::loose_property_name_of) {
+ my $canonical = $Unicode::UCD::loose_property_name_of{$name};
push @{$prop_name_aliases{$canonical}}, $name if $canonical ne $name;
}
@@ -163,6 +192,8 @@ sub uniques {
return grep { ! $seen{$_}++ } @_;
}
+sub caselessly { lc $a cmp lc $b }
+
sub a2n($) {
my $cp = shift;
@@ -207,8 +238,10 @@ sub switch_pound_if ($$;$) {
foreach my $element (@new_pound_if) {
# regcomp.c is arranged so that the tables are not compiled in
- # re_comp.c */
- my $no_xsub = 1 if $element =~ / PERL_IN_ (?: REGCOMP ) _C /x;
+ # re_comp.c, but general enums and defines (which take no space) are
+ # compiled */
+ my $no_xsub = 1 if $name !~ /enum|define/
+ && $element =~ / PERL_IN_ (?: REGCOMP ) _C /x;
$element = "defined($element)";
$element = "($element && ! defined(PERL_IN_XSUB_RE))" if $no_xsub;
}
@@ -371,7 +404,8 @@ sub output_invmap ($$$$$$$) {
my $name_prefix;
if ($input_format =~ / ^ [as] l? $ /x) {
- $prop_name = (prop_aliases($prop_name))[1] // $prop_name =~ s/^_Perl_//r; # Get full name
+ $prop_name = (prop_aliases($prop_name))[1]
+ // $prop_name =~ s/^_Perl_//r; # Get full name
my $short_name = (prop_aliases($prop_name))[0] // $prop_name;
my @input_enums;
@@ -381,7 +415,7 @@ sub output_invmap ($$$$$$$) {
# expand the sublists first.
if ($input_format !~ / ^ a /x) {
if ($input_format ne 'sl') {
- @input_enums = sort(uniques(@$invmap));
+ @input_enums = sort caselessly uniques(@$invmap);
}
else {
foreach my $element (@$invmap) {
@@ -392,7 +426,7 @@ sub output_invmap ($$$$$$$) {
push @input_enums, $element;
}
}
- @input_enums = sort(uniques(@input_enums));
+ @input_enums = sort caselessly uniques(@input_enums);
}
}
@@ -435,109 +469,141 @@ sub output_invmap ($$$$$$$) {
}
}
- @unused_enums = sort @unused_enums;
+ @unused_enums = sort caselessly @unused_enums;
$unused_enum_value = @enums; # All unused have the same value,
# one beyond the final used one
}
+ # These properties have extra tables written out for them that we want
+ # to make as compact and legible as possible. So we find short names
+ # for their property values. For non-official ones we will need to
+ # add a legend at the top of the table to say what the abbreviation
+ # stands for.
+ my $property_needs_table_re = qr/ ^ _Perl_ (?: GCB | LB | WB ) $ /x;
+
+ my %short_enum_name;
+ my %need_explanation; # For non-official abbreviations, we will need
+ # to explain what the one we come up with
+ # stands for
+ my $type = lc $prop_name;
+ if ($name =~ $property_needs_table_re) {
+ my @short_names; # List of already used abbreviations, so we
+ # don't duplicate
+ for my $enum (@enums) {
+ my $short_enum;
+ my $is_official_name = 0;
+
+ # Special case this wb property value to make the
+ # name more clear
+ if ($enum eq 'Perl_Tailored_HSpace') {
+ $short_enum = 'hs';
+ }
+ else {
+
+ # Use the official short name, if found.
+ ($short_enum) = prop_value_aliases($type, $enum);
+ if ( defined $short_enum) {
+ $is_official_name = 1;
+ }
+ else {
+ # But if there is no official name, use the name that
+ # came from the data (if any). Otherwise, the name
+ # had to come from the extras list. There are two
+ # types of values in that list.
+ #
+ # First are those enums that are not part of the
+ # property, but are defined by the code in this file.
+ # By convention these have all-caps names. We use the
+ # lowercased name for these.
+ #
+ # Second are enums that are needed to get the
+ # algorithms below to work and/or to get regexec.c to
+ # compile, but don't exist in all Unicode releases.
+ # These are handled outside this loop as
+ # 'unused_enums' (as they are unused they all get
+ # collapsed into a single column, and their names
+ # don't matter)
+ if (grep { $_ eq $enum } @input_enums) {
+ $short_enum = $enum
+ }
+ else {
+ $short_enum = lc $enum;
+ }
+ }
+
+ # If our short name is too long, or we already know that
+ # the name is an abbreviation, truncate to make sure it's
+ # short enough, and remember that we did this so we can
+ # later add a comment in the generated file
+ if (length $short_enum > $max_hdr_len) {
+ # First try using just the uppercase letters of the name;
+ # if it is something like FooBar, FB is a better
+ # abbreviation than Foo. That's not the case if it is
+ # entirely lowercase.
+ my $uc = $short_enum;
+ $uc =~ s/[[:^upper:]]//g;
+ $short_enum = $uc if length $uc > 1
+ && length $uc < length $short_enum;
+
+ $short_enum = substr($short_enum, 0, $max_hdr_len);
+ $is_official_name = 0;
+ }
+ }
+
+ # If the name we are to display conflicts, try another.
+ if (grep { $_ eq $short_enum } @short_names) {
+ $is_official_name = 0;
+ do { # The increment operator on strings doesn't work on
+ # those containing an '_', so get rid of any final
+ # portion.
+ $short_enum =~ s/_//g;
+ $short_enum++;
+ } while grep { $_ eq $short_enum } @short_names;
+ }
+
+ push @short_names, $short_enum;
+ $short_enum_name{$enum} = $short_enum;
+ $need_explanation{$enum} = $short_enum unless $is_official_name;
+ }
+ } # End of calculating short enum names for certain properties
+
# Assign a value to each element of the enum type we are creating.
# The default value always gets 0; the others are arbitrarily
- # assigned.
+ # assigned, but for the properties which have the extra table, it is
+ # in the order we have computed above so the rows and columns appear
+ # alphabetically by heading abbreviation.
my $enum_val = 0;
my $canonical_default = prop_value_aliases($prop_name, $default);
$default = $canonical_default if defined $canonical_default;
$enums{$default} = $enum_val++;
- for my $enum (@enums) {
+ for my $enum (sort { ($name =~ $property_needs_table_re)
+ ? lc $short_enum_name{$a}
+ cmp lc $short_enum_name{$b}
+ : lc $a cmp lc $b
+ } @enums)
+ {
$enums{$enum} = $enum_val++ unless exists $enums{$enum};
}
- # Calculate the data for the special tables output for these properties.
- if ($name =~ / ^ _Perl_ (?: GCB | LB | WB ) $ /x) {
+ # Now calculate the data for the special tables output for these
+ # properties.
+ if ($name =~ $property_needs_table_re) {
# The data includes the hashes %gcb_enums, %lb_enums, etc.
# Similarly we calculate column headings for the tables.
#
# We use string evals to allow the same code to work on
# all the tables
- my $type = lc $prop_name;
# Skip if we've already done this code, which populated
# this hash
if (eval "! \%${type}_enums") {
# For each enum in the type ...
- foreach my $enum (sort keys %enums) {
+ foreach my $enum (keys %enums) {
my $value = $enums{$enum};
- my $short;
- my $abbreviated_from;
-
- # Special case this wb property value to make the
- # name more clear
- if ($enum eq 'Perl_Tailored_HSpace') {
- $short = 'hs';
- $abbreviated_from = $enum;
- }
- else {
-
- # Use the official short name, if found.
- ($short) = prop_value_aliases($type, $enum);
-
- if (! defined $short) {
-
- # But if there is no official name, use the name
- # that came from the data (if any). Otherwise,
- # the name had to come from the extras list.
- # There are two types of values in that list.
- #
- # First are those enums that are not part of the
- # property, but are defined by this code. By
- # convention these have all-caps names. We use
- # the lowercased name for these.
- #
- # Second are enums that are needed to get the
- # algorithms below to work and/or to get regexec.c
- # to compile, but don't exist in all Unicode
- # releases. These are handled outside this loop
- # as 'unused_enums'
- if (grep { $_ eq $enum } @input_enums) {
- $short = $enum
- }
- else {
- $short = lc $enum;
- }
- }
- }
-
- # If our short name is too long, or we already
- # know that the name is an abbreviation, truncate
- # to make sure it's short enough, and remember
- # that we did this so we can later add a comment in the
- # generated file
- if ( $abbreviated_from
- || length $short > $max_hdr_len)
- {
- $short = substr($short, 0, $max_hdr_len);
- $abbreviated_from = $enum
- unless $abbreviated_from;
- # If the name we are to display conflicts, try
- # another.
- while (eval "exists
- \$${type}_abbreviations{$short}")
- {
- die $@ if $@;
-
- # The increment operator on strings doesn't work
- # on those containing an '_', so just use the
- # final portion.
- my @short = split '_', $short;
- $short[-1]++;
- $short = join "_", @short;
- }
-
- eval "\$${type}_abbreviations{$short} = '$enum'";
- die $@ if $@;
- }
+ my $short_enum = $short_enum_name{$enum};
# Remember the mapping from the property value
# (enum) name to its value.
@@ -547,8 +613,14 @@ sub output_invmap ($$$$$$$) {
# Remember the inverse mapping to the short name
# so that we can properly label the generated
# table's rows and columns
- eval "\$${type}_short_enums[$value] = '$short'";
+ eval "\$${type}_short_enums[$value] = '$short_enum'";
die $@ if $@;
+
+ # And note the abbreviations that need explanation
+ if ($need_explanation{$enum}) {
+ eval "\$${type}_abbreviations{$short_enum} = '$enum'";
+ die $@ if $@;
+ }
}
# Each unused enum has the same value. They all are collapsed
@@ -565,10 +637,10 @@ sub output_invmap ($$$$$$$) {
}
}
- # The short names tend to be two lower case letters, but it looks
- # better for those if they are upper. XXX
+ # The short property names tend to be two lower case letters, but it
+ # looks better for those if they are upper. XXX
$short_name = uc($short_name) if length($short_name) < 3
- || substr($short_name, 0, 1) =~ /[[:lower:]]/;
+ || substr($short_name, 0, 1) =~ /[[:lower:]]/;
$name_prefix = "${short_name}_";
# Start the enum definition for this map
@@ -609,7 +681,7 @@ sub output_invmap ($$$$$$$) {
$joined = join ",", @$element;
}
else {
- $joined = join ",", sort @$element;
+ $joined = join ",", sort caselessly @$element;
}
my $already_found = exists $multiples{$joined};
@@ -679,12 +751,19 @@ sub output_invmap ($$$$$$$) {
switch_pound_if($name, $where, $charset);
+ # The inversion lists here have to be UV because inversion lists are
+ # capable of storing any code point, and even though the the ones here
+ # are only Unicode ones, which need just 21 bits, they are linked to
+ # directly, rather than copied. The inversion map and aux tables also
+ # only need be 21 bits, and so we can get away with declaring them
+ # 32-bits to save a little space and memory (on some 64-bit
+ # platforms), as they are copied.
$invmap_declaration_type = ($input_format =~ /s/)
? $enum_declaration_type
- : "int";
+ : "I32";
$aux_declaration_type = ($input_format =~ /s/)
? $enum_declaration_type
- : "unsigned int";
+ : "U32";
$output_format = "${name_prefix}%s";
@@ -709,10 +788,11 @@ sub output_invmap ($$$$$$$) {
foreach my $table_number (@sorted_table_list) {
my $table = $inverted_mults{$table_number};
output_table_header($out_fh,
- $aux_declaration_type,
- "$name_prefix$aux_table_prefix$table_number");
+ $aux_declaration_type,
+ "$name_prefix$aux_table_prefix$table_number");
- # Earlier, we joined the elements of this table together with a comma
+ # Earlier, we joined the elements of this table together with
+ # a comma
my @elements = split ",", $table;
$aux_counts[$table_number] = scalar @elements;
@@ -750,8 +830,9 @@ sub output_invmap ($$$$$$$) {
"${name_prefix}${aux_table_prefix}lengths");
print $out_fh "\t0,\t/* Placeholder */\n";
for my $i (1 .. @sorted_table_list) {
- print $out_fh ",\n" if $i > 1;
- print $out_fh "\t$aux_counts[$i]\t/* $name_prefix$aux_table_prefix$i */";
+ print $out_fh ",\n" if $i > 1;
+ print $out_fh
+ "\t$aux_counts[$i]\t/* $name_prefix$aux_table_prefix$i */";
}
print $out_fh "\n";
output_table_trailer();
@@ -1075,6 +1156,9 @@ sub _Perl_IVCF {
push @invlist, $sorted_folds[-1] + 1;
push @invmap, 0;
+ push @invlist, 0x110000;
+ push @invmap, 0;
+
# All Unicode versions have some places where multiple code points map to
# the same one, so the format always has an 'l'
return \@invlist, \@invmap, 'al', $default;
@@ -1180,7 +1264,8 @@ sub output_table_common {
$spacers[$i] = " " x (length($names_ref->[$i]) - $column_width);
}
- output_table_header($out_fh, $table_type, "${property}_table", undef, $size, $size);
+ output_table_header($out_fh, $table_type, "${property}_table", undef,
+ $size, $size);
# Calculate the column heading line
my $header_line = "/* "
@@ -1200,13 +1285,13 @@ sub output_table_common {
# If we have annotations, output it now.
if ($has_unused || scalar %$abbreviations_ref) {
my $text = "";
- foreach my $abbr (sort keys %$abbreviations_ref) {
+ foreach my $abbr (sort caselessly keys %$abbreviations_ref) {
$text .= "; " if $text;
$text .= "'$abbr' stands for '$abbreviations_ref->{$abbr}'";
}
if ($has_unused) {
$text .= "; $unused_table_hdr stands for 'unused in this Unicode"
- . " release (and the data in the row or column are garbage)"
+ . " release (and the data in its row and column are garbage)"
}
my $indent = " " x 3;
@@ -1298,7 +1383,7 @@ sub output_GCB_table() {
# Post 11.0: GB11 \p{Extended_Pictographic} Extend* ZWJ
# × \p{Extended_Pictographic}
- $gcb_table[$gcb_enums{'ZWJ'}][$gcb_enums{'XPG_XX'}] =
+ $gcb_table[$gcb_enums{'ZWJ'}][$gcb_enums{'ExtPict_XX'}] =
$gcb_actions{GCB_Maybe_Emoji_NonBreak};
# This and the rule GB10 obsolete starting with Unicode 11.0, can be left
@@ -1446,8 +1531,10 @@ sub output_LB_table() {
[$lb_enums{'Regional_Indicator'}] = $lb_actions{'LB_RI_then_RI'};
# LB30 Do not break between letters, numbers, or ordinary symbols and
- # opening or closing parentheses.
- # (AL | HL | NU) × OP
+ # non-East-Asian opening punctuation nor non-East-Asian closing
+ # parentheses.
+
+ # (AL | HL | NU) × [OP-[\p{ea=F}\p{ea=W}\p{ea=H}]]
$lb_table[$lb_enums{'Alphabetic'}][$lb_enums{'Open_Punctuation'}]
= $lb_actions{'LB_NOBREAK'};
$lb_table[$lb_enums{'Hebrew_Letter'}][$lb_enums{'Open_Punctuation'}]
@@ -1455,7 +1542,7 @@ sub output_LB_table() {
$lb_table[$lb_enums{'Numeric'}][$lb_enums{'Open_Punctuation'}]
= $lb_actions{'LB_NOBREAK'};
- # CP × (AL | HL | NU)
+ # [CP-[\p{ea=F}\p{ea=W}\p{ea=H}]] × (AL | HL | NU)
$lb_table[$lb_enums{'Close_Parenthesis'}][$lb_enums{'Alphabetic'}]
= $lb_actions{'LB_NOBREAK'};
$lb_table[$lb_enums{'Close_Parenthesis'}][$lb_enums{'Hebrew_Letter'}]
@@ -1550,6 +1637,8 @@ sub output_LB_table() {
# the code we can recover the underlying break value.
$lb_table[$lb_enums{'Prefix_Numeric'}][$lb_enums{'Open_Punctuation'}]
+= $lb_actions{'LB_PR_or_PO_then_OP_or_HY'};
+ $lb_table[$lb_enums{'Prefix_Numeric'}][$lb_enums{'East_Asian_OP'}]
+ += $lb_actions{'LB_PR_or_PO_then_OP_or_HY'};
$lb_table[$lb_enums{'Postfix_Numeric'}][$lb_enums{'Open_Punctuation'}]
+= $lb_actions{'LB_PR_or_PO_then_OP_or_HY'};
$lb_table[$lb_enums{'Prefix_Numeric'}][$lb_enums{'Hyphen'}]
@@ -1560,6 +1649,8 @@ sub output_LB_table() {
# ( OP | HY ) × NU
$lb_table[$lb_enums{'Open_Punctuation'}][$lb_enums{'Numeric'}]
= $lb_actions{'LB_NOBREAK'};
+ $lb_table[$lb_enums{'East_Asian_OP'}][$lb_enums{'Numeric'}]
+ = $lb_actions{'LB_NOBREAK'};
$lb_table[$lb_enums{'Hyphen'}][$lb_enums{'Numeric'}]
= $lb_actions{'LB_NOBREAK'};
@@ -1576,6 +1667,8 @@ sub output_LB_table() {
= $lb_actions{'LB_NOBREAK'};
$lb_table[$lb_enums{'Numeric'}][$lb_enums{'Close_Parenthesis'}]
= $lb_actions{'LB_NOBREAK'};
+ $lb_table[$lb_enums{'Numeric'}][$lb_enums{'East_Asian_CP'}]
+ = $lb_actions{'LB_NOBREAK'};
# Like earlier where we have to test in code, we add in the action so
# that we can recover the underlying values. This is done in rules
@@ -1592,6 +1685,8 @@ sub output_LB_table() {
+= $lb_actions{'LB_SY_or_IS_then_various'};
$lb_table[$lb_enums{'Break_Symbols'}][$lb_enums{'Close_Parenthesis'}]
+= $lb_actions{'LB_SY_or_IS_then_various'};
+ $lb_table[$lb_enums{'Break_Symbols'}][$lb_enums{'East_Asian_CP'}]
+ += $lb_actions{'LB_SY_or_IS_then_various'};
$lb_table[$lb_enums{'Infix_Numeric'}][$lb_enums{'Numeric'}]
+= $lb_actions{'LB_SY_or_IS_then_various'};
$lb_table[$lb_enums{'Infix_Numeric'}][$lb_enums{'Break_Symbols'}]
@@ -1602,6 +1697,8 @@ sub output_LB_table() {
+= $lb_actions{'LB_SY_or_IS_then_various'};
$lb_table[$lb_enums{'Infix_Numeric'}][$lb_enums{'Close_Parenthesis'}]
+= $lb_actions{'LB_SY_or_IS_then_various'};
+ $lb_table[$lb_enums{'Infix_Numeric'}][$lb_enums{'East_Asian_CP'}]
+ += $lb_actions{'LB_SY_or_IS_then_various'};
# NU (NU | SY | IS)* (CL | CP)? × (PO | PR)
# which can be rewritten as:
@@ -1613,6 +1710,8 @@ sub output_LB_table() {
$lb_table[$lb_enums{'Close_Parenthesis'}][$lb_enums{'Postfix_Numeric'}]
+= $lb_actions{'LB_various_then_PO_or_PR'};
+ $lb_table[$lb_enums{'East_Asian_CP'}][$lb_enums{'Postfix_Numeric'}]
+ += $lb_actions{'LB_various_then_PO_or_PR'};
$lb_table[$lb_enums{'Close_Punctuation'}][$lb_enums{'Postfix_Numeric'}]
+= $lb_actions{'LB_various_then_PO_or_PR'};
$lb_table[$lb_enums{'Infix_Numeric'}][$lb_enums{'Postfix_Numeric'}]
@@ -1622,6 +1721,8 @@ sub output_LB_table() {
$lb_table[$lb_enums{'Close_Parenthesis'}][$lb_enums{'Prefix_Numeric'}]
+= $lb_actions{'LB_various_then_PO_or_PR'};
+ $lb_table[$lb_enums{'East_Asian_CP'}][$lb_enums{'Prefix_Numeric'}]
+ += $lb_actions{'LB_various_then_PO_or_PR'};
$lb_table[$lb_enums{'Close_Punctuation'}][$lb_enums{'Prefix_Numeric'}]
+= $lb_actions{'LB_various_then_PO_or_PR'};
$lb_table[$lb_enums{'Infix_Numeric'}][$lb_enums{'Prefix_Numeric'}]
@@ -1682,33 +1783,10 @@ sub output_LB_table() {
$lb_table[$lb_enums{'Numeric'}][$lb_enums{'Hebrew_Letter'}]
= $lb_actions{'LB_NOBREAK'};
- # LB22 Do not break between two ellipses, or between letters, numbers or
- # exclamations and ellipsis.
- # (AL | HL) × IN
- $lb_table[$lb_enums{'Alphabetic'}][$lb_enums{'Inseparable'}]
- = $lb_actions{'LB_NOBREAK'};
- $lb_table[$lb_enums{'Hebrew_Letter'}][$lb_enums{'Inseparable'}]
- = $lb_actions{'LB_NOBREAK'};
-
- # Exclamation × IN
- $lb_table[$lb_enums{'Exclamation'}][$lb_enums{'Inseparable'}]
- = $lb_actions{'LB_NOBREAK'};
-
- # (ID | EB | EM) × IN
- $lb_table[$lb_enums{'Ideographic'}][$lb_enums{'Inseparable'}]
- = $lb_actions{'LB_NOBREAK'};
- $lb_table[$lb_enums{'E_Base'}][$lb_enums{'Inseparable'}]
- = $lb_actions{'LB_NOBREAK'};
- $lb_table[$lb_enums{'E_Modifier'}][$lb_enums{'Inseparable'}]
- = $lb_actions{'LB_NOBREAK'};
-
- # IN × IN
- $lb_table[$lb_enums{'Inseparable'}][$lb_enums{'Inseparable'}]
- = $lb_actions{'LB_NOBREAK'};
-
- # NU × IN
- $lb_table[$lb_enums{'Numeric'}][$lb_enums{'Inseparable'}]
- = $lb_actions{'LB_NOBREAK'};
+ # LB22 Do not break before ellipses
+ for my $i (0 .. @lb_table - 1) {
+ $lb_table[$i][$lb_enums{'Inseparable'}] = $lb_actions{'LB_NOBREAK'};
+ }
# LB21b Don’t break between Solidus and Hebrew letters.
# SY × HL
@@ -1776,18 +1854,24 @@ sub output_LB_table() {
= $lb_actions{'LB_NOBREAK_EVEN_WITH_SP_BETWEEN'};
$lb_table[$lb_enums{'Close_Parenthesis'}][$lb_enums{'Nonstarter'}]
= $lb_actions{'LB_NOBREAK_EVEN_WITH_SP_BETWEEN'};
+ $lb_table[$lb_enums{'East_Asian_CP'}][$lb_enums{'Nonstarter'}]
+ = $lb_actions{'LB_NOBREAK_EVEN_WITH_SP_BETWEEN'};
# LB15 Do not break within ‘”[’, even with intervening spaces.
# QU SP* × OP
$lb_table[$lb_enums{'Quotation'}][$lb_enums{'Open_Punctuation'}]
= $lb_actions{'LB_NOBREAK_EVEN_WITH_SP_BETWEEN'};
+ $lb_table[$lb_enums{'Quotation'}][$lb_enums{'East_Asian_OP'}]
+ = $lb_actions{'LB_NOBREAK_EVEN_WITH_SP_BETWEEN'};
# LB14 Do not break after ‘[’, even after spaces.
# OP SP* ×
for my $i (0 .. @lb_table - 1) {
$lb_table[$lb_enums{'Open_Punctuation'}][$i]
= $lb_actions{'LB_NOBREAK_EVEN_WITH_SP_BETWEEN'};
+ $lb_table[$lb_enums{'East_Asian_OP'}][$i]
+ = $lb_actions{'LB_NOBREAK_EVEN_WITH_SP_BETWEEN'};
}
# LB13 Do not break before ‘]’ or ‘!’ or ‘;’ or ‘/’, even after spaces, as
@@ -1807,6 +1891,8 @@ sub output_LB_table() {
= $lb_actions{'LB_NOBREAK_EVEN_WITH_SP_BETWEEN'};
$lb_table[$i][$lb_enums{'Close_Parenthesis'}]
= $lb_actions{'LB_NOBREAK_EVEN_WITH_SP_BETWEEN'};
+ $lb_table[$i][$lb_enums{'East_Asian_CP'}]
+ = $lb_actions{'LB_NOBREAK_EVEN_WITH_SP_BETWEEN'};
$lb_table[$i][$lb_enums{'Infix_Numeric'}]
= $lb_actions{'LB_NOBREAK_EVEN_WITH_SP_BETWEEN'};
$lb_table[$i][$lb_enums{'Break_Symbols'}]
@@ -2059,7 +2145,7 @@ sub output_WB_table() {
# WB13b ExtendNumLet × (ALetter | Hebrew_Letter | Numeric | Katakana)
$wb_table[$wb_enums{'ExtendNumLet'}][$wb_enums{'ALetter'}]
= $wb_actions{'WB_NOBREAK'};
- $wb_table[$wb_enums{'ExtendNumLet'}][$wb_enums{'XPG_LE'}]
+ $wb_table[$wb_enums{'ExtendNumLet'}][$wb_enums{'ExtPict_LE'}]
= $wb_actions{'WB_NOBREAK'};
$wb_table[$wb_enums{'ExtendNumLet'}][$wb_enums{'Hebrew_Letter'}]
= $wb_actions{'WB_NOBREAK'};
@@ -2072,7 +2158,7 @@ sub output_WB_table() {
# × ExtendNumLet
$wb_table[$wb_enums{'ALetter'}][$wb_enums{'ExtendNumLet'}]
= $wb_actions{'WB_NOBREAK'};
- $wb_table[$wb_enums{'XPG_LE'}][$wb_enums{'ExtendNumLet'}]
+ $wb_table[$wb_enums{'ExtPict_LE'}][$wb_enums{'ExtendNumLet'}]
= $wb_actions{'WB_NOBREAK'};
$wb_table[$wb_enums{'Hebrew_Letter'}][$wb_enums{'ExtendNumLet'}]
= $wb_actions{'WB_NOBREAK'};
@@ -2110,7 +2196,7 @@ sub output_WB_table() {
# WB10 Numeric × (ALetter | Hebrew_Letter)
$wb_table[$wb_enums{'Numeric'}][$wb_enums{'ALetter'}]
= $wb_actions{'WB_NOBREAK'};
- $wb_table[$wb_enums{'Numeric'}][$wb_enums{'XPG_LE'}]
+ $wb_table[$wb_enums{'Numeric'}][$wb_enums{'ExtPict_LE'}]
= $wb_actions{'WB_NOBREAK'};
$wb_table[$wb_enums{'Numeric'}][$wb_enums{'Hebrew_Letter'}]
= $wb_actions{'WB_NOBREAK'};
@@ -2118,7 +2204,7 @@ sub output_WB_table() {
# WB9 (ALetter | Hebrew_Letter) × Numeric
$wb_table[$wb_enums{'ALetter'}][$wb_enums{'Numeric'}]
= $wb_actions{'WB_NOBREAK'};
- $wb_table[$wb_enums{'XPG_LE'}][$wb_enums{'Numeric'}]
+ $wb_table[$wb_enums{'ExtPict_LE'}][$wb_enums{'Numeric'}]
= $wb_actions{'WB_NOBREAK'};
$wb_table[$wb_enums{'Hebrew_Letter'}][$wb_enums{'Numeric'}]
= $wb_actions{'WB_NOBREAK'};
@@ -2144,19 +2230,19 @@ sub output_WB_table() {
# × (ALetter | Hebrew_Letter)
$wb_table[$wb_enums{'MidNumLet'}][$wb_enums{'ALetter'}]
+= $wb_actions{'WB_MB_or_ML_or_SQ_then_LE_or_HL'};
- $wb_table[$wb_enums{'MidNumLet'}][$wb_enums{'XPG_LE'}]
+ $wb_table[$wb_enums{'MidNumLet'}][$wb_enums{'ExtPict_LE'}]
+= $wb_actions{'WB_MB_or_ML_or_SQ_then_LE_or_HL'};
$wb_table[$wb_enums{'MidNumLet'}][$wb_enums{'Hebrew_Letter'}]
+= $wb_actions{'WB_MB_or_ML_or_SQ_then_LE_or_HL'};
$wb_table[$wb_enums{'MidLetter'}][$wb_enums{'ALetter'}]
+= $wb_actions{'WB_MB_or_ML_or_SQ_then_LE_or_HL'};
- $wb_table[$wb_enums{'MidLetter'}][$wb_enums{'XPG_LE'}]
+ $wb_table[$wb_enums{'MidLetter'}][$wb_enums{'ExtPict_LE'}]
+= $wb_actions{'WB_MB_or_ML_or_SQ_then_LE_or_HL'};
$wb_table[$wb_enums{'MidLetter'}][$wb_enums{'Hebrew_Letter'}]
+= $wb_actions{'WB_MB_or_ML_or_SQ_then_LE_or_HL'};
$wb_table[$wb_enums{'Single_Quote'}][$wb_enums{'ALetter'}]
+= $wb_actions{'WB_MB_or_ML_or_SQ_then_LE_or_HL'};
- $wb_table[$wb_enums{'Single_Quote'}][$wb_enums{'XPG_LE'}]
+ $wb_table[$wb_enums{'Single_Quote'}][$wb_enums{'ExtPict_LE'}]
+= $wb_actions{'WB_MB_or_ML_or_SQ_then_LE_or_HL'};
$wb_table[$wb_enums{'Single_Quote'}][$wb_enums{'Hebrew_Letter'}]
+= $wb_actions{'WB_MB_or_ML_or_SQ_then_LE_or_HL'};
@@ -2165,19 +2251,19 @@ sub output_WB_table() {
# | Single_Quote) (ALetter | Hebrew_Letter)
$wb_table[$wb_enums{'ALetter'}][$wb_enums{'MidNumLet'}]
+= $wb_actions{'WB_LE_or_HL_then_MB_or_ML_or_SQ'};
- $wb_table[$wb_enums{'XPG_LE'}][$wb_enums{'MidNumLet'}]
+ $wb_table[$wb_enums{'ExtPict_LE'}][$wb_enums{'MidNumLet'}]
+= $wb_actions{'WB_LE_or_HL_then_MB_or_ML_or_SQ'};
$wb_table[$wb_enums{'Hebrew_Letter'}][$wb_enums{'MidNumLet'}]
+= $wb_actions{'WB_LE_or_HL_then_MB_or_ML_or_SQ'};
$wb_table[$wb_enums{'ALetter'}][$wb_enums{'MidLetter'}]
+= $wb_actions{'WB_LE_or_HL_then_MB_or_ML_or_SQ'};
- $wb_table[$wb_enums{'XPG_LE'}][$wb_enums{'MidLetter'}]
+ $wb_table[$wb_enums{'ExtPict_LE'}][$wb_enums{'MidLetter'}]
+= $wb_actions{'WB_LE_or_HL_then_MB_or_ML_or_SQ'};
$wb_table[$wb_enums{'Hebrew_Letter'}][$wb_enums{'MidLetter'}]
+= $wb_actions{'WB_LE_or_HL_then_MB_or_ML_or_SQ'};
$wb_table[$wb_enums{'ALetter'}][$wb_enums{'Single_Quote'}]
+= $wb_actions{'WB_LE_or_HL_then_MB_or_ML_or_SQ'};
- $wb_table[$wb_enums{'XPG_LE'}][$wb_enums{'Single_Quote'}]
+ $wb_table[$wb_enums{'ExtPict_LE'}][$wb_enums{'Single_Quote'}]
+= $wb_actions{'WB_LE_or_HL_then_MB_or_ML_or_SQ'};
$wb_table[$wb_enums{'Hebrew_Letter'}][$wb_enums{'Single_Quote'}]
+= $wb_actions{'WB_LE_or_HL_then_MB_or_ML_or_SQ'};
@@ -2186,19 +2272,19 @@ sub output_WB_table() {
# WB5 (ALetter | Hebrew_Letter) × (ALetter | Hebrew_Letter)
$wb_table[$wb_enums{'ALetter'}][$wb_enums{'ALetter'}]
= $wb_actions{'WB_NOBREAK'};
- $wb_table[$wb_enums{'XPG_LE'}][$wb_enums{'ALetter'}]
+ $wb_table[$wb_enums{'ExtPict_LE'}][$wb_enums{'ALetter'}]
= $wb_actions{'WB_NOBREAK'};
$wb_table[$wb_enums{'ALetter'}][$wb_enums{'Hebrew_Letter'}]
= $wb_actions{'WB_NOBREAK'};
- $wb_table[$wb_enums{'XPG_LE'}][$wb_enums{'Hebrew_Letter'}]
+ $wb_table[$wb_enums{'ExtPict_LE'}][$wb_enums{'Hebrew_Letter'}]
= $wb_actions{'WB_NOBREAK'};
$wb_table[$wb_enums{'Hebrew_Letter'}][$wb_enums{'ALetter'}]
= $wb_actions{'WB_NOBREAK'};
- $wb_table[$wb_enums{'Hebrew_Letter'}][$wb_enums{'XPG_LE'}]
+ $wb_table[$wb_enums{'Hebrew_Letter'}][$wb_enums{'ExtPict_LE'}]
= $wb_actions{'WB_NOBREAK'};
$wb_table[$wb_enums{'Hebrew_Letter'}][$wb_enums{'Hebrew_Letter'}]
= $wb_actions{'WB_NOBREAK'};
- $wb_table[$wb_enums{'XPG_LE'}][$wb_enums{'XPG_LE'}]
+ $wb_table[$wb_enums{'ExtPict_LE'}][$wb_enums{'ExtPict_LE'}]
= $wb_actions{'WB_NOBREAK'};
# Ignore Format and Extend characters, except after sot, CR, LF, and
@@ -2239,9 +2325,9 @@ sub output_WB_table() {
= $wb_actions{'WB_NOBREAK'};
$wb_table[$wb_enums{'ZWJ'}][$wb_enums{'E_Base_GAZ'}]
= $wb_actions{'WB_NOBREAK'};
- $wb_table[$wb_enums{'ZWJ'}][$wb_enums{'XPG_XX'}]
+ $wb_table[$wb_enums{'ZWJ'}][$wb_enums{'ExtPict_XX'}]
= $wb_actions{'WB_NOBREAK'};
- $wb_table[$wb_enums{'ZWJ'}][$wb_enums{'XPG_LE'}]
+ $wb_table[$wb_enums{'ZWJ'}][$wb_enums{'ExtPict_LE'}]
= $wb_actions{'WB_NOBREAK'};
# Break before and after newlines
@@ -2307,6 +2393,14 @@ switch_pound_if ('ALL', 'PERL_IN_REGCOMP_C');
output_invlist("Latin1", [ 0, 256 ]);
output_invlist("AboveLatin1", [ 256 ]);
+if ($num_anyof_code_points == 256) { # Same as Latin1
+ print $out_fh
+ "\nstatic const UV * const InBitmap_invlist = Latin1_invlist;\n";
+}
+else {
+ output_invlist("InBitmap", [ 0, $num_anyof_code_points ]);
+}
+
end_file_pound_if;
# We construct lists for all the POSIX and backslash sequence character
@@ -2341,10 +2435,10 @@ no warnings 'qw';
my @props;
push @props, sort { prop_name_for_cmp($a) cmp prop_name_for_cmp($b) } qw(
&UpperLatin1
- _Perl_GCB,EDGE,E_Base,E_Base_GAZ,E_Modifier,Glue_After_Zwj,LV,Prepend,Regional_Indicator,SpacingMark,ZWJ,XPG_XX
- _Perl_LB,EDGE,Close_Parenthesis,Hebrew_Letter,Next_Line,Regional_Indicator,ZWJ,Contingent_Break,E_Base,E_Modifier,H2,H3,JL,JT,JV,Word_Joiner
+ _Perl_GCB,EDGE,E_Base,E_Base_GAZ,E_Modifier,Glue_After_Zwj,LV,Prepend,Regional_Indicator,SpacingMark,ZWJ,ExtPict_XX
+ _Perl_LB,EDGE,Close_Parenthesis,Hebrew_Letter,Next_Line,Regional_Indicator,ZWJ,Contingent_Break,E_Base,E_Modifier,H2,H3,JL,JT,JV,Word_Joiner,East_Asian_CP,East_Asian_OP
_Perl_SB,EDGE,SContinue,CR,Extend,LF
- _Perl_WB,Perl_Tailored_HSpace,EDGE,UNKNOWN,CR,Double_Quote,E_Base,E_Base_GAZ,E_Modifier,Extend,Glue_After_Zwj,Hebrew_Letter,LF,MidNumLet,Newline,Regional_Indicator,Single_Quote,ZWJ,XPG_XX,XPG_LE
+ _Perl_WB,Perl_Tailored_HSpace,EDGE,UNKNOWN,CR,Double_Quote,E_Base,E_Base_GAZ,E_Modifier,Extend,Glue_After_Zwj,Hebrew_Letter,LF,MidNumLet,Newline,Regional_Indicator,Single_Quote,ZWJ,ExtPict_XX,ExtPict_LE
_Perl_SCX,Latin,Inherited,Unknown,Kore,Jpan,Hanb,INVALID
Lowercase_Mapping
Titlecase_Mapping
@@ -2356,9 +2450,29 @@ push @props, sort { prop_name_for_cmp($a) cmp prop_name_for_cmp($b) } qw(
);
# NOTE that the convention is that extra enum values come
# after the property name, separated by commas, with the enums
- # that aren't ever defined by Unicode coming last, at least 4
- # all-uppercase characters. The others are enum names that
- # are needed by perl, but aren't in all Unicode releases.
+ # that aren't ever defined by Unicode (with some exceptions)
+ # containing at least 4 all-uppercase characters.
+
+ # Some of the enums are current official property values that
+ # are needed for the rules in constructing certain tables in
+ # this file, and perhaps in regexec.c as well. They are here
+ # so that things don't crash when compiled on earlier Unicode
+ # releases where they don't exist. Thus the rules that use
+ # them still get compiled, but no code point actually uses
+ # them, hence they won't get exercized on such Unicode
+ # versions, but the code will still compile and run, though
+ # may not give the precise results that those versions would
+ # expect, but reasonable results nonetheless.
+ #
+ # Other enums are due to the fact that Unicode has in more
+ # recent versions added criteria to the rules in these extra
+ # tables that are based on factors outside the property
+ # values. And those have to be accounted for, essentially by
+ # here splitting certain enum equivalence classes based on
+ # those extra rules.
+ #
+ # EDGE is supposed to be a boundary between some types of
+ # enums, but khw thinks that isn't valid any more.
my @bin_props;
my @perl_prop_synonyms;
@@ -2379,12 +2493,12 @@ my $float_e_format = qr/ ^ -? \d \. \d+ e [-+] \d+ $ /x;
# 'nv=5.00e-01' => 'Nv/1_2',
#
# %stricter_to_file_of contains far more than just the rationals. Instead we
-# use %utf8::nv_floating_to_rational which should have an entry for each
+# use %Unicode::UCD::nv_floating_to_rational which should have an entry for each
# nv in the former hash.
my %floating_to_file_of;
-foreach my $key (keys %utf8::nv_floating_to_rational) {
- my $value = $utf8::nv_floating_to_rational{$key};
- $floating_to_file_of{$key} = $utf8::stricter_to_file_of{"nv=$value"};
+foreach my $key (keys %Unicode::UCD::nv_floating_to_rational) {
+ my $value = $Unicode::UCD::nv_floating_to_rational{$key};
+ $floating_to_file_of{$key} = $Unicode::UCD::stricter_to_file_of{"nv=$value"};
}
# Properties that are specified with a prop=value syntax
@@ -2403,16 +2517,16 @@ foreach my $property (sort
or $a =~ /!/ <=> $b =~ /!/
or length $a <=> length $b
or $a cmp $b
- } keys %utf8::loose_to_file_of,
- keys %utf8::stricter_to_file_of,
+ } keys %Unicode::UCD::loose_to_file_of,
+ keys %Unicode::UCD::stricter_to_file_of,
keys %floating_to_file_of
) {
# These two hashes map properties to values that can be considered to
# be checksums. If two properties have the same checksum, they have
# identical entries. Otherwise they differ in some way.
- my $tag = $utf8::loose_to_file_of{$property};
- $tag = $utf8::stricter_to_file_of{$property} unless defined $tag;
+ my $tag = $Unicode::UCD::loose_to_file_of{$property};
+ $tag = $Unicode::UCD::stricter_to_file_of{$property} unless defined $tag;
$tag = $floating_to_file_of{$property} unless defined $tag;
# The tag may contain an '!' meaning it is identical to the one formed
@@ -2449,7 +2563,7 @@ foreach my $property (sort
# stand-alone properties.
no warnings 'once';
next if $rhs eq "" && grep { $alias eq $_ }
- keys %utf8::loose_property_to_file_of;
+ keys %Unicode::UCD::loose_property_to_file_of;
my $new_entry = $alias . $rhs;
push @this_entries, $new_entry;
@@ -2481,9 +2595,9 @@ foreach my $property (sort
# Some properties are deprecated. This hash tells us so, and the
# warning message to raise if they are used.
- if (exists $utf8::why_deprecated{$tag}) {
+ if (exists $Unicode::UCD::why_deprecated{$tag}) {
$deprecated_tags{$enums{$tag}} = scalar @deprecated_messages;
- push @deprecated_messages, $utf8::why_deprecated{$tag};
+ push @deprecated_messages, $Unicode::UCD::why_deprecated{$tag};
}
# Our sort above should have made sure that we see the
@@ -2515,7 +2629,7 @@ foreach my $property (sort
}
}
-@bin_props = sort { exists $keep_together{lc $b} <=> exists $keep_together{lc $a}
+@bin_props = sort { exists $keep_together{lc $b} <=> exists $keep_together{lc $a}
or $a cmp $b
} @bin_props;
@perl_prop_synonyms = sort(uniques(@perl_prop_synonyms));
@@ -2542,7 +2656,8 @@ foreach my $prop (@props) {
$extra_enums = $1 if $prop_name =~ s/, ( .* ) //x;
my $lookup_prop = $prop_name;
$prop_name = sanitize_name($prop_name);
- $prop_name = $table_name_prefix . $prop_name if grep { lc $lookup_prop eq lc $_ } @bin_props;
+ $prop_name = $table_name_prefix . $prop_name
+ if grep { lc $lookup_prop eq lc $_ } @bin_props;
my $l1_only = ($lookup_prop =~ s/^L1Posix/XPosix/
or $lookup_prop =~ s/^L1//);
my $nonl1_only = 0;
@@ -2554,10 +2669,10 @@ foreach my $prop (@props) {
my @invlist;
my @invmap;
- my $map_format;
+ my $map_format = 0;;
my $map_default;
- my $maps_to_code_point;
- my $to_adjust;
+ my $maps_to_code_point = 0;
+ my $to_adjust = 0;
my $same_in_all_code_pages;
if ($is_local_sub) {
my @return = eval $lookup_prop;
@@ -2598,12 +2713,15 @@ foreach my $prop (@props) {
@invmap = @$map_ref;
$map_format = $format;
$map_default = $default;
- $maps_to_code_point = $map_format =~ / a ($ | [^r] ) /x;
- $to_adjust = $map_format =~ /a/;
}
}
}
+ if ($map_format) {
+ $maps_to_code_point = $map_format =~ / a ($ | [^r] ) /x;
+ $to_adjust = $map_format =~ /a/;
+ }
+
# Re-order the Unicode code points to native ones for this platform.
# This is only needed for code points below 256, because native code
# points are only in that range. For inversion maps of properties
@@ -2694,7 +2812,8 @@ foreach my $prop (@props) {
# This shouldn't actually happen, as prop_invmap() returns
# an extra element at the end that is beyond $upper_limit
- die "inversion map (for $prop_name) that extends to infinity is unimplemented" unless @invlist > 1;
+ die "inversion map (for $prop_name) that extends to"
+ . " infinity is unimplemented" unless @invlist > 1;
my $bucket;
@@ -2712,8 +2831,8 @@ foreach my $prop (@props) {
# Do convert to native for maps to single code points.
# There are some properties that have a few outlier
# maps that aren't code points, so the above test
- # skips those.
- $bucket = a2n($invmap[0]);
+ # skips those. 0 is never remapped.
+ $bucket = $invmap[0] == 0 ? 0 : a2n($invmap[0]);
} else {
$bucket = $invmap[0];
}
@@ -2775,7 +2894,8 @@ foreach my $prop (@props) {
@{$mapped_lists{$bucket}}
= sort{ $a <=> $b} @{$mapped_lists{$bucket}};
@{$mapped_lists{$bucket}}
- = mk_invlist_from_sorted_cp_list(\@{$mapped_lists{$bucket}});
+ = mk_invlist_from_sorted_cp_list(
+ \@{$mapped_lists{$bucket}});
# Add each even-numbered range in the bucket to %xlated;
# so that the keys of %xlated become the range start code
@@ -2791,9 +2911,10 @@ foreach my $prop (@props) {
# so that later the adjusting doesn't think the
# subsequent items can go away because of the
# adjusting.
- my $range_end = ($to_adjust && $bucket != $map_default)
- ? $mapped_lists{$bucket}->[1] - 1
- : $range_start;
+ my $range_end = ( $to_adjust
+ && $bucket != $map_default)
+ ? $mapped_lists{$bucket}->[1] - 1
+ : $range_start;
for my $i ($range_start .. $range_end) {
$xlated{$i} = $bucket;
}
@@ -2836,8 +2957,8 @@ foreach my $prop (@props) {
unshift @invmap, $xlated{$start};
}
- # Finally prepend the inversion list we have just constructed to the
- # one that contains anything we didn't process.
+ # Finally prepend the inversion list we have just constructed
+ # to the one that contains anything we didn't process.
unshift @invlist, @new_invlist;
}
}
@@ -2866,12 +2987,13 @@ foreach my $prop (@props) {
# odd-numbered give ones that begin ranges that don't match.
# If $i is odd, we are at the first code point above 255 that
# doesn't match, which means the range it is ending does
- # match, and crosses the 255/256 boundary. We want to include
- # this ending point, so increment $i, so the splice below
- # includes it. Conversely, if $i is even, it is the first
- # code point above 255 that matches, which means there was no
- # matching range that crossed the boundary, and we don't want
- # to include this code point, so splice before it.
+ # match, and crosses the 255/256 boundary. We want to
+ # include this ending point, so increment $i, so the
+ # splice below includes it. Conversely, if $i is even, it
+ # is the first code point above 255 that matches, which
+ # means there was no matching range that crossed the
+ # boundary, and we don't want to include this code point,
+ # so splice before it.
$i++ if $i % 2 != 0;
# Remove everything past this.
@@ -2926,12 +3048,12 @@ foreach my $prop (@props) {
}
}
-switch_pound_if ('binary_property_tables', 'PERL_IN_REGCOMP_C');
-
print $out_fh "\nconst char * const deprecated_property_msgs[] = {\n\t";
print $out_fh join ",\n\t", map { "\"$_\"" } @deprecated_messages;
print $out_fh "\n};\n";
+switch_pound_if ('binary_invlist_enum', 'PERL_IN_REGCOMP_C');
+
my @enums = sort values %enums;
# Save a copy of these before modification
@@ -2962,12 +3084,15 @@ if (scalar keys %deprecated_tags) {
}
}
-print $out_fh "\ntypedef enum {\n\tPERL_BIN_PLACEHOLDER = 0, /* So no real value is zero */\n\t";
+print $out_fh "\ntypedef enum {\n\tPERL_BIN_PLACEHOLDER = 0,",
+ " /* So no real value is zero */\n\t";
print $out_fh join ",\n\t", @enums;
print $out_fh "\n";
print $out_fh "} binary_invlist_enum;\n";
print $out_fh "\n#define MAX_UNI_KEYWORD_INDEX $enums[-1]\n";
+switch_pound_if ('binary_property_tables', 'PERL_IN_REGCOMP_C');
+
output_table_header($out_fh, "UV *", "uni_prop_ptrs");
print $out_fh "\tNULL,\t/* Placeholder */\n";
print $out_fh "\t";
@@ -2976,6 +3101,8 @@ print $out_fh "\n";
output_table_trailer();
+switch_pound_if ('synonym defines', 'PERL_IN_REGCOMP_C');
+
print $out_fh join "\n", "\n",
#'# ifdef DOINIT',
#"\n",
@@ -3179,7 +3306,7 @@ my $uni_pl = open_new('lib/unicore/uni_keywords.pl', '>',
{style => '*', by => 'regen/mk_invlists.pl',
from => "Unicode::UCD"});
{
- print $uni_pl "\%utf8::uni_prop_ptrs_indices = (\n";
+ print $uni_pl "\%Unicode::UCD::uni_prop_ptrs_indices = (\n";
for my $name (sort keys %name_to_index) {
print $uni_pl " '$name' => $name_to_index{$name},\n";
}
@@ -3202,15 +3329,12 @@ my $keywords_fh = open_new('uni_keywords.h', '>',
{style => '*', by => 'regen/mk_invlists.pl',
from => "mph.pl"});
-no warnings 'once';
-print $keywords_fh <<"EOF";
-/* The precision to use in "%.*e" formats */
-#define PL_E_FORMAT_PRECISION $utf8::e_precision
-
-EOF
-
-my ($second_level, $seed1, $length_all_keys, $smart_blob, $rows) = MinimalPerfectHash::make_mph_from_hash(\%keywords);
-print $keywords_fh MinimalPerfectHash::make_algo($second_level, $seed1, $length_all_keys, $smart_blob, $rows, undef, undef, undef, 'match_uniprop' );
+my ($second_level, $seed1, $length_all_keys, $smart_blob, $rows)
+ = MinimalPerfectHash::make_mph_from_hash(\%keywords);
+print $keywords_fh MinimalPerfectHash::make_algo($second_level, $seed1,
+ $length_all_keys, $smart_blob,
+ $rows, undef, undef, undef,
+ 'match_uniprop' );
push @sources, 'regen/mph.pl';
read_only_bottom_close_and_rename($keywords_fh, \@sources);
diff --git a/gnu/usr.bin/perl/regen/op_private b/gnu/usr.bin/perl/regen/op_private
index a94c0c38c08..6438c376ff5 100644
--- a/gnu/usr.bin/perl/regen/op_private
+++ b/gnu/usr.bin/perl/regen/op_private
@@ -88,8 +88,8 @@ F<regen/opcodes> based on various criteria. These are:
which respectively return a list of op names where:
field 3 of regen/opcodes specifies 'ck_foo' as the check function;
- field 4 of of regen/opcodes has flag or type 'X' set;
- argument field N of of regen/opcodes matches 'XYZ';
+ field 4 of regen/opcodes has flag or type 'X' set;
+ argument field N of regen/opcodes matches 'XYZ';
For example
@@ -513,8 +513,12 @@ addbits('sassign',
for (qw(trans transr)) {
addbits($_,
- 0 => qw(OPpTRANS_FROM_UTF <UTF), # search chars are utf8
- 1 => qw(OPpTRANS_TO_UTF >UTF), # replacement chars are utf8
+ # There is a character in the lhs representable not using UTF-8 whose
+ # replacement requires UTF-8.
+ 0 => qw(OPpTRANS_CAN_FORCE_UTF8 CAN_FORCE_UTF8),
+
+ 1 => qw(OPpTRANS_USE_SVOP USE_SVOP),# This is implemented as an svop
+ # vs pvop
2 => qw(OPpTRANS_IDENTICAL IDENT), # right side is same as left
3 => qw(OPpTRANS_SQUASH SQUASH), # /s
# 4 is used for OPpTARGET_MY
diff --git a/gnu/usr.bin/perl/regen/opcode.pl b/gnu/usr.bin/perl/regen/opcode.pl
index 672f55c3687..e7b59a467f1 100644
--- a/gnu/usr.bin/perl/regen/opcode.pl
+++ b/gnu/usr.bin/perl/regen/opcode.pl
@@ -71,9 +71,9 @@ while (<OPS>) {
$args{$key} = $args;
}
-# Set up aliases, and alternative funcs
+# Set up aliases
-my (%alias, %alts);
+my %alias;
# Format is "this function" => "does these op names"
my @raw_alias = (
@@ -139,25 +139,16 @@ my @raw_alias = (
Perl_pp_shostent => [qw(snetent sprotoent sservent)],
Perl_pp_aelemfast => ['aelemfast_lex'],
Perl_pp_grepstart => ['mapstart'],
-
- # 2 i_modulo mappings: 2nd is alt, needs 1st (explicit default) to not override the default
- Perl_pp_i_modulo => ['i_modulo'],
- Perl_pp_i_modulo_glibc_bugfix => {
- 'i_modulo' =>
- '#if defined(__GLIBC__) && IVSIZE == 8 '.
- ' && ( __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 8))' },
);
while (my ($func, $names) = splice @raw_alias, 0, 2) {
if (ref $names eq 'ARRAY') {
foreach (@$names) {
- defined $alias{$_}
- ? $alts{$_} : $alias{$_} = [$func, ''];
+ $alias{$_} = [$func, ''];
}
} else {
while (my ($opname, $cond) = each %$names) {
- defined $alias{$opname}
- ? $alts{$opname} : $alias{$opname} = [$func, $cond];
+ $alias{$opname} = [$func, $cond];
}
}
}
@@ -1256,14 +1247,6 @@ my $pp = open_new('pp_proto.h', '>',
++$funcs{$name};
}
print $pp "PERL_CALLCONV OP *$_(pTHX);\n" foreach sort keys %funcs;
-
- print $pp "\n/* alternative functions */\n" if keys %alts;
- for my $fn (sort keys %alts) {
- my ($x, $cond) = @{$alts{$fn}};
- print $pp "$cond\n" if $cond;
- print $pp "PERL_CALLCONV OP *$x(pTHX);\n";
- print $pp "#endif\n" if $cond;
- }
}
print $oc "\n\n";
diff --git a/gnu/usr.bin/perl/regen/opcodes b/gnu/usr.bin/perl/regen/opcodes
index b4bf904fdc6..4d5ba36d785 100644
--- a/gnu/usr.bin/perl/regen/opcodes
+++ b/gnu/usr.bin/perl/regen/opcodes
@@ -2,8 +2,8 @@
# The restriction on having custom as the last op has been removed
# A recapitulation of the format of this file:
-# The file consists of five columns: the name of the op, an English
-# description, the name of the "check" routine used to optimize this
+# The file consists of five tab-separated columns: the name of the op, an
+# English description, the name of the "check" routine used to optimize this
# operation, some flags, and a description of the operands.
# The flags consist of options followed by a mandatory op class signifier
@@ -397,6 +397,7 @@ getsockname getsockname ck_fun is% Fs
getpeername getpeername ck_fun is% Fs
# Stat calls. OP_IS_FILETEST wants them consecutive.
+# Also needs to match OP_IS_STAT() in op.h
lstat lstat ck_ftst u- F?
stat stat ck_ftst u- F?
@@ -571,3 +572,8 @@ lvref lvalue ref assignment ck_null d%
lvrefslice lvalue ref assignment ck_null d@
lvavref lvalue array reference ck_null d%
anonconst anonymous constant ck_null ds1
+
+isa derived class test ck_isa s2
+
+cmpchain_and comparison chaining ck_null |
+cmpchain_dup comparand shuffling ck_null 1
diff --git a/gnu/usr.bin/perl/regen/reentr.pl b/gnu/usr.bin/perl/regen/reentr.pl
index 0dbb79b7747..f2c1d7cf3c2 100644
--- a/gnu/usr.bin/perl/regen/reentr.pl
+++ b/gnu/usr.bin/perl/regen/reentr.pl
@@ -1,5 +1,5 @@
#!/usr/bin/perl -w
-#
+#
# Regenerate (overwriting only if changed):
#
# reentr.h
@@ -29,7 +29,7 @@ getopts('Uv', \%opts);
my %map = (
V => "void",
A => "char*", # as an input argument
- B => "char*", # as an output argument
+ B => "char*", # as an output argument
C => "const char*", # as a read-only input argument
I => "int",
L => "long",
@@ -68,20 +68,29 @@ print $h <<EOF;
/* If compiling for a threaded perl, we will macro-wrap the system/library
* interfaces (e.g. getpwent()) which have threaded versions
* (e.g. getpwent_r()), which will handle things correctly for
- * the Perl interpreter, but otherwise (for XS) the wrapping does
- * not take place. See L<perlxs/Thread-aware system interfaces>.
+ * the Perl interpreter. This is done automatically for the perl core and
+ * extensions, but not generally for XS modules unless they
+ * #define PERL_REENTRANT
+ * See L<perlxs/Thread-aware system interfaces>.
+ *
+ * For a function 'foo', use the compile-time directive
+ * #ifdef PERL_REENTR_USING_FOO_R
+ * to test if the function actually did get replaced by the reentrant version.
+ * (If it isn't getting replaced, it might mean it uses a different prototype
+ * on the given platform than any we are expecting. To fix that, add the
+ * prototype to the __DATA__ section of regen/reentr.pl.)
*/
#ifndef PERL_REENTR_API
-# if defined(PERL_CORE) || defined(PERL_EXT) || defined(PERL_REENTRANT)
-# define PERL_REENTR_API 1
-# else
-# define PERL_REENTR_API 0
-# endif
+# if defined(PERL_CORE) || defined(PERL_EXT) || defined(PERL_REENTRANT)
+# define PERL_REENTR_API 1
+# else
+# define PERL_REENTR_API 0
+# endif
#endif
#ifdef USE_REENTRANT_API
-
+
/* 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).
@@ -89,81 +98,81 @@ print $h <<EOF;
* If you know of more deprecations on some platforms, please add your own
* (by editing reentr.pl, mind!) */
-#ifdef __hpux
-# undef HAS_CRYPT_R
-# undef HAS_ENDGRENT_R
-# undef HAS_ENDPWENT_R
-# undef HAS_GETGRENT_R
-# undef HAS_GETPWENT_R
-# undef HAS_SETLOCALE_R
-# undef HAS_STRERROR_R
-# define NETDB_R_OBSOLETE
-#endif
+# ifdef __hpux
+# undef HAS_CRYPT_R
+# undef HAS_ENDGRENT_R
+# undef HAS_ENDPWENT_R
+# undef HAS_GETGRENT_R
+# undef HAS_GETPWENT_R
+# undef HAS_SETLOCALE_R
+# undef HAS_STRERROR_R
+# define NETDB_R_OBSOLETE
+# endif
-#if defined(__osf__) && defined(__alpha) /* Tru64 aka Digital UNIX */
-# undef HAS_CRYPT_R
-# undef HAS_STRERROR_R
-# define NETDB_R_OBSOLETE
-#endif
+# if defined(__osf__) && defined(__alpha) /* Tru64 aka Digital UNIX */
+# undef HAS_CRYPT_R
+# undef HAS_STRERROR_R
+# define NETDB_R_OBSOLETE
+# endif
-#if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 24))
-# undef HAS_READDIR_R
-# undef HAS_READDIR64_R
-#endif
+# if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 24))
+# undef HAS_READDIR_R
+# undef HAS_READDIR64_R
+# endif
/*
* As of OpenBSD 3.7, reentrant functions are now working, they just are
* incompatible with everyone else. To make OpenBSD happy, we have to
* memzero out certain structures before calling the functions.
*/
-#if defined(__OpenBSD__)
+# if defined(__OpenBSD__)
# define REENTR_MEMZERO(a,b) memzero(a,b)
-#else
+# else
# define REENTR_MEMZERO(a,b) 0
-#endif
-
-#ifdef NETDB_R_OBSOLETE
-# undef HAS_ENDHOSTENT_R
-# undef HAS_ENDNETENT_R
-# undef HAS_ENDPROTOENT_R
-# undef HAS_ENDSERVENT_R
-# undef HAS_GETHOSTBYADDR_R
-# undef HAS_GETHOSTBYNAME_R
-# undef HAS_GETHOSTENT_R
-# undef HAS_GETNETBYADDR_R
-# undef HAS_GETNETBYNAME_R
-# undef HAS_GETNETENT_R
-# undef HAS_GETPROTOBYNAME_R
-# undef HAS_GETPROTOBYNUMBER_R
-# undef HAS_GETPROTOENT_R
-# undef HAS_GETSERVBYNAME_R
-# undef HAS_GETSERVBYPORT_R
-# undef HAS_GETSERVENT_R
-# undef HAS_SETHOSTENT_R
-# undef HAS_SETNETENT_R
-# undef HAS_SETPROTOENT_R
-# undef HAS_SETSERVENT_R
-#endif
+# endif
-#ifdef I_PWD
-# include <pwd.h>
-#endif
-#ifdef I_GRP
-# include <grp.h>
-#endif
-#ifdef I_NETDB
-# include <netdb.h>
-#endif
-#ifdef I_CRYPT
-# ifdef I_CRYPT
-# include <crypt.h>
-# endif
-#endif
-#ifdef HAS_GETSPNAM_R
-# ifdef I_SHADOW
-# include <shadow.h>
-# endif
-#endif
+# ifdef NETDB_R_OBSOLETE
+# undef HAS_ENDHOSTENT_R
+# undef HAS_ENDNETENT_R
+# undef HAS_ENDPROTOENT_R
+# undef HAS_ENDSERVENT_R
+# undef HAS_GETHOSTBYADDR_R
+# undef HAS_GETHOSTBYNAME_R
+# undef HAS_GETHOSTENT_R
+# undef HAS_GETNETBYADDR_R
+# undef HAS_GETNETBYNAME_R
+# undef HAS_GETNETENT_R
+# undef HAS_GETPROTOBYNAME_R
+# undef HAS_GETPROTOBYNUMBER_R
+# undef HAS_GETPROTOENT_R
+# undef HAS_GETSERVBYNAME_R
+# undef HAS_GETSERVBYPORT_R
+# undef HAS_GETSERVENT_R
+# undef HAS_SETHOSTENT_R
+# undef HAS_SETNETENT_R
+# undef HAS_SETPROTOENT_R
+# undef HAS_SETSERVENT_R
+# endif
+
+# ifdef I_PWD
+# include <pwd.h>
+# endif
+# ifdef I_GRP
+# include <grp.h>
+# endif
+# ifdef I_NETDB
+# include <netdb.h>
+# endif
+# ifdef I_CRYPT
+# ifdef I_CRYPT
+# include <crypt.h>
+# endif
+# endif
+# ifdef HAS_GETSPNAM_R
+# ifdef I_SHADOW
+# include <shadow.h>
+# endif
+# endif
EOF
@@ -204,7 +213,7 @@ while (<DATA>) { # Read in the protoypes.
# If given the -U option open up the metaconfig unit for this function.
if ($opts{U} && open(U, ">", "d_${func}_r.U")) {
- binmode U;
+ binmode U;
}
if ($opts{U}) {
@@ -305,7 +314,7 @@ EOF
print U <<"EOF";
case "\$${func}_r_proto" in
''|0) d_${func}_r=undef
- ${func}_r_proto=0
+ ${func}_r_proto=0
echo "Disabling ${func}_r, cannot determine prototype." >&4 ;;
* ) case "\$${func}_r_proto" in
REENTRANT_PROTO*) ;;
@@ -327,7 +336,7 @@ EOF
esac
EOF
- close(U);
+ close(U);
}
}
@@ -337,7 +346,7 @@ close DATA;
# Write out all the known prototype signatures.
my $i = 1;
for my $p (sort keys %seenp) {
- print $h "#define REENTRANT_PROTO_${p} ${i}\n";
+ print $h "# define REENTRANT_PROTO_${p} ${i}\n";
$i++;
}
}
@@ -390,13 +399,13 @@ EOF
$GENFUNC =~ s/^GET//;
}
if (@h) {
- push @define, "#if defined(HAS_${FUNC}_R) && (" . join(" || ", map { "${FUNC}_R_PROTO == REENTRANT_PROTO_$_" } @h) . ")\n";
+ push @define, "# if defined(HAS_${FUNC}_R) && (" . join(" || ", map { "${FUNC}_R_PROTO == REENTRANT_PROTO_$_" } @h) . ")\n";
push @define, <<EOF;
-# define $HAS
-#else
-# undef $HAS
-#endif
+# define $HAS
+# else
+# undef $HAS
+# endif
EOF
}
}
@@ -406,12 +415,12 @@ EOF
/* Any of the @F using \L$n? */
EOF
- push @define, "#if (" . join(" || ", map { "defined($_)" } @H) . ")\n";
+ push @define, "# if (" . join(" || ", map { "defined($_)" } @H) . ")\n";
push @define, <<EOF;
-# define USE_${GENFUNC}_$n
-#else
-# undef USE_${GENFUNC}_$n
-#endif
+# define USE_${GENFUNC}_$n
+# else
+# undef USE_${GENFUNC}_$n
+# endif
EOF
}
@@ -434,6 +443,9 @@ define('FPTR', 'H',
define('BUFFER', 'B',
qw(getpwent getpwgid getpwnam));
+define('BUFFER', 'B',
+ qw(getspent getspnam));
+
define('PTR', 'R',
qw(gethostent gethostbyaddr gethostbyname));
define('PTR', 'R',
@@ -467,8 +479,8 @@ define('ERRNO', 'E',
for my $func (@seenf) {
my $FUNC = uc $func;
- my $ifdef = "#ifdef HAS_${FUNC}_R\n";
- my $endif = "#endif /* HAS_${FUNC}_R */\n";
+ my $ifdef = "# ifdef HAS_${FUNC}_R\n";
+ my $endif = "# endif /* HAS_${FUNC}_R */\n\n";
if (exists $seena{$func}) {
my @p = @{$seena{$func}};
if ($func =~ /^(asctime|ctime|getlogin|setlocale|strerror|ttyname)$/) {
@@ -483,24 +495,31 @@ EOF
pushinitfree $func;
pushssif $endif;
}
+ elsif ($func =~ /^(gm|local)time$/) {
+ pushssif $ifdef;
+ push @struct, <<EOF; # Fixed size
+ $seent{$func} _${func}_struct;
+EOF
+ pushssif $endif;
+ }
elsif ($func =~ /^(crypt)$/) {
pushssif $ifdef;
push @struct, <<EOF;
-#if CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
+# if CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
$seend{$func} _${func}_data;
-#else
+# else
$seent{$func} *_${func}_struct_buffer;
-#endif
+# endif
EOF
- push @init, <<EOF;
-#if CRYPT_R_PROTO != REENTRANT_PROTO_B_CCD
+ push @init, <<EOF;
+# if CRYPT_R_PROTO != REENTRANT_PROTO_B_CCD
PL_reentrant_buffer->_${func}_struct_buffer = 0;
-#endif
+# endif
EOF
- push @free, <<EOF;
-#if CRYPT_R_PROTO != REENTRANT_PROTO_B_CCD
+ push @free, <<EOF;
+# if CRYPT_R_PROTO != REENTRANT_PROTO_B_CCD
Safefree(PL_reentrant_buffer->_${func}_struct_buffer);
-#endif
+# endif
EOF
pushssif $endif;
}
@@ -536,17 +555,17 @@ EOF
'_SC_GETGR_R_SIZE_MAX' : '_SC_GETPW_R_SIZE_MAX';
my $sz = "_${genfunc}_size";
push @size, <<EOF;
-# if defined(HAS_SYSCONF) && defined($sc) && !defined(__GLIBC__)
+# if defined(HAS_SYSCONF) && defined($sc) && !defined(__GLIBC__)
PL_reentrant_buffer->$sz = sysconf($sc);
if (PL_reentrant_buffer->$sz == (size_t) -1)
PL_reentrant_buffer->$sz = REENTRANTUSUALSIZE;
-# elif defined(__osf__) && defined(__alpha) && defined(SIABUFSIZ)
+# elif defined(__osf__) && defined(__alpha) && defined(SIABUFSIZ)
PL_reentrant_buffer->$sz = SIABUFSIZ;
-# elif defined(__sgi)
+# elif defined(__sgi)
PL_reentrant_buffer->$sz = BUFSIZ;
-# else
+# else
PL_reentrant_buffer->$sz = REENTRANTUSUALSIZE;
-# endif
+# endif
EOF
pushinitfree $genfunc;
pushssif $endif;
@@ -572,25 +591,25 @@ EOF
$seent{$func}* _${genfunc}_ptr;
# endif
EOF
- push @struct, <<EOF;
+ push @struct, <<EOF;
# ifdef USE_${GENFUNC}_ERRNO
int _${genfunc}_errno;
-# endif
+# endif
EOF
push @size, <<EOF;
-#if !($D)
+# if !($D)
PL_reentrant_buffer->_${genfunc}_size = REENTRANTUSUALSIZE;
-#endif
+# endif
EOF
push @init, <<EOF;
-#if !($D)
+# if !($D)
Newx(PL_reentrant_buffer->_${genfunc}_buffer, PL_reentrant_buffer->_${genfunc}_size, char);
-#endif
+# endif
EOF
push @free, <<EOF;
-#if !($D)
+# if !($D)
Safefree(PL_reentrant_buffer->_${genfunc}_buffer);
-#endif
+# endif
EOF
pushssif $endif;
}
@@ -609,7 +628,7 @@ EOF
* (though we go static, should use pathconf() instead) */
PL_reentrant_buffer->_${func}_size = sizeof($seent{$func}) + MAXPATHLEN + 1;
EOF
- push @init, <<EOF;
+ push @init, <<EOF;
PL_reentrant_buffer->_${func}_struct = ($seent{$func}*)safemalloc(PL_reentrant_buffer->_${func}_size);
EOF
push @free, <<EOF;
@@ -621,8 +640,8 @@ EOF
push @wrap, $ifdef;
push @wrap, <<EOF;
-# if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-# undef $func
+# if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+# undef $func
EOF
# Write out what we have learned.
@@ -653,31 +672,33 @@ EOF
}
if (length $b) {
$w = join ", ",
- map {
- $_ eq 'R' ?
- "&PL_reentrant_buffer->_${genfunc}_ptr" :
- $_ eq 'E' ?
- "&PL_reentrant_buffer->_${genfunc}_errno" :
- $_ eq 'B' ?
- "PL_reentrant_buffer->_${genfunc}_buffer" :
- $_ =~ /^[WI]$/ ?
- "PL_reentrant_buffer->_${genfunc}_size" :
- $_ eq 'H' ?
- "&PL_reentrant_buffer->_${genfunc}_fptr" :
- $_ eq 'D' ?
- "&PL_reentrant_buffer->_${genfunc}_data" :
- $_ eq 'S' ?
- ($func =~ /^readdir\d*$/ ?
- "PL_reentrant_buffer->_${genfunc}_struct" :
- $func =~ /^crypt$/ ?
- "PL_reentrant_buffer->_${genfunc}_struct_buffer" :
- "&PL_reentrant_buffer->_${genfunc}_struct") :
- $_
- } split '', $b;
+ map { $_ eq 'R'
+ ? "&PL_reentrant_buffer->_${genfunc}_ptr"
+ : $_ eq 'E'
+ ? "&PL_reentrant_buffer->_${genfunc}_errno"
+ : $_ eq 'B'
+ ? "PL_reentrant_buffer->_${genfunc}_buffer"
+ : $_ =~ /^[WI]$/
+ ? "PL_reentrant_buffer->_${genfunc}_size"
+ : $_ eq 'H'
+ ? "&PL_reentrant_buffer->_${genfunc}_fptr"
+ : $_ eq 'D'
+ ? "&PL_reentrant_buffer->_${genfunc}_data"
+ : $_ eq 'S'
+ ? ($func =~ /^readdir\d*$/
+ ? "PL_reentrant_buffer->_${genfunc}_struct"
+ : $func =~ /^crypt$/
+ ? "PL_reentrant_buffer->_${genfunc}_struct_buffer"
+ : "&PL_reentrant_buffer->_${genfunc}_struct")
+ : $_
+ } split '', $b;
$w = ", $w" if length $v;
}
- my $call = "${func}_r($v$w)";
+ # This needs a special case, see its definition in config.h
+ my $setup = ($func eq 'localtime') ? "L_R_TZSET " : "";
+
+ my $call = "$setup${func}_r($v$w)";
# Must make OpenBSD happy
my $memzero = '';
@@ -686,37 +707,42 @@ EOF
$memzero = 'REENTR_MEMZERO(&PL_reentrant_buffer->_' . $genfunc . '_data, sizeof(PL_reentrant_buffer->_' . $genfunc . '_data)),';
}
push @wrap, <<EOF;
-# if !defined($func) && ${FUNC}_R_PROTO == REENTRANT_PROTO_$p
+# if !defined($func) && ${FUNC}_R_PROTO == REENTRANT_PROTO_$p
EOF
if ($r eq 'V' || $r eq 'B') {
push @wrap, <<EOF;
-# define $func($v) $call
+# define $func($v) $call
EOF
} else {
if ($func =~ /^get/) {
my $rv = $v ? ", $v" : "";
if ($r eq 'I') {
push @wrap, <<EOF;
-# define $func($v) ($memzero(PL_reentrant_retint = $call)$test ? $true : ((PL_reentrant_retint == ERANGE) ? ($seent{$func} *) Perl_reentrant_retry("$func"$rv) : 0))
+# define $func($v) ($memzero(PL_reentrant_retint = $call)$test ? $true : ((PL_reentrant_retint == ERANGE) ? ($seent{$func} *) Perl_reentrant_retry("$func"$rv) : 0))
EOF
} else {
push @wrap, <<EOF;
-# define $func($v) ($call$test ? $true : ((errno == ERANGE) ? ($seent{$func} *) Perl_reentrant_retry("$func"$rv) : 0))
+# define $func($v) ($call$test ? $true : ((errno == ERANGE) ? ($seent{$func} *) Perl_reentrant_retry("$func"$rv) : 0))
EOF
}
} else {
push @wrap, <<EOF;
-# define $func($v) ($call$test ? $true : 0)
+# define $func($v) ($call$test ? $true : 0)
EOF
}
}
- push @wrap, <<EOF; # !defined(xxx) && XXX_R_PROTO == REENTRANT_PROTO_Y_TS
-# endif
+ push @wrap, <<EOF; # !defined(xxx) && XXX_R_PROTO == REENTRANT_PROTO_Y_TS
+# endif
EOF
}
+ push @wrap, <<EOF;
+# if defined($func)
+# define PERL_REENTR_USING_${FUNC}_R
+# endif
+EOF
- push @wrap, <<EOF; # defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
-# endif
+ push @wrap, <<EOF; # defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
+# endif
EOF
push @wrap, $endif, "\n";
@@ -731,6 +757,7 @@ print $h <<EOF;
@define
typedef struct {
+
@struct
int dummy; /* cannot have empty structs */
} REENTR;
@@ -739,8 +766,13 @@ typedef struct {
@wrap
+/* Special case this; if others came along, could automate it */
+# ifdef HAS_GETSPNAM_R
+# define KEY_getspnam -1
+# endif
+
#endif /* USE_REENTRANT_API */
-
+
#endif
EOF
@@ -764,7 +796,7 @@ my $c = open_print_header('reentr.c', <<'EOQ');
* various library calls, such as getpwent_r. The wrapping is done so
* that other files like pp_sys.c calling those library functions need not
* care about the differences between various platforms' idiosyncrasies
- * regarding these reentrant interfaces.
+ * regarding these reentrant interfaces.
*/
EOQ
@@ -773,6 +805,7 @@ print $c <<"EOF";
#define PERL_IN_REENTR_C
#include "perl.h"
#include "reentr.h"
+#include "keywords.h"
#define RenewDouble(data_pointer, size_pointer, type) \\
STMT_START { \\
@@ -784,260 +817,355 @@ print $c <<"EOF";
void
Perl_reentrant_size(pTHX) {
PERL_UNUSED_CONTEXT;
+
+ /* Set the sizes of the reentrant buffers */
+
#ifdef USE_REENTRANT_API
-#define REENTRANTSMALLSIZE 256 /* Make something up. */
-#define REENTRANTUSUALSIZE 4096 /* Make something up. */
+# define REENTRANTSMALLSIZE 256 /* Make something up. */
+# define REENTRANTUSUALSIZE 4096 /* Make something up. */
+
@size
#endif /* USE_REENTRANT_API */
+
}
void
Perl_reentrant_init(pTHX) {
PERL_UNUSED_CONTEXT;
+
+ /* Initialize the whole thing */
+
#ifdef USE_REENTRANT_API
+
Newx(PL_reentrant_buffer, 1, REENTR);
Perl_reentrant_size(aTHX);
+
@init
#endif /* USE_REENTRANT_API */
+
}
void
Perl_reentrant_free(pTHX) {
PERL_UNUSED_CONTEXT;
+
+ /* Tear down */
+
#ifdef USE_REENTRANT_API
+
@free
Safefree(PL_reentrant_buffer);
+
#endif /* USE_REENTRANT_API */
}
void*
Perl_reentrant_retry(const char *f, ...)
{
+ /* This function is set up to be called if the normal function returns
+ * failure with errno ERANGE, which indicates the buffer is too small.
+ * This function calls the failing one again with a larger buffer.
+ *
+ * What has happened is that, due to the magic of C preprocessor macro
+ * expansion, when the original code called function 'foo(args)', it was
+ * instead compiled into something like a call of 'foo_r(args, buffer)'
+ * Below we retry with 'foo', but the preprocessor has changed that into
+ * 'foo_r', so this function will end up calling itself recursively, each
+ * time with a larger buffer. If PERL_REENTRANT_MAXSIZE is defined, it
+ * won't increase beyond that, instead failing. */
+
void *retptr = NULL;
va_list ap;
+
+ I32 key = 0;
+
#ifdef USE_REENTRANT_API
+
dTHX;
+
+ key = Perl_keyword (aTHX_ f, strlen(f), FALSE /* not feature enabled */);
+
/* Easier to special case this here than in embed.pl. (Look at what it
generates for proto.h) */
PERL_ARGS_ASSERT_REENTRANT_RETRY;
+
#endif
+
+ if (key == 0) {
+
+#ifdef HAS_GETSPNAM_R
+
+ /* This is a #define as has no corresponding keyword */
+ if (strEQ(f, "getspnam")) {
+ key = KEY_getspnam;
+ }
+
+#endif
+
+ }
+ else if (key < 0) {
+ key = -key;
+ }
+
va_start(ap, f);
- {
+
#ifdef USE_REENTRANT_API
-# if defined(USE_HOSTENT_BUFFER) || defined(USE_GRENT_BUFFER) || defined(USE_NETENT_BUFFER) || defined(USE_PWENT_BUFFER) || defined(USE_PROTOENT_BUFFER) || defined(USE_SERVENT_BUFFER)
- void *p0;
-# endif
-# if defined(USE_SERVENT_BUFFER)
- void *p1;
-# endif
-# if defined(USE_HOSTENT_BUFFER)
- size_t asize;
-# endif
-# if defined(USE_HOSTENT_BUFFER) || defined(USE_NETENT_BUFFER) || defined(USE_PROTOENT_BUFFER) || defined(USE_SERVENT_BUFFER)
- int anint;
-# endif
- switch (PL_op->op_type) {
-#ifdef USE_HOSTENT_BUFFER
- case OP_GHBYADDR:
- case OP_GHBYNAME:
- case OP_GHOSTENT:
+ switch (key) {
+
+# ifdef USE_HOSTENT_BUFFER
+
+ case KEY_gethostbyaddr:
+ case KEY_gethostbyname:
+ case KEY_endhostent:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ char * host_addr;
+ Size_t asize;
+ char * host_name;
+ int anint;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_hostent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- RenewDouble(PL_reentrant_buffer->_hostent_buffer,
- &PL_reentrant_buffer->_hostent_size, char);
- switch (PL_op->op_type) {
- case OP_GHBYADDR:
- p0 = va_arg(ap, void *);
- asize = va_arg(ap, size_t);
+# endif
+ RenewDouble(PL_reentrant_buffer->_hostent_buffer,
+ &PL_reentrant_buffer->_hostent_size, char);
+ switch (key) {
+ case KEY_gethostbyaddr:
+ host_addr = va_arg(ap, char *);
+ asize = va_arg(ap, Size_t);
anint = va_arg(ap, int);
- retptr = gethostbyaddr(p0, asize, anint); break;
- case OP_GHBYNAME:
- p0 = va_arg(ap, void *);
- retptr = gethostbyname((char *)p0); break;
- case OP_GHOSTENT:
+ /* socklen_t is what Posix 2001 says this should be */
+ retptr = gethostbyaddr(host_addr, (socklen_t) asize, anint); break;
+ case KEY_gethostbyname:
+ host_name = va_arg(ap, char *);
+ retptr = gethostbyname(host_name); break;
+ case KEY_endhostent:
retptr = gethostent(); break;
default:
SETERRNO(ERANGE, LIB_INVARG);
break;
- }
}
}
break;
-#endif
-#ifdef USE_GRENT_BUFFER
- case OP_GGRNAM:
- case OP_GGRGID:
- case OP_GGRENT:
+
+# endif
+# ifdef USE_GRENT_BUFFER
+
+ case KEY_getgrent:
+ case KEY_getgrgid:
+ case KEY_getgrnam:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ char * name;
+ Gid_t gid;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_grent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- Gid_t gid;
- RenewDouble(PL_reentrant_buffer->_grent_buffer,
- &PL_reentrant_buffer->_grent_size, char);
- switch (PL_op->op_type) {
- case OP_GGRNAM:
- p0 = va_arg(ap, void *);
- retptr = getgrnam((char *)p0); break;
- case OP_GGRGID:
-#if Gid_t_size < INTSIZE
- gid = (Gid_t)va_arg(ap, int);
-#else
+# endif
+ RenewDouble(PL_reentrant_buffer->_grent_buffer,
+ &PL_reentrant_buffer->_grent_size, char);
+ switch (key) {
+ case KEY_getgrnam:
+ name = va_arg(ap, char *);
+ retptr = getgrnam(name); break;
+ case KEY_getgrgid:
+# if Gid_t_size < INTSIZE
+ gid = (Gid_t)va_arg(ap, int);
+# else
gid = va_arg(ap, Gid_t);
-#endif
+# endif
retptr = getgrgid(gid); break;
- case OP_GGRENT:
+ case KEY_getgrent:
retptr = getgrent(); break;
default:
SETERRNO(ERANGE, LIB_INVARG);
break;
- }
}
}
break;
-#endif
-#ifdef USE_NETENT_BUFFER
- case OP_GNBYADDR:
- case OP_GNBYNAME:
- case OP_GNETENT:
+
+# endif
+# ifdef USE_NETENT_BUFFER
+
+ case KEY_getnetbyaddr:
+ case KEY_getnetbyname:
+ case KEY_getnetent:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ char * name;
+ Netdb_net_t net;
+ int anint;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_netent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- Netdb_net_t net;
- RenewDouble(PL_reentrant_buffer->_netent_buffer,
- &PL_reentrant_buffer->_netent_size, char);
- switch (PL_op->op_type) {
- case OP_GNBYADDR:
- net = va_arg(ap, Netdb_net_t);
- anint = va_arg(ap, int);
- retptr = getnetbyaddr(net, anint); break;
- case OP_GNBYNAME:
- p0 = va_arg(ap, void *);
- retptr = getnetbyname((char *)p0); break;
- case OP_GNETENT:
- retptr = getnetent(); break;
- default:
- SETERRNO(ERANGE, LIB_INVARG);
- break;
- }
+# endif
+ RenewDouble(PL_reentrant_buffer->_netent_buffer,
+ &PL_reentrant_buffer->_netent_size, char);
+ switch (key) {
+ case KEY_getnetbyaddr:
+ net = va_arg(ap, Netdb_net_t);
+ anint = va_arg(ap, int);
+ retptr = getnetbyaddr(net, anint); break;
+ case KEY_getnetbyname:
+ name = va_arg(ap, char *);
+ retptr = getnetbyname(name); break;
+ case KEY_getnetent:
+ retptr = getnetent(); break;
+ default:
+ SETERRNO(ERANGE, LIB_INVARG);
+ break;
}
}
break;
-#endif
-#ifdef USE_PWENT_BUFFER
- case OP_GPWNAM:
- case OP_GPWUID:
- case OP_GPWENT:
+
+# endif
+# ifdef USE_PWENT_BUFFER
+
+ case KEY_getpwnam:
+ case KEY_getpwuid:
+ case KEY_getpwent:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ Uid_t uid;
+ char * name;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_pwent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- Uid_t uid;
- RenewDouble(PL_reentrant_buffer->_pwent_buffer,
- &PL_reentrant_buffer->_pwent_size, char);
- switch (PL_op->op_type) {
- case OP_GPWNAM:
- p0 = va_arg(ap, void *);
- retptr = getpwnam((char *)p0); break;
- case OP_GPWUID:
-#if Uid_t_size < INTSIZE
+
+# endif
+ RenewDouble(PL_reentrant_buffer->_pwent_buffer,
+ &PL_reentrant_buffer->_pwent_size, char);
+ switch (key) {
+ case KEY_getpwnam:
+ name = va_arg(ap, char *);
+ retptr = getpwnam(name); break;
+ case KEY_getpwuid:
+
+# if Uid_t_size < INTSIZE
uid = (Uid_t)va_arg(ap, int);
-#else
+# else
uid = va_arg(ap, Uid_t);
-#endif
+# endif
retptr = getpwuid(uid); break;
-#if defined(HAS_GETPWENT) || defined(HAS_GETPWENT_R)
- case OP_GPWENT:
+
+# if defined(HAS_GETPWENT) || defined(HAS_GETPWENT_R)
+
+ case KEY_getpwent:
retptr = getpwent(); break;
-#endif
+# endif
default:
SETERRNO(ERANGE, LIB_INVARG);
break;
- }
- }
+ }
}
break;
-#endif
-#ifdef USE_PROTOENT_BUFFER
- case OP_GPBYNAME:
- case OP_GPBYNUMBER:
- case OP_GPROTOENT:
+
+# endif
+# ifdef USE_SPENT_BUFFER
+
+ case KEY_getspnam:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ char * name;
+
+# ifdef PERL_REENTRANT_MAXSIZE
+ if (PL_reentrant_buffer->_spent_size <=
+ PERL_REENTRANT_MAXSIZE / 2)
+
+# endif
+ RenewDouble(PL_reentrant_buffer->_spent_buffer,
+ &PL_reentrant_buffer->_spent_size, char);
+ switch (key) {
+ case KEY_getspnam:
+ name = va_arg(ap, char *);
+ retptr = getspnam(name); break;
+ default:
+ SETERRNO(ERANGE, LIB_INVARG);
+ break;
+ }
+ }
+ break;
+
+# endif
+# ifdef USE_PROTOENT_BUFFER
+
+ case KEY_getprotobyname:
+ case KEY_getprotobynumber:
+ case KEY_getprotoent:
+ {
+ char * name;
+ int anint;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_protoent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- RenewDouble(PL_reentrant_buffer->_protoent_buffer,
- &PL_reentrant_buffer->_protoent_size, char);
- switch (PL_op->op_type) {
- case OP_GPBYNAME:
- p0 = va_arg(ap, void *);
- retptr = getprotobyname((char *)p0); break;
- case OP_GPBYNUMBER:
+# endif
+ RenewDouble(PL_reentrant_buffer->_protoent_buffer,
+ &PL_reentrant_buffer->_protoent_size, char);
+ switch (key) {
+ case KEY_getprotobyname:
+ name = va_arg(ap, char *);
+ retptr = getprotobyname(name); break;
+ case KEY_getprotobynumber:
anint = va_arg(ap, int);
retptr = getprotobynumber(anint); break;
- case OP_GPROTOENT:
+ case KEY_getprotoent:
retptr = getprotoent(); break;
default:
SETERRNO(ERANGE, LIB_INVARG);
break;
- }
}
}
break;
-#endif
-#ifdef USE_SERVENT_BUFFER
- case OP_GSBYNAME:
- case OP_GSBYPORT:
- case OP_GSERVENT:
+
+# endif
+# ifdef USE_SERVENT_BUFFER
+
+ case KEY_getservbyname:
+ case KEY_getservbyport:
+ case KEY_getservent:
{
-#ifdef PERL_REENTRANT_MAXSIZE
+ char * name;
+ char * proto;
+ int anint;
+
+# ifdef PERL_REENTRANT_MAXSIZE
if (PL_reentrant_buffer->_servent_size <=
PERL_REENTRANT_MAXSIZE / 2)
-#endif
- {
- RenewDouble(PL_reentrant_buffer->_servent_buffer,
- &PL_reentrant_buffer->_servent_size, char);
- switch (PL_op->op_type) {
- case OP_GSBYNAME:
- p0 = va_arg(ap, void *);
- p1 = va_arg(ap, void *);
- retptr = getservbyname((char *)p0, (char *)p1); break;
- case OP_GSBYPORT:
+# endif
+ RenewDouble(PL_reentrant_buffer->_servent_buffer,
+ &PL_reentrant_buffer->_servent_size, char);
+ switch (key) {
+ case KEY_getservbyname:
+ name = va_arg(ap, char *);
+ proto = va_arg(ap, char *);
+ retptr = getservbyname(name, proto); break;
+ case KEY_getservbyport:
anint = va_arg(ap, int);
- p0 = va_arg(ap, void *);
- retptr = getservbyport(anint, (char *)p0); break;
- case OP_GSERVENT:
+ name = va_arg(ap, char *);
+ retptr = getservbyport(anint, name); break;
+ case KEY_getservent:
retptr = getservent(); break;
default:
SETERRNO(ERANGE, LIB_INVARG);
break;
- }
}
}
break;
-#endif
+
+# endif
+
default:
/* Not known how to retry, so just fail. */
break;
}
+
#else
+
PERL_UNUSED_ARG(f);
+
#endif
- }
+
va_end(ap);
return retptr;
}
@@ -1045,6 +1173,15 @@ EOF
read_only_bottom_close_and_rename($c);
+# As of March 2020, the config.h entries that have reentrant prototypes that
+# aren't in this file are:
+# drand48
+# random
+# srand48
+# srandom
+
+# The meanings of the flags are derivable from %map above
+# Fnc, arg flags| hdr | ? struct type | prototypes...
__DATA__
asctime S |time |const struct tm|B_SB|B_SBI|I_SB|I_SBI
crypt CC |crypt |struct crypt_data|B_CCS|B_CCD|D=CRYPTD*
@@ -1076,6 +1213,8 @@ getservbyname CC|netdb |struct servent |I_CCSBWR|S_CCSBI|I_CCSD|D=struct servent
getservbyport IC|netdb |struct servent |I_ICSBWR|S_ICSBI|I_ICSD|D=struct servent_data*
getservent |netdb |struct servent |I_SBWR|I_SBI|S_SBI|I_SD|D=struct servent_data*
getspnam C |shadow |struct spwd |I_CSBWR|S_CSBI
+gmtime T |time |struct tm |S_TS|T=time_t*
+localtime T |time |struct tm |S_TS|T=time_t*
readdir T |dirent |struct dirent |I_TSR|I_TS|T=DIR*
readdir64 T |dirent |struct dirent64|I_TSR|I_TS|T=DIR*
setgrent |grp | |I_H|V_H
diff --git a/gnu/usr.bin/perl/regen/regcharclass.pl b/gnu/usr.bin/perl/regen/regcharclass.pl
index db4f045d773..fd3e2d6fa9b 100644
--- a/gnu/usr.bin/perl/regen/regcharclass.pl
+++ b/gnu/usr.bin/perl/regen/regcharclass.pl
@@ -21,7 +21,7 @@ CharClass::Matcher -- Generate C macros that match character classes efficiently
=head1 SYNOPSIS
- perl Porting/regcharclass.pl
+ perl regen/regcharclass.pl
=head1 DESCRIPTION
@@ -1581,15 +1581,35 @@ QUOTEMETA: Meta-characters that \Q should quote
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
=> UTF8 :safe
-
-# 1 => All folds
-&regcharclass_multi_char_folds::multi_char_folds(1)
+&regcharclass_multi_char_folds::multi_char_folds('u', 'a')
MULTI_CHAR_FOLD: multi-char strings that are folded to by a single character
=> LATIN1 : safe
+&regcharclass_multi_char_folds::multi_char_folds('l', 'a')
+
+THREE_CHAR_FOLD: A three-character multi-char fold
+=> UTF8 :safe
+&regcharclass_multi_char_folds::multi_char_folds('u', '3')
+
+THREE_CHAR_FOLD: A three-character multi-char fold
+=> LATIN1 :safe
+&regcharclass_multi_char_folds::multi_char_folds('l', '3')
-&regcharclass_multi_char_folds::multi_char_folds(0)
-# 0 => Latin1-only
+THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
+=> UTF8 :safe
+&regcharclass_multi_char_folds::multi_char_folds('u', 'h')
+
+THREE_CHAR_FOLD_HEAD: The first two of three-character multi-char folds
+=> LATIN1 :safe
+&regcharclass_multi_char_folds::multi_char_folds('l', 'h')
+#
+#THREE_CHAR_FOLD_NON_FINAL: The first or middle character of multi-char folds
+#=> UTF8 :safe
+#&regcharclass_multi_char_folds::multi_char_folds('u', 'fm')
+#
+#THREE_CHAR_FOLD_NON_FINAL: The first or middle character of multi-char folds
+#=> LATIN1 :safe
+#&regcharclass_multi_char_folds::multi_char_folds('l', 'fm')
FOLDS_TO_MULTI: characters that fold to multi-char strings
=> UTF8 :fast
diff --git a/gnu/usr.bin/perl/regen/regcharclass_multi_char_folds.pl b/gnu/usr.bin/perl/regen/regcharclass_multi_char_folds.pl
index 73fb646dfa9..a54b05cb190 100644
--- a/gnu/usr.bin/perl/regen/regcharclass_multi_char_folds.pl
+++ b/gnu/usr.bin/perl/regen/regcharclass_multi_char_folds.pl
@@ -13,20 +13,20 @@ use Unicode::UCD "prop_invmap";
# Latin1 characters that can fold to the base one are returned. Thus for
# 'ss', it would return in addition, 'Ss', 'sS', and 'SS'. This is because
# this code is designed to help regcomp.c, and EXACTFish regnodes. For
-# non-UTF-8 patterns, the strings are not folded, so we need to check for the
-# upper and lower case versions. For UTF-8 patterns, the strings are folded,
-# except in EXACTFL nodes) so we only need to worry about the fold version.
-# All folded-to characters in non-UTF-8 (Latin1) are members of fold-pairs,
-# at least within Latin1, 'k', and 'K', for example. So there aren't
-# complications with dealing with unfolded input. That's not true of UTF-8
-# patterns, where things can get tricky. Thus for EXACTFL nodes where things
-# aren't all folded, code has to be written specially to handle this, instead
-# of the macros here being extended to try to handle it.
+# non-UTF-8 patterns, the strings are not necessarily folded, so we need to
+# check for the upper and lower case versions. For UTF-8 patterns, the
+# strings are folded, except in EXACTFL nodes) so we only need to worry about
+# the fold version. All folded-to characters in non-UTF-8 (Latin1) are
+# members of fold-pairs, at least within Latin1, 'k', and 'K', for example.
+# So there aren't complications with dealing with unfolded input. That's not
+# true of UTF-8 patterns, where things can get tricky. Thus for EXACTFL nodes
+# where things aren't all folded, code has to be written specially to handle
+# this, instead of the macros here being extended to try to handle it.
#
# There are no non-ASCII Latin1 multi-char folds currently, and none likely to
# be ever added. Thus the output is the same as if it were just asking for
# ASCII characters, not full Latin1. Hence, it is suitable for generating
-# things that match EXACTFA. It does check for and croak if there ever were
+# things that match EXACTFAA. It does check for and croak if there ever were
# to be an upper Latin1 range multi-character fold.
#
# This is designed for input to regen/regcharlass.pl.
@@ -45,7 +45,9 @@ sub gen_combinations ($;) {
foreach my $j (0 .. @{$fold_ref->[$i]} - 1) {
# Append its representation to what we have currently
- my $new_string = sprintf "$string\\x{%X}", $fold_ref->[$i][$j];
+ my $new_string = $fold_ref->[$i][$j] =~ /[[:print:]]/
+ ? ($string . chr $fold_ref->[$i][$j])
+ : sprintf "$string\\x{%X}", $fold_ref->[$i][$j];
if ($i >= @$fold_ref - 1) { # Final level: just return it
push @ret, "\"$new_string\"";
@@ -58,10 +60,11 @@ sub gen_combinations ($;) {
return @ret;
}
-sub multi_char_folds ($) {
- my $all_folds = shift; # The single parameter is true if wants all
- # multi-char folds; false if just the ones that
- # are all ascii
+sub multi_char_folds ($$) {
+ my $type = shift; # 'u' for UTF-8; 'l' for latin1
+ my $range = shift; # 'a' for all; 'h' for starting 2 bytes; 'm' for ending 2
+ die "[lu] only valid values for first parameter" if $type !~ /[lu]/;
+ die "[aht3] only valid values for 2nd parameter" if $range !~ /[aht3]/;
return () if pack("C*", split /\./, Unicode::UCD::UnicodeVersion()) lt v3.0.1;
@@ -69,7 +72,9 @@ sub multi_char_folds ($) {
die "Could not find inversion map for Case_Folding" unless defined $format;
die "Incorrect format '$format' for Case_Folding inversion map"
unless $format eq 'al';
+
my @folds;
+ my @output_folds;
for my $i (0 .. @$folds_ref - 1) {
next unless ref $folds_ref->[$i]; # Skip single-char folds
@@ -82,22 +87,38 @@ sub multi_char_folds ($) {
# isn't there to occupy space and time; instead there is this check.
die sprintf("regcomp.c can't cope with a latin1 multi-char fold (found in the fold of 0x%X", $cp_ref->[$i]) if grep { $_ < 256 && chr($_) !~ /[[:ascii:]]/ } @{$folds_ref->[$i]};
+ @folds = @{$folds_ref->[$i]};
+ if ($range eq '3') {
+ next if @folds < 3;
+ }
+ elsif ($range eq 'h') {
+ pop @folds;
+ }
+ elsif ($range eq 't') {
+ next if @folds < 3;
+ shift @folds;
+ }
+
# Create a line that looks like "\x{foo}\x{bar}\x{baz}" of the code
- # points that make up the fold.
- my $fold = join "", map { sprintf "\\x{%X}", $_ } @{$folds_ref->[$i]};
+ # points that make up the fold (use the actual character if
+ # printable).
+ my $fold = join "", map { chr $_ =~ /[[:print:]]/a
+ ? chr $_
+ : sprintf "\\x{%X}", $_
+ } @folds;
$fold = "\"$fold\"";
# Skip if something else already has this fold
- next if grep { $_ eq $fold } @folds;
+ next if grep { $_ eq $fold } @output_folds;
- if ($all_folds) {
- push @folds, $fold
+ if ($type eq 'u') {
+ push @output_folds, $fold;
} # Skip if wants only all-ascii folds, and there is a non-ascii
- elsif (! grep { chr($_) =~ /[^[:ascii:]]/ } @{$folds_ref->[$i]}) {
+ elsif (! grep { chr($_) =~ /[^[:ascii:]]/ } @folds) {
# If the fold is to a cased letter, replace the entry with an
# array which also includes its upper case.
- my $this_fold_ref = $folds_ref->[$i];
+ my $this_fold_ref = \@folds;
for my $j (0 .. @$this_fold_ref - 1) {
my $this_ord = $this_fold_ref->[$j];
if (chr($this_ord) =~ /\p{Cased}/) {
@@ -108,7 +129,7 @@ sub multi_char_folds ($) {
}
# Then generate all combinations of upper/lower case of the fold.
- push @folds, gen_combinations($this_fold_ref);
+ push @output_folds, gen_combinations($this_fold_ref);
}
}
@@ -133,10 +154,9 @@ sub multi_char_folds ($) {
#
# No combinations of this with 's' need be added, as any of these
# containing 's' are prohibited under /iaa.
- push @folds, '"\x{17F}\x{17F}"' if $all_folds;
-
+ push @output_folds, '"\x{17F}\x{17F}"' if $type eq 'u' && $range eq 'a';
- return @folds;
+ return @output_folds;
}
1
diff --git a/gnu/usr.bin/perl/regen/regcomp.pl b/gnu/usr.bin/perl/regen/regcomp.pl
index cb9861318d1..d69859c2635 100644
--- a/gnu/usr.bin/perl/regen/regcomp.pl
+++ b/gnu/usr.bin/perl/regen/regcomp.pl
@@ -49,14 +49,17 @@ use strict;
# name Both Name of op/state
# id Both integer value for this opcode/state
# optype Both Either 'op' or 'state'
-# line_num Both line_num number of the input file for this item.
+# line_num Both line_num number of the input file for this item.
# type Op Type of node (aka regkind)
-# code Op what code is associated with this node (???)
-# args Op what type of args the node has (which regnode struct)
-# flags Op (???)
+# code Op Apparently not used
+# suffix Op which regnode struct this uses, so if this is '1', it
+# uses 'struct regnode_1'
+# flags Op S for simple; V for varies
# longj Op Boolean as to if this node is a longjump
-# comment Both Comment about node, if any
+# comment Both Comment about node, if any. Placed in perlredebguts
+# as its description
# pod_comment Both Special comments for pod output (preceding lines in def)
+# Such lines begin with '#*'
# Global State
my @all; # all opcodes/state
@@ -97,23 +100,15 @@ sub register_node {
}
# Parse and add an opcode definition to the global state.
-# An opcode definition looks like this:
+# What an opcode definition looks like is given in regcomp.sym.
#
-# +- args
-# | +- flags
-# | | +- longjmp
-# Name Type code | | | ; comment
-# --------------------------------------------------------------------------
-# IFMATCH BRANCHJ, off 1 . 2 ; Succeeds if the following matches.
-# UNLESSM BRANCHJ, off 1 . 2 ; Fails if the following matches.
-# SUSPEND BRANCHJ, off 1 V 1 ; "Independent" sub-RE.
-# IFTHEN BRANCHJ, off 1 V 1 ; Switch, should be preceded by switcher.
-# GROUPP GROUPP, num 1 ; Whether the group matched.
-#
-# Not every opcode definition has all of these. We should maybe make this
-# nicer/easier to read in the future. Also note that the above is tab
+# Not every opcode definition has all of the components. We should maybe make
+# this nicer/easier to read in the future. Also note that the above is tab
# sensitive.
+# Special comments for an entry precede it, and begin with '#*' and are placed
+# in the generated pod file just before the entry.
+
sub parse_opcode_def {
my ( $text, $line_num, $pod_comment )= @_;
my $node= {
@@ -129,10 +124,10 @@ sub parse_opcode_def {
or die "Failed to match $_";
# the content of the "desc" field from the first step is extracted here:
- @{$node}{qw(type code args flags longj)}= split /[,\s]\s*/, $node->{desc};
+ @{$node}{qw(type code suffix flags longj)}= split /[,\s]\s*/, $node->{desc};
defined $node->{$_} or $node->{$_} = ""
- for qw(type code args flags longj);
+ for qw(type code suffix flags longj);
register_node($node); # has to be before the type_alias code below
@@ -368,7 +363,7 @@ EOP
foreach my $node (@ops) {
my $size= 0;
- $size= "EXTRA_SIZE(struct regnode_$node->{args})" if $node->{args};
+ $size= "EXTRA_SIZE(struct regnode_$node->{suffix})" if $node->{suffix};
printf $out "\t%*s\t/* %*s */\n", -37, "$size,", -$rwidth, $node->{name};
}
@@ -453,7 +448,8 @@ EOP
while (<$in_fh>) {
# optional leading '_'. Return symbol in $1, and strip it from
- # comment of line
+ # comment of line. Currently doesn't handle comments running onto
+ # next line
if (s/^ \# \s* define \s+ ( _? RXf_ \w+ ) \s+ //xi) {
chomp;
my $define= $1;
@@ -635,11 +631,11 @@ EOD
print <<'END_OF_DESCR';
- # TYPE arg-description [num-args] [longjump-len] DESCRIPTION
+ # TYPE arg-description [regnode-struct-suffix] [longjump-len] DESCRIPTION
END_OF_DESCR
for my $n (@ops) {
$node= $n;
- $code= "$node->{code} " . ( $node->{args} || "" );
+ $code= "$node->{code} " . ( $node->{suffix} || "" );
$code .= " $node->{longj}" if $node->{longj};
if ( $node->{pod_comment} ||= "" ) {
diff --git a/gnu/usr.bin/perl/regen/unicode_constants.pl b/gnu/usr.bin/perl/regen/unicode_constants.pl
index c3fa70a6e66..b2c8c360c7c 100644
--- a/gnu/usr.bin/perl/regen/unicode_constants.pl
+++ b/gnu/usr.bin/perl/regen/unicode_constants.pl
@@ -31,7 +31,7 @@ print $out_fh <<END;
/*
=head1 Unicode Support
-=for apidoc AmU|placeholder|BOM_UTF8
+=for apidoc AmnU|const char *|BOM_UTF8
This is a macro that evaluates to a string constant of the UTF-8 bytes that
define the Unicode BYTE ORDER MARK (U+FEFF) for the platform that perl
@@ -40,7 +40,7 @@ works on both ASCII and EBCDIC platforms.
S<C<sizeof(BOM_UTF8) - 1>> can be used to get its length in
bytes.
-=for apidoc AmU|placeholder|REPLACEMENT_CHARACTER_UTF8
+=for apidoc AmnU|const char *|REPLACEMENT_CHARACTER_UTF8
This is a macro that evaluates to a string constant of the UTF-8 bytes that
define the Unicode REPLACEMENT CHARACTER (U+FFFD) for the platform that perl
diff --git a/gnu/usr.bin/perl/regen/warnings.pl b/gnu/usr.bin/perl/regen/warnings.pl
index 255fb947329..9fbf607d7a9 100644
--- a/gnu/usr.bin/perl/regen/warnings.pl
+++ b/gnu/usr.bin/perl/regen/warnings.pl
@@ -16,7 +16,7 @@
#
# This script is normally invoked from regen.pl.
-$VERSION = '1.44';
+$VERSION = '1.47';
BEGIN {
require './regen/regen_lib.pl';
@@ -117,6 +117,8 @@ my $tree = {
[ 5.029, DEFAULT_ON ],
'experimental::vlb' =>
[ 5.029, DEFAULT_ON ],
+ 'experimental::isa' =>
+ [ 5.031, DEFAULT_ON ],
}],
'missing' => [ 5.021, DEFAULT_OFF],
@@ -358,15 +360,21 @@ EOM
my $k ;
my $last_ver = 0;
+ my @names;
foreach $k (sort { $a <=> $b } keys %ValueToName) {
my ($name, $version) = @{ $ValueToName{$k} };
print $warn "\n/* Warnings Categories added in Perl $version */\n\n"
if $last_ver != $version ;
$name =~ y/:/_/;
- print $warn tab(6, "#define WARN_$name"), " $k\n" ;
+ $name = "WARN_$name";
+ print $warn tab(6, "#define $name"), " $k\n" ;
+ push @names, $name;
$last_ver = $version ;
}
- print $warn "\n" ;
+ print $warn "\n\n/*\n" ;
+
+ print $warn map { "=for apidoc Amnh||$_\n" } @names;
+ print $warn "\n=cut\n*/\n\n" ;
print $warn tab(6, '#define WARNsize'), " $warn_size\n" ;
print $warn tab(6, '#define WARN_ALLstring'), ' "', ('\125' x $warn_size) , "\"\n" ;
@@ -384,10 +392,22 @@ EOM
#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
@@ -992,6 +1012,10 @@ disable compile-time warnings you need to rewrite the code like this:
my $b; chop $b;
}
+And note that unlike the first example, this will permanently set C<$^W>
+since it cannot both run during compile-time and be localized to a
+run-time block.
+
The other big problem with C<$^W> is the way you can inadvertently
change the warning setting in unexpected places in your code. For example,
when the code below is run (without the B<-w> flag), the second call
@@ -1027,7 +1051,7 @@ X<-w>
This is the existing flag. If the lexical warnings pragma is B<not>
used in any of you code, or any of the modules that you use, this flag
-will enable warnings everywhere. See L<Backward Compatibility> for
+will enable warnings everywhere. See L</Backward Compatibility> for
details of how this flag interacts with lexical warnings.
=item B<-W>
diff --git a/gnu/usr.bin/perl/regen_perly.pl b/gnu/usr.bin/perl/regen_perly.pl
index 2abe8e74ea0..ac5f13a4eed 100755
--- a/gnu/usr.bin/perl/regen_perly.pl
+++ b/gnu/usr.bin/perl/regen_perly.pl
@@ -76,10 +76,10 @@ EOF
# Don't change this to add new bison versions without testing that the generated
# files actually work :-) Win32 in particular may not like them. :-(
-unless ($version =~ /\b(1\.875[a-z]?|2\.[0134567]|3\.[0])\b/) { die <<EOF; }
+unless ($version =~ /\b(1\.875[a-z]?|2\.[0134567]|3\.[0-4])\b/) { die <<EOF; }
You have the wrong version of bison in your path; currently versions
-1.875, 2.0-2.7 or 3.0 are known to work. Try installing
+1.875, 2.0-2.7 or 3.0-3.4 are known to work. Try installing
http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz
or similar. Your bison identifies itself as:
diff --git a/gnu/usr.bin/perl/regexec.c b/gnu/usr.bin/perl/regexec.c
index fc4dbffa72d..5cbde654628 100644
--- a/gnu/usr.bin/perl/regexec.c
+++ b/gnu/usr.bin/perl/regexec.c
@@ -218,7 +218,7 @@ S_regcppush(pTHX_ const regexp *rex, I32 parenfloor, U32 maxopenparen _pDEPTH)
const UV total_elems = paren_elems_to_push + REGCP_OTHER_ELEMS;
const UV elems_shifted = total_elems << SAVE_TIGHT_SHIFT;
I32 p;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGCPPUSH;
@@ -328,7 +328,7 @@ S_regcppop(pTHX_ regexp *rex, U32 *maxopenparen_p _pDEPTH)
{
UV i;
U32 paren;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGCPPOP;
@@ -422,7 +422,7 @@ Perl_isFOO_lc(pTHX_ const U8 classnum, const U8 character)
* Ideally this could be replaced by a just an array of function pointers
* to the C library functions that implement the macros this calls.
* However, to compile, the precise function signatures are required, and
- * these may vary from platform to to platform. To avoid having to figure
+ * these may vary from platform to platform. To avoid having to figure
* out what those all are on each platform, I (khw) am using this method,
* which adds an extra layer of function call overhead (unless the C
* optimizer strips it away). But we don't particularly care about
@@ -579,7 +579,7 @@ S_find_span_end(U8 * s, const U8 * send, const U8 span_byte)
span_word |= span_word << 4;
/* That reduces the problem to what this function solves */
- return s + _variant_byte_number(span_word);
+ return s + variant_byte_number(span_word);
#endif
@@ -657,7 +657,7 @@ S_find_next_masked(U8 * s, const U8 * send, const U8 byte, const U8 mask)
masked &= PERL_VARIANTS_WORD_MASK;
/* This reduces the problem to that solved by this function */
- s += _variant_byte_number(masked);
+ s += variant_byte_number(masked);
return s;
} while (s + PERL_WORDSIZE <= send);
@@ -723,7 +723,7 @@ S_find_span_end_mask(U8 * s, const U8 * send, const U8 span_byte, const U8 mask)
masked |= masked << 1;
masked |= masked << 2;
masked |= masked << 4;
- return s + _variant_byte_number(masked);
+ return s + variant_byte_number(masked);
#endif
@@ -859,7 +859,7 @@ Perl_re_intuit_start(pTHX_
RXi_GET_DECL(prog,progi);
regmatch_info reginfo_buf; /* create some info to pass to find_byclass */
regmatch_info *const reginfo = &reginfo_buf;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_RE_INTUIT_START;
PERL_UNUSED_ARG(flags);
@@ -1472,10 +1472,10 @@ Perl_re_intuit_start(pTHX_
const U8* const str = (U8*)STRING(progi->regstclass);
/* XXX this value could be pre-computed */
- const int cl_l = (PL_regkind[OP(progi->regstclass)] == EXACT
+ const SSize_t cl_l = (PL_regkind[OP(progi->regstclass)] == EXACT
? (reginfo->is_utf8_pat
- ? utf8_distance(str + STR_LEN(progi->regstclass), str)
- : STR_LEN(progi->regstclass))
+ ? (SSize_t)utf8_distance(str + STR_LEN(progi->regstclass), str)
+ : (SSize_t)STR_LEN(progi->regstclass))
: 1);
char * endpos;
char *s;
@@ -2178,17 +2178,72 @@ S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s,
case ANYOFH:
if (utf8_target) { /* Can't possibly match a non-UTF-8 target */
+ REXEC_FBC_CLASS_SCAN(TRUE,
+ ( (U8) NATIVE_UTF8_TO_I8(*s) >= ANYOF_FLAGS(c)
+ && reginclass(prog, c, (U8*)s, (U8*) strend, utf8_target)));
+ }
+ break;
+
+ case ANYOFHb:
+ if (utf8_target) { /* Can't possibly match a non-UTF-8 target */
+
+ /* We know what the first byte of any matched string should be */
U8 first_byte = FLAGS(c);
- if (first_byte) { /* We know what the first byte of any matched
- string should be */
- REXEC_FBC_FIND_NEXT_UTF8_BYTE_SCAN(first_byte,
- reginclass(prog, c, (U8*)s, (U8*) strend, utf8_target));
- }
- else {
- REXEC_FBC_CLASS_SCAN(TRUE,
+ REXEC_FBC_FIND_NEXT_UTF8_BYTE_SCAN(first_byte,
reginclass(prog, c, (U8*)s, (U8*) strend, utf8_target));
- }
+ }
+ break;
+
+ case ANYOFHr:
+ if (utf8_target) { /* Can't possibly match a non-UTF-8 target */
+ REXEC_FBC_CLASS_SCAN(TRUE,
+ ( inRANGE(NATIVE_UTF8_TO_I8(*s),
+ LOWEST_ANYOF_HRx_BYTE(ANYOF_FLAGS(c)),
+ HIGHEST_ANYOF_HRx_BYTE(ANYOF_FLAGS(c)))
+ && reginclass(prog, c, (U8*)s, (U8*) strend, utf8_target)));
+ }
+ break;
+
+ case ANYOFHs:
+ if (utf8_target) { /* Can't possibly match a non-UTF-8 target */
+ REXEC_FBC_CLASS_SCAN(TRUE,
+ ( strend -s >= FLAGS(c)
+ && memEQ(s, ((struct regnode_anyofhs *) c)->string, FLAGS(c))
+ && reginclass(prog, c, (U8*)s, (U8*) strend, utf8_target)));
+ }
+ break;
+
+ case ANYOFR:
+ if (utf8_target) {
+ REXEC_FBC_CLASS_SCAN(TRUE,
+ ( NATIVE_UTF8_TO_I8(*s) >= ANYOF_FLAGS(c)
+ && withinCOUNT(utf8_to_uvchr_buf((U8 *) s,
+ (U8 *) strend,
+ NULL),
+ ANYOFRbase(c), ANYOFRdelta(c))));
+ }
+ else {
+ REXEC_FBC_CLASS_SCAN(0, withinCOUNT((U8) *s,
+ ANYOFRbase(c), ANYOFRdelta(c)));
+ }
+ break;
+
+ case ANYOFRb:
+ if (utf8_target) {
+
+ /* We know what the first byte of any matched string should be */
+ U8 first_byte = FLAGS(c);
+
+ REXEC_FBC_FIND_NEXT_UTF8_BYTE_SCAN(first_byte,
+ withinCOUNT(utf8_to_uvchr_buf((U8 *) s,
+ (U8 *) strend,
+ NULL),
+ ANYOFRbase(c), ANYOFRdelta(c)));
+ }
+ else {
+ REXEC_FBC_CLASS_SCAN(0, withinCOUNT((U8) *s,
+ ANYOFRbase(c), ANYOFRdelta(c)));
}
break;
@@ -2253,7 +2308,7 @@ S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s,
| FOLDEQ_S2_FOLDS_SANE;
goto do_exactf_utf8;
- case EXACTFU_ONLY8:
+ case EXACTFU_REQ8:
if (! utf8_target) {
break;
}
@@ -2285,8 +2340,8 @@ S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s,
* first character. c2 is its fold. This logic will not work for
* Unicode semantics and the german sharp ss, which hence should
* not be compiled into a node that gets here. */
- pat_string = STRING(c);
- ln = STR_LEN(c); /* length to match in octets/bytes */
+ pat_string = STRINGs(c);
+ ln = STR_LENs(c); /* length to match in octets/bytes */
/* We know that we have to match at least 'ln' bytes (which is the
* same as characters, since not utf8). If we have to match 3
@@ -2361,8 +2416,8 @@ S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s,
/* If one of the operands is in utf8, we can't use the simpler folding
* above, due to the fact that many different characters can have the
* same fold, or portion of a fold, or different- length fold */
- pat_string = STRING(c);
- ln = STR_LEN(c); /* length to match in octets/bytes */
+ pat_string = STRINGs(c);
+ ln = STR_LENs(c); /* length to match in octets/bytes */
pat_end = pat_string + ln;
lnc = is_utf8_pat /* length to match in characters */
? utf8_length((U8 *) pat_string, (U8 *) pat_end)
@@ -2859,7 +2914,7 @@ S_find_byclass(pTHX_ regexp * prog, const regnode *c, char *s,
U8 *bitmap=NULL;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
/* We can't just allocate points here. We need to wrap it in
* an SV so it gets freed properly if there is a croak while
@@ -3242,7 +3297,7 @@ Perl_regexec_flags(pTHX_ REGEXP * const rx, char *stringarg, char *strend,
regmatch_info *const reginfo = &reginfo_buf;
regexp_paren_pair *swap = NULL;
I32 oldsave;
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGEXEC_FLAGS;
PERL_UNUSED_ARG(data);
@@ -3296,7 +3351,7 @@ Perl_regexec_flags(pTHX_ REGEXP * const rx, char *stringarg, char *strend,
if (!startpos ||
((flags & REXEC_FAIL_ON_UNDERFLOW) && startpos < stringarg))
{
- DEBUG_r(Perl_re_printf( aTHX_
+ DEBUG_GPOS_r(Perl_re_printf( aTHX_
"fail: ganch-gofs before earliest possible start\n"));
return 0;
}
@@ -3315,8 +3370,8 @@ Perl_regexec_flags(pTHX_ REGEXP * const rx, char *stringarg, char *strend,
minlen = prog->minlen;
if ((startpos + minlen) > strend || startpos < strbeg) {
- DEBUG_r(Perl_re_printf( aTHX_
- "Regex match can't succeed, so not even tried\n"));
+ DEBUG_EXECUTE_r(Perl_re_printf( aTHX_
+ "Regex match can't succeed, so not even tried\n"));
return 0;
}
@@ -3928,7 +3983,7 @@ S_regtry(pTHX_ regmatch_info *reginfo, char **startposp)
U32 depth = 0; /* used by REGCP_SET */
#endif
RXi_GET_DECL(prog,progi);
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
PERL_ARGS_ASSERT_REGTRY;
@@ -4224,7 +4279,9 @@ S_setup_EXACTISH_ST_c1_c2(pTHX_ const regnode * const text_node, int *c1p,
U8 folded[UTF8_MAX_FOLD_CHAR_EXPAND * UTF8_MAXBYTES_CASE + 1] = { '\0' };
if ( OP(text_node) == EXACT
- || OP(text_node) == EXACT_ONLY8
+ || OP(text_node) == LEXACT
+ || OP(text_node) == EXACT_REQ8
+ || OP(text_node) == LEXACT_REQ8
|| OP(text_node) == EXACTL)
{
@@ -4233,7 +4290,8 @@ S_setup_EXACTISH_ST_c1_c2(pTHX_ const regnode * const text_node, int *c1p,
* copy the input to the output, avoiding finding the code point of
* that character */
if (!is_utf8_pat) {
- assert(OP(text_node) != EXACT_ONLY8);
+ assert( OP(text_node) != EXACT_REQ8
+ && OP(text_node) != LEXACT_REQ8);
c2 = c1 = *pat;
}
else if (utf8_target) {
@@ -4241,7 +4299,9 @@ S_setup_EXACTISH_ST_c1_c2(pTHX_ const regnode * const text_node, int *c1p,
Copy(pat, c2_utf8, UTF8SKIP(pat), U8);
utf8_has_been_setup = TRUE;
}
- else if (OP(text_node) == EXACT_ONLY8) {
+ else if ( OP(text_node) == EXACT_REQ8
+ || OP(text_node) == LEXACT_REQ8)
+ {
return FALSE; /* Can only match UTF-8 target */
}
else {
@@ -4249,7 +4309,7 @@ S_setup_EXACTISH_ST_c1_c2(pTHX_ const regnode * const text_node, int *c1p,
}
}
else { /* an EXACTFish node */
- U8 *pat_end = pat + STR_LEN(text_node);
+ U8 *pat_end = pat + STR_LENs(text_node);
/* An EXACTFL node has at least some characters unfolded, because what
* they match is not known until now. So, now is the time to fold
@@ -4331,8 +4391,8 @@ S_setup_EXACTISH_ST_c1_c2(pTHX_ const regnode * const text_node, int *c1p,
}
}
else if (c1 > 255) {
- const unsigned int * remaining_folds;
- unsigned int first_fold;
+ const U32 * remaining_folds;
+ U32 first_fold;
/* Look up what code points (besides c1) fold to c1; e.g.,
* [ 'K', KELVIN_SIGN ] both fold to 'k'. */
@@ -4414,7 +4474,7 @@ S_setup_EXACTISH_ST_c1_c2(pTHX_ const regnode * const text_node, int *c1p,
case EXACTFU:
c2 = PL_fold_latin1[c1];
break;
- case EXACTFU_ONLY8:
+ case EXACTFU_REQ8:
return FALSE;
NOT_REACHED; /* NOTREACHED */
@@ -4466,7 +4526,7 @@ STATIC bool
S_isGCB(pTHX_ const GCB_enum before, const GCB_enum after, const U8 * const strbeg, const U8 * const curpos, const bool utf8_target)
{
/* returns a boolean indicating if there is a Grapheme Cluster Boundary
- * between the inputs. See http://www.unicode.org/reports/tr29/. */
+ * between the inputs. See https://www.unicode.org/reports/tr29/. */
PERL_ARGS_ASSERT_ISGCB;
@@ -4528,7 +4588,7 @@ S_isGCB(pTHX_ const GCB_enum before, const GCB_enum after, const U8 * const strb
}
while (prev == GCB_Extend);
- return prev != GCB_XPG_XX;
+ return prev != GCB_ExtPict_XX;
}
default:
@@ -4903,7 +4963,7 @@ S_isSB(pTHX_ SB_enum before,
const bool utf8_target)
{
/* returns a boolean indicating if there is a Sentence Boundary Break
- * between the inputs. See http://www.unicode.org/reports/tr29/ */
+ * between the inputs. See https://www.unicode.org/reports/tr29/ */
U8 * lpos = (U8 *) curpos;
bool has_para_sep = FALSE;
@@ -5590,7 +5650,7 @@ the subpattern to be matched possibly multiple times, while B is the entire
rest of the pattern. Variable and state names reflect this convention.
The states in the main switch are the union of ops and failure/success of
-substates associated with with that op. For example, IFMATCH is the op
+substates associated with that op. For example, IFMATCH is the op
that does lookahead assertions /(?=A)B/ and so the IFMATCH state means
'execute IFMATCH'; while IFMATCH_A is a state saying that we have just
successfully matched A and IFMATCH_A_fail is a state saying that we have
@@ -5780,7 +5840,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
#endif
#ifdef DEBUGGING
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
#endif
/* protect against undef(*^R) */
@@ -6261,6 +6321,20 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
}
#undef ST
+ case LEXACT_REQ8:
+ if (! utf8_target) {
+ sayNO;
+ }
+ /* FALLTHROUGH */
+
+ case LEXACT:
+ {
+ char *s;
+
+ s = STRINGl(scan);
+ ln = STR_LENl(scan);
+ goto join_short_long_exact;
+
case EXACTL: /* /abc/l */
_CHECK_AND_WARN_PROBLEMATIC_LOCALE;
@@ -6274,16 +6348,18 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
_CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG(locinput, reginfo->strend);
}
goto do_exact;
- case EXACT_ONLY8:
+ case EXACT_REQ8:
if (! utf8_target) {
sayNO;
}
/* FALLTHROUGH */
- case EXACT: { /* /abc/ */
- char *s;
+
+ case EXACT: /* /abc/ */
do_exact:
- s = STRING(scan);
- ln = STR_LEN(scan);
+ s = STRINGs(scan);
+ ln = STR_LENs(scan);
+
+ join_short_long_exact:
if (utf8_target != is_utf8_pat) {
/* The target and the pattern have differing utf8ness. */
char *l = locinput;
@@ -6386,7 +6462,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
fold_array = PL_fold_latin1;
goto do_exactf;
- case EXACTFU_ONLY8: /* /abc/iu with something in /abc/ > 255 */
+ case EXACTFU_REQ8: /* /abc/iu with something in /abc/ > 255 */
if (! utf8_target) {
sayNO;
}
@@ -6435,8 +6511,8 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
fold_utf8_flags = 0;
do_exactf:
- s = STRING(scan);
- ln = STR_LEN(scan);
+ s = STRINGs(scan);
+ ln = STR_LENs(scan);
if ( utf8_target
|| is_utf8_pat
@@ -6493,9 +6569,9 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
if (locinput == reginfo->strbeg)
b1 = isWORDCHAR_LC('\n');
else {
- b1 = isWORDCHAR_LC_utf8_safe(reghop3((U8*)locinput, -1,
- (U8*)(reginfo->strbeg)),
- (U8*)(reginfo->strend));
+ U8 *p = reghop3((U8*)locinput, -1,
+ (U8*)(reginfo->strbeg));
+ b1 = isWORDCHAR_LC_utf8_safe(p, (U8*)(reginfo->strend));
}
b2 = (NEXTCHR_IS_EOS)
? isWORDCHAR_LC('\n')
@@ -6572,13 +6648,15 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
case TRADITIONAL_BOUND:
{
bool b1, b2;
- b1 = (locinput == reginfo->strbeg)
- ? 0 /* isWORDCHAR_L1('\n') */
- : isWORDCHAR_utf8_safe(
- reghop3((U8*)locinput,
- -1,
- (U8*)(reginfo->strbeg)),
- (U8*) reginfo->strend);
+ if (locinput == reginfo->strbeg) {
+ b1 = 0 /* isWORDCHAR_L1('\n') */;
+ }
+ else {
+ U8 *p = reghop3((U8*)locinput, -1,
+ (U8*)(reginfo->strbeg));
+
+ b1 = isWORDCHAR_utf8_safe(p, (U8*) reginfo->strend);
+ }
b2 = (NEXTCHR_IS_EOS)
? 0 /* isWORDCHAR_L1('\n') */
: isWORDCHAR_utf8_safe((U8*)locinput,
@@ -6803,8 +6881,33 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
case ANYOFH:
if ( ! utf8_target
|| NEXTCHR_IS_EOS
- || ( ANYOF_FLAGS(scan) != 0
- && ANYOF_FLAGS(scan) != (U8) *locinput)
+ || ANYOF_FLAGS(scan) > NATIVE_UTF8_TO_I8(*locinput)
+ || ! reginclass(rex, scan, (U8*)locinput, (U8*) loceol,
+ utf8_target))
+ {
+ sayNO;
+ }
+ goto increment_locinput;
+ break;
+
+ case ANYOFHb:
+ if ( ! utf8_target
+ || NEXTCHR_IS_EOS
+ || ANYOF_FLAGS(scan) != (U8) *locinput
+ || ! reginclass(rex, scan, (U8*)locinput, (U8*) loceol,
+ utf8_target))
+ {
+ sayNO;
+ }
+ goto increment_locinput;
+ break;
+
+ case ANYOFHr:
+ if ( ! utf8_target
+ || NEXTCHR_IS_EOS
+ || ! inRANGE((U8) NATIVE_UTF8_TO_I8(*locinput),
+ LOWEST_ANYOF_HRx_BYTE(ANYOF_FLAGS(scan)),
+ HIGHEST_ANYOF_HRx_BYTE(ANYOF_FLAGS(scan)))
|| ! reginclass(rex, scan, (U8*)locinput, (U8*) loceol,
utf8_target))
{
@@ -6813,6 +6916,69 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
goto increment_locinput;
break;
+ case ANYOFHs:
+ if ( ! utf8_target
+ || NEXTCHR_IS_EOS
+ || loceol - locinput < FLAGS(scan)
+ || memNE(locinput, ((struct regnode_anyofhs *) scan)->string, FLAGS(scan))
+ || ! reginclass(rex, scan, (U8*)locinput, (U8*) loceol,
+ utf8_target))
+ {
+ sayNO;
+ }
+ goto increment_locinput;
+ break;
+
+ case ANYOFR:
+ if (NEXTCHR_IS_EOS) {
+ sayNO;
+ }
+
+ if (utf8_target) {
+ if ( ANYOF_FLAGS(scan) > NATIVE_UTF8_TO_I8(*locinput)
+ || ! withinCOUNT(utf8_to_uvchr_buf((U8 *) locinput,
+ (U8 *) reginfo->strend,
+ NULL),
+ ANYOFRbase(scan), ANYOFRdelta(scan)))
+ {
+ sayNO;
+ }
+ }
+ else {
+ if (! withinCOUNT((U8) *locinput,
+ ANYOFRbase(scan), ANYOFRdelta(scan)))
+ {
+ sayNO;
+ }
+ }
+ goto increment_locinput;
+ break;
+
+ case ANYOFRb:
+ if (NEXTCHR_IS_EOS) {
+ sayNO;
+ }
+
+ if (utf8_target) {
+ if ( ANYOF_FLAGS(scan) != (U8) *locinput
+ || ! withinCOUNT(utf8_to_uvchr_buf((U8 *) locinput,
+ (U8 *) reginfo->strend,
+ NULL),
+ ANYOFRbase(scan), ANYOFRdelta(scan)))
+ {
+ sayNO;
+ }
+ }
+ else {
+ if (! withinCOUNT((U8) *locinput,
+ ANYOFRbase(scan), ANYOFRdelta(scan)))
+ {
+ sayNO;
+ }
+ }
+ goto increment_locinput;
+ break;
+
/* The argument (FLAGS) to all the POSIX node types is the class number
* */
@@ -7034,7 +7200,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
}
break;
- case NREFFL: /* /\g{name}/il */
+ case REFFLN: /* /\g{name}/il */
{ /* The capture buffer cases. The ones beginning with N for the
named buffers just convert to the equivalent numbered and
pretend they were called as the corresponding numbered buffer
@@ -7054,28 +7220,28 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
utf8_fold_flags = FOLDEQ_LOCALE;
goto do_nref;
- case NREFFA: /* /\g{name}/iaa */
+ case REFFAN: /* /\g{name}/iaa */
folder = foldEQ_latin1;
fold_array = PL_fold_latin1;
type = REFFA;
utf8_fold_flags = FOLDEQ_UTF8_NOMIX_ASCII;
goto do_nref;
- case NREFFU: /* /\g{name}/iu */
+ case REFFUN: /* /\g{name}/iu */
folder = foldEQ_latin1;
fold_array = PL_fold_latin1;
type = REFFU;
utf8_fold_flags = 0;
goto do_nref;
- case NREFF: /* /\g{name}/i */
+ case REFFN: /* /\g{name}/i */
folder = foldEQ;
fold_array = PL_fold;
type = REFF;
utf8_fold_flags = 0;
goto do_nref;
- case NREF: /* /\g{name}/ */
+ case REFN: /* /\g{name}/ */
type = REF;
folder = NULL;
fold_array = NULL;
@@ -7224,7 +7390,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
rex->recurse_locinput[arg]= locinput;
DEBUG_r({
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
DEBUG_STACK_r({
Perl_re_exec_indentf( aTHX_
"entering GOSUB, prev_recurse_locinput=%p recurse_locinput[%d]=%p\n",
@@ -7729,7 +7895,7 @@ S_regmatch(pTHX_ regmatch_info *reginfo, char *startpos, regnode *prog)
sw = cBOOL(rex->lastparen >= n && rex->offs[n].end != -1);
break;
- case NGROUPP: /* (?(<name>)) */
+ case GROUPPN: /* (?(<name>)) */
/* reg_check_named_buff_matched returns 0 for no match */
sw = cBOOL(0 < reg_check_named_buff_matched(rex,scan));
break;
@@ -9046,8 +9212,10 @@ NULL
/* push a new regex state, then continue at scan */
{
regmatch_state *newst;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
- DEBUG_STACK_r({
+ DEBUG_r( /* DEBUG_STACK_r */
+ if (DEBUG_v_TEST || RE_DEBUG_FLAG(RE_DEBUG_EXTRA_STACK)) {
regmatch_state *cur = st;
regmatch_state *curyes = yes_state;
U32 i;
@@ -9066,9 +9234,9 @@ NULL
if (curyes == cur)
curyes = cur->u.yes.prev_yes_state;
}
- } else
+ } else {
DEBUG_STATE_pp("push")
- );
+ });
depth++;
st->locinput = locinput;
st->loceol = loceol;
@@ -9325,6 +9493,22 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
else
scan = this_eol;
break;
+
+ case LEXACT_REQ8:
+ if (! utf8_target) {
+ break;
+ }
+ /* FALLTHROUGH */
+
+ case LEXACT:
+ {
+ U8 * string;
+ Size_t str_len;
+
+ string = (U8 *) STRINGl(p);
+ str_len = STR_LENl(p);
+ goto join_short_long_exact;
+
case EXACTL:
_CHECK_AND_WARN_PROBLEMATIC_LOCALE;
if (utf8_target && UTF8_IS_ABOVE_LATIN1(*scan)) {
@@ -9332,16 +9516,20 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
}
goto do_exact;
- case EXACT_ONLY8:
+ case EXACT_REQ8:
if (! utf8_target) {
break;
}
/* FALLTHROUGH */
case EXACT:
do_exact:
- assert(STR_LEN(p) == reginfo->is_utf8_pat ? UTF8SKIP(STRING(p)) : 1);
+ string = (U8 *) STRINGs(p);
+ str_len = STR_LENs(p);
- c = (U8)*STRING(p);
+ join_short_long_exact:
+ assert(str_len == reginfo->is_utf8_pat ? UTF8SKIP(string) : 1);
+
+ c = *string;
/* Can use a simple find if the pattern char to match on is invariant
* under UTF-8, or both target and pattern aren't UTF-8. Note that we
@@ -9363,8 +9551,8 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
* string EQ */
while (hardcount < max
&& scan < this_eol
- && (scan_char_len = UTF8SKIP(scan)) <= STR_LEN(p)
- && memEQ(scan, STRING(p), scan_char_len))
+ && (scan_char_len = UTF8SKIP(scan)) <= str_len
+ && memEQ(scan, string, scan_char_len))
{
scan += scan_char_len;
hardcount++;
@@ -9374,7 +9562,7 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
/* Target isn't utf8; convert the character in the UTF-8
* pattern to non-UTF8, and do a simple find */
- c = EIGHT_BIT_UTF8_TO_NATIVE(c, *(STRING(p) + 1));
+ c = EIGHT_BIT_UTF8_TO_NATIVE(c, *(string + 1));
scan = (char *) find_span_end((U8 *) scan, (U8 *) this_eol, (U8) c);
} /* else pattern char is above Latin1, can't possibly match the
non-UTF-8 target */
@@ -9398,6 +9586,7 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
}
}
break;
+ }
case EXACTFAA_NO_TRIE: /* This node only generated for non-utf8 patterns */
assert(! reginfo->is_utf8_pat);
@@ -9430,7 +9619,7 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
| FOLDEQ_S2_FOLDS_SANE;
goto do_exactf;
- case EXACTFU_ONLY8:
+ case EXACTFU_REQ8:
if (! utf8_target) {
break;
}
@@ -9448,7 +9637,7 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
int c1, c2;
U8 c1_utf8[UTF8_MAXBYTES+1], c2_utf8[UTF8_MAXBYTES+1];
- assert(STR_LEN(p) == reginfo->is_utf8_pat ? UTF8SKIP(STRING(p)) : 1);
+ assert(STR_LENs(p) == reginfo->is_utf8_pat ? UTF8SKIP(STRINGs(p)) : 1);
if (S_setup_EXACTISH_ST_c1_c2(aTHX_ p, &c1, c1_utf8, &c2, c2_utf8,
reginfo))
@@ -9456,10 +9645,10 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
if (c1 == CHRTEST_VOID) {
/* Use full Unicode fold matching */
char *tmpeol = loceol;
- STRLEN pat_len = reginfo->is_utf8_pat ? UTF8SKIP(STRING(p)) : 1;
+ STRLEN pat_len = reginfo->is_utf8_pat ? UTF8SKIP(STRINGs(p)) : 1;
while (hardcount < max
&& foldEQ_utf8_flags(scan, &tmpeol, 0, utf8_target,
- STRING(p), NULL, pat_len,
+ STRINGs(p), NULL, pat_len,
reginfo->is_utf8_pat, utf8_flags))
{
scan = tmpeol;
@@ -9578,22 +9767,26 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
case ANYOFH:
if (utf8_target) { /* ANYOFH only can match UTF-8 targets */
- if (ANYOF_FLAGS(p)) { /* If we know the first byte of what
- matches, we can avoid calling reginclass
- */
- while ( hardcount < max
- && scan < this_eol
- && (U8) *scan == ANYOF_FLAGS(p)
- && reginclass(prog, p, (U8*)scan, (U8*) this_eol,
- TRUE))
- {
- scan += UTF8SKIP(scan);
- hardcount++;
- }
+ while ( hardcount < max
+ && scan < this_eol
+ && NATIVE_UTF8_TO_I8(*scan) >= ANYOF_FLAGS(p)
+ && reginclass(prog, p, (U8*)scan, (U8*) this_eol, TRUE))
+ {
+ scan += UTF8SKIP(scan);
+ hardcount++;
}
- else while ( hardcount < max
- && scan < this_eol
- && reginclass(prog, p, (U8*)scan, (U8*) this_eol, TRUE))
+ }
+ break;
+
+ case ANYOFHb:
+ if (utf8_target) { /* ANYOFHb only can match UTF-8 targets */
+
+ /* we know the first byte must be the FLAGS field */
+ while ( hardcount < max
+ && scan < this_eol
+ && (U8) *scan == ANYOF_FLAGS(p)
+ && reginclass(prog, p, (U8*)scan, (U8*) this_eol,
+ TRUE))
{
scan += UTF8SKIP(scan);
hardcount++;
@@ -9601,6 +9794,85 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
}
break;
+ case ANYOFHr:
+ if (utf8_target) { /* ANYOFH only can match UTF-8 targets */
+ while ( hardcount < max
+ && scan < this_eol
+ && inRANGE(NATIVE_UTF8_TO_I8(*scan),
+ LOWEST_ANYOF_HRx_BYTE(ANYOF_FLAGS(p)),
+ HIGHEST_ANYOF_HRx_BYTE(ANYOF_FLAGS(p)))
+ && NATIVE_UTF8_TO_I8(*scan) >= ANYOF_FLAGS(p)
+ && reginclass(prog, p, (U8*)scan, (U8*) this_eol, TRUE))
+ {
+ scan += UTF8SKIP(scan);
+ hardcount++;
+ }
+ }
+ break;
+
+ case ANYOFHs:
+ if (utf8_target) { /* ANYOFH only can match UTF-8 targets */
+ while ( hardcount < max
+ && scan + FLAGS(p) < this_eol
+ && memEQ(scan, ((struct regnode_anyofhs *) p)->string, FLAGS(p))
+ && reginclass(prog, p, (U8*)scan, (U8*) this_eol, TRUE))
+ {
+ scan += UTF8SKIP(scan);
+ hardcount++;
+ }
+ }
+ break;
+
+ case ANYOFR:
+ if (utf8_target) {
+ while ( hardcount < max
+ && scan < this_eol
+ && NATIVE_UTF8_TO_I8(*scan) >= ANYOF_FLAGS(p)
+ && withinCOUNT(utf8_to_uvchr_buf((U8 *) scan,
+ (U8 *) this_eol,
+ NULL),
+ ANYOFRbase(p), ANYOFRdelta(p)))
+ {
+ scan += UTF8SKIP(scan);
+ hardcount++;
+ }
+ }
+ else {
+ while ( hardcount < max
+ && scan < this_eol
+ && withinCOUNT((U8) *scan, ANYOFRbase(p), ANYOFRdelta(p)))
+ {
+ scan++;
+ hardcount++;
+ }
+ }
+ break;
+
+ case ANYOFRb:
+ if (utf8_target) {
+ while ( hardcount < max
+ && scan < this_eol
+ && (U8) *scan == ANYOF_FLAGS(p)
+ && withinCOUNT(utf8_to_uvchr_buf((U8 *) scan,
+ (U8 *) this_eol,
+ NULL),
+ ANYOFRbase(p), ANYOFRdelta(p)))
+ {
+ scan += UTF8SKIP(scan);
+ hardcount++;
+ }
+ }
+ else {
+ while ( hardcount < max
+ && scan < this_eol
+ && withinCOUNT((U8) *scan, ANYOFRbase(p), ANYOFRdelta(p)))
+ {
+ scan++;
+ hardcount++;
+ }
+ }
+ break;
+
/* The argument (FLAGS) to all the POSIX node types is the class number */
case NPOSIXL:
@@ -9812,7 +10084,7 @@ S_regrepeat(pTHX_ regexp *prog, char **startposp, const regnode *p,
*startposp = scan;
DEBUG_r({
- GET_RE_DEBUG_FLAGS_DECL;
+ DECLARE_AND_GET_RE_DEBUG_FLAGS;
DEBUG_EXECUTE_r({
SV * const prop = sv_newmortal();
regprop(prog, prop, p, reginfo, NULL);
@@ -9844,7 +10116,9 @@ STATIC bool
S_reginclass(pTHX_ regexp * const prog, const regnode * const n, const U8* const p, const U8* const p_end, const bool utf8_target)
{
dVAR;
- const char flags = (OP(n) == ANYOFH) ? 0 : ANYOF_FLAGS(n);
+ const char flags = (inRANGE(OP(n), ANYOFH, ANYOFHs))
+ ? 0
+ : ANYOF_FLAGS(n);
bool match = FALSE;
UV c = *p;
@@ -9871,7 +10145,7 @@ S_reginclass(pTHX_ regexp * const prog, const regnode * const n, const U8* const
}
/* If this character is potentially in the bitmap, check it */
- if (c < NUM_ANYOF_CODE_POINTS && OP(n) != ANYOFH) {
+ if (c < NUM_ANYOF_CODE_POINTS && ! inRANGE(OP(n), ANYOFH, ANYOFHb)) {
if (ANYOF_BITMAP_TEST(n, c))
match = TRUE;
else if ((flags
@@ -9972,8 +10246,14 @@ S_reginclass(pTHX_ regexp * const prog, const regnode * const n, const U8* const
&& IN_UTF8_CTYPE_LOCALE)))
{
SV* only_utf8_locale = NULL;
- SV * const definition = _get_regclass_nonbitmap_data(prog, n, TRUE,
- 0, &only_utf8_locale, NULL);
+ SV * const definition =
+#if !defined(PERL_IN_XSUB_RE) || defined(PLUGGABLE_RE_EXTENSION)
+ get_regclass_nonbitmap_data(prog, n, TRUE, 0,
+ &only_utf8_locale, NULL);
+#else
+ get_re_gclass_nonbitmap_data(prog, n, TRUE, 0,
+ &only_utf8_locale, NULL);
+#endif
if (definition) {
U8 utf8_buffer[2];
U8 * utf8_p;
@@ -10369,13 +10649,13 @@ S_to_byte_substr(pTHX_ regexp *prog)
#ifndef PERL_IN_XSUB_RE
bool
-Perl__is_grapheme(pTHX_ const U8 * strbeg, const U8 * s, const U8 * strend, const UV cp)
+Perl_is_grapheme(pTHX_ const U8 * strbeg, const U8 * s, const U8 * strend, const UV cp)
{
/* Temporary helper function for toke.c. Verify that the code point 'cp'
* is a stand-alone grapheme. The UTF-8 for 'cp' begins at position 's' in
* the larger string bounded by 'strbeg' and 'strend'.
*
- * 'cp' needs to be assigned (if not a future version of the Unicode
+ * 'cp' needs to be assigned (if not, a future version of the Unicode
* Standard could make it something that combines with adjacent characters,
* so code using it would then break), and there has to be a GCB break
* before and after the character. */
@@ -10385,7 +10665,7 @@ Perl__is_grapheme(pTHX_ const U8 * strbeg, const U8 * s, const U8 * strend, cons
GCB_enum cp_gcb_val, prev_cp_gcb_val, next_cp_gcb_val;
const U8 * prev_cp_start;
- PERL_ARGS_ASSERT__IS_GRAPHEME;
+ PERL_ARGS_ASSERT_IS_GRAPHEME;
if ( UNLIKELY(UNICODE_IS_SUPER(cp))
|| UNLIKELY(UNICODE_IS_NONCHAR(cp)))
diff --git a/gnu/usr.bin/perl/regexp.h b/gnu/usr.bin/perl/regexp.h
index ccbc64a009e..e12c6a9ffa6 100644
--- a/gnu/usr.bin/perl/regexp.h
+++ b/gnu/usr.bin/perl/regexp.h
@@ -118,28 +118,37 @@ typedef struct regexp {
*/
U32 extflags; /* Flags used both externally and internally */
+ U32 nparens; /* number of capture buffers */
SSize_t minlen; /* minimum possible number of chars in string to match */
SSize_t minlenret; /* mininum possible number of chars in $& */
STRLEN gofs; /* chars left of pos that we search from */
/* substring data about strings that must appear in
* the final match, used for optimisations */
struct reg_substr_data *substrs;
- U32 nparens; /* number of capture buffers */
/* private engine specific data */
- U32 intflags; /* Engine Specific Internal flags */
void *pprivate; /* Data private to the regex engine which
* created this object. */
+ U32 intflags; /* Engine Specific Internal flags */
/*----------------------------------------------------------------------
* Data about the last/current match. These are modified during matching
*/
U32 lastparen; /* highest close paren matched ($+) */
- U32 lastcloseparen; /* last close paren matched ($^N) */
regexp_paren_pair *offs; /* Array of offsets for (@-) and (@+) */
char **recurse_locinput; /* used to detect infinite recursion, XXX: move to internal */
+ U32 lastcloseparen; /* last close paren matched ($^N) */
+
+ /*---------------------------------------------------------------------- */
+
+ /* offset from wrapped to the start of precomp */
+ PERL_BITFIELD32 pre_prefix:4;
+
+ /* original flags used to compile the pattern, may differ from
+ * extflags in various ways */
+ PERL_BITFIELD32 compflags:9;
/*---------------------------------------------------------------------- */
@@ -148,21 +157,10 @@ typedef struct regexp {
SSize_t sublen; /* Length of string pointed by subbeg */
SSize_t suboffset; /* byte offset of subbeg from logical start of str */
SSize_t subcoffset; /* suboffset equiv, but in chars (for @-/@+) */
-
- /* Information about the match that isn't often used */
-
SSize_t maxlen; /* minimum possible number of chars in string to match */
/*---------------------------------------------------------------------- */
- /* offset from wrapped to the start of precomp */
- PERL_BITFIELD32 pre_prefix:4;
-
- /* original flags used to compile the pattern, may differ from
- * extflags in various ways */
- PERL_BITFIELD32 compflags:9;
-
- /*---------------------------------------------------------------------- */
CV *qr_anoncv; /* the anon sub wrapped round qr/(?{..})/ */
} regexp;
@@ -629,7 +627,7 @@ and check for NULL.
# define ReREFCNT_dec(re) SvREFCNT_dec(re)
# define ReREFCNT_inc(re) ((REGEXP *) SvREFCNT_inc(re))
#endif
-#define ReANY(re) S_ReANY((const REGEXP *)(re))
+#define ReANY(re) Perl_ReANY((const REGEXP *)(re))
/* FIXME for plugins. */
@@ -828,7 +826,7 @@ typedef struct regmatch_state {
} keeper;
/* quantifiers - these members are used for storing state for
- for the regops used to implement quantifiers */
+ the regops used to implement quantifiers */
struct {
/* this first element must match u.yes */
struct regmatch_state *prev_yes_state;
diff --git a/gnu/usr.bin/perl/regnodes.h b/gnu/usr.bin/perl/regnodes.h
index ba691a2c188..46e090f39c5 100644
--- a/gnu/usr.bin/perl/regnodes.h
+++ b/gnu/usr.bin/perl/regnodes.h
@@ -6,8 +6,8 @@
/* Regops and State definitions */
-#define REGNODE_MAX 101
-#define REGMATCH_STATE_MAX 141
+#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. */
@@ -19,11 +19,11 @@
#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 match "" between any Unicode \w\W or \W\w */
+#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 match "" between any Unicode \w\w or \W\W */
+#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] */
@@ -33,86 +33,94 @@
#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; non-zero flags "f" means "f" is the first UTF-8 byte shared in common by all code points matched */
-#define ANYOFM 23 /* 0x17 Like ANYOF, but matches an invariant byte as determined by the mask and arg */
-#define NANYOFM 24 /* 0x18 complement of ANYOFM */
-#define POSIXD 25 /* 0x19 Some [[:class:]] under /d; the FLAGS field gives which one */
-#define POSIXL 26 /* 0x1a Some [[:class:]] under /l; the FLAGS field gives which one */
-#define POSIXU 27 /* 0x1b Some [[:class:]] under /u; the FLAGS field gives which one */
-#define POSIXA 28 /* 0x1c Some [[:class:]] under /a; the FLAGS field gives which one */
-#define NPOSIXD 29 /* 0x1d complement of POSIXD, [[:^class:]] */
-#define NPOSIXL 30 /* 0x1e complement of POSIXL, [[:^class:]] */
-#define NPOSIXU 31 /* 0x1f complement of POSIXU, [[:^class:]] */
-#define NPOSIXA 32 /* 0x20 complement of POSIXA, [[:^class:]] */
-#define CLUMP 33 /* 0x21 Match any extended grapheme cluster sequence */
-#define BRANCH 34 /* 0x22 Match this alternative, or the next... */
-#define EXACT 35 /* 0x23 Match this string (preceded by length). */
-#define EXACTL 36 /* 0x24 Like EXACT, but /l is in effect (used so locale-related warnings can be checked for). */
-#define EXACTF 37 /* 0x25 Match this string using /id rules (w/len); (string not UTF-8, not guaranteed to be folded). */
-#define EXACTFL 38 /* 0x26 Match this string using /il rules (w/len); (string not guaranteed to be folded). */
-#define EXACTFU 39 /* 0x27 Match this string using /iu rules (w/len); (string folded iff in UTF-8; non-UTF8 folded length <= unfolded). */
-#define EXACTFAA 40 /* 0x28 Match this string using /iaa rules (w/len) (string folded iff in UTF-8; non-UTF8 folded length <= unfolded). */
-#define EXACTFUP 41 /* 0x29 Match this string using /iu rules (w/len); (string not UTF-8, not guaranteed to be folded; and its Problematic). */
-#define EXACTFLU8 42 /* 0x2a Like EXACTFU, but use /il, UTF-8, folded, and everything in it is above 255. */
-#define EXACTFAA_NO_TRIE 43 /* 0x2b Match this string using /iaa rules (w/len) (string not UTF-8, not guaranteed to be folded, not currently trie-able). */
-#define EXACT_ONLY8 44 /* 0x2c Like EXACT, but only UTF-8 encoded targets can match */
-#define EXACTFU_ONLY8 45 /* 0x2d Like EXACTFU, but only UTF-8 encoded targets can match */
-#define EXACTFU_S_EDGE 46 /* 0x2e /di rules, but nothing in it precludes /ui, except begins and/or ends with [Ss]; (string not UTF-8; compile-time only). */
-#define NOTHING 47 /* 0x2f Match empty string. */
-#define TAIL 48 /* 0x30 Match empty string. Can jump here from outside. */
-#define STAR 49 /* 0x31 Match this (simple) thing 0 or more times. */
-#define PLUS 50 /* 0x32 Match this (simple) thing 1 or more times. */
-#define CURLY 51 /* 0x33 Match this simple thing {n,m} times. */
-#define CURLYN 52 /* 0x34 Capture next-after-this simple thing */
-#define CURLYM 53 /* 0x35 Capture this medium-complex thing {n,m} times. */
-#define CURLYX 54 /* 0x36 Match this complex thing {n,m} times. */
-#define WHILEM 55 /* 0x37 Do curly processing and see if rest matches. */
-#define OPEN 56 /* 0x38 Mark this point in input as start of #n. */
-#define CLOSE 57 /* 0x39 Close corresponding OPEN of #n. */
-#define SROPEN 58 /* 0x3a Same as OPEN, but for script run */
-#define SRCLOSE 59 /* 0x3b Close preceding SROPEN */
-#define REF 60 /* 0x3c Match some already matched string */
-#define REFF 61 /* 0x3d Match already matched string, using /di rules. */
-#define REFFL 62 /* 0x3e Match already matched string, using /li rules. */
-#define REFFU 63 /* 0x3f Match already matched string, usng /ui. */
-#define REFFA 64 /* 0x40 Match already matched string, using /aai rules. */
-#define NREF 65 /* 0x41 Match some already matched string */
-#define NREFF 66 /* 0x42 Match already matched string, using /di rules. */
-#define NREFFL 67 /* 0x43 Match already matched string, using /li rules. */
-#define NREFFU 68 /* 0x44 Match already matched string, using /ui rules. */
-#define NREFFA 69 /* 0x45 Match already matched string, using /aai rules. */
-#define LONGJMP 70 /* 0x46 Jump far away. */
-#define BRANCHJ 71 /* 0x47 BRANCH with long offset. */
-#define IFMATCH 72 /* 0x48 Succeeds if the following matches; non-zero flags "f", next_off "o" means lookbehind assertion starting "f..(f-o)" characters before current */
-#define UNLESSM 73 /* 0x49 Fails if the following matches; non-zero flags "f", next_off "o" means lookbehind assertion starting "f..(f-o)" characters before current */
-#define SUSPEND 74 /* 0x4a "Independent" sub-RE. */
-#define IFTHEN 75 /* 0x4b Switch, should be preceded by switcher. */
-#define GROUPP 76 /* 0x4c Whether the group matched. */
-#define EVAL 77 /* 0x4d Execute some Perl code. */
-#define MINMOD 78 /* 0x4e Next operator is not greedy. */
-#define LOGICAL 79 /* 0x4f Next opcode should set the flag only. */
-#define RENUM 80 /* 0x50 Group with independently numbered parens. */
-#define TRIE 81 /* 0x51 Match many EXACT(F[ALU]?)? at once. flags==type */
-#define TRIEC 82 /* 0x52 Same as TRIE, but with embedded charclass data */
-#define AHOCORASICK 83 /* 0x53 Aho Corasick stclass. flags==type */
-#define AHOCORASICKC 84 /* 0x54 Same as AHOCORASICK, but with embedded charclass data */
-#define GOSUB 85 /* 0x55 recurse to paren arg1 at (signed) ofs arg2 */
-#define NGROUPP 86 /* 0x56 Whether the group matched. */
-#define INSUBP 87 /* 0x57 Whether we are in a specific recurse. */
-#define DEFINEP 88 /* 0x58 Never execute directly. */
-#define ENDLIKE 89 /* 0x59 Used only for the type field of verbs */
-#define OPFAIL 90 /* 0x5a Same as (?!), but with verb arg */
-#define ACCEPT 91 /* 0x5b Accepts the current matched string, with verbar */
-#define VERB 92 /* 0x5c Used only for the type field of verbs */
-#define PRUNE 93 /* 0x5d Pattern fails at this startpoint if no-backtracking through this */
-#define MARKPOINT 94 /* 0x5e Push the current location for rollback by cut. */
-#define SKIP 95 /* 0x5f On failure skip forward (to the mark) before retrying */
-#define COMMIT 96 /* 0x60 Pattern fails outright if backtracking through this */
-#define CUTGROUP 97 /* 0x61 On failure go to the next alternation in the group */
-#define KEEPS 98 /* 0x62 $& begins here. */
-#define LNBREAK 99 /* 0x63 generic newline pattern */
-#define OPTIMIZED 100 /* 0x64 Placeholder for dump. */
-#define PSEUDO 101 /* 0x65 Pseudo opcode for internal use. */
+#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 */
/* ------------ States ------------- */
#define TRIE_next (REGNODE_MAX + 1) /* state for TRIE */
#define TRIE_next_fail (REGNODE_MAX + 2) /* state for TRIE */
@@ -184,6 +192,11 @@ EXTCONST U8 PL_regkind[] = {
ANYOF, /* ANYOFL */
ANYOF, /* ANYOFPOSIXL */
ANYOF, /* ANYOFH */
+ ANYOF, /* ANYOFHb */
+ ANYOF, /* ANYOFHr */
+ ANYOF, /* ANYOFHs */
+ ANYOFR, /* ANYOFR */
+ ANYOFR, /* ANYOFRb */
ANYOFM, /* ANYOFM */
ANYOFM, /* NANYOFM */
POSIXD, /* POSIXD */
@@ -197,6 +210,7 @@ EXTCONST U8 PL_regkind[] = {
CLUMP, /* CLUMP */
BRANCH, /* BRANCH */
EXACT, /* EXACT */
+ EXACT, /* LEXACT */
EXACT, /* EXACTL */
EXACT, /* EXACTF */
EXACT, /* EXACTFL */
@@ -205,8 +219,9 @@ EXTCONST U8 PL_regkind[] = {
EXACT, /* EXACTFUP */
EXACT, /* EXACTFLU8 */
EXACT, /* EXACTFAA_NO_TRIE */
- EXACT, /* EXACT_ONLY8 */
- EXACT, /* EXACTFU_ONLY8 */
+ EXACT, /* EXACT_REQ8 */
+ EXACT, /* LEXACT_REQ8 */
+ EXACT, /* EXACTFU_REQ8 */
EXACT, /* EXACTFU_S_EDGE */
NOTHING, /* NOTHING */
NOTHING, /* TAIL */
@@ -226,11 +241,11 @@ EXTCONST U8 PL_regkind[] = {
REF, /* REFFL */
REF, /* REFFU */
REF, /* REFFA */
- REF, /* NREF */
- REF, /* NREFF */
- REF, /* NREFFL */
- REF, /* NREFFU */
- REF, /* NREFFA */
+ REF, /* REFN */
+ REF, /* REFFN */
+ REF, /* REFFLN */
+ REF, /* REFFUN */
+ REF, /* REFFAN */
LONGJMP, /* LONGJMP */
BRANCHJ, /* BRANCHJ */
BRANCHJ, /* IFMATCH */
@@ -247,7 +262,7 @@ EXTCONST U8 PL_regkind[] = {
TRIE, /* AHOCORASICK */
TRIE, /* AHOCORASICKC */
GOSUB, /* GOSUB */
- NGROUPP, /* NGROUPP */
+ GROUPPN, /* GROUPPN */
INSUBP, /* INSUBP */
DEFINEP, /* DEFINEP */
ENDLIKE, /* ENDLIKE */
@@ -263,6 +278,7 @@ EXTCONST U8 PL_regkind[] = {
LNBREAK, /* LNBREAK */
NOTHING, /* OPTIMIZED */
PSEUDO, /* PSEUDO */
+ REGEX_SET, /* REGEX_SET */
/* ------------ States ------------- */
TRIE, /* TRIE_next */
TRIE, /* TRIE_next_fail */
@@ -335,6 +351,11 @@ static const U8 regarglen[] = {
EXTRA_SIZE(struct regnode_charclass), /* ANYOFL */
EXTRA_SIZE(struct regnode_charclass_posixl), /* ANYOFPOSIXL */
EXTRA_SIZE(struct regnode_1), /* ANYOFH */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFHb */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFHr */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFHs */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFR */
+ EXTRA_SIZE(struct regnode_1), /* ANYOFRb */
EXTRA_SIZE(struct regnode_1), /* ANYOFM */
EXTRA_SIZE(struct regnode_1), /* NANYOFM */
0, /* POSIXD */
@@ -348,6 +369,7 @@ static const U8 regarglen[] = {
0, /* CLUMP */
0, /* BRANCH */
0, /* EXACT */
+ EXTRA_SIZE(struct regnode_1), /* LEXACT */
0, /* EXACTL */
0, /* EXACTF */
0, /* EXACTFL */
@@ -356,8 +378,9 @@ static const U8 regarglen[] = {
0, /* EXACTFUP */
0, /* EXACTFLU8 */
0, /* EXACTFAA_NO_TRIE */
- 0, /* EXACT_ONLY8 */
- 0, /* EXACTFU_ONLY8 */
+ 0, /* EXACT_REQ8 */
+ EXTRA_SIZE(struct regnode_1), /* LEXACT_REQ8 */
+ 0, /* EXACTFU_REQ8 */
0, /* EXACTFU_S_EDGE */
0, /* NOTHING */
0, /* TAIL */
@@ -377,11 +400,11 @@ static const U8 regarglen[] = {
EXTRA_SIZE(struct regnode_1), /* REFFL */
EXTRA_SIZE(struct regnode_1), /* REFFU */
EXTRA_SIZE(struct regnode_1), /* REFFA */
- EXTRA_SIZE(struct regnode_1), /* NREF */
- EXTRA_SIZE(struct regnode_1), /* NREFF */
- EXTRA_SIZE(struct regnode_1), /* NREFFL */
- EXTRA_SIZE(struct regnode_1), /* NREFFU */
- EXTRA_SIZE(struct regnode_1), /* NREFFA */
+ EXTRA_SIZE(struct regnode_1), /* REFN */
+ EXTRA_SIZE(struct regnode_1), /* REFFN */
+ EXTRA_SIZE(struct regnode_1), /* REFFLN */
+ EXTRA_SIZE(struct regnode_1), /* REFFUN */
+ EXTRA_SIZE(struct regnode_1), /* REFFAN */
EXTRA_SIZE(struct regnode_1), /* LONGJMP */
EXTRA_SIZE(struct regnode_1), /* BRANCHJ */
EXTRA_SIZE(struct regnode_1), /* IFMATCH */
@@ -398,7 +421,7 @@ static const U8 regarglen[] = {
EXTRA_SIZE(struct regnode_1), /* AHOCORASICK */
EXTRA_SIZE(struct regnode_charclass), /* AHOCORASICKC */
EXTRA_SIZE(struct regnode_2L), /* GOSUB */
- EXTRA_SIZE(struct regnode_1), /* NGROUPP */
+ EXTRA_SIZE(struct regnode_1), /* GROUPPN */
EXTRA_SIZE(struct regnode_1), /* INSUBP */
EXTRA_SIZE(struct regnode_1), /* DEFINEP */
0, /* ENDLIKE */
@@ -414,6 +437,7 @@ static const U8 regarglen[] = {
0, /* LNBREAK */
0, /* OPTIMIZED */
0, /* PSEUDO */
+ EXTRA_SIZE(struct regnode_p), /* REGEX_SET */
};
/* reg_off_by_arg[] - Which argument holds the offset to the next node */
@@ -442,6 +466,11 @@ static const char reg_off_by_arg[] = {
0, /* ANYOFL */
0, /* ANYOFPOSIXL */
0, /* ANYOFH */
+ 0, /* ANYOFHb */
+ 0, /* ANYOFHr */
+ 0, /* ANYOFHs */
+ 0, /* ANYOFR */
+ 0, /* ANYOFRb */
0, /* ANYOFM */
0, /* NANYOFM */
0, /* POSIXD */
@@ -455,6 +484,7 @@ static const char reg_off_by_arg[] = {
0, /* CLUMP */
0, /* BRANCH */
0, /* EXACT */
+ 0, /* LEXACT */
0, /* EXACTL */
0, /* EXACTF */
0, /* EXACTFL */
@@ -463,8 +493,9 @@ static const char reg_off_by_arg[] = {
0, /* EXACTFUP */
0, /* EXACTFLU8 */
0, /* EXACTFAA_NO_TRIE */
- 0, /* EXACT_ONLY8 */
- 0, /* EXACTFU_ONLY8 */
+ 0, /* EXACT_REQ8 */
+ 0, /* LEXACT_REQ8 */
+ 0, /* EXACTFU_REQ8 */
0, /* EXACTFU_S_EDGE */
0, /* NOTHING */
0, /* TAIL */
@@ -484,11 +515,11 @@ static const char reg_off_by_arg[] = {
0, /* REFFL */
0, /* REFFU */
0, /* REFFA */
- 0, /* NREF */
- 0, /* NREFF */
- 0, /* NREFFL */
- 0, /* NREFFU */
- 0, /* NREFFA */
+ 0, /* REFN */
+ 0, /* REFFN */
+ 0, /* REFFLN */
+ 0, /* REFFUN */
+ 0, /* REFFAN */
1, /* LONGJMP */
1, /* BRANCHJ */
1, /* IFMATCH */
@@ -505,7 +536,7 @@ static const char reg_off_by_arg[] = {
0, /* AHOCORASICK */
0, /* AHOCORASICKC */
0, /* GOSUB */
- 0, /* NGROUPP */
+ 0, /* GROUPPN */
0, /* INSUBP */
0, /* DEFINEP */
0, /* ENDLIKE */
@@ -521,6 +552,7 @@ static const char reg_off_by_arg[] = {
0, /* LNBREAK */
0, /* OPTIMIZED */
0, /* PSEUDO */
+ 0, /* REGEX_SET */
};
#endif /* REG_COMP_C */
@@ -555,85 +587,93 @@ EXTCONST char * const PL_reg_name[] = {
"ANYOFL", /* 0x14 */
"ANYOFPOSIXL", /* 0x15 */
"ANYOFH", /* 0x16 */
- "ANYOFM", /* 0x17 */
- "NANYOFM", /* 0x18 */
- "POSIXD", /* 0x19 */
- "POSIXL", /* 0x1a */
- "POSIXU", /* 0x1b */
- "POSIXA", /* 0x1c */
- "NPOSIXD", /* 0x1d */
- "NPOSIXL", /* 0x1e */
- "NPOSIXU", /* 0x1f */
- "NPOSIXA", /* 0x20 */
- "CLUMP", /* 0x21 */
- "BRANCH", /* 0x22 */
- "EXACT", /* 0x23 */
- "EXACTL", /* 0x24 */
- "EXACTF", /* 0x25 */
- "EXACTFL", /* 0x26 */
- "EXACTFU", /* 0x27 */
- "EXACTFAA", /* 0x28 */
- "EXACTFUP", /* 0x29 */
- "EXACTFLU8", /* 0x2a */
- "EXACTFAA_NO_TRIE", /* 0x2b */
- "EXACT_ONLY8", /* 0x2c */
- "EXACTFU_ONLY8", /* 0x2d */
- "EXACTFU_S_EDGE", /* 0x2e */
- "NOTHING", /* 0x2f */
- "TAIL", /* 0x30 */
- "STAR", /* 0x31 */
- "PLUS", /* 0x32 */
- "CURLY", /* 0x33 */
- "CURLYN", /* 0x34 */
- "CURLYM", /* 0x35 */
- "CURLYX", /* 0x36 */
- "WHILEM", /* 0x37 */
- "OPEN", /* 0x38 */
- "CLOSE", /* 0x39 */
- "SROPEN", /* 0x3a */
- "SRCLOSE", /* 0x3b */
- "REF", /* 0x3c */
- "REFF", /* 0x3d */
- "REFFL", /* 0x3e */
- "REFFU", /* 0x3f */
- "REFFA", /* 0x40 */
- "NREF", /* 0x41 */
- "NREFF", /* 0x42 */
- "NREFFL", /* 0x43 */
- "NREFFU", /* 0x44 */
- "NREFFA", /* 0x45 */
- "LONGJMP", /* 0x46 */
- "BRANCHJ", /* 0x47 */
- "IFMATCH", /* 0x48 */
- "UNLESSM", /* 0x49 */
- "SUSPEND", /* 0x4a */
- "IFTHEN", /* 0x4b */
- "GROUPP", /* 0x4c */
- "EVAL", /* 0x4d */
- "MINMOD", /* 0x4e */
- "LOGICAL", /* 0x4f */
- "RENUM", /* 0x50 */
- "TRIE", /* 0x51 */
- "TRIEC", /* 0x52 */
- "AHOCORASICK", /* 0x53 */
- "AHOCORASICKC", /* 0x54 */
- "GOSUB", /* 0x55 */
- "NGROUPP", /* 0x56 */
- "INSUBP", /* 0x57 */
- "DEFINEP", /* 0x58 */
- "ENDLIKE", /* 0x59 */
- "OPFAIL", /* 0x5a */
- "ACCEPT", /* 0x5b */
- "VERB", /* 0x5c */
- "PRUNE", /* 0x5d */
- "MARKPOINT", /* 0x5e */
- "SKIP", /* 0x5f */
- "COMMIT", /* 0x60 */
- "CUTGROUP", /* 0x61 */
- "KEEPS", /* 0x62 */
- "LNBREAK", /* 0x63 */
- "OPTIMIZED", /* 0x64 */
- "PSEUDO", /* 0x65 */
+ "ANYOFHb", /* 0x17 */
+ "ANYOFHr", /* 0x18 */
+ "ANYOFHs", /* 0x19 */
+ "ANYOFR", /* 0x1a */
+ "ANYOFRb", /* 0x1b */
+ "ANYOFM", /* 0x1c */
+ "NANYOFM", /* 0x1d */
+ "POSIXD", /* 0x1e */
+ "POSIXL", /* 0x1f */
+ "POSIXU", /* 0x20 */
+ "POSIXA", /* 0x21 */
+ "NPOSIXD", /* 0x22 */
+ "NPOSIXL", /* 0x23 */
+ "NPOSIXU", /* 0x24 */
+ "NPOSIXA", /* 0x25 */
+ "CLUMP", /* 0x26 */
+ "BRANCH", /* 0x27 */
+ "EXACT", /* 0x28 */
+ "LEXACT", /* 0x29 */
+ "EXACTL", /* 0x2a */
+ "EXACTF", /* 0x2b */
+ "EXACTFL", /* 0x2c */
+ "EXACTFU", /* 0x2d */
+ "EXACTFAA", /* 0x2e */
+ "EXACTFUP", /* 0x2f */
+ "EXACTFLU8", /* 0x30 */
+ "EXACTFAA_NO_TRIE", /* 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 */
+ "OPTIMIZED", /* 0x6b */
+ "PSEUDO", /* 0x6c */
+ "REGEX_SET", /* 0x6d */
/* ------------ States ------------- */
"TRIE_next", /* REGNODE_MAX +0x01 */
"TRIE_next_fail", /* REGNODE_MAX +0x02 */
@@ -758,7 +798,7 @@ EXTCONST U8 PL_varies[] __attribute__deprecated__;
#else
EXTCONST U8 PL_varies[] __attribute__deprecated__ = {
CLUMP, BRANCH, STAR, PLUS, CURLY, CURLYN, CURLYM, CURLYX, WHILEM, REF,
- REFF, REFFL, REFFU, REFFA, NREF, NREFF, NREFFL, NREFFU, NREFFA,
+ REFF, REFFL, REFFU, REFFA, REFN, REFFN, REFFLN, REFFUN, REFFAN,
BRANCHJ, SUSPEND, IFTHEN,
0
};
@@ -768,7 +808,7 @@ EXTCONST U8 PL_varies[] __attribute__deprecated__ = {
EXTCONST U8 PL_varies_bitmask[];
#else
EXTCONST U8 PL_varies_bitmask[] = {
- 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0xFE, 0xF0, 0xBF, 0x0C, 0x00, 0x00, 0x00
+ 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x7F, 0xF8, 0x5F, 0x06, 0x00, 0x00, 0x00
};
#endif /* DOINIT */
@@ -780,9 +820,9 @@ EXTCONST U8 PL_varies_bitmask[] = {
EXTCONST U8 PL_simple[] __attribute__deprecated__;
#else
EXTCONST U8 PL_simple[] __attribute__deprecated__ = {
- REG_ANY, SANY, ANYOF, ANYOFD, ANYOFL, ANYOFPOSIXL, ANYOFH, ANYOFM,
- NANYOFM, POSIXD, POSIXL, POSIXU, POSIXA, NPOSIXD, NPOSIXL, NPOSIXU,
- NPOSIXA,
+ REG_ANY, SANY, ANYOF, ANYOFD, ANYOFL, ANYOFPOSIXL, ANYOFH, ANYOFHb,
+ ANYOFHr, ANYOFHs, ANYOFR, ANYOFRb, ANYOFM, NANYOFM, POSIXD, POSIXL,
+ POSIXU, POSIXA, NPOSIXD, NPOSIXL, NPOSIXU, NPOSIXA, REGEX_SET,
0
};
#endif /* DOINIT */
@@ -791,7 +831,7 @@ EXTCONST U8 PL_simple[] __attribute__deprecated__ = {
EXTCONST U8 PL_simple_bitmask[];
#else
EXTCONST U8 PL_simple_bitmask[] = {
- 0x00, 0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20
};
#endif /* DOINIT */
diff --git a/gnu/usr.bin/perl/scope.c b/gnu/usr.bin/perl/scope.c
index 3e4ee4344b5..a948a7b4f21 100644
--- a/gnu/usr.bin/perl/scope.c
+++ b/gnu/usr.bin/perl/scope.c
@@ -25,6 +25,7 @@
#include "EXTERN.h"
#define PERL_IN_SCOPE_C
#include "perl.h"
+#include "feature.h"
SV**
Perl_stack_grow(pTHX_ SV **sp, SV **p, SSize_t n)
@@ -82,6 +83,7 @@ Perl_new_stackinfo(pTHX_ I32 stitems, I32 cxitems)
si->si_next = 0;
si->si_cxmax = cxitems - 1;
si->si_cxix = -1;
+ si->si_cxsubix = -1;
si->si_type = PERLSI_UNDEF;
Newx(si->si_cxstack, cxitems, PERL_CONTEXT);
/* Without any kind of initialising CX_PUSHSUBST()
@@ -313,6 +315,9 @@ Perl_save_set_svflags(pTHX_ SV* sv, U32 mask, U32 val)
}
/*
+
+=head1 GV Functions
+
=for apidoc save_gp
Saves the current GP of gv on the save stack to be restored on scope exit.
@@ -684,6 +689,7 @@ Perl_save_hints(pTHX)
save_pushptri32ptr(oldhh, PL_hints, save_cophh, SAVEt_HINTS);
GvHV(PL_hintgv) = NULL; /* in case copying dies */
GvHV(PL_hintgv) = hv_copy_hints_hv(oldhh);
+ SAVEFEATUREBITS();
} else {
save_pushi32ptr(PL_hints, save_cophh, SAVEt_HINTS);
}
@@ -1047,7 +1053,7 @@ Perl_leave_scope(pTHX_ I32 base)
#ifdef NO_TAINT_SUPPORT
PERL_UNUSED_VAR(was);
#else
- if (UNLIKELY(a0.any_ptr == &(TAINT_get))) {
+ if (UNLIKELY(a0.any_ptr == &(PL_tainted))) {
/* If we don't update <was>, to reflect what was saved on the
* stack for PL_tainted, then we will overwrite this attempt to
* restore it when we exit this routine. Note that this won't
@@ -1442,9 +1448,7 @@ Perl_leave_scope(pTHX_ I32 base)
case SAVEt_COMPILE_WARNINGS:
a0 = ap[0];
- if (!specialWARN(PL_compiling.cop_warnings))
- PerlMemShared_free(PL_compiling.cop_warnings);
- PL_compiling.cop_warnings = (STRLEN*)a0.any_ptr;
+ free_and_set_cop_warnings(&PL_compiling, (STRLEN*) a0.any_ptr);
break;
case SAVEt_PARSER:
diff --git a/gnu/usr.bin/perl/scope.h b/gnu/usr.bin/perl/scope.h
index c6f4bc43505..483bc5d700c 100644
--- a/gnu/usr.bin/perl/scope.h
+++ b/gnu/usr.bin/perl/scope.h
@@ -153,26 +153,26 @@
/*
=head1 Callback Functions
-=for apidoc Ams||SAVETMPS
+=for apidoc Amns||SAVETMPS
Opening bracket for temporaries on a callback. See C<L</FREETMPS>> and
L<perlcall>.
-=for apidoc Ams||FREETMPS
+=for apidoc Amns||FREETMPS
Closing bracket for temporaries on a callback. See C<L</SAVETMPS>> and
L<perlcall>.
-=for apidoc Ams||ENTER
+=for apidoc Amns||ENTER
Opening bracket on a callback. See C<L</LEAVE>> and L<perlcall>.
-=for apidoc Ams||LEAVE
+=for apidoc Amns||LEAVE
Closing bracket on a callback. See C<L</ENTER>> and L<perlcall>.
-=for apidoc Ams||ENTER_with_name(name)
+=for apidoc Ams||ENTER_with_name|"name"
Same as C<L</ENTER>>, but when debugging is enabled it also associates the
given literal string with the new scope.
-=for apidoc Ams||LEAVE_with_name(name)
+=for apidoc Ams||LEAVE_with_name|"name"
Same as C<L</LEAVE>>, but when debugging is enabled it first checks that the
scope has the given name. C<name> must be a literal string.
diff --git a/gnu/usr.bin/perl/sv.c b/gnu/usr.bin/perl/sv.c
index 648da9297b6..9c7f3ba45eb 100644
--- a/gnu/usr.bin/perl/sv.c
+++ b/gnu/usr.bin/perl/sv.c
@@ -883,6 +883,23 @@ struct body_details {
U32 arena_size; /* Size of arena to allocate */
};
+#define ALIGNED_TYPE_NAME(name) name##_aligned
+#define ALIGNED_TYPE(name) \
+ typedef union { \
+ name align_me; \
+ NV nv; \
+ IV iv; \
+ } ALIGNED_TYPE_NAME(name);
+
+ALIGNED_TYPE(regexp);
+ALIGNED_TYPE(XPVGV);
+ALIGNED_TYPE(XPVLV);
+ALIGNED_TYPE(XPVAV);
+ALIGNED_TYPE(XPVHV);
+ALIGNED_TYPE(XPVCV);
+ALIGNED_TYPE(XPVFM);
+ALIGNED_TYPE(XPVIO);
+
#define HADNV FALSE
#define NONV TRUE
@@ -971,48 +988,48 @@ static const struct body_details bodies_by_type[] = {
{ sizeof(XPVMG), copy_length(XPVMG, xnv_u), 0, SVt_PVMG, FALSE, HADNV,
HASARENA, FIT_ARENA(0, sizeof(XPVMG)) },
- { sizeof(regexp),
+ { sizeof(ALIGNED_TYPE_NAME(regexp)),
sizeof(regexp),
0,
SVt_REGEXP, TRUE, NONV, HASARENA,
- FIT_ARENA(0, sizeof(regexp))
+ FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(regexp)))
},
- { sizeof(XPVGV), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
- HASARENA, FIT_ARENA(0, sizeof(XPVGV)) },
+ { sizeof(ALIGNED_TYPE_NAME(XPVGV)), sizeof(XPVGV), 0, SVt_PVGV, TRUE, HADNV,
+ HASARENA, FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVGV))) },
- { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
- HASARENA, FIT_ARENA(0, sizeof(XPVLV)) },
+ { sizeof(ALIGNED_TYPE_NAME(XPVLV)), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV,
+ HASARENA, FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVLV))) },
- { sizeof(XPVAV),
+ { sizeof(ALIGNED_TYPE_NAME(XPVAV)),
copy_length(XPVAV, xav_alloc),
0,
SVt_PVAV, TRUE, NONV, HASARENA,
- FIT_ARENA(0, sizeof(XPVAV)) },
+ FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVAV))) },
- { sizeof(XPVHV),
+ { sizeof(ALIGNED_TYPE_NAME(XPVHV)),
copy_length(XPVHV, xhv_max),
0,
SVt_PVHV, TRUE, NONV, HASARENA,
- FIT_ARENA(0, sizeof(XPVHV)) },
+ FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVHV))) },
- { sizeof(XPVCV),
+ { sizeof(ALIGNED_TYPE_NAME(XPVCV)),
sizeof(XPVCV),
0,
SVt_PVCV, TRUE, NONV, HASARENA,
- FIT_ARENA(0, sizeof(XPVCV)) },
+ FIT_ARENA(0, sizeof(ALIGNED_TYPE_NAME(XPVCV))) },
- { sizeof(XPVFM),
+ { sizeof(ALIGNED_TYPE_NAME(XPVFM)),
sizeof(XPVFM),
0,
SVt_PVFM, TRUE, NONV, NOARENA,
- FIT_ARENA(20, sizeof(XPVFM)) },
+ FIT_ARENA(20, sizeof(ALIGNED_TYPE_NAME(XPVFM))) },
- { sizeof(XPVIO),
+ { sizeof(ALIGNED_TYPE_NAME(XPVIO)),
sizeof(XPVIO),
0,
SVt_PVIO, TRUE, NONV, HASARENA,
- FIT_ARENA(24, sizeof(XPVIO)) },
+ FIT_ARENA(24, sizeof(ALIGNED_TYPE_NAME(XPVIO))) },
};
#define new_body_allocated(sv_type) \
@@ -2086,10 +2103,6 @@ S_sv_2iuv_non_preserve(pTHX_ SV *const sv
/* If numtype is infnan, set the NV of the sv accordingly.
* If numtype is anything else, try setting the NV using Atof(PV). */
-#ifdef USING_MSVC6
-# pragma warning(push)
-# pragma warning(disable:4756;disable:4056)
-#endif
static void
S_sv_setnv(pTHX_ SV* sv, int numtype)
{
@@ -2118,9 +2131,6 @@ S_sv_setnv(pTHX_ SV* sv, int numtype)
SvPOK_on(sv); /* PV is okay, though. */
}
}
-#ifdef USING_MSVC6
-# pragma warning(pop)
-#endif
STATIC bool
S_sv_2iuv_common(pTHX_ SV *const sv)
@@ -2401,7 +2411,7 @@ S_sv_2iuv_common(pTHX_ SV *const sv)
SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
}
}
- else {
+ else {
if (isGV_with_GP(sv))
return glob_2number(MUTABLE_GV(sv));
@@ -2519,6 +2529,8 @@ Return the unsigned integer value of an SV, doing any necessary string
conversion. If C<flags> has the C<SV_GMAGIC> bit set, does an C<mg_get()> first.
Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
+=for apidoc Amnh||SV_GMAGIC
+
=cut
*/
@@ -2794,7 +2806,7 @@ Perl_sv_2nv_flags(pTHX_ SV *const sv, const I32 flags)
SvFLAGS(sv) &= ~(SVf_IOK|SVf_NOK);
#endif /* NV_PRESERVES_UV */
}
- else {
+ else {
if (isGV_with_GP(sv)) {
glob_2number(MUTABLE_GV(sv));
return 0.0;
@@ -3313,8 +3325,9 @@ Perl_sv_copypv_flags(pTHX_ SV *const dsv, SV *const ssv, const I32 flags)
=for apidoc sv_2pvbyte
Return a pointer to the byte-encoded representation of the SV, and set C<*lp>
-to its length. May cause the SV to be downgraded from UTF-8 as a
-side-effect.
+to its length. If the SV is marked as being encoded as UTF-8, it will
+downgrade it to a byte string as a side-effect, if possible. If the SV cannot
+be downgraded, this croaks.
Usually accessed via the C<SvPVbyte> macro.
@@ -3322,18 +3335,19 @@ Usually accessed via the C<SvPVbyte> macro.
*/
char *
-Perl_sv_2pvbyte(pTHX_ SV *sv, STRLEN *const lp)
+Perl_sv_2pvbyte_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
{
- PERL_ARGS_ASSERT_SV_2PVBYTE;
+ PERL_ARGS_ASSERT_SV_2PVBYTE_FLAGS;
- SvGETMAGIC(sv);
+ if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
+ mg_get(sv);
if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
|| isGV_with_GP(sv) || SvROK(sv)) {
SV *sv2 = sv_newmortal();
sv_copypv_nomg(sv2,sv);
sv = sv2;
}
- sv_utf8_downgrade(sv,0);
+ sv_utf8_downgrade_nomg(sv,0);
return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
}
@@ -3349,15 +3363,18 @@ Usually accessed via the C<SvPVutf8> macro.
*/
char *
-Perl_sv_2pvutf8(pTHX_ SV *sv, STRLEN *const lp)
+Perl_sv_2pvutf8_flags(pTHX_ SV *sv, STRLEN *const lp, const U32 flags)
{
- PERL_ARGS_ASSERT_SV_2PVUTF8;
+ PERL_ARGS_ASSERT_SV_2PVUTF8_FLAGS;
+ if (SvGMAGICAL(sv) && (flags & SV_GMAGIC))
+ mg_get(sv);
if (((SvREADONLY(sv) || SvFAKE(sv)) && !SvIsCOW(sv))
- || isGV_with_GP(sv) || SvROK(sv))
- sv = sv_mortalcopy(sv);
- else
- SvGETMAGIC(sv);
+ || isGV_with_GP(sv) || SvROK(sv)) {
+ SV *sv2 = sv_newmortal();
+ sv_copypv_nomg(sv2,sv);
+ sv = sv2;
+ }
sv_utf8_upgrade_nomg(sv);
return lp ? SvPV_nomg(sv,*lp) : SvPV_nomg_nolen(sv);
}
@@ -3649,19 +3666,30 @@ true, croaks.
This is not a general purpose Unicode to byte encoding interface:
use the C<Encode> extension for that.
+This function process get magic on C<sv>.
+
+=for apidoc sv_utf8_downgrade_nomg
+
+Like C<sv_utf8_downgrade>, but does not process get magic on C<sv>.
+
+=for apidoc sv_utf8_downgrade_flags
+
+Like C<sv_utf8_downgrade>, but with additional C<flags>.
+If C<flags> has C<SV_GMAGIC> bit set, processes get magic on C<sv>.
+
=cut
*/
bool
-Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
+Perl_sv_utf8_downgrade_flags(pTHX_ SV *const sv, const bool fail_ok, const U32 flags)
{
- PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE;
+ PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE_FLAGS;
if (SvPOKp(sv) && SvUTF8(sv)) {
if (SvCUR(sv)) {
U8 *s;
STRLEN len;
- int mg_flags = SV_GMAGIC;
+ U32 mg_flags = flags & SV_GMAGIC;
if (SvIsCOW(sv)) {
S_sv_uncow(aTHX_ sv, 0);
@@ -3671,7 +3699,7 @@ Perl_sv_utf8_downgrade(pTHX_ SV *const sv, const bool fail_ok)
MAGIC * mg = mg_find(sv, PERL_MAGIC_regex_global);
if (mg && mg->mg_len > 0 && mg->mg_flags & MGf_BYTES) {
mg->mg_len = sv_pos_b2u_flags(sv, mg->mg_len,
- SV_GMAGIC|SV_CONST_RETURN);
+ mg_flags|SV_CONST_RETURN);
mg_flags = 0; /* sv_pos_b2u does get magic */
}
if ((mg = mg_find(sv, PERL_MAGIC_utf8)))
@@ -3811,6 +3839,8 @@ C<SvSetMagicSV_nosteal>.
This is the primary function for copying scalars, and most other
copy-ish functions and macros use this underneath.
+=for apidoc Amnh||SV_NOSTEAL
+
=cut
*/
@@ -4931,6 +4961,9 @@ The C<len> parameter indicates the number of
bytes to be copied. If the C<ptr> argument is NULL the SV will become
undefined. Does not handle 'set' magic. See C<L</sv_setpvn_mg>>.
+The UTF-8 flag is not changed by this function. A terminating NUL byte is
+guaranteed.
+
=cut
*/
@@ -5100,6 +5133,9 @@ and the realloc
will be skipped (i.e. the buffer is actually at least 1 byte longer than
C<len>, and already meets the requirements for storing in C<SvPVX>).
+=for apidoc Amnh||SV_SMAGIC
+=for apidoc Amnh||SV_HAS_TRAILING_NUL
+
=cut
*/
@@ -5266,6 +5302,8 @@ This function is expected to be used to signal to perl that this SV is
about to be written to, and any extra book-keeping needs to be taken care
of. Hence, it croaks on read-only values.
+=for apidoc Amnh||SV_COW_DROP_PV
+
=cut
*/
@@ -5472,6 +5510,10 @@ C<mg_set> on C<dsv> afterwards if appropriate.
C<sv_catpvn> and C<sv_catpvn_nomg> are implemented
in terms of this function.
+=for apidoc Amnh||SV_CATUTF8
+=for apidoc Amnh||SV_CATBYTES
+=for apidoc Amnh||SV_SMAGIC
+
=cut
*/
@@ -6637,9 +6679,6 @@ Perl_sv_clear(pTHX_ SV *const orig_sv)
sv_del_backref(MUTABLE_SV(stash), sv);
goto freescalar;
case SVt_PVHV:
- if (PL_last_swash_hv == (const HV *)sv) {
- PL_last_swash_hv = NULL;
- }
if (HvTOTALKEYS((HV*)sv) > 0) {
const HEK *hek;
/* this statement should match the one at the beginning of
@@ -9227,6 +9266,11 @@ The new SV is marked as mortal. It will be destroyed "soon", either by an
explicit call to C<FREETMPS>, or by an implicit call at places such as
statement boundaries. See also C<L</sv_newmortal>> and C<L</sv_2mortal>>.
+=for apidoc sv_mortalcopy_flags
+
+Like C<sv_mortalcopy>, but the extra C<flags> are passed to the
+C<sv_setsv_flags>.
+
=cut
*/
@@ -9290,6 +9334,9 @@ C<newSVpvn_utf8()> is a convenience wrapper for this function, defined as
#define newSVpvn_utf8(s, len, u) \
newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
+=for apidoc Amnh||SVf_UTF8
+=for apidoc Amnh||SVs_TEMP
+
=cut
*/
@@ -10120,7 +10167,7 @@ Perl_sv_pvn_force_flags(pTHX_ SV *const sv, STRLEN *const lp, const I32 flags)
=for apidoc sv_pvbyten_force
The backend for the C<SvPVbytex_force> macro. Always use the macro
-instead.
+instead. If the SV cannot be downgraded from UTF-8, this croaks.
=cut
*/
@@ -10279,8 +10326,12 @@ Perl_sv_isobject(pTHX_ SV *sv)
=for apidoc sv_isa
Returns a boolean indicating whether the SV is blessed into the specified
-class. This does not check for subtypes; use C<sv_derived_from> to verify
-an inheritance relationship.
+class.
+
+This does not check for subtypes or method overloading. Use C<sv_isa_sv> to
+verify an inheritance relationship in the same way as the C<isa> operator by
+respecting any C<isa()> method overloading; or C<sv_derived_from_sv> to test
+directly on the actual object type.
=cut
*/
@@ -10599,6 +10650,8 @@ C<SV_IMMEDIATE_UNREF> to force the reference count to be decremented
different from one or the reference being a readonly SV).
See C<L</SvROK_off>>.
+=for apidoc Amnh||SV_IMMEDIATE_UNREF
+
=cut
*/
@@ -10710,7 +10763,12 @@ Perl_sv_setpviv_mg(pTHX_ SV *const sv, const IV iv)
{
PERL_ARGS_ASSERT_SV_SETPVIV_MG;
+ GCC_DIAG_IGNORE_STMT(-Wdeprecated-declarations);
+
sv_setpviv(sv, iv);
+
+ GCC_DIAG_RESTORE_STMT;
+
SvSETMAGIC(sv);
}
@@ -11557,7 +11615,9 @@ S_hextract(pTHX_ const NV nv, int* exponent, bool *subnormal,
* The rest of the args have the same meaning as the local vars of the
* same name within Perl_sv_vcatpvfn_flags().
*
- * It assumes the caller has already done STORE_LC_NUMERIC_SET_TO_NEEDED();
+ * The caller's determination of IN_LC(LC_NUMERIC), passed as in_lc_numeric,
+ * is used to ensure we do the right thing when we need to access the locale's
+ * numeric radix.
*
* It requires the caller to make buf large enough.
*/
@@ -11566,7 +11626,7 @@ static STRLEN
S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
const NV nv, const vcatpvfn_long_double_t fv,
bool has_precis, STRLEN precis, STRLEN width,
- bool alt, char plus, bool left, bool fill)
+ bool alt, char plus, bool left, bool fill, bool in_lc_numeric)
{
/* Hexadecimal floating point. */
char* p = buf;
@@ -11773,17 +11833,19 @@ S_format_hexfp(pTHX_ char * const buf, const STRLEN bufsize, const char c,
if (hexradix) {
#ifndef USE_LOCALE_NUMERIC
- *p++ = '.';
+ *p++ = '.';
#else
- if (IN_LC(LC_NUMERIC)) {
- STRLEN n;
+ if (in_lc_numeric) {
+ STRLEN n;
+ WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
const char* r = SvPV(PL_numeric_radix_sv, n);
Copy(r, p, n, char);
- p += n;
- }
- else {
- *p++ = '.';
- }
+ });
+ p += n;
+ }
+ else {
+ *p++ = '.';
+ }
#endif
}
@@ -11889,9 +11951,10 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
char ebuf[IV_DIG * 4 + NV_DIG + 32];
bool no_redundant_warning = FALSE; /* did we use any explicit format parameter index? */
#ifdef USE_LOCALE_NUMERIC
- DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
- bool lc_numeric_set = FALSE; /* called STORE_LC_NUMERIC_SET_TO_NEEDED? */
+ bool have_in_lc_numeric = FALSE;
#endif
+ /* we never change this unless USE_LOCALE_NUMERIC */
+ bool in_lc_numeric = FALSE;
PERL_ARGS_ASSERT_SV_VCATPVFN_FLAGS;
PERL_UNUSED_ARG(maybe_tainted);
@@ -12154,15 +12217,15 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
/* the asterisk specified a width */
{
int i = 0;
- SV *sv = NULL;
+ SV *width_sv = NULL;
if (args)
i = va_arg(*args, int);
else {
ix = ix ? ix - 1 : svix++;
- sv = (ix < sv_count) ? svargs[ix]
+ width_sv = (ix < sv_count) ? svargs[ix]
: (arg_missing = TRUE, (SV*)NULL);
}
- width = S_sprintf_arg_num_val(aTHX_ args, i, sv, &left);
+ width = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &left);
}
}
else if (*q == 'v') {
@@ -12209,17 +12272,17 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
{
int i = 0;
- SV *sv = NULL;
+ SV *width_sv = NULL;
bool neg = FALSE;
if (args)
i = va_arg(*args, int);
else {
ix = ix ? ix - 1 : svix++;
- sv = (ix < sv_count) ? svargs[ix]
+ width_sv = (ix < sv_count) ? svargs[ix]
: (arg_missing = TRUE, (SV*)NULL);
}
- precis = S_sprintf_arg_num_val(aTHX_ args, i, sv, &neg);
+ precis = S_sprintf_arg_num_val(aTHX_ args, i, width_sv, &neg);
has_precis = !neg;
/* ignore negative precision */
if (!has_precis)
@@ -12319,7 +12382,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
goto string;
}
- if (vectorize && !strchr("BbDdiOouUXx", c))
+ if (vectorize && !memCHRs("BbDdiOouUXx", c))
goto unknown;
/* get next arg (individual branches do their own va_arg()
@@ -12461,7 +12524,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
* being allowed for %c (ideally we should warn on e.g. '%hc').
* Setting a default intsize, along with a positive
* (which signals unsigned) base, causes, for C-ish use, the
- * va_arg to be interpreted as as unsigned int, when it's
+ * va_arg to be interpreted as an unsigned int, when it's
* actually signed, which will convert -ve values to high +ve
* values. Note that unlike the libc %c, values > 255 will
* convert to high unicode points rather than being truncated
@@ -12962,33 +13025,31 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
* below, or implicitly, via an snprintf() variant.
* Note also things like ps_AF.utf8 which has
* "\N{ARABIC DECIMAL SEPARATOR} as a radix point */
- if (!lc_numeric_set) {
- /* only set once and reuse in-locale value on subsequent
- * iterations.
- * XXX what happens if we die in an eval?
- */
- STORE_LC_NUMERIC_SET_TO_NEEDED();
- lc_numeric_set = TRUE;
+ if (! have_in_lc_numeric) {
+ in_lc_numeric = IN_LC(LC_NUMERIC);
+ have_in_lc_numeric = TRUE;
}
- if (IN_LC(LC_NUMERIC)) {
- /* this can't wrap unless PL_numeric_radix_sv is a string
- * consuming virtually all the 32-bit or 64-bit address
- * space
- */
- float_need += (SvCUR(PL_numeric_radix_sv) - 1);
-
- /* floating-point formats only get utf8 if the radix point
- * is utf8. All other characters in the string are < 128
- * and so can be safely appended to both a non-utf8 and utf8
- * string as-is.
- * Note that this will convert the output to utf8 even if
- * the radix point didn't get output.
- */
- if (SvUTF8(PL_numeric_radix_sv) && !has_utf8) {
- sv_utf8_upgrade(sv);
- has_utf8 = TRUE;
- }
+ if (in_lc_numeric) {
+ WITH_LC_NUMERIC_SET_TO_NEEDED_IN(TRUE, {
+ /* this can't wrap unless PL_numeric_radix_sv is a string
+ * consuming virtually all the 32-bit or 64-bit address
+ * space
+ */
+ float_need += (SvCUR(PL_numeric_radix_sv) - 1);
+
+ /* floating-point formats only get utf8 if the radix point
+ * is utf8. All other characters in the string are < 128
+ * and so can be safely appended to both a non-utf8 and utf8
+ * string as-is.
+ * Note that this will convert the output to utf8 even if
+ * the radix point didn't get output.
+ */
+ if (SvUTF8(PL_numeric_radix_sv) && !has_utf8) {
+ sv_utf8_upgrade(sv);
+ has_utf8 = TRUE;
+ }
+ });
}
#endif
@@ -13063,7 +13124,9 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
&& !fill
&& intsize != 'q'
) {
- SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis);
+ WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
+ SNPRINTF_G(fv, ebuf, sizeof(ebuf), precis)
+ );
elen = strlen(ebuf);
eptr = ebuf;
goto float_concat;
@@ -13083,6 +13146,13 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
if (float_need < width)
float_need = width;
+ if (float_need > INT_MAX) {
+ /* snprintf() returns an int, and we use that return value,
+ so die horribly if the expected size is too large for int
+ */
+ Perl_croak(aTHX_ "Numeric format result too large");
+ }
+
if (PL_efloatsize <= float_need) {
/* PL_efloatbuf should be at least 1 greater than
* float_need to allow a trailing \0 to be returned by
@@ -13101,7 +13171,7 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
if (UNLIKELY(hexfp)) {
elen = S_format_hexfp(aTHX_ PL_efloatbuf, PL_efloatsize, c,
nv, fv, has_precis, precis, width,
- alt, plus, left, fill);
+ alt, plus, left, fill, in_lc_numeric);
}
else {
char *ptr = ebuf + sizeof ebuf;
@@ -13154,25 +13224,26 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
#ifdef USE_QUADMATH
{
- const char* qfmt = quadmath_format_single(ptr);
- if (!qfmt)
+ if (!quadmath_format_valid(ptr))
Perl_croak_nocontext("panic: quadmath invalid format \"%s\"", ptr);
- elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
- qfmt, nv);
+ WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
+ elen = quadmath_snprintf(PL_efloatbuf, PL_efloatsize,
+ ptr, nv);
+ );
if ((IV)elen == -1) {
- if (qfmt != ptr)
- SAVEFREEPV(qfmt);
- Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
+ Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", ptr);
}
- if (qfmt != ptr)
- Safefree(qfmt);
}
#elif defined(HAS_LONG_DOUBLE)
- elen = ((intsize == 'q')
- ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
- : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv));
+ WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
+ elen = ((intsize == 'q')
+ ? my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
+ : my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, (double)fv))
+ );
#else
- elen = my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv);
+ WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric,
+ elen = my_snprintf(PL_efloatbuf, PL_efloatsize, ptr, fv)
+ );
#endif
GCC_DIAG_RESTORE_STMT;
}
@@ -13403,16 +13474,6 @@ Perl_sv_vcatpvfn_flags(pTHX_ SV *const sv, const char *const pat, const STRLEN p
magic_setutf8(sv,mg); /* clear UTF8 cache */
}
SvTAINT(sv);
-
-#ifdef USE_LOCALE_NUMERIC
-
- if (lc_numeric_set) {
- RESTORE_LC_NUMERIC(); /* Done outside loop, so don't have to
- save/restore each iteration. */
- }
-
-#endif
-
}
/* =========================================================================
@@ -14562,7 +14623,7 @@ Perl_cx_dup(pTHX_ PERL_CONTEXT *cxs, I32 ix, I32 max, CLONE_PARAMS* param)
/* XXX should this sv_dup_inc? Or only if CxEVAL_TXT_REFCNTED ???? */
ncx->blk_eval.cur_text = sv_dup(ncx->blk_eval.cur_text, param);
ncx->blk_eval.cv = cv_dup(ncx->blk_eval.cv, param);
- /* XXX what do do with cur_top_env ???? */
+ /* XXX what to do with cur_top_env ???? */
break;
case CXt_LOOP_LAZYSV:
ncx->blk_loop.state_u.lazysv.end
@@ -14652,6 +14713,7 @@ Perl_si_dup(pTHX_ PERL_SI *si, CLONE_PARAMS* param)
nsi->si_stack = av_dup_inc(si->si_stack, param);
nsi->si_cxix = si->si_cxix;
+ nsi->si_cxsubix = si->si_cxsubix;
nsi->si_cxmax = si->si_cxmax;
nsi->si_cxstack = cx_dup(si->si_cxstack, si->si_cxix, si->si_cxmax, param);
nsi->si_type = si->si_type;
@@ -15051,16 +15113,15 @@ C<CLONEf_KEEP_PTR_TABLE> -
C<perl_clone> keeps a ptr_table with the pointer of the old
variable as a key and the new variable as a value,
this allows it to check if something has been cloned and not
-clone it again but rather just use the value and increase the
-refcount. If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill
-the ptr_table using the function
-C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>,
-reason to keep it around is if you want to dup some of your own
-variable who are outside the graph perl scans, an example of this
-code is in F<threads.xs> create.
+clone it again, but rather just use the value and increase the
+refcount.
+If C<KEEP_PTR_TABLE> is not set then C<perl_clone> will kill the ptr_table
+using the function S<C<ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;>>.
+A reason to keep it around is if you want to dup some of your own
+variables which are outside the graph that perl scans.
C<CLONEf_CLONE_HOST> -
-This is a win32 thing, it is ignored on unix, it tells perls
+This is a win32 thing, it is ignored on unix, it tells perl's
win32host code (which is c++) to clone itself, this is needed on
win32 if you want to run two threads at the same time,
if you just want to do some stuff in a separate perl interpreter
@@ -15285,6 +15346,8 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
PL_origalen = proto_perl->Iorigalen;
PL_sighandlerp = proto_perl->Isighandlerp;
+ PL_sighandler1p = proto_perl->Isighandler1p;
+ PL_sighandler3p = proto_perl->Isighandler3p;
PL_runops = proto_perl->Irunops;
@@ -15330,9 +15393,6 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
/* Recursion stopper for PerlIO_find_layer */
PL_in_load_module = proto_perl->Iin_load_module;
- /* sort() routine */
- PL_sort_RealCmp = proto_perl->Isort_RealCmp;
-
/* Not really needed/useful since the reenrant_retint is "volatile",
* but do it for consistency's sake. */
PL_reentrant_retint = proto_perl->Ireentrant_retint;
@@ -15347,13 +15407,6 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
PL_globhook = proto_perl->Iglobhook;
- /* swatch cache */
- PL_last_swash_hv = NULL; /* reinits on demand */
- PL_last_swash_klen = 0;
- PL_last_swash_key[0]= '\0';
- PL_last_swash_tmps = (U8*)NULL;
- PL_last_swash_slen = 0;
-
PL_srand_called = proto_perl->Isrand_called;
Copy(&(proto_perl->Irandom_state), &PL_random_state, 1, PL_RANDOM_STATE_TYPE);
@@ -15649,14 +15702,67 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags,
# endif
#endif /* !USE_LOCALE_NUMERIC */
+#ifdef HAS_MBRLEN
+ PL_mbrlen_ps = proto_perl->Imbrlen_ps;
+#endif
+#ifdef HAS_MBRTOWC
+ PL_mbrtowc_ps = proto_perl->Imbrtowc_ps;
+#endif
+#ifdef HAS_WCRTOMB
+ PL_wcrtomb_ps = proto_perl->Iwcrtomb_ps;
+#endif
+
PL_langinfo_buf = NULL;
PL_langinfo_bufsize = 0;
PL_setlocale_buf = NULL;
PL_setlocale_bufsize = 0;
- /* utf8 character class swashes */
+ /* Unicode inversion lists */
+
+ PL_AboveLatin1 = sv_dup_inc(proto_perl->IAboveLatin1, param);
+ PL_Assigned_invlist = sv_dup_inc(proto_perl->IAssigned_invlist, param);
+ PL_GCB_invlist = sv_dup_inc(proto_perl->IGCB_invlist, param);
+ PL_HasMultiCharFold = sv_dup_inc(proto_perl->IHasMultiCharFold, param);
+ PL_InMultiCharFold = sv_dup_inc(proto_perl->IInMultiCharFold, param);
+ PL_Latin1 = sv_dup_inc(proto_perl->ILatin1, param);
+ PL_LB_invlist = sv_dup_inc(proto_perl->ILB_invlist, param);
+ PL_SB_invlist = sv_dup_inc(proto_perl->ISB_invlist, param);
+ PL_SCX_invlist = sv_dup_inc(proto_perl->ISCX_invlist, param);
+ PL_UpperLatin1 = sv_dup_inc(proto_perl->IUpperLatin1, param);
+ PL_in_some_fold = sv_dup_inc(proto_perl->Iin_some_fold, param);
+ PL_utf8_foldclosures = sv_dup_inc(proto_perl->Iutf8_foldclosures, param);
+ PL_utf8_idcont = sv_dup_inc(proto_perl->Iutf8_idcont, param);
+ PL_utf8_idstart = sv_dup_inc(proto_perl->Iutf8_idstart, param);
+ PL_utf8_perl_idcont = sv_dup_inc(proto_perl->Iutf8_perl_idcont, param);
+ PL_utf8_perl_idstart = sv_dup_inc(proto_perl->Iutf8_perl_idstart, param);
+ PL_utf8_xidcont = sv_dup_inc(proto_perl->Iutf8_xidcont, param);
+ PL_utf8_xidstart = sv_dup_inc(proto_perl->Iutf8_xidstart, param);
+ PL_WB_invlist = sv_dup_inc(proto_perl->IWB_invlist, param);
+ for (i = 0; i < POSIX_CC_COUNT; i++) {
+ PL_XPosix_ptrs[i] = sv_dup_inc(proto_perl->IXPosix_ptrs[i], param);
+ if (i != _CC_CASED && i != _CC_VERTSPACE) {
+ PL_Posix_ptrs[i] = sv_dup_inc(proto_perl->IPosix_ptrs[i], param);
+ }
+ }
+ PL_Posix_ptrs[_CC_CASED] = PL_Posix_ptrs[_CC_ALPHA];
+ PL_Posix_ptrs[_CC_VERTSPACE] = NULL;
+
+ PL_utf8_toupper = sv_dup_inc(proto_perl->Iutf8_toupper, param);
+ PL_utf8_totitle = sv_dup_inc(proto_perl->Iutf8_totitle, param);
+ PL_utf8_tolower = sv_dup_inc(proto_perl->Iutf8_tolower, param);
+ PL_utf8_tofold = sv_dup_inc(proto_perl->Iutf8_tofold, param);
+ PL_utf8_tosimplefold = sv_dup_inc(proto_perl->Iutf8_tosimplefold, param);
+ PL_utf8_charname_begin = sv_dup_inc(proto_perl->Iutf8_charname_begin, param);
+ PL_utf8_charname_continue = sv_dup_inc(proto_perl->Iutf8_charname_continue, param);
+ PL_utf8_mark = sv_dup_inc(proto_perl->Iutf8_mark, param);
+ PL_InBitmap = sv_dup_inc(proto_perl->IInBitmap, param);
+ PL_CCC_non0_non230 = sv_dup_inc(proto_perl->ICCC_non0_non230, param);
+ PL_Private_Use = sv_dup_inc(proto_perl->IPrivate_Use, param);
+
+#if 0
PL_seen_deprecated_macro = hv_dup_inc(proto_perl->Iseen_deprecated_macro, param);
+#endif
if (proto_perl->Ipsig_pend) {
Newxz(PL_psig_pend, SIG_SIZE, int);
@@ -16477,7 +16583,7 @@ S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
negate ? - SvIV(cSVOPx_sv(kid)) : SvIV(cSVOPx_sv(kid)),
FUV_SUBSCRIPT_ARRAY);
}
- else {
+ else {
/* index is an expression;
* attempt to find a match within the aggregate */
if (obase->op_type == OP_HELEM) {
@@ -16659,8 +16765,11 @@ S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
if (agg_targ)
sv = PAD_SV(agg_targ);
- else if (agg_gv)
+ else if (agg_gv) {
sv = is_hv ? MUTABLE_SV(GvHV(agg_gv)) : MUTABLE_SV(GvAV(agg_gv));
+ if (!sv)
+ break;
+ }
else
break;
@@ -16686,7 +16795,7 @@ S_find_uninit_var(pTHX_ const OP *const obase, const SV *const uninit_sv,
: varname(agg_gv, '@', agg_targ,
NULL, index_const_iv, FUV_SUBSCRIPT_ARRAY);
}
- else {
+ else {
/* index is an var */
if (is_hv) {
SV * const keysv = find_hash_subscript((const HV*)sv, uninit_sv);
diff --git a/gnu/usr.bin/perl/sv.h b/gnu/usr.bin/perl/sv.h
index 3a648e49712..8c1356682ec 100644
--- a/gnu/usr.bin/perl/sv.h
+++ b/gnu/usr.bin/perl/sv.h
@@ -15,7 +15,7 @@
/*
=head1 SV Flags
-=for apidoc AmU||svtype
+=for apidoc AmnU||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.
@@ -72,52 +72,52 @@ hold C<undef> or a string. C<SVt_PVIV> is a superset of C<SVt_PV> and C<SVt_IV>
C<SVt_PVNV> is similar. C<SVt_PVMG> can hold anything C<SVt_PVNV> can hold, but it
can, but does not have to, be blessed or magical.
-=for apidoc AmU||SVt_NULL
+=for apidoc AmnU||SVt_NULL
Type flag for scalars. See L</svtype>.
-=for apidoc AmU||SVt_IV
+=for apidoc AmnU||SVt_IV
Type flag for scalars. See L</svtype>.
-=for apidoc AmU||SVt_NV
+=for apidoc AmnU||SVt_NV
Type flag for scalars. See L</svtype>.
-=for apidoc AmU||SVt_PV
+=for apidoc AmnU||SVt_PV
Type flag for scalars. See L</svtype>.
-=for apidoc AmU||SVt_PVIV
+=for apidoc AmnU||SVt_PVIV
Type flag for scalars. See L</svtype>.
-=for apidoc AmU||SVt_PVNV
+=for apidoc AmnU||SVt_PVNV
Type flag for scalars. See L</svtype>.
-=for apidoc AmU||SVt_PVMG
+=for apidoc AmnU||SVt_PVMG
Type flag for scalars. See L</svtype>.
-=for apidoc AmU||SVt_INVLIST
-Type flag for scalars. See L</svtype>.
+=for apidoc CmnU||SVt_INVLIST
+Type flag for scalars. See L<perlapi/svtype>.
-=for apidoc AmU||SVt_REGEXP
+=for apidoc AmnU||SVt_REGEXP
Type flag for regular expressions. See L</svtype>.
-=for apidoc AmU||SVt_PVGV
+=for apidoc AmnU||SVt_PVGV
Type flag for typeglobs. See L</svtype>.
-=for apidoc AmU||SVt_PVLV
+=for apidoc AmnU||SVt_PVLV
Type flag for scalars. See L</svtype>.
-=for apidoc AmU||SVt_PVAV
+=for apidoc AmnU||SVt_PVAV
Type flag for arrays. See L</svtype>.
-=for apidoc AmU||SVt_PVHV
+=for apidoc AmnU||SVt_PVHV
Type flag for hashes. See L</svtype>.
-=for apidoc AmU||SVt_PVCV
+=for apidoc AmnU||SVt_PVCV
Type flag for subroutines. See L</svtype>.
-=for apidoc AmU||SVt_PVFM
+=for apidoc AmnU||SVt_PVFM
Type flag for formats. See L</svtype>.
-=for apidoc AmU||SVt_PVIO
+=for apidoc AmnU||SVt_PVIO
Type flag for I/O objects. See L</svtype>.
=cut
@@ -149,6 +149,9 @@ typedef enum {
SVt_PVCV, /* 13 */
SVt_PVFM, /* 14 */
SVt_PVIO, /* 15 */
+ /* 16-31: Unused, though one should be reserved for a
+ * freed sv, if the other 3 bits below the flags ones
+ * get allocated */
SVt_LAST /* keep last in enum. used to size arrays */
} svtype;
@@ -157,10 +160,10 @@ typedef enum {
* tables are in perl.h. There are also two affected names tables in dump.c,
* one in B.xs, and 'bodies_by_type[]' in sv.c.
*
- * The bits that match 0xf0 are CURRENTLY UNUSED, except that 0xFF means a
- * freed SV. The bits above that are for flags, like SVf_IOK */
+ * The bits that match 0xe0 are CURRENTLY UNUSED
+ * The bits above that are for flags, like SVf_IOK */
-#define SVt_MASK 0xf /* smallest bitmask that covers all types */
+#define SVt_MASK 0x1f /* smallest bitmask that covers all types */
#ifndef PERL_CORE
/* Fast Boyer Moore tables are now stored in magic attached to PVMGs */
@@ -272,18 +275,18 @@ struct p5rx {
Returns the value of the object's reference count. Exposed
to perl code via Internals::SvREFCNT().
-=for apidoc Am|SV*|SvREFCNT_inc|SV* sv
+=for apidoc SvREFCNT_inc
Increments the reference count of the given SV, returning the SV.
-All of the following C<SvREFCNT_inc>* macros are optimized versions of
+All of the following C<SvREFCNT_inc>* are optimized versions of
C<SvREFCNT_inc>, and can be replaced with C<SvREFCNT_inc>.
-=for apidoc Am|SV*|SvREFCNT_inc_NN|SV* 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.
-=for apidoc Am|void|SvREFCNT_inc_void|SV* sv
+=for apidoc SvREFCNT_inc_void
Same as C<SvREFCNT_inc>, but can only be used if you don't need the
return value. The macro doesn't need to return a meaningful value.
@@ -312,10 +315,10 @@ 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|void|SvREFCNT_dec|SV* sv
+=for apidoc SvREFCNT_dec
Decrements the reference count of the given SV. C<sv> may be C<NULL>.
-=for apidoc Am|void|SvREFCNT_dec_NN|SV* sv
+=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.
@@ -334,10 +337,10 @@ perform the upgrade if necessary. See C<L</svtype>>.
#define SvFLAGS(sv) (sv)->sv_flags
#define SvREFCNT(sv) (sv)->sv_refcnt
-#define SvREFCNT_inc(sv) S_SvREFCNT_inc(MUTABLE_SV(sv))
+#define SvREFCNT_inc(sv) Perl_SvREFCNT_inc(MUTABLE_SV(sv))
#define SvREFCNT_inc_simple(sv) SvREFCNT_inc(sv)
-#define SvREFCNT_inc_NN(sv) S_SvREFCNT_inc_NN(MUTABLE_SV(sv))
-#define SvREFCNT_inc_void(sv) S_SvREFCNT_inc_void(MUTABLE_SV(sv))
+#define SvREFCNT_inc_NN(sv) Perl_SvREFCNT_inc_NN(MUTABLE_SV(sv))
+#define SvREFCNT_inc_void(sv) Perl_SvREFCNT_inc_void(MUTABLE_SV(sv))
/* These guys don't need the curly blocks */
#define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
@@ -345,8 +348,8 @@ perform the upgrade if necessary. See C<L</svtype>>.
#define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT(MUTABLE_SV(sv)))
#define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT(MUTABLE_SV(sv)))
-#define SvREFCNT_dec(sv) S_SvREFCNT_dec(aTHX_ MUTABLE_SV(sv))
-#define SvREFCNT_dec_NN(sv) S_SvREFCNT_dec_NN(aTHX_ MUTABLE_SV(sv))
+#define SvREFCNT_dec(sv) Perl_SvREFCNT_dec(aTHX_ MUTABLE_SV(sv))
+#define SvREFCNT_dec_NN(sv) Perl_SvREFCNT_dec_NN(aTHX_ MUTABLE_SV(sv))
#define SVTYPEMASK 0xff
#define SvTYPE(sv) ((svtype)((sv)->sv_flags & SVTYPEMASK))
@@ -429,7 +432,7 @@ perform the upgrade if necessary. See C<L</svtype>>.
#define PRIVSHIFT 4 /* (SVp_?OK >> PRIVSHIFT) == SVf_?OK */
-/* SVf_AMAGIC means that the stash *may* have have overload methods. It's
+/* SVf_AMAGIC means that the stash *may* have overload methods. It's
* set each time a function is compiled into a stash, and is reset by the
* overload code when called for the first time and finds that there are
* no overload methods. Note that this used to be set on the object; but
@@ -699,12 +702,12 @@ Tells an SV that it is an unsigned integer and disables all other C<OK> bits.
=for apidoc Am|bool|SvIOK_UV|SV* sv
Returns a boolean indicating whether the SV contains an integer that must be
interpreted as unsigned. A non-negative integer whose value is within the
-range of both an IV and a UV may be be flagged as either C<SvUOK> or C<SVIOK>.
+range of both an IV and a UV may be flagged as either C<SvUOK> or C<SvIOK>.
=for apidoc Am|bool|SvUOK|SV* sv
Returns a boolean indicating whether the SV contains an integer that must be
interpreted as unsigned. A non-negative integer whose value is within the
-range of both an IV and a UV may be be flagged as either C<SvUOK> or C<SVIOK>.
+range of both an IV and a UV may be flagged as either C<SvUOK> or C<SvIOK>.
=for apidoc Am|bool|SvIOK_notUV|SV* sv
Returns a boolean indicating whether the SV contains a signed integer.
@@ -766,6 +769,9 @@ Only use when you are sure C<SvIOK> is true. See also C<L</SvIV>>.
Returns the raw value in the SV's UV slot, without checks or conversions.
Only use when you are sure C<SvIOK> is true. See also C<L</SvUV>>.
+=for apidoc AmD|UV|SvUVXx|SV* sv
+This is an unnecessary synonym for L</SvUVX>
+
=for apidoc Am|NV|SvNVX|SV* sv
Returns the raw value in the SV's NV slot, without checks or conversions.
Only use when you are sure C<SvNOK> is true. See also C<L</SvNV>>.
@@ -1078,8 +1084,8 @@ C<sv_force_normal> does nothing.
#define SvPADTMP_on(sv) (SvFLAGS(sv) |= SVs_PADTMP)
#define SvPADTMP_off(sv) (SvFLAGS(sv) &= ~SVs_PADTMP)
-#define SvPADSTALE_on(sv) S_SvPADSTALE_on(MUTABLE_SV(sv))
-#define SvPADSTALE_off(sv) S_SvPADSTALE_off(MUTABLE_SV(sv))
+#define SvPADSTALE_on(sv) Perl_SvPADSTALE_on(MUTABLE_SV(sv))
+#define SvPADSTALE_off(sv) Perl_SvPADSTALE_off(MUTABLE_SV(sv))
#define SvTEMP(sv) (SvFLAGS(sv) & SVs_TEMP)
#define SvTEMP_on(sv) (SvFLAGS(sv) |= SVs_TEMP)
@@ -1092,7 +1098,7 @@ C<sv_force_normal> does nothing.
/*
=for apidoc Am|U32|SvREADONLY|SV* sv
Returns true if the argument is readonly, otherwise returns false.
-Exposed to to perl code via Internals::SvREADONLY().
+Exposed to perl code via Internals::SvREADONLY().
=for apidoc Am|U32|SvREADONLY_on|SV* sv
Mark an object as readonly. Exactly what this means depends on the object
@@ -1170,7 +1176,11 @@ object type. Exposed to perl code via Internals::SvREADONLY().
# 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
+# ifdef PERL_CORE
+# define SvLEN(sv) (0 + ((XPV*) SvANY(sv))->xpv_len)
+# else
# define SvLEN(sv) ((XPV*) SvANY(sv))->xpv_len
+# 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)
@@ -1183,6 +1193,16 @@ object type. Exposed to perl code via Internals::SvREADONLY().
&& !(IoFLAGS(_svpvx) & IOf_FAKE_DIRP))); \
&((_svpvx)->sv_u.svu_pv); \
}))
+# ifdef PERL_CORE
+# define SvCUR(sv) \
+ ({ const SV *const _svcur = (const SV *)(sv); \
+ assert(PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]); \
+ assert(!isGV_with_GP(_svcur)); \
+ assert(!(SvTYPE(_svcur) == SVt_PVIO \
+ && !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))); \
+ (((XPV*) MUTABLE_PTR(SvANY(_svcur)))->xpv_cur); \
+ })
+# else
# define SvCUR(sv) \
(*({ const SV *const _svcur = (const SV *)(sv); \
assert(PL_valid_types_PVX[SvTYPE(_svcur) & SVt_MASK]); \
@@ -1191,6 +1211,7 @@ object type. Exposed to perl code via Internals::SvREADONLY().
&& !(IoFLAGS(_svcur) & IOf_FAKE_DIRP))); \
&(((XPV*) MUTABLE_PTR(SvANY(_svcur)))->xpv_cur); \
}))
+# endif
# define SvIVX(sv) \
(*({ const SV *const _svivx = (const SV *)(sv); \
assert(PL_valid_types_IVX[SvTYPE(_svivx) & SVt_MASK]); \
@@ -1586,27 +1607,59 @@ 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).
+See C<L</SvTRUEx>> for a version which guarantees to evaluate C<sv> only once.
+
=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.
+=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).
+
+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.
=for apidoc Am|char*|SvPVutf8|SV* sv|STRLEN len
Like C<SvPV>, but converts C<sv> to UTF-8 first if necessary.
+=for apidoc Am|char*|SvPVutf8_nomg|SV* sv|STRLEN len
+Like C<SvPVutf8>, but does not process get magic.
+
+=for apidoc Am|char*|SvPVutf8_or_null|SV* sv|STRLEN len
+Like C<SvPVutf8>, but when C<sv> is undef, returns C<NULL>.
+
+=for apidoc Am|char*|SvPVutf8_or_null_nomg|SV* sv|STRLEN len
+Like C<SvPVutf8_or_null>, but does not process get magic.
+
=for apidoc Am|char*|SvPVutf8_nolen|SV* sv
Like C<SvPV_nolen>, but converts C<sv> to UTF-8 first if necessary.
=for apidoc Am|char*|SvPVbyte_force|SV* sv|STRLEN len
-Like C<SvPV_force>, but converts C<sv> to byte representation first if necessary.
+Like C<SvPV_force>, 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*|SvPVbyte|SV* sv|STRLEN len
-Like C<SvPV>, but converts C<sv> to byte representation first if necessary.
+Like C<SvPV>, 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*|SvPVbyte_nomg|SV* sv|STRLEN len
+Like C<SvPVbyte>, but does not process get magic.
+
+=for apidoc Am|char*|SvPVbyte_or_null|SV* sv|STRLEN len
+Like C<SvPVbyte>, but when C<sv> is undef, returns C<NULL>.
+
+=for apidoc Am|char*|SvPVbyte_or_null_nomg|SV* sv|STRLEN len
+Like C<SvPVbyte_or_null>, but does not process get magic.
=for apidoc Am|char*|SvPVbyte_nolen|SV* sv
-Like C<SvPV_nolen>, but converts C<sv> to byte representation first if necessary.
+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.
@@ -1621,12 +1674,12 @@ 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.
+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.
+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
@@ -1726,6 +1779,20 @@ Like C<sv_catsv> but doesn't process magic.
(SvPOK_utf8_nog(sv) \
? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8(sv, &lp))
+#define SvPVutf8_or_null(sv, lp) \
+ (SvPOK_utf8_nog(sv) \
+ ? ((lp = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
+ ? sv_2pvutf8_flags(sv, &lp, 0) : ((lp = 0), NULL))
+
+#define SvPVutf8_nomg(sv, lp) \
+ (SvPOK_utf8_nog(sv) \
+ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvutf8_flags(sv, &lp, 0))
+
+#define SvPVutf8_or_null_nomg(sv, lp) \
+ (SvPOK_utf8_nog(sv) \
+ ? ((lp = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
+ ? sv_2pvutf8_flags(sv, &lp, 0) : ((lp = 0), NULL))
+
#define SvPVutf8_force(sv, lp) \
(SvPOK_utf8_pure_nogthink(sv) \
? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvutf8n_force(sv, &lp))
@@ -1740,6 +1807,20 @@ Like C<sv_catsv> but doesn't process magic.
(SvPOK_byte_nog(sv) \
? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
+#define SvPVbyte_or_null(sv, lp) \
+ (SvPOK_byte_nog(sv) \
+ ? ((lp = SvCUR(sv)), SvPVX(sv)) : (SvGETMAGIC(sv), SvOK(sv)) \
+ ? sv_2pvbyte_flags(sv, &lp, 0) : ((lp = 0), NULL))
+
+#define SvPVbyte_nomg(sv, lp) \
+ (SvPOK_byte_nog(sv) \
+ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte_flags(sv, &lp, 0))
+
+#define SvPVbyte_or_null_nomg(sv, lp) \
+ (SvPOK_utf8_nog(sv) \
+ ? ((lp = SvCUR(sv)), SvPVX(sv)) : SvOK(sv) \
+ ? sv_2pvbyte_flags(sv, &lp, 0) : ((lp = 0), NULL))
+
#define SvPVbyte_force(sv, lp) \
(SvPOK_byte_pure_nogthink(sv) \
? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvbyten_force(sv, &lp))
@@ -1758,7 +1839,7 @@ Like C<sv_catsv> but doesn't process magic.
#define SvPVutf8x_force(sv, lp) sv_pvutf8n_force(sv, &lp)
#define SvPVbytex_force(sv, lp) sv_pvbyten_force(sv, &lp)
-#define SvTRUE(sv) (LIKELY(sv) && SvTRUE_NN(sv))
+#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)))
@@ -1915,6 +1996,8 @@ Like C<sv_catsv> but doesn't process magic.
#define sv_pvn_force_nomg(sv, lp) sv_pvn_force_flags(sv, lp, 0)
#define sv_utf8_upgrade_flags(sv, flags) sv_utf8_upgrade_flags_grow(sv, flags, 0)
#define sv_utf8_upgrade_nomg(sv) sv_utf8_upgrade_flags(sv, 0)
+#define sv_utf8_downgrade(sv, fail_ok) sv_utf8_downgrade_flags(sv, fail_ok, SV_GMAGIC)
+#define sv_utf8_downgrade_nomg(sv, fail_ok) sv_utf8_downgrade_flags(sv, fail_ok, 0)
#define sv_catpvn_nomg(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, 0)
#define sv_catpv_nomg(dsv, sstr) sv_catpv_flags(dsv, sstr, 0)
#define sv_setsv(dsv, ssv) \
@@ -1929,7 +2012,9 @@ Like C<sv_catsv> but doesn't process magic.
#define sv_copypv_nomg(dsv, ssv) sv_copypv_flags(dsv, ssv, 0)
#define sv_2pv(sv, lp) sv_2pv_flags(sv, lp, SV_GMAGIC)
#define sv_2pv_nolen(sv) sv_2pv(sv, 0)
+#define sv_2pvbyte(sv, lp) sv_2pvbyte_flags(sv, lp, SV_GMAGIC)
#define sv_2pvbyte_nolen(sv) sv_2pvbyte(sv, 0)
+#define sv_2pvutf8(sv, lp) sv_2pvutf8_flags(sv, lp, SV_GMAGIC)
#define sv_2pvutf8_nolen(sv) sv_2pvutf8(sv, 0)
#define sv_2pv_nomg(sv, lp) sv_2pv_flags(sv, lp, 0)
#define sv_pvn_force(sv, lp) sv_pvn_force_flags(sv, lp, SV_GMAGIC)
diff --git a/gnu/usr.bin/perl/symbian/config.sh b/gnu/usr.bin/perl/symbian/config.sh
index 8b3122b2869..b5260d7f34a 100644
--- a/gnu/usr.bin/perl/symbian/config.sh
+++ b/gnu/usr.bin/perl/symbian/config.sh
@@ -61,6 +61,7 @@ d_asinh='undef'
d_atanh='undef'
d_atolf='undef'
d_atoll='undef'
+d_attribute_always_inline='undef'
d_attribute_deprecated='undef'
d_attribute_format='undef'
d_attribute_malloc='undef'
@@ -486,6 +487,7 @@ d_sitecustomize='undef'
d_snprintf='undef'
d_sockaddr_in6='undef'
d_sockaddr_sa_len='undef'
+d_sockaddr_storage='undef'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='define'
@@ -577,6 +579,7 @@ d_voidtty=''
d_vsnprintf='undef'
d_wait4='undef'
d_waitpid='undef'
+d_wcrtomb='undef'
d_wcscmp='undef'
d_wcstombs='undef'
d_wcsxfrm='undef'
diff --git a/gnu/usr.bin/perl/symbian/symbianish.h b/gnu/usr.bin/perl/symbian/symbianish.h
index 9100405bfb8..3b0ddb3f3ca 100644
--- a/gnu/usr.bin/perl/symbian/symbianish.h
+++ b/gnu/usr.bin/perl/symbian/symbianish.h
@@ -122,7 +122,7 @@
#ifndef PERL_SYS_TERM_BODY
#define PERL_SYS_TERM_BODY() HINTS_REFCNT_TERM; OP_REFCNT_TERM; \
PERLIO_TERM; MALLOC_TERM; CloseSTDLIB(); \
- PERL_LOCALE_TERM
+ LOCALE_TERM; ENV_TERM;
#endif
diff --git a/gnu/usr.bin/perl/t/TEST b/gnu/usr.bin/perl/t/TEST
index a9c844f605b..b534c492ca6 100644
--- a/gnu/usr.bin/perl/t/TEST
+++ b/gnu/usr.bin/perl/t/TEST
@@ -421,9 +421,33 @@ sub _tests_from_manifest {
my $t = $1;
my $extension = $2;
- # XXX Generates way too many error lines currently. Skip for
- # v5.22
- next if $t =~ /^cpan/ && ord("A") != 65;
+ next if ord "A" != 65
+ && defined $extension
+ && $extension =~ m! \b (?:
+ Archive-Tar/
+ | Config-Perl-V/
+ | CPAN-Meta/
+ | CPAN-Meta-YAML/
+ | Digest-SHA/
+ | ExtUtils-MakeMaker/
+ | HTTP-Tiny/
+ | IO-Compress/
+ | JSON-PP/
+ | libnet/
+ | MIME-Base64/
+ | podlators/
+ | Pod-Simple/
+ | Pod-Checker/
+ | Digest-MD5/
+ | Test-Harness/
+ | IPC-Cmd/
+ | Encode/
+ | Socket/
+ | ExtUtils-Manifest/
+ | Module-Metadata/
+ | PerlIO-via-QuotedPrint/
+ )
+ !x;
if (!$::core || $t =~ m!^lib/[a-z]!) {
if (defined $extension) {
@@ -461,7 +485,7 @@ unless (@ARGV) {
}
# Config.pm may be broken for make minitest. And this is only a refinement
# for skipping tests on non-default builds, so it is allowed to fail.
- # What we want to to is make a list of extensions which we did not build.
+ # What we want to do is make a list of extensions which we did not build.
my $configsh = '../config.sh';
my ($extensions, $known_extensions);
if (-f $configsh) {
diff --git a/gnu/usr.bin/perl/t/base/cond.t b/gnu/usr.bin/perl/t/base/cond.t
index e2ef358f9ad..0b41fe05525 100644
--- a/gnu/usr.bin/perl/t/base/cond.t
+++ b/gnu/usr.bin/perl/t/base/cond.t
@@ -6,12 +6,12 @@ print "1..4\n";
$x = '0';
-$x eq $x && (print "ok 1\n");
-$x ne $x && (print "not ok 1\n");
-$x eq $x || (print "not ok 2\n");
-$x ne $x || (print "ok 2\n");
+$x eq $x && (print "ok 1 - operator eq\n");
+$x ne $x && (print "not ok 1 - operator ne\n");
+$x eq $x || (print "not ok 2 - operator eq\n");
+$x ne $x || (print "ok 2 - operator ne\n");
-$x == $x && (print "ok 3\n");
-$x != $x && (print "not ok 3\n");
-$x == $x || (print "not ok 4\n");
-$x != $x || (print "ok 4\n");
+$x == $x && (print "ok 3 - operator ==\n");
+$x != $x && (print "not ok 3 - operator !=\n");
+$x == $x || (print "not ok 4 - operator ==\n");
+$x != $x || (print "ok 4 - operator !=\n");
diff --git a/gnu/usr.bin/perl/t/base/if.t b/gnu/usr.bin/perl/t/base/if.t
index f093b0d5801..be86d4c3933 100644
--- a/gnu/usr.bin/perl/t/base/if.t
+++ b/gnu/usr.bin/perl/t/base/if.t
@@ -5,5 +5,5 @@ print "1..2\n";
# first test to see if we can run the tests.
$x = 'test';
-if ($x eq $x) { print "ok 1\n"; } else { print "not ok 1\n";}
-if ($x ne $x) { print "not ok 2\n"; } else { print "ok 2\n";}
+if ($x eq $x) { print "ok 1 - if eq\n"; } else { print "not ok 1 - if eq\n";}
+if ($x ne $x) { print "not ok 2 - if ne\n"; } else { print "ok 2 - if ne\n";}
diff --git a/gnu/usr.bin/perl/t/base/lex.t b/gnu/usr.bin/perl/t/base/lex.t
index 414aa1fceb3..b38f9633639 100644
--- a/gnu/usr.bin/perl/t/base/lex.t
+++ b/gnu/usr.bin/perl/t/base/lex.t
@@ -396,7 +396,7 @@ for(qw< require goto last next redo CORE::dump >) {
print "# $@" if $@;
}
-# http://rt.perl.org/rt3/Ticket/Display.html?id=56880
+# https://github.com/Perl/perl5/issues/9415
my $counter = 0;
eval 'v23: $counter++; goto v23 unless $counter == 2';
print "not " unless $counter == 2;
diff --git a/gnu/usr.bin/perl/t/base/pat.t b/gnu/usr.bin/perl/t/base/pat.t
index 9e3f6151e0b..2d02fa04c1c 100644
--- a/gnu/usr.bin/perl/t/base/pat.t
+++ b/gnu/usr.bin/perl/t/base/pat.t
@@ -5,5 +5,5 @@ print "1..2\n";
# first test to see if we can run the tests.
$_ = 'test';
-if (/^test/) { print "ok 1\n"; } else { print "not ok 1\n";}
-if (/^foo/) { print "not ok 2\n"; } else { print "ok 2\n";}
+if (/^test/) { print "ok 1 - match regex\n"; } else { print "not ok 1 - match regex\n";}
+if (/^foo/) { print "not ok 2 - match regex\n"; } else { print "ok 2 - match regex\n";}
diff --git a/gnu/usr.bin/perl/t/benchmark/rt26188-speed-up-keys-on-empty-hash.t b/gnu/usr.bin/perl/t/benchmark/rt26188-speed-up-keys-on-empty-hash.t
deleted file mode 100755
index 94363950b11..00000000000
--- a/gnu/usr.bin/perl/t/benchmark/rt26188-speed-up-keys-on-empty-hash.t
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-use Benchmark;
-chdir 't' if -d 't';
-require './test.pl';
-plan(tests => 6);
-
-=head1 NAME
-
-rt26188 - benchmark speed for keys() on empty hashes
-
-=head1 DESCRIPTION
-
-If you have an empty hash, the speed of keys() depends
-on how many keys the hash previously held.
-
-For global hashes, getting the count for previously
-big hashes was substantially slower than for lexical hashes.
-
-This test checks that the speed difference for getting
-the number or list of keys from an empty hash is about the same
-(< 25%) for lexical and global hashes, both previously big and small.
-
-=head1 REFERENCE
-
-This test tests against RT ticket #26188
-
-L<http://rt.perl.org/rt3/Public/Bug/Display.html?id=26188>
-
-=cut
-
-use vars qw(%h_big %h_small);
-my %l_big = (1..50000);
-my %l_small = (1..10);
-
-%h_big = (1..50000);
-%h_small = (1..10);
-
-delete @h_big{keys %h_big};
-delete @h_small{keys %h_small};
-delete @l_big{keys %l_big};
-delete @l_small{keys %l_small};
-
-my $res = timethese shift || -3, {
- big => '1 for keys %h_big',
- small => '1 for keys %h_small',
- scalar_big => '$a = keys %h_big',
- scalar_small => '$a = keys %h_small',
-
- lex_big => '1 for keys %l_big',
- lex_small => '1 for keys %l_small',
- lex_scalar_big => '$a = keys %l_big',
- lex_scalar_small => '$a = keys %l_small',
-}, 'none';
-
-sub iters_per_second {
- $_[0]->iters / $_[0]->cpu_p
-}
-
-sub about_as_fast_ok {
- my ($res, $key1, $key2, $name) = @_;
- $name ||= "Speed difference between $key1 and $key2 is less than 25%";
- my %iters_per_second = map { $_ => iters_per_second( $res->{ $_ }) } ($key1, $key2);
-
- my $ratio = abs(1 - $iters_per_second{ $key1 } / ($iters_per_second{ $key2 } || 1 ));
- if (! cmp_ok( $ratio, '<', 0.25, $name )) {
- diag( sprintf "%20s: %12.2f/s\n", $key1, $iters_per_second{ $key1 } );
- diag( sprintf "%20s: %12.2f/s\n", $key2, $iters_per_second{ $key2 } );
- };
-};
-
-about_as_fast_ok( $res, 'scalar_big', 'scalar_small',"Checking the count of hash keys in an empty hash (global)");
-
-about_as_fast_ok( $res, 'big', 'small', "Checking the list of hash keys in an empty hash (global)");
-
-about_as_fast_ok( $res, 'lex_scalar_big', 'lex_scalar_small',"Checking the count of hash keys in an empty hash (lexical)");
-
-about_as_fast_ok( $res, 'lex_big', 'lex_small', "Checking the list of hash keys in an empty hash (lexical)");
-
-about_as_fast_ok( $res, 'lex_scalar_big', 'scalar_big',"Checking the count of hash keys in an empty hash, global vs. lexical");
-
-about_as_fast_ok( $res, 'lex_big', 'big', "Checking the list of hash keys in an empty hash, global vs. lexical");
-
-__END__
diff --git a/gnu/usr.bin/perl/t/charset_tools.pl b/gnu/usr.bin/perl/t/charset_tools.pl
index 877cead0fa8..374a07ae588 100644
--- a/gnu/usr.bin/perl/t/charset_tools.pl
+++ b/gnu/usr.bin/perl/t/charset_tools.pl
@@ -8,10 +8,11 @@ $::IS_EBCDIC = ord 'A' == 193;
# the set of 256 characters which is usually called Latin1. However, they
# will work properly with any character input, not just Latin1.
-sub native_to_uni($) {
+*native_to_uni = ($::IS_ASCII)
+ ? sub { return shift }
+ : sub {
my $string = shift;
- return $string if $::IS_ASCII;
my $output = "";
for my $i (0 .. length($string) - 1) {
$output .= chr(utf8::native_to_unicode(ord(substr($string, $i, 1))));
@@ -21,12 +22,13 @@ sub native_to_uni($) {
utf8::upgrade($output) if utf8::is_utf8($string);
return $output;
-}
+};
-sub uni_to_native($) {
+*uni_to_native = ($::IS_ASCII)
+ ? sub { return shift }
+ : sub {
my $string = shift;
- return $string if $::IS_ASCII;
my $output = "";
for my $i (0 .. length($string) - 1) {
$output .= chr(utf8::unicode_to_native(ord(substr($string, $i, 1))));
@@ -36,17 +38,16 @@ sub uni_to_native($) {
utf8::upgrade($output) if utf8::is_utf8($string);
return $output;
-}
+};
-sub byte_utf8a_to_utf8n {
- # Convert a UTF-8 byte sequence into the platform's native UTF-8
- # equivalent, currently only UTF-8 and UTF-EBCDIC.
+my @utf8_skip;
- my @utf8_skip = (
- # This translates a utf-8-encoded byte into how many bytes the full utf8
- # character occupies.
+if ($::IS_EBCDIC) {
+ @utf8_skip = (
+ # This translates a utf-8-encoded byte into how many bytes the full utf8
+ # character occupies.
- # 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ # 0 1 2 3 4 5 6 7 8 9 A B C D E F
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, # 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, # 2
@@ -64,11 +65,17 @@ sub byte_utf8a_to_utf8n {
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, # E
4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7,13, # F
);
+}
+
+*byte_utf8a_to_utf8n = ($::IS_ASCII)
+ ? sub { return shift }
+ : sub {
+ # Convert a UTF-8 byte sequence into the platform's native UTF-8
+ # equivalent, currently only UTF-8 and UTF-EBCDIC.
my $string = shift;
die "Input to byte_utf8a-to_utf8n() must not be flagged UTF-8"
if utf8::is_utf8($string);
- return $string if $::IS_ASCII;
die "Expecting ASCII or EBCDIC" unless $::IS_EBCDIC;
my $length = length($string);
@@ -137,7 +144,7 @@ sub byte_utf8a_to_utf8n {
utf8::encode($out); # Turn off utf8 flag.
#diag($out);
return $out;
-}
+};
my @i8_to_native = ( # Only code page 1047 so far.
# _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F
diff --git a/gnu/usr.bin/perl/t/harness b/gnu/usr.bin/perl/t/harness
index caa2a318b8a..58a212fad1d 100644
--- a/gnu/usr.bin/perl/t/harness
+++ b/gnu/usr.bin/perl/t/harness
@@ -189,14 +189,14 @@ if (@ARGV) {
# directory containing such files should be tested in serial order.
#
# Add exceptions to the above rule
- for (qw(ext/Pod-Html/t cpan/IO-Zlib/t)) {
+ for (qw(ext/Pod-Html/t cpan/IO-Zlib/t ext/File-Find/t)) {
$serials{$_} = 1;
}
my @nonexistent_serials = grep { not exists $all_dirs{$_} } keys %serials;
if (@nonexistent_serials) {
- die "These directories to be run serially are incorrectly"
- . " specified:\n" . join "\n", @nonexistent_serials;
+ die "These directories to be run serially don't exist."
+ . " Check your spelling:\n" . join "\n", @nonexistent_serials;
}
# Remove the serial testing directories from the list of all
diff --git a/gnu/usr.bin/perl/t/io/errno.t b/gnu/usr.bin/perl/t/io/errno.t
index d8fc4b2c199..71e985b6b89 100755
--- a/gnu/usr.bin/perl/t/io/errno.t
+++ b/gnu/usr.bin/perl/t/io/errno.t
@@ -2,7 +2,7 @@
# vim: ts=4 sts=4 sw=4:
# $! may not be set if EOF was reached without any error.
-# http://rt.perl.org/rt3/Ticket/Display.html?id=39060
+# https://github.com/Perl/perl5/issues/8431
use strict;
use Config;
diff --git a/gnu/usr.bin/perl/t/io/pipe.t b/gnu/usr.bin/perl/t/io/pipe.t
index f9ee65afe8b..bdf743c26c1 100644
--- a/gnu/usr.bin/perl/t/io/pipe.t
+++ b/gnu/usr.bin/perl/t/io/pipe.t
@@ -10,7 +10,7 @@ if (!$Config{'d_fork'}) {
skip_all("fork required to pipe");
}
else {
- plan(tests => 25);
+ plan(tests => 27);
}
my $Perl = which_perl();
@@ -125,6 +125,18 @@ wait; # Collect from $pid
pipe(READER,WRITER) || die "Can't open pipe";
close READER;
+eval {
+ # one platform at least appears to block SIGPIPE by default (see #122112)
+ # so make sure it's unblocked.
+ # The eval wrapper should ensure this does nothing if these aren't
+ # implemented.
+ require POSIX;
+ my $mask = POSIX::SigSet->new(POSIX::SIGPIPE());
+ my $old = POSIX::SigSet->new();
+ POSIX::sigprocmask(POSIX::SIG_UNBLOCK(), $mask, $old);
+ note "Yes, SIGPIPE was blocked" if $old->ismember(POSIX::SIGPIPE());
+};
+
$SIG{'PIPE'} = 'broken_pipe';
sub broken_pipe {
@@ -241,3 +253,21 @@ SKIP: {
is($child, -1, 'child reaped if piped program cannot be executed');
}
+
+{
+ # [perl #122112] refcnt: fd -1 < 0 when a signal handler dies
+ # while a pipe close is waiting on a child process
+ my $prog = <<PROG;
+\$SIG{ALRM}=sub{die};
+alarm 1;
+\$Perl = "$Perl";
+my \$cmd = qq(\$Perl -e "sleep 3");
+my \$pid = open my \$fh, "|\$cmd" or die "\$!\n";
+close \$fh;
+PROG
+ my $out = fresh_perl($prog, {});
+ cmp_ok($out, '!~', qr/refcnt/, "no exception from PerlIO");
+ # checks that that program did something rather than failing to
+ # compile
+ cmp_ok($out, '=~', qr/Died at/, "but we did get the exception from die");
+}
diff --git a/gnu/usr.bin/perl/t/lib/charnames/alias b/gnu/usr.bin/perl/t/lib/charnames/alias
index c0b039f1f93..7e13665cf03 100644
--- a/gnu/usr.bin/perl/t/lib/charnames/alias
+++ b/gnu/usr.bin/perl/t/lib/charnames/alias
@@ -411,7 +411,7 @@ charnames alias definitions may not contain trailing white-space; marked by <--
Invalid character in charnames alias definition; marked by <-- HERE in '٤<-- HERE 転車に乗る人'
Invalid character in charnames alias definition; marked by <-- HERE in '自転車・<-- HERE に乗る人' at - line \d+
########
-# NAME Using NBSP in :alias names is deprectated
+# NAME Using NBSP in :alias names is deprecated
use utf8;
use open qw( :utf8 :std );
use charnames ":alias" => { "NBSP SEPARATED SPACE" => "BLACK SMILING FACE" };
diff --git a/gnu/usr.bin/perl/t/lib/croak/toke b/gnu/usr.bin/perl/t/lib/croak/toke
index 21851229fe1..0d20acbd590 100644
--- a/gnu/usr.bin/perl/t/lib/croak/toke
+++ b/gnu/usr.bin/perl/t/lib/croak/toke
@@ -502,3 +502,74 @@ format=
EXPECT
syntax error at - line 4, next token ???
Execution of - aborted due to compilation errors.
+########
+# NAME [perl #134045] incomplete hex number
+0x x 2;
+0xx 2;
+0x_;
+0b;
+EXPECT
+No digits found for hexadecimal literal at - line 1, near "0x "
+No digits found for hexadecimal literal at - line 2, near "0xx"
+No digits found for hexadecimal literal at - line 3, near "0x_;"
+No digits found for binary literal at - line 4, near "0b;"
+Execution of - aborted due to compilation errors.
+########
+# NAME [perl #130585] close paren in subparse
+qr!@{s{0})(?{!;
+EXPECT
+syntax error at - line 1, near "})"
+Execution of - aborted due to compilation errors.
+########
+# NAME [perl #130585] close paren in subparse - a few more tests
+my ($x, %y, @z);
+qq!$x\U $z[0] $y{a}\E $z[1]!;
+qq!$x\U@{s{0})(?{!;
+EXPECT
+syntax error at - line 3, near ")("
+Execution of - aborted due to compilation errors.
+########
+# NAME [perl #134310] don't confuse S_no_op() with PL_bufptr after s
+0 0x@
+EXPECT
+Number found where operator expected at - line 1, near "0 0x"
+ (Missing operator before 0x?)
+Array found where operator expected at - line 1, near "0x@
+;"
+ (Missing operator before ;?)
+No digits found for hexadecimal literal at - line 1, near "0 0x@"
+syntax error at - line 1, near "0 0x"
+Execution of - aborted due to compilation errors.
+########
+# NAME Forbid illegal \x{} code points
+use Config;
+if ($Config{uvsize} < 8) {
+ my $a = "\x{8000_0000}";
+}
+else {
+ my $a = "\x{8000_0000_0000_0000}";
+}
+EXPECT
+OPTIONS regex
+Use of code point 0x80000000(00000000)? is not allowed; the permissible max is 0x7FFFFFFF(FFFFFFFF)? at - line \d+.
+########
+# NAME Forbid illegal \o{} code points
+use Config;
+if ($Config{uvsize} < 8) {
+ my $b = "\o{20_000_000_000}";
+}
+else {
+ my $b = "\o{1_000_000_000_000_000_000_000}";
+}
+EXPECT
+OPTIONS regex
+Use of code point 0x80000000(00000000)? is not allowed; the permissible max is 0x7FFFFFFF(FFFFFFFF)? at - line \d+.
+########
+# NAME gh-17645: conflict marker detection should not read out of bounds
+m/$0[
+==0/
+EXPECT
+syntax error at - line 2, near "[
+=="
+ (Might be a runaway multi-line // string starting on line 1)
+Execution of - aborted due to compilation errors.
diff --git a/gnu/usr.bin/perl/t/lib/h2ph.pht b/gnu/usr.bin/perl/t/lib/h2ph.pht
index cda8d21051c..f068d6dae46 100644
--- a/gnu/usr.bin/perl/t/lib/h2ph.pht
+++ b/gnu/usr.bin/perl/t/lib/h2ph.pht
@@ -90,6 +90,10 @@ unless(defined(&_H2PH_H_)) {
}
eval("sub flim () { 0; }") unless defined(&flim);
eval("sub flam () { 1; }") unless defined(&flam);
+ eval 'sub blli_in_use {
+ my($blli) = @_;
+ eval q({ ($blli->{l2_proto}) || ($blli->{l3_proto}); });
+ }' unless defined(&blli_in_use);
eval 'sub multiline () {"multilinestring";}' unless defined(&multiline);
}
1;
diff --git a/gnu/usr.bin/perl/t/lib/overload_nomethod.t b/gnu/usr.bin/perl/t/lib/overload_nomethod.t
index edff1639a11..d2839f80bf1 100644
--- a/gnu/usr.bin/perl/t/lib/overload_nomethod.t
+++ b/gnu/usr.bin/perl/t/lib/overload_nomethod.t
@@ -1,6 +1,14 @@
+#!./perl
+
+BEGIN {
+ chdir 't' if -d 't';
+ @INC = '../lib';
+ require './test.pl';
+}
+
+plan( tests => 3);
use warnings;
use strict;
-use Test::Simple tests => 3;
package Foo;
use overload
diff --git a/gnu/usr.bin/perl/t/lib/strict/subs b/gnu/usr.bin/perl/t/lib/strict/subs
index a83df015053..1aa7c5cdba3 100644
--- a/gnu/usr.bin/perl/t/lib/strict/subs
+++ b/gnu/usr.bin/perl/t/lib/strict/subs
@@ -475,3 +475,11 @@ my $y = !BARE2;
EXPECT
Bareword "BARE2" not allowed while "strict subs" in use at - line 3.
Execution of - aborted due to compilation errors.
+########
+# NAME multiconcat and barewords gh #17254
+use strict;
+sub foo { "foo" }
+print foo() . SLASH . "bar";
+EXPECT
+Bareword "SLASH" not allowed while "strict subs" in use at - line 3.
+Execution of - aborted due to compilation errors.
diff --git a/gnu/usr.bin/perl/t/lib/warnings/9uninit b/gnu/usr.bin/perl/t/lib/warnings/9uninit
index 774c6ee4326..5c173fdb2ac 100644
--- a/gnu/usr.bin/perl/t/lib/warnings/9uninit
+++ b/gnu/usr.bin/perl/t/lib/warnings/9uninit
@@ -2206,3 +2206,13 @@ use warnings 'uninitialized';
undef $0;
EXPECT
Use of uninitialized value in undef operator at - line 5.
+########
+# RT #134275
+# This was SEGVing due to the multideref code in S_find_uninit_var not
+# handling a GV with a null gp_hv slot.
+use warnings 'uninitialized';
+"" =~ /$foo{a}${*foo=*bar}$x/;
+EXPECT
+Use of uninitialized value in regexp compilation at - line 5.
+Use of uninitialized value in regexp compilation at - line 5.
+Use of uninitialized value $x in regexp compilation at - line 5.
diff --git a/gnu/usr.bin/perl/t/lib/warnings/doop b/gnu/usr.bin/perl/t/lib/warnings/doop
deleted file mode 100644
index 09db1467377..00000000000
--- a/gnu/usr.bin/perl/t/lib/warnings/doop
+++ /dev/null
@@ -1,14 +0,0 @@
-__END__
-# doop.c
-use utf8 ;
-$_ = "\x80 \xff" ;
-chop ;
-EXPECT
-########
-# NAME vec with above ff code points is deprecated
-my $foo = "\x{100}" . "\xff\xfe";
-eval { vec($foo, 1, 8) };
-no warnings 'deprecated';
-eval { vec($foo, 1, 8) };
-EXPECT
-Use of strings with code points over 0xFF as arguments to vec is deprecated. This will be a fatal error in Perl 5.32 at - line 2.
diff --git a/gnu/usr.bin/perl/t/lib/warnings/op b/gnu/usr.bin/perl/t/lib/warnings/op
index 85297836d2a..0012e74e529 100644
--- a/gnu/usr.bin/perl/t/lib/warnings/op
+++ b/gnu/usr.bin/perl/t/lib/warnings/op
@@ -2007,7 +2007,7 @@ do xa for my $a;
do xa for my @a;
EXPECT
########
-# TODO [perl #125493
+# [perl #125493
use warnings;
$_="3.14159";
tr/0-9/\x{6F0}-\x{6F9}/;
@@ -2021,3 +2021,45 @@ $a.$b.$c;
EXPECT
Useless use of concatenation (.) or string in void context at - line 4.
Useless use of concatenation (.) or string in void context at - line 5.
+########
+# PL_curcop tracked correctly in Perl_scalar()
+use warnings;
+my $scalar = do {
+ no warnings 'void';
+ 1,2,3,4,5;
+};
+EXPECT
+########
+# PL_curcop tracked correctly in Perl_list()
+use warnings;
+my @array = do {
+ no warnings 'void';
+ 1,2,3,4,5;
+};
+EXPECT
+########
+# TODO PL_curcop restored correctly in Perl_scalar()
+use warnings;
+my $scalar = do {
+ my $x = 1;
+ 11,12,
+ do {
+ no warnings 'void';
+ my $x = 2;
+ 21,22,
+ },
+ 31,32,
+ do {
+ my $x = 3;
+ 41,42,
+ },
+ 51,52
+};
+EXPECT
+Useless use of a constant (11) in void context at - line 5.
+Useless use of a constant (12) in void context at - line 5.
+Useless use of a constant (31) in void context at - line 11.
+Useless use of a constant (32) in void context at - line 11.
+Useless use of a constant (41) in void context at - line 14.
+Useless use of a constant (42) in void context at - line 14.
+Useless use of a constant (51) in void context at - line 16.
diff --git a/gnu/usr.bin/perl/t/lib/warnings/regcomp b/gnu/usr.bin/perl/t/lib/warnings/regcomp
index eb827b67270..50b85fdd45c 100644
--- a/gnu/usr.bin/perl/t/lib/warnings/regcomp
+++ b/gnu/usr.bin/perl/t/lib/warnings/regcomp
@@ -18,8 +18,8 @@ no warnings 'digit' ;
my $a = qr/\o{1238456}\x{100}/;
my $a = qr/[\o{6548321}]\x{100}/;
EXPECT
-Non-octal character '8'. Resolved as "\o{123}" at - line 3.
-Non-octal character '8'. Resolved as "\o{654}" at - line 4.
+Non-octal character '8' terminates \o early. Resolved as "\o{123}" in regex; marked by <-- HERE in m/\o{1238456} <-- HERE \x{100}/ at - line 3.
+Non-octal character '8' terminates \o early. Resolved as "\o{654}" in regex; marked by <-- HERE in m/[\o{6548321} <-- HERE ]\x{100}/ at - line 4.
########
# regcomp.c
BEGIN {
@@ -35,8 +35,8 @@ no warnings 'syntax';
$a = qr/\c,/;
$a = qr/[\c,]/;
EXPECT
-"\c," is more clearly written simply as "l" at - line 9.
-"\c," is more clearly written simply as "l" at - line 10.
+"\c," is more clearly written simply as "l" in regex; marked by <-- HERE in m/\c, <-- HERE / at - line 9.
+"\c," is more clearly written simply as "l" in regex; marked by <-- HERE in m/[\c, <-- HERE ]/ at - line 10.
########
# This is because currently a different error is output under
# use re 'strict', so can't go in reg_mesg.t
@@ -113,3 +113,15 @@ my $qr = qr {
}x;
EXPECT
########
+# NAME Warn on 32-bit code points
+# SKIP ? $Config{uvsize} < 8
+use warnings 'portable';
+qr/\x{8000_0000}/;
+qr/[\x{8000_0000}]/;
+qr/\o{20_000_000_000}/;
+qr/[\o{20_000_000_000}]/;
+EXPECT
+Code point 0x80000000 is not Unicode, requires a Perl extension, and so is not portable in regex; marked by <-- HERE in m/\x{8000_0000} <-- HERE / at - line 2.
+Code point 0x80000000 is not Unicode, requires a Perl extension, and so is not portable in regex; marked by <-- HERE in m/[\x{8000_0000} <-- HERE ]/ at - line 3.
+Code point 0x80000000 is not Unicode, requires a Perl extension, and so is not portable in regex; marked by <-- HERE in m/\o{20_000_000_000} <-- HERE / at - line 4.
+Code point 0x80000000 is not Unicode, requires a Perl extension, and so is not portable in regex; marked by <-- HERE in m/[\o{20_000_000_000} <-- HERE ]/ at - line 5.
diff --git a/gnu/usr.bin/perl/t/lib/warnings/toke b/gnu/usr.bin/perl/t/lib/warnings/toke
index 83641e51066..ff586df0f3e 100644
--- a/gnu/usr.bin/perl/t/lib/warnings/toke
+++ b/gnu/usr.bin/perl/t/lib/warnings/toke
@@ -756,7 +756,6 @@ $a = 1_; print "$a\n";
$a = 01_; print "$a\n";
$a = 0_; print "$a\n";
$a = 0x1_; print "$a\n";
-$a = 0x_; print "$a\n";
$a = 1.2_; print "$a\n";
$a = 1._2; print "$a\n";
$a = 1._; print "$a\n";
@@ -768,12 +767,10 @@ Misplaced _ in number at - line 6.
Misplaced _ in number at - line 7.
Misplaced _ in number at - line 8.
Misplaced _ in number at - line 9.
-Misplaced _ in number at - line 10.
1
1
0
1
-0
1.2
1.2
1
@@ -1371,7 +1368,7 @@ my $a = "\o{";
my $a = "\o{}";
EXPECT
Missing braces on \o{} at - line 3, within string
-Missing right brace on \o{ at - line 4, within string
+Missing right brace on \o{} at - line 4, within string
Empty \o{} at - line 5, within string
BEGIN not safe after errors--compilation aborted at - line 6.
########
@@ -1381,7 +1378,7 @@ my $a = "\o{1238456}";
no warnings 'digit' ;
my $a = "\o{1238456}";
EXPECT
-Non-octal character '8'. Resolved as "\o{123}" at - line 3.
+Non-octal character '8' terminates \o early. Resolved as "\o{123}" at - line 3.
########
# toke.c
use warnings;
@@ -1425,7 +1422,8 @@ use warnings;
my $a = "\c{ack}";
EXPECT
OPTION fatal
-Use ";" instead of "\c{" at - line 9.
+Use ";" instead of "\c{" at - line 9, within string
+Execution of - aborted due to compilation errors.
########
# toke.c
BEGIN {
@@ -1438,13 +1436,15 @@ use warnings;
my $a = "\c{ack}";
EXPECT
OPTION fatal
-Sequence "\c{" invalid at - line 9.
+Sequence "\c{" invalid at - line 9, within string
+Execution of - aborted due to compilation errors.
########
# toke.c
my $a = "\câ";
EXPECT
OPTION fatal
-Character following "\c" must be printable ASCII at - line 2.
+Character following "\c" must be printable ASCII at - line 2, within string
+Execution of - aborted due to compilation errors.
########
# toke.c
use warnings 'syntax' ;
@@ -1528,9 +1528,9 @@ print "aa" =~ m{^a{1,2}$}, "G\n";
print "aq" =~ m[^a\[a-z\]$], "H\n";
print "aq" =~ m(^a\(q\)$), "I\n";
EXPECT
-Illegal hexadecimal digit '\' ignored at - line 5.
-Illegal hexadecimal digit '\' ignored at - line 7.
-Illegal hexadecimal digit '\' ignored at - line 9.
+Non-hex character '\\' terminates \x early. Resolved as "\x00\\" in regex; marked by <-- HERE in m/^a\x <-- HERE \{61\}$/ at - line 5.
+Non-hex character '\\' terminates \x early. Resolved as "\x00\\" in regex; marked by <-- HERE in m/^a\\\x <-- HERE \{6F\}$/ at - line 7.
+Non-hex character '\\' terminates \x early. Resolved as "\x00\\" in regex; marked by <-- HERE in m/^a\\\\\x <-- HERE \{6F\}$/ at - line 9.
A
B
1C
@@ -1691,3 +1691,55 @@ EXPECT
OPTION regex
Malformed UTF-8 character: .*non-continuation.*
The eval did not crash the program
+########
+# NAME [perl #133850] print $fh $1 in s///e expression
+use warnings;
+my $fh = \*STDOUT;
+$_ = "abc";
+s/(x)/ print $fh $1 /e;
+EXPECT
+########
+# NAME [perl #133850] side case
+use warnings;
+my $fh = \*STDOUT;
+my $y = "";
+my $x = "${print $fh $y; \'x'}";
+EXPECT
+########
+# NAME [perl #133850] another case
+use warnings;
+my $time = 1;
+$_ = "";
+s/^/ ${time} /e
+EXPECT
+Ambiguous use of ${time} resolved to $time at - line 4.
+########
+# NAME [perl #133850] another case
+use warnings;
+%x = qw(a b c d);
+$_ = "";
+s/^/ @x {a} /e
+EXPECT
+Scalar value @x{"a"} better written as $x{"a"} at - line 4.
+########
+# NAME Warn on 32-bit code points
+# SKIP ? $Config{uvsize} < 8
+use warnings 'portable';
+my $a = "\x{8000_0000}";
+my $b = "\o{20_000_000_000}";
+EXPECT
+Code point 0x80000000 is not Unicode, requires a Perl extension, and so is not portable at - line 2.
+Code point 0x80000000 is not Unicode, requires a Perl extension, and so is not portable at - line 3.
+########
+# NAME Check that our Multidimensional array heuristic doesn't false positive on function calls
+use warnings;
+my $str= "rst";
+my $substr= "s";
+my @array="A".."C";
+# force a numeric warning, but we should NOT see a Multidimensional warning here
+my $trigger_num_warn= $array[index $str,$substr] + 1;
+# this should trigger a Multidimensional warning
+my $should_warn_multi= $array[0x1,0x2];
+EXPECT
+Multidimensional syntax $array[0x1,0x2] not supported at - line 8.
+Argument "B" isn't numeric in addition (+) at - line 6.
diff --git a/gnu/usr.bin/perl/t/loc_tools.pl b/gnu/usr.bin/perl/t/loc_tools.pl
index c76e29388a7..9ec085a167c 100644
--- a/gnu/usr.bin/perl/t/loc_tools.pl
+++ b/gnu/usr.bin/perl/t/loc_tools.pl
@@ -1,4 +1,4 @@
-# Common tools for test files files to find the locales which exist on the
+# Common tools for test files to find the locales which exist on the
# system. Caller should have verified that this isn't miniperl before calling
# the functions.
@@ -340,7 +340,7 @@ sub find_locales ($;$) {
_trylocale("C", $categories, \@Locale, $allow_incompatible);
_trylocale("POSIX", $categories, \@Locale, $allow_incompatible);
- if ($Config{d_has_C_UTF8} eq 'true') {
+ if ($Config{d_has_C_UTF8} && $Config{d_has_C_UTF8} eq 'true') {
_trylocale("C.UTF-8", $categories, \@Locale, $allow_incompatible);
}
@@ -421,9 +421,10 @@ sub find_locales ($;$) {
}
# The rest of the locales are in this file.
- push @Data, <DATA>;
+ push @Data, <DATA>; close DATA;
foreach my $line (@Data) {
+ chomp $line;
my ($locale_name, $language_codes, $country_codes, $encodings) =
split /:/, $line;
_my_diag(__FILE__ . ":" . __LINE__ . ": Unexpected syntax in '$line'")
diff --git a/gnu/usr.bin/perl/t/mro/next_edgecases.t b/gnu/usr.bin/perl/t/mro/next_edgecases.t
index 31a33552f3e..1b093807bc4 100644
--- a/gnu/usr.bin/perl/t/mro/next_edgecases.t
+++ b/gnu/usr.bin/perl/t/mro/next_edgecases.t
@@ -42,7 +42,7 @@ plan(tests => 12);
object_ok($bar, 'Bar');
object_ok($bar, 'Foo');
- # test it working with with Sub::Name
+ # test it working with Sub::Name
SKIP: {
eval 'use Sub::Name';
skip("Sub::Name is required for this test", 3) if $@;
diff --git a/gnu/usr.bin/perl/t/mro/next_edgecases_utf8.t b/gnu/usr.bin/perl/t/mro/next_edgecases_utf8.t
index 8be8d66fea6..0a53fabe216 100644
--- a/gnu/usr.bin/perl/t/mro/next_edgecases_utf8.t
+++ b/gnu/usr.bin/perl/t/mro/next_edgecases_utf8.t
@@ -47,7 +47,7 @@ plan(tests => 12);
object_ok($bar, 'Baɾ');
object_ok($bar, 'ᕘ');
- # test it working with with Sub::Name
+ # test it working with Sub::Name
SKIP: {
eval 'use Sub::Name';
skip("Sub::Name is required for this test", 3) if $@;
diff --git a/gnu/usr.bin/perl/t/op/aassign.t b/gnu/usr.bin/perl/t/op/aassign.t
index 4e7aee7017e..aa1f2c722c8 100644
--- a/gnu/usr.bin/perl/t/op/aassign.t
+++ b/gnu/usr.bin/perl/t/op/aassign.t
@@ -540,7 +540,7 @@ SKIP: {
}
# undef on LHS uses RHS as lvalue instead
- # Note this this just codifies existing behaviour - it may not be
+ # Note that this just codifies existing behaviour - it may not be
# correct. See http://nntp.perl.org/group/perl.perl5.porters/240358.
{
@@ -594,4 +594,22 @@ SKIP: {
is ($fill, 2, "RT #130132 array 2");
}
+{
+ # GH #16685
+ # don't use the "1-arg on LHS can't be common" optimisation
+ # when there are undef's there
+ my $x = 1;
+ my @a = (($x, undef) = (2 => $x));
+ is("@a", "2 1", "GH #17816");
+}
+
+{
+ # GH #17816
+ # honour trailing undef's in list context
+ my $x = 1;
+ my @a = (($x, undef, undef) = (1));
+ is(scalar @a, 3, "GH #17816");
+}
+
+
done_testing();
diff --git a/gnu/usr.bin/perl/t/op/attrs.t b/gnu/usr.bin/perl/t/op/attrs.t
index 649525ce229..dd230b3fbd7 100644
--- a/gnu/usr.bin/perl/t/op/attrs.t
+++ b/gnu/usr.bin/perl/t/op/attrs.t
@@ -507,4 +507,7 @@ BEGIN failed--compilation aborted at - line 1.
EOS
"attribute on our hash with sub of same name");
+fresh_perl_is('$_ = ""; s/^/ { my $x : shared = 1; } /e;', "", {},
+ "attributes in sub-parse");
+
done_testing();
diff --git a/gnu/usr.bin/perl/t/op/bop.t b/gnu/usr.bin/perl/t/op/bop.t
index 411d253a7b0..07f057d0a9e 100644
--- a/gnu/usr.bin/perl/t/op/bop.t
+++ b/gnu/usr.bin/perl/t/op/bop.t
@@ -18,7 +18,7 @@ BEGIN {
# If you find tests are failing, please try adding names to tests to track
# down where the failure is, and supply your new names as a patch.
# (Just-in-time test naming)
-plan tests => 504;
+plan tests => 502;
# numerics
ok ((0xdead & 0xbeef) == 0x9ead);
@@ -262,6 +262,35 @@ is(~~$y, "c");
is(fetches($y), 1);
is(stores($y), 0);
+my $g;
+# Note: if the vec() reads are part of the is() calls it's treated as
+# in lvalue context, so we save it separately
+$g = vec($x, 0, 1);
+is($g, (ord("a") & 0x01), "check vec value");
+is(fetches($x), 1, "fetches for vec read");
+is(stores($x), 0, "stores for vec read");
+# similarly here, and code like:
+# $g = (vec($x, 0, 1) = 0)
+# results in an extra fetch, since the inner assignment returns the LV
+vec($x, 0, 1) = 0;
+# one fetch in vec() another when the LV is assigned to
+is(fetches($x), 2, "fetches for vec write");
+is(stores($x), 1, "stores for vec write");
+
+{
+ my $a = "a";
+ utf8::upgrade($a);
+ tie $x, "main", $a;
+ $g = vec($x, 0, 1);
+ is($g, (ord("a") & 0x01), "check vec value (utf8)");
+ is(fetches($x), 1, "fetches for vec read (utf8)");
+ is(stores($x), 0, "stores for vec read (utf8)");
+ vec($x, 0, 1) = 0;
+ # one fetch in vec() another when the LV is assigned to
+ is(fetches($x), 2, "fetches for vec write (utf8)");
+ is(stores($x), 1, "stores for vec write (utf8)");
+}
+
$a = "\0\x{100}"; chop($a);
ok(utf8::is_utf8($a)); # make sure UTF8 flag is still there
$a = ~$a;
@@ -534,11 +563,11 @@ is $^A, "123", '~v0 clears vstring magic on retval';
is(-1 << 1, 0xFFFF_FFFF_FFFF_FFFE,
"neg UV (sic) left shift = 0xFF..E");
is(-1 >> 1, 0x7FFF_FFFF_FFFF_FFFF,
- "neg UV (sic) right right = 0x7F..F");
+ "neg UV (sic) right shift = 0x7F..F");
} elsif ($w == 32) {
no warnings "portable";
is(-1 << 1, 0xFFFF_FFFE, "neg left shift == 0xFF..E");
- is(-1 >> 1, 0x7FFF_FFFF, "neg right right == 0x7F..F");
+ is(-1 >> 1, 0x7FFF_FFFF, "neg right shift == 0x7F..F");
}
{
@@ -613,73 +642,39 @@ foreach my $op_info ([and => "&"], [or => "|"], [xor => "^"]) {
}
{
- # Since these are temporary, and it was a pain to make them into loops,
- # the code is just rolled out.
- local $SIG{__WARN__} = sub { push @warnings, @_; };
-
- undef @warnings;
- is("abc" & "abc\x{100}", "abc", '"abc" & "abc\x{100}" works');
- if (! is(@warnings, 1, "... but returned a single warning")) {
- diag join "\n", @warnings;
- }
- like ($warnings[0], qr /^Use of strings with code points over 0xFF as (?#
- )arguments to bitwise and \(&\) operator (?#
- )is deprecated/,
- "... which is the expected warning");
- undef @warnings;
- is("abc" | "abc\x{100}", "abc\x{100}", '"abc" | "abc\x{100}" works');
- if (! is(@warnings, 1, "... but returned a single warning")) {
- diag join "\n", @warnings;
- }
- like ($warnings[0], qr /^Use of strings with code points over 0xFF as (?#
- )arguments to bitwise or \(|\) operator (?#
- )is deprecated/,
- "... which is the expected warning");
- undef @warnings;
- is("abc" ^ "abc\x{100}", "\0\0\0\x{100}", '"abc" ^ "abc\x{100}" works');
- if (! is(@warnings, 1, "... but returned a single warning")) {
- diag join "\n", @warnings;
- }
- like ($warnings[0], qr /^Use of strings with code points over 0xFF as (?#
- )arguments to bitwise xor \(\^\) operator (?#
- )is deprecated/,
- "... which is the expected warning");
- undef @warnings;
- is("abc\x{100}" & "abc", "abc", '"abc\x{100}" & "abc" works');
- if (! is(@warnings, 1, "... but returned a single warning")) {
- diag join "\n", @warnings;
- }
- like ($warnings[0], qr /^Use of strings with code points over 0xFF as (?#
- )arguments to bitwise and \(&\) operator (?#
- )is deprecated/,
- "... which is the expected warning");
- undef @warnings;
- is("abc\x{100}" | "abc", "abc\x{100}", '"abc\x{100}" | "abc" works');
- if (! is(@warnings, 1, "... but returned a single warning")) {
- diag join "\n", @warnings;
- }
- like ($warnings[0], qr /^Use of strings with code points over 0xFF as (?#
- )arguments to bitwise or \(|\) operator (?#
- )is deprecated/,
- "... which is the expected warning");
- undef @warnings;
- is("abc\x{100}" ^ "abc", "\0\0\0\x{100}", '"abc\x{100}" ^ "abc" works');
- if (! is(@warnings, 1, "... but returned a single warning")) {
- diag join "\n", @warnings;
- }
- like ($warnings[0], qr /^Use of strings with code points over 0xFF as (?#
- )arguments to bitwise xor \(\^\) operator (?#
- )is deprecated/,
- "... which is the expected warning");
- no warnings 'deprecated';
- undef @warnings;
- my $foo = "abc" & "abc\x{100}";
- $foo = "abc" | "abc\x{100}";
- $foo = "abc" ^ "abc\x{100}";
- $foo = "abc\x{100}" & "abc";
- $foo = "abc\x{100}" | "abc";
- $foo = "abc\x{100}" ^ "abc";
- if (! is(@warnings, 0, "... And none of the last 6 main tests warns when 'deprecated' is off")) {
- diag join "\n", @warnings;
+ # RT 134140 fatalizations
+ my %op_pairs = (
+ and => { low => 'and', high => '&', regex => qr/&/ },
+ or => { low => 'or', high => '|', regex => qr/\|/ },
+ xor => { low => 'xor', high => '^', regex => qr/\^/ },
+ );
+ my @combos = (
+ { string => '"abc" & "abc\x{100}"', op_pair => $op_pairs{and} },
+ { string => '"abc" | "abc\x{100}"', op_pair => $op_pairs{or} },
+ { string => '"abc" ^ "abc\x{100}"', op_pair => $op_pairs{xor} },
+ { string => '"abc\x{100}" & "abc"', op_pair => $op_pairs{and} },
+ { string => '"abc\x{100}" | "abc"', op_pair => $op_pairs{or} },
+ { string => '"abc\x{100}" ^ "abc"', op_pair => $op_pairs{xor} },
+
+ );
+
+ # Use of strings with code points over 0xFF as arguments to %s operator is not allowed
+ for my $h (@combos) {
+ my $s1 = "Use of strings with code points over 0xFF as arguments to bitwise";
+ my $s2 = "operator is not allowed";
+ my $expected = qr/$s1 $h->{op_pair}->{low} \($h->{op_pair}->{regex}\) $s2/;
+ my $description = "$s1 $h->{op_pair}->{low} ($h->{op_pair}->{high}) operator is not allowed";
+ local $@;
+ eval $h->{string};
+ like $@, $expected, $description;
}
}
+
+{
+ # perl #17844 - only visible with valgrind/ASAN
+ fresh_perl_is(<<'EOS',
+formline X000n^\\0,\\0^\\0for\0,0..10
+EOS
+ '',
+ {}, "[perl #17844] access beyond end of block");
+}
diff --git a/gnu/usr.bin/perl/t/op/concat2.t b/gnu/usr.bin/perl/t/op/concat2.t
index 8e962996eb3..a1cc0e6daf4 100644
--- a/gnu/usr.bin/perl/t/op/concat2.t
+++ b/gnu/usr.bin/perl/t/op/concat2.t
@@ -12,7 +12,7 @@ BEGIN {
set_up_inc('../lib');
}
-plan 3;
+plan 4;
# This test is in the file because overload.pm uses concatenation.
{ package o; use overload '""' => sub { $_[0][0] } }
@@ -57,3 +57,19 @@ fresh_perl_is <<'end', "tmp\ntmp\n", {},
print canonpath(bless {},"Path::Class::Dir"), "\n";
end
"recursive concat does not share TARGs";
+
+# don't include the assign as part of the multiconcat if the target
+# includes 'local'. This used to screw up on magic vars because the
+# 'local $~' was done (thus emptying the var) before multiconcat was
+# called.
+
+
+{
+ local $~ = 'FOO';
+ my $s;
+ {
+ local $~ = "$~X";
+ $s = $~;
+ }
+ is($s, 'FOOX', 'local $magic_var = "...."');
+}
diff --git a/gnu/usr.bin/perl/t/op/cond.t b/gnu/usr.bin/perl/t/op/cond.t
index 25d506047b6..ae381c99671 100644
--- a/gnu/usr.bin/perl/t/op/cond.t
+++ b/gnu/usr.bin/perl/t/op/cond.t
@@ -13,4 +13,19 @@ $x = 1;
is( $x ? 1 : 0, 1, 'run time, true');
is( !$x ? 0 : 1, 1, 'run time, false');
+# This used to SEGV due to deep recursion in Perl_scalar().
+# (Actually it only SEGVed with the depth being about 100_000; but
+# compiling the nested condition goes quadratic in some way, so I've
+# reduced to the count to a manageable size. So this is not so much a
+# proper test, as it is a comment on the sort of thing that used to break)
+
+{
+ my $e = "1";
+ $e = "(\$x ? 1 : $e)" for 1..20_000;
+ $e = "\$x = $e";
+ eval $e;
+ is $@, "", "SEGV in Perl_scalar";
+}
+
+
done_testing();
diff --git a/gnu/usr.bin/perl/t/op/const-optree.t b/gnu/usr.bin/perl/t/op/const-optree.t
index 4d897d247ef..3a8181beb8e 100644
--- a/gnu/usr.bin/perl/t/op/const-optree.t
+++ b/gnu/usr.bin/perl/t/op/const-optree.t
@@ -8,7 +8,7 @@ BEGIN {
require './test.pl';
set_up_inc('../lib');
}
-plan 168;
+plan 148;
# @tests is an array of hash refs, each of which can have various keys:
#
@@ -25,6 +25,11 @@ plan 168;
# deprecated - whether the sub returning a code ref will emit a depreca-
# tion warning when called
# method - whether the sub has the :method attribute
+# exception - sub now throws an exception (previously threw
+# deprecation warning)
+
+my $exception_134138 = 'Constants from lexical variables potentially modified '
+ . 'elsewhere are no longer permitted';
# [perl #63540] Don’t treat sub { if(){.....}; "constant" } as a constant
sub blonk { ++$blonk_was_called }
@@ -47,11 +52,7 @@ push @tests, {
push @tests, {
nickname => 'sub with simple lexical modified elsewhere',
generator => sub { my $x = 5; my $ret = sub(){$x}; $x = 7; $ret },
- retval => 5, # change to 7 when the deprecation cycle is over
- same_retval => 0,
- inlinable => 1,
- deprecated => 1,
- method => 0,
+ exception => $exception_134138,
};
push @tests, {
@@ -184,11 +185,7 @@ push @tests, {
my $sub1 = sub () { $x++ };
$ret;
},
- retval => 5,
- same_retval => 0,
- inlinable => 1,
- deprecated => 1,
- method => 0,
+ exception => $exception_134138,
};
push @tests, {
nickname => 'complex lexical op tree before an lvalue closure',
@@ -307,11 +304,7 @@ push @tests, {
eval '$outer++';
$ret;
},
- retval => 43,
- same_retval => 0,
- inlinable => 1,
- deprecated => 1,
- method => 0,
+ exception => $exception_134138,
};
push @tests, {
nickname => 'sub () { $x } with s///ee in scope',
@@ -322,11 +315,7 @@ push @tests, {
$dummy =~ s//$dummy/ee;
$ret;
},
- retval => 43,
- same_retval => 0,
- inlinable => 1,
- deprecated => 1,
- method => 0,
+ exception => $exception_134138,
};
push @tests, {
nickname => 'sub () { $x } with eval not in scope',
@@ -414,11 +403,7 @@ push @tests, {
push @tests, {
nickname => 'sub closing over state var++',
generator => sub { state $x++; sub () { $x } },
- retval => 1,
- same_retval => 0,
- inlinable => 1,
- deprecated => 1,
- method => 0,
+ exception => $exception_134138,
};
@@ -426,6 +411,12 @@ use feature 'refaliasing';
no warnings 'experimental::refaliasing';
for \%_ (@tests) {
my $nickname = $_{nickname};
+ if (exists $_{exception} and $_{exception}) {
+ local $@;
+ eval { my $sub = &{$_{generator}}; };
+ like($@, qr/$_{exception}/, "$nickname: now throws exception (RT 134138)");
+ next;
+ }
my $w;
local $SIG{__WARN__} = sub { $w = shift };
my $sub = &{$_{generator}};
@@ -492,3 +483,4 @@ pass("No assertion failure when turning on PADSTALE on lexical shared by"
$z = &$sub;
is $z, $y, 'inlinable sub ret vals are not swipable';
}
+
diff --git a/gnu/usr.bin/perl/t/op/coreamp.t b/gnu/usr.bin/perl/t/op/coreamp.t
index 7231d66e81a..3320ff75d20 100644
--- a/gnu/usr.bin/perl/t/op/coreamp.t
+++ b/gnu/usr.bin/perl/t/op/coreamp.t
@@ -1158,20 +1158,20 @@ like $@, qr'^Undefined format "STDOUT" called',
File::Spec::Functions::catfile(
File::Spec::Functions::updir,'regen','keywords.pl'
);
+ my %nottest_words = map { $_ => 1 } qw(
+ AUTOLOAD BEGIN CHECK CORE DESTROY END INIT UNITCHECK
+ __DATA__ __END__
+ and cmp default do dump else elsif eq eval for foreach format ge given goto
+ grep gt if isa last le local lt m map my ne next no or our package print
+ printf q qq qr qw qx redo require return s say sort state sub tr unless
+ until use when while x xor y
+ );
open my $kh, $keywords_file
or die "$0 cannot open $keywords_file: $!";
while(<$kh>) {
if (m?__END__?..${\0} and /^[-+](.*)/) {
my $word = $1;
- next if
- $word =~ /^(?:s(?:tate|ort|ay|ub)?|d(?:ef
- ault|ump|o)|p(?:rintf?|ackag
- e)|e(?:ls(?:if|e)|val|q)|g(?:[et]|iven|oto
- |rep)|u(?:n(?:less|til)|se)|l(?:(?:as)?t|ocal|e)|re
- (?:quire|turn|do)|__(?:DATA|END)__|for(?:each|mat)?|(?:
- AUTOLOA|EN)D|n(?:e(?:xt)?|o)|C(?:HECK|ORE)|wh(?:ile|en)
- |(?:ou?|t)r|m(?:ap|y)?|UNITCHECK|q[qrwx]?|x(?:or)?|DEST
- ROY|BEGIN|INIT|and|cmp|if|y)\z/x;
+ next if $nottest_words{$word};
$tests ++;
ok exists &{"my$word"}
|| (eval{&{"CORE::$word"}}, $@ =~ /cannot be called directly/),
diff --git a/gnu/usr.bin/perl/t/op/coresubs.t b/gnu/usr.bin/perl/t/op/coresubs.t
index 2ee63ef5fc5..1fa11c02f05 100644
--- a/gnu/usr.bin/perl/t/op/coresubs.t
+++ b/gnu/usr.bin/perl/t/op/coresubs.t
@@ -17,7 +17,7 @@ use B;
my %unsupported = map +($_=>1), qw (
__DATA__ __END__ AUTOLOAD BEGIN UNITCHECK CORE DESTROY END INIT CHECK and
cmp default do dump else elsif eq eval for foreach
- format ge given goto grep gt if last le local lt m map my ne next
+ format ge given goto grep gt if isa last le local lt m map my ne next
no or our package print printf q qq qr qw qx redo require
return s say sort state sub tr unless until use
when while x xor y
diff --git a/gnu/usr.bin/perl/t/op/die.t b/gnu/usr.bin/perl/t/op/die.t
index ef2b85f8f53..eec1e8e4857 100644
--- a/gnu/usr.bin/perl/t/op/die.t
+++ b/gnu/usr.bin/perl/t/op/die.t
@@ -6,7 +6,9 @@ BEGIN {
set_up_inc('../lib');
}
-plan tests => 20;
+plan tests => 21;
+
+use utf8; # Tell EBCDIC translator to make this UTF-8,
eval {
eval {
@@ -94,6 +96,10 @@ like($@, qr/\.{3}propagated at/, '... and appends a phrase');
local $SIG{__WARN__} = sub { $ok = 0 };
eval { undef $@; die };
is( $ok, 1, 'no warnings if $@ is undef' );
+
+ eval { $@ = 100; die };
+ like($@."", qr/100\t\.{3}propagated at/,
+ 'check non-PVs in $@ are propagated');
}
TODO: {
diff --git a/gnu/usr.bin/perl/t/op/die_unwind.t b/gnu/usr.bin/perl/t/op/die_unwind.t
index eee1ce534b0..4b83ee6fac8 100644
--- a/gnu/usr.bin/perl/t/op/die_unwind.t
+++ b/gnu/usr.bin/perl/t/op/die_unwind.t
@@ -69,4 +69,8 @@ is($uerr, "t3\n");
is($val, undef, "undefined return value from 'eval' block with 'die'");
is($err, "t3\n");
+fresh_perl_like(<<'EOS', qr/Custom Message During Global Destruction/, { switches => ['-w'], stderr => 1 } );
+package Foo; sub DESTROY { die "Custom Message During Global Destruction" }; package main; our $wut = bless [], "Foo"
+EOS
+
done_testing();
diff --git a/gnu/usr.bin/perl/t/op/exec.t b/gnu/usr.bin/perl/t/op/exec.t
index c676a972d14..e658d2e1eca 100644
--- a/gnu/usr.bin/perl/t/op/exec.t
+++ b/gnu/usr.bin/perl/t/op/exec.t
@@ -113,6 +113,8 @@ unless( ok($rc == 255 << 8 or $rc == -1 or $rc == 256 or $rc == 512) ) {
unless ( ok( $! == 2 or $! =~ /\bno\b.*\bfile/i or
$! == 13 or $! =~ /permission denied/i or
+ $! == 20 or $! =~ /not a directory/i or # If PATH component is
+ # a non-directory
$! == 22 or $! =~ /invalid argument/i ) ) {
diag sprintf "\$! eq %d, '%s'\n", $!, $!;
}
diff --git a/gnu/usr.bin/perl/t/op/fork.t b/gnu/usr.bin/perl/t/op/fork.t
index be3125d673c..d1c4039967b 100644
--- a/gnu/usr.bin/perl/t/op/fork.t
+++ b/gnu/usr.bin/perl/t/op/fork.t
@@ -10,7 +10,7 @@ BEGIN {
skip_all('no fork')
unless ($Config::Config{d_fork} or $Config::Config{d_pseudofork});
skip_all('no fork')
- if $^O eq 'MSWin32' && is_miniperl;
+ if $^O eq 'MSWin32' && is_miniperl();
}
$|=1;
diff --git a/gnu/usr.bin/perl/t/op/getppid.t b/gnu/usr.bin/perl/t/op/getppid.t
index fc0fa529705..0a5dbcef1aa 100755
--- a/gnu/usr.bin/perl/t/op/getppid.t
+++ b/gnu/usr.bin/perl/t/op/getppid.t
@@ -100,7 +100,7 @@ sub fork_and_retrieve {
}
} else {
# Fudge it by waiting a bit more:
- sleep 3;
+ sleep 2;
}
my $ppid2 = getppid();
print $w "$how,$ppid1,$ppid2\n";
diff --git a/gnu/usr.bin/perl/t/op/goto.t b/gnu/usr.bin/perl/t/op/goto.t
index 08b612b8a58..db08e1e2c12 100644
--- a/gnu/usr.bin/perl/t/op/goto.t
+++ b/gnu/usr.bin/perl/t/op/goto.t
@@ -10,7 +10,7 @@ BEGIN {
use warnings;
use strict;
-plan tests => 124;
+plan tests => 125;
our $TODO;
my $deprecated = 0;
@@ -884,3 +884,20 @@ eval {
};
};
is $@,'', 'goto the first parameter of a binary expression [perl #132854]';
+
+# v5.31.3-198-gd2cd363728 broke this. goto &XS_sub wasn't restoring
+# cx->blk_sub.old_cxsubix. Would panic in pp_return
+
+{
+ # isa is an XS sub
+ sub g198 { goto &UNIVERSAL::isa }
+
+ sub f198 {
+ g198([], 1 );
+ {
+ return 1;
+ }
+ }
+ eval { f198(); };
+ is $@, "", "v5.31.3-198-gd2cd363728";
+}
diff --git a/gnu/usr.bin/perl/t/op/groups.t b/gnu/usr.bin/perl/t/op/groups.t
index 69ea0a19576..83d488298b4 100644
--- a/gnu/usr.bin/perl/t/op/groups.t
+++ b/gnu/usr.bin/perl/t/op/groups.t
@@ -313,7 +313,7 @@ sub perl_groups {
# Why does this test prefer to not test groups which we don't have
# a name for? One possible answer is that my primary group comes
- # from from my entry in the user database but isn't mentioned in
+ # from my entry in the user database but isn't mentioned in
# the group database. Are there more reasons?
next if ! defined $group;
diff --git a/gnu/usr.bin/perl/t/op/gv.t b/gnu/usr.bin/perl/t/op/gv.t
index 8dc7f137fae..4136ca29a3d 100644
--- a/gnu/usr.bin/perl/t/op/gv.t
+++ b/gnu/usr.bin/perl/t/op/gv.t
@@ -184,7 +184,7 @@ is (*{*x{GLOB}}, "*main::STDOUT");
my $val = *x{FILEHANDLE};
# deprecation warning removed in v5.23 -- rjbs, 2015-12-31
- # https://rt.perl.org/Ticket/Display.html?id=127060
+ # https://github.com/Perl/perl5/issues/15105
print {*x{IO}} (! defined $warn
? "ok $test\n" : "not ok $test\n");
curr_test(++$test);
diff --git a/gnu/usr.bin/perl/t/op/hexfp.t b/gnu/usr.bin/perl/t/op/hexfp.t
index 64f81364b7f..b0c85cfdc6a 100644
--- a/gnu/usr.bin/perl/t/op/hexfp.t
+++ b/gnu/usr.bin/perl/t/op/hexfp.t
@@ -10,7 +10,7 @@ use strict;
use Config;
-plan(tests => 123);
+plan(tests => 125);
# Test hexfloat literals.
@@ -149,7 +149,7 @@ sub get_warn() {
undef $a;
eval '$a = eval "0x.3"';
- is($a, '03');
+ is($a, undef); # throws an error
undef $a;
eval '$a = eval "0xc.3"';
@@ -277,6 +277,20 @@ is(0b1p0, 1);
is(0b10p0, 2);
is(0b1.1p0, 1.5);
+# previously these would pass "0x..." to the overload instead of the appropriate
+# "0b" or "0" prefix.
+fresh_perl_is(<<'CODE', "1", {}, "overload binary fp");
+use overload;
+BEGIN { overload::constant float => sub { return eval $_[0]; }; }
+print 0b0.1p1;
+CODE
+
+fresh_perl_is(<<'CODE', "1", {}, "overload octal fp");
+use overload;
+BEGIN { overload::constant float => sub { return eval $_[0]; }; }
+print 00.1p3;
+CODE
+
# sprintf %a/%A testing is done in sprintf2.t,
# trickier than necessary because of long doubles,
# and because looseness of the spec.
diff --git a/gnu/usr.bin/perl/t/op/index.t b/gnu/usr.bin/perl/t/op/index.t
index 858d03deb4c..2f0834e8d1e 100644
--- a/gnu/usr.bin/perl/t/op/index.t
+++ b/gnu/usr.bin/perl/t/op/index.t
@@ -8,7 +8,7 @@ BEGIN {
}
use strict;
-plan( tests => 412 );
+plan( tests => 414 );
run_tests() unless caller;
@@ -332,4 +332,30 @@ sub run_tests {
}
+ {
+ my $store = 100;
+ package MyTie {
+ require Tie::Scalar;
+ our @ISA = qw(Tie::StdScalar);
+ sub STORE {
+ my ($self, $value) = @_;
+
+ $store = $value;
+ }
+ };
+ my $x;
+ tie $x, "MyTie";
+ $x = (index("foo", "o") == -1);
+ ok(!$store, 'magic called on $lexical = (index(...) == -1)');
+ }
+ {
+ is(eval <<'EOS', "a", 'optimized $lex = (index(...) == -1) is an lvalue');
+my $y = "foo";
+my $z = "o";
+my $x;
+($x = (index($y, $z) == -1)) =~ s/^/a/;
+$x;
+EOS
+ }
+
} # end of sub run_tests
diff --git a/gnu/usr.bin/perl/t/op/int.t b/gnu/usr.bin/perl/t/op/int.t
index 7e936da68d1..b730ab26720 100644
--- a/gnu/usr.bin/perl/t/op/int.t
+++ b/gnu/usr.bin/perl/t/op/int.t
@@ -7,7 +7,7 @@ BEGIN {
require Config;
}
-plan 17;
+plan 19;
# compile time evaluation
@@ -83,3 +83,6 @@ SKIP:
cmp_ok($x, "==", int($x), "check $x == int($x)");
}
}
+
+is(1+"0x10", 1, "check string '0x' prefix not treated as hex");
+is(1+"0b10", 1, "check string '0b' prefix not treated as binary");
diff --git a/gnu/usr.bin/perl/t/op/lc.t b/gnu/usr.bin/perl/t/op/lc.t
index 69975b43fd9..fce77f3d341 100644
--- a/gnu/usr.bin/perl/t/op/lc.t
+++ b/gnu/usr.bin/perl/t/op/lc.t
@@ -421,7 +421,7 @@ SKIP: {
is (lc "${filler}I\x{307}\x{300}$filler", "${filler_lc}i\x{300}$filler_lc",
"lc in Turkic locale with DOT ABOVE followed by ABOVE");
is (lc "${filler}I\x{300}\x{307}$filler", "$filler_lc\x{131}\x{300}\x{307}$filler_lc",
- "lc in Turkic locale with with other ABOVE before DOT ABOVE");
+ "lc in Turkic locale with other ABOVE before DOT ABOVE");
is (lcfirst "IIIIIII$filler", "\x{131}IIIIII$filler",
"lcfirst in Turkic locale, only first I changed");
is (lcfirst "I\x{307}$filler", "i$filler",
@@ -434,7 +434,7 @@ SKIP: {
is (lcfirst "I\x{307}\x{300}IIIIII$filler", "i\x{300}IIIIII$filler",
"lcfirst in Turkic locale with DOT ABOVE followed by ABOVE");
is (lcfirst "I\x{300}\x{307}IIIIII$filler", "\x{131}\x{300}\x{307}IIIIII$filler",
- "lcfirst in Turkic locale with with other ABOVE before DOT ABOVE");
+ "lcfirst in Turkic locale with other ABOVE before DOT ABOVE");
is (uc "${filler}i$filler", "$filler_uc\x{130}$filler_uc", "long string uc in Turkic locale");
is (ucfirst "ii$filler", "\x{130}i$filler", "long string ucfirst in Turkic locale; only first char changes");
}
diff --git a/gnu/usr.bin/perl/t/op/list.t b/gnu/usr.bin/perl/t/op/list.t
index 2acb03a321e..30ec3d878c2 100644
--- a/gnu/usr.bin/perl/t/op/list.t
+++ b/gnu/usr.bin/perl/t/op/list.t
@@ -6,7 +6,7 @@ BEGIN {
set_up_inc(qw(. ../lib));
}
-plan( tests => 72 );
+plan( tests => 73 );
@foo = (1, 2, 3, 4);
cmp_ok($foo[0], '==', 1, 'first elem');
@@ -268,3 +268,10 @@ q[ x
];
}
EOS
+
+# this used to SEGV due to deep recursion in Perl_list()
+
+{
+ my $e = "1"; $e = "(1,$e)" for 1..100_000; $e = "() = $e"; eval $e;
+ is $@, "", "SEGV in Perl_list";
+}
diff --git a/gnu/usr.bin/perl/t/op/lvref.t b/gnu/usr.bin/perl/t/op/lvref.t
index 3d5e952fb0d..3991a537804 100644
--- a/gnu/usr.bin/perl/t/op/lvref.t
+++ b/gnu/usr.bin/perl/t/op/lvref.t
@@ -1,10 +1,11 @@
+#!perl
BEGIN {
chdir 't';
require './test.pl';
set_up_inc("../lib");
}
-plan 164;
+plan 167;
eval '\$x = \$y';
like $@, qr/^Experimental aliasing via reference not enabled/,
@@ -291,6 +292,18 @@ package CodeTest {
my sub bs;
\(&cs) = expect_list_cx;
is \&cs, \&ThatSub, '\(&statesub)';
+
+ package main {
+ # this is only a problem in main:: due to 1e2cfe157ca
+ sub sx { "x" }
+ sub sy { "y" }
+ is sx(), "x", "check original";
+ my $temp = \&sx;
+ \&sx = \&sy;
+ is sx(), "y", "aliased";
+ \&sx = $temp;
+ is sx(), "x", "and restored";
+ }
}
# Mixed List Assignments
diff --git a/gnu/usr.bin/perl/t/op/magic.t b/gnu/usr.bin/perl/t/op/magic.t
index 27c1d43da01..e0dfcf93a1c 100644
--- a/gnu/usr.bin/perl/t/op/magic.t
+++ b/gnu/usr.bin/perl/t/op/magic.t
@@ -5,7 +5,7 @@ BEGIN {
chdir 't' if -d 't';
require './test.pl';
set_up_inc( '../lib' );
- plan (tests => 195); # some tests are run in BEGIN block
+ plan (tests => 192); # some tests are run in BEGIN block
}
# Test that defined() returns true for magic variables created on the fly,
@@ -104,7 +104,7 @@ END {
eval '$ENV{"FOO"} = "hi there";'; # check that ENV is inited inside eval
# cmd.exe will echo 'variable=value' but 4nt will echo just the value
# -- Nikola Knezevic
-if ($Is_MSWin32) { like `set FOO`, qr/^(?:FOO=)?hi there$/; }
+if ($Is_MSWin32) { like `set FOO`, qr/^(?:FOO=)?hi there$/m; }
elsif ($Is_VMS) { is `write sys\$output f\$trnlnm("FOO")`, "hi there\n"; }
else { is `echo \$FOO`, "hi there\n"; }
@@ -483,8 +483,7 @@ SKIP: {
}
# Check that we don't auto-load packages
-foreach (['powie::!', 'Errno'],
- ['powie::+', 'Tie::Hash::NamedCapture']) {
+foreach (['powie::!', 'Errno']) {
my ($symbol, $package) = @$_;
SKIP: {
(my $extension = $package) =~ s|::|/|g;
@@ -613,10 +612,9 @@ SKIP: {
}
SKIP: {
- skip_if_miniperl("No XS in miniperl", 2);
+ skip_if_miniperl("No XS in miniperl", 1);
- for ( [qw( %- Tie::Hash::NamedCapture )],
- [qw( %! Errno )] ) {
+ for ( [qw( %! Errno )] ) {
my ($var, $mod) = @$_;
my $modfile = $mod =~ s|::|/|gr . ".pm";
fresh_perl_is
diff --git a/gnu/usr.bin/perl/t/op/qr.t b/gnu/usr.bin/perl/t/op/qr.t
index e03a465430b..b726f3c686f 100644
--- a/gnu/usr.bin/perl/t/op/qr.t
+++ b/gnu/usr.bin/perl/t/op/qr.t
@@ -100,7 +100,7 @@ is ref \$t2, 'main', 'regexp assignment is not maledictory';
sub {
$_[0] = ${qr=crumpets=};
is ref\$_[0], 'REGEXP', 'PVLVs';
- # Don’t use like() here, as we would no longer be testing a PVLV.
+ # Don't use like() here, as we would no longer be testing a PVLV.
ok " crumpets " =~ $_[0], 'using a regexpvlv as regexp';
my $x = $_[0];
is ref\$x, 'REGEXP', 'copying a regexpvlv';
diff --git a/gnu/usr.bin/perl/t/op/range.t b/gnu/usr.bin/perl/t/op/range.t
index 19ae1269ca3..2deefc61cf9 100644
--- a/gnu/usr.bin/perl/t/op/range.t
+++ b/gnu/usr.bin/perl/t/op/range.t
@@ -9,7 +9,7 @@ BEGIN {
use Config;
-plan (146);
+plan (162);
is(join(':',1..5), '1:2:3:4:5');
@@ -112,6 +112,27 @@ is(join(":","-4".."-0") , "-4:-3:-2:-1:0");
is(join(":","-4\n".."0\n") , "-4:-3:-2:-1:0");
is(join(":","-4\n".."-0\n"), "-4:-3:-2:-1:0");
+# [#133695] "0".."-1" should be the same as 0..-1
+is(join(":","-2".."-1") , "-2:-1");
+is(join(":","-1".."-1") , "-1");
+is(join(":","0".."-1") , "");
+is(join(":","1".."-1") , "");
+
+# these test the statements made in the documentation
+# regarding the rules of string ranges
+is(join(":","-2".."2"), join(":",-2..2));
+is(join(":","2.18".."3.14"), "2:3");
+is(join(":","01".."04"), "01:02:03:04");
+is(join(":","00".."-1"), "00:01:02:03:04:05:06:07:08:09: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:65:66:67:68:69:70:71:72:73:74:75:76:77:78:79:80:81:82:83:84:85:86:87:88:89:90:91:92:93:94:95:96:97:98:99");
+is(join(":","00".."31"), "00:01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:25:26:27:28:29:30:31");
+is(join(":","ax".."az"), "ax:ay:az");
+is(join(":","*x".."az"), "*x");
+is(join(":","A".."Z"), "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");
+is(join(":", 0..9,"a".."f"), "0:1:2:3:4:5:6:7:8:9:a:b:c:d:e:f");
+is(join(":","a".."--"), join(":","a".."zz"));
+is(join(":","0".."xx"), "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:65:66:67:68:69:70:71:72:73:74:75:76:77:78:79:80:81:82:83:84:85:86:87:88:89:90:91:92:93:94:95:96:97:98:99");
+is(join(":","aaa".."--"), "");
+
# undef should be treated as 0 for numerical range
is(join(":",undef..2), '0:1:2');
is(join(":",-2..undef), '-2:-1:0');
diff --git a/gnu/usr.bin/perl/t/op/readdir.t b/gnu/usr.bin/perl/t/op/readdir.t
index fa155d9e36c..497f55108aa 100644
--- a/gnu/usr.bin/perl/t/op/readdir.t
+++ b/gnu/usr.bin/perl/t/op/readdir.t
@@ -57,9 +57,9 @@ is(ref $fh{abc}, 'GLOB');
isnt("$fh", "$fh[0]");
isnt("$fh", "$fh{abc}");
-# See that perl does not segfault upon readdir($x=".");
-# http://rt.perl.org/rt3/Ticket/Display.html?id=68182
-fresh_perl_like(<<'EOP', qr/^no crash/, {}, 'RT #68182');
+# See that perl does not segfault upon readdir($x=".");
+# https://github.com/Perl/perl5/issues/9813
+fresh_perl_like(<<'EOP', qr/^no crash/, {}, 'GH #9813');
eval {
my $x = ".";
my @files = readdir($x);
diff --git a/gnu/usr.bin/perl/t/op/ref.t b/gnu/usr.bin/perl/t/op/ref.t
index 19163ef4767..433cf8257f6 100644
--- a/gnu/usr.bin/perl/t/op/ref.t
+++ b/gnu/usr.bin/perl/t/op/ref.t
@@ -497,7 +497,7 @@ is (runperl(
# using a regex in the destructor for STDOUT segfaulted because the
# REGEX pad had already been freed (ithreads build only). The
-# object is required to trigger the early freeing of GV refs to to STDOUT
+# object is required to trigger the early freeing of GV refs to STDOUT
TODO: {
local $TODO = "works but output through pipe is mangled" if $^O eq 'VMS';
diff --git a/gnu/usr.bin/perl/t/op/require_errors.t b/gnu/usr.bin/perl/t/op/require_errors.t
index 2226c97130c..637457bc1f7 100644
--- a/gnu/usr.bin/perl/t/op/require_errors.t
+++ b/gnu/usr.bin/perl/t/op/require_errors.t
@@ -9,7 +9,7 @@ BEGIN {
use strict;
use warnings;
-plan(tests => 54);
+plan(tests => 57);
my $nonfile = tempfile();
@@ -271,3 +271,15 @@ eval "require \"$nonsearch\"";
like $@, qr/^Can't locate \Q$nonsearch\E at/,
"correct error message for require $nonsearch";
+
+{
+ # make sure require doesn't treat a non-PL_sv_undef undef as
+ # success in %INC
+ # GH #17428
+ push @INC, "lib";
+ ok(!eval { require CannotParse; }, "should fail to load");
+ local %INC = %INC; # copies \&PL_sv_undef into a new undef
+ ok(!eval { require CannotParse; },
+ "check the second attempt also fails");
+ like $@, qr/Attempt to reload/, "check we failed for the right reason";
+}
diff --git a/gnu/usr.bin/perl/t/op/reverse.t b/gnu/usr.bin/perl/t/op/reverse.t
index 16c732bc3fd..babf3cf3ac6 100644
--- a/gnu/usr.bin/perl/t/op/reverse.t
+++ b/gnu/usr.bin/perl/t/op/reverse.t
@@ -6,7 +6,7 @@ BEGIN {
set_up_inc('../lib');
}
-plan tests => 24;
+plan tests => 25;
is(reverse("abc"), "cba", 'simple reverse');
@@ -92,6 +92,15 @@ use Tie::Array;
is($a, $c, 'Unicode string double reversal matches original');
}
+{
+ # https://github.com/Perl/perl5/issues/17737
+ # utf8 length magic handling
+ # threw an assertion failure with -DDEBUGGING
+ my @x;
+ push @x, length reverse for split "-", "\x{100}--0";
+ is($x[1], 0, "check set magic being called to clear length magic");
+}
+
# [perl #132544] stack pointer used to go wild when nullary reverse
# required extending the stack
for(0..1000){()=(0..$_,scalar reverse )}
diff --git a/gnu/usr.bin/perl/t/op/signatures.t b/gnu/usr.bin/perl/t/op/signatures.t
index 37fe1662c89..80fde83cffa 100644
--- a/gnu/usr.bin/perl/t/op/signatures.t
+++ b/gnu/usr.bin/perl/t/op/signatures.t
@@ -1126,10 +1126,10 @@ syntax error at foo line 8, near "\$\$) "
EOF
eval "#line 8 foo\nsub t101 (\@_) { }";
-like $@, qr/\ACan't use global \@_ in "my" at foo line 8/;
+like $@, qr/\ACan't use global \@_ in subroutine signature at foo line 8/;
eval "#line 8 foo\nsub t102 (\%_) { }";
-like $@, qr/\ACan't use global \%_ in "my" at foo line 8/;
+like $@, qr/\ACan't use global \%_ in subroutine signature at foo line 8/;
my $t103 = sub ($a) { $a || "z" };
is prototype($t103), undef;
@@ -1553,6 +1553,42 @@ while(<$kh>) {
"RT 132760 err 0";
}
+# check that warnings come from the correct line
+
+{
+ my @warn;
+ local $SIG{__WARN__} = sub { push @warn, @_};
+ eval q{
+ sub multiline1 (
+ $a,
+ $b = $a + 1,
+ $c = $a + 1)
+ {
+ my $d = $a + 1;
+ my $e = $a + 1;
+ }
+ };
+ multiline1(undef);
+ like $warn[0], qr/line 4,/, 'multiline1: $b';
+ like $warn[1], qr/line 5,/, 'multiline1: $c';
+ like $warn[2], qr/line 7,/, 'multiline1: $d';
+ like $warn[3], qr/line 8,/, 'multiline1: $e';
+}
+
+# check errors for using global vars as params
+
+{
+ eval q{ sub ($_) {} };
+ like $@, qr/Can't use global \$_ in subroutine signature/, 'f($_)';
+ eval q{ sub (@_) {} };
+ like $@, qr/Can't use global \@_ in subroutine signature/, 'f(@_)';
+ eval q{ sub (%_) {} };
+ like $@, qr/Can't use global \%_ in subroutine signature/, 'f(%_)';
+ eval q{ sub ($1) {} };
+ like $@, qr/Illegal operator following parameter in a subroutine signature/,
+ 'f($1)';
+}
+
done_testing;
1;
diff --git a/gnu/usr.bin/perl/t/op/sort.t b/gnu/usr.bin/perl/t/op/sort.t
index d201f00afd9..f2e139dff06 100644
--- a/gnu/usr.bin/perl/t/op/sort.t
+++ b/gnu/usr.bin/perl/t/op/sort.t
@@ -7,7 +7,8 @@ BEGIN {
set_up_inc('../lib');
}
use warnings;
-plan(tests => 199);
+plan(tests => 203);
+use Tie::Array; # we need to test sorting tied arrays
# these shouldn't hang
{
@@ -433,7 +434,6 @@ cmp_ok($x,'eq','123',q(optimized-away comparison block doesn't take any other ar
@a = qw(b c a); $r1 = \$a[1]; @a = sort mysort @a; $r2 = \$a[0];
is "$$r1-$$r2-@a", "c-c-c b a", "inplace sort with function of lexical";
- use Tie::Array;
my @t;
tie @t, 'Tie::StdArray';
@@ -494,6 +494,25 @@ cmp_ok($x,'eq','123',q(optimized-away comparison block doesn't take any other ar
is ("@a", "3 4 5", "RT #128340");
}
+{
+ @Tied_Array_EXTEND_Test::ISA= 'Tie::StdArray';
+ my $extend_count;
+ sub Tied_Array_EXTEND_Test::EXTEND {
+ $extend_count= $_[1];
+ return;
+ }
+ my @t;
+ tie @t, "Tied_Array_EXTEND_Test";
+ is($extend_count, undef, "test that EXTEND has not been called prior to initialization");
+ $t[0]=3;
+ $t[1]=1;
+ $t[2]=2;
+ is($extend_count, undef, "test that EXTEND has not been called during initialization");
+ @t= sort @t;
+ is($extend_count, 3, "test that EXTEND was called with an argument of 3 by pp_sort()");
+ is("@t","1 2 3","test that sorting the tied array worked even though EXTEND is a no-op");
+}
+
# Test optimisations of reversed sorts. As we now guarantee stability by
# default, # optimisations which do not provide this are bogus.
diff --git a/gnu/usr.bin/perl/t/op/split.t b/gnu/usr.bin/perl/t/op/split.t
index b25d6cbf4cf..14f91584448 100644
--- a/gnu/usr.bin/perl/t/op/split.t
+++ b/gnu/usr.bin/perl/t/op/split.t
@@ -557,7 +557,7 @@ is "@a", '1 2 3', 'assignment to split-to-array (stacked)';
is $c, 2, "run-time re-eval count";
}
-# check that that my/local @array = split works
+# check that my/local @array = split works
{
my $s = "a:b:c";
diff --git a/gnu/usr.bin/perl/t/op/sprintf.t b/gnu/usr.bin/perl/t/op/sprintf.t
index 6699a5cda4a..f08a92d9096 100644
--- a/gnu/usr.bin/perl/t/op/sprintf.t
+++ b/gnu/usr.bin/perl/t/op/sprintf.t
@@ -133,7 +133,7 @@ for (@tests) {
if ($cond =~ /^\d/) {
# >comment skip: hpux:10.20<
my $vsn = $cond;
- # Only compare on the the first pair of digits, as numeric
+ # Only compare on the first pair of digits, as numeric
# compares do not like 2.6.10-3mdksmp or 2.6.8-24.10-default
s/^(\d+(\.\d+)?).*/$1/ for $osv, $vsn;
$skip = $vsn ? ($osv <= $vsn ? 1 : 0) : 1;
diff --git a/gnu/usr.bin/perl/t/op/sprintf2.t b/gnu/usr.bin/perl/t/op/sprintf2.t
index ea968790ce0..7cb5d9bf40d 100755
--- a/gnu/usr.bin/perl/t/op/sprintf2.t
+++ b/gnu/usr.bin/perl/t/op/sprintf2.t
@@ -684,6 +684,13 @@ for my $t (@hexfloat) {
}
}
}
+ if (!$ok && $^O eq "netbsd" && $t->[1] eq "exp(1)") {
+ SKIP:
+ {
+ skip "NetBSD's expl() is just exp() in disguise", 1;
+ }
+ next;
+ }
ok($ok, "'$format' '$arg' -> '$result' cf '$expected'");
}
@@ -840,6 +847,7 @@ SKIP: {
# [rt.perl.org #134008]
is(sprintf("%.*a", -99999, 1.03125), "0x1.08p+0", "[rt.perl.org #134008]");
+ is(sprintf("%.*a", -100000,0), "0x0p+0", "negative precision ignored by format_hexfp");
# [rt.perl.org #128890]
is(sprintf("%a", 0x1.18p+0), "0x1.18p+0");
@@ -1152,6 +1160,14 @@ foreach(
is sprintf("%.0f", $_), sprintf("%-.0f", $_), "special-case %.0f on $_";
}
+# large uvsize needed so the large width is parsed properly
+# large sizesize needed so the STRLEN check doesn't
+if ($Config{intsize} == 4 && $Config{uvsize} > 4 && $Config{sizesize} > 4) {
+ eval { my $x = sprintf("%7000000000E", 0) };
+ like($@, qr/^Numeric format result too large at /,
+ "croak for very large numeric format results");
+}
+
{
# gh #17221
my ($off1, $off2);
diff --git a/gnu/usr.bin/perl/t/op/stat.t b/gnu/usr.bin/perl/t/op/stat.t
index e0ce03b12a2..5ad119c4745 100644
--- a/gnu/usr.bin/perl/t/op/stat.t
+++ b/gnu/usr.bin/perl/t/op/stat.t
@@ -195,10 +195,8 @@ SKIP: {
# Going to try to switch away from root. Might not work.
my $olduid = $>;
eval { $> = 1; };
- skip "Can't test if an admin user in miniperl", 2,
- if $Is_Cygwin && is_miniperl();
skip "Can't test -r or -w meaningfully if you're superuser", 2
- if ($> == 0);
+ if ($Is_Cygwin ? _ingroup(544, 1) : $> == 0);
SKIP: {
skip "Can't test -r meaningfully?", 1 if $Is_Dos;
@@ -650,3 +648,17 @@ END {
chmod 0666, $tmpfile;
unlink_all $tmpfile;
}
+
+sub _ingroup {
+ my ($gid, $eff) = @_;
+
+ $^O eq "VMS" and return $_[0] == $);
+
+ my ($egid, @supp) = split " ", $);
+ my ($rgid) = split " ", $(;
+
+ $gid == ($eff ? $egid : $rgid) and return 1;
+ grep $gid == $_, @supp and return 1;
+
+ return "";
+}
diff --git a/gnu/usr.bin/perl/t/op/sub.t b/gnu/usr.bin/perl/t/op/sub.t
index 2b8ebcc4631..11d7147e5df 100644
--- a/gnu/usr.bin/perl/t/op/sub.t
+++ b/gnu/usr.bin/perl/t/op/sub.t
@@ -406,7 +406,7 @@ is ref($main::{rt_129916}), 'CODE', 'simple sub stored as CV in stash (main::)';
# Calling xsub via ampersand syntax when @_ has holes
SKIP: {
skip "no XS::APItest on miniperl" if is_miniperl;
- require XS::APItest;
+ skip "XS::APItest not available", 1 if ! eval { require XS::APItest };
local *_;
$_[1] = 1;
&XS::APItest::unshift_and_set_defav;
diff --git a/gnu/usr.bin/perl/t/op/sub_lval.t b/gnu/usr.bin/perl/t/op/sub_lval.t
index 099bb649fd0..6062da43e16 100644
--- a/gnu/usr.bin/perl/t/op/sub_lval.t
+++ b/gnu/usr.bin/perl/t/op/sub_lval.t
@@ -969,7 +969,7 @@ for (
}
continue { $suffix = ' (explicit return)' }
-# Returning unwritables from nested lvalue sub call in in rvalue context
+# Returning unwritables from nested lvalue sub call in rvalue context
# First, ensure we are testing what we think we are:
if (!Internals::SvREADONLY($])) { Internals::SvREADONLY($],1); }
sub squibble : lvalue { return $] }
diff --git a/gnu/usr.bin/perl/t/op/svleak.t b/gnu/usr.bin/perl/t/op/svleak.t
index bfa6747a028..6acc298c3da 100644
--- a/gnu/usr.bin/perl/t/op/svleak.t
+++ b/gnu/usr.bin/perl/t/op/svleak.t
@@ -43,7 +43,7 @@ sub eleak {
}
# run some expression N times. The expr is concatenated N times and then
-# evaled, ensuring that that there are no scope exits between executions.
+# evaled, ensuring that there are no scope exits between executions.
# If the number of SVs at the end of expr N is greater than (N-1)*delta at
# the end of expr 1, we've got a leak
#
diff --git a/gnu/usr.bin/perl/t/op/taint.t b/gnu/usr.bin/perl/t/op/taint.t
index 4c76de34ea9..a7b11bc45bc 100644
--- a/gnu/usr.bin/perl/t/op/taint.t
+++ b/gnu/usr.bin/perl/t/op/taint.t
@@ -17,7 +17,7 @@ BEGIN {
use strict;
use Config;
-plan tests => 1043;
+plan tests => 1052;
$| = 1;
@@ -2914,6 +2914,33 @@ is_tainted("$ovtaint", "overload preserves taint");
or diag("\$@ = [$@]");
}
+{
+ # check that each param is independent taint-wise.
+ use feature 'signatures';
+ use experimental 'signatures';
+
+ sub taint_sig1($a, $b, $c) {
+ isnt_tainted($a, 'taint_sig1: $a');
+ is_tainted ($b, 'taint_sig1: $b');
+ isnt_tainted($c, 'taint_sig1: $c');
+ }
+ taint_sig1(1, $TAINT, 3);
+
+ sub taint_sig2($a, $b = $TAINT, $c = 3) {
+ isnt_tainted($a, 'taint_sig2: $a');
+ is_tainted ($b, 'taint_sig2: $b');
+ isnt_tainted($c, 'taint_sig2: $c');
+ }
+ taint_sig2(1);
+
+ sub taint_sig3($a, $b = 2, $c = $TAINT) {
+ is_tainted ($a, 'taint_sig3: $a');
+ isnt_tainted($b, 'taint_sig3: $b');
+ is_tainted ($c, 'taint_sig3: $c');
+ }
+ taint_sig3($TAINT);
+}
+
# This may bomb out with the alarm signal so keep it last
SKIP: {
diff --git a/gnu/usr.bin/perl/t/op/threads-dirh.t b/gnu/usr.bin/perl/t/op/threads-dirh.t
index e1d5c996add..bb4bcfc1418 100644
--- a/gnu/usr.bin/perl/t/op/threads-dirh.t
+++ b/gnu/usr.bin/perl/t/op/threads-dirh.t
@@ -11,6 +11,7 @@ BEGIN {
require Config;
skip_all_without_config('useithreads');
skip_all_if_miniperl("no dynamic loading on miniperl, no threads");
+ skip_all("runs out of memory on some EBCDIC") if $ENV{PERL_SKIP_BIG_MEM_TESTS};
plan(6);
}
diff --git a/gnu/usr.bin/perl/t/op/tr.t b/gnu/usr.bin/perl/t/op/tr.t
index 47d603d4fdf..cabcac65ac3 100644
--- a/gnu/usr.bin/perl/t/op/tr.t
+++ b/gnu/usr.bin/perl/t/op/tr.t
@@ -13,7 +13,7 @@ BEGIN {
use utf8;
-plan tests => 301;
+plan tests => 315;
# Test this first before we extend the stack with other operations.
# This caused an asan failure due to a bad write past the end of the stack.
@@ -45,18 +45,24 @@ like $@,
qr/Invalid range "\\x\{0101\}-\\x\{0100\}" in transliteration operator/,
"UTF-8 range with min > max";
+$_ = "0123456789";
+tr/10/01/;
+is($_, "1023456789", 'swapping 0 and 1');
+tr/01/10/;
+is($_, "0123456789", 'swapping 0 and 1');
# Test /c and variants, with all the search and replace chars being
# non-utf8, but with both non-utf8 and utf8 strings.
-{
+SKIP: {
my $all255 = join '', map chr, 0..0xff;
my $all255_twice = join '', map chr, map { ($_, $_) } 0..0xff;
- my $all255_plus = join '', map chr, 0..0x11f;
- my $all255_twice_plus = join '', map chr, map { ($_, $_) } 0..0x11f;
+ my $plus = join '', map chr, 0x100..0x11f;
+ my $plus_twice = join '', map chr, map { ($_, $_) } 0x100..0x11f;
+ my $all255_plus = $all255 . $plus;
+ my $all255_twice_plus = $all255_twice . $plus_twice;
my ($c, $s);
-
# length(replacement) == 0
# non-utf8 string
@@ -67,7 +73,7 @@ like $@,
$s = $all255;
$c = $s =~ tr/\x40-\xbf//cd;
- is $s, join('', map chr, 0x40..0xbf), "/cd ==0";
+ is $s, join('', map chr, 0x40.. 0xbf), "/cd ==0";
is $c, 0x80, "/cd ==0 count";
$s = $all255_twice;
@@ -443,6 +449,19 @@ like $@,
),
"/csd <U";
is $c, 0x120, "/csd <U count";
+
+ if ($::IS_EBCDIC) {
+ skip "Not valid only for EBCDIC", 4;
+ }
+ $s = $all255_twice;
+ $c = $s =~ tr/[](){}<>\x00-\xff/[[(({{<</sd;
+ is $s, "(<[{", 'tr/[](){}<>\x00-\xff/[[(({{<</sd';
+ is $c, 512, "count of above";
+
+ $s = $all255_plus;
+ $c = $s =~ tr/[](){}<>\x00-\xff/[[(({{<</sd;
+ is $s, "(<[{" . $plus, 'tr/[](){}<>\x00-\xff/[[(({{<</sd';
+ is $c, 256, "count of above";
}
{
@@ -645,6 +664,7 @@ else {
}
+start:
{
my $l = chr(300); my $r = chr(400);
$x = 200.300.400;
@@ -779,7 +799,7 @@ is((($a = v300.196.172.300.196.172) =~ tr/\x{12c}/\x{12d}/), 2);
is($a, v301.196.301.301.196.301, 'translit w/complement');
($a = v300.196.172.300.196.172) =~ tr/\x{12c}/\xc5/c;
-is($a, v300.197.197.300.197.197);
+is($a, v300.197.197.300.197.197, 'more translit w/complement');
($a = v300.196.172.300.196.172) =~ tr/\xc4//d;
@@ -969,8 +989,7 @@ $s = "ABC";
$s =~ tr/ABC/\x{fffd}-\x{ffff}/;
is($s, "\x{fffd}\x{fffe}\x{ffff}", "utf8, REPLACEMENTLIST range");
-$s = "A\x{ffff}B\x{100}\0\x{fffe}\x{ffff}";
-$i = $s =~ tr/\x{ffff}//;
+$s = "A\x{ffff}B\x{100}\0\x{fffe}\x{ffff}"; $i = $s =~ tr/\x{ffff}//;
is($i, 2, "utf8, count");
$s = "A\x{ffff}\x{ffff}C";
@@ -1080,7 +1099,7 @@ for ("", nullrocow) {
my $string = chr utf8::unicode_to_native(0x00e0);
$string =~ tr/\N{U+00e0}/A/;
is($string, "A", 'tr// of \N{U+...} works for upper-Latin1');
- my $string = chr utf8::unicode_to_native(0x00e1);
+ $string = chr utf8::unicode_to_native(0x00e1);
$string =~ tr/\N{LATIN SMALL LETTER A WITH ACUTE}/A/;
is($string, "A", 'tr// of \N{name} works for upper-Latin1');
}
@@ -1145,4 +1164,33 @@ for ("", nullrocow) {
'RT #133880 illegal \N{}');
}
+{
+ my $c;
+ my $x = "\1\0\0\0\0\0\0\0\0\0\0\0\0";
+ $c = $x =~ tr/\x0f\x0e\x0d\x0c\x0b\x0a\x09\x08\x07\x06\x05\x04\x03\x02\x01\x00/FEDCBA9876543210/;
+ is $x, "1000000000000", "Decreasing ranges work with start at \\0";
+ is $c, 13, "Count for above test";
+
+ $x = "\1\0\0\0\0\0\0\0\0\0\0\0\0";
+ $c = $x =~ tr/\x0f\x0e\x0d\x0c\x0b\x0a\x09\x08\x07\x06\x05\x04\x03\x02\x01\x00/\x{FF26}\x{FF25}\x{FF24}\x{FF23}\x{FF22}\x{FF21}\x{FF19}\x{FF18}\x{FF17}\x{FF16}\x{FF15}\x{FF14}\x{FF13}\x{FF12}\x{FF11}\x{FF10}/;
+ is $x, "\x{FF11}\x{FF10}\x{FF10}\x{FF10}\x{FF10}\x{FF10}\x{FF10}\x{FF10}\x{FF10}\x{FF10}\x{FF10}\x{FF10}\x{FF10}", "Decreasing Above ASCII ranges work with start at \\0";
+ is $c, 13, "Count for above test";
+}
+
+{
+ my $c = "\xff";
+ my $d = "\x{104}";
+ eval '$c =~ tr/\x{ff}-\x{104}/\x{100}-\x{105}/';
+ is($@, "", 'tr/\x{ff}-\x{104}/\x{100}-\x{105}/ compiled');
+ is($c, "\x{100}", 'ff -> 100');
+ eval '$d =~ tr/\x{ff}-\x{104}/\x{100}-\x{105}/';
+ is($d, "\x{105}", '104 -> 105');
+}
+
+{
+ my $c = "cb";
+ eval '$c =~ tr{aabc}{d\x{d0000}}';
+ is($c, "\x{d0000}\x{d0000}", "Shouldn't generate valgrind errors");
+}
+
1;
diff --git a/gnu/usr.bin/perl/t/op/universal.t b/gnu/usr.bin/perl/t/op/universal.t
index 116f92383e3..4c277c3e39c 100644
--- a/gnu/usr.bin/perl/t/op/universal.t
+++ b/gnu/usr.bin/perl/t/op/universal.t
@@ -244,7 +244,8 @@ like( $@, qr/Can't call method "DOES" on unblessed reference/,
# Tests for can seem to be split between here and method.t
# Add the verbatim perl code mentioned in the comments of
-# http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2001-05/msg01710.html
+# Message-ID: E14ufZD-0007kD-00@libra.cus.cam.ac.uk
+# https://www.nntp.perl.org/group/perl.perl5.porters/2001/05/msg35327.html
# but never actually tested.
is(UNIVERSAL->can("NoSuchPackage::foo"), undef);
diff --git a/gnu/usr.bin/perl/t/op/utftaint.t b/gnu/usr.bin/perl/t/op/utftaint.t
index da4f8429062..d8fc1f57472 100644
--- a/gnu/usr.bin/perl/t/op/utftaint.t
+++ b/gnu/usr.bin/perl/t/op/utftaint.t
@@ -143,7 +143,7 @@ for my $ary ([ascii => 'perl'], [latin1 => "\xB6"]) {
SKIP: {
if (is_miniperl()) {
skip_if_miniperl("Unicode tables not built yet", 2)
- unless eval 'require "unicore/Heavy.pl"';
+ unless eval 'require "unicore/UCD.pl"';
}
fresh_perl_is('$a = substr $^X, 0, 0; /\x{100}/i; /$a\x{100}/i || print q,ok,',
'ok', {switches => ["-T", "-l"]},
diff --git a/gnu/usr.bin/perl/t/op/vec.t b/gnu/usr.bin/perl/t/op/vec.t
index d3bb57dcd70..0e8b5cee954 100644
--- a/gnu/usr.bin/perl/t/op/vec.t
+++ b/gnu/usr.bin/perl/t/op/vec.t
@@ -10,6 +10,7 @@ use Config;
plan(tests => 78);
+my $exception_134139 = "Use of strings with code points over 0xFF as arguments to vec is forbidden";
is(vec($foo,0,1), 0);
is(length($foo), undef);
@@ -65,18 +66,14 @@ $x = substr $foo, 1;
is(vec($x, 0, 8), 255);
$@ = undef;
{
- no warnings 'deprecated';
+ local $@;
eval { vec($foo, 1, 8) };
- ok(! $@);
+ like($@, qr/$exception_134139/,
+ "Caught exception: code point over 0xFF used as argument to vec");
$@ = undef;
eval { vec($foo, 1, 8) = 13 };
- ok(! $@);
- if ($::IS_EBCDIC) {
- is($foo, "\x8c\x0d\xff\x8a\x69");
- }
- else {
- is($foo, "\xc4\x0d\xc3\xbf\xc3\xbe");
- }
+ like($@, qr/$exception_134139/,
+ "Caught exception: code point over 0xFF used as argument to vec");
}
$foo = "\x{100}" . "\xff\xfe";
$x = substr $foo, 1;
@@ -244,3 +241,13 @@ like($@, qr/^Modification of a read-only value attempted at /,
$v = eval { RT131083(1, vec($s, $off, 8)); };
like($@, qr/Out of memory!/, "RT131083 lval ~0");
}
+
+{
+ # Adapting test formerly in t/lib/warnings/doop
+
+ local $@;
+ my $foo = "\x{100}" . "\xff\xfe";
+ eval { vec($foo, 1, 8) };
+ like($@, qr/$exception_134139/,
+ "RT 134139: Use of strings with code points over 0xFF as arguments to 'vec' is now forbidden");
+}
diff --git a/gnu/usr.bin/perl/t/op/write.t b/gnu/usr.bin/perl/t/op/write.t
index 2869f1702b3..97c3d301545 100644
--- a/gnu/usr.bin/perl/t/op/write.t
+++ b/gnu/usr.bin/perl/t/op/write.t
@@ -1912,7 +1912,7 @@ like $@, qr'Undefined format',
# This syntax error used to cause a crash, double free, or a least
# a bad read.
# See the long-winded explanation at:
-# https://rt.perl.org/rt3/Ticket/Display.html?id=43425#txn-1144500
+# https://github.com/Perl/perl5/issues/8953#issuecomment-543978716
eval q|
format =
@
diff --git a/gnu/usr.bin/perl/t/perf/benchmarks b/gnu/usr.bin/perl/t/perf/benchmarks
index 7795079c78b..63eb62cfc35 100644
--- a/gnu/usr.bin/perl/t/perf/benchmarks
+++ b/gnu/usr.bin/perl/t/perf/benchmarks
@@ -158,6 +158,12 @@
code => '$x = f(1)',
},
+ 'call::sub::scalar' => {
+ desc => 'sub called in scalar context',
+ setup => 'my $x; my @a = 1..4; sub f { @a }',
+ code => '$x = f()',
+ },
+
'call::goto::empty' => {
desc => 'goto &funtion with no args or body',
setup => 'sub f { goto &g } sub g {}',
diff --git a/gnu/usr.bin/perl/t/perf/opcount.t b/gnu/usr.bin/perl/t/perf/opcount.t
index 2d0ade56b0e..21a6f36dcfa 100644
--- a/gnu/usr.bin/perl/t/perf/opcount.t
+++ b/gnu/usr.bin/perl/t/perf/opcount.t
@@ -20,7 +20,7 @@ BEGIN {
use warnings;
use strict;
-plan 2582;
+plan 2583;
use B ();
@@ -663,3 +663,15 @@ test_opcount(0, "multiconcat: 4 adjacent consts",
concat => 0,
sassign => 0,
});
+
+# multiconcat shouldn't include the assign if the LHS has 'local'
+
+test_opcount(0, "multiconcat: local assign",
+ sub { our $global; local $global = "$global-X" },
+ {
+ const => 0,
+ gvsv => 2,
+ multiconcat => 1,
+ concat => 0,
+ sassign => 1,
+ });
diff --git a/gnu/usr.bin/perl/t/porting/args_assert.t b/gnu/usr.bin/perl/t/porting/args_assert.t
index d9000a6e966..97aaafe04d4 100755
--- a/gnu/usr.bin/perl/t/porting/args_assert.t
+++ b/gnu/usr.bin/perl/t/porting/args_assert.t
@@ -31,7 +31,9 @@ unless (-d 't' && -f 'MANIFEST') {
open my $fh, '<', $proto or die "Can't open $proto: $!";
while (<$fh>) {
- $declared{$1}++ if /^#define\s+(PERL_ARGS_ASSERT[A-Za-z0-9_]+)\s+/;
+ # The trailing '.' distinguishes real from dummy macros that have no
+ # real asserts
+ $declared{$1}++ if /^#define\s+(PERL_ARGS_ASSERT[A-Za-z0-9_]+)\s+./;
}
}
diff --git a/gnu/usr.bin/perl/t/porting/bench.t b/gnu/usr.bin/perl/t/porting/bench.t
index 9d2ab87690f..0176b3850c0 100644
--- a/gnu/usr.bin/perl/t/porting/bench.t
+++ b/gnu/usr.bin/perl/t/porting/bench.t
@@ -407,7 +407,7 @@ $out = qx($bench_cmd -j 2 --write=$resultfile1 --tests=call::sub::empty $^X=p0 2
is $out, "", "--write should produce no output (1 perl)";
ok -s $resultfile1, "--write should create a non-empty results file (1 perl)";
-# and again with 2 perls. This is also tests the 'mix read and new new
+# and again with 2 perls. This is also tests the 'mix read and new
# perls' functionality.
note("running cachegrind for 2nd perl; may be slow...");
diff --git a/gnu/usr.bin/perl/t/porting/customized.dat b/gnu/usr.bin/perl/t/porting/customized.dat
index fd805115f60..371a4161cd2 100644
--- a/gnu/usr.bin/perl/t/porting/customized.dat
+++ b/gnu/usr.bin/perl/t/porting/customized.dat
@@ -1,8 +1,13 @@
# Regenerate this file using:
# cd t
# ./perl -I../lib porting/customized.t --regen
+Config::Perl::V cpan/Config-Perl-V/V.pm 0a0f7207e6505b78ee345a933acb0246a13579f5
Digest cpan/Digest/Digest.pm 43f7f544cb11842b2f55c73e28930da50774e081
-Digest::MD5 cpan/Digest-MD5/t/files.t f8fe234035918d3b7324eba05f73e7e903a45ca0
+Digest::MD5 cpan/Digest-MD5/Makefile.PL 3bf781444ee671da63f1c6360e0a31f11d9ba520
+Digest::MD5 cpan/Digest-MD5/MD5.pm df5f0663f0f755be7eda6e3d2f008f2629246b19
+Digest::MD5 cpan/Digest-MD5/MD5.xs 249bed648232192ce018f7f894ad127c3a639831
+Digest::MD5 cpan/Digest-MD5/t/files.t e987329d2411ff60ad9a2bdf93fdf5f6943467e8
+Filter::Util::Call pod/perlfilter.pod e9833bf4ebc51087dfee5c553e0f8a5eef67212d
Locale::Maketext::Simple cpan/Locale-Maketext-Simple/lib/Locale/Maketext/Simple.pm 57ed38905791a17c150210cd6f42ead22a7707b6
Math::Complex cpan/Math-Complex/lib/Math/Complex.pm 198ea6c6c584f5ea79a0fd7e9d411d0878f3b2af
Math::Complex cpan/Math-Complex/t/Complex.t 4f307ed6fc59f1e5fb0e6b11103fc631b6bdb335
@@ -10,21 +15,14 @@ Math::Complex cpan/Math-Complex/t/Trig.t 2682526e23a161d54732c2a66393fe4a234d186
Memoize cpan/Memoize/Memoize.pm 902092ff91cdec9c7b4bd06202eb179e1ce26ca2
NEXT cpan/NEXT/lib/NEXT.pm 2c83d03ee361816e53ccb931137d314ab878d19f
NEXT cpan/NEXT/t/next.t 66fd60eb0f75b6f3eea95d1dee745f9a7a348146
-Net::Ping dist/Net-Ping/lib/Net/Ping.pm e2e7053673ead1eff8f3ca8ecdd9b838598c1d8c
-Net::Ping dist/Net-Ping/t/000_load.t deff5dc2ca54dae28cb19d3631427db127279ac2
-Net::Ping dist/Net-Ping/t/500_ping_icmp.t 3eeb60181c01b85f876bd6658644548fdf2e24d4
-Net::Ping dist/Net-Ping/t/501_ping_icmpv6.t 54373de5858f8fb7e078e4998a4b3b8dbca91783
Pod::Checker cpan/Pod-Checker/t/pod/contains_bad_pod.xr 73538fd80dfe6e19ad561fe034009b44460208f6
Pod::Checker cpan/Pod-Checker/t/pod/selfcheck.t 8ce3cfd38e4b9bcf5bc7fe7f2a14195e49aed7d8
Pod::Checker cpan/Pod-Checker/t/pod/testcmp.pl a0cd5c8eca775c7753f4464eee96fa916e3d8a16
Pod::Checker cpan/Pod-Checker/t/pod/testpchk.pl b2072c7f4379fd050e15424175d7cac5facf5b3b
-Pod::Perldoc cpan/Pod-Perldoc/lib/Pod/Perldoc.pm d97aa26b722e6e3120b19ee0d7cf9af04dfdfb7f
-autodie cpan/autodie/lib/autodie/exception.pm b99e4e35a9ed36de94d54437888822ced4936207
-autodie cpan/autodie/lib/autodie/hints.pm e1998fec61fb4e82fe46585bd82c73200be6f262
-autodie cpan/autodie/t/exceptions.t ad315a208f875e06b0964012ce8d65daa438c036
-autodie cpan/autodie/t/lib/Hints_pod_examples.pm 6944c218e9754b3613c8d0c90a5ae8aceccb5c99
-autodie cpan/autodie/t/mkdir.t 9e70d2282a3cc7d76a78bf8144fccba20fb37dac
-autodie cpan/autodie/t/recv.t 63bea2daa330e44b67714527ddf701c1bf3a6954
+Pod::Perldoc cpan/Pod-Perldoc/lib/Pod/Perldoc.pm 582be34c077c9ff44d99914724a0cc2140bcd48c
+Pod::Usage cpan/Pod-Usage/t/pod/testp2pt.pl d43ea8391bd95aefdb710ab2947771155a88d424
+Win32API::File cpan/Win32API-File/File.pm 8fd212857f821cb26648878b96e57f13bf21b99e
+Win32API::File cpan/Win32API-File/File.xs beb870fed4490d2faa547b4a8576b8d64d1d27c5
experimental cpan/experimental/t/basic.t cb9da8dd05b854375809872a05dd32637508d5da
version cpan/version/lib/version.pm 7ef9219d1d5f1d71f08a79f3b0577df138b21b12
-version vutil.c 074fb201e9a20a845764f671eb1021a6020ebea1
+version vutil.c 601cc57bbc0070ae33eab7fd2d667f20efbe15f8
diff --git a/gnu/usr.bin/perl/t/porting/diag.t b/gnu/usr.bin/perl/t/porting/diag.t
index b892dfa066f..85e4a1f3eda 100755
--- a/gnu/usr.bin/perl/t/porting/diag.t
+++ b/gnu/usr.bin/perl/t/porting/diag.t
@@ -34,10 +34,10 @@ foreach (@{(setup_embed())[0]}) {
next if @$_ < 2;
next unless $_->[2] =~ /warn|(?<!ov)err|(\b|_)die|croak/i;
# The flag p means that this function may have a 'Perl_' prefix
- # The flag s means that this function may have a 'S_' prefix
+ # The flag S means that this function may have a 'S_' prefix
push @functions, $_->[2];
push @functions, 'Perl_' . $_->[2] if $_->[0] =~ /p/;
- push @functions, 'S_' . $_->[2] if $_->[0] =~ /s/;
+ push @functions, 'S_' . $_->[2] if $_->[0] =~ /S/;
};
push @functions, 'Perl_mess';
@@ -164,7 +164,7 @@ foreach my $cur_entry ( keys %entries) {
if (! exists $entries{$cur_entry}{severity}
# If there is no first line, it was two =items in a row, so the
- # second one is the one with with text, not this one.
+ # second one is the one with text, not this one.
&& exists $entries{$cur_entry}{first_line}
# If the first line refers to another message, no need for severity
diff --git a/gnu/usr.bin/perl/t/porting/dual-life.t b/gnu/usr.bin/perl/t/porting/dual-life.t
index fdfc9b692d4..4ad2256ef29 100644
--- a/gnu/usr.bin/perl/t/porting/dual-life.t
+++ b/gnu/usr.bin/perl/t/porting/dual-life.t
@@ -24,12 +24,6 @@ use File::Spec::Functions;
# Exceptions that are found in dual-life bin dirs but aren't
# installed by default; some occur only during testing:
my $not_installed = qr{^(?:
- \.\./cpan/Archive-Tar/bin/ptar.*
- |
- \.\./cpan/JSON-PP/bin/json_pp
- |
- \.\./cpan/IO-Compress/bin/zipdetails
- |
\.\./cpan/Encode/bin/u(?:cm(?:2table|lint|sort)|nidump)
|
\.\./cpan/Module-(?:Metadata|Build)
diff --git a/gnu/usr.bin/perl/t/porting/known_pod_issues.dat b/gnu/usr.bin/perl/t/porting/known_pod_issues.dat
index a89edf79a48..c1c27208b15 100644
--- a/gnu/usr.bin/perl/t/porting/known_pod_issues.dat
+++ b/gnu/usr.bin/perl/t/porting/known_pod_issues.dat
@@ -32,6 +32,7 @@ B::Lint
B::Lint::Debug
B::Utils
basename(1)
+bc(1)
Benchmark::Perl::Formance
bind(2)
BSD::Resource
@@ -53,6 +54,10 @@ Class::Tiny::Antlers
Classic::Perl
clearerr(3)
clock(3)
+clock_getres(3)
+clock_gettime(2)
+clock_nanosleep(3)
+clock_settime(2)
Clone
closedir(2)
connect(2)
@@ -60,6 +65,7 @@ Coro
cpan2dist(1)
CPAN::Changes::Spec
CPAN::Uploader
+Cpanel::JSON::XS
cpanp(1)
CPANPLUS
crypt(3)
@@ -71,6 +77,7 @@ Data::Alias
Data::Dump::Streamer
Data::Entropy
Data::Float
+Data::MessagePack
Data::Structure::Util
Data::Types
Data::Util
@@ -101,6 +108,8 @@ Encode::Detect
Encode::Locale
Eval::WithLexicals
execvp(3)
+exit(3)
+Expect
Exporter::Easy
ExtUtils::Constant::ProxySubs
fchdir(2)
@@ -109,6 +118,8 @@ fchown(2)
fcntl(2)
fdopen(3)
fetch(1)
+FFI::Platypus
+FFI::Raw
fgrep(1)
File::chdir
File::Copy::Recursive
@@ -130,6 +141,7 @@ futimes(2)
Future
gcc(1)
gdbm(3)
+getitimer(2)
Getopt::Std
getpgrp(2)
getpriority(2)
@@ -142,8 +154,11 @@ HTML::StripScripts
HTTP::Lite
iconv(1)
iconv(3)
+indirect
inetd(8)
invoker
+IO::Compress
+IO::Pty
IO::Socket::IP
ioctl(2)
IPC::Run
@@ -188,6 +203,8 @@ Math::BigInt::Pari
Math::Random::MT::Perl
Math::Random::Secure
Math::TrulyRandom
+mbrlen(3)
+mbrtowc(3)
md5sum(1)
Method::Signatures
mmap(2)
@@ -229,6 +246,7 @@ PerlIO::via::Base64
PerlIO::via::StripHTML
perllexwarn(1)
perlthanks
+pipe(2)
POD2::FR
POD2::IT
pod2ipf(1)
@@ -238,6 +256,7 @@ Pod::HTML2Pod
Pod::LaTeX
Pod::Plainer
Pod::PXML
+podlators
poll(2)
prctl(2)
printenv(1)
@@ -268,6 +287,9 @@ sendmail(1)
sendmsg(2)
sendmsg(3)
sendto(2)
+Sereal
+Sereal::Decoder
+setenv(3)
setitimer(2)
setlocale(3)
setpgid(2)
@@ -277,17 +299,22 @@ sha1sum(1)
shadow(3)
Shell
Shell::Command
+signal(2)
+sleep(3)
sock_init(3)
Socket
socketpair(3)
SOM
+sort(1)
splain
sprintf(3)
stat(2)
+strchr(3)
strftime(3)
strictures
String::Base
String::Scanf
+strstr(3)
strtol(3)
Switch
tar(1)
@@ -311,6 +338,7 @@ touch(1)
tr(1)
TryCatch
tty(1)
+ualarm(3)
umask(2)
Unicode::CaseFold
Unicode::Casing
@@ -328,6 +356,7 @@ wait4(2)
waitpid(2)
waitpid(3)
Want
+wcrtomb(3)
wget(1)
Win32::Locale
write(2)
@@ -354,8 +383,7 @@ install ? Should you be using F<...> or maybe L<...> instead of 1
pod/perl.pod Verbatim line length including indents exceeds 79 by 8
pod/perlandroid.pod Verbatim line length including indents exceeds 79 by 3
pod/perlbook.pod Verbatim line length including indents exceeds 79 by 1
-pod/perlce.pod Verbatim line length including indents exceeds 79 by 3
-pod/perldebguts.pod Verbatim line length including indents exceeds 79 by 27
+pod/perldebguts.pod Verbatim line length including indents exceeds 79 by -1
pod/perldebtut.pod Verbatim line length including indents exceeds 79 by 3
pod/perldtrace.pod Verbatim line length including indents exceeds 79 by 7
pod/perlgit.pod ? Should you be using F<...> or maybe L<...> instead of 1
@@ -371,7 +399,7 @@ pod/perlmacosx.pod Verbatim line length including indents exceeds 79 by 3
pod/perlmroapi.pod ? Should you be using L<...> instead of 1
pod/perlos2.pod ? Should you be using L<...> instead of 2
pod/perlos2.pod Verbatim line length including indents exceeds 79 by 5
-pod/perlos390.pod Verbatim line length including indents exceeds 79 by 2
+pod/perlos390.pod Verbatim line length including indents exceeds 79 by 3
pod/perlperf.pod Verbatim line length including indents exceeds 79 by 114
pod/perlport.pod ? Should you be using L<...> instead of 1
pod/perlrun.pod Verbatim line length including indents exceeds 79 by 3
diff --git a/gnu/usr.bin/perl/t/porting/libperl.t b/gnu/usr.bin/perl/t/porting/libperl.t
index dbfb309e3f9..72b4220c6a6 100644
--- a/gnu/usr.bin/perl/t/porting/libperl.t
+++ b/gnu/usr.bin/perl/t/porting/libperl.t
@@ -444,7 +444,7 @@ if ($GSP) {
$symbols{data}{common} = $symbols{data}{bss};
}
- ok($symbols{data}{common}{PL_hash_seed_w}{'globals.o'}, "has PL_hash_seed_w");
+ ok($symbols{data}{common}{PL_hash_seed}{'globals.o'}, "has PL_hash_seed");
ok($symbols{data}{data}{PL_ppaddr}{'globals.o'}, "has PL_ppaddr");
# None of the GLOBAL_STRUCT* business here.
diff --git a/gnu/usr.bin/perl/t/porting/manifest.t b/gnu/usr.bin/perl/t/porting/manifest.t
index 7bed600de5a..27aea1dc2a7 100755
--- a/gnu/usr.bin/perl/t/porting/manifest.t
+++ b/gnu/usr.bin/perl/t/porting/manifest.t
@@ -87,7 +87,11 @@ SKIP: {
find_git_or_skip(6);
my %seen; # De-dup ls-files output (can appear more than once)
chomp(my @repo= grep {
+ !m{\.git_patch$} &&
+ !m{\.gitattributes$} &&
!m{\.gitignore$} &&
+ !m{\.mailmap$} &&
+ !m{^\.github/} &&
!$seen{$_}++
} `git ls-files`);
skip("git ls-files didnt work",3)
diff --git a/gnu/usr.bin/perl/t/porting/podcheck.t b/gnu/usr.bin/perl/t/porting/podcheck.t
index a6ab20fed53..0797d57930d 100755
--- a/gnu/usr.bin/perl/t/porting/podcheck.t
+++ b/gnu/usr.bin/perl/t/porting/podcheck.t
@@ -105,7 +105,7 @@ encoding (declared or auto-detected) with C<\N{REPLACEMENT CHARACTER}>.
=back
If the C<PERL_POD_PEDANTIC> environment variable is set or the C<--pedantic>
-command line argument is provided then a few more checks are made.
+command line argument is provided, then a few more checks are made.
The pedantic checks are:
=over
@@ -140,7 +140,7 @@ After inspecting them and
deciding that they aren't real problems, it is possible to shut up this program
about them, unlike base Pod::Checker. For a valid link to an outside module
or man page, call podcheck.t with the C<--add_link> option to add it to the
-the database of known links; for other causes, call podcheck.t with the C<--regen>
+database of known links; for other causes, call podcheck.t with the C<--regen>
option to regenerate the entire database. This tells it that all existing
issues are to not be mentioned again.
@@ -285,7 +285,7 @@ L<Pod::Checker>
my $vms_re = qr/ \. (?: com )? /x;
# Some filenames in the MANIFEST match $vms_re, and so must not be handled the
-# same way that that the special vms ones are. This hash lists those.
+# same way that the special vms ones are. This hash lists those.
my %special_vms_files;
# This is to get this to work across multiple file systems, including those
@@ -467,7 +467,7 @@ my $C_path_re = qr{ ^
# '.PL' files should be excluded, as they aren't final pods, but often contain
# material used in generating pods, and so can look like a pod. We can't use
-# the regexp above because case sensisitivity is important for these, as some
+# the regexp above because case sensitivity is important for these, as some
# '.pl' files should be examined for pods. Instead look through the MANIFEST
# for .PL files and get their full path names, so we can exclude each such
# file explicitly. This works because other porting tests prohibit having two
@@ -671,7 +671,7 @@ package My::Pod::Checker { # Extend Pod::Checker
my %linkable_item; # Bool: if the latest =item is linkable. It isn't
# for bullet and number lists
my %linkable_nodes; # Pod::Checker adds all =items to its node list,
- # but not all =items are linkable to
+ # but not all =items are linkable-to
my %running_CFL_text; # The current text that is being accumulated until
# an end_FOO is found, and this includes any C<>,
# F<>, or L<> directives.
@@ -681,7 +681,7 @@ package My::Pod::Checker { # Extend Pod::Checker
my %command_count; # Number of commands seen
my %seen_pod_cmd; # true if have =pod earlier
my %skip; # is SKIP set for this pod
- my %start_line; # the first input line number in the the thing
+ my %start_line; # the first input line number in the thing
# currently being worked on
sub DESTROY {
@@ -1165,7 +1165,7 @@ package My::Pod::Checker { # Extend Pod::Checker
# Warn if looks like a file or link enclosed instead by this C<>
if ($C_text{$addr} =~ qr/^ $C_path_re $/x) {
- # Here it does look like it could be be a file path or a link.
+ # Here it does look like it could be a file path or a link.
# But some varieties of regex patterns could also fit with what we
# have so far. Weed those out as best we can. '/foo/' is almost
# certainly meant to be a pattern, as is '/foo/g'.
@@ -1209,7 +1209,7 @@ package My::Pod::Checker { # Extend Pod::Checker
# link would be lost, as the L<> would be gone.
$CFL_text{$addr} = "C<$CFL_text{$addr}>";
- # Add this text to the the whole running total only if popping this
+ # Add this text to the whole running total only if popping this
# directive off the stack leaves it empty. As long as something is on
# the stack, it gets added to $CFL_text (just above). It is only
# entirely constructed when the stack is empty.
@@ -1359,28 +1359,6 @@ package My::Pod::Checker { # Extend Pod::Checker
}
}
-package Tie_Array_to_FH { # So printing actually goes to an array
-
- my %array;
-
- sub TIEHANDLE {
- my $class = shift;
- my $array_ref = shift;
-
- my $self = bless \do{ my $anonymous_scalar }, $class;
- $array{Scalar::Util::refaddr $self} = $array_ref;
-
- return $self;
- }
-
- sub PRINT {
- my $self = shift;
- push @{$array{Scalar::Util::refaddr $self}}, @_;
- return 1;
- }
-}
-
-
my %filename_to_checker; # Map a filename to its pod checker object
my %id_to_checker; # Map a checksum to its pod checker object
my %nodes; # key is filename, values are nodes in that file.
@@ -1475,7 +1453,7 @@ if ($show_counts) {
note("-----\n" . Text::Tabs::expand("$total\tknown potential issues"));
if (%suppressed_files) {
note("\nFiles that have all messages of at least one type suppressed:");
- note(join ",", keys %suppressed_files);
+ note(join ",", sort keys %suppressed_files);
}
exit 0;
}
@@ -1553,19 +1531,19 @@ sub my_safer_print { # print, with error checking for outputting to db
sub extract_pod { # Extracts just the pod from a file; returns undef if file
# doesn't exist
my $filename = shift;
- use Pod::Parser;
- my @pod;
-
- # Arrange for the output of Pod::Parser to be collected in an array we can
- # look at instead of being printed
- tie *ALREADY_FH, 'Tie_Array_to_FH', \@pod;
if (open my $in_fh, '<:bytes', $filename) {
- my $parser = Pod::Parser->new();
- $parser->parse_from_filehandle($in_fh, *ALREADY_FH);
+ use Pod::Simple::JustPod;
+ my $parser = Pod::Simple::JustPod->new();
+ $parser->no_errata_section(1);
+ $parser->no_whining(1);
+ $parser->source_filename($filename);
+ my $output;
+ $parser->output_string( \$output );
+ $parser->parse_lines( <$in_fh>, undef );
close $in_fh;
- return join "", @pod
+ return $output;
}
# The file should already have been opened once to get here, so if that
@@ -1655,7 +1633,8 @@ sub is_pod_file {
if ($filename =~ / (?: ^(cpan|lib|ext|dist)\/ )
| $only_for_interior_links_re
- /x) {
+ /x)
+ {
$digest->add($contents);
$digests{$filename} = $digest->digest;
@@ -1803,7 +1782,6 @@ foreach my $filename (@files) {
next FILE;
}
$parsed = 1;
-
}
if ($checker->num_errors() < 0) { # Returns negative if not a pod
@@ -2106,6 +2084,10 @@ foreach my $filename (@files) {
my $problem_count = scalar @{$problems{$filename}{$message}};
$total_known += $problem_count;
next if $known_problems{$canonical}{$message} < 0;
+
+ # If we have new problems not previously known, we output all of
+ # such problems, as we can't know which are really new and which
+ # not
if ($problem_count > $known_problems{$canonical}{$message}) {
# Here we are about to output all the messages for this type,
@@ -2172,7 +2154,7 @@ if (! $regen
&& ! ok (keys %known_problems == 0, "The known problems database ($data_dir/known_pod_issues.dat) includes no references to non-existent files"))
{
note("The following files were not found: "
- . join ", ", keys %known_problems);
+ . join ", ", sort keys %known_problems);
note("They will automatically be removed from the db the next time");
note(" cd t; ./perl -I../lib porting/podcheck.t --regen");
note("is run");
diff --git a/gnu/usr.bin/perl/t/re/bigfuzzy_not_utf8.t b/gnu/usr.bin/perl/t/re/bigfuzzy_not_utf8.t
index b4dfd150a92..2daace5d414 100644
--- a/gnu/usr.bin/perl/t/re/bigfuzzy_not_utf8.t
+++ b/gnu/usr.bin/perl/t/re/bigfuzzy_not_utf8.t
Binary files differ
diff --git a/gnu/usr.bin/perl/t/re/pat.t b/gnu/usr.bin/perl/t/re/pat.t
index b24bd024b6c..c608df5bbee 100755
--- a/gnu/usr.bin/perl/t/re/pat.t
+++ b/gnu/usr.bin/perl/t/re/pat.t
@@ -22,10 +22,9 @@ BEGIN {
set_up_inc('../lib', '.', '../ext/re');
}
-skip_all('no re module') unless defined &DynaLoader::boot_DynaLoader;
skip_all_without_unicode_tables();
-plan tests => 873; # Update this when adding/deleting tests.
+plan tests => 1022; # Update this when adding/deleting tests.
run_tests() unless caller;
@@ -354,9 +353,14 @@ sub run_tests {
ok $@ =~ /^\QLookbehind longer than 255 not/, "Lookbehind limit";
}
- {
- # Long Monsters
- for my $l (125, 140, 250, 270, 300000, 30) { # Ordered to free memory
+ SKIP:
+ { # Long Monsters
+
+ my @trials = (125, 140, 250, 270, 300000, 30);
+
+ skip('limited memory', @trials * 4) if $ENV{'PERL_SKIP_BIG_MEM_TESTS'};
+
+ for my $l (@trials) { # Ordered to free memory
my $a = 'a' x $l;
my $message = "Long monster, length = $l";
like("ba$a=", qr/a$a=/, $message);
@@ -367,10 +371,9 @@ sub run_tests {
}
}
- {
- # 20000 nodes, each taking 3 words per string, and 1 per branch
- my $long_constant_len = join '|', 12120 .. 32645;
- my $long_var_len = join '|', 8120 .. 28645;
+ SKIP:
+ { # 20000 nodes, each taking 3 words per string, and 1 per branch
+
my %ans = ( 'ax13876y25677lbc' => 1,
'ax13876y25677mcb' => 0, # not b.
'ax13876y35677nbc' => 0, # Num too big
@@ -381,6 +384,11 @@ sub run_tests {
'ax13876y25677y21378y21378y21378kbc' => 0, # 5 runs
);
+ skip('limited memory', 2 * scalar keys %ans) if $ENV{'PERL_SKIP_BIG_MEM_TESTS'};
+
+ my $long_constant_len = join '|', 12120 .. 32645;
+ my $long_var_len = join '|', 8120 .. 28645;
+
for (keys %ans) {
my $message = "20000 nodes, const-len '$_'";
ok !($ans{$_} xor /a(?=([yx]($long_constant_len)){2,4}[k-o]).*b./o), $message;
@@ -742,7 +750,7 @@ sub run_tests {
is($#+, 2, $message);
is($#-, 1, $message);
- # Check that values don’t stick
+ # Check that values don't stick
" "=~/()()()(.)(..)/;
my($m,$p,$q) = (\$-[5], \$+[5], \${^CAPTURE}[4]);
() = "$$_" for $m, $p, $q; # FETCH (or eqv.)
@@ -1421,6 +1429,93 @@ EOP
ok("\x{017F}\x{017F}" =~ qr/^[$sharp_s]?$/i, "[] to EXACTish optimization");
}
+ { # Test that it avoids spllitting a multi-char fold across nodes.
+ # These all fold to things that are like 'ss', which, if split across
+ # nodes could fail to match a single character that folds to the
+ # combination. 1F0 byte expands when folded;
+ my $utf8_locale = find_utf8_ctype_locale();
+ for my $char('F', $sharp_s, "\x{1F0}", "\x{FB00}") {
+ my $length = 260; # Long enough to overflow an EXACTFish regnode
+ my $p = $char x $length;
+ my $s = ($char eq $sharp_s) ? 'ss'
+ : $char eq "\x{1F0}"
+ ? "j\x{30c}"
+ : 'ff';
+ $s = $s x $length;
+ for my $charset (qw(u d l aa)) {
+ for my $utf8 (0..1) {
+ for my $locale ('C', $utf8_locale) {
+ SKIP:
+ {
+ skip "test skipped for non-C locales", 2
+ if $charset ne 'l'
+ && (! defined $locale || $locale ne 'C');
+ if ($charset eq 'l') {
+ if (! defined $locale) {
+ skip "No UTF-8 locale", 2;
+ }
+ skip "Can't test in miniperl",2
+ if is_miniperl();
+
+ require POSIX;
+ POSIX::setlocale(&LC_CTYPE, $locale);
+ }
+
+ my $pat = $p;
+ utf8::upgrade($pat) if $utf8;
+ my $should_pass =
+ ( $charset eq 'u'
+ || ($charset eq 'd' && $utf8)
+ || ($charset eq 'd' && ( $char =~ /[[:ascii:]]/
+ || ord $char > 255))
+ || ($charset eq 'aa' && $char =~ /[[:ascii:]]/)
+ || ($charset eq 'l' && $locale ne 'C')
+ || ($charset eq 'l' && $char =~ /[[:ascii:]]/)
+ );
+ my $name = "(?i$charset), utf8=$utf8, locale=$locale,"
+ . " char=" . sprintf "%x", ord $char;
+ no warnings 'locale';
+ is (eval " '$s' =~ qr/(?i$charset)$pat/;",
+ $should_pass, $name);
+ fail "$name: $@" if $@;
+ is (eval " 'a$s' =~ qr/(?i$charset)a$pat/;",
+ $should_pass, "extra a, $name");
+ fail "$name: $@" if $@;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ SKIP:
+ {
+ skip "no re debug", 5 if is_miniperl;
+ my $s = ("0123456789" x 26214) x 2; # Should fill 2 LEXACTS, plus
+ # small change
+ my $pattern_prefix = "use utf8; use re qw(Debug COMPILE)";
+ my $pattern = "$pattern_prefix; qr/$s/;";
+ my $result = fresh_perl($pattern);
+ if ($? != 0) { # Re-run so as to display STDERR.
+ fail($pattern);
+ fresh_perl($pattern, { stderr => 0, verbose => 1 });
+ }
+ like($result, qr/Final program[^X]*\bLEXACT\b[^X]*\bLEXACT\b[^X]*\bEXACT\b[^X]*\bEND\b/s,
+ "Check that LEXACT nodes are generated");
+ like($s, qr/$s/, "Check that LEXACT nodes match");
+ like("a$s", qr/a$s/, "Previous test preceded by an 'a'");
+ substr($s, 260000, 1) = "\x{100}";
+ $pattern = "$pattern_prefix; qr/$s/;";
+ $result = fresh_perl($pattern, { 'wide_chars' => 1 } );
+ if ($? != 0) { # Re-run so as to display STDERR.
+ fail($pattern);
+ fresh_perl($pattern, { stderr => 0, verbose => 1 });
+ }
+ like($result, qr/Final program[^X]*\bLEXACT_REQ8\b[^X]*\bLEXACT\b[^X]*\bEXACT\b[^X]*\bEND\b/s,
+ "Check that an LEXACT_ONLY node is generated with a \\x{100}");
+ like($s, qr/$s/, "Check that LEXACT_REQ8 nodes match");
+ }
+
{
for my $char (":", uni_to_native("\x{f7}"), "\x{2010}") {
my $utf8_char = $char;
@@ -1661,27 +1756,6 @@ EOP
like("X", qr/$x/, "UTF-8 of /[x]/i matches upper case");
}
-SKIP: { # make sure we get an error when \p{} cannot load Unicode tables
- skip("Unicode tables always now loaded", 1);
- fresh_perl_like(<<' prog that cannot load uni tables',
- BEGIN {
- @INC = '../lib';
- require utf8; require 'utf8_heavy.pl';
- @INC = ();
- }
- $name = 'A B';
- if ($name =~ /(\p{IsUpper}) (\p{IsUpper})/){
- print "It's good! >$1< >$2<\n";
- } else {
- print "It's not good...\n";
- }
- prog that cannot load uni tables
- qr/^Can't locate unicore\/Heavy\.pl(?x:
- )|^Can't find Unicode property definition/,
- undef,
- '\p{} should not fail silently when uni tables evanesce');
- }
-
{ # Special handling of literal-ended ranges in [...] was breaking this
use utf8;
like("ÿ", qr/[ÿ-ÿ]/, "\"ÿ\" should match [ÿ-ÿ]");
@@ -1743,9 +1817,10 @@ SKIP: { # make sure we get an error when \p{} cannot load Unicode tables
"test that we handle things like m/\\888888888/ without infinite loops" );
}
+ SKIP:
{ # Test that we handle some malformed UTF-8 without looping [perl
# #123562]
-
+ skip "no Encode", 1 if is_miniperl;
my $code='
BEGIN{require q(./test.pl);}
use Encode qw(_utf8_on);
@@ -2012,8 +2087,17 @@ CODE
{ # GH #17370, ASAN/valgrind out-of-bounds access
fresh_perl_like('qr/\p{nv:qnan}/', qr/Can't find Unicode property definition/, {}, "GH #17370");
}
+ { # GH #17371, segfault
+ fresh_perl_like('qr/\p{nv=\\\\\}(?0)|\337ss|\337ss//', qr/Unicode property wildcard not terminated/, {}, "GH #17371");
+ }
+ { # GH #17384, ASAN/valgrind out-of-bounds access
+ fresh_perl_like('"q0" =~ /\p{__::Is0}/', qr/Unknown user-defined property name \\p\{__::Is0}/, {}, "GH #17384");
+ }
+ SKIP:
{ # [perl #133921], segfault
+ skip "Not valid for EBCDIC", 5 if $::IS_EBCDIC;
+
fresh_perl_is('qr0||ß+p00000F00000ù\Q00000ÿ00000x00000x0c0e0\Qx0\Qx0\x{0c!}\;\;î0\x
fresh_perl_is('|ß+W0ü0r0\Qx0\Qx0x0c0G00000000000000000O000000000x0x0x0c!}\;îçÿù\Q0 \x
@@ -2119,9 +2203,16 @@ x{0c!}\;\;îçÿ
$quote x 8 . $back x 69,
$quote x 5 . $back x 4,
$ff x 48;
- like(runperl(prog => "$s", stderr => 1), qr/Unmatched \(/);
+ like(fresh_perl("$s", { stderr => 1, }), qr/Unmatched \(/);
}
+ { # GitHub #17196, caused assertion failure
+ fresh_perl_like('("0" x 258) =~ /(?l)0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/',
+ qr/^$/,
+ {},
+ "Assertion failure with /l exact string longer than a single node");
+ }
+
SKIP:
{ # [perl #134334], Assertion failure
my $utf8_locale = find_utf8_ctype_locale();
@@ -2132,6 +2223,26 @@ SKIP:
"Assertion failure matching /il on single char folding to multi");
}
+ { # Test ANYOFHs
+ my $pat = qr/[\x{4000001}\x{4000003}\x{4000005}]+/;
+ unlike("\x{4000000}", $pat, "4000000 isn't in pattern");
+ like("\x{4000001}", $pat, "4000001 is in pattern");
+ unlike("\x{4000002}", $pat, "4000002 isn't in pattern");
+ like("\x{4000003}", $pat, "4000003 is in pattern");
+ unlike("\x{4000004}", $pat, "4000004 isn't in pattern");
+ like("\x{4000005}", $pat, "4000005 is in pattern");
+ unlike("\x{4000006}", $pat, "4000006 isn't in pattern");
+
+ # gh #17319
+ $pat = qr/[\N{U+200D}\N{U+2000}]()/;
+ unlike("\x{1FFF}", $pat, "1FFF isn't in pattern");
+ like("\x{2000}", $pat, "2000 is in pattern");
+ unlike("\x{2001}", $pat, "2001 isn't in pattern");
+ unlike("\x{200C}", $pat, "200C isn't in pattern");
+ like("\x{200D}", $pat, "200 is in pattern");
+ unlike("\x{200E}", $pat, "200E isn't in pattern");
+ }
+
# gh17490: test recursion check
{
my $eval = '(?{1})';
@@ -2153,6 +2264,13 @@ SKIP:
'ok', {}, "gh16947: test fix doesn't break SUSPEND");
}
+ # gh17730: should not crash
+ {
+ fresh_perl_is(q{
+ "q00" =~ m{(((*ACCEPT)0)*00)?0(?1)}; print "ok"
+ }, 'ok', {}, 'gh17730: should not crash');
+ }
+
# gh17743: more regexp corruption via GOSUB
{
fresh_perl_is(q{
diff --git a/gnu/usr.bin/perl/t/re/pat_advanced.t b/gnu/usr.bin/perl/t/re/pat_advanced.t
index b4f32eec045..509a51570fe 100755
--- a/gnu/usr.bin/perl/t/re/pat_advanced.t
+++ b/gnu/usr.bin/perl/t/re/pat_advanced.t
@@ -934,6 +934,9 @@ sub run_tests {
my $name = "foo\xDF";
my $result = eval "'A${name}B' =~ /^A\\N{$name}B\$/";
ok !$@ && $result, "Passthrough charname of non-ASCII, Latin1";
+ eval "qr/\\p{name=foo}/";
+ like($@, qr/Can't find Unicode property definition "name=foo"/,
+ '\p{name=} doesn\'t see a cumstom charnames translator');
#
# Why doesn't must_warn work here?
#
@@ -2152,7 +2155,7 @@ EOP
"Check TRIE does not overwrite EXACT following NOTHING at start - RT #111842";
{
- my $single = ":";
+ my $single = "z";
my $upper = "\x{390}"; # Fold is 3 chars.
my $multi = CORE::fc($upper);
@@ -2387,7 +2390,7 @@ EOF
TODO: { # Was looping
todo_skip('Triggers thread clone SEGV. See #86550')
if $::running_as_thread && $::running_as_thread;
- watchdog(10); # Use a bigger value for busy systems
+ watchdog(10 * ($ENV{PERL_TEST_TIME_OUT_FACTOR} || 1));
like("\x{00DF}", qr/[\x{1E9E}_]*/i, "\"\\x{00DF}\" =~ /[\\x{1E9E}_]*/i was looping");
}
@@ -2424,7 +2427,7 @@ EOF
like(chr(0x7FFF_FFFF_FFFF_FFFF), qr/^\p{Is_Portable_Super}$/,
"chr(0x7FFF_FFFF_FFFF_FFFF) can match a Unicode property");
- my $p = qr/^[\x{7FFF_FFFF_FFFF_FFFF}]$/;
+ my $p = eval 'qr/^\x{7FFF_FFFF_FFFF_FFFF}$/';
like(chr(0x7FFF_FFFF_FFFF_FFFF), qr/$p/,
"chr(0x7FFF_FFFF_FFFF_FFFF) can match itself in a [class]");
like(chr(0x7FFF_FFFF_FFFF_FFFF), qr/$p/, # Tests any caching
@@ -2524,6 +2527,55 @@ EOF
"", {}, "*COMMIT caused positioning beyond EOS");
}
+ { # [GH #17486] Previously assertion failure
+ fresh_perl_is('0=~/(?iaa)ss\337(?0)|/',
+ "", {}, "EXACTFUP node isn't changed into something else");
+ }
+
+ { # [GH #17593]
+ fresh_perl_is('qr/((?+2147483647))/',
+ "Invalid reference to group in regex; marked by <--"
+ . " HERE in m/((?+2147483647) <-- HERE )/ at - line 1.",
+ {}, "integer overflow, undefined behavior in ASAN");
+ fresh_perl_is('qr/((?-2147483647))/',
+ "Reference to nonexistent group in regex; marked by <--"
+ . " HERE in m/((?-2147483647) <-- HERE )/ at - line 1.",
+ {}, "Large negative relative capture group");
+ fresh_perl_is('qr/((?+18446744073709551615))/',
+ "Invalid reference to group in regex; marked by <--"
+ . " HERE in m/((?+18446744073709551615 <-- HERE ))/ at -"
+ . " line 1.",
+ {}, "Too large relative group number");
+ fresh_perl_is('qr/((?-18446744073709551615))/',
+ "Invalid reference to group in regex; marked by <--"
+ . " HERE in m/((?-18446744073709551615 <-- HERE ))/ at -"
+ . " line 1.",
+ {}, "Too large negative relative group number");
+ }
+
+ { # GH #17734, ASAN use after free
+ fresh_perl_like('no warnings "experimental::uniprop_wildcards";
+ my $re = q<[[\p{name=/[Y-]+Z/}]]>;
+ eval { "\N{BYZANTINE MUSICAL SYMBOL PSILI}"
+ =~ /$re/ }; print $@ if $@; print "Done\n";',
+ qr/Done/,
+ {}, "GH #17734");
+ }
+
+ { # GH $17278 assertion fails
+ fresh_perl_is('use locale;
+ my $A_grave = "\N{LATIN CAPITAL LETTER A WITH GRAVE}";
+ utf8::encode($A_grave);
+ my $a_grave = "\N{LATIN SMALL LETTER A WITH GRAVE}";
+ utf8::encode($a_grave);
+
+ my $z="q!$a_grave! =~ m!(?^i)[$A_grave]!";
+ utf8::decode($z);
+ print eval $z, "\n";',
+ 1,
+ {}, "GH #17278");
+ }
+
# !!! NOTE that tests that aren't at all likely to crash perl should go
# a ways above, above these last ones. There's a comment there that, like
diff --git a/gnu/usr.bin/perl/t/re/pat_re_eval.t b/gnu/usr.bin/perl/t/re/pat_re_eval.t
index 696b6a3fb50..75c6ed6306b 100755
--- a/gnu/usr.bin/perl/t/re/pat_re_eval.t
+++ b/gnu/usr.bin/perl/t/re/pat_re_eval.t
@@ -1281,7 +1281,7 @@ sub run_tests {
# RT #132772
#
# Ensure that optimisation of OP_CONST into OP_MULTICONCAT doesn't
- # leave any freed ops in the execution path. This is is associated
+ # leave any freed ops in the execution path. This is associated
# with rpeep() being called before optimize_optree(), which causes
# gv/rv2sv to be prematurely optimised into gvsv, confusing
# S_maybe_multiconcat when it tries to reorganise a concat subtree
@@ -1294,11 +1294,11 @@ sub run_tests {
ok /^a(??{ $b."c" })$/, "RT #132772 - compile time";
ok /^$a(??{ $b."c" })$/, "RT #132772 - run time";
my $qr = qr/^a(??{ $b."c" })$/;
- ok /$qr/, "RT #132772 - compile time time qr//";
+ ok /$qr/, "RT #132772 - compile time qr//";
$qr = qr/(??{ $b."c" })$/;
- ok /^a$qr$/, "RT #132772 - compile time time qr// compound";
+ ok /^a$qr$/, "RT #132772 - compile time qr// compound";
$qr = qr/$a(??{ $b."c" })$/;
- ok /^$qr$/, "RT #132772 - run time time qr//";
+ ok /^$qr$/, "RT #132772 - run time qr//";
}
# RT #133687
diff --git a/gnu/usr.bin/perl/t/re/re_tests b/gnu/usr.bin/perl/t/re/re_tests
index d07c94381db..c6f73d805b9 100644
--- a/gnu/usr.bin/perl/t/re/re_tests
+++ b/gnu/usr.bin/perl/t/re/re_tests
@@ -2011,12 +2011,20 @@ AB\s+\x{100} AB \x{100}X y - -
(?il)\x{100}|\x{100}|\x{FE} \xFE y $& \xFE
\A([\x00-\x7F]+)(.*)\z \007\011\012 y $& \007\011\012 # [perl #133311]
(?:(?^:(?{1}))[^0-9]) : y $& : # [perl #133348]
-/[\xdf-/i - c - Invalid [] range # [perl #133620] likely only fails under valgrind
+/[\xdf-/i - ca - Invalid [] range # [perl #133620] likely only fails under valgrind
+/[\x59-/i - ce - Unmatched [ # [perl #133620] likely only fails under valgrind
/\1a(b)/ bab n - - # This compiles but fails to match as \1 is not set when parsed.
/(?iu)(?<=\xdf)hbase/ sshbase y $& hbase
/\x{30c3}?[\x{30a2}\x{30a4}\x{30a6}\x{30a8}\x{30aa}-\x{30e2}\x{30e4}\x{30e6}\x{30e8}-\x{30f4}](?:[\x{30e3}\x{30e5}\x{30e7}\x{30a1}\x{30a3}\x{30a5}\x{30a7}\x{30a9}])?\x{30fc}?\x{30f3}?/ \x{30de}\x{30fc}\x{30af}\x{30b5}\x{30fc}\x{30d3}\x{30b9} y $& \x{30de}\x{30fc} # part of [perl #133942
/[\x{3041}-\x{3093}]+/ \x{6f22}\x{5b57}\x{3001}\x{30ab}\x{30bf}\x{30ab}\x{30ca}\x{3001}\x{3072}\x{3089}\x{304c}\x{306a}\x{306e}\x{5165}\x{3063}\x{305f}String y $& \x{3072}\x{3089}\x{304c}\x{306a}\x{306e} # [perl #133978]
/(?:0)|(?:)(?:[1-9])/ q0 y $& 0 # [https://github.com/Perl/perl5/issues/17372]
+/\x{_1_0000}/ \x{10000} y $& \x{10000} # khw doesn't like leading underscores, but don't rmv them accidentally
+/\o{_1_0000}/ \o{10000} y $& \o{10000}
+/(?iaax:A? \K +)/ African_Feh c - \\K + is forbidden - matches null string many times in regex
+/(?iaa:A?\K+)/ African_Feh c - \\K+ is forbidden - matches null string many times in regex
+/(?iaa:A?\K*)/ African_Feh c - \\K* is forbidden - matches null string many times in regex
+^((\w|<(\s)*(?1)(?3)*>)(?:(?3)*\+(?3)*(?2))*)(?3)*\+ a + b + <c + d> y $1 a + b # [GH #18096]
+^((\w|<(\s)*(?1)(?3)*>)(?:(?3)*\+(?3)*(?2))*)(?3)*\+ a + <b> + c y $1 a + <b> # [GH #18096]
# Keep these lines at the end of the file
# pat string y/n/etc expr expected-expr skip-reason comment
# vim: softtabstop=0 noexpandtab
diff --git a/gnu/usr.bin/perl/t/re/recompile.t b/gnu/usr.bin/perl/t/re/recompile.t
index 8c9b92e126d..5a6f7d7f919 100644
--- a/gnu/usr.bin/perl/t/re/recompile.t
+++ b/gnu/usr.bin/perl/t/re/recompile.t
@@ -147,7 +147,7 @@ comp_n(3, <<'CODE', 'mixed utf8 qr');
"a" =~ qr/$_/ for "\x{c4}\x{80}", "\x{100}", "\x{c4}\x{80}";
CODE
-# note that that for runtime code, each pattern is compiled twice; the
+# note that for runtime code, each pattern is compiled twice; the
# second time to allow the parser to see the code.
comp_n(6, <<'CODE', 'runtime code');
diff --git a/gnu/usr.bin/perl/t/re/reg_mesg.t b/gnu/usr.bin/perl/t/re/reg_mesg.t
index d10fa2c09a2..9f1c4170177 100755
--- a/gnu/usr.bin/perl/t/re/reg_mesg.t
+++ b/gnu/usr.bin/perl/t/re/reg_mesg.t
@@ -200,11 +200,11 @@ my @death =
'/[\x{X]/' => 'Missing right brace on \x{} {#} m/[\x{{#}X]/',
'/[\x{A]/' => 'Missing right brace on \x{} {#} m/[\x{A{#}]/',
- '/\o{1/' => 'Missing right brace on \o{ {#} m/\o{1{#}/',
- '/\o{X/' => 'Missing right brace on \o{ {#} m/\o{{#}X/',
+ '/\o{1/' => 'Missing right brace on \o{} {#} m/\o{1{#}/',
+ '/\o{X/' => 'Missing right brace on \o{} {#} m/\o{{#}X/',
- '/[\o{X]/' => 'Missing right brace on \o{ {#} m/[\o{{#}X]/',
- '/[\o{7]/' => 'Missing right brace on \o{ {#} m/[\o{7{#}]/',
+ '/[\o{X]/' => 'Missing right brace on \o{} {#} m/[\o{{#}X]/',
+ '/[\o{7]/' => 'Missing right brace on \o{} {#} m/[\o{7{#}]/',
'/[[:barf:]]/' => 'POSIX class [:barf:] unknown {#} m/[[:barf:]{#}]/',
@@ -260,13 +260,13 @@ my @death =
'm/(?[[\w-x]])/' => 'False [] range "\w-" {#} m/(?[[\w-{#}x]])/',
'm/(?[[a-\pM]])/' => 'False [] range "a-\pM" {#} m/(?[[a-\pM{#}]])/',
'm/(?[[\pM-x]])/' => 'False [] range "\pM-" {#} m/(?[[\pM-{#}x]])/',
- 'm/(?[[^\N{LATIN CAPITAL LETTER A WITH MACRON AND GRAVE}]])/' => '\N{} in inverted character class or as a range end-point is restricted to one character {#} m/(?[[^\N{U+100.300{#}}]])/',
+ 'm/(?[[^\N{LATIN CAPITAL LETTER A WITH MACRON AND GRAVE}]])/' => '\N{} here is restricted to one character {#} m/(?[[^\N{U+100.300{#}}]])/',
'm/(?[ \p{Digit} & (?^(?[ \p{Thai} | \p{Lao} ]))])/' => 'Sequence (?^(...) not recognized {#} m/(?[ \p{Digit} & (?^({#}?[ \p{Thai} | \p{Lao} ]))])/',
'm/(?[ \p{Digit} & (?(?[ \p{Thai} | \p{Lao} ]))])/' => 'Unexpected character {#} m/(?[ \p{Digit} & (?{#}(?[ \p{Thai} | \p{Lao} ]))])/',
- 'm/\o{/' => 'Missing right brace on \o{ {#} m/\o{{#}/',
+ 'm/\o{/' => 'Missing right brace on \o{} {#} m/\o{{#}/',
'm/\o/' => 'Missing braces on \o{} {#} m/\o{#}/',
'm/\o{}/' => 'Empty \o{} {#} m/\o{}{#}/',
- 'm/[\o{]/' => 'Missing right brace on \o{ {#} m/[\o{{#}]/',
+ 'm/[\o{]/' => 'Missing right brace on \o{} {#} m/[\o{{#}]/',
'm/[\o]/' => 'Missing braces on \o{} {#} m/[\o{#}]/',
'm/[\o{}]/' => 'Empty \o{} {#} m/[\o{}{#}]/',
'm/(?^-i:foo)/' => 'Sequence (?^-...) not recognized {#} m/(?^-{#}i:foo)/',
@@ -283,7 +283,6 @@ my @death =
"m/(?('/" => "Sequence (?('... not terminated {#} m/(?('{#}/",
'm/\g{/' => 'Sequence \g{... not terminated {#} m/\g{{#}/',
'm/\k</' => 'Sequence \k<... not terminated {#} m/\k<{#}/',
- 'm/\cß/' => "Character following \"\\c\" must be printable ASCII",
'/((?# This is a comment in the middle of a token)?:foo)/' => 'In \'(?...)\', the \'(\' and \'?\' must be adjacent {#} m/((?# This is a comment in the middle of a token)?{#}:foo)/',
'/((?# This is a comment in the middle of a token)*FAIL)/' => 'In \'(*VERB...)\', the \'(\' and \'*\' must be adjacent {#} m/((?# This is a comment in the middle of a token)*{#}FAIL)/',
'/((?# This is a comment in the middle of a token)*script_run:foo)/' => 'In \'(*...)\', the \'(\' and \'*\' must be adjacent {#} m/((?# This is a comment in the middle of a token)*{#}script_run:foo)/',
@@ -312,13 +311,27 @@ my @death =
'/\p{Latin}{,4 }/' => 'Unescaped left brace in regex is illegal here {#} m/\p{Latin}{{#},4 }/',
'/(?<=/' => 'Sequence (?... not terminated {#} m/(?<={#}/', # [perl #128170]
'/\p{vertical tab}/' => 'Can\'t find Unicode property definition "vertical tab" {#} m/\\p{vertical tab}{#}/', # [perl #132055]
- "/$bug133423/" => "Operand with no preceding operator {#} m/(?[(?^:(?[\\
+ "/$bug133423/" => "Unexpected ']' with no following ')' in (?[... {#} m/(?[(?^:(?[\\
'/[^/' => 'Unmatched [ {#} m/[{#}^/', # [perl #133767]
'/\p{Is_Other_Alphabetic=F}/ ' => 'Can\'t find Unicode property definition "Is_Other_Alphabetic=F" {#} m/\p{Is_Other_Alphabetic=F}{#}/',
'/\p{Is_Other_Alphabetic=F}/ ' => 'Can\'t find Unicode property definition "Is_Other_Alphabetic=F" {#} m/\p{Is_Other_Alphabetic=F}{#}/',
'/\x{100}(?(/' => 'Unknown switch condition (?(...)) {#} m/\\x{100}(?({#}/', # [perl #133896]
- '/(?[\N{KEYCAP DIGIT NINE}/' => '\N{} in inverted character class or as a range end-point is restricted to one character {#} m/(?[\\N{U+39.FE0F.20E3{#}}/', # [perl #133988]
+ '/(?[\N{KEYCAP DIGIT NINE}/' => '\N{} here is restricted to one character {#} m/(?[\\N{U+39.FE0F.20E3{#}}/', # [perl #133988]
'/0000000000000000[\N{U+0.00}0000/' => 'Unmatched [ {#} m/0000000000000000[{#}\N{U+0.00}0000/', # [perl #134059]
+ '/\p{nv=\b5\b}/' => 'Can\'t find Unicode property definition "nv=\\b5\\b" {#} m/\\p{nv=\\b5\\b}{#}/',
+ '/\p{nv=:(?g)10:}/' => 'Use of modifier \'g\' is not allowed in Unicode property wildcard subpatterns {#} m/(?g{#})10/',
+ '/\p{gc=:L*:}/' => 'Use of quantifier \'*\' is not allowed in Unicode property wildcard subpatterns {#} m/L*{#}/',
+ '/\p{gc=:L\G:}/' => 'Use of \'\G\' is not allowed in Unicode property wildcard subpatterns {#} m/L\G{#}/',
+ '/\p{gc=:(?a)L:}/' => 'Use of modifier \'a\' is not allowed in Unicode property wildcard subpatterns {#} m/(?a){#}L/',
+ '/\p{gc=:(?u)L:}/' => 'Use of modifier \'u\' is not allowed in Unicode property wildcard subpatterns {#} m/(?u){#}L/',
+ '/\p{gc=:(?d)L:}/' => 'Use of modifier \'d\' is not allowed in Unicode property wildcard subpatterns {#} m/(?d){#}L/',
+ '/\p{gc=:(?l)L:}/' => 'Use of modifier \'l\' is not allowed in Unicode property wildcard subpatterns {#} m/(?l){#}L/',
+ '/\p{gc=:(?-m)L:}/' => 'Use of modifier \'-m\' is not allowed in Unicode property wildcard subpatterns {#} m/(?-m{#})L/',
+ '/\p{gc=:\pS:}/' => 'Use of \'\\pS\' is not allowed in Unicode property wildcard subpatterns {#} m/\\pS{#}/',
+ '/\p{gc=:\PS:}/' => 'Use of \'\\PS\' is not allowed in Unicode property wildcard subpatterns {#} m/\\PS{#}/',
+ '/\p{gc=:[\pS]:}/' => 'Use of \'\\pS\' is not allowed in Unicode property wildcard subpatterns {#} m/[\\pS{#}]/',
+ '/\p{gc=:[\PS]:}/' => 'Use of \'\\PS\' is not allowed in Unicode property wildcard subpatterns {#} m/[\\PS{#}]/',
+ '/(?[\p{name=KATAKANA LETTER AINU P}])/' => 'Unicode string properties are not implemented in (?[...]) {#} m/(?[\p{name=KATAKANA LETTER AINU P}{#}])/',
);
# These are messages that are death under 'use re "strict"', and may or may
@@ -332,25 +345,23 @@ my @death_only_under_strict = (
'm/[\xABC]/' => "",
=> 'Use \x{...} for more than two hex characters {#} m/[\xABC{#}]/',
- # XXX This is a confusing error message. The G isn't ignored; it just
- # terminates the \x. Also some messages below are missing the <-- HERE,
- # aren't all category 'regexp'. (Hence we have to turn off 'digit'
- # messages as well below)
- 'm/\xAG/' => 'Illegal hexadecimal digit \'G\' ignored',
+ # some messages below aren't all category 'regexp'. (Hence we have to
+ # turn off 'digit' messages as well below)
+ 'm/\xAG/' => 'Non-hex character \'G\' terminates \x early. Resolved as "\x0AG" {#} m/\xA{#}G/',
=> 'Non-hex character {#} m/\xAG{#}/',
- 'm/[\xAG]/' => 'Illegal hexadecimal digit \'G\' ignored',
+ 'm/[\xAG]/' => 'Non-hex character \'G\' terminates \x early. Resolved as "\x0AG" {#} m/[\xA{#}G]/',
=> 'Non-hex character {#} m/[\xAG{#}]/',
- 'm/\o{789}/' => 'Non-octal character \'8\'. Resolved as "\o{7}"',
+ 'm/\o{789}/' => 'Non-octal character \'8\' terminates \o early. Resolved as "\o{007}" {#} m/\o{789}{#}/',
=> 'Non-octal character {#} m/\o{78{#}9}/',
- 'm/[\o{789}]/' => 'Non-octal character \'8\'. Resolved as "\o{7}"',
+ 'm/[\o{789}]/' => 'Non-octal character \'8\' terminates \o early. Resolved as "\o{007}" {#} m/[\o{789}{#}]/',
=> 'Non-octal character {#} m/[\o{78{#}9}]/',
'm/\x{}/' => "",
=> 'Empty \x{} {#} m/\x{}{#}/',
'm/[\x{}]/' => "",
=> 'Empty \x{} {#} m/[\x{}{#}]/',
- 'm/\x{ABCDEFG}/' => 'Illegal hexadecimal digit \'G\' ignored',
+ 'm/\x{ABCDEFG}/' => 'Non-hex character \'G\' terminates \x early. Resolved as "\x{ABCDEF}" {#} m/\x{ABCDEFG}{#}/',
=> 'Non-hex character {#} m/\x{ABCDEFG{#}}/',
- 'm/[\x{ABCDEFG}]/' => 'Illegal hexadecimal digit \'G\' ignored',
+ 'm/[\x{ABCDEFG}]/' => 'Non-hex character \'G\' terminates \x early. Resolved as "\x{ABCDEF}" {#} m/[\x{ABCDEFG}{#}]/',
=> 'Non-hex character {#} m/[\x{ABCDEFG{#}}]/',
"m'[\\y]\\x{100}'" => 'Unrecognized escape \y in character class passed through {#} m/[\y{#}]\x{100}/',
=> 'Unrecognized escape \y in character class {#} m/[\y{#}]\x{100}/',
@@ -363,14 +374,14 @@ my @death_only_under_strict = (
'm/[\pM-x]\x{100}/' => 'False [] range "\pM-" {#} m/[\pM-{#}x]\x{100}/',
=> 'False [] range "\pM-" {#} m/[\pM-{#}x]\x{100}/',
'm/[^\N{LATIN CAPITAL LETTER A WITH MACRON AND GRAVE}]/' => 'Using just the first character returned by \N{} in character class {#} m/[^\N{U+100.300}{#}]/',
- => '\N{} in inverted character class or as a range end-point is restricted to one character {#} m/[^\N{U+100.300{#}}]/',
+ => '\N{} here is restricted to one character {#} m/[^\N{U+100.300{#}}]/',
'm/[\x03-\N{LATIN CAPITAL LETTER A WITH MACRON AND GRAVE}]/' => 'Using just the first character returned by \N{} in character class {#} m/[\x03-\N{U+100.300}{#}]/',
- => '\N{} in inverted character class or as a range end-point is restricted to one character {#} m/[\x03-\N{U+100.300{#}}]/',
+ => '\N{} here is restricted to one character {#} m/[\x03-\N{U+100.300{#}}]/',
'm/[\N{LATIN CAPITAL LETTER A WITH MACRON AND GRAVE}-\x{10FFFF}]/' => 'Using just the first character returned by \N{} in character class {#} m/[\N{U+100.300}{#}-\x{10FFFF}]/',
- => '\N{} in inverted character class or as a range end-point is restricted to one character {#} m/[\N{U+100.300{#}}-\x{10FFFF}]/',
- '/[\08]/' => '\'\08\' resolved to \'\o{0}8\' {#} m/[\08{#}]/',
+ => '\N{} here is restricted to one character {#} m/[\N{U+100.300{#}}-\x{10FFFF}]/',
+ '/[\08]/' => 'Non-octal character \'8\' terminates \0 early. Resolved as "\0008" {#} m/[\08{#}]/',
=> 'Need exactly 3 octal digits {#} m/[\08{#}]/',
- '/[\018]/' => '\'\018\' resolved to \'\o{1}8\' {#} m/[\018{#}]/',
+ '/[\018]/' => 'Non-octal character \'8\' terminates \0 early. Resolved as "\0018" {#} m/[\018{#}]/',
=> 'Need exactly 3 octal digits {#} m/[\018{#}]/',
'/[\_\0]/' => "",
=> 'Need exactly 3 octal digits {#} m/[\_\0]{#}/',
@@ -465,7 +476,7 @@ my @death_utf8 = mark_as_utf8(
'/ネ[\x{ネ]ネ/' => 'Missing right brace on \x{} {#} m/ネ[\x{{#}ネ]ネ/',
'/ネ[\x{ネ]/' => 'Missing right brace on \x{} {#} m/ネ[\x{{#}ネ]/',
- '/ネ\o{ネ/' => 'Missing right brace on \o{ {#} m/ネ\o{{#}ネ/',
+ '/ネ\o{ネ/' => 'Missing right brace on \o{} {#} m/ネ\o{{#}ネ/',
'/[ネ-a]ネ/' => 'Invalid [] range "ネ-a" {#} m/[ネ-a{#}]ネ/',
@@ -490,7 +501,8 @@ my @death_utf8 = mark_as_utf8(
'/(?[ \t + \e # ネ This was supposed to be a comment ])/' =>
"Syntax error in (?[...]) {#} m/(?[ \\t + \\e # ネ This was supposed to be a comment ]){#}/",
'm/(*ネ)ネ/' => q<Unknown '(*...)' construct 'ネ' {#} m/(*ネ){#}ネ/>,
- '/\cネ/' => "Character following \"\\c\" must be printable ASCII",
+ '/\cネ/' => "Character following \"\\c\" must be printable ASCII {#} m/\\cネ{#}/",
+ '/[\cネ]/' => "Character following \"\\c\" must be printable ASCII {#} m/[\\cネ{#}]/",
'/\b{ネ}/' => "'ネ' is an unknown bound type {#} m/\\b{ネ{#}}/",
'/\B{ネ}/' => "'ネ' is an unknown bound type {#} m/\\B{ネ{#}}/",
);
@@ -534,8 +546,9 @@ my @warning = (
'm/(?[[:word]])\x{100}/' => "Assuming NOT a POSIX class since there is no terminating ':' {#} m/(?[[:word{#}]])\\x{100}/",
"m'\\y\\x{100}'" => 'Unrecognized escape \y passed through {#} m/\y{#}\x{100}/',
'/x{3,1}/' => 'Quantifier {n,m} with n > m can\'t match {#} m/x{3,1}{#}/',
- '/\08/' => '\'\08\' resolved to \'\o{0}8\' {#} m/\08{#}/',
- '/\018/' => '\'\018\' resolved to \'\o{1}8\' {#} m/\018{#}/',
+ '/\08/' => 'Non-octal character \'8\' terminates \0 early. Resolved as "\0008" {#} m/\08{#}/',
+
+ '/\018/' => 'Non-octal character \'8\' terminates \0 early. Resolved as "\0018" {#} m/\018{#}/',
'/(?=a)*/' => '(?=a)* matches null string many times {#} m/(?=a)*{#}/',
'my $x = \'\m\'; qr/a$x/' => 'Unrecognized escape \m passed through {#} m/a\m{#}/',
'/\q/' => 'Unrecognized escape \q passed through {#} m/\q{#}/',
@@ -663,7 +676,6 @@ my @warning_only_under_strict = (
'/[a-\N{U+FF}]\x{100}/' => 'Ranges of ASCII printables should be some subset of "0-9", "A-Z", or "a-z" {#} m/[a-\N{U+FF}{#}]\x{100}/',
'/[\N{U+00}-\a]\x{100}/' => "",
'/[\a-\N{U+FF}]\x{100}/' => "",
- '/[\N{U+FF}-\x{100}]/' => 'Both or neither range ends should be Unicode {#} m/[\N{U+FF}-\x{100}{#}]/',
'/[\N{U+100}-\x{101}]/' => "",
"/[%-%]/" => "",
"/[:-\\x$colon_hex]\\x{100}/" => "\":-\\x$colon_hex\" is more clearly written simply as \":\" {#} m/[:-\\x$colon_hex\{#}]\\x{100}/",
@@ -697,17 +709,19 @@ my @experimental_regex_sets = (
'/noutf8 ネ (?[ [\tネ] ])/' => 'The regex_sets feature is experimental {#} m/noutf8 ネ (?[{#} [\tネ] ])/',
);
-my @experimental_script_run = (
- '/(*script_run:paypal.com)/' => 'The script_run feature is experimental {#} m/(*script_run:{#}paypal.com)/',
- 'use utf8; /utf8 ネ (*script_run:ネ)/' => do { use utf8; 'The script_run feature is experimental {#} m/utf8 ネ (*script_run:{#}ネ)/' },
- '/noutf8 ネ (*script_run:ネ)/' => 'The script_run feature is experimental {#} m/noutf8 ネ (*script_run:{#}ネ)/',
+my @wildcard = (
+ 'm!(?[\p{name=/KATAKANA/}])$!' =>
+ [
+ 'The regex_sets feature is experimental {#} m/(?[{#}\p{name=/KATAKANA/}])$/',
+ 'The Unicode property wildcards feature is experimental',
+ 'Using just the single character results returned by \p{} in (?[...]) {#} m/(?[\p{name=/KATAKANA/}{#}])$/'
+ ], # [GH #17732] Null pointer deref
);
my @deprecated = (
'/^{/' => "",
'/foo|{/' => "",
'/foo|^{/' => "",
- '/foo({bar)/' => 'Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through {#} m/foo({{#}bar)/',
'/foo(:?{bar)/' => "",
'/\s*{/' => "",
'/a{3,4}{/' => "",
@@ -738,9 +752,8 @@ for my $strict ("", "use re 'strict';") {
}
else {
no warnings 'experimental::regex_sets';
- no warnings 'experimental::script_run';
no warnings 'experimental::re_strict';
- no warnings 'experimental::alpha_assertions';
+ no warnings 'experimental::uniprop_wildcards';
warning_is(sub {
my $meaning_of_life;
@@ -794,7 +807,7 @@ for my $strict ("", "no warnings 'experimental::re_strict'; use re 'strict';")
foreach my $ref (\@warning_tests,
\@experimental_regex_sets,
- \@experimental_script_run,
+ \@wildcard,
\@deprecated)
{
my $warning_type;
@@ -802,8 +815,7 @@ for my $strict ("", "no warnings 'experimental::re_strict'; use re 'strict';")
my $default_on;
if ($ref == \@warning_tests) {
$warning_type = 'regexp, digit';
- $turn_off_warnings = "no warnings 'experimental::regex_sets';"
- . "no warnings 'experimental::script_run';";
+ $turn_off_warnings = "no warnings 'experimental::regex_sets';";
$default_on = $strict;
}
elsif ($ref == \@deprecated) {
@@ -814,8 +826,8 @@ for my $strict ("", "no warnings 'experimental::re_strict'; use re 'strict';")
$warning_type = 'experimental::regex_sets';
$default_on = 1;
}
- elsif ($ref == \@experimental_script_run) {
- $warning_type = 'experimental::script_run';
+ elsif ($ref == \@wildcard) {
+ $warning_type = 'experimental::regex_sets, experimental::uniprop_wildcards';
$default_on = 1;
}
else {
@@ -884,8 +896,10 @@ for my $strict ("", "no warnings 'experimental::re_strict'; use re 'strict';")
if ($this_default_on || grep { $_ =~ /\Q(?[/ } @expect ) {
ok @warns > 0, "... and the warning is on by default";
}
- else {
- ok @warns == 0, "... and the warning is off by default";
+ elsif (! (ok @warns == 0,
+ "... and the warning is off by default"))
+ {
+ diag("GOT\n" . join "\n", @warns);
}
}
}
diff --git a/gnu/usr.bin/perl/t/re/regex_sets.t b/gnu/usr.bin/perl/t/re/regex_sets.t
index fc089a90b69..ee7905946c9 100644
--- a/gnu/usr.bin/perl/t/re/regex_sets.t
+++ b/gnu/usr.bin/perl/t/re/regex_sets.t
@@ -220,6 +220,12 @@ for my $char ("٠", "٥", "٩") {
qr/(?[\P{Is0}])/', qr/\QUnknown user-defined property name "Is0"/, {}, "[perl #133889]");
}
+{
+ my $s = qr/(?x:(?[ [ x ] ]))/;
+ like("x", qr/(?[ $s ])/ , "Modifier flags in interpolated set don't"
+ . " disrupt");
+}
+
done_testing();
1;
diff --git a/gnu/usr.bin/perl/t/re/regexp.t b/gnu/usr.bin/perl/t/re/regexp.t
index 1ad028bcd2e..fee1a48c885 100755
--- a/gnu/usr.bin/perl/t/re/regexp.t
+++ b/gnu/usr.bin/perl/t/re/regexp.t
@@ -69,7 +69,7 @@ BEGIN {
@INC = qw '../lib ../ext/re';
if (!defined &DynaLoader::boot_DynaLoader) { # miniperl
print("1..0 # Skip Unicode tables not built yet\n"), exit
- unless eval 'require "unicore/Heavy.pl"';
+ unless eval 'require "unicore/UCD.pl"';
}
# Some of the tests need a locale; which one doesn't much matter, except
@@ -85,30 +85,16 @@ sub _comment {
map { split /\n/ } @_;
}
-sub convert_from_ascii {
- my $string = shift;
-
- #my $save = $string;
- # Convert \x{...}, \o{...}
- $string =~ s/ (?<! \\ ) \\x\{ ( .*? ) } / "\\x{" . sprintf("%X", utf8::unicode_to_native(hex $1)) . "}" /gex;
- $string =~ s/ (?<! \\ ) \\o\{ ( .*? ) } / "\\o{" . sprintf("%o", utf8::unicode_to_native(oct $1)) . "}" /gex;
-
- # Convert \xAB
- $string =~ s/ (?<! \\ ) \\x ( [A-Fa-f0-9]{2} ) / "\\x" . sprintf("%02X", utf8::unicode_to_native(hex $1)) /gex;
-
- # Convert \xA
- $string =~ s/ (?<! \\ ) \\x ( [A-Fa-f0-9] ) (?! [A-Fa-f0-9] ) / "\\x" . sprintf("%X", utf8::unicode_to_native(hex $1)) /gex;
-
- #print STDERR __LINE__, ": $save\n$string\n" if $save ne $string;
- return $string;
-}
-
use strict;
use warnings FATAL=>"all";
no warnings 'experimental::vlb';
our ($bang, $ffff, $nulnul); # used by the tests
our ($qr, $skip_amp, $qr_embed, $qr_embed_thr, $regex_sets, $alpha_assertions, $no_null); # set by our callers
+if ($no_null && ! eval { require XS::APItest }) {
+ print("1..0 # Skip XS::APItest not available\n"), exit
+}
+
my $expanded_text = "expanded name from original test number";
my $expanded_text_re = qr/$expanded_text/;
@@ -120,6 +106,38 @@ my @tests = <TESTS>;
close TESTS;
+my $test_num = 0;
+
+# Some scenarios add extra tests to those just read in. For those where there
+# is a character set translation, the added test will already have been
+# translated, so any test number beginning with this one shouldn't be
+# translated again.
+my $first_already_converted_test_num = @tests + 1;
+
+sub convert_from_ascii_guts {
+ my $string_ref = shift;
+
+ return if $test_num >= $first_already_converted_test_num;
+
+ #my $save = $string_ref;
+ # Convert \x{...}, \o{...}
+ $$string_ref =~ s/ (?<! \\ ) \\x\{ ( .*? ) } / "\\x{" . sprintf("%X", utf8::unicode_to_native(hex $1)) . "}" /gex;
+ $$string_ref =~ s/ (?<! \\ ) \\o\{ ( .*? ) } / "\\o{" . sprintf("%o", utf8::unicode_to_native(oct $1)) . "}" /gex;
+
+ # Convert \xAB
+ $$string_ref =~ s/ (?<! \\ ) \\x ( [A-Fa-f0-9]{2} ) / "\\x" . sprintf("%02X", utf8::unicode_to_native(hex $1)) /gex;
+
+ # Convert \xA
+ $$string_ref =~ s/ (?<! \\ ) \\x ( [A-Fa-f0-9] ) (?! [A-Fa-f0-9] ) / "\\x" . sprintf("%X", utf8::unicode_to_native(hex $1)) /gex;
+
+ #print STDERR __LINE__, ": $save\n$string_ref\n" if $save ne $string_ref;
+ return;
+}
+
+*convert_from_ascii = (ord("A") == 65)
+ ? sub { 1; }
+ : \&convert_from_ascii_guts;
+
$bang = sprintf "\\%03o", ord "!"; # \41 would not be portable.
$ffff = chr(0xff) x 2;
$nulnul = "\0" x 2;
@@ -127,15 +145,14 @@ my $OP = $qr ? 'qr' : 'm';
$| = 1;
-my $test;
TEST:
foreach (@tests) {
- $test++;
+ $test_num++;
if (!/\S/ || /^\s*#/ || /^__END__$/) {
chomp;
my ($not,$comment)= split /\s*#\s*/, $_, 2;
$comment ||= "(blank line)";
- print "ok $test # $comment\n";
+ print "ok $test_num # $comment\n";
next;
}
chomp;
@@ -143,26 +160,26 @@ foreach (@tests) {
my ($pat, $subject, $result, $repl, $expect, $reason, $comment) = split(/\t/,$_,7);
$comment = "" unless defined $comment;
if (!defined $subject) {
- die "Bad test definition on line $test: $_\n";
+ die "Bad test definition on line $test_num: $_\n";
}
$reason = '' unless defined $reason;
my $input = join(':',$pat,$subject,$result,$repl,$expect);
# the double '' below keeps simple syntax highlighters from going crazy
- $pat = "'$pat'" unless $pat =~ /^[:''\/]/;
+ $pat = "'$pat'" unless $pat =~ /^[:''\/]/;
$pat =~ s/(\$\{\w+\})/$1/eeg;
$pat =~ s/\\n/\n/g unless $regex_sets;
- $pat = convert_from_ascii($pat) if ord("A") != 65;
+ convert_from_ascii(\$pat);
my $no_null_pat;
if ($no_null && $pat =~ /^'(.*)'\z/) {
$no_null_pat = XS::APItest::string_without_null($1);
}
- $subject = convert_from_ascii($subject) if ord("A") != 65;
+ convert_from_ascii(\$subject);
$subject = eval qq("$subject"); die $@ if $@;
- $expect = convert_from_ascii($expect) if ord("A") != 65;
+ convert_from_ascii(\$expect);
$expect = eval qq("$expect"); die $@ if $@;
$expect = $repl = '-' if $skip_amp and $input =~ /\$[&\`\']/;
@@ -186,7 +203,7 @@ foreach (@tests) {
$reason = 'skipping $&' if $reason eq '' && $skip_amp;
$result =~ s/B//i unless $skip;
my $todo= $result =~ s/T// ? " # TODO" : "";
- my $testname= $test;
+ my $testname= $test_num;
if ($comment) {
$comment=~s/^\s*(?:#\s*)?//;
$testname .= " - $comment" if $comment;
@@ -215,7 +232,7 @@ foreach (@tests) {
$expanded_pat =~ s//(*negative_lookbehind:/g;
}
if ($expanded_pat ne $pat) {
- $comment .= " $expanded_text $test";
+ $comment .= " $expanded_text $test_num";
push @tests, join "\t", $expanded_pat,
$subject // "",
$result // "",
@@ -458,7 +475,6 @@ EOFCODE
EOFCODE
}
$code = "no warnings 'experimental::regex_sets';$code" if $regex_sets;
- $code = "no warnings 'experimental::alpha_assertions';$code" if $alpha_assertions;
#$code.=qq[\n\$expect="$expect";\n];
#use Devel::Peek;
#die Dump($code) if $pat=~/\\h/ and $subject=~/\x{A0}/;
diff --git a/gnu/usr.bin/perl/t/re/regexp_unicode_prop.t b/gnu/usr.bin/perl/t/re/regexp_unicode_prop.t
index 6df29687358..527641dc400 100755
--- a/gnu/usr.bin/perl/t/re/regexp_unicode_prop.t
+++ b/gnu/usr.bin/perl/t/re/regexp_unicode_prop.t
@@ -2,6 +2,7 @@
#
# Tests that have to do with checking whether characters have (or not have)
# certain Unicode properties; belong (or not belong) to blocks, scripts, etc.
+# including user-defined properties
#
use strict;
@@ -143,6 +144,7 @@ BEGIN {
Dash => ['-'],
ASCII_Hex_Digit => ['!-', 'A'],
IsAsciiHexAndDash => ['-', 'A'],
+ InLatin1 => ['\x{0100}', '!\x{00FF}'],
);
@USER_CASELESS_PROPERTIES = (
@@ -194,12 +196,6 @@ BEGIN {
}
}
-# These override the official ones, so if found before defined, the official
-# ones prevail, so can't test deferred definition
-my @OVERRIDING_USER_DEFINED_PROPERTIES = (
- InLatin1 => ['\x{0100}', '!\x{00FF}'],
-);
-
#
# From the short properties we populate POSIX-like classes.
#
@@ -249,8 +245,7 @@ while (my ($class, $chars) = each %SHORT_PROPERTIES) {
push @CLASSES => "# Short properties" => %SHORT_PROPERTIES,
"# POSIX like properties" => %d,
- "# User defined properties" => @USER_DEFINED_PROPERTIES,
- "# Overriding user defined properties" => @OVERRIDING_USER_DEFINED_PROPERTIES;
+ "# User defined properties" => @USER_DEFINED_PROPERTIES;
#
diff --git a/gnu/usr.bin/perl/t/re/rt122747.t b/gnu/usr.bin/perl/t/re/rt122747.t
index c05b0610ff5..c9586c289ba 100644
--- a/gnu/usr.bin/perl/t/re/rt122747.t
+++ b/gnu/usr.bin/perl/t/re/rt122747.t
@@ -12,7 +12,7 @@ BEGIN {
}
if (is_miniperl()) {
skip_all_if_miniperl("Unicode tables not built yet", 2)
- unless eval 'require "unicore/Heavy.pl"';
+ unless eval 'require "unicore/UCD.pl"';
}
plan tests => 3;
diff --git a/gnu/usr.bin/perl/t/re/script_run.t b/gnu/usr.bin/perl/t/re/script_run.t
index 21cacec8be2..5c6b40c3905 100644
--- a/gnu/usr.bin/perl/t/re/script_run.t
+++ b/gnu/usr.bin/perl/t/re/script_run.t
@@ -15,8 +15,6 @@ $|=1;
# later Standards could cause them to not test what they originally were aimed
# to do.
-no warnings "experimental::script_run";
-
# Since there's so few tests currently, we can afford to try each syntax on
# all of them
foreach my $type ('script_run', 'sr', 'atomic_script_run', 'asr') {
@@ -119,8 +117,7 @@ foreach my $type ('script_run', 'sr', 'atomic_script_run', 'asr') {
like("\x{1d7ce}αβγ", qr/^(*sr:.{4})/,
"Non-ASCII Common digits work with Greek"); # perl #133547
- fresh_perl_is('no warnings "experimental::script_run";
- print scalar "0" =~ m!(((*sr:()|)0)(*sr:)0|)!;',
+ fresh_perl_is('print scalar "0" =~ m!(((*sr:()|)0)(*sr:)0|)!;',
1, {}, '[perl #133997]');
done_testing();
diff --git a/gnu/usr.bin/perl/t/re/speed.t b/gnu/usr.bin/perl/t/re/speed.t
index af0e4330a01..e2d01ab3ce7 100644
--- a/gnu/usr.bin/perl/t/re/speed.t
+++ b/gnu/usr.bin/perl/t/re/speed.t
@@ -42,7 +42,9 @@ run_tests() unless caller;
sub run_tests {
- watchdog(($::running_as_thread && $::running_as_thread) ? 150 : 540);
+ watchdog(($ENV{PERL_TEST_TIME_OUT_FACTOR} || 1)
+ * (($::running_as_thread && $::running_as_thread)
+ ? 150 : 225));
{
# [perl #120446]
@@ -153,7 +155,8 @@ PROG
my $substr= substr( $str, 1 );
1 while $substr=~m/0/g;
$elapsed += time;
- ok( $elapsed <= 2, "should not COW on long string with substr and m//g");
+ ok( $elapsed <= 2, "should not COW on long string with substr and m//g")
+ or diag "elapsed=$elapsed";
}
# [perl #133185] Infinite loop
diff --git a/gnu/usr.bin/perl/t/run/fresh_perl.t b/gnu/usr.bin/perl/t/run/fresh_perl.t
index 411ff04b9ce..5f0e2ce2168 100644
--- a/gnu/usr.bin/perl/t/run/fresh_perl.t
+++ b/gnu/usr.bin/perl/t/run/fresh_perl.t
@@ -743,7 +743,7 @@ utf8::upgrade($_); # the original code used a UTF-8 locale (affects STDIN)
/^([[:digit:]]+)/;
EXPECT
######## [perl #20667] unicode regex vs non-unicode regex
-# SKIP: !defined &DynaLoader::boot_DynaLoader && !eval 'require "unicore/Heavy.pl"'
+# SKIP: !defined &DynaLoader::boot_DynaLoader && !eval 'require "unicore/UCD.pl"'
# (skip under miniperl if Unicode tables are not built yet)
$toto = 'Hello';
$toto =~ /\w/; # this line provokes the problem!
diff --git a/gnu/usr.bin/perl/t/run/switches.t b/gnu/usr.bin/perl/t/run/switches.t
index 594cad6e7f5..aa8d9c5427c 100644
--- a/gnu/usr.bin/perl/t/run/switches.t
+++ b/gnu/usr.bin/perl/t/run/switches.t
@@ -423,9 +423,20 @@ __EOF__
eval { require File::Spec; 1 }
or skip "Cannot load File::Spec - miniperl?", 20;
- -d "tmpinplace" or mkdir("tmpinplace")
- or die "Cannot mkdir 'tmpinplace': $!";
- my $work = File::Spec->catfile("tmpinplace", "foo");
+ my $tmpinplace = tempfile();
+
+ require File::Path;
+ END {
+ File::Path::rmtree($tmpinplace)
+ if $tmpinplace && -d $tmpinplace;
+ }
+
+ # test.pl's tempfile() doesn't create the file so we can
+ # safely mkdir it
+ mkdir $tmpinplace
+ or die "Cannot create $tmpinplace: $!";
+
+ my $work = File::Spec->catfile($tmpinplace, "foo");
# exit or die should leave original content in file
for my $inplace (qw/-i -i.bak/) {
@@ -475,8 +486,8 @@ __EOF__
&& $Config{ccflags} !~ /-DNO_USE_ATFUNCTIONS\b/;
my ($osvers) = ($Config{osvers} =~ /^(\d+(?:\.\d+)?)/);
skip "NetBSD 6 libc defines at functions, but they're incomplete", 3
- if $^O eq "netbsd" && $osvers < 7;
- fresh_perl_is(<<'CODE', "ok\n", { },
+ if $^O eq "netbsd" && $osvers < 7;
+ my $code = <<'CODE';
@ARGV = ("tmpinplace/foo");
$^I = "";
while (<>) {
@@ -485,6 +496,8 @@ while (<>) {
}
print "ok\n";
CODE
+ $code =~ s/tmpinplace/$tmpinplace/;
+ fresh_perl_is($code, "ok\n", { },
"chdir while in-place editing");
ok(open(my $fh, "<", $work), "open out file");
is(scalar <$fh>, "xx\n", "file successfully saved after chdir");
@@ -495,7 +508,8 @@ CODE
{
skip "Need threads and full perl", 3
if !$Config{useithreads} || is_miniperl();
- fresh_perl_is(<<'CODE', "ok\n", { stderr => 1 },
+
+ my $code = <<'CODE';
use threads;
use strict;
@ARGV = ("tmpinplace/foo");
@@ -506,6 +520,8 @@ while (<>) {
}
print "ok\n";
CODE
+ $code =~ s/tmpinplace/$tmpinplace/;
+ fresh_perl_is($code, "ok\n", { stderr => 1 },
"threads while in-place editing");
ok(open(my $fh, "<", $work), "open out file");
is(scalar <$fh>, "yy\n", "file successfully saved after chdir");
@@ -521,7 +537,7 @@ CODE
# it attempts to close the file twice
print $fh "foo\n";
close $fh or die "Cannot close $work: $!";
- fresh_perl_is(<<'CODE', "ok\n", { stderr => 1 },
+ my $code = <<'CODE';
use strict;
@ARGV = ("tmpinplace/foo");
$^I = "";
@@ -538,6 +554,8 @@ while (<>) {
}
print "ok\n";
CODE
+ $code =~ s/tmpinplace/$tmpinplace/;
+ fresh_perl_is($code, "ok\n", { stderr => 1 },
"fork while in-place editing");
ok(open($fh, "<", $work), "open out file");
is(scalar <$fh>, "yy\n", "file successfully saved after fork");
@@ -556,7 +574,7 @@ CODE
# make it fail by creating a directory of the backup name
mkdir "$work.bak" or die "Cannot make mask backup directory: $!";
}
- fresh_perl_like(<<'CODE', qr/Can't rename/, { stderr => 1 }, "fail backup rename");
+ my $code = <<'CODE';
@ARGV = ("tmpinplace/foo");
$^I = ".bak";
while (<>) {
@@ -564,6 +582,8 @@ while (<>) {
}
print "ok\n";
CODE
+ $code =~ s/tmpinplace/$tmpinplace/;
+ fresh_perl_like($code, qr/Can't rename/, { stderr => 1 }, "fail backup rename");
if ($^O eq 'VMS') {
1 while unlink "$work.bak";
}
@@ -587,7 +607,7 @@ CODE
# we now use temp files for in-place editing, make sure we didn't leave
# any behind in the above test
- opendir my $d, "tmpinplace" or die "Cannot opendir tmpinplace: $!";
+ opendir my $d, $tmpinplace or die "Cannot opendir $tmpinplace: $!";
my @names = grep !/^\.\.?$/ && $_ ne 'foo' && $_ ne 'foo.', readdir $d;
closedir $d;
is(scalar(@names), 0, "no extra files")
@@ -602,14 +622,14 @@ CODE
# test we handle the rename of the work to the original failing
# make it fail by removing write perms from the directory
# but first check that doesn't prevent writing
- chmod 0500, "tmpinplace";
- my $check = File::Spec->catfile("tmpinplace", "check");
+ chmod 0500, $tmpinplace;
+ my $check = File::Spec->catfile($tmpinplace, "check");
my $canwrite = open my $fh, ">", $check;
unlink $check;
- chmod 0700, "tmpinplace" or die "Cannot make tmpinplace writable again: $!";
- skip "Cannot make tmpinplace read only", 1
+ chmod 0700, $tmpinplace or die "Cannot make $tmpinplace writable again: $!";
+ skip "Cannot make $tmpinplace read only", 1
if $canwrite;
- fresh_perl_like(<<'CODE', qr/failed to rename/, { stderr => 1 }, "fail final rename");
+ my $code = <<'CODE';
@ARGV = ("tmpinplace/foo");
$^I = "";
while (<>) {
@@ -618,7 +638,9 @@ while (<>) {
}
print "ok\n";
CODE
- chmod 0700, "tmpinplace" or die "Cannot make tmpinplace writable again: $!";
+ $code =~ s/tmpinplace/$tmpinplace/g;
+ fresh_perl_like($code, qr/failed to rename/, { stderr => 1 }, "fail final rename");
+ chmod 0700, $tmpinplace or die "Cannot make $tmpinplace writable again: $!";
}
SKIP:
@@ -629,7 +651,7 @@ CODE
&& ($Config{d_dirfd} || $Config{d_dir_dd_fd})
&& $Config{d_linkat}
&& $Config{ccflags} !~ /-DNO_USE_ATFUNCTIONS\b/;
- fresh_perl_like(<<'CODE', qr/^Cannot complete in-place edit of tmpinplace\/foo: .* - line 5, <> line \d+\./, { },
+ my $code = <<'CODE';
@ARGV = ("tmpinplace/foo");
$^I = "";
while (<>) {
@@ -638,19 +660,22 @@ while (<>) {
}
print "ok\n";
CODE
+ $code =~ s/tmpinplace/$tmpinplace/;
+ fresh_perl_like($code, qr/^Cannot complete in-place edit of \Q$tmpinplace\E\/foo: .* - line 5, <> line \d+\./, { },
"chdir while in-place editing (no at-functions)");
}
unlink $work;
- opendir $d, "tmpinplace" or die "Cannot opendir tmpinplace: $!";
+ opendir $d, $tmpinplace or die "Cannot opendir $tmpinplace: $!";
@names = grep !/^\.\.?$/ && !/foo$/aai, readdir $d;
closedir $d;
# clean up in case the above failed
- unlink map File::Spec->catfile("tmpinplace", $_), @names;
+ unlink map File::Spec->catfile($tmpinplace, $_), @names;
- rmdir "tmpinplace";
+ rmdir $tmpinplace;
+ undef $tmpinplace;
}
# Tests for -E
diff --git a/gnu/usr.bin/perl/t/test.pl b/gnu/usr.bin/perl/t/test.pl
index 25eae4009d6..8c623931386 100644
--- a/gnu/usr.bin/perl/t/test.pl
+++ b/gnu/usr.bin/perl/t/test.pl
@@ -169,12 +169,21 @@ sub skip_all_without_config {
sub skip_all_without_unicode_tables { # (but only under miniperl)
if (is_miniperl()) {
skip_all_if_miniperl("Unicode tables not built yet")
- unless eval 'require "unicore/Heavy.pl"';
+ unless eval 'require "unicore/UCD.pl"';
}
}
sub find_git_or_skip {
my ($source_dir, $reason);
+
+ if ( $ENV{CONTINUOUS_INTEGRATION} && $ENV{WORKSPACE} ) {
+ $source_dir = $ENV{WORKSPACE};
+ if ( -d "${source_dir}/.git" ) {
+ $ENV{GIT_DIR} = "${source_dir}/.git";
+ return $source_dir;
+ }
+ }
+
if (-d '.git') {
$source_dir = '.';
} elsif (-l 'MANIFEST' && -l 'AUTHORS') {
@@ -310,27 +319,17 @@ sub display {
$y = $y . sprintf "\\x{%x}", $c;
} elsif ($backslash_escape{$c}) {
$y = $y . $backslash_escape{$c};
- } else {
- my $z = chr $c; # Maybe we can get away with a literal...
-
- if ($z !~ /[^[:^print:][:^ascii:]]/) {
- # The pattern above is equivalent (by de Morgan's
- # laws) to:
- # $z !~ /(?[ [:print:] & [:ascii:] ])/
- # or, $z is not an ascii printable character
-
- # Use octal for characters with small ordinals that
- # are traditionally expressed as octal: the controls
- # below space, which on EBCDIC are almost all the
- # controls, but on ASCII don't include DEL nor the C1
- # controls.
- if ($c < ord " ") {
- $z = sprintf "\\%03o", $c;
- } else {
- $z = sprintf "\\x{%x}", $c;
- }
- }
- $y = $y . $z;
+ } elsif ($c < ord " ") {
+ # Use octal for characters with small ordinals that are
+ # traditionally expressed as octal: the controls below
+ # space, which on EBCDIC are almost all the controls, but
+ # on ASCII don't include DEL nor the C1 controls.
+ $y = $y . sprintf "\\%03o", $c;
+ } elsif (chr $c =~ /[[:print:]]/a) {
+ $y = $y . chr $c;
+ }
+ else {
+ $y = $y . sprintf "\\x%02X", $c;
}
}
$x = $y;
@@ -754,6 +753,8 @@ sub _create_runperl { # Create the string to qx in runperl().
}
# sub run_perl {} is alias to below
+# Since this uses backticks to run, it is subject to the rules of the shell.
+# Locale settings may pose a problem, depending on the program being run.
sub runperl {
die "test.pl:runperl() does not take a hashref"
if ref $_[0] and ref $_[0] eq 'HASH';
@@ -966,8 +967,10 @@ sub fresh_perl {
# arguments in the hash referred to by '$runperl_args'. The results are
# returned, with $? set to the exit code. Unless overridden, stderr is
# redirected to stdout.
+ #
+ # Placing the program in a file bypasses various sh vagaries
- die sprintf "Third argument to fresh_perl_.* must be hashref of args to fresh_perl (or {})"
+ die sprintf "Second argument to fresh_perl_.* must be hashref of args to fresh_perl (or {})"
unless !(defined $runperl_args) || ref($runperl_args) eq 'HASH';
# Given the choice of the mis-parsable {}
@@ -1098,6 +1101,7 @@ sub fresh_perl_like {
# regex - the expected output is a regular expression
# random - all lines match but in any order
# fatal - the code will fail fatally (croak, die)
+# nonfatal - the code is not expected to fail fatally
#
# If the actual output contains a line "SKIPPED" the test will be
# skipped.
@@ -1302,7 +1306,7 @@ sub run_multiple_progs {
my $option_regex = 0;
my $option_random = 0;
my $fatal = $FATAL;
- if ($expected =~ s/^OPTIONS? (.+)\n//) {
+ if ($expected =~ s/^OPTIONS? (.+)(?:\n|\Z)//) {
foreach my $option (split(' ', $1)) {
if ($option eq 'regex') { # allow regular expressions
$option_regex = 1;
@@ -1313,6 +1317,10 @@ sub run_multiple_progs {
elsif ($option eq 'fatal') { # perl should fail
$fatal = 1;
}
+ elsif ($option eq 'nonfatal') {
+ # used to turn off default fatal
+ $fatal = 0;
+ }
else {
die "$0: Unknown OPTION '$option'\n";
}
diff --git a/gnu/usr.bin/perl/t/uni/cache.t b/gnu/usr.bin/perl/t/uni/cache.t
deleted file mode 100644
index e72a1b1aa8d..00000000000
--- a/gnu/usr.bin/perl/t/uni/cache.t
+++ /dev/null
@@ -1,35 +0,0 @@
-BEGIN {
- chdir 't' if -d 't';
- require './test.pl';
- set_up_inc('../lib');
- skip_all("utf8_heavy no longer used much");
- skip_all_without_unicode_tables();
-}
-
-plan tests => 1;
-
-# Looks to see if a "do 'unicore/lib/Scx/Hira.pl'" is called more than once, by
-# putting a compile sub first on the library path;
-# XXX Kludge: requires exact path, which might change, and has deep knowledge
-# of how utf8_heavy.pl works, which might also change.
-
-BEGIN { # Make sure catches compile time references
- $::count = 0;
- unshift @INC, sub {
- $::count++ if $_[1] eq 'unicore/lib/Scx/Hira.pl';
- };
-}
-
-my $s = 'foo';
-
-# The second value is to prevent an optimization that exists at the time this
-# is written to re-use a property without trying to look it up if it is the
-# only thing in a character class. They differ in order to make sure that any
-# future optimizations that don't re-use identical character classes don't come
-# into play
-$s =~ m/[\p{Hiragana}\x{101}]/;
-$s =~ m/[\p{Hiragana}\x{102}]/;
-$s =~ m/[\p{Hiragana}\x{103}]/;
-$s =~ m/[\p{Hiragana}\x{104}]/;
-
-is($::count, 1, "Swatch hash caching kept us from reloading swatch hash.");
diff --git a/gnu/usr.bin/perl/t/uni/gv.t b/gnu/usr.bin/perl/t/uni/gv.t
index 427831b2231..a82f692fa2c 100644
--- a/gnu/usr.bin/perl/t/uni/gv.t
+++ b/gnu/usr.bin/perl/t/uni/gv.t
@@ -192,7 +192,7 @@ is (*{*Ẋ{GLOB}}, "*main::STDOUT");
my $val = *Ẋ{FILEHANDLE};
# deprecation warning removed in v5.23 -- rjbs, 2015-12-31
- # https://rt.perl.org/Ticket/Display.html?id=127060
+ # https://github.com/Perl/perl5/issues/15105
print {*Ẋ{IO}} (! defined $warn
? "ok $test\n" : "not ok $test\n");
curr_test(++$test);
diff --git a/gnu/usr.bin/perl/t/uni/variables.t b/gnu/usr.bin/perl/t/uni/variables.t
index d8709a62b74..a8a67684f04 100644
--- a/gnu/usr.bin/perl/t/uni/variables.t
+++ b/gnu/usr.bin/perl/t/uni/variables.t
@@ -303,7 +303,7 @@ for my $i (0x100..0xffff) {
{
# Bleadperl v5.17.9-109-g3283393 breaks ZEFRAM/Module-Runtime-0.013.tar.gz
- # https://rt.perl.org/rt3/Public/Bug/Display.html?id=117101
+ # https://github.com/Perl/perl5/issues/12841
no strict;
local $@;
@@ -336,7 +336,7 @@ EOP
{
# bleadperl v5.17.9-109-g3283393 breaks JEREMY/File-Signature-1.009.tar.gz
- # https://rt.perl.org/rt3/Ticket/Display.html?id=117145
+ # https://github.com/Perl/perl5/issues/12849
local $@;
my $var = 10;
eval ' ${ var }';
diff --git a/gnu/usr.bin/perl/taint.c b/gnu/usr.bin/perl/taint.c
index 72216f85deb..583454899ca 100644
--- a/gnu/usr.bin/perl/taint.c
+++ b/gnu/usr.bin/perl/taint.c
@@ -26,6 +26,9 @@
void
Perl_taint_proper(pTHX_ const char *f, const char *const s)
{
+ /* Output a tainting violation, croaking unless we're just to warn.
+ * '_proper' is just to throw you off the scent */
+
#if defined(HAS_SETEUID) && defined(DEBUGGING)
PERL_ARGS_ASSERT_TAINT_PROPER;
@@ -60,7 +63,7 @@ Perl_taint_proper(pTHX_ const char *f, const char *const s)
ug = " while running with -T switch";
/* XXX because taint_proper adds extra format args, we can't
- * get the caller to check properly; o we just silence the warning
+ * get the caller to check properly; so we just silence the warning
* and hope the callers aren't naughty */
GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
if (PL_unsafe || TAINT_WARN_get) {
@@ -167,7 +170,7 @@ Perl_taint_env(pTHX)
#endif
if (t < e && isWORDCHAR(*t))
t++;
- while (t < e && (isWORDCHAR(*t) || strchr("-_.+", *t)))
+ while (t < e && (isWORDCHAR(*t) || memCHRs("-_.+", *t)))
t++;
if (t < e) {
TAINT;
diff --git a/gnu/usr.bin/perl/time64.c b/gnu/usr.bin/perl/time64.c
index 957218074f5..bbcef8e7745 100644
--- a/gnu/usr.bin/perl/time64.c
+++ b/gnu/usr.bin/perl/time64.c
@@ -115,6 +115,40 @@ static const short safe_years[SOLAR_CYCLE_LENGTH] = {
# define TIME64_TRACE3(format, var1, var2, var3) ((void)0)
#endif
+/* Set up the mutexes for this file. There are no races possible on
+ * non-threaded perls, nor platforms that naturally don't have them.
+ * Otherwise, we need to have mutexes. If we have reentrant versions of the
+ * functions below, they automatically will be substituted for the
+ * non-reentrant ones. That solves the problem of the buffers being trashed by
+ * another thread, but not of the environment or locale changing during their
+ * execution. To do that, we only need a read lock (which prevents writing by
+ * others). However, if we don't have re-entrant functions, we can gain some
+ * measure of thread-safety by using an exclusive lock during their execution.
+ * That will protect against any other use of the functions that use the
+ * mutexes, which all of core should be using. */
+#ifdef USE_REENTRANT_API /* This indicates a platform where we need reentrant
+ versions if have them */
+# ifdef PERL_REENTR_USING_LOCALTIME_R
+# define LOCALTIME_LOCK ENV_LOCALE_READ_LOCK
+# define LOCALTIME_UNLOCK ENV_LOCALE_READ_UNLOCK
+# else
+# define LOCALTIME_LOCK ENV_LOCALE_LOCK
+# define LOCALTIME_UNLOCK ENV_LOCALE_UNLOCK
+# endif
+# ifdef PERL_REENTR_USING_GMTIME_R
+# define GMTIME_LOCK ENV_LOCALE_READ_LOCK
+# define GMTIME_UNLOCK ENV_LOCALE_READ_UNLOCK
+# else
+# define GMTIME_LOCK ENV_LOCALE_LOCK
+# define GMTIME_UNLOCK ENV_LOCALE_UNLOCK
+# endif
+#else /* Reentrant not needed, so races not possible */
+# define LOCALTIME_LOCK NOOP
+# define LOCALTIME_UNLOCK NOOP
+# define GMTIME_LOCK NOOP
+# define GMTIME_UNLOCK NOOP
+#endif
+
static int S_is_exception_century(Year year)
{
const int is_exception = ((year % 100 == 0) && !(year % 400 == 0));
@@ -289,49 +323,6 @@ static void S_copy_little_tm_to_big_TM(const struct tm *src, struct TM *dest) {
#endif
}
-
-#ifndef HAS_LOCALTIME_R
-/* Simulate localtime_r() to the best of our ability */
-static struct tm * S_localtime_r(const time_t *clock, struct tm *result) {
-#ifdef __VMS
- dTHX; /* the following is defined as Perl_my_localtime(aTHX_ ...) */
-#endif
- const struct tm * const static_result = localtime(clock);
-
- assert(result != NULL);
-
- if( static_result == NULL ) {
- memset(result, 0, sizeof(*result));
- return NULL;
- }
- else {
- memcpy(result, static_result, sizeof(*result));
- return result;
- }
-}
-#endif
-
-#ifndef HAS_GMTIME_R
-/* Simulate gmtime_r() to the best of our ability */
-static struct tm * S_gmtime_r(const time_t *clock, struct tm *result) {
-#ifdef __VMS
- dTHX; /* the following is defined as Perl_my_localtime(aTHX_ ...) */
-#endif
- const struct tm * const static_result = gmtime(clock);
-
- assert(result != NULL);
-
- if( static_result == NULL ) {
- memset(result, 0, sizeof(*result));
- return NULL;
- }
- else {
- memcpy(result, static_result, sizeof(*result));
- return result;
- }
-}
-#endif
-
struct TM *Perl_gmtime64_r (const Time64_T *in_time, struct TM *p)
{
int v_tm_sec, v_tm_min, v_tm_hour, v_tm_mon, v_tm_wday;
@@ -340,6 +331,7 @@ struct TM *Perl_gmtime64_r (const Time64_T *in_time, struct TM *p)
Time64_T m;
Time64_T time = *in_time;
Year year = 70;
+ dTHX;
assert(p != NULL);
@@ -347,9 +339,30 @@ struct TM *Perl_gmtime64_r (const Time64_T *in_time, struct TM *p)
if( SHOULD_USE_SYSTEM_GMTIME(*in_time) ) {
time_t safe_time = (time_t)*in_time;
struct tm safe_date;
- GMTIME_R(&safe_time, &safe_date);
+ struct tm * result;
+
+ GMTIME_LOCK;
+
+ /* reentr.h will automatically replace this with a call to gmtime_r()
+ * when appropriate */
+ result = gmtime(&safe_time);
+
+ assert(result != NULL);
- S_copy_little_tm_to_big_TM(&safe_date, p);
+#if defined(HAS_GMTIME_R) && defined(USE_REENTRANT_API)
+
+ PERL_UNUSED_VAR(safe_date);
+#else
+ /* Here, no gmtime_r() and is a threaded perl where the result can be
+ * overwritten by a call in another thread. Copy to a safe place,
+ * hopefully before another gmtime that isn't using the mutexes can
+ * jump in and trash this result. */
+ memcpy(&safe_date, result, sizeof(safe_date));
+ result = &safe_date;
+#endif
+ GMTIME_UNLOCK;
+
+ S_copy_little_tm_to_big_TM(result, p);
assert(S_check_tm(p));
return p;
@@ -464,85 +477,112 @@ struct TM *Perl_localtime64_r (const Time64_T *time, struct TM *local_tm)
{
time_t safe_time;
struct tm safe_date;
+ const struct tm * result;
struct TM gm_tm;
Year orig_year;
int month_diff;
+ const bool use_system = SHOULD_USE_SYSTEM_LOCALTIME(*time);
+ dTHX;
assert(local_tm != NULL);
/* Use the system localtime() if time_t is small enough */
- if( SHOULD_USE_SYSTEM_LOCALTIME(*time) ) {
+ if (use_system) {
safe_time = (time_t)*time;
TIME64_TRACE1("Using system localtime for %lld\n", *time);
+ }
+ else {
+ if (Perl_gmtime64_r(time, &gm_tm) == NULL) {
+ TIME64_TRACE1("gmtime64_r returned null for %lld\n", *time);
+ return NULL;
+ }
- LOCALTIME_R(&safe_time, &safe_date);
+ orig_year = gm_tm.tm_year;
- S_copy_little_tm_to_big_TM(&safe_date, local_tm);
- assert(S_check_tm(local_tm));
+ if (gm_tm.tm_year > (2037 - 1900) ||
+ gm_tm.tm_year < (1970 - 1900)
+ )
+ {
+ TIME64_TRACE1("Mapping tm_year %lld to safe_year\n",
+ (Year)gm_tm.tm_year);
+ gm_tm.tm_year = S_safe_year((Year)(gm_tm.tm_year + 1900)) - 1900;
+ }
- return local_tm;
+ safe_time = (time_t)S_timegm64(&gm_tm);
}
- if( Perl_gmtime64_r(time, &gm_tm) == NULL ) {
- TIME64_TRACE1("gmtime64_r returned null for %lld\n", *time);
+ LOCALTIME_LOCK;
+
+ /* reentr.h will automatically replace this with a call to localtime_r()
+ * when appropriate */
+ result = localtime(&safe_time);
+
+ if(UNLIKELY(result == NULL)) {
+ LOCALTIME_UNLOCK;
+ TIME64_TRACE1("localtime(%d) returned NULL\n", (int)safe_time);
return NULL;
}
- orig_year = gm_tm.tm_year;
+#if ! defined(USE_REENTRANT_API) || defined(PERL_REENTR_USING_LOCALTIME_R)
- if (gm_tm.tm_year > (2037 - 1900) ||
- gm_tm.tm_year < (1970 - 1900)
- )
- {
- TIME64_TRACE1("Mapping tm_year %lld to safe_year\n", (Year)gm_tm.tm_year);
- gm_tm.tm_year = S_safe_year((Year)(gm_tm.tm_year + 1900)) - 1900;
- }
+ PERL_UNUSED_VAR(safe_date);
- safe_time = (time_t)S_timegm64(&gm_tm);
- if( LOCALTIME_R(&safe_time, &safe_date) == NULL ) {
- TIME64_TRACE1("localtime_r(%d) returned NULL\n", (int)safe_time);
- return NULL;
- }
+#else
- S_copy_little_tm_to_big_TM(&safe_date, local_tm);
+ /* Here, would be using localtime_r() if it could, meaning there isn't one,
+ * and is a threaded perl where the result can be overwritten by a call in
+ * another thread. Copy to a safe place, hopefully before another
+ * localtime that isn't using the mutexes can jump in and trash this
+ * result. */
+ memcpy(&safe_date, result, sizeof(safe_date));
+ result = &safe_date;
- local_tm->tm_year = orig_year;
- if( local_tm->tm_year != orig_year ) {
- TIME64_TRACE2("tm_year overflow: tm_year %lld, orig_year %lld\n",
- (Year)local_tm->tm_year, (Year)orig_year);
+#endif
+
+ LOCALTIME_UNLOCK;
+
+ S_copy_little_tm_to_big_TM(result, local_tm);
+
+ if (! use_system) {
+
+ local_tm->tm_year = orig_year;
+ if( local_tm->tm_year != orig_year ) {
+ TIME64_TRACE2("tm_year overflow: tm_year %lld, orig_year %lld\n",
+ (Year)local_tm->tm_year, (Year)orig_year);
#ifdef EOVERFLOW
- errno = EOVERFLOW;
+ errno = EOVERFLOW;
#endif
- return NULL;
- }
+ return NULL;
+ }
+ month_diff = local_tm->tm_mon - gm_tm.tm_mon;
- month_diff = local_tm->tm_mon - gm_tm.tm_mon;
+ /* When localtime is Dec 31st previous year and
+ gmtime is Jan 1st next year.
+ */
+ if( month_diff == 11 ) {
+ local_tm->tm_year--;
+ }
- /* When localtime is Dec 31st previous year and
- gmtime is Jan 1st next year.
- */
- if( month_diff == 11 ) {
- local_tm->tm_year--;
- }
+ /* When localtime is Jan 1st, next year and
+ gmtime is Dec 31st, previous year.
+ */
+ if( month_diff == -11 ) {
+ local_tm->tm_year++;
+ }
- /* When localtime is Jan 1st, next year and
- gmtime is Dec 31st, previous year.
- */
- if( month_diff == -11 ) {
- local_tm->tm_year++;
- }
+ /* GMT is Jan 1st, xx01 year, but localtime is still Dec 31st
+ in a non-leap xx00. There is one point in the cycle
+ we can't account for which the safe xx00 year is a leap
+ year. So we need to correct for Dec 31st coming out as
+ the 366th day of the year.
+ */
+ if( !IS_LEAP(local_tm->tm_year) && local_tm->tm_yday == 365 )
+ local_tm->tm_yday--;
- /* GMT is Jan 1st, xx01 year, but localtime is still Dec 31st
- in a non-leap xx00. There is one point in the cycle
- we can't account for which the safe xx00 year is a leap
- year. So we need to correct for Dec 31st coming out as
- the 366th day of the year.
- */
- if( !IS_LEAP(local_tm->tm_year) && local_tm->tm_yday == 365 )
- local_tm->tm_yday--;
+ }
assert(S_check_tm(local_tm));
diff --git a/gnu/usr.bin/perl/time64.h b/gnu/usr.bin/perl/time64.h
index c0657665e94..b86e7716020 100644
--- a/gnu/usr.bin/perl/time64.h
+++ b/gnu/usr.bin/perl/time64.h
@@ -53,17 +53,4 @@ struct TM64 {
struct TM *Perl_gmtime64_r (const Time64_T *, struct TM *);
struct TM *Perl_localtime64_r (const Time64_T *, struct TM *);
-
-/* Not everyone has gm/localtime_r(), provide a replacement */
-#ifdef HAS_LOCALTIME_R
-# define LOCALTIME_R(clock, result) (L_R_TZSET localtime_r(clock, result))
-#else
-# define LOCALTIME_R(clock, result) (L_R_TZSET S_localtime_r(clock, result))
-#endif
-#ifdef HAS_GMTIME_R
-# define GMTIME_R(clock, result) gmtime_r(clock, result)
-#else
-# define GMTIME_R(clock, result) S_gmtime_r(clock, result)
-#endif
-
#endif
diff --git a/gnu/usr.bin/perl/toke.c b/gnu/usr.bin/perl/toke.c
index 68eea0cae60..a13a915998d 100644
--- a/gnu/usr.bin/perl/toke.c
+++ b/gnu/usr.bin/perl/toke.c
@@ -25,7 +25,7 @@
=head1 Lexer interface
This is the lower layer of the Perl parser, managing characters and tokens.
-=for apidoc AmU|yy_parser *|PL_parser
+=for apidoc AmnU|yy_parser *|PL_parser
Pointer to a structure encapsulating the state of the parsing operation
currently in progress. The pointer can be locally changed to perform
@@ -38,7 +38,6 @@ Individual members of C<PL_parser> have their own documentation.
#include "EXTERN.h"
#define PERL_IN_TOKE_C
#include "perl.h"
-#include "dquote_inline.h"
#include "invlist_inline.h"
#define new_constant(a,b,c,d,e,f,g, h) \
@@ -95,6 +94,7 @@ Individual members of C<PL_parser> have their own documentation.
&& ((XPVIV*)SvANY(sv))->xiv_u.xivu_eval_seen)
static const char* const ident_too_long = "Identifier too long";
+static const char* const ident_var_zero_multi_digit = "Numeric variables with more than one digit may not start with '0'";
# define NEXTVAL_NEXTTOKE PL_nextval[PL_nexttoke]
@@ -113,7 +113,7 @@ static const char* const ident_too_long = "Identifier too long";
/* In variables named $^X, these are the legal values for X.
* 1999-02-27 mjd-perl-patch@plover.com */
-#define isCONTROLVAR(x) (isUPPER(x) || strchr("[\\]^_?", (x)))
+#define isCONTROLVAR(x) (isUPPER(x) || memCHRs("[\\]^_?", (x)))
#define SPACE_OR_TAB(c) isBLANK_A(c)
@@ -147,6 +147,15 @@ static const char* const ident_too_long = "Identifier too long";
#define LEX_INTERPCONST 2 /* NOT USED */
#define LEX_FORMLINE 1 /* expecting a format line */
+/* returned to yyl_try() to request it to retry the parse loop, expected to only
+ be returned directly by yyl_fake_eof(), but functions that call yyl_fake_eof()
+ can also return it.
+
+ yylex (aka Perl_yylex) returns 0 on EOF rather than returning -1,
+ other token values are 258 or higher (see perly.h), so -1 should be
+ a safe value here.
+*/
+#define YYL_RETRY (-1)
#ifdef DEBUGGING
static const char* const lex_state_names[] = {
@@ -196,8 +205,10 @@ static const char* const lex_state_names[] = {
* Aop : addition-level operator
* AopNOASSIGN : addition-level operator that is never part of .=
* Mop : multiplication-level operator
- * Eop : equality-testing operator
- * Rop : relational operator <= != gt
+ * ChEop : chaining equality-testing operator
+ * NCEop : non-chaining comparison operator at equality precedence
+ * ChRop : chaining relational operator <= != gt
+ * NCRop : non-chaining relational operator isa
*
* Also see LOP and lop() below.
*/
@@ -234,8 +245,10 @@ static const char* const lex_state_names[] = {
#define Aop(f) return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, (int)ADDOP))
#define AopNOASSIGN(f) return (pl_yylval.ival=f, PL_bufptr=s, REPORT((int)ADDOP))
#define Mop(f) return ao((pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, (int)MULOP))
-#define Eop(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)EQOP))
-#define Rop(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)RELOP))
+#define ChEop(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)CHEQOP))
+#define NCEop(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)NCEQOP))
+#define ChRop(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)CHRELOP))
+#define NCRop(f) return (pl_yylval.ival=f, PL_expect=XTERM, PL_bufptr=s, REPORT((int)NCRELOP))
/* This bit of chicanery makes a unary function followed by
* a parenthesis into a function with one argument, highest precedence.
@@ -290,6 +303,19 @@ static const char* const lex_state_names[] = {
} STMT_END
+/* A file-local structure for passing around information about subroutines and
+ * related definable words */
+struct code {
+ SV *sv;
+ CV *cv;
+ GV *gv, **gvp;
+ OP *rv2cv_op;
+ PADOFFSET off;
+ bool lex;
+};
+
+static const struct code no_code = { NULL, NULL, NULL, NULL, NULL, 0, FALSE };
+
#ifdef DEBUGGING
/* how to interpret the pl_yylval associated with the token */
@@ -316,6 +342,8 @@ static struct debug_tokens {
{ ASSIGNOP, TOKENTYPE_OPNUM, "ASSIGNOP" },
{ BITANDOP, TOKENTYPE_OPNUM, "BITANDOP" },
{ BITOROP, TOKENTYPE_OPNUM, "BITOROP" },
+ { CHEQOP, TOKENTYPE_OPNUM, "CHEQOP" },
+ { CHRELOP, TOKENTYPE_OPNUM, "CHRELOP" },
{ COLONATTR, TOKENTYPE_NONE, "COLONATTR" },
{ CONTINUE, TOKENTYPE_NONE, "CONTINUE" },
{ DEFAULT, TOKENTYPE_NONE, "DEFAULT" },
@@ -326,7 +354,6 @@ static struct debug_tokens {
{ DOTDOT, TOKENTYPE_IVAL, "DOTDOT" },
{ ELSE, TOKENTYPE_NONE, "ELSE" },
{ ELSIF, TOKENTYPE_IVAL, "ELSIF" },
- { EQOP, TOKENTYPE_OPNUM, "EQOP" },
{ FOR, TOKENTYPE_IVAL, "FOR" },
{ FORMAT, TOKENTYPE_NONE, "FORMAT" },
{ FORMLBRACK, TOKENTYPE_NONE, "FORMLBRACK" },
@@ -349,6 +376,8 @@ static struct debug_tokens {
{ METHOD, TOKENTYPE_OPVAL, "METHOD" },
{ MULOP, TOKENTYPE_OPNUM, "MULOP" },
{ MY, TOKENTYPE_IVAL, "MY" },
+ { NCEQOP, TOKENTYPE_OPNUM, "NCEQOP" },
+ { NCRELOP, TOKENTYPE_OPNUM, "NCRELOP" },
{ NOAMP, TOKENTYPE_NONE, "NOAMP" },
{ NOTOP, TOKENTYPE_NONE, "NOTOP" },
{ OROP, TOKENTYPE_IVAL, "OROP" },
@@ -366,11 +395,12 @@ static struct debug_tokens {
{ PRIVATEREF, TOKENTYPE_OPVAL, "PRIVATEREF" },
{ QWLIST, TOKENTYPE_OPVAL, "QWLIST" },
{ REFGEN, TOKENTYPE_NONE, "REFGEN" },
- { RELOP, TOKENTYPE_OPNUM, "RELOP" },
{ REQUIRE, TOKENTYPE_NONE, "REQUIRE" },
{ SHIFTOP, TOKENTYPE_OPNUM, "SHIFTOP" },
{ SIGSUB, TOKENTYPE_NONE, "SIGSUB" },
{ SUB, TOKENTYPE_NONE, "SUB" },
+ { SUBLEXEND, TOKENTYPE_NONE, "SUBLEXEND" },
+ { SUBLEXSTART, TOKENTYPE_NONE, "SUBLEXSTART" },
{ THING, TOKENTYPE_OPVAL, "THING" },
{ UMINUS, TOKENTYPE_NONE, "UMINUS" },
{ UNIOP, TOKENTYPE_OPNUM, "UNIOP" },
@@ -605,26 +635,6 @@ S_missingterm(pTHX_ char *s, STRLEN len)
#include "feature.h"
/*
- * Check whether the named feature is enabled.
- */
-bool
-Perl_feature_is_enabled(pTHX_ const char *const name, STRLEN namelen)
-{
- char he_name[8 + MAX_FEATURE_LEN] = "feature_";
-
- PERL_ARGS_ASSERT_FEATURE_IS_ENABLED;
-
- assert(CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM);
-
- if (namelen > MAX_FEATURE_LEN)
- return FALSE;
- memcpy(&he_name[8], name, namelen);
-
- return cBOOL(cop_hints_fetch_pvn(PL_curcop, he_name, 8 + namelen, 0,
- REFCOUNTED_HE_EXISTS));
-}
-
-/*
* experimental text filters for win32 carriage-returns, utf16-to-utf8 and
* utf16-to-utf8-reversed.
*/
@@ -666,7 +676,7 @@ S_cr_textfilter(pTHX_ int idx, SV *sv, int maxlen)
#endif
/*
-=for apidoc Amx|void|lex_start|SV *line|PerlIO *rsfp|U32 flags
+=for apidoc lex_start
Creates and initialises a new lexer/parser state object, supplying
a context in which to lex and parse from a new source of Perl code.
@@ -831,7 +841,7 @@ Perl_parser_free_nexttoke_ops(pTHX_ yy_parser *parser, OPSLAB *slab)
/*
-=for apidoc AmxU|SV *|PL_parser-E<gt>linestr
+=for apidoc AmnxUN|SV *|PL_parser-E<gt>linestr
Buffer scalar containing the chunk currently under consideration of the
text currently being lexed. This is always a plain string scalar (for
@@ -858,7 +868,7 @@ lexing position is pointed to by L</PL_parser-E<gt>bufptr>. Direct use
of these pointers is usually preferable to examination of the scalar
through normal scalar means.
-=for apidoc AmxU|char *|PL_parser-E<gt>bufend
+=for apidoc AmnxUN|char *|PL_parser-E<gt>bufend
Direct pointer to the end of the chunk of text currently being lexed, the
end of the lexer buffer. This is equal to C<SvPVX(PL_parser-E<gt>linestr)
@@ -866,7 +876,7 @@ end of the lexer buffer. This is equal to C<SvPVX(PL_parser-E<gt>linestr)
always located at the end of the buffer, and does not count as part of
the buffer's contents.
-=for apidoc AmxU|char *|PL_parser-E<gt>bufptr
+=for apidoc AmnxUN|char *|PL_parser-E<gt>bufptr
Points to the current position of lexing inside the lexer buffer.
Characters around this point may be freely examined, within
@@ -884,7 +894,7 @@ Interpretation of the buffer's octets can be abstracted out by
using the slightly higher-level functions L</lex_peek_unichar> and
L</lex_read_unichar>.
-=for apidoc AmxU|char *|PL_parser-E<gt>linestart
+=for apidoc AmnxUN|char *|PL_parser-E<gt>linestart
Points to the start of the current line inside the lexer buffer.
This is useful for indicating at which column an error occurred, and
@@ -895,7 +905,7 @@ a newline; the function L</lex_read_to> handles this detail.
*/
/*
-=for apidoc Amx|bool|lex_bufutf8
+=for apidoc lex_bufutf8
Indicates whether the octets in the lexer buffer
(L</PL_parser-E<gt>linestr>) should be interpreted as the UTF-8 encoding
@@ -926,7 +936,7 @@ Perl_lex_bufutf8(pTHX)
}
/*
-=for apidoc Amx|char *|lex_grow_linestr|STRLEN len
+=for apidoc lex_grow_linestr
Reallocates the lexer buffer (L</PL_parser-E<gt>linestr>) to accommodate
at least C<len> octets (including terminating C<NUL>). Returns a
@@ -989,7 +999,7 @@ Perl_lex_grow_linestr(pTHX_ STRLEN len)
}
/*
-=for apidoc Amx|void|lex_stuff_pvn|const char *pv|STRLEN len|U32 flags
+=for apidoc lex_stuff_pvn
Insert characters into the lexer buffer (L</PL_parser-E<gt>linestr>),
immediately after the current lexing point (L</PL_parser-E<gt>bufptr>),
@@ -1007,6 +1017,8 @@ buffer is currently being interpreted (L</lex_bufutf8>). If a string
to be inserted is available as a Perl scalar, the L</lex_stuff_sv>
function is more convenient.
+=for apidoc Amnh||LEX_STUFF_UTF8
+
=cut
*/
@@ -1084,7 +1096,7 @@ Perl_lex_stuff_pvn(pTHX_ const char *pv, STRLEN len, U32 flags)
}
/*
-=for apidoc Amx|void|lex_stuff_pv|const char *pv|U32 flags
+=for apidoc lex_stuff_pv
Insert characters into the lexer buffer (L</PL_parser-E<gt>linestr>),
immediately after the current lexing point (L</PL_parser-E<gt>bufptr>),
@@ -1113,7 +1125,7 @@ Perl_lex_stuff_pv(pTHX_ const char *pv, U32 flags)
}
/*
-=for apidoc Amx|void|lex_stuff_sv|SV *sv|U32 flags
+=for apidoc lex_stuff_sv
Insert characters into the lexer buffer (L</PL_parser-E<gt>linestr>),
immediately after the current lexing point (L</PL_parser-E<gt>bufptr>),
@@ -1145,7 +1157,7 @@ Perl_lex_stuff_sv(pTHX_ SV *sv, U32 flags)
}
/*
-=for apidoc Amx|void|lex_unstuff|char *ptr
+=for apidoc lex_unstuff
Discards text about to be lexed, from L</PL_parser-E<gt>bufptr> up to
C<ptr>. Text following C<ptr> will be moved, and the buffer shortened.
@@ -1179,7 +1191,7 @@ Perl_lex_unstuff(pTHX_ char *ptr)
}
/*
-=for apidoc Amx|void|lex_read_to|char *ptr
+=for apidoc lex_read_to
Consume text in the lexer buffer, from L</PL_parser-E<gt>bufptr> up
to C<ptr>. This advances L</PL_parser-E<gt>bufptr> to match C<ptr>,
@@ -1210,7 +1222,7 @@ Perl_lex_read_to(pTHX_ char *ptr)
}
/*
-=for apidoc Amx|void|lex_discard_to|char *ptr
+=for apidoc lex_discard_to
Discards the first part of the L</PL_parser-E<gt>linestr> buffer,
up to C<ptr>. The remaining content of the buffer will be moved, and
@@ -1282,7 +1294,7 @@ Perl_notify_parser_that_changed_to_utf8(pTHX)
}
/*
-=for apidoc Amx|bool|lex_next_chunk|U32 flags
+=for apidoc lex_next_chunk
Reads in the next chunk of text to be lexed, appending it to
L</PL_parser-E<gt>linestr>. This should be called when lexing code has
@@ -1300,6 +1312,8 @@ consumed, then it will not be discarded regardless of the flag.
Returns true if some new text was added to the buffer, or false if the
buffer has reached the end of the input text.
+=for apidoc Amnh||LEX_KEEP_PREVIOUS
+
=cut
*/
@@ -1334,7 +1348,7 @@ Perl_lex_next_chunk(pTHX_ U32 flags)
PL_parser->last_lop = NULL;
last_uni_pos = last_lop_pos = 0;
*buf = 0;
- SvCUR(linestr) = 0;
+ SvCUR_set(linestr, 0);
} else {
old_bufend_pos = PL_parser->bufend - buf;
bufptr_pos = PL_parser->bufptr - buf;
@@ -1422,7 +1436,7 @@ Perl_lex_next_chunk(pTHX_ U32 flags)
}
/*
-=for apidoc Amx|I32|lex_peek_unichar|U32 flags
+=for apidoc lex_peek_unichar
Looks ahead one (Unicode) character in the text currently being lexed.
Returns the codepoint (unsigned integer value) of the next character,
@@ -1491,7 +1505,7 @@ Perl_lex_peek_unichar(pTHX_ U32 flags)
}
/*
-=for apidoc Amx|I32|lex_read_unichar|U32 flags
+=for apidoc lex_read_unichar
Reads the next (Unicode) character in the text currently being lexed.
Returns the codepoint (unsigned integer value) of the character read,
@@ -1529,7 +1543,7 @@ Perl_lex_read_unichar(pTHX_ U32 flags)
}
/*
-=for apidoc Amx|void|lex_read_space|U32 flags
+=for apidoc lex_read_space
Reads optional spaces, in Perl style, in the text currently being
lexed. The spaces may include ordinary whitespace characters and
@@ -1604,7 +1618,7 @@ Perl_lex_read_space(pTHX_ U32 flags)
/*
-=for apidoc EXMp|bool|validate_proto|SV *name|SV *proto|bool warn
+=for apidoc validate_proto
This function performs syntax checking on a prototype, C<proto>.
If C<warn> is true, any illegal characters or mismatched brackets
@@ -1647,11 +1661,11 @@ Perl_validate_proto(pTHX_ SV *name, SV *proto, bool warn, bool curstash)
if (must_be_last)
proto_after_greedy_proto = TRUE;
if (underscore) {
- if (!strchr(";@%", *p))
+ if (!memCHRs(";@%", *p))
bad_proto_after_underscore = TRUE;
underscore = FALSE;
}
- if (!strchr("$@%*;[]&\\_+", *p) || *p == '\0') {
+ if (!memCHRs("$@%*;[]&\\_+", *p) || *p == '\0') {
bad_proto = TRUE;
}
else {
@@ -2015,7 +2029,7 @@ S_force_next(pTHX_ I32 type)
static int
S_postderef(pTHX_ int const funny, char const next)
{
- assert(funny == DOLSHARP || strchr("$@%&*", funny));
+ assert(funny == DOLSHARP || memCHRs("$@%&*", funny));
if (next == '*') {
PL_expect = XOPERATOR;
if (PL_lex_state == LEX_INTERPNORMAL && !PL_lex_brackets) {
@@ -2507,7 +2521,7 @@ S_sublex_push(pTHX)
PL_parser->lex_re_reparsing = cBOOL(PL_in_eval & EVAL_RE_REPARSING);
PL_in_eval &= ~EVAL_RE_REPARSING;
- return '(';
+ return SUBLEXSTART;
}
/*
@@ -2582,8 +2596,66 @@ S_sublex_done(pTHX)
PL_bufend = SvPVX(PL_linestr);
PL_bufend += SvCUR(PL_linestr);
PL_expect = XOPERATOR;
- return ')';
+ return SUBLEXEND;
+ }
+}
+
+HV *
+Perl_load_charnames(pTHX_ SV * char_name, const char * context,
+ const STRLEN context_len, const char ** error_msg)
+{
+ /* Load the official _charnames module if not already there. The
+ * parameters are just to give info for any error messages generated:
+ * char_name a name to look up which is the reason for loading this
+ * context 'char_name' in the context in the input in which it appears
+ * context_len how many bytes 'context' occupies
+ * error_msg *error_msg will be set to any error
+ *
+ * Returns the ^H table if success; otherwise NULL */
+
+ unsigned int i;
+ HV * table;
+ SV **cvp;
+ SV * res;
+
+ PERL_ARGS_ASSERT_LOAD_CHARNAMES;
+
+ /* This loop is executed 1 1/2 times. On the first time through, if it
+ * isn't already loaded, try loading it, and iterate just once to see if it
+ * worked. */
+ for (i = 0; i < 2; i++) {
+ table = GvHV(PL_hintgv); /* ^H */
+
+ if ( table
+ && (PL_hints & HINT_LOCALIZE_HH)
+ && (cvp = hv_fetchs(table, "charnames", FALSE))
+ && SvOK(*cvp))
+ {
+ return table; /* Quit if already loaded */
+ }
+
+ if (i == 0) {
+ Perl_load_module(aTHX_
+ 0,
+ newSVpvs("_charnames"),
+
+ /* version parameter; no need to specify it, as if we get too early
+ * a version, will fail anyway, not being able to find 'charnames'
+ * */
+ NULL,
+ newSVpvs(":full"),
+ newSVpvs(":short"),
+ NULL);
+ }
}
+
+ /* Here, it failed; new_constant will give appropriate error messages */
+ *error_msg = NULL;
+ res = new_constant( NULL, 0, "charnames", char_name, NULL,
+ context, context_len, error_msg);
+ SvREFCNT_dec(res);
+
+ return NULL;
}
STATIC SV*
@@ -2624,13 +2696,19 @@ Perl_get_and_check_backslash_N_name(pTHX_ const char* s,
* 'is_utf8' is TRUE if we know we want the result to be UTF-8 even if it
* doesn't have to be. */
+ SV* char_name;
SV* res;
HV * table;
SV **cvp;
SV *cv;
SV *rv;
HV *stash;
- const char* backslash_ptr = s - 3; /* Points to the <\> of \N{... */
+
+ /* Points to the beginning of the \N{... so that any messages include the
+ * context of what's failing*/
+ const char* context = s - 3;
+ STRLEN context_len = e - context + 1; /* include all of \N{...} */
+
dVAR;
PERL_ARGS_ASSERT_GET_AND_CHECK_BACKSLASH_N_NAME;
@@ -2638,27 +2716,35 @@ Perl_get_and_check_backslash_N_name(pTHX_ const char* s,
assert(e >= s);
assert(s > (char *) 3);
- res = newSVpvn_flags(s, e - s, (is_utf8) ? SVf_UTF8 : 0);
+ char_name = newSVpvn_flags(s, e - s, (is_utf8) ? SVf_UTF8 : 0);
- if (!SvCUR(res)) {
- SvREFCNT_dec_NN(res);
+ if (!SvCUR(char_name)) {
+ SvREFCNT_dec_NN(char_name);
/* diag_listed_as: Unknown charname '%s' */
*error_msg = Perl_form(aTHX_ "Unknown charname ''");
return NULL;
}
- res = new_constant( NULL, 0, "charnames", res, NULL, backslash_ptr,
- /* include the <}> */
- e - backslash_ptr + 1, error_msg);
- if (! SvPOK(res)) {
- SvREFCNT_dec_NN(res);
+ /* Autoload the charnames module */
+
+ table = load_charnames(char_name, context, context_len, error_msg);
+ if (table == NULL) {
+ return NULL;
+ }
+
+ *error_msg = NULL;
+ res = new_constant( NULL, 0, "charnames", char_name, NULL,
+ context, context_len, error_msg);
+ if (*error_msg) {
+ *error_msg = Perl_form(aTHX_ "Unknown charname '%s'", SvPVX(char_name));
+
+ SvREFCNT_dec(res);
return NULL;
}
/* See if the charnames handler is the Perl core's, and if so, we can skip
* the validation needed for a user-supplied one, as Perl's does its own
* validation. */
- table = GvHV(PL_hintgv); /* ^H */
cvp = hv_fetchs(table, "charnames", FALSE);
if (cvp && (cv = *cvp) && SvROK(cv) && (rv = SvRV(cv),
SvTYPE(rv) == SVt_PVCV) && ((stash = CvSTASH(rv)) != NULL))
@@ -2695,8 +2781,8 @@ Perl_get_and_check_backslash_N_name(pTHX_ const char* s,
}
else {
/* Similarly for utf8. For invariants can check directly; for other
- * Latin1, can calculate their code point and check; otherwise use a
- * swash */
+ * Latin1, can calculate their code point and check; otherwise use an
+ * inversion list */
if (UTF8_IS_INVARIANT(*s)) {
if (! isALPHAU(*s)) {
goto bad_charname;
@@ -2755,7 +2841,7 @@ Perl_get_and_check_backslash_N_name(pTHX_ const char* s,
*error_msg = Perl_form(aTHX_
"charnames alias definitions may not contain trailing "
"white-space; marked by <-- HERE in %.*s<-- HERE %.*s",
- (int)(s - backslash_ptr + 1), backslash_ptr,
+ (int)(s - context + 1), context,
(int)(e - s + 1), s + 1);
return NULL;
}
@@ -2775,7 +2861,7 @@ Perl_get_and_check_backslash_N_name(pTHX_ const char* s,
immediately after '%s' */
*error_msg = Perl_form(aTHX_
"Malformed UTF-8 returned by %.*s immediately after '%.*s'",
- (int) (e - backslash_ptr + 1), backslash_ptr,
+ (int) context_len, context,
(int) ((char *) first_bad_char_loc - str), str);
return NULL;
}
@@ -2791,7 +2877,7 @@ Perl_get_and_check_backslash_N_name(pTHX_ const char* s,
in \N{%s} */
*error_msg = Perl_form(aTHX_
"Invalid character in \\N{...}; marked by <-- HERE in %.*s<-- HERE %.*s",
- (int)(s - backslash_ptr + 1), backslash_ptr,
+ (int)(s - context + 1), context,
(int)(e - s + 1), s + 1);
return NULL;
}
@@ -2803,7 +2889,7 @@ Perl_get_and_check_backslash_N_name(pTHX_ const char* s,
*error_msg = Perl_form(aTHX_
"charnames alias definitions may not contain a sequence of "
"multiple spaces; marked by <-- HERE in %.*s<-- HERE %.*s",
- (int)(s - backslash_ptr + 1), backslash_ptr,
+ (int)(s - context + 1), context,
(int)(e - s + 1), s + 1);
return NULL;
}
@@ -2909,12 +2995,12 @@ S_scan_const(pTHX_ char *start)
bool dorange = FALSE; /* are we in a translit range? */
bool didrange = FALSE; /* did we just finish a range? */
bool in_charclass = FALSE; /* within /[...]/ */
- bool d_is_utf8 = FALSE; /* Output constant is UTF8 */
bool s_is_utf8 = cBOOL(UTF); /* Is the source string assumed to be
UTF8? But, this can show as true
when the source isn't utf8, as for
example when it is entirely composed
of hex constants */
+ bool d_is_utf8 = FALSE; /* Output constant is UTF8 */
STRLEN utf8_variant_count = 0; /* When not in UTF-8, this counts the
number of characters found so far
that will expand (into 2 bytes)
@@ -2955,11 +3041,6 @@ S_scan_const(pTHX_ char *start)
PERL_ARGS_ASSERT_SCAN_CONST;
assert(PL_lex_inwhat != OP_TRANSR);
- if (PL_lex_inwhat == OP_TRANS && PL_parser->lex_sub_op) {
- /* If we are doing a trans and we know we want UTF8 set expectation */
- d_is_utf8 = PL_parser->lex_sub_op->op_private & (OPpTRANS_FROM_UTF|OPpTRANS_TO_UTF);
- s_is_utf8 = PL_parser->lex_sub_op->op_private & (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF);
- }
/* Protect sv from errors and fatal warnings. */
ENTER_with_name("scan_const");
@@ -2991,12 +3072,13 @@ S_scan_const(pTHX_ char *start)
* order to make the transliteration a simple table look-up.
* Ranges that extend above Latin1 have to be done differently, so
* there is no advantage to expanding them here, so they are
- * stored here as Min, ILLEGAL_UTF8_BYTE, Max. The illegal byte
- * signifies a hyphen without any possible ambiguity. On EBCDIC
- * machines, if the range is expressed as Unicode, the Latin1
- * portion is expanded out even if the range extends above
- * Latin1. This is because each code point in it has to be
- * processed here individually to get its native translation */
+ * stored here as Min, RANGE_INDICATOR, Max. 'RANGE_INDICATOR' is
+ * a byte that can't occur in legal UTF-8, and hence can signify a
+ * hyphen without any possible ambiguity. On EBCDIC machines, if
+ * the range is expressed as Unicode, the Latin1 portion is
+ * expanded out even if the range extends above Latin1. This is
+ * because each code point in it has to be processed here
+ * individually to get its native translation */
if (! dorange) {
@@ -3004,7 +3086,8 @@ S_scan_const(pTHX_ char *start)
* is not a hyphen; or if it is a hyphen, but it's too close to
* either edge to indicate a range, or if we haven't output any
* characters yet then it's a regular character. */
- if (*s != '-' || s >= send - 1 || s == start || d == SvPVX(sv)) {
+ if (*s != '-' || s >= send - 1 || s == start || d == SvPVX(sv))
+ {
/* A regular character. Process like any other, but first
* clear any flags */
@@ -3036,13 +3119,8 @@ S_scan_const(pTHX_ char *start)
s++; /* Skip past the hyphen */
/* d now points to where the end-range character will be
- * placed. Save it so won't have to go finding it later,
- * and drop down to get that character. (Actually we
- * instead save the offset, to handle the case where a
- * realloc in the meantime could change the actual
- * pointer). We'll finish processing the range the next
- * time through the loop */
- offset_to_max = d - SvPVX_const(sv);
+ * placed. Drop down to get that character. We'll finish
+ * processing the range the next time through the loop */
if (s_is_utf8 && UTF8_IS_ABOVE_LATIN1(*s)) {
has_above_latin1 = TRUE;
@@ -3059,10 +3137,8 @@ S_scan_const(pTHX_ char *start)
* are the range start and range end, in order.
* 'd' points to just beyond the range end in the 'sv' string,
* where we would next place something
- * 'offset_to_max' is the offset in 'sv' at which the character
- * (the range's maximum end point) before 'd' begins.
*/
- char * max_ptr = SvPVX(sv) + offset_to_max;
+ char * max_ptr;
char * min_ptr;
IV range_min;
IV range_max; /* last character in range */
@@ -3074,6 +3150,8 @@ S_scan_const(pTHX_ char *start)
IV real_range_max = 0;
#endif
/* Get the code point values of the range ends. */
+ max_ptr = (d_is_utf8) ? (char *) utf8_hop( (U8*) d, -1) : d - 1;
+ offset_to_max = max_ptr - SvPVX_const(sv);
if (d_is_utf8) {
/* We know the utf8 is valid, because we just constructed
* it ourselves in previous loop iterations */
@@ -3212,7 +3290,7 @@ S_scan_const(pTHX_ char *start)
while (e-- > max_ptr) {
*(e + 1) = *e;
}
- *(e + 1) = (char) ILLEGAL_UTF8_BYTE;
+ *(e + 1) = (char) RANGE_INDICATOR;
goto range_done;
}
@@ -3370,7 +3448,7 @@ S_scan_const(pTHX_ char *start)
*d++ = (char) UTF8_TWO_BYTE_LO(0x100);
if (real_range_max > 0x100) {
if (real_range_max > 0x101) {
- *d++ = (char) ILLEGAL_UTF8_BYTE;
+ *d++ = (char) RANGE_INDICATOR;
}
d = (char*)uvchr_to_utf8((U8*)d, real_range_max);
}
@@ -3453,7 +3531,7 @@ S_scan_const(pTHX_ char *start)
{
break;
}
- if (strchr(":'{$", s[1]))
+ if (memCHRs(":'{$", s[1]))
break;
if (!PL_lex_inpat && (s[1] == '+' || s[1] == '-'))
break; /* in regexp, neither @+ nor @- are interpolated */
@@ -3463,7 +3541,7 @@ S_scan_const(pTHX_ char *start)
else if (*s == '$') {
if (!PL_lex_inpat) /* not a regexp, so $ must be var */
break;
- if (s + 1 < send && !strchr("()| \r\n\t", s[1])) {
+ if (s + 1 < send && !memCHRs("()| \r\n\t", s[1])) {
if (s[1] == '\\') {
Perl_ck_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
"Possible unintended interpolation of $\\ in regex");
@@ -3500,7 +3578,7 @@ S_scan_const(pTHX_ char *start)
}
/* string-change backslash escapes */
- if (PL_lex_inwhat != OP_TRANS && *s && strchr("lLuUEQF", *s)) {
+ if (PL_lex_inwhat != OP_TRANS && *s && memCHRs("lLuUEQF", *s)) {
--s;
break;
}
@@ -3542,15 +3620,18 @@ S_scan_const(pTHX_ char *start)
case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
{
- I32 flags = PERL_SCAN_SILENT_ILLDIGIT;
+ I32 flags = PERL_SCAN_SILENT_ILLDIGIT
+ | PERL_SCAN_NOTIFY_ILLDIGIT;
STRLEN len = 3;
- uv = grok_oct(s, &len, &flags, NULL);
- s += len;
- if (len < 3 && s < send && isDIGIT(*s)
+ uv = grok_oct(s, &len, &flags, NULL);
+ s += len;
+ if ( (flags & PERL_SCAN_NOTIFY_ILLDIGIT)
+ && s < send
+ && isDIGIT(*s) /* like \08, \178 */
&& ckWARN(WARN_MISC))
{
- Perl_warner(aTHX_ packWARN(WARN_MISC),
- "%s", form_short_octal_warning(s, len));
+ Perl_warner(aTHX_ packWARN(WARN_MISC), "%s",
+ form_alien_digit_msg(8, len, s, send, UTF, FALSE));
}
}
goto NUM_ESCAPE_INSERT;
@@ -3560,14 +3641,13 @@ S_scan_const(pTHX_ char *start)
{
const char* error;
- bool valid = grok_bslash_o(&s, send,
+ if (! grok_bslash_o(&s, send,
&uv, &error,
- TRUE, /* Output warning */
+ NULL,
FALSE, /* Not strict */
- TRUE, /* Output warnings for
- non-portables */
- UTF);
- if (! valid) {
+ FALSE, /* No illegal cp's */
+ UTF))
+ {
yyerror(error);
uv = 0; /* drop through to ensure range ends are set */
}
@@ -3579,14 +3659,13 @@ S_scan_const(pTHX_ char *start)
{
const char* error;
- bool valid = grok_bslash_x(&s, send,
+ if (! grok_bslash_x(&s, send,
&uv, &error,
- TRUE, /* Output warning */
+ NULL,
FALSE, /* Not strict */
- TRUE, /* Output warnings for
- non-portables */
- UTF);
- if (! valid) {
+ FALSE, /* No illegal cp's */
+ UTF))
+ {
yyerror(error);
uv = 0; /* drop through to ensure range ends are set */
}
@@ -3652,14 +3731,10 @@ S_scan_const(pTHX_ char *start)
d = SvCUR(sv) + SvGROW(sv, needed);
}
- d = (char*)uvchr_to_utf8((U8*)d, uv);
- if (PL_lex_inwhat == OP_TRANS
- && PL_parser->lex_sub_op)
- {
- PL_parser->lex_sub_op->op_private |=
- (PL_lex_repl ? OPpTRANS_FROM_UTF
- : OPpTRANS_TO_UTF);
- }
+ d = (char*) uvchr_to_utf8_flags((U8*)d, uv,
+ (ckWARN(WARN_PORTABLE))
+ ? UNICODE_WARN_PERL_EXTENDED
+ : 0);
}
}
#ifdef EBCDIC
@@ -3759,13 +3834,23 @@ S_scan_const(pTHX_ char *start)
}
else { /* Not a pattern: convert the hex to string */
I32 flags = PERL_SCAN_ALLOW_UNDERSCORES
- | PERL_SCAN_SILENT_ILLDIGIT
- | PERL_SCAN_DISALLOW_PREFIX;
+ | PERL_SCAN_SILENT_ILLDIGIT
+ | PERL_SCAN_SILENT_OVERFLOW
+ | PERL_SCAN_DISALLOW_PREFIX;
STRLEN len = e - s;
+
uv = grok_hex(s, &len, &flags, NULL);
if (len == 0 || (len != (STRLEN)(e - s)))
goto bad_NU;
+ if ( uv > MAX_LEGAL_CP
+ || (flags & PERL_SCAN_GREATER_THAN_UV_MAX))
+ {
+ yyerror(form_cp_too_large_msg(16, s, len, 0));
+ uv = 0; /* drop through to ensure range ends are
+ set */
+ }
+
/* For non-tr///, if the destination is not in utf8,
* unconditionally recode it to be so. This is
* because \N{} implies Unicode semantics, and scalars
@@ -3804,7 +3889,10 @@ S_scan_const(pTHX_ char *start)
*d++ = (char) LATIN1_TO_NATIVE(uv);
}
else {
- d = (char*) uvoffuni_to_utf8_flags((U8*)d, uv, 0);
+ d = (char*) uvoffuni_to_utf8_flags((U8*)d, uv,
+ (ckWARN(WARN_PORTABLE))
+ ? UNICODE_WARN_PERL_EXTENDED
+ : 0);
}
}
}
@@ -4010,7 +4098,14 @@ S_scan_const(pTHX_ char *start)
case 'c':
s++;
if (s < send) {
- *d++ = grok_bslash_c(*s, 1);
+ const char * message;
+
+ if (! grok_bslash_c(*s, (U8 *) d, &message, NULL)) {
+ yyerror(message);
+ yyquit(); /* Have always immediately croaked on
+ errors in this */
+ }
+ d++;
}
else {
yyerror("Missing control char name in \\c");
@@ -4097,10 +4192,12 @@ S_scan_const(pTHX_ char *start)
goto default_action; /* Redo, having upgraded so both are UTF-8 */
}
else { /* UTF8ness matters: convert this non-UTF8 source char to
- UTF-8 for output. It will occupy 2 bytes */
- if (d + 2 >= SvEND(sv)) {
- const STRLEN extra = 2 + (send - s - 1) + 1;
- const STRLEN off = d - SvPVX_const(sv);
+ UTF-8 for output. It will occupy 2 bytes, but don't include
+ the input byte since we haven't incremented 's' yet. See
+ Note on sizing above. */
+ const STRLEN off = d - SvPVX(sv);
+ const STRLEN extra = 2 + (send - s - 1) + 1;
+ if (off + extra > SvLEN(sv)) {
d = off + SvGROW(sv, off + extra);
}
*d++ = UTF8_EIGHT_BIT_HI(*s);
@@ -4138,10 +4235,6 @@ S_scan_const(pTHX_ char *start)
SvPOK_on(sv);
if (d_is_utf8) {
SvUTF8_on(sv);
- if (PL_lex_inwhat == OP_TRANS && PL_parser->lex_sub_op) {
- PL_parser->lex_sub_op->op_private |=
- (PL_lex_repl ? OPpTRANS_FROM_UTF : OPpTRANS_TO_UTF);
- }
}
/* shrink the sv if we allocated more than we used */
@@ -4174,7 +4267,7 @@ S_scan_const(pTHX_ char *start)
} else if (PL_lex_inpat && SvIVX(PL_linestr) == '\'') {
type = "q";
typelen = 1;
- } else {
+ } else {
type = "qq";
typelen = 2;
}
@@ -4222,7 +4315,7 @@ S_intuit_more(pTHX_ char *s, char *e)
if (*s == '-' && s[1] == '>'
&& FEATURE_POSTDEREF_QQ_IS_ENABLED
&& ( (s[2] == '$' && (s[3] == '*' || (s[3] == '#' && s[4] == '*')))
- ||(s[2] == '@' && strchr("*[{",s[3])) ))
+ ||(s[2] == '@' && memCHRs("*[{",s[3])) ))
return TRUE;
if (*s != '{' && *s != '[')
return FALSE;
@@ -4287,9 +4380,9 @@ S_intuit_more(pTHX_ char *s, char *e)
}
else if (*s == '$'
&& s[1]
- && strchr("[#!%*<>()-=",s[1]))
+ && memCHRs("[#!%*<>()-=",s[1]))
{
- if (/*{*/ strchr("])} =",s[2]))
+ if (/*{*/ memCHRs("])} =",s[2]))
weight -= 10;
else
weight -= 1;
@@ -4298,11 +4391,11 @@ S_intuit_more(pTHX_ char *s, char *e)
case '\\':
un_char = 254;
if (s[1]) {
- if (strchr("wds]",s[1]))
+ if (memCHRs("wds]",s[1]))
weight += 100;
else if (seen[(U8)'\''] || seen[(U8)'"'])
weight += 1;
- else if (strchr("rnftbxcav",s[1]))
+ else if (memCHRs("rnftbxcav",s[1]))
weight += 40;
else if (isDIGIT(s[1])) {
weight += 40;
@@ -4316,9 +4409,9 @@ S_intuit_more(pTHX_ char *s, char *e)
case '-':
if (s[1] == '\\')
weight += 50;
- if (strchr("aA01! ",last_un_char))
+ if (memCHRs("aA01! ",last_un_char))
weight += 30;
- if (strchr("zZ79~",s[1]))
+ if (memCHRs("zZ79~",s[1]))
weight += 30;
if (last_un_char == 255 && (isDIGIT(s[1]) || s[1] == '$'))
weight -= 5; /* cope with negative subscript */
@@ -4385,6 +4478,9 @@ S_intuit_method(pTHX_ char *start, SV *ioname, CV *cv)
PERL_ARGS_ASSERT_INTUIT_METHOD;
+ if (!FEATURE_INDIRECT_IS_ENABLED)
+ return 0;
+
if (gv && SvTYPE(gv) == SVt_PVGV && GvIO(gv))
return 0;
if (cv && SvPOK(cv)) {
@@ -4746,10 +4842,10 @@ S_tokenize_use(pTHX_ int is_use, char *s) {
STATIC bool
S_word_takes_any_delimiter(char *p, STRLEN len)
{
- return (len == 1 && strchr("msyq", p[0]))
+ return (len == 1 && memCHRs("msyq", p[0]))
|| (len == 2
&& ((p[0] == 't' && p[1] == 'r')
- || (p[0] == 'q' && strchr("qwxr", p[1]))));
+ || (p[0] == 'q' && memCHRs("qwxr", p[1]))));
}
static void
@@ -4764,7 +4860,7 @@ S_check_scalar_slice(pTHX_ char *s)
return;
}
while ( isWORDCHAR_lazy_if_safe(s, PL_bufend, UTF)
- || (*s && strchr(" \t$#+-'\"", *s)))
+ || (*s && memCHRs(" \t$#+-'\"", *s)))
{
s += UTF ? UTF8SKIP(s) : 1;
}
@@ -4792,537 +4888,3787 @@ S_vcs_conflict_marker(pTHX_ char *s)
return s;
}
-/*
- yylex
+static int
+yyl_sigvar(pTHX_ char *s)
+{
+ /* we expect the sigil and optional var name part of a
+ * signature element here. Since a '$' is not necessarily
+ * followed by a var name, handle it specially here; the general
+ * yylex code would otherwise try to interpret whatever follows
+ * as a var; e.g. ($, ...) would be seen as the var '$,'
+ */
- Works out what to call the token just pulled out of the input
- stream. The yacc parser takes care of taking the ops we return and
- stitching them into a tree.
+ U8 sigil;
- Returns:
- The type of the next token
+ s = skipspace(s);
+ sigil = *s++;
+ PL_bufptr = s; /* for error reporting */
+ switch (sigil) {
+ case '$':
+ case '@':
+ case '%':
+ /* spot stuff that looks like an prototype */
+ if (memCHRs("$:@%&*;\\[]", *s)) {
+ yyerror("Illegal character following sigil in a subroutine signature");
+ break;
+ }
+ /* '$#' is banned, while '$ # comment' isn't */
+ if (*s == '#') {
+ yyerror("'#' not allowed immediately following a sigil in a subroutine signature");
+ break;
+ }
+ s = skipspace(s);
+ if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
+ char *dest = PL_tokenbuf + 1;
+ /* read var name, including sigil, into PL_tokenbuf */
+ PL_tokenbuf[0] = sigil;
+ parse_ident(&s, &dest, dest + sizeof(PL_tokenbuf) - 1,
+ 0, cBOOL(UTF), FALSE, FALSE);
+ *dest = '\0';
+ assert(PL_tokenbuf[1]); /* we have a variable name */
+ }
+ else {
+ *PL_tokenbuf = 0;
+ PL_in_my = 0;
+ }
- Structure:
- Check if we have already built the token; if so, use it.
- Switch based on the current state:
- - if we have a case modifier in a string, deal with that
- - handle other cases of interpolation inside a string
- - scan the next line if we are inside a format
- In the normal state, switch on the next character:
- - default:
- if alphabetic, go to key lookup
- unrecognized character - croak
- - 0/4/26: handle end-of-line or EOF
- - cases for whitespace
- - \n and #: handle comments and line numbers
- - various operators, brackets and sigils
- - numbers
- - quotes
- - 'v': vstrings (or go to key lookup)
- - 'x' repetition operator (or go to key lookup)
- - other ASCII alphanumerics (key lookup begins here):
- word before => ?
- keyword plugin
- scan built-in keyword (but do nothing with it yet)
- check for statement label
- check for lexical subs
- goto just_a_word if there is one
- see whether built-in keyword is overridden
- switch on keyword number:
- - default: just_a_word:
- not a built-in keyword; handle bareword lookup
- disambiguate between method and sub call
- fall back to bareword
- - cases for built-in keywords
-*/
+ s = skipspace(s);
+ /* parse the = for the default ourselves to avoid '+=' etc being accepted here
+ * as the ASSIGNOP, and exclude other tokens that start with =
+ */
+ if (*s == '=' && (!s[1] || memCHRs("=~>", s[1]) == 0)) {
+ /* save now to report with the same context as we did when
+ * all ASSIGNOPS were accepted */
+ PL_oldbufptr = s;
+
+ ++s;
+ NEXTVAL_NEXTTOKE.ival = 0;
+ force_next(ASSIGNOP);
+ PL_expect = XTERM;
+ }
+ else if (*s == ',' || *s == ')') {
+ PL_expect = XOPERATOR;
+ }
+ else {
+ /* make sure the context shows the unexpected character and
+ * hopefully a bit more */
+ if (*s) ++s;
+ while (*s && *s != '$' && *s != '@' && *s != '%' && *s != ')')
+ s++;
+ PL_bufptr = s; /* for error reporting */
+ yyerror("Illegal operator following parameter in a subroutine signature");
+ PL_in_my = 0;
+ }
+ if (*PL_tokenbuf) {
+ NEXTVAL_NEXTTOKE.ival = sigil;
+ force_next('p'); /* force a signature pending identifier */
+ }
+ break;
+ case ')':
+ PL_expect = XBLOCK;
+ break;
+ case ',': /* handle ($a,,$b) */
+ break;
-int
-Perl_yylex(pTHX)
+ default:
+ PL_in_my = 0;
+ yyerror("A signature parameter must start with '$', '@' or '%'");
+ /* very crude error recovery: skip to likely next signature
+ * element */
+ while (*s && *s != '$' && *s != '@' && *s != '%' && *s != ')')
+ s++;
+ break;
+ }
+
+ TOKEN(sigil);
+}
+
+static int
+yyl_dollar(pTHX_ char *s)
{
- dVAR;
- char *s = PL_bufptr;
- char *d;
- STRLEN len;
- bool bof = FALSE;
- const bool saw_infix_sigil = cBOOL(PL_parser->saw_infix_sigil);
- U8 formbrack = 0;
- U32 fake_eof = 0;
-
- /* orig_keyword, gvp, and gv are initialized here because
- * jump to the label just_a_word_zero can bypass their
- * initialization later. */
- I32 orig_keyword = 0;
- GV *gv = NULL;
- GV **gvp = NULL;
+ CLINE;
- if (UNLIKELY(PL_parser->recheck_utf8_validity)) {
- const U8* first_bad_char_loc;
- if (UTF && UNLIKELY(! is_utf8_string_loc((U8 *) PL_bufptr,
- PL_bufend - PL_bufptr,
- &first_bad_char_loc)))
- {
- _force_out_malformed_utf8_message(first_bad_char_loc,
- (U8 *) PL_bufend,
- 0,
- 1 /* 1 means die */ );
- NOT_REACHED; /* NOTREACHED */
+ if (PL_expect == XPOSTDEREF) {
+ if (s[1] == '#') {
+ s++;
+ POSTDEREF(DOLSHARP);
}
- PL_parser->recheck_utf8_validity = FALSE;
+ POSTDEREF('$');
}
- DEBUG_T( {
- SV* tmp = newSVpvs("");
- PerlIO_printf(Perl_debug_log, "### %" IVdf ":LEX_%s/X%s %s\n",
- (IV)CopLINE(PL_curcop),
- lex_state_names[PL_lex_state],
- exp_name[PL_expect],
- pv_display(tmp, s, strlen(s), 0, 60));
- SvREFCNT_dec(tmp);
- } );
- /* when we've already built the next token, just pull it out of the queue */
- if (PL_nexttoke) {
- PL_nexttoke--;
- pl_yylval = PL_nextval[PL_nexttoke];
- {
- I32 next_type;
- next_type = PL_nexttype[PL_nexttoke];
- if (next_type & (7<<24)) {
- if (next_type & (1<<24)) {
- if (PL_lex_brackets > 100)
- Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
- PL_lex_brackstack[PL_lex_brackets++] =
- (char) ((next_type >> 16) & 0xff);
- }
- if (next_type & (2<<24))
- PL_lex_allbrackets++;
- if (next_type & (4<<24))
- PL_lex_allbrackets--;
- next_type &= 0xffff;
- }
- return REPORT(next_type == 'p' ? pending_ident() : next_type);
- }
+ if ( s[1] == '#'
+ && ( isIDFIRST_lazy_if_safe(s+2, PL_bufend, UTF)
+ || memCHRs("{$:+-@", s[2])))
+ {
+ PL_tokenbuf[0] = '@';
+ s = scan_ident(s + 1, PL_tokenbuf + 1,
+ sizeof PL_tokenbuf - 1, FALSE);
+ if (PL_expect == XOPERATOR) {
+ char *d = s;
+ if (PL_bufptr > s) {
+ d = PL_bufptr-1;
+ PL_bufptr = PL_oldbufptr;
+ }
+ no_op("Array length", d);
+ }
+ if (!PL_tokenbuf[1])
+ PREREF(DOLSHARP);
+ PL_expect = XOPERATOR;
+ force_ident_maybe_lex('#');
+ TOKEN(DOLSHARP);
+ }
+
+ PL_tokenbuf[0] = '$';
+ s = scan_ident(s, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
+ if (PL_expect == XOPERATOR) {
+ char *d = s;
+ if (PL_bufptr > s) {
+ d = PL_bufptr-1;
+ PL_bufptr = PL_oldbufptr;
+ }
+ no_op("Scalar", d);
+ }
+ if (!PL_tokenbuf[1]) {
+ if (s == PL_bufend)
+ yyerror("Final $ should be \\$ or $name");
+ PREREF('$');
}
- switch (PL_lex_state) {
- case LEX_NORMAL:
- case LEX_INTERPNORMAL:
- break;
+ {
+ const char tmp = *s;
+ if (PL_lex_state == LEX_NORMAL || PL_lex_brackets)
+ s = skipspace(s);
- /* interpolated case modifiers like \L \U, including \Q and \E.
- when we get here, PL_bufptr is at the \
- */
- case LEX_INTERPCASEMOD:
-#ifdef DEBUGGING
- if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
- Perl_croak(aTHX_
- "panic: INTERPCASEMOD bufptr=%p, bufend=%p, *bufptr=%u",
- PL_bufptr, PL_bufend, *PL_bufptr);
-#endif
- /* handle \E or end of string */
- if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
- /* if at a \E */
- if (PL_lex_casemods) {
- const char oldmod = PL_lex_casestack[--PL_lex_casemods];
- PL_lex_casestack[PL_lex_casemods] = '\0';
-
- if (PL_bufptr != PL_bufend
- && (oldmod == 'L' || oldmod == 'U' || oldmod == 'Q'
- || oldmod == 'F')) {
- PL_bufptr += 2;
- PL_lex_state = LEX_INTERPCONCAT;
- }
- PL_lex_allbrackets--;
- return REPORT(')');
- }
- else if ( PL_bufptr != PL_bufend && PL_bufptr[1] == 'E' ) {
- /* Got an unpaired \E */
- Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
- "Useless use of \\E");
+ if ( (PL_expect != XREF || PL_oldoldbufptr == PL_last_lop)
+ && intuit_more(s, PL_bufend)) {
+ if (*s == '[') {
+ PL_tokenbuf[0] = '@';
+ if (ckWARN(WARN_SYNTAX)) {
+ char *t = s+1;
+
+ while ( t < PL_bufend ) {
+ if (isSPACE(*t)) {
+ do { t += UTF ? UTF8SKIP(t) : 1; } while (t < PL_bufend && isSPACE(*t));
+ /* consumed one or more space chars */
+ } else if (*t == '$' || *t == '@') {
+ /* could be more than one '$' like $$ref or @$ref */
+ do { t++; } while (t < PL_bufend && *t == '$');
+
+ /* could be an abigail style identifier like $ foo */
+ while (t < PL_bufend && *t == ' ') t++;
+
+ /* strip off the name of the var */
+ while (isWORDCHAR_lazy_if_safe(t, PL_bufend, UTF))
+ t += UTF ? UTF8SKIP(t) : 1;
+ /* consumed a varname */
+ } else if (isDIGIT(*t)) {
+ /* deal with hex constants like 0x11 */
+ if (t[0] == '0' && t[1] == 'x') {
+ t += 2;
+ while (t < PL_bufend && isXDIGIT(*t)) t++;
+ } else {
+ /* deal with decimal/octal constants like 1 and 0123 */
+ do { t++; } while (isDIGIT(*t));
+ if (t<PL_bufend && *t == '.') {
+ do { t++; } while (isDIGIT(*t));
+ }
+ }
+ /* consumed a number */
+ } else {
+ /* not a var nor a space nor a number */
+ break;
+ }
+ }
+ if (t < PL_bufend && *t++ == ',') {
+ PL_bufptr = skipspace(PL_bufptr); /* XXX can realloc */
+ while (t < PL_bufend && *t != ']')
+ t++;
+ Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
+ "Multidimensional syntax %" UTF8f " not supported",
+ UTF8fARG(UTF,(int)((t - PL_bufptr) + 1), PL_bufptr));
+ }
+ }
}
- if (PL_bufptr != PL_bufend)
- PL_bufptr += 2;
- PL_lex_state = LEX_INTERPCONCAT;
- return yylex();
- }
- else {
- DEBUG_T({ PerlIO_printf(Perl_debug_log,
- "### Saw case modifier\n"); });
- s = PL_bufptr + 1;
- if (s[1] == '\\' && s[2] == 'E') {
- PL_bufptr = s + 3;
- PL_lex_state = LEX_INTERPCONCAT;
- return yylex();
- }
- else {
- I32 tmp;
- if ( memBEGINs(s, (STRLEN) (PL_bufend - s), "L\\u")
- || memBEGINs(s, (STRLEN) (PL_bufend - s), "U\\l"))
+ else if (*s == '{') {
+ char *t;
+ PL_tokenbuf[0] = '%';
+ if ( strEQ(PL_tokenbuf+1, "SIG")
+ && ckWARN(WARN_SYNTAX)
+ && (t = (char *) memchr(s, '}', PL_bufend - s))
+ && (t = (char *) memchr(t, '=', PL_bufend - t)))
{
- tmp = *s, *s = s[2], s[2] = (char)tmp; /* misordered... */
+ char tmpbuf[sizeof PL_tokenbuf];
+ do {
+ t++;
+ } while (isSPACE(*t));
+ if (isIDFIRST_lazy_if_safe(t, PL_bufend, UTF)) {
+ STRLEN len;
+ t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE,
+ &len);
+ while (isSPACE(*t))
+ t++;
+ if ( *t == ';'
+ && get_cvn_flags(tmpbuf, len, UTF
+ ? SVf_UTF8
+ : 0))
+ {
+ Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
+ "You need to quote \"%" UTF8f "\"",
+ UTF8fARG(UTF, len, tmpbuf));
+ }
+ }
}
- if ((*s == 'L' || *s == 'U' || *s == 'F')
- && (strpbrk(PL_lex_casestack, "LUF")))
- {
- PL_lex_casestack[--PL_lex_casemods] = '\0';
- PL_lex_allbrackets--;
- return REPORT(')');
- }
- if (PL_lex_casemods > 10)
- Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
- PL_lex_casestack[PL_lex_casemods++] = *s;
- PL_lex_casestack[PL_lex_casemods] = '\0';
- PL_lex_state = LEX_INTERPCONCAT;
- NEXTVAL_NEXTTOKE.ival = 0;
- force_next((2<<24)|'(');
- if (*s == 'l')
- NEXTVAL_NEXTTOKE.ival = OP_LCFIRST;
- else if (*s == 'u')
- NEXTVAL_NEXTTOKE.ival = OP_UCFIRST;
- else if (*s == 'L')
- NEXTVAL_NEXTTOKE.ival = OP_LC;
- else if (*s == 'U')
- NEXTVAL_NEXTTOKE.ival = OP_UC;
- else if (*s == 'Q')
- NEXTVAL_NEXTTOKE.ival = OP_QUOTEMETA;
- else if (*s == 'F')
- NEXTVAL_NEXTTOKE.ival = OP_FC;
- else
- Perl_croak(aTHX_ "panic: yylex, *s=%u", *s);
- PL_bufptr = s + 1;
- }
- force_next(FUNC);
- if (PL_lex_starts) {
- s = PL_bufptr;
- PL_lex_starts = 0;
- /* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
- if (PL_lex_casemods == 1 && PL_lex_inpat)
- TOKEN(',');
- else
- AopNOASSIGN(OP_CONCAT);
- }
- else
- return yylex();
- }
+ }
+ }
- case LEX_INTERPPUSH:
- return REPORT(sublex_push());
+ PL_expect = XOPERATOR;
+ if ((PL_lex_state == LEX_NORMAL || PL_lex_brackets) && isSPACE((char)tmp)) {
+ const bool islop = (PL_last_lop == PL_oldoldbufptr);
+ if (!islop || PL_last_lop_op == OP_GREPSTART)
+ PL_expect = XOPERATOR;
+ else if (memCHRs("$@\"'`q", *s))
+ PL_expect = XTERM; /* e.g. print $fh "foo" */
+ else if ( memCHRs("&*<%", *s)
+ && isIDFIRST_lazy_if_safe(s+1, PL_bufend, UTF))
+ {
+ PL_expect = XTERM; /* e.g. print $fh &sub */
+ }
+ else if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
+ char tmpbuf[sizeof PL_tokenbuf];
+ int t2;
+ STRLEN len;
+ scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
+ if ((t2 = keyword(tmpbuf, len, 0))) {
+ /* binary operators exclude handle interpretations */
+ switch (t2) {
+ case -KEY_x:
+ case -KEY_eq:
+ case -KEY_ne:
+ case -KEY_gt:
+ case -KEY_lt:
+ case -KEY_ge:
+ case -KEY_le:
+ case -KEY_cmp:
+ break;
+ default:
+ PL_expect = XTERM; /* e.g. print $fh length() */
+ break;
+ }
+ }
+ else {
+ PL_expect = XTERM; /* e.g. print $fh subr() */
+ }
+ }
+ else if (isDIGIT(*s))
+ PL_expect = XTERM; /* e.g. print $fh 3 */
+ else if (*s == '.' && isDIGIT(s[1]))
+ PL_expect = XTERM; /* e.g. print $fh .3 */
+ else if ((*s == '?' || *s == '-' || *s == '+')
+ && !isSPACE(s[1]) && s[1] != '=')
+ PL_expect = XTERM; /* e.g. print $fh -1 */
+ else if (*s == '/' && !isSPACE(s[1]) && s[1] != '='
+ && s[1] != '/')
+ PL_expect = XTERM; /* e.g. print $fh /.../
+ XXX except DORDOR operator
+ */
+ else if (*s == '<' && s[1] == '<' && !isSPACE(s[2])
+ && s[2] != '=')
+ PL_expect = XTERM; /* print $fh <<"EOF" */
+ }
+ }
+ force_ident_maybe_lex('$');
+ TOKEN('$');
+}
- case LEX_INTERPSTART:
- if (PL_bufptr == PL_bufend)
- return REPORT(sublex_done());
- DEBUG_T({ if(*PL_bufptr != '(') PerlIO_printf(Perl_debug_log,
- "### Interpolated variable\n"); });
- PL_expect = XTERM;
- /* for /@a/, we leave the joining for the regex engine to do
- * (unless we're within \Q etc) */
- PL_lex_dojoin = (*PL_bufptr == '@'
- && (!PL_lex_inpat || PL_lex_casemods));
- PL_lex_state = LEX_INTERPNORMAL;
- if (PL_lex_dojoin) {
- NEXTVAL_NEXTTOKE.ival = 0;
- force_next(',');
- force_ident("\"", '$');
- NEXTVAL_NEXTTOKE.ival = 0;
- force_next('$');
- NEXTVAL_NEXTTOKE.ival = 0;
- force_next((2<<24)|'(');
- NEXTVAL_NEXTTOKE.ival = OP_JOIN; /* emulate join($", ...) */
- force_next(FUNC);
- }
- /* Convert (?{...}) and friends to 'do {...}' */
- if (PL_lex_inpat && *PL_bufptr == '(') {
- PL_parser->lex_shared->re_eval_start = PL_bufptr;
- PL_bufptr += 2;
- if (*PL_bufptr != '{')
- PL_bufptr++;
- PL_expect = XTERMBLOCK;
- force_next(DO);
- }
+static int
+yyl_sub(pTHX_ char *s, const int key)
+{
+ char * const tmpbuf = PL_tokenbuf + 1;
+ bool have_name, have_proto;
+ STRLEN len;
+ SV *format_name = NULL;
+ bool is_sigsub = FEATURE_SIGNATURES_IS_ENABLED;
- if (PL_lex_starts++) {
- s = PL_bufptr;
- /* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
- if (!PL_lex_casemods && PL_lex_inpat)
- TOKEN(',');
- else
- AopNOASSIGN(OP_CONCAT);
- }
- return yylex();
+ SSize_t off = s-SvPVX(PL_linestr);
+ char *d;
- case LEX_INTERPENDMAYBE:
- if (intuit_more(PL_bufptr, PL_bufend)) {
- PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
- break;
- }
- /* FALLTHROUGH */
+ s = skipspace(s); /* can move PL_linestr */
- case LEX_INTERPEND:
- if (PL_lex_dojoin) {
- const U8 dojoin_was = PL_lex_dojoin;
- PL_lex_dojoin = FALSE;
- PL_lex_state = LEX_INTERPCONCAT;
- PL_lex_allbrackets--;
- return REPORT(dojoin_was == 1 ? (int)')' : (int)POSTJOIN);
- }
- if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
- && SvEVALED(PL_lex_repl))
- {
- if (PL_bufptr != PL_bufend)
- Perl_croak(aTHX_ "Bad evalled substitution pattern");
- PL_lex_repl = NULL;
- }
- /* Paranoia. re_eval_start is adjusted when S_scan_heredoc sets
- re_eval_str. If the here-doc body’s length equals the previous
- value of re_eval_start, re_eval_start will now be null. So
- check re_eval_str as well. */
- if (PL_parser->lex_shared->re_eval_start
- || PL_parser->lex_shared->re_eval_str) {
- SV *sv;
- if (*PL_bufptr != ')')
- Perl_croak(aTHX_ "Sequence (?{...}) not terminated with ')'");
- PL_bufptr++;
- /* having compiled a (?{..}) expression, return the original
- * text too, as a const */
- if (PL_parser->lex_shared->re_eval_str) {
- sv = PL_parser->lex_shared->re_eval_str;
- PL_parser->lex_shared->re_eval_str = NULL;
- SvCUR_set(sv,
- PL_bufptr - PL_parser->lex_shared->re_eval_start);
- SvPV_shrink_to_cur(sv);
- }
- else sv = newSVpvn(PL_parser->lex_shared->re_eval_start,
- PL_bufptr - PL_parser->lex_shared->re_eval_start);
- NEXTVAL_NEXTTOKE.opval =
- newSVOP(OP_CONST, 0,
- sv);
- force_next(THING);
- PL_parser->lex_shared->re_eval_start = NULL;
- PL_expect = XTERM;
- return REPORT(',');
- }
+ d = SvPVX(PL_linestr)+off;
- /* FALLTHROUGH */
- case LEX_INTERPCONCAT:
+ SAVEBOOL(PL_parser->sig_seen);
+ PL_parser->sig_seen = FALSE;
+
+ if ( isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)
+ || *s == '\''
+ || (*s == ':' && s[1] == ':'))
+ {
+
+ PL_expect = XATTRBLOCK;
+ d = scan_word(s, tmpbuf, sizeof PL_tokenbuf - 1, TRUE,
+ &len);
+ if (key == KEY_format)
+ format_name = S_newSV_maybe_utf8(aTHX_ s, d - s);
+ *PL_tokenbuf = '&';
+ if (memchr(tmpbuf, ':', len) || key != KEY_sub
+ || pad_findmy_pvn(
+ PL_tokenbuf, len + 1, 0
+ ) != NOT_IN_PAD)
+ sv_setpvn(PL_subname, tmpbuf, len);
+ else {
+ sv_setsv(PL_subname,PL_curstname);
+ sv_catpvs(PL_subname,"::");
+ sv_catpvn(PL_subname,tmpbuf,len);
+ }
+ if (SvUTF8(PL_linestr))
+ SvUTF8_on(PL_subname);
+ have_name = TRUE;
+
+ s = skipspace(d);
+ }
+ else {
+ if (key == KEY_my || key == KEY_our || key==KEY_state) {
+ *d = '\0';
+ /* diag_listed_as: Missing name in "%s sub" */
+ Perl_croak(aTHX_
+ "Missing name in \"%s\"", PL_bufptr);
+ }
+ PL_expect = XATTRTERM;
+ sv_setpvs(PL_subname,"?");
+ have_name = FALSE;
+ }
+
+ if (key == KEY_format) {
+ if (format_name) {
+ NEXTVAL_NEXTTOKE.opval
+ = newSVOP(OP_CONST,0, format_name);
+ NEXTVAL_NEXTTOKE.opval->op_private |= OPpCONST_BARE;
+ force_next(BAREWORD);
+ }
+ PREBLOCK(FORMAT);
+ }
+
+ /* Look for a prototype */
+ if (*s == '(' && !is_sigsub) {
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
+ if (!s)
+ Perl_croak(aTHX_ "Prototype not terminated");
+ COPLINE_SET_FROM_MULTI_END;
+ (void)validate_proto(PL_subname, PL_lex_stuff,
+ ckWARN(WARN_ILLEGALPROTO), 0);
+ have_proto = TRUE;
+
+ s = skipspace(s);
+ }
+ else
+ have_proto = FALSE;
+
+ if ( !(*s == ':' && s[1] != ':')
+ && (*s != '{' && *s != '(') && key != KEY_format)
+ {
+ assert(key == KEY_sub || key == KEY_AUTOLOAD ||
+ key == KEY_DESTROY || key == KEY_BEGIN ||
+ key == KEY_UNITCHECK || key == KEY_CHECK ||
+ key == KEY_INIT || key == KEY_END ||
+ key == KEY_my || key == KEY_state ||
+ key == KEY_our);
+ if (!have_name)
+ Perl_croak(aTHX_ "Illegal declaration of anonymous subroutine");
+ else if (*s != ';' && *s != '}')
+ Perl_croak(aTHX_ "Illegal declaration of subroutine %" SVf, SVfARG(PL_subname));
+ }
+
+ if (have_proto) {
+ NEXTVAL_NEXTTOKE.opval =
+ newSVOP(OP_CONST, 0, PL_lex_stuff);
+ PL_lex_stuff = NULL;
+ force_next(THING);
+ }
+ if (!have_name) {
+ if (PL_curstash)
+ sv_setpvs(PL_subname, "__ANON__");
+ else
+ sv_setpvs(PL_subname, "__ANON__::__ANON__");
+ if (is_sigsub)
+ TOKEN(ANON_SIGSUB);
+ else
+ TOKEN(ANONSUB);
+ }
+ force_ident_maybe_lex('&');
+ if (is_sigsub)
+ TOKEN(SIGSUB);
+ else
+ TOKEN(SUB);
+}
+
+static int
+yyl_interpcasemod(pTHX_ char *s)
+{
#ifdef DEBUGGING
- if (PL_lex_brackets)
- Perl_croak(aTHX_ "panic: INTERPCONCAT, lex_brackets=%ld",
- (long) PL_lex_brackets);
+ if (PL_bufptr != PL_bufend && *PL_bufptr != '\\')
+ Perl_croak(aTHX_
+ "panic: INTERPCASEMOD bufptr=%p, bufend=%p, *bufptr=%u",
+ PL_bufptr, PL_bufend, *PL_bufptr);
#endif
- if (PL_bufptr == PL_bufend)
- return REPORT(sublex_done());
- /* m'foo' still needs to be parsed for possible (?{...}) */
- if (SvIVX(PL_linestr) == '\'' && !PL_lex_inpat) {
- SV *sv = newSVsv(PL_linestr);
- sv = tokeq(sv);
- pl_yylval.opval = newSVOP(OP_CONST, 0, sv);
- s = PL_bufend;
- }
- else {
- int save_error_count = PL_error_count;
+ if (PL_bufptr == PL_bufend || PL_bufptr[1] == 'E') {
+ /* if at a \E */
+ if (PL_lex_casemods) {
+ const char oldmod = PL_lex_casestack[--PL_lex_casemods];
+ PL_lex_casestack[PL_lex_casemods] = '\0';
+
+ if (PL_bufptr != PL_bufend
+ && (oldmod == 'L' || oldmod == 'U' || oldmod == 'Q'
+ || oldmod == 'F')) {
+ PL_bufptr += 2;
+ PL_lex_state = LEX_INTERPCONCAT;
+ }
+ PL_lex_allbrackets--;
+ return REPORT(')');
+ }
+ else if ( PL_bufptr != PL_bufend && PL_bufptr[1] == 'E' ) {
+ /* Got an unpaired \E */
+ Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
+ "Useless use of \\E");
+ }
+ if (PL_bufptr != PL_bufend)
+ PL_bufptr += 2;
+ PL_lex_state = LEX_INTERPCONCAT;
+ return yylex();
+ }
+ else {
+ DEBUG_T({
+ PerlIO_printf(Perl_debug_log, "### Saw case modifier\n");
+ });
+ s = PL_bufptr + 1;
+ if (s[1] == '\\' && s[2] == 'E') {
+ PL_bufptr = s + 3;
+ PL_lex_state = LEX_INTERPCONCAT;
+ return yylex();
+ }
+ else {
+ I32 tmp;
+ if ( memBEGINs(s, (STRLEN) (PL_bufend - s), "L\\u")
+ || memBEGINs(s, (STRLEN) (PL_bufend - s), "U\\l"))
+ {
+ tmp = *s, *s = s[2], s[2] = (char)tmp; /* misordered... */
+ }
+ if ((*s == 'L' || *s == 'U' || *s == 'F')
+ && (strpbrk(PL_lex_casestack, "LUF")))
+ {
+ PL_lex_casestack[--PL_lex_casemods] = '\0';
+ PL_lex_allbrackets--;
+ return REPORT(')');
+ }
+ if (PL_lex_casemods > 10)
+ Renew(PL_lex_casestack, PL_lex_casemods + 2, char);
+ PL_lex_casestack[PL_lex_casemods++] = *s;
+ PL_lex_casestack[PL_lex_casemods] = '\0';
+ PL_lex_state = LEX_INTERPCONCAT;
+ NEXTVAL_NEXTTOKE.ival = 0;
+ force_next((2<<24)|'(');
+ if (*s == 'l')
+ NEXTVAL_NEXTTOKE.ival = OP_LCFIRST;
+ else if (*s == 'u')
+ NEXTVAL_NEXTTOKE.ival = OP_UCFIRST;
+ else if (*s == 'L')
+ NEXTVAL_NEXTTOKE.ival = OP_LC;
+ else if (*s == 'U')
+ NEXTVAL_NEXTTOKE.ival = OP_UC;
+ else if (*s == 'Q')
+ NEXTVAL_NEXTTOKE.ival = OP_QUOTEMETA;
+ else if (*s == 'F')
+ NEXTVAL_NEXTTOKE.ival = OP_FC;
+ else
+ Perl_croak(aTHX_ "panic: yylex, *s=%u", *s);
+ PL_bufptr = s + 1;
+ }
+ force_next(FUNC);
+ if (PL_lex_starts) {
+ s = PL_bufptr;
+ PL_lex_starts = 0;
+ /* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
+ if (PL_lex_casemods == 1 && PL_lex_inpat)
+ TOKEN(',');
+ else
+ AopNOASSIGN(OP_CONCAT);
+ }
+ else
+ return yylex();
+ }
+}
- s = scan_const(PL_bufptr);
+static int
+yyl_secondclass_keyword(pTHX_ char *s, STRLEN len, int key, I32 *orig_keyword,
+ GV **pgv, GV ***pgvp)
+{
+ GV *ogv = NULL; /* override (winner) */
+ GV *hgv = NULL; /* hidden (loser) */
+ GV *gv = *pgv;
+
+ if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
+ CV *cv;
+ if ((gv = gv_fetchpvn_flags(PL_tokenbuf, len,
+ (UTF ? SVf_UTF8 : 0)|GV_NOTQUAL,
+ SVt_PVCV))
+ && (cv = GvCVu(gv)))
+ {
+ if (GvIMPORTED_CV(gv))
+ ogv = gv;
+ else if (! CvMETHOD(cv))
+ hgv = gv;
+ }
+ if (!ogv
+ && (*pgvp = (GV**)hv_fetch(PL_globalstash, PL_tokenbuf, len, FALSE))
+ && (gv = **pgvp)
+ && (isGV_with_GP(gv)
+ ? GvCVu(gv) && GvIMPORTED_CV(gv)
+ : SvPCS_IMPORTED(gv)
+ && (gv_init(gv, PL_globalstash, PL_tokenbuf,
+ len, 0), 1)))
+ {
+ ogv = gv;
+ }
+ }
- /* Set flag if this was a pattern and there were errors. op.c will
- * refuse to compile a pattern with this flag set. Otherwise, we
- * could get segfaults, etc. */
- if (PL_lex_inpat && PL_error_count > save_error_count) {
- ((PMOP*)PL_lex_inpat)->op_pmflags |= PMf_HAS_ERROR;
+ *pgv = gv;
+
+ if (ogv) {
+ *orig_keyword = key;
+ return 0; /* overridden by import or by GLOBAL */
+ }
+ else if (gv && !*pgvp
+ && -key==KEY_lock /* XXX generalizable kludge */
+ && GvCVu(gv))
+ {
+ return 0; /* any sub overrides "weak" keyword */
+ }
+ else { /* no override */
+ key = -key;
+ if (key == KEY_dump) {
+ Perl_croak(aTHX_ "dump() must be written as CORE::dump() as of Perl 5.30");
+ }
+ *pgv = NULL;
+ *pgvp = 0;
+ if (hgv && key != KEY_x) /* never ambiguous */
+ Perl_ck_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
+ "Ambiguous call resolved as CORE::%s(), "
+ "qualify as such or use &",
+ GvENAME(hgv));
+ return key;
+ }
+}
+
+static int
+yyl_qw(pTHX_ char *s, STRLEN len)
+{
+ OP *words = NULL;
+
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
+ if (!s)
+ missingterm(NULL, 0);
+
+ COPLINE_SET_FROM_MULTI_END;
+ PL_expect = XOPERATOR;
+ if (SvCUR(PL_lex_stuff)) {
+ int warned_comma = !ckWARN(WARN_QW);
+ int warned_comment = warned_comma;
+ char *d = SvPV_force(PL_lex_stuff, len);
+ while (len) {
+ for (; isSPACE(*d) && len; --len, ++d)
+ /**/;
+ if (len) {
+ SV *sv;
+ const char *b = d;
+ if (!warned_comma || !warned_comment) {
+ for (; !isSPACE(*d) && len; --len, ++d) {
+ if (!warned_comma && *d == ',') {
+ Perl_warner(aTHX_ packWARN(WARN_QW),
+ "Possible attempt to separate words with commas");
+ ++warned_comma;
+ }
+ else if (!warned_comment && *d == '#') {
+ Perl_warner(aTHX_ packWARN(WARN_QW),
+ "Possible attempt to put comments in qw() list");
+ ++warned_comment;
+ }
+ }
+ }
+ else {
+ for (; !isSPACE(*d) && len; --len, ++d)
+ /**/;
+ }
+ sv = newSVpvn_utf8(b, d-b, DO_UTF8(PL_lex_stuff));
+ words = op_append_elem(OP_LIST, words,
+ newSVOP(OP_CONST, 0, tokeq(sv)));
}
- if (*s == '\\')
- PL_lex_state = LEX_INTERPCASEMOD;
- else
- PL_lex_state = LEX_INTERPSTART;
- }
+ }
+ }
+ if (!words)
+ words = newNULLLIST();
+ SvREFCNT_dec_NN(PL_lex_stuff);
+ PL_lex_stuff = NULL;
+ PL_expect = XOPERATOR;
+ pl_yylval.opval = sawparens(words);
+ TOKEN(QWLIST);
+}
- if (s != PL_bufptr) {
- NEXTVAL_NEXTTOKE = pl_yylval;
- PL_expect = XTERM;
- force_next(THING);
- if (PL_lex_starts++) {
- /* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
- if (!PL_lex_casemods && PL_lex_inpat)
- TOKEN(',');
- else
- AopNOASSIGN(OP_CONCAT);
- }
- else {
- PL_bufptr = s;
- return yylex();
- }
- }
+static int
+yyl_hyphen(pTHX_ char *s)
+{
+ if (s[1] && isALPHA(s[1]) && !isWORDCHAR(s[2])) {
+ I32 ftst = 0;
+ char tmp;
- return yylex();
- case LEX_FORMLINE:
- if (PL_parser->sub_error_count != PL_error_count) {
- /* There was an error parsing a formline, which tends to
- mess up the parser.
- Unlike interpolated sub-parsing, we can't treat any of
- these as recoverable, so no need to check sub_no_recover.
- */
- yyquit();
+ s++;
+ PL_bufptr = s;
+ tmp = *s++;
+
+ while (s < PL_bufend && SPACE_OR_TAB(*s))
+ s++;
+
+ if (memBEGINs(s, (STRLEN) (PL_bufend - s), "=>")) {
+ s = force_word(PL_bufptr,BAREWORD,FALSE,FALSE);
+ DEBUG_T( { printbuf("### Saw unary minus before =>, forcing word %s\n", s); } );
+ OPERATOR('-'); /* unary minus */
+ }
+ switch (tmp) {
+ case 'r': ftst = OP_FTEREAD; break;
+ case 'w': ftst = OP_FTEWRITE; break;
+ case 'x': ftst = OP_FTEEXEC; break;
+ case 'o': ftst = OP_FTEOWNED; break;
+ case 'R': ftst = OP_FTRREAD; break;
+ case 'W': ftst = OP_FTRWRITE; break;
+ case 'X': ftst = OP_FTREXEC; break;
+ case 'O': ftst = OP_FTROWNED; break;
+ case 'e': ftst = OP_FTIS; break;
+ case 'z': ftst = OP_FTZERO; break;
+ case 's': ftst = OP_FTSIZE; break;
+ case 'f': ftst = OP_FTFILE; break;
+ case 'd': ftst = OP_FTDIR; break;
+ case 'l': ftst = OP_FTLINK; break;
+ case 'p': ftst = OP_FTPIPE; break;
+ case 'S': ftst = OP_FTSOCK; break;
+ case 'u': ftst = OP_FTSUID; break;
+ case 'g': ftst = OP_FTSGID; break;
+ case 'k': ftst = OP_FTSVTX; break;
+ case 'b': ftst = OP_FTBLK; break;
+ case 'c': ftst = OP_FTCHR; break;
+ case 't': ftst = OP_FTTTY; break;
+ case 'T': ftst = OP_FTTEXT; break;
+ case 'B': ftst = OP_FTBINARY; break;
+ case 'M': case 'A': case 'C':
+ gv_fetchpvs("\024", GV_ADD|GV_NOTQUAL, SVt_PV);
+ switch (tmp) {
+ case 'M': ftst = OP_FTMTIME; break;
+ case 'A': ftst = OP_FTATIME; break;
+ case 'C': ftst = OP_FTCTIME; break;
+ default: break;
+ }
+ break;
+ default:
+ break;
+ }
+ if (ftst) {
+ PL_last_uni = PL_oldbufptr;
+ PL_last_lop_op = (OPCODE)ftst;
+ DEBUG_T( {
+ PerlIO_printf(Perl_debug_log, "### Saw file test %c\n", (int)tmp);
+ } );
+ FTST(ftst);
+ }
+ else {
+ /* Assume it was a minus followed by a one-letter named
+ * subroutine call (or a -bareword), then. */
+ DEBUG_T( {
+ PerlIO_printf(Perl_debug_log,
+ "### '-%c' looked like a file test but was not\n",
+ (int) tmp);
+ } );
+ s = --PL_bufptr;
+ }
+ }
+ {
+ const char tmp = *s++;
+ if (*s == tmp) {
+ s++;
+ if (PL_expect == XOPERATOR)
+ TERM(POSTDEC);
+ else
+ OPERATOR(PREDEC);
+ }
+ else if (*s == '>') {
+ s++;
+ s = skipspace(s);
+ if (((*s == '$' || *s == '&') && s[1] == '*')
+ ||(*s == '$' && s[1] == '#' && s[2] == '*')
+ ||((*s == '@' || *s == '%') && memCHRs("*[{", s[1]))
+ ||(*s == '*' && (s[1] == '*' || s[1] == '{'))
+ )
+ {
+ PL_expect = XPOSTDEREF;
+ TOKEN(ARROW);
+ }
+ if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
+ s = force_word(s,METHOD,FALSE,TRUE);
+ TOKEN(ARROW);
+ }
+ else if (*s == '$')
+ OPERATOR(ARROW);
+ else
+ TERM(ARROW);
+ }
+ if (PL_expect == XOPERATOR) {
+ if (*s == '='
+ && !PL_lex_allbrackets
+ && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+ {
+ s--;
+ TOKEN(0);
+ }
+ Aop(OP_SUBTRACT);
+ }
+ else {
+ if (isSPACE(*s) || !isSPACE(*PL_bufptr))
+ check_uni();
+ OPERATOR('-'); /* unary minus */
}
- assert(PL_lex_formbrack);
- s = scan_formline(PL_bufptr);
- if (!PL_lex_formbrack)
- {
- formbrack = 1;
- goto rightbracket;
- }
- PL_bufptr = s;
- return yylex();
}
+}
- /* We really do *not* want PL_linestr ever becoming a COW. */
- assert (!SvIsCOW(PL_linestr));
- s = PL_bufptr;
- PL_oldoldbufptr = PL_oldbufptr;
- PL_oldbufptr = s;
- PL_parser->saw_infix_sigil = 0;
+static int
+yyl_plus(pTHX_ char *s)
+{
+ const char tmp = *s++;
+ if (*s == tmp) {
+ s++;
+ if (PL_expect == XOPERATOR)
+ TERM(POSTINC);
+ else
+ OPERATOR(PREINC);
+ }
+ if (PL_expect == XOPERATOR) {
+ if (*s == '='
+ && !PL_lex_allbrackets
+ && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+ {
+ s--;
+ TOKEN(0);
+ }
+ Aop(OP_ADD);
+ }
+ else {
+ if (isSPACE(*s) || !isSPACE(*PL_bufptr))
+ check_uni();
+ OPERATOR('+');
+ }
+}
- if (PL_in_my == KEY_sigvar) {
- /* we expect the sigil and optional var name part of a
- * signature element here. Since a '$' is not necessarily
- * followed by a var name, handle it specially here; the general
- * yylex code would otherwise try to interpret whatever follows
- * as a var; e.g. ($, ...) would be seen as the var '$,'
- */
+static int
+yyl_star(pTHX_ char *s)
+{
+ if (PL_expect == XPOSTDEREF)
+ POSTDEREF('*');
+
+ if (PL_expect != XOPERATOR) {
+ s = scan_ident(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
+ PL_expect = XOPERATOR;
+ force_ident(PL_tokenbuf, '*');
+ if (!*PL_tokenbuf)
+ PREREF('*');
+ TERM('*');
+ }
+
+ s++;
+ if (*s == '*') {
+ s++;
+ if (*s == '=' && !PL_lex_allbrackets
+ && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+ {
+ s -= 2;
+ TOKEN(0);
+ }
+ PWop(OP_POW);
+ }
- U8 sigil;
+ if (*s == '='
+ && !PL_lex_allbrackets
+ && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+ {
+ s--;
+ TOKEN(0);
+ }
+
+ Mop(OP_MULTIPLY);
+}
+static int
+yyl_percent(pTHX_ char *s)
+{
+ if (PL_expect == XOPERATOR) {
+ if (s[1] == '='
+ && !PL_lex_allbrackets
+ && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+ {
+ TOKEN(0);
+ }
+ ++s;
+ Mop(OP_MODULO);
+ }
+ else if (PL_expect == XPOSTDEREF)
+ POSTDEREF('%');
+
+ PL_tokenbuf[0] = '%';
+ s = scan_ident(s, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
+ pl_yylval.ival = 0;
+ if (!PL_tokenbuf[1]) {
+ PREREF('%');
+ }
+ if ( (PL_expect != XREF || PL_oldoldbufptr == PL_last_lop)
+ && intuit_more(s, PL_bufend)) {
+ if (*s == '[')
+ PL_tokenbuf[0] = '@';
+ }
+ PL_expect = XOPERATOR;
+ force_ident_maybe_lex('%');
+ TERM('%');
+}
+
+static int
+yyl_caret(pTHX_ char *s)
+{
+ char *d = s;
+ const bool bof = cBOOL(FEATURE_BITWISE_IS_ENABLED);
+ if (bof && s[1] == '.')
+ s++;
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (s[1] == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE))
+ {
+ s = d;
+ TOKEN(0);
+ }
+ s++;
+ BOop(bof ? d == s-2 ? OP_SBIT_XOR : OP_NBIT_XOR : OP_BIT_XOR);
+}
+
+static int
+yyl_colon(pTHX_ char *s)
+{
+ OP *attrs;
+
+ switch (PL_expect) {
+ case XOPERATOR:
+ if (!PL_in_my || (PL_lex_state != LEX_NORMAL && !PL_lex_brackets))
+ break;
+ PL_bufptr = s; /* update in case we back off */
+ if (*s == '=') {
+ Perl_croak(aTHX_
+ "Use of := for an empty attribute list is not allowed");
+ }
+ goto grabattrs;
+ case XATTRBLOCK:
+ PL_expect = XBLOCK;
+ goto grabattrs;
+ case XATTRTERM:
+ PL_expect = XTERMBLOCK;
+ grabattrs:
+ /* NB: as well as parsing normal attributes, we also end up
+ * here if there is something looking like attributes
+ * following a signature (which is illegal, but used to be
+ * legal in 5.20..5.26). If the latter, we still parse the
+ * attributes so that error messages(s) are less confusing,
+ * but ignore them (parser->sig_seen).
+ */
s = skipspace(s);
- sigil = *s++;
- PL_bufptr = s; /* for error reporting */
- switch (sigil) {
- case '$':
- case '@':
- case '%':
- /* spot stuff that looks like an prototype */
- if (strchr("$:@%&*;\\[]", *s)) {
- yyerror("Illegal character following sigil in a subroutine signature");
- break;
+ attrs = NULL;
+ while (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
+ bool sig = PL_parser->sig_seen;
+ I32 tmp;
+ SV *sv;
+ STRLEN len;
+ char *d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
+ if (isLOWER(*s) && (tmp = keyword(PL_tokenbuf, len, 0))) {
+ if (tmp < 0) tmp = -tmp;
+ switch (tmp) {
+ case KEY_or:
+ case KEY_and:
+ case KEY_for:
+ case KEY_foreach:
+ case KEY_unless:
+ case KEY_if:
+ case KEY_while:
+ case KEY_until:
+ goto got_attrs;
+ default:
+ break;
+ }
}
- /* '$#' is banned, while '$ # comment' isn't */
- if (*s == '#') {
- yyerror("'#' not allowed immediately following a sigil in a subroutine signature");
- break;
+ sv = newSVpvn_flags(s, len, UTF ? SVf_UTF8 : 0);
+ if (*d == '(') {
+ d = scan_str(d,TRUE,TRUE,FALSE,NULL);
+ if (!d) {
+ if (attrs)
+ op_free(attrs);
+ sv_free(sv);
+ Perl_croak(aTHX_ "Unterminated attribute parameter in attribute list");
+ }
+ COPLINE_SET_FROM_MULTI_END;
}
- s = skipspace(s);
- if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
- char *dest = PL_tokenbuf + 1;
- /* read var name, including sigil, into PL_tokenbuf */
- PL_tokenbuf[0] = sigil;
- parse_ident(&s, &dest, dest + sizeof(PL_tokenbuf) - 1,
- 0, cBOOL(UTF), FALSE, FALSE);
- *dest = '\0';
- assert(PL_tokenbuf[1]); /* we have a variable name */
+ if (PL_lex_stuff) {
+ sv_catsv(sv, PL_lex_stuff);
+ attrs = op_append_elem(OP_LIST, attrs,
+ newSVOP(OP_CONST, 0, sv));
+ SvREFCNT_dec_NN(PL_lex_stuff);
+ PL_lex_stuff = NULL;
}
else {
- *PL_tokenbuf = 0;
- PL_in_my = 0;
+ /* NOTE: any CV attrs applied here need to be part of
+ the CVf_BUILTIN_ATTRS define in cv.h! */
+ if (!PL_in_my && memEQs(SvPVX(sv), len, "lvalue")) {
+ sv_free(sv);
+ if (!sig)
+ CvLVALUE_on(PL_compcv);
+ }
+ else if (!PL_in_my && memEQs(SvPVX(sv), len, "method")) {
+ sv_free(sv);
+ if (!sig)
+ CvMETHOD_on(PL_compcv);
+ }
+ else if (!PL_in_my && memEQs(SvPVX(sv), len, "const")) {
+ sv_free(sv);
+ if (!sig) {
+ Perl_ck_warner_d(aTHX_
+ packWARN(WARN_EXPERIMENTAL__CONST_ATTR),
+ ":const is experimental"
+ );
+ CvANONCONST_on(PL_compcv);
+ if (!CvANON(PL_compcv))
+ yyerror(":const is not permitted on named "
+ "subroutines");
+ }
+ }
+ /* After we've set the flags, it could be argued that
+ we don't need to do the attributes.pm-based setting
+ process, and shouldn't bother appending recognized
+ flags. To experiment with that, uncomment the
+ following "else". (Note that's already been
+ uncommented. That keeps the above-applied built-in
+ attributes from being intercepted (and possibly
+ rejected) by a package's attribute routines, but is
+ justified by the performance win for the common case
+ of applying only built-in attributes.) */
+ else
+ attrs = op_append_elem(OP_LIST, attrs,
+ newSVOP(OP_CONST, 0,
+ sv));
+ }
+ s = skipspace(d);
+ if (*s == ':' && s[1] != ':')
+ s = skipspace(s+1);
+ else if (s == d)
+ break; /* require real whitespace or :'s */
+ /* XXX losing whitespace on sequential attributes here */
+ }
+
+ if (*s != ';'
+ && *s != '}'
+ && !(PL_expect == XOPERATOR
+ ? (*s == '=' || *s == ')')
+ : (*s == '{' || *s == '(')))
+ {
+ const char q = ((*s == '\'') ? '"' : '\'');
+ /* If here for an expression, and parsed no attrs, back off. */
+ if (PL_expect == XOPERATOR && !attrs) {
+ s = PL_bufptr;
+ break;
}
+ /* MUST advance bufptr here to avoid bogus "at end of line"
+ context messages from yyerror().
+ */
+ PL_bufptr = s;
+ yyerror( (const char *)
+ (*s
+ ? Perl_form(aTHX_ "Invalid separator character "
+ "%c%c%c in attribute list", q, *s, q)
+ : "Unterminated attribute list" ) );
+ if (attrs)
+ op_free(attrs);
+ OPERATOR(':');
+ }
+ got_attrs:
+ if (PL_parser->sig_seen) {
+ /* see comment about about sig_seen and parser error
+ * handling */
+ if (attrs)
+ op_free(attrs);
+ Perl_croak(aTHX_ "Subroutine attributes must come "
+ "before the signature");
+ }
+ if (attrs) {
+ NEXTVAL_NEXTTOKE.opval = attrs;
+ force_next(THING);
+ }
+ TOKEN(COLONATTR);
+ }
+
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_CLOSING) {
+ s--;
+ TOKEN(0);
+ }
+
+ PL_lex_allbrackets--;
+ OPERATOR(':');
+}
+
+static int
+yyl_subproto(pTHX_ char *s, CV *cv)
+{
+ STRLEN protolen = CvPROTOLEN(cv);
+ const char *proto = CvPROTO(cv);
+ bool optional;
+
+ proto = S_strip_spaces(aTHX_ proto, &protolen);
+ if (!protolen)
+ TERM(FUNC0SUB);
+ if ((optional = *proto == ';')) {
+ do {
+ proto++;
+ } while (*proto == ';');
+ }
+
+ if (
+ (
+ (
+ *proto == '$' || *proto == '_'
+ || *proto == '*' || *proto == '+'
+ )
+ && proto[1] == '\0'
+ )
+ || (
+ *proto == '\\' && proto[1] && proto[2] == '\0'
+ )
+ ) {
+ UNIPROTO(UNIOPSUB,optional);
+ }
+
+ if (*proto == '\\' && proto[1] == '[') {
+ const char *p = proto + 2;
+ while(*p && *p != ']')
+ ++p;
+ if(*p == ']' && !p[1])
+ UNIPROTO(UNIOPSUB,optional);
+ }
+
+ if (*proto == '&' && *s == '{') {
+ if (PL_curstash)
+ sv_setpvs(PL_subname, "__ANON__");
+ else
+ sv_setpvs(PL_subname, "__ANON__::__ANON__");
+ if (!PL_lex_allbrackets
+ && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ {
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
+ }
+ PREBLOCK(LSTOPSUB);
+ }
+
+ return KEY_NULL;
+}
+
+static int
+yyl_leftcurly(pTHX_ char *s, const U8 formbrack)
+{
+ char *d;
+ if (PL_lex_brackets > 100) {
+ Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
+ }
+
+ switch (PL_expect) {
+ case XTERM:
+ case XTERMORDORDOR:
+ PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
+ PL_lex_allbrackets++;
+ OPERATOR(HASHBRACK);
+ case XOPERATOR:
+ while (s < PL_bufend && SPACE_OR_TAB(*s))
+ s++;
+ d = s;
+ PL_tokenbuf[0] = '\0';
+ if (d < PL_bufend && *d == '-') {
+ PL_tokenbuf[0] = '-';
+ d++;
+ while (d < PL_bufend && SPACE_OR_TAB(*d))
+ d++;
+ }
+ if (d < PL_bufend && isIDFIRST_lazy_if_safe(d, PL_bufend, UTF)) {
+ STRLEN len;
+ d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
+ FALSE, &len);
+ while (d < PL_bufend && SPACE_OR_TAB(*d))
+ d++;
+ if (*d == '}') {
+ const char minus = (PL_tokenbuf[0] == '-');
+ s = force_word(s + minus, BAREWORD, FALSE, TRUE);
+ if (minus)
+ force_next('-');
+ }
+ }
+ /* FALLTHROUGH */
+ case XATTRTERM:
+ case XTERMBLOCK:
+ PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
+ PL_lex_allbrackets++;
+ PL_expect = XSTATE;
+ break;
+ case XATTRBLOCK:
+ case XBLOCK:
+ PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
+ PL_lex_allbrackets++;
+ PL_expect = XSTATE;
+ break;
+ case XBLOCKTERM:
+ PL_lex_brackstack[PL_lex_brackets++] = XTERM;
+ PL_lex_allbrackets++;
+ PL_expect = XSTATE;
+ break;
+ default: {
+ const char *t;
+ if (PL_oldoldbufptr == PL_last_lop)
+ PL_lex_brackstack[PL_lex_brackets++] = XTERM;
+ else
+ PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
+ PL_lex_allbrackets++;
s = skipspace(s);
- /* parse the = for the default ourselves to avoid '+=' etc being accepted here
- * as the ASSIGNOP, and exclude other tokens that start with =
+ if (*s == '}') {
+ if (PL_expect == XREF && PL_lex_state == LEX_INTERPNORMAL) {
+ PL_expect = XTERM;
+ /* This hack is to get the ${} in the message. */
+ PL_bufptr = s+1;
+ yyerror("syntax error");
+ break;
+ }
+ OPERATOR(HASHBRACK);
+ }
+ if (PL_expect == XREF && PL_oldoldbufptr != PL_last_lop) {
+ /* ${...} or @{...} etc., but not print {...}
+ * Skip the disambiguation and treat this as a block.
+ */
+ goto block_expectation;
+ }
+ /* This hack serves to disambiguate a pair of curlies
+ * as being a block or an anon hash. Normally, expectation
+ * determines that, but in cases where we're not in a
+ * position to expect anything in particular (like inside
+ * eval"") we have to resolve the ambiguity. This code
+ * covers the case where the first term in the curlies is a
+ * quoted string. Most other cases need to be explicitly
+ * disambiguated by prepending a "+" before the opening
+ * curly in order to force resolution as an anon hash.
+ *
+ * XXX should probably propagate the outer expectation
+ * into eval"" to rely less on this hack, but that could
+ * potentially break current behavior of eval"".
+ * GSAR 97-07-21
*/
- if (*s == '=' && (!s[1] || strchr("=~>", s[1]) == 0)) {
- /* save now to report with the same context as we did when
- * all ASSIGNOPS were accepted */
- PL_oldbufptr = s;
-
- ++s;
- NEXTVAL_NEXTTOKE.ival = 0;
- force_next(ASSIGNOP);
- PL_expect = XTERM;
+ t = s;
+ if (*s == '\'' || *s == '"' || *s == '`') {
+ /* common case: get past first string, handling escapes */
+ for (t++; t < PL_bufend && *t != *s;)
+ if (*t++ == '\\')
+ t++;
+ t++;
}
- else if (*s == ',' || *s == ')') {
- PL_expect = XOPERATOR;
+ else if (*s == 'q') {
+ if (++t < PL_bufend
+ && (!isWORDCHAR(*t)
+ || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
+ && !isWORDCHAR(*t))))
+ {
+ /* skip q//-like construct */
+ const char *tmps;
+ char open, close, term;
+ I32 brackets = 1;
+
+ while (t < PL_bufend && isSPACE(*t))
+ t++;
+ /* check for q => */
+ if (t+1 < PL_bufend && t[0] == '=' && t[1] == '>') {
+ OPERATOR(HASHBRACK);
+ }
+ term = *t;
+ open = term;
+ if (term && (tmps = memCHRs("([{< )]}> )]}>",term)))
+ term = tmps[5];
+ close = term;
+ if (open == close)
+ for (t++; t < PL_bufend; t++) {
+ if (*t == '\\' && t+1 < PL_bufend && open != '\\')
+ t++;
+ else if (*t == open)
+ break;
+ }
+ else {
+ for (t++; t < PL_bufend; t++) {
+ if (*t == '\\' && t+1 < PL_bufend)
+ t++;
+ else if (*t == close && --brackets <= 0)
+ break;
+ else if (*t == open)
+ brackets++;
+ }
+ }
+ t++;
+ }
+ else
+ /* skip plain q word */
+ while ( t < PL_bufend
+ && isWORDCHAR_lazy_if_safe(t, PL_bufend, UTF))
+ {
+ t += UTF ? UTF8SKIP(t) : 1;
+ }
+ }
+ else if (isWORDCHAR_lazy_if_safe(t, PL_bufend, UTF)) {
+ t += UTF ? UTF8SKIP(t) : 1;
+ while ( t < PL_bufend
+ && isWORDCHAR_lazy_if_safe(t, PL_bufend, UTF))
+ {
+ t += UTF ? UTF8SKIP(t) : 1;
+ }
+ }
+ while (t < PL_bufend && isSPACE(*t))
+ t++;
+ /* if comma follows first term, call it an anon hash */
+ /* XXX it could be a comma expression with loop modifiers */
+ if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
+ || (*t == '=' && t[1] == '>')))
+ OPERATOR(HASHBRACK);
+ if (PL_expect == XREF) {
+ block_expectation:
+ /* If there is an opening brace or 'sub:', treat it
+ as a term to make ${{...}}{k} and &{sub:attr...}
+ dwim. Otherwise, treat it as a statement, so
+ map {no strict; ...} works.
+ */
+ s = skipspace(s);
+ if (*s == '{') {
+ PL_expect = XTERM;
+ break;
+ }
+ if (memBEGINs(s, (STRLEN) (PL_bufend - s), "sub")) {
+ PL_bufptr = s;
+ d = s + 3;
+ d = skipspace(d);
+ s = PL_bufptr;
+ if (*d == ':') {
+ PL_expect = XTERM;
+ break;
+ }
+ }
+ PL_expect = XSTATE;
}
else {
- /* make sure the context shows the unexpected character and
- * hopefully a bit more */
- if (*s) ++s;
- while (*s && *s != '$' && *s != '@' && *s != '%' && *s != ')')
- s++;
- PL_bufptr = s; /* for error reporting */
- yyerror("Illegal operator following parameter in a subroutine signature");
- PL_in_my = 0;
+ PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
+ PL_expect = XSTATE;
}
- if (*PL_tokenbuf) {
- NEXTVAL_NEXTTOKE.ival = sigil;
- force_next('p'); /* force a signature pending identifier */
+ }
+ break;
+ }
+
+ pl_yylval.ival = CopLINE(PL_curcop);
+ PL_copline = NOLINE; /* invalidate current command line number */
+ TOKEN(formbrack ? '=' : '{');
+}
+
+static int
+yyl_rightcurly(pTHX_ char *s, const U8 formbrack)
+{
+ assert(s != PL_bufend);
+ s++;
+
+ if (PL_lex_brackets <= 0)
+ /* diag_listed_as: Unmatched right %s bracket */
+ yyerror("Unmatched right curly bracket");
+ else
+ PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
+
+ PL_lex_allbrackets--;
+
+ if (PL_lex_state == LEX_INTERPNORMAL) {
+ if (PL_lex_brackets == 0) {
+ if (PL_expect & XFAKEBRACK) {
+ PL_expect &= XENUMMASK;
+ PL_lex_state = LEX_INTERPEND;
+ PL_bufptr = s;
+ return yylex(); /* ignore fake brackets */
}
- break;
+ if (PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr
+ && SvEVALED(PL_lex_repl))
+ PL_lex_state = LEX_INTERPEND;
+ else if (*s == '-' && s[1] == '>')
+ PL_lex_state = LEX_INTERPENDMAYBE;
+ else if (*s != '[' && *s != '{')
+ PL_lex_state = LEX_INTERPEND;
+ }
+ }
- case ')':
- PL_expect = XBLOCK;
- break;
- case ',': /* handle ($a,,$b) */
- break;
+ if (PL_expect & XFAKEBRACK) {
+ PL_expect &= XENUMMASK;
+ PL_bufptr = s;
+ return yylex(); /* ignore fake brackets */
+ }
- default:
- PL_in_my = 0;
- yyerror("A signature parameter must start with '$', '@' or '%'");
- /* very crude error recovery: skip to likely next signature
- * element */
- while (*s && *s != '$' && *s != '@' && *s != '%' && *s != ')')
- s++;
+ force_next(formbrack ? '.' : '}');
+ if (formbrack) LEAVE_with_name("lex_format");
+ if (formbrack == 2) { /* means . where arguments were expected */
+ force_next(';');
+ TOKEN(FORMRBRACK);
+ }
+
+ TOKEN(';');
+}
+
+static int
+yyl_ampersand(pTHX_ char *s)
+{
+ if (PL_expect == XPOSTDEREF)
+ POSTDEREF('&');
+
+ s++;
+ if (*s++ == '&') {
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC)) {
+ s -= 2;
+ TOKEN(0);
+ }
+ AOPERATOR(ANDAND);
+ }
+ s--;
+
+ if (PL_expect == XOPERATOR) {
+ char *d;
+ bool bof;
+ if ( PL_bufptr == PL_linestart
+ && ckWARN(WARN_SEMICOLON)
+ && isIDFIRST_lazy_if_safe(s, PL_bufend, UTF))
+ {
+ CopLINE_dec(PL_curcop);
+ Perl_warner(aTHX_ packWARN(WARN_SEMICOLON), "%s", PL_warn_nosemi);
+ CopLINE_inc(PL_curcop);
+ }
+ d = s;
+ if ((bof = FEATURE_BITWISE_IS_ENABLED) && *s == '.')
+ s++;
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE)) {
+ s = d;
+ s--;
+ TOKEN(0);
+ }
+ if (d == s)
+ BAop(bof ? OP_NBIT_AND : OP_BIT_AND);
+ else
+ BAop(OP_SBIT_AND);
+ }
+
+ PL_tokenbuf[0] = '&';
+ s = scan_ident(s - 1, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
+ pl_yylval.ival = (OPpENTERSUB_AMPER<<8);
+
+ if (PL_tokenbuf[1])
+ force_ident_maybe_lex('&');
+ else
+ PREREF('&');
+
+ TERM('&');
+}
+
+static int
+yyl_verticalbar(pTHX_ char *s)
+{
+ char *d;
+ bool bof;
+
+ s++;
+ if (*s++ == '|') {
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC)) {
+ s -= 2;
+ TOKEN(0);
+ }
+ AOPERATOR(OROR);
+ }
+
+ s--;
+ d = s;
+ if ((bof = FEATURE_BITWISE_IS_ENABLED) && *s == '.')
+ s++;
+
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE)) {
+ s = d - 1;
+ TOKEN(0);
+ }
+
+ BOop(bof ? s == d ? OP_NBIT_OR : OP_SBIT_OR : OP_BIT_OR);
+}
+
+static int
+yyl_bang(pTHX_ char *s)
+{
+ const char tmp = *s++;
+ if (tmp == '=') {
+ /* was this !=~ where !~ was meant?
+ * warn on m:!=~\s+([/?]|[msy]\W|tr\W): */
+
+ if (*s == '~' && ckWARN(WARN_SYNTAX)) {
+ const char *t = s+1;
+
+ while (t < PL_bufend && isSPACE(*t))
+ ++t;
+
+ if (*t == '/' || *t == '?'
+ || ((*t == 'm' || *t == 's' || *t == 'y')
+ && !isWORDCHAR(t[1]))
+ || (*t == 't' && t[1] == 'r' && !isWORDCHAR(t[2])))
+ Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
+ "!=~ should be !~");
+ }
+
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s -= 2;
+ TOKEN(0);
+ }
+
+ ChEop(OP_NE);
+ }
+
+ if (tmp == '~')
+ PMop(OP_NOT);
+
+ s--;
+ OPERATOR('!');
+}
+
+static int
+yyl_snail(pTHX_ char *s)
+{
+ if (PL_expect == XPOSTDEREF)
+ POSTDEREF('@');
+ PL_tokenbuf[0] = '@';
+ s = scan_ident(s, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
+ if (PL_expect == XOPERATOR) {
+ char *d = s;
+ if (PL_bufptr > s) {
+ d = PL_bufptr-1;
+ PL_bufptr = PL_oldbufptr;
+ }
+ no_op("Array", d);
+ }
+ pl_yylval.ival = 0;
+ if (!PL_tokenbuf[1]) {
+ PREREF('@');
+ }
+ if (PL_lex_state == LEX_NORMAL || PL_lex_brackets)
+ s = skipspace(s);
+ if ( (PL_expect != XREF || PL_oldoldbufptr == PL_last_lop)
+ && intuit_more(s, PL_bufend))
+ {
+ if (*s == '{')
+ PL_tokenbuf[0] = '%';
+
+ /* Warn about @ where they meant $. */
+ if (*s == '[' || *s == '{') {
+ if (ckWARN(WARN_SYNTAX)) {
+ S_check_scalar_slice(aTHX_ s);
+ }
+ }
+ }
+ PL_expect = XOPERATOR;
+ force_ident_maybe_lex('@');
+ TERM('@');
+}
+
+static int
+yyl_slash(pTHX_ char *s)
+{
+ if ((PL_expect == XOPERATOR || PL_expect == XTERMORDORDOR) && s[1] == '/') {
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >=
+ (s[2] == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC))
+ TOKEN(0);
+ s += 2;
+ AOPERATOR(DORDOR);
+ }
+ else if (PL_expect == XOPERATOR) {
+ s++;
+ if (*s == '=' && !PL_lex_allbrackets
+ && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+ {
+ s--;
+ TOKEN(0);
+ }
+ Mop(OP_DIVIDE);
+ }
+ else {
+ /* Disable warning on "study /blah/" */
+ if ( PL_oldoldbufptr == PL_last_uni
+ && ( *PL_last_uni != 's' || s - PL_last_uni < 5
+ || memNE(PL_last_uni, "study", 5)
+ || isWORDCHAR_lazy_if_safe(PL_last_uni+5, PL_bufend, UTF)
+ ))
+ check_uni();
+ s = scan_pat(s,OP_MATCH);
+ TERM(sublex_start());
+ }
+}
+
+static int
+yyl_leftsquare(pTHX_ char *s)
+{
+ char tmp;
+
+ if (PL_lex_brackets > 100)
+ Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
+ PL_lex_brackstack[PL_lex_brackets++] = 0;
+ PL_lex_allbrackets++;
+ tmp = *s++;
+ OPERATOR(tmp);
+}
+
+static int
+yyl_rightsquare(pTHX_ char *s)
+{
+ if (PL_lex_brackets && PL_lex_brackstack[PL_lex_brackets-1] == XFAKEEOF)
+ TOKEN(0);
+ s++;
+ if (PL_lex_brackets <= 0)
+ /* diag_listed_as: Unmatched right %s bracket */
+ yyerror("Unmatched right square bracket");
+ else
+ --PL_lex_brackets;
+ PL_lex_allbrackets--;
+ if (PL_lex_state == LEX_INTERPNORMAL) {
+ if (PL_lex_brackets == 0) {
+ if (*s == '-' && s[1] == '>')
+ PL_lex_state = LEX_INTERPENDMAYBE;
+ else if (*s != '[' && *s != '{')
+ PL_lex_state = LEX_INTERPEND;
+ }
+ }
+ TERM(']');
+}
+
+static int
+yyl_tilde(pTHX_ char *s)
+{
+ bool bof;
+ if (s[1] == '~' && (PL_expect == XOPERATOR || PL_expect == XTERMORDORDOR)) {
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ TOKEN(0);
+ s += 2;
+ Perl_ck_warner_d(aTHX_
+ packWARN(WARN_EXPERIMENTAL__SMARTMATCH),
+ "Smartmatch is experimental");
+ NCEop(OP_SMARTMATCH);
+ }
+ s++;
+ if ((bof = FEATURE_BITWISE_IS_ENABLED) && *s == '.') {
+ s++;
+ BCop(OP_SCOMPLEMENT);
+ }
+ BCop(bof ? OP_NCOMPLEMENT : OP_COMPLEMENT);
+}
+
+static int
+yyl_leftparen(pTHX_ char *s)
+{
+ if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
+ PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
+ else
+ PL_expect = XTERM;
+ s = skipspace(s);
+ PL_lex_allbrackets++;
+ TOKEN('(');
+}
+
+static int
+yyl_rightparen(pTHX_ char *s)
+{
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_CLOSING)
+ TOKEN(0);
+ s++;
+ PL_lex_allbrackets--;
+ s = skipspace(s);
+ if (*s == '{')
+ PREBLOCK(')');
+ TERM(')');
+}
+
+static int
+yyl_leftpointy(pTHX_ char *s)
+{
+ char tmp;
+
+ if (PL_expect != XOPERATOR) {
+ if (s[1] != '<' && !memchr(s,'>', PL_bufend - s))
+ check_uni();
+ if (s[1] == '<' && s[2] != '>')
+ s = scan_heredoc(s);
+ else
+ s = scan_inputsymbol(s);
+ PL_expect = XOPERATOR;
+ TOKEN(sublex_start());
+ }
+
+ s++;
+
+ tmp = *s++;
+ if (tmp == '<') {
+ if (*s == '=' && !PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+ s -= 2;
+ TOKEN(0);
+ }
+ SHop(OP_LEFT_SHIFT);
+ }
+ if (tmp == '=') {
+ tmp = *s++;
+ if (tmp == '>') {
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s -= 3;
+ TOKEN(0);
+ }
+ NCEop(OP_NCMP);
+ }
+ s--;
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s -= 2;
+ TOKEN(0);
+ }
+ ChRop(OP_LE);
+ }
+
+ s--;
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s--;
+ TOKEN(0);
+ }
+
+ ChRop(OP_LT);
+}
+
+static int
+yyl_rightpointy(pTHX_ char *s)
+{
+ const char tmp = *s++;
+
+ if (tmp == '>') {
+ if (*s == '=' && !PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
+ s -= 2;
+ TOKEN(0);
+ }
+ SHop(OP_RIGHT_SHIFT);
+ }
+ else if (tmp == '=') {
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s -= 2;
+ TOKEN(0);
+ }
+ ChRop(OP_GE);
+ }
+
+ s--;
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
+ s--;
+ TOKEN(0);
+ }
+
+ ChRop(OP_GT);
+}
+
+static int
+yyl_sglquote(pTHX_ char *s)
+{
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
+ if (!s)
+ missingterm(NULL, 0);
+ COPLINE_SET_FROM_MULTI_END;
+ DEBUG_T( { printbuf("### Saw string before %s\n", s); } );
+ if (PL_expect == XOPERATOR) {
+ no_op("String",s);
+ }
+ pl_yylval.ival = OP_CONST;
+ TERM(sublex_start());
+}
+
+static int
+yyl_dblquote(pTHX_ char *s)
+{
+ char *d;
+ STRLEN len;
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
+ DEBUG_T( {
+ if (s)
+ printbuf("### Saw string before %s\n", s);
+ else
+ PerlIO_printf(Perl_debug_log,
+ "### Saw unterminated string\n");
+ } );
+ if (PL_expect == XOPERATOR) {
+ no_op("String",s);
+ }
+ if (!s)
+ missingterm(NULL, 0);
+ pl_yylval.ival = OP_CONST;
+ /* FIXME. I think that this can be const if char *d is replaced by
+ more localised variables. */
+ for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
+ if (*d == '$' || *d == '@' || *d == '\\' || !UTF8_IS_INVARIANT((U8)*d)) {
+ pl_yylval.ival = OP_STRINGIFY;
break;
}
- TOKEN(sigil);
}
+ if (pl_yylval.ival == OP_CONST)
+ COPLINE_SET_FROM_MULTI_END;
+ TERM(sublex_start());
+}
- retry:
- switch (*s) {
- default:
- if (UTF) {
- if (isIDFIRST_utf8_safe(s, PL_bufend)) {
- goto keylookup;
+static int
+yyl_backtick(pTHX_ char *s)
+{
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
+ DEBUG_T( {
+ if (s)
+ printbuf("### Saw backtick string before %s\n", s);
+ else
+ PerlIO_printf(Perl_debug_log,
+ "### Saw unterminated backtick string\n");
+ } );
+ if (PL_expect == XOPERATOR)
+ no_op("Backticks",s);
+ if (!s)
+ missingterm(NULL, 0);
+ pl_yylval.ival = OP_BACKTICK;
+ TERM(sublex_start());
+}
+
+static int
+yyl_backslash(pTHX_ char *s)
+{
+ if (PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr && isDIGIT(*s))
+ Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),"Can't use \\%c to mean $%c in expression",
+ *s, *s);
+ if (PL_expect == XOPERATOR)
+ no_op("Backslash",s);
+ OPERATOR(REFGEN);
+}
+
+static void
+yyl_data_handle(pTHX)
+{
+ HV * const stash = PL_tokenbuf[2] == 'D' && PL_curstash
+ ? PL_curstash
+ : PL_defstash;
+ GV *gv = (GV *)*hv_fetchs(stash, "DATA", 1);
+
+ if (!isGV(gv))
+ gv_init(gv,stash,"DATA",4,0);
+
+ GvMULTI_on(gv);
+ if (!GvIO(gv))
+ GvIOp(gv) = newIO();
+ IoIFP(GvIOp(gv)) = PL_rsfp;
+
+ /* Mark this internal pseudo-handle as clean */
+ IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
+ if ((PerlIO*)PL_rsfp == PerlIO_stdin())
+ IoTYPE(GvIOp(gv)) = IoTYPE_STD;
+ else
+ IoTYPE(GvIOp(gv)) = IoTYPE_RDONLY;
+
+#if defined(WIN32) && !defined(PERL_TEXTMODE_SCRIPTS)
+ /* if the script was opened in binmode, we need to revert
+ * it to text mode for compatibility; but only iff it has CRs
+ * XXX this is a questionable hack at best. */
+ if (PL_bufend-PL_bufptr > 2
+ && PL_bufend[-1] == '\n' && PL_bufend[-2] == '\r')
+ {
+ Off_t loc = 0;
+ if (IoTYPE(GvIOp(gv)) == IoTYPE_RDONLY) {
+ loc = PerlIO_tell(PL_rsfp);
+ (void)PerlIO_seek(PL_rsfp, 0L, 0);
+ }
+ if (PerlLIO_setmode(RSFP_FILENO, O_TEXT) != -1) {
+ if (loc > 0)
+ PerlIO_seek(PL_rsfp, loc, 0);
+ }
+ }
+#endif
+
+#ifdef PERLIO_LAYERS
+ if (!IN_BYTES) {
+ if (UTF)
+ PerlIO_apply_layers(aTHX_ PL_rsfp, NULL, ":utf8");
+ }
+#endif
+
+ PL_rsfp = NULL;
+}
+
+PERL_STATIC_NO_RET void yyl_croak_unrecognised(pTHX_ char*)
+ __attribute__noreturn__;
+
+PERL_STATIC_NO_RET void
+yyl_croak_unrecognised(pTHX_ char *s)
+{
+ SV *dsv = newSVpvs_flags("", SVs_TEMP);
+ const char *c;
+ char *d;
+ STRLEN len;
+
+ if (UTF) {
+ STRLEN skiplen = UTF8SKIP(s);
+ STRLEN stravail = PL_bufend - s;
+ c = sv_uni_display(dsv, newSVpvn_flags(s,
+ skiplen > stravail ? stravail : skiplen,
+ SVs_TEMP | SVf_UTF8),
+ 10, UNI_DISPLAY_ISPRINT);
+ }
+ else {
+ c = Perl_form(aTHX_ "\\x%02X", (unsigned char)*s);
+ }
+
+ if (s >= PL_linestart) {
+ d = PL_linestart;
+ }
+ else {
+ /* somehow (probably due to a parse failure), PL_linestart has advanced
+ * pass PL_bufptr, get a reasonable beginning of line
+ */
+ d = s;
+ while (d > SvPVX(PL_linestr) && d[-1] && d[-1] != '\n')
+ --d;
+ }
+ len = UTF ? Perl_utf8_length(aTHX_ (U8 *) d, (U8 *) s) : (STRLEN) (s - d);
+ if (len > UNRECOGNIZED_PRECEDE_COUNT) {
+ d = UTF ? (char *) utf8_hop_back((U8 *) s, -UNRECOGNIZED_PRECEDE_COUNT, (U8 *)d) : s - UNRECOGNIZED_PRECEDE_COUNT;
+ }
+
+ Perl_croak(aTHX_ "Unrecognized character %s; marked by <-- HERE after %" UTF8f "<-- HERE near column %d", c,
+ UTF8fARG(UTF, (s - d), d),
+ (int) len + 1);
+}
+
+static int
+yyl_require(pTHX_ char *s, I32 orig_keyword)
+{
+ s = skipspace(s);
+ if (isDIGIT(*s)) {
+ s = force_version(s, FALSE);
+ }
+ else if (*s != 'v' || !isDIGIT(s[1])
+ || (s = force_version(s, TRUE), *s == 'v'))
+ {
+ *PL_tokenbuf = '\0';
+ s = force_word(s,BAREWORD,TRUE,TRUE);
+ if (isIDFIRST_lazy_if_safe(PL_tokenbuf,
+ PL_tokenbuf + sizeof(PL_tokenbuf),
+ UTF))
+ {
+ gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf),
+ GV_ADD | (UTF ? SVf_UTF8 : 0));
+ }
+ else if (*s == '<')
+ yyerror("<> at require-statement should be quotes");
+ }
+
+ if (orig_keyword == KEY_require)
+ pl_yylval.ival = 1;
+ else
+ pl_yylval.ival = 0;
+
+ PL_expect = PL_nexttoke ? XOPERATOR : XTERM;
+ PL_bufptr = s;
+ PL_last_uni = PL_oldbufptr;
+ PL_last_lop_op = OP_REQUIRE;
+ s = skipspace(s);
+ return REPORT( (int)REQUIRE );
+}
+
+static int
+yyl_foreach(pTHX_ char *s)
+{
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
+ pl_yylval.ival = CopLINE(PL_curcop);
+ s = skipspace(s);
+ if (PL_expect == XSTATE && isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
+ char *p = s;
+ SSize_t s_off = s - SvPVX(PL_linestr);
+ STRLEN len;
+
+ if (memBEGINPs(p, (STRLEN) (PL_bufend - p), "my") && isSPACE(p[2])) {
+ p += 2;
+ }
+ else if (memBEGINPs(p, (STRLEN) (PL_bufend - p), "our") && isSPACE(p[3])) {
+ p += 3;
+ }
+
+ p = skipspace(p);
+ /* skip optional package name, as in "for my abc $x (..)" */
+ if (isIDFIRST_lazy_if_safe(p, PL_bufend, UTF)) {
+ p = scan_word(p, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
+ p = skipspace(p);
+ }
+ if (*p != '$' && *p != '\\')
+ Perl_croak(aTHX_ "Missing $ on loop variable");
+
+ /* The buffer may have been reallocated, update s */
+ s = SvPVX(PL_linestr) + s_off;
+ }
+ OPERATOR(FOR);
+}
+
+static int
+yyl_do(pTHX_ char *s, I32 orig_keyword)
+{
+ s = skipspace(s);
+ if (*s == '{')
+ PRETERMBLOCK(DO);
+ if (*s != '\'') {
+ char *d;
+ STRLEN len;
+ *PL_tokenbuf = '&';
+ d = scan_word(s, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
+ 1, &len);
+ if (len && memNEs(PL_tokenbuf+1, len, "CORE")
+ && !keyword(PL_tokenbuf + 1, len, 0)) {
+ SSize_t off = s-SvPVX(PL_linestr);
+ d = skipspace(d);
+ s = SvPVX(PL_linestr)+off;
+ if (*d == '(') {
+ force_ident_maybe_lex('&');
+ s = d;
}
}
- else if (isALNUMC(*s)) {
- goto keylookup;
- }
+ }
+ if (orig_keyword == KEY_do)
+ pl_yylval.ival = 1;
+ else
+ pl_yylval.ival = 0;
+ OPERATOR(DO);
+}
+
+static int
+yyl_my(pTHX_ char *s, I32 my)
+{
+ if (PL_in_my) {
+ PL_bufptr = s;
+ yyerror(Perl_form(aTHX_
+ "Can't redeclare \"%s\" in \"%s\"",
+ my == KEY_my ? "my" :
+ my == KEY_state ? "state" : "our",
+ PL_in_my == KEY_my ? "my" :
+ PL_in_my == KEY_state ? "state" : "our"));
+ }
+ PL_in_my = (U16)my;
+ s = skipspace(s);
+ if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
+ STRLEN len;
+ s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
+ if (memEQs(PL_tokenbuf, len, "sub"))
+ return yyl_sub(aTHX_ s, my);
+ PL_in_my_stash = find_in_my_stash(PL_tokenbuf, len);
+ if (!PL_in_my_stash) {
+ char tmpbuf[1024];
+ int i;
+ PL_bufptr = s;
+ i = my_snprintf(tmpbuf, sizeof(tmpbuf), "No such class %.1000s", PL_tokenbuf);
+ PERL_MY_SNPRINTF_POST_GUARD(i, sizeof(tmpbuf));
+ yyerror_pv(tmpbuf, UTF ? SVf_UTF8 : 0);
+ }
+ }
+ else if (*s == '\\') {
+ if (!FEATURE_MYREF_IS_ENABLED)
+ Perl_croak(aTHX_ "The experimental declared_refs "
+ "feature is not enabled");
+ Perl_ck_warner_d(aTHX_
+ packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
+ "Declaring references is experimental");
+ }
+ OPERATOR(MY);
+}
+
+static int yyl_try(pTHX_ char*);
+
+static bool
+yyl_eol_needs_semicolon(pTHX_ char **ps)
+{
+ char *s = *ps;
+ if (PL_lex_state != LEX_NORMAL
+ || (PL_in_eval && !PL_rsfp && !PL_parser->filtered))
{
- SV *dsv = newSVpvs_flags("", SVs_TEMP);
- const char *c;
- if (UTF) {
- STRLEN skiplen = UTF8SKIP(s);
- STRLEN stravail = PL_bufend - s;
- c = sv_uni_display(dsv, newSVpvn_flags(s,
- skiplen > stravail ? stravail : skiplen,
- SVs_TEMP | SVf_UTF8),
- 10, UNI_DISPLAY_ISPRINT);
+ const bool in_comment = *s == '#';
+ char *d;
+ if (*s == '#' && s == PL_linestart && PL_in_eval
+ && !PL_rsfp && !PL_parser->filtered) {
+ /* handle eval qq[#line 1 "foo"\n ...] */
+ CopLINE_dec(PL_curcop);
+ incline(s, PL_bufend);
+ }
+ d = s;
+ while (d < PL_bufend && *d != '\n')
+ d++;
+ if (d < PL_bufend)
+ d++;
+ s = d;
+ if (in_comment && d == PL_bufend
+ && PL_lex_state == LEX_INTERPNORMAL
+ && PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr
+ && SvEVALED(PL_lex_repl) && d[-1] == '}') s--;
+ else
+ incline(s, PL_bufend);
+ if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
+ PL_lex_state = LEX_FORMLINE;
+ force_next(FORMRBRACK);
+ *ps = s;
+ return TRUE;
+ }
+ }
+ else {
+ while (s < PL_bufend && *s != '\n')
+ s++;
+ if (s < PL_bufend) {
+ s++;
+ if (s < PL_bufend)
+ incline(s, PL_bufend);
+ }
+ }
+ *ps = s;
+ return FALSE;
+}
+
+static int
+yyl_fake_eof(pTHX_ U32 fake_eof, bool bof, char *s)
+{
+ char *d;
+
+ goto start;
+
+ do {
+ fake_eof = 0;
+ bof = cBOOL(PL_rsfp);
+ start:
+
+ PL_bufptr = PL_bufend;
+ COPLINE_INC_WITH_HERELINES;
+ if (!lex_next_chunk(fake_eof)) {
+ CopLINE_dec(PL_curcop);
+ s = PL_bufptr;
+ TOKEN(';'); /* not infinite loop because rsfp is NULL now */
+ }
+ CopLINE_dec(PL_curcop);
+ s = PL_bufptr;
+ /* If it looks like the start of a BOM or raw UTF-16,
+ * check if it in fact is. */
+ if (bof && PL_rsfp
+ && ( *s == 0
+ || *(U8*)s == BOM_UTF8_FIRST_BYTE
+ || *(U8*)s >= 0xFE
+ || s[1] == 0))
+ {
+ Off_t offset = (IV)PerlIO_tell(PL_rsfp);
+ bof = (offset == (Off_t)SvCUR(PL_linestr));
+#if defined(PERLIO_USING_CRLF) && defined(PERL_TEXTMODE_SCRIPTS)
+ /* offset may include swallowed CR */
+ if (!bof)
+ bof = (offset == (Off_t)SvCUR(PL_linestr)+1);
+#endif
+ if (bof) {
+ PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
+ s = swallow_bom((U8*)s);
+ }
+ }
+ if (PL_parser->in_pod) {
+ /* Incest with pod. */
+ if ( memBEGINPs(s, (STRLEN) (PL_bufend - s), "=cut")
+ && !isALPHA(s[4]))
+ {
+ SvPVCLEAR(PL_linestr);
+ PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
+ PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
+ PL_last_lop = PL_last_uni = NULL;
+ PL_parser->in_pod = 0;
+ }
+ }
+ if (PL_rsfp || PL_parser->filtered)
+ incline(s, PL_bufend);
+ } while (PL_parser->in_pod);
+
+ PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
+ PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
+ PL_last_lop = PL_last_uni = NULL;
+ if (CopLINE(PL_curcop) == 1) {
+ while (s < PL_bufend && isSPACE(*s))
+ s++;
+ if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
+ s++;
+ d = NULL;
+ if (!PL_in_eval) {
+ if (*s == '#' && *(s+1) == '!')
+ d = s + 2;
+#ifdef ALTERNATE_SHEBANG
+ else {
+ static char const as[] = ALTERNATE_SHEBANG;
+ if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
+ d = s + (sizeof(as) - 1);
+ }
+#endif /* ALTERNATE_SHEBANG */
+ }
+ if (d) {
+ char *ipath;
+ char *ipathend;
+
+ while (isSPACE(*d))
+ d++;
+ ipath = d;
+ while (*d && !isSPACE(*d))
+ d++;
+ ipathend = d;
+
+#ifdef ARG_ZERO_IS_SCRIPT
+ if (ipathend > ipath) {
+ /*
+ * HP-UX (at least) sets argv[0] to the script name,
+ * which makes $^X incorrect. And Digital UNIX and Linux,
+ * at least, set argv[0] to the basename of the Perl
+ * interpreter. So, having found "#!", we'll set it right.
+ */
+ SV* copfilesv = CopFILESV(PL_curcop);
+ if (copfilesv) {
+ SV * const x =
+ GvSV(gv_fetchpvs("\030", GV_ADD|GV_NOTQUAL,
+ SVt_PV)); /* $^X */
+ assert(SvPOK(x) || SvGMAGICAL(x));
+ if (sv_eq(x, copfilesv)) {
+ sv_setpvn(x, ipath, ipathend - ipath);
+ SvSETMAGIC(x);
+ }
+ else {
+ STRLEN blen;
+ STRLEN llen;
+ const char *bstart = SvPV_const(copfilesv, blen);
+ const char * const lstart = SvPV_const(x, llen);
+ if (llen < blen) {
+ bstart += blen - llen;
+ if (strnEQ(bstart, lstart, llen) && bstart[-1] == '/') {
+ sv_setpvn(x, ipath, ipathend - ipath);
+ SvSETMAGIC(x);
+ }
+ }
+ }
+ }
+ else {
+ /* Anything to do if no copfilesv? */
+ }
+ TAINT_NOT; /* $^X is always tainted, but that's OK */
+ }
+#endif /* ARG_ZERO_IS_SCRIPT */
+
+ /*
+ * Look for options.
+ */
+ d = instr(s,"perl -");
+ if (!d) {
+ d = instr(s,"perl");
+#if defined(DOSISH)
+ /* avoid getting into infinite loops when shebang
+ * line contains "Perl" rather than "perl" */
+ if (!d) {
+ for (d = ipathend-4; d >= ipath; --d) {
+ if (isALPHA_FOLD_EQ(*d, 'p')
+ && !ibcmp(d, "perl", 4))
+ {
+ break;
+ }
+ }
+ if (d < ipath)
+ d = NULL;
+ }
+#endif
+ }
+#ifdef ALTERNATE_SHEBANG
+ /*
+ * If the ALTERNATE_SHEBANG on this system starts with a
+ * character that can be part of a Perl expression, then if
+ * we see it but not "perl", we're probably looking at the
+ * start of Perl code, not a request to hand off to some
+ * other interpreter. Similarly, if "perl" is there, but
+ * not in the first 'word' of the line, we assume the line
+ * contains the start of the Perl program.
+ */
+ if (d && *s != '#') {
+ const char *c = ipath;
+ while (*c && !memCHRs("; \t\r\n\f\v#", *c))
+ c++;
+ if (c < d)
+ d = NULL; /* "perl" not in first word; ignore */
+ else
+ *s = '#'; /* Don't try to parse shebang line */
+ }
+#endif /* ALTERNATE_SHEBANG */
+ if (!d
+ && *s == '#'
+ && ipathend > ipath
+ && !PL_minus_c
+ && !instr(s,"indir")
+ && instr(PL_origargv[0],"perl"))
+ {
+ dVAR;
+ char **newargv;
+
+ *ipathend = '\0';
+ s = ipathend + 1;
+ while (s < PL_bufend && isSPACE(*s))
+ s++;
+ if (s < PL_bufend) {
+ Newx(newargv,PL_origargc+3,char*);
+ newargv[1] = s;
+ while (s < PL_bufend && !isSPACE(*s))
+ s++;
+ *s = '\0';
+ Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
+ }
+ else
+ newargv = PL_origargv;
+ newargv[0] = ipath;
+ PERL_FPU_PRE_EXEC
+ PerlProc_execv(ipath, EXEC_ARGV_CAST(newargv));
+ PERL_FPU_POST_EXEC
+ Perl_croak(aTHX_ "Can't exec %s", ipath);
+ }
+ if (d) {
+ while (*d && !isSPACE(*d))
+ d++;
+ while (SPACE_OR_TAB(*d))
+ d++;
+
+ if (*d++ == '-') {
+ const bool switches_done = PL_doswitches;
+ const U32 oldpdb = PL_perldb;
+ const bool oldn = PL_minus_n;
+ const bool oldp = PL_minus_p;
+ const char *d1 = d;
+
+ do {
+ bool baduni = FALSE;
+ if (*d1 == 'C') {
+ const char *d2 = d1 + 1;
+ if (parse_unicode_opts((const char **)&d2)
+ != PL_unicode)
+ baduni = TRUE;
+ }
+ if (baduni || isALPHA_FOLD_EQ(*d1, 'M')) {
+ const char * const m = d1;
+ while (*d1 && !isSPACE(*d1))
+ d1++;
+ Perl_croak(aTHX_ "Too late for \"-%.*s\" option",
+ (int)(d1 - m), m);
+ }
+ d1 = moreswitches(d1);
+ } while (d1);
+ if (PL_doswitches && !switches_done) {
+ int argc = PL_origargc;
+ char **argv = PL_origargv;
+ do {
+ argc--,argv++;
+ } while (argc && argv[0][0] == '-' && argv[0][1]);
+ init_argv_symbols(argc,argv);
+ }
+ if ( (PERLDB_LINE_OR_SAVESRC && !oldpdb)
+ || ((PL_minus_n || PL_minus_p) && !(oldn || oldp)))
+ /* if we have already added "LINE: while (<>) {",
+ we must not do it again */
+ {
+ SvPVCLEAR(PL_linestr);
+ PL_bufptr = PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
+ PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
+ PL_last_lop = PL_last_uni = NULL;
+ PL_preambled = FALSE;
+ if (PERLDB_LINE_OR_SAVESRC)
+ (void)gv_fetchfile(PL_origfilename);
+ return YYL_RETRY;
+ }
+ }
+ }
}
+ }
+
+ if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
+ PL_lex_state = LEX_FORMLINE;
+ force_next(FORMRBRACK);
+ TOKEN(';');
+ }
+
+ PL_bufptr = s;
+ return YYL_RETRY;
+}
+
+static int
+yyl_fatcomma(pTHX_ char *s, STRLEN len)
+{
+ CLINE;
+ pl_yylval.opval
+ = newSVOP(OP_CONST, 0,
+ S_newSV_maybe_utf8(aTHX_ PL_tokenbuf, len));
+ pl_yylval.opval->op_private = OPpCONST_BARE;
+ TERM(BAREWORD);
+}
+
+static int
+yyl_safe_bareword(pTHX_ char *s, const char lastchar)
+{
+ if ((lastchar == '*' || lastchar == '%' || lastchar == '&')
+ && PL_parser->saw_infix_sigil)
+ {
+ Perl_ck_warner_d(aTHX_ packWARN(WARN_AMBIGUOUS),
+ "Operator or semicolon missing before %c%" UTF8f,
+ lastchar,
+ UTF8fARG(UTF, strlen(PL_tokenbuf),
+ PL_tokenbuf));
+ Perl_ck_warner_d(aTHX_ packWARN(WARN_AMBIGUOUS),
+ "Ambiguous use of %c resolved as operator %c",
+ lastchar, lastchar);
+ }
+ TOKEN(BAREWORD);
+}
+
+static int
+yyl_constant_op(pTHX_ char *s, SV *sv, CV *cv, OP *rv2cv_op, PADOFFSET off)
+{
+ if (sv) {
+ op_free(rv2cv_op);
+ SvREFCNT_dec(((SVOP*)pl_yylval.opval)->op_sv);
+ ((SVOP*)pl_yylval.opval)->op_sv = SvREFCNT_inc_simple(sv);
+ if (SvTYPE(sv) == SVt_PVAV)
+ pl_yylval.opval = newUNOP(OP_RV2AV, OPf_PARENS,
+ pl_yylval.opval);
else {
- c = Perl_form(aTHX_ "\\x%02X", (unsigned char)*s);
+ pl_yylval.opval->op_private = 0;
+ pl_yylval.opval->op_folded = 1;
+ pl_yylval.opval->op_flags |= OPf_SPECIAL;
+ }
+ TOKEN(BAREWORD);
+ }
+
+ op_free(pl_yylval.opval);
+ pl_yylval.opval =
+ off ? newCVREF(0, rv2cv_op) : rv2cv_op;
+ pl_yylval.opval->op_private |= OPpENTERSUB_NOPAREN;
+ PL_last_lop = PL_oldbufptr;
+ PL_last_lop_op = OP_ENTERSUB;
+
+ /* Is there a prototype? */
+ if (SvPOK(cv)) {
+ int k = yyl_subproto(aTHX_ s, cv);
+ if (k != KEY_NULL)
+ return k;
+ }
+
+ NEXTVAL_NEXTTOKE.opval = pl_yylval.opval;
+ PL_expect = XTERM;
+ force_next(off ? PRIVATEREF : BAREWORD);
+ if (!PL_lex_allbrackets
+ && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ {
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
+ }
+
+ TOKEN(NOAMP);
+}
+
+/* Honour "reserved word" warnings, and enforce strict subs */
+static void
+yyl_strictwarn_bareword(pTHX_ const char lastchar)
+{
+ /* after "print" and similar functions (corresponding to
+ * "F? L" in opcode.pl), whatever wasn't already parsed as
+ * a filehandle should be subject to "strict subs".
+ * Likewise for the optional indirect-object argument to system
+ * or exec, which can't be a bareword */
+ if ((PL_last_lop_op == OP_PRINT
+ || PL_last_lop_op == OP_PRTF
+ || PL_last_lop_op == OP_SAY
+ || PL_last_lop_op == OP_SYSTEM
+ || PL_last_lop_op == OP_EXEC)
+ && (PL_hints & HINT_STRICT_SUBS))
+ {
+ pl_yylval.opval->op_private |= OPpCONST_STRICT;
+ }
+
+ if (lastchar != '-' && ckWARN(WARN_RESERVED)) {
+ char *d = PL_tokenbuf;
+ while (isLOWER(*d))
+ d++;
+ if (!*d && !gv_stashpv(PL_tokenbuf, UTF ? SVf_UTF8 : 0)) {
+ /* PL_warn_reserved is constant */
+ GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
+ Perl_warner(aTHX_ packWARN(WARN_RESERVED), PL_warn_reserved,
+ PL_tokenbuf);
+ GCC_DIAG_RESTORE_STMT;
+ }
+ }
+}
+
+static int
+yyl_just_a_word(pTHX_ char *s, STRLEN len, I32 orig_keyword, struct code c)
+{
+ int pkgname = 0;
+ const char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
+ bool safebw;
+ bool no_op_error = FALSE;
+ /* Use this var to track whether intuit_method has been
+ called. intuit_method returns 0 or > 255. */
+ int key = 1;
+
+ if (PL_expect == XOPERATOR) {
+ if (PL_bufptr == PL_linestart) {
+ CopLINE_dec(PL_curcop);
+ Perl_warner(aTHX_ packWARN(WARN_SEMICOLON), "%s", PL_warn_nosemi);
+ CopLINE_inc(PL_curcop);
+ }
+ else
+ /* We want to call no_op with s pointing after the
+ bareword, so defer it. But we want it to come
+ before the Bad name croak. */
+ no_op_error = TRUE;
+ }
+
+ /* Get the rest if it looks like a package qualifier */
+
+ if (*s == '\'' || (*s == ':' && s[1] == ':')) {
+ STRLEN morelen;
+ s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
+ TRUE, &morelen);
+ if (no_op_error) {
+ no_op("Bareword",s);
+ no_op_error = FALSE;
+ }
+ if (!morelen)
+ Perl_croak(aTHX_ "Bad name after %" UTF8f "%s",
+ UTF8fARG(UTF, len, PL_tokenbuf),
+ *s == '\'' ? "'" : "::");
+ len += morelen;
+ pkgname = 1;
+ }
+
+ if (no_op_error)
+ no_op("Bareword",s);
+
+ /* See if the name is "Foo::",
+ in which case Foo is a bareword
+ (and a package name). */
+
+ if (len > 2 && PL_tokenbuf[len - 2] == ':' && PL_tokenbuf[len - 1] == ':') {
+ if (ckWARN(WARN_BAREWORD)
+ && ! gv_fetchpvn_flags(PL_tokenbuf, len, UTF ? SVf_UTF8 : 0, SVt_PVHV))
+ Perl_warner(aTHX_ packWARN(WARN_BAREWORD),
+ "Bareword \"%" UTF8f
+ "\" refers to nonexistent package",
+ UTF8fARG(UTF, len, PL_tokenbuf));
+ len -= 2;
+ PL_tokenbuf[len] = '\0';
+ c.gv = NULL;
+ c.gvp = 0;
+ safebw = TRUE;
+ }
+ else {
+ safebw = FALSE;
+ }
+
+ /* if we saw a global override before, get the right name */
+
+ if (!c.sv)
+ c.sv = S_newSV_maybe_utf8(aTHX_ PL_tokenbuf, len);
+ if (c.gvp) {
+ SV *sv = newSVpvs("CORE::GLOBAL::");
+ sv_catsv(sv, c.sv);
+ SvREFCNT_dec(c.sv);
+ c.sv = sv;
+ }
+
+ /* Presume this is going to be a bareword of some sort. */
+ CLINE;
+ pl_yylval.opval = newSVOP(OP_CONST, 0, c.sv);
+ pl_yylval.opval->op_private = OPpCONST_BARE;
+
+ /* And if "Foo::", then that's what it certainly is. */
+ if (safebw)
+ return yyl_safe_bareword(aTHX_ s, lastchar);
+
+ if (!c.off) {
+ OP *const_op = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(c.sv));
+ const_op->op_private = OPpCONST_BARE;
+ c.rv2cv_op = newCVREF(OPpMAY_RETURN_CONSTANT<<8, const_op);
+ c.cv = c.lex
+ ? isGV(c.gv)
+ ? GvCV(c.gv)
+ : SvROK(c.gv) && SvTYPE(SvRV(c.gv)) == SVt_PVCV
+ ? (CV *)SvRV(c.gv)
+ : ((CV *)c.gv)
+ : rv2cv_op_cv(c.rv2cv_op, RV2CVOPCV_RETURN_STUB);
+ }
+
+ /* See if it's the indirect object for a list operator. */
+
+ if (PL_oldoldbufptr
+ && PL_oldoldbufptr < PL_bufptr
+ && (PL_oldoldbufptr == PL_last_lop
+ || PL_oldoldbufptr == PL_last_uni)
+ && /* NO SKIPSPACE BEFORE HERE! */
+ (PL_expect == XREF
+ || ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7)
+ == OA_FILEREF))
+ {
+ bool immediate_paren = *s == '(';
+ SSize_t s_off;
+
+ /* (Now we can afford to cross potential line boundary.) */
+ s = skipspace(s);
+
+ /* intuit_method() can indirectly call lex_next_chunk(),
+ * invalidating s
+ */
+ s_off = s - SvPVX(PL_linestr);
+ /* Two barewords in a row may indicate method call. */
+ if ( ( isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)
+ || *s == '$')
+ && (key = intuit_method(s, c.lex ? NULL : c.sv, c.cv)))
+ {
+ /* the code at method: doesn't use s */
+ goto method;
+ }
+ s = SvPVX(PL_linestr) + s_off;
+
+ /* If not a declared subroutine, it's an indirect object. */
+ /* (But it's an indir obj regardless for sort.) */
+ /* Also, if "_" follows a filetest operator, it's a bareword */
+
+ if (
+ ( !immediate_paren && (PL_last_lop_op == OP_SORT
+ || (!c.cv
+ && (PL_last_lop_op != OP_MAPSTART
+ && PL_last_lop_op != OP_GREPSTART))))
+ || (PL_tokenbuf[0] == '_' && PL_tokenbuf[1] == '\0'
+ && ((PL_opargs[PL_last_lop_op] & OA_CLASS_MASK)
+ == OA_FILESTATOP))
+ )
+ {
+ PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
+ yyl_strictwarn_bareword(aTHX_ lastchar);
+ op_free(c.rv2cv_op);
+ return yyl_safe_bareword(aTHX_ s, lastchar);
+ }
+ }
+
+ PL_expect = XOPERATOR;
+ s = skipspace(s);
+
+ /* Is this a word before a => operator? */
+ if (*s == '=' && s[1] == '>' && !pkgname) {
+ op_free(c.rv2cv_op);
+ CLINE;
+ if (c.gvp || (c.lex && !c.off)) {
+ assert (cSVOPx(pl_yylval.opval)->op_sv == c.sv);
+ /* This is our own scalar, created a few lines
+ above, so this is safe. */
+ SvREADONLY_off(c.sv);
+ sv_setpv(c.sv, PL_tokenbuf);
+ if (UTF && !IN_BYTES
+ && is_utf8_string((U8*)PL_tokenbuf, len))
+ SvUTF8_on(c.sv);
+ SvREADONLY_on(c.sv);
+ }
+ TERM(BAREWORD);
+ }
+
+ /* If followed by a paren, it's certainly a subroutine. */
+ if (*s == '(') {
+ CLINE;
+ if (c.cv) {
+ char *d = s + 1;
+ while (SPACE_OR_TAB(*d))
+ d++;
+ if (*d == ')' && (c.sv = cv_const_sv_or_av(c.cv)))
+ return yyl_constant_op(aTHX_ d + 1, c.sv, c.cv, c.rv2cv_op, c.off);
+ }
+ NEXTVAL_NEXTTOKE.opval =
+ c.off ? c.rv2cv_op : pl_yylval.opval;
+ if (c.off)
+ op_free(pl_yylval.opval), force_next(PRIVATEREF);
+ else op_free(c.rv2cv_op), force_next(BAREWORD);
+ pl_yylval.ival = 0;
+ TOKEN('&');
+ }
+
+ /* If followed by var or block, call it a method (unless sub) */
+
+ if ((*s == '$' || *s == '{') && !c.cv && FEATURE_INDIRECT_IS_ENABLED) {
+ op_free(c.rv2cv_op);
+ PL_last_lop = PL_oldbufptr;
+ PL_last_lop_op = OP_METHOD;
+ if (!PL_lex_allbrackets && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
+ PL_expect = XBLOCKTERM;
+ PL_bufptr = s;
+ return REPORT(METHOD);
+ }
+
+ /* If followed by a bareword, see if it looks like indir obj. */
+
+ if ( key == 1
+ && !orig_keyword
+ && (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF) || *s == '$')
+ && (key = intuit_method(s, c.lex ? NULL : c.sv, c.cv)))
+ {
+ method:
+ if (c.lex && !c.off) {
+ assert(cSVOPx(pl_yylval.opval)->op_sv == c.sv);
+ SvREADONLY_off(c.sv);
+ sv_setpvn(c.sv, PL_tokenbuf, len);
+ if (UTF && !IN_BYTES
+ && is_utf8_string((U8*)PL_tokenbuf, len))
+ SvUTF8_on(c.sv);
+ else SvUTF8_off(c.sv);
+ }
+ op_free(c.rv2cv_op);
+ if (key == METHOD && !PL_lex_allbrackets
+ && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ {
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
}
+ return REPORT(key);
+ }
+
+ /* Not a method, so call it a subroutine (if defined) */
+
+ if (c.cv) {
+ /* Check for a constant sub */
+ c.sv = cv_const_sv_or_av(c.cv);
+ return yyl_constant_op(aTHX_ s, c.sv, c.cv, c.rv2cv_op, c.off);
+ }
+
+ /* Call it a bare word */
+
+ if (PL_hints & HINT_STRICT_SUBS)
+ pl_yylval.opval->op_private |= OPpCONST_STRICT;
+ else
+ yyl_strictwarn_bareword(aTHX_ lastchar);
+
+ op_free(c.rv2cv_op);
+
+ return yyl_safe_bareword(aTHX_ s, lastchar);
+}
+
+static int
+yyl_word_or_keyword(pTHX_ char *s, STRLEN len, I32 key, I32 orig_keyword, struct code c)
+{
+ switch (key) {
+ default: /* not a keyword */
+ return yyl_just_a_word(aTHX_ s, len, orig_keyword, c);
+
+ case KEY___FILE__:
+ FUN0OP( newSVOP(OP_CONST, 0, newSVpv(CopFILE(PL_curcop),0)) );
+
+ case KEY___LINE__:
+ FUN0OP(
+ newSVOP(OP_CONST, 0,
+ Perl_newSVpvf(aTHX_ "%" IVdf, (IV)CopLINE(PL_curcop)))
+ );
+
+ case KEY___PACKAGE__:
+ FUN0OP(
+ newSVOP(OP_CONST, 0, (PL_curstash
+ ? newSVhek(HvNAME_HEK(PL_curstash))
+ : &PL_sv_undef))
+ );
+
+ case KEY___DATA__:
+ case KEY___END__:
+ if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D'))
+ yyl_data_handle(aTHX);
+ return yyl_fake_eof(aTHX_ LEX_FAKE_EOF, FALSE, s);
+
+ case KEY___SUB__:
+ FUN0OP(CvCLONE(PL_compcv)
+ ? newOP(OP_RUNCV, 0)
+ : newPVOP(OP_RUNCV,0,NULL));
+
+ case KEY_AUTOLOAD:
+ case KEY_DESTROY:
+ case KEY_BEGIN:
+ case KEY_UNITCHECK:
+ case KEY_CHECK:
+ case KEY_INIT:
+ case KEY_END:
+ if (PL_expect == XSTATE)
+ return yyl_sub(aTHX_ PL_bufptr, key);
+ return yyl_just_a_word(aTHX_ s, len, orig_keyword, c);
+
+ case KEY_abs:
+ UNI(OP_ABS);
+
+ case KEY_alarm:
+ UNI(OP_ALARM);
+
+ case KEY_accept:
+ LOP(OP_ACCEPT,XTERM);
+
+ case KEY_and:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
+ return REPORT(0);
+ OPERATOR(ANDOP);
+
+ case KEY_atan2:
+ LOP(OP_ATAN2,XTERM);
+
+ case KEY_bind:
+ LOP(OP_BIND,XTERM);
+
+ case KEY_binmode:
+ LOP(OP_BINMODE,XTERM);
+
+ case KEY_bless:
+ LOP(OP_BLESS,XTERM);
+
+ case KEY_break:
+ FUN0(OP_BREAK);
+
+ case KEY_chop:
+ UNI(OP_CHOP);
+
+ case KEY_continue:
+ /* We have to disambiguate the two senses of
+ "continue". If the next token is a '{' then
+ treat it as the start of a continue block;
+ otherwise treat it as a control operator.
+ */
+ s = skipspace(s);
+ if (*s == '{')
+ PREBLOCK(CONTINUE);
+ else
+ FUN0(OP_CONTINUE);
+
+ case KEY_chdir:
+ /* may use HOME */
+ (void)gv_fetchpvs("ENV", GV_ADD|GV_NOTQUAL, SVt_PVHV);
+ UNI(OP_CHDIR);
+
+ case KEY_close:
+ UNI(OP_CLOSE);
+
+ case KEY_closedir:
+ UNI(OP_CLOSEDIR);
+
+ case KEY_cmp:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
+ NCEop(OP_SCMP);
+
+ case KEY_caller:
+ UNI(OP_CALLER);
- if (s >= PL_linestart) {
- d = PL_linestart;
+ case KEY_crypt:
+#ifdef FCRYPT
+ if (!PL_cryptseen) {
+ PL_cryptseen = TRUE;
+ init_des();
}
+#endif
+ LOP(OP_CRYPT,XTERM);
+
+ case KEY_chmod:
+ LOP(OP_CHMOD,XTERM);
+
+ case KEY_chown:
+ LOP(OP_CHOWN,XTERM);
+
+ case KEY_connect:
+ LOP(OP_CONNECT,XTERM);
+
+ case KEY_chr:
+ UNI(OP_CHR);
+
+ case KEY_cos:
+ UNI(OP_COS);
+
+ case KEY_chroot:
+ UNI(OP_CHROOT);
+
+ case KEY_default:
+ PREBLOCK(DEFAULT);
+
+ case KEY_do:
+ return yyl_do(aTHX_ s, orig_keyword);
+
+ case KEY_die:
+ PL_hints |= HINT_BLOCK_SCOPE;
+ LOP(OP_DIE,XTERM);
+
+ case KEY_defined:
+ UNI(OP_DEFINED);
+
+ case KEY_delete:
+ UNI(OP_DELETE);
+
+ case KEY_dbmopen:
+ Perl_populate_isa(aTHX_ STR_WITH_LEN("AnyDBM_File::ISA"),
+ STR_WITH_LEN("NDBM_File::"),
+ STR_WITH_LEN("DB_File::"),
+ STR_WITH_LEN("GDBM_File::"),
+ STR_WITH_LEN("SDBM_File::"),
+ STR_WITH_LEN("ODBM_File::"),
+ NULL);
+ LOP(OP_DBMOPEN,XTERM);
+
+ case KEY_dbmclose:
+ UNI(OP_DBMCLOSE);
+
+ case KEY_dump:
+ LOOPX(OP_DUMP);
+
+ case KEY_else:
+ PREBLOCK(ELSE);
+
+ case KEY_elsif:
+ pl_yylval.ival = CopLINE(PL_curcop);
+ OPERATOR(ELSIF);
+
+ case KEY_eq:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
+ ChEop(OP_SEQ);
+
+ case KEY_exists:
+ UNI(OP_EXISTS);
+
+ case KEY_exit:
+ UNI(OP_EXIT);
+
+ case KEY_eval:
+ s = skipspace(s);
+ if (*s == '{') { /* block eval */
+ PL_expect = XTERMBLOCK;
+ UNIBRACK(OP_ENTERTRY);
+ }
+ else { /* string eval */
+ PL_expect = XTERM;
+ UNIBRACK(OP_ENTEREVAL);
+ }
+
+ case KEY_evalbytes:
+ PL_expect = XTERM;
+ UNIBRACK(-OP_ENTEREVAL);
+
+ case KEY_eof:
+ UNI(OP_EOF);
+
+ case KEY_exp:
+ UNI(OP_EXP);
+
+ case KEY_each:
+ UNI(OP_EACH);
+
+ case KEY_exec:
+ LOP(OP_EXEC,XREF);
+
+ case KEY_endhostent:
+ FUN0(OP_EHOSTENT);
+
+ case KEY_endnetent:
+ FUN0(OP_ENETENT);
+
+ case KEY_endservent:
+ FUN0(OP_ESERVENT);
+
+ case KEY_endprotoent:
+ FUN0(OP_EPROTOENT);
+
+ case KEY_endpwent:
+ FUN0(OP_EPWENT);
+
+ case KEY_endgrent:
+ FUN0(OP_EGRENT);
+
+ case KEY_for:
+ case KEY_foreach:
+ return yyl_foreach(aTHX_ s);
+
+ case KEY_formline:
+ LOP(OP_FORMLINE,XTERM);
+
+ case KEY_fork:
+ FUN0(OP_FORK);
+
+ case KEY_fc:
+ UNI(OP_FC);
+
+ case KEY_fcntl:
+ LOP(OP_FCNTL,XTERM);
+
+ case KEY_fileno:
+ UNI(OP_FILENO);
+
+ case KEY_flock:
+ LOP(OP_FLOCK,XTERM);
+
+ case KEY_gt:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
+ ChRop(OP_SGT);
+
+ case KEY_ge:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
+ ChRop(OP_SGE);
+
+ case KEY_grep:
+ LOP(OP_GREPSTART, XREF);
+
+ case KEY_goto:
+ LOOPX(OP_GOTO);
+
+ case KEY_gmtime:
+ UNI(OP_GMTIME);
+
+ case KEY_getc:
+ UNIDOR(OP_GETC);
+
+ case KEY_getppid:
+ FUN0(OP_GETPPID);
+
+ case KEY_getpgrp:
+ UNI(OP_GETPGRP);
+
+ case KEY_getpriority:
+ LOP(OP_GETPRIORITY,XTERM);
+
+ case KEY_getprotobyname:
+ UNI(OP_GPBYNAME);
+
+ case KEY_getprotobynumber:
+ LOP(OP_GPBYNUMBER,XTERM);
+
+ case KEY_getprotoent:
+ FUN0(OP_GPROTOENT);
+
+ case KEY_getpwent:
+ FUN0(OP_GPWENT);
+
+ case KEY_getpwnam:
+ UNI(OP_GPWNAM);
+
+ case KEY_getpwuid:
+ UNI(OP_GPWUID);
+
+ case KEY_getpeername:
+ UNI(OP_GETPEERNAME);
+
+ case KEY_gethostbyname:
+ UNI(OP_GHBYNAME);
+
+ case KEY_gethostbyaddr:
+ LOP(OP_GHBYADDR,XTERM);
+
+ case KEY_gethostent:
+ FUN0(OP_GHOSTENT);
+
+ case KEY_getnetbyname:
+ UNI(OP_GNBYNAME);
+
+ case KEY_getnetbyaddr:
+ LOP(OP_GNBYADDR,XTERM);
+
+ case KEY_getnetent:
+ FUN0(OP_GNETENT);
+
+ case KEY_getservbyname:
+ LOP(OP_GSBYNAME,XTERM);
+
+ case KEY_getservbyport:
+ LOP(OP_GSBYPORT,XTERM);
+
+ case KEY_getservent:
+ FUN0(OP_GSERVENT);
+
+ case KEY_getsockname:
+ UNI(OP_GETSOCKNAME);
+
+ case KEY_getsockopt:
+ LOP(OP_GSOCKOPT,XTERM);
+
+ case KEY_getgrent:
+ FUN0(OP_GGRENT);
+
+ case KEY_getgrnam:
+ UNI(OP_GGRNAM);
+
+ case KEY_getgrgid:
+ UNI(OP_GGRGID);
+
+ case KEY_getlogin:
+ FUN0(OP_GETLOGIN);
+
+ case KEY_given:
+ pl_yylval.ival = CopLINE(PL_curcop);
+ Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__SMARTMATCH),
+ "given is experimental");
+ OPERATOR(GIVEN);
+
+ case KEY_glob:
+ LOP( orig_keyword==KEY_glob ? -OP_GLOB : OP_GLOB, XTERM );
+
+ case KEY_hex:
+ UNI(OP_HEX);
+
+ case KEY_if:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
+ pl_yylval.ival = CopLINE(PL_curcop);
+ OPERATOR(IF);
+
+ case KEY_index:
+ LOP(OP_INDEX,XTERM);
+
+ case KEY_int:
+ UNI(OP_INT);
+
+ case KEY_ioctl:
+ LOP(OP_IOCTL,XTERM);
+
+ case KEY_isa:
+ Perl_ck_warner_d(aTHX_
+ packWARN(WARN_EXPERIMENTAL__ISA), "isa is experimental");
+ NCRop(OP_ISA);
+
+ case KEY_join:
+ LOP(OP_JOIN,XTERM);
+
+ case KEY_keys:
+ UNI(OP_KEYS);
+
+ case KEY_kill:
+ LOP(OP_KILL,XTERM);
+
+ case KEY_last:
+ LOOPX(OP_LAST);
+
+ case KEY_lc:
+ UNI(OP_LC);
+
+ case KEY_lcfirst:
+ UNI(OP_LCFIRST);
+
+ case KEY_local:
+ OPERATOR(LOCAL);
+
+ case KEY_length:
+ UNI(OP_LENGTH);
+
+ case KEY_lt:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
+ ChRop(OP_SLT);
+
+ case KEY_le:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
+ ChRop(OP_SLE);
+
+ case KEY_localtime:
+ UNI(OP_LOCALTIME);
+
+ case KEY_log:
+ UNI(OP_LOG);
+
+ case KEY_link:
+ LOP(OP_LINK,XTERM);
+
+ case KEY_listen:
+ LOP(OP_LISTEN,XTERM);
+
+ case KEY_lock:
+ UNI(OP_LOCK);
+
+ case KEY_lstat:
+ UNI(OP_LSTAT);
+
+ case KEY_m:
+ s = scan_pat(s,OP_MATCH);
+ TERM(sublex_start());
+
+ case KEY_map:
+ LOP(OP_MAPSTART, XREF);
+
+ case KEY_mkdir:
+ LOP(OP_MKDIR,XTERM);
+
+ case KEY_msgctl:
+ LOP(OP_MSGCTL,XTERM);
+
+ case KEY_msgget:
+ LOP(OP_MSGGET,XTERM);
+
+ case KEY_msgrcv:
+ LOP(OP_MSGRCV,XTERM);
+
+ case KEY_msgsnd:
+ LOP(OP_MSGSND,XTERM);
+
+ case KEY_our:
+ case KEY_my:
+ case KEY_state:
+ return yyl_my(aTHX_ s, key);
+
+ case KEY_next:
+ LOOPX(OP_NEXT);
+
+ case KEY_ne:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
+ return REPORT(0);
+ ChEop(OP_SNE);
+
+ case KEY_no:
+ s = tokenize_use(0, s);
+ TOKEN(USE);
+
+ case KEY_not:
+ if (*s == '(' || (s = skipspace(s), *s == '('))
+ FUN1(OP_NOT);
else {
- /* somehow (probably due to a parse failure), PL_linestart has advanced
- * pass PL_bufptr, get a reasonable beginning of line
- */
- d = s;
- while (d > SvPVX(PL_linestr) && d[-1] && d[-1] != '\n')
- --d;
+ if (!PL_lex_allbrackets && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
+ PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
+ OPERATOR(NOTOP);
}
- len = UTF ? Perl_utf8_length(aTHX_ (U8 *) d, (U8 *) s) : (STRLEN) (s - d);
- if (len > UNRECOGNIZED_PRECEDE_COUNT) {
- d = UTF ? (char *) utf8_hop_back((U8 *) s, -UNRECOGNIZED_PRECEDE_COUNT, (U8 *)d) : s - UNRECOGNIZED_PRECEDE_COUNT;
+
+ case KEY_open:
+ s = skipspace(s);
+ if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
+ const char *t;
+ char *d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
+ for (t=d; isSPACE(*t);)
+ t++;
+ if ( *t && memCHRs("|&*+-=!?:.", *t) && ckWARN_d(WARN_PRECEDENCE)
+ /* [perl #16184] */
+ && !(t[0] == '=' && t[1] == '>')
+ && !(t[0] == ':' && t[1] == ':')
+ && !keyword(s, d-s, 0)
+ ) {
+ Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
+ "Precedence problem: open %" UTF8f " should be open(%" UTF8f ")",
+ UTF8fARG(UTF, d-s, s), UTF8fARG(UTF, d-s, s));
+ }
}
+ LOP(OP_OPEN,XTERM);
+
+ case KEY_or:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
+ return REPORT(0);
+ pl_yylval.ival = OP_OR;
+ OPERATOR(OROP);
+
+ case KEY_ord:
+ UNI(OP_ORD);
+
+ case KEY_oct:
+ UNI(OP_OCT);
+
+ case KEY_opendir:
+ LOP(OP_OPEN_DIR,XTERM);
+
+ case KEY_print:
+ checkcomma(s,PL_tokenbuf,"filehandle");
+ LOP(OP_PRINT,XREF);
+
+ case KEY_printf:
+ checkcomma(s,PL_tokenbuf,"filehandle");
+ LOP(OP_PRTF,XREF);
+
+ case KEY_prototype:
+ UNI(OP_PROTOTYPE);
+
+ case KEY_push:
+ LOP(OP_PUSH,XTERM);
+
+ case KEY_pop:
+ UNIDOR(OP_POP);
+
+ case KEY_pos:
+ UNIDOR(OP_POS);
+
+ case KEY_pack:
+ LOP(OP_PACK,XTERM);
+
+ case KEY_package:
+ s = force_word(s,BAREWORD,FALSE,TRUE);
+ s = skipspace(s);
+ s = force_strict_version(s);
+ PREBLOCK(PACKAGE);
+
+ case KEY_pipe:
+ LOP(OP_PIPE_OP,XTERM);
+
+ case KEY_q:
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
+ if (!s)
+ missingterm(NULL, 0);
+ COPLINE_SET_FROM_MULTI_END;
+ pl_yylval.ival = OP_CONST;
+ TERM(sublex_start());
+
+ case KEY_quotemeta:
+ UNI(OP_QUOTEMETA);
+
+ case KEY_qw:
+ return yyl_qw(aTHX_ s, len);
+
+ case KEY_qq:
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
+ if (!s)
+ missingterm(NULL, 0);
+ pl_yylval.ival = OP_STRINGIFY;
+ if (SvIVX(PL_lex_stuff) == '\'')
+ SvIV_set(PL_lex_stuff, 0); /* qq'$foo' should interpolate */
+ TERM(sublex_start());
+
+ case KEY_qr:
+ s = scan_pat(s,OP_QR);
+ TERM(sublex_start());
+
+ case KEY_qx:
+ s = scan_str(s,FALSE,FALSE,FALSE,NULL);
+ if (!s)
+ missingterm(NULL, 0);
+ pl_yylval.ival = OP_BACKTICK;
+ TERM(sublex_start());
+
+ case KEY_return:
+ OLDLOP(OP_RETURN);
+
+ case KEY_require:
+ return yyl_require(aTHX_ s, orig_keyword);
+
+ case KEY_reset:
+ UNI(OP_RESET);
+
+ case KEY_redo:
+ LOOPX(OP_REDO);
+
+ case KEY_rename:
+ LOP(OP_RENAME,XTERM);
+
+ case KEY_rand:
+ UNI(OP_RAND);
+
+ case KEY_rmdir:
+ UNI(OP_RMDIR);
+
+ case KEY_rindex:
+ LOP(OP_RINDEX,XTERM);
+
+ case KEY_read:
+ LOP(OP_READ,XTERM);
+
+ case KEY_readdir:
+ UNI(OP_READDIR);
+
+ case KEY_readline:
+ UNIDOR(OP_READLINE);
+
+ case KEY_readpipe:
+ UNIDOR(OP_BACKTICK);
+
+ case KEY_rewinddir:
+ UNI(OP_REWINDDIR);
+
+ case KEY_recv:
+ LOP(OP_RECV,XTERM);
+
+ case KEY_reverse:
+ LOP(OP_REVERSE,XTERM);
+
+ case KEY_readlink:
+ UNIDOR(OP_READLINK);
+
+ case KEY_ref:
+ UNI(OP_REF);
+
+ case KEY_s:
+ s = scan_subst(s);
+ if (pl_yylval.opval)
+ TERM(sublex_start());
+ else
+ TOKEN(1); /* force error */
+
+ case KEY_say:
+ checkcomma(s,PL_tokenbuf,"filehandle");
+ LOP(OP_SAY,XREF);
+
+ case KEY_chomp:
+ UNI(OP_CHOMP);
+
+ case KEY_scalar:
+ UNI(OP_SCALAR);
+
+ case KEY_select:
+ LOP(OP_SELECT,XTERM);
+
+ case KEY_seek:
+ LOP(OP_SEEK,XTERM);
+
+ case KEY_semctl:
+ LOP(OP_SEMCTL,XTERM);
+
+ case KEY_semget:
+ LOP(OP_SEMGET,XTERM);
+
+ case KEY_semop:
+ LOP(OP_SEMOP,XTERM);
+
+ case KEY_send:
+ LOP(OP_SEND,XTERM);
+
+ case KEY_setpgrp:
+ LOP(OP_SETPGRP,XTERM);
+
+ case KEY_setpriority:
+ LOP(OP_SETPRIORITY,XTERM);
+
+ case KEY_sethostent:
+ UNI(OP_SHOSTENT);
+
+ case KEY_setnetent:
+ UNI(OP_SNETENT);
+
+ case KEY_setservent:
+ UNI(OP_SSERVENT);
+
+ case KEY_setprotoent:
+ UNI(OP_SPROTOENT);
+
+ case KEY_setpwent:
+ FUN0(OP_SPWENT);
+
+ case KEY_setgrent:
+ FUN0(OP_SGRENT);
+
+ case KEY_seekdir:
+ LOP(OP_SEEKDIR,XTERM);
+
+ case KEY_setsockopt:
+ LOP(OP_SSOCKOPT,XTERM);
+
+ case KEY_shift:
+ UNIDOR(OP_SHIFT);
+
+ case KEY_shmctl:
+ LOP(OP_SHMCTL,XTERM);
+
+ case KEY_shmget:
+ LOP(OP_SHMGET,XTERM);
+
+ case KEY_shmread:
+ LOP(OP_SHMREAD,XTERM);
+
+ case KEY_shmwrite:
+ LOP(OP_SHMWRITE,XTERM);
+
+ case KEY_shutdown:
+ LOP(OP_SHUTDOWN,XTERM);
+
+ case KEY_sin:
+ UNI(OP_SIN);
+
+ case KEY_sleep:
+ UNI(OP_SLEEP);
+
+ case KEY_socket:
+ LOP(OP_SOCKET,XTERM);
+
+ case KEY_socketpair:
+ LOP(OP_SOCKPAIR,XTERM);
- Perl_croak(aTHX_ "Unrecognized character %s; marked by <-- HERE after %" UTF8f "<-- HERE near column %d", c,
- UTF8fARG(UTF, (s - d), d),
- (int) len + 1);
+ case KEY_sort:
+ checkcomma(s,PL_tokenbuf,"subroutine name");
+ s = skipspace(s);
+ PL_expect = XTERM;
+ s = force_word(s,BAREWORD,TRUE,TRUE);
+ LOP(OP_SORT,XREF);
+
+ case KEY_split:
+ LOP(OP_SPLIT,XTERM);
+
+ case KEY_sprintf:
+ LOP(OP_SPRINTF,XTERM);
+
+ case KEY_splice:
+ LOP(OP_SPLICE,XTERM);
+
+ case KEY_sqrt:
+ UNI(OP_SQRT);
+
+ case KEY_srand:
+ UNI(OP_SRAND);
+
+ case KEY_stat:
+ UNI(OP_STAT);
+
+ case KEY_study:
+ UNI(OP_STUDY);
+
+ case KEY_substr:
+ LOP(OP_SUBSTR,XTERM);
+
+ case KEY_format:
+ case KEY_sub:
+ return yyl_sub(aTHX_ s, key);
+
+ case KEY_system:
+ LOP(OP_SYSTEM,XREF);
+
+ case KEY_symlink:
+ LOP(OP_SYMLINK,XTERM);
+
+ case KEY_syscall:
+ LOP(OP_SYSCALL,XTERM);
+
+ case KEY_sysopen:
+ LOP(OP_SYSOPEN,XTERM);
+
+ case KEY_sysseek:
+ LOP(OP_SYSSEEK,XTERM);
+
+ case KEY_sysread:
+ LOP(OP_SYSREAD,XTERM);
+
+ case KEY_syswrite:
+ LOP(OP_SYSWRITE,XTERM);
+
+ case KEY_tr:
+ case KEY_y:
+ s = scan_trans(s);
+ TERM(sublex_start());
+
+ case KEY_tell:
+ UNI(OP_TELL);
+
+ case KEY_telldir:
+ UNI(OP_TELLDIR);
+
+ case KEY_tie:
+ LOP(OP_TIE,XTERM);
+
+ case KEY_tied:
+ UNI(OP_TIED);
+
+ case KEY_time:
+ FUN0(OP_TIME);
+
+ case KEY_times:
+ FUN0(OP_TMS);
+
+ case KEY_truncate:
+ LOP(OP_TRUNCATE,XTERM);
+
+ case KEY_uc:
+ UNI(OP_UC);
+
+ case KEY_ucfirst:
+ UNI(OP_UCFIRST);
+
+ case KEY_untie:
+ UNI(OP_UNTIE);
+
+ case KEY_until:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
+ pl_yylval.ival = CopLINE(PL_curcop);
+ OPERATOR(UNTIL);
+
+ case KEY_unless:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
+ pl_yylval.ival = CopLINE(PL_curcop);
+ OPERATOR(UNLESS);
+
+ case KEY_unlink:
+ LOP(OP_UNLINK,XTERM);
+
+ case KEY_undef:
+ UNIDOR(OP_UNDEF);
+
+ case KEY_unpack:
+ LOP(OP_UNPACK,XTERM);
+
+ case KEY_utime:
+ LOP(OP_UTIME,XTERM);
+
+ case KEY_umask:
+ UNIDOR(OP_UMASK);
+
+ case KEY_unshift:
+ LOP(OP_UNSHIFT,XTERM);
+
+ case KEY_use:
+ s = tokenize_use(1, s);
+ TOKEN(USE);
+
+ case KEY_values:
+ UNI(OP_VALUES);
+
+ case KEY_vec:
+ LOP(OP_VEC,XTERM);
+
+ case KEY_when:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
+ pl_yylval.ival = CopLINE(PL_curcop);
+ Perl_ck_warner_d(aTHX_
+ packWARN(WARN_EXPERIMENTAL__SMARTMATCH),
+ "when is experimental");
+ OPERATOR(WHEN);
+
+ case KEY_while:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
+ return REPORT(0);
+ pl_yylval.ival = CopLINE(PL_curcop);
+ OPERATOR(WHILE);
+
+ case KEY_warn:
+ PL_hints |= HINT_BLOCK_SCOPE;
+ LOP(OP_WARN,XTERM);
+
+ case KEY_wait:
+ FUN0(OP_WAIT);
+
+ case KEY_waitpid:
+ LOP(OP_WAITPID,XTERM);
+
+ case KEY_wantarray:
+ FUN0(OP_WANTARRAY);
+
+ case KEY_write:
+ /* Make sure $^L is defined. 0x0C is CTRL-L on ASCII platforms, and
+ * we use the same number on EBCDIC */
+ gv_fetchpvs("\x0C", GV_ADD|GV_NOTQUAL, SVt_PV);
+ UNI(OP_ENTERWRITE);
+
+ case KEY_x:
+ if (PL_expect == XOPERATOR) {
+ if (*s == '=' && !PL_lex_allbrackets
+ && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
+ {
+ return REPORT(0);
+ }
+ Mop(OP_REPEAT);
+ }
+ check_uni();
+ return yyl_just_a_word(aTHX_ s, len, orig_keyword, c);
+
+ case KEY_xor:
+ if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
+ return REPORT(0);
+ pl_yylval.ival = OP_XOR;
+ OPERATOR(OROP);
+ }
+}
+
+static int
+yyl_key_core(pTHX_ char *s, STRLEN len, struct code c)
+{
+ I32 key = 0;
+ I32 orig_keyword = 0;
+ STRLEN olen = len;
+ char *d = s;
+ s += 2;
+ s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
+ if ((*s == ':' && s[1] == ':')
+ || (!(key = keyword(PL_tokenbuf, len, 1)) && *s == '\''))
+ {
+ Copy(PL_bufptr, PL_tokenbuf, olen, char);
+ return yyl_just_a_word(aTHX_ d, olen, 0, c);
+ }
+ if (!key)
+ Perl_croak(aTHX_ "CORE::%" UTF8f " is not a keyword",
+ UTF8fARG(UTF, len, PL_tokenbuf));
+ if (key < 0)
+ key = -key;
+ else if (key == KEY_require || key == KEY_do
+ || key == KEY_glob)
+ /* that's a way to remember we saw "CORE::" */
+ orig_keyword = key;
+
+ /* Known to be a reserved word at this point */
+ return yyl_word_or_keyword(aTHX_ s, len, key, orig_keyword, c);
+}
+
+static int
+yyl_keylookup(pTHX_ char *s, GV *gv)
+{
+ dVAR;
+ STRLEN len;
+ bool anydelim;
+ I32 key;
+ struct code c = no_code;
+ I32 orig_keyword = 0;
+ char *d;
+
+ c.gv = gv;
+
+ PL_bufptr = s;
+ s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
+
+ /* Some keywords can be followed by any delimiter, including ':' */
+ anydelim = word_takes_any_delimiter(PL_tokenbuf, len);
+
+ /* x::* is just a word, unless x is "CORE" */
+ if (!anydelim && *s == ':' && s[1] == ':') {
+ if (memEQs(PL_tokenbuf, len, "CORE"))
+ return yyl_key_core(aTHX_ s, len, c);
+ return yyl_just_a_word(aTHX_ s, len, 0, c);
+ }
+
+ d = s;
+ while (d < PL_bufend && isSPACE(*d))
+ d++; /* no comments skipped here, or s### is misparsed */
+
+ /* Is this a word before a => operator? */
+ if (*d == '=' && d[1] == '>') {
+ return yyl_fatcomma(aTHX_ s, len);
+ }
+
+ /* Check for plugged-in keyword */
+ {
+ OP *o;
+ int result;
+ char *saved_bufptr = PL_bufptr;
+ PL_bufptr = s;
+ result = PL_keyword_plugin(aTHX_ PL_tokenbuf, len, &o);
+ s = PL_bufptr;
+ if (result == KEYWORD_PLUGIN_DECLINE) {
+ /* not a plugged-in keyword */
+ PL_bufptr = saved_bufptr;
+ } else if (result == KEYWORD_PLUGIN_STMT) {
+ pl_yylval.opval = o;
+ CLINE;
+ if (!PL_nexttoke) PL_expect = XSTATE;
+ return REPORT(PLUGSTMT);
+ } else if (result == KEYWORD_PLUGIN_EXPR) {
+ pl_yylval.opval = o;
+ CLINE;
+ if (!PL_nexttoke) PL_expect = XOPERATOR;
+ return REPORT(PLUGEXPR);
+ } else {
+ Perl_croak(aTHX_ "Bad plugin affecting keyword '%s'", PL_tokenbuf);
+ }
}
+
+ /* Is this a label? */
+ if (!anydelim && PL_expect == XSTATE
+ && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
+ s = d + 1;
+ pl_yylval.opval =
+ newSVOP(OP_CONST, 0,
+ newSVpvn_flags(PL_tokenbuf, len, UTF ? SVf_UTF8 : 0));
+ CLINE;
+ TOKEN(LABEL);
+ }
+
+ /* Check for lexical sub */
+ if (PL_expect != XOPERATOR) {
+ char tmpbuf[sizeof PL_tokenbuf + 1];
+ *tmpbuf = '&';
+ Copy(PL_tokenbuf, tmpbuf+1, len, char);
+ c.off = pad_findmy_pvn(tmpbuf, len+1, 0);
+ if (c.off != NOT_IN_PAD) {
+ assert(c.off); /* we assume this is boolean-true below */
+ if (PAD_COMPNAME_FLAGS_isOUR(c.off)) {
+ HV * const stash = PAD_COMPNAME_OURSTASH(c.off);
+ HEK * const stashname = HvNAME_HEK(stash);
+ c.sv = newSVhek(stashname);
+ sv_catpvs(c.sv, "::");
+ sv_catpvn_flags(c.sv, PL_tokenbuf, len,
+ (UTF ? SV_CATUTF8 : SV_CATBYTES));
+ c.gv = gv_fetchsv(c.sv, GV_NOADD_NOINIT | SvUTF8(c.sv),
+ SVt_PVCV);
+ c.off = 0;
+ if (!c.gv) {
+ sv_free(c.sv);
+ c.sv = NULL;
+ return yyl_just_a_word(aTHX_ s, len, 0, c);
+ }
+ }
+ else {
+ c.rv2cv_op = newOP(OP_PADANY, 0);
+ c.rv2cv_op->op_targ = c.off;
+ c.cv = find_lexical_cv(c.off);
+ }
+ c.lex = TRUE;
+ return yyl_just_a_word(aTHX_ s, len, 0, c);
+ }
+ c.off = 0;
+ }
+
+ /* Check for built-in keyword */
+ key = keyword(PL_tokenbuf, len, 0);
+
+ if (key < 0)
+ key = yyl_secondclass_keyword(aTHX_ s, len, key, &orig_keyword, &c.gv, &c.gvp);
+
+ if (key && key != KEY___DATA__ && key != KEY___END__
+ && (!anydelim || *s != '#')) {
+ /* no override, and not s### either; skipspace is safe here
+ * check for => on following line */
+ bool arrow;
+ STRLEN bufoff = PL_bufptr - SvPVX(PL_linestr);
+ STRLEN soff = s - SvPVX(PL_linestr);
+ s = peekspace(s);
+ arrow = *s == '=' && s[1] == '>';
+ PL_bufptr = SvPVX(PL_linestr) + bufoff;
+ s = SvPVX(PL_linestr) + soff;
+ if (arrow)
+ return yyl_fatcomma(aTHX_ s, len);
+ }
+
+ return yyl_word_or_keyword(aTHX_ s, len, key, orig_keyword, c);
+}
+
+static int
+yyl_try(pTHX_ char *s)
+{
+ char *d;
+ GV *gv = NULL;
+ int tok;
+
+ retry:
+ switch (*s) {
+ default:
+ if (UTF ? isIDFIRST_utf8_safe(s, PL_bufend) : isALNUMC(*s)) {
+ if ((tok = yyl_keylookup(aTHX_ s, gv)) != YYL_RETRY)
+ return tok;
+ goto retry_bufptr;
+ }
+ yyl_croak_unrecognised(aTHX_ s);
+
case 4:
case 26:
- goto fake_eof; /* emulate EOF on ^D or ^Z */
+ /* emulate EOF on ^D or ^Z */
+ if ((tok = yyl_fake_eof(aTHX_ LEX_FAKE_EOF, FALSE, s)) != YYL_RETRY)
+ return tok;
+ retry_bufptr:
+ s = PL_bufptr;
+ goto retry;
+
case 0:
if ((!PL_rsfp || PL_lex_inwhat)
&& (!PL_parser->filtered || s+1 < PL_bufend)) {
@@ -5336,13 +8682,13 @@ Perl_yylex(pTHX)
? "Format not terminated"
: "Missing right curly or square bracket"));
}
- DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### Tokener got EOF\n");
- } );
+ DEBUG_T({
+ PerlIO_printf(Perl_debug_log, "### Tokener got EOF\n");
+ });
TOKEN(0);
}
if (s++ < PL_bufend)
- goto retry; /* ignore stray nulls */
+ goto retry; /* ignore stray nulls */
PL_last_uni = 0;
PL_last_lop = 0;
if (!PL_in_eval && !PL_preambled) {
@@ -5422,261 +8768,10 @@ Perl_yylex(pTHX)
update_debugger_info(PL_linestr, NULL, 0);
goto retry;
}
- do {
- fake_eof = 0;
- bof = cBOOL(PL_rsfp);
- if (0) {
- fake_eof:
- fake_eof = LEX_FAKE_EOF;
- }
- PL_bufptr = PL_bufend;
- COPLINE_INC_WITH_HERELINES;
- if (!lex_next_chunk(fake_eof)) {
- CopLINE_dec(PL_curcop);
- s = PL_bufptr;
- TOKEN(';'); /* not infinite loop because rsfp is NULL now */
- }
- CopLINE_dec(PL_curcop);
- s = PL_bufptr;
- /* If it looks like the start of a BOM or raw UTF-16,
- * check if it in fact is. */
- if (bof && PL_rsfp
- && ( *s == 0
- || *(U8*)s == BOM_UTF8_FIRST_BYTE
- || *(U8*)s >= 0xFE
- || s[1] == 0))
- {
- Off_t offset = (IV)PerlIO_tell(PL_rsfp);
- bof = (offset == (Off_t)SvCUR(PL_linestr));
-#if defined(PERLIO_USING_CRLF) && defined(PERL_TEXTMODE_SCRIPTS)
- /* offset may include swallowed CR */
- if (!bof)
- bof = (offset == (Off_t)SvCUR(PL_linestr)+1);
-#endif
- if (bof) {
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- s = swallow_bom((U8*)s);
- }
- }
- if (PL_parser->in_pod) {
- /* Incest with pod. */
- if ( memBEGINPs(s, (STRLEN) (PL_bufend - s), "=cut")
- && !isALPHA(s[4]))
- {
- SvPVCLEAR(PL_linestr);
- PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = NULL;
- PL_parser->in_pod = 0;
- }
- }
- if (PL_rsfp || PL_parser->filtered)
- incline(s, PL_bufend);
- } while (PL_parser->in_pod);
- PL_oldoldbufptr = PL_oldbufptr = PL_bufptr = PL_linestart = s;
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = NULL;
- if (CopLINE(PL_curcop) == 1) {
- while (s < PL_bufend && isSPACE(*s))
- s++;
- if (*s == ':' && s[1] != ':') /* for csh execing sh scripts */
- s++;
- d = NULL;
- if (!PL_in_eval) {
- if (*s == '#' && *(s+1) == '!')
- d = s + 2;
-#ifdef ALTERNATE_SHEBANG
- else {
- static char const as[] = ALTERNATE_SHEBANG;
- if (*s == as[0] && strnEQ(s, as, sizeof(as) - 1))
- d = s + (sizeof(as) - 1);
- }
-#endif /* ALTERNATE_SHEBANG */
- }
- if (d) {
- char *ipath;
- char *ipathend;
-
- while (isSPACE(*d))
- d++;
- ipath = d;
- while (*d && !isSPACE(*d))
- d++;
- ipathend = d;
-
-#ifdef ARG_ZERO_IS_SCRIPT
- if (ipathend > ipath) {
- /*
- * HP-UX (at least) sets argv[0] to the script name,
- * which makes $^X incorrect. And Digital UNIX and Linux,
- * at least, set argv[0] to the basename of the Perl
- * interpreter. So, having found "#!", we'll set it right.
- */
- SV* copfilesv = CopFILESV(PL_curcop);
- if (copfilesv) {
- SV * const x =
- GvSV(gv_fetchpvs("\030", GV_ADD|GV_NOTQUAL,
- SVt_PV)); /* $^X */
- assert(SvPOK(x) || SvGMAGICAL(x));
- if (sv_eq(x, copfilesv)) {
- sv_setpvn(x, ipath, ipathend - ipath);
- SvSETMAGIC(x);
- }
- else {
- STRLEN blen;
- STRLEN llen;
- const char *bstart = SvPV_const(copfilesv, blen);
- const char * const lstart = SvPV_const(x, llen);
- if (llen < blen) {
- bstart += blen - llen;
- if (strnEQ(bstart, lstart, llen) && bstart[-1] == '/') {
- sv_setpvn(x, ipath, ipathend - ipath);
- SvSETMAGIC(x);
- }
- }
- }
- }
- else {
- /* Anything to do if no copfilesv? */
- }
- TAINT_NOT; /* $^X is always tainted, but that's OK */
- }
-#endif /* ARG_ZERO_IS_SCRIPT */
+ if ((tok = yyl_fake_eof(aTHX_ 0, cBOOL(PL_rsfp), s)) != YYL_RETRY)
+ return tok;
+ goto retry_bufptr;
- /*
- * Look for options.
- */
- d = instr(s,"perl -");
- if (!d) {
- d = instr(s,"perl");
-#if defined(DOSISH)
- /* avoid getting into infinite loops when shebang
- * line contains "Perl" rather than "perl" */
- if (!d) {
- for (d = ipathend-4; d >= ipath; --d) {
- if (isALPHA_FOLD_EQ(*d, 'p')
- && !ibcmp(d, "perl", 4))
- {
- break;
- }
- }
- if (d < ipath)
- d = NULL;
- }
-#endif
- }
-#ifdef ALTERNATE_SHEBANG
- /*
- * If the ALTERNATE_SHEBANG on this system starts with a
- * character that can be part of a Perl expression, then if
- * we see it but not "perl", we're probably looking at the
- * start of Perl code, not a request to hand off to some
- * other interpreter. Similarly, if "perl" is there, but
- * not in the first 'word' of the line, we assume the line
- * contains the start of the Perl program.
- */
- if (d && *s != '#') {
- const char *c = ipath;
- while (*c && !strchr("; \t\r\n\f\v#", *c))
- c++;
- if (c < d)
- d = NULL; /* "perl" not in first word; ignore */
- else
- *s = '#'; /* Don't try to parse shebang line */
- }
-#endif /* ALTERNATE_SHEBANG */
- if (!d
- && *s == '#'
- && ipathend > ipath
- && !PL_minus_c
- && !instr(s,"indir")
- && instr(PL_origargv[0],"perl"))
- {
- dVAR;
- char **newargv;
-
- *ipathend = '\0';
- s = ipathend + 1;
- while (s < PL_bufend && isSPACE(*s))
- s++;
- if (s < PL_bufend) {
- Newx(newargv,PL_origargc+3,char*);
- newargv[1] = s;
- while (s < PL_bufend && !isSPACE(*s))
- s++;
- *s = '\0';
- Copy(PL_origargv+1, newargv+2, PL_origargc+1, char*);
- }
- else
- newargv = PL_origargv;
- newargv[0] = ipath;
- PERL_FPU_PRE_EXEC
- PerlProc_execv(ipath, EXEC_ARGV_CAST(newargv));
- PERL_FPU_POST_EXEC
- Perl_croak(aTHX_ "Can't exec %s", ipath);
- }
- if (d) {
- while (*d && !isSPACE(*d))
- d++;
- while (SPACE_OR_TAB(*d))
- d++;
-
- if (*d++ == '-') {
- const bool switches_done = PL_doswitches;
- const U32 oldpdb = PL_perldb;
- const bool oldn = PL_minus_n;
- const bool oldp = PL_minus_p;
- const char *d1 = d;
-
- do {
- bool baduni = FALSE;
- if (*d1 == 'C') {
- const char *d2 = d1 + 1;
- if (parse_unicode_opts((const char **)&d2)
- != PL_unicode)
- baduni = TRUE;
- }
- if (baduni || isALPHA_FOLD_EQ(*d1, 'M')) {
- const char * const m = d1;
- while (*d1 && !isSPACE(*d1))
- d1++;
- Perl_croak(aTHX_ "Too late for \"-%.*s\" option",
- (int)(d1 - m), m);
- }
- d1 = moreswitches(d1);
- } while (d1);
- if (PL_doswitches && !switches_done) {
- int argc = PL_origargc;
- char **argv = PL_origargv;
- do {
- argc--,argv++;
- } while (argc && argv[0][0] == '-' && argv[0][1]);
- init_argv_symbols(argc,argv);
- }
- if ( (PERLDB_LINE_OR_SAVESRC && !oldpdb)
- || ((PL_minus_n || PL_minus_p) && !(oldn || oldp)))
- /* if we have already added "LINE: while (<>) {",
- we must not do it again */
- {
- SvPVCLEAR(PL_linestr);
- PL_oldoldbufptr = PL_oldbufptr = s = PL_linestart = SvPVX(PL_linestr);
- PL_bufend = SvPVX(PL_linestr) + SvCUR(PL_linestr);
- PL_last_lop = PL_last_uni = NULL;
- PL_preambled = FALSE;
- if (PERLDB_LINE_OR_SAVESRC)
- (void)gv_fetchfile(PL_origfilename);
- goto retry;
- }
- }
- }
- }
- }
- if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
- PL_lex_state = LEX_FORMLINE;
- force_next(FORMRBRACK);
- TOKEN(';');
- }
- goto retry;
case '\r':
#ifdef PERL_STRICT_CR
Perl_warn(aTHX_ "Illegal character \\%03o (carriage return)", '\r');
@@ -5686,479 +8781,50 @@ Perl_yylex(pTHX)
case ' ': case '\t': case '\f': case '\v':
s++;
goto retry;
- case '#':
- case '\n':
- if (PL_lex_state != LEX_NORMAL
- || (PL_in_eval && !PL_rsfp && !PL_parser->filtered))
- {
- const bool in_comment = *s == '#';
- if (*s == '#' && s == PL_linestart && PL_in_eval
- && !PL_rsfp && !PL_parser->filtered) {
- /* handle eval qq[#line 1 "foo"\n ...] */
- CopLINE_dec(PL_curcop);
- incline(s, PL_bufend);
- }
- d = s;
- while (d < PL_bufend && *d != '\n')
- d++;
- if (d < PL_bufend)
- d++;
- s = d;
- if (in_comment && d == PL_bufend
- && PL_lex_state == LEX_INTERPNORMAL
- && PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr
- && SvEVALED(PL_lex_repl) && d[-1] == '}') s--;
- else
- incline(s, PL_bufend);
- if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) {
- PL_lex_state = LEX_FORMLINE;
- force_next(FORMRBRACK);
- TOKEN(';');
- }
- }
- else {
- while (s < PL_bufend && *s != '\n')
- s++;
- if (s < PL_bufend)
- {
- s++;
- if (s < PL_bufend)
- incline(s, PL_bufend);
- }
- }
- goto retry;
- case '-':
- if (s[1] && isALPHA(s[1]) && !isWORDCHAR(s[2])) {
- I32 ftst = 0;
- char tmp;
- s++;
- PL_bufptr = s;
- tmp = *s++;
-
- while (s < PL_bufend && SPACE_OR_TAB(*s))
- s++;
+ case '#':
+ case '\n': {
+ const bool needs_semicolon = yyl_eol_needs_semicolon(aTHX_ &s);
+ if (needs_semicolon)
+ TOKEN(';');
+ else
+ goto retry;
+ }
- if (memBEGINs(s, (STRLEN) (PL_bufend - s), "=>")) {
- s = force_word(PL_bufptr,BAREWORD,FALSE,FALSE);
- DEBUG_T( { printbuf("### Saw unary minus before =>, forcing word %s\n", s); } );
- OPERATOR('-'); /* unary minus */
- }
- switch (tmp) {
- case 'r': ftst = OP_FTEREAD; break;
- case 'w': ftst = OP_FTEWRITE; break;
- case 'x': ftst = OP_FTEEXEC; break;
- case 'o': ftst = OP_FTEOWNED; break;
- case 'R': ftst = OP_FTRREAD; break;
- case 'W': ftst = OP_FTRWRITE; break;
- case 'X': ftst = OP_FTREXEC; break;
- case 'O': ftst = OP_FTROWNED; break;
- case 'e': ftst = OP_FTIS; break;
- case 'z': ftst = OP_FTZERO; break;
- case 's': ftst = OP_FTSIZE; break;
- case 'f': ftst = OP_FTFILE; break;
- case 'd': ftst = OP_FTDIR; break;
- case 'l': ftst = OP_FTLINK; break;
- case 'p': ftst = OP_FTPIPE; break;
- case 'S': ftst = OP_FTSOCK; break;
- case 'u': ftst = OP_FTSUID; break;
- case 'g': ftst = OP_FTSGID; break;
- case 'k': ftst = OP_FTSVTX; break;
- case 'b': ftst = OP_FTBLK; break;
- case 'c': ftst = OP_FTCHR; break;
- case 't': ftst = OP_FTTTY; break;
- case 'T': ftst = OP_FTTEXT; break;
- case 'B': ftst = OP_FTBINARY; break;
- case 'M': case 'A': case 'C':
- gv_fetchpvs("\024", GV_ADD|GV_NOTQUAL, SVt_PV);
- switch (tmp) {
- case 'M': ftst = OP_FTMTIME; break;
- case 'A': ftst = OP_FTATIME; break;
- case 'C': ftst = OP_FTCTIME; break;
- default: break;
- }
- break;
- default:
- break;
- }
- if (ftst) {
- PL_last_uni = PL_oldbufptr;
- PL_last_lop_op = (OPCODE)ftst;
- DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### Saw file test %c\n", (int)tmp);
- } );
- FTST(ftst);
- }
- else {
- /* Assume it was a minus followed by a one-letter named
- * subroutine call (or a -bareword), then. */
- DEBUG_T( { PerlIO_printf(Perl_debug_log,
- "### '-%c' looked like a file test but was not\n",
- (int) tmp);
- } );
- s = --PL_bufptr;
- }
- }
- {
- const char tmp = *s++;
- if (*s == tmp) {
- s++;
- if (PL_expect == XOPERATOR)
- TERM(POSTDEC);
- else
- OPERATOR(PREDEC);
- }
- else if (*s == '>') {
- s++;
- s = skipspace(s);
- if (((*s == '$' || *s == '&') && s[1] == '*')
- ||(*s == '$' && s[1] == '#' && s[2] == '*')
- ||((*s == '@' || *s == '%') && strchr("*[{", s[1]))
- ||(*s == '*' && (s[1] == '*' || s[1] == '{'))
- )
- {
- PL_expect = XPOSTDEREF;
- TOKEN(ARROW);
- }
- if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
- s = force_word(s,METHOD,FALSE,TRUE);
- TOKEN(ARROW);
- }
- else if (*s == '$')
- OPERATOR(ARROW);
- else
- TERM(ARROW);
- }
- if (PL_expect == XOPERATOR) {
- if (*s == '='
- && !PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
- {
- s--;
- TOKEN(0);
- }
- Aop(OP_SUBTRACT);
- }
- else {
- if (isSPACE(*s) || !isSPACE(*PL_bufptr))
- check_uni();
- OPERATOR('-'); /* unary minus */
- }
- }
+ case '-':
+ return yyl_hyphen(aTHX_ s);
case '+':
- {
- const char tmp = *s++;
- if (*s == tmp) {
- s++;
- if (PL_expect == XOPERATOR)
- TERM(POSTINC);
- else
- OPERATOR(PREINC);
- }
- if (PL_expect == XOPERATOR) {
- if (*s == '='
- && !PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
- {
- s--;
- TOKEN(0);
- }
- Aop(OP_ADD);
- }
- else {
- if (isSPACE(*s) || !isSPACE(*PL_bufptr))
- check_uni();
- OPERATOR('+');
- }
- }
+ return yyl_plus(aTHX_ s);
case '*':
- if (PL_expect == XPOSTDEREF) POSTDEREF('*');
- if (PL_expect != XOPERATOR) {
- s = scan_ident(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE);
- PL_expect = XOPERATOR;
- force_ident(PL_tokenbuf, '*');
- if (!*PL_tokenbuf)
- PREREF('*');
- TERM('*');
- }
- s++;
- if (*s == '*') {
- s++;
- if (*s == '=' && !PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
- {
- s -= 2;
- TOKEN(0);
- }
- PWop(OP_POW);
- }
- if (*s == '='
- && !PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
- {
- s--;
- TOKEN(0);
- }
- PL_parser->saw_infix_sigil = 1;
- Mop(OP_MULTIPLY);
+ return yyl_star(aTHX_ s);
case '%':
- {
- if (PL_expect == XOPERATOR) {
- if (s[1] == '='
- && !PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
- {
- TOKEN(0);
- }
- ++s;
- PL_parser->saw_infix_sigil = 1;
- Mop(OP_MODULO);
- }
- else if (PL_expect == XPOSTDEREF) POSTDEREF('%');
- PL_tokenbuf[0] = '%';
- s = scan_ident(s, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
- pl_yylval.ival = 0;
- if (!PL_tokenbuf[1]) {
- PREREF('%');
- }
- if ( (PL_expect != XREF || PL_oldoldbufptr == PL_last_lop)
- && intuit_more(s, PL_bufend)) {
- if (*s == '[')
- PL_tokenbuf[0] = '@';
- }
- PL_expect = XOPERATOR;
- force_ident_maybe_lex('%');
- TERM('%');
- }
+ return yyl_percent(aTHX_ s);
+
case '^':
- d = s;
- bof = FEATURE_BITWISE_IS_ENABLED;
- if (bof && s[1] == '.')
- s++;
- if (!PL_lex_allbrackets && PL_lex_fakeeof >=
- (s[1] == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE))
- {
- s = d;
- TOKEN(0);
- }
- s++;
- BOop(bof ? d == s-2 ? OP_SBIT_XOR : OP_NBIT_XOR : OP_BIT_XOR);
+ return yyl_caret(aTHX_ s);
+
case '[':
- if (PL_lex_brackets > 100)
- Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
- PL_lex_brackstack[PL_lex_brackets++] = 0;
- PL_lex_allbrackets++;
- {
- const char tmp = *s++;
- OPERATOR(tmp);
- }
+ return yyl_leftsquare(aTHX_ s);
+
case '~':
- if (s[1] == '~'
- && (PL_expect == XOPERATOR || PL_expect == XTERMORDORDOR))
- {
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- TOKEN(0);
- s += 2;
- Perl_ck_warner_d(aTHX_
- packWARN(WARN_EXPERIMENTAL__SMARTMATCH),
- "Smartmatch is experimental");
- Eop(OP_SMARTMATCH);
- }
- s++;
- if ((bof = FEATURE_BITWISE_IS_ENABLED) && *s == '.') {
- s++;
- BCop(OP_SCOMPLEMENT);
- }
- BCop(bof ? OP_NCOMPLEMENT : OP_COMPLEMENT);
+ return yyl_tilde(aTHX_ s);
+
case ',':
if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMMA)
TOKEN(0);
s++;
OPERATOR(',');
case ':':
- if (s[1] == ':') {
- len = 0;
- goto just_a_word_zero_gv;
- }
- s++;
- {
- OP *attrs;
+ if (s[1] == ':')
+ return yyl_just_a_word(aTHX_ s, 0, 0, no_code);
+ return yyl_colon(aTHX_ s + 1);
- switch (PL_expect) {
- case XOPERATOR:
- if (!PL_in_my || PL_lex_state != LEX_NORMAL)
- break;
- PL_bufptr = s; /* update in case we back off */
- if (*s == '=') {
- Perl_croak(aTHX_
- "Use of := for an empty attribute list is not allowed");
- }
- goto grabattrs;
- case XATTRBLOCK:
- PL_expect = XBLOCK;
- goto grabattrs;
- case XATTRTERM:
- PL_expect = XTERMBLOCK;
- grabattrs:
- /* NB: as well as parsing normal attributes, we also end up
- * here if there is something looking like attributes
- * following a signature (which is illegal, but used to be
- * legal in 5.20..5.26). If the latter, we still parse the
- * attributes so that error messages(s) are less confusing,
- * but ignore them (parser->sig_seen).
- */
- s = skipspace(s);
- attrs = NULL;
- while (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
- bool sig = PL_parser->sig_seen;
- I32 tmp;
- SV *sv;
- d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
- if (isLOWER(*s) && (tmp = keyword(PL_tokenbuf, len, 0))) {
- if (tmp < 0) tmp = -tmp;
- switch (tmp) {
- case KEY_or:
- case KEY_and:
- case KEY_for:
- case KEY_foreach:
- case KEY_unless:
- case KEY_if:
- case KEY_while:
- case KEY_until:
- goto got_attrs;
- default:
- break;
- }
- }
- sv = newSVpvn_flags(s, len, UTF ? SVf_UTF8 : 0);
- if (*d == '(') {
- d = scan_str(d,TRUE,TRUE,FALSE,NULL);
- if (!d) {
- if (attrs)
- op_free(attrs);
- sv_free(sv);
- Perl_croak(aTHX_ "Unterminated attribute parameter in attribute list");
- }
- COPLINE_SET_FROM_MULTI_END;
- }
- if (PL_lex_stuff) {
- sv_catsv(sv, PL_lex_stuff);
- attrs = op_append_elem(OP_LIST, attrs,
- newSVOP(OP_CONST, 0, sv));
- SvREFCNT_dec_NN(PL_lex_stuff);
- PL_lex_stuff = NULL;
- }
- else {
- /* NOTE: any CV attrs applied here need to be part of
- the CVf_BUILTIN_ATTRS define in cv.h! */
- if (!PL_in_my && memEQs(SvPVX(sv), len, "lvalue")) {
- sv_free(sv);
- if (!sig)
- CvLVALUE_on(PL_compcv);
- }
- else if (!PL_in_my && memEQs(SvPVX(sv), len, "method")) {
- sv_free(sv);
- if (!sig)
- CvMETHOD_on(PL_compcv);
- }
- else if (!PL_in_my && memEQs(SvPVX(sv), len, "const"))
- {
- sv_free(sv);
- if (!sig) {
- Perl_ck_warner_d(aTHX_
- packWARN(WARN_EXPERIMENTAL__CONST_ATTR),
- ":const is experimental"
- );
- CvANONCONST_on(PL_compcv);
- if (!CvANON(PL_compcv))
- yyerror(":const is not permitted on named "
- "subroutines");
- }
- }
- /* After we've set the flags, it could be argued that
- we don't need to do the attributes.pm-based setting
- process, and shouldn't bother appending recognized
- flags. To experiment with that, uncomment the
- following "else". (Note that's already been
- uncommented. That keeps the above-applied built-in
- attributes from being intercepted (and possibly
- rejected) by a package's attribute routines, but is
- justified by the performance win for the common case
- of applying only built-in attributes.) */
- else
- attrs = op_append_elem(OP_LIST, attrs,
- newSVOP(OP_CONST, 0,
- sv));
- }
- s = skipspace(d);
- if (*s == ':' && s[1] != ':')
- s = skipspace(s+1);
- else if (s == d)
- break; /* require real whitespace or :'s */
- /* XXX losing whitespace on sequential attributes here */
- }
- {
- if (*s != ';'
- && *s != '}'
- && !(PL_expect == XOPERATOR
- ? (*s == '=' || *s == ')')
- : (*s == '{' || *s == '(')))
- {
- const char q = ((*s == '\'') ? '"' : '\'');
- /* If here for an expression, and parsed no attrs, back
- off. */
- if (PL_expect == XOPERATOR && !attrs) {
- s = PL_bufptr;
- break;
- }
- /* MUST advance bufptr here to avoid bogus "at end of line"
- context messages from yyerror().
- */
- PL_bufptr = s;
- yyerror( (const char *)
- (*s
- ? Perl_form(aTHX_ "Invalid separator character "
- "%c%c%c in attribute list", q, *s, q)
- : "Unterminated attribute list" ) );
- if (attrs)
- op_free(attrs);
- OPERATOR(':');
- }
- }
- got_attrs:
- if (PL_parser->sig_seen) {
- /* see comment about about sig_seen and parser error
- * handling */
- if (attrs)
- op_free(attrs);
- Perl_croak(aTHX_ "Subroutine attributes must come "
- "before the signature");
- }
- if (attrs) {
- NEXTVAL_NEXTTOKE.opval = attrs;
- force_next(THING);
- }
- TOKEN(COLONATTR);
- }
- }
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_CLOSING) {
- s--;
- TOKEN(0);
- }
- PL_lex_allbrackets--;
- OPERATOR(':');
case '(':
- s++;
- if (PL_last_lop == PL_oldoldbufptr || PL_last_uni == PL_oldoldbufptr)
- PL_oldbufptr = PL_oldoldbufptr; /* allow print(STDOUT 123) */
- else
- PL_expect = XTERM;
- s = skipspace(s);
- PL_lex_allbrackets++;
- TOKEN('(');
+ return yyl_leftparen(aTHX_ s + 1);
+
case ';':
if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
TOKEN(0);
@@ -6166,360 +8832,46 @@ Perl_yylex(pTHX)
s++;
PL_expect = XSTATE;
TOKEN(';');
+
case ')':
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_CLOSING)
- TOKEN(0);
- s++;
- PL_lex_allbrackets--;
- s = skipspace(s);
- if (*s == '{')
- PREBLOCK(')');
- TERM(')');
+ return yyl_rightparen(aTHX_ s);
+
case ']':
- if (PL_lex_brackets && PL_lex_brackstack[PL_lex_brackets-1] == XFAKEEOF)
- TOKEN(0);
- s++;
- if (PL_lex_brackets <= 0)
- /* diag_listed_as: Unmatched right %s bracket */
- yyerror("Unmatched right square bracket");
- else
- --PL_lex_brackets;
- PL_lex_allbrackets--;
- if (PL_lex_state == LEX_INTERPNORMAL) {
- if (PL_lex_brackets == 0) {
- if (*s == '-' && s[1] == '>')
- PL_lex_state = LEX_INTERPENDMAYBE;
- else if (*s != '[' && *s != '{')
- PL_lex_state = LEX_INTERPEND;
- }
- }
- TERM(']');
+ return yyl_rightsquare(aTHX_ s);
+
case '{':
- s++;
- leftbracket:
- if (PL_lex_brackets > 100) {
- Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
- }
- switch (PL_expect) {
- case XTERM:
- case XTERMORDORDOR:
- PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
- PL_lex_allbrackets++;
- OPERATOR(HASHBRACK);
- case XOPERATOR:
- while (s < PL_bufend && SPACE_OR_TAB(*s))
- s++;
- d = s;
- PL_tokenbuf[0] = '\0';
- if (d < PL_bufend && *d == '-') {
- PL_tokenbuf[0] = '-';
- d++;
- while (d < PL_bufend && SPACE_OR_TAB(*d))
- d++;
- }
- if (d < PL_bufend && isIDFIRST_lazy_if_safe(d, PL_bufend, UTF)) {
- d = scan_word(d, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
- FALSE, &len);
- while (d < PL_bufend && SPACE_OR_TAB(*d))
- d++;
- if (*d == '}') {
- const char minus = (PL_tokenbuf[0] == '-');
- s = force_word(s + minus, BAREWORD, FALSE, TRUE);
- if (minus)
- force_next('-');
- }
- }
- /* FALLTHROUGH */
- case XATTRTERM:
- case XTERMBLOCK:
- PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
- PL_lex_allbrackets++;
- PL_expect = XSTATE;
- break;
- case XATTRBLOCK:
- case XBLOCK:
- PL_lex_brackstack[PL_lex_brackets++] = XSTATE;
- PL_lex_allbrackets++;
- PL_expect = XSTATE;
- break;
- case XBLOCKTERM:
- PL_lex_brackstack[PL_lex_brackets++] = XTERM;
- PL_lex_allbrackets++;
- PL_expect = XSTATE;
- break;
- default: {
- const char *t;
- if (PL_oldoldbufptr == PL_last_lop)
- PL_lex_brackstack[PL_lex_brackets++] = XTERM;
- else
- PL_lex_brackstack[PL_lex_brackets++] = XOPERATOR;
- PL_lex_allbrackets++;
- s = skipspace(s);
- if (*s == '}') {
- if (PL_expect == XREF && PL_lex_state == LEX_INTERPNORMAL) {
- PL_expect = XTERM;
- /* This hack is to get the ${} in the message. */
- PL_bufptr = s+1;
- yyerror("syntax error");
- break;
- }
- OPERATOR(HASHBRACK);
- }
- if (PL_expect == XREF && PL_oldoldbufptr != PL_last_lop) {
- /* ${...} or @{...} etc., but not print {...}
- * Skip the disambiguation and treat this as a block.
- */
- goto block_expectation;
- }
- /* This hack serves to disambiguate a pair of curlies
- * as being a block or an anon hash. Normally, expectation
- * determines that, but in cases where we're not in a
- * position to expect anything in particular (like inside
- * eval"") we have to resolve the ambiguity. This code
- * covers the case where the first term in the curlies is a
- * quoted string. Most other cases need to be explicitly
- * disambiguated by prepending a "+" before the opening
- * curly in order to force resolution as an anon hash.
- *
- * XXX should probably propagate the outer expectation
- * into eval"" to rely less on this hack, but that could
- * potentially break current behavior of eval"".
- * GSAR 97-07-21
- */
- t = s;
- if (*s == '\'' || *s == '"' || *s == '`') {
- /* common case: get past first string, handling escapes */
- for (t++; t < PL_bufend && *t != *s;)
- if (*t++ == '\\')
- t++;
- t++;
- }
- else if (*s == 'q') {
- if (++t < PL_bufend
- && (!isWORDCHAR(*t)
- || ((*t == 'q' || *t == 'x') && ++t < PL_bufend
- && !isWORDCHAR(*t))))
- {
- /* skip q//-like construct */
- const char *tmps;
- char open, close, term;
- I32 brackets = 1;
-
- while (t < PL_bufend && isSPACE(*t))
- t++;
- /* check for q => */
- if (t+1 < PL_bufend && t[0] == '=' && t[1] == '>') {
- OPERATOR(HASHBRACK);
- }
- term = *t;
- open = term;
- if (term && (tmps = strchr("([{< )]}> )]}>",term)))
- term = tmps[5];
- close = term;
- if (open == close)
- for (t++; t < PL_bufend; t++) {
- if (*t == '\\' && t+1 < PL_bufend && open != '\\')
- t++;
- else if (*t == open)
- break;
- }
- else {
- for (t++; t < PL_bufend; t++) {
- if (*t == '\\' && t+1 < PL_bufend)
- t++;
- else if (*t == close && --brackets <= 0)
- break;
- else if (*t == open)
- brackets++;
- }
- }
- t++;
- }
- else
- /* skip plain q word */
- while ( t < PL_bufend
- && isWORDCHAR_lazy_if_safe(t, PL_bufend, UTF))
- {
- t += UTF ? UTF8SKIP(t) : 1;
- }
- }
- else if (isWORDCHAR_lazy_if_safe(t, PL_bufend, UTF)) {
- t += UTF ? UTF8SKIP(t) : 1;
- while ( t < PL_bufend
- && isWORDCHAR_lazy_if_safe(t, PL_bufend, UTF))
- {
- t += UTF ? UTF8SKIP(t) : 1;
- }
- }
- while (t < PL_bufend && isSPACE(*t))
- t++;
- /* if comma follows first term, call it an anon hash */
- /* XXX it could be a comma expression with loop modifiers */
- if (t < PL_bufend && ((*t == ',' && (*s == 'q' || !isLOWER(*s)))
- || (*t == '=' && t[1] == '>')))
- OPERATOR(HASHBRACK);
- if (PL_expect == XREF)
- {
- block_expectation:
- /* If there is an opening brace or 'sub:', treat it
- as a term to make ${{...}}{k} and &{sub:attr...}
- dwim. Otherwise, treat it as a statement, so
- map {no strict; ...} works.
- */
- s = skipspace(s);
- if (*s == '{') {
- PL_expect = XTERM;
- break;
- }
- if (memBEGINs(s, (STRLEN) (PL_bufend - s), "sub")) {
- PL_bufptr = s;
- d = s + 3;
- d = skipspace(d);
- s = PL_bufptr;
- if (*d == ':') {
- PL_expect = XTERM;
- break;
- }
- }
- PL_expect = XSTATE;
- }
- else {
- PL_lex_brackstack[PL_lex_brackets-1] = XSTATE;
- PL_expect = XSTATE;
- }
- }
- break;
- }
- pl_yylval.ival = CopLINE(PL_curcop);
- PL_copline = NOLINE; /* invalidate current command line number */
- TOKEN(formbrack ? '=' : '{');
+ return yyl_leftcurly(aTHX_ s + 1, 0);
+
case '}':
if (PL_lex_brackets && PL_lex_brackstack[PL_lex_brackets-1] == XFAKEEOF)
TOKEN(0);
- rightbracket:
- assert(s != PL_bufend);
- s++;
- if (PL_lex_brackets <= 0)
- /* diag_listed_as: Unmatched right %s bracket */
- yyerror("Unmatched right curly bracket");
- else
- PL_expect = (expectation)PL_lex_brackstack[--PL_lex_brackets];
- PL_lex_allbrackets--;
- if (PL_lex_state == LEX_INTERPNORMAL) {
- if (PL_lex_brackets == 0) {
- if (PL_expect & XFAKEBRACK) {
- PL_expect &= XENUMMASK;
- PL_lex_state = LEX_INTERPEND;
- PL_bufptr = s;
- return yylex(); /* ignore fake brackets */
- }
- if (PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr
- && SvEVALED(PL_lex_repl))
- PL_lex_state = LEX_INTERPEND;
- else if (*s == '-' && s[1] == '>')
- PL_lex_state = LEX_INTERPENDMAYBE;
- else if (*s != '[' && *s != '{')
- PL_lex_state = LEX_INTERPEND;
- }
- }
- if (PL_expect & XFAKEBRACK) {
- PL_expect &= XENUMMASK;
- PL_bufptr = s;
- return yylex(); /* ignore fake brackets */
- }
- force_next(formbrack ? '.' : '}');
- if (formbrack) LEAVE_with_name("lex_format");
- if (formbrack == 2) { /* means . where arguments were expected */
- force_next(';');
- TOKEN(FORMRBRACK);
- }
- TOKEN(';');
- case '&':
- if (PL_expect == XPOSTDEREF) POSTDEREF('&');
- s++;
- if (*s++ == '&') {
- if (!PL_lex_allbrackets && PL_lex_fakeeof >=
- (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC)) {
- s -= 2;
- TOKEN(0);
- }
- AOPERATOR(ANDAND);
- }
- s--;
- if (PL_expect == XOPERATOR) {
- if ( PL_bufptr == PL_linestart
- && ckWARN(WARN_SEMICOLON)
- && isIDFIRST_lazy_if_safe(s, PL_bufend, UTF))
- {
- CopLINE_dec(PL_curcop);
- Perl_warner(aTHX_ packWARN(WARN_SEMICOLON), "%s", PL_warn_nosemi);
- CopLINE_inc(PL_curcop);
- }
- d = s;
- if ((bof = FEATURE_BITWISE_IS_ENABLED) && *s == '.')
- s++;
- if (!PL_lex_allbrackets && PL_lex_fakeeof >=
- (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE)) {
- s = d;
- s--;
- TOKEN(0);
- }
- if (d == s) {
- PL_parser->saw_infix_sigil = 1;
- BAop(bof ? OP_NBIT_AND : OP_BIT_AND);
- }
- else
- BAop(OP_SBIT_AND);
- }
+ return yyl_rightcurly(aTHX_ s, 0);
- PL_tokenbuf[0] = '&';
- s = scan_ident(s - 1, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, TRUE);
- pl_yylval.ival = (OPpENTERSUB_AMPER<<8);
- if (PL_tokenbuf[1]) {
- force_ident_maybe_lex('&');
- }
- else
- PREREF('&');
- TERM('&');
+ case '&':
+ return yyl_ampersand(aTHX_ s);
case '|':
- s++;
- if (*s++ == '|') {
- if (!PL_lex_allbrackets && PL_lex_fakeeof >=
- (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC)) {
- s -= 2;
- TOKEN(0);
- }
- AOPERATOR(OROR);
- }
- s--;
- d = s;
- if ((bof = FEATURE_BITWISE_IS_ENABLED) && *s == '.')
- s++;
- if (!PL_lex_allbrackets && PL_lex_fakeeof >=
- (*s == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_BITWISE)) {
- s = d - 1;
- TOKEN(0);
- }
- BOop(bof ? s == d ? OP_NBIT_OR : OP_SBIT_OR : OP_BIT_OR);
+ return yyl_verticalbar(aTHX_ s);
+
case '=':
+ if (s[1] == '=' && (s == PL_linestart || s[-1] == '\n')
+ && memBEGINs(s + 2, (STRLEN) (PL_bufend - (s + 2)), "====="))
+ {
+ s = vcs_conflict_marker(s + 7);
+ goto retry;
+ }
+
s++;
{
const char tmp = *s++;
if (tmp == '=') {
- if ( (s == PL_linestart+2 || s[-3] == '\n')
- && memBEGINs(s, (STRLEN) (PL_bufend - s), "====="))
- {
- s = vcs_conflict_marker(s + 5);
- goto retry;
- }
if (!PL_lex_allbrackets
&& PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
{
s -= 2;
TOKEN(0);
}
- Eop(OP_EQ);
+ ChEop(OP_EQ);
}
if (tmp == '>') {
if (!PL_lex_allbrackets
@@ -6533,7 +8885,7 @@ Perl_yylex(pTHX)
if (tmp == '~')
PMop(OP_MATCH);
if (tmp && isSPACE(*s) && ckWARN(WARN_SYNTAX)
- && strchr("+-*/%.^&|<",tmp))
+ && memCHRs("+-*/%.^&|<",tmp))
Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
"Reversed %c= operator",(int)tmp);
s--;
@@ -6576,14 +8928,13 @@ Perl_yylex(pTHX)
#endif
t++;
if (*t == '\n' || *t == '#') {
- formbrack = 1;
ENTER_with_name("lex_format");
SAVEI8(PL_parser->form_lex_state);
SAVEI32(PL_lex_formbrack);
PL_parser->form_lex_state = PL_lex_state;
PL_lex_formbrack = PL_lex_brackets + 1;
PL_parser->sub_error_count = PL_error_count;
- goto leftbracket;
+ return yyl_leftcurly(aTHX_ s, 1);
}
}
if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN) {
@@ -6592,371 +8943,36 @@ Perl_yylex(pTHX)
}
pl_yylval.ival = 0;
OPERATOR(ASSIGNOP);
- case '!':
- s++;
- {
- const char tmp = *s++;
- if (tmp == '=') {
- /* was this !=~ where !~ was meant?
- * warn on m:!=~\s+([/?]|[msy]\W|tr\W): */
- if (*s == '~' && ckWARN(WARN_SYNTAX)) {
- const char *t = s+1;
-
- while (t < PL_bufend && isSPACE(*t))
- ++t;
+ case '!':
+ return yyl_bang(aTHX_ s + 1);
- if (*t == '/' || *t == '?'
- || ((*t == 'm' || *t == 's' || *t == 'y')
- && !isWORDCHAR(t[1]))
- || (*t == 't' && t[1] == 'r' && !isWORDCHAR(t[2])))
- Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
- "!=~ should be !~");
- }
- if (!PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- {
- s -= 2;
- TOKEN(0);
- }
- Eop(OP_NE);
- }
- if (tmp == '~')
- PMop(OP_NOT);
- }
- s--;
- OPERATOR('!');
case '<':
- if (PL_expect != XOPERATOR) {
- if (s[1] != '<' && !memchr(s,'>', PL_bufend - s))
- check_uni();
- if (s[1] == '<' && s[2] != '>') {
- if ( (s == PL_linestart || s[-1] == '\n')
- && memBEGINs(s+2, (STRLEN) (PL_bufend - (s+2)), "<<<<<"))
- {
- s = vcs_conflict_marker(s + 7);
- goto retry;
- }
- s = scan_heredoc(s);
- }
- else
- s = scan_inputsymbol(s);
- PL_expect = XOPERATOR;
- TOKEN(sublex_start());
- }
- s++;
- {
- char tmp = *s++;
- if (tmp == '<') {
- if ( (s == PL_linestart+2 || s[-3] == '\n')
- && memBEGINs(s, (STRLEN) (PL_bufend - s), "<<<<<"))
- {
- s = vcs_conflict_marker(s + 5);
- goto retry;
- }
- if (*s == '=' && !PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
- {
- s -= 2;
- TOKEN(0);
- }
- SHop(OP_LEFT_SHIFT);
- }
- if (tmp == '=') {
- tmp = *s++;
- if (tmp == '>') {
- if (!PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- {
- s -= 3;
- TOKEN(0);
- }
- Eop(OP_NCMP);
- }
- s--;
- if (!PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- {
- s -= 2;
- TOKEN(0);
- }
- Rop(OP_LE);
- }
- }
- s--;
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
- s--;
- TOKEN(0);
- }
- Rop(OP_LT);
- case '>':
- s++;
- {
- const char tmp = *s++;
- if (tmp == '>') {
- if ( (s == PL_linestart+2 || s[-3] == '\n')
- && memBEGINs(s, (STRLEN) (PL_bufend - s), ">>>>>"))
- {
- s = vcs_conflict_marker(s + 5);
- goto retry;
- }
- if (*s == '=' && !PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
- {
- s -= 2;
- TOKEN(0);
- }
- SHop(OP_RIGHT_SHIFT);
- }
- else if (tmp == '=') {
- if (!PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- {
- s -= 2;
- TOKEN(0);
- }
- Rop(OP_GE);
- }
- }
- s--;
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE) {
- s--;
- TOKEN(0);
- }
- Rop(OP_GT);
-
- case '$':
- CLINE;
-
- if (PL_expect == XPOSTDEREF) {
- if (s[1] == '#') {
- s++;
- POSTDEREF(DOLSHARP);
- }
- POSTDEREF('$');
- }
-
- if ( s[1] == '#'
- && ( isIDFIRST_lazy_if_safe(s+2, PL_bufend, UTF)
- || strchr("{$:+-@", s[2])))
+ if (s[1] == '<' && (s == PL_linestart || s[-1] == '\n')
+ && memBEGINs(s + 2, (STRLEN) (PL_bufend - (s + 2)), "<<<<<"))
{
- PL_tokenbuf[0] = '@';
- s = scan_ident(s + 1, PL_tokenbuf + 1,
- sizeof PL_tokenbuf - 1, FALSE);
- if (PL_expect == XOPERATOR) {
- d = s;
- if (PL_bufptr > s) {
- d = PL_bufptr-1;
- PL_bufptr = PL_oldbufptr;
- }
- no_op("Array length", d);
- }
- if (!PL_tokenbuf[1])
- PREREF(DOLSHARP);
- PL_expect = XOPERATOR;
- force_ident_maybe_lex('#');
- TOKEN(DOLSHARP);
- }
-
- PL_tokenbuf[0] = '$';
- s = scan_ident(s, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
- if (PL_expect == XOPERATOR) {
- d = s;
- if (PL_bufptr > s) {
- d = PL_bufptr-1;
- PL_bufptr = PL_oldbufptr;
- }
- no_op("Scalar", d);
- }
- if (!PL_tokenbuf[1]) {
- if (s == PL_bufend)
- yyerror("Final $ should be \\$ or $name");
- PREREF('$');
- }
+ s = vcs_conflict_marker(s + 7);
+ goto retry;
+ }
+ return yyl_leftpointy(aTHX_ s);
- d = s;
- {
- const char tmp = *s;
- if (PL_lex_state == LEX_NORMAL || PL_lex_brackets)
- s = skipspace(s);
-
- if ( (PL_expect != XREF || PL_oldoldbufptr == PL_last_lop)
- && intuit_more(s, PL_bufend)) {
- if (*s == '[') {
- PL_tokenbuf[0] = '@';
- if (ckWARN(WARN_SYNTAX)) {
- char *t = s+1;
-
- while ( isSPACE(*t)
- || isWORDCHAR_lazy_if_safe(t, PL_bufend, UTF)
- || *t == '$')
- {
- t += UTF ? UTF8SKIP(t) : 1;
- }
- if (*t++ == ',') {
- PL_bufptr = skipspace(PL_bufptr); /* XXX can realloc */
- while (t < PL_bufend && *t != ']')
- t++;
- Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
- "Multidimensional syntax %" UTF8f " not supported",
- UTF8fARG(UTF,(int)((t - PL_bufptr) + 1), PL_bufptr));
- }
- }
- }
- else if (*s == '{') {
- char *t;
- PL_tokenbuf[0] = '%';
- if ( strEQ(PL_tokenbuf+1, "SIG")
- && ckWARN(WARN_SYNTAX)
- && (t = (char *) memchr(s, '}', PL_bufend - s))
- && (t = (char *) memchr(t, '=', PL_bufend - t)))
- {
- char tmpbuf[sizeof PL_tokenbuf];
- do {
- t++;
- } while (isSPACE(*t));
- if (isIDFIRST_lazy_if_safe(t, PL_bufend, UTF)) {
- STRLEN len;
- t = scan_word(t, tmpbuf, sizeof tmpbuf, TRUE,
- &len);
- while (isSPACE(*t))
- t++;
- if ( *t == ';'
- && get_cvn_flags(tmpbuf, len, UTF
- ? SVf_UTF8
- : 0))
- {
- Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
- "You need to quote \"%" UTF8f "\"",
- UTF8fARG(UTF, len, tmpbuf));
- }
- }
- }
- }
- }
+ case '>':
+ if (s[1] == '>' && (s == PL_linestart || s[-1] == '\n')
+ && memBEGINs(s + 2, (STRLEN) (PL_bufend - (s + 2)), ">>>>>"))
+ {
+ s = vcs_conflict_marker(s + 7);
+ goto retry;
+ }
+ return yyl_rightpointy(aTHX_ s + 1);
- PL_expect = XOPERATOR;
- if (PL_lex_state == LEX_NORMAL && isSPACE((char)tmp)) {
- const bool islop = (PL_last_lop == PL_oldoldbufptr);
- if (!islop || PL_last_lop_op == OP_GREPSTART)
- PL_expect = XOPERATOR;
- else if (strchr("$@\"'`q", *s))
- PL_expect = XTERM; /* e.g. print $fh "foo" */
- else if ( strchr("&*<%", *s)
- && isIDFIRST_lazy_if_safe(s+1, PL_bufend, UTF))
- {
- PL_expect = XTERM; /* e.g. print $fh &sub */
- }
- else if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
- char tmpbuf[sizeof PL_tokenbuf];
- int t2;
- scan_word(s, tmpbuf, sizeof tmpbuf, TRUE, &len);
- if ((t2 = keyword(tmpbuf, len, 0))) {
- /* binary operators exclude handle interpretations */
- switch (t2) {
- case -KEY_x:
- case -KEY_eq:
- case -KEY_ne:
- case -KEY_gt:
- case -KEY_lt:
- case -KEY_ge:
- case -KEY_le:
- case -KEY_cmp:
- break;
- default:
- PL_expect = XTERM; /* e.g. print $fh length() */
- break;
- }
- }
- else {
- PL_expect = XTERM; /* e.g. print $fh subr() */
- }
- }
- else if (isDIGIT(*s))
- PL_expect = XTERM; /* e.g. print $fh 3 */
- else if (*s == '.' && isDIGIT(s[1]))
- PL_expect = XTERM; /* e.g. print $fh .3 */
- else if ((*s == '?' || *s == '-' || *s == '+')
- && !isSPACE(s[1]) && s[1] != '=')
- PL_expect = XTERM; /* e.g. print $fh -1 */
- else if (*s == '/' && !isSPACE(s[1]) && s[1] != '='
- && s[1] != '/')
- PL_expect = XTERM; /* e.g. print $fh /.../
- XXX except DORDOR operator
- */
- else if (*s == '<' && s[1] == '<' && !isSPACE(s[2])
- && s[2] != '=')
- PL_expect = XTERM; /* print $fh <<"EOF" */
- }
- }
- force_ident_maybe_lex('$');
- TOKEN('$');
+ case '$':
+ return yyl_dollar(aTHX_ s);
case '@':
- if (PL_expect == XPOSTDEREF)
- POSTDEREF('@');
- PL_tokenbuf[0] = '@';
- s = scan_ident(s, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1, FALSE);
- if (PL_expect == XOPERATOR) {
- d = s;
- if (PL_bufptr > s) {
- d = PL_bufptr-1;
- PL_bufptr = PL_oldbufptr;
- }
- no_op("Array", d);
- }
- pl_yylval.ival = 0;
- if (!PL_tokenbuf[1]) {
- PREREF('@');
- }
- if (PL_lex_state == LEX_NORMAL)
- s = skipspace(s);
- if ( (PL_expect != XREF || PL_oldoldbufptr == PL_last_lop)
- && intuit_more(s, PL_bufend))
- {
- if (*s == '{')
- PL_tokenbuf[0] = '%';
-
- /* Warn about @ where they meant $. */
- if (*s == '[' || *s == '{') {
- if (ckWARN(WARN_SYNTAX)) {
- S_check_scalar_slice(aTHX_ s);
- }
- }
- }
- PL_expect = XOPERATOR;
- force_ident_maybe_lex('@');
- TERM('@');
+ return yyl_snail(aTHX_ s);
- case '/': /* may be division, defined-or, or pattern */
- if ((PL_expect == XOPERATOR || PL_expect == XTERMORDORDOR) && s[1] == '/') {
- if (!PL_lex_allbrackets && PL_lex_fakeeof >=
- (s[2] == '=' ? LEX_FAKEEOF_ASSIGN : LEX_FAKEEOF_LOGIC))
- TOKEN(0);
- s += 2;
- AOPERATOR(DORDOR);
- }
- else if (PL_expect == XOPERATOR) {
- s++;
- if (*s == '=' && !PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
- {
- s--;
- TOKEN(0);
- }
- Mop(OP_DIVIDE);
- }
- else {
- /* Disable warning on "study /blah/" */
- if ( PL_oldoldbufptr == PL_last_uni
- && ( *PL_last_uni != 's' || s - PL_last_uni < 5
- || memNE(PL_last_uni, "study", 5)
- || isWORDCHAR_lazy_if_safe(PL_last_uni+5, PL_bufend, UTF)
- ))
- check_uni();
- s = scan_pat(s,OP_MATCH);
- TERM(sublex_start());
- }
+ case '/': /* may be division, defined-or, or pattern */
+ return yyl_slash(aTHX_ s);
case '?': /* conditional */
s++;
@@ -6979,8 +8995,8 @@ Perl_yylex(pTHX)
&& (s == PL_linestart || s[-1] == '\n') )
{
PL_expect = XSTATE;
- formbrack = 2; /* dot seen where arguments expected */
- goto rightbracket;
+ /* formbrack==2 means dot seen where arguments expected */
+ return yyl_rightcurly(aTHX_ s, 2);
}
if (PL_expect == XSTATE && s[1] == '.' && s[2] == '.') {
s += 3;
@@ -7022,69 +9038,16 @@ Perl_yylex(pTHX)
TERM(THING);
case '\'':
- s = scan_str(s,FALSE,FALSE,FALSE,NULL);
- if (!s)
- missingterm(NULL, 0);
- COPLINE_SET_FROM_MULTI_END;
- DEBUG_T( { printbuf("### Saw string before %s\n", s); } );
- if (PL_expect == XOPERATOR) {
- no_op("String",s);
- }
- pl_yylval.ival = OP_CONST;
- TERM(sublex_start());
+ return yyl_sglquote(aTHX_ s);
case '"':
- s = scan_str(s,FALSE,FALSE,FALSE,NULL);
- DEBUG_T( {
- if (s)
- printbuf("### Saw string before %s\n", s);
- else
- PerlIO_printf(Perl_debug_log,
- "### Saw unterminated string\n");
- } );
- if (PL_expect == XOPERATOR) {
- no_op("String",s);
- }
- if (!s)
- missingterm(NULL, 0);
- pl_yylval.ival = OP_CONST;
- /* FIXME. I think that this can be const if char *d is replaced by
- more localised variables. */
- for (d = SvPV(PL_lex_stuff, len); len; len--, d++) {
- if (*d == '$' || *d == '@' || *d == '\\' || !UTF8_IS_INVARIANT((U8)*d)) {
- pl_yylval.ival = OP_STRINGIFY;
- break;
- }
- }
- if (pl_yylval.ival == OP_CONST)
- COPLINE_SET_FROM_MULTI_END;
- TERM(sublex_start());
+ return yyl_dblquote(aTHX_ s);
case '`':
- s = scan_str(s,FALSE,FALSE,FALSE,NULL);
- DEBUG_T( {
- if (s)
- printbuf("### Saw backtick string before %s\n", s);
- else
- PerlIO_printf(Perl_debug_log,
- "### Saw unterminated backtick string\n");
- } );
- if (PL_expect == XOPERATOR)
- no_op("Backticks",s);
- if (!s)
- missingterm(NULL, 0);
- pl_yylval.ival = OP_BACKTICK;
- TERM(sublex_start());
+ return yyl_backtick(aTHX_ s);
case '\\':
- s++;
- if (PL_lex_inwhat == OP_SUBST && PL_lex_repl == PL_linestr
- && isDIGIT(*s))
- Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX),"Can't use \\%c to mean $%c in expression",
- *s, *s);
- if (PL_expect == XOPERATOR)
- no_op("Backslash",s);
- OPERATOR(REFGEN);
+ return yyl_backslash(aTHX_ s + 1);
case 'v':
if (isDIGIT(s[1]) && PL_expect != XOPERATOR) {
@@ -7096,12 +9059,19 @@ Perl_yylex(pTHX)
TERM(THING);
}
else if ((*start == ':' && start[1] == ':')
- || (PL_expect == XSTATE && *start == ':'))
- goto keylookup;
+ || (PL_expect == XSTATE && *start == ':')) {
+ if ((tok = yyl_keylookup(aTHX_ s, gv)) != YYL_RETRY)
+ return tok;
+ goto retry_bufptr;
+ }
else if (PL_expect == XSTATE) {
d = start;
while (d < PL_bufend && isSPACE(*d)) d++;
- if (*d == ':') goto keylookup;
+ if (*d == ':') {
+ if ((tok = yyl_keylookup(aTHX_ s, gv)) != YYL_RETRY)
+ return tok;
+ goto retry_bufptr;
+ }
}
/* avoid v123abc() or $h{v1}, allow C<print v10;> */
if (!isALPHA(*start) && (PL_expect == XTERM
@@ -7115,13 +9085,18 @@ Perl_yylex(pTHX)
}
}
}
- goto keylookup;
+ if ((tok = yyl_keylookup(aTHX_ s, gv)) != YYL_RETRY)
+ return tok;
+ goto retry_bufptr;
+
case 'x':
if (isDIGIT(s[1]) && PL_expect == XOPERATOR) {
s++;
Mop(OP_REPEAT);
}
- goto keylookup;
+ if ((tok = yyl_keylookup(aTHX_ s, gv)) != YYL_RETRY)
+ return tok;
+ goto retry_bufptr;
case '_':
case 'a': case 'A':
@@ -7150,1866 +9125,341 @@ Perl_yylex(pTHX)
case 'X':
case 'y': case 'Y':
case 'z': case 'Z':
+ if ((tok = yyl_keylookup(aTHX_ s, gv)) != YYL_RETRY)
+ return tok;
+ goto retry_bufptr;
+ }
+}
- keylookup: {
- bool anydelim;
- bool lex;
- I32 tmp;
- SV *sv;
- CV *cv;
- PADOFFSET off;
- OP *rv2cv_op;
-
- lex = FALSE;
- orig_keyword = 0;
- off = 0;
- sv = NULL;
- cv = NULL;
- gv = NULL;
- gvp = NULL;
- rv2cv_op = NULL;
-
- PL_bufptr = s;
- s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
-
- /* Some keywords can be followed by any delimiter, including ':' */
- anydelim = word_takes_any_delimiter(PL_tokenbuf, len);
-
- /* x::* is just a word, unless x is "CORE" */
- if (!anydelim && *s == ':' && s[1] == ':') {
- if (memEQs(PL_tokenbuf, len, "CORE")) goto case_KEY_CORE;
- goto just_a_word;
- }
-
- d = s;
- while (d < PL_bufend && isSPACE(*d))
- d++; /* no comments skipped here, or s### is misparsed */
-
- /* Is this a word before a => operator? */
- if (*d == '=' && d[1] == '>') {
- fat_arrow:
- CLINE;
- pl_yylval.opval
- = newSVOP(OP_CONST, 0,
- S_newSV_maybe_utf8(aTHX_ PL_tokenbuf, len));
- pl_yylval.opval->op_private = OPpCONST_BARE;
- TERM(BAREWORD);
- }
-
- /* Check for plugged-in keyword */
- {
- OP *o;
- int result;
- char *saved_bufptr = PL_bufptr;
- PL_bufptr = s;
- result = PL_keyword_plugin(aTHX_ PL_tokenbuf, len, &o);
- s = PL_bufptr;
- if (result == KEYWORD_PLUGIN_DECLINE) {
- /* not a plugged-in keyword */
- PL_bufptr = saved_bufptr;
- } else if (result == KEYWORD_PLUGIN_STMT) {
- pl_yylval.opval = o;
- CLINE;
- if (!PL_nexttoke) PL_expect = XSTATE;
- return REPORT(PLUGSTMT);
- } else if (result == KEYWORD_PLUGIN_EXPR) {
- pl_yylval.opval = o;
- CLINE;
- if (!PL_nexttoke) PL_expect = XOPERATOR;
- return REPORT(PLUGEXPR);
- } else {
- Perl_croak(aTHX_ "Bad plugin affecting keyword '%s'",
- PL_tokenbuf);
- }
- }
-
- /* Check for built-in keyword */
- tmp = keyword(PL_tokenbuf, len, 0);
-
- /* Is this a label? */
- if (!anydelim && PL_expect == XSTATE
- && d < PL_bufend && *d == ':' && *(d + 1) != ':') {
- s = d + 1;
- pl_yylval.opval =
- newSVOP(OP_CONST, 0,
- newSVpvn_flags(PL_tokenbuf, len, UTF ? SVf_UTF8 : 0));
- CLINE;
- TOKEN(LABEL);
- }
-
- /* Check for lexical sub */
- if (PL_expect != XOPERATOR) {
- char tmpbuf[sizeof PL_tokenbuf + 1];
- *tmpbuf = '&';
- Copy(PL_tokenbuf, tmpbuf+1, len, char);
- off = pad_findmy_pvn(tmpbuf, len+1, 0);
- if (off != NOT_IN_PAD) {
- assert(off); /* we assume this is boolean-true below */
- if (PAD_COMPNAME_FLAGS_isOUR(off)) {
- HV * const stash = PAD_COMPNAME_OURSTASH(off);
- HEK * const stashname = HvNAME_HEK(stash);
- sv = newSVhek(stashname);
- sv_catpvs(sv, "::");
- sv_catpvn_flags(sv, PL_tokenbuf, len,
- (UTF ? SV_CATUTF8 : SV_CATBYTES));
- gv = gv_fetchsv(sv, GV_NOADD_NOINIT | SvUTF8(sv),
- SVt_PVCV);
- off = 0;
- if (!gv) {
- sv_free(sv);
- sv = NULL;
- goto just_a_word;
- }
- }
- else {
- rv2cv_op = newOP(OP_PADANY, 0);
- rv2cv_op->op_targ = off;
- cv = find_lexical_cv(off);
- }
- lex = TRUE;
- goto just_a_word;
- }
- off = 0;
- }
-
- if (tmp < 0) { /* second-class keyword? */
- GV *ogv = NULL; /* override (winner) */
- GV *hgv = NULL; /* hidden (loser) */
- if (PL_expect != XOPERATOR && (*s != ':' || s[1] != ':')) {
- CV *cv;
- if ((gv = gv_fetchpvn_flags(PL_tokenbuf, len,
- (UTF ? SVf_UTF8 : 0)|GV_NOTQUAL,
- SVt_PVCV))
- && (cv = GvCVu(gv)))
- {
- if (GvIMPORTED_CV(gv))
- ogv = gv;
- else if (! CvMETHOD(cv))
- hgv = gv;
- }
- if (!ogv
- && (gvp = (GV**)hv_fetch(PL_globalstash, PL_tokenbuf,
- len, FALSE))
- && (gv = *gvp)
- && (isGV_with_GP(gv)
- ? GvCVu(gv) && GvIMPORTED_CV(gv)
- : SvPCS_IMPORTED(gv)
- && (gv_init(gv, PL_globalstash, PL_tokenbuf,
- len, 0), 1)))
- {
- ogv = gv;
- }
- }
- if (ogv) {
- orig_keyword = tmp;
- tmp = 0; /* overridden by import or by GLOBAL */
- }
- else if (gv && !gvp
- && -tmp==KEY_lock /* XXX generalizable kludge */
- && GvCVu(gv))
- {
- tmp = 0; /* any sub overrides "weak" keyword */
- }
- else { /* no override */
- tmp = -tmp;
- if (tmp == KEY_dump) {
- Perl_croak(aTHX_ "dump() must be written as CORE::dump() as of Perl 5.30");
- }
- gv = NULL;
- gvp = 0;
- if (hgv && tmp != KEY_x) /* never ambiguous */
- Perl_ck_warner(aTHX_ packWARN(WARN_AMBIGUOUS),
- "Ambiguous call resolved as CORE::%s(), "
- "qualify as such or use &",
- GvENAME(hgv));
- }
- }
-
- if (tmp && tmp != KEY___DATA__ && tmp != KEY___END__
- && (!anydelim || *s != '#')) {
- /* no override, and not s### either; skipspace is safe here
- * check for => on following line */
- bool arrow;
- STRLEN bufoff = PL_bufptr - SvPVX(PL_linestr);
- STRLEN soff = s - SvPVX(PL_linestr);
- s = peekspace(s);
- arrow = *s == '=' && s[1] == '>';
- PL_bufptr = SvPVX(PL_linestr) + bufoff;
- s = SvPVX(PL_linestr) + soff;
- if (arrow)
- goto fat_arrow;
- }
-
- reserved_word:
- switch (tmp) {
-
- /* Trade off - by using this evil construction we can pull the
- variable gv into the block labelled keylookup. If not, then
- we have to give it function scope so that the goto from the
- earlier ':' case doesn't bypass the initialisation. */
- just_a_word_zero_gv:
- sv = NULL;
- cv = NULL;
- gv = NULL;
- gvp = NULL;
- rv2cv_op = NULL;
- orig_keyword = 0;
- lex = 0;
- off = 0;
- /* FALLTHROUGH */
- default: /* not a keyword */
- just_a_word: {
- int pkgname = 0;
- const char lastchar = (PL_bufptr == PL_oldoldbufptr ? 0 : PL_bufptr[-1]);
- bool safebw;
- bool no_op_error = FALSE;
-
- if (PL_expect == XOPERATOR) {
- if (PL_bufptr == PL_linestart) {
- CopLINE_dec(PL_curcop);
- Perl_warner(aTHX_ packWARN(WARN_SEMICOLON), "%s", PL_warn_nosemi);
- CopLINE_inc(PL_curcop);
- }
- else
- /* We want to call no_op with s pointing after the
- bareword, so defer it. But we want it to come
- before the Bad name croak. */
- no_op_error = TRUE;
- }
-
- /* Get the rest if it looks like a package qualifier */
-
- if (*s == '\'' || (*s == ':' && s[1] == ':')) {
- STRLEN morelen;
- s = scan_word(s, PL_tokenbuf + len, sizeof PL_tokenbuf - len,
- TRUE, &morelen);
- if (no_op_error) {
- no_op("Bareword",s);
- no_op_error = FALSE;
- }
- if (!morelen)
- Perl_croak(aTHX_ "Bad name after %" UTF8f "%s",
- UTF8fARG(UTF, len, PL_tokenbuf),
- *s == '\'' ? "'" : "::");
- len += morelen;
- pkgname = 1;
- }
-
- if (no_op_error)
- no_op("Bareword",s);
-
- /* See if the name is "Foo::",
- in which case Foo is a bareword
- (and a package name). */
-
- if (len > 2
- && PL_tokenbuf[len - 2] == ':'
- && PL_tokenbuf[len - 1] == ':')
- {
- if (ckWARN(WARN_BAREWORD)
- && ! gv_fetchpvn_flags(PL_tokenbuf, len, UTF ? SVf_UTF8 : 0, SVt_PVHV))
- Perl_warner(aTHX_ packWARN(WARN_BAREWORD),
- "Bareword \"%" UTF8f
- "\" refers to nonexistent package",
- UTF8fARG(UTF, len, PL_tokenbuf));
- len -= 2;
- PL_tokenbuf[len] = '\0';
- gv = NULL;
- gvp = 0;
- safebw = TRUE;
- }
- else {
- safebw = FALSE;
- }
-
- /* if we saw a global override before, get the right name */
-
- if (!sv)
- sv = S_newSV_maybe_utf8(aTHX_ PL_tokenbuf,
- len);
- if (gvp) {
- SV * const tmp_sv = sv;
- sv = newSVpvs("CORE::GLOBAL::");
- sv_catsv(sv, tmp_sv);
- SvREFCNT_dec(tmp_sv);
- }
-
-
- /* Presume this is going to be a bareword of some sort. */
- CLINE;
- pl_yylval.opval = newSVOP(OP_CONST, 0, sv);
- pl_yylval.opval->op_private = OPpCONST_BARE;
-
- /* And if "Foo::", then that's what it certainly is. */
- if (safebw)
- goto safe_bareword;
-
- if (!off)
- {
- OP *const_op = newSVOP(OP_CONST, 0, SvREFCNT_inc_NN(sv));
- const_op->op_private = OPpCONST_BARE;
- rv2cv_op =
- newCVREF(OPpMAY_RETURN_CONSTANT<<8, const_op);
- cv = lex
- ? isGV(gv)
- ? GvCV(gv)
- : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV
- ? (CV *)SvRV(gv)
- : ((CV *)gv)
- : rv2cv_op_cv(rv2cv_op, RV2CVOPCV_RETURN_STUB);
- }
-
- /* Use this var to track whether intuit_method has been
- called. intuit_method returns 0 or > 255. */
- tmp = 1;
-
- /* See if it's the indirect object for a list operator. */
-
- if (PL_oldoldbufptr
- && PL_oldoldbufptr < PL_bufptr
- && (PL_oldoldbufptr == PL_last_lop
- || PL_oldoldbufptr == PL_last_uni)
- && /* NO SKIPSPACE BEFORE HERE! */
- (PL_expect == XREF
- || ((PL_opargs[PL_last_lop_op] >> OASHIFT)& 7)
- == OA_FILEREF))
- {
- bool immediate_paren = *s == '(';
- SSize_t s_off;
-
- /* (Now we can afford to cross potential line boundary.) */
- s = skipspace(s);
-
- /* intuit_method() can indirectly call lex_next_chunk(),
- * invalidating s
- */
- s_off = s - SvPVX(PL_linestr);
- /* Two barewords in a row may indicate method call. */
- if ( ( isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)
- || *s == '$')
- && (tmp = intuit_method(s, lex ? NULL : sv, cv)))
- {
- /* the code at method: doesn't use s */
- goto method;
- }
- s = SvPVX(PL_linestr) + s_off;
-
- /* If not a declared subroutine, it's an indirect object. */
- /* (But it's an indir obj regardless for sort.) */
- /* Also, if "_" follows a filetest operator, it's a bareword */
-
- if (
- ( !immediate_paren && (PL_last_lop_op == OP_SORT
- || (!cv
- && (PL_last_lop_op != OP_MAPSTART
- && PL_last_lop_op != OP_GREPSTART))))
- || (PL_tokenbuf[0] == '_' && PL_tokenbuf[1] == '\0'
- && ((PL_opargs[PL_last_lop_op] & OA_CLASS_MASK)
- == OA_FILESTATOP))
- )
- {
- PL_expect = (PL_last_lop == PL_oldoldbufptr) ? XTERM : XOPERATOR;
- goto bareword;
- }
- }
-
- PL_expect = XOPERATOR;
- s = skipspace(s);
-
- /* Is this a word before a => operator? */
- if (*s == '=' && s[1] == '>' && !pkgname) {
- op_free(rv2cv_op);
- CLINE;
- if (gvp || (lex && !off)) {
- assert (cSVOPx(pl_yylval.opval)->op_sv == sv);
- /* This is our own scalar, created a few lines
- above, so this is safe. */
- SvREADONLY_off(sv);
- sv_setpv(sv, PL_tokenbuf);
- if (UTF && !IN_BYTES
- && is_utf8_string((U8*)PL_tokenbuf, len))
- SvUTF8_on(sv);
- SvREADONLY_on(sv);
- }
- TERM(BAREWORD);
- }
-
- /* If followed by a paren, it's certainly a subroutine. */
- if (*s == '(') {
- CLINE;
- if (cv) {
- d = s + 1;
- while (SPACE_OR_TAB(*d))
- d++;
- if (*d == ')' && (sv = cv_const_sv_or_av(cv))) {
- s = d + 1;
- goto its_constant;
- }
- }
- NEXTVAL_NEXTTOKE.opval =
- off ? rv2cv_op : pl_yylval.opval;
- if (off)
- op_free(pl_yylval.opval), force_next(PRIVATEREF);
- else op_free(rv2cv_op), force_next(BAREWORD);
- pl_yylval.ival = 0;
- TOKEN('&');
- }
-
- /* If followed by var or block, call it a method (unless sub) */
-
- if ((*s == '$' || *s == '{') && !cv) {
- op_free(rv2cv_op);
- PL_last_lop = PL_oldbufptr;
- PL_last_lop_op = OP_METHOD;
- if (!PL_lex_allbrackets
- && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
- {
- PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
- }
- PL_expect = XBLOCKTERM;
- PL_bufptr = s;
- return REPORT(METHOD);
- }
-
- /* If followed by a bareword, see if it looks like indir obj. */
-
- if ( tmp == 1
- && !orig_keyword
- && (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF) || *s == '$')
- && (tmp = intuit_method(s, lex ? NULL : sv, cv)))
- {
- method:
- if (lex && !off) {
- assert(cSVOPx(pl_yylval.opval)->op_sv == sv);
- SvREADONLY_off(sv);
- sv_setpvn(sv, PL_tokenbuf, len);
- if (UTF && !IN_BYTES
- && is_utf8_string((U8*)PL_tokenbuf, len))
- SvUTF8_on (sv);
- else SvUTF8_off(sv);
- }
- op_free(rv2cv_op);
- if (tmp == METHOD && !PL_lex_allbrackets
- && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
- {
- PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
- }
- return REPORT(tmp);
- }
- /* Not a method, so call it a subroutine (if defined) */
-
- if (cv) {
- /* Check for a constant sub */
- if ((sv = cv_const_sv_or_av(cv))) {
- its_constant:
- op_free(rv2cv_op);
- SvREFCNT_dec(((SVOP*)pl_yylval.opval)->op_sv);
- ((SVOP*)pl_yylval.opval)->op_sv = SvREFCNT_inc_simple(sv);
- if (SvTYPE(sv) == SVt_PVAV)
- pl_yylval.opval = newUNOP(OP_RV2AV, OPf_PARENS,
- pl_yylval.opval);
- else {
- pl_yylval.opval->op_private = 0;
- pl_yylval.opval->op_folded = 1;
- pl_yylval.opval->op_flags |= OPf_SPECIAL;
- }
- TOKEN(BAREWORD);
- }
+/*
+ yylex
- op_free(pl_yylval.opval);
- pl_yylval.opval =
- off ? newCVREF(0, rv2cv_op) : rv2cv_op;
- pl_yylval.opval->op_private |= OPpENTERSUB_NOPAREN;
- PL_last_lop = PL_oldbufptr;
- PL_last_lop_op = OP_ENTERSUB;
- /* Is there a prototype? */
- if (
- SvPOK(cv))
- {
- STRLEN protolen = CvPROTOLEN(cv);
- const char *proto = CvPROTO(cv);
- bool optional;
- proto = S_strip_spaces(aTHX_ proto, &protolen);
- if (!protolen)
- TERM(FUNC0SUB);
- if ((optional = *proto == ';'))
- do
- proto++;
- while (*proto == ';');
- if (
- (
- (
- *proto == '$' || *proto == '_'
- || *proto == '*' || *proto == '+'
- )
- && proto[1] == '\0'
- )
- || (
- *proto == '\\' && proto[1] && proto[2] == '\0'
- )
- )
- UNIPROTO(UNIOPSUB,optional);
- if (*proto == '\\' && proto[1] == '[') {
- const char *p = proto + 2;
- while(*p && *p != ']')
- ++p;
- if(*p == ']' && !p[1])
- UNIPROTO(UNIOPSUB,optional);
- }
- if (*proto == '&' && *s == '{') {
- if (PL_curstash)
- sv_setpvs(PL_subname, "__ANON__");
- else
- sv_setpvs(PL_subname, "__ANON__::__ANON__");
- if (!PL_lex_allbrackets
- && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
- {
- PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
- }
- PREBLOCK(LSTOPSUB);
- }
- }
- NEXTVAL_NEXTTOKE.opval = pl_yylval.opval;
- PL_expect = XTERM;
- force_next(off ? PRIVATEREF : BAREWORD);
- if (!PL_lex_allbrackets
- && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
- {
- PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
- }
- TOKEN(NOAMP);
- }
+ Works out what to call the token just pulled out of the input
+ stream. The yacc parser takes care of taking the ops we return and
+ stitching them into a tree.
- /* Call it a bare word */
+ Returns:
+ The type of the next token
- if (PL_hints & HINT_STRICT_SUBS)
- pl_yylval.opval->op_private |= OPpCONST_STRICT;
- else {
- bareword:
- /* after "print" and similar functions (corresponding to
- * "F? L" in opcode.pl), whatever wasn't already parsed as
- * a filehandle should be subject to "strict subs".
- * Likewise for the optional indirect-object argument to system
- * or exec, which can't be a bareword */
- if ((PL_last_lop_op == OP_PRINT
- || PL_last_lop_op == OP_PRTF
- || PL_last_lop_op == OP_SAY
- || PL_last_lop_op == OP_SYSTEM
- || PL_last_lop_op == OP_EXEC)
- && (PL_hints & HINT_STRICT_SUBS))
- pl_yylval.opval->op_private |= OPpCONST_STRICT;
- if (lastchar != '-') {
- if (ckWARN(WARN_RESERVED)) {
- d = PL_tokenbuf;
- while (isLOWER(*d))
- d++;
- if (!*d && !gv_stashpv(PL_tokenbuf, UTF ? SVf_UTF8 : 0))
- {
- /* PL_warn_reserved is constant */
- GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
- Perl_warner(aTHX_ packWARN(WARN_RESERVED), PL_warn_reserved,
- PL_tokenbuf);
- GCC_DIAG_RESTORE_STMT;
- }
- }
- }
- }
- op_free(rv2cv_op);
-
- safe_bareword:
- if ((lastchar == '*' || lastchar == '%' || lastchar == '&')
- && saw_infix_sigil) {
- Perl_ck_warner_d(aTHX_ packWARN(WARN_AMBIGUOUS),
- "Operator or semicolon missing before %c%" UTF8f,
- lastchar,
- UTF8fARG(UTF, strlen(PL_tokenbuf),
- PL_tokenbuf));
- Perl_ck_warner_d(aTHX_ packWARN(WARN_AMBIGUOUS),
- "Ambiguous use of %c resolved as operator %c",
- lastchar, lastchar);
- }
- TOKEN(BAREWORD);
- }
+ Structure:
+ Check if we have already built the token; if so, use it.
+ Switch based on the current state:
+ - if we have a case modifier in a string, deal with that
+ - handle other cases of interpolation inside a string
+ - scan the next line if we are inside a format
+ In the normal state, switch on the next character:
+ - default:
+ if alphabetic, go to key lookup
+ unrecognized character - croak
+ - 0/4/26: handle end-of-line or EOF
+ - cases for whitespace
+ - \n and #: handle comments and line numbers
+ - various operators, brackets and sigils
+ - numbers
+ - quotes
+ - 'v': vstrings (or go to key lookup)
+ - 'x' repetition operator (or go to key lookup)
+ - other ASCII alphanumerics (key lookup begins here):
+ word before => ?
+ keyword plugin
+ scan built-in keyword (but do nothing with it yet)
+ check for statement label
+ check for lexical subs
+ return yyl_just_a_word if there is one
+ see whether built-in keyword is overridden
+ switch on keyword number:
+ - default: return yyl_just_a_word:
+ not a built-in keyword; handle bareword lookup
+ disambiguate between method and sub call
+ fall back to bareword
+ - cases for built-in keywords
+*/
- case KEY___FILE__:
- FUN0OP(
- newSVOP(OP_CONST, 0, newSVpv(CopFILE(PL_curcop),0))
- );
-
- case KEY___LINE__:
- FUN0OP(
- newSVOP(OP_CONST, 0,
- Perl_newSVpvf(aTHX_ "%" IVdf, (IV)CopLINE(PL_curcop)))
- );
-
- case KEY___PACKAGE__:
- FUN0OP(
- newSVOP(OP_CONST, 0,
- (PL_curstash
- ? newSVhek(HvNAME_HEK(PL_curstash))
- : &PL_sv_undef))
- );
-
- case KEY___DATA__:
- case KEY___END__: {
- GV *gv;
- if (PL_rsfp && (!PL_in_eval || PL_tokenbuf[2] == 'D')) {
- HV * const stash = PL_tokenbuf[2] == 'D' && PL_curstash
- ? PL_curstash
- : PL_defstash;
- gv = (GV *)*hv_fetchs(stash, "DATA", 1);
- if (!isGV(gv))
- gv_init(gv,stash,"DATA",4,0);
- GvMULTI_on(gv);
- if (!GvIO(gv))
- GvIOp(gv) = newIO();
- IoIFP(GvIOp(gv)) = PL_rsfp;
- /* Mark this internal pseudo-handle as clean */
- IoFLAGS(GvIOp(gv)) |= IOf_UNTAINT;
- if ((PerlIO*)PL_rsfp == PerlIO_stdin())
- IoTYPE(GvIOp(gv)) = IoTYPE_STD;
- else
- IoTYPE(GvIOp(gv)) = IoTYPE_RDONLY;
-#if defined(WIN32) && !defined(PERL_TEXTMODE_SCRIPTS)
- /* if the script was opened in binmode, we need to revert
- * it to text mode for compatibility; but only iff it has CRs
- * XXX this is a questionable hack at best. */
- if (PL_bufend-PL_bufptr > 2
- && PL_bufend[-1] == '\n' && PL_bufend[-2] == '\r')
- {
- Off_t loc = 0;
- if (IoTYPE(GvIOp(gv)) == IoTYPE_RDONLY) {
- loc = PerlIO_tell(PL_rsfp);
- (void)PerlIO_seek(PL_rsfp, 0L, 0);
- }
#ifdef NETWARE
- if (PerlLIO_setmode(PL_rsfp, O_TEXT) != -1) {
+#define RSFP_FILENO (PL_rsfp)
#else
- if (PerlLIO_setmode(PerlIO_fileno(PL_rsfp), O_TEXT) != -1) {
-#endif /* NETWARE */
- if (loc > 0)
- PerlIO_seek(PL_rsfp, loc, 0);
- }
- }
-#endif
-#ifdef PERLIO_LAYERS
- if (!IN_BYTES) {
- if (UTF)
- PerlIO_apply_layers(aTHX_ PL_rsfp, NULL, ":utf8");
- }
+#define RSFP_FILENO (PerlIO_fileno(PL_rsfp))
#endif
- PL_rsfp = NULL;
- }
- goto fake_eof;
- }
-
- case KEY___SUB__:
- FUN0OP(CvCLONE(PL_compcv)
- ? newOP(OP_RUNCV, 0)
- : newPVOP(OP_RUNCV,0,NULL));
-
- case KEY_AUTOLOAD:
- case KEY_DESTROY:
- case KEY_BEGIN:
- case KEY_UNITCHECK:
- case KEY_CHECK:
- case KEY_INIT:
- case KEY_END:
- if (PL_expect == XSTATE) {
- s = PL_bufptr;
- goto really_sub;
- }
- goto just_a_word;
-
- case_KEY_CORE:
- {
- STRLEN olen = len;
- d = s;
- s += 2;
- s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE, &len);
- if ((*s == ':' && s[1] == ':')
- || (!(tmp = keyword(PL_tokenbuf, len, 1)) && *s == '\''))
- {
- s = d;
- len = olen;
- Copy(PL_bufptr, PL_tokenbuf, olen, char);
- goto just_a_word;
- }
- if (!tmp)
- Perl_croak(aTHX_ "CORE::%" UTF8f " is not a keyword",
- UTF8fARG(UTF, len, PL_tokenbuf));
- if (tmp < 0)
- tmp = -tmp;
- else if (tmp == KEY_require || tmp == KEY_do
- || tmp == KEY_glob)
- /* that's a way to remember we saw "CORE::" */
- orig_keyword = tmp;
- goto reserved_word;
- }
-
- case KEY_abs:
- UNI(OP_ABS);
-
- case KEY_alarm:
- UNI(OP_ALARM);
-
- case KEY_accept:
- LOP(OP_ACCEPT,XTERM);
-
- case KEY_and:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
- return REPORT(0);
- OPERATOR(ANDOP);
-
- case KEY_atan2:
- LOP(OP_ATAN2,XTERM);
-
- case KEY_bind:
- LOP(OP_BIND,XTERM);
-
- case KEY_binmode:
- LOP(OP_BINMODE,XTERM);
-
- case KEY_bless:
- LOP(OP_BLESS,XTERM);
-
- case KEY_break:
- FUN0(OP_BREAK);
-
- case KEY_chop:
- UNI(OP_CHOP);
-
- case KEY_continue:
- /* We have to disambiguate the two senses of
- "continue". If the next token is a '{' then
- treat it as the start of a continue block;
- otherwise treat it as a control operator.
- */
- s = skipspace(s);
- if (*s == '{')
- PREBLOCK(CONTINUE);
- else
- FUN0(OP_CONTINUE);
-
- case KEY_chdir:
- /* may use HOME */
- (void)gv_fetchpvs("ENV", GV_ADD|GV_NOTQUAL, SVt_PVHV);
- UNI(OP_CHDIR);
- case KEY_close:
- UNI(OP_CLOSE);
- case KEY_closedir:
- UNI(OP_CLOSEDIR);
-
- case KEY_cmp:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- return REPORT(0);
- Eop(OP_SCMP);
-
- case KEY_caller:
- UNI(OP_CALLER);
-
- case KEY_crypt:
-#ifdef FCRYPT
- if (!PL_cryptseen) {
- PL_cryptseen = TRUE;
- init_des();
- }
-#endif
- LOP(OP_CRYPT,XTERM);
-
- case KEY_chmod:
- LOP(OP_CHMOD,XTERM);
-
- case KEY_chown:
- LOP(OP_CHOWN,XTERM);
-
- case KEY_connect:
- LOP(OP_CONNECT,XTERM);
-
- case KEY_chr:
- UNI(OP_CHR);
-
- case KEY_cos:
- UNI(OP_COS);
-
- case KEY_chroot:
- UNI(OP_CHROOT);
+int
+Perl_yylex(pTHX)
+{
+ dVAR;
+ char *s = PL_bufptr;
- case KEY_default:
- PREBLOCK(DEFAULT);
+ if (UNLIKELY(PL_parser->recheck_utf8_validity)) {
+ const U8* first_bad_char_loc;
+ if (UTF && UNLIKELY(! is_utf8_string_loc((U8 *) PL_bufptr,
+ PL_bufend - PL_bufptr,
+ &first_bad_char_loc)))
+ {
+ _force_out_malformed_utf8_message(first_bad_char_loc,
+ (U8 *) PL_bufend,
+ 0,
+ 1 /* 1 means die */ );
+ NOT_REACHED; /* NOTREACHED */
+ }
+ PL_parser->recheck_utf8_validity = FALSE;
+ }
+ DEBUG_T( {
+ SV* tmp = newSVpvs("");
+ PerlIO_printf(Perl_debug_log, "### %" IVdf ":LEX_%s/X%s %s\n",
+ (IV)CopLINE(PL_curcop),
+ lex_state_names[PL_lex_state],
+ exp_name[PL_expect],
+ pv_display(tmp, s, strlen(s), 0, 60));
+ SvREFCNT_dec(tmp);
+ } );
- case KEY_do:
- s = skipspace(s);
- if (*s == '{')
- PRETERMBLOCK(DO);
- if (*s != '\'') {
- *PL_tokenbuf = '&';
- d = scan_word(s, PL_tokenbuf + 1, sizeof PL_tokenbuf - 1,
- 1, &len);
- if (len && memNEs(PL_tokenbuf+1, len, "CORE")
- && !keyword(PL_tokenbuf + 1, len, 0)) {
- SSize_t off = s-SvPVX(PL_linestr);
- d = skipspace(d);
- s = SvPVX(PL_linestr)+off;
- if (*d == '(') {
- force_ident_maybe_lex('&');
- s = d;
- }
+ /* when we've already built the next token, just pull it out of the queue */
+ if (PL_nexttoke) {
+ PL_nexttoke--;
+ pl_yylval = PL_nextval[PL_nexttoke];
+ {
+ I32 next_type;
+ next_type = PL_nexttype[PL_nexttoke];
+ if (next_type & (7<<24)) {
+ if (next_type & (1<<24)) {
+ if (PL_lex_brackets > 100)
+ Renew(PL_lex_brackstack, PL_lex_brackets + 10, char);
+ PL_lex_brackstack[PL_lex_brackets++] =
+ (char) ((next_type >> 16) & 0xff);
}
+ if (next_type & (2<<24))
+ PL_lex_allbrackets++;
+ if (next_type & (4<<24))
+ PL_lex_allbrackets--;
+ next_type &= 0xffff;
}
- if (orig_keyword == KEY_do) {
- orig_keyword = 0;
- pl_yylval.ival = 1;
- }
- else
- pl_yylval.ival = 0;
- OPERATOR(DO);
-
- case KEY_die:
- PL_hints |= HINT_BLOCK_SCOPE;
- LOP(OP_DIE,XTERM);
-
- case KEY_defined:
- UNI(OP_DEFINED);
-
- case KEY_delete:
- UNI(OP_DELETE);
-
- case KEY_dbmopen:
- Perl_populate_isa(aTHX_ STR_WITH_LEN("AnyDBM_File::ISA"),
- STR_WITH_LEN("NDBM_File::"),
- STR_WITH_LEN("DB_File::"),
- STR_WITH_LEN("GDBM_File::"),
- STR_WITH_LEN("SDBM_File::"),
- STR_WITH_LEN("ODBM_File::"),
- NULL);
- LOP(OP_DBMOPEN,XTERM);
-
- case KEY_dbmclose:
- UNI(OP_DBMCLOSE);
+ return REPORT(next_type == 'p' ? pending_ident() : next_type);
+ }
+ }
- case KEY_dump:
- LOOPX(OP_DUMP);
+ switch (PL_lex_state) {
+ case LEX_NORMAL:
+ case LEX_INTERPNORMAL:
+ break;
- case KEY_else:
- PREBLOCK(ELSE);
+ /* interpolated case modifiers like \L \U, including \Q and \E.
+ when we get here, PL_bufptr is at the \
+ */
+ case LEX_INTERPCASEMOD:
+ /* handle \E or end of string */
+ return yyl_interpcasemod(aTHX_ s);
- case KEY_elsif:
- pl_yylval.ival = CopLINE(PL_curcop);
- OPERATOR(ELSIF);
+ case LEX_INTERPPUSH:
+ return REPORT(sublex_push());
- case KEY_eq:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- return REPORT(0);
- Eop(OP_SEQ);
+ case LEX_INTERPSTART:
+ if (PL_bufptr == PL_bufend)
+ return REPORT(sublex_done());
+ DEBUG_T({
+ if(*PL_bufptr != '(')
+ PerlIO_printf(Perl_debug_log, "### Interpolated variable\n");
+ });
+ PL_expect = XTERM;
+ /* for /@a/, we leave the joining for the regex engine to do
+ * (unless we're within \Q etc) */
+ PL_lex_dojoin = (*PL_bufptr == '@'
+ && (!PL_lex_inpat || PL_lex_casemods));
+ PL_lex_state = LEX_INTERPNORMAL;
+ if (PL_lex_dojoin) {
+ NEXTVAL_NEXTTOKE.ival = 0;
+ force_next(',');
+ force_ident("\"", '$');
+ NEXTVAL_NEXTTOKE.ival = 0;
+ force_next('$');
+ NEXTVAL_NEXTTOKE.ival = 0;
+ force_next((2<<24)|'(');
+ NEXTVAL_NEXTTOKE.ival = OP_JOIN; /* emulate join($", ...) */
+ force_next(FUNC);
+ }
+ /* Convert (?{...}) and friends to 'do {...}' */
+ if (PL_lex_inpat && *PL_bufptr == '(') {
+ PL_parser->lex_shared->re_eval_start = PL_bufptr;
+ PL_bufptr += 2;
+ if (*PL_bufptr != '{')
+ PL_bufptr++;
+ PL_expect = XTERMBLOCK;
+ force_next(DO);
+ }
- case KEY_exists:
- UNI(OP_EXISTS);
+ if (PL_lex_starts++) {
+ s = PL_bufptr;
+ /* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
+ if (!PL_lex_casemods && PL_lex_inpat)
+ TOKEN(',');
+ else
+ AopNOASSIGN(OP_CONCAT);
+ }
+ return yylex();
- case KEY_exit:
- UNI(OP_EXIT);
+ case LEX_INTERPENDMAYBE:
+ if (intuit_more(PL_bufptr, PL_bufend)) {
+ PL_lex_state = LEX_INTERPNORMAL; /* false alarm, more expr */
+ break;
+ }
+ /* FALLTHROUGH */
- case KEY_eval:
- s = skipspace(s);
- if (*s == '{') { /* block eval */
- PL_expect = XTERMBLOCK;
- UNIBRACK(OP_ENTERTRY);
- }
- else { /* string eval */
- PL_expect = XTERM;
- UNIBRACK(OP_ENTEREVAL);
+ case LEX_INTERPEND:
+ if (PL_lex_dojoin) {
+ const U8 dojoin_was = PL_lex_dojoin;
+ PL_lex_dojoin = FALSE;
+ PL_lex_state = LEX_INTERPCONCAT;
+ PL_lex_allbrackets--;
+ return REPORT(dojoin_was == 1 ? (int)')' : (int)POSTJOIN);
+ }
+ if (PL_lex_inwhat == OP_SUBST && PL_linestr == PL_lex_repl
+ && SvEVALED(PL_lex_repl))
+ {
+ if (PL_bufptr != PL_bufend)
+ Perl_croak(aTHX_ "Bad evalled substitution pattern");
+ PL_lex_repl = NULL;
+ }
+ /* Paranoia. re_eval_start is adjusted when S_scan_heredoc sets
+ re_eval_str. If the here-doc body’s length equals the previous
+ value of re_eval_start, re_eval_start will now be null. So
+ check re_eval_str as well. */
+ if (PL_parser->lex_shared->re_eval_start
+ || PL_parser->lex_shared->re_eval_str) {
+ SV *sv;
+ if (*PL_bufptr != ')')
+ Perl_croak(aTHX_ "Sequence (?{...}) not terminated with ')'");
+ PL_bufptr++;
+ /* having compiled a (?{..}) expression, return the original
+ * text too, as a const */
+ if (PL_parser->lex_shared->re_eval_str) {
+ sv = PL_parser->lex_shared->re_eval_str;
+ PL_parser->lex_shared->re_eval_str = NULL;
+ SvCUR_set(sv,
+ PL_bufptr - PL_parser->lex_shared->re_eval_start);
+ SvPV_shrink_to_cur(sv);
}
-
- case KEY_evalbytes:
+ else sv = newSVpvn(PL_parser->lex_shared->re_eval_start,
+ PL_bufptr - PL_parser->lex_shared->re_eval_start);
+ NEXTVAL_NEXTTOKE.opval =
+ newSVOP(OP_CONST, 0,
+ sv);
+ force_next(THING);
+ PL_parser->lex_shared->re_eval_start = NULL;
PL_expect = XTERM;
- UNIBRACK(-OP_ENTEREVAL);
-
- case KEY_eof:
- UNI(OP_EOF);
-
- case KEY_exp:
- UNI(OP_EXP);
-
- case KEY_each:
- UNI(OP_EACH);
-
- case KEY_exec:
- LOP(OP_EXEC,XREF);
-
- case KEY_endhostent:
- FUN0(OP_EHOSTENT);
-
- case KEY_endnetent:
- FUN0(OP_ENETENT);
-
- case KEY_endservent:
- FUN0(OP_ESERVENT);
-
- case KEY_endprotoent:
- FUN0(OP_EPROTOENT);
-
- case KEY_endpwent:
- FUN0(OP_EPWENT);
-
- case KEY_endgrent:
- FUN0(OP_EGRENT);
-
- case KEY_for:
- case KEY_foreach:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
- return REPORT(0);
- pl_yylval.ival = CopLINE(PL_curcop);
- s = skipspace(s);
- if ( PL_expect == XSTATE
- && isIDFIRST_lazy_if_safe(s, PL_bufend, UTF))
- {
- char *p = s;
- SSize_t s_off = s - SvPVX(PL_linestr);
-
- if ( memBEGINPs(p, (STRLEN) (PL_bufend - p), "my")
- && isSPACE(*(p + 2)))
- {
- p += 2;
- }
- else if ( memBEGINPs(p, (STRLEN) (PL_bufend - p), "our")
- && isSPACE(*(p + 3)))
- {
- p += 3;
- }
-
- p = skipspace(p);
- /* skip optional package name, as in "for my abc $x (..)" */
- if (isIDFIRST_lazy_if_safe(p, PL_bufend, UTF)) {
- p = scan_word(p, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
- p = skipspace(p);
- }
- if (*p != '$' && *p != '\\')
- Perl_croak(aTHX_ "Missing $ on loop variable");
-
- /* The buffer may have been reallocated, update s */
- s = SvPVX(PL_linestr) + s_off;
- }
- OPERATOR(FOR);
-
- case KEY_formline:
- LOP(OP_FORMLINE,XTERM);
-
- case KEY_fork:
- FUN0(OP_FORK);
-
- case KEY_fc:
- UNI(OP_FC);
-
- case KEY_fcntl:
- LOP(OP_FCNTL,XTERM);
-
- case KEY_fileno:
- UNI(OP_FILENO);
-
- case KEY_flock:
- LOP(OP_FLOCK,XTERM);
-
- case KEY_gt:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- return REPORT(0);
- Rop(OP_SGT);
-
- case KEY_ge:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- return REPORT(0);
- Rop(OP_SGE);
-
- case KEY_grep:
- LOP(OP_GREPSTART, XREF);
-
- case KEY_goto:
- LOOPX(OP_GOTO);
-
- case KEY_gmtime:
- UNI(OP_GMTIME);
-
- case KEY_getc:
- UNIDOR(OP_GETC);
-
- case KEY_getppid:
- FUN0(OP_GETPPID);
-
- case KEY_getpgrp:
- UNI(OP_GETPGRP);
-
- case KEY_getpriority:
- LOP(OP_GETPRIORITY,XTERM);
-
- case KEY_getprotobyname:
- UNI(OP_GPBYNAME);
-
- case KEY_getprotobynumber:
- LOP(OP_GPBYNUMBER,XTERM);
-
- case KEY_getprotoent:
- FUN0(OP_GPROTOENT);
-
- case KEY_getpwent:
- FUN0(OP_GPWENT);
-
- case KEY_getpwnam:
- UNI(OP_GPWNAM);
-
- case KEY_getpwuid:
- UNI(OP_GPWUID);
-
- case KEY_getpeername:
- UNI(OP_GETPEERNAME);
-
- case KEY_gethostbyname:
- UNI(OP_GHBYNAME);
-
- case KEY_gethostbyaddr:
- LOP(OP_GHBYADDR,XTERM);
-
- case KEY_gethostent:
- FUN0(OP_GHOSTENT);
-
- case KEY_getnetbyname:
- UNI(OP_GNBYNAME);
-
- case KEY_getnetbyaddr:
- LOP(OP_GNBYADDR,XTERM);
-
- case KEY_getnetent:
- FUN0(OP_GNETENT);
-
- case KEY_getservbyname:
- LOP(OP_GSBYNAME,XTERM);
-
- case KEY_getservbyport:
- LOP(OP_GSBYPORT,XTERM);
-
- case KEY_getservent:
- FUN0(OP_GSERVENT);
-
- case KEY_getsockname:
- UNI(OP_GETSOCKNAME);
-
- case KEY_getsockopt:
- LOP(OP_GSOCKOPT,XTERM);
-
- case KEY_getgrent:
- FUN0(OP_GGRENT);
-
- case KEY_getgrnam:
- UNI(OP_GGRNAM);
-
- case KEY_getgrgid:
- UNI(OP_GGRGID);
-
- case KEY_getlogin:
- FUN0(OP_GETLOGIN);
-
- case KEY_given:
- pl_yylval.ival = CopLINE(PL_curcop);
- Perl_ck_warner_d(aTHX_
- packWARN(WARN_EXPERIMENTAL__SMARTMATCH),
- "given is experimental");
- OPERATOR(GIVEN);
-
- case KEY_glob:
- LOP(
- orig_keyword==KEY_glob ? -OP_GLOB : OP_GLOB,
- XTERM
- );
-
- case KEY_hex:
- UNI(OP_HEX);
-
- case KEY_if:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
- return REPORT(0);
- pl_yylval.ival = CopLINE(PL_curcop);
- OPERATOR(IF);
-
- case KEY_index:
- LOP(OP_INDEX,XTERM);
-
- case KEY_int:
- UNI(OP_INT);
-
- case KEY_ioctl:
- LOP(OP_IOCTL,XTERM);
-
- case KEY_join:
- LOP(OP_JOIN,XTERM);
-
- case KEY_keys:
- UNI(OP_KEYS);
-
- case KEY_kill:
- LOP(OP_KILL,XTERM);
-
- case KEY_last:
- LOOPX(OP_LAST);
-
- case KEY_lc:
- UNI(OP_LC);
-
- case KEY_lcfirst:
- UNI(OP_LCFIRST);
-
- case KEY_local:
- OPERATOR(LOCAL);
-
- case KEY_length:
- UNI(OP_LENGTH);
-
- case KEY_lt:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- return REPORT(0);
- Rop(OP_SLT);
-
- case KEY_le:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- return REPORT(0);
- Rop(OP_SLE);
-
- case KEY_localtime:
- UNI(OP_LOCALTIME);
-
- case KEY_log:
- UNI(OP_LOG);
-
- case KEY_link:
- LOP(OP_LINK,XTERM);
-
- case KEY_listen:
- LOP(OP_LISTEN,XTERM);
-
- case KEY_lock:
- UNI(OP_LOCK);
-
- case KEY_lstat:
- UNI(OP_LSTAT);
-
- case KEY_m:
- s = scan_pat(s,OP_MATCH);
- TERM(sublex_start());
-
- case KEY_map:
- LOP(OP_MAPSTART, XREF);
-
- case KEY_mkdir:
- LOP(OP_MKDIR,XTERM);
-
- case KEY_msgctl:
- LOP(OP_MSGCTL,XTERM);
-
- case KEY_msgget:
- LOP(OP_MSGGET,XTERM);
-
- case KEY_msgrcv:
- LOP(OP_MSGRCV,XTERM);
-
- case KEY_msgsnd:
- LOP(OP_MSGSND,XTERM);
-
- case KEY_our:
- case KEY_my:
- case KEY_state:
- if (PL_in_my) {
- PL_bufptr = s;
- yyerror(Perl_form(aTHX_
- "Can't redeclare \"%s\" in \"%s\"",
- tmp == KEY_my ? "my" :
- tmp == KEY_state ? "state" : "our",
- PL_in_my == KEY_my ? "my" :
- PL_in_my == KEY_state ? "state" : "our"));
- }
- PL_in_my = (U16)tmp;
- s = skipspace(s);
- if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
- s = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, TRUE, &len);
- if (memEQs(PL_tokenbuf, len, "sub"))
- goto really_sub;
- PL_in_my_stash = find_in_my_stash(PL_tokenbuf, len);
- if (!PL_in_my_stash) {
- char tmpbuf[1024];
- int len;
- PL_bufptr = s;
- len = my_snprintf(tmpbuf, sizeof(tmpbuf), "No such class %.1000s", PL_tokenbuf);
- PERL_MY_SNPRINTF_POST_GUARD(len, sizeof(tmpbuf));
- yyerror_pv(tmpbuf, UTF ? SVf_UTF8 : 0);
- }
- }
- else if (*s == '\\') {
- if (!FEATURE_MYREF_IS_ENABLED)
- Perl_croak(aTHX_ "The experimental declared_refs "
- "feature is not enabled");
- Perl_ck_warner_d(aTHX_
- packWARN(WARN_EXPERIMENTAL__DECLARED_REFS),
- "Declaring references is experimental");
- }
- OPERATOR(MY);
-
- case KEY_next:
- LOOPX(OP_NEXT);
-
- case KEY_ne:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_COMPARE)
- return REPORT(0);
- Eop(OP_SNE);
-
- case KEY_no:
- s = tokenize_use(0, s);
- TOKEN(USE);
-
- case KEY_not:
- if (*s == '(' || (s = skipspace(s), *s == '('))
- FUN1(OP_NOT);
- else {
- if (!PL_lex_allbrackets
- && PL_lex_fakeeof > LEX_FAKEEOF_LOWLOGIC)
- {
- PL_lex_fakeeof = LEX_FAKEEOF_LOWLOGIC;
- }
- OPERATOR(NOTOP);
- }
-
- case KEY_open:
- s = skipspace(s);
- if (isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)) {
- const char *t;
- d = scan_word(s, PL_tokenbuf, sizeof PL_tokenbuf, FALSE,
- &len);
- for (t=d; isSPACE(*t);)
- t++;
- if ( *t && strchr("|&*+-=!?:.", *t) && ckWARN_d(WARN_PRECEDENCE)
- /* [perl #16184] */
- && !(t[0] == '=' && t[1] == '>')
- && !(t[0] == ':' && t[1] == ':')
- && !keyword(s, d-s, 0)
- ) {
- Perl_warner(aTHX_ packWARN(WARN_PRECEDENCE),
- "Precedence problem: open %" UTF8f " should be open(%" UTF8f ")",
- UTF8fARG(UTF, d-s, s), UTF8fARG(UTF, d-s, s));
- }
- }
- LOP(OP_OPEN,XTERM);
-
- case KEY_or:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
- return REPORT(0);
- pl_yylval.ival = OP_OR;
- OPERATOR(OROP);
-
- case KEY_ord:
- UNI(OP_ORD);
-
- case KEY_oct:
- UNI(OP_OCT);
-
- case KEY_opendir:
- LOP(OP_OPEN_DIR,XTERM);
-
- case KEY_print:
- checkcomma(s,PL_tokenbuf,"filehandle");
- LOP(OP_PRINT,XREF);
-
- case KEY_printf:
- checkcomma(s,PL_tokenbuf,"filehandle");
- LOP(OP_PRTF,XREF);
-
- case KEY_prototype:
- UNI(OP_PROTOTYPE);
-
- case KEY_push:
- LOP(OP_PUSH,XTERM);
-
- case KEY_pop:
- UNIDOR(OP_POP);
-
- case KEY_pos:
- UNIDOR(OP_POS);
-
- case KEY_pack:
- LOP(OP_PACK,XTERM);
-
- case KEY_package:
- s = force_word(s,BAREWORD,FALSE,TRUE);
- s = skipspace(s);
- s = force_strict_version(s);
- PREBLOCK(PACKAGE);
-
- case KEY_pipe:
- LOP(OP_PIPE_OP,XTERM);
-
- case KEY_q:
- s = scan_str(s,FALSE,FALSE,FALSE,NULL);
- if (!s)
- missingterm(NULL, 0);
- COPLINE_SET_FROM_MULTI_END;
- pl_yylval.ival = OP_CONST;
- TERM(sublex_start());
-
- case KEY_quotemeta:
- UNI(OP_QUOTEMETA);
-
- case KEY_qw: {
- OP *words = NULL;
- s = scan_str(s,FALSE,FALSE,FALSE,NULL);
- if (!s)
- missingterm(NULL, 0);
- COPLINE_SET_FROM_MULTI_END;
- PL_expect = XOPERATOR;
- if (SvCUR(PL_lex_stuff)) {
- int warned_comma = !ckWARN(WARN_QW);
- int warned_comment = warned_comma;
- d = SvPV_force(PL_lex_stuff, len);
- while (len) {
- for (; isSPACE(*d) && len; --len, ++d)
- /**/;
- if (len) {
- SV *sv;
- const char *b = d;
- if (!warned_comma || !warned_comment) {
- for (; !isSPACE(*d) && len; --len, ++d) {
- if (!warned_comma && *d == ',') {
- Perl_warner(aTHX_ packWARN(WARN_QW),
- "Possible attempt to separate words with commas");
- ++warned_comma;
- }
- else if (!warned_comment && *d == '#') {
- Perl_warner(aTHX_ packWARN(WARN_QW),
- "Possible attempt to put comments in qw() list");
- ++warned_comment;
- }
- }
- }
- else {
- for (; !isSPACE(*d) && len; --len, ++d)
- /**/;
- }
- sv = newSVpvn_utf8(b, d-b, DO_UTF8(PL_lex_stuff));
- words = op_append_elem(OP_LIST, words,
- newSVOP(OP_CONST, 0, tokeq(sv)));
- }
- }
- }
- if (!words)
- words = newNULLLIST();
- SvREFCNT_dec_NN(PL_lex_stuff);
- PL_lex_stuff = NULL;
- PL_expect = XOPERATOR;
- pl_yylval.opval = sawparens(words);
- TOKEN(QWLIST);
+ return REPORT(',');
}
- case KEY_qq:
- s = scan_str(s,FALSE,FALSE,FALSE,NULL);
- if (!s)
- missingterm(NULL, 0);
- pl_yylval.ival = OP_STRINGIFY;
- if (SvIVX(PL_lex_stuff) == '\'')
- SvIV_set(PL_lex_stuff, 0); /* qq'$foo' should interpolate */
- TERM(sublex_start());
-
- case KEY_qr:
- s = scan_pat(s,OP_QR);
- TERM(sublex_start());
-
- case KEY_qx:
- s = scan_str(s,FALSE,FALSE,FALSE,NULL);
- if (!s)
- missingterm(NULL, 0);
- pl_yylval.ival = OP_BACKTICK;
- TERM(sublex_start());
-
- case KEY_return:
- OLDLOP(OP_RETURN);
-
- case KEY_require:
- s = skipspace(s);
- if (isDIGIT(*s)) {
- s = force_version(s, FALSE);
- }
- else if (*s != 'v' || !isDIGIT(s[1])
- || (s = force_version(s, TRUE), *s == 'v'))
- {
- *PL_tokenbuf = '\0';
- s = force_word(s,BAREWORD,TRUE,TRUE);
- if (isIDFIRST_lazy_if_safe(PL_tokenbuf,
- PL_tokenbuf + sizeof(PL_tokenbuf),
- UTF))
- {
- gv_stashpvn(PL_tokenbuf, strlen(PL_tokenbuf),
- GV_ADD | (UTF ? SVf_UTF8 : 0));
- }
- else if (*s == '<')
- yyerror("<> at require-statement should be quotes");
- }
- if (orig_keyword == KEY_require) {
- orig_keyword = 0;
- pl_yylval.ival = 1;
- }
- else
- pl_yylval.ival = 0;
- PL_expect = PL_nexttoke ? XOPERATOR : XTERM;
- PL_bufptr = s;
- PL_last_uni = PL_oldbufptr;
- PL_last_lop_op = OP_REQUIRE;
- s = skipspace(s);
- return REPORT( (int)REQUIRE );
-
- case KEY_reset:
- UNI(OP_RESET);
-
- case KEY_redo:
- LOOPX(OP_REDO);
-
- case KEY_rename:
- LOP(OP_RENAME,XTERM);
-
- case KEY_rand:
- UNI(OP_RAND);
-
- case KEY_rmdir:
- UNI(OP_RMDIR);
-
- case KEY_rindex:
- LOP(OP_RINDEX,XTERM);
-
- case KEY_read:
- LOP(OP_READ,XTERM);
-
- case KEY_readdir:
- UNI(OP_READDIR);
-
- case KEY_readline:
- UNIDOR(OP_READLINE);
-
- case KEY_readpipe:
- UNIDOR(OP_BACKTICK);
-
- case KEY_rewinddir:
- UNI(OP_REWINDDIR);
-
- case KEY_recv:
- LOP(OP_RECV,XTERM);
-
- case KEY_reverse:
- LOP(OP_REVERSE,XTERM);
+ /* FALLTHROUGH */
+ case LEX_INTERPCONCAT:
+#ifdef DEBUGGING
+ if (PL_lex_brackets)
+ Perl_croak(aTHX_ "panic: INTERPCONCAT, lex_brackets=%ld",
+ (long) PL_lex_brackets);
+#endif
+ if (PL_bufptr == PL_bufend)
+ return REPORT(sublex_done());
- case KEY_readlink:
- UNIDOR(OP_READLINK);
+ /* m'foo' still needs to be parsed for possible (?{...}) */
+ if (SvIVX(PL_linestr) == '\'' && !PL_lex_inpat) {
+ SV *sv = newSVsv(PL_linestr);
+ sv = tokeq(sv);
+ pl_yylval.opval = newSVOP(OP_CONST, 0, sv);
+ s = PL_bufend;
+ }
+ else {
+ int save_error_count = PL_error_count;
- case KEY_ref:
- UNI(OP_REF);
+ s = scan_const(PL_bufptr);
- case KEY_s:
- s = scan_subst(s);
- if (pl_yylval.opval)
- TERM(sublex_start());
+ /* Set flag if this was a pattern and there were errors. op.c will
+ * refuse to compile a pattern with this flag set. Otherwise, we
+ * could get segfaults, etc. */
+ if (PL_lex_inpat && PL_error_count > save_error_count) {
+ ((PMOP*)PL_lex_inpat)->op_pmflags |= PMf_HAS_ERROR;
+ }
+ if (*s == '\\')
+ PL_lex_state = LEX_INTERPCASEMOD;
else
- TOKEN(1); /* force error */
-
- case KEY_say:
- checkcomma(s,PL_tokenbuf,"filehandle");
- LOP(OP_SAY,XREF);
-
- case KEY_chomp:
- UNI(OP_CHOMP);
-
- case KEY_scalar:
- UNI(OP_SCALAR);
-
- case KEY_select:
- LOP(OP_SELECT,XTERM);
-
- case KEY_seek:
- LOP(OP_SEEK,XTERM);
-
- case KEY_semctl:
- LOP(OP_SEMCTL,XTERM);
-
- case KEY_semget:
- LOP(OP_SEMGET,XTERM);
-
- case KEY_semop:
- LOP(OP_SEMOP,XTERM);
-
- case KEY_send:
- LOP(OP_SEND,XTERM);
-
- case KEY_setpgrp:
- LOP(OP_SETPGRP,XTERM);
-
- case KEY_setpriority:
- LOP(OP_SETPRIORITY,XTERM);
-
- case KEY_sethostent:
- UNI(OP_SHOSTENT);
-
- case KEY_setnetent:
- UNI(OP_SNETENT);
-
- case KEY_setservent:
- UNI(OP_SSERVENT);
-
- case KEY_setprotoent:
- UNI(OP_SPROTOENT);
-
- case KEY_setpwent:
- FUN0(OP_SPWENT);
-
- case KEY_setgrent:
- FUN0(OP_SGRENT);
-
- case KEY_seekdir:
- LOP(OP_SEEKDIR,XTERM);
-
- case KEY_setsockopt:
- LOP(OP_SSOCKOPT,XTERM);
-
- case KEY_shift:
- UNIDOR(OP_SHIFT);
-
- case KEY_shmctl:
- LOP(OP_SHMCTL,XTERM);
-
- case KEY_shmget:
- LOP(OP_SHMGET,XTERM);
-
- case KEY_shmread:
- LOP(OP_SHMREAD,XTERM);
-
- case KEY_shmwrite:
- LOP(OP_SHMWRITE,XTERM);
-
- case KEY_shutdown:
- LOP(OP_SHUTDOWN,XTERM);
-
- case KEY_sin:
- UNI(OP_SIN);
-
- case KEY_sleep:
- UNI(OP_SLEEP);
-
- case KEY_socket:
- LOP(OP_SOCKET,XTERM);
-
- case KEY_socketpair:
- LOP(OP_SOCKPAIR,XTERM);
+ PL_lex_state = LEX_INTERPSTART;
+ }
- case KEY_sort:
- checkcomma(s,PL_tokenbuf,"subroutine name");
- s = skipspace(s);
+ if (s != PL_bufptr) {
+ NEXTVAL_NEXTTOKE = pl_yylval;
PL_expect = XTERM;
- s = force_word(s,BAREWORD,TRUE,TRUE);
- LOP(OP_SORT,XREF);
-
- case KEY_split:
- LOP(OP_SPLIT,XTERM);
-
- case KEY_sprintf:
- LOP(OP_SPRINTF,XTERM);
-
- case KEY_splice:
- LOP(OP_SPLICE,XTERM);
-
- case KEY_sqrt:
- UNI(OP_SQRT);
-
- case KEY_srand:
- UNI(OP_SRAND);
-
- case KEY_stat:
- UNI(OP_STAT);
-
- case KEY_study:
- UNI(OP_STUDY);
-
- case KEY_substr:
- LOP(OP_SUBSTR,XTERM);
-
- case KEY_format:
- case KEY_sub:
- really_sub:
- {
- char * const tmpbuf = PL_tokenbuf + 1;
- bool have_name, have_proto;
- const int key = tmp;
- SV *format_name = NULL;
- bool is_sigsub = FEATURE_SIGNATURES_IS_ENABLED;
-
- SSize_t off = s-SvPVX(PL_linestr);
- s = skipspace(s);
- d = SvPVX(PL_linestr)+off;
-
- SAVEBOOL(PL_parser->sig_seen);
- PL_parser->sig_seen = FALSE;
-
- if ( isIDFIRST_lazy_if_safe(s, PL_bufend, UTF)
- || *s == '\''
- || (*s == ':' && s[1] == ':'))
- {
-
- PL_expect = XATTRBLOCK;
- d = scan_word(s, tmpbuf, sizeof PL_tokenbuf - 1, TRUE,
- &len);
- if (key == KEY_format)
- format_name = S_newSV_maybe_utf8(aTHX_ s, d - s);
- *PL_tokenbuf = '&';
- if (memchr(tmpbuf, ':', len) || key != KEY_sub
- || pad_findmy_pvn(
- PL_tokenbuf, len + 1, 0
- ) != NOT_IN_PAD)
- sv_setpvn(PL_subname, tmpbuf, len);
- else {
- sv_setsv(PL_subname,PL_curstname);
- sv_catpvs(PL_subname,"::");
- sv_catpvn(PL_subname,tmpbuf,len);
- }
- if (SvUTF8(PL_linestr))
- SvUTF8_on(PL_subname);
- have_name = TRUE;
-
-
- s = skipspace(d);
- }
- else {
- if (key == KEY_my || key == KEY_our || key==KEY_state)
- {
- *d = '\0';
- /* diag_listed_as: Missing name in "%s sub" */
- Perl_croak(aTHX_
- "Missing name in \"%s\"", PL_bufptr);
- }
- PL_expect = XATTRTERM;
- sv_setpvs(PL_subname,"?");
- have_name = FALSE;
- }
-
- if (key == KEY_format) {
- if (format_name) {
- NEXTVAL_NEXTTOKE.opval
- = newSVOP(OP_CONST,0, format_name);
- NEXTVAL_NEXTTOKE.opval->op_private |= OPpCONST_BARE;
- force_next(BAREWORD);
- }
- PREBLOCK(FORMAT);
- }
-
- /* Look for a prototype */
- if (*s == '(' && !is_sigsub) {
- s = scan_str(s,FALSE,FALSE,FALSE,NULL);
- if (!s)
- Perl_croak(aTHX_ "Prototype not terminated");
- COPLINE_SET_FROM_MULTI_END;
- (void)validate_proto(PL_subname, PL_lex_stuff,
- ckWARN(WARN_ILLEGALPROTO), 0);
- have_proto = TRUE;
-
- s = skipspace(s);
- }
+ force_next(THING);
+ if (PL_lex_starts++) {
+ /* commas only at base level: /$a\Ub$c/ => ($a,uc(b.$c)) */
+ if (!PL_lex_casemods && PL_lex_inpat)
+ TOKEN(',');
else
- have_proto = FALSE;
-
- if ( !(*s == ':' && s[1] != ':')
- && (*s != '{' && *s != '(') && key != KEY_format)
- {
- assert(key == KEY_sub || key == KEY_AUTOLOAD ||
- key == KEY_DESTROY || key == KEY_BEGIN ||
- key == KEY_UNITCHECK || key == KEY_CHECK ||
- key == KEY_INIT || key == KEY_END ||
- key == KEY_my || key == KEY_state ||
- key == KEY_our);
- if (!have_name)
- Perl_croak(aTHX_ "Illegal declaration of anonymous subroutine");
- else if (*s != ';' && *s != '}')
- Perl_croak(aTHX_ "Illegal declaration of subroutine %" SVf, SVfARG(PL_subname));
- }
-
- if (have_proto) {
- NEXTVAL_NEXTTOKE.opval =
- newSVOP(OP_CONST, 0, PL_lex_stuff);
- PL_lex_stuff = NULL;
- force_next(THING);
- }
- if (!have_name) {
- if (PL_curstash)
- sv_setpvs(PL_subname, "__ANON__");
- else
- sv_setpvs(PL_subname, "__ANON__::__ANON__");
- if (is_sigsub)
- TOKEN(ANON_SIGSUB);
- else
- TOKEN(ANONSUB);
- }
- force_ident_maybe_lex('&');
- if (is_sigsub)
- TOKEN(SIGSUB);
- else
- TOKEN(SUB);
+ AopNOASSIGN(OP_CONCAT);
}
+ else {
+ PL_bufptr = s;
+ return yylex();
+ }
+ }
- case KEY_system:
- LOP(OP_SYSTEM,XREF);
-
- case KEY_symlink:
- LOP(OP_SYMLINK,XTERM);
-
- case KEY_syscall:
- LOP(OP_SYSCALL,XTERM);
-
- case KEY_sysopen:
- LOP(OP_SYSOPEN,XTERM);
-
- case KEY_sysseek:
- LOP(OP_SYSSEEK,XTERM);
-
- case KEY_sysread:
- LOP(OP_SYSREAD,XTERM);
-
- case KEY_syswrite:
- LOP(OP_SYSWRITE,XTERM);
-
- case KEY_tr:
- case KEY_y:
- s = scan_trans(s);
- TERM(sublex_start());
-
- case KEY_tell:
- UNI(OP_TELL);
-
- case KEY_telldir:
- UNI(OP_TELLDIR);
-
- case KEY_tie:
- LOP(OP_TIE,XTERM);
-
- case KEY_tied:
- UNI(OP_TIED);
-
- case KEY_time:
- FUN0(OP_TIME);
-
- case KEY_times:
- FUN0(OP_TMS);
-
- case KEY_truncate:
- LOP(OP_TRUNCATE,XTERM);
-
- case KEY_uc:
- UNI(OP_UC);
-
- case KEY_ucfirst:
- UNI(OP_UCFIRST);
-
- case KEY_untie:
- UNI(OP_UNTIE);
-
- case KEY_until:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
- return REPORT(0);
- pl_yylval.ival = CopLINE(PL_curcop);
- OPERATOR(UNTIL);
-
- case KEY_unless:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
- return REPORT(0);
- pl_yylval.ival = CopLINE(PL_curcop);
- OPERATOR(UNLESS);
-
- case KEY_unlink:
- LOP(OP_UNLINK,XTERM);
-
- case KEY_undef:
- UNIDOR(OP_UNDEF);
-
- case KEY_unpack:
- LOP(OP_UNPACK,XTERM);
-
- case KEY_utime:
- LOP(OP_UTIME,XTERM);
-
- case KEY_umask:
- UNIDOR(OP_UMASK);
-
- case KEY_unshift:
- LOP(OP_UNSHIFT,XTERM);
-
- case KEY_use:
- s = tokenize_use(1, s);
- TOKEN(USE);
-
- case KEY_values:
- UNI(OP_VALUES);
-
- case KEY_vec:
- LOP(OP_VEC,XTERM);
-
- case KEY_when:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
- return REPORT(0);
- pl_yylval.ival = CopLINE(PL_curcop);
- Perl_ck_warner_d(aTHX_
- packWARN(WARN_EXPERIMENTAL__SMARTMATCH),
- "when is experimental");
- OPERATOR(WHEN);
-
- case KEY_while:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_NONEXPR)
- return REPORT(0);
- pl_yylval.ival = CopLINE(PL_curcop);
- OPERATOR(WHILE);
-
- case KEY_warn:
- PL_hints |= HINT_BLOCK_SCOPE;
- LOP(OP_WARN,XTERM);
-
- case KEY_wait:
- FUN0(OP_WAIT);
-
- case KEY_waitpid:
- LOP(OP_WAITPID,XTERM);
-
- case KEY_wantarray:
- FUN0(OP_WANTARRAY);
+ return yylex();
+ case LEX_FORMLINE:
+ if (PL_parser->sub_error_count != PL_error_count) {
+ /* There was an error parsing a formline, which tends to
+ mess up the parser.
+ Unlike interpolated sub-parsing, we can't treat any of
+ these as recoverable, so no need to check sub_no_recover.
+ */
+ yyquit();
+ }
+ assert(PL_lex_formbrack);
+ s = scan_formline(PL_bufptr);
+ if (!PL_lex_formbrack)
+ return yyl_rightcurly(aTHX_ s, 1);
+ PL_bufptr = s;
+ return yylex();
+ }
- case KEY_write:
- /* Make sure $^L is defined. 0x0C is CTRL-L on ASCII platforms, and
- * we use the same number on EBCDIC */
- gv_fetchpvs("\x0C", GV_ADD|GV_NOTQUAL, SVt_PV);
- UNI(OP_ENTERWRITE);
+ /* We really do *not* want PL_linestr ever becoming a COW. */
+ assert (!SvIsCOW(PL_linestr));
+ s = PL_bufptr;
+ PL_oldoldbufptr = PL_oldbufptr;
+ PL_oldbufptr = s;
- case KEY_x:
- if (PL_expect == XOPERATOR) {
- if (*s == '=' && !PL_lex_allbrackets
- && PL_lex_fakeeof >= LEX_FAKEEOF_ASSIGN)
- {
- return REPORT(0);
- }
- Mop(OP_REPEAT);
- }
- check_uni();
- goto just_a_word;
+ if (PL_in_my == KEY_sigvar) {
+ PL_parser->saw_infix_sigil = 0;
+ return yyl_sigvar(aTHX_ s);
+ }
- case KEY_xor:
- if (!PL_lex_allbrackets && PL_lex_fakeeof >= LEX_FAKEEOF_LOWLOGIC)
- return REPORT(0);
- pl_yylval.ival = OP_XOR;
- OPERATOR(OROP);
- }
- }}
+ {
+ /* yyl_try() and its callees might consult PL_parser->saw_infix_sigil.
+ On its return, we then need to set it to indicate whether the token
+ we just encountered was an infix operator that (if we hadn't been
+ expecting an operator) have been a sigil.
+ */
+ bool expected_operator = (PL_expect == XOPERATOR);
+ int ret = yyl_try(aTHX_ s);
+ switch (pl_yylval.ival) {
+ case OP_BIT_AND:
+ case OP_MODULO:
+ case OP_MULTIPLY:
+ case OP_NBIT_AND:
+ if (expected_operator) {
+ PL_parser->saw_infix_sigil = 1;
+ break;
+ }
+ /* FALLTHROUGH */
+ default:
+ PL_parser->saw_infix_sigil = 0;
+ }
+ return ret;
+ }
}
+
/*
S_pending_ident
Looks up an identifier in the pad or in a package
- is_sig indicates that this is a subroutine signature variable
+ PL_in_my == KEY_sigvar indicates that this is a subroutine signature variable
rather than a plain pad var.
Returns:
@@ -9052,8 +9502,8 @@ S_pending_ident(pTHX)
/* diag_listed_as: No package name allowed for variable %s
in "our" */
yyerror_pv(Perl_form(aTHX_ "No package name allowed for "
- "%se %s in \"our\"",
- *PL_tokenbuf=='&' ?"subroutin":"variabl",
+ "%s %s in \"our\"",
+ *PL_tokenbuf=='&' ? "subroutine" : "variable",
PL_tokenbuf), UTF ? SVf_UTF8 : 0);
tmp = allocmy(PL_tokenbuf, tokenbuf_len, UTF ? SVf_UTF8 : 0);
}
@@ -9065,7 +9515,7 @@ S_pending_ident(pTHX)
GCC_DIAG_IGNORE_STMT(-Wformat-nonliteral);
yyerror_pv(Perl_form(aTHX_ PL_no_myglob,
PL_in_my == KEY_my ? "my" : "state",
- *PL_tokenbuf == '&' ? "subroutin" : "variabl",
+ *PL_tokenbuf == '&' ? "subroutine" : "variable",
PL_tokenbuf),
UTF ? SVf_UTF8 : 0);
GCC_DIAG_RESTORE_STMT;
@@ -9193,7 +9643,7 @@ S_checkcomma(pTHX_ const char *s, const char *name, const char *what)
* block / parens, boolean operators (&&, ||, //) and branch
* constructs (or, and, if, until, unless, while, err, for).
* Not a very solid hack... */
- if (!*w || !strchr(";&/|})]oaiuwef!=", *w))
+ if (!*w || !memCHRs(";&/|})]oaiuwef!=", *w))
Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
"%s (...) interpreted as function",name);
}
@@ -9255,75 +9705,31 @@ S_new_constant(pTHX_ const char *s, STRLEN len, const char *key, STRLEN keylen,
SV **cvp;
SV *cv, *typesv;
const char *why1 = "", *why2 = "", *why3 = "";
+ const char * optional_colon = ":"; /* Only some messages have a colon */
+ char *msg;
PERL_ARGS_ASSERT_NEW_CONSTANT;
/* We assume that this is true: */
- if (*key == 'c') { assert (strEQ(key, "charnames")); }
assert(type || s);
sv_2mortal(sv); /* Parent created it permanently */
- if (!table
- || ! (PL_hints & HINT_LOCALIZE_HH)
- || ! (cvp = hv_fetch(table, key, keylen, FALSE))
- || ! SvOK(*cvp))
+
+ if ( ! table
+ || ! (PL_hints & HINT_LOCALIZE_HH))
{
- char *msg;
-
- /* Here haven't found what we're looking for. If it is charnames,
- * perhaps it needs to be loaded. Try doing that before giving up */
- if (*key == 'c') {
- Perl_load_module(aTHX_
- 0,
- newSVpvs("_charnames"),
- /* version parameter; no need to specify it, as if
- * we get too early a version, will fail anyway,
- * not being able to find '_charnames' */
- NULL,
- newSVpvs(":full"),
- newSVpvs(":short"),
- NULL);
- assert(sp == PL_stack_sp);
- table = GvHV(PL_hintgv);
- if (table
- && (PL_hints & HINT_LOCALIZE_HH)
- && (cvp = hv_fetch(table, key, keylen, FALSE))
- && SvOK(*cvp))
- {
- goto now_ok;
- }
- }
- if (!table || !(PL_hints & HINT_LOCALIZE_HH)) {
- msg = Perl_form(aTHX_
- "Constant(%.*s) unknown",
- (int)(type ? typelen : len),
- (type ? type: s));
- }
- else {
- why1 = "$^H{";
- why2 = key;
- why3 = "} is not defined";
- report:
- if (*key == 'c') {
- msg = Perl_form(aTHX_
- /* The +3 is for '\N{'; -4 for that, plus '}' */
- "Unknown charname '%.*s'", (int)typelen - 4, type + 3
- );
- }
- else {
- msg = Perl_form(aTHX_ "Constant(%.*s): %s%s%s",
- (int)(type ? typelen : len),
- (type ? type: s), why1, why2, why3);
- }
- }
- if (error_msg) {
- *error_msg = msg;
- }
- else {
- yyerror_pv(msg, UTF ? SVf_UTF8 : 0);
- }
- return SvREFCNT_inc_simple_NN(sv);
+ why1 = "unknown";
+ optional_colon = "";
+ goto report;
}
- now_ok:
+
+ cvp = hv_fetch(table, key, keylen, FALSE);
+ if (!cvp || !SvOK(*cvp)) {
+ why1 = "$^H{";
+ why2 = key;
+ why3 = "} is not defined";
+ goto report;
+ }
+
cv = *cvp;
if (!pv && s)
pv = newSVpvn_flags(s, len, SVs_TEMP);
@@ -9368,16 +9774,31 @@ S_new_constant(pTHX_ const char *s, STRLEN len, const char *key, STRLEN keylen,
LEAVE ;
POPSTACK;
- if (!SvOK(res)) {
- why1 = "Call to &{$^H{";
- why2 = key;
- why3 = "}} did not return a defined value";
- sv = res;
- (void)sv_2mortal(sv);
- goto report;
+ if (SvOK(res)) {
+ return res;
}
- return res;
+ sv = res;
+ (void)sv_2mortal(sv);
+
+ why1 = "Call to &{$^H{";
+ why2 = key;
+ why3 = "}} did not return a defined value";
+
+ report:
+
+ msg = Perl_form(aTHX_ "Constant(%.*s)%s %s%s%s",
+ (int)(type ? typelen : len),
+ (type ? type: s),
+ optional_colon,
+ why1, why2, why3);
+ if (error_msg) {
+ *error_msg = msg;
+ }
+ else {
+ yyerror_pv(msg, UTF ? SVf_UTF8 : 0);
+ }
+ return SvREFCNT_inc_simple_NN(sv);
}
PERL_STATIC_INLINE void
@@ -9435,11 +9856,11 @@ S_parse_ident(pTHX_ char **s, char **d, char * const e, int allow_package,
}
if (UNLIKELY(tick_warn && saw_tick && PL_lex_state == LEX_INTERPNORMAL
&& !PL_lex_brackets && ckWARN(WARN_SYNTAX))) {
- char *d;
+ char *this_d;
char *d2;
- Newx(d, *s - olds + saw_tick + 2, char); /* +2 for $# */
- d2 = d;
- SAVEFREEPV(d);
+ Newx(this_d, *s - olds + saw_tick + 2, char); /* +2 for $# */
+ d2 = this_d;
+ SAVEFREEPV(this_d);
Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
"Old package separator used in string");
if (olds[-1] == '#')
@@ -9455,7 +9876,7 @@ S_parse_ident(pTHX_ char **s, char **d, char * const e, int allow_package,
}
Perl_warner(aTHX_ packWARN(WARN_SYNTAX),
"\t(Did you mean \"%" UTF8f "\" instead?)\n",
- UTF8fARG(is_utf8, d2-d, d));
+ UTF8fARG(is_utf8, d2-this_d, this_d));
}
return;
}
@@ -9512,12 +9933,17 @@ S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni)
if (isSPACE(*s) || !*s)
s = skipspace(s);
- if (isDIGIT(*s)) {
- while (isDIGIT(*s)) {
- if (d >= e)
- Perl_croak(aTHX_ "%s", ident_too_long);
- *d++ = *s++;
- }
+ if (isDIGIT(*s)) { /* handle $0 and $1 $2 and $10 and etc */
+ bool is_zero= *s == '0' ? TRUE : FALSE;
+ char *digit_start= d;
+ *d++ = *s++;
+ while (s < PL_bufend && isDIGIT(*s)) {
+ if (d >= e)
+ Perl_croak(aTHX_ "%s", ident_too_long);
+ *d++ = *s++;
+ }
+ if (is_zero && d - digit_start > 1)
+ Perl_croak(aTHX_ ident_var_zero_multi_digit);
}
else { /* See if it is a "normal" identifier */
parse_ident(&s, &d, e, 1, is_utf8, FALSE, TRUE);
@@ -9555,9 +9981,9 @@ S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni)
s = skipspace(s);
}
}
- if ((s <= PL_bufend - (is_utf8)
+ if ((s <= PL_bufend - ((is_utf8)
? UTF8SKIP(s)
- : 1)
+ : 1))
&& VALID_LEN_ONE_IDENT(s, PL_bufend, is_utf8))
{
if (is_utf8) {
@@ -9569,6 +9995,19 @@ S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni)
}
else {
*d = *s++;
+ /* special case to handle ${10}, ${11} the same way we handle ${1} etc */
+ if (isDIGIT(*d)) {
+ bool is_zero= *d == '0' ? TRUE : FALSE;
+ char *digit_start= d;
+ while (s < PL_bufend && isDIGIT(*s)) {
+ d++;
+ if (d >= e)
+ Perl_croak(aTHX_ "%s", ident_too_long);
+ *d= *s++;
+ }
+ if (is_zero && d - digit_start > 1)
+ Perl_croak(aTHX_ ident_var_zero_multi_digit);
+ }
d[1] = '\0';
}
}
@@ -9658,7 +10097,7 @@ S_scan_ident(pTHX_ char *s, char *dest, STRLEN destlen, I32 ck_uni)
PL_lex_state = LEX_INTERPEND;
PL_expect = XREF;
}
- if (PL_lex_state == LEX_NORMAL) {
+ if (PL_lex_state == LEX_NORMAL || PL_lex_brackets) {
if (ckWARN(WARN_AMBIGUOUS)
&& (keyword(dest, d - dest, 0)
|| get_cvn_flags(dest, d - dest, is_utf8
@@ -10005,9 +10444,7 @@ S_scan_trans(pTHX_ char *start)
o = newPVOP(nondestruct ? OP_TRANSR : OP_TRANS, 0, (char*)NULL);
o->op_private &= ~OPpTRANS_ALL;
- o->op_private |= del|squash|complement|
- (DO_UTF8(PL_lex_stuff)? OPpTRANS_FROM_UTF : 0)|
- (DO_UTF8(PL_parser->lex_sub_repl) ? OPpTRANS_TO_UTF : 0);
+ o->op_private |= del|squash|complement;
PL_lex_op = o;
pl_yylval.ival = nondestruct ? OP_TRANSR : OP_TRANS;
@@ -10737,7 +11174,7 @@ Perl_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int
}
else {
termcode = utf8_to_uvchr_buf((U8*)s, (U8*)PL_bufend, &termlen);
- if (UTF && UNLIKELY(! _is_grapheme((U8 *) start,
+ if (UTF && UNLIKELY(! is_grapheme((U8 *) start,
(U8 *) s,
(U8 *) PL_bufend,
termcode)))
@@ -10809,7 +11246,7 @@ Perl_scan_str(pTHX_ char *start, int keep_bracketed_quoted, int keep_delims, int
&& memEQ(s + 1, (char*)termstr + 1, termlen - 1))
{
if ( UTF
- && UNLIKELY(! _is_grapheme((U8 *) start,
+ && UNLIKELY(! is_grapheme((U8 *) start,
(U8 *) s,
(U8 *) PL_bufend,
termcode)))
@@ -10964,6 +11401,7 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
const char *lastub = NULL; /* position of last underbar */
static const char* const number_too_long = "Number too long";
bool warned_about_underscore = 0;
+ I32 shift; /* shift per digit for hex/oct/bin, hoisted here for fp */
#define WARN_ABOUT_UNDERSCORE() \
do { \
if (!warned_about_underscore) { \
@@ -11010,8 +11448,6 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
{
/* variables:
u holds the "number so far"
- shift the power of 2 of the base
- (hex == 4, octal == 3, binary == 1)
overflowed was the number more than we can hold?
Shift is used when we add a digit. It also serves as an "are
@@ -11020,9 +11456,9 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
*/
NV n = 0.0;
UV u = 0;
- I32 shift;
bool overflowed = FALSE;
bool just_zero = TRUE; /* just plain 0 or binary number? */
+ bool has_digs = FALSE;
static const NV nvshift[5] = { 1.0, 2.0, 4.0, 8.0, 16.0 };
static const char* const bases[5] =
{ "", "binary", "", "octal", "hexadecimal" };
@@ -11114,6 +11550,7 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
digit:
just_zero = FALSE;
+ has_digs = TRUE;
if (!overflowed) {
assert(shift >= 0);
x = u << shift; /* make room for the digit */
@@ -11329,6 +11766,21 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
}
}
+ if (shift != 3 && !has_digs) {
+ /* 0x or 0b with no digits, treat it as an error.
+ Originally this backed up the parse before the b or
+ x, but that has the potential for silent changes in
+ behaviour, like for: "0x.3" and "0x+$foo".
+ */
+ const char *d = s;
+ char *oldbp = PL_bufptr;
+ if (*d) ++d; /* so the user sees the bad non-digit */
+ PL_bufptr = (char *)d; /* so yyerror reports the context */
+ yyerror(Perl_form(aTHX_ "No digits found for %s literal",
+ shift == 4 ? "hexadecimal" : "binary"));
+ PL_bufptr = oldbp;
+ }
+
if (overflowed) {
if (n > 4294967295.0)
Perl_ck_warner(aTHX_ packWARN(WARN_PORTABLE),
@@ -11367,8 +11819,21 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
if (hexfp) {
floatit = TRUE;
*d++ = '0';
- *d++ = 'x';
- s = start + 2;
+ switch (shift) {
+ case 4:
+ *d++ = 'x';
+ s = start + 2;
+ break;
+ case 3:
+ s = start + 1;
+ break;
+ case 1:
+ *d++ = 'b';
+ s = start + 2;
+ break;
+ default:
+ NOT_REACHED; /* NOTREACHED */
+ }
}
/* read next group of digits and _ and copy into d */
@@ -11441,7 +11906,7 @@ Perl_scan_num(pTHX_ const char *start, YYSTYPE* lvalp)
/* read exponent part, if present */
if ((isALPHA_FOLD_EQ(*s, 'e')
|| UNLIKELY(hexfp && isALPHA_FOLD_EQ(*s, 'p')))
- && strchr("+-0123456789_", s[1]))
+ && memCHRs("+-0123456789_", s[1]))
{
int exp_digits = 0;
const char *save_s = s;
@@ -12043,7 +12508,7 @@ S_utf16_textfilter(pTHX_ int idx, SV *sv, int maxlen)
while (1) {
STRLEN chars;
STRLEN have;
- I32 newlen;
+ Size_t newlen;
U8 *end;
/* First, look in our buffer of existing UTF-8 data: */
char *nl = (char *)memchr(SvPVX(utf8_buffer), '\n', SvCUR(utf8_buffer));
@@ -12266,7 +12731,7 @@ Perl_keyword_plugin_standard(pTHX_
}
/*
-=for apidoc Amx|void|wrap_keyword_plugin|Perl_keyword_plugin_t new_plugin|Perl_keyword_plugin_t *old_plugin_p
+=for apidoc wrap_keyword_plugin
Puts a C function into the chain of keyword plugins. This is the
preferred way to manipulate the L</PL_keyword_plugin> variable.
@@ -12302,7 +12767,7 @@ look something like this:
static Perl_keyword_plugin_t next_keyword_plugin;
static OP *my_keyword_plugin(pTHX_
- char *keyword_plugin, STRLEN keyword_len, OP **op_ptr)
+ char *keyword_ptr, STRLEN keyword_len, OP **op_ptr)
{
if (memEQs(keyword_ptr, keyword_len,
"my_new_keyword")) {
@@ -12385,7 +12850,7 @@ S_parse_expr(pTHX_ I32 fakeeof, U32 flags)
}
/*
-=for apidoc Amx|OP *|parse_arithexpr|U32 flags
+=for apidoc parse_arithexpr
Parse a Perl arithmetic expression. This may contain operators of precedence
down to the bit shift operators. The expression must be followed (and thus
@@ -12407,7 +12872,10 @@ normally resulting in a single exception at the top level of parsing
which covers all the compilation errors that occurred. Some compilation
errors, however, will throw an exception immediately.
+=for apidoc Amnh||PARSE_OPTIONAL
+
=cut
+
*/
OP *
@@ -12417,7 +12885,7 @@ Perl_parse_arithexpr(pTHX_ U32 flags)
}
/*
-=for apidoc Amx|OP *|parse_termexpr|U32 flags
+=for apidoc parse_termexpr
Parse a Perl term expression. This may contain operators of precedence
down to the assignment operators. The expression must be followed (and thus
@@ -12449,7 +12917,7 @@ Perl_parse_termexpr(pTHX_ U32 flags)
}
/*
-=for apidoc Amx|OP *|parse_listexpr|U32 flags
+=for apidoc parse_listexpr
Parse a Perl list expression. This may contain operators of precedence
down to the comma operator. The expression must be followed (and thus
@@ -12481,7 +12949,7 @@ Perl_parse_listexpr(pTHX_ U32 flags)
}
/*
-=for apidoc Amx|OP *|parse_fullexpr|U32 flags
+=for apidoc parse_fullexpr
Parse a single complete Perl expression. This allows the full
expression grammar, including the lowest-precedence operators such
@@ -12514,7 +12982,7 @@ Perl_parse_fullexpr(pTHX_ U32 flags)
}
/*
-=for apidoc Amx|OP *|parse_block|U32 flags
+=for apidoc parse_block
Parse a single complete Perl code block. This consists of an opening
brace, a sequence of statements, and a closing brace. The block
@@ -12550,7 +13018,7 @@ Perl_parse_block(pTHX_ U32 flags)
}
/*
-=for apidoc Amx|OP *|parse_barestmt|U32 flags
+=for apidoc parse_barestmt
Parse a single unadorned Perl statement. This may be a normal imperative
statement or a declaration that has compile-time effect. It does not
@@ -12588,7 +13056,7 @@ Perl_parse_barestmt(pTHX_ U32 flags)
}
/*
-=for apidoc Amx|SV *|parse_label|U32 flags
+=for apidoc parse_label
Parse a single label, possibly optional, of the type that may prefix a
Perl statement. It is up to the caller to ensure that the dynamic parser
@@ -12658,7 +13126,7 @@ Perl_parse_label(pTHX_ U32 flags)
}
/*
-=for apidoc Amx|OP *|parse_fullstmt|U32 flags
+=for apidoc parse_fullstmt
Parse a single complete Perl statement. This may be a normal imperative
statement or a declaration that has compile-time effect, and may include
@@ -12693,7 +13161,7 @@ Perl_parse_fullstmt(pTHX_ U32 flags)
}
/*
-=for apidoc Amx|OP *|parse_stmtseq|U32 flags
+=for apidoc parse_stmtseq
Parse a sequence of zero or more Perl statements. These may be normal
imperative statements, including optional labels, or declarations
@@ -12737,5 +13205,37 @@ Perl_parse_stmtseq(pTHX_ U32 flags)
}
/*
+=for apidoc parse_subsignature
+
+Parse a subroutine signature declaration. This is the contents of the
+parentheses following a named or anonymous subroutine declaration when the
+C<signatures> feature is enabled. Note that this function neither expects
+nor consumes the opening and closing parentheses around the signature; it
+is the caller's job to handle these.
+
+This function must only be called during parsing of a subroutine; after
+L</start_subparse> has been called. It might allocate lexical variables on
+the pad for the current subroutine.
+
+The op tree to unpack the arguments from the stack at runtime is returned.
+This op tree should appear at the beginning of the compiled function. The
+caller may wish to use L</op_append_list> to build their function body
+after it, or splice it together with the body before calling L</newATTRSUB>.
+
+The C<flags> parameter is reserved for future use, and must always
+be zero.
+
+=cut
+*/
+
+OP *
+Perl_parse_subsignature(pTHX_ U32 flags)
+{
+ if (flags)
+ Perl_croak(aTHX_ "Parsing code internal error (%s)", "parse_subsignature");
+ return parse_recdescent_for_op(GRAMSUBSIGNATURE, LEX_FAKEEOF_NONEXPR);
+}
+
+/*
* ex: set ts=8 sts=4 sw=4 et:
*/
diff --git a/gnu/usr.bin/perl/uconfig.h b/gnu/usr.bin/perl/uconfig.h
index 9341deef18a..7d3db32309a 100644
--- a/gnu/usr.bin/perl/uconfig.h
+++ b/gnu/usr.bin/perl/uconfig.h
@@ -346,7 +346,7 @@
/* HAS_REGCOMP:
* This symbol, if defined, indicates that the regcomp() routine is
- * available to do some regular patern matching (usually on POSIX.2
+ * available to do some regular pattern matching (usually on POSIX.2
* conforming systems).
*/
#define HAS_REGCOMP /* POSIX.2 */
@@ -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.30/unknown" / **/
-/*#define ARCHLIB_EXP "/usr/local/lib/perl5/5.30/unknown" / **/
+/*#define ARCHLIB "/usr/local/lib/perl5/5.32/unknown" / **/
+/*#define ARCHLIB_EXP "/usr/local/lib/perl5/5.32/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.30" /**/
-#define PRIVLIB_EXP "/usr/local/lib/perl5/5.30" /**/
+#define PRIVLIB "/usr/local/lib/perl5/5.32" /**/
+#define PRIVLIB_EXP "/usr/local/lib/perl5/5.32" /**/
/* 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.30/unknown" / **/
-/*#define SITEARCH_EXP "/usr/local/lib/perl5/5.30/unknown" / **/
+/*#define SITEARCH "/usr/local/lib/perl5/5.32/unknown" / **/
+/*#define SITEARCH_EXP "/usr/local/lib/perl5/5.32/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.30" /**/
-#define SITELIB_EXP "/usr/local/lib/perl5/5.30" /**/
+#define SITELIB "/usr/local/lib/perl5/5.32" /**/
+#define SITELIB_EXP "/usr/local/lib/perl5/5.32" /**/
#define SITELIB_STEM "/usr/local/lib/perl5" /**/
/* PERL_VENDORARCH:
@@ -1456,6 +1456,10 @@
/* HASATTRIBUTE_WARN_UNUSED_RESULT:
* Can we handle GCC attribute for warning on unused results
*/
+/* HASATTRIBUTE_ALWAYS_INLINE:
+ * Can we handle GCC attribute for functions that should always be
+ * inlined.
+ */
/*#define HASATTRIBUTE_DEPRECATED / **/
/*#define HASATTRIBUTE_FORMAT / **/
/*#define PRINTF_FORMAT_NULL_OK / **/
@@ -1465,6 +1469,7 @@
/*#define HASATTRIBUTE_PURE / **/
/*#define HASATTRIBUTE_UNUSED / **/
/*#define HASATTRIBUTE_WARN_UNUSED_RESULT / **/
+/*#define HASATTRIBUTE_ALWAYS_INLINE / **/
/* HAS_BACKTRACE:
* This symbol, if defined, indicates that the backtrace() routine is
@@ -1904,6 +1909,10 @@
* This symbol, if defined, indicates the availability of
* struct sockaddr_in6;
*/
+/* HAS_SOCKADDR_STORAGE:
+ * This symbol, if defined, indicates the availability of
+ * struct sockaddr_storage;
+ */
/* HAS_SIN6_SCOPE_ID:
* This symbol, if defined, indicates that the struct sockaddr_in6
* structure has a member called sin6_scope_id.
@@ -1928,6 +1937,7 @@
/*#define HAS_SOCKETPAIR / **/
/*#define HAS_SOCKADDR_SA_LEN / **/
/*#define HAS_SOCKADDR_IN6 / **/
+/*#define HAS_SOCKADDR_STORAGE / **/
/*#define HAS_SIN6_SCOPE_ID / **/
/*#define HAS_IP_MREQ / **/
/*#define HAS_IP_MREQ_SOURCE / **/
@@ -4196,11 +4206,11 @@
/*#define USE_64_BIT_ALL / **/
#endif
-/* USE_CBACKTRACE:
+/* USE_C_BACKTRACE:
* This symbol, if defined, indicates that Perl should
* be built with support for backtrace.
*/
-/*#define USE_CBACKTRACE / **/
+/*#define USE_C_BACKTRACE / **/
/* USE_DTRACE:
* This symbol, if defined, indicates that Perl should
@@ -5087,6 +5097,12 @@
/*#define HAS_TTYNAME_R / **/
#define TTYNAME_R_PROTO 0 /**/
+/* HAS_WCRTOMB:
+ * This symbol, if defined, indicates that the wcrtomb routine is
+ * available to convert a wide character into a multi-byte character.
+ */
+/*#define HAS_WCRTOMB / **/
+
/* I_MACH_CTHREADS:
* This symbol, if defined, indicates to the C program that it should
* include <mach/cthreads.h>.
@@ -5244,6 +5260,6 @@
#endif
/* Generated from:
- * 6608de918c3c876975f74b684da2536ab1ee23459783d691ae02ce2526a497a7 config_h.SH
- * 2aaf18b9277e180fc5e5d60290ecb0c91fcac3531bd8825e5687a212daa586e9 uconfig.sh
+ * 14796a77fb4ae3335f5e589a98445bc6e838b688194f6f112537495f0814f5d5 config_h.SH
+ * 6e8898de349ca5bd5102aa12be91e6884110157cb9267e661f6fc797bbd54649 uconfig.sh
* ex: set ro: */
diff --git a/gnu/usr.bin/perl/uconfig.sh b/gnu/usr.bin/perl/uconfig.sh
index 560a766e756..1d4a0f4a571 100644
--- a/gnu/usr.bin/perl/uconfig.sh
+++ b/gnu/usr.bin/perl/uconfig.sh
@@ -6,8 +6,8 @@ afs='false'
afsroot='/afs'
alignbytes='4'
aphostname='/bin/hostname'
-archlib='/usr/local/lib/perl5/5.30/unknown'
-archlibexp='/usr/local/lib/perl5/5.30/unknown'
+archlib='/usr/local/lib/perl5/5.32/unknown'
+archlibexp='/usr/local/lib/perl5/5.32/unknown'
archname='unknown'
asctime_r_proto='0'
bin='/usr/local/bin'
@@ -55,6 +55,7 @@ d_asinh='undef'
d_atanh='undef'
d_atolf='undef'
d_atoll='undef'
+d_attribute_always_inline='undef'
d_attribute_deprecated='undef'
d_attribute_format='undef'
d_attribute_malloc='undef'
@@ -477,6 +478,7 @@ d_sitearch='undef'
d_snprintf='undef'
d_sockaddr_in6='undef'
d_sockaddr_sa_len='undef'
+d_sockaddr_storage='undef'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='undef'
@@ -568,6 +570,7 @@ d_voidtty=''
d_vsnprintf='undef'
d_wait4='undef'
d_waitpid='undef'
+d_wcrtomb='undef'
d_wcscmp='undef'
d_wcstombs='undef'
d_wcsxfrm='undef'
@@ -778,8 +781,8 @@ package='perl5'
perl_static_inline='static'
phostname='hostname'
pidtype=int
-privlib='/usr/local/lib/perl5/5.30'
-privlibexp='/usr/local/lib/perl5/5.30'
+privlib='/usr/local/lib/perl5/5.32'
+privlibexp='/usr/local/lib/perl5/5.32'
procselfexe=''
prototype='undef'
ptrsize='4'
@@ -829,11 +832,11 @@ sig_name_init='0'
sig_num_init='0'
sig_size='1'
signal_t=int
-sitearch='/usr/local/lib/perl5/5.30/unknown'
-sitearchexp='/usr/local/lib/perl5/5.30/unknown'
-sitelib='/usr/local/lib/perl5/5.30'
+sitearch='/usr/local/lib/perl5/5.32/unknown'
+sitearchexp='/usr/local/lib/perl5/5.32/unknown'
+sitelib='/usr/local/lib/perl5/5.32'
sitelib_stem='/usr/local/lib/perl5'
-sitelibexp='/usr/local/lib/perl5/5.30'
+sitelibexp='/usr/local/lib/perl5/5.32'
sizesize=4
sizetype='size_t'
socksizetype='int'
diff --git a/gnu/usr.bin/perl/uconfig64.sh b/gnu/usr.bin/perl/uconfig64.sh
index bab459fdbf0..c6479b80106 100644
--- a/gnu/usr.bin/perl/uconfig64.sh
+++ b/gnu/usr.bin/perl/uconfig64.sh
@@ -6,8 +6,8 @@ afs='false'
afsroot='/afs'
alignbytes='8'
aphostname='/bin/hostname'
-archlib='/usr/local/lib/perl5/5.30/unknown'
-archlibexp='/usr/local/lib/perl5/5.30/unknown'
+archlib='/usr/local/lib/perl5/5.32/unknown'
+archlibexp='/usr/local/lib/perl5/5.32/unknown'
archname='unknown64'
asctime_r_proto='0'
bin='/usr/local/bin'
@@ -55,6 +55,7 @@ d_asinh='undef'
d_atanh='undef'
d_atolf='undef'
d_atoll='undef'
+d_attribute_always_inline='undef'
d_attribute_deprecated='undef'
d_attribute_format='undef'
d_attribute_malloc='undef'
@@ -477,6 +478,7 @@ d_sitearch='undef'
d_snprintf='undef'
d_sockaddr_in6='undef'
d_sockaddr_sa_len='undef'
+d_sockaddr_storage='undef'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='undef'
@@ -568,6 +570,7 @@ d_voidtty=''
d_vsnprintf='undef'
d_wait4='undef'
d_waitpid='undef'
+d_wcrtomb='undef'
d_wcscmp='undef'
d_wcstombs='undef'
d_wcsxfrm='undef'
@@ -778,8 +781,8 @@ package='perl5'
perl_static_inline='static'
phostname='hostname'
pidtype=int
-privlib='/usr/local/lib/perl5/5.30'
-privlibexp='/usr/local/lib/perl5/5.30'
+privlib='/usr/local/lib/perl5/5.32'
+privlibexp='/usr/local/lib/perl5/5.32'
procselfexe=''
prototype='undef'
ptrsize='8'
@@ -829,11 +832,11 @@ sig_name_init='0'
sig_num_init='0'
sig_size='1'
signal_t=int
-sitearch='/usr/local/lib/perl5/5.30/unknown'
-sitearchexp='/usr/local/lib/perl5/5.30/unknown'
-sitelib='/usr/local/lib/perl5/5.30'
+sitearch='/usr/local/lib/perl5/5.32/unknown'
+sitearchexp='/usr/local/lib/perl5/5.32/unknown'
+sitelib='/usr/local/lib/perl5/5.32'
sitelib_stem='/usr/local/lib/perl5'
-sitelibexp='/usr/local/lib/perl5/5.30'
+sitelibexp='/usr/local/lib/perl5/5.32'
sizesize=4
sizetype='size_t'
socksizetype='int'
diff --git a/gnu/usr.bin/perl/unicode_constants.h b/gnu/usr.bin/perl/unicode_constants.h
index d7ccd90b7e1..b85b0fcd5a6 100644
--- a/gnu/usr.bin/perl/unicode_constants.h
+++ b/gnu/usr.bin/perl/unicode_constants.h
@@ -24,7 +24,7 @@
/*
=head1 Unicode Support
-=for apidoc AmU|placeholder|BOM_UTF8
+=for apidoc AmnU|const char *|BOM_UTF8
This is a macro that evaluates to a string constant of the UTF-8 bytes that
define the Unicode BYTE ORDER MARK (U+FEFF) for the platform that perl
@@ -33,7 +33,7 @@ works on both ASCII and EBCDIC platforms.
S<C<sizeof(BOM_UTF8) - 1>> can be used to get its length in
bytes.
-=for apidoc AmU|placeholder|REPLACEMENT_CHARACTER_UTF8
+=for apidoc AmnU|const char *|REPLACEMENT_CHARACTER_UTF8
This is a macro that evaluates to a string constant of the UTF-8 bytes that
define the Unicode REPLACEMENT CHARACTER (U+FFFD) for the platform that perl
@@ -45,8 +45,8 @@ bytes.
=cut
*/
-#define UNICODE_MAJOR_VERSION 12
-#define UNICODE_DOT_VERSION 1
+#define UNICODE_MAJOR_VERSION 13
+#define UNICODE_DOT_VERSION 0
#define UNICODE_DOT_DOT_VERSION 0
@@ -177,7 +177,7 @@ bytes.
#endif /* EBCDIC 037 */
/* The number of code points not matching \pC */
-#define NON_OTHER_COUNT_FOR_USE_ONLY_BY_REGCOMP_DOT_C 137768
+#define NON_OTHER_COUNT_FOR_USE_ONLY_BY_REGCOMP_DOT_C 143698
/* The highest code point that has any type of case change */
#define HIGHEST_CASE_CHANGING_CP_FOR_USE_ONLY_BY_UTF8_DOT_C 0x1E943
diff --git a/gnu/usr.bin/perl/universal.c b/gnu/usr.bin/perl/universal.c
index 66eafc5c3de..67795ac4299 100644
--- a/gnu/usr.bin/perl/universal.c
+++ b/gnu/usr.bin/perl/universal.c
@@ -38,8 +38,13 @@
* The main guts of traverse_isa was actually copied from gv_fetchmeth
*/
+#define PERL_ARGS_ASSERT_ISA_LOOKUP \
+ assert(stash); \
+ assert(namesv || name)
+
+
STATIC bool
-S_isa_lookup(pTHX_ HV *stash, const char * const name, STRLEN len, U32 flags)
+S_isa_lookup(pTHX_ HV *stash, SV *namesv, const char * name, STRLEN len, U32 flags)
{
const struct mro_meta *const meta = HvMROMETA(stash);
HV *isa = meta->isa;
@@ -52,7 +57,7 @@ S_isa_lookup(pTHX_ HV *stash, const char * const name, STRLEN len, U32 flags)
isa = meta->isa;
}
- if (hv_common(isa, NULL, name, len, ( flags & SVf_UTF8 ? HVhek_UTF8 : 0),
+ if (hv_common(isa, namesv, name, len, ( flags & SVf_UTF8 ? HVhek_UTF8 : 0),
HV_FETCH_ISEXISTS, NULL, 0)) {
/* Direct name lookup worked. */
return TRUE;
@@ -61,7 +66,7 @@ S_isa_lookup(pTHX_ HV *stash, const char * const name, STRLEN len, U32 flags)
/* A stash/class can go by many names (ie. User == main::User), so
we use the HvENAME in the stash itself, which is canonical, falling
back to HvNAME if necessary. */
- our_stash = gv_stashpvn(name, len, flags);
+ our_stash = gv_stashsvpvn_cached(namesv, name, len, flags);
if (our_stash) {
HEK *canon_name = HvENAME_HEK(our_stash);
@@ -77,6 +82,43 @@ S_isa_lookup(pTHX_ HV *stash, const char * const name, STRLEN len, U32 flags)
return FALSE;
}
+#define PERL_ARGS_ASSERT_SV_DERIVED_FROM_SVPVN \
+ assert(sv); \
+ assert(namesv || name)
+
+STATIC bool
+S_sv_derived_from_svpvn(pTHX_ SV *sv, SV *namesv, const char * name, const STRLEN len, U32 flags)
+{
+ HV* stash;
+
+ PERL_ARGS_ASSERT_SV_DERIVED_FROM_SVPVN;
+ SvGETMAGIC(sv);
+
+ if (SvROK(sv)) {
+ const char *type;
+ sv = SvRV(sv);
+ type = sv_reftype(sv,0);
+ if (type) {
+ if (namesv)
+ name = SvPV_nolen(namesv);
+ if (strEQ(name, type))
+ return TRUE;
+ }
+ if (!SvOBJECT(sv))
+ return FALSE;
+ stash = SvSTASH(sv);
+ }
+ else {
+ stash = gv_stashsv(sv, 0);
+ }
+
+ if (stash && isa_lookup(stash, namesv, name, len, flags))
+ return TRUE;
+
+ stash = gv_stashpvs("UNIVERSAL", 0);
+ return stash && isa_lookup(stash, namesv, name, len, flags);
+}
+
/*
=head1 SV Manipulation Functions
@@ -93,7 +135,7 @@ Currently, the only significant value for C<flags> is SVf_UTF8.
=for apidoc sv_derived_from_sv
Exactly like L</sv_derived_from_pvn>, but takes the name string in the form
-of an SV instead of a string/length pair.
+of an SV instead of a string/length pair. This is the advised form.
=cut
@@ -102,13 +144,8 @@ of an SV instead of a string/length pair.
bool
Perl_sv_derived_from_sv(pTHX_ SV *sv, SV *namesv, U32 flags)
{
- char *namepv;
- STRLEN namelen;
PERL_ARGS_ASSERT_SV_DERIVED_FROM_SV;
- namepv = SvPV(namesv, namelen);
- if (SvUTF8(namesv))
- flags |= SVf_UTF8;
- return sv_derived_from_pvn(sv, namepv, namelen, flags);
+ return sv_derived_from_svpvn(sv, namesv, NULL, 0, flags);
}
/*
@@ -123,7 +160,7 @@ bool
Perl_sv_derived_from(pTHX_ SV *sv, const char *const name)
{
PERL_ARGS_ASSERT_SV_DERIVED_FROM;
- return sv_derived_from_pvn(sv, name, strlen(name), 0);
+ return sv_derived_from_svpvn(sv, NULL, name, strlen(name), 0);
}
/*
@@ -140,37 +177,84 @@ bool
Perl_sv_derived_from_pv(pTHX_ SV *sv, const char *const name, U32 flags)
{
PERL_ARGS_ASSERT_SV_DERIVED_FROM_PV;
- return sv_derived_from_pvn(sv, name, strlen(name), flags);
+ return sv_derived_from_svpvn(sv, NULL, name, strlen(name), flags);
}
bool
Perl_sv_derived_from_pvn(pTHX_ SV *sv, const char *const name, const STRLEN len, U32 flags)
{
- HV *stash;
-
PERL_ARGS_ASSERT_SV_DERIVED_FROM_PVN;
+ return sv_derived_from_svpvn(sv, NULL, name, len, flags);
+}
- SvGETMAGIC(sv);
+/*
+=for apidoc sv_isa_sv
- if (SvROK(sv)) {
- const char *type;
- sv = SvRV(sv);
- type = sv_reftype(sv,0);
- if (type && strEQ(type,name))
- return TRUE;
- if (!SvOBJECT(sv))
- return FALSE;
- stash = SvSTASH(sv);
- }
- else {
- stash = gv_stashsv(sv, 0);
+Returns a boolean indicating whether the SV is an object reference and is
+derived from the specified class, respecting any C<isa()> method overloading
+it may have. Returns false if C<sv> is not a reference to an object, or is
+not derived from the specified class.
+
+This is the function used to implement the behaviour of the C<isa> operator.
+
+Does not invoke magic on C<sv>.
+
+Not to be confused with the older C<sv_isa> function, which does not use an
+overloaded C<isa()> method, nor will check subclassing.
+
+=cut
+
+*/
+
+bool
+Perl_sv_isa_sv(pTHX_ SV *sv, SV *namesv)
+{
+ GV *isagv;
+
+ PERL_ARGS_ASSERT_SV_ISA_SV;
+
+ if(!SvROK(sv) || !SvOBJECT(SvRV(sv)))
+ return FALSE;
+
+ /* This abuse of gv_fetchmeth_pv() with level = 1 skips the UNIVERSAL
+ * lookup
+ * TODO: Consider if we want a NOUNIVERSAL flag for requesting this in a
+ * more obvious way
+ */
+ isagv = gv_fetchmeth_pvn(SvSTASH(SvRV(sv)), "isa", 3, 1, 0);
+ if(isagv) {
+ dSP;
+ CV *isacv = isGV(isagv) ? GvCV(isagv) : (CV *)isagv;
+ SV *retsv;
+ bool ret;
+
+ PUTBACK;
+
+ ENTER;
+ SAVETMPS;
+
+ EXTEND(SP, 2);
+ PUSHMARK(SP);
+ PUSHs(sv);
+ PUSHs(namesv);
+ PUTBACK;
+
+ call_sv((SV *)isacv, G_SCALAR);
+
+ SPAGAIN;
+ retsv = POPs;
+ ret = SvTRUE(retsv);
+ PUTBACK;
+
+ FREETMPS;
+ LEAVE;
+
+ return ret;
}
- if (stash && isa_lookup(stash, name, len, flags))
- return TRUE;
+ /* TODO: Support namesv being an HV ref to the stash directly? */
- stash = gv_stashpvs("UNIVERSAL", 0);
- return stash && isa_lookup(stash, name, len, flags);
+ return sv_derived_from_sv(sv, namesv, 0);
}
/*
@@ -1005,6 +1089,161 @@ XS(XS_Internals_getcwd)
#endif
+XS(XS_NamedCapture_tie_it)
+{
+ dXSARGS;
+
+ if (items != 1)
+ croak_xs_usage(cv, "sv");
+ {
+ SV *sv = ST(0);
+ GV * const gv = (GV *)sv;
+ HV * const hv = GvHVn(gv);
+ SV *rv = newSV_type(SVt_IV);
+ const char *gv_name = GvNAME(gv);
+
+ SvRV_set(rv, newSVuv(
+ strEQ(gv_name, "-") || strEQ(gv_name, "\003APTURE_ALL")
+ ? RXapif_ALL : RXapif_ONE));
+ SvROK_on(rv);
+ sv_bless(rv, GvSTASH(CvGV(cv)));
+
+ sv_unmagic((SV *)hv, PERL_MAGIC_tied);
+ sv_magic((SV *)hv, rv, PERL_MAGIC_tied, NULL, 0);
+ SvREFCNT_dec(rv); /* As sv_magic increased it by one. */
+ }
+ XSRETURN_EMPTY;
+}
+
+XS(XS_NamedCapture_TIEHASH)
+{
+ dVAR; dXSARGS;
+ if (items < 1)
+ croak_xs_usage(cv, "package, ...");
+ {
+ const char * package = (const char *)SvPV_nolen(ST(0));
+ UV flag = RXapif_ONE;
+ mark += 2;
+ while(mark < sp) {
+ STRLEN len;
+ const char *p = SvPV_const(*mark, len);
+ if(memEQs(p, len, "all"))
+ flag = SvTRUE(mark[1]) ? RXapif_ALL : RXapif_ONE;
+ mark += 2;
+ }
+ ST(0) = sv_2mortal(newSV_type(SVt_IV));
+ sv_setuv(newSVrv(ST(0), package), flag);
+ }
+ XSRETURN(1);
+}
+
+/* These are tightly coupled to the RXapif_* flags defined in regexp.h */
+#define UNDEF_FATAL 0x80000
+#define DISCARD 0x40000
+#define EXPECT_SHIFT 24
+#define ACTION_MASK 0x000FF
+
+#define FETCH_ALIAS (RXapif_FETCH | (2 << EXPECT_SHIFT))
+#define STORE_ALIAS (RXapif_STORE | (3 << EXPECT_SHIFT) | UNDEF_FATAL | DISCARD)
+#define DELETE_ALIAS (RXapif_DELETE | (2 << EXPECT_SHIFT) | UNDEF_FATAL)
+#define CLEAR_ALIAS (RXapif_CLEAR | (1 << EXPECT_SHIFT) | UNDEF_FATAL | DISCARD)
+#define EXISTS_ALIAS (RXapif_EXISTS | (2 << EXPECT_SHIFT))
+#define SCALAR_ALIAS (RXapif_SCALAR | (1 << EXPECT_SHIFT))
+
+XS(XS_NamedCapture_FETCH)
+{
+ dVAR; dXSARGS;
+ dXSI32;
+ PERL_UNUSED_VAR(cv); /* -W */
+ PERL_UNUSED_VAR(ax); /* -Wall */
+ SP -= items;
+ {
+ REGEXP *const rx = PL_curpm ? PM_GETRE(PL_curpm) : NULL;
+ U32 flags;
+ SV *ret;
+ const U32 action = ix & ACTION_MASK;
+ const int expect = ix >> EXPECT_SHIFT;
+ if (items != expect)
+ croak_xs_usage(cv, expect == 2 ? "$key"
+ : (expect == 3 ? "$key, $value"
+ : ""));
+
+ if (!rx || !SvROK(ST(0))) {
+ if (ix & UNDEF_FATAL)
+ Perl_croak_no_modify();
+ else
+ XSRETURN_UNDEF;
+ }
+
+ flags = (U32)SvUV(SvRV(MUTABLE_SV(ST(0))));
+
+ PUTBACK;
+ ret = RX_ENGINE(rx)->named_buff(aTHX_ (rx), expect >= 2 ? ST(1) : NULL,
+ expect >= 3 ? ST(2) : NULL, flags | action);
+ SPAGAIN;
+
+ if (ix & DISCARD) {
+ /* Called with G_DISCARD, so our return stack state is thrown away.
+ Hence if we were returned anything, free it immediately. */
+ SvREFCNT_dec(ret);
+ } else {
+ PUSHs(ret ? sv_2mortal(ret) : &PL_sv_undef);
+ }
+ PUTBACK;
+ return;
+ }
+}
+
+
+XS(XS_NamedCapture_FIRSTKEY)
+{
+ dVAR; dXSARGS;
+ dXSI32;
+ PERL_UNUSED_VAR(cv); /* -W */
+ PERL_UNUSED_VAR(ax); /* -Wall */
+ SP -= items;
+ {
+ REGEXP *const rx = PL_curpm ? PM_GETRE(PL_curpm) : NULL;
+ U32 flags;
+ SV *ret;
+ const int expect = ix ? 2 : 1;
+ const U32 action = ix ? RXapif_NEXTKEY : RXapif_FIRSTKEY;
+ if (items != expect)
+ croak_xs_usage(cv, expect == 2 ? "$lastkey" : "");
+
+ if (!rx || !SvROK(ST(0)))
+ XSRETURN_UNDEF;
+
+ flags = (U32)SvUV(SvRV(MUTABLE_SV(ST(0))));
+
+ PUTBACK;
+ ret = RX_ENGINE(rx)->named_buff_iter(aTHX_ (rx),
+ expect >= 2 ? ST(1) : NULL,
+ flags | action);
+ SPAGAIN;
+
+ PUSHs(ret ? sv_2mortal(ret) : &PL_sv_undef);
+ PUTBACK;
+ return;
+ }
+}
+
+/* is this still needed? */
+XS(XS_NamedCapture_flags)
+{
+ dVAR; dXSARGS;
+ PERL_UNUSED_VAR(cv); /* -W */
+ PERL_UNUSED_VAR(ax); /* -Wall */
+ SP -= items;
+ {
+ EXTEND(SP, 2);
+ mPUSHu(RXapif_ONE);
+ mPUSHu(RXapif_ALL);
+ PUTBACK;
+ return;
+ }
+}
+
#include "vutil.h"
#include "vxs.inc"
@@ -1012,36 +1251,48 @@ struct xsub_details {
const char *name;
XSUBADDR_t xsub;
const char *proto;
+ int ix;
};
static const struct xsub_details these_details[] = {
- {"UNIVERSAL::isa", XS_UNIVERSAL_isa, NULL},
- {"UNIVERSAL::can", XS_UNIVERSAL_can, NULL},
- {"UNIVERSAL::DOES", XS_UNIVERSAL_DOES, NULL},
+ {"UNIVERSAL::isa", XS_UNIVERSAL_isa, NULL, 0 },
+ {"UNIVERSAL::can", XS_UNIVERSAL_can, NULL, 0 },
+ {"UNIVERSAL::DOES", XS_UNIVERSAL_DOES, NULL, 0 },
#define VXS_XSUB_DETAILS
#include "vxs.inc"
#undef VXS_XSUB_DETAILS
- {"utf8::is_utf8", XS_utf8_is_utf8, NULL},
- {"utf8::valid", XS_utf8_valid, NULL},
- {"utf8::encode", XS_utf8_encode, NULL},
- {"utf8::decode", XS_utf8_decode, NULL},
- {"utf8::upgrade", XS_utf8_upgrade, NULL},
- {"utf8::downgrade", XS_utf8_downgrade, NULL},
- {"utf8::native_to_unicode", XS_utf8_native_to_unicode, NULL},
- {"utf8::unicode_to_native", XS_utf8_unicode_to_native, NULL},
- {"Internals::SvREADONLY", XS_Internals_SvREADONLY, "\\[$%@];$"},
- {"Internals::SvREFCNT", XS_Internals_SvREFCNT, "\\[$%@];$"},
- {"Internals::hv_clear_placeholders", XS_Internals_hv_clear_placehold, "\\%"},
- {"constant::_make_const", XS_constant__make_const, "\\[$@]"},
- {"PerlIO::get_layers", XS_PerlIO_get_layers, "*;@"},
- {"re::is_regexp", XS_re_is_regexp, "$"},
- {"re::regname", XS_re_regname, ";$$"},
- {"re::regnames", XS_re_regnames, ";$"},
- {"re::regnames_count", XS_re_regnames_count, ""},
- {"re::regexp_pattern", XS_re_regexp_pattern, "$"},
+ {"utf8::is_utf8", XS_utf8_is_utf8, NULL, 0 },
+ {"utf8::valid", XS_utf8_valid, NULL, 0 },
+ {"utf8::encode", XS_utf8_encode, NULL, 0 },
+ {"utf8::decode", XS_utf8_decode, NULL, 0 },
+ {"utf8::upgrade", XS_utf8_upgrade, NULL, 0 },
+ {"utf8::downgrade", XS_utf8_downgrade, NULL, 0 },
+ {"utf8::native_to_unicode", XS_utf8_native_to_unicode, NULL, 0 },
+ {"utf8::unicode_to_native", XS_utf8_unicode_to_native, NULL, 0 },
+ {"Internals::SvREADONLY", XS_Internals_SvREADONLY, "\\[$%@];$", 0 },
+ {"Internals::SvREFCNT", XS_Internals_SvREFCNT, "\\[$%@];$", 0 },
+ {"Internals::hv_clear_placeholders", XS_Internals_hv_clear_placehold, "\\%", 0 },
+ {"constant::_make_const", XS_constant__make_const, "\\[$@]", 0 },
+ {"PerlIO::get_layers", XS_PerlIO_get_layers, "*;@", 0 },
+ {"re::is_regexp", XS_re_is_regexp, "$", 0 },
+ {"re::regname", XS_re_regname, ";$$", 0 },
+ {"re::regnames", XS_re_regnames, ";$", 0 },
+ {"re::regnames_count", XS_re_regnames_count, "", 0 },
+ {"re::regexp_pattern", XS_re_regexp_pattern, "$", 0 },
#ifdef HAS_GETCWD
- {"Internals::getcwd", XS_Internals_getcwd, ""},
+ {"Internals::getcwd", XS_Internals_getcwd, "", 0 },
#endif
+ {"Tie::Hash::NamedCapture::_tie_it", XS_NamedCapture_tie_it, NULL, 0 },
+ {"Tie::Hash::NamedCapture::TIEHASH", XS_NamedCapture_TIEHASH, NULL, 0 },
+ {"Tie::Hash::NamedCapture::FETCH", XS_NamedCapture_FETCH, NULL, FETCH_ALIAS },
+ {"Tie::Hash::NamedCapture::STORE", XS_NamedCapture_FETCH, NULL, STORE_ALIAS },
+ {"Tie::Hash::NamedCapture::DELETE", XS_NamedCapture_FETCH, NULL, DELETE_ALIAS },
+ {"Tie::Hash::NamedCapture::CLEAR", XS_NamedCapture_FETCH, NULL, CLEAR_ALIAS },
+ {"Tie::Hash::NamedCapture::EXISTS", XS_NamedCapture_FETCH, NULL, EXISTS_ALIAS },
+ {"Tie::Hash::NamedCapture::SCALAR", XS_NamedCapture_FETCH, NULL, SCALAR_ALIAS },
+ {"Tie::Hash::NamedCapture::FIRSTKEY", XS_NamedCapture_FIRSTKEY, NULL, 0 },
+ {"Tie::Hash::NamedCapture::NEXTKEY", XS_NamedCapture_FIRSTKEY, NULL, 1 },
+ {"Tie::Hash::NamedCapture::flags", XS_NamedCapture_flags, NULL, 0 },
};
STATIC OP*
@@ -1101,7 +1352,8 @@ Perl_boot_core_UNIVERSAL(pTHX)
const struct xsub_details *end = C_ARRAY_END(these_details);
do {
- newXS_flags(xsub->name, xsub->xsub, file, xsub->proto, 0);
+ CV *cv = newXS_flags(xsub->name, xsub->xsub, file, xsub->proto, 0);
+ XSANY.any_i32 = xsub->ix;
} while (++xsub < end);
#ifndef EBCDIC
diff --git a/gnu/usr.bin/perl/unixish.h b/gnu/usr.bin/perl/unixish.h
index 697a242243c..5bf5b93690b 100644
--- a/gnu/usr.bin/perl/unixish.h
+++ b/gnu/usr.bin/perl/unixish.h
@@ -142,6 +142,7 @@ int afstat(int fd, struct stat *statb);
HINTS_REFCNT_TERM; KEYWORD_PLUGIN_MUTEX_TERM; \
OP_CHECK_MUTEX_TERM; OP_REFCNT_TERM; PERLIO_TERM; \
MALLOC_TERM; LOCALE_TERM; USER_PROP_MUTEX_TERM; \
+ ENV_TERM; \
amigaos4_dispose_fork_array();
#endif
@@ -154,7 +155,8 @@ int afstat(int fd, struct stat *statb);
# define PERL_SYS_TERM_BODY() \
HINTS_REFCNT_TERM; KEYWORD_PLUGIN_MUTEX_TERM; \
OP_CHECK_MUTEX_TERM; OP_REFCNT_TERM; PERLIO_TERM; \
- MALLOC_TERM; LOCALE_TERM; USER_PROP_MUTEX_TERM;
+ MALLOC_TERM; LOCALE_TERM; USER_PROP_MUTEX_TERM; \
+ ENV_TERM;
#endif
diff --git a/gnu/usr.bin/perl/utf8.c b/gnu/usr.bin/perl/utf8.c
index 84db2f6aeee..7a45ca97dfb 100644
--- a/gnu/usr.bin/perl/utf8.c
+++ b/gnu/usr.bin/perl/utf8.c
@@ -37,11 +37,6 @@ static const char malformed_text[] = "Malformed UTF-8 character";
static const char unees[] =
"Malformed UTF-8 character (unexpected end of string)";
-/* Be sure to synchronize this message with the similar one in regcomp.c */
-static const char cp_above_legal_max[] =
- "Use of code point 0x%" UVXf " is not allowed; the"
- " permissible max is 0x%" UVXf;
-
/*
=head1 Unicode Support
These are various utility functions for manipulating UTF8-encoded
@@ -60,9 +55,7 @@ within non-zero characters.
static void
S_restore_cop_warnings(pTHX_ void *p)
{
- if (!specialWARN(PL_curcop->cop_warnings))
- PerlMemShared_free(PL_curcop->cop_warnings);
- PL_curcop->cop_warnings = (STRLEN*)p;
+ free_and_set_cop_warnings(PL_curcop, (STRLEN*) p);
}
@@ -145,14 +138,14 @@ S_new_msg_hv(pTHX_ const char * const message, /* The message text */
=for apidoc uvoffuni_to_utf8_flags
THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
-Instead, B<Almost all code should use L</uvchr_to_utf8> or
-L</uvchr_to_utf8_flags>>.
+Instead, B<Almost all code should use L<perlapi/uvchr_to_utf8> or
+L<perlapi/uvchr_to_utf8_flags>>.
This function is like them, but the input is a strict Unicode
(as opposed to native) code point. Only in very rare circumstances should code
not be using the native code point.
-For details, see the description for L</uvchr_to_utf8_flags>.
+For details, see the description for L<perlapi/uvchr_to_utf8_flags>.
=cut
*/
@@ -171,9 +164,6 @@ const char nonchar_cp_format[] = "Unicode non-character U+%04" UVXf
" is not recommended for open interchange";
const char super_cp_format[] = "Code point 0x%" UVXf " is not Unicode,"
" may not be portable";
-const char perl_extended_cp_format[] = "Code point 0x%" UVXf " is not" \
- " Unicode, requires a Perl extension," \
- " and so is not portable";
#define HANDLE_UNICODE_SURROGATE(uv, flags, msgs) \
STMT_START { \
@@ -324,8 +314,10 @@ Perl_uvoffuni_to_utf8_flags_msgs(pTHX_ U8 *d, UV uv, const UV flags, HV** msgs)
* performance hit on these high EBCDIC code points. */
if (UNLIKELY(UNICODE_IS_SUPER(uv))) {
- if (UNLIKELY(uv > MAX_LEGAL_CP)) {
- Perl_croak(aTHX_ cp_above_legal_max, uv, MAX_LEGAL_CP);
+ if (UNLIKELY( uv > MAX_LEGAL_CP
+ && ! (flags & UNICODE_ALLOW_ABOVE_IV_MAX)))
+ {
+ Perl_croak(aTHX_ "%s", form_cp_too_large_msg(16, NULL, 0, uv));
}
if ( (flags & UNICODE_WARN_SUPER)
|| ( (flags & UNICODE_WARN_PERL_EXTENDED)
@@ -337,7 +329,8 @@ Perl_uvoffuni_to_utf8_flags_msgs(pTHX_ U8 *d, UV uv, const UV flags, HV** msgs)
/* Choose the more dire applicable warning */
if (UNICODE_IS_PERL_EXTENDED(uv)) {
- format = perl_extended_cp_format;
+ format = PL_extended_cp_format;
+ category = packWARN2(WARN_NON_UNICODE, WARN_PORTABLE);
if (flags & (UNICODE_WARN_PERL_EXTENDED
|UNICODE_DISALLOW_PERL_EXTENDED))
{
@@ -349,8 +342,11 @@ Perl_uvoffuni_to_utf8_flags_msgs(pTHX_ U8 *d, UV uv, const UV flags, HV** msgs)
*msgs = new_msg_hv(Perl_form(aTHX_ format, uv),
category, flag);
}
- else {
- Perl_ck_warner_d(aTHX_ packWARN(WARN_NON_UNICODE), format, uv);
+ else if ( ckWARN_d(WARN_NON_UNICODE)
+ || ( (flag & UNICODE_GOT_PERL_EXTENDED)
+ && ckWARN(WARN_PORTABLE)))
+ {
+ Perl_warner(aTHX_ category, format, uv);
}
}
if ( (flags & UNICODE_DISALLOW_SUPER)
@@ -486,7 +482,7 @@ Similarly, C<UNICODE_WARN_ILLEGAL_C9_INTERCHANGE> and
C<UNICODE_DISALLOW_ILLEGAL_C9_INTERCHANGE> are shortcuts to select the
above-Unicode and surrogate flags, but not the non-character ones, as
defined in
-L<Unicode Corrigendum #9|http://www.unicode.org/versions/corrigendum9.html>.
+L<Unicode Corrigendum #9|https://www.unicode.org/versions/corrigendum9.html>.
See L<perlunicode/Noncharacter code points>.
Extremely high code points were never specified in any standard, and require an
@@ -921,7 +917,7 @@ S_does_utf8_overflow(const U8 * const s,
#undef FF_OVERLONG_PREFIX
STRLEN
-Perl__is_utf8_char_helper(const U8 * const s, const U8 * e, const U32 flags)
+Perl_is_utf8_char_helper(const U8 * const s, const U8 * e, const U32 flags)
{
STRLEN len;
const U8 *x;
@@ -958,7 +954,7 @@ Perl__is_utf8_char_helper(const U8 * const s, const U8 * e, const U32 flags)
*
*/
- PERL_ARGS_ASSERT__IS_UTF8_CHAR_HELPER;
+ PERL_ARGS_ASSERT_IS_UTF8_CHAR_HELPER;
assert(0 == (flags & ~(UTF8_DISALLOW_ILLEGAL_INTERCHANGE
|UTF8_DISALLOW_PERL_EXTENDED)));
@@ -1189,7 +1185,8 @@ S_unexpected_non_continuation_text(pTHX_ const U8 * const s,
=for apidoc utf8n_to_uvchr
THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
-Most code should use L</utf8_to_uvchr_buf>() rather than call this directly.
+Most code should use L</utf8_to_uvchr_buf>() rather than call this
+directly.
Bottom level UTF-8 decode routine.
Returns the native code point value of the first character in the string C<s>,
@@ -1241,7 +1238,7 @@ disallow these categories individually. C<UTF8_DISALLOW_ILLEGAL_INTERCHANGE>
restricts the allowed inputs to the strict UTF-8 traditionally defined by
Unicode. Use C<UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE> to use the strictness
definition given by
-L<Unicode Corrigendum #9|http://www.unicode.org/versions/corrigendum9.html>.
+L<Unicode Corrigendum #9|https://www.unicode.org/versions/corrigendum9.html>.
The difference between traditional strictness and C9 strictness is that the
latter does not forbid non-character code points. (They are still discouraged,
however.) For more discussion see L<perlunicode/Noncharacter code points>.
@@ -1283,6 +1280,20 @@ All other code points corresponding to Unicode characters, including private
use and those yet to be assigned, are never considered malformed and never
warn.
+=for apidoc Amnh||UTF8_CHECK_ONLY
+=for apidoc Amnh||UTF8_DISALLOW_ILLEGAL_INTERCHANGE
+=for apidoc Amnh||UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE
+=for apidoc Amnh||UTF8_DISALLOW_SURROGATE
+=for apidoc Amnh||UTF8_DISALLOW_NONCHAR
+=for apidoc Amnh||UTF8_DISALLOW_SUPER
+=for apidoc Amnh||UTF8_WARN_ILLEGAL_INTERCHANGE
+=for apidoc Amnh||UTF8_WARN_ILLEGAL_C9_INTERCHANGE
+=for apidoc Amnh||UTF8_WARN_SURROGATE
+=for apidoc Amnh||UTF8_WARN_NONCHAR
+=for apidoc Amnh||UTF8_WARN_SUPER
+=for apidoc Amnh||UTF8_WARN_PERL_EXTENDED
+=for apidoc Amnh||UTF8_DISALLOW_PERL_EXTENDED
+
=cut
Also implemented as a macro in utf8.h
@@ -1304,7 +1315,8 @@ Perl_utf8n_to_uvchr(const U8 *s,
=for apidoc utf8n_to_uvchr_error
THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
-Most code should use L</utf8_to_uvchr_buf>() rather than call this directly.
+Most code should use L</utf8_to_uvchr_buf>() rather than call this
+directly.
This function is for code that needs to know what the precise malformation(s)
are when an error is found. If you also need to know the generated warning
@@ -1355,7 +1367,7 @@ describes the situation in all cases.
=item C<UTF8_GOT_CONTINUATION>
-The input sequence was malformed in that the first byte was a a UTF-8
+The input sequence was malformed in that the first byte was a UTF-8
continuation byte.
=item C<UTF8_GOT_EMPTY>
@@ -1463,7 +1475,8 @@ Perl_utf8n_to_uvchr_error(const U8 *s,
=for apidoc utf8n_to_uvchr_msgs
THIS FUNCTION SHOULD BE USED IN ONLY VERY SPECIALIZED CIRCUMSTANCES.
-Most code should use L</utf8_to_uvchr_buf>() rather than call this directly.
+Most code should use L</utf8_to_uvchr_buf>() rather than call this
+directly.
This function is for code that needs to know what the precise malformation(s)
are when an error is found, and wants the corresponding warning and/or error
@@ -1595,7 +1608,7 @@ Perl__utf8n_to_uvchr_msgs_helper(const U8 *s,
/* The order of malformation tests here is important. We should consume as
* few bytes as possible in order to not skip any valid character. This is
* required by the Unicode Standard (section 3.9 of Unicode 6.0); see also
- * http://unicode.org/reports/tr36 for more discussion as to why. For
+ * https://unicode.org/reports/tr36 for more discussion as to why. For
* example, once we've done a UTF8SKIP, we can tell the expected number of
* bytes, and could fail right off the bat if the input parameters indicate
* that there are too few available. But it could be that just that first
@@ -1608,7 +1621,7 @@ Perl__utf8n_to_uvchr_msgs_helper(const U8 *s,
* things. For example, an input could be deliberately designed to
* overflow, and if this code bailed out immediately upon discovering that,
* returning to the caller C<*retlen> pointing to the very next byte (one
- * which is actually part of of the overflowing sequence), that could look
+ * which is actually part of the overflowing sequence), that could look
* legitimate to the caller, which could discard the initial partial
* sequence and process the rest, inappropriately.
*
@@ -1855,7 +1868,7 @@ Perl__utf8n_to_uvchr_msgs_helper(const U8 *s,
}
while (possible_problems) { /* Handle each possible problem */
- UV pack_warn = 0;
+ U32 pack_warn = 0;
char * message = NULL;
U32 this_flag_bit = 0;
@@ -1994,8 +2007,8 @@ Perl__utf8n_to_uvchr_msgs_helper(const U8 *s,
* valid, avoid as much as possible reading past the
* end of the buffer */
int printlen = (flags & _UTF8_NO_CONFIDENCE_IN_CURLEN)
- ? s - s0
- : send - s0;
+ ? (int) (s - s0)
+ : (int) (send - s0);
pack_warn = packWARN(WARN_UTF8);
message = Perl_form(aTHX_ "%s",
unexpected_non_continuation_text(s0,
@@ -2068,9 +2081,10 @@ Perl__utf8n_to_uvchr_msgs_helper(const U8 *s,
if (UNLIKELY(isUTF8_PERL_EXTENDED(s0))) {
if ( ! (flags & UTF8_CHECK_ONLY)
&& (flags & (UTF8_WARN_PERL_EXTENDED|UTF8_WARN_SUPER))
- && (msgs || ckWARN_d(WARN_NON_UNICODE)))
+ && (msgs || ( ckWARN_d(WARN_NON_UNICODE)
+ || ckWARN(WARN_PORTABLE))))
{
- pack_warn = packWARN(WARN_NON_UNICODE);
+ pack_warn = packWARN2(WARN_NON_UNICODE, WARN_PORTABLE);
/* If it is an overlong that evaluates to a code point
* that doesn't have to use the Perl extended UTF-8, it
@@ -2083,7 +2097,7 @@ Perl__utf8n_to_uvchr_msgs_helper(const U8 *s,
* */
if (UNICODE_IS_PERL_EXTENDED(uv)) {
message = Perl_form(aTHX_
- perl_extended_cp_format, uv);
+ PL_extended_cp_format, uv);
}
else {
message = Perl_form(aTHX_
@@ -2271,10 +2285,7 @@ Perl_utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
{
PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF;
- assert(s < send);
-
- return utf8n_to_uvchr(s, send - s, retlen,
- ckWARN_d(WARN_UTF8) ? 0 : UTF8_ALLOW_ANY);
+ return utf8_to_uvchr_buf_helper(s, send, retlen);
}
/* This is marked as deprecated
@@ -2283,9 +2294,9 @@ Perl_utf8_to_uvchr_buf(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
Only in very rare circumstances should code need to be dealing in Unicode
(as opposed to native) code points. In those few cases, use
-C<L<NATIVE_TO_UNI(utf8_to_uvchr_buf(...))|/utf8_to_uvchr_buf>> instead. If you
-are not absolutely sure this is one of those cases, then assume it isn't and
-use plain C<utf8_to_uvchr_buf> instead.
+C<L<NATIVE_TO_UNI(utf8_to_uvchr_buf(...))|perlapi/utf8_to_uvchr_buf>> instead.
+If you are not absolutely sure this is one of those cases, then assume it isn't
+and use plain C<utf8_to_uvchr_buf> instead.
Returns the Unicode (not-native) code point of the first character in the
string C<s> which
@@ -2298,7 +2309,8 @@ NULL) to -1. If those warnings are off, the computed value if well-defined (or
the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
next possible position in C<s> that could begin a non-malformed character.
-See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
+See L<perlapi/utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is
+returned.
=cut
*/
@@ -2529,8 +2541,12 @@ Perl_bytes_from_utf8(pTHX_ const U8 *s, STRLEN *lenp, bool *is_utf8p)
}
/*
-No = here because currently externally undocumented
-for apidoc bytes_from_utf8_loc
+=for comment
+skip apidoc
+This is not currently externally documented because we don't want people to use
+it for now. XXX Perhaps that is too paranoid, and it should be documented?
+
+=for apidoc bytes_from_utf8_loc
Like C<L</bytes_from_utf8>()>, but takes an extra parameter, a pointer to where
to store the location of the first character in C<"s"> that cannot be
@@ -2695,7 +2711,7 @@ Perl_bytes_to_utf8(pTHX_ const U8 *s, STRLEN *lenp)
* Do not use in-place. We optimize for native, for obvious reasons. */
U8*
-Perl_utf16_to_utf8(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
+Perl_utf16_to_utf8(pTHX_ U8* p, U8* d, Size_t bytelen, Size_t *newlen)
{
U8* pend;
U8* dstart = d;
@@ -2729,16 +2745,16 @@ Perl_utf16_to_utf8(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
/* This assumes that most uses will be in the first Unicode plane, not
* needing surrogates */
- if (UNLIKELY(uv >= UNICODE_SURROGATE_FIRST
- && uv <= UNICODE_SURROGATE_LAST))
+ if (UNLIKELY(inRANGE(uv, UNICODE_SURROGATE_FIRST,
+ UNICODE_SURROGATE_LAST)))
{
if (UNLIKELY(p >= pend) || UNLIKELY(uv > LAST_HIGH_SURROGATE)) {
Perl_croak(aTHX_ "Malformed UTF-16 surrogate");
}
else {
UV low = (p[0] << 8) + p[1];
- if ( UNLIKELY(low < FIRST_LOW_SURROGATE)
- || UNLIKELY(low > LAST_LOW_SURROGATE))
+ if (UNLIKELY(! inRANGE(low, FIRST_LOW_SURROGATE,
+ LAST_LOW_SURROGATE)))
{
Perl_croak(aTHX_ "Malformed UTF-16 surrogate");
}
@@ -2772,7 +2788,7 @@ Perl_utf16_to_utf8(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
/* Note: this one is slightly destructive of the source. */
U8*
-Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8* d, I32 bytelen, I32 *newlen)
+Perl_utf16_to_utf8_reversed(pTHX_ U8* p, U8* d, Size_t bytelen, Size_t *newlen)
{
U8* s = (U8*)p;
U8* const send = s + bytelen;
@@ -2799,21 +2815,6 @@ Perl__is_uni_FOO(pTHX_ const U8 classnum, const UV c)
return _invlist_contains_cp(PL_XPosix_ptrs[classnum], c);
}
-/* Internal function so we can deprecate the external one, and call
- this one from other deprecated functions in this file */
-
-bool
-Perl__is_utf8_idstart(pTHX_ const U8 *p)
-{
- dVAR;
-
- PERL_ARGS_ASSERT__IS_UTF8_IDSTART;
-
- if (*p == '_')
- return TRUE;
- return is_utf8_common(p, PL_utf8_idstart);
-}
-
bool
Perl__is_uni_perl_idcont(pTHX_ UV c)
{
@@ -3135,37 +3136,8 @@ Perl__to_uni_fold_flags(pTHX_ UV c, U8* p, STRLEN *lenp, U8 flags)
}
PERL_STATIC_INLINE bool
-S_is_utf8_common(pTHX_ const U8 *const p, SV* const invlist)
-{
- /* returns a boolean giving whether or not the UTF8-encoded character that
- * starts at <p> is in the inversion list indicated by <invlist>.
- *
- * Note that it is assumed that the buffer length of <p> is enough to
- * contain all the bytes that comprise the character. Thus, <*p> should
- * have been checked before this call for mal-formedness enough to assure
- * that. This function, does make sure to not look past any NUL, so it is
- * safe to use on C, NUL-terminated, strings */
- STRLEN len = my_strnlen((char *) p, UTF8SKIP(p));
-
- PERL_ARGS_ASSERT_IS_UTF8_COMMON;
-
- /* The API should have included a length for the UTF-8 character in <p>,
- * but it doesn't. We therefore assume that p has been validated at least
- * as far as there being enough bytes available in it to accommodate the
- * character without reading beyond the end, and pass that number on to the
- * validating routine */
- if (! isUTF8_CHAR(p, p + len)) {
- _force_out_malformed_utf8_message(p, p + len, _UTF8_NO_CONFIDENCE_IN_CURLEN,
- 1 /* Die */ );
- NOT_REACHED; /* NOTREACHED */
- }
-
- return is_utf8_common_with_len(p, p + len, invlist);
-}
-
-PERL_STATIC_INLINE bool
-S_is_utf8_common_with_len(pTHX_ const U8 *const p, const U8 * const e,
- SV* const invlist)
+S_is_utf8_common(pTHX_ const U8 *const p, const U8 * const e,
+ SV* const invlist)
{
/* returns a boolean giving whether or not the UTF8-encoded character that
* starts at <p>, and extending no further than <e - 1> is in the inversion
@@ -3173,7 +3145,7 @@ S_is_utf8_common_with_len(pTHX_ const U8 *const p, const U8 * const e,
UV cp = utf8n_to_uvchr(p, e - p, NULL, 0);
- PERL_ARGS_ASSERT_IS_UTF8_COMMON_WITH_LEN;
+ PERL_ARGS_ASSERT_IS_UTF8_COMMON;
if (cp == 0 && (p >= e || *p != '\0')) {
_force_out_malformed_utf8_message(p, e, 0, 1);
@@ -3184,6 +3156,9 @@ S_is_utf8_common_with_len(pTHX_ const U8 *const p, const U8 * const e,
return _invlist_contains_cp(invlist, cp);
}
+#if 0 /* Not currently used, but may be needed in the future */
+PERLVAR(I, seen_deprecated_macro, HV *)
+
STATIC void
S_warn_on_first_deprecated_use(pTHX_ const char * const name,
const char * const alternative,
@@ -3225,157 +3200,40 @@ S_warn_on_first_deprecated_use(pTHX_ const char * const name,
}
}
}
+#endif
bool
-Perl__is_utf8_FOO(pTHX_ U8 classnum,
- const U8 * const p,
- const char * const name,
- const char * const alternative,
- const bool use_utf8,
- const bool use_locale,
- const char * const file,
- const unsigned line)
+Perl__is_utf8_FOO(pTHX_ const U8 classnum, const U8 *p, const U8 * const e)
{
dVAR;
PERL_ARGS_ASSERT__IS_UTF8_FOO;
- warn_on_first_deprecated_use(name, alternative, use_locale, file, line);
-
- if (use_utf8 && UTF8_IS_ABOVE_LATIN1(*p)) {
-
- switch (classnum) {
- case _CC_WORDCHAR:
- case _CC_DIGIT:
- case _CC_ALPHA:
- case _CC_LOWER:
- case _CC_UPPER:
- case _CC_PUNCT:
- case _CC_PRINT:
- case _CC_ALPHANUMERIC:
- case _CC_GRAPH:
- case _CC_CASED:
-
- return is_utf8_common(p, PL_XPosix_ptrs[classnum]);
-
- case _CC_SPACE:
- return is_XPERLSPACE_high(p);
- case _CC_BLANK:
- return is_HORIZWS_high(p);
- case _CC_XDIGIT:
- return is_XDIGIT_high(p);
- case _CC_CNTRL:
- return 0;
- case _CC_ASCII:
- return 0;
- case _CC_VERTSPACE:
- return is_VERTWS_high(p);
- case _CC_IDFIRST:
- return is_utf8_common(p, PL_utf8_perl_idstart);
- case _CC_IDCONT:
- return is_utf8_common(p, PL_utf8_perl_idcont);
- }
- }
-
- /* idcont is the same as wordchar below 256 */
- if (classnum == _CC_IDCONT) {
- classnum = _CC_WORDCHAR;
- }
- else if (classnum == _CC_IDFIRST) {
- if (*p == '_') {
- return TRUE;
- }
- classnum = _CC_ALPHA;
- }
-
- if (! use_locale) {
- if (! use_utf8 || UTF8_IS_INVARIANT(*p)) {
- return _generic_isCC(*p, classnum);
- }
-
- return _generic_isCC(EIGHT_BIT_UTF8_TO_NATIVE(*p, *(p + 1 )), classnum);
- }
- else {
- if (! use_utf8 || UTF8_IS_INVARIANT(*p)) {
- return isFOO_lc(classnum, *p);
- }
-
- return isFOO_lc(classnum, EIGHT_BIT_UTF8_TO_NATIVE(*p, *(p + 1 )));
- }
-
- NOT_REACHED; /* NOTREACHED */
-}
-
-bool
-Perl__is_utf8_FOO_with_len(pTHX_ const U8 classnum, const U8 *p,
- const U8 * const e)
-{
- dVAR;
- PERL_ARGS_ASSERT__IS_UTF8_FOO_WITH_LEN;
-
- return is_utf8_common_with_len(p, e, PL_XPosix_ptrs[classnum]);
-}
-
-bool
-Perl__is_utf8_perl_idstart_with_len(pTHX_ const U8 *p, const U8 * const e)
-{
- dVAR;
- PERL_ARGS_ASSERT__IS_UTF8_PERL_IDSTART_WITH_LEN;
-
- return is_utf8_common_with_len(p, e, PL_utf8_perl_idstart);
-}
-
-bool
-Perl__is_utf8_xidstart(pTHX_ const U8 *p)
-{
- dVAR;
- PERL_ARGS_ASSERT__IS_UTF8_XIDSTART;
-
- if (*p == '_')
- return TRUE;
- return is_utf8_common(p, PL_utf8_xidstart);
-}
-
-bool
-Perl__is_utf8_perl_idcont_with_len(pTHX_ const U8 *p, const U8 * const e)
-{
- dVAR;
- PERL_ARGS_ASSERT__IS_UTF8_PERL_IDCONT_WITH_LEN;
-
- return is_utf8_common_with_len(p, e, PL_utf8_perl_idcont);
-}
-
-bool
-Perl__is_utf8_idcont(pTHX_ const U8 *p)
-{
- dVAR;
- PERL_ARGS_ASSERT__IS_UTF8_IDCONT;
-
- return is_utf8_common(p, PL_utf8_idcont);
+ return is_utf8_common(p, e, PL_XPosix_ptrs[classnum]);
}
bool
-Perl__is_utf8_xidcont(pTHX_ const U8 *p)
+Perl__is_utf8_perl_idstart(pTHX_ const U8 *p, const U8 * const e)
{
dVAR;
- PERL_ARGS_ASSERT__IS_UTF8_XIDCONT;
+ PERL_ARGS_ASSERT__IS_UTF8_PERL_IDSTART;
- return is_utf8_common(p, PL_utf8_xidcont);
+ return is_utf8_common(p, e, PL_utf8_perl_idstart);
}
bool
-Perl__is_utf8_mark(pTHX_ const U8 *p)
+Perl__is_utf8_perl_idcont(pTHX_ const U8 *p, const U8 * const e)
{
dVAR;
- PERL_ARGS_ASSERT__IS_UTF8_MARK;
+ PERL_ARGS_ASSERT__IS_UTF8_PERL_IDCONT;
- return is_utf8_common(p, PL_utf8_mark);
+ return is_utf8_common(p, e, PL_utf8_perl_idcont);
}
STATIC UV
S__to_utf8_case(pTHX_ const UV uv1, const U8 *p,
U8* ustrp, STRLEN *lenp,
- SV *invlist, const int * const invmap,
- const unsigned int * const * const aux_tables,
+ SV *invlist, const I32 * const invmap,
+ const U32 * const * const aux_tables,
const U8 * const aux_table_lengths,
const char * const normal)
{
@@ -3459,8 +3317,7 @@ S__to_utf8_case(pTHX_ const UV uv1, const U8 *p,
if (UNLIKELY(UNICODE_IS_SUPER(uv1))) {
if (UNLIKELY(uv1 > MAX_LEGAL_CP)) {
- Perl_croak(aTHX_ cp_above_legal_max, uv1,
- MAX_LEGAL_CP);
+ Perl_croak(aTHX_ "%s", form_cp_too_large_msg(16, NULL, 0, uv1));
}
if (ckWARN_d(WARN_NON_UNICODE)) {
const char* desc = (PL_op) ? OP_DESC(PL_op) : normal;
@@ -3475,8 +3332,6 @@ S__to_utf8_case(pTHX_ const UV uv1, const U8 *p,
> HIGHEST_CASE_CHANGING_CP_FOR_USE_ONLY_BY_UTF8_DOT_C))
{
- /* As of Unicode 10.0, this means we avoid swash creation
- * for anything beyond high Plane 1 (below emojis) */
goto cases_to_self;
}
#endif
@@ -3489,13 +3344,13 @@ S__to_utf8_case(pTHX_ const UV uv1, const U8 *p,
{
unsigned int i;
- const unsigned int * cp_list;
+ const U32 * cp_list;
U8 * d;
/* 'index' is guaranteed to be non-negative, as this is an inversion
* map that covers all possible inputs. See [perl #133365] */
SSize_t index = _invlist_search(invlist, uv1);
- IV base = invmap[index];
+ I32 base = invmap[index];
/* The data structures are set up so that if 'base' is non-negative,
* the case change is 1-to-1; and if 0, the change is to itself */
@@ -3548,8 +3403,8 @@ S__to_utf8_case(pTHX_ const UV uv1, const U8 *p,
}
Size_t
-Perl__inverse_folds(pTHX_ const UV cp, unsigned int * first_folds_to,
- const unsigned int ** remaining_folds_to)
+Perl__inverse_folds(pTHX_ const UV cp, U32 * first_folds_to,
+ const U32 ** remaining_folds_to)
{
/* Returns the count of the number of code points that fold to the input
* 'cp' (besides itself).
@@ -3567,13 +3422,18 @@ Perl__inverse_folds(pTHX_ const UV cp, unsigned int * first_folds_to,
* The reason for this convolution is to avoid having to deal with
* allocating and freeing memory. The lists are already constructed, so
* the return can point to them, but single code points aren't, so would
- * need to be constructed if we didn't employ something like this API */
+ * need to be constructed if we didn't employ something like this API
+ *
+ * The code points returned by this function are all legal Unicode, which
+ * occupy at most 21 bits, and so a U32 is sufficient, and the lists are
+ * constructed with this size (to save space and memory), and we return
+ * pointers, so they must be this size */
dVAR;
/* 'index' is guaranteed to be non-negative, as this is an inversion map
* that covers all possible inputs. See [perl #133365] */
SSize_t index = _invlist_search(PL_utf8_foldclosures, cp);
- int base = _Perl_IVCF_invmap[index];
+ I32 base = _Perl_IVCF_invmap[index];
PERL_ARGS_ASSERT__INVERSE_FOLDS;
@@ -3597,16 +3457,16 @@ Perl__inverse_folds(pTHX_ const UV cp, unsigned int * first_folds_to,
* to 'cp', and the parallel array containing the length of the list
* array */
*first_folds_to = IVCF_AUX_TABLE_ptrs[-base][0];
- *remaining_folds_to = IVCF_AUX_TABLE_ptrs[-base] + 1; /* +1 excludes
- *first_folds_to
- */
+ *remaining_folds_to = IVCF_AUX_TABLE_ptrs[-base] + 1;
+ /* +1 excludes first_folds_to */
return IVCF_AUX_TABLE_lengths[-base];
}
#endif
/* Only the single code point. This works like 'fc(G) = G - A + a' */
- *first_folds_to = base + cp - invlist_array(PL_utf8_foldclosures)[index];
+ *first_folds_to = (U32) (base + cp
+ - invlist_array(PL_utf8_foldclosures)[index]);
*remaining_folds_to = NULL;
return 1;
}
@@ -3670,87 +3530,6 @@ S_check_locale_boundary_crossing(pTHX_ const U8* const p, const UV result,
return original;
}
-STATIC U32
-S_check_and_deprecate(pTHX_ const U8 *p,
- const U8 **e,
- const unsigned int type, /* See below */
- const bool use_locale, /* Is this a 'LC_'
- macro call? */
- const char * const file,
- const unsigned line)
-{
- /* This is a temporary function to deprecate the unsafe calls to the case
- * changing macros and functions. It keeps all the special stuff in just
- * one place.
- *
- * It updates *e with the pointer to the end of the input string. If using
- * the old-style macros, *e is NULL on input, and so this function assumes
- * the input string is long enough to hold the entire UTF-8 sequence, and
- * sets *e accordingly, but it then returns a flag to pass the
- * utf8n_to_uvchr(), to tell it that this size is a guess, and to avoid
- * using the full length if possible.
- *
- * It also does the assert that *e > p when *e is not NULL. This should be
- * migrated to the callers when this function gets deleted.
- *
- * The 'type' parameter is used for the caller to specify which case
- * changing function this is called from: */
-
-# define DEPRECATE_TO_UPPER 0
-# define DEPRECATE_TO_TITLE 1
-# define DEPRECATE_TO_LOWER 2
-# define DEPRECATE_TO_FOLD 3
-
- U32 utf8n_flags = 0;
- const char * name;
- const char * alternative;
-
- PERL_ARGS_ASSERT_CHECK_AND_DEPRECATE;
-
- if (*e == NULL) {
- utf8n_flags = _UTF8_NO_CONFIDENCE_IN_CURLEN;
-
- /* strnlen() makes this function safe for the common case of
- * NUL-terminated strings */
- *e = p + my_strnlen((char *) p, UTF8SKIP(p));
-
- /* For mathoms.c calls, we use the function name we know is stored
- * there. It could be part of a larger path */
- if (type == DEPRECATE_TO_UPPER) {
- name = instr(file, "mathoms.c")
- ? "to_utf8_upper"
- : "toUPPER_utf8";
- alternative = "toUPPER_utf8_safe";
- }
- else if (type == DEPRECATE_TO_TITLE) {
- name = instr(file, "mathoms.c")
- ? "to_utf8_title"
- : "toTITLE_utf8";
- alternative = "toTITLE_utf8_safe";
- }
- else if (type == DEPRECATE_TO_LOWER) {
- name = instr(file, "mathoms.c")
- ? "to_utf8_lower"
- : "toLOWER_utf8";
- alternative = "toLOWER_utf8_safe";
- }
- else if (type == DEPRECATE_TO_FOLD) {
- name = instr(file, "mathoms.c")
- ? "to_utf8_fold"
- : "toFOLD_utf8";
- alternative = "toFOLD_utf8_safe";
- }
- else Perl_croak(aTHX_ "panic: Unexpected case change type");
-
- warn_on_first_deprecated_use(name, alternative, use_locale, file, line);
- }
- else {
- assert (p < *e);
- }
-
- return utf8n_flags;
-}
-
STATIC UV
S_turkic_fc(pTHX_ const U8 * const p, const U8 * const e,
U8 * ustrp, STRLEN *lenp)
@@ -3843,7 +3622,7 @@ S_turkic_uc(pTHX_ const U8 * const p, const U8 * const e,
* ustrp will contain *lenp bytes
*
* Turkic differs only from non-Turkic in that 'i' and LATIN CAPITAL LETTER
- * I WITH DOT ABOVE form a case pair, as do 'I' and and LATIN SMALL LETTER
+ * I WITH DOT ABOVE form a case pair, as do 'I' and LATIN SMALL LETTER
* DOTLESS I */
PERL_ARGS_ASSERT_TURKIC_UC;
@@ -3934,8 +3713,7 @@ S_turkic_uc(pTHX_ const U8 * const p, const U8 * const e,
STRLEN len_result; \
result = utf8n_to_uvchr(p, e - p, &len_result, UTF8_CHECK_ONLY); \
if (len_result == (STRLEN) -1) { \
- _force_out_malformed_utf8_message(p, e, utf8n_flags, \
- 1 /* Die */ ); \
+ _force_out_malformed_utf8_message(p, e, 0, 1 /* Die */ ); \
}
#define CASE_CHANGE_BODY_END(locale_flags, change_macro) \
@@ -3960,15 +3738,8 @@ S_turkic_uc(pTHX_ const U8 * const p, const U8 * const e,
\
return result;
-/*
-=for apidoc to_utf8_upper
-
-Instead use L</toUPPER_utf8_safe>.
-
-=cut */
-
/* Not currently externally documented, and subject to change:
- * <flags> is set iff iff the rules from the current underlying locale are to
+ * <flags> is set iff the rules from the current underlying locale are to
* be used. */
UV
@@ -3976,14 +3747,10 @@ Perl__to_utf8_upper_flags(pTHX_ const U8 *p,
const U8 *e,
U8* ustrp,
STRLEN *lenp,
- bool flags,
- const char * const file,
- const int line)
+ bool flags)
{
dVAR;
UV result;
- const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_UPPER,
- cBOOL(flags), file, line);
PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS;
@@ -3994,13 +3761,6 @@ Perl__to_utf8_upper_flags(pTHX_ const U8 *p,
CASE_CHANGE_BODY_END (~0, CALL_UPPER_CASE);
}
-/*
-=for apidoc to_utf8_title
-
-Instead use L</toTITLE_utf8_safe>.
-
-=cut */
-
/* Not currently externally documented, and subject to change:
* <flags> is set iff the rules from the current underlying locale are to be
* used. Since titlecase is not defined in POSIX, for other than a
@@ -4012,14 +3772,10 @@ Perl__to_utf8_title_flags(pTHX_ const U8 *p,
const U8 *e,
U8* ustrp,
STRLEN *lenp,
- bool flags,
- const char * const file,
- const int line)
+ bool flags)
{
dVAR;
UV result;
- const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_TITLE,
- cBOOL(flags), file, line);
PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS;
@@ -4029,15 +3785,8 @@ Perl__to_utf8_title_flags(pTHX_ const U8 *p,
CASE_CHANGE_BODY_END (~0, CALL_TITLE_CASE);
}
-/*
-=for apidoc to_utf8_lower
-
-Instead use L</toLOWER_utf8_safe>.
-
-=cut */
-
/* Not currently externally documented, and subject to change:
- * <flags> is set iff iff the rules from the current underlying locale are to
+ * <flags> is set iff the rules from the current underlying locale are to
* be used.
*/
@@ -4046,14 +3795,10 @@ Perl__to_utf8_lower_flags(pTHX_ const U8 *p,
const U8 *e,
U8* ustrp,
STRLEN *lenp,
- bool flags,
- const char * const file,
- const int line)
+ bool flags)
{
dVAR;
UV result;
- const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_LOWER,
- cBOOL(flags), file, line);
PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS;
@@ -4062,13 +3807,6 @@ Perl__to_utf8_lower_flags(pTHX_ const U8 *p,
CASE_CHANGE_BODY_END (~0, CALL_LOWER_CASE)
}
-/*
-=for apidoc to_utf8_fold
-
-Instead use L</toFOLD_utf8_safe>.
-
-=cut */
-
/* Not currently externally documented, and subject to change,
* in <flags>
* bit FOLD_FLAGS_LOCALE is set iff the rules from the current underlying
@@ -4084,14 +3822,10 @@ Perl__to_utf8_fold_flags(pTHX_ const U8 *p,
const U8 *e,
U8* ustrp,
STRLEN *lenp,
- U8 flags,
- const char * const file,
- const int line)
+ U8 flags)
{
dVAR;
UV result;
- const U32 utf8n_flags = check_and_deprecate(p, &e, DEPRECATE_TO_FOLD,
- cBOOL(flags), file, line);
PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS;
@@ -4167,8 +3901,8 @@ Perl__to_utf8_fold_flags(pTHX_ const U8 *p,
/* Look at every character in the result; if any cross the
* boundary, the whole thing is disallowed */
U8* s = ustrp;
- U8* e = ustrp + *lenp;
- while (s < e) {
+ U8* send = ustrp + *lenp;
+ while (s < send) {
if (isASCII(*s)) {
/* Crossed, have to return the original */
original = valid_utf8_to_uvchr(p, lenp);
@@ -4250,694 +3984,6 @@ Perl__to_utf8_fold_flags(pTHX_ const U8 *p,
}
-/* Note:
- * Returns a "swash" which is a hash described in utf8.c:Perl_swash_fetch().
- * C<pkg> is a pointer to a package name for SWASHNEW, should be "utf8".
- * For other parameters, see utf8::SWASHNEW in lib/utf8_heavy.pl.
- */
-
-SV*
-Perl_swash_init(pTHX_ const char* pkg, const char* name, SV *listsv,
- I32 minbits, I32 none)
-{
- /* Returns a copy of a swash initiated by the called function. This is the
- * public interface, and returning a copy prevents others from doing
- * mischief on the original. The only remaining use of this is in tr/// */
-
- /*NOTE NOTE NOTE - If you want to use "return" in this routine you MUST
- * use the following define */
-
-#define SWASH_INIT_RETURN(x) \
- PL_curpm= old_PL_curpm; \
- return newSVsv(x)
-
- /* Initialize and return a swash, creating it if necessary. It does this
- * by calling utf8_heavy.pl in the general case.
- *
- * pkg is the name of the package that <name> should be in.
- * name is the name of the swash to find.
- * listsv is a string to initialize the swash with. It must be of the form
- * documented as the subroutine return value in
- * L<perlunicode/User-Defined Character Properties>
- * minbits is the number of bits required to represent each data element.
- * none I (khw) do not understand this one, but it is used only in tr///.
- *
- * Thus there are two possible inputs to find the swash: <name> and
- * <listsv>. At least one must be specified. The result
- * will be the union of the specified ones, although <listsv>'s various
- * actions can intersect, etc. what <name> gives. To avoid going out to
- * disk at all, <invlist> should specify completely what the swash should
- * have, and <listsv> should be &PL_sv_undef and <name> should be "".
- */
-
- PMOP *old_PL_curpm= PL_curpm; /* save away the old PL_curpm */
-
- SV* retval = &PL_sv_undef;
-
- PERL_ARGS_ASSERT_SWASH_INIT;
-
- assert(listsv != &PL_sv_undef || strNE(name, ""));
-
- PL_curpm= NULL; /* reset PL_curpm so that we dont get confused between the
- regex that triggered the swash init and the swash init
- perl logic itself. See perl #122747 */
-
- /* If data was passed in to go out to utf8_heavy to find the swash of, do
- * so */
- if (listsv != &PL_sv_undef || strNE(name, "")) {
- dSP;
- const size_t pkg_len = strlen(pkg);
- const size_t name_len = strlen(name);
- HV * const stash = gv_stashpvn(pkg, pkg_len, 0);
- SV* errsv_save;
- GV *method;
-
-
- PUSHSTACKi(PERLSI_MAGIC);
- ENTER;
- SAVEHINTS();
- save_re_context();
- /* We might get here via a subroutine signature which uses a utf8
- * parameter name, at which point PL_subname will have been set
- * but not yet used. */
- save_item(PL_subname);
- if (PL_parser && PL_parser->error_count)
- SAVEI8(PL_parser->error_count), PL_parser->error_count = 0;
- method = gv_fetchmeth(stash, "SWASHNEW", 8, -1);
- if (!method) { /* demand load UTF-8 */
- ENTER;
- if ((errsv_save = GvSV(PL_errgv))) SAVEFREESV(errsv_save);
- GvSV(PL_errgv) = NULL;
-#ifndef NO_TAINT_SUPPORT
- /* It is assumed that callers of this routine are not passing in
- * any user derived data. */
- /* Need to do this after save_re_context() as it will set
- * PL_tainted to 1 while saving $1 etc (see the code after getrx:
- * in Perl_magic_get). Even line to create errsv_save can turn on
- * PL_tainted. */
- SAVEBOOL(TAINT_get);
- TAINT_NOT;
-#endif
- require_pv("utf8_heavy.pl");
- {
- /* Not ERRSV, as there is no need to vivify a scalar we are
- about to discard. */
- SV * const errsv = GvSV(PL_errgv);
- if (!SvTRUE(errsv)) {
- GvSV(PL_errgv) = SvREFCNT_inc_simple(errsv_save);
- SvREFCNT_dec(errsv);
- }
- }
- LEAVE;
- }
- SPAGAIN;
- PUSHMARK(SP);
- EXTEND(SP,5);
- mPUSHp(pkg, pkg_len);
- mPUSHp(name, name_len);
- PUSHs(listsv);
- mPUSHi(minbits);
- mPUSHi(none);
- PUTBACK;
- if ((errsv_save = GvSV(PL_errgv))) SAVEFREESV(errsv_save);
- GvSV(PL_errgv) = NULL;
- /* If we already have a pointer to the method, no need to use
- * call_method() to repeat the lookup. */
- if (method
- ? call_sv(MUTABLE_SV(method), G_SCALAR)
- : call_sv(newSVpvs_flags("SWASHNEW", SVs_TEMP), G_SCALAR | G_METHOD))
- {
- retval = *PL_stack_sp--;
- SvREFCNT_inc(retval);
- }
- {
- /* Not ERRSV. See above. */
- SV * const errsv = GvSV(PL_errgv);
- if (!SvTRUE(errsv)) {
- GvSV(PL_errgv) = SvREFCNT_inc_simple(errsv_save);
- SvREFCNT_dec(errsv);
- }
- }
- LEAVE;
- POPSTACK;
- if (IN_PERL_COMPILETIME) {
- CopHINTS_set(PL_curcop, PL_hints);
- }
- } /* End of calling the module to find the swash */
-
- SWASH_INIT_RETURN(retval);
-#undef SWASH_INIT_RETURN
-}
-
-
-/* This API is wrong for special case conversions since we may need to
- * return several Unicode characters for a single Unicode character
- * (see lib/unicore/SpecCase.txt) The SWASHGET in lib/utf8_heavy.pl is
- * the lower-level routine, and it is similarly broken for returning
- * multiple values. --jhi
- * For those, you should use S__to_utf8_case() instead */
-/* Now SWASHGET is recasted into S_swatch_get in this file. */
-
-/* Note:
- * Returns the value of property/mapping C<swash> for the first character
- * of the string C<ptr>. If C<do_utf8> is true, the string C<ptr> is
- * assumed to be in well-formed UTF-8. If C<do_utf8> is false, the string C<ptr>
- * is assumed to be in native 8-bit encoding. Caches the swatch in C<swash>.
- *
- * A "swash" is a hash which contains initially the keys/values set up by
- * SWASHNEW. The purpose is to be able to completely represent a Unicode
- * property for all possible code points. Things are stored in a compact form
- * (see utf8_heavy.pl) so that calculation is required to find the actual
- * property value for a given code point. As code points are looked up, new
- * key/value pairs are added to the hash, so that the calculation doesn't have
- * to ever be re-done. Further, each calculation is done, not just for the
- * desired one, but for a whole block of code points adjacent to that one.
- * For binary properties on ASCII machines, the block is usually for 64 code
- * points, starting with a code point evenly divisible by 64. Thus if the
- * property value for code point 257 is requested, the code goes out and
- * calculates the property values for all 64 code points between 256 and 319,
- * and stores these as a single 64-bit long bit vector, called a "swatch",
- * under the key for code point 256. The key is the UTF-8 encoding for code
- * point 256, minus the final byte. Thus, if the length of the UTF-8 encoding
- * for a code point is 13 bytes, the key will be 12 bytes long. If the value
- * for code point 258 is then requested, this code realizes that it would be
- * stored under the key for 256, and would find that value and extract the
- * relevant bit, offset from 256.
- *
- * Non-binary properties are stored in as many bits as necessary to represent
- * their values (32 currently, though the code is more general than that), not
- * as single bits, but the principle is the same: the value for each key is a
- * vector that encompasses the property values for all code points whose UTF-8
- * representations are represented by the key. That is, for all code points
- * whose UTF-8 representations are length N bytes, and the key is the first N-1
- * bytes of that.
- */
-UV
-Perl_swash_fetch(pTHX_ SV *swash, const U8 *ptr, bool do_utf8)
-{
- HV *const hv = MUTABLE_HV(SvRV(swash));
- U32 klen;
- U32 off;
- STRLEN slen = 0;
- STRLEN needents;
- const U8 *tmps = NULL;
- SV *swatch;
- const U8 c = *ptr;
-
- PERL_ARGS_ASSERT_SWASH_FETCH;
-
- /* If it really isn't a hash, it isn't really swash; must be an inversion
- * list */
- if (SvTYPE(hv) != SVt_PVHV) {
- return _invlist_contains_cp((SV*)hv,
- (do_utf8)
- ? valid_utf8_to_uvchr(ptr, NULL)
- : c);
- }
-
- /* We store the values in a "swatch" which is a vec() value in a swash
- * hash. Code points 0-255 are a single vec() stored with key length
- * (klen) 0. All other code points have a UTF-8 representation
- * 0xAA..0xYY,0xZZ. A vec() is constructed containing all of them which
- * share 0xAA..0xYY, which is the key in the hash to that vec. So the key
- * length for them is the length of the encoded char - 1. ptr[klen] is the
- * final byte in the sequence representing the character */
- if (!do_utf8 || UTF8_IS_INVARIANT(c)) {
- klen = 0;
- needents = 256;
- off = c;
- }
- else if (UTF8_IS_DOWNGRADEABLE_START(c)) {
- klen = 0;
- needents = 256;
- off = EIGHT_BIT_UTF8_TO_NATIVE(c, *(ptr + 1));
- }
- else {
- klen = UTF8SKIP(ptr) - 1;
-
- /* Each vec() stores 2**UTF_ACCUMULATION_SHIFT values. The offset into
- * the vec is the final byte in the sequence. (In EBCDIC this is
- * converted to I8 to get consecutive values.) To help you visualize
- * all this:
- * Straight 1047 After final byte
- * UTF-8 UTF-EBCDIC I8 transform
- * U+0400: \xD0\x80 \xB8\x41\x41 \xB8\x41\xA0
- * U+0401: \xD0\x81 \xB8\x41\x42 \xB8\x41\xA1
- * ...
- * U+0409: \xD0\x89 \xB8\x41\x4A \xB8\x41\xA9
- * U+040A: \xD0\x8A \xB8\x41\x51 \xB8\x41\xAA
- * ...
- * U+0412: \xD0\x92 \xB8\x41\x59 \xB8\x41\xB2
- * U+0413: \xD0\x93 \xB8\x41\x62 \xB8\x41\xB3
- * ...
- * U+041B: \xD0\x9B \xB8\x41\x6A \xB8\x41\xBB
- * U+041C: \xD0\x9C \xB8\x41\x70 \xB8\x41\xBC
- * ...
- * U+041F: \xD0\x9F \xB8\x41\x73 \xB8\x41\xBF
- * U+0420: \xD0\xA0 \xB8\x42\x41 \xB8\x42\x41
- *
- * (There are no discontinuities in the elided (...) entries.)
- * The UTF-8 key for these 33 code points is '\xD0' (which also is the
- * key for the next 31, up through U+043F, whose UTF-8 final byte is
- * \xBF). Thus in UTF-8, each key is for a vec() for 64 code points.
- * The final UTF-8 byte, which ranges between \x80 and \xBF, is an
- * index into the vec() swatch (after subtracting 0x80, which we
- * actually do with an '&').
- * In UTF-EBCDIC, each key is for a 32 code point vec(). The first 32
- * code points above have key '\xB8\x41'. The final UTF-EBCDIC byte has
- * dicontinuities which go away by transforming it into I8, and we
- * effectively subtract 0xA0 to get the index. */
- needents = (1 << UTF_ACCUMULATION_SHIFT);
- off = NATIVE_UTF8_TO_I8(ptr[klen]) & UTF_CONTINUATION_MASK;
- }
-
- /*
- * This single-entry cache saves about 1/3 of the UTF-8 overhead in test
- * suite. (That is, only 7-8% overall over just a hash cache. Still,
- * it's nothing to sniff at.) Pity we usually come through at least
- * two function calls to get here...
- *
- * NB: this code assumes that swatches are never modified, once generated!
- */
-
- if (hv == PL_last_swash_hv &&
- klen == PL_last_swash_klen &&
- (!klen || memEQ((char *)ptr, (char *)PL_last_swash_key, klen)) )
- {
- tmps = PL_last_swash_tmps;
- slen = PL_last_swash_slen;
- }
- else {
- /* Try our second-level swatch cache, kept in a hash. */
- SV** svp = hv_fetch(hv, (const char*)ptr, klen, FALSE);
-
- /* If not cached, generate it via swatch_get */
- if (!svp || !SvPOK(*svp)
- || !(tmps = (const U8*)SvPV_const(*svp, slen)))
- {
- if (klen) {
- const UV code_point = valid_utf8_to_uvchr(ptr, NULL);
- swatch = swatch_get(swash,
- code_point & ~((UV)needents - 1),
- needents);
- }
- else { /* For the first 256 code points, the swatch has a key of
- length 0 */
- swatch = swatch_get(swash, 0, needents);
- }
-
- if (IN_PERL_COMPILETIME)
- CopHINTS_set(PL_curcop, PL_hints);
-
- svp = hv_store(hv, (const char *)ptr, klen, swatch, 0);
-
- if (!svp || !(tmps = (U8*)SvPV(*svp, slen))
- || (slen << 3) < needents)
- Perl_croak(aTHX_ "panic: swash_fetch got improper swatch, "
- "svp=%p, tmps=%p, slen=%" UVuf ", needents=%" UVuf,
- svp, tmps, (UV)slen, (UV)needents);
- }
-
- PL_last_swash_hv = hv;
- assert(klen <= sizeof(PL_last_swash_key));
- PL_last_swash_klen = (U8)klen;
- /* FIXME change interpvar.h? */
- PL_last_swash_tmps = (U8 *) tmps;
- PL_last_swash_slen = slen;
- if (klen)
- Copy(ptr, PL_last_swash_key, klen, U8);
- }
-
- switch ((int)((slen << 3) / needents)) {
- case 1:
- return ((UV) tmps[off >> 3] & (1 << (off & 7))) != 0;
- case 8:
- return ((UV) tmps[off]);
- case 16:
- off <<= 1;
- return
- ((UV) tmps[off ] << 8) +
- ((UV) tmps[off + 1]);
- case 32:
- off <<= 2;
- return
- ((UV) tmps[off ] << 24) +
- ((UV) tmps[off + 1] << 16) +
- ((UV) tmps[off + 2] << 8) +
- ((UV) tmps[off + 3]);
- }
- Perl_croak(aTHX_ "panic: swash_fetch got swatch of unexpected bit width, "
- "slen=%" UVuf ", needents=%" UVuf, (UV)slen, (UV)needents);
- NORETURN_FUNCTION_END;
-}
-
-/* Read a single line of the main body of the swash input text. These are of
- * the form:
- * 0053 0056 0073
- * where each number is hex. The first two numbers form the minimum and
- * maximum of a range, and the third is the value associated with the range.
- * Not all swashes should have a third number
- *
- * On input: l points to the beginning of the line to be examined; it points
- * to somewhere in the string of the whole input text, and is
- * terminated by a \n or the null string terminator.
- * lend points to the null terminator of that string
- * wants_value is non-zero if the swash expects a third number
- * typestr is the name of the swash's mapping, like 'ToLower'
- * On output: *min, *max, and *val are set to the values read from the line.
- * returns a pointer just beyond the line examined. If there was no
- * valid min number on the line, returns lend+1
- */
-
-STATIC U8*
-S_swash_scan_list_line(pTHX_ U8* l, U8* const lend, UV* min, UV* max, UV* val,
- const bool wants_value, const U8* const typestr)
-{
- const int typeto = typestr[0] == 'T' && typestr[1] == 'o';
- STRLEN numlen; /* Length of the number */
- I32 flags = PERL_SCAN_SILENT_ILLDIGIT
- | PERL_SCAN_DISALLOW_PREFIX
- | PERL_SCAN_SILENT_NON_PORTABLE;
-
- /* nl points to the next \n in the scan */
- U8* const nl = (U8*)memchr(l, '\n', lend - l);
-
- PERL_ARGS_ASSERT_SWASH_SCAN_LIST_LINE;
-
- /* Get the first number on the line: the range minimum */
- numlen = lend - l;
- *min = grok_hex((char *)l, &numlen, &flags, NULL);
- *max = *min; /* So can never return without setting max */
- if (numlen) /* If found a hex number, position past it */
- l += numlen;
- else if (nl) { /* Else, go handle next line, if any */
- return nl + 1; /* 1 is length of "\n" */
- }
- else { /* Else, no next line */
- return lend + 1; /* to LIST's end at which \n is not found */
- }
-
- /* The max range value follows, separated by a BLANK */
- if (isBLANK(*l)) {
- ++l;
- flags = PERL_SCAN_SILENT_ILLDIGIT
- | PERL_SCAN_DISALLOW_PREFIX
- | PERL_SCAN_SILENT_NON_PORTABLE;
- numlen = lend - l;
- *max = grok_hex((char *)l, &numlen, &flags, NULL);
- if (numlen)
- l += numlen;
- else /* If no value here, it is a single element range */
- *max = *min;
-
- /* Non-binary tables have a third entry: what the first element of the
- * range maps to. The map for those currently read here is in hex */
- if (wants_value) {
- if (isBLANK(*l)) {
- ++l;
- flags = PERL_SCAN_SILENT_ILLDIGIT
- | PERL_SCAN_DISALLOW_PREFIX
- | PERL_SCAN_SILENT_NON_PORTABLE;
- numlen = lend - l;
- *val = grok_hex((char *)l, &numlen, &flags, NULL);
- if (numlen)
- l += numlen;
- else
- *val = 0;
- }
- else {
- *val = 0;
- if (typeto) {
- /* diag_listed_as: To%s: illegal mapping '%s' */
- Perl_croak(aTHX_ "%s: illegal mapping '%s'",
- typestr, l);
- }
- }
- }
- else
- *val = 0; /* bits == 1, then any val should be ignored */
- }
- else { /* Nothing following range min, should be single element with no
- mapping expected */
- if (wants_value) {
- *val = 0;
- if (typeto) {
- /* diag_listed_as: To%s: illegal mapping '%s' */
- Perl_croak(aTHX_ "%s: illegal mapping '%s'", typestr, l);
- }
- }
- else
- *val = 0; /* bits == 1, then val should be ignored */
- }
-
- /* Position to next line if any, or EOF */
- if (nl)
- l = nl + 1;
- else
- l = lend;
-
- return l;
-}
-
-/* Note:
- * Returns a swatch (a bit vector string) for a code point sequence
- * that starts from the value C<start> and comprises the number C<span>.
- * A C<swash> must be an object created by SWASHNEW (see lib/utf8_heavy.pl).
- * Should be used via swash_fetch, which will cache the swatch in C<swash>.
- */
-STATIC SV*
-S_swatch_get(pTHX_ SV* swash, UV start, UV span)
-{
- SV *swatch;
- U8 *l, *lend, *x, *xend, *s;
- STRLEN lcur, xcur, scur;
- HV *const hv = MUTABLE_HV(SvRV(swash));
-
- SV** listsvp = NULL; /* The string containing the main body of the table */
- SV** extssvp = NULL;
- U8* typestr = NULL;
- STRLEN bits = 0;
- STRLEN octets; /* if bits == 1, then octets == 0 */
- UV none;
- UV end = start + span;
-
- SV** const bitssvp = hv_fetchs(hv, "BITS", FALSE);
- SV** const nonesvp = hv_fetchs(hv, "NONE", FALSE);
- SV** const typesvp = hv_fetchs(hv, "TYPE", FALSE);
- extssvp = hv_fetchs(hv, "EXTRAS", FALSE);
- listsvp = hv_fetchs(hv, "LIST", FALSE);
-
- bits = SvUV(*bitssvp);
- none = SvUV(*nonesvp);
- typestr = (U8*)SvPV_nolen(*typesvp);
- octets = bits >> 3; /* if bits == 1, then octets == 0 */
-
- PERL_ARGS_ASSERT_SWATCH_GET;
-
- if (bits != 8 && bits != 16 && bits != 32) {
- Perl_croak(aTHX_ "panic: swatch_get doesn't expect bits %" UVuf,
- (UV)bits);
- }
-
- /* If overflowed, use the max possible */
- if (end < start) {
- end = UV_MAX;
- span = end - start;
- }
-
- /* create and initialize $swatch */
- scur = octets ? (span * octets) : (span + 7) / 8;
- swatch = newSV(scur);
- SvPOK_on(swatch);
- s = (U8*)SvPVX(swatch);
- if (octets && none) {
- const U8* const e = s + scur;
- while (s < e) {
- if (bits == 8)
- *s++ = (U8)(none & 0xff);
- else if (bits == 16) {
- *s++ = (U8)((none >> 8) & 0xff);
- *s++ = (U8)( none & 0xff);
- }
- else if (bits == 32) {
- *s++ = (U8)((none >> 24) & 0xff);
- *s++ = (U8)((none >> 16) & 0xff);
- *s++ = (U8)((none >> 8) & 0xff);
- *s++ = (U8)( none & 0xff);
- }
- }
- *s = '\0';
- }
- else {
- (void)memzero((U8*)s, scur + 1);
- }
- SvCUR_set(swatch, scur);
- s = (U8*)SvPVX(swatch);
-
- /* read $swash->{LIST} */
- l = (U8*)SvPV(*listsvp, lcur);
- lend = l + lcur;
- while (l < lend) {
- UV min = 0, max = 0, val = 0, upper;
- l = swash_scan_list_line(l, lend, &min, &max, &val,
- cBOOL(octets), typestr);
- if (l > lend) {
- break;
- }
-
- /* If looking for something beyond this range, go try the next one */
- if (max < start)
- continue;
-
- /* <end> is generally 1 beyond where we want to set things, but at the
- * platform's infinity, where we can't go any higher, we want to
- * include the code point at <end> */
- upper = (max < end)
- ? max
- : (max != UV_MAX || end != UV_MAX)
- ? end - 1
- : end;
-
- if (octets) {
- UV key;
- if (min < start) {
- if (!none || val < none) {
- val += start - min;
- }
- min = start;
- }
- for (key = min; key <= upper; key++) {
- STRLEN offset;
- /* offset must be non-negative (start <= min <= key < end) */
- offset = octets * (key - start);
- if (bits == 8)
- s[offset] = (U8)(val & 0xff);
- else if (bits == 16) {
- s[offset ] = (U8)((val >> 8) & 0xff);
- s[offset + 1] = (U8)( val & 0xff);
- }
- else if (bits == 32) {
- s[offset ] = (U8)((val >> 24) & 0xff);
- s[offset + 1] = (U8)((val >> 16) & 0xff);
- s[offset + 2] = (U8)((val >> 8) & 0xff);
- s[offset + 3] = (U8)( val & 0xff);
- }
-
- if (!none || val < none)
- ++val;
- }
- }
- } /* while */
-
- /* read $swash->{EXTRAS} */
- x = (U8*)SvPV(*extssvp, xcur);
- xend = x + xcur;
- while (x < xend) {
- STRLEN namelen;
- U8 *namestr;
- SV** othersvp;
- HV* otherhv;
- STRLEN otherbits;
- SV **otherbitssvp, *other;
- U8 *s, *o, *nl;
- STRLEN slen, olen;
-
- const U8 opc = *x++;
- if (opc == '\n')
- continue;
-
- nl = (U8*)memchr(x, '\n', xend - x);
-
- if (opc != '-' && opc != '+' && opc != '!' && opc != '&') {
- if (nl) {
- x = nl + 1; /* 1 is length of "\n" */
- continue;
- }
- else {
- x = xend; /* to EXTRAS' end at which \n is not found */
- break;
- }
- }
-
- namestr = x;
- if (nl) {
- namelen = nl - namestr;
- x = nl + 1;
- }
- else {
- namelen = xend - namestr;
- x = xend;
- }
-
- othersvp = hv_fetch(hv, (char *)namestr, namelen, FALSE);
- otherhv = MUTABLE_HV(SvRV(*othersvp));
- otherbitssvp = hv_fetchs(otherhv, "BITS", FALSE);
- otherbits = (STRLEN)SvUV(*otherbitssvp);
- if (bits < otherbits)
- Perl_croak(aTHX_ "panic: swatch_get found swatch size mismatch, "
- "bits=%" UVuf ", otherbits=%" UVuf, (UV)bits, (UV)otherbits);
-
- /* The "other" swatch must be destroyed after. */
- other = swatch_get(*othersvp, start, span);
- o = (U8*)SvPV(other, olen);
-
- if (!olen)
- Perl_croak(aTHX_ "panic: swatch_get got improper swatch");
-
- s = (U8*)SvPV(swatch, slen);
- {
- STRLEN otheroctets = otherbits >> 3;
- STRLEN offset = 0;
- U8* const send = s + slen;
-
- while (s < send) {
- UV otherval = 0;
-
- if (otherbits == 1) {
- otherval = (o[offset >> 3] >> (offset & 7)) & 1;
- ++offset;
- }
- else {
- STRLEN vlen = otheroctets;
- otherval = *o++;
- while (--vlen) {
- otherval <<= 8;
- otherval |= *o++;
- }
- }
-
- if (opc == '+' && otherval)
- NOOP; /* replace with otherval */
- else if (opc == '!' && !otherval)
- otherval = 1;
- else if (opc == '-' && otherval)
- otherval = 0;
- else if (opc == '&' && !otherval)
- otherval = 0;
- else {
- s += octets; /* no replacement */
- continue;
- }
-
- if (bits == 8)
- *s++ = (U8)( otherval & 0xff);
- else if (bits == 16) {
- *s++ = (U8)((otherval >> 8) & 0xff);
- *s++ = (U8)( otherval & 0xff);
- }
- else if (bits == 32) {
- *s++ = (U8)((otherval >> 24) & 0xff);
- *s++ = (U8)((otherval >> 16) & 0xff);
- *s++ = (U8)((otherval >> 8) & 0xff);
- *s++ = (U8)( otherval & 0xff);
- }
- }
- }
- sv_free(other); /* through with it! */
- } /* while */
- return swatch;
-}
-
bool
Perl_check_utf8_print(pTHX_ const U8* s, const STRLEN len)
{
@@ -4999,9 +4045,9 @@ Perl_check_utf8_print(pTHX_ const U8* s, const STRLEN len)
/*
=for apidoc pv_uni_display
-Build to the scalar C<dsv> a displayable version of the string C<spv>,
-length C<len>, the displayable version being at most C<pvlim> bytes long
-(if longer, the rest is truncated and C<"..."> will be appended).
+Build to the scalar C<dsv> a displayable version of the UTF-8 encoded string
+C<spv>, length C<len>, the displayable version being at most C<pvlim> bytes
+long (if longer, the rest is truncated and C<"..."> will be appended).
The C<flags> argument can have C<UNI_DISPLAY_ISPRINT> set to display
C<isPRINT()>able characters as themselves, C<UNI_DISPLAY_BACKSLASH>
@@ -5010,6 +4056,9 @@ to display the C<\\[nrfta\\]> as the backslashed versions (like C<"\n">)
C<UNI_DISPLAY_QQ> (and its alias C<UNI_DISPLAY_REGEX>) have both
C<UNI_DISPLAY_BACKSLASH> and C<UNI_DISPLAY_ISPRINT> turned on.
+Additionally, there is now C<UNI_DISPLAY_BACKSPACE> which allows C<\b> for a
+backspace, but only when C<UNI_DISPLAY_BACKSLASH> also is set.
+
The pointer to the PV of the C<dsv> is returned.
See also L</sv_uni_display>.
@@ -5028,10 +4077,7 @@ Perl_pv_uni_display(pTHX_ SV *dsv, const U8 *spv, STRLEN len, STRLEN pvlim,
SvUTF8_off(dsv);
for (s = (const char *)spv, e = s + len; s < e; s += UTF8SKIP(s)) {
UV u;
- /* This serves double duty as a flag and a character to print after
- a \ when flags & UNI_DISPLAY_BACKSLASH is true.
- */
- char ok = 0;
+ bool ok = 0;
if (pvlim && SvCUR(dsv) >= pvlim) {
truncated++;
@@ -5041,27 +4087,19 @@ Perl_pv_uni_display(pTHX_ SV *dsv, const U8 *spv, STRLEN len, STRLEN pvlim,
if (u < 256) {
const unsigned char c = (unsigned char)u & 0xFF;
if (flags & UNI_DISPLAY_BACKSLASH) {
- switch (c) {
- case '\n':
- ok = 'n'; break;
- case '\r':
- ok = 'r'; break;
- case '\t':
- ok = 't'; break;
- case '\f':
- ok = 'f'; break;
- case '\a':
- ok = 'a'; break;
- case '\\':
- ok = '\\'; break;
- default: break;
- }
- if (ok) {
- const char string = ok;
- sv_catpvs(dsv, "\\");
- sv_catpvn(dsv, &string, 1);
- }
- }
+ if ( isMNEMONIC_CNTRL(c)
+ && ( c != '\b'
+ || (flags & UNI_DISPLAY_BACKSPACE)))
+ {
+ const char * mnemonic = cntrl_to_mnemonic(c);
+ sv_catpvn(dsv, mnemonic, strlen(mnemonic));
+ ok = 1;
+ }
+ else if (c == '\\') {
+ sv_catpvs(dsv, "\\\\");
+ ok = 1;
+ }
+ }
/* isPRINT() is the locale-blind version. */
if (!ok && (flags & UNI_DISPLAY_ISPRINT) && isPRINT(c)) {
const char string = c;
@@ -5143,7 +4181,7 @@ beyond what was matched. Correspondingly for C<pe2> and C<s2>.
For case-insensitiveness, the "casefolding" of Unicode is used
instead of upper/lowercasing both the characters, see
-L<http://www.unicode.org/unicode/reports/tr21/> (Case Mappings).
+L<https://www.unicode.org/unicode/reports/tr21/> (Case Mappings).
=cut */
@@ -5397,118 +4435,6 @@ Perl_foldEQ_utf8_flags(pTHX_ const char *s1, char **pe1, UV l1, bool u1,
return 1;
}
-/* XXX The next two functions should likely be moved to mathoms.c once all
- * occurrences of them are removed from the core; some cpan-upstream modules
- * still use them */
-
-U8 *
-Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv)
-{
- PERL_ARGS_ASSERT_UVUNI_TO_UTF8;
-
- return uvoffuni_to_utf8_flags(d, uv, 0);
-}
-
-/*
-=for apidoc utf8n_to_uvuni
-
-Instead use L</utf8_to_uvchr_buf>, or rarely, L</utf8n_to_uvchr>.
-
-This function was useful for code that wanted to handle both EBCDIC and
-ASCII platforms with Unicode properties, but starting in Perl v5.20, the
-distinctions between the platforms have mostly been made invisible to most
-code, so this function is quite unlikely to be what you want. If you do need
-this precise functionality, use instead
-C<L<NATIVE_TO_UNI(utf8_to_uvchr_buf(...))|/utf8_to_uvchr_buf>>
-or C<L<NATIVE_TO_UNI(utf8n_to_uvchr(...))|/utf8n_to_uvchr>>.
-
-=cut
-*/
-
-UV
-Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
-{
- PERL_ARGS_ASSERT_UTF8N_TO_UVUNI;
-
- return NATIVE_TO_UNI(utf8n_to_uvchr(s, curlen, retlen, flags));
-}
-
-/*
-=for apidoc uvuni_to_utf8_flags
-
-Instead you almost certainly want to use L</uvchr_to_utf8> or
-L</uvchr_to_utf8_flags>.
-
-This function is a deprecated synonym for L</uvoffuni_to_utf8_flags>,
-which itself, while not deprecated, should be used only in isolated
-circumstances. These functions were useful for code that wanted to handle
-both EBCDIC and ASCII platforms with Unicode properties, but starting in Perl
-v5.20, the distinctions between the platforms have mostly been made invisible
-to most code, so this function is quite unlikely to be what you want.
-
-=cut
-*/
-
-U8 *
-Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags)
-{
- PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS;
-
- return uvoffuni_to_utf8_flags(d, uv, flags);
-}
-
-/*
-=for apidoc utf8_to_uvchr
-
-Returns the native code point of the first character in the string C<s>
-which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
-length, in bytes, of that character.
-
-Some, but not all, UTF-8 malformations are detected, and in fact, some
-malformed input could cause reading beyond the end of the input buffer, which
-is why this function is deprecated. Use L</utf8_to_uvchr_buf> instead.
-
-If C<s> points to one of the detected malformations, and UTF8 warnings are
-enabled, zero is returned and C<*retlen> is set (if C<retlen> isn't
-C<NULL>) to -1. If those warnings are off, the computed value if well-defined (or
-the Unicode REPLACEMENT CHARACTER, if not) is silently returned, and C<*retlen>
-is set (if C<retlen> isn't NULL) so that (S<C<s> + C<*retlen>>) is the
-next possible position in C<s> that could begin a non-malformed character.
-See L</utf8n_to_uvchr> for details on when the REPLACEMENT CHARACTER is returned.
-
-=cut
-*/
-
-UV
-Perl_utf8_to_uvchr(pTHX_ const U8 *s, STRLEN *retlen)
-{
- PERL_ARGS_ASSERT_UTF8_TO_UVCHR;
-
- /* This function is unsafe if malformed UTF-8 input is given it, which is
- * why the function is deprecated. If the first byte of the input
- * indicates that there are more bytes remaining in the sequence that forms
- * the character than there are in the input buffer, it can read past the
- * end. But we can make it safe if the input string happens to be
- * NUL-terminated, as many strings in Perl are, by refusing to read past a
- * NUL. A NUL indicates the start of the next character anyway. If the
- * input isn't NUL-terminated, the function remains unsafe, as it always
- * has been.
- *
- * An initial NUL has to be handled separately, but all ASCIIs can be
- * handled the same way, speeding up this common case */
-
- if (UTF8_IS_INVARIANT(*s)) { /* Assumes 's' contains at least 1 byte */
- if (retlen) {
- *retlen = 1;
- }
- return (UV) *s;
- }
-
- return utf8_to_uvchr_buf(s,
- s + my_strnlen((char *) s, UTF8SKIP(s)),
- retlen);
-}
-
/*
* ex: set ts=8 sts=4 sw=4 et:
*/
diff --git a/gnu/usr.bin/perl/utf8.h b/gnu/usr.bin/perl/utf8.h
index d0b8742d5a8..01bf447a614 100644
--- a/gnu/usr.bin/perl/utf8.h
+++ b/gnu/usr.bin/perl/utf8.h
@@ -69,9 +69,7 @@ the string is invariant.
#define uvchr_to_utf8_flags_msgs(d,uv,flags,msgs) \
uvoffuni_to_utf8_flags_msgs(d,NATIVE_TO_UNI(uv),flags, msgs)
#define utf8_to_uvchr_buf(s, e, lenp) \
- (__ASSERT_((U8*) (e) > (U8*) (s)) \
- utf8n_to_uvchr(s, (U8*)(e) - (U8*)(s), lenp, \
- ckWARN_d(WARN_UTF8) ? 0 : UTF8_ALLOW_ANY))
+ utf8_to_uvchr_buf_helper((const U8 *) (s), (const U8 *) e, lenp)
#define utf8n_to_uvchr(s, len, lenp, flags) \
utf8n_to_uvchr_error(s, len, lenp, flags, 0)
#define utf8n_to_uvchr_error(s, len, lenp, flags, errors) \
@@ -79,15 +77,6 @@ the string is invariant.
#define to_uni_fold(c, p, lenp) _to_uni_fold_flags(c, p, lenp, FOLD_FLAGS_FULL)
-#define to_utf8_fold(s, r, lenr) \
- _to_utf8_fold_flags (s, NULL, r, lenr, FOLD_FLAGS_FULL, __FILE__, __LINE__)
-#define to_utf8_lower(s, r, lenr) \
- _to_utf8_lower_flags(s, NULL, r ,lenr, 0, __FILE__, __LINE__)
-#define to_utf8_upper(s, r, lenr) \
- _to_utf8_upper_flags(s, NULL, r, lenr, 0, __FILE__, __LINE__)
-#define to_utf8_title(s, r, lenr) \
- _to_utf8_title_flags(s, NULL, r, lenr ,0, __FILE__, __LINE__)
-
#define foldEQ_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2) \
foldEQ_utf8_flags(s1, pe1, l1, u1, s2, pe2, l2, u2, 0)
#define FOLDEQ_UTF8_NOMIX_ASCII (1 << 0)
@@ -110,11 +99,19 @@ the string is invariant.
#else /* ! EBCDIC */
START_EXTERN_C
-/* How wide can a single UTF-8 encoded character become in bytes. */
-/* NOTE: Strictly speaking Perl's UTF-8 should not be called UTF-8 since UTF-8
- * is an encoding of Unicode, and Unicode's upper limit, 0x10FFFF, can be
- * expressed with 4 bytes. However, Perl thinks of UTF-8 as a way to encode
- * non-negative integers in a binary format, even those above Unicode */
+/*
+
+=for apidoc AmnU|STRLEN|UTF8_MAXBYTES
+
+The maximum width of a single UTF-8 encoded character, in bytes.
+
+NOTE: Strictly speaking Perl's UTF-8 should not be called UTF-8 since UTF-8
+is an encoding of Unicode, and Unicode's upper limit, 0x10FFFF, can be
+expressed with 4 bytes. However, Perl thinks of UTF-8 as a way to encode
+non-negative integers in a binary format, even those above Unicode.
+
+=cut
+ */
#define UTF8_MAXBYTES 13
#ifdef DOINIT
@@ -147,20 +144,53 @@ EXTCONST unsigned char PL_utf8skip[];
END_EXTERN_C
-#if defined(_MSC_VER) && _MSC_VER < 1400
-/* older MSVC versions have a smallish macro buffer */
-#define PERL_SMALL_MACRO_BUFFER
-#endif
+/*
-/* Native character to/from iso-8859-1. Are the identity functions on ASCII
- * platforms */
-#ifdef PERL_SMALL_MACRO_BUFFER
-#define NATIVE_TO_LATIN1(ch) ((U8)(ch))
-#define LATIN1_TO_NATIVE(ch) ((U8)(ch))
-#else
-#define NATIVE_TO_LATIN1(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
-#define LATIN1_TO_NATIVE(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
-#endif
+=for apidoc Am|U8|NATIVE_TO_LATIN1|U8 ch
+
+Returns the Latin-1 (including ASCII and control characters) equivalent of the
+input native code point given by C<ch>. Thus, C<NATIVE_TO_LATIN1(193)> on
+EBCDIC platforms returns 65. These each represent the character C<"A"> on
+their respective platforms. On ASCII platforms no conversion is needed, so
+this macro expands to just its input, adding no time nor space requirements to
+the implementation.
+
+For conversion of code points potentially larger than will fit in a character,
+use L</NATIVE_TO_UNI>.
+
+=for apidoc Am|U8|LATIN1_TO_NATIVE|U8 ch
+
+Returns the native equivalent of the input Latin-1 code point (including ASCII
+and control characters) given by C<ch>. Thus, C<LATIN1_TO_NATIVE(66)> on
+EBCDIC platforms returns 194. These each represent the character C<"B"> on
+their respective platforms. On ASCII platforms no conversion is needed, so
+this macro expands to just its input, adding no time nor space requirements to
+the implementation.
+
+For conversion of code points potentially larger than will fit in a character,
+use L</UNI_TO_NATIVE>.
+
+=for apidoc Am|UV|NATIVE_TO_UNI|UV ch
+
+Returns the Unicode equivalent of the input native code point given by C<ch>.
+Thus, C<NATIVE_TO_UNI(195)> on EBCDIC platforms returns 67. These each
+represent the character C<"C"> on their respective platforms. On ASCII
+platforms no conversion is needed, so this macro expands to just its input,
+adding no time nor space requirements to the implementation.
+
+=for apidoc Am|UV|UNI_TO_NATIVE|UV ch
+
+Returns the native equivalent of the input Unicode code point given by C<ch>.
+Thus, C<UNI_TO_NATIVE(68)> on EBCDIC platforms returns 196. These each
+represent the character C<"D"> on their respective platforms. On ASCII
+platforms no conversion is needed, so this macro expands to just its input,
+adding no time nor space requirements to the implementation.
+
+=cut
+*/
+
+#define NATIVE_TO_LATIN1(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) ((ch) | 0)))
+#define LATIN1_TO_NATIVE(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) ((ch) | 0)))
/* I8 is an intermediate version of UTF-8 used only in UTF-EBCDIC. We thus
* consider it to be identical to UTF-8 on ASCII platforms. Strictly speaking
@@ -168,17 +198,11 @@ END_EXTERN_C
* because they are 8-bit encodings that serve the same purpose in Perl, and
* rarely do we need to distinguish them. The term "NATIVE_UTF8" applies to
* whichever one is applicable on the current platform */
-#ifdef PERL_SMALL_MACRO_BUFFER
-#define NATIVE_UTF8_TO_I8(ch) ((U8) (ch))
-#define I8_TO_NATIVE_UTF8(ch) ((U8) (ch))
-#else
-#define NATIVE_UTF8_TO_I8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
-#define I8_TO_NATIVE_UTF8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) (ch)))
-#endif
+#define NATIVE_UTF8_TO_I8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) ((ch) | 0)))
+#define I8_TO_NATIVE_UTF8(ch) (__ASSERT_(FITS_IN_8_BITS(ch)) ((U8) ((ch) | 0)))
-/* Transforms in wide UV chars */
-#define UNI_TO_NATIVE(ch) ((UV) (ch))
-#define NATIVE_TO_UNI(ch) ((UV) (ch))
+#define UNI_TO_NATIVE(ch) ((UV) ((ch) | 0))
+#define NATIVE_TO_UNI(ch) ((UV) ((ch) | 0))
/*
@@ -233,66 +257,7 @@ Perl's extended UTF-8 means we can have start bytes up through FF, though any
beginning with FF yields a code point that is too large for 32-bit ASCII
platforms. FF signals to use 13 bytes for the encoded character. This breaks
the paradigm that the number of leading bits gives how many total bytes there
-are in the character.
-
-*/
-
-/* Is the representation of the Unicode code point 'cp' the same regardless of
- * being encoded in UTF-8 or not? */
-#define OFFUNI_IS_INVARIANT(cp) isASCII(cp)
-
-/*
-=for apidoc Am|bool|UVCHR_IS_INVARIANT|UV cp
-
-Evaluates to 1 if the representation of code point C<cp> is the same whether or
-not it is encoded in UTF-8; otherwise evaluates to 0. UTF-8 invariant
-characters can be copied as-is when converting to/from UTF-8, saving time.
-C<cp> is Unicode if above 255; otherwise is platform-native.
-
-=cut
- */
-
-#define UVCHR_IS_INVARIANT(cp) OFFUNI_IS_INVARIANT(cp)
-
-/* This defines the bits that are to be in the continuation bytes of a multi-byte
- * UTF-8 encoded character that mark it is a continuation byte. */
-#define UTF_CONTINUATION_MARK 0x80
-
-/* Misleadingly named: is the UTF8-encoded byte 'c' part of a variant sequence
- * in UTF-8? This is the inverse of UTF8_IS_INVARIANT. The |0 makes sure this
- * isn't mistakenly called with a ptr argument */
-#define UTF8_IS_CONTINUED(c) (__ASSERT_(FITS_IN_8_BITS(c)) \
- ((U8)((c) | 0)) & UTF_CONTINUATION_MARK)
-
-/* Is the byte 'c' the first byte of a multi-byte UTF8-8 encoded sequence?
- * This doesn't catch invariants (they are single-byte). It also excludes the
- * illegal overlong sequences that begin with C0 and C1. The |0 makes sure
- * this isn't mistakenly called with a ptr argument */
-#define UTF8_IS_START(c) (__ASSERT_(FITS_IN_8_BITS(c)) \
- ((U8)((c) | 0)) >= 0xc2)
-
-/* For use in UTF8_IS_CONTINUATION() below */
-#define UTF_IS_CONTINUATION_MASK 0xC0
-
-/* Is the byte 'c' part of a multi-byte UTF8-8 encoded sequence, and not the
- * first byte thereof? The |0 makes sure this isn't mistakenly called with a
- * ptr argument */
-#define UTF8_IS_CONTINUATION(c) (__ASSERT_(FITS_IN_8_BITS(c)) \
- (((U8)((c) | 0)) & UTF_IS_CONTINUATION_MASK) == UTF_CONTINUATION_MARK)
-
-/* Is the UTF8-encoded byte 'c' the first byte of a two byte sequence? Use
- * UTF8_IS_NEXT_CHAR_DOWNGRADEABLE() instead if the input isn't known to
- * be well-formed. Masking with 0xfe allows the low bit to be 0 or 1; thus
- * this matches 0xc[23]. The |0 makes sure this isn't mistakenly called with a
- * ptr argument */
-#define UTF8_IS_DOWNGRADEABLE_START(c) (__ASSERT_(FITS_IN_8_BITS(c)) \
- (((U8)((c) | 0)) & 0xfe) == 0xc2)
-
-/* Is the UTF8-encoded byte 'c' the first byte of a sequence of bytes that
- * represent a code point > 255? The |0 makes sure this isn't mistakenly
- * called with a ptr argument */
-#define UTF8_IS_ABOVE_LATIN1(c) (__ASSERT_(FITS_IN_8_BITS(c)) \
- ((U8)((c) | 0)) >= 0xc4)
+are in the character. */
/* This is the number of low-order bits a continuation byte in a UTF-8 encoded
* sequence contributes to the specification of the code point. In the bit
@@ -306,7 +271,7 @@ C<cp> is Unicode if above 255; otherwise is platform-native.
/* Surrogates, non-character code points and above-Unicode code points are
* problematic in some contexts. This allows code that needs to check for
- * those to to quickly exclude the vast majority of code points it will
+ * those to quickly exclude the vast majority of code points it will
* encounter */
#define isUTF8_POSSIBLY_PROBLEMATIC(c) (__ASSERT_(FITS_IN_8_BITS(c)) \
(U8) c >= 0xED)
@@ -315,9 +280,44 @@ C<cp> is Unicode if above 255; otherwise is platform-native.
#endif /* EBCDIC vs ASCII */
-/* 2**UTF_ACCUMULATION_SHIFT - 1 */
+/* 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))
+/* For use in UTF8_IS_CONTINUATION(). This turns out to be 0xC0 in UTF-8,
+ * E0 in UTF-EBCDIC */
+#define UTF_IS_CONTINUATION_MASK ((U8) (0xFF << UTF_ACCUMULATION_SHIFT))
+
+/* This defines the bits that are to be in the continuation bytes of a
+ * multi-byte UTF-8 encoded character that mark it is a continuation byte.
+ * This turns out to be 0x80 in UTF-8, 0xA0 in UTF-EBCDIC. (khw doesn't know
+ * the underlying reason that B0 works here) */
+#define UTF_CONTINUATION_MARK (UTF_IS_CONTINUATION_MASK & 0xB0)
+
+/* Is the byte 'c' part of a multi-byte UTF8-8 encoded sequence, and not the
+ * first byte thereof? */
+#define UTF8_IS_CONTINUATION(c) (__ASSERT_(FITS_IN_8_BITS(c)) \
+ (((NATIVE_UTF8_TO_I8(c) & UTF_IS_CONTINUATION_MASK) \
+ == UTF_CONTINUATION_MARK)))
+
+/* Is the representation of the Unicode code point 'cp' the same regardless of
+ * being encoded in UTF-8 or not? This is a fundamental property of
+ * UTF-8,EBCDIC */
+#define OFFUNI_IS_INVARIANT(c) (((WIDEST_UTYPE)(c)) < UTF_CONTINUATION_MARK)
+
+/*
+=for apidoc Am|bool|UVCHR_IS_INVARIANT|UV cp
+
+Evaluates to 1 if the representation of code point C<cp> is the same whether or
+not it is encoded in UTF-8; otherwise evaluates to 0. UTF-8 invariant
+characters can be copied as-is when converting to/from UTF-8, saving time.
+C<cp> is Unicode if above 255; otherwise is platform-native.
+
+=cut
+ */
+#define UVCHR_IS_INVARIANT(cp) (OFFUNI_IS_INVARIANT(NATIVE_TO_UNI(cp)))
+
/* Internal macro to be used only in this file to aid in constructing other
* publicly accessible macros.
* The number of bytes required to express this uv in UTF-8, for just those
@@ -376,6 +376,39 @@ encoded as UTF-8. C<cp> is a native (ASCII or EBCDIC) code point if less than
*/
#define UVCHR_SKIP(uv) ( UVCHR_IS_INVARIANT(uv) ? 1 : __BASE_UNI_SKIP(uv))
+#define UTF_MIN_START_BYTE \
+ ((UTF_CONTINUATION_MARK >> UTF_ACCUMULATION_SHIFT) | UTF_START_MARK(2))
+
+/* Is the byte 'c' the first byte of a multi-byte UTF8-8 encoded sequence?
+ * This excludes invariants (they are single-byte). It also excludes the
+ * illegal overlong sequences that begin with C0 and C1 on ASCII platforms, and
+ * C0-C4 I8 start bytes on EBCDIC ones. On EBCDIC E0 can't start a
+ * non-overlong sequence, so we define a base macro and for those platforms,
+ * extend it to also exclude E0 */
+#define UTF8_IS_START_base(c) (__ASSERT_(FITS_IN_8_BITS(c)) \
+ (NATIVE_UTF8_TO_I8(c) >= UTF_MIN_START_BYTE))
+#ifdef EBCDIC
+# define UTF8_IS_START(c) \
+ (UTF8_IS_START_base(c) && (c) != I8_TO_NATIVE_UTF8(0xE0))
+#else
+# define UTF8_IS_START(c) UTF8_IS_START_base(c)
+#endif
+
+#define UTF_MIN_ABOVE_LATIN1_BYTE \
+ ((0x100 >> UTF_ACCUMULATION_SHIFT) | UTF_START_MARK(2))
+
+/* Is the UTF8-encoded byte 'c' the first byte of a sequence of bytes that
+ * represent a code point > 255? */
+#define UTF8_IS_ABOVE_LATIN1(c) (__ASSERT_(FITS_IN_8_BITS(c)) \
+ (NATIVE_UTF8_TO_I8(c) >= UTF_MIN_ABOVE_LATIN1_BYTE))
+
+/* Is the UTF8-encoded byte 'c' the first byte of a two byte sequence? Use
+ * UTF8_IS_NEXT_CHAR_DOWNGRADEABLE() instead if the input isn't known to
+ * be well-formed. */
+#define UTF8_IS_DOWNGRADEABLE_START(c) (__ASSERT_(FITS_IN_8_BITS(c)) \
+ inRANGE(NATIVE_UTF8_TO_I8(c), \
+ UTF_MIN_START_BYTE, UTF_MIN_ABOVE_LATIN1_BYTE - 1))
+
/* The largest code point representable by two UTF-8 bytes on this platform.
* As explained in the comments for __COMMON_UNI_SKIP, 32 start bytes with
* UTF_ACCUMULATION_SHIFT bits of information each */
@@ -386,18 +419,26 @@ encoded as UTF-8. C<cp> is a native (ASCII or EBCDIC) code point if less than
* continuation byte */
#define MAX_PORTABLE_UTF8_TWO_BYTE (32 * (1U << 5) - 1)
-/* The maximum number of UTF-8 bytes a single Unicode character can
- * uppercase/lowercase/fold into. Unicode guarantees that the maximum
- * expansion is UTF8_MAX_FOLD_CHAR_EXPAND characters, but any above-Unicode
- * code point will fold to itself, so we only have to look at the expansion of
- * the maximum Unicode code point. But this number may be less than the space
- * occupied by a very large code point under Perl's extended UTF-8. We have to
- * make it large enough to fit any single character. (It turns out that ASCII
- * and EBCDIC differ in which is larger) */
+/*
+
+=for apidoc AmnU|STRLEN|UTF8_MAXBYTES_CASE
+
+The maximum number of UTF-8 bytes a single Unicode character can
+uppercase/lowercase/titlecase/fold into.
+
+=cut
+
+ * Unicode guarantees that the maximum expansion is UTF8_MAX_FOLD_CHAR_EXPAND
+ * characters, but any above-Unicode code point will fold to itself, so we only
+ * have to look at the expansion of the maximum Unicode code point. But this
+ * number may be less than the space occupied by a very large code point under
+ * Perl's extended UTF-8. We have to make it large enough to fit any single
+ * character. (It turns out that ASCII and EBCDIC differ in which is larger)
+ *
+=cut
+*/
#define UTF8_MAXBYTES_CASE \
- (UTF8_MAXBYTES >= (UTF8_MAX_FOLD_CHAR_EXPAND * OFFUNISKIP(0x10FFFF)) \
- ? UTF8_MAXBYTES \
- : (UTF8_MAX_FOLD_CHAR_EXPAND * OFFUNISKIP(0x10FFFF)))
+ MAX(UTF8_MAXBYTES, UTF8_MAX_FOLD_CHAR_EXPAND * OFFUNISKIP(0x10FFFF))
/* Rest of these are attributes of Unicode and perl's internals rather than the
* encoding, or happen to be the same in both ASCII and EBCDIC (at least at
@@ -420,7 +461,7 @@ encoded as UTF-8. C<cp> is a native (ASCII or EBCDIC) code point if less than
* 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 : (0xFF & (0xFE << (7-(len)))))
+#define UTF_START_MARK(len) (((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
@@ -435,7 +476,7 @@ encoded as UTF-8. C<cp> is a native (ASCII or EBCDIC) code point if less than
* code point in process of being generated */
#define UTF8_ACCUMULATE(old, new) (__ASSERT_(FITS_IN_8_BITS(new)) \
((old) << UTF_ACCUMULATION_SHIFT) \
- | ((NATIVE_UTF8_TO_I8((U8)new)) \
+ | ((NATIVE_UTF8_TO_I8(new)) \
& UTF_CONTINUATION_MASK))
/* This works in the face of malformed UTF-8. */
@@ -490,15 +531,62 @@ encoded as UTF-8. C<cp> is a native (ASCII or EBCDIC) code point if less than
/*
=for apidoc Am|STRLEN|UTF8SKIP|char* s
-returns the number of bytes in the UTF-8 encoded character whose first (perhaps
-only) byte is pointed to by C<s>.
+returns the number of bytes a non-malformed UTF-8 encoded character whose first
+(perhaps only) byte is pointed to by C<s>.
+
+If there is a possibility of malformed input, use instead:
+
+=over
+
+=item L</C<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.
+
+=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
+of the input buffer.
=cut
*/
#define UTF8SKIP(s) PL_utf8skip[*(const U8*)(s)]
+
+/*
+=for apidoc Am|STRLEN|UTF8_SKIP|char* s
+This is a synonym for L</C<UTF8SKIP>>
+
+=cut
+*/
+
#define UTF8_SKIP(s) UTF8SKIP(s)
/*
+=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
+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.
+
+Perl tends to add NULs, as an insurance policy, after the end of strings in
+SV's, so it is likely that using this macro will prevent inadvertent reading
+beyond the end of the input buffer, even if it is malformed UTF-8.
+
+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.
+
+=cut
+*/
+
+#define UTF8_CHK_SKIP(s) \
+ (s[0] == '\0' ? 1 : MIN(UTF8SKIP(s), \
+ my_strnlen((char *) (s), UTF8SKIP(s))))
+/*
=for apidoc Am|STRLEN|UTF8_SAFE_SKIP|char* s|char* e
returns 0 if S<C<s E<gt>= e>>; otherwise returns the number of bytes in the
@@ -543,6 +631,11 @@ with a ptr argument.
* above show, doesn't matter as to its implementation */
#define NATIVE_BYTE_IS_INVARIANT(c) UVCHR_IS_INVARIANT(c)
+/* Misleadingly named: is the UTF8-encoded byte 'c' part of a variant sequence
+ * in UTF-8? This is the inverse of UTF8_IS_INVARIANT. */
+#define UTF8_IS_CONTINUED(c) (__ASSERT_(FITS_IN_8_BITS(c)) \
+ (! UTF8_IS_INVARIANT(c)))
+
/* The macros in the next 4 sets are used to generate the two utf8 or utfebcdic
* bytes from an ordinal that is known to fit into exactly two (not one) bytes;
* it must be less than 0x3FF to work across both encodings. */
@@ -599,30 +692,15 @@ with a ptr argument.
* beginning of a utf8 character. Now that foo_utf8() determines that itself,
* no need to do it again here
*/
-#define isIDFIRST_lazy_if(p,UTF) \
- _is_utf8_FOO(_CC_IDFIRST, (const U8 *) p, "isIDFIRST_lazy_if", \
- "isIDFIRST_lazy_if_safe", \
- cBOOL(UTF && ! IN_BYTES), 0, __FILE__,__LINE__)
-
#define isIDFIRST_lazy_if_safe(p, e, UTF) \
((IN_BYTES || !UTF) \
? isIDFIRST(*(p)) \
: isIDFIRST_utf8_safe(p, e))
-
-#define isWORDCHAR_lazy_if(p,UTF) \
- _is_utf8_FOO(_CC_IDFIRST, (const U8 *) p, "isWORDCHAR_lazy_if", \
- "isWORDCHAR_lazy_if_safe", \
- cBOOL(UTF && ! IN_BYTES), 0, __FILE__,__LINE__)
-
#define isWORDCHAR_lazy_if_safe(p, e, UTF) \
((IN_BYTES || !UTF) \
? isWORDCHAR(*(p)) \
: isWORDCHAR_utf8_safe((U8 *) p, (U8 *) e))
-
-#define isALNUM_lazy_if(p,UTF) \
- _is_utf8_FOO(_CC_IDFIRST, (const U8 *) p, "isALNUM_lazy_if", \
- "isWORDCHAR_lazy_if_safe", \
- cBOOL(UTF && ! IN_BYTES), 0, __FILE__,__LINE__)
+#define isALNUM_lazy_if_safe(p, e, UTF) isWORDCHAR_lazy_if_safe(p, e, UTF)
#define UTF8_MAXLEN UTF8_MAXBYTES
@@ -802,14 +880,14 @@ fit in an IV on the current machine.
&& ( 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)
+ ? is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0)
#else
# define UTF8_IS_SUPER(s, e) \
(( LIKELY((e) > (s) + 3) \
&& (*(U8*) (s)) >= 0xF4 \
&& ((*(U8*) (s)) > 0xF4 || (*((U8*) (s) + 1) >= 0x90))\
&& LIKELY((s) + UTF8SKIP(s) <= (e))) \
- ? _is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0)
+ ? is_utf8_char_helper(s, s + UTF8SKIP(s), 0) : 0)
#endif
/* These are now machine generated, and the 'given' clause is no longer
@@ -826,6 +904,10 @@ of the Unicode non-character code points; otherwise it evaluates to 0. If
non-zero, the value gives how many bytes starting at C<s> comprise the code
point's representation.
+=for apidoc AmnU|UV|UNICODE_REPLACEMENT
+
+Evaluates to 0xFFFD, the code point of the Unicode REPLACEMENT CHARACTER
+
=cut
*/
#define UTF8_IS_NONCHAR(s, e) \
@@ -849,6 +931,10 @@ point's representation.
#define UNICODE_DISALLOW_NONCHAR 0x0020
#define UNICODE_DISALLOW_SUPER 0x0040
#define UNICODE_DISALLOW_PERL_EXTENDED 0x0080
+
+#ifdef PERL_CORE
+# define UNICODE_ALLOW_ABOVE_IV_MAX 0x0100
+#endif
#define UNICODE_DISALLOW_ABOVE_31_BIT UNICODE_DISALLOW_PERL_EXTENDED
#define UNICODE_GOT_SURROGATE UNICODE_DISALLOW_SURROGATE
@@ -923,7 +1009,13 @@ point's representation.
#define UNI_DISPLAY_ISPRINT 0x0001
#define UNI_DISPLAY_BACKSLASH 0x0002
-#define UNI_DISPLAY_QQ (UNI_DISPLAY_ISPRINT|UNI_DISPLAY_BACKSLASH)
+#define UNI_DISPLAY_BACKSPACE 0x0004 /* Allow \b when also
+ UNI_DISPLAY_BACKSLASH */
+#define UNI_DISPLAY_QQ (UNI_DISPLAY_ISPRINT \
+ |UNI_DISPLAY_BACKSLASH \
+ |UNI_DISPLAY_BACKSPACE)
+
+/* 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) \
@@ -976,7 +1068,7 @@ L</is_utf8_string_loclen_flags> to check entire strings.
? 1 \
: UNLIKELY(((e) - (s)) < UTF8SKIP(s)) \
? 0 \
- : _is_utf8_char_helper(s, e, flags))
+ : is_utf8_char_helper(s, e, flags))
/* Do not use; should be deprecated. Use isUTF8_CHAR() instead; this is
* retained solely for backwards compatibility */
diff --git a/gnu/usr.bin/perl/utfebcdic.h b/gnu/usr.bin/perl/utfebcdic.h
index c2f0788cc4e..97b8f7001a5 100644
--- a/gnu/usr.bin/perl/utfebcdic.h
+++ b/gnu/usr.bin/perl/utfebcdic.h
@@ -121,22 +121,8 @@
START_EXTERN_C
-#ifdef DOINIT
-
#include "ebcdic_tables.h"
-#else
-EXTCONST U8 PL_utf8skip[];
-EXTCONST U8 PL_e2utf[];
-EXTCONST U8 PL_utf2e[];
-EXTCONST U8 PL_e2a[];
-EXTCONST U8 PL_a2e[];
-EXTCONST U8 PL_fold[];
-EXTCONST U8 PL_fold_latin1[];
-EXTCONST U8 PL_latin1_lc[];
-EXTCONST U8 PL_mod_latin1_uc[];
-#endif
-
END_EXTERN_C
/* EBCDIC-happy ways of converting native code to UTF-8 */
@@ -216,58 +202,33 @@ possible to UTF-8-encode a single code point in different ways, but that is
explicitly forbidden, and the shortest possible encoding should always be used
(and that is what Perl does). */
-/* This is a fundamental property of UTF-EBCDIC */
-#define OFFUNI_IS_INVARIANT(c) (((UV)(c)) < 0xA0)
-
-/* It turns out that on EBCDIC platforms, the invariants are the characters
- * that have ASCII equivalents, plus the C1 controls. Since the C0 controls
- * and DELETE are ASCII, this is the same as: (isASCII(uv) || isCNTRL_L1(uv))
- * */
-#define UVCHR_IS_INVARIANT(uv) cBOOL(FITS_IN_8_BITS(uv) \
- && (PL_charclass[(U8) (uv)] & (_CC_mask(_CC_ASCII) | _CC_mask(_CC_CNTRL))))
-
-/* UTF-EBCDIC semantic macros - We used to transform back into I8 and then
- * compare, but now only have to do a single lookup by using a bit in
- * l1_char_class_tab.h.
- * Comments as to the meaning of each are given at their corresponding utf8.h
- * definitions. */
+/* It turns out that just this one number is sufficient to derive all the basic
+ * macros for UTF-8 and UTF-EBCDIC. Everything follows from the fact that
+ * there are 6 bits of real information in a UTF-8 continuation byte vs. 5 bits
+ * in a UTF-EBCDIC one. */
-#define UTF8_IS_START(c) _generic_isCC(c, _CC_UTF8_IS_START)
-
-#define UTF_IS_CONTINUATION_MASK 0xE0
-
-#define UTF8_IS_CONTINUATION(c) _generic_isCC(c, _CC_UTF8_IS_CONTINUATION)
-
-/* The above instead could be written as this:
-#define UTF8_IS_CONTINUATION(c) \
- (((NATIVE_UTF8_TO_I8(c) & UTF_IS_CONTINUATION_MASK) \
- == UTF_CONTINUATION_MARK)
- */
-
-/* Equivalent to ! UVCHR_IS_INVARIANT(c) */
-#define UTF8_IS_CONTINUED(c) cBOOL(FITS_IN_8_BITS(c) \
- && ! (PL_charclass[(U8) (c)] & (_CC_mask(_CC_ASCII) | _CC_mask(_CC_CNTRL))))
+#define UTF_ACCUMULATION_SHIFT 5
-#define UTF8_IS_DOWNGRADEABLE_START(c) _generic_isCC(c, \
- _CC_UTF8_IS_DOWNGRADEABLE_START)
+/* Also needed is how perl handles a start byte of 8 one bits. The decision
+ * was made to just append the minimal number of bytes after that so that code
+ * points up to 64 bits wide could be represented. In UTF-8, that was an extra
+ * 5 bytes, and in UTF-EBCDIC it's 6. The result is in UTF8_MAXBYTES defined
+ * above. This implementation has the advantage that you have everything you
+ * need in the first byte. Other ways of extending UTF-8 have been devised,
+ * some to arbitrarily high code points. But they require looking at the next
+ * byte(s) when the first one is 8 one bits. */
-/* Equivalent to (UTF8_IS_START(c) && ! UTF8_IS_DOWNGRADEABLE_START(c))
- * Makes sure that the START bit is set and the DOWNGRADEABLE bit isn't */
-#define UTF8_IS_ABOVE_LATIN1(c) cBOOL(FITS_IN_8_BITS(c) \
- && ((PL_charclass[(U8) (c)] & ( _CC_mask(_CC_UTF8_IS_START) \
- |_CC_mask(_CC_UTF8_IS_DOWNGRADEABLE_START))) \
- == _CC_mask(_CC_UTF8_IS_START)))
+/* These others are for efficiency or for other decisions we've made */
#define isUTF8_POSSIBLY_PROBLEMATIC(c) \
_generic_isCC(c, _CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE)
-#define UTF_CONTINUATION_MARK 0xA0
-#define UTF_ACCUMULATION_SHIFT 5
-
/* ^? is defined to be APC on EBCDIC systems. See the definition of toCTRL()
* for more */
#define QUESTION_MARK_CTRL LATIN1_TO_NATIVE(0x9F)
+#define UNICODE_IS_PERL_EXTENDED(uv) UNLIKELY((UV) (uv) > 0x3FFFFFFF)
+
/* Helper macros for isUTF8_CHAR_foo, so use those instead of this. These were
* generated by regen/regcharclass.pl, and then moved here. Then they were
* hand-edited to add some LIKELY() calls, presuming that malformations are
@@ -511,8 +472,6 @@ explicitly forbidden, and the shortest possible encoding should always be used
* has this start byte (expressed in I8) as the maximum */
#define _IS_UTF8_CHAR_HIGHEST_START_BYTE 0xF9
-#define UNICODE_IS_PERL_EXTENDED(uv) UNLIKELY((UV) (uv) > 0x3FFFFFFF)
-
/*
* ex: set ts=8 sts=4 sw=4 et:
*/
diff --git a/gnu/usr.bin/perl/util.c b/gnu/usr.bin/perl/util.c
index 9b99a91145c..b52f00d4b64 100644
--- a/gnu/usr.bin/perl/util.c
+++ b/gnu/usr.bin/perl/util.c
@@ -591,7 +591,7 @@ Perl_delimcpy_no_escape(char *to, const char *toend, const char *from,
/*
=head1 Miscellaneous Functions
-=for apidoc Am|char *|ninstr|char * big|char * bigend|char * little|char * little_end
+=for apidoc ninstr
Find the first (leftmost) occurrence of a sequence of bytes within another
sequence. This is the Perl version of C<strstr()>, extended to handle
@@ -652,7 +652,7 @@ Perl_ninstr(const char *big, const char *bigend, const char *little, const char
/*
=head1 Miscellaneous Functions
-=for apidoc Am|char *|rninstr|char * big|char * bigend|char * little|char * little_end
+=for apidoc rninstr
Like C<L</ninstr>>, but instead finds the final (rightmost) occurrence of a
sequence of bytes within another sequence, returning C<NULL> if there is no
@@ -795,7 +795,7 @@ then.
=cut
-If SvTAIL(littlestr) is true, a fake "\n" was appended to to the string
+If SvTAIL(littlestr) is true, a fake "\n" was appended to the string
during FBM compilation due to FBMcf_TAIL in flags. It indicates that
the littlestr must be anchored to the end of bigstr (or to any \n if
FBMrf_MULTILINE).
@@ -1035,6 +1035,26 @@ Perl_fbm_instr(pTHX_ unsigned char *big, unsigned char *bigend, SV *littlestr, U
}
}
+const char *
+Perl_cntrl_to_mnemonic(const U8 c)
+{
+ /* Returns the mnemonic string that represents character 'c', if one
+ * exists; NULL otherwise. The only ones that exist for the purposes of
+ * this routine are a few control characters */
+
+ switch (c) {
+ case '\a': return "\\a";
+ case '\b': return "\\b";
+ case ESC_NATIVE: return "\\e";
+ case '\f': return "\\f";
+ case '\n': return "\\n";
+ case '\r': return "\\r";
+ case '\t': return "\\t";
+ }
+
+ return NULL;
+}
+
/* copy a string to a safe spot */
/*
@@ -1045,8 +1065,10 @@ Perl_fbm_instr(pTHX_ unsigned char *big, unsigned char *bigend, SV *littlestr, U
Perl's version of C<strdup()>. Returns a pointer to a newly allocated
string which is a duplicate of C<pv>. The size of the string is
determined by C<strlen()>, which means it may not contain embedded C<NUL>
-characters and must have a trailing C<NUL>. The memory allocated for the new
-string can be freed with the C<Safefree()> function.
+characters and must have a trailing C<NUL>. To prevent memory leaks, the
+memory allocated for the new string needs to be freed when no longer needed.
+This can be done with the L</C<Safefree>> function, or
+L<C<SAVEFREEPV>|perlguts/SAVEFREEPV(p)>.
On some platforms, Windows for example, all allocated memory owned by a thread
is deallocated when that thread ends. So if you need that not to happen, you
@@ -1088,13 +1110,11 @@ need to use the shared memory functions, such as C<L</savesharedpvn>>.
*/
char *
-Perl_savepvn(pTHX_ const char *pv, I32 len)
+Perl_savepvn(pTHX_ const char *pv, Size_t len)
{
char *newaddr;
PERL_UNUSED_CONTEXT;
- assert(len >= 0);
-
Newx(newaddr,len+1,char);
/* Give a meaning to NULL pointer mainly for the use in sv_magic() */
if (pv) {
@@ -1287,7 +1307,7 @@ Perl_vform(pTHX_ const char *pat, va_list *args)
}
/*
-=for apidoc Am|SV *|mess|const char *pat|...
+=for apidoc mess
Take a sprintf-style format pattern and argument list. These are used to
generate a string message. If the message does not end with a newline,
@@ -1368,7 +1388,7 @@ Perl_closest_cop(pTHX_ const COP *cop, const OP *o, const OP *curop,
}
/*
-=for apidoc Am|SV *|mess_sv|SV *basemsg|bool consume
+=for apidoc mess_sv
Expands a message, intended for the user, to include an indication of
the current location in the code, if the message does not already appear
@@ -1472,7 +1492,7 @@ Perl_mess_sv(pTHX_ SV *basemsg, bool consume)
}
/*
-=for apidoc Am|SV *|vmess|const char *pat|va_list *args
+=for apidoc vmess
C<pat> and C<args> are a sprintf-style format pattern and encapsulated
argument list, respectively. These are used to generate a string message. If
@@ -1584,7 +1604,7 @@ S_invoke_exception_hook(pTHX_ SV *ex, bool warn)
}
/*
-=for apidoc Am|OP *|die_sv|SV *baseex
+=for apidoc die_sv
Behaves the same as L</croak_sv>, except for the return type.
It should be used only where the C<OP *> return type is required.
@@ -1606,7 +1626,7 @@ Perl_die_sv(pTHX_ SV *baseex)
MSVC_DIAG_RESTORE
/*
-=for apidoc Am|OP *|die|const char *pat|...
+=for apidoc die
Behaves the same as L</croak>, except for the return type.
It should be used only where the C<OP *> return type is required.
@@ -1649,7 +1669,7 @@ Perl_die(pTHX_ const char* pat, ...)
MSVC_DIAG_RESTORE
/*
-=for apidoc Am|void|croak_sv|SV *baseex
+=for apidoc croak_sv
This is an XS interface to Perl's C<die> function.
@@ -1679,7 +1699,7 @@ Perl_croak_sv(pTHX_ SV *baseex)
}
/*
-=for apidoc Am|void|vcroak|const char *pat|va_list *args
+=for apidoc vcroak
This is an XS interface to Perl's C<die> function.
@@ -1712,7 +1732,7 @@ Perl_vcroak(pTHX_ const char* pat, va_list *args)
}
/*
-=for apidoc Am|void|croak|const char *pat|...
+=for apidoc croak
This is an XS interface to Perl's C<die> function.
@@ -1748,6 +1768,15 @@ Perl_croak_nocontext(const char *pat, ...)
}
#endif /* PERL_IMPLICIT_CONTEXT */
+/* saves machine code for a common noreturn idiom typically used in Newx*() */
+GCC_DIAG_IGNORE_DECL(-Wunused-function);
+void
+Perl_croak_memory_wrap(void)
+{
+ Perl_croak_nocontext("%s",PL_memory_wrap);
+}
+GCC_DIAG_RESTORE_DECL;
+
void
Perl_croak(pTHX_ const char *pat, ...)
{
@@ -1759,7 +1788,7 @@ Perl_croak(pTHX_ const char *pat, ...)
}
/*
-=for apidoc Am|void|croak_no_modify
+=for apidoc croak_no_modify
Exactly equivalent to C<Perl_croak(aTHX_ "%s", PL_no_modify)>, but generates
terser object code than using C<Perl_croak>. Less code used on exception code
@@ -1802,7 +1831,7 @@ Perl_croak_popstack(void)
}
/*
-=for apidoc Am|void|warn_sv|SV *baseex
+=for apidoc warn_sv
This is an XS interface to Perl's C<warn> function.
@@ -1830,7 +1859,7 @@ Perl_warn_sv(pTHX_ SV *baseex)
}
/*
-=for apidoc Am|void|vwarn|const char *pat|va_list *args
+=for apidoc vwarn
This is an XS interface to Perl's C<warn> function.
@@ -1858,7 +1887,7 @@ Perl_vwarn(pTHX_ const char* pat, va_list *args)
}
/*
-=for apidoc Am|void|warn|const char *pat|...
+=for apidoc warn
This is an XS interface to Perl's C<warn> function.
@@ -2103,6 +2132,15 @@ S_env_alloc(void *current, Size_t l1, Size_t l2, Size_t l3, Size_t size)
# if !defined(WIN32) && !defined(NETWARE)
+/*
+=for apidoc my_setenv
+
+A wrapper for the C library L<setenv(3)>. Don't use the latter, as the perl
+version has desirable safeguards
+
+=cut
+*/
+
void
Perl_my_setenv(pTHX_ const char *nam, const char *val)
{
@@ -2112,7 +2150,8 @@ Perl_my_setenv(pTHX_ const char *nam, const char *val)
# endif
# ifdef USE_ITHREADS
- /* only parent thread can modify process environment */
+ /* only parent thread can modify process environment, so no need to use a
+ * mutex */
if (PL_curinterp == aTHX)
# endif
{
@@ -2368,23 +2407,23 @@ Perl_my_popen_list(pTHX_ const char *mode, int n, SV **args)
/* If we managed to get status pipe check for exec fail */
if (did_pipes && pid > 0) {
int errkid;
- unsigned n = 0;
+ unsigned read_total = 0;
- while (n < sizeof(int)) {
+ while (read_total < sizeof(int)) {
const SSize_t n1 = PerlLIO_read(pp[0],
- (void*)(((char*)&errkid)+n),
- (sizeof(int)) - n);
+ (void*)(((char*)&errkid)+read_total),
+ (sizeof(int)) - read_total);
if (n1 <= 0)
break;
- n += n1;
+ read_total += n1;
}
PerlLIO_close(pp[0]);
did_pipes = 0;
- if (n) { /* Error */
+ if (read_total) { /* Error */
int pid2, status;
PerlLIO_close(p[This]);
- if (n != sizeof(int))
- Perl_croak(aTHX_ "panic: kid popen errno read, n=%u", n);
+ if (read_total != sizeof(int))
+ Perl_croak(aTHX_ "panic: kid popen errno read, n=%u", read_total);
do {
pid2 = wait4pid(pid, &status, 0);
} while (pid2 == -1 && errno == EINTR);
@@ -2683,6 +2722,15 @@ dup2(int oldfd, int newfd)
#ifndef PERL_MICRO
#ifdef HAS_SIGACTION
+/*
+=for apidoc rsignal
+
+A wrapper for the C library L<signal(2)>. Don't use the latter, as the Perl
+version knows things that interact with the rest of the perl interpreter.
+
+=cut
+*/
+
Sighandler_t
Perl_rsignal(pTHX_ int signo, Sighandler_t handler)
{
@@ -2695,7 +2743,7 @@ Perl_rsignal(pTHX_ int signo, Sighandler_t handler)
return (Sighandler_t) SIG_ERR;
#endif
- act.sa_handler = (void(*)(int))handler;
+ act.sa_handler = handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
#ifdef SA_RESTART
@@ -2740,7 +2788,7 @@ Perl_rsignal_save(pTHX_ int signo, Sighandler_t handler, Sigsave_t *save)
return -1;
#endif
- act.sa_handler = (void(*)(int))handler;
+ act.sa_handler = handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
#ifdef SA_RESTART
@@ -3342,7 +3390,7 @@ Perl_get_context(void)
dVAR;
# ifdef OLD_PTHREADS_API
pthread_addr_t t;
- int error = pthread_getspecific(PL_thr_key, &t)
+ int error = pthread_getspecific(PL_thr_key, &t);
if (error)
Perl_croak_nocontext("panic: pthread_getspecific, error=%d", error);
return (void*)t;
@@ -3584,14 +3632,17 @@ void
Perl_init_tm(pTHX_ struct tm *ptm) /* see mktime, strftime and asctime */
{
#ifdef HAS_TM_TM_ZONE
+ dVAR;
Time_t now;
const struct tm* my_tm;
PERL_UNUSED_CONTEXT;
PERL_ARGS_ASSERT_INIT_TM;
(void)time(&now);
+ ENV_LOCALE_READ_LOCK;
my_tm = localtime(&now);
if (my_tm)
Copy(my_tm, ptm, 1, struct tm);
+ ENV_LOCALE_READ_UNLOCK;
#else
PERL_UNUSED_CONTEXT;
PERL_ARGS_ASSERT_INIT_TM;
@@ -3856,7 +3907,7 @@ Perl_my_strftime(pTHX_ const char *fmt, int sec, int min, int hour, int mday, in
** If there is a better way to make it portable, go ahead by
** all means.
*/
- if ((len > 0 && len < buflen) || (len == 0 && *fmt == '\0'))
+ if (inRANGE(len, 1, buflen - 1) || (len == 0 && *fmt == '\0'))
return buf;
else {
/* Possibly buf overflowed - try again with a bigger buf */
@@ -3870,7 +3921,7 @@ Perl_my_strftime(pTHX_ const char *fmt, int sec, int min, int hour, int mday, in
buflen = strftime(buf, bufsize, fmt, &mytm);
GCC_DIAG_RESTORE_STMT;
- if (buflen > 0 && buflen < bufsize)
+ if (inRANGE(buflen, 1, bufsize - 1))
break;
/* heuristic to prevent out-of-memory errors */
if (bufsize > 100*fmtlen) {
@@ -4449,9 +4500,6 @@ Perl_parse_unicode_opts(pTHX_ const char **popt)
U32
Perl_seed(pTHX)
{
-#if defined(__OpenBSD__)
- return arc4random();
-#else
/*
* This is really just a quick hack which grabs various garbage
* values. It really should be a real hash algorithm which
@@ -4520,7 +4568,6 @@ Perl_seed(pTHX)
u += SEED_C5 * (U32)PTR2UV(&when);
#endif
return u;
-#endif
}
void
@@ -4743,7 +4790,11 @@ S_mem_log_common(enum mem_log_type mlt, const UV n,
PERL_ARGS_ASSERT_MEM_LOG_COMMON;
- pmlenv = PerlEnv_getenv("PERL_MEM_LOG");
+ /* Use plain getenv() to avoid potential deadlock with PerlEnv_getenv().
+ * This means that 'pmlenv' is not protected from other threads overwriting
+ * it on platforms where getenv() returns an internal static pointer. See
+ * GH #18341 */
+ pmlenv = getenv("PERL_MEM_LOG");
if (!pmlenv)
return;
if (mlt < MLT_NEW_SV ? strchr(pmlenv,'m') : strchr(pmlenv,'s'))
@@ -4898,51 +4949,40 @@ Perl_mem_log_del_sv(const SV *sv,
#endif /* PERL_MEM_LOG */
/*
-=for apidoc quadmath_format_single
+=for apidoc quadmath_format_valid
C<quadmath_snprintf()> is very strict about its C<format> string and will
fail, returning -1, if the format is invalid. It accepts exactly
one format spec.
-C<quadmath_format_single()> checks that the intended single spec looks
+C<quadmath_format_valid()> checks that the intended single spec looks
sane: begins with C<%>, has only one C<%>, ends with C<[efgaEFGA]>,
and has C<Q> before it. This is not a full "printf syntax check",
just the basics.
-Returns the format if it is valid, NULL if not.
-
-C<quadmath_format_single()> can and will actually patch in the missing
-C<Q>, if necessary. In this case it will return the modified copy of
-the format, B<which the caller will need to free.>
+Returns true if it is valid, false if not.
See also L</quadmath_format_needed>.
=cut
*/
#ifdef USE_QUADMATH
-const char*
-Perl_quadmath_format_single(const char* format)
+bool
+Perl_quadmath_format_valid(const char* format)
{
STRLEN len;
- PERL_ARGS_ASSERT_QUADMATH_FORMAT_SINGLE;
+ PERL_ARGS_ASSERT_QUADMATH_FORMAT_VALID;
if (format[0] != '%' || strchr(format + 1, '%'))
- return NULL;
+ return FALSE;
len = strlen(format);
/* minimum length three: %Qg */
- if (len < 3 || strchr("efgaEFGA", format[len - 1]) == NULL)
- return NULL;
- if (format[len - 2] != 'Q') {
- char* fixed;
- Newx(fixed, len + 1, char);
- memcpy(fixed, format, len - 1);
- fixed[len - 1] = 'Q';
- fixed[len ] = format[len - 1];
- fixed[len + 1] = 0;
- return (const char*)fixed;
- }
- return format;
+ if (len < 3 || memCHRs("efgaEFGA", format[len - 1]) == NULL)
+ return FALSE;
+ if (format[len - 2] != 'Q')
+ return FALSE;
+ return TRUE;
}
#endif
@@ -4958,7 +4998,7 @@ but it should catch most common cases.
If true is returned, those arguments B<should> in theory be processed
with C<quadmath_snprintf()>, but in case there is more than one such
-format specifier (see L</quadmath_format_single>), and if there is
+format specifier (see L</quadmath_format_valid>), and if there is
anything else beyond that one (even just a single byte), they
B<cannot> be processed because C<quadmath_snprintf()> is very strict,
accepting only one format spec, and nothing else.
@@ -4995,7 +5035,7 @@ Perl_quadmath_format_needed(const char* format)
else
while (isDIGIT(*q)) q++;
}
- if (strchr("efgaEFGA", *q)) /* Would have needed 'Q' in front. */
+ if (memCHRs("efgaEFGA", *q)) /* Would have needed 'Q' in front. */
return TRUE;
p = q + 1;
}
@@ -5027,24 +5067,15 @@ Perl_my_snprintf(char *buffer, const Size_t len, const char *format, ...)
va_start(ap, format);
#ifdef USE_QUADMATH
{
- const char* qfmt = quadmath_format_single(format);
bool quadmath_valid = FALSE;
- if (qfmt) {
+ if (quadmath_format_valid(format)) {
/* If the format looked promising, use it as quadmath. */
- retval = quadmath_snprintf(buffer, len, qfmt, va_arg(ap, NV));
+ retval = quadmath_snprintf(buffer, len, format, va_arg(ap, NV));
if (retval == -1) {
- if (qfmt != format) {
- dTHX;
- SAVEFREEPV(qfmt);
- }
- Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", qfmt);
+ Perl_croak_nocontext("panic: quadmath_snprintf failed, format \"%s\"", format);
}
quadmath_valid = TRUE;
- if (qfmt != format)
- Safefree(qfmt);
- qfmt = NULL;
}
- assert(qfmt == NULL);
/* quadmath_format_single() will return false for example for
* "foo = %g", or simply "%g". We could handle the %g by
* using quadmath for the NV args. More complex cases of
@@ -5094,7 +5125,7 @@ Perl_my_snprintf(char *buffer, const Size_t len, const char *format, ...)
=for apidoc my_vsnprintf
The C library C<vsnprintf> if available and standards-compliant.
-However, if if the C<vsnprintf> is not available, will unfortunately
+However, if the C<vsnprintf> is not available, will unfortunately
use the unsafe C<vsprintf> which can overrun the buffer (there is an
overrun check, but that may be too late). Consider using
C<sv_vcatpvf> instead, or getting C<vsnprintf>.
@@ -5157,7 +5188,8 @@ Perl_my_clearenv(pTHX)
# else /* ! (PERL_IMPLICIT_SYS || WIN32) */
# if defined(USE_ENVIRON_ARRAY)
# if defined(USE_ITHREADS)
- /* only the parent thread can clobber the process environment */
+ /* only the parent thread can clobber the process environment, so no need
+ * to use a mutex */
if (PL_curinterp == aTHX)
# endif /* USE_ITHREADS */
{
@@ -5582,36 +5614,6 @@ Perl_my_strlcpy(char *dst, const char *src, Size_t size)
}
#endif
-/*
-=for apidoc my_strnlen
-
-The C library C<strnlen> if available, or a Perl implementation of it.
-
-C<my_strnlen()> computes the length of the string, up to C<maxlen>
-characters. It will will never attempt to address more than C<maxlen>
-characters, making it suitable for use with strings that are not
-guaranteed to be NUL-terminated.
-
-=cut
-
-Description stolen from http://man.openbsd.org/strnlen.3,
-implementation stolen from PostgreSQL.
-*/
-#ifndef HAS_STRNLEN
-Size_t
-Perl_my_strnlen(const char *str, Size_t maxlen)
-{
- const char *p = str;
-
- PERL_ARGS_ASSERT_MY_STRNLEN;
-
- while(maxlen-- && *p)
- p++;
-
- return p - str;
-}
-#endif
-
#if defined(_MSC_VER) && (_MSC_VER >= 1300) && (_MSC_VER < 1400) && (WINVER < 0x0500)
/* VC7 or 7.1, building with pre-VC7 runtime libraries. */
long _ftol( double ); /* Defined by VC6 C libs. */
@@ -5716,6 +5718,11 @@ S_my_mkostemp(char *templte, int flags) {
STRLEN len = strlen(templte);
int fd;
int attempts = 0;
+#ifdef VMS
+ int delete_on_close = flags & O_VMS_DELETEONCLOSE;
+
+ flags &= ~O_VMS_DELETEONCLOSE;
+#endif
if (len < 6 ||
templte[len-1] != 'X' || templte[len-2] != 'X' || templte[len-3] != 'X' ||
@@ -5729,7 +5736,15 @@ S_my_mkostemp(char *templte, int flags) {
for (i = 1; i <= 6; ++i) {
templte[len-i] = TEMP_FILE_CH[(int)(Perl_internal_drand48() * TEMP_FILE_CH_COUNT)];
}
- fd = PerlLIO_open3(templte, O_RDWR | O_CREAT | O_EXCL | flags, 0600);
+#ifdef VMS
+ if (delete_on_close) {
+ fd = open(templte, O_RDWR | O_CREAT | O_EXCL | flags, 0600, "fop=dlt");
+ }
+ else
+#endif
+ {
+ fd = PerlLIO_open3(templte, O_RDWR | O_CREAT | O_EXCL | flags, 0600);
+ }
} while (fd == -1 && errno == EEXIST && ++attempts <= 100);
return fd;
@@ -6416,8 +6431,8 @@ Perl_get_c_backtrace(pTHX_ int depth, int skip)
Safefree(raw_frames);
return bt;
#else
- PERL_UNUSED_ARGV(depth);
- PERL_UNUSED_ARGV(skip);
+ PERL_UNUSED_ARG(depth);
+ PERL_UNUSED_ARG(skip);
return NULL;
#endif
}
diff --git a/gnu/usr.bin/perl/util.h b/gnu/usr.bin/perl/util.h
index 71531c7e851..6294e590b8f 100644
--- a/gnu/usr.bin/perl/util.h
+++ b/gnu/usr.bin/perl/util.h
@@ -17,7 +17,7 @@
(*(f) == '/' \
|| (strchr(f,':') \
|| ((*(f) == '[' || *(f) == '<') \
- && (isWORDCHAR((f)[1]) || strchr("$-_]>",(f)[1])))))
+ && (isWORDCHAR((f)[1]) || memCHRs("$-_]>",(f)[1])))))
#elif defined(WIN32) || defined(__CYGWIN__)
# define PERL_FILE_IS_ABSOLUTE(f) \
@@ -55,9 +55,8 @@ This is a synonym for S<C<(! foldEQ_locale())>>
/* 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
perl_drand48_t below, and that is visible outside of the core. */
-#if defined(U64TYPE) && !defined(USING_MSVC6)
-/* use a faster implementation when quads are available,
- * but not with VC6 on Windows */
+#if defined(U64TYPE)
+/* use a faster implementation when quads are available */
# define PERL_DRAND48_QUAD
#endif
@@ -233,12 +232,24 @@ means arg not present, 1 is empty string/null byte */
# define HS_CXT cv
#endif
+/*
+=for apidoc instr
+Same as L<strstr(3)>, which finds and returns a pointer to the first occurrence
+of the NUL-terminated substring C<little> in the NUL-terminated string C<big>,
+returning NULL if not found. The terminating NUL bytes are not compared.
+
+=cut
+*/
+
+
#define instr(haystack, needle) strstr(haystack, needle)
#ifdef HAS_MEMMEM
# define ninstr(big, bigend, little, lend) \
((char *) memmem((big), (bigend) - (big), \
(little), (lend) - (little)))
+#else
+# define ninstr(a,b,c,d) Perl_ninstr(a,b,c,d)
#endif
#ifdef __Lynx__
@@ -246,6 +257,17 @@ means arg not present, 1 is empty string/null byte */
int mkstemp(char*);
#endif
+#ifdef PERL_CORE
+# if defined(VMS)
+/* only useful for calls to our mkostemp() emulation */
+# define O_VMS_DELETEONCLOSE 0x40000000
+# ifdef HAS_MKOSTEMP
+# error 134221 will need a new solution for VMS
+# endif
+# else
+# define O_VMS_DELETEONCLOSE 0
+# endif
+#endif
#if defined(HAS_MKOSTEMP) && defined(PERL_CORE)
# define Perl_my_mkostemp(templte, flags) mkostemp(templte, flags)
#endif
diff --git a/gnu/usr.bin/perl/utils.lst b/gnu/usr.bin/perl/utils.lst
index 2564f6e308a..4856fdae391 100644
--- a/gnu/usr.bin/perl/utils.lst
+++ b/gnu/usr.bin/perl/utils.lst
@@ -2,7 +2,6 @@ cpan/podlators/blib/script/pod2man
cpan/podlators/blib/script/pod2text
cpan/Pod-Usage/blib/script/pod2usage
cpan/Pod-Checker/blib/script/podchecker
-cpan/Pod-Parser/blib/script/podselect
utils/cpan
utils/corelist
utils/enc2xs
@@ -10,13 +9,20 @@ utils/encguess
utils/h2ph
utils/h2xs
utils/instmodsh
+utils/json_pp
utils/libnetcfg
-utils/perlbug
+utils/perlbug # link = utils/perlthanks
utils/perldoc
utils/perlivp
utils/piconv
utils/pl2pm
utils/pod2html
utils/prove
+utils/ptar
+utils/ptardiff
+utils/ptargrep
+utils/shasum
utils/splain
+utils/streamzip
utils/xsubpp
+utils/zipdetails
diff --git a/gnu/usr.bin/perl/utils/Makefile.PL b/gnu/usr.bin/perl/utils/Makefile.PL
index 8c2a786df12..3bf9546e594 100644
--- a/gnu/usr.bin/perl/utils/Makefile.PL
+++ b/gnu/usr.bin/perl/utils/Makefile.PL
@@ -35,9 +35,9 @@ print $fh <<'EOT';
# Files to be built with variable substitution after miniperl is
# available. Dependencies handled manually below (for now).
-pl = corelist.PL cpan.PL h2ph.PL h2xs.PL instmodsh.PL perlbug.PL perldoc.PL perlivp.PL pl2pm.PL prove.PL splain.PL libnetcfg.PL piconv.PL enc2xs.PL encguess.PL xsubpp.PL pod2html.PL
-plextract = corelist cpan h2ph h2xs instmodsh perlbug perldoc perlivp pl2pm prove splain libnetcfg piconv enc2xs encguess xsubpp pod2html
-plextractexe = ./corelist ./cpan ./h2ph ./h2xs ./instmodsh ./perlbug ./perldoc ./perlivp ./pl2pm ./prove ./splain ./libnetcfg ./piconv ./enc2xs ./encguess ./xsubpp ./pod2html
+pl = corelist.PL cpan.PL h2ph.PL h2xs.PL instmodsh.PL json_pp.PL perlbug.PL perldoc.PL perlivp.PL pl2pm.PL prove.PL ptar.PL ptardiff.PL ptargrep.PL shasum.PL splain.PL libnetcfg.PL piconv.PL enc2xs.PL encguess.PL xsubpp.PL pod2html.PL zipdetails.PL streamzip.PL
+plextract = corelist cpan h2ph h2xs instmodsh json_pp perlbug perldoc perlivp pl2pm prove ptar ptardiff ptargrep shasum splain libnetcfg piconv enc2xs encguess xsubpp pod2html zipdetails streamzip
+plextractexe = ./corelist ./cpan ./h2ph ./h2xs ./json_pp ./instmodsh ./perlbug ./perldoc ./perlivp ./pl2pm ./prove ./ptar ./ptardiff ./ptargrep ./shasum ./splain ./libnetcfg ./piconv ./enc2xs ./encguess ./xsubpp ./pod2html ./zipdetails ./streamzip
all: $(plextract)
@@ -54,6 +54,8 @@ h2xs: h2xs.PL ../config.sh
instmodsh: instmodsh.PL ../config.sh
+json_pp: json_pp.PL ../config.sh
+
perlbug: perlbug.PL ../config.sh ../patchlevel.h
perldoc: perldoc.PL ../config.sh
@@ -62,8 +64,16 @@ perlivp: perlivp.PL ../config.sh
prove: prove.PL ../config.sh
+ptar: ptar.PL ../config.sh
+
+ptardiff: ptardiff.PL ../config.sh
+
+ptargrep: ptargrep.PL ../config.sh
+
pl2pm: pl2pm.PL ../config.sh
+shasum: shasum.PL ../config.sh
+
splain: splain.PL ../config.sh ../lib/diagnostics.pm
libnetcfg: libnetcfg.PL ../config.sh
@@ -76,6 +86,10 @@ enc2xs: encguess.PL ../config.sh
xsubpp: xsubpp.PL ../config.sh
+zipdetails: zipdetails.PL ../config.sh
+
+streamzip: streamzip.PL ../config.sh
+
pod2html: pod2html.PL ../config.sh ../ext/Pod-Html/bin/pod2html
clean:
diff --git a/gnu/usr.bin/perl/utils/h2ph.PL b/gnu/usr.bin/perl/utils/h2ph.PL
index 36317d37278..eece12ddc5e 100644
--- a/gnu/usr.bin/perl/utils/h2ph.PL
+++ b/gnu/usr.bin/perl/utils/h2ph.PL
@@ -1,5 +1,8 @@
#!/usr/local/bin/perl
+use strict;
+use warnings;
+
use Config;
use File::Basename qw(basename dirname);
use Cwd;
@@ -14,9 +17,9 @@ use Cwd;
# This forces PL files to create target in same directory as PL file.
# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
+my $origdir = cwd;
chdir dirname($0);
-$file = basename($0, '.PL');
+my $file = basename($0, '.PL');
$file .= '.com' if $^O eq 'VMS';
open OUT, '>', $file or die "Can't create $file: $!";
@@ -573,7 +576,7 @@ sub next_line
$in =~ s/\?\?</{/g; # | ??<| {|
$in =~ s/\?\?>/}/g; # | ??>| }|
}
- if ($in =~ s/^\#ifdef __LANGUAGE_PASCAL__//) {
+ if ($in =~ /^\#ifdef __LANGUAGE_PASCAL__/) {
# Tru64 disassembler.h evilness: mixed C and Pascal.
while (<IN>) {
last if /^\#endif/;
@@ -581,8 +584,8 @@ sub next_line
$in = "";
next READ;
}
- # Skip inlined functions in headers
- if ($in =~ s/^(extern|static) (__inline__|inline) .*[^;]\s*$//) {
+ if ($in =~ /^extern inline / && # Inlined assembler.
+ $^O eq 'linux' && $file =~ m!(?:^|/)asm/[^/]+\.h$!) {
while (<IN>) {
last if /^}/;
}
diff --git a/gnu/usr.bin/perl/utils/h2xs.PL b/gnu/usr.bin/perl/utils/h2xs.PL
index d2cd26a9504..fca1765355f 100644
--- a/gnu/usr.bin/perl/utils/h2xs.PL
+++ b/gnu/usr.bin/perl/utils/h2xs.PL
@@ -283,7 +283,7 @@ Note that some types of arguments/return-values for functions may
result in XSUB-declarations/typemap-entries which need
hand-editing. Such may be objects which cannot be converted from/to a
pointer (like C<long long>), pointers to functions, or arrays. See
-also the section on L<LIMITATIONS of B<-x>>.
+also the section on L</LIMITATIONS of B<-x>>.
=back
diff --git a/gnu/usr.bin/perl/utils/perlbug.PL b/gnu/usr.bin/perl/utils/perlbug.PL
index 54703a71ef0..f78b63c7dda 100644
--- a/gnu/usr.bin/perl/utils/perlbug.PL
+++ b/gnu/usr.bin/perl/utils/perlbug.PL
@@ -1,5 +1,8 @@
#!/usr/local/bin/perl
+use strict;
+use warnings;
+
use Config;
use File::Basename qw(&basename &dirname);
use Cwd;
@@ -15,9 +18,9 @@ use File::Spec::Functions;
# This forces PL files to create target in same directory as PL file.
# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
+my $origdir = cwd;
chdir dirname($0);
-$file = basename($0, '.PL');
+my $file = basename($0, '.PL');
$file .= '.com' if $^O eq 'VMS';
open OUT, ">", $file or die "Can't create $file: $!";
@@ -83,14 +86,14 @@ BEGIN {
$::HaveWrap = ($@ eq "");
};
-our $VERSION = "1.41";
+our $VERSION = "1.42";
#TODO:
# make sure failure (transmission-wise) of Mail::Send is accounted for.
# (This may work now. Unsure of the original author's issue -JESSE 2008-06-08)
# - Test -b option
-my( $file, $usefile, $cc, $address, $bugaddress, $testaddress, $thanksaddress,
+my( $file, $usefile, $cc, $address, $thanksaddress,
$filename, $messageid, $domain, $subject, $from, $verbose, $ed, $outfile,
$fh, $me, $body, $andcc, %REP, $ok, $thanks, $progname,
$Is_MSWin32, $Is_Linux, $Is_VMS, $Is_OpenBSD,
@@ -119,9 +122,7 @@ EOF
Query();
Edit() unless $usefile || ($ok and not $opt{n});
NowWhat();
-if ($outfile) {
- save_message_to_disk($outfile);
-} else {
+if ($address) {
Send();
if ($thanks) {
print "\nThank you for taking the time to send a thank-you message!\n\n";
@@ -135,12 +136,13 @@ EOF
paraprint <<EOF
Please note that mailing lists are moderated, your message may take a while to
-show up. If you do not receive an automated response acknowledging your message
-within a few hours (check your SPAM folder and outgoing mail) please consider
-sending an email directly from your mail client to perlbug\@perl.org.
+show up. Please consider submitting your report directly to the issue tracker
+at https://github.com/Perl/perl5/issues
EOF
}
+} else {
+ save_message_to_disk($outfile);
}
exit;
@@ -198,17 +200,11 @@ sub Init {
$Is_Linux = lc($^O) eq 'linux';
$Is_OpenBSD = lc($^O) eq 'openbsd';
- # perlbug address
- $bugaddress = 'perlbug@perl.org';
-
- # Test address
- $testaddress = 'perlbug-test@perl.org';
-
# Thanks address
$thanksaddress = 'perl-thanks@perl.org';
# Defaults if getopts fails.
- $address = (basename ($0) =~ /^perlthanks/i) ? $thanksaddress : $bugaddress;
+ $outfile = (basename($0) =~ /^perlthanks/i) ? "perlthanks.rep" : "perlbug.rep";
$cc = $::Config{'perladmin'} || $::Config{'cf_email'} || $::Config{'cf_by'} || '';
HELP_MESSAGE() unless getopts("Adhva:s:b:f:F:r:e:SCc:to:n:T:p:", \%opt);
@@ -229,8 +225,7 @@ sub Init {
$progname = $thanks ? 'perlthanks' : 'perlbug';
# Target address
- $address = $opt{a} || ($opt{t} ? $testaddress
- : $thanks ? $thanksaddress : $bugaddress);
+ $address = $opt{a} || ($thanks ? $thanksaddress : "");
# Users address, used in message and in From and Reply-To headers
$from = $opt{r} || "";
@@ -263,7 +258,7 @@ sub Init {
}
# File to output to
- $outfile = $opt{F} || "";
+ $outfile = $opt{F} || "$progname.rep";
# Body of report
$body = $opt{b} || "";
@@ -358,20 +353,22 @@ sub Query {
This program provides an easy way to send a thank-you message back to the
authors and maintainers of perl.
-If you wish to submit a bug report, please run it without the -T flag.
+If you wish to generate a bug report, please run it without the -T flag
+(or run the program perlbug rather than perlthanks)
EOF
} else {
paraprint <<"EOF";
-This program provides an easy way to create a message reporting a
-bug in the core perl distribution (along with tests or patches)
-to the volunteers who maintain perl at $address. To send a thank-you
-note to $thanksaddress instead of a bug report, please use the -T flag.
+This program provides an easy way to generate a bug report for the core
+perl distribution (along with tests or patches). To send a thank-you
+note to $thanksaddress instead of a bug report, please run 'perlthanks'.
-Please do not use $0 to send test messages, test whether perl
-works, or to report bugs in perl modules from CPAN.
+The GitHub issue tracker at https://github.com/Perl/perl5/issues is the
+best place to submit your report so it can be tracked and resolved.
+
+Please do not use $0 to report bugs in perl modules from CPAN.
Suggestions for how to find help using Perl can be found at
-http://perldoc.perl.org/perlcommunity.html
+https://perldoc.perl.org/perlcommunity.html
EOF
}
}
@@ -384,7 +381,7 @@ EOF
unless ($subject) {
print
-"First of all, please provide a subject for the message.\n";
+"First of all, please provide a subject for the report.\n";
if ( not $thanks) {
paraprint <<EOF;
This should be a concise description of your bug or problem
@@ -462,7 +459,7 @@ EOF
}
# Prompt for administrator address, unless an override was given
- if( !$opt{C} and !$opt{c} ) {
+ if( $address and !$opt{C} and !$opt{c} ) {
my $description = <<EOF;
$0 can send a copy of this report to your local perl
administrator. If the address below is wrong, please correct it,
@@ -552,7 +549,7 @@ EOF
paraprint <<EOF;
$entry is not a "core" Perl module. Please check that you entered
its name correctly. If it is correct, quit this program, try searching
-for $entry on http://rt.cpan.org, and report your issue there.
+for $entry on https://rt.cpan.org, and report your issue there.
EOF
$entry = '';
@@ -692,11 +689,6 @@ EFF
module=$report_about_module
EFF
}
- if ($opt{A}) {
- print OUT <<EFF;
- ack=no
-EFF
- }
print OUT <<EFF;
---
EFF
@@ -785,8 +777,7 @@ EOF
next;
} else {
paraprint <<EOF;
-You may want to save your report to a file, so you can edit and
-mail it later.
+You can edit your report after saving it to a file.
EOF
return;
}
@@ -816,7 +807,7 @@ EOF
sub Cancel {
1 while unlink($filename); # remove all versions under VMS
- print "\nQuitting without sending your message.\n";
+ print "\nQuitting without generating a report.\n";
exit(0);
}
@@ -824,23 +815,24 @@ sub NowWhat {
# Report is done, prompt for further action
if( !$opt{S} ) {
while(1) {
+ my $send_to = $address || 'the Perl developers';
my $menu = <<EOF;
-You have finished composing your message. At this point, you have
+You have finished composing your report. At this point, you have
a few options. You can:
- * [Se]nd the message to $address$andcc,
- * [D]isplay the message on the screen,
- * [R]e-edit the message
- * Display or change the message's [su]bject
- * Save the message to a [f]ile to mail at another time
- * [Q]uit without sending a message
+ * Save the report to a [f]ile
+ * [Se]nd the report to $send_to$andcc
+ * [D]isplay the report on the screen
+ * [R]e-edit the report
+ * Display or change the report's [su]bject
+ * [Q]uit without generating the report
EOF
retry:
print $menu;
- my $action = _prompt('', "Action (Send/Display/Edit/Subject/Save to File)",
+ my $action = _prompt('', "Action (Save/Send/Display/Edit/Subject/Quit)",
$opt{t} ? 'q' : '');
print "\n";
if ($action =~ /^(f|sa)/i) { # <F>ile/<Sa>ve
@@ -862,12 +854,20 @@ EOF
}
} elsif ($action =~ /^se/i) { # <S>end
# Send the message
- my $reply = _prompt( "Are you certain you want to send this message?", 'Please type "yes" if you are','no');
+ if (not $thanks) {
+ print <<EOF
+To ensure your issue can be best tracked and resolved,
+you should submit it to the GitHub issue tracker at
+https://github.com/Perl/perl5/issues
+EOF
+ }
+ my $reply = _prompt( "Are you certain you want to send this report to $send_to$andcc?", 'Please type "yes" if you are','no');
if ($reply =~ /^yes$/) {
+ $address ||= 'perl5-porters@perl.org';
last;
} else {
paraprint <<EOF;
-You didn't type "yes", so your message has not yet been sent.
+You didn't type "yes", so your report has not been sent.
EOF
}
} elsif ($action =~ /^[er]/i) { # <E>dit, <R>e-edit
@@ -898,14 +898,9 @@ sub TrivialSubject {
}
sub SaveMessage {
- my $file_save = $outfile || "$progname.rep";
- my $file = _prompt( '', "Name of file to save message in", $file_save );
+ my $file = _prompt( '', "Name of file to save report in", $outfile );
save_message_to_disk($file) || return undef;
- print "\n";
- paraprint <<EOF;
-A copy of your message has been saved in '$file' for you to
-send to '$address' with your normal mail client.
-EOF
+ return 1;
}
sub Send {
@@ -941,7 +936,7 @@ EOF
sub Help {
print <<EOF;
-This program is designed to help you generate and send bug reports
+This program is designed to help you generate bug reports
(and thank-you notes) about perl5 and the modules which ship with it.
In most cases, you can just run "$0" interactively from a command
@@ -952,33 +947,33 @@ Advanced usage:
$0 [-v] [-a address] [-s subject] [-b body | -f inpufile ] [ -F outputfile ]
[-r returnaddress] [-e editor] [-c adminaddress | -C] [-S] [-t] [-h]
[-p patchfile ]
-$0 [-v] [-r returnaddress] [-A] [-ok | -okay | -nok | -nokay]
+$0 [-v] [-r returnaddress] [-ok | -okay | -nok | -nokay]
Options:
-v Include Verbose configuration data in the report
-f File containing the body of the report. Use this to
- quickly send a prepared message.
+ quickly send a prepared report.
-p File containing a patch or other text attachment. Separate
multiple files with commas.
- -F File to output the resulting mail message to, instead of mailing.
- -S Send without asking for confirmation.
- -a Address to send the report to. Defaults to '$address'.
+ -F File to output the resulting report to. Defaults to
+ '$outfile'.
+ -S Save or send the report without asking for confirmation.
+ -a Send the report to this address, instead of saving to a file.
-c Address to send copy of report to. Defaults to '$cc'.
-C Don't send copy to administrator.
- -s Subject to include with the message. You will be prompted
+ -s Subject to include with the report. You will be prompted
if you don't supply one on the command line.
-b Body of the report. If not included on the command line, or
- in a file with -f, you will get a chance to edit the message.
+ in a file with -f, you will get a chance to edit the report.
-r Your return address. The program will ask you to confirm
this if you don't give it here.
-e Editor to use.
- -t Test mode. The target address defaults to '$testaddress'.
+ -t Test mode.
-T Thank-you mode. The target address defaults to '$thanksaddress'.
-d Data mode. This prints out your configuration data, without mailing
anything. You can use this with -v to get more complete data.
- -A Don't send a bug received acknowledgement to the return address.
-ok Report successful build on this system to perl porters
(use alone or with -v). Only use -ok if *everything* was ok:
if there were *any* problems at all, use -nok.
@@ -1045,7 +1040,7 @@ sub _build_header {
}
sub _message_headers {
- my %headers = ( To => $address, Subject => $subject );
+ my %headers = ( To => $address || 'perl5-porters@perl.org', Subject => $subject );
$headers{'Cc'} = $cc if ($cc);
$headers{'Message-Id'} = $messageid if ($messageid);
$headers{'Reply-To'} = $from if ($from);
@@ -1130,7 +1125,7 @@ sub save_message_to_disk {
print OUTFILE build_complete_message();
close(OUTFILE) or do { warn "Error closing $file: $!"; return undef };
- print "\nMessage saved.\n";
+ print "\nReport saved to '$file'. Please submit it to https://github.com/Perl/perl5/issues\n";
return 1;
}
@@ -1205,9 +1200,9 @@ EOT
paraprint(<<"EOF"), die "\n";
$message_start
Because of this, there's no easy way to automatically send your
-message.
+report.
-A copy of your message has been saved in '$filename' for you to
+A copy of your report has been saved in '$filename' for you to
send to '$address' with your normal mail client.
EOF
}
@@ -1267,10 +1262,12 @@ B<perlbug> S<[ B<-v> ]> S<[ B<-a> I<address> ]> S<[ B<-s> I<subject> ]>
S<[ B<-b> I<body> | B<-f> I<inputfile> ]> S<[ B<-F> I<outputfile> ]>
S<[ B<-r> I<returnaddress> ]>
S<[ B<-e> I<editor> ]> S<[ B<-c> I<adminaddress> | B<-C> ]>
-S<[ B<-S> ]> S<[ B<-t> ]> S<[ B<-d> ]> S<[ B<-A> ]> S<[ B<-h> ]> S<[ B<-T> ]>
+S<[ B<-S> ]> S<[ B<-t> ]> S<[ B<-d> ]> S<[ B<-h> ]> S<[ B<-T> ]>
B<perlbug> S<[ B<-v> ]> S<[ B<-r> I<returnaddress> ]>
- S<[ B<-A> ]> S<[ B<-ok> | B<-okay> | B<-nok> | B<-nokay> ]>
+ S<[ B<-ok> | B<-okay> | B<-nok> | B<-nokay> ]>
+
+B<perlthanks>
=head1 DESCRIPTION
@@ -1309,7 +1306,7 @@ Type C<perl -v> at the command line to find out.
=item Are you running the latest released version of perl?
-Look at http://www.perl.org/ to find out. If you are not using the
+Look at L<http://www.perl.org/> to find out. If you are not using the
latest released version, please try to replicate your bug on the
latest stable release.
@@ -1410,8 +1407,8 @@ by Perl's test suite).
=item Can you use C<perlbug> to submit a thank-you note?
-Yes, you can do this by using the C<-T> option.
-Thank-you notes are good. It makes people
+Yes, you can do this by either using the C<-T> option, or by invoking
+the program as C<perlthanks>. Thank-you notes are good. It makes people
smile.
=back
@@ -1435,7 +1432,8 @@ offers of frosty beverages. (Please do be kind to the maintainers.
Harassing or flaming them is likely to have the opposite effect of the
one you want.)
-Feel free to update the ticket about your bug on http://rt.perl.org
+Feel free to update the ticket about your bug on
+L<https://github.com/Perl/perl5/issues>
if a new version of Perl is released and your bug is still present.
=head1 OPTIONS
@@ -1444,34 +1442,28 @@ if a new version of Perl is released and your bug is still present.
=item B<-a>
-Address to send the report to. Defaults to B<perlbug@perl.org>.
-
-=item B<-A>
-
-Don't send a bug received acknowledgement to the reply address.
-Generally it is only a sensible to use this option if you are a
-perl maintainer actively watching perl porters for your message to
-arrive.
+Address to send the report to instead of saving to a file.
=item B<-b>
Body of the report. If not included on the command line, or
-in a file with B<-f>, you will get a chance to edit the message.
+in a file with B<-f>, you will get a chance to edit the report.
=item B<-C>
-Don't send copy to administrator.
+Don't send copy to administrator when sending report by mail.
=item B<-c>
-Address to send copy of report to. Defaults to the address of the
+Address to send copy of report to when sending report by mail.
+Defaults to the address of the
local perl administrator (recorded when perl was built).
=item B<-d>
Data mode (the default if you redirect or pipe output). This prints out
-your configuration data, without mailing anything. You can use this
-with B<-v> to get more complete data.
+your configuration data, without saving or mailing anything. You can use
+this with B<-v> to get more complete data.
=item B<-e>
@@ -1480,13 +1472,11 @@ Editor to use.
=item B<-f>
File containing the body of the report. Use this to quickly send a
-prepared message.
+prepared report.
=item B<-F>
-File to output the results to instead of sending as an email. Useful
-particularly when running perlbug on a machine with no direct internet
-connection.
+File to output the results to. Defaults to B<perlbug.rep>.
=item B<-h>
@@ -1532,17 +1522,16 @@ if you don't use this option.
=item B<-S>
-Send without asking for confirmation.
+Save or send the report without asking for confirmation.
=item B<-s>
-Subject to include with the message. You will be prompted if you don't
+Subject to include with the report. You will be prompted if you don't
supply one on the command line.
=item B<-t>
-Test mode. The target address defaults to B<perlbug-test@perl.org>.
-Also makes it possible to command perlbug from a pipe or file, for
+Test mode. Makes it possible to command perlbug from a pipe or file, for
testing purposes.
=item B<-T>
diff --git a/gnu/usr.bin/perl/utils/perlivp.PL b/gnu/usr.bin/perl/utils/perlivp.PL
index 50d187a544e..f175caadd99 100644
--- a/gnu/usr.bin/perl/utils/perlivp.PL
+++ b/gnu/usr.bin/perl/utils/perlivp.PL
@@ -165,7 +165,7 @@ foreach (@INC) {
$INC_total++;
}
-$label = '@INC directoreis exist';
+$label = '@INC directories exist';
if ($INC_total == $INC_there) {
print "ok 3 $label\n";
$pass__total++;
diff --git a/gnu/usr.bin/perl/utils/pl2pm.PL b/gnu/usr.bin/perl/utils/pl2pm.PL
index 19aef581aba..39a1fb9fece 100644
--- a/gnu/usr.bin/perl/utils/pl2pm.PL
+++ b/gnu/usr.bin/perl/utils/pl2pm.PL
@@ -1,5 +1,8 @@
#!/usr/local/bin/perl
+use strict;
+use warnings;
+
use Config;
use File::Basename qw(&basename &dirname);
use Cwd;
@@ -13,9 +16,9 @@ use Cwd;
# This forces PL files to create target in same directory as PL file.
# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
+my $origdir = cwd;
chdir dirname($0);
-$file = basename($0, '.PL');
+my $file = basename($0, '.PL');
$file .= '.com' if $^O eq 'VMS';
open OUT, ">", $file or die "Can't create $file: $!";
diff --git a/gnu/usr.bin/perl/utils/splain.PL b/gnu/usr.bin/perl/utils/splain.PL
index ccf325de930..f01ed126ec0 100644
--- a/gnu/usr.bin/perl/utils/splain.PL
+++ b/gnu/usr.bin/perl/utils/splain.PL
@@ -1,5 +1,8 @@
#!/usr/local/bin/perl
+use strict;
+use warnings;
+
use Config;
use File::Basename qw(&basename &dirname);
use File::Spec;
@@ -15,13 +18,13 @@ use Cwd;
# This forces PL files to create target in same directory as PL file.
# This is so that make depend always knows where to find PL derivatives.
-$origdir = cwd;
+my $origdir = cwd;
chdir dirname($0);
-$file = basename($0, '.PL');
+my $file = basename($0, '.PL');
$file .= '.com' if $^O eq 'VMS';
# Open input file before creating output file.
-$in = File::Spec->catfile(File::Spec->updir, 'lib', 'diagnostics.pm');
+my $in = File::Spec->catfile(File::Spec->updir, 'lib', 'diagnostics.pm');
open IN, '<', $in or die "Can't open $in: $!\n";
# Create output file.
diff --git a/gnu/usr.bin/perl/vms/descrip_mms.template b/gnu/usr.bin/perl/vms/descrip_mms.template
index 51240be3545..0c5f1ebd56f 100644
--- a/gnu/usr.bin/perl/vms/descrip_mms.template
+++ b/gnu/usr.bin/perl/vms/descrip_mms.template
@@ -279,7 +279,7 @@ CRTLOPTS =,$(CRTL)/Options
unidatafiles = lib/unicore/Decomposition.pl lib/unicore/TestProp.pl \
lib/unicore/CombiningClass.pl lib/unicore/Name.pl \
lib/unicore/UCD.pl lib/unicore/Name.pm \
- lib/unicore/Heavy.pl lib/unicore/mktables.lst
+ lib/unicore/mktables.lst
# Directories of Unicode data files generated by mktables
unidatadirs = lib/unicore/To lib/unicore/lib
@@ -291,7 +291,7 @@ utils1 = [.utils]perldoc.com [.utils]h2ph.com
utils2 = [.utils]h2xs.com [.utils]libnetcfg.com [.lib]perlbug.com [.utils]json_pp.com
utils3 = [.utils]perlivp.com [.lib]splain.com [.utils]pl2pm.com [.utils]xsubpp.com [.utils]pod2html.com [.utils]instmodsh.com
utils4 = [.utils]enc2xs.com [.utils]piconv.com [.utils]cpan.com [.utils]prove.com [.utils]ptar.com [.utils]ptardiff.com [.utils]shasum.com
-utils5 = [.utils]corelist.com [.utils]ptargrep.com [.utils]zipdetails.com [.utils]encguess.com
+utils5 = [.utils]corelist.com [.utils]ptargrep.com [.utils]zipdetails.com [.utils]encguess.com [.utils]streamzip.com
all : base extras archcorefiles preplibrary [.pod]perltoc.pod
@ QUALIFIERS := $(MMSQUALIFIERS)
@@ -313,7 +313,7 @@ utils : $(utils1) $(utils2) $(utils3) $(utils4) $(utils5)
extra.pods : miniperl
@ @extra_pods.com
-PERLDELTA_CURRENT = [.pod]perl5303delta.pod
+PERLDELTA_CURRENT = [.pod]perl5321delta.pod
$(PERLDELTA_CURRENT) : [.pod]perldelta.pod
Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT)
@@ -345,11 +345,11 @@ miniperl : $(DBG)miniperl$(E) vmspipe.com
@ Continue
[.lib]buildcustomize.pl : miniperlmain$(O), $(DBG)libperlmini$(OLB) $(CRTL) write_buildcustomize.pl
- Link $(LINKFLAGS)/NoDebug/Trace/NoMap/NoFull/NoCross/Exe=$(MINIPERL_EXE) miniperlmain$(O), $(DBG)libperlmini$(OLB)/Library/Include=globals $(CRTLOPTS)
+ Link $(LINKFLAGS)/NoDebug/Trace/NoMap/NoFull/NoCross/Exe=$(MINIPERL_EXE) miniperlmain$(O),$(DBG)libperlmini$(OLB)/Library $(CRTLOPTS)
$(MINIPERL) "-f" write_buildcustomize.pl
$(DBG)miniperl$(E) : miniperlmain$(O), $(DBG)libperlmini$(OLB) $(CRTL)
- Link $(LINKFLAGS)/Trace/Exe=$(MMS$TARGET) miniperlmain$(O), $(DBG)libperlmini$(OLB)/Library/Include=globals $(CRTLOPTS)
+ Link $(LINKFLAGS)/Trace/Exe=$(MMS$TARGET) miniperlmain$(O), $(DBG)libperlmini$(OLB)/Library $(CRTLOPTS)
$(DBG)libperl$(OLB) : $(obj)
@ If F$Search("$(MMS$TARGET)").eqs."" Then Library/Object/Create $(MMS$TARGET)
@@ -510,6 +510,9 @@ nonxsext : $(LIBPREREQ) preplibrary $(MINIPERL_EXE) [.pod]perlfunc.pod
[.utils]zipdetails.com : [.utils]zipdetails.PL $(ARCHDIR)Config.pm nonxsext
$(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
+[.utils]streamzip.com : [.utils]streamzip.PL $(ARCHDIR)Config.pm nonxsext
+ $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
+
[.utils]pod2html.com : [.utils]pod2html.PL $(ARCHDIR)Config.pm nonxsext
$(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
diff --git a/gnu/usr.bin/perl/vms/gen_shrfls.pl b/gnu/usr.bin/perl/vms/gen_shrfls.pl
index 6ed7eca9d96..7b9f6061940 100644
--- a/gnu/usr.bin/perl/vms/gen_shrfls.pl
+++ b/gnu/usr.bin/perl/vms/gen_shrfls.pl
@@ -172,7 +172,7 @@ else {
}
close OPTATTR;
-my $incstr = 'PERL,GLOBALS';
+my $incstr = 'perl,globals';
my (@symfiles, $drvrname);
# Initial hack to permit building of compatible shareable images for a
@@ -180,18 +180,17 @@ my (@symfiles, $drvrname);
if ($ENV{PERLSHR_USE_GSMATCH}) {
if ($ENV{PERLSHR_USE_GSMATCH} eq 'INCLUDE_COMPILE_OPTIONS') {
# Build up a major ID. Since on Alpha it can only be 8 bits, we encode
- # the version number in the top 5 bits and use the bottom 3 for build
- # options most likely to cause incompatibilities. Breaks at Perl 5.32.
+ # the version number in the top 6 bits and use the bottom 2 for build
+ # options most likely to cause incompatibilities. Breaks at Perl 5.64.
my ($ver, $sub) = $] =~ /\.(\d\d\d)(\d\d\d)/;
$ver += 0; $sub += 0;
my $gsmatch = ($ver % 2 == 1) ? "EQUAL" : "LEQUAL"; # Force an equal match for
# dev, but be more forgiving
# for releases
- $ver <<= 3;
+ $ver <<= 2;
$ver += 1 if $debugging_enabled; # If DEBUGGING is set
$ver += 2 if $use_threads; # if we're threaded
- $ver += 4 if $use_mymalloc; # if we're using perl's malloc
print OPTBLD "GSMATCH=$gsmatch,$ver,$sub\n";
}
else {
diff --git a/gnu/usr.bin/perl/vms/vms.c b/gnu/usr.bin/perl/vms/vms.c
index 9dcefa3e13c..1c61149e6ae 100644
--- a/gnu/usr.bin/perl/vms/vms.c
+++ b/gnu/usr.bin/perl/vms/vms.c
@@ -523,7 +523,7 @@ copy_expand_unix_filename_escape(char *outspec, const char *inspec, int *output_
/* Don't escape again if following character is
* already something we escape.
*/
- if (strchr(".!#&\'`()+@{},;[]%^=_\\", *(inspec+1))) {
+ if (memCHRs(".!#&\'`()+@{},;[]%^=_\\", *(inspec+1))) {
*outspec = *inspec;
*output_cnt = 1;
return 1;
@@ -3311,7 +3311,7 @@ pipe_tochild1_ast(pPipe p)
p->shut_on_empty = TRUE;
b->eof = TRUE;
_ckvmssts_noperl(sys$dassgn(p->chan_in));
- } else {
+ } else {
_ckvmssts_noperl(iss);
}
@@ -5013,7 +5013,7 @@ vms_rename_with_acl(pTHX_ const struct dsc$descriptor_s * vms_src_dsc,
const struct dsc$descriptor_s * vms_dst_dsc,
unsigned long flags)
{
- /* VMS and UNIX handle file permissions differently and the
+ /* VMS and UNIX handle file permissions differently and
* the same ACL trick may be needed for renaming files,
* especially if they are directories.
*/
@@ -5276,7 +5276,7 @@ Perl_rename(pTHX_ const char *src, const char * dst)
/* Originally the idea was to call the CRTL rename() and only
* try the lib$rename_file if it failed.
- * It turns out that there are too many variants in what the
+ * It turns out that there are too many variants in what
* the CRTL rename might do, so only use lib$rename_file
*/
retval = -1;
@@ -8799,7 +8799,7 @@ int_tovmsspec(const char *path, char *rslt, int dir_flag, int * utf8_flag)
/* Don't escape again if following character is
* already something we escape.
*/
- if (strchr("\"`!#%^&()=+\'@[]{}:\\|<>_.", *(cp2+1))) {
+ if (memCHRs("\"`!#%^&()=+\'@[]{}:\\|<>_.", *(cp2+1))) {
*(cp1++) = *(cp2++);
break;
}
@@ -9755,7 +9755,7 @@ vms_image_init(int *argcp, char ***argvp)
for (cp = av[i]+1; *cp; cp++) {
if (*cp == 'T') { will_taint = 1; break; }
else if ( (*cp == 'd' || *cp == 'V') && *(cp+1) == ':' ||
- strchr("DFIiMmx",*cp)) break;
+ memCHRs("DFIiMmx",*cp)) break;
}
if (will_taint) break;
}
@@ -11800,7 +11800,7 @@ encode_dev (pTHX_ const char *dev)
enc = 0;
f = 1;
i = 0;
- for (q = dev + strlen(dev); q--; q >= dev) {
+ for (q = dev + strlen(dev); q >= dev; q--) {
if (*q == ':')
break;
if (isdigit (*q))
diff --git a/gnu/usr.bin/perl/vms/vmsish.h b/gnu/usr.bin/perl/vms/vmsish.h
index 8dca211b5a4..a0003e90bc7 100644
--- a/gnu/usr.bin/perl/vms/vmsish.h
+++ b/gnu/usr.bin/perl/vms/vmsish.h
@@ -310,7 +310,8 @@ struct interp_intern {
#define BIT_BUCKET "/dev/null"
#define PERL_SYS_INIT_BODY(c,v) MALLOC_CHECK_TAINT2(*c,*v) vms_image_init((c),(v)); PERLIO_INIT; MALLOC_INIT
#define PERL_SYS_TERM_BODY() HINTS_REFCNT_TERM; OP_REFCNT_TERM; \
- PERLIO_TERM; MALLOC_TERM; LOCALE_TERM
+ PERLIO_TERM; MALLOC_TERM; LOCALE_TERM; \
+ ENV_TERM;
#define dXSUB_SYS dNOOP
#define HAS_KILL
#define HAS_WAIT
diff --git a/gnu/usr.bin/perl/vutil.c b/gnu/usr.bin/perl/vutil.c
index 8aa1f261a59..23627bea78c 100644
--- a/gnu/usr.bin/perl/vutil.c
+++ b/gnu/usr.bin/perl/vutil.c
@@ -533,7 +533,7 @@ Perl_new_version(pTHX_ SV *ver)
under = ninstr(raw, raw+len, underscore, underscore + 1);
if (under) {
Move(under + 1, under, raw + len - under - 1, char);
- SvCUR(rv)--;
+ SvCUR_set(rv, SvCUR(rv) - 1);
*SvEND(rv) = '\0';
}
/* this is for consistency with the pure Perl class */
@@ -614,11 +614,7 @@ VER_NV:
/* may get too much accuracy */
char tbuf[64];
-#ifdef __vax__
- SV *sv = SvNVX(ver) > 10e37 ? newSV(64) : 0;
-#else
SV *sv = SvNVX(ver) > 10e50 ? newSV(64) : 0;
-#endif
char *buf;
#if PERL_VERSION_GE(5,19,0)
@@ -647,6 +643,8 @@ VER_NV:
if ( strNE(locale_name_on_entry, "C")
&& strNE(locale_name_on_entry, "POSIX"))
{
+ /* the setlocale() call might free or overwrite the name */
+ locale_name_on_entry = savepv(locale_name_on_entry);
setlocale(LC_NUMERIC, "C");
}
else { /* This value indicates to the restore code that we didn't
@@ -670,6 +668,8 @@ VER_NV:
if ( strNE(locale_name_on_entry, "C")
&& strNE(locale_name_on_entry, "POSIX"))
{
+ /* the setlocale() call might free or overwrite the name */
+ locale_name_on_entry = savepv(locale_name_on_entry);
setlocale(LC_NUMERIC, "C");
}
else { /* This value indicates to the restore code that we
@@ -719,6 +719,7 @@ VER_NV:
if (locale_name_on_entry) {
setlocale(LC_NUMERIC, locale_name_on_entry);
+ Safefree(locale_name_on_entry);
}
LC_NUMERIC_UNLOCK; /* End critical section */
@@ -727,6 +728,7 @@ VER_NV:
if (locale_name_on_entry) {
setlocale(LC_NUMERIC, locale_name_on_entry);
+ Safefree(locale_name_on_entry);
LC_NUMERIC_UNLOCK;
}
else if (locale_obj_on_entry == PL_underlying_numeric_obj) {
diff --git a/gnu/usr.bin/perl/vxs.inc b/gnu/usr.bin/perl/vxs.inc
index b5c00d7de15..cea9857887d 100644
--- a/gnu/usr.bin/perl/vxs.inc
+++ b/gnu/usr.bin/perl/vxs.inc
@@ -5,7 +5,7 @@
# define VXS_CLASS "version"
# define VXSp(name) XS_##name
/* VXSXSDP = XSUB Details Proto */
-# define VXSXSDP(x) x
+# define VXSXSDP(x) x, 0
#else
# define VXS_CLASS "version::vxs"
# define VXSp(name) VXS_##name
diff --git a/gnu/usr.bin/perl/warnings.h b/gnu/usr.bin/perl/warnings.h
index 6f0bf6b485a..f02edea0fa4 100644
--- a/gnu/usr.bin/perl/warnings.h
+++ b/gnu/usr.bin/perl/warnings.h
@@ -127,6 +127,90 @@
#define WARN_EXPERIMENTAL__UNIPROP_WILDCARDS 71
#define WARN_EXPERIMENTAL__VLB 72
+/* Warnings Categories added in Perl 5.031 */
+
+#define WARN_EXPERIMENTAL__ISA 73
+
+
+/*
+=for apidoc Amnh||WARN_ALL
+=for apidoc Amnh||WARN_CLOSURE
+=for apidoc Amnh||WARN_DEPRECATED
+=for apidoc Amnh||WARN_EXITING
+=for apidoc Amnh||WARN_GLOB
+=for apidoc Amnh||WARN_IO
+=for apidoc Amnh||WARN_CLOSED
+=for apidoc Amnh||WARN_EXEC
+=for apidoc Amnh||WARN_LAYER
+=for apidoc Amnh||WARN_NEWLINE
+=for apidoc Amnh||WARN_PIPE
+=for apidoc Amnh||WARN_UNOPENED
+=for apidoc Amnh||WARN_MISC
+=for apidoc Amnh||WARN_NUMERIC
+=for apidoc Amnh||WARN_ONCE
+=for apidoc Amnh||WARN_OVERFLOW
+=for apidoc Amnh||WARN_PACK
+=for apidoc Amnh||WARN_PORTABLE
+=for apidoc Amnh||WARN_RECURSION
+=for apidoc Amnh||WARN_REDEFINE
+=for apidoc Amnh||WARN_REGEXP
+=for apidoc Amnh||WARN_SEVERE
+=for apidoc Amnh||WARN_DEBUGGING
+=for apidoc Amnh||WARN_INPLACE
+=for apidoc Amnh||WARN_INTERNAL
+=for apidoc Amnh||WARN_MALLOC
+=for apidoc Amnh||WARN_SIGNAL
+=for apidoc Amnh||WARN_SUBSTR
+=for apidoc Amnh||WARN_SYNTAX
+=for apidoc Amnh||WARN_AMBIGUOUS
+=for apidoc Amnh||WARN_BAREWORD
+=for apidoc Amnh||WARN_DIGIT
+=for apidoc Amnh||WARN_PARENTHESIS
+=for apidoc Amnh||WARN_PRECEDENCE
+=for apidoc Amnh||WARN_PRINTF
+=for apidoc Amnh||WARN_PROTOTYPE
+=for apidoc Amnh||WARN_QW
+=for apidoc Amnh||WARN_RESERVED
+=for apidoc Amnh||WARN_SEMICOLON
+=for apidoc Amnh||WARN_TAINT
+=for apidoc Amnh||WARN_THREADS
+=for apidoc Amnh||WARN_UNINITIALIZED
+=for apidoc Amnh||WARN_UNPACK
+=for apidoc Amnh||WARN_UNTIE
+=for apidoc Amnh||WARN_UTF8
+=for apidoc Amnh||WARN_VOID
+=for apidoc Amnh||WARN_IMPRECISION
+=for apidoc Amnh||WARN_ILLEGALPROTO
+=for apidoc Amnh||WARN_NON_UNICODE
+=for apidoc Amnh||WARN_NONCHAR
+=for apidoc Amnh||WARN_SURROGATE
+=for apidoc Amnh||WARN_EXPERIMENTAL
+=for apidoc Amnh||WARN_EXPERIMENTAL__LEXICAL_SUBS
+=for apidoc Amnh||WARN_EXPERIMENTAL__REGEX_SETS
+=for apidoc Amnh||WARN_EXPERIMENTAL__SMARTMATCH
+=for apidoc Amnh||WARN_EXPERIMENTAL__POSTDEREF
+=for apidoc Amnh||WARN_EXPERIMENTAL__SIGNATURES
+=for apidoc Amnh||WARN_SYSCALLS
+=for apidoc Amnh||WARN_EXPERIMENTAL__BITWISE
+=for apidoc Amnh||WARN_EXPERIMENTAL__CONST_ATTR
+=for apidoc Amnh||WARN_EXPERIMENTAL__RE_STRICT
+=for apidoc Amnh||WARN_EXPERIMENTAL__REFALIASING
+=for apidoc Amnh||WARN_EXPERIMENTAL__WIN32_PERLIO
+=for apidoc Amnh||WARN_LOCALE
+=for apidoc Amnh||WARN_MISSING
+=for apidoc Amnh||WARN_REDUNDANT
+=for apidoc Amnh||WARN_EXPERIMENTAL__DECLARED_REFS
+=for apidoc Amnh||WARN_EXPERIMENTAL__ALPHA_ASSERTIONS
+=for apidoc Amnh||WARN_EXPERIMENTAL__SCRIPT_RUN
+=for apidoc Amnh||WARN_SHADOW
+=for apidoc Amnh||WARN_EXPERIMENTAL__PRIVATE_USE
+=for apidoc Amnh||WARN_EXPERIMENTAL__UNIPROP_WILDCARDS
+=for apidoc Amnh||WARN_EXPERIMENTAL__VLB
+=for apidoc Amnh||WARN_EXPERIMENTAL__ISA
+
+=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"
@@ -141,10 +225,22 @@
#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
diff --git a/gnu/usr.bin/perl/win32/GNUmakefile b/gnu/usr.bin/perl/win32/GNUmakefile
index 1c20e839821..b944a5a2634 100644
--- a/gnu/usr.bin/perl/win32/GNUmakefile
+++ b/gnu/usr.bin/perl/win32/GNUmakefile
@@ -1,13 +1,13 @@
#
# Makefile to build perl on Windows using GMAKE.
# Supported compilers:
-# Microsoft Visual C++ 6.0 or later
+# Microsoft Visual C++ 7.0 or later
# MinGW with gcc-3.4.5 or later with runtime < 3.21
# MinGW64 with gcc-4.4.3 or later
# Windows SDK 64-bit compiler and tools
#
# This is set up to build a perl.exe that runs off a shared library
-# (perl530.dll). Also makes individual DLLs for the XS extensions.
+# (perl532.dll). Also makes individual DLLs for the XS extensions.
#
# The easiest way to customize the build process is to use parameters like this:
#
@@ -64,7 +64,7 @@ INST_TOP := $(INST_DRV)\perl
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER := \5.30.3
+#INST_VER := \5.32.1
#
# Comment this out if you DON'T want your perl installation to have
@@ -126,7 +126,6 @@ USE_LARGE_FILES := define
# Uncomment this if you're building a 32-bit perl and want 64-bit integers.
# (If you're building a 64-bit perl then you will have 64-bit integers whether
# or not this is uncommented.)
-# Note: This option is not supported in 32-bit MSVC60 builds.
#
#USE_64_BIT_INT := define
@@ -160,8 +159,6 @@ DEFAULT_INC_EXCLUDES_DOT := define
#
# uncomment exactly one of the following
#
-# Visual C++ 6.0 (aka Visual C++ 98)
-#CCTYPE := MSVC60
# Visual C++ .NET 2002/2003 (aka Visual C++ 7.0/7.1) (full version)
#CCTYPE := MSVC70
# Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools)
@@ -233,7 +230,7 @@ DEFAULT_INC_EXCLUDES_DOT := define
# set this to additionally provide a statically linked perl-static.exe.
# Note that dynamic loading will not work with this perl, so you must
# include required modules statically using the STATIC_EXT or ALL_STATIC
-# variables below. A static library perl530s.lib will also be created.
+# variables below. A static library perl532s.lib will also be created.
# Ordinary perl.exe is not affected by this option.
#
#BUILD_STATIC := define
@@ -288,7 +285,7 @@ EXTRALIBDIRS :=
#
# set this to your email address (perl will guess a value from
-# from your loginname and your hostname, which may not be right)
+# your loginname and your hostname, which may not be right)
#
#EMAIL :=
@@ -394,8 +391,6 @@ endif
ifeq ($(CCHOME),)
ifeq ($(CCTYPE),GCC)
CCHOME := C:\MinGW
-else ifeq ($(CCTYPE),MSVC60)
-CCHOME := $(MSVCDir)
else ifeq ($(CCTYPE),MSVC70)
CCHOME := $(MSVCDir)
else ifeq ($(CCTYPE),MSVC70FREE)
@@ -446,19 +441,6 @@ ifeq ($(WIN64),define)
USE_64_BIT_INT = define
endif
-# Treat 64-bit MSVC60 (doesn't really exist) as SDK2003SP1 because
-# both link against MSVCRT.dll (which is part of Windows itself) and
-# not against a compiler specific versioned runtime.
-ifeq ("$(WIN64) $(CCTYPE)","define MSVC60")
-CCTYPE = SDK2003SP1
-endif
-
-# Disable the 64-bit-int option for (32-bit) MSVC60 builds since that compiler
-# does not support it.
-ifeq ($(CCTYPE),MSVC60)
-USE_64_BIT_INT = undef
-endif
-
# Disable the long double option for MSVC builds since that compiler
# does not support it.
ifneq ($(CCTYPE),GCC)
@@ -588,7 +570,7 @@ GCCVER2 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('gcc -dumpversion')
GCCVER3 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('gcc -dumpversion') do echo %%k)
# If you are using GCC, 4.3 or later by default we add the -fwrapv option.
-# See https://rt.perl.org/Ticket/Display.html?id=121505
+# See https://github.com/Perl/perl5/issues/13690
#
GCCWRAPV := $(shell if "$(GCCVER1)"=="4" (if "$(GCCVER2)" geq "3" echo define) else if "$(GCCVER1)" geq "5" (echo define))
@@ -608,7 +590,7 @@ a = .a
INCLUDES = -I.\include -I. -I..
DEFINES = -DWIN32
ifeq ($(WIN64),define)
-DEFINES += -DWIN64 -DCONSERVATIVE
+DEFINES += -DWIN64
endif
LOCDEFS = -DPERLDLL -DPERL_CORE
CXX_FLAG = -xc++
@@ -618,8 +600,9 @@ LIBFILES = $(LIBC) -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool \
-luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
ifeq ($(CFG),Debug)
-OPTIMIZE = -g -O2 -DDEBUGGING
+OPTIMIZE = -g -O2
LINK_DBG = -g
+DEFINES += -DDEBUGGING
else
OPTIMIZE = -s -O2
LINK_DBG = -s
@@ -672,9 +655,7 @@ EMBED_DLL_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputre
# Most relevant compiler-specific options fall into two groups:
# either pre-MSVC80 or MSVC80 onwards, so define a macro for this.
-ifeq ($(CCTYPE),MSVC60)
-PREMSVC80 = define
-else ifeq ($(CCTYPE),MSVC70)
+ifeq ($(CCTYPE),MSVC70)
PREMSVC80 = define
else ifeq ($(CCTYPE),MSVC70FREE)
PREMSVC80 = define
@@ -701,6 +682,7 @@ INCLUDES = -I.\include -I. -I..
DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT
LOCDEFS = -DPERLDLL -DPERL_CORE
CXX_FLAG = -TP -EHsc
+EXTRACFLAGS = -nologo -GF -W3
ifeq ($(CCTYPE),MSVC140)
LIBC = ucrt.lib
@@ -713,11 +695,14 @@ LIBC = msvcrt.lib
endif
ifeq ($(CFG),Debug)
-OPTIMIZE = -Od -MD -Zi -DDEBUGGING
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+DEFINES += -DDEBUGGING
+EXTRACFLAGS += -MD
else ifeq ($(CFG),DebugSymbols)
-OPTIMIZE = -Od -MD -Zi
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+EXTRACFLAGS += -MD
else ifeq ($(CFG),DebugFull)
ifeq ($(CCTYPE),MSVC140)
LIBC = ucrtd.lib
@@ -728,29 +713,29 @@ LIBC = ucrtd.lib
else
LIBC = msvcrtd.lib
endif
-OPTIMIZE = -Od -MDd -Zi -D_DEBUG -DDEBUGGING
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+DEFINES += -D_DEBUG -DDEBUGGING
+EXTRACFLAGS += -MDd
+
else
+# Enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG).
# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64
-OPTIMIZE = -O1 -MD -Zi -DNDEBUG
+OPTIMIZE = -O1 -Zi -GL
# we enable debug symbols in release builds also
-LINK_DBG = -debug -opt:ref,icf
+LINK_DBG = -debug -opt:ref,icf -ltcg
# you may want to enable this if you want COFF symbols in the executables
# in addition to the PDB symbols. The default Dr. Watson that ships with
-# Windows can use the the former but not latter. The free WinDbg can be
+# Windows can use the former but not latter. The free WinDbg can be
# installed to get better stack traces from just the PDB symbols, so we
# avoid the bloat of COFF symbols by default.
-#LINK_DBG = $(LINK_DBG) -debugtype:both
-ifneq ($(CCTYPE),MSVC60)
-# enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG)
-OPTIMIZE += -GL
-LINK_DBG += -ltcg
+#LINK_DBG += -debugtype:both
LIB_FLAGS = -ltcg
-endif
+EXTRACFLAGS += -MD
endif
ifeq ($(WIN64),define)
-DEFINES += -DWIN64 -DCONSERVATIVE
+DEFINES += -DWIN64
OPTIMIZE += -fp:precise
endif
@@ -784,7 +769,7 @@ endif
# backward compatibility. We define this symbol here for older 32-bit
# compilers only (which aren't using it at all) for the sole purpose
# of getting it into $Config{ccflags}. That way if someone builds
-# Perl itself with e.g. VC6 but later installs an XS module using VC8
+# Perl itself with e.g. VC7 but later installs an XS module using VC8
# the time_t types will still be compatible.
ifeq ($(WIN64),undef)
ifeq ($(PREMSVC80),define)
@@ -835,7 +820,6 @@ endif
LIBFILES = $(LIBBASEFILES) $(LIBC)
-EXTRACFLAGS = -nologo -GF -W3
ifeq ($(__ICC),define)
EXTRACFLAGS += -Qstd=c99
endif
@@ -966,7 +950,7 @@ endif
UNIDATAFILES = ..\lib\unicore\Decomposition.pl ..\lib\unicore\TestProp.pl \
..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm \
- ..\lib\unicore\Heavy.pl ..\lib\unicore\mktables.lst
+ ..\lib\unicore\mktables.lst
# Directories of Unicode data files generated by mktables
UNIDATADIR1 = ..\lib\unicore\To
@@ -1020,9 +1004,9 @@ ifeq ($(CCTYPE),GCC)
CFGSH_TMPL = config.gc
CFGH_TMPL = config_H.gc
-PERLIMPLIB = $(COREDIR)\libperl530$(a)
-PERLIMPLIBBASE = libperl530$(a)
-PERLSTATICLIB = ..\libperl530s$(a)
+PERLIMPLIB = $(COREDIR)\libperl532$(a)
+PERLIMPLIBBASE = libperl532$(a)
+PERLSTATICLIB = ..\libperl532s$(a)
INT64 = long long
else
@@ -1035,12 +1019,12 @@ endif
# makedef.pl must be updated if this changes, and this should normally
# only change when there is an incompatible revision of the public API.
-PERLIMPLIB ?= $(COREDIR)\perl530$(a)
-PERLIMPLIBBASE ?= perl530$(a)
-PERLEXPLIB ?= $(COREDIR)\perl530.exp
-PERLSTATICLIB ?= ..\perl530s$(a)
-PERLDLL = ..\perl530.dll
-PERLDLLBASE = perl530.dll
+PERLIMPLIB ?= $(COREDIR)\perl532$(a)
+PERLIMPLIBBASE ?= perl532$(a)
+PERLEXPLIB ?= $(COREDIR)\perl532.exp
+PERLSTATICLIB ?= ..\perl532s$(a)
+PERLDLL = ..\perl532.dll
+PERLDLLBASE = perl532.dll
# don't let "gmake -n all" try to run "miniperl.exe make_ext.pl"
PLMAKE = gmake
@@ -1209,7 +1193,7 @@ CFG_VARS = \
"archname=$(ARCHNAME)" \
"cc=$(CC)" \
"ld=$(LINK32)" \
- "ccflags=$(subst ",\",$(EXTRACFLAGS) $(OPTIMIZE) $(DEFINES) $(BUILDOPT))" \
+ "ccflags=$(subst ",\",$(EXTRACFLAGS) $(DEFINES) $(BUILDOPT))" \
"usecplusplus=$(USE_CPLUSPLUS)" \
"cf_email=$(EMAIL)" \
"d_mymalloc=$(PERL_MALLOC)" \
@@ -1284,9 +1268,9 @@ static: $(PERLEXESTATIC)
$(GLOBEXE) : perlglob.c
ifeq ($(CCTYPE),GCC)
- $(LINK32) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES)
+ $(LINK32) $(EXTRACFLAGS) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES)
else
- $(CC) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \
+ $(CC) $(EXTRACFLAGS) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \
setargv$(o) $(LIBFILES) && $(EMBED_EXE_MANI)
endif
@@ -1542,7 +1526,7 @@ $(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
$(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) $(*F).c
# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
-# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s unless
+# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s
# unless the .IF is true), so instead we use a .ELSE with the default.
# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
@@ -1588,7 +1572,7 @@ ifeq ($(CCTYPE),GCC)
else
$(LINK32) -dll -out:$@ $(BLINK_FLAGS) \
@Extensions_static \
- -base:0x28000000 $(DELAYLOAD) $(LIBFILES) \
+ $(DELAYLOAD) $(LIBFILES) \
$(PERLDLL_RES) $(PERLDLL_OBJ) $(PERLEXPLIB)
$(EMBED_DLL_MANI)
endif
@@ -1733,7 +1717,6 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
copy ..\README.amiga ..\pod\perlamiga.pod
copy ..\README.android ..\pod\perlandroid.pod
copy ..\README.bs2000 ..\pod\perlbs2000.pod
- copy ..\README.ce ..\pod\perlce.pod
copy ..\README.cn ..\pod\perlcn.pod
copy ..\README.cygwin ..\pod\perlcygwin.pod
copy ..\README.dos ..\pod\perldos.pod
@@ -1762,7 +1745,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
copy ..\README.tw ..\pod\perltw.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
- copy ..\pod\perldelta.pod ..\pod\perl5303delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl5321delta.pod
$(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
$(MINIPERL) -I..\lib ..\autodoc.pl ..
$(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1834,7 +1817,6 @@ distclean: realclean
-if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
-if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module
-if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP
- -if exist $(LIBDIR)\OpenBSD rmdir /s /q $(LIBDIR)\OpenBSD
-if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params
-if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse
-if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl
@@ -1861,15 +1843,16 @@ distclean: realclean
-if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
-if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
-cd $(PODDIR) && del /f *.html *.bat roffitall \
- perl5303delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
- perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
+ perl5321delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \
perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
- perltru64.pod perltw.pod perlvos.pod perlwin32.pod
+ perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
+ perlwin32.pod
-cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \
perldoc perlivp libnetcfg enc2xs encguess piconv cpan *.bat \
xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails
diff --git a/gnu/usr.bin/perl/win32/Makefile b/gnu/usr.bin/perl/win32/Makefile
index 9686c52f180..5924d841392 100644
--- a/gnu/usr.bin/perl/win32/Makefile
+++ b/gnu/usr.bin/perl/win32/Makefile
@@ -1,11 +1,11 @@
#
# Makefile to build perl on Windows using Microsoft NMAKE.
# Supported compilers:
-# Microsoft Visual C++ 6.0 or later
+# Microsoft Visual C++ 7.0 or later
# Windows SDK 64-bit compiler and tools
#
# This is set up to build a perl.exe that runs off a shared library
-# (perl530.dll). Also makes individual DLLs for the XS extensions.
+# (perl532.dll). Also makes individual DLLs for the XS extensions.
#
##
@@ -38,7 +38,7 @@ INST_TOP = $(INST_DRV)\perl
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER = \5.30.3
+#INST_VER = \5.32.1
#
# Comment this out if you DON'T want your perl installation to have
@@ -91,7 +91,6 @@ USE_LARGE_FILES = define
# Uncomment this if you're building a 32-bit perl and want 64-bit integers.
# (If you're building a 64-bit perl then you will have 64-bit integers whether
# or not this is uncommented.)
-# Note: This option is not supported in 32-bit MSVC60 builds.
#
#USE_64_BIT_INT = define
@@ -111,8 +110,6 @@ DEFAULT_INC_EXCLUDES_DOT = define
#
# uncomment exactly one of the following
#
-# Visual C++ 6.0 (aka Visual C++ 98)
-#CCTYPE = MSVC60
# Visual C++ .NET 2002/2003 (aka Visual C++ 7.0/7.1) (full version)
#CCTYPE = MSVC70
# Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools)
@@ -194,7 +191,7 @@ DEFAULT_INC_EXCLUDES_DOT = define
# set this to additionally provide a statically linked perl-static.exe.
# Note that dynamic loading will not work with this perl, so you must
# include required modules statically using the STATIC_EXT or ALL_STATIC
-# variables below. A static library perl530s.lib will also be created.
+# variables below. A static library perl532s.lib will also be created.
# Ordinary perl.exe is not affected by this option.
#
#BUILD_STATIC = define
@@ -216,8 +213,7 @@ DEFAULT_INC_EXCLUDES_DOT = define
# define $(VCINSTALLDIR) instead, but from VC++ 14.1 we need the subfolder given
# by $(VCToolsInstallDir).
#
-!IF "$(CCTYPE)" == "MSVC60" || \
- "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
+!IF "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
CCHOME = $(MSVCDIR)
!ELSEIF "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
CCHOME = $(VCTOOLSINSTALLDIR)
@@ -256,7 +252,7 @@ EXTRALIBDIRS =
#
# set this to your email address (perl will guess a value from
-# from your loginname and your hostname, which may not be right)
+# your loginname and your hostname, which may not be right)
#
#EMAIL =
@@ -362,24 +358,9 @@ WIN64 = undef
USE_64_BIT_INT = define
!ENDIF
-# Treat 64-bit MSVC60 (doesn't really exist) as SDK2003SP1 because
-# both link against MSVCRT.dll (which is part of Windows itself) and
-# not against a compiler specific versioned runtime.
-!IF "$(WIN64)" == "define" && "$(CCTYPE)" == "MSVC60"
-CCTYPE = SDK2003SP1
-!ENDIF
-
-# Disable the 64-bit-int option for (32-bit) MSVC60 builds since that compiler
-# does not support it.
-!IF "$(CCTYPE)" == "MSVC60"
-!UNDEF USE_64_BIT_INT
-USE_64_BIT_INT = undef
-!ENDIF
-
# Most relevant compiler-specific options fall into two groups:
# either pre-MSVC80 or MSVC80 onwards, so define a macro for this.
-!IF "$(CCTYPE)" == "MSVC60" || \
- "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
+!IF "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
PREMSVC80 = define
!ELSE
PREMSVC80 = undef
@@ -494,6 +475,7 @@ INCLUDES = -I$(COREDIR) -I.\include -I. -I..
DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT
LOCDEFS = -DPERLDLL -DPERL_CORE
CXX_FLAG = -TP -EHsc
+EXTRACFLAGS = -nologo -GF -W3
!IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
LIBC = ucrt.lib
@@ -502,40 +484,42 @@ LIBC = msvcrt.lib
!ENDIF
!IF "$(CFG)" == "Debug"
-OPTIMIZE = -Od -MD -Zi -DDEBUGGING
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+DEFINES = $(DEFINES) -DDEBUGGING
+EXTRACFLAGS = $(EXTRACFLAGS) -MD
!ELSEIF "$(CFG)" == "DebugSymbols"
-OPTIMIZE = -Od -MD -Zi
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+EXTRACFLAGS = $(EXTRACFLAGS) -MD
!ELSEIF "$(CFG)" == "DebugFull"
! IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
LIBC = ucrtd.lib
! ELSE
LIBC = msvcrtd.lib
! ENDIF
-OPTIMIZE = -Od -MDd -Zi -D_DEBUG -DDEBUGGING
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+DEFINES = $(DEFINES) -D_DEBUG -DDEBUGGING
+EXTRACFLAGS = $(EXTRACFLAGS) -MDd
!ELSE
+# Enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG).
# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64
-OPTIMIZE = -O1 -MD -Zi -DNDEBUG
+OPTIMIZE = -O1 -Zi -GL
# we enable debug symbols in release builds also
-LINK_DBG = -debug -opt:ref,icf
+LINK_DBG = -debug -opt:ref,icf -ltcg
# you may want to enable this if you want COFF symbols in the executables
# in addition to the PDB symbols. The default Dr. Watson that ships with
-# Windows can use the the former but not latter. The free WinDbg can be
+# Windows can use the former but not latter. The free WinDbg can be
# installed to get better stack traces from just the PDB symbols, so we
# avoid the bloat of COFF symbols by default.
#LINK_DBG = $(LINK_DBG) -debugtype:both
-! IF "$(CCTYPE)" != "MSVC60"
-# enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG)
-OPTIMIZE = $(OPTIMIZE) -GL
-LINK_DBG = $(LINK_DBG) -ltcg
LIB_FLAGS = -ltcg
-! ENDIF
+EXTRACFLAGS = $(EXTRACFLAGS) -MD
!ENDIF
!IF "$(WIN64)" == "define"
-DEFINES = $(DEFINES) -DWIN64 -DCONSERVATIVE
+DEFINES = $(DEFINES) -DWIN64
OPTIMIZE = $(OPTIMIZE) -fp:precise
!ENDIF
@@ -565,7 +549,7 @@ DEFINES = $(DEFINES) -DNO_THREAD_SAFE_LOCALE
# backward compatibility. We define this symbol here for older 32-bit
# compilers only (which aren't using it at all) for the sole purpose
# of getting it into $Config{ccflags}. That way if someone builds
-# Perl itself with e.g. VC6 but later installs an XS module using VC8
+# Perl itself with e.g. VC7 but later installs an XS module using VC8
# the time_t types will still be compatible.
!IF "$(WIN64)" == "undef" && "$(PREMSVC80)" == "define"
BUILDOPT = $(BUILDOPT) -D_USE_32BIT_TIME_T
@@ -603,8 +587,6 @@ LIBBASEFILES = $(LIBBASEFILES) bufferoverflowU.lib
LIBFILES = $(LIBBASEFILES) $(LIBC)
-#EXTRACFLAGS = -nologo -GF -W4 -wd4127 -wd4706
-EXTRACFLAGS = -nologo -GF -W3
!IF "$(__ICC)" == "define"
EXTRACFLAGS = $(EXTRACFLAGS) -Qstd=c99
!ENDIF
@@ -683,9 +665,9 @@ $(o).dll:
# makedef.pl must be updated if this changes, and this should normally
# only change when there is an incompatible revision of the public API.
-PERLIMPLIB = ..\perl530.lib
-PERLSTATICLIB = ..\perl530s.lib
-PERLDLL = ..\perl530.dll
+PERLIMPLIB = ..\perl532.lib
+PERLSTATICLIB = ..\perl532s.lib
+PERLDLL = ..\perl532.dll
MINIPERL = ..\miniperl.exe
MINIDIR = .\mini
@@ -751,6 +733,7 @@ UTILS = \
..\utils\instmodsh \
..\utils\json_pp \
..\utils\pod2html \
+ ..\utils\streamzip \
bin\exetype.pl \
bin\runperl.pl \
bin\pl2bat.pl \
@@ -916,7 +899,7 @@ CFG_VARS = \
"archname=$(ARCHNAME)" \
"cc=$(CC)" \
"ld=$(LINK32)" \
- "ccflags=$(EXTRACFLAGS) $(OPTIMIZE:"=\") $(DEFINES) $(BUILDOPT)" \
+ "ccflags=$(EXTRACFLAGS) $(DEFINES) $(BUILDOPT)" \
"usecplusplus=$(USE_CPLUSPLUS)" \
"cf_email=$(EMAIL)" \
"d_mymalloc=$(PERL_MALLOC)" \
@@ -1147,7 +1130,7 @@ perldll.def : $(MINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl create_perllibs
CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def
$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
- $(LINK32) -dll -def:perldll.def -base:0x28000000 -out:$@ @Extensions_static @<<
+ $(LINK32) -dll -def:perldll.def -out:$@ @Extensions_static @<<
$(BLINK_FLAGS) $(DELAYLOAD) $(LIBFILES) $(PERLDLL_OBJ) $(PERLDLL_RES)
<<
$(EMBED_DLL_MANI)
@@ -1254,7 +1237,6 @@ utils: $(PERLEXE) ..\utils\Makefile
copy ..\README.amiga ..\pod\perlamiga.pod
copy ..\README.android ..\pod\perlandroid.pod
copy ..\README.bs2000 ..\pod\perlbs2000.pod
- copy ..\README.ce ..\pod\perlce.pod
copy ..\README.cn ..\pod\perlcn.pod
copy ..\README.cygwin ..\pod\perlcygwin.pod
copy ..\README.dos ..\pod\perldos.pod
@@ -1283,7 +1265,7 @@ utils: $(PERLEXE) ..\utils\Makefile
copy ..\README.tw ..\pod\perltw.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
- copy ..\pod\perldelta.pod ..\pod\perl5303delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl5321delta.pod
cd ..\win32
$(PERLEXE) $(PL2BAT) $(UTILS)
$(MINIPERL) -I..\lib ..\autodoc.pl ..
@@ -1356,7 +1338,6 @@ distclean: realclean
-if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
-if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module
-if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP
- -if exist $(LIBDIR)\OpenBSD rmdir /s /q $(LIBDIR)\OpenBSD
-if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params
-if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse
-if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl
@@ -1383,17 +1364,18 @@ distclean: realclean
-if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
-if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
-cd $(PODDIR) && del /f *.html *.bat roffitall \
- perl5303delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
- perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
+ perl5321delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \
perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
- perltru64.pod perltw.pod perlvos.pod perlwin32.pod
+ perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
+ perlwin32.pod
-cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \
- perldoc perlivp libnetcfg enc2xs encguess piconv cpan *.bat \
+ perldoc perlivp libnetcfg enc2xs encguess piconv cpan streamzip *.bat \
xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails
-del /f ..\config.sh perlmain.c dlutils.c config.h.new \
perlmainst.c
diff --git a/gnu/usr.bin/perl/win32/Makefile.ce b/gnu/usr.bin/perl/win32/Makefile.ce
deleted file mode 100644
index dde7a7fc455..00000000000
--- a/gnu/usr.bin/perl/win32/Makefile.ce
+++ /dev/null
@@ -1,1077 +0,0 @@
-#
-# perl makefile for wince
-# During the cross-compilation, it first uses Makefile file to build
-# miniperl on HOST and then build required platform
-#
-
-SRCDIR = ..
-PV = 530
-
-# INSTALL_ROOT specifies a path where this perl will be installed on CE device
-INSTALL_ROOT=/netzwerk/sprache/perl
-INST_TOP=$(INSTALL_ROOT)
-INST_VER=
-
-# PERLCEDIR shoud be set to current directory
-PERLCEDIR = $(MAKEDIR)
-
-# WCEROOT is a directory where Windows CE Tools was installed
-WCEROOT = D:\Windows CE Tools
-
-# HPERL stands for host perl, which is perl on local desktop machine
-# which is usually ..\miniperl.exe
-#HPERL = N:\Programme\perl\bin\perl.exe
-HPERL = $(MAKEDIR)\..\miniperl.exe
-
-CEPATH = D:\Programme\Microsoft eMbedded Tools\EVC\WCE211\BIN
-CELIBDLLDIR = h:\src\wince\celib-palm-3.0
-CECONSOLEDIR = h:\src\wince\w32console
-
-# specify following options to build perl on local machine, by MSVC
-MSVCDIR = D:\MSVStudio\VC98
-CCHOME = $(MSVCDIR)
-CCINCDIR = $(CCHOME)\include
-CCLIBDIR = $(CCHOME)\lib
-
-# cecopy program. Make shure it is in your path, as well as cemkdir, cedel
-CECOPY = cecopy
-
-#
-# comment this out if you want the legacy default behavior of including '.' at
-# the end of @INC.
-#
-DEFAULT_INC_EXCLUDES_DOT = define
-
-#
-# set this if you wish to use perl's malloc
-# This will make perl run few times faster
-# WARNING: Turning this on/off WILL break binary compatibility with extensions
-# you may have compiled with/without it.
-#
-PERL_MALLOC = define
-
-
-NOOP = @echo
-# keep this untouched!
-NULL =
-
-#
-# uncomment exactly one of the following
-#
-# Embedded Visual C++ 4 and older
-CCTYPE = MSVC60
-# Smart Devices for Visual C++ 2005 (aka Visual C++ 8.x) (full version)
-#CCTYPE = MSVC80
-# Smart Devices for Visual C++ 2008 (aka Visual C++ 9.x) (full version)
-#CCTYPE = MSVC90
-
-#CFG=DEBUG
-CFG=RELEASE
-
-!if "$(MACHINE)" == ""
-MACHINE=wince-arm-hpc-wce300
-#MACHINE=wince-arm-hpc-wce211
-#MACHINE=wince-sh3-hpc-wce211
-#MACHINE=wince-mips-hpc-wce211
-#MACHINE=wince-sh3-hpc-wce200
-#MACHINE=wince-mips-hpc-wce200
-#MACHINE=wince-arm-pocket-wce300
-#MACHINE=wince-mips-pocket-wce300
-#MACHINE=wince-sh3-pocket-wce300
-#MACHINE=wince-x86em-pocket-wce300
-#MACHINE=wince-mips-palm-wce211
-#MACHINE=wince-sh3-palm-wce211
-#MACHINE=wince-x86em-palm-wce211
-#MACHINE=wince-x86-hpc-wce300
-#MACHINE=wince-arm-pocket-wce400
-!endif
-
-# set this to your email address
-#
-#EMAIL =
-
-##################### CHANGE THESE ONLY IF YOU MUST #####################
-
-######################################################################
-# machines
-
-!if "$(MACHINE)" == "wince-sh3-hpc-wce211"
-CC = shcl.exe
-ARCH = SH3
-CPU = SH3
-TARGETCPU = SH3
-CEVersion = 211
-OSVERSION = WCE211
-PLATFORM = MS HPC Pro
-MCFLAGS = -MDd -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 -DPALM_SIZE \
- -I $(CELIBDLLDIR)\inc
-SUBSYS = -subsystem:windowsce,2.11
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-mips-hpc-wce211"
-CC = clmips.exe
-ARCH = MIPS
-CPU = MIPS
-TARGETCPU = MIPS
-CEVersion = 211
-OSVERSION = WCE211
-PLATFORM = MS HPC Pro
-MCFLAGS = -D _MT -D _DLL \
- -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \
- -D PALM_SIZE \
- -I $(CELIBDLLDIR)\inc
-SUBSYS = -subsystem:windowsce,2.11
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-mips-hpc-wce200"
-CC = clmips.exe
-ARCH = MIPS
-CPU = MIPS
-TARGETCPU = MIPS
-CEVersion = 200
-OSVERSION = WCE200
-PLATFORM = MS HPC
-# MUST USE -MD to get the right FPE stuff...
-MCFLAGS = -D _MT -D _DLL -MD \
- -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \
- -D PALM_SIZE \
- -I $(CELIBDLLDIR)\inc
-SUBSYS = -subsystem:windowsce,2.00
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-sh3-hpc-wce200"
-CC = shcl.exe
-ARCH = SH3
-CPU = SH3
-TARGETCPU = SH3
-CEVersion = 200
-OSVERSION = WCE200
-PLATFORM = MS HPC
-# MUST USE -MD to get the right FPE stuff...
-MCFLAGS = -D _MT -D _DLL -MD \
- -D SH3 -D sh3 -D _SH3_ -D _sh3_ -D SHx -DPROCESSOR_SH3 \
- -D PALM_SIZE \
- -I $(CELIBDLLDIR)\inc
-SUBSYS = -subsystem:windowsce,2.00
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-arm-hpc-wce211"
-CC = clarm.exe
-ARCH = ARM
-CPU = ARM
-TARGETCPU = ARM
-CEVersion = 211
-OSVERSION = WCE211
-PLATFORM = MS HPC Pro
-MCFLAGS = -D _MT -D _DLL -D ARM -D arm -D _arm_ -D _ARM_ \
- -DPROCESSOR_ARM -DPALM_SIZE \
- -I $(CELIBDLLDIR)\inc
-SUBSYS = -subsystem:windowsce,2.11
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-arm-hpc-wce300"
-CC = clarm.exe
-ARCH = ARM
-CPU = ARM
-TARGETCPU = ARM
-CEVersion = 300
-OSVERSION = WCE300
-#PLATFORM = HPC2000
-MCFLAGS = -D _MT -D _DLL -D ARM -D arm -D _arm_ -D _ARM_ \
- -DPROCESSOR_ARM -DPALM_SIZE \
- -I $(CELIBDLLDIR)\inc
-SUBSYS = -subsystem:windowsce,3.00
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-mips-palm-wce211"
-CC = clmips.exe
-ARCH = MIPS
-CPU = MIPS
-TARGETCPU = MIPS
-CEVersion = 211
-OSVERSION = WCE211
-PLATFORM = MS Palm Size PC
-MCFLAGS = -DMIPS -D_MIPS_ -DPROCESSOR_MIPS -D PALM_SIZE -D _DLL -D _MT \
- -I $(CELIBDLLDIR)\inc
-SUBSYS = -subsystem:windowsce,2.11
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-sh3-palm-wce211"
-CC = shcl.exe
-ARCH = SH3
-CPU = SH3
-TARGETCPU = SH3
-CEVersion = 211
-OSVERSION = WCE211
-PLATFORM = MS Palm Size PC
-MCFLAGS = -D _MT -D _DLL -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 -DPALM_SIZE \
- -I $(CELIBDLLDIR)\inc
-SUBSYS = -subsystem:windowsce,2.11
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-x86em-palm-wce211"
-CC = cl.exe
-ARCH = X86EM
-CPU = X86
-TARGETCPU = X86
-CEVersion = 211
-OSVERSION = WCE211
-PLATFORM = MS Palm Size PC
-MCFLAGS = -MDd -DX86 -D_X86_ -DPROCESSOR_X86 \
- -D_WIN32_WCE_EMULATION -DPALM_SIZE \
- -I $(CELIBDLLDIR)\inc
-MACH = -machine:x86
-SUBSYS = -subsystem:windows
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-x86em-pocket-wce300"
-CC = cl.exe
-ARCH = X86EM
-CPU = X86
-TARGETCPU = X86
-CEVersion = 300
-OSVERSION = WCE300
-PLATFORM = MS Pocket PC
-MCFLAGS = -DX86 -D_X86_ -DPROCESSOR_X86 -D _MT -D _DLL \
- -D_WIN32_WCE_EMULATION -DPALM_SIZE -DPOCKET_SIZE \
- -I $(CELIBDLLDIR)\inc
-MACH = -machine:x86
-SUBSYS = -subsystem:windows
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-mips-pocket-wce300"
-CC = clmips.exe
-ARCH = MIPS
-CPU = MIPS
-TARGETCPU = MIPS
-CEVersion = 300
-OSVERSION = WCE300
-PLATFORM = MS Pocket PC
-MCFLAGS = -D MIPS -D mips -D _MIPS_ -D _mips_ -DPROCESSOR_MIPS \
- -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \
- -I $(CELIBDLLDIR)\inc
-MACH = -machine:mips
-SUBSYS = -subsystem:windowsce,3.00
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-#STDLIBPATH = $(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(CPU)
-LDLIBPATH = -libpath:$(CELIBPATH)
-#"-libpath:$(STDLIBPATH)"
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-sh3-pocket-wce300"
-CC = shcl.exe
-ARCH = SH3
-CPU = SH3
-TARGETCPU = SH3
-CEVersion = 300
-OSVERSION = WCE300
-PLATFORM = MS Pocket PC
-MCFLAGS = -D _MT -D _DLL -DSH3 -D_SH3_ -DSHx -DPROCESSOR_SH3 \
- -DPALM_SIZE -DPOCKET_SIZE \
- -I $(CELIBDLLDIR)\inc
-MACH = -machine:sh3
-SUBSYS = -subsystem:windowsce,3.00
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-arm-pocket-wce300"
-CC = clarm.exe
-ARCH = ARM
-CPU = ARM
-TARGETCPU = ARM
-CEVersion = 300
-OSVERSION = WCE300
-PLATFORM = MS Pocket PC
-MCFLAGS = -D ARM -D arm -D _ARM_ -D _arm_ -DPROCESSOR_ARM \
- -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \
- -I $(CELIBDLLDIR)\inc
-MACH = -machine:arm
-SUBSYS = -subsystem:windowsce,3.00
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-x86-hpc-wce300"
-CC = cl.exe
-ARCH = X86EM
-CPU = X86
-TARGETCPU = X86
-CEVersion = 400
-OSVERSION = WCE400
-PLATFORM = MS Pocket PC
-MCFLAGS = -DX86 -D_X86_ -Dx86 -DPROCESSOR_X86 -D _MT -D _DLL \
- -DPALM_SIZE -DPOCKET_SIZE -I $(CELIBDLLDIR)\inc
-MACH = -machine:IX86
-SUBSYS = -subsystem:windowsce,2.0
-CELIBPATH = $(CELIBDLLDIR)\wince-x86-hpc-wce300-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-!if "$(MACHINE)" == "wince-arm-pocket-wce400"
-#CC = clarm.exe #set in WCEARMV4.BAT
-ARCH = ARM
-CPU = ARM
-TARGETCPU = ARM
-CEVersion = 400
-#OSVERSION = WCE300 #set in WCEARMV4.BAT
-PLATFORM = MS Pocket PC
-MCFLAGS = -D ARM -D arm -D _ARM_ -D _arm_ -DPROCESSOR_ARM \
- -D _MT -D _DLL -DPALM_SIZE -DPOCKET_SIZE \
- -I $(CELIBDLLDIR)\inc
-MACH = -machine:arm
-SUBSYS = -subsystem:windowsce,4.00
-CELIBPATH = $(CELIBDLLDIR)\$(MACHINE)-release
-LDLIBPATH = -libpath:$(CELIBPATH)
-STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
- $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
-!endif
-
-
-######################################################################
-# common section
-
-CEDEFS = -D_WINDOWS -D_WIN32_WCE=$(CEVersion) -DUNDER_CE=$(CEVersion) \
- $(MCFLAGS) -D PERL
-
-CECFLAGS = $(CEDEFS) -Zi
-
-!if "$(CFG)" == "DEBUG"
-CECFLAGS = $(CECFLAGS) -Od
-!endif
-
-!if "$(CFG)" == "RELEASE"
-# -O2 and -Ot give internal compiler error in perl.c and lexer.
-# Also the dll cannot be loaded by perl.exe...
-!if "$(CPU)" == "SH3"
-!else
-CECFLAGS = $(CECFLAGS) -O1
-!endif
-! IF "$(CCTYPE)" != "MSVC60"
-#turn on LTCG optimization for CCs that have it
-CECFLAGS = $(CECFLAGS) -GL
-! ENDIF
-! IF "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC90"
-#no stack security cookie for CCs where its on by default
-CECFLAGS = $(CECFLAGS) -GS-
-! ENDIF
-!endif
-
-RCDEFS = /l 0x407 /r /d "UNICODE" /d UNDER_CE=$(CEVersion) \
- /d _WIN32_WCE=$(CEVersion)
-
-#PATH=$(CEPATH);$(PATH)
-
-# attention, for eVC 4, these paths are not generated correctly since the
-# WinCE SDK is organized differently from eVC 3, replace the next 2 macros
-# with absolute paths to the correct directories on your system
-#INCLUDE=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\include
-#LIB=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(ARCH)
-
-######################################################################
-
-!message
-!message Compiling for $(MACHINE)
-!message LIB=$(LIB)
-!message INCLUDE=$(INCLUDE)
-!message PATH=$(CEPATH)
-!message
-
-######################################################################
-#
-# Additional compiler flags can be specified here.
-#
-
-BUILDOPT = $(BUILDOPT) $(CECFLAGS) -DUSE_CROSS_COMPILE
-
-
-!IF "$(CRYPT_SRC)$(CRYPT_LIB)" == ""
-D_CRYPT = undef
-!ELSE
-D_CRYPT = define
-CRYPT_FLAG = -DHAVE_DES_FCRYPT
-!ENDIF
-
-!IF "$(PERL_MALLOC)" == ""
-PERL_MALLOC = undef
-!ENDIF
-
-!IF "$(DEFAULT_INC_EXCLUDES_DOT)" == ""
-DEFAULT_INC_EXCLUDES_DOT = undef
-!ENDIF
-
-!IF "$(USE_MULTI)" == ""
-USE_MULTI = undef
-!ENDIF
-
-!IF "$(USE_ITHREADS)" == ""
-USE_ITHREADS = undef
-!ENDIF
-
-!IF "$(USE_IMP_SYS)" == ""
-USE_IMP_SYS = undef
-!ENDIF
-
-!IF "$(USE_PERLCRT)" == ""
-USE_PERLCRT = undef
-!ENDIF
-
-!IF "$(USE_IMP_SYS)$(USE_MULTI)" == "defineundef"
-USE_MULTI = define
-!ENDIF
-
-!IF "$(USE_ITHREADS)$(USE_MULTI)" == "defineundef"
-USE_MULTI = define
-!ENDIF
-
-!IF "$(USE_MULTI)" != "undef"
-BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT
-!ENDIF
-
-!IF "$(USE_IMP_SYS)" != "undef"
-BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_SYS
-!ENDIF
-
-!IF "$(CROSS_NAME)" == ""
-CROSS_NAME = $(MACHINE)
-!ENDIF
-
-# new option - automatically defined in perl.h...
-#BUILDOPT = $(BUILDOPT) -DUSE_ENVIRON_ARRAY
-
-PROCESSOR_ARCHITECTURE = $(TARGETCPU)
-ARCHNAME = $(PLATFORM)-$(OSVERSION)-$(PROCESSOR_ARCHITECTURE)
-ARCHDIR = ..\lib\$(ARCHNAME)
-COREDIR = ..\lib\CORE
-AUTODIR = ..\lib\auto
-LIBDIR = ..\lib
-EXTDIR = ..\ext
-DISTDIR = ..\dist
-CPANDIR = ..\cpan
-PODDIR = ..\pod
-EXTUTILSDIR = $(LIBDIR)\ExtUtils
-
-LINK32 = link
-LIB32 = $(LINK32) -lib
-RSC = rc
-
-INCLUDES = -I.\include -I. -I..
-DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG) $(CECFLAGS)
-LOCDEFS = -DPERLDLL -DPERL_CORE
-CXX_FLAG = -TP
-
-PERLEXE_RES = perl.res
-PERLDLL_RES =
-
-!if "$(CFG)" == "RELEASE"
-CELIB = celib.lib
-!endif
-
-!if "$(CFG)" == "DEBUG"
-CELIB = celib.lib
-!endif
-
-#use ws2.lib instead of winsock.lib for WSAGetLastError
-CELIBS = -nodefaultlib \
- ws2.lib $(CELIB) coredll.lib
-
-#this libc's purpose is WinCE entrypoint to main wrapper, not a real C std lib
-!if $(CEVersion) > 200
-LIBC = corelibc.lib
-!else
-LIBC = msvcrt.lib
-!endif
-
-LIBBASEFILES = $(CRYPT_LIB) $(CELIBS)
-
-LIBFILES = $(LIBBASEFILES) $(LIBC)
-
-CFLAGS = -nologo -GF -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
- $(PCHFLAGS) $(OPTIMIZE)
-
-LINK_FLAGS = -nologo -debug -opt:ref,icf -machine:$(PROCESSOR_ARCHITECTURE)
-
-!if "$(CFG)" == "RELEASE" && "$(CCTYPE)" != "MSVC60"
-#see matching flag in CECFLAGS
-LINK_FLAGS = $(LINK_FLAGS) -ltcg
-!endif
-
-OBJOUT_FLAG = -Fo
-EXEOUT_FLAG = -Fe
-
-CFLAGS_O = $(CFLAGS) $(BUILDOPT)
-
-o = .obj
-
-#
-# Rules
-#
-
-.SUFFIXES : .c $(o) .dll .lib .exe .rc .res
-
-.c$(o):
- $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
-
-.c.i:
- $(CC) -c -I$(<D) $(CFLAGS_O) -P $(OBJOUT_FLAG)$@ $<
-
-.y.c:
- $(NOOP)
-
-$(o).dll:
- $(LINK32) -dll $(SUBSYS) $(LDLIBPATH) \
- -implib:$(*B).lib -def:$(*B).def \
- -out:$@ $(LINK_FLAGS) $(LIBFILES) $< $(LIBPERL)
-
-.rc.res:
- $(RSC) -i.. $<
-
-# This must be relative to ../lib/CORE, else the ext dll build fails...
-PERLIMPLIB_EXP = perl$(PV).lib
-PERLIMPLIB = $(PERLCEDIR)\$(MACHINE)\perl$(PV).lib
-PERLDLL = $(MACHINE)\perl$(PV).dll
-
-DLLDIR = $(MACHINE)\dll
-PERLEXE = $(MACHINE)\perl.exe
-
-CONFIGPM = ..\lib\Config.pm ..\lib\Config_heavy.pl
-GENUUDMAP = ..\generate_uudmap.exe
-
-UUDMAP_H = ..\uudmap.h
-BITCOUNT_H = ..\bitcount.h
-MG_DATA_H = ..\mg_data.h
-GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H)
-
-# Unicode data files generated by mktables
-FIRSTUNIFILE = ..\lib\unicore\Decomposition.pl
-UNIDATAFILES = ..\lib\unicore\Decomposition.pl \
- ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
- ..\lib\unicore\Heavy.pl ..\lib\unicore\mktables.lst \
- ..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm \
- ..\lib\unicore\TestProp.pl
-
-PERLEXE_MANIFEST= .\perlexe.manifest
-PERLEXE_ICO = .\perlexe.ico
-PERLEXE_RES = .\perlexe.res
-PERLDLL_RES =
-
-# Directories of Unicode data files generated by mktables
-UNIDATADIR1 = ..\lib\unicore\To
-UNIDATADIR2 = ..\lib\unicore\lib
-
-# Nominate a target which causes extensions to be re-built
-# This used to be $(PERLEXE), but at worst it is the .dll that they depend
-# on and really only the interface - i.e. the .def file used to export symbols
-# from the .dll
-PERLDEP = perldll.def
-
-MAKE = nmake -nologo
-MAKE_BARE = nmake
-
-CFGSH_TMPL = config.ce
-CFGH_TMPL = config_H.ce
-
-XCOPY = xcopy /f /r /i /d /y
-RCOPY = xcopy /f /r /i /e /d /y
-NOOP = @rem
-NULL =
-
-DEL = del
-
-MICROCORE_SRC = \
- ..\av.c \
- ..\caretx.c \
- ..\deb.c \
- ..\doio.c \
- ..\doop.c \
- ..\dquote.c \
- ..\dump.c \
- ..\globals.c \
- ..\gv.c \
- ..\mro_core.c \
- ..\hv.c \
- ..\locale.c \
- ..\keywords.c \
- ..\mathoms.c \
- ..\mg.c \
- ..\numeric.c \
- ..\op.c \
- ..\pad.c \
- ..\perl.c \
- ..\perlapi.c \
- ..\perly.c \
- ..\pp.c \
- ..\pp_ctl.c \
- ..\pp_hot.c \
- ..\pp_pack.c \
- ..\pp_sort.c \
- ..\pp_sys.c \
- ..\reentr.c \
- ..\regcomp.c \
- ..\regexec.c \
- ..\run.c \
- ..\scope.c \
- ..\sv.c \
- ..\taint.c \
- ..\time64.c \
- ..\toke.c \
- ..\universal.c \
- ..\utf8.c \
- ..\util.c
-
-EXTRACORE_SRC = $(EXTRACORE_SRC) perllib.c
-
-!IF "$(PERL_MALLOC)" == "define"
-EXTRACORE_SRC = $(EXTRACORE_SRC) ..\malloc.c
-!ENDIF
-
-EXTRACORE_SRC = $(EXTRACORE_SRC) ..\perlio.c .\win32io.c
-
-WIN32_SRC = \
- .\wince.c \
- .\wincesck.c \
- .\win32thread.c
-
-!IF "$(CRYPT_SRC)" != ""
-WIN32_SRC = $(WIN32_SRC) .\$(CRYPT_SRC)
-!ENDIF
-
-CORE_NOCFG_H = \
- ..\av.h \
- ..\cop.h \
- ..\cv.h \
- ..\dosish.h \
- ..\embed.h \
- ..\form.h \
- ..\gv.h \
- ..\handy.h \
- ..\hv.h \
- ..\hv_func.h \
- ..\iperlsys.h \
- ..\mg.h \
- ..\nostdio.h \
- ..\op.h \
- ..\opcode.h \
- ..\perl.h \
- ..\perlapi.h \
- ..\perlsdio.h \
- ..\perly.h \
- ..\pp.h \
- ..\proto.h \
- ..\regexp.h \
- ..\scope.h \
- ..\sv.h \
- ..\thread.h \
- ..\unixish.h \
- ..\utf8.h \
- ..\util.h \
- ..\warnings.h \
- ..\XSUB.h \
- ..\EXTERN.h \
- ..\perlvars.h \
- ..\intrpvar.h \
- .\include\dirent.h \
- .\include\netdb.h \
- .\include\sys\errno2.h \
- .\include\sys\socket.h \
- .\win32.h
-
-DYNAMIC_EXT = Socket IO Fcntl Opcode SDBM_File POSIX attributes B re \
- Data/Dumper Devel/Peek ByteLoader Devel/DProf File/Glob \
- Sys/Hostname
-
-STATIC_EXT = DynaLoader
-
-DYNALOADER = $(EXTDIR)\DynaLoader\DynaLoader
-
-ERRNO_PM = $(LIBDIR)\Errno.pm
-
-
-EXTENSION_PM = \
- $(ERRNO_PM)
-
-CFG_VARS = \
- "INST_TOP=$(INST_TOP)" \
- "INST_VER=$(INST_VER)" \
- "INST_ARCH=$(INST_ARCH)" \
- "archname=$(ARCHNAME)" \
- "cc=$(CC)" \
- "ld=$(LINK32)" \
- "ccflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT)" \
- "cppflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT)" \
- "cf_by=vkon" \
- "cf_email=$(EMAIL)" \
-#9cef8306
- "d_mymalloc=$(PERL_MALLOC)" \
- "libs=$(LIBFILES)" \
- "incpath=$(CCINCDIR)" \
- "libperl=$(PERLIMPLIB_EXP)" \
- "libpth=$(LIBPATH)" \
- "libc=$(LIBC)" \
- "make=$(MAKE_BARE)" \
- "static_ext=$(STATIC_EXT)" \
- "dynamic_ext=$(DYNAMIC_EXT)" \
- "usethreads=$(USE_ITHREADS)" \
- "useithreads=$(USE_ITHREADS)" \
- "usemultiplicity=$(USE_MULTI)" \
- "use64bitint=undef" \
- "uselargefiles=undef" \
- "default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT)" \
- "LINK_FLAGS=$(LDLIBPATH) $(LINK_FLAGS) $(SUBSYS)" \
- "optimize=$(OPTIMIZE)" \
- "WIN64=$(WIN64)"
-
-#
-# filenames given to xsubpp must have forward slashes (since it puts
-# full pathnames in #line strings)
-XSUBPP = $(HPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \
- -C++ -prototypes
-
-
-#
-# Top targets
-#
-
-all: hostminiperl force_config_h ..\lib\buildcustomize.pl .\config.h ..\git_version.h $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) MakePPPort Extensions PostExt
-
-$(DYNALOADER)$(o) : $(DYNALOADER).c config.h $(EXTDIR)\DynaLoader\dlutils.c
-
-#convenience target
-configpm_targ : $(CONFIGPM)
-
-force_config_h:
- -@$(DEL) /f config.h
- -@$(DEL) /f config.sh
- -@$(DEL) /f ..\config.h
- -@$(DEL) /f ..\config.sh
- -@$(DEL) $(PERLEXE_RES)
- -@mkdir ..\host
- -@copy $(HPERL) ..\host\miniperl.exe
- -@copy $(GENUUDMAP) ..\host\generate_uudmap.exe
- -@$(MAKE) -f Makefile distclean
- -@copy ..\host\miniperl.exe $(HPERL)
- -@copy ..\host\generate_uudmap.exe $(GENUUDMAP)
- $(GENUUDMAP) $(GENERATED_HEADERS)
- type NUL > force_config_h
-
-$(UUDMAP_H) $(MG_DATA_H) : $(BITCOUNT_H)
-
-$(BITCOUNT_H) :
- $(GENUUDMAP) $(GENERATED_HEADERS)
-
-$(CONFIGPM) : $(HPERL) ..\config.sh config_h.PL ..\git_version.h
- cd .. && $(HPERL) -Ilib configpm --no-glossary
- if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
- $(XCOPY) ..\*.h $(COREDIR)\*.*
- $(XCOPY) *.h $(COREDIR)\*.*
- $(RCOPY) include $(COREDIR)\*.*
- if errorlevel 1 $(MAKE) /$(MAKEFLAGS) $(CONFIGPM)
-
-.\config.h: $(CONFIGPM) ..\config.sh
- -@$(DEL) /f config.h
- -$(HPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" "CORE_DIR=$(COREDIR)" "CONFIG_H=config.h"
- copy config.h ..\config.h
-
-..\config.sh : config.ce config_sh.PL FindExt.pm
- -@$(DEL) /f config.sh
- $(HPERL) -I..\lib -I. config_sh.PL $(CFG_VARS) config.ce > ..\config.sh
-
-..\git_version.h : ..\make_patchnum.pl
- cd .. && $(HPERL) -Ilib make_patchnum.pl && cd win32
-
-# make sure that we recompile perl.c if the git version changes
-$(DLLDIR)\perl.obj : ..\git_version.h
-
-MakePPPort: $(HPERL) $(CONFIGPM) Extensions_nonxs
- $(HPERL) -I..\lib ..\mkppport
-
-MakePPPort_clean:
- -if exist $(HPERL) $(HPERL) -I..\lib ..\mkppport --clean
-
-#----------------------------------------------------------------------------------
-NOT_COMPILE_EXT =
-!if "$(MACHINE)" == "wince-sh3-palm-wce211"
-NOT_COMPILE_EXT = $(NOT_COMPILE_EXT) !XS/Typemap
-!endif
-!if "$(MACHINE)" == "wince-mips-palm-wce211"
-NOT_COMPILE_EXT = $(NOT_COMPILE_EXT) !XS/Typemap
-!endif
-
-Extensions: ..\make_ext.pl $(CONFIGPM)
- $(HPERL) -I..\lib -I. ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all \
- !POSIX !Win32 !Win32API/File !Time/HiRes !Time/Piece !re !SDBM_File $(NOT_COMPILE_EXT)
-
-
-Extensions_nonxs: ..\make_ext.pl ..\lib\buildcustomize.pl $(CONFIGPM) ..\pod\perlfunc.pod
- $(XCOPY) ..\*.h $(COREDIR)\*.*
- $(HPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs
-
-Extensions_clean:
- -if exist $(HPERL) $(HPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean
-
-PostExt: rebuild_storable
-
-rebuild_storable: $(PERLEXE)
- $(PERLEXE) -I..\lib -I. ..\dist\Storable\stacksize --core
- cd ..\dist\Storable
- $(MAKE) PERL_CORE=1
- cd ..\..\win32
-
-#----------------------------------------------------------------------------------
-
-$(PERLEXE_RES): perlexe.rc perl.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO)
- rc $(RCDEFS) perlexe.rc
-
-clean: Extensions_clean
- -if exist .\$(MACHINE)\dll rmdir /s /q .\$(MACHINE)\dll
- -@$(DEL) .\$(MACHINE)\*.obj
- -@$(DEL) .\$(MACHINE)\*.exe
- -@$(DEL) .\$(MACHINE)\*.dll
- -@$(DEL) .\$(MACHINE)\*.lib
- -@$(DEL) .\$(MACHINE)\*.exp
- -@$(DEL) .\$(MACHINE)\*.pdb
- -@$(DEL) ..\git_version.h
- -@$(DEL) config.h perl.res
- -@$(DEL) ..\t\test_state
-
-XDLLOBJS = \
-$(DLLDIR)\av.obj \
-$(DLLDIR)\caretx.obj \
-$(DLLDIR)\deb.obj \
-$(DLLDIR)\doio.obj \
-$(DLLDIR)\doop.obj \
-$(DLLDIR)\dquote.obj \
-$(DLLDIR)\dump.obj \
-$(DLLDIR)\globals.obj \
-$(DLLDIR)\gv.obj \
-$(DLLDIR)\mro_core.obj \
-$(DLLDIR)\hv.obj \
-$(DLLDIR)\locale.obj \
-$(DLLDIR)\keywords.obj \
-$(DLLDIR)\mathoms.obj \
-$(DLLDIR)\mg.obj \
-$(DLLDIR)\numeric.obj \
-$(DLLDIR)\op.obj \
-$(DLLDIR)\pad.obj \
-$(DLLDIR)\perl.obj \
-$(DLLDIR)\perlapi.obj \
-$(DLLDIR)\perlio.obj \
-$(DLLDIR)\perly.obj \
-$(DLLDIR)\pp.obj \
-$(DLLDIR)\pp_ctl.obj \
-$(DLLDIR)\pp_hot.obj \
-$(DLLDIR)\pp_pack.obj \
-$(DLLDIR)\pp_sort.obj \
-$(DLLDIR)\pp_sys.obj \
-$(DLLDIR)\reentr.obj \
-$(DLLDIR)\regcomp.obj \
-$(DLLDIR)\regexec.obj \
-$(DLLDIR)\run.obj \
-$(DLLDIR)\scope.obj \
-$(DLLDIR)\sv.obj \
-$(DLLDIR)\taint.obj \
-$(DLLDIR)\time64.obj \
-$(DLLDIR)\toke.obj \
-$(DLLDIR)\universal.obj \
-$(DLLDIR)\utf8.obj \
-$(DLLDIR)\util.obj \
-$(DLLDIR)\win32thread.obj \
-$(DLLDIR)\wince.obj \
-$(DLLDIR)\win32io.obj \
-$(DLLDIR)\wincesck.obj \
-$(DLLDIR)\perllib.obj \
-$(DLLDIR)\DynaLoader.obj
-!IF "$(PERL_MALLOC)" == "define"
-XDLLOBJS = $(XDLLOBJS) $(DLLDIR)\malloc.obj
-!ENDIF
-!IF "$(CRYPT_SRC)" != ""
-XDLLOBJS = $(XDLLOBJS) $(DLLDIR)\fcrypt.obj
-!ENDIF
-
-#sanity checks to make sure all our external files (celib, w32console, and
-#MS CE SDK) are locatable
-lib_check :
- @if not exist $(CECONSOLEDIR)\$(MACHINE)\w32console.obj cmd /k \
- "echo w32console.obj doesn't seem to exist, check your w32console directory \
- & exit 1"
- @if not exist $(CELIBDLLDIR)\$(MACHINE)-release\celib.lib cmd /k \
- "echo celib.lib doesn't seem to exist, check your celib directory \
- & exit 1"
- @for %X in ( $(LIBC) ) do @if exist %~^$LIB:X ( exit 0 ) \
- else ( echo $(LIBC) doesn't seem to exist, check your build enviroment & exit 1 )
-
-#specific header files to check picked at random
-header_check :
- @if not exist $(CELIBDLLDIR)\inc\cewin32.h cmd /k \
- "echo cewin32.h doesn't seem to exist, check your celib directory \
- & exit 1"
- @for %X in (ceconfig.h) do @if exist %~^$INCLUDE:X ( exit 0 ) \
- else ( echo ceconfig.h doesn't seem to exist, check your build enviroment & exit 1 )
-
-{$(SRCDIR)}.c{$(DLLDIR)}.obj:
- $(CC) -c $(CFLAGS_O) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ $<
-
-# compiler explains that it will optimize toke.c if we'll give it an
-# option -QMOb<num> with num>=4178
-$(DLLDIR)\toke.obj:
- $(CC) -c $(CFLAGS_O) -QMOb9000 -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ ..\toke.c
-
-{$(SRCDIR)/win32}.c{$(DLLDIR)}.obj:
- $(CC) -c $(CFLAGS_O) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ $<
-
-# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
-# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
-!IF "$(USE_IMP_SYS)" == "define"
-$(DLLDIR)\perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h
- $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c
- rem (frustrated) mv perllib.obj $(DLLDIR)
-!ENDIF
-
-perldll.def : $(HPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl create_perllibst_h.pl .\config.h
- $(HPERL) -I..\lib create_perllibst_h.pl
- $(HPERL) -I..\lib -w ..\makedef.pl PLATFORM=wince $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
- CCTYPE=$(CCTYPE) -DPERL_DLL=$(PERLDLL) TARG_DIR=..\ > perldll.def
-
-$(PERLDLL) : header_check lib_check $(DLLDIR) perldll.def $(XDLLOBJS) $(PERLDLL_RES)
- $(LINK32) -dll -def:perldll.def -base:0x28000000 -out:$@ \
- $(SUBSYS) $(LDLIBPATH) \
- $(LINK_FLAGS) $(LIBFILES) \
- $(XDLLOBJS) $(PERLDLL_RES)
-
-$(DLLDIR) :
- if not exist "$(DLLDIR)" mkdir "$(DLLDIR)"
-
-$(EXTDIR)\DynaLoader\DynaLoader.c :
- $(HPERL) -I..\lib -I. ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --dynaloader
-
-$(DLLDIR)\DynaLoader.obj: $(EXTDIR)\DynaLoader\DynaLoader.c
- $(CC) -c $(CFLAGS_O) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ \
- $(EXTDIR)\DynaLoader\DynaLoader.c
-
-XPERLEXEOBJS = \
-$(MACHINE)\perlmaince.obj
-
-..\lib\buildcustomize.pl :
- $(HPERL) -I..\lib -f ..\write_buildcustomize.pl ..
-
-$(PERLEXE) : $(PERLDLL) $(CONFIGPM) $(XPERLEXEOBJS) $(PERLEXE_RES) $(STARTOBJS)
- $(XCOPY) $(MACHINE)\*.lib $(COREDIR)
- $(LINK32) $(SUBSYS) $(LDLIBPATH) \
- -entry:wWinMainCRTStartup \
- -out:$(MACHINE)\perl.exe \
- -stack:0x100000 $(LINK_FLAGS) $(STARTOBJS) $(XPERLEXEOBJS) \
- $(PERLIMPLIB) $(PERLEXE_RES) $(LIBFILES)
-
-$(MACHINE)\perlmaince.obj : perlmaince.c
- $(CC) $(CFLAGS_O) -UPERLDLL -Fo$(MACHINE)\ -c perlmaince.c
-
-iodll: $(IO_DLL)
-socketdll: $(SOCKET_DLL)
-dumperdll: $(DUMPER_DLL)
-
-dlls: socketdll iodll dumperdll
- -xmkdir -p $(MACHINE)/lib/auto/IO
- copy ../lib/auto/IO/IO.bs $(MACHINE)/lib/auto/IO
- copy ../lib/auto/IO/IO.dll $(MACHINE)/lib/auto/IO
- -xmkdir $(MACHINE)/lib/auto/Socket
- copy ../lib/auto/Socket/Socket.bs $(MACHINE)/lib/auto/Socket
- copy ../lib/auto/Socket/Socket.dll $(MACHINE)/lib/auto/Socket
- -xmkdir -p $(MACHINE)/lib/auto/Data/Dumper
- copy ../lib/auto/Data/Dumper/Dumper.bs $(MACHINE)/lib/auto/Data/Dumper
- copy ../lib/auto/Data/Dumper/Dumper.dll $(MACHINE)/lib/auto/Data/Dumper
-
-makedist: all dlls
- $(COPY) $(CELIBPATH)\celib.dll $(MACHINE)
- copy perl.txt $(MACHINE)
- copy registry.bat $(MACHINE)
- copy ../lib/Config.pm $(MACHINE)/lib
- cd $(MACHINE)
- -@$(DEL) perl-$(MACHINE).tar.gz
- sh -c "tar cf perl-$(MACHINE).tar *.exe *.dll *.txt *.bat lib"
- gzip -9 perl-$(MACHINE).tar
- mv perl-$(MACHINE).tar.gz h:/freenet/new
- cd ..
-
-install: all
- -cemkdir "$(INSTALL_ROOT)"
- -cemkdir "$(INSTALL_ROOT)\bin"
- -cemkdir "$(INSTALL_ROOT)\lib"
- $(CECOPY) "pc:$(MACHINE)/perl.exe" "ce:$(INSTALL_ROOT)/bin"
- $(CECOPY) "pc:$(MACHINE)/perl$(PV).dll" "ce:$(INSTALL_ROOT)/bin"
- $(CECOPY) "pc:../lib/Config.pm" "ce:$(INSTALL_ROOT)/lib"
-
-$(UNIDATAFILES) : $(HPERL) $(CONFIGPM) ..\lib\unicore\mktables MakePPPort
- cd ..\lib\unicore && \
- $(HPERL) -I.. -I..\..\lib mktables -P ..\..\pod -maketest -makelist -p -check $@ $(FIRSTUNIFILE)
-
-dist: all
- $(HPERL) -I..\lib ce-helpers\makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME)
-
-zipdist: all
- $(HPERL) -I..\lib ce-helpers\makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME)
- $(HPERL) -I..\lib ce-helpers\makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME) --zip
-
-zip:
- $(HPERL) -I..\lib ce-helpers\makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME) --zip
-
-hostminiperl: ..\miniperl.exe
-
-..\miniperl.exe:
- set PATH=$(CCHOME)\bin;$(PATH)
- $(MAKE) -f Makefile "CCHOME=$(MSVCDIR)" "CCINCDIR=$(CCHOME)\include" "CCLIBDIR=$(CCHOME)\lib" "INCLUDE=$(CCHOME)\include" "LIB=$(CCHOME)\lib" "LINK_FLAGS=" .\config.h ..\miniperl.exe
-
-host-install:
- perl -MConfig -MExtUtils::Install -we "install({'../lib/CORE', qq#$$Config{installprefixexp}/lib/CORE#},1)"
- perl -MConfig -MExtUtils::Install -we "install({'../lib', qq#$$Config{installprefixexp}/lib#},1)"
- perl -MConfig -MFile::Copy -we "copy qq#./$(MACHINE)/perl$(PV).lib#, qq#$$Config{installprefixexp}/lib/CORE#"
- perl -MConfig -we "system qq#perl -pi.bak -we \"s{((arch^|priv)libexp)='.*'}{\$$1='# . \
- quotemeta($$Config{installprefixexp}) . \
- qq#/lib'}\" $$Config{installprefixexp}/lib/Config.pm#"
diff --git a/gnu/usr.bin/perl/win32/bin/search.pl b/gnu/usr.bin/perl/win32/bin/search.pl
index cd6e6adf5e8..21d936e2563 100644
--- a/gnu/usr.bin/perl/win32/bin/search.pl
+++ b/gnu/usr.bin/perl/win32/bin/search.pl
@@ -1169,7 +1169,7 @@ Note that in the case of these examples, the
(list whole-words only) option would be useful.
.PP
Normally, various kinds of files are automatically removed from consideration.
-If it has has a certain ending (such as ".tar", ".Z", ".o", .etc), or if
+If it has a certain ending (such as ".tar", ".Z", ".o", .etc), or if
the beginning of the file looks like a binary, it'll be excluded.
You can control exactly how this works -- see below. One quick way to
override this is to use the
@@ -1194,7 +1194,7 @@ add
.fi
(among others) to exclude those kinds of files (which you probably want to
skip when searching for text, as is normal).
-Files that look to be be binary will also be excluded.
+Files that look to be binary will also be excluded.
Files ending with "#" and "~" will also be excluded unless the
.B -x~
diff --git a/gnu/usr.bin/perl/win32/ce-helpers/cecopy-lib.pl b/gnu/usr.bin/perl/win32/ce-helpers/cecopy-lib.pl
deleted file mode 100644
index cb68bc7418e..00000000000
--- a/gnu/usr.bin/perl/win32/ce-helpers/cecopy-lib.pl
+++ /dev/null
@@ -1,207 +0,0 @@
-# just copy modules
-# TODO: copy tests and try to run them...
-# this file may be used as example on how to use comp.pl
-
-my @files;
-
-my %dirs;
-sub mk {
- my $r = shift;
- return if exists $dirs{$r};
- if ($r=~/\//) {
- $r=~/^(.*)\/[^\/]*?$/;
- mk($1);
- }
- print STDERR "..\\miniperl.exe -MCross comp.pl --do cemkdir [p]\\lib\\$r\n";
- system("..\\miniperl.exe -I..\\lib -MCross comp.pl --do cemkdir [p]\\lib\\$r");
- $dirs{$r}++;
-}
-for (@files) {
- if (/\//) {
- /^(.*)\/[^\/]*?$/;
- mk($1);
- }
- # currently no stripping POD
- system("..\\miniperl.exe -I..\\lib -MCross comp.pl --copy pc:..\\lib\\$_ ce:[p]\\lib\\$_");
-}
-
-sub BEGIN {
- @files = qw(
- attributes.pm
- AutoLoader.pm
- AutoSplit.pm
- autouse.pm
- base.pm
- Benchmark.pm
- bigint.pm
- bignum.pm
- bigrat.pm
- blib.pm
- bytes.pm
- Carp.pm
- charnames.pm
- _charnames.pm
- Config.pm
- constant.pm
- Cwd.pm
- DB.pm
- diagnostics.pm
- Digest.pm
- DirHandle.pm
- Dumpvalue.pm
- DynaLoader.pm
- English.pm
- Env.pm
- Exporter.pm
- Fatal.pm
- fields.pm
- FileCache.pm
- FileHandle.pm
- filetest.pm
- FindBin.pm
- if.pm
- integer.pm
- less.pm
- locale.pm
- Memoize.pm
- NEXT.pm
- open.pm
- overload.pm
- PerlIO.pm
- re.pm
- SelectSaver.pm
- SelfLoader.pm
- Shell.pm
- sigtrap.pm
- sort.pm
- strict.pm
- subs.pm
- Switch.pm
- Symbol.pm
- Test.pm
- UNIVERSAL.pm
- utf8.pm
- vars.pm
- vmsish.pm
- warnings.pm
- XSLoader.pm
- warnings/register.pm
- Unicode/Collate.pm
- Unicode/UCD.pm
- Time/gmtime.pm
- Time/Local.pm
- Time/localtime.pm
- Time/tm.pm
- Tie/Array.pm
- Tie/File.pm
- Tie/Handle.pm
- Tie/Hash.pm
- Tie/Memoize.pm
- Tie/RefHash.pm
- Tie/Scalar.pm
- Tie/SubstrHash.pm
- Text/Abbrev.pm
- Text/Balanced.pm
- Text/ParseWords.pm
- Text/Soundex.pm
- Text/Tabs.pm
- Text/Wrap.pm
- Test/Builder.pm
- Test/Harness.pm
- Test/More.pm
- Test/Simple.pm
- Test/Harness/Assert.pm
- Test/Harness/Iterator.pm
- Test/Harness/Straps.pm
- Term/ANSIColor.pm
- Term/Cap.pm
- Term/Complete.pm
- Term/ReadLine.pm
- Search/Dict.pm
- Pod/Checker.pm
- Pod/Find.pm
- Pod/Functions.pm
- Pod/Html.pm
- Pod/InputObjects.pm
- Pod/LaTeX.pm
- Pod/Man.pm
- Pod/ParseLink.pm
- Pod/Parser.pm
- Pod/ParseUtils.pm
- Pod/Plainer.pm
- Pod/Select.pm
- Pod/Text.pm
- Pod/Usage.pm
- Pod/Text/Color.pm
- Pod/Text/Overstrike.pm
- Pod/Text/Termcap.pm
- Math/BigFloat.pm
- Math/BigInt.pm
- Math/BigRat.pm
- Math/Complex.pm
- Math/Trig.pm
- Math/BigInt/Calc.pm
- Math/BigInt/Trace.pm
- Math/BigFloat/Trace.pm
- Locale/Constants.pm
- Locale/Country.pm
- Locale/Currency.pm
- Locale/Language.pm
- Locale/Maketext.pm
- Locale/Script.pm
- IPC/Open2.pm
- IPC/Open3.pm
- I18N/Collate.pm
- I18N/LangTags.pm
- I18N/LangTags/List.pm
- Hash/Util.pm
- Getopt/Long.pm
- Getopt/Std.pm
- Filter/Simple.pm
- File/Basename.pm
- File/CheckTree.pm
- File/Compare.pm
- File/Copy.pm
- File/DosGlob.pm
- File/Find.pm
- File/Path.pm
- File/Spec.pm
- File/stat.pm
- File/Temp.pm
- File/Spec/Functions.pm
- File/Spec/Mac.pm
- File/Spec/Unix.pm
- File/Spec/Win32.pm
- ExtUtils/Command.pm
- ExtUtils/Constant.pm
- ExtUtils/Embed.pm
- ExtUtils/Install.pm
- ExtUtils/Installed.pm
- ExtUtils/Liblist.pm
- ExtUtils/MakeMaker.pm
- ExtUtils/Manifest.pm
- ExtUtils/Miniperl.pm
- ExtUtils/Mkbootstrap.pm
- ExtUtils/Mksymlists.pm
- ExtUtils/MM.pm
- ExtUtils/MM_Any.pm
- ExtUtils/MM_DOS.pm
- ExtUtils/MM_Unix.pm
- ExtUtils/MM_UWIN.pm
- ExtUtils/MM_Win32.pm
- ExtUtils/MM_Win95.pm
- ExtUtils/MY.pm
- ExtUtils/Packlist.pm
- ExtUtils/testlib.pm
- ExtUtils/Liblist/Kid.pm
- ExtUtils/Command/MM.pm
- Exporter/Heavy.pm
- Devel/SelfStubber.pm
- Class/Struct.pm
- Carp/Heavy.pm
- Attribute/Handlers.pm
- Attribute/Handlers/demo/Demo.pm
- Attribute/Handlers/demo/Descriptions.pm
- Attribute/Handlers/demo/MyClass.pm
- );
-}
diff --git a/gnu/usr.bin/perl/win32/ce-helpers/comp.pl b/gnu/usr.bin/perl/win32/ce-helpers/comp.pl
deleted file mode 100644
index f19350fc1b1..00000000000
--- a/gnu/usr.bin/perl/win32/ce-helpers/comp.pl
+++ /dev/null
@@ -1,84 +0,0 @@
-=begin comment
-
-helper script to make life for PerlCE easier.
-
-There are different modes for running this script:
- perl comp.pl --run [any-command-line-arguments]
-and
- perl comp.pl --do [any-command-line-arguments]
-and
- perl comp.pl --copy pc:[pc-location] ce:[ce-location]
-
---run executes this build of perl on CE device with arguments provided
---run=test will display a predefined messagebox that say everything is ok.
-
---do Executes on local computer command that is presented by arguments
- immediately following after --do
- Most reason why you may want to execute script in this mode is that
- arguments preprocessed to replace [p] occurrences into current perl
- location. Typically it is handy to run
- perl comp.pl --do cecopy pc:..\lib\Exporter.pm ce:[p]\lib
-
---copy copies file to CE device
- here also [p] will be expanded to current PerlCE path, and additionally
- when --copy=compact specified then, if filename looks like perl module,
- then POD will be stripped away from that file
- modules
-
-
-=cut
-
-use strict;
-use Cross;
-use Config;
-
-# edit value of $inst_root variable to reflect your desired location of
-# built perl
-my $inst_root = $Config{prefix};
-
-my %opts = (
- # %known_opts enumerates allowed opts as well as specifies default and initial values
- my %known_opts = (
- 'do' => '',
- 'run' => '',
- 'copy' => '',
- ),
- #options itself
- my %specified_opts = (
- (map {/^--([\-_\w]+)=(.*)$/} @ARGV), # --opt=smth
- (map {/^no-?(.*)$/i?($1=>0):($_=>1)} map {/^--([\-_\w]+)$/} @ARGV), # --opt --no-opt --noopt
- ),
-);
-die "option '$_' is not recognized" for grep {!exists $known_opts{$_}} keys %specified_opts;
-@ARGV = grep {!/^--/} @ARGV;
-
-if ($opts{'do'}) {
- s/\[p\]/$inst_root/g for @ARGV;
- system(@ARGV);
-}
-elsif ($opts{'run'}) {
- if ($opts{'run'} eq 'test') {
- system("ceexec","$inst_root\\bin\\perl","-we","Win32::MessageBox(\$].qq(\n).join'','cc'..'dx')");
- }
- else {
- system("ceexec","$inst_root\\bin\\perl", map {/^".*"$/s?$_:"\"$_\""} @ARGV);
- }
-}
-elsif ($opts{'copy'}) {
- if ($opts{'copy'} eq 'compact') {
- die "todo";
- }
- s/\[p\]/$inst_root/g for @ARGV;
- if ($ARGV[0]=~/^pc:/i) {system("cedel",$ARGV[1])}
- system("cecopy",@ARGV);
-}
-else {
- # todo
-}
-
-
-=head1 AUTHOR
-
- Vadim Konovalov.
-
-=cut
diff --git a/gnu/usr.bin/perl/win32/ce-helpers/compile-all.bat b/gnu/usr.bin/perl/win32/ce-helpers/compile-all.bat
deleted file mode 100644
index c546bb201eb..00000000000
--- a/gnu/usr.bin/perl/win32/ce-helpers/compile-all.bat
+++ /dev/null
@@ -1,62 +0,0 @@
-@echo off
-rem
-rem Normally you do not need to run this file.
-rem Instead you should edit and execute compile.bat .
-rem
-rem This file assumes that you have a set of appropriate
-rem bat-files that prepare environment variables for build process
-rem and execute commands passed as arguments
-rem
-
-call wcearm-300 compile.bat "MACHINE=wince-arm-hpc-wce300"
-call wcearm-300 compile.bat "MACHINE=wince-arm-hpc-wce300" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call wcearm-211 compile.bat "MACHINE=wince-arm-hpc-wce211"
-call wcearm-211 compile.bat "MACHINE=wince-arm-hpc-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call wcesh3-211 compile.bat "MACHINE=wince-sh3-hpc-wce211"
-call wcesh3-211 compile.bat "MACHINE=wince-sh3-hpc-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call wcemips-211 compile.bat "MACHINE=wince-mips-hpc-wce211"
-call wcemips-211 compile.bat "MACHINE=wince-mips-hpc-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
-rem TODO call wcesh3-200 compile.bat "MACHINE=wince-sh3-hpc-wce200"
-rem TODO call wcesh3-200 compile.bat "MACHINE=wince-sh3-hpc-wce200" zipdist
-rem TODO ..\miniperl makedist.pl --clean-exts
-
-rem TODO call compile.bat "MACHINE=wince-mips-hpc-wce200"
-rem TODO call compile.bat "MACHINE=wince-mips-hpc-wce200" zipdist
-rem TODO ..\miniperl makedist.pl --clean-exts
-
-call WCEARM-p300 compile.bat "MACHINE=wince-arm-pocket-wce300"
-call WCEARM-p300 compile.bat "MACHINE=wince-arm-pocket-wce300" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCEMIPS-300 compile.bat "MACHINE=wince-mips-pocket-wce300"
-call WCEMIPS-300 compile.bat "MACHINE=wince-mips-pocket-wce300" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCESH3-300 compile.bat "MACHINE=wince-sh3-pocket-wce300"
-call WCESH3-300 compile.bat "MACHINE=wince-sh3-pocket-wce300" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCEx86-300 compile.bat "MACHINE=wince-x86em-pocket-wce300"
-call WCEx86-300 compile.bat "MACHINE=wince-x86em-pocket-wce300" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCEMIPS-palm211 compile.bat "MACHINE=wince-mips-palm-wce211"
-call WCEMIPS-palm211 compile.bat "MACHINE=wince-mips-palm-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCESH3-palm211 compile.bat "MACHINE=wince-sh3-palm-wce211"
-call WCESH3-palm211 compile.bat "MACHINE=wince-sh3-palm-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
-call WCEx86-palm211 compile.bat "MACHINE=wince-x86em-palm-wce211"
-call WCEx86-palm211 compile.bat "MACHINE=wince-x86em-palm-wce211" zipdist
-..\miniperl makedist.pl --clean-exts
-
diff --git a/gnu/usr.bin/perl/win32/ce-helpers/compile.bat b/gnu/usr.bin/perl/win32/ce-helpers/compile.bat
deleted file mode 100644
index 79ed2fb80ce..00000000000
--- a/gnu/usr.bin/perl/win32/ce-helpers/compile.bat
+++ /dev/null
@@ -1,42 +0,0 @@
-@echo off
-rem
-rem edit ARG-xxx variable to reflect your system and run
-rem compile.bat [target] [additional parameters for nmake]
-rem
-
-set ARG-1=PV=
-set ARG-2=INST_VER=
-set ARG-3=INSTALL_ROOT=\Storage Card\perl58m
-set ARG-4=WCEROOT=%SDKROOT%
-set ARG-5=CEPATH=%WCEROOT%
-set ARG-6=CELIBDLLDIR=d:\personal\pocketPC\celib-palm-3.0
-set ARG-7=CECONSOLEDIR=d:\personal\pocketPC\w32console
-
-rem Only for WIN2000
-set ARG-8=YES=/y
-
-set ARG-9=CFG=RELEASE
-
-rem
-rem uncomment one of following lines that matches your configuration
-
-rem set ARG-10=MACHINE=wince-mips-pocket-wce300
-rem set ARG-10=MACHINE=wince-arm-hpc-wce300
-rem set ARG-10=MACHINE=wince-arm-hpc-wce211
-rem set ARG-10=MACHINE=wince-sh3-hpc-wce211
-rem set ARG-10=MACHINE=wince-mips-hpc-wce211
-rem set ARG-10=MACHINE=wince-sh3-hpc-wce200
-rem set ARG-10=MACHINE=wince-mips-hpc-wce200
-rem set ARG-10=MACHINE=wince-arm-pocket-wce300
-rem set ARG-10=MACHINE=wince-mips-pocket-wce300
-rem set ARG-10=MACHINE=wince-sh3-pocket-wce300
-rem set ARG-10=MACHINE=wince-x86em-pocket-wce300
-rem set ARG-10=MACHINE=wince-mips-palm-wce211
-rem set ARG-10=MACHINE=wince-sh3-palm-wce211
-rem set ARG-10=MACHINE=wince-x86em-palm-wce211
-
-set ARG-11=PERLCEDIR=$(MAKEDIR)
-set ARG-12=MSVCDIR=D:\MSVStudio\VC98
-set ARG-13=CECOPY=$(HPERL) -I$(PERLCEDIR)\lib $(PERLCEDIR)\comp.pl --copy
-
-nmake -f Makefile.ce "%ARG-1%" "%ARG-2%" "%ARG-3%" "%ARG-4%" "%ARG-5%" "%ARG-6%" "%ARG-7%" "%ARG-8%" "%ARG-9%" "%ARG-10%" "%ARG-11%" "%ARG-12%" "%ARG-13%" %1 %2 %3 %4 %5 %6 %7 %8 %9
diff --git a/gnu/usr.bin/perl/win32/ce-helpers/makedist.pl b/gnu/usr.bin/perl/win32/ce-helpers/makedist.pl
deleted file mode 100644
index daf4f3e96c4..00000000000
--- a/gnu/usr.bin/perl/win32/ce-helpers/makedist.pl
+++ /dev/null
@@ -1,297 +0,0 @@
-use strict;
-use Cwd;
-use File::Path;
-use File::Find;
-
-my %opts = (
- #defaults
- 'verbose' => 1, # verbose level, in range from 0 to 2
- 'distdir' => 'distdir',
- 'unicode' => 1, # include unicode by default
- 'minimal' => 0, # minimal possible distribution.
- # actually this is just perl.exe and perlXX.dll
- # but can be extended by additional exts
- # ... (as soon as this will be implemented :)
- 'cross-name' => 'wince',
- 'strip-pod' => 0, # strip POD from perl modules
- 'adaptation' => 1, # do some adaptation, such as stripping such
- # occurrences as "if ($^O eq 'VMS'){...}" for Dynaloader.pm
- 'zip' => 0, # perform zip
- 'clean-exts' => 0,
- #options itself
- (map {/^--([\-_\w]+)=(.*)$/} @ARGV), # --opt=smth
- (map {/^no-?(.*)$/i?($1=>0):($_=>1)} map {/^--([\-_\w]+)$/} @ARGV), # --opt --no-opt --noopt
- );
-
-# TODO
-# -- error checking. When something goes wrong, just exit with rc!=0
-# -- may be '--zip' option should be made differently?
-
-my $cwd = cwd;
-
-if ($opts{'clean-exts'}) {
- # unfortunately, unlike perl58.dll and like, extensions for different
- # platforms are built in same directory, therefore we must be able to clean
- # them often
- unlink '../config.sh'; # delete cache config file, which remembers our previous config
- chdir '../ext';
- find({no_chdir=>1,wanted => sub{
- unlink if /((?:\.obj|\/makefile|\/errno\.pm))$/i;
- }
- },'.');
- exit;
-}
-
-# zip
-if ($opts{'zip'}) {
- if ($opts{'verbose'} >=1) {
- print STDERR "zipping...\n";
- }
- chdir $opts{'distdir'};
- unlink <*.zip>;
- `zip -R perl-$opts{'cross-name'} *`;
- exit;
-}
-
-my (%libexclusions, %extexclusions);
-my @lfiles;
-sub copy($$);
-
-# lib
-chdir '../lib';
-find({no_chdir=>1,wanted=>sub{push @lfiles, $_ if /\.p[lm]$/}},'.');
-chdir $cwd;
-# exclusions
-@lfiles = grep {!exists $libexclusions{$_}} @lfiles;
-#inclusions
-#...
-#copy them
-if ($opts{'verbose'} >=1) {
- print STDERR "Copying perl lib files...\n";
-}
-for (@lfiles) {
- /^(.*)\/[^\/]+$/;
- mkpath "$opts{distdir}/lib/$1";
- copy "../lib/$_", "$opts{distdir}/lib/$_";
-}
-
-#ext
-my @efiles;
-chdir '../ext';
-find({no_chdir=>1,wanted=>sub{push @efiles, $_ if /\.pm$/}},'.');
-chdir $cwd;
-# exclusions
-#...
-#inclusions
-#...
-#copy them
-#{s[/(\w+)/\1\.pm][/$1.pm]} @efiles;
-if ($opts{'verbose'} >=1) {
- print STDERR "Copying perl core extensions...\n";
-}
-for (@efiles) {
- if (m#^.*?/lib/(.*)$#) {
- copy "../ext/$_", "$opts{distdir}/lib/$1";
- }
- else {
- /^(.*)\/([^\/]+)\/([^\/]+)$/;
- copy "../ext/$_", "$opts{distdir}/lib/$1/$3";
- }
-}
-my ($dynaloader_pm);
-if ($opts{adaptation}) {
- # let's copy our Dynaloader.pm (make this optional?)
- open my $fhdyna, '>', "$opts{distdir}/lib/Dynaloader.pm";
- print $fhdyna $dynaloader_pm;
- close $fhdyna;
-}
-
-# Config.pm, perl binaries
-if ($opts{'verbose'} >=1) {
- print STDERR "Copying Config.pm, perl.dll and perl.exe...\n";
-}
-copy "../lib/Config.pm", "$opts{distdir}/lib/Config.pm";
-copy "$opts{'cross-name'}/perl.exe", "$opts{distdir}/bin/perl.exe";
-copy "$opts{'cross-name'}/perl.dll", "$opts{distdir}/bin/perl.dll";
-# how do we know exact name of perl.dll?
-
-# auto
-my %aexcl = (socket=>'Socket_1');
-# Socket.dll and may be some other conflict with same file in \windows dir
-# on WinCE, %aexcl needed to replace it with a different name that however
-# will be found by Dynaloader
-my @afiles;
-chdir "../lib/auto";
-find({no_chdir=>1,wanted=>sub{push @afiles, $_ if /\.(dll|bs)$/}},'.');
-chdir $cwd;
-if ($opts{'verbose'} >=1) {
- print STDERR "Copying binaries for perl core extensions...\n";
-}
-for (@afiles) {
- if (/^(.*)\/(\w+)\.dll$/i && exists $aexcl{lc($2)}) {
- copy "../lib/auto/$_", "$opts{distdir}/lib/auto/$1/$aexcl{lc($2)}.dll";
- }
- else {
- copy "../lib/auto/$_", "$opts{distdir}/lib/auto/$_";
- }
-}
-
-sub copy($$) {
- my ($fnfrom, $fnto) = @_;
- open my $fh, '<', $fnfrom or die "can not open $fnfrom: $!";
- binmode $fh;
- local $/;
- my $ffrom = <$fh>;
- if ($opts{'strip-pod'}) {
- # actually following regexp is suspicious to not work everywhere.
- # but we've checked on our set of modules, and it's fit for our purposes
- $ffrom =~ s/^=\w+.*?^=cut(?:\n|\Z)//msg;
- unless ($ffrom=~/\bAutoLoader\b/) {
- # this logic actually strip less than could be stripped, but we're
- # not risky. Just strip only of no mention of AutoLoader
- $ffrom =~ s/^__END__.*\Z//msg;
- }
- }
- mkpath $1 if $fnto=~/^(.*)\/([^\/]+)$/;
- open my $fhout, '>', $fnto;
- binmode $fhout;
- print $fhout $ffrom;
- if ($opts{'verbose'} >=2) {
- print STDERR "copying $fnfrom=>$fnto\n";
- }
-}
-
-BEGIN {
-%libexclusions = map {$_=>1} split/\s/, <<"EOS";
-abbrev.pl bigfloat.pl bigint.pl bigrat.pl cacheout.pl complete.pl ctime.pl
-dotsh.pl exceptions.pl fastcwd.pl flush.pl ftp.pl getcwd.pl getopt.pl
-getopts.pl hostname.pl look.pl newgetopt.pl pwd.pl termcap.pl
-EOS
-%extexclusions = map {$_=>1} split/\s/, <<"EOS";
-EOS
-$dynaloader_pm=<<'EOS';
-# This module designed *only* for WinCE
-# if you encounter a problem with this file, try using original Dynaloader.pm
-# from perl distribution, it's larger but essentially the same.
-package DynaLoader;
-our $VERSION = 1.04;
-
-$dl_debug ||= 0;
-
-@dl_require_symbols = (); # names of symbols we need
-
-#@dl_librefs = (); # things we have loaded
-#@dl_modules = (); # Modules we have loaded
-
-boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) && !defined(&dl_error);
-
-print STDERR "DynaLoader not linked into this perl\n"
- unless defined(&boot_DynaLoader);
-
-1; # End of main code
-
-sub croak{require Carp;Carp::croak(@_)}
-sub bootstrap_inherit {
- my $module = $_[0];
- local *isa = *{"$module\::ISA"};
- local @isa = (@isa, 'DynaLoader');
- bootstrap(@_);
-}
-sub bootstrap {
- # use local vars to enable $module.bs script to edit values
- local(@args) = @_;
- local($module) = $args[0];
- local(@dirs, $file);
-
- unless ($module) {
- require Carp;
- Carp::confess("Usage: DynaLoader::bootstrap(module)");
- }
-
- croak("Can't load module $module, dynamic loading not available in this perl.\n")
- unless defined(&dl_load_file);
-
- my @modparts = split(/::/,$module);
- my $modfname = $modparts[-1];
- my $modpname = join('/',@modparts);
-
- for (@INC) {
- my $dir = "$_/auto/$modpname";
- next unless -d $dir;
- my $try = "$dir/$modfname.dll";
- last if $file = ( (-f $try) && $try);
-
- $try = "$dir/${modfname}_1.dll";
- last if $file = ( (-f $try) && $try);
- push @dirs, $dir;
- }
- $file = dl_findfile(map("-L$_",@dirs,@INC), $modfname) unless $file;
-
- croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)")
- unless $file;
-
- (my $bootname = "boot_$module") =~ s/\W/_/g;
- @dl_require_symbols = ($bootname);
-
- # optional '.bootstrap' perl script
- my $bs = $file;
- $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/;
- if (-s $bs) { # only read file if it's not empty
- local @INC = ('.');
- do $bs;
- warn "$bs: $@\n" if $@;
- }
-
- my $libref = dl_load_file($file, 0) or
- croak("Can't load '$file' for module $module: ".dl_error());
-
- push(@dl_librefs,$libref); # record loaded object
-
- my @unresolved = dl_undef_symbols();
- if (@unresolved) {
- require Carp;
- Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
- }
-
- my $boot_symbol_ref = dl_find_symbol($libref, $bootname) or
- croak("Can't find '$bootname' symbol in $file\n");
-
- push(@dl_modules, $module);
-
- boot:
- my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
- &$xs(@args);
-}
-
-sub dl_findfile {
- my (@args) = @_;
- my (@dirs, $dir);
- my (@found);
-
- arg: foreach(@args) {
- if (m:/: && -f $_) {
- push(@found,$_);
- last arg unless wantarray;
- next;
- }
-
- if (s:^-L::) {push(@dirs, $_); next;}
- if (m:/: && -d $_) {push(@dirs, $_); next;}
-
- for $dir (@dirs) {
- next unless -d $dir;
- for my $name (/\.dll$/i?($_):("$_.dll",$_)) {
- print STDERR " checking in $dir for $name\n" if $dl_debug;
- if (-f "$dir/$name") {
- push(@found, "$dir/$name");
- next arg;
- }
- }
- }
- }
- return $found[0] unless wantarray;
- @found;
-}
-EOS
-}
-
diff --git a/gnu/usr.bin/perl/win32/ce-helpers/registry.bat b/gnu/usr.bin/perl/win32/ce-helpers/registry.bat
deleted file mode 100644
index 0fd58c3d3c4..00000000000
--- a/gnu/usr.bin/perl/win32/ce-helpers/registry.bat
+++ /dev/null
@@ -1,28 +0,0 @@
-@echo off
-
-::- This script must be executed on the PC with an ActiveSync
-::- connection. If it does not work, create the entries with
-::- a remote registry editor or get a registry editor for your
-::- devices.
-::-
-::- You need my cereg.exe program.
-
-::- My paths...
-set perlexe=\speicherkarte2\bin\perl.exe
-set perllib=\speicherkarte2\usr\lib\perl5
-
-::- PERL5LIB
-cereg -k "HKLM\Environment" -n "PERL5LIB" -v "%perllib%"
-
-::- For ShellExecute
-cereg -k "HKCR\.pl" -n "" -v "perlfile"
-cereg -k "HKCR\perlfile" -n "" -v "Perl Script"
-cereg -k "HKCR\perlfile\DefaultIcon" -n "" -v "%perlexe%,-1"
-
-::- You might need to fix the quotes if your paths contain spaces!
-cereg -k "HKCR\perlfile\Shell\open\command" -n "" -v "%perlexe% %%1"
-
-cereg -k "HKLM\Environment" -n "ROWS" -v "10"
-cereg -k "HKLM\Environment" -n "COLS" -v "75"
-cereg -k "HKLM\Environment" -n "PATH" -v "/Speicherkarte2/bin"
-cereg -k "HKLM\Environment" -n "UNIXROOTDIR" -v "/Speicherkarte2"
diff --git a/gnu/usr.bin/perl/win32/ce-helpers/sdsdkenv.bat b/gnu/usr.bin/perl/win32/ce-helpers/sdsdkenv.bat
deleted file mode 100644
index fe72309a763..00000000000
--- a/gnu/usr.bin/perl/win32/ce-helpers/sdsdkenv.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-set INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\include;C:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\PocketPC2003\Include
-set LIB=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\lib\armv4;C:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\PocketPC2003\Lib\armv4
-set PATH=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\bin\x86_arm;%PATH%
diff --git a/gnu/usr.bin/perl/win32/config.ce b/gnu/usr.bin/perl/win32/config.ce
deleted file mode 100644
index 2f2d67c2313..00000000000
--- a/gnu/usr.bin/perl/win32/config.ce
+++ /dev/null
@@ -1,1137 +0,0 @@
-## Configured by: ~cf_email~
-## Target system: WINCE
-Author=''
-Date='$Date'
-Header=''
-Id='$Id'
-Locker=''
-Log='$Log'
-Mcc='Mcc'
-RCSfile='$RCSfile'
-Revision='$Revision'
-Source=''
-State=''
-_a='.lib' # keep this for WinCE, as it is used by some mods...
-_exe='.exe'
-_o='.obj'
-afs='false'
-alignbytes='8'
-aphostname=''
-api_revision='~PERL_API_REVISION~'
-api_subversion='~PERL_API_SUBVERSION~'
-api_version='~PERL_API_VERSION~'
-api_versionstring='~PERL_API_REVISION~.~PERL_API_VERSION~.~PERL_API_SUBVERSION~'
-ar='lib'
-archlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-archlibexp='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-archname64=''
-archname='wince'
-archobjs=''
-asctime_r_proto='0'
-awk='awk'
-baserev='5'
-bash=''
-bin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-binexp='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-bison=''
-bootstrap_charset='undef'
-byacc='byacc'
-byteorder='1234'
-c=''
-castflags='0'
-cat='type'
-cc='~cc~'
-cccdlflags=' '
-ccdlflags=' '
-ccflags='-DWIN32'
-ccsymbols=''
-cf_by='nobody'
-cf_email='nobody@no.where.net'
-cf_time=''
-charbits='8'
-chgrp=''
-chmod=''
-chown=''
-clocktype='clock_t'
-comm=''
-compress=''
-contains='grep'
-cp='copy'
-cpio=''
-cpp='~cc~ -nologo -E'
-cpp_stuff='42'
-cppccsymbols=''
-cppflags='-DWIN32'
-cpplast=''
-cppminus=''
-cpprun='~cc~ -nologo -E'
-cppstdin='~cc~ -nologo -E'
-cppsymbols=''
-crosscompile='undef'
-crypt_r_proto='0'
-cryptlib=''
-csh='undef'
-ctermid_r_proto='0'
-ctime_r_proto='0'
-d_Gconvert='sprintf((b),"%.*g",(n),(x))'
-d_PRIEldbl='undef'
-d_PRIFldbl='undef'
-d_PRIGldbl='undef'
-d_PRIX64='undef'
-d_PRId64='undef'
-d_PRIeldbl='undef'
-d_PRIfldbl='undef'
-d_PRIgldbl='undef'
-d_PRIi64='undef'
-d_PRIo64='undef'
-d_PRIu64='undef'
-d_PRIx64='undef'
-d_SCNfldbl='undef'
-d__fwalk='undef'
-d_accept4='undef'
-d_access='define'
-d_accessx='undef'
-d_acosh='undef'
-d_aintl='undef'
-d_alarm='undef'
-d_archlib='define'
-d_asctime64='undef'
-d_asctime_r='undef'
-d_asinh='undef'
-d_atanh='undef'
-d_atolf='undef'
-d_atoll='undef'
-d_attribute_deprecated='undef'
-d_attribute_format='undef'
-d_attribute_malloc='undef'
-d_attribute_nonnull='undef'
-d_attribute_noreturn='undef'
-d_attribute_pure='undef'
-d_attribute_unused='undef'
-d_attribute_warn_unused_result='undef'
-d_backtrace='undef'
-d_bsd='define'
-d_bsdgetpgrp='undef'
-d_bsdsetpgrp='undef'
-d_builtin_add_overflow='undef'
-d_builtin_choose_expr='undef'
-d_builtin_expect='undef'
-d_builtin_mul_overflow='undef'
-d_builtin_sub_overflow='undef'
-d_c99_variadic_macros='undef'
-d_casti32='undef'
-d_castneg='define'
-d_cbrt='undef'
-d_chown='undef'
-d_chroot='undef'
-d_chsize='define'
-d_class='undef'
-d_clearenv='undef'
-d_closedir='define'
-d_cmsghdr_s='undef'
-d_copysign='undef'
-d_copysignl='undef'
-d_cplusplus='undef'
-d_crypt='undef'
-d_crypt_r='undef'
-d_csh='undef'
-d_ctermid='undef'
-d_ctermid_r='undef'
-d_ctime64='undef'
-d_ctime_r='undef'
-d_cuserid='undef'
-d_dbl_dig='define'
-d_dbminitproto='undef'
-d_difftime64='undef'
-d_difftime='define'
-d_dir_dd_fd='undef'
-d_dirfd='undef'
-d_dirnamlen='define'
-d_dladdr='undef'
-d_dlerror='define'
-d_dlopen='define'
-d_dlsymun='undef'
-d_dosuid='undef'
-d_double_has_inf='define'
-d_double_has_nan='define'
-d_double_has_negative_zero='define'
-d_double_has_subnormals='define'
-d_double_style_cray='undef'
-d_double_style_ibm='undef'
-d_double_style_ieee='define'
-d_double_style_vax='undef'
-d_drand48_r='undef'
-d_drand48proto='undef'
-d_dup2='define'
-d_dup3='undef'
-d_duplocale='undef'
-d_eaccess='undef'
-d_endgrent='undef'
-d_endgrent_r='undef'
-d_endhent='undef'
-d_endhostent_r='undef'
-d_endnent='undef'
-d_endnetent_r='undef'
-d_endpent='undef'
-d_endprotoent_r='undef'
-d_endpwent='undef'
-d_endpwent_r='undef'
-d_endsent='undef'
-d_endservent_r='undef'
-d_endspent='undef'
-d_eofnblk='define'
-d_erf='undef'
-d_erfc='undef'
-d_eunice='undef'
-d_exp2='undef'
-d_expm1='undef'
-d_faststdio='undef'
-d_fchdir='undef'
-d_fchmod='undef'
-d_fchmodat='undef'
-d_fchown='undef'
-d_fcntl='undef'
-d_fcntl_can_lock='undef'
-d_fd_macros='define'
-d_fd_set='define'
-d_fdclose='undef'
-d_fdim='undef'
-d_fds_bits='define'
-d_fegetround='undef'
-d_fgetpos='define'
-d_finite='undef'
-d_finitel='undef'
-d_flexfnam='define'
-d_flock='undef'
-d_flockproto='undef'
-d_fma='undef'
-d_fmax='undef'
-d_fmin='undef'
-d_fork='undef'
-d_fp_class='undef'
-d_fp_classify='undef'
-d_fp_classl='undef'
-d_fpathconf='undef'
-d_fpclass='undef'
-d_fpclassify='undef'
-d_fpclassl='undef'
-d_fpgetround='undef'
-d_fpos64_t='undef'
-d_freelocale='undef'
-d_frexpl='undef'
-d_fs_data_s='undef'
-d_fseeko='undef'
-d_fsetpos='define'
-d_fstatfs='undef'
-d_fstatvfs='undef'
-d_fsync='undef'
-d_ftello='undef'
-d_ftime='define'
-d_futimes='undef'
-d_gai_strerror='undef'
-d_gdbm_ndbm_h_uses_prototypes='undef'
-d_gdbmndbm_h_uses_prototypes='undef'
-d_getaddrinfo='undef'
-d_getcwd='define'
-d_getespwnam='undef'
-d_getfsstat='undef'
-d_getgrent='undef'
-d_getgrent_r='undef'
-d_getgrgid_r='undef'
-d_getgrnam_r='undef'
-d_getgrps='undef'
-d_gethbyaddr='define'
-d_gethbyname='define'
-d_gethent='undef'
-d_gethname='define'
-d_gethostbyaddr_r='undef'
-d_gethostbyname_r='undef'
-d_gethostent_r='undef'
-d_gethostprotos='define'
-d_getitimer='undef'
-d_getlogin='define'
-d_getlogin_r='undef'
-d_getmnt='undef'
-d_getmntent='undef'
-d_getnameinfo='undef'
-d_getnbyaddr='undef'
-d_getnbyname='undef'
-d_getnent='undef'
-d_getnetbyaddr_r='undef'
-d_getnetbyname_r='undef'
-d_getnetent_r='undef'
-d_getnetprotos='undef'
-d_getpagsz='undef'
-d_getpbyname='define'
-d_getpbynumber='define'
-d_getpent='undef'
-d_getpgid='undef'
-d_getpgrp2='undef'
-d_getpgrp='undef'
-d_getppid='undef'
-d_getprior='undef'
-d_getprotobyname_r='undef'
-d_getprotobynumber_r='undef'
-d_getprotoent_r='undef'
-d_getprotoprotos='define'
-d_getprpwnam='undef'
-d_getpwent='undef'
-d_getpwent_r='undef'
-d_getpwnam_r='undef'
-d_getpwuid_r='undef'
-d_getsbyname='define'
-d_getsbyport='define'
-d_getsent='undef'
-d_getservbyname_r='undef'
-d_getservbyport_r='undef'
-d_getservent_r='undef'
-d_getservprotos='define'
-d_getspent='undef'
-d_getspnam='undef'
-d_getspnam_r='undef'
-d_gettimeod='undef'
-d_gmtime64='undef'
-d_gmtime_r='undef'
-d_gnulibc='undef'
-d_grpasswd='undef'
-d_has_C_UTF8='undef'
-d_hasmntopt='undef'
-d_htonl='define'
-d_hypot='undef'
-d_ilogb='undef'
-d_ilogbl='undef'
-d_inc_version_list='undef'
-d_index='undef'
-d_inetaton='undef'
-d_inetntop='undef'
-d_inetpton='undef'
-d_int64_t='undef'
-d_ip_mreq='undef'
-d_ip_mreq_source='undef'
-d_ipv6_mreq='undef'
-d_ipv6_mreq_source='undef'
-d_isascii='define'
-d_isblank='undef'
-d_isfinite='undef'
-d_isfinitel='undef'
-d_isinf='undef'
-d_isinfl='undef'
-d_isless='undef'
-d_isnan='define'
-d_isnanl='undef'
-d_isnormal='undef'
-d_j0='undef'
-d_j0l='undef'
-d_killpg='undef'
-d_lc_monetary_2008='undef'
-d_lchown='undef'
-d_ldbl_dig='define'
-d_ldexpl='undef'
-d_lgamma='undef'
-d_lgamma_r='undef'
-d_libm_lib_version='undef'
-d_link='define'
-d_linkat='undef'
-d_llrint='undef'
-d_llrintl='undef'
-d_llround='undef'
-d_llroundl='undef'
-d_localeconv_l='undef'
-d_localtime64='undef'
-d_localtime_r='undef'
-d_localtime_r_needs_tzset='undef'
-d_locconv='undef'
-d_lockf='undef'
-d_log1p='undef'
-d_log2='undef'
-d_logb='undef'
-d_long_double_style_ieee='undef'
-d_long_double_style_ieee_doubledouble='undef'
-d_long_double_style_ieee_extended='undef'
-d_long_double_style_ieee_std='undef'
-d_long_double_style_vax='undef'
-d_longdbl='undef'
-d_longlong='undef'
-d_lrint='undef'
-d_lrintl='undef'
-d_lround='undef'
-d_lroundl='undef'
-d_lseekproto='define'
-d_lstat='undef'
-d_madvise='undef'
-d_malloc_good_size='undef'
-d_malloc_size='undef'
-d_mblen='define'
-d_mbrlen='undef'
-d_mbrtowc='undef'
-d_mbstowcs='define'
-d_mbtowc='define'
-d_memmem='undef'
-d_memrchr='undef'
-d_mkdir='define'
-d_mkdtemp='undef'
-d_mkfifo='undef'
-d_mkostemp='undef'
-d_mkstemp='undef'
-d_mkstemps='undef'
-d_mktime64='undef'
-d_mktime='define'
-d_mmap='undef'
-d_modfl='undef'
-d_modfl_pow32_bug='undef'
-d_modflproto='undef'
-d_mprotect='undef'
-d_msg='undef'
-d_msg_ctrunc='undef'
-d_msg_dontroute='undef'
-d_msg_oob='undef'
-d_msg_peek='undef'
-d_msg_proxy='undef'
-d_msgctl='undef'
-d_msgget='undef'
-d_msghdr_s='undef'
-d_msgrcv='undef'
-d_msgsnd='undef'
-d_msync='undef'
-d_munmap='undef'
-d_mymalloc='~PERL_MALLOC~'
-d_nan='undef'
-d_nanosleep='undef'
-d_ndbm_h_uses_prototypes='undef'
-d_nearbyint='undef'
-d_newlocale='undef'
-d_nextafter='undef'
-d_nexttoward='undef'
-d_nice='undef'
-d_nl_langinfo='undef'
-d_nv_preserves_uv='define'
-d_nv_zero_is_allbits_zero='undef'
-d_off64_t='undef'
-d_old_pthread_create_joinable='undef'
-d_oldpthreads='undef'
-d_oldsock='undef'
-d_open3='undef'
-d_openat='undef'
-d_pathconf='undef'
-d_pause='define'
-d_perl_otherlibdirs='undef'
-d_phostname='undef'
-d_pipe2='undef'
-d_pipe='undef'
-d_poll='undef'
-d_portable='define'
-d_prctl='undef'
-d_prctl_set_name='undef'
-d_printf_format_null='undef'
-d_procselfexe='undef'
-d_pseudofork='undef'
-d_pthread_atfork='undef'
-d_pthread_attr_setscope='undef'
-d_pthread_yield='undef'
-d_ptrdiff_t='define'
-d_pwage='undef'
-d_pwchange='undef'
-d_pwclass='undef'
-d_pwcomment='undef'
-d_pwexpire='undef'
-d_pwgecos='undef'
-d_pwpasswd='undef'
-d_pwquota='undef'
-d_qgcvt='undef'
-d_quad='undef'
-d_querylocale='undef'
-d_random_r='undef'
-d_readdir64_r='undef'
-d_readdir='define'
-d_readdir_r='undef'
-d_readlink='undef'
-d_readv='undef'
-d_recvmsg='undef'
-d_regcomp='undef'
-d_remainder='undef'
-d_remquo='undef'
-d_rename='define'
-d_renameat='undef'
-d_rewinddir='define'
-d_rint='undef'
-d_rmdir='define'
-d_round='undef'
-d_sbrkproto='undef'
-d_scalbn='undef'
-d_scalbnl='undef'
-d_sched_yield='undef'
-d_scm_rights='undef'
-d_seekdir='define'
-d_select='define'
-d_sem='undef'
-d_semctl='undef'
-d_semctl_semid_ds='undef'
-d_semctl_semun='undef'
-d_semget='undef'
-d_semop='undef'
-d_sendmsg='undef'
-d_setegid='undef'
-d_seteuid='undef'
-d_setgrent='undef'
-d_setgrent_r='undef'
-d_setgrps='undef'
-d_sethent='undef'
-d_sethostent_r='undef'
-d_setitimer='undef'
-d_setlinebuf='undef'
-d_setlocale='define'
-d_setlocale_accepts_any_locale_name='undef'
-d_setlocale_r='undef'
-d_setnent='undef'
-d_setnetent_r='undef'
-d_setpent='undef'
-d_setpgid='undef'
-d_setpgrp2='undef'
-d_setpgrp='undef'
-d_setprior='undef'
-d_setproctitle='undef'
-d_setprotoent_r='undef'
-d_setpwent='undef'
-d_setpwent_r='undef'
-d_setregid='undef'
-d_setresgid='undef'
-d_setresuid='undef'
-d_setreuid='undef'
-d_setrgid='undef'
-d_setruid='undef'
-d_setsent='undef'
-d_setservent_r='undef'
-d_setsid='undef'
-d_setspent='undef'
-d_setvbuf='undef'
-d_shm='undef'
-d_shmat='undef'
-d_shmatprototype='undef'
-d_shmctl='undef'
-d_shmdt='undef'
-d_shmget='undef'
-d_sigaction='undef'
-d_siginfo_si_addr='undef'
-d_siginfo_si_band='undef'
-d_siginfo_si_errno='undef'
-d_siginfo_si_pid='undef'
-d_siginfo_si_status='undef'
-d_siginfo_si_uid='undef'
-d_siginfo_si_value='undef'
-d_signbit='undef'
-d_sigprocmask='undef'
-d_sigsetjmp='undef'
-d_sin6_scope_id='undef'
-d_sitearch='define'
-d_snprintf='undef'
-d_sockaddr_in6='undef'
-d_sockaddr_sa_len='undef'
-d_sockatmark='undef'
-d_sockatmarkproto='undef'
-d_socket='define'
-d_socklen_t='undef'
-d_sockpair='undef'
-d_socks5_init='undef'
-d_sqrtl='undef'
-d_srand48_r='undef'
-d_srandom_r='undef'
-d_sresgproto='undef'
-d_sresuproto='undef'
-d_stat='define'
-d_statblks='undef'
-d_statfs_f_flags='undef'
-d_statfs_s='undef'
-d_static_inline='undef'
-d_statvfs='undef'
-d_stdio_cnt_lval='undef'
-d_stdio_ptr_lval='undef'
-d_stdio_ptr_lval_nochange_cnt='undef'
-d_stdio_ptr_lval_sets_cnt='undef'
-d_stdio_stream_array='undef'
-d_stdiobase='undef'
-d_stdstdio='undef'
-d_strcoll='define'
-d_strerror_l='undef'
-d_strerror_r='undef'
-d_strftime='undef'
-d_strlcat='undef'
-d_strlcpy='undef'
-d_strnlen='undef'
-d_strtod='define'
-d_strtod_l='undef'
-d_strtol='define'
-d_strtold='undef'
-d_strtold_l='undef'
-d_strtoll='undef'
-d_strtoq='undef'
-d_strtoul='define'
-d_strtoull='undef'
-d_strtouq='undef'
-d_strxfrm='undef'
-d_suidsafe='undef'
-d_symlink='undef'
-d_syscall='undef'
-d_syscallproto='undef'
-d_sysconf='undef'
-d_sysernlst=''
-d_syserrlst='define'
-d_system='define'
-d_tcgetpgrp='undef'
-d_tcsetpgrp='undef'
-d_telldir='define'
-d_telldirproto='define'
-d_tgamma='undef'
-d_thread_safe_nl_langinfo_l='undef'
-d_time='define'
-d_timegm='undef'
-d_times='define'
-d_tm_tm_gmtoff='undef'
-d_tm_tm_zone='undef'
-d_tmpnam_r='undef'
-d_towlower='undef'
-d_towupper='undef'
-d_trunc='undef'
-d_truncate='undef'
-d_truncl='undef'
-d_ttyname_r='undef'
-d_tzname='define'
-d_u32align='undef'
-d_ualarm='undef'
-d_umask='define'
-d_uname='define'
-d_union_semun='define'
-d_unlinkat='undef'
-d_unordered='undef'
-d_unsetenv='undef'
-d_uselocale='undef'
-d_usleep='undef'
-d_usleepproto='undef'
-d_ustat='undef'
-d_vendorarch='undef'
-d_vendorbin='undef'
-d_vendorlib='undef'
-d_vfork='undef'
-d_void_closedir='undef'
-d_voidsig='define'
-d_voidtty=''
-d_vsnprintf='undef'
-d_wait4='undef'
-d_waitpid='define'
-d_wcscmp='undef'
-d_wcstombs='define'
-d_wcsxfrm='undef'
-d_wctomb='define'
-d_writev='undef'
-d_xenix='undef'
-date='date'
-db_hashtype='int'
-db_prefixtype='int'
-db_version_major='0'
-db_version_minor='0'
-db_version_patch='0'
-default_inc_excludes_dot='undef'
-direntrytype='struct direct'
-dlext='dll'
-dlsrc='dl_win32.xs'
-doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f'
-doublekind='3'
-doublemantbits='52'
-doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f'
-doublesize='8'
-drand01='Perl_drand48()'
-drand48_r_proto='0'
-dtrace=''
-dynamic_ext='Socket IO Fcntl Opcode SDBM_File attributes'
-eagain='EAGAIN'
-ebcdic='undef'
-echo='echo'
-egrep='egrep'
-emacs=''
-endgrent_r_proto='0'
-endhostent_r_proto='0'
-endnetent_r_proto='0'
-endprotoent_r_proto='0'
-endpwent_r_proto='0'
-endservent_r_proto='0'
-eunicefix=':'
-exe_ext='.exe'
-expr='expr'
-extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
-fflushNULL='define'
-fflushall='undef'
-find='find'
-firstmakefile='makefile'
-flex=''
-fpossize='4'
-fpostype='fpos_t'
-freetype='void'
-full_ar=''
-full_csh=''
-full_sed=''
-gccversion=''
-getgrent_r_proto='0'
-getgrgid_r_proto='0'
-getgrnam_r_proto='0'
-gethostbyaddr_r_proto='0'
-gethostbyname_r_proto='0'
-gethostent_r_proto='0'
-getlogin_r_proto='0'
-getnetbyaddr_r_proto='0'
-getnetbyname_r_proto='0'
-getnetent_r_proto='0'
-getprotobyname_r_proto='0'
-getprotobynumber_r_proto='0'
-getprotoent_r_proto='0'
-getpwent_r_proto='0'
-getpwnam_r_proto='0'
-getpwuid_r_proto='0'
-getservbyname_r_proto='0'
-getservbyport_r_proto='0'
-getservent_r_proto='0'
-getspnam_r_proto='0'
-gidformat='"ld"'
-gidsign='-1'
-gidsize='4'
-gidtype='gid_t'
-glibpth='/usr/shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/shlib '
-gmtime_r_proto='0'
-grep='grep'
-groupcat=''
-groupstype='gid_t'
-gzip='gzip'
-h_fcntl='true'
-h_sysfile='true'
-hint='recommended'
-hostcat='ypcat hosts'
-huge=''
-i16size='2'
-i16type='short'
-i32size='4'
-i32type='long'
-i64size='8'
-i64type='__int64'
-i8size='1'
-i8type='char'
-i_arpainet='define'
-i_bfd='undef'
-i_bsdioctl=''
-i_crypt='undef'
-i_db='undef'
-i_dbm='undef'
-i_dirent='define'
-i_dlfcn='define'
-i_execinfo='undef'
-i_fcntl='define'
-i_fenv='undef'
-i_fp='undef'
-i_fp_class='undef'
-i_gdbm='undef'
-i_gdbm_ndbm='undef'
-i_gdbmndbm='undef'
-i_grp='undef'
-i_ieeefp='undef'
-i_inttypes='undef'
-i_langinfo='undef'
-i_libutil='undef'
-i_locale='define'
-i_machcthr='undef'
-i_malloc='define'
-i_mallocmalloc='undef'
-i_mntent='undef'
-i_ndbm='undef'
-i_netdb='undef'
-i_neterrno='undef'
-i_netinettcp='undef'
-i_niin='undef'
-i_poll='undef'
-i_prot='undef'
-i_pthread='undef'
-i_pwd='undef'
-i_quadmath='undef'
-i_rpcsvcdbm='undef'
-i_sgtty='undef'
-i_shadow='undef'
-i_socks='undef'
-i_stdbool='undef'
-i_stdint='undef'
-i_stdlib='define'
-i_sunmath='undef'
-i_sysaccess='undef'
-i_sysdir='undef'
-i_sysfile='undef'
-i_sysfilio='define'
-i_sysin='undef'
-i_sysioctl='undef'
-i_syslog='undef'
-i_sysmman='undef'
-i_sysmode='undef'
-i_sysmount='undef'
-i_sysndir='undef'
-i_sysparam='undef'
-i_syspoll='undef'
-i_sysresrc='undef'
-i_syssecrt='undef'
-i_sysselct='undef'
-i_syssockio='undef'
-i_sysstat='define'
-i_sysstatfs='undef'
-i_sysstatvfs='undef'
-i_systime='undef'
-i_systimek='undef'
-i_systimes='undef'
-i_systypes='undef'
-i_sysuio='undef'
-i_sysun='undef'
-i_sysutsname='undef'
-i_sysvfs='undef'
-i_syswait='undef'
-i_termio='undef'
-i_termios='undef'
-i_time='undef'
-i_unistd='undef'
-i_ustat='undef'
-i_utime='define'
-i_vfork='undef'
-i_wchar='undef'
-i_wctype='undef'
-i_xlocale='undef'
-ignore_versioned_solibs=''
-inc_version_list=''
-inc_version_list_init='0'
-incpath=''
-inews=''
-installarchlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~'
-installbin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-installhtmldir='~INST_TOP~~INST_VER~\html'
-installhtmlhelpdir='~INST_TOP~~INST_VER~\htmlhelp'
-installman1dir='~INST_TOP~~INST_VER~\man\man1'
-installman3dir='~INST_TOP~~INST_VER~\man\man3'
-installprefix='~INST_TOP~~INST_VER~'
-installprefixexp='~INST_TOP~~INST_VER~'
-installprivlib='~INST_TOP~~INST_VER~\lib'
-installscript='~INST_TOP~~INST_VER~\bin'
-installsitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-installsitebin='~INST_TOP~~INST_VER~\bin~INST_ARCH~'
-installsitelib='~INST_TOP~\site~INST_VER~\lib'
-installstyle='lib'
-installusrbinperl='undef'
-installvendorarch=''
-installvendorbin=''
-installvendorlib=''
-intsize='4'
-ivdformat='"ld"'
-ivsize='4'
-ivtype='long'
-known_extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~'
-ksh=''
-large=''
-ld='link'
-lddlflags='-dll ~LINK_FLAGS~'
-ldflags='~LINK_FLAGS~'
-ldlibpthname=''
-less='less'
-lib_ext='.lib'
-libc='msvcrt.lib'
-libperl='perl.lib'
-libpth=''
-libs=''
-libsdirs=''
-libsfiles=''
-libsfound=''
-libspath=''
-libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x'
-line='line'
-lint=''
-lkflags=''
-ln=''
-lns='copy'
-localtime_r_proto='0'
-locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include'
-loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib'
-longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f'
-longdblkind='3'
-longdblmantbits='64'
-longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f'
-longdblsize='10'
-longlongsize='8'
-longsize='4'
-lp=''
-lpr=''
-ls='dir'
-lseeksize='4'
-lseektype='long'
-mad='undef'
-mail=''
-mailx=''
-make='nmake'
-make_set_make='#'
-mallocobj='malloc.o'
-mallocsrc='malloc.c'
-malloctype='void *'
-man1dir='~INST_TOP~~INST_VER~\man\man1'
-man1direxp='~INST_TOP~~INST_VER~\man\man1'
-man1ext='1'
-man3dir='~INST_TOP~~INST_VER~\man\man3'
-man3direxp='~INST_TOP~~INST_VER~\man\man3'
-man3ext='3'
-medium=''
-mips_type=''
-mkdir='mkdir'
-mmaptype='void *'
-models='none'
-modetype='mode_t'
-more='more /e'
-multiarch='undef'
-mv=''
-myarchname='wince'
-mydomain=''
-myhostname=''
-myuname=''
-n='-n'
-need_va_copy='undef'
-netdb_hlen_type='int'
-netdb_host_type='char *'
-netdb_name_type='char *'
-netdb_net_type='long'
-nm=''
-nm_opt=''
-nm_so_opt=''
-nonxs_ext='Errno'
-nroff=''
-nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
-nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvmantbits='52'
-nvsize='8'
-nvtype='double'
-o_nonblock='O_NONBLOCK'
-obj_ext='.obj'
-old_pthread_create_joinable=''
-optimize='-O'
-orderlib='false'
-osname='MSWin32'
-osvers='4.0'
-otherlibdirs=''
-package='perl5'
-pager='more /e'
-passcat=''
-patchlevel='~PERL_VERSION~'
-path_sep=';'
-perl5=''
-perl='perl'
-perl_patchlevel='~PERL_PATCHLEVEL~'
-perl_static_inline='static'
-perladmin=''
-perlpath='~INST_TOP~~INST_VER~\bin~INST_ARCH~\perl.exe'
-pg=''
-phostname='hostname'
-pidtype='int'
-plibpth=''
-pmake=''
-pr=''
-prefix='~INST_TOP~'
-prefixexp='~INST_TOP~'
-privlib='~INST_TOP~~INST_VER~\lib'
-privlibexp='~INST_TOP~~INST_VER~\lib'
-procselfexe=''
-prototype='define'
-ptrsize='4'
-quadkind='5'
-quadtype='__int64'
-randbits='48'
-randfunc='Perl_drand48'
-random_r_proto='0'
-randseedtype='U32'
-ranlib='rem'
-rd_nodata='-1'
-readdir64_r_proto='0'
-readdir_r_proto='0'
-revision='5'
-rm='del'
-rmail=''
-runnm='true'
-sGMTIME_max='2147483647'
-sGMTIME_min='0'
-sLOCALTIME_max='2147483647'
-sLOCALTIME_min='0'
-sPRIEldbl='"E"'
-sPRIFldbl='"F"'
-sPRIGldbl='"G"'
-sPRIX64='"lX"'
-sPRId64='"ld"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
-sPRIi64='"li"'
-sPRIo64='"lo"'
-sPRIu64='"lu"'
-sPRIx64='"lx"'
-sSCNfldbl=''
-sched_yield=''
-scriptdir='~INST_TOP~~INST_VER~\bin'
-scriptdirexp='~INST_TOP~~INST_VER~\bin'
-sed='sed'
-seedfunc='Perl_drand48_init'
-selectminbits='32'
-selecttype='Perl_fd_set *'
-sendmail='blat'
-setgrent_r_proto='0'
-sethostent_r_proto='0'
-setlocale_r_proto='0'
-setnetent_r_proto='0'
-setprotoent_r_proto='0'
-setpwent_r_proto='0'
-setservent_r_proto='0'
-sh='cmd /x /c'
-shar=''
-sharpbang='#!'
-shmattype='void *'
-shortsize='2'
-shrpenv=''
-shsharp='true'
-sig_count='26'
-sig_name='ZERO NUM01 INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM NUM16 NUM17 NUM18 NUM19 CHLD BREAK ABRT STOP NUM24 CONT CLD'
-sig_name_init='"ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0'
-sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 20 0'
-sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0'
-sig_size='27'
-signal_t='void'
-sitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-sitearchexp='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~'
-sitebin='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
-sitebinexp='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~'
-sitelib='~INST_TOP~\site~INST_VER~\lib'
-sitelib_stem=''
-sitelibexp='~INST_TOP~\site~INST_VER~\lib'
-siteprefix='~INST_TOP~\site~INST_VER~'
-siteprefixexp='~INST_TOP~\site~INST_VER~'
-sizesize='4'
-sizetype='size_t'
-sleep=''
-smail=''
-small=''
-so='dll'
-sockethdr=''
-socketlib=''
-socksizetype='int'
-sort='sort'
-spackage='Perl5'
-spitshell=''
-split=''
-srand48_r_proto='0'
-srandom_r_proto='0'
-src=''
-ssizetype='int'
-st_ino_sign='1'
-st_ino_size='4'
-startperl='#!perl'
-startsh='#!/bin/sh'
-static_ext='DynaLoader'
-stdchar='char'
-stdio_base=''
-stdio_bufsiz=''
-stdio_cnt=''
-stdio_filbuf=''
-stdio_ptr=''
-stdio_stream_array=''
-strerror_r_proto='0'
-strings='/usr/include/string.h'
-submit=''
-subversion='~PERL_SUBVERSION~'
-sysman='/usr/man/man1'
-tail=''
-tar=''
-targetarch='wince'
-targetsh='cmd /x /c'
-tbl=''
-tee=''
-test=''
-timeincl='/usr/include/sys/time.h '
-timetype='time_t'
-tmpnam_r_proto='0'
-touch='touch'
-tr=''
-trnl='\012'
-troff=''
-ttyname_r_proto='0'
-u16size='2'
-u16type='unsigned short'
-u32size='4'
-u32type='unsigned long'
-u64size='8'
-u64type='unsigned __int64'
-u8size='1'
-u8type='unsigned char'
-uidformat='"ld"'
-uidsign='-1'
-uidsize='4'
-uidtype='uid_t'
-uname='uname'
-uniq='uniq'
-uquadtype='unsigned __int64'
-use5005threads='undef'
-use64bitall='undef'
-use64bitint='undef'
-usecbacktrace='undef'
-usecrosscompile='define'
-usedevel='undef'
-usedl='define'
-usedtrace='undef'
-usefaststdio='undef'
-useithreads='~USE_ITHREADS~'
-usekernprocpathname='undef'
-uselargefiles='undef'
-uselongdouble='undef'
-usemallocwrap='define'
-usemorebits='undef'
-usemultiplicity='undef'
-usemymalloc='n'
-usenm='false'
-usensgetexecutablepath='undef'
-useopcode='true'
-useperlio='define'
-useposix='true'
-usequadmath='undef'
-usereentrant='undef'
-userelocatableinc='undef'
-useshrplib='true'
-usesitecustomize='undef'
-usesocks='undef'
-usethreads='undef'
-usevendorprefix='undef'
-usevfork='false'
-usrinc='/usr/include'
-uuname=''
-uvXUformat='"lX"'
-uvoformat='"lo"'
-uvsize='4'
-uvtype='unsigned long'
-uvuformat='"lu"'
-uvxformat='"lx"'
-vendorarch=''
-vendorarchexp=''
-vendorbin=''
-vendorbinexp=''
-vendorlib=''
-vendorlib_stem=''
-vendorlibexp=''
-vendorprefix=''
-vendorprefixexp=''
-version=''
-versiononly='undef'
-vi=''
-xlibpth='/usr/lib/386 /lib/386'
-zcat=''
-zip='zip'
-PERL_REVISION='~PERL_REVISION~'
-PERL_SUBVERSION='~PERL_SUBVERSION~'
-PERL_VERSION='~PERL_VERSION~'
-PERL_API_REVISION='~PERL_API_REVISION~'
-PERL_API_SUBVERSION='~PERL_API_SUBVERSION~'
-PERL_API_VERSION='~PERL_API_VERSION~'
-PATCHLEVEL='~PERL_VERSION~'
-PERL_PATCHLEVEL='~PERL_PATCHLEVEL~'
-PERL_CONFIG_SH='true'
-CONFIGDOTSH='true'
diff --git a/gnu/usr.bin/perl/win32/config.gc b/gnu/usr.bin/perl/win32/config.gc
index ce9a6b9ad76..793b455d0c0 100644
--- a/gnu/usr.bin/perl/win32/config.gc
+++ b/gnu/usr.bin/perl/win32/config.gc
@@ -103,6 +103,7 @@ d_asinh='define'
d_atanh='define'
d_atolf='undef'
d_atoll='undef'
+d_attribute_always_inline='undef'
d_attribute_deprecated='undef'
d_attribute_format='undef'
d_attribute_malloc='undef'
@@ -526,6 +527,7 @@ d_sitearch='define'
d_snprintf='define'
d_sockaddr_in6='undef'
d_sockaddr_sa_len='undef'
+d_sockaddr_storage='define'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='define'
@@ -618,6 +620,7 @@ d_voidtty=''
d_vsnprintf='define'
d_wait4='undef'
d_waitpid='define'
+d_wcrtomb='undef'
d_wcscmp='define'
d_wcstombs='define'
d_wcsxfrm='define'
diff --git a/gnu/usr.bin/perl/win32/config.vc b/gnu/usr.bin/perl/win32/config.vc
index 0855dc8c096..a2c3f5a53d9 100644
--- a/gnu/usr.bin/perl/win32/config.vc
+++ b/gnu/usr.bin/perl/win32/config.vc
@@ -103,6 +103,7 @@ d_asinh='undef'
d_atanh='undef'
d_atolf='undef'
d_atoll='undef'
+d_attribute_always_inline='undef'
d_attribute_deprecated='undef'
d_attribute_format='undef'
d_attribute_malloc='undef'
@@ -526,6 +527,7 @@ d_sitearch='define'
d_snprintf='define'
d_sockaddr_in6='undef'
d_sockaddr_sa_len='undef'
+d_sockaddr_storage='define'
d_sockatmark='undef'
d_sockatmarkproto='undef'
d_socket='define'
@@ -618,6 +620,7 @@ d_voidtty=''
d_vsnprintf='define'
d_wait4='undef'
d_waitpid='define'
+d_wcrtomb='undef'
d_wcscmp='define'
d_wcstombs='define'
d_wcsxfrm='define'
diff --git a/gnu/usr.bin/perl/win32/config_H.ce b/gnu/usr.bin/perl/win32/config_H.ce
deleted file mode 100644
index b8b8aeb9371..00000000000
--- a/gnu/usr.bin/perl/win32/config_H.ce
+++ /dev/null
@@ -1,4206 +0,0 @@
-/*
- * This file was produced by running the config_h.SH script, which
- * gets its values from undef, which is generally produced by
- * running Configure.
- *
- * Feel free to modify any of this as the need arises. Note, however,
- * that running config_h.SH again will wipe out any changes you've made.
- * For a more permanent change edit undef and rerun config_h.SH.
- *
- * $Id: Config_h.U,v 3.0.1.5 1997/02/28 14:57:43 ram Exp $
- */
-
-/*
- * Package name : perl5
- * Source directory :
- * Configuration time: Thu Nov 10 20:47:18 2005
- * Configured by : vkon
- * Target system :
- */
-
-#ifndef _config_h_
-#define _config_h_
-
-/* LOC_SED:
- * This symbol holds the complete pathname to the sed program.
- */
-#define LOC_SED "" /**/
-
-/* HAS_ALARM:
- * This symbol, if defined, indicates that the alarm routine is
- * available.
- */
-/*#define HAS_ALARM /**/
-
-/* HAS_CHOWN:
- * This symbol, if defined, indicates that the chown routine is
- * available.
- */
-/*#define HAS_CHOWN /**/
-
-/* HAS_CHROOT:
- * This symbol, if defined, indicates that the chroot routine is
- * available.
- */
-/*#define HAS_CHROOT /**/
-
-/* HAS_CHSIZE:
- * This symbol, if defined, indicates that the chsize routine is available
- * to truncate files. You might need a -lx to get this routine.
- */
-#define HAS_CHSIZE /**/
-
-/* HAS_CUSERID:
- * This symbol, if defined, indicates that the cuserid routine is
- * available to get character login names.
- */
-/*#define HAS_CUSERID /**/
-
-/* HAS_DIFFTIME:
- * This symbol, if defined, indicates that the difftime routine is
- * available.
- */
-#define HAS_DIFFTIME /**/
-
-/* HAS_DLERROR:
- * This symbol, if defined, indicates that the dlerror routine is
- * available to return a string describing the last error that
- * occurred from a call to dlopen(), dlclose() or dlsym().
- */
-#define HAS_DLERROR /**/
-
-/* HAS_DUP2:
- * This symbol, if defined, indicates that the dup2 routine is
- * available to duplicate file descriptors.
- */
-#define HAS_DUP2 /**/
-
-/* HAS_FCHMOD:
- * This symbol, if defined, indicates that the fchmod routine is available
- * to change mode of opened files. If unavailable, use chmod().
- */
-/*#define HAS_FCHMOD /**/
-
-/* HAS_FCHOWN:
- * This symbol, if defined, indicates that the fchown routine is available
- * to change ownership of opened files. If unavailable, use chown().
- */
-/*#define HAS_FCHOWN /**/
-
-/* HAS_FCNTL:
- * This symbol, if defined, indicates to the C program that
- * the fcntl() function exists.
- */
-/*#define HAS_FCNTL /**/
-
-/* HAS_FGETPOS:
- * This symbol, if defined, indicates that the fgetpos routine is
- * available to get the file position indicator, similar to ftell().
- */
-#define HAS_FGETPOS /**/
-
-/* HAS_FLOCK:
- * This symbol, if defined, indicates that the flock routine is
- * available to do file locking.
- */
-/*#define HAS_FLOCK /**/
-
-/* HAS_FORK:
- * This symbol, if defined, indicates that the fork routine is
- * available.
- */
-/*#define HAS_FORK /**/
-
-/* HAS_FSETPOS:
- * This symbol, if defined, indicates that the fsetpos routine is
- * available to set the file position indicator, similar to fseek().
- */
-#define HAS_FSETPOS /**/
-
-/* HAS_GETTIMEOFDAY:
- * This symbol, if defined, indicates that the gettimeofday() system
- * call is available for a sub-second accuracy clock. Usually, the file
- * <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
- * The type "Timeval" should be used to refer to "struct timeval".
- */
-/*#define HAS_GETTIMEOFDAY /**/
-#ifdef HAS_GETTIMEOFDAY
-#define Timeval struct timeval /* Structure used by gettimeofday() */
-#endif
-
-/* HAS_GETGROUPS:
- * This symbol, if defined, indicates that the getgroups() routine is
- * available to get the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-/*#define HAS_GETGROUPS /**/
-
-/* HAS_GETLOGIN:
- * This symbol, if defined, indicates that the getlogin routine is
- * available to get the login name.
- */
-#define HAS_GETLOGIN /**/
-
-/* HAS_GETPGID:
- * This symbol, if defined, indicates to the C program that
- * the getpgid(pid) function is available to get the
- * process group id.
- */
-/*#define HAS_GETPGID /**/
-
-/* HAS_GETPGRP2:
- * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
- * routine is available to get the current process group.
- */
-/*#define HAS_GETPGRP2 /**/
-
-/* HAS_GETPPID:
- * This symbol, if defined, indicates that the getppid routine is
- * available to get the parent process ID.
- */
-/*#define HAS_GETPPID /**/
-
-/* HAS_GETPRIORITY:
- * This symbol, if defined, indicates that the getpriority routine is
- * available to get a process's priority.
- */
-/*#define HAS_GETPRIORITY /**/
-
-/* HAS_INET_ATON:
- * This symbol, if defined, indicates to the C program that the
- * inet_aton() function is available to parse IP address "dotted-quad"
- * strings.
- */
-/*#define HAS_INET_ATON /**/
-
-/* HAS_KILLPG:
- * This symbol, if defined, indicates that the killpg routine is available
- * to kill process groups. If unavailable, you probably should use kill
- * with a negative process number.
- */
-/*#define HAS_KILLPG /**/
-
-/* HAS_LINK:
- * This symbol, if defined, indicates that the link routine is
- * available to create hard links.
- */
-#define HAS_LINK /**/
-
-/* HAS_LOCALECONV:
- * This symbol, if defined, indicates that the localeconv routine is
- * available for numeric and monetary formatting conventions.
- */
-/*#define HAS_LOCALECONV /**/
-
-/* HAS_LOCKF:
- * This symbol, if defined, indicates that the lockf routine is
- * available to do file locking.
- */
-/*#define HAS_LOCKF /**/
-
-/* HAS_LSTAT:
- * This symbol, if defined, indicates that the lstat routine is
- * available to do file stats on symbolic links.
- */
-/*#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.
- */
-#define HAS_MBLEN /**/
-
-/* HAS_MBSTOWCS:
- * This symbol, if defined, indicates that the mbstowcs routine is
- * available to covert a multibyte string into a wide character string.
- */
-#define HAS_MBSTOWCS /**/
-
-/* HAS_MBTOWC:
- * This symbol, if defined, indicates that the mbtowc routine is available
- * to covert a multibyte to a wide character.
- */
-#define HAS_MBTOWC /**/
-
-/* HAS_MKDIR:
- * This symbol, if defined, indicates that the mkdir routine is available
- * to create directories. Otherwise you should fork off a new process to
- * exec /bin/mkdir.
- */
-#define HAS_MKDIR /**/
-
-/* HAS_MKFIFO:
- * This symbol, if defined, indicates that the mkfifo routine is
- * available to create FIFOs. Otherwise, mknod should be able to
- * do it for you. However, if mkfifo is there, mknod might require
- * super-user privileges which mkfifo will not.
- */
-/*#define HAS_MKFIFO /**/
-
-/* HAS_MKTIME:
- * This symbol, if defined, indicates that the mktime routine is
- * available.
- */
-#define HAS_MKTIME /**/
-
-/* HAS_MSYNC:
- * This symbol, if defined, indicates that the msync system call is
- * available to synchronize a mapped file.
- */
-/*#define HAS_MSYNC /**/
-
-/* HAS_MUNMAP:
- * This symbol, if defined, indicates that the munmap system call is
- * available to unmap a region, usually mapped by mmap().
- */
-/*#define HAS_MUNMAP /**/
-
-/* HAS_NICE:
- * This symbol, if defined, indicates that the nice routine is
- * available.
- */
-/*#define HAS_NICE /**/
-
-/* HAS_PATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given filename.
- */
-/* HAS_FPATHCONF:
- * This symbol, if defined, indicates that pathconf() is available
- * to determine file-system related limits and options associated
- * with a given open file descriptor.
- */
-/*#define HAS_PATHCONF /**/
-/*#define HAS_FPATHCONF /**/
-
-/* HAS_PAUSE:
- * This symbol, if defined, indicates that the pause routine is
- * available to suspend a process until a signal is received.
- */
-#define HAS_PAUSE /**/
-
-/* HAS_PIPE:
- * This symbol, if defined, indicates that the pipe routine is
- * available to create an inter-process channel.
- */
-/*#define HAS_PIPE /**/
-
-/* HAS_POLL:
- * This symbol, if defined, indicates that the poll routine is
- * available to poll active file descriptors. You may safely
- * include <poll.h> when this symbol is defined.
- */
-/*#define HAS_POLL /**/
-
-/* HAS_READDIR:
- * This symbol, if defined, indicates that the readdir routine is
- * available to read directory entries. You may have to include
- * <dirent.h>. See I_DIRENT.
- */
-#define HAS_READDIR /**/
-
-/* HAS_SEEKDIR:
- * This symbol, if defined, indicates that the seekdir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_SEEKDIR /**/
-
-/* HAS_TELLDIR:
- * This symbol, if defined, indicates that the telldir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_TELLDIR /**/
-
-/* HAS_REWINDDIR:
- * This symbol, if defined, indicates that the rewinddir routine is
- * available. You may have to include <dirent.h>. See I_DIRENT.
- */
-#define HAS_REWINDDIR /**/
-
-/* HAS_READLINK:
- * This symbol, if defined, indicates that the readlink routine is
- * available to read the value of a symbolic link.
- */
-/*#define HAS_READLINK /**/
-
-/* HAS_RENAME:
- * This symbol, if defined, indicates that the rename routine is available
- * to rename files. Otherwise you should do the unlink(), link(), unlink()
- * trick.
- */
-#define HAS_RENAME /**/
-
-/* HAS_RMDIR:
- * This symbol, if defined, indicates that the rmdir routine is
- * available to remove directories. Otherwise you should fork off a
- * new process to exec /bin/rmdir.
- */
-#define HAS_RMDIR /**/
-
-/* HAS_SELECT:
- * This symbol, if defined, indicates that the select routine is
- * available to select active file descriptors. If the timeout field
- * is used, <sys/time.h> may need to be included.
- */
-#define HAS_SELECT /**/
-
-/* HAS_SETEGID:
- * This symbol, if defined, indicates that the setegid routine is available
- * to change the effective gid of the current program.
- */
-/*#define HAS_SETEGID /**/
-
-/* HAS_SETEUID:
- * This symbol, if defined, indicates that the seteuid routine is available
- * to change the effective uid of the current program.
- */
-/*#define HAS_SETEUID /**/
-
-/* HAS_SETLINEBUF:
- * This symbol, if defined, indicates that the setlinebuf routine is
- * available to change stderr or stdout from block-buffered or unbuffered
- * to a line-buffered mode.
- */
-/*#define HAS_SETLINEBUF /**/
-
-/* HAS_SETLOCALE:
- * This symbol, if defined, indicates that the setlocale routine is
- * available to handle locale-specific ctype implementations.
- */
-#define HAS_SETLOCALE /**/
-
-/* HAS_SETPGID:
- * This symbol, if defined, indicates that the setpgid(pid, gpid)
- * routine is available to set process group ID.
- */
-/*#define HAS_SETPGID /**/
-
-/* HAS_SETPGRP2:
- * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
- * routine is available to set the current process group.
- */
-/*#define HAS_SETPGRP2 /**/
-
-/* HAS_SETPRIORITY:
- * This symbol, if defined, indicates that the setpriority routine is
- * available to set a process's priority.
- */
-/*#define HAS_SETPRIORITY /**/
-
-/* HAS_SETREGID:
- * This symbol, if defined, indicates that the setregid routine is
- * available to change the real and effective gid of the current
- * process.
- */
-/* HAS_SETRESGID:
- * This symbol, if defined, indicates that the setresgid routine is
- * available to change the real, effective and saved gid of the current
- * process.
- */
-/*#define HAS_SETREGID /**/
-/*#define HAS_SETRESGID /**/
-
-/* HAS_SETREUID:
- * This symbol, if defined, indicates that the setreuid routine is
- * available to change the real and effective uid of the current
- * process.
- */
-/* HAS_SETRESUID:
- * This symbol, if defined, indicates that the setresuid routine is
- * available to change the real, effective and saved uid of the current
- * process.
- */
-/*#define HAS_SETREUID /**/
-/*#define HAS_SETRESUID /**/
-
-/* HAS_SETRGID:
- * This symbol, if defined, indicates that the setrgid routine is available
- * to change the real gid of the current program.
- */
-/*#define HAS_SETRGID /**/
-
-/* HAS_SETRUID:
- * This symbol, if defined, indicates that the setruid routine is available
- * to change the real uid of the current program.
- */
-/*#define HAS_SETRUID /**/
-
-/* HAS_SETSID:
- * This symbol, if defined, indicates that the setsid routine is
- * available to set the process group ID.
- */
-/*#define HAS_SETSID /**/
-
-/* HAS_STRCOLL:
- * This symbol, if defined, indicates that the strcoll routine is
- * available to compare strings using collating information.
- */
-#define HAS_STRCOLL /**/
-
-/* HAS_STRTOD:
- * This symbol, if defined, indicates that the strtod routine is
- * available to provide better numeric string conversion than atof().
- */
-#define HAS_STRTOD /**/
-
-/* HAS_STRTOL:
- * This symbol, if defined, indicates that the strtol routine is available
- * to provide better numeric string conversion than atoi() and friends.
- */
-#define HAS_STRTOL /**/
-
-/* HAS_STRXFRM:
- * This symbol, if defined, indicates that the strxfrm() routine is
- * available to transform strings.
- */
-/*#define HAS_STRXFRM /**/
-
-/* HAS_SYMLINK:
- * This symbol, if defined, indicates that the symlink routine is available
- * to create symbolic links.
- */
-/*#define HAS_SYMLINK /**/
-
-/* HAS_SYSCALL:
- * This symbol, if defined, indicates that the syscall routine is
- * available to call arbitrary system calls. If undefined, that's tough.
- */
-/*#define HAS_SYSCALL /**/
-
-/* HAS_SYSCONF:
- * This symbol, if defined, indicates that sysconf() is available
- * to determine system related limits and options.
- */
-/*#define HAS_SYSCONF /**/
-
-/* HAS_SYSTEM:
- * This symbol, if defined, indicates that the system routine is
- * available to issue a shell command.
- */
-#define HAS_SYSTEM /**/
-
-/* HAS_TCGETPGRP:
- * This symbol, if defined, indicates that the tcgetpgrp routine is
- * available to get foreground process group ID.
- */
-/*#define HAS_TCGETPGRP /**/
-
-/* HAS_TCSETPGRP:
- * This symbol, if defined, indicates that the tcsetpgrp routine is
- * available to set foreground process group ID.
- */
-/*#define HAS_TCSETPGRP /**/
-
-/* HAS_TRUNCATE:
- * This symbol, if defined, indicates that the truncate routine is
- * available to truncate files.
- */
-/*#define HAS_TRUNCATE /**/
-
-/* HAS_TZNAME:
- * This symbol, if defined, indicates that the tzname[] array is
- * available to access timezone names.
- */
-#define HAS_TZNAME /**/
-
-/* HAS_UMASK:
- * This symbol, if defined, indicates that the umask routine is
- * available to set and get the value of the file creation mask.
- */
-#define HAS_UMASK /**/
-
-/* HAS_USLEEP:
- * This symbol, if defined, indicates that the usleep routine is
- * available to let the process sleep on a sub-second accuracy.
- */
-/*#define HAS_USLEEP /**/
-
-/* HAS_WAIT4:
- * This symbol, if defined, indicates that wait4() exists.
- */
-/*#define HAS_WAIT4 /**/
-
-/* HAS_WAITPID:
- * This symbol, if defined, indicates that the waitpid routine is
- * available to wait for child process.
- */
-#define HAS_WAITPID /**/
-
-/* HAS_WCSTOMBS:
- * This symbol, if defined, indicates that the wcstombs routine is
- * available to convert wide character strings to multibyte strings.
- */
-#define HAS_WCSTOMBS /**/
-
-/* HAS_WCTOMB:
- * This symbol, if defined, indicates that the wctomb routine is available
- * to covert a wide character to a multibyte.
- */
-#define HAS_WCTOMB /**/
-
-/* I_ARPA_INET:
- * This symbol, if defined, indicates to the C program that it should
- * include <arpa/inet.h> to get inet_addr and friends declarations.
- */
-#define I_ARPA_INET /**/
-
-/* I_DBM:
- * This symbol, if defined, indicates that <dbm.h> exists and should
- * be included.
- */
-/* I_RPCSVC_DBM:
- * This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and
- * should be included.
- */
-/*#define I_DBM /**/
-/*#define I_RPCSVC_DBM / **/
-
-/* I_DIRENT:
- * This symbol, if defined, indicates to the C program that it should
- * include <dirent.h>. Using this symbol also triggers the definition
- * of the Direntry_t define which ends up being 'struct dirent' or
- * 'struct direct' depending on the availability of <dirent.h>.
- */
-/* DIRNAMLEN:
- * This symbol, if defined, indicates to the C program that the length
- * of directory entry names is provided by a d_namlen field. Otherwise
- * you need to do strlen() on the d_name field.
- */
-/* Direntry_t:
- * This symbol is set to 'struct direct' or 'struct dirent' depending on
- * whether dirent is available or not. You should use this pseudo type to
- * portably declare your directory entries.
- */
-#define I_DIRENT /**/
-#define DIRNAMLEN /**/
-#define Direntry_t struct direct
-
-/* I_DLFCN:
- * This symbol, if defined, indicates that <dlfcn.h> exists and should
- * be included.
- */
-#define I_DLFCN /**/
-
-/* I_FCNTL:
- * This manifest constant tells the C program to include <fcntl.h>.
- */
-#define I_FCNTL /**/
-
-/* I_LOCALE:
- * This symbol, if defined, indicates to the C program that it should
- * include <locale.h>.
- */
-/*#define I_LOCALE /**/
-
-/* I_NET_ERRNO:
- * This symbol, if defined, indicates that <net/errno.h> exists and
- * should be included.
- */
-/*#define I_NET_ERRNO /**/
-
-/* I_NETINET_IN:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/in.h>. Otherwise, you may try <sys/in.h>.
- */
-/*#define I_NETINET_IN /**/
-
-/* I_SYS_DIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/dir.h>.
- */
-/*#define I_SYS_DIR /**/
-
-/* I_SYS_FILE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/file.h> to get definition of R_OK and friends.
- */
-/*#define I_SYS_FILE /**/
-
-/* I_SYS_IOCTL:
- * This symbol, if defined, indicates that <sys/ioctl.h> exists and should
- * be included. Otherwise, include <sgtty.h> or <termio.h>.
- */
-/* I_SYS_SOCKIO:
- * This symbol, if defined, indicates the <sys/sockio.h> should be included
- * to get socket ioctl options, like SIOCATMARK.
- */
-/*#define I_SYS_IOCTL /**/
-/*#define I_SYS_SOCKIO /**/
-
-/* I_SYS_NDIR:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/ndir.h>.
- */
-/*#define I_SYS_NDIR /**/
-
-/* I_SYS_PARAM:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/param.h>.
- */
-/*#define I_SYS_PARAM /**/
-
-/* I_SYS_RESOURCE:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/resource.h>.
- */
-/*#define I_SYS_RESOURCE /**/
-
-/* I_SYS_SELECT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/select.h> in order to get definition of struct timeval.
- */
-/*#define I_SYS_SELECT /**/
-
-/* I_SYS_STAT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/stat.h>.
- */
-#define I_SYS_STAT /**/
-
-/* I_SYS_TIMES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/times.h>.
- */
-/*#define I_SYS_TIMES /**/
-
-/* I_SYS_TYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/types.h>.
- */
-/*#define I_SYS_TYPES /**/
-
-/* I_SYS_UN:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/un.h> to get UNIX domain socket definitions.
- */
-/*#define I_SYS_UN /**/
-
-/* I_SYS_WAIT:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/wait.h>.
- */
-/*#define I_SYS_WAIT /**/
-
-/* I_TERMIO:
- * This symbol, if defined, indicates that the program should include
- * <termio.h> rather than <sgtty.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/* I_TERMIOS:
- * This symbol, if defined, indicates that the program should include
- * the POSIX termios.h rather than sgtty.h or termio.h.
- * There are also differences in the ioctl() calls that depend on the
- * value of this symbol.
- */
-/* I_SGTTY:
- * This symbol, if defined, indicates that the program should include
- * <sgtty.h> rather than <termio.h>. There are also differences in
- * the ioctl() calls that depend on the value of this symbol.
- */
-/*#define I_TERMIO /**/
-/*#define I_TERMIOS /**/
-/*#define I_SGTTY /**/
-
-/* I_UNISTD:
- * This symbol, if defined, indicates to the C program that it should
- * include <unistd.h>.
- */
-/*#define I_UNISTD /**/
-
-/* I_UTIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <utime.h>.
- */
-#define I_UTIME /**/
-
-/* I_VFORK:
- * This symbol, if defined, indicates to the C program that it should
- * include vfork.h.
- */
-/*#define I_VFORK /**/
-
-/* HAS_ACCESSX:
- * This symbol, if defined, indicates that the accessx routine is
- * available to do extended access checks.
- */
-/*#define HAS_ACCESSX /**/
-
-/* HAS_EACCESS:
- * This symbol, if defined, indicates that the eaccess routine is
- * available to do extended access checks.
- */
-/*#define HAS_EACCESS /**/
-
-/* I_SYS_ACCESS:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/access.h>.
- */
-/*#define I_SYS_ACCESS /**/
-
-/* I_SYS_SECURITY:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/security.h>.
- */
-/*#define I_SYS_SECURITY /**/
-
-/* OSNAME:
- * This symbol contains the name of the operating system, as determined
- * by Configure. You shouldn't rely on it too much; the specific
- * feature tests from Configure are generally more reliable.
- */
-/* OSVERS:
- * This symbol contains the version of the operating system, as determined
- * by Configure. You shouldn't rely on it too much; the specific
- * feature tests from Configure are generally more reliable.
- */
-#define OSNAME "MSWin32" /**/
-#define OSVERS "4.0" /**/
-
-/* USE_CROSS_COMPILE:
- * This symbol, if defined, indicates that Perl is being cross-compiled.
- */
-/* PERL_TARGETARCH:
- * This symbol, if defined, indicates the target architecture
- * Perl has been cross-compiled to. Undefined if not a cross-compile.
- */
-#ifndef USE_CROSS_COMPILE
-#define USE_CROSS_COMPILE /**/
-#define PERL_TARGETARCH "wince" /**/
-#endif
-
-/* MULTIARCH:
- * This symbol, if defined, signifies that the build
- * process will produce some binary files that are going to be
- * used in a cross-platform environment. This is the case for
- * example with the NeXT "fat" binaries that contain executables
- * for several CPUs.
- */
-/*#define MULTIARCH /**/
-
-/* MEM_ALIGNBYTES:
- * This symbol contains the number of bytes required to align a
- * double, or a long double when applicable. Usual values are 2,
- * 4 and 8. The default is eight, for safety.
- */
-#if defined(MULTIARCH)
-# define MEM_ALIGNBYTES 8
-#else
-#define MEM_ALIGNBYTES 8
-#endif
-
-/* ARCHLIB:
- * This variable, if defined, holds the name of the directory in
- * which the user wants to put architecture-dependent public
- * library files for perl5. It is most often a local directory
- * such as /usr/local/lib. Programs using this variable must be
- * prepared to deal with filename expansion. If ARCHLIB is the
- * same as PRIVLIB, it is not defined, since presumably the
- * program already searches PRIVLIB.
- */
-/* ARCHLIB_EXP:
- * 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 "\\Storage Card\\perl58m\\lib" /**/
-/*#define ARCHLIB_EXP "" /**/
-
-/* ARCHNAME:
- * This symbol holds a string representing the architecture name.
- * It may be used to construct an architecture-dependant pathname
- * where library files may be held under a private library, for
- * instance.
- */
-#define ARCHNAME "MS Pocket PC-WCE300-ARM" /**/
-
-/* HAS_ATOLF:
- * This symbol, if defined, indicates that the atolf routine is
- * available to convert strings into long doubles.
- */
-/*#define HAS_ATOLF /**/
-
-/* HAS_ATOLL:
- * This symbol, if defined, indicates that the atoll routine is
- * available to convert strings into long longs.
- */
-/*#define HAS_ATOLL /**/
-
-/* BIN:
- * This symbol holds the path of the bin directory where the package will
- * be installed. Program must be prepared to deal with ~name substitution.
- */
-/* BIN_EXP:
- * This symbol is the filename expanded version of the BIN symbol, for
- * programs that do not want to deal with that at run-time.
- */
-#define BIN "\\Storage Card\\perl58m\\bin" /**/
-#define BIN_EXP "\\Storage Card\\perl58m\\bin" /**/
-
-/* INTSIZE:
- * This symbol contains the value of sizeof(int) so that the C
- * preprocessor can make decisions based on it.
- */
-/* LONGSIZE:
- * This symbol contains the value of sizeof(long) so that the C
- * preprocessor can make decisions based on it.
- */
-/* SHORTSIZE:
- * This symbol contains the value of sizeof(short) so that the C
- * preprocessor can make decisions based on it.
- */
-#define INTSIZE 4 /**/
-#define LONGSIZE 4 /**/
-#define SHORTSIZE 2 /**/
-
-/* BYTEORDER:
- * This symbol holds the hexadecimal constant defined in byteorder,
- * in a UV, i.e. 0x1234 or 0x4321 or 0x12345678, etc...
- * If the compiler supports cross-compiling or multiple-architecture
- * binaries (eg. on NeXT systems), use compiler-defined macros to
- * determine the byte order.
- * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture
- * Binaries (MAB) on either big endian or little endian machines.
- * The endian-ness is available at compile-time. This only matters
- * for perl, where the config.h can be generated and installed on
- * one system, and used by a different architecture to build an
- * extension. Older versions of NeXT that might not have
- * defined either *_ENDIAN__ were all on Motorola 680x0 series,
- * so the default case (for NeXT) is big endian to catch them.
- * This might matter for NeXT 3.0.
- */
-#if defined(MULTIARCH)
-# ifdef __LITTLE_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x1234
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x12345678
-# endif
-# endif
-# else
-# ifdef __BIG_ENDIAN__
-# if LONGSIZE == 4
-# define BYTEORDER 0x4321
-# else
-# if LONGSIZE == 8
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-# endif
-# if !defined(BYTEORDER) && (defined(NeXT) || defined(__NeXT__))
-# define BYTEORDER 0x4321
-# endif
-#else
-#define BYTEORDER 0x1234 /* large digits for MSB */
-#endif /* NeXT */
-
-/* CHARBITS:
- * This symbol contains the size of a char, so that the C preprocessor
- * can make decisions based on it.
- */
-#define CHARBITS 8 /**/
-
-/* CAT2:
- * This macro concatenates 2 tokens together.
- */
-/* STRINGIFY:
- * This macro surrounds its token with double quotes.
- */
-#if 42 == 1
-#define CAT2(a,b) a/**/b
-#define STRINGIFY(a) "a"
- /* If you can get stringification with catify, tell me how! */
-#endif
-#if 42 == 42
-#define PeRl_CaTiFy(a, b) a ## b
-#define PeRl_StGiFy(a) #a
-/* the additional level of indirection enables these macros to be
- * used as arguments to other macros. See K&R 2nd ed., page 231. */
-#define CAT2(a,b) PeRl_CaTiFy(a,b)
-#define StGiFy(a) PeRl_StGiFy(a)
-#define STRINGIFY(a) PeRl_StGiFy(a)
-#endif
-#if 42 != 1 && 42 != 42
-# include "Bletch: How does this C preprocessor concatenate tokens?"
-#endif
-
-/* CPPSTDIN:
- * This symbol contains the first part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. Typical value of "cc -E" or "/lib/cpp", but it can also
- * call a wrapper. See CPPRUN.
- */
-/* CPPMINUS:
- * This symbol contains the second part of the string which will invoke
- * the C preprocessor on the standard input and produce to standard
- * output. This symbol will have the value "-" if CPPSTDIN needs a minus
- * to specify standard input, otherwise the value is "".
- */
-/* CPPRUN:
- * This symbol contains the string which will invoke a C preprocessor on
- * the standard input and produce to standard output. It needs to end
- * with CPPLAST, after all other preprocessor flags have been specified.
- * The main difference with CPPSTDIN is that this program will never be a
- * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is
- * available directly to the user. Note that it may well be different from
- * the preprocessor used to compile the C program.
- */
-/* CPPLAST:
- * This symbol is intended to be used along with CPPRUN in the same manner
- * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
- */
-#define CPPSTDIN "clarm.exe -nologo -E"
-#define CPPMINUS ""
-#define CPPRUN "clarm.exe -nologo -E"
-#define CPPLAST ""
-
-/* HAS__FWALK:
- * This symbol, if defined, indicates that the _fwalk system call is
- * available to apply a function to all the file handles.
- */
-/*#define HAS__FWALK /**/
-
-/* HAS_ACCESS:
- * This manifest constant lets the C program know that the access()
- * system call is available to check for accessibility using real UID/GID.
- * (always present on UNIX.)
- */
-#define HAS_ACCESS /**/
-
-/* HAS_ASCTIME_R:
- * This symbol, if defined, indicates that the asctime_r routine
- * is available to asctime re-entrantly.
- */
-/* ASCTIME_R_PROTO:
- * This symbol encodes the prototype of asctime_r.
- * It is zero if d_asctime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_asctime_r
- * is defined.
- */
-/*#define HAS_ASCTIME_R /**/
-#define ASCTIME_R_PROTO 0 /**/
-
-/* CASTI32:
- * This symbol is defined if the C compiler can cast negative
- * or large floating point numbers to 32-bit ints.
- */
-/*#define CASTI32 /**/
-
-/* CASTNEGFLOAT:
- * This symbol is defined if the C compiler can cast negative
- * numbers to unsigned longs, ints and shorts.
- */
-/* CASTFLAGS:
- * This symbol contains flags that say what difficulties the compiler
- * has casting odd floating values to unsigned long:
- * 0 = ok
- * 1 = couldn't cast < 0
- * 2 = couldn't cast >= 0x80000000
- * 4 = couldn't cast in argument expression list
- */
-#define CASTNEGFLOAT /**/
-#define CASTFLAGS 0 /**/
-
-/* HAS_CLASS:
- * This symbol, if defined, indicates that the class routine is
- * available to classify doubles. Available for example in AIX.
- * The returned values are defined in <float.h> and are:
- *
- * FP_PLUS_NORM Positive normalized, nonzero
- * FP_MINUS_NORM Negative normalized, nonzero
- * FP_PLUS_DENORM Positive denormalized, nonzero
- * FP_MINUS_DENORM Negative denormalized, nonzero
- * FP_PLUS_ZERO +0.0
- * FP_MINUS_ZERO -0.0
- * FP_PLUS_INF +INF
- * FP_MINUS_INF -INF
- * FP_NANS Signaling Not a Number (NaNS)
- * FP_NANQ Quiet Not a Number (NaNQ)
- */
-/*#define HAS_CLASS /**/
-
-/* VOID_CLOSEDIR:
- * This symbol, if defined, indicates that the closedir() routine
- * does not return a value.
- */
-/*#define VOID_CLOSEDIR /**/
-
-/* HAS_STRUCT_CMSGHDR:
- * This symbol, if defined, indicates that the struct cmsghdr
- * is supported.
- */
-/*#define HAS_STRUCT_CMSGHDR /**/
-
-/* HAS_CRYPT_R:
- * This symbol, if defined, indicates that the crypt_r routine
- * is available to crypt re-entrantly.
- */
-/* CRYPT_R_PROTO:
- * This symbol encodes the prototype of crypt_r.
- * It is zero if d_crypt_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_crypt_r
- * is defined.
- */
-/*#define HAS_CRYPT_R /**/
-#define CRYPT_R_PROTO 0 /**/
-
-/* HAS_CSH:
- * This symbol, if defined, indicates that the C-shell exists.
- */
-/* CSH:
- * This symbol, if defined, contains the full pathname of csh.
- */
-/*#define HAS_CSH /**/
-#ifdef HAS_CSH
-#define CSH "" /**/
-#endif
-
-/* HAS_CTIME_R:
- * This symbol, if defined, indicates that the ctime_r routine
- * is available to ctime re-entrantly.
- */
-/* CTIME_R_PROTO:
- * This symbol encodes the prototype of ctime_r.
- * It is zero if d_ctime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctime_r
- * is defined.
- */
-/*#define HAS_CTIME_R /**/
-#define CTIME_R_PROTO 0 /**/
-
-/* DLSYM_NEEDS_UNDERSCORE:
- * This symbol, if defined, indicates that we need to prepend an
- * underscore to the symbol name before calling dlsym(). This only
- * makes sense if you *have* dlsym, which we will presume is the
- * case if you're using dl_dlopen.xs.
- */
-/*#define DLSYM_NEEDS_UNDERSCORE /**/
-
-/* HAS_DRAND48_R:
- * This symbol, if defined, indicates that the drand48_r routine
- * is available to drand48 re-entrantly.
- */
-/* DRAND48_R_PROTO:
- * This symbol encodes the prototype of drand48_r.
- * It is zero if d_drand48_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_drand48_r
- * is defined.
- */
-/*#define HAS_DRAND48_R /**/
-#define DRAND48_R_PROTO 0 /**/
-
-/* HAS_DRAND48_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the drand48() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern double drand48(void);
- */
-/*#define HAS_DRAND48_PROTO /**/
-
-/* HAS_ENDGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the group database.
- */
-/*#define HAS_ENDGRENT /**/
-
-/* HAS_ENDGRENT_R:
- * This symbol, if defined, indicates that the endgrent_r routine
- * is available to endgrent re-entrantly.
- */
-/* ENDGRENT_R_PROTO:
- * This symbol encodes the prototype of endgrent_r.
- * It is zero if d_endgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endgrent_r
- * is defined.
- */
-/*#define HAS_ENDGRENT_R /**/
-#define ENDGRENT_R_PROTO 0 /**/
-
-/* HAS_ENDHOSTENT:
- * This symbol, if defined, indicates that the endhostent() routine is
- * available to close whatever was being used for host queries.
- */
-/*#define HAS_ENDHOSTENT /**/
-
-/* HAS_ENDNETENT:
- * This symbol, if defined, indicates that the endnetent() routine is
- * available to close whatever was being used for network queries.
- */
-/*#define HAS_ENDNETENT /**/
-
-/* HAS_ENDPROTOENT:
- * This symbol, if defined, indicates that the endprotoent() routine is
- * available to close whatever was being used for protocol queries.
- */
-/*#define HAS_ENDPROTOENT /**/
-
-/* HAS_ENDPWENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for finalizing sequential access of the passwd database.
- */
-/*#define HAS_ENDPWENT /**/
-
-/* HAS_ENDPWENT_R:
- * This symbol, if defined, indicates that the endpwent_r routine
- * is available to endpwent re-entrantly.
- */
-/* ENDPWENT_R_PROTO:
- * This symbol encodes the prototype of endpwent_r.
- * It is zero if d_endpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endpwent_r
- * is defined.
- */
-/*#define HAS_ENDPWENT_R /**/
-#define ENDPWENT_R_PROTO 0 /**/
-
-/* HAS_ENDSERVENT:
- * This symbol, if defined, indicates that the endservent() routine is
- * available to close whatever was being used for service queries.
- */
-/*#define HAS_ENDSERVENT /**/
-
-/* HAS_FCHDIR:
- * This symbol, if defined, indicates that the fchdir routine is
- * available to change directory using a file descriptor.
- */
-/*#define HAS_FCHDIR /**/
-
-/* FCNTL_CAN_LOCK:
- * This symbol, if defined, indicates that fcntl() can be used
- * for file locking. Normally on Unix systems this is defined.
- * It may be undefined on VMS.
- */
-/*#define FCNTL_CAN_LOCK /**/
-
-/* HAS_FD_SET:
- * This symbol, when defined, indicates presence of the fd_set typedef
- * in <sys/types.h>
- */
-#define HAS_FD_SET /**/
-
-/* HAS_FINITE:
- * This symbol, if defined, indicates that the finite routine is
- * available to check whether a double is finite (non-infinity non-NaN).
- */
-/*#define HAS_FINITE /**/
-
-/* HAS_FINITEL:
- * This symbol, if defined, indicates that the finitel routine is
- * available to check whether a long double is finite
- * (non-infinity non-NaN).
- */
-/*#define HAS_FINITEL /**/
-
-/* FLEXFILENAMES:
- * This symbol, if defined, indicates that the system supports filenames
- * longer than 14 characters.
- */
-#define FLEXFILENAMES /**/
-
-/* HAS_FP_CLASS:
- * This symbol, if defined, indicates that the fp_class routine is
- * available to classify doubles. Available for example in Digital UNIX.
- * The returned values are defined in <math.h> and are:
- *
- * FP_SNAN Signaling NaN (Not-a-Number)
- * FP_QNAN Quiet NaN (Not-a-Number)
- * FP_POS_INF +infinity
- * FP_NEG_INF -infinity
- * FP_POS_NORM Positive normalized
- * FP_NEG_NORM Negative normalized
- * FP_POS_DENORM Positive denormalized
- * FP_NEG_DENORM Negative denormalized
- * FP_POS_ZERO +0.0 (positive zero)
- * FP_NEG_ZERO -0.0 (negative zero)
- */
-/*#define HAS_FP_CLASS /**/
-
-/* HAS_FPCLASS:
- * This symbol, if defined, indicates that the fpclass routine is
- * available to classify doubles. Available for example in Solaris/SVR4.
- * The returned values are defined in <ieeefp.h> and are:
- *
- * FP_SNAN signaling NaN
- * FP_QNAN quiet NaN
- * FP_NINF negative infinity
- * FP_PINF positive infinity
- * FP_NDENORM negative denormalized non-zero
- * FP_PDENORM positive denormalized non-zero
- * FP_NZERO negative zero
- * FP_PZERO positive zero
- * FP_NNORM negative normalized non-zero
- * FP_PNORM positive normalized non-zero
- */
-/*#define HAS_FPCLASS /**/
-
-/* HAS_FPCLASSIFY:
- * This symbol, if defined, indicates that the fpclassify routine is
- * available to classify doubles. Available for example in HP-UX.
- * The returned values are defined in <math.h> and are
- *
- * FP_NORMAL Normalized
- * FP_ZERO Zero
- * FP_INFINITE Infinity
- * FP_SUBNORMAL Denormalized
- * FP_NAN NaN
- *
- */
-/*#define HAS_FPCLASSIFY /**/
-
-/* HAS_FPOS64_T:
- * This symbol will be defined if the C compiler supports fpos64_t.
- */
-/*#define HAS_FPOS64_T /**/
-
-/* HAS_FREXPL:
- * This symbol, if defined, indicates that the frexpl routine is
- * available to break a long double floating-point number into
- * a normalized fraction and an integral power of 2.
- */
-/*#define HAS_FREXPL /**/
-
-/* HAS_STRUCT_FS_DATA:
- * This symbol, if defined, indicates that the struct fs_data
- * to do statfs() is supported.
- */
-/*#define HAS_STRUCT_FS_DATA /**/
-
-/* HAS_FSEEKO:
- * This symbol, if defined, indicates that the fseeko routine is
- * available to fseek beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FSEEKO /**/
-
-/* HAS_FSTATFS:
- * This symbol, if defined, indicates that the fstatfs routine is
- * available to stat filesystems by file descriptors.
- */
-/*#define HAS_FSTATFS /**/
-
-/* HAS_FSYNC:
- * This symbol, if defined, indicates that the fsync routine is
- * available to write a file's modified data and attributes to
- * permanent storage.
- */
-/*#define HAS_FSYNC /**/
-
-/* HAS_FTELLO:
- * This symbol, if defined, indicates that the ftello routine is
- * available to ftell beyond 32 bits (useful for ILP32 hosts).
- */
-/*#define HAS_FTELLO /**/
-
-/* HAS_FUTIMES:
- * This symbol, if defined, indicates that the futimes routine is
- * available to change file descriptor time stamps with struct timevals.
- */
-/*#define HAS_FUTIMES /**/
-
-/* Gconvert:
- * This preprocessor macro is defined to convert a floating point
- * number to a string without a trailing decimal point. This
- * emulates the behavior of sprintf("%g"), but is sometimes much more
- * efficient. If gconvert() is not available, but gcvt() drops the
- * trailing decimal point, then gcvt() is used. If all else fails,
- * a macro using sprintf("%g") is used. Arguments for the Gconvert
- * macro are: value, number of digits, whether trailing zeros should
- * be retained, and the output buffer.
- * The usual values are:
- * d_Gconvert='gconvert((x),(n),(t),(b))'
- * d_Gconvert='gcvt((x),(n),(b))'
- * d_Gconvert='sprintf((b),"%.*g",(n),(x))'
- * The last two assume trailing zeros should not be kept.
- */
-#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
-
-/* HAS_GETCWD:
- * This symbol, if defined, indicates that the getcwd routine is
- * available to get the current working directory.
- */
-#define HAS_GETCWD /**/
-
-/* HAS_GETESPWNAM:
- * This symbol, if defined, indicates that the getespwnam system call is
- * available to retrieve enchanced (shadow) password entries by name.
- */
-/*#define HAS_GETESPWNAM /**/
-
-/* HAS_GETFSSTAT:
- * This symbol, if defined, indicates that the getfsstat routine is
- * available to stat filesystems in bulk.
- */
-/*#define HAS_GETFSSTAT /**/
-
-/* HAS_GETGRENT:
- * This symbol, if defined, indicates that the getgrent routine is
- * available for sequential access of the group database.
- */
-/*#define HAS_GETGRENT /**/
-
-/* HAS_GETGRENT_R:
- * This symbol, if defined, indicates that the getgrent_r routine
- * is available to getgrent re-entrantly.
- */
-/* GETGRENT_R_PROTO:
- * This symbol encodes the prototype of getgrent_r.
- * It is zero if d_getgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrent_r
- * is defined.
- */
-/*#define HAS_GETGRENT_R /**/
-#define GETGRENT_R_PROTO 0 /**/
-
-/* HAS_GETGRGID_R:
- * This symbol, if defined, indicates that the getgrgid_r routine
- * is available to getgrgid re-entrantly.
- */
-/* GETGRGID_R_PROTO:
- * This symbol encodes the prototype of getgrgid_r.
- * It is zero if d_getgrgid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrgid_r
- * is defined.
- */
-/*#define HAS_GETGRGID_R /**/
-#define GETGRGID_R_PROTO 0 /**/
-
-/* HAS_GETGRNAM_R:
- * This symbol, if defined, indicates that the getgrnam_r routine
- * is available to getgrnam re-entrantly.
- */
-/* GETGRNAM_R_PROTO:
- * This symbol encodes the prototype of getgrnam_r.
- * It is zero if d_getgrnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getgrnam_r
- * is defined.
- */
-/*#define HAS_GETGRNAM_R /**/
-#define GETGRNAM_R_PROTO 0 /**/
-
-/* HAS_GETHOSTBYADDR:
- * This symbol, if defined, indicates that the gethostbyaddr() routine is
- * available to look up hosts by their IP addresses.
- */
-#define HAS_GETHOSTBYADDR /**/
-
-/* HAS_GETHOSTBYNAME:
- * This symbol, if defined, indicates that the gethostbyname() routine is
- * available to look up host names in some data base or other.
- */
-#define HAS_GETHOSTBYNAME /**/
-
-/* HAS_GETHOSTENT:
- * This symbol, if defined, indicates that the gethostent() routine is
- * available to look up host names in some data base or another.
- */
-/*#define HAS_GETHOSTENT /**/
-
-/* HAS_GETHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * gethostname() routine to derive the host name. See also HAS_UNAME
- * and PHOSTNAME.
- */
-/* HAS_UNAME:
- * This symbol, if defined, indicates that the C program may use the
- * uname() routine to derive the host name. See also HAS_GETHOSTNAME
- * and PHOSTNAME.
- */
-/* PHOSTNAME:
- * This symbol, if defined, indicates the command to feed to the
- * popen() routine to derive the host name. See also HAS_GETHOSTNAME
- * and HAS_UNAME. Note that the command uses a fully qualified path,
- * so that it is safe even if used by a process with super-user
- * privileges.
- */
-/* HAS_PHOSTNAME:
- * This symbol, if defined, indicates that the C program may use the
- * contents of PHOSTNAME as a command to feed to the popen() routine
- * to derive the host name.
- */
-#define HAS_GETHOSTNAME /**/
-#define HAS_UNAME /**/
-/*#define HAS_PHOSTNAME /**/
-#ifdef HAS_PHOSTNAME
-#define PHOSTNAME "" /* How to get the host name */
-#endif
-
-/* HAS_GETHOST_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for gethostent(), gethostbyname(), and
- * gethostbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETHOST_PROTOS /**/
-
-/* HAS_GETITIMER:
- * This symbol, if defined, indicates that the getitimer routine is
- * available to return interval timers.
- */
-/*#define HAS_GETITIMER /**/
-
-/* HAS_GETLOGIN_R:
- * This symbol, if defined, indicates that the getlogin_r routine
- * is available to getlogin re-entrantly.
- */
-/* GETLOGIN_R_PROTO:
- * This symbol encodes the prototype of getlogin_r.
- * It is zero if d_getlogin_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getlogin_r
- * is defined.
- */
-/*#define HAS_GETLOGIN_R /**/
-#define GETLOGIN_R_PROTO 0 /**/
-
-/* HAS_GETMNT:
- * This symbol, if defined, indicates that the getmnt routine is
- * available to get filesystem mount info by filename.
- */
-/*#define HAS_GETMNT /**/
-
-/* HAS_GETMNTENT:
- * This symbol, if defined, indicates that the getmntent routine is
- * available to iterate through mounted file systems to get their info.
- */
-/*#define HAS_GETMNTENT /**/
-
-/* HAS_GETNETBYADDR:
- * This symbol, if defined, indicates that the getnetbyaddr() routine is
- * available to look up networks by their IP addresses.
- */
-/*#define HAS_GETNETBYADDR /**/
-
-/* HAS_GETNETBYNAME:
- * This symbol, if defined, indicates that the getnetbyname() routine is
- * available to look up networks by their names.
- */
-/*#define HAS_GETNETBYNAME /**/
-
-/* HAS_GETNETENT:
- * This symbol, if defined, indicates that the getnetent() routine is
- * available to look up network names in some data base or another.
- */
-/*#define HAS_GETNETENT /**/
-
-/* HAS_GETNET_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getnetent(), getnetbyname(), and
- * getnetbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-/*#define HAS_GETNET_PROTOS /**/
-
-/* HAS_GETPAGESIZE:
- * This symbol, if defined, indicates that the getpagesize system call
- * is available to get system page size, which is the granularity of
- * many memory management calls.
- */
-/*#define HAS_GETPAGESIZE /**/
-
-/* HAS_GETPROTOENT:
- * This symbol, if defined, indicates that the getprotoent() routine is
- * available to look up protocols in some data base or another.
- */
-/*#define HAS_GETPROTOENT /**/
-
-/* HAS_GETPGRP:
- * This symbol, if defined, indicates that the getpgrp routine is
- * available to get the current process group.
- */
-/* USE_BSD_GETPGRP:
- * This symbol, if defined, indicates that getpgrp needs one
- * arguments whereas USG one needs none.
- */
-/*#define HAS_GETPGRP /**/
-/*#define USE_BSD_GETPGRP /**/
-
-/* HAS_GETPROTOBYNAME:
- * This symbol, if defined, indicates that the getprotobyname()
- * routine is available to look up protocols by their name.
- */
-/* HAS_GETPROTOBYNUMBER:
- * This symbol, if defined, indicates that the getprotobynumber()
- * routine is available to look up protocols by their number.
- */
-#define HAS_GETPROTOBYNAME /**/
-#define HAS_GETPROTOBYNUMBER /**/
-
-/* HAS_GETPROTO_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getprotoent(), getprotobyname(), and
- * getprotobyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETPROTO_PROTOS /**/
-
-/* HAS_GETPRPWNAM:
- * This symbol, if defined, indicates that the getprpwnam system call is
- * available to retrieve protected (shadow) password entries by name.
- */
-/*#define HAS_GETPRPWNAM /**/
-
-/* HAS_GETPWENT:
- * This symbol, if defined, indicates that the getpwent routine is
- * available for sequential access of the passwd database.
- * If this is not available, the older getpw() function may be available.
- */
-/*#define HAS_GETPWENT /**/
-
-/* HAS_GETPWENT_R:
- * This symbol, if defined, indicates that the getpwent_r routine
- * is available to getpwent re-entrantly.
- */
-/* GETPWENT_R_PROTO:
- * This symbol encodes the prototype of getpwent_r.
- * It is zero if d_getpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwent_r
- * is defined.
- */
-/*#define HAS_GETPWENT_R /**/
-#define GETPWENT_R_PROTO 0 /**/
-
-/* HAS_GETPWNAM_R:
- * This symbol, if defined, indicates that the getpwnam_r routine
- * is available to getpwnam re-entrantly.
- */
-/* GETPWNAM_R_PROTO:
- * This symbol encodes the prototype of getpwnam_r.
- * It is zero if d_getpwnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwnam_r
- * is defined.
- */
-/*#define HAS_GETPWNAM_R /**/
-#define GETPWNAM_R_PROTO 0 /**/
-
-/* HAS_GETPWUID_R:
- * This symbol, if defined, indicates that the getpwuid_r routine
- * is available to getpwuid re-entrantly.
- */
-/* GETPWUID_R_PROTO:
- * This symbol encodes the prototype of getpwuid_r.
- * It is zero if d_getpwuid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getpwuid_r
- * is defined.
- */
-/*#define HAS_GETPWUID_R /**/
-#define GETPWUID_R_PROTO 0 /**/
-
-/* HAS_GETSERVENT:
- * This symbol, if defined, indicates that the getservent() routine is
- * available to look up network services in some data base or another.
- */
-/*#define HAS_GETSERVENT /**/
-
-/* HAS_GETSERV_PROTOS:
- * This symbol, if defined, indicates that <netdb.h> includes
- * prototypes for getservent(), getservbyname(), and
- * getservbyaddr(). Otherwise, it is up to the program to guess
- * them. See netdbtype.U for probing for various Netdb_xxx_t types.
- */
-#define HAS_GETSERV_PROTOS /**/
-
-/* HAS_GETSPNAM:
- * This symbol, if defined, indicates that the getspnam system call is
- * available to retrieve SysV shadow password entries by name.
- */
-/*#define HAS_GETSPNAM /**/
-
-/* HAS_GETSPNAM_R:
- * This symbol, if defined, indicates that the getspnam_r routine
- * is available to getspnam re-entrantly.
- */
-/* GETSPNAM_R_PROTO:
- * This symbol encodes the prototype of getspnam_r.
- * It is zero if d_getspnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getspnam_r
- * is defined.
- */
-/*#define HAS_GETSPNAM_R /**/
-#define GETSPNAM_R_PROTO 0 /**/
-
-/* HAS_GETSERVBYNAME:
- * This symbol, if defined, indicates that the getservbyname()
- * routine is available to look up services by their name.
- */
-/* HAS_GETSERVBYPORT:
- * This symbol, if defined, indicates that the getservbyport()
- * routine is available to look up services by their port.
- */
-#define HAS_GETSERVBYNAME /**/
-#define HAS_GETSERVBYPORT /**/
-
-/* HAS_GMTIME_R:
- * This symbol, if defined, indicates that the gmtime_r routine
- * is available to gmtime re-entrantly.
- */
-/* GMTIME_R_PROTO:
- * This symbol encodes the prototype of gmtime_r.
- * It is zero if d_gmtime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gmtime_r
- * is defined.
- */
-/*#define HAS_GMTIME_R /**/
-#define GMTIME_R_PROTO 0 /**/
-
-/* HAS_GNULIBC:
- * This symbol, if defined, indicates to the C program that
- * the GNU C library is being used. A better check is to use
- * the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc.
- */
-/*#define HAS_GNULIBC /**/
-#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)
-# define _GNU_SOURCE
-#endif
-/* HAS_HASMNTOPT:
- * This symbol, if defined, indicates that the hasmntopt routine is
- * available to query the mount options of file systems.
- */
-/*#define HAS_HASMNTOPT /**/
-
-/* HAS_HTONL:
- * This symbol, if defined, indicates that the htonl() routine (and
- * friends htons() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_HTONS:
- * This symbol, if defined, indicates that the htons() routine (and
- * friends htonl() ntohl() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHL:
- * This symbol, if defined, indicates that the ntohl() routine (and
- * friends htonl() htons() ntohs()) are available to do network
- * order byte swapping.
- */
-/* HAS_NTOHS:
- * This symbol, if defined, indicates that the ntohs() routine (and
- * friends htonl() htons() ntohl()) are available to do network
- * order byte swapping.
- */
-#define HAS_HTONL /**/
-#define HAS_HTONS /**/
-#define HAS_NTOHL /**/
-#define HAS_NTOHS /**/
-
-/* HAS_INT64_T:
- * This symbol will defined if the C compiler supports int64_t.
- * Usually the <inttypes.h> needs to be included, but sometimes
- * <sys/types.h> is enough.
- */
-/*#define HAS_INT64_T /**/
-
-/* HAS_ISASCII:
- * This manifest constant lets the C program know that isascii
- * is available.
- */
-#define HAS_ISASCII /**/
-
-/* HAS_ISFINITE:
- * This symbol, if defined, indicates that the isfinite routine is
- * available to check whether a double is finite (non-infinity non-NaN).
- */
-/*#define HAS_ISFINITE /**/
-
-/* HAS_ISINF:
- * This symbol, if defined, indicates that the isinf routine is
- * available to check whether a double is an infinity.
- */
-/*#define HAS_ISINF /**/
-
-/* HAS_ISNAN:
- * This symbol, if defined, indicates that the isnan routine is
- * available to check whether a double is a NaN.
- */
-#define HAS_ISNAN /**/
-
-/* HAS_ISNANL:
- * This symbol, if defined, indicates that the isnanl routine is
- * available to check whether a long double is a NaN.
- */
-/*#define HAS_ISNANL /**/
-
-/* HAS_LCHOWN:
- * This symbol, if defined, indicates that the lchown routine is
- * available to operate on a symbolic link (instead of following the
- * link).
- */
-/*#define HAS_LCHOWN /**/
-
-/* HAS_LDBL_DIG:
- * This symbol, if defined, indicates that this system's <float.h>
- * or <limits.h> defines the symbol LDBL_DIG, which is the number
- * of significant digits in a long double precision number. Unlike
- * for DBL_DIG, there's no good guess for LDBL_DIG if it is undefined.
- */
-#define HAS_LDBL_DIG /**/
-
-/* HAS_LOCALTIME_R:
- * This symbol, if defined, indicates that the localtime_r routine
- * is available to localtime re-entrantly.
- */
-/* LOCALTIME_R_NEEDS_TZSET:
- * Many libc's localtime_r implementations do not call tzset,
- * making them differ from localtime(), and making timezone
- * changes using \undef{TZ} without explicitly calling tzset
- * impossible. This symbol makes us call tzset before localtime_r
- */
-/*#define LOCALTIME_R_NEEDS_TZSET /**/
-#ifdef LOCALTIME_R_NEEDS_TZSET
-#define L_R_TZSET tzset(),
-#else
-#define L_R_TZSET
-#endif
-
-/* LOCALTIME_R_PROTO:
- * This symbol encodes the prototype of localtime_r.
- * It is zero if d_localtime_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_localtime_r
- * is defined.
- */
-/*#define HAS_LOCALTIME_R /**/
-#define LOCALTIME_R_PROTO 0 /**/
-
-/* HAS_LONG_DOUBLE:
- * This symbol will be defined if the C compiler supports long
- * doubles.
- */
-/* LONG_DOUBLESIZE:
- * This symbol contains the size of a long double, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long doubles.
- */
-/*#define HAS_LONG_DOUBLE /**/
-#ifdef HAS_LONG_DOUBLE
-#define LONG_DOUBLESIZE 10 /**/
-#endif
-
-/* HAS_LONG_LONG:
- * This symbol will be defined if the C compiler supports long long.
- */
-/* LONGLONGSIZE:
- * This symbol contains the size of a long long, so that the
- * C preprocessor can make decisions based on it. It is only
- * defined if the system supports long long.
- */
-/*#define HAS_LONG_LONG /**/
-#ifdef HAS_LONG_LONG
-#define LONGLONGSIZE 8 /**/
-#endif
-
-/* HAS_LSEEK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the lseek() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern off_t lseek(int, off_t, int);
- */
-#define HAS_LSEEK_PROTO /**/
-
-/* HAS_MADVISE:
- * This symbol, if defined, indicates that the madvise system call is
- * available to map a file into memory.
- */
-/*#define HAS_MADVISE /**/
-
-/* HAS_MALLOC_SIZE:
- * This symbol, if defined, indicates that the malloc_size
- * routine is available for use.
- */
-/*#define HAS_MALLOC_SIZE /**/
-
-/* HAS_MALLOC_GOOD_SIZE:
- * This symbol, if defined, indicates that the malloc_good_size
- * routine is available for use.
- */
-/*#define HAS_MALLOC_GOOD_SIZE /**/
-
-/* HAS_MKDTEMP:
- * This symbol, if defined, indicates that the mkdtemp routine is
- * available to exclusively create a uniquely named temporary directory.
- */
-/*#define HAS_MKDTEMP /**/
-
-/* HAS_MKSTEMP:
- * This symbol, if defined, indicates that the mkstemp routine is
- * available to exclusively create and open a uniquely named
- * temporary file.
- */
-/*#define HAS_MKSTEMP /**/
-
-/* HAS_MKSTEMPS:
- * This symbol, if defined, indicates that the mkstemps routine is
- * available to excluslvely create and open a uniquely named
- * (with a suffix) temporary file.
- */
-/*#define HAS_MKSTEMPS /**/
-
-/* HAS_MMAP:
- * This symbol, if defined, indicates that the mmap system call is
- * available to map a file into memory.
- */
-/* Mmap_t:
- * This symbol holds the return type of the mmap() system call
- * (and simultaneously the type of the first argument).
- * Usually set to 'void *' or 'cadd_t'.
- */
-/*#define HAS_MMAP /**/
-#define Mmap_t void * /**/
-
-/* HAS_MODFL:
- * This symbol, if defined, indicates that the modfl routine is
- * available to split a long double x into a fractional part f and
- * an integer part i such that |f| < 1.0 and (f + i) = x.
- */
-/* HAS_MODFL_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the modfl() function. Otherwise, it is up
- * to the program to supply one.
- */
-/*#define HAS_MODFL /**/
-/*#define HAS_MODFL_PROTO /**/
-
-/* HAS_MPROTECT:
- * This symbol, if defined, indicates that the mprotect system call is
- * available to modify the access protection of a memory mapped file.
- */
-/*#define HAS_MPROTECT /**/
-
-/* HAS_MSG:
- * This symbol, if defined, indicates that the entire msg*(2) library is
- * supported (IPC mechanism based on message queues).
- */
-/*#define HAS_MSG /**/
-
-/* HAS_STRUCT_MSGHDR:
- * This symbol, if defined, indicates that the struct msghdr
- * is supported.
- */
-/*#define HAS_STRUCT_MSGHDR /**/
-
-/* HAS_OFF64_T:
- * This symbol will be defined if the C compiler supports off64_t.
- */
-/*#define HAS_OFF64_T /**/
-
-/* HAS_OPEN3:
- * This manifest constant lets the C program know that the three
- * argument form of open(2) is available.
- */
-/*#define HAS_OPEN3 /**/
-
-/* OLD_PTHREAD_CREATE_JOINABLE:
- * This symbol, if defined, indicates how to create pthread
- * in joinable (aka undetached) state. NOTE: not defined
- * if pthread.h already has defined PTHREAD_CREATE_JOINABLE
- * (the new version of the constant).
- * If defined, known values are PTHREAD_CREATE_UNDETACHED
- * and __UNDETACHED.
- */
-/*#define OLD_PTHREAD_CREATE_JOINABLE /**/
-
-/* HAS_PTHREAD_YIELD:
- * This symbol, if defined, indicates that the pthread_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/* SCHED_YIELD:
- * This symbol defines the way to yield the execution of
- * the current thread. Known ways are sched_yield,
- * pthread_yield, and pthread_yield with NULL.
- */
-/* HAS_SCHED_YIELD:
- * This symbol, if defined, indicates that the sched_yield
- * routine is available to yield the execution of the current
- * thread. sched_yield is preferable to pthread_yield.
- */
-/*#define HAS_PTHREAD_YIELD /**/
-#define SCHED_YIELD /**/
-/*#define HAS_SCHED_YIELD /**/
-
-/* HAS_RANDOM_R:
- * This symbol, if defined, indicates that the random_r routine
- * is available to random re-entrantly.
- */
-/* RANDOM_R_PROTO:
- * This symbol encodes the prototype of random_r.
- * It is zero if d_random_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_random_r
- * is defined.
- */
-/*#define HAS_RANDOM_R /**/
-#define RANDOM_R_PROTO 0 /**/
-
-/* HAS_READDIR_R:
- * This symbol, if defined, indicates that the readdir_r routine
- * is available to readdir re-entrantly.
- */
-/* READDIR_R_PROTO:
- * This symbol encodes the prototype of readdir_r.
- * It is zero if d_readdir_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir_r
- * is defined.
- */
-/*#define HAS_READDIR_R /**/
-#define READDIR_R_PROTO 0 /**/
-
-/* HAS_READV:
- * This symbol, if defined, indicates that the readv routine is
- * available to do gather reads. You will also need <sys/uio.h>
- * and there I_SYSUIO.
- */
-/*#define HAS_READV /**/
-
-/* HAS_RECVMSG:
- * This symbol, if defined, indicates that the recvmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_RECVMSG /**/
-
-/* HAS_SBRK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sbrk() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern void* sbrk(int);
- * extern void* sbrk(size_t);
- */
-/*#define HAS_SBRK_PROTO /**/
-
-/* HAS_SEM:
- * This symbol, if defined, indicates that the entire sem*(2) library is
- * supported.
- */
-/*#define HAS_SEM /**/
-
-/* HAS_SENDMSG:
- * This symbol, if defined, indicates that the sendmsg routine is
- * available to send structured socket messages.
- */
-/*#define HAS_SENDMSG /**/
-
-/* HAS_SETGRENT:
- * This symbol, if defined, indicates that the setgrent routine is
- * available for initializing sequential access of the group database.
- */
-/*#define HAS_SETGRENT /**/
-
-/* HAS_SETGRENT_R:
- * This symbol, if defined, indicates that the setgrent_r routine
- * is available to setgrent re-entrantly.
- */
-/* SETGRENT_R_PROTO:
- * This symbol encodes the prototype of setgrent_r.
- * It is zero if d_setgrent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setgrent_r
- * is defined.
- */
-/*#define HAS_SETGRENT_R /**/
-#define SETGRENT_R_PROTO 0 /**/
-
-/* HAS_SETGROUPS:
- * This symbol, if defined, indicates that the setgroups() routine is
- * available to set the list of process groups. If unavailable, multiple
- * groups are probably not supported.
- */
-/*#define HAS_SETGROUPS /**/
-
-/* HAS_SETHOSTENT:
- * This symbol, if defined, indicates that the sethostent() routine is
- * available.
- */
-/*#define HAS_SETHOSTENT /**/
-
-/* HAS_SETITIMER:
- * This symbol, if defined, indicates that the setitimer routine is
- * available to set interval timers.
- */
-/*#define HAS_SETITIMER /**/
-
-/* HAS_SETNETENT:
- * This symbol, if defined, indicates that the setnetent() routine is
- * available.
- */
-/*#define HAS_SETNETENT /**/
-
-/* HAS_SETPROTOENT:
- * This symbol, if defined, indicates that the setprotoent() routine is
- * available.
- */
-/*#define HAS_SETPROTOENT /**/
-
-/* HAS_SETPGRP:
- * This symbol, if defined, indicates that the setpgrp routine is
- * available to set the current process group.
- */
-/* USE_BSD_SETPGRP:
- * This symbol, if defined, indicates that setpgrp needs two
- * arguments whereas USG one needs none. See also HAS_SETPGID
- * for a POSIX interface.
- */
-/*#define HAS_SETPGRP /**/
-/*#define USE_BSD_SETPGRP /**/
-
-/* HAS_SETPROCTITLE:
- * This symbol, if defined, indicates that the setproctitle routine is
- * available to set process title.
- */
-/*#define HAS_SETPROCTITLE /**/
-
-/* HAS_SETPWENT:
- * This symbol, if defined, indicates that the setpwent routine is
- * available for initializing sequential access of the passwd database.
- */
-/*#define HAS_SETPWENT /**/
-
-/* HAS_SETPWENT_R:
- * This symbol, if defined, indicates that the setpwent_r routine
- * is available to setpwent re-entrantly.
- */
-/* SETPWENT_R_PROTO:
- * This symbol encodes the prototype of setpwent_r.
- * It is zero if d_setpwent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setpwent_r
- * is defined.
- */
-/*#define HAS_SETPWENT_R /**/
-#define SETPWENT_R_PROTO 0 /**/
-
-/* HAS_SETSERVENT:
- * This symbol, if defined, indicates that the setservent() routine is
- * available.
- */
-/*#define HAS_SETSERVENT /**/
-
-/* HAS_SETVBUF:
- * This symbol, if defined, indicates that the setvbuf routine is
- * available to change buffering on an open stdio stream.
- * to a line-buffered mode.
- */
-/*#define HAS_SETVBUF /**/
-
-/* HAS_SHM:
- * This symbol, if defined, indicates that the entire shm*(2) library is
- * supported.
- */
-/*#define HAS_SHM /**/
-
-/* HAS_SIGACTION:
- * This symbol, if defined, indicates that Vr4's sigaction() routine
- * is available.
- */
-/*#define HAS_SIGACTION /**/
-
-/* HAS_SIGSETJMP:
- * This variable indicates to the C program that the sigsetjmp()
- * routine is available to save the calling process's registers
- * and stack environment for later use by siglongjmp(), and
- * to optionally save the process's signal mask. See
- * Sigjmp_buf, Sigsetjmp, and Siglongjmp.
- */
-/* Sigjmp_buf:
- * This is the buffer type to be used with Sigsetjmp and Siglongjmp.
- */
-/* Sigsetjmp:
- * This macro is used in the same way as sigsetjmp(), but will invoke
- * traditional setjmp() if sigsetjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/* Siglongjmp:
- * This macro is used in the same way as siglongjmp(), but will invoke
- * traditional longjmp() if siglongjmp isn't available.
- * See HAS_SIGSETJMP.
- */
-/*#define HAS_SIGSETJMP /**/
-#ifdef HAS_SIGSETJMP
-#define Sigjmp_buf sigjmp_buf
-#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask))
-#define Siglongjmp(buf,retval) siglongjmp((buf),(retval))
-#else
-#define Sigjmp_buf jmp_buf
-#define Sigsetjmp(buf,save_mask) setjmp((buf))
-#define Siglongjmp(buf,retval) longjmp((buf),(retval))
-#endif
-
-/* HAS_STATIC_INLINE:
- * This symbol, if defined, indicates that the C compiler supports
- * C99-style static inline. That is, the function can't be called
- * from another translation unit.
- */
-/* PERL_STATIC_INLINE:
- * This symbol gives the best-guess incantation to use for static
- * inline functions. If HAS_STATIC_INLINE is defined, this will
- * give C99-style inline. If HAS_STATIC_INLINE is not defined,
- * this will give a plain 'static'. It will always be defined
- * to something that gives static linkage.
- * Possibilities include
- * static inline (c99)
- * static __inline__ (gcc -ansi)
- * static __inline (MSVC)
- * static _inline (older MSVC)
- * static (c89 compilers)
- */
-/*#define HAS_STATIC_INLINE / **/
-#define PERL_STATIC_INLINE static /**/
-
-/* USE_SITECUSTOMIZE:
- * This symbol, if defined, indicates that sitecustomize should
- * be used.
- */
-/*#define USE_SITECUSTOMIZE /**/
-
-/* HAS_SOCKET:
- * This symbol, if defined, indicates that the BSD socket interface is
- * supported.
- */
-/* HAS_SOCKETPAIR:
- * This symbol, if defined, indicates that the BSD socketpair() call is
- * supported.
- */
-#define HAS_SOCKET /**/
-/*#define HAS_SOCKETPAIR /**/
-
-/* HAS_SOCKS5_INIT:
- * This symbol, if defined, indicates that the socks5_init routine is
- * available to initialize SOCKS 5.
- */
-/*#define HAS_SOCKS5_INIT /**/
-
-/* HAS_SQRTL:
- * This symbol, if defined, indicates that the sqrtl routine is
- * available to do long double square roots.
- */
-/*#define HAS_SQRTL /**/
-
-/* HAS_SRAND48_R:
- * This symbol, if defined, indicates that the srand48_r routine
- * is available to srand48 re-entrantly.
- */
-/* SRAND48_R_PROTO:
- * This symbol encodes the prototype of srand48_r.
- * It is zero if d_srand48_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srand48_r
- * is defined.
- */
-/*#define HAS_SRAND48_R /**/
-#define SRAND48_R_PROTO 0 /**/
-
-/* HAS_SRANDOM_R:
- * This symbol, if defined, indicates that the srandom_r routine
- * is available to srandom re-entrantly.
- */
-/* SRANDOM_R_PROTO:
- * This symbol encodes the prototype of srandom_r.
- * It is zero if d_srandom_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_srandom_r
- * is defined.
- */
-/*#define HAS_SRANDOM_R /**/
-#define SRANDOM_R_PROTO 0 /**/
-
-/* USE_STAT_BLOCKS:
- * This symbol is defined if this system has a stat structure declaring
- * st_blksize and st_blocks.
- */
-#ifndef USE_STAT_BLOCKS
-/*#define USE_STAT_BLOCKS /**/
-#endif
-
-/* HAS_STRUCT_STATFS_F_FLAGS:
- * This symbol, if defined, indicates that the struct statfs
- * does have the f_flags member containing the mount flags of
- * the filesystem containing the file.
- * This kind of struct statfs is coming from <sys/mount.h> (BSD 4.3),
- * not from <sys/statfs.h> (SYSV). Older BSDs (like Ultrix) do not
- * have statfs() and struct statfs, they have ustat() and getmnt()
- * with struct ustat and struct fs_data.
- */
-/*#define HAS_STRUCT_STATFS_F_FLAGS /**/
-
-/* HAS_STRUCT_STATFS:
- * This symbol, if defined, indicates that the struct statfs
- * to do statfs() is supported.
- */
-/*#define HAS_STRUCT_STATFS /**/
-
-/* HAS_FSTATVFS:
- * This symbol, if defined, indicates that the fstatvfs routine is
- * available to stat filesystems by file descriptors.
- */
-/*#define HAS_FSTATVFS /**/
-
-/* USE_STDIO_PTR:
- * This symbol is defined if the _ptr and _cnt fields (or similar)
- * of the stdio FILE structure can be used to access the stdio buffer
- * for a file handle. If this is defined, then the FILE_ptr(fp)
- * and FILE_cnt(fp) macros will also be defined and should be used
- * to access these fields.
- */
-/* FILE_ptr:
- * This macro is used to access the _ptr field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_PTR_LVALUE:
- * This symbol is defined if the FILE_ptr macro can be used as an
- * lvalue.
- */
-/* FILE_cnt:
- * This macro is used to access the _cnt field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_PTR is defined.
- */
-/* STDIO_CNT_LVALUE:
- * This symbol is defined if the FILE_cnt macro can be used as an
- * lvalue.
- */
-/* STDIO_PTR_LVAL_SETS_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n has the side effect of decreasing the
- * value of File_cnt(fp) by n.
- */
-/* STDIO_PTR_LVAL_NOCHANGE_CNT:
- * This symbol is defined if using the FILE_ptr macro as an lvalue
- * to increase the pointer by n leaves File_cnt(fp) unchanged.
- */
-/*#define USE_STDIO_PTR /**/
-#ifdef USE_STDIO_PTR
-#define FILE_ptr(fp)
-/*#define STDIO_PTR_LVALUE /**/
-#define FILE_cnt(fp)
-/*#define STDIO_CNT_LVALUE /**/
-/*#define STDIO_PTR_LVAL_SETS_CNT /**/
-/*#define STDIO_PTR_LVAL_NOCHANGE_CNT /**/
-#endif
-
-/* USE_STDIO_BASE:
- * This symbol is defined if the _base field (or similar) of the
- * stdio FILE structure can be used to access the stdio buffer for
- * a file handle. If this is defined, then the FILE_base(fp) macro
- * will also be defined and should be used to access this field.
- * Also, the FILE_bufsiz(fp) macro will be defined and should be used
- * to determine the number of bytes in the buffer. USE_STDIO_BASE
- * will never be defined unless USE_STDIO_PTR is.
- */
-/* FILE_base:
- * This macro is used to access the _base field (or equivalent) of the
- * FILE structure pointed to by its argument. This macro will always be
- * defined if USE_STDIO_BASE is defined.
- */
-/* FILE_bufsiz:
- * This macro is used to determine the number of bytes in the I/O
- * buffer pointed to by _base field (or equivalent) of the FILE
- * structure pointed to its argument. This macro will always be defined
- * if USE_STDIO_BASE is defined.
- */
-/*#define USE_STDIO_BASE /**/
-#ifdef USE_STDIO_BASE
-#define FILE_base(fp)
-#define FILE_bufsiz(fp)
-#endif
-
-/* HAS_SYS_ERRLIST:
- * This symbol, if defined, indicates that the sys_errlist array is
- * available to translate error numbers to strings. The extern int
- * sys_nerr gives the size of that table.
- */
-#define HAS_SYS_ERRLIST /**/
-
-/* HAS_STRERROR_R:
- * This symbol, if defined, indicates that the strerror_r routine
- * is available to strerror re-entrantly.
- */
-/* STRERROR_R_PROTO:
- * This symbol encodes the prototype of strerror_r.
- * It is zero if d_strerror_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_strerror_r
- * is defined.
- */
-/*#define HAS_STRERROR_R /**/
-#define STRERROR_R_PROTO 0 /**/
-
-/* HAS_STRTOLD:
- * This symbol, if defined, indicates that the strtold routine is
- * available to convert strings to long doubles.
- */
-/*#define HAS_STRTOLD /**/
-
-/* HAS_STRTOLL:
- * This symbol, if defined, indicates that the strtoll routine is
- * available to convert strings to long longs.
- */
-/*#define HAS_STRTOLL /**/
-
-/* HAS_STRTOQ:
- * This symbol, if defined, indicates that the strtoq routine is
- * available to convert strings to long longs (quads).
- */
-/*#define HAS_STRTOQ /**/
-
-/* HAS_STRTOUL:
- * This symbol, if defined, indicates that the strtoul routine is
- * available to provide conversion of strings to unsigned long.
- */
-#define HAS_STRTOUL /**/
-
-/* HAS_STRTOULL:
- * This symbol, if defined, indicates that the strtoull routine is
- * available to convert strings to unsigned long longs.
- */
-/*#define HAS_STRTOULL /**/
-
-/* HAS_STRTOUQ:
- * This symbol, if defined, indicates that the strtouq routine is
- * available to convert strings to unsigned long longs (quads).
- */
-/*#define HAS_STRTOUQ /**/
-
-/* HAS_TELLDIR_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the telldir() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern long telldir(DIR*);
- */
-#define HAS_TELLDIR_PROTO /**/
-
-/* HAS_TIME:
- * This symbol, if defined, indicates that the time() routine exists.
- */
-/* Time_t:
- * This symbol holds the type returned by time(). It can be long,
- * or time_t on BSD sites (in which case <sys/types.h> should be
- * included).
- */
-#define HAS_TIME /**/
-#define Time_t time_t /* Time type */
-
-/* HAS_TIMES:
- * This symbol, if defined, indicates that the times() routine exists.
- * Note that this became obsolete on some systems (SUNOS), which now
- * use getrusage(). It may be necessary to include <sys/times.h>.
- */
-#define HAS_TIMES /**/
-
-/* HAS_TMPNAM_R:
- * This symbol, if defined, indicates that the tmpnam_r routine
- * is available to tmpnam re-entrantly.
- */
-/* TMPNAM_R_PROTO:
- * This symbol encodes the prototype of tmpnam_r.
- * It is zero if d_tmpnam_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_tmpnam_r
- * is defined.
- */
-/*#define HAS_TMPNAM_R /**/
-#define TMPNAM_R_PROTO 0 /**/
-
-/* HAS_UALARM:
- * This symbol, if defined, indicates that the ualarm routine is
- * available to do alarms with microsecond granularity.
- */
-/*#define HAS_UALARM /**/
-
-/* HAS_UNION_SEMUN:
- * 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 {
- * int val;
- * struct semid_ds *buf;
- * unsigned short *array;
- * }
- */
-/* USE_SEMCTL_SEMUN:
- * This symbol, if defined, indicates that union semun is
- * used for semctl IPC_STAT.
- */
-/* USE_SEMCTL_SEMID_DS:
- * This symbol, if defined, indicates that struct semid_ds * is
- * used for semctl IPC_STAT.
- */
-#define HAS_UNION_SEMUN /**/
-/*#define USE_SEMCTL_SEMUN /**/
-/*#define USE_SEMCTL_SEMID_DS /**/
-
-/* HAS_UNORDERED:
- * This symbol, if defined, indicates that the unordered routine is
- * available to check whether two doubles are unordered
- * (effectively: whether either of them is NaN)
- */
-/*#define HAS_UNORDERED /**/
-
-/* HAS_UNSETENV:
- * This symbol, if defined, indicates that the unsetenv () routine is
- * available for use.
- */
-/*#define HAS_UNSETENV /**/
-
-/* HAS_USTAT:
- * This symbol, if defined, indicates that the ustat system call is
- * available to query file system statistics by dev_t.
- */
-/*#define HAS_USTAT /**/
-
-/* HAS_VFORK:
- * This symbol, if defined, indicates that vfork() exists.
- */
-/*#define HAS_VFORK /**/
-
-/* Signal_t:
- * This symbol's value is either "void" or "int", corresponding to the
- * appropriate return type of a signal handler. Thus, you can declare
- * a signal handler using "Signal_t (*handler)()", and define the
- * handler using "Signal_t handler(sig)".
- */
-#define Signal_t void /* Signal handler's return type */
-
-/* HAS_WRITEV:
- * This symbol, if defined, indicates that the writev routine is
- * available to do scatter writes.
- */
-/*#define HAS_WRITEV /**/
-
-/* DEFAULT_INC_EXCLUDES_DOT:
- * This symbol, if defined, removes the legacy default behavior of
- * including '.' at the end of @INC.
- */
-/*#define DEFAULT_INC_EXCLUDES_DOT /**/
-
-/* USE_DYNAMIC_LOADING:
- * This symbol, if defined, indicates that dynamic loading of
- * some sort is available.
- */
-#define USE_DYNAMIC_LOADING /**/
-
-/* DOUBLESIZE:
- * This symbol contains the size of a double, so that the C preprocessor
- * can make decisions based on it.
- */
-#define DOUBLESIZE 8 /**/
-
-/* DOUBLE_STYLE_IEEE
- * This symbol, if defined, indicates that the double is
- * the 64-bit IEEE 754.
- */
-/* DOUBLE_HAS_INF
- * This symbol, if defined, indicates that the double has
- * the infinity.
- */
-/* DOUBLE_HAS_NAN
- * This symbol, if defined, indicates that the double has
- * the not-a-number.
- */
-/* DOUBLE_HAS_NEGATIVE_ZERO
- * This symbol, if defined, indicates that the double has
- * the negative_zero.
- */
-/* DOUBLE_HAS_SUBNORMALS
- * This symbol, if defined, indicates that the double has
- * the subnormals (denormals).
- */
-#define DOUBLE_STYLE_IEEE
-#define DOUBLE_HAS_INF
-#define DOUBLE_HAS_INF
-#define DOUBLE_HAS_NEGATIVE_ZERO
-#define DOUBLE_HAS_SUBNORMALS
-
-/* DOUBLEINFBYTES:
- * This symbol, if defined, is a comma-separated list of
- * hexadecimal bytes for the double precision infinity.
- */
-/* DOUBLENANBYTES:
- * This symbol, if defined, is a comma-separated list of
- * hexadecimal bytes (0xHH) for the double precision not-a-number.
- */
-/* LONGDBLINFBYTES:
- * This symbol, if defined, is a comma-separated list of
- * hexadecimal bytes for the long double precision infinity.
- */
-/* LONGDBLNANBYTES:
- * This symbol, if defined, is a comma-separated list of
- * hexadecimal bytes (0xHH) for the long double precision not-a-number.
- */
-#define DOUBLEINFBYTES 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f /**/
-#define DOUBLENANBYTES 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f /**/
-#define LONGDBLINFBYTES 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f /**/
-#define LONGDBLNANBYTES 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f /**/
-
-/* DOUBLEMANTBITS:
- * This symbol, if defined, tells how many mantissa bits
- * there are in double precision floating point format.
- * Note that this is usually DBL_MANT_DIG minus one, since
- * with the standard IEEE 754 formats DBL_MANT_DIG includes
- * the implicit bit, which doesn't really exist.
- */
-#define DOUBLEMANTBITS 52
-
-/* LONGDBLMANTBITS:
- * This symbol, if defined, tells how many mantissa bits
- * there are in long double precision floating point format.
- * Note that this can be LDBL_MANT_DIG minus one,
- * since LDBL_MANT_DIG can include the IEEE 754 implicit bit.
- * The common x86-style 80-bit long double does not have
- * an implicit bit.
- */
-#define LONGDBLMANTBITS 52
-
-/* EBCDIC:
- * This symbol, if defined, indicates that this system uses
- * EBCDIC encoding.
- */
-/*#define EBCDIC /**/
-
-/* FFLUSH_NULL:
- * This symbol, if defined, tells that fflush(NULL) does flush
- * all pending stdio output.
- */
-/* FFLUSH_ALL:
- * This symbol, if defined, tells that to flush
- * all pending stdio output one must loop through all
- * the stdio file handles stored in an array and fflush them.
- * Note that if fflushNULL is defined, fflushall will not
- * even be probed for and will be left undefined.
- */
-#define FFLUSH_NULL /**/
-/*#define FFLUSH_ALL /**/
-
-/* Fpos_t:
- * This symbol holds the type used to declare file positions in libc.
- * It can be fpos_t, long, uint, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Fpos_t fpos_t /* File position type */
-
-/* Gid_t_f:
- * This symbol defines the format string used for printing a Gid_t.
- */
-#define Gid_t_f "ld" /**/
-
-/* Gid_t_sign:
- * This symbol holds the signedess of a Gid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Gid_t_sign -1 /* GID sign */
-
-/* Gid_t_size:
- * This symbol holds the size of a Gid_t in bytes.
- */
-#define Gid_t_size 4 /* GID size */
-
-/* Gid_t:
- * This symbol holds the return type of getgid() and the type of
- * argument to setrgid() and related functions. Typically,
- * it is the type of group ids in the kernel. It can be int, ushort,
- * gid_t, etc... It may be necessary to include <sys/types.h> to get
- * any typedef'ed information.
- */
-#define Gid_t gid_t /* Type for getgid(), etc... */
-
-/* Groups_t:
- * This symbol holds the type used for the second argument to
- * getgroups() and setgroups(). Usually, this is the same as
- * gidtype (gid_t) , but sometimes it isn't.
- * It can be int, ushort, gid_t, etc...
- * It may be necessary to include <sys/types.h> to get any
- * typedef'ed information. This is only required if you have
- * getgroups() or setgroups()..
- */
-#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
-#define Groups_t gid_t /* Type for 2nd arg to [sg]etgroups() */
-#endif
-
-/* DB_Prefix_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is u_int32_t.
- */
-/* DB_Hash_t:
- * This symbol contains the type of the prefix structure element
- * in the <db.h> header file. In older versions of DB, it was
- * int, while in newer ones it is size_t.
- */
-/* DB_VERSION_MAJOR_CFG:
- * This symbol, if defined, defines the major version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- */
-/* DB_VERSION_MINOR_CFG:
- * This symbol, if defined, defines the minor version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- * For DB version 1 this is always 0.
- */
-/* DB_VERSION_PATCH_CFG:
- * This symbol, if defined, defines the patch version number of
- * Berkeley DB found in the <db.h> header when Perl was configured.
- * For DB version 1 this is always 0.
- */
-#define DB_Hash_t int /**/
-#define DB_Prefix_t int /**/
-#define DB_VERSION_MAJOR_CFG undef /**/
-#define DB_VERSION_MINOR_CFG undef /**/
-#define DB_VERSION_PATCH_CFG undef /**/
-
-/* I_FP_CLASS:
- * This symbol, if defined, indicates that <fp_class.h> exists and
- * should be included.
- */
-/*#define I_FP_CLASS /**/
-
-/* I_GRP:
- * This symbol, if defined, indicates to the C program that it should
- * include <grp.h>.
- */
-/* GRPASSWD:
- * This symbol, if defined, indicates to the C program that struct group
- * in <grp.h> contains gr_passwd.
- */
-/*#define I_GRP /**/
-/*#define GRPASSWD /**/
-
-/* I_IEEEFP:
- * This symbol, if defined, indicates that <ieeefp.h> exists and
- * should be included.
- */
-/*#define I_IEEEFP /**/
-
-/* I_INTTYPES:
- * This symbol, if defined, indicates to the C program that it should
- * include <inttypes.h>.
- */
-/*#define I_INTTYPES /**/
-
-/* I_LIBUTIL:
- * This symbol, if defined, indicates that <libutil.h> exists and
- * should be included.
- */
-/*#define I_LIBUTIL /**/
-
-/* I_MACH_CTHREADS:
- * This symbol, if defined, indicates to the C program that it should
- * include <mach/cthreads.h>.
- */
-/*#define I_MACH_CTHREADS /**/
-
-/* I_MNTENT:
- * This symbol, if defined, indicates that <mntent.h> exists and
- * should be included.
- */
-/*#define I_MNTENT /**/
-
-/* I_NETDB:
- * This symbol, if defined, indicates that <netdb.h> exists and
- * should be included.
- */
-/*#define I_NETDB /**/
-
-/* I_NETINET_TCP:
- * This symbol, if defined, indicates to the C program that it should
- * include <netinet/tcp.h>.
- */
-/*#define I_NETINET_TCP /**/
-
-/* I_POLL:
- * This symbol, if defined, indicates that <poll.h> exists and
- * should be included.
- */
-/*#define I_POLL /**/
-
-/* I_PROT:
- * This symbol, if defined, indicates that <prot.h> exists and
- * should be included.
- */
-/*#define I_PROT /**/
-
-/* I_PTHREAD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pthread.h>.
- */
-/*#define I_PTHREAD /**/
-
-/* I_PWD:
- * This symbol, if defined, indicates to the C program that it should
- * include <pwd.h>.
- */
-/* PWQUOTA:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_quota.
- */
-/* PWAGE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_age.
- */
-/* PWCHANGE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_change.
- */
-/* PWCLASS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_class.
- */
-/* PWEXPIRE:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_expire.
- */
-/* PWCOMMENT:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_comment.
- */
-/* PWGECOS:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_gecos.
- */
-/* PWPASSWD:
- * This symbol, if defined, indicates to the C program that struct passwd
- * contains pw_passwd.
- */
-/*#define I_PWD /**/
-/*#define PWQUOTA /**/
-/*#define PWAGE /**/
-/*#define PWCHANGE /**/
-/*#define PWCLASS /**/
-/*#define PWEXPIRE /**/
-/*#define PWCOMMENT /**/
-/*#define PWGECOS /**/
-/*#define PWPASSWD /**/
-
-/* I_SHADOW:
- * This symbol, if defined, indicates that <shadow.h> exists and
- * should be included.
- */
-/*#define I_SHADOW /**/
-
-/* I_SOCKS:
- * This symbol, if defined, indicates that <socks.h> exists and
- * should be included.
- */
-/*#define I_SOCKS /**/
-
-/* I_SUNMATH:
- * This symbol, if defined, indicates that <sunmath.h> exists and
- * should be included.
- */
-/*#define I_SUNMATH /**/
-
-/* I_SYSLOG:
- * This symbol, if defined, indicates that <syslog.h> exists and
- * should be included.
- */
-/*#define I_SYSLOG /**/
-
-/* I_SYSMODE:
- * This symbol, if defined, indicates that <sys/mode.h> exists and
- * should be included.
- */
-/*#define I_SYSMODE /**/
-
-/* I_SYS_MOUNT:
- * This symbol, if defined, indicates that <sys/mount.h> exists and
- * should be included.
- */
-/*#define I_SYS_MOUNT /**/
-
-/* I_SYS_STATFS:
- * This symbol, if defined, indicates that <sys/statfs.h> exists.
- */
-/*#define I_SYS_STATFS /**/
-
-/* I_SYS_STATVFS:
- * This symbol, if defined, indicates that <sys/statvfs.h> exists and
- * should be included.
- */
-/*#define I_SYS_STATVFS /**/
-
-/* I_SYSUIO:
- * This symbol, if defined, indicates that <sys/uio.h> exists and
- * should be included.
- */
-/*#define I_SYSUIO /**/
-
-/* I_SYSUTSNAME:
- * This symbol, if defined, indicates that <sys/utsname.h> exists and
- * should be included.
- */
-/*#define I_SYSUTSNAME /**/
-
-/* I_SYS_VFS:
- * This symbol, if defined, indicates that <sys/vfs.h> exists and
- * should be included.
- */
-/*#define I_SYS_VFS /**/
-
-/* I_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <time.h>.
- */
-/* I_SYS_TIME:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h>.
- */
-/* I_SYS_TIME_KERNEL:
- * This symbol, if defined, indicates to the C program that it should
- * include <sys/time.h> with KERNEL defined.
- */
-/* HAS_TM_TM_ZONE:
- * This symbol, if defined, indicates to the C program that
- * the struct tm has a tm_zone field.
- */
-/* HAS_TM_TM_GMTOFF:
- * This symbol, if defined, indicates to the C program that
- * the struct tm has a tm_gmtoff field.
- */
-/*#define I_TIME /**/
-/*#define I_SYS_TIME /**/
-/*#define I_SYS_TIME_KERNEL /**/
-/*#define HAS_TM_TM_ZONE /**/
-/*#define HAS_TM_TM_GMTOFF /**/
-
-/* I_USTAT:
- * This symbol, if defined, indicates that <ustat.h> exists and
- * should be included.
- */
-/*#define I_USTAT /**/
-
-/* PERL_INC_VERSION_LIST:
- * This variable specifies the list of subdirectories in over
- * which perl.c:incpush() and lib/lib.pm will automatically
- * search when adding directories to @INC, in a format suitable
- * for a C initialization string. See the inc_version_list entry
- * in Porting/Glossary for more details.
- */
-#define PERL_INC_VERSION_LIST 0 /**/
-
-/* INSTALL_USR_BIN_PERL:
- * This symbol, if defined, indicates that Perl is to be installed
- * also as /usr/bin/perl.
- */
-/*#define INSTALL_USR_BIN_PERL /**/
-
-/* PERL_PRIfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for output.
- */
-/* PERL_PRIgldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'g') for output.
- */
-/* PERL_PRIeldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'e') for output.
- */
-/* PERL_SCNfldbl:
- * This symbol, if defined, contains the string used by stdio to
- * format long doubles (format 'f') for input.
- */
-/*#define PERL_PRIfldbl "f" /**/
-/*#define PERL_PRIgldbl "g" /**/
-/*#define PERL_PRIeldbl "e" /**/
-/*#define PERL_SCNfldbl undef /**/
-
-/* Off_t:
- * This symbol holds the type used to declare offsets in the kernel.
- * It can be int, long, off_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-/* LSEEKSIZE:
- * This symbol holds the number of bytes used by the Off_t.
- */
-/* Off_t_size:
- * This symbol holds the number of bytes used by the Off_t.
- */
-#define Off_t long /* <offset> type */
-#define LSEEKSIZE 4 /* <offset> size */
-#define Off_t_size 4 /* <offset> size */
-
-/* Free_t:
- * This variable contains the return type of free(). It is usually
- * void, but occasionally int.
- */
-/* Malloc_t:
- * This symbol is the type of pointer returned by malloc and realloc.
- */
-#define Malloc_t void * /**/
-#define Free_t void /**/
-
-/* PERL_MALLOC_WRAP:
- * This symbol, if defined, indicates that we'd like malloc wrap checks.
- */
-#define PERL_MALLOC_WRAP /**/
-
-/* MYMALLOC:
- * This symbol, if defined, indicates that we're using our own malloc.
- */
-#define MYMALLOC /**/
-
-/* Mode_t:
- * This symbol holds the type used to declare file modes
- * for systems calls. It is usually mode_t, but may be
- * int or unsigned short. It may be necessary to include <sys/types.h>
- * to get any typedef'ed information.
- */
-#define Mode_t mode_t /* file mode parameter for system calls */
-
-/* VAL_O_NONBLOCK:
- * This symbol is to be used during open() or fcntl(F_SETFL) to turn on
- * non-blocking I/O for the file descriptor. Note that there is no way
- * back, i.e. you cannot turn it blocking again this way. If you wish to
- * alternatively switch between blocking and non-blocking, use the
- * ioctl(FIOSNBIO) call instead, but that is not supported by all devices.
- */
-/* VAL_EAGAIN:
- * This symbol holds the errno error code set by read() when no data was
- * present on the non-blocking file descriptor.
- */
-/* RD_NODATA:
- * This symbol holds the return code from read() when no data is present
- * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is
- * not defined, then you can't distinguish between no data and EOF by
- * issuing a read(). You'll have to find another way to tell for sure!
- */
-/* EOF_NONBLOCK:
- * This symbol, if defined, indicates to the C program that a read() on
- * a non-blocking file descriptor will return 0 on EOF, and not the value
- * held in RD_NODATA (-1 usually, in that case!).
- */
-#define VAL_O_NONBLOCK O_NONBLOCK
-#define VAL_EAGAIN EAGAIN
-#define RD_NODATA -1
-#define EOF_NONBLOCK
-
-/* NEED_VA_COPY:
- * This symbol, if defined, indicates that the system stores
- * the variable argument list datatype, va_list, in a format
- * that cannot be copied by simple assignment, so that some
- * other means must be used when copying is required.
- * As such systems vary in their provision (or non-provision)
- * of copying mechanisms, handy.h defines a platform-
- * independent macro, Perl_va_copy(src, dst), to do the job.
- */
-/*#define NEED_VA_COPY /**/
-
-/* Netdb_host_t:
- * This symbol holds the type used for the 1st argument
- * to gethostbyaddr().
- */
-/* Netdb_hlen_t:
- * This symbol holds the type used for the 2nd argument
- * to gethostbyaddr().
- */
-/* Netdb_name_t:
- * This symbol holds the type used for the argument to
- * gethostbyname().
- */
-/* Netdb_net_t:
- * This symbol holds the type used for the 1st argument to
- * getnetbyaddr().
- */
-#define Netdb_host_t char * /**/
-#define Netdb_hlen_t int /**/
-#define Netdb_name_t char * /**/
-#define Netdb_net_t long /**/
-
-/* PERL_OTHERLIBDIRS:
- * This variable contains a colon-separated set of paths for the perl
- * binary to search for additional library files or modules.
- * These directories will be tacked to the end of @INC.
- * Perl will automatically search below each path for version-
- * and architecture-specific directories. See PERL_INC_VERSION_LIST
- * for more details.
- */
-/*#define PERL_OTHERLIBDIRS "" /**/
-
-/* HAS_QUAD:
- * This symbol, if defined, tells that there's a 64-bit integer type,
- * Quad_t, and its unsigned counterpar, Uquad_t. QUADKIND will be one
- * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, or QUAD_IS_INT64_T.
- */
-/*#define HAS_QUAD /**/
-#ifdef HAS_QUAD
-# define Quad_t __int64 /**/
-# define Uquad_t unsigned __int64 /**/
-# define QUADKIND 5 /**/
-# define QUAD_IS_INT 1
-# define QUAD_IS_LONG 2
-# define QUAD_IS_LONG_LONG 3
-# define QUAD_IS_INT64_T 4
-#endif
-
-/* IVTYPE:
- * This symbol defines the C type used for Perl's IV.
- */
-/* UVTYPE:
- * This symbol defines the C type used for Perl's UV.
- */
-/* I8TYPE:
- * This symbol defines the C type used for Perl's I8.
- */
-/* U8TYPE:
- * This symbol defines the C type used for Perl's U8.
- */
-/* I16TYPE:
- * This symbol defines the C type used for Perl's I16.
- */
-/* U16TYPE:
- * This symbol defines the C type used for Perl's U16.
- */
-/* I32TYPE:
- * This symbol defines the C type used for Perl's I32.
- */
-/* U32TYPE:
- * This symbol defines the C type used for Perl's U32.
- */
-/* I64TYPE:
- * This symbol defines the C type used for Perl's I64.
- */
-/* U64TYPE:
- * This symbol defines the C type used for Perl's U64.
- */
-/* NVTYPE:
- * This symbol defines the C type used for Perl's NV.
- */
-/* IVSIZE:
- * This symbol contains the sizeof(IV).
- */
-/* UVSIZE:
- * This symbol contains the sizeof(UV).
- */
-/* I8SIZE:
- * This symbol contains the sizeof(I8).
- */
-/* U8SIZE:
- * This symbol contains the sizeof(U8).
- */
-/* I16SIZE:
- * This symbol contains the sizeof(I16).
- */
-/* U16SIZE:
- * This symbol contains the sizeof(U16).
- */
-/* I32SIZE:
- * This symbol contains the sizeof(I32).
- */
-/* U32SIZE:
- * This symbol contains the sizeof(U32).
- */
-/* I64SIZE:
- * This symbol contains the sizeof(I64).
- */
-/* U64SIZE:
- * This symbol contains the sizeof(U64).
- */
-/* NVSIZE:
- * This symbol contains the sizeof(NV).
- */
-/* NV_PRESERVES_UV:
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * can preserve all the bits of a variable of type UVTYPE.
- */
-/* NV_PRESERVES_UV_BITS:
- * This symbol contains the number of bits a variable of type NVTYPE
- * can preserve of a variable of type UVTYPE.
- */
-/* NV_OVERFLOWS_INTEGERS_AT
- * This symbol gives the largest integer value that NVs can hold. This
- * value + 1.0 cannot be stored accurately. It is expressed as constant
- * floating point expression to reduce the chance of decimale/binary
- * conversion issues. If it can not be determined, the value 0 is given.
- */
-/* NV_ZERO_IS_ALLBITS_ZERO
- * This symbol, if defined, indicates that a variable of type NVTYPE
- * stores 0.0 in memory as all bits zero.
- */
-#define IVTYPE long /**/
-#define UVTYPE unsigned long /**/
-#define I8TYPE char /**/
-#define U8TYPE unsigned char /**/
-#define I16TYPE short /**/
-#define U16TYPE unsigned short /**/
-#define I32TYPE long /**/
-#define U32TYPE unsigned long /**/
-#ifdef HAS_QUAD
-#define I64TYPE __int64 /**/
-#define U64TYPE unsigned __int64 /**/
-#endif
-#define NVTYPE double /**/
-#define IVSIZE 4 /**/
-#define UVSIZE 4 /**/
-#define I8SIZE 1 /**/
-#define U8SIZE 1 /**/
-#define I16SIZE 2 /**/
-#define U16SIZE 2 /**/
-#define I32SIZE 4 /**/
-#define U32SIZE 4 /**/
-#ifdef HAS_QUAD
-#define I64SIZE 8 /**/
-#define U64SIZE 8 /**/
-#endif
-#define NVSIZE 8 /**/
-#define NV_PRESERVES_UV
-#define NV_PRESERVES_UV_BITS undef
-#define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0
-#undef NV_ZERO_IS_ALLBITS_ZERO
-#if UVSIZE == 8
-# ifdef BYTEORDER
-# if BYTEORDER == 0x1234
-# undef BYTEORDER
-# define BYTEORDER 0x12345678
-# else
-# if BYTEORDER == 0x4321
-# undef BYTEORDER
-# define BYTEORDER 0x87654321
-# endif
-# endif
-# endif
-#endif
-
-/* IVdf:
- * This symbol defines the format string used for printing a Perl IV
- * as a signed decimal integer.
- */
-/* UVuf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned decimal integer.
- */
-/* UVof:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned octal integer.
- */
-/* UVxf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in lowercase abcdef.
- */
-/* UVXf:
- * This symbol defines the format string used for printing a Perl UV
- * as an unsigned hexadecimal integer in uppercase ABCDEF.
- */
-/* NVef:
- * This symbol defines the format string used for printing a Perl NV
- * using %e-ish floating point format.
- */
-/* NVff:
- * This symbol defines the format string used for printing a Perl NV
- * using %f-ish floating point format.
- */
-/* NVgf:
- * This symbol defines the format string used for printing a Perl NV
- * using %g-ish floating point format.
- */
-#define IVdf "ld" /**/
-#define UVuf "lu" /**/
-#define UVof "lo" /**/
-#define UVxf "lx" /**/
-#define UVXf "lX" /**/
-#define NVef "e" /**/
-#define NVff "f" /**/
-#define NVgf "g" /**/
-
-/* Pid_t:
- * This symbol holds the type used to declare process ids in the kernel.
- * It can be int, uint, pid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Pid_t int /* PID type */
-
-/* PRIVLIB:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- */
-/* PRIVLIB_EXP:
- * 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 "\\Storage Card\\perl58m\\lib" /**/
-#define PRIVLIB_EXP (PerlEnv_lib_path(PERL_VERSION_STRING, NULL)) /**/
-
-/* PTRSIZE:
- * This symbol contains the size of a pointer, so that the C preprocessor
- * can make decisions based on it. It will be sizeof(void *) if
- * the compiler supports (void *); otherwise it will be
- * sizeof(char *).
- */
-#define PTRSIZE 4 /**/
-
-/* Drand01:
- * This macro is to be used to generate uniformly distributed
- * random numbers over the range [0., 1.[. You may have to supply
- * an 'extern double drand48();' in your program since SunOS 4.1.3
- * doesn't provide you with anything relevant in its headers.
- * See HAS_DRAND48_PROTO.
- */
-/* Rand_seed_t:
- * This symbol defines the type of the argument of the
- * random seed function.
- */
-/* seedDrand01:
- * This symbol defines the macro to be used in seeding the
- * random number generator (see Drand01).
- */
-/* RANDBITS:
- * This symbol indicates how many bits are produced by the
- * function used to generate normalized random numbers.
- * Values include 15, 16, 31, and 48.
- */
-#define Drand01() (rand()/(double)((unsigned)1<<RANDBITS)) /**/
-#define Rand_seed_t unsigned /**/
-#define seedDrand01(x) srand((Rand_seed_t)x) /**/
-#define RANDBITS 15 /**/
-
-/* SELECT_MIN_BITS:
- * This symbol holds the minimum number of bits operated by select.
- * That is, if you do select(n, ...), how many bits at least will be
- * cleared in the masks if some activity is detected. Usually this
- * is either n or 32*ceil(n/32), especially many little-endians do
- * the latter. This is only useful if you have select(), naturally.
- */
-#define SELECT_MIN_BITS 32 /**/
-
-/* Select_fd_set_t:
- * This symbol holds the type used for the 2nd, 3rd, and 4th
- * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
- * is defined, and 'int *' otherwise. This is only useful if you
- * have select(), of course.
- */
-#define Select_fd_set_t Perl_fd_set * /**/
-
-/* SIG_NAME:
- * This symbol contains a list of signal names in order of
- * signal number. This is intended
- * to be used as a static array initialization, like this:
- * char *sig_name[] = { SIG_NAME };
- * The signals in the list are separated with commas, and each signal
- * is surrounded by double quotes. There is no leading SIG in the signal
- * name, i.e. SIGQUIT is known as "QUIT".
- * Gaps in the signal numbers (up to NSIG) are filled in with NUMnn,
- * etc., where nn is the actual signal number (e.g. NUM37).
- * The signal number for sig_name[i] is stored in sig_num[i].
- * The last element is 0 to terminate the list with a NULL. This
- * corresponds to the 0 at the end of the sig_name_init list.
- * Note that this variable is initialized from the sig_name_init,
- * not from sig_name (which is unused).
- */
-/* SIG_NUM:
- * This symbol contains a list of signal numbers, in the same order as the
- * SIG_NAME list. It is suitable for static array initialization, as in:
- * int sig_num[] = { SIG_NUM };
- * The signals in the list are separated with commas, and the indices
- * within that list and the SIG_NAME list match, so it's easy to compute
- * the signal name from a number or vice versa at the price of a small
- * dynamic linear lookup.
- * Duplicates are allowed, but are moved to the end of the list.
- * The signal number corresponding to sig_name[i] is sig_number[i].
- * if (i < NSIG) then sig_number[i] == i.
- * The last element is 0, corresponding to the 0 at the end of
- * the sig_name_init list.
- * Note that this variable is initialized from the sig_num_init,
- * not from sig_num (which is unused).
- */
-/* SIG_SIZE:
- * This variable contains the number of elements of the SIG_NAME
- * and SIG_NUM arrays, excluding the final NULL entry.
- */
-#define SIG_NAME "ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0 /**/
-#define SIG_NUM 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0 /**/
-#define SIG_SIZE 27 /**/
-
-/* SITEARCH:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-dependent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITEARCH_EXP:
- * 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 "\\Storage Card\\perl58m\\site\\lib" /**/
-/*#define SITEARCH_EXP "" /**/
-
-/* SITELIB:
- * This symbol contains the name of the private library for this package.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world. The program
- * should be prepared to do ~ expansion.
- * The standard distribution will put nothing in this directory.
- * After perl has been installed, users may install their own local
- * architecture-independent modules in this directory with
- * MakeMaker Makefile.PL
- * or equivalent. See INSTALL for details.
- */
-/* SITELIB_EXP:
- * This symbol contains the ~name expanded version of SITELIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* SITELIB_STEM:
- * This define is SITELIB_EXP with any trailing version-specific component
- * 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 "\\Storage Card\\perl58m\\site\\lib" /**/
-#define SITELIB_EXP (PerlEnv_sitelib_path(PERL_VERSION_STRING, NULL)) /**/
-#define SITELIB_STEM "" /**/
-
-/* Size_t_size:
- * This symbol holds the size of a Size_t in bytes.
- */
-#define Size_t_size 4 /**/
-
-/* Size_t:
- * This symbol holds the type used to declare length parameters
- * for string functions. It is usually size_t, but may be
- * unsigned long, int, etc. It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Size_t size_t /* length paramater for string functions */
-
-/* Sock_size_t:
- * This symbol holds the type used for the size argument of
- * various socket calls (just the base type, not the pointer-to).
- */
-#define Sock_size_t int /**/
-
-/* SSize_t:
- * This symbol holds the type used by functions that return
- * a count of bytes or an error condition. It must be a signed type.
- * It is usually ssize_t, but may be long or int, etc.
- * It may be necessary to include <sys/types.h> or <unistd.h>
- * to get any typedef'ed information.
- * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
- */
-#define SSize_t int /* signed count of bytes */
-
-/* STARTPERL:
- * This variable contains the string to put in front of a perl
- * script to make sure (one hopes) that it runs with perl and not
- * some shell.
- */
-#define STARTPERL "#!perl" /**/
-
-/* STDCHAR:
- * This symbol is defined to be the type of char used in stdio.h.
- * It has the values "unsigned char" or "char".
- */
-#define STDCHAR char /**/
-
-/* HAS_STDIO_STREAM_ARRAY:
- * This symbol, if defined, tells that there is an array
- * holding the stdio streams.
- */
-/* STDIO_STREAM_ARRAY:
- * This symbol tells the name of the array holding the stdio streams.
- * Usual values include _iob, __iob, and __sF.
- */
-/*#define HAS_STDIO_STREAM_ARRAY /**/
-#define STDIO_STREAM_ARRAY
-
-/* Uid_t_f:
- * This symbol defines the format string used for printing a Uid_t.
- */
-#define Uid_t_f "ld" /**/
-
-/* Uid_t_sign:
- * This symbol holds the signedess of a Uid_t.
- * 1 for unsigned, -1 for signed.
- */
-#define Uid_t_sign -1 /* UID sign */
-
-/* Uid_t_size:
- * This symbol holds the size of a Uid_t in bytes.
- */
-#define Uid_t_size 4 /* UID size */
-
-/* Uid_t:
- * This symbol holds the type used to declare user ids in the kernel.
- * It can be int, ushort, uid_t, etc... It may be necessary to include
- * <sys/types.h> to get any typedef'ed information.
- */
-#define Uid_t uid_t /* UID type */
-
-/* USE_64_BIT_INT:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be employed (be they 32 or 64 bits). The minimal possible
- * 64-bitness is used, just enough to get 64-bit integers into Perl.
- * This may mean using for example "long longs", while your memory
- * may still be limited to 2 gigabytes.
- */
-/* USE_64_BIT_ALL:
- * This symbol, if defined, indicates that 64-bit integers should
- * be used when available. If not defined, the native integers
- * will be used (be they 32 or 64 bits). The maximal possible
- * 64-bitness is employed: LP64 or ILP64, meaning that you will
- * be able to use more than 2 gigabytes of memory. This mode is
- * even more binary incompatible than USE_64_BIT_INT. You may not
- * be able to run the resulting executable in a 32-bit CPU at all or
- * you may need at least to reboot your OS to 64-bit mode.
- */
-#ifndef USE_64_BIT_INT
-/*#define USE_64_BIT_INT /**/
-#endif
-
-#ifndef USE_64_BIT_ALL
-/*#define USE_64_BIT_ALL /**/
-#endif
-
-/* USE_LARGE_FILES:
- * This symbol, if defined, indicates that large file support
- * should be used when available.
- */
-#ifndef USE_LARGE_FILES
-/*#define USE_LARGE_FILES /**/
-#endif
-
-/* USE_LONG_DOUBLE:
- * This symbol, if defined, indicates that long doubles should
- * be used when available.
- */
-#ifndef USE_LONG_DOUBLE
-/*#define USE_LONG_DOUBLE /**/
-#endif
-
-/* USE_MORE_BITS:
- * This symbol, if defined, indicates that 64-bit interfaces and
- * long doubles should be used when available.
- */
-#ifndef USE_MORE_BITS
-/*#define USE_MORE_BITS /**/
-#endif
-
-/* MULTIPLICITY:
- * This symbol, if defined, indicates that Perl should
- * be built to use multiplicity.
- */
-#ifndef MULTIPLICITY
-/*#define MULTIPLICITY /**/
-#endif
-
-/* USE_PERLIO:
- * This symbol, if defined, indicates that the PerlIO abstraction should
- * be used throughout. If not defined, stdio should be
- * used in a fully backward compatible manner.
- */
-#ifndef USE_PERLIO
-#define USE_PERLIO /**/
-#endif
-
-/* USE_SOCKS:
- * This symbol, if defined, indicates that Perl should
- * be built to use socks.
- */
-#ifndef USE_SOCKS
-/*#define USE_SOCKS /**/
-#endif
-
-/* USE_ITHREADS:
- * 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.
- */
-/* OLD_PTHREADS_API:
- * This symbol, if defined, indicates that Perl should
- * be built to use the old draft POSIX threads API.
- */
-/* USE_REENTRANT_API:
- * This symbol, if defined, indicates that Perl should
- * 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 OLD_PTHREADS_API /**/
-/*#define USE_REENTRANT_API /**/
-
-/* USE_DTRACE
- * This symbol, if defined, indicates that Perl should
- * be built with support for DTrace.
- */
-/*#define USE_DTRACE / **/
-
-/* PERL_VENDORARCH:
- * If defined, this symbol contains the name of a private library.
- * The library is private in the sense that it needn't be in anyone's
- * execution path, but it should be accessible by the world.
- * It may have a ~ on the front.
- * The standard distribution will put nothing in this directory.
- * Vendors who distribute perl may wish to place their own
- * architecture-dependent modules and extensions in this directory with
- * MakeMaker Makefile.PL INSTALLDIRS=vendor
- * or equivalent. See INSTALL for details.
- */
-/* PERL_VENDORARCH_EXP:
- * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/*#define PERL_VENDORARCH "" /**/
-/*#define PERL_VENDORARCH_EXP "" /**/
-
-/* PERL_VENDORLIB_EXP:
- * This symbol contains the ~name expanded version of VENDORLIB, to be used
- * in programs that are not prepared to deal with ~ expansion at run-time.
- */
-/* PERL_VENDORLIB_STEM:
- * This define is PERL_VENDORLIB_EXP with any trailing version-specific component
- * 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 PERL_VENDORLIB_EXP "" /**/
-/*#define PERL_VENDORLIB_STEM "" /**/
-
-/* HASATTRIBUTE_FORMAT:
- * Can we handle GCC attribute for checking printf-style formats
- */
-/* HASATTRIBUTE_MALLOC:
- * Can we handle GCC attribute for malloc-style functions.
- */
-/* HASATTRIBUTE_NONNULL:
- * Can we handle GCC attribute for nonnull function parms.
- */
-/* HASATTRIBUTE_NORETURN:
- * Can we handle GCC attribute for functions that do not return
- */
-/* HASATTRIBUTE_PURE:
- * Can we handle GCC attribute for pure functions
- */
-/* HASATTRIBUTE_UNUSED:
- * Can we handle GCC attribute for unused variables and arguments
- */
-/* HASATTRIBUTE_WARN_UNUSED_RESULT:
- * Can we handle GCC attribute for warning on unused results
- */
-/*#define HASATTRIBUTE_FORMAT /**/
-/*#define HASATTRIBUTE_NORETURN /**/
-/*#define HASATTRIBUTE_MALLOC /**/
-/*#define HASATTRIBUTE_NONNULL /**/
-/*#define HASATTRIBUTE_PURE /**/
-/*#define HASATTRIBUTE_UNUSED /**/
-/*#define HASATTRIBUTE_WARN_UNUSED_RESULT /**/
-
-/* HAS_CRYPT:
- * This symbol, if defined, indicates that the crypt routine is available
- * to encrypt passwords and the like.
- */
-/*#define HAS_CRYPT /**/
-
-/* SETUID_SCRIPTS_ARE_SECURE_NOW:
- * This symbol, if defined, indicates that the bug that prevents
- * setuid scripts from being secure is not present in this kernel.
- */
-/* DOSUID:
- * This symbol, if defined, indicates that the C program should
- * check the script that it is executing for setuid/setgid bits, and
- * attempt to emulate setuid/setgid on systems that have disabled
- * setuid #! scripts because the kernel can't do it securely.
- * It is up to the package designer to make sure that this emulation
- * is done securely. Among other things, it should do an fstat on
- * the script it just opened to make sure it really is a setuid/setgid
- * script, it should make sure the arguments passed correspond exactly
- * to the argument on the #! line, and it should not trust any
- * subprocesses to which it must pass the filename rather than the
- * file descriptor of the script to be executed.
- */
-/*#define SETUID_SCRIPTS_ARE_SECURE_NOW /**/
-/*#define DOSUID /**/
-
-/* Shmat_t:
- * This symbol holds the return type of the shmat() system call.
- * Usually set to 'void *' or 'char *'.
- */
-/* HAS_SHMAT_PROTOTYPE:
- * This symbol, if defined, indicates that the sys/shm.h includes
- * a prototype for shmat(). Otherwise, it is up to the program to
- * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess,
- * but not always right so it should be emitted by the program only
- * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.
- */
-#define Shmat_t void * /**/
-/*#define HAS_SHMAT_PROTOTYPE /**/
-
-/* I_NDBM:
- * This symbol, if defined, indicates that <ndbm.h> exists and should
- * be included.
- */
-/*#define I_NDBM /**/
-
-/* SH_PATH:
- * This symbol contains the full pathname to the shell used on this
- * on this system to execute Bourne shell scripts. Usually, this will be
- * /bin/sh, though it's possible that some systems will have /bin/ksh,
- * /bin/pdksh, /bin/ash, /bin/bash, or even something such as
- * D:/bin/sh.exe.
- */
-#define SH_PATH "cmd /x /c" /**/
-
-/* HAS_AINTL:
- * This symbol, if defined, indicates that the aintl routine is
- * available. If copysignl is also present we can emulate modfl.
- */
-/*#define HAS_AINTL /**/
-
-/* HAS_CLEARENV:
- * This symbol, if defined, indicates that the clearenv () routine is
- * available for use.
- */
-/*#define HAS_CLEARENV /**/
-
-/* HAS_COPYSIGNL:
- * This symbol, if defined, indicates that the copysignl routine is
- * available. If aintl is also present we can emulate modfl.
- */
-/*#define HAS_COPYSIGNL /**/
-
-/* USE_CPLUSPLUS:
- * This symbol, if defined, indicates that a C++ compiler was
- * used to compiled Perl and will be used to compile extensions.
- */
-/*#define USE_CPLUSPLUS /**/
-
-/* HAS_DBMINIT_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the dbminit() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int dbminit(char *);
- */
-/*#define HAS_DBMINIT_PROTO /**/
-
-/* HAS_DIRFD:
- * This manifest constant lets the C program know that dirfd
- * is available.
- */
-/*#define HAS_DIRFD /**/
-
-/* HAS_FAST_STDIO:
- * This symbol, if defined, indicates that the "fast stdio"
- * is available to manipulate the stdio buffers directly.
- */
-/*#define HAS_FAST_STDIO /**/
-
-/* HAS_FLOCK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the flock() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int flock(int, int);
- */
-/*#define HAS_FLOCK_PROTO /**/
-
-/* HAS_FPCLASSL:
- * This symbol, if defined, indicates that the fpclassl routine is
- * available to classify long doubles. Available for example in IRIX.
- * The returned values are defined in <ieeefp.h> and are:
- *
- * FP_SNAN signaling NaN
- * FP_QNAN quiet NaN
- * FP_NINF negative infinity
- * FP_PINF positive infinity
- * FP_NDENORM negative denormalized non-zero
- * FP_PDENORM positive denormalized non-zero
- * FP_NZERO negative zero
- * FP_PZERO positive zero
- * FP_NNORM negative normalized non-zero
- * FP_PNORM positive normalized non-zero
- */
-/*#define HAS_FPCLASSL /**/
-
-/* HAS_ILOGBL:
- * This symbol, if defined, indicates that the ilogbl routine is
- * available. If scalbnl is also present we can emulate frexpl.
- */
-/*#define HAS_ILOGBL /**/
-
-/* LIBM_LIB_VERSION:
- * This symbol, if defined, indicates that libm exports _LIB_VERSION
- * and that math.h defines the enum to manipulate it.
- */
-/*#define LIBM_LIB_VERSION /**/
-
-/* HAS_NL_LANGINFO:
- * This symbol, if defined, indicates that the nl_langinfo routine is
- * available to return local data. You will also need <langinfo.h>
- * and therefore I_LANGINFO.
- */
-/*#define HAS_NL_LANGINFO /**/
-
-/* HAS_PROCSELFEXE:
- * This symbol is defined if PROCSELFEXE_PATH is a symlink
- * to the absolute pathname of the executing program.
- */
-/* PROCSELFEXE_PATH:
- * If HAS_PROCSELFEXE is defined this symbol is the filename
- * of the symbolic link pointing to the absolute pathname of
- * the executing program.
- */
-/*#define HAS_PROCSELFEXE /**/
-#if defined(HAS_PROCSELFEXE) && !defined(PROCSELFEXE_PATH)
-#define PROCSELFEXE_PATH /**/
-#endif
-
-/* HAS_PTHREAD_ATTR_SETSCOPE:
- * This symbol, if defined, indicates that the pthread_attr_setscope
- * system call is available to set the contention scope attribute of
- * a thread attribute object.
- */
-/*#define HAS_PTHREAD_ATTR_SETSCOPE /**/
-
-/* HAS_SCALBNL:
- * This symbol, if defined, indicates that the scalbnl routine is
- * available. If ilogbl is also present we can emulate frexpl.
- */
-/*#define HAS_SCALBNL /**/
-
-/* HAS_SIGPROCMASK:
- * This symbol, if defined, indicates that the sigprocmask
- * system call is available to examine or change the signal mask
- * of the calling process.
- */
-/*#define HAS_SIGPROCMASK /**/
-
-/* HAS_SOCKATMARK:
- * This symbol, if defined, indicates that the sockatmark routine is
- * available to test whether a socket is at the out-of-band mark.
- */
-/*#define HAS_SOCKATMARK /**/
-
-/* HAS_SOCKATMARK_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the sockatmark() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int sockatmark(int);
- */
-/*#define HAS_SOCKATMARK_PROTO /**/
-
-/* HAS_SETRESGID_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the setresgid() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid);
- */
-/*#define HAS_SETRESGID_PROTO /**/
-
-/* HAS_SETRESUID_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the setresuid() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid);
- */
-/*#define HAS_SETRESUID_PROTO /**/
-
-/* HAS_STRFTIME:
- * This symbol, if defined, indicates that the strftime routine is
- * available to do time formatting.
- */
-/*#define HAS_STRFTIME /**/
-
-/* HAS_STRLCAT:
- * This symbol, if defined, indicates that the strlcat () routine is
- * available to do string concatenation.
- */
-/*#define HAS_STRLCAT /**/
-
-/* HAS_STRLCPY:
- * This symbol, if defined, indicates that the strlcpy () routine is
- * available to do string copying.
- */
-/*#define HAS_STRLCPY /**/
-
-/* HAS_SYSCALL_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the syscall() function. Otherwise, it is up
- * to the program to supply one. Good guesses are
- * extern int syscall(int, ...);
- * extern int syscall(long, ...);
- */
-/*#define HAS_SYSCALL_PROTO /**/
-
-/* U32_ALIGNMENT_REQUIRED:
- * This symbol, if defined, indicates that you must access
- * character data through U32-aligned pointers.
- */
-#ifndef U32_ALIGNMENT_REQUIRED
-/*#define U32_ALIGNMENT_REQUIRED /**/
-#endif
-
-/* HAS_USLEEP_PROTO:
- * This symbol, if defined, indicates that the system provides
- * a prototype for the usleep() function. Otherwise, it is up
- * to the program to supply one. A good guess is
- * extern int usleep(useconds_t);
- */
-/*#define HAS_USLEEP_PROTO /**/
-
-/* I_CRYPT:
- * This symbol, if defined, indicates that <crypt.h> exists and
- * should be included.
- */
-/*#define I_CRYPT /**/
-
-/* I_FP:
- * This symbol, if defined, indicates that <fp.h> exists and
- * should be included.
- */
-/*#define I_FP /**/
-
-/* I_LANGINFO:
- * This symbol, if defined, indicates that <langinfo.h> exists and
- * should be included.
- */
-/*#define I_LANGINFO /**/
-
-/* USE_FAST_STDIO:
- * This symbol, if defined, indicates that Perl should
- * be built to use 'fast stdio'.
- * Defaults to define in Perls 5.8 and earlier, to undef later.
- */
-#ifndef USE_FAST_STDIO
-/*#define USE_FAST_STDIO /**/
-#endif
-
-/* PERL_RELOCATABLE_INC:
- * This symbol, if defined, indicates that we'd like to relocate entries
- * in @INC at run time based on the location of the perl binary.
- */
-#define PERL_RELOCATABLE_INC "undef" /**/
-
-/* HAS_CTERMID_R:
- * This symbol, if defined, indicates that the ctermid_r routine
- * is available to ctermid re-entrantly.
- */
-/* CTERMID_R_PROTO:
- * This symbol encodes the prototype of ctermid_r.
- * It is zero if d_ctermid_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ctermid_r
- * is defined.
- */
-/*#define HAS_CTERMID_R /**/
-#define CTERMID_R_PROTO 0 /**/
-
-/* HAS_ENDHOSTENT_R:
- * This symbol, if defined, indicates that the endhostent_r routine
- * is available to endhostent re-entrantly.
- */
-/* ENDHOSTENT_R_PROTO:
- * This symbol encodes the prototype of endhostent_r.
- * It is zero if d_endhostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endhostent_r
- * is defined.
- */
-/*#define HAS_ENDHOSTENT_R /**/
-#define ENDHOSTENT_R_PROTO 0 /**/
-
-/* HAS_ENDNETENT_R:
- * This symbol, if defined, indicates that the endnetent_r routine
- * is available to endnetent re-entrantly.
- */
-/* ENDNETENT_R_PROTO:
- * This symbol encodes the prototype of endnetent_r.
- * It is zero if d_endnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endnetent_r
- * is defined.
- */
-/*#define HAS_ENDNETENT_R /**/
-#define ENDNETENT_R_PROTO 0 /**/
-
-/* HAS_ENDPROTOENT_R:
- * This symbol, if defined, indicates that the endprotoent_r routine
- * is available to endprotoent re-entrantly.
- */
-/* ENDPROTOENT_R_PROTO:
- * This symbol encodes the prototype of endprotoent_r.
- * It is zero if d_endprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endprotoent_r
- * is defined.
- */
-/*#define HAS_ENDPROTOENT_R /**/
-#define ENDPROTOENT_R_PROTO 0 /**/
-
-/* HAS_ENDSERVENT_R:
- * This symbol, if defined, indicates that the endservent_r routine
- * is available to endservent re-entrantly.
- */
-/* ENDSERVENT_R_PROTO:
- * This symbol encodes the prototype of endservent_r.
- * It is zero if d_endservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_endservent_r
- * is defined.
- */
-/*#define HAS_ENDSERVENT_R /**/
-#define ENDSERVENT_R_PROTO 0 /**/
-
-/* HAS_GETHOSTBYADDR_R:
- * This symbol, if defined, indicates that the gethostbyaddr_r routine
- * is available to gethostbyaddr re-entrantly.
- */
-/* GETHOSTBYADDR_R_PROTO:
- * This symbol encodes the prototype of gethostbyaddr_r.
- * It is zero if d_gethostbyaddr_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyaddr_r
- * is defined.
- */
-/*#define HAS_GETHOSTBYADDR_R /**/
-#define GETHOSTBYADDR_R_PROTO 0 /**/
-
-/* HAS_GETHOSTBYNAME_R:
- * This symbol, if defined, indicates that the gethostbyname_r routine
- * is available to gethostbyname re-entrantly.
- */
-/* GETHOSTBYNAME_R_PROTO:
- * This symbol encodes the prototype of gethostbyname_r.
- * It is zero if d_gethostbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostbyname_r
- * is defined.
- */
-/*#define HAS_GETHOSTBYNAME_R /**/
-#define GETHOSTBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETHOSTENT_R:
- * This symbol, if defined, indicates that the gethostent_r routine
- * is available to gethostent re-entrantly.
- */
-/* GETHOSTENT_R_PROTO:
- * This symbol encodes the prototype of gethostent_r.
- * It is zero if d_gethostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gethostent_r
- * is defined.
- */
-/*#define HAS_GETHOSTENT_R /**/
-#define GETHOSTENT_R_PROTO 0 /**/
-
-/* HAS_GETNETBYADDR_R:
- * This symbol, if defined, indicates that the getnetbyaddr_r routine
- * is available to getnetbyaddr re-entrantly.
- */
-/* GETNETBYADDR_R_PROTO:
- * This symbol encodes the prototype of getnetbyaddr_r.
- * It is zero if d_getnetbyaddr_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyaddr_r
- * is defined.
- */
-/*#define HAS_GETNETBYADDR_R /**/
-#define GETNETBYADDR_R_PROTO 0 /**/
-
-/* HAS_GETNETBYNAME_R:
- * This symbol, if defined, indicates that the getnetbyname_r routine
- * is available to getnetbyname re-entrantly.
- */
-/* GETNETBYNAME_R_PROTO:
- * This symbol encodes the prototype of getnetbyname_r.
- * It is zero if d_getnetbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetbyname_r
- * is defined.
- */
-/*#define HAS_GETNETBYNAME_R /**/
-#define GETNETBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETNETENT_R:
- * This symbol, if defined, indicates that the getnetent_r routine
- * is available to getnetent re-entrantly.
- */
-/* GETNETENT_R_PROTO:
- * This symbol encodes the prototype of getnetent_r.
- * It is zero if d_getnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getnetent_r
- * is defined.
- */
-/*#define HAS_GETNETENT_R /**/
-#define GETNETENT_R_PROTO 0 /**/
-
-/* HAS_GETPROTOBYNAME_R:
- * This symbol, if defined, indicates that the getprotobyname_r routine
- * is available to getprotobyname re-entrantly.
- */
-/* GETPROTOBYNAME_R_PROTO:
- * This symbol encodes the prototype of getprotobyname_r.
- * It is zero if d_getprotobyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobyname_r
- * is defined.
- */
-/*#define HAS_GETPROTOBYNAME_R /**/
-#define GETPROTOBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETPROTOBYNUMBER_R:
- * This symbol, if defined, indicates that the getprotobynumber_r routine
- * is available to getprotobynumber re-entrantly.
- */
-/* GETPROTOBYNUMBER_R_PROTO:
- * This symbol encodes the prototype of getprotobynumber_r.
- * It is zero if d_getprotobynumber_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotobynumber_r
- * is defined.
- */
-/*#define HAS_GETPROTOBYNUMBER_R /**/
-#define GETPROTOBYNUMBER_R_PROTO 0 /**/
-
-/* HAS_GETPROTOENT_R:
- * This symbol, if defined, indicates that the getprotoent_r routine
- * is available to getprotoent re-entrantly.
- */
-/* GETPROTOENT_R_PROTO:
- * This symbol encodes the prototype of getprotoent_r.
- * It is zero if d_getprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getprotoent_r
- * is defined.
- */
-/*#define HAS_GETPROTOENT_R /**/
-#define GETPROTOENT_R_PROTO 0 /**/
-
-/* HAS_GETSERVBYNAME_R:
- * This symbol, if defined, indicates that the getservbyname_r routine
- * is available to getservbyname re-entrantly.
- */
-/* GETSERVBYNAME_R_PROTO:
- * This symbol encodes the prototype of getservbyname_r.
- * It is zero if d_getservbyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyname_r
- * is defined.
- */
-/*#define HAS_GETSERVBYNAME_R /**/
-#define GETSERVBYNAME_R_PROTO 0 /**/
-
-/* HAS_GETSERVBYPORT_R:
- * This symbol, if defined, indicates that the getservbyport_r routine
- * is available to getservbyport re-entrantly.
- */
-/* GETSERVBYPORT_R_PROTO:
- * This symbol encodes the prototype of getservbyport_r.
- * It is zero if d_getservbyport_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservbyport_r
- * is defined.
- */
-/*#define HAS_GETSERVBYPORT_R /**/
-#define GETSERVBYPORT_R_PROTO 0 /**/
-
-/* HAS_GETSERVENT_R:
- * This symbol, if defined, indicates that the getservent_r routine
- * is available to getservent re-entrantly.
- */
-/* GETSERVENT_R_PROTO:
- * This symbol encodes the prototype of getservent_r.
- * It is zero if d_getservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_getservent_r
- * is defined.
- */
-/*#define HAS_GETSERVENT_R /**/
-#define GETSERVENT_R_PROTO 0 /**/
-
-/* HAS_PTHREAD_ATFORK:
- * This symbol, if defined, indicates that the pthread_atfork routine
- * is available to setup fork handlers.
- */
-/*#define HAS_PTHREAD_ATFORK /**/
-
-/* HAS_READDIR64_R:
- * This symbol, if defined, indicates that the readdir64_r routine
- * is available to readdir64 re-entrantly.
- */
-/* READDIR64_R_PROTO:
- * This symbol encodes the prototype of readdir64_r.
- * It is zero if d_readdir64_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_readdir64_r
- * is defined.
- */
-/*#define HAS_READDIR64_R /**/
-#define READDIR64_R_PROTO 0 /**/
-
-/* HAS_SETHOSTENT_R:
- * This symbol, if defined, indicates that the sethostent_r routine
- * is available to sethostent re-entrantly.
- */
-/* SETHOSTENT_R_PROTO:
- * This symbol encodes the prototype of sethostent_r.
- * It is zero if d_sethostent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_sethostent_r
- * is defined.
- */
-/*#define HAS_SETHOSTENT_R /**/
-#define SETHOSTENT_R_PROTO 0 /**/
-
-/* HAS_SETLOCALE_R:
- * This symbol, if defined, indicates that the setlocale_r routine
- * is available to setlocale re-entrantly.
- */
-/* SETLOCALE_R_PROTO:
- * This symbol encodes the prototype of setlocale_r.
- * It is zero if d_setlocale_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setlocale_r
- * is defined.
- */
-/*#define HAS_SETLOCALE_R /**/
-#define SETLOCALE_R_PROTO 0 /**/
-
-/* HAS_SETNETENT_R:
- * This symbol, if defined, indicates that the setnetent_r routine
- * is available to setnetent re-entrantly.
- */
-/* SETNETENT_R_PROTO:
- * This symbol encodes the prototype of setnetent_r.
- * It is zero if d_setnetent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setnetent_r
- * is defined.
- */
-/*#define HAS_SETNETENT_R /**/
-#define SETNETENT_R_PROTO 0 /**/
-
-/* HAS_SETPROTOENT_R:
- * This symbol, if defined, indicates that the setprotoent_r routine
- * is available to setprotoent re-entrantly.
- */
-/* SETPROTOENT_R_PROTO:
- * This symbol encodes the prototype of setprotoent_r.
- * It is zero if d_setprotoent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setprotoent_r
- * is defined.
- */
-/*#define HAS_SETPROTOENT_R /**/
-#define SETPROTOENT_R_PROTO 0 /**/
-
-/* HAS_SETSERVENT_R:
- * This symbol, if defined, indicates that the setservent_r routine
- * is available to setservent re-entrantly.
- */
-/* SETSERVENT_R_PROTO:
- * This symbol encodes the prototype of setservent_r.
- * It is zero if d_setservent_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_setservent_r
- * is defined.
- */
-/*#define HAS_SETSERVENT_R /**/
-#define SETSERVENT_R_PROTO 0 /**/
-
-/* HAS_TTYNAME_R:
- * This symbol, if defined, indicates that the ttyname_r routine
- * is available to ttyname re-entrantly.
- */
-/* TTYNAME_R_PROTO:
- * This symbol encodes the prototype of ttyname_r.
- * It is zero if d_ttyname_r is undef, and one of the
- * REENTRANT_PROTO_T_ABC macros of reentr.h if d_ttyname_r
- * is defined.
- */
-/*#define HAS_TTYNAME_R /**/
-#define TTYNAME_R_PROTO 0 /**/
-/* GMTIME_MAX:
- * This symbol contains the maximum value for the time_t offset that
- * the system function gmtime () accepts, and defaults to 0
- */
-/* GMTIME_MIN:
- * This symbol contains the minimum value for the time_t offset that
- * the system function gmtime () accepts, and defaults to 0
- */
-/* LOCALTIME_MAX:
- * This symbol contains the maximum value for the time_t offset that
- * the system function localtime () accepts, and defaults to 0
- */
-/* LOCALTIME_MIN:
- * This symbol contains the minimum value for the time_t offset that
- * the system function localtime () accepts, and defaults to 0
- */
-#define GMTIME_MAX 2147483647 /**/
-#define GMTIME_MIN 0 /**/
-#define LOCALTIME_MAX 2147483647 /**/
-#define LOCALTIME_MIN 0 /**/
-
-#endif
diff --git a/gnu/usr.bin/perl/win32/config_H.gc b/gnu/usr.bin/perl/win32/config_H.gc
index 5a255b49d9a..f24b5d3d7a1 100644
--- a/gnu/usr.bin/perl/win32/config_H.gc
+++ b/gnu/usr.bin/perl/win32/config_H.gc
@@ -340,7 +340,7 @@
/* HAS_REGCOMP:
* This symbol, if defined, indicates that the regcomp() routine is
- * available to do some regular patern matching (usually on POSIX.2
+ * available to do some regular pattern matching (usually on POSIX.2
* conforming systems).
*/
/*#define HAS_REGCOMP / * POSIX.2 */
@@ -4116,11 +4116,11 @@
/*#define USE_64_BIT_ALL / **/
#endif
-/* USE_CBACKTRACE:
+/* USE_C_BACKTRACE:
* This symbol, if defined, indicates that Perl should
* be built with support for backtrace.
*/
-/*#define USE_CBACKTRACE / **/
+/*#define USE_C_BACKTRACE / **/
/* USE_DTRACE:
* This symbol, if defined, indicates that Perl should
diff --git a/gnu/usr.bin/perl/win32/config_H.vc b/gnu/usr.bin/perl/win32/config_H.vc
index b0fc34731b1..a0168b8aefc 100644
--- a/gnu/usr.bin/perl/win32/config_H.vc
+++ b/gnu/usr.bin/perl/win32/config_H.vc
@@ -340,7 +340,7 @@
/* HAS_REGCOMP:
* This symbol, if defined, indicates that the regcomp() routine is
- * available to do some regular patern matching (usually on POSIX.2
+ * available to do some regular pattern matching (usually on POSIX.2
* conforming systems).
*/
/*#define HAS_REGCOMP / * POSIX.2 */
@@ -4107,11 +4107,11 @@
/*#define USE_64_BIT_ALL / **/
#endif
-/* USE_CBACKTRACE:
+/* USE_C_BACKTRACE:
* This symbol, if defined, indicates that Perl should
* be built with support for backtrace.
*/
-/*#define USE_CBACKTRACE / **/
+/*#define USE_C_BACKTRACE / **/
/* USE_DTRACE:
* This symbol, if defined, indicates that Perl should
diff --git a/gnu/usr.bin/perl/win32/config_sh.PL b/gnu/usr.bin/perl/win32/config_sh.PL
index 1d22aed8711..bffd4ecf9fe 100644
--- a/gnu/usr.bin/perl/win32/config_sh.PL
+++ b/gnu/usr.bin/perl/win32/config_sh.PL
@@ -227,6 +227,7 @@ if ($opt{uselongdouble} eq 'define') {
$opt{nveformat} = '"Le"';
$opt{nvfformat} = '"Lf"';
$opt{nvgformat} = '"Lg"';
+ $opt{nvmantbits} = 64;
$opt{longdblkind} = 3;
$opt{longdblmantbits} = 64;
}
@@ -262,9 +263,6 @@ else {
# change some configuration variables based on compiler version
if ($opt{cc} =~ /\bcl/ and $opt{ccversion} =~ /^(\d+)/) {
my $ccversion = $1;
- if ($ccversion < 13) { # VC6
- $opt{ar} ='lib';
- }
if ($ccversion >= 14) { # VC8+
$opt{sGMTIME_max} = 32535291599;
$opt{sLOCALTIME_max} = 32535244799;
diff --git a/gnu/usr.bin/perl/win32/include/sys/socket.h b/gnu/usr.bin/perl/win32/include/sys/socket.h
index d658913f8b4..5374a806f53 100644
--- a/gnu/usr.bin/perl/win32/include/sys/socket.h
+++ b/gnu/usr.bin/perl/win32/include/sys/socket.h
@@ -14,161 +14,8 @@
/* Too late to include winsock2.h if winsock.h has already been loaded */
#ifndef _WINSOCKAPI_
-# if defined(UNDER_CE) && UNDER_CE <= 300
- /* winsock2 only for 4.00+ */
-# include <winsock.h>
-# else
-# include <winsock2.h>
- /* We need to include ws2tcpip.h to get the IPv6 definitions.
- * It will in turn include wspiapi.h. Later versions of that
- * header in the Windows SDK generate C++ template code that
- * can't be compiled with VC6 anymore. The _WSPIAPI_COUNTOF
- * definition below prevents wspiapi.h from generating this
- * incompatible code.
- */
-# define _WSPIAPI_COUNTOF(_Array) (sizeof(_Array) / sizeof(_Array[0]))
-# include <ws2tcpip.h>
-
-# ifndef SIO_GET_INTERFACE_LIST_EX
-
-# ifndef MSG_WAITALL
-# define MSG_WAITALL 0x8
-# endif
-
- /* The ws2tcpip.h header included in VC6 doesn't define the
- * sin6_scope_id member of sockaddr_in6. We define our own
- * version and redefine sockaddr_in6 to point to this one
- * instead for compiling e.g. Socket.xs.
- */
-
- struct my_sockaddr_in6 {
- short sin6_family; /* AF_INET6 */
- u_short sin6_port; /* Transport level port number */
- u_long sin6_flowinfo; /* IPv6 flow information */
- struct in_addr6 sin6_addr; /* IPv6 address */
- u_long sin6_scope_id; /* set of interfaces for a scope */
- };
-# define sockaddr_in6 my_sockaddr_in6
-
- /* Provide implementations of IN6ADDR_SETANY() and IN6ADDR_SETLOOPBACK
- * that also initialize the sin6_scope_id field.
- */
-# undef IN6ADDR_SETANY
-# define IN6ADDR_SETANY(x) {\
-(x)->sin6_family = AF_INET6; \
-(x)->sin6_port = 0; \
-(x)->sin6_flowinfo = 0; \
-*((u_long *)((x)->sin6_addr.s6_addr) ) = 0; \
-*((u_long *)((x)->sin6_addr.s6_addr) + 1) = 0; \
-*((u_long *)((x)->sin6_addr.s6_addr) + 2) = 0; \
-*((u_long *)((x)->sin6_addr.s6_addr) + 3) = 0; \
-(x)->sin6_scope_id = 0; \
-}
-
-# undef IN6ADDR_SETLOOPBACK
-# define IN6ADDR_SETLOOPBACK(x) {\
-(x)->sin6_family = AF_INET6; \
-(x)->sin6_port = 0; \
-(x)->sin6_flowinfo = 0; \
-*((u_long *)((x)->sin6_addr.s6_addr) ) = 0; \
-*((u_long *)((x)->sin6_addr.s6_addr) + 1) = 0; \
-*((u_long *)((x)->sin6_addr.s6_addr) + 2) = 0; \
-*((u_long *)((x)->sin6_addr.s6_addr) + 3) = 1; \
-(x)->sin6_scope_id = 0; \
-}
-
-# ifndef IPV6_HDRINCL
-# define IPV6_HDRINCL 2
-# endif
-# ifndef IPV6_UNICAST_HOPS
-# define IPV6_UNICAST_HOPS 4
-# endif
-# ifndef IPV6_MULTICAST_IF
-# define IPV6_MULTICAST_IF 9
-# endif
-# ifndef IPV6_MULTICAST_HOPS
-# define IPV6_MULTICAST_HOPS 10
-# endif
-# ifndef IPV6_MULTICAST_LOOP
-# define IPV6_MULTICAST_LOOP 11
-# endif
-# ifndef IPV6_ADD_MEMBERSHIP
-# define IPV6_ADD_MEMBERSHIP 12
-# endif
-# ifndef IPV6_DROP_MEMBERSHIP
-# define IPV6_DROP_MEMBERSHIP 13
-# endif
-# ifndef IPV6_JOIN_GROUP
-# define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP
-# endif
-# ifndef IPV6_LEAVE_GROUP
-# define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP
-# endif
-# ifndef IPV6_PKTINFO
-# define IPV6_PKTINFO 19
-# endif
-# ifndef IPV6_HOPLIMIT
-# define IPV6_HOPLIMIT 21
-# endif
-# ifndef IPV6_PROTECTION_LEVEL
-# define IPV6_PROTECTION_LEVEL 23
-# endif
-
- /* The ws2tcpip.h header included in MinGW includes ipv6_mreq already */
-# ifndef __GNUC__
- typedef struct ipv6_mreq {
- struct in_addr6 ipv6mr_multiaddr;
- unsigned int ipv6mr_interface;
- } IPV6_MREQ;
-# endif
-
-# ifndef EAI_AGAIN
-# define EAI_AGAIN WSATRY_AGAIN
-# endif
-# ifndef EAI_BADFLAGS
-# define EAI_BADFLAGS WSAEINVAL
-# endif
-# ifndef EAI_FAIL
-# define EAI_FAIL WSANO_RECOVERY
-# endif
-# ifndef EAI_FAMILY
-# define EAI_FAMILY WSAEAFNOSUPPORT
-# endif
-# ifndef EAI_MEMORY
-# define EAI_MEMORY WSA_NOT_ENOUGH_MEMORY
-# endif
-# ifndef EAI_NODATA
-# define EAI_NODATA WSANO_DATA
-# endif
-# ifndef EAI_NONAME
-# define EAI_NONAME WSAHOST_NOT_FOUND
-# endif
-# ifndef EAI_SERVICE
-# define EAI_SERVICE WSATYPE_NOT_FOUND
-# endif
-# ifndef EAI_SOCKTYPE
-# define EAI_SOCKTYPE WSAESOCKTNOSUPPORT
-# endif
-
-# ifndef NI_NOFQDN
-# define NI_NOFQDN 0x01
-# endif
-# ifndef NI_NUMERICHOST
-# define NI_NUMERICHOST 0x02
-# endif
-# ifndef NI_NAMEREQD
-# define NI_NAMEREQD 0x04
-# endif
-# ifndef NI_NUMERICSERV
-# define NI_NUMERICSERV 0x08
-# endif
-# ifndef NI_DGRAM
-# define NI_DGRAM 0x10
-# endif
-
-# endif
-
-# endif
+# include <winsock2.h>
+# include <ws2tcpip.h>
#endif
/* Early Platform SDKs have an incorrect definition of EAI_NODATA */
diff --git a/gnu/usr.bin/perl/win32/makefile.mk b/gnu/usr.bin/perl/win32/makefile.mk
index 7c1caba7e9d..eae8c74ab63 100644
--- a/gnu/usr.bin/perl/win32/makefile.mk
+++ b/gnu/usr.bin/perl/win32/makefile.mk
@@ -1,13 +1,13 @@
#
# Makefile to build perl on Windows using DMAKE.
# Supported compilers:
-# Microsoft Visual C++ 6.0 or later
+# Microsoft Visual C++ 7.0 or later
# MinGW with gcc-3.4.5 or later with runtime < 3.21
# MinGW64 with gcc-4.4.3 or later
# Windows SDK 64-bit compiler and tools
#
# This is set up to build a perl.exe that runs off a shared library
-# (perl530.dll). Also makes individual DLLs for the XS extensions.
+# (perl532.dll). Also makes individual DLLs for the XS extensions.
#
##
@@ -45,7 +45,7 @@ INST_TOP *= $(INST_DRV)\perl
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER *= \5.30.3
+#INST_VER *= \5.32.1
#
# Comment this out if you DON'T want your perl installation to have
@@ -98,7 +98,6 @@ USE_LARGE_FILES *= define
# Uncomment this if you're building a 32-bit perl and want 64-bit integers.
# (If you're building a 64-bit perl then you will have 64-bit integers whether
# or not this is uncommented.)
-# Note: This option is not supported in 32-bit MSVC60 builds.
#
#USE_64_BIT_INT *= define
@@ -132,8 +131,6 @@ DEFAULT_INC_EXCLUDES_DOT *= define
#
# uncomment exactly one of the following
#
-# Visual C++ 6.0 (aka Visual C++ 98)
-#CCTYPE *= MSVC60
# Visual C++ .NET 2002/2003 (aka Visual C++ 7.0/7.1) (full version)
#CCTYPE *= MSVC70
# Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools)
@@ -161,7 +158,7 @@ DEFAULT_INC_EXCLUDES_DOT *= define
#
# If you are using GCC, 4.3 or later by default we add the -fwrapv option.
-# See https://rt.perl.org/Ticket/Display.html?id=121505
+# See https://github.com/Perl/perl5/issues/13690
#
#GCCWRAPV *= define
@@ -223,7 +220,7 @@ DEFAULT_INC_EXCLUDES_DOT *= define
# set this to additionally provide a statically linked perl-static.exe.
# Note that dynamic loading will not work with this perl, so you must
# include required modules statically using the STATIC_EXT or ALL_STATIC
-# variables below. A static library perl530s.lib will also be created.
+# variables below. A static library perl532s.lib will also be created.
# Ordinary perl.exe is not affected by this option.
#
#BUILD_STATIC *= define
@@ -292,7 +289,7 @@ EXTRALIBDIRS *=
#
# set this to your email address (perl will guess a value from
-# from your loginname and your hostname, which may not be right)
+# your loginname and your hostname, which may not be right)
#
#EMAIL *=
@@ -395,8 +392,7 @@ CCTYPE := MSVC$(MSVCVER)
.IF "$(CCHOME)" == ""
.IF "$(CCTYPE)" == "GCC"
CCHOME *= C:\MinGW
-.ELIF "$(CCTYPE)" == "MSVC60" || \
- "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
+.ELIF "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
CCHOME *= $(MSVCDir)
.ELIF "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
CCHOME *= $(VCToolsInstallDir)
@@ -429,19 +425,6 @@ WIN64 = undef
USE_64_BIT_INT = define
.ENDIF
-# Treat 64-bit MSVC60 (doesn't really exist) as SDK2003SP1 because
-# both link against MSVCRT.dll (which is part of Windows itself) and
-# not against a compiler specific versioned runtime.
-.IF "$(WIN64)" == "define" && "$(CCTYPE)" == "MSVC60"
-CCTYPE = SDK2003SP1
-.ENDIF
-
-# Disable the 64-bit-int option for (32-bit) MSVC60 builds since that compiler
-# does not support it.
-.IF "$(CCTYPE)" == "MSVC60"
-USE_64_BIT_INT != undef
-.ENDIF
-
# Disable the long double option for MSVC builds since that compiler
# does not support it.
.IF "$(CCTYPE)" != "GCC"
@@ -557,7 +540,7 @@ GCCVER2:= $(shell for /f "delims=. tokens=1,2,3" %i in ('gcc -dumpversion') do @
GCCVER3:= $(shell for /f "delims=. tokens=1,2,3" %i in ('gcc -dumpversion') do @echo %k)
# If you are using GCC, 4.3 or later by default we add the -fwrapv option.
-# See https://rt.perl.org/Ticket/Display.html?id=121505
+# See https://github.com/Perl/perl5/issues/13690
#
GCCWRAPV *= $(shell if "$(GCCVER1)"=="4" (if "$(GCCVER2)" geq "3" echo define) else if "$(GCCVER1)" geq "5" (echo define))
@@ -577,7 +560,7 @@ a = .a
INCLUDES = -I.\include -I. -I..
DEFINES = -DWIN32
.IF "$(WIN64)" == "define"
-DEFINES += -DWIN64 -DCONSERVATIVE
+DEFINES += -DWIN64
.ENDIF
LOCDEFS = -DPERLDLL -DPERL_CORE
CXX_FLAG = -xc++
@@ -593,8 +576,9 @@ LIBFILES = $(LIBC) -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool \
-luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
.IF "$(CFG)" == "Debug"
-OPTIMIZE = -g -O2 -DDEBUGGING
+OPTIMIZE = -g -O2
LINK_DBG = -g
+DEFINES += -DDEBUGGING
.ELIF "$(CFG)" == "DebugSymbols"
OPTIMIZE = -g -O2
LINK_DBG = -g
@@ -648,8 +632,7 @@ EMBED_DLL_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputre
# Most relevant compiler-specific options fall into two groups:
# either pre-MSVC80 or MSVC80 onwards, so define a macro for this.
-.IF "$(CCTYPE)" == "MSVC60" || \
- "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
+.IF "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
PREMSVC80 = define
.ELSE
PREMSVC80 = undef
@@ -674,6 +657,7 @@ INCLUDES = -I.\include -I. -I..
DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT
LOCDEFS = -DPERLDLL -DPERL_CORE
CXX_FLAG = -TP -EHsc
+EXTRACFLAGS = -nologo -GF -W3
.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
LIBC = ucrt.lib
@@ -682,40 +666,42 @@ LIBC = msvcrt.lib
.ENDIF
.IF "$(CFG)" == "Debug"
-OPTIMIZE = -Od -MD -Zi -DDEBUGGING
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+DEFINES += -DDEBUGGING
+EXTRACFLAGS += -MD
.ELIF "$(CFG)" == "DebugSymbols"
-OPTIMIZE = -Od -MD -Zi
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+EXTRACFLAGS += -MD
.ELIF "$(CFG)" == "DebugFull"
.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
LIBC = ucrtd.lib
.ELSE
LIBC = msvcrtd.lib
.ENDIF
-OPTIMIZE = -Od -MDd -Zi -D_DEBUG -DDEBUGGING
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+DEFINES += -D_DEBUG -DDEBUGGING
+EXTRACFLAGS += -MDd
.ELSE
+# Enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG).
# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64
-OPTIMIZE = -O1 -MD -Zi -DNDEBUG
+OPTIMIZE = -O1 -Zi -GL
# we enable debug symbols in release builds also
-LINK_DBG = -debug -opt:ref,icf
+LINK_DBG = -debug -opt:ref,icf -ltcg
# you may want to enable this if you want COFF symbols in the executables
# in addition to the PDB symbols. The default Dr. Watson that ships with
# Windows can use the the former but not latter. The free WinDbg can be
# installed to get better stack traces from just the PDB symbols, so we
# avoid the bloat of COFF symbols by default.
-#LINK_DBG = $(LINK_DBG) -debugtype:both
-.IF "$(CCTYPE)" != "MSVC60"
-# enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG)
-OPTIMIZE += -GL
-LINK_DBG += -ltcg
+#LINK_DBG += -debugtype:both
LIB_FLAGS = -ltcg
-.ENDIF
+EXTRACFLAGS += -MD
.ENDIF
.IF "$(WIN64)" == "define"
-DEFINES += -DWIN64 -DCONSERVATIVE
+DEFINES += -DWIN64
OPTIMIZE += -fp:precise
.ENDIF
@@ -745,7 +731,7 @@ DEFINES += -DNO_THREAD_SAFE_LOCALE
# backward compatibility. We define this symbol here for older 32-bit
# compilers only (which aren't using it at all) for the sole purpose
# of getting it into $Config{ccflags}. That way if someone builds
-# Perl itself with e.g. VC6 but later installs an XS module using VC8
+# Perl itself with e.g. VC7 but later installs an XS module using VC8
# the time_t types will still be compatible.
.IF "$(WIN64)" == "undef"
.IF "$(PREMSVC80)" == "define"
@@ -784,7 +770,6 @@ LIBBASEFILES += bufferoverflowU.lib
LIBFILES = $(LIBBASEFILES) $(LIBC)
-EXTRACFLAGS = -nologo -GF -W3
.IF "$(__ICC)" == "define"
EXTRACFLAGS += -Qstd=c99
.ENDIF
@@ -910,7 +895,7 @@ PERLSTATIC =
UNIDATAFILES = ..\lib\unicore\Decomposition.pl ..\lib\unicore\TestProp.pl \
..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm \
- ..\lib\unicore\Heavy.pl ..\lib\unicore\mktables.lst
+ ..\lib\unicore\mktables.lst
# Directories of Unicode data files generated by mktables
UNIDATADIR1 = ..\lib\unicore\To
@@ -954,6 +939,7 @@ UTILS = \
..\utils\shasum \
..\utils\instmodsh \
..\utils\json_pp \
+ ..\utils\streamzip \
bin\exetype.pl \
bin\runperl.pl \
bin\pl2bat.pl \
@@ -964,8 +950,8 @@ UTILS = \
CFGSH_TMPL = config.gc
CFGH_TMPL = config_H.gc
-PERLIMPLIB = $(COREDIR)\libperl530$(a)
-PERLSTATICLIB = ..\libperl530s$(a)
+PERLIMPLIB = $(COREDIR)\libperl532$(a)
+PERLSTATICLIB = ..\libperl532s$(a)
INT64 = long long
.ELSE
@@ -978,11 +964,11 @@ INT64 = __int64
# makedef.pl must be updated if this changes, and this should normally
# only change when there is an incompatible revision of the public API.
-PERLIMPLIB *= $(COREDIR)\perl530$(a)
-PERLEXPLIB *= $(COREDIR)\perl530.exp
-PERLSTATICLIB *= ..\perl530s$(a)
-PERLDLL = ..\perl530.dll
-PERLDLLBASE = perl530.dll
+PERLIMPLIB *= $(COREDIR)\perl532$(a)
+PERLEXPLIB *= $(COREDIR)\perl532.exp
+PERLSTATICLIB *= ..\perl532s$(a)
+PERLDLL = ..\perl532.dll
+PERLDLLBASE = perl532.dll
#EUMM on Win32 isn't ready for parallel make, so only allow this file to be parallel
#$(MAKE) will contain the -P that this makefile was called with, which is bad for
@@ -1151,7 +1137,7 @@ CFG_VARS = \
archname=$(ARCHNAME) ~ \
cc=$(CC) ~ \
ld=$(LINK32) ~ \
- ccflags=$(EXTRACFLAGS) $(OPTIMIZE) $(DEFINES) $(BUILDOPT) ~ \
+ ccflags=$(EXTRACFLAGS) $(DEFINES) $(BUILDOPT) ~ \
usecplusplus=$(USE_CPLUSPLUS) ~ \
cf_email=$(EMAIL) ~ \
d_mymalloc=$(PERL_MALLOC) ~ \
@@ -1230,9 +1216,9 @@ CHECKDMAKE :
$(GLOBEXE) : perlglob.c
.IF "$(CCTYPE)" == "GCC"
- $(LINK32) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES)
+ $(LINK32) $(EXTRACFLAGS) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES)
.ELSE
- $(CC) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \
+ $(CC) $(EXTRACFLAGS) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \
setargv$(o) $(LIBFILES) && $(EMBED_EXE_MANI)
.ENDIF
@@ -1468,7 +1454,7 @@ $(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
$(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) $(*B).c
# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
-# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s unless
+# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s
# unless the .IF is true), so instead we use a .ELSE with the default.
# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
@@ -1512,7 +1498,7 @@ $(PERLDLL): $(PERLEXPLIB) $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
.ELSE
$(LINK32) -dll -out:$@ $(BLINK_FLAGS) \
@Extensions_static \
- @$(mktmp -base:0x28000000 $(DELAYLOAD) $(LIBFILES) \
+ @$(mktmp $(DELAYLOAD) $(LIBFILES) \
$(PERLDLL_RES) $(PERLDLL_OBJ) $(PERLEXPLIB))
$(EMBED_DLL_MANI)
.ENDIF
@@ -1650,7 +1636,6 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
copy ..\README.amiga ..\pod\perlamiga.pod
copy ..\README.android ..\pod\perlandroid.pod
copy ..\README.bs2000 ..\pod\perlbs2000.pod
- copy ..\README.ce ..\pod\perlce.pod
copy ..\README.cn ..\pod\perlcn.pod
copy ..\README.cygwin ..\pod\perlcygwin.pod
copy ..\README.dos ..\pod\perldos.pod
@@ -1679,7 +1664,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
copy ..\README.tw ..\pod\perltw.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
- copy ..\pod\perldelta.pod ..\pod\perl5303delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl5321delta.pod
$(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
$(MINIPERL) -I..\lib ..\autodoc.pl ..
$(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1751,7 +1736,6 @@ distclean: realclean
-if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
-if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module
-if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP
- -if exist $(LIBDIR)\OpenBSD rmdir /s /q $(LIBDIR)\OpenBSD
-if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params
-if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse
-if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl
@@ -1778,17 +1762,18 @@ distclean: realclean
-if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
-if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
-cd $(PODDIR) && del /f *.html *.bat roffitall \
- perl5303delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
- perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
+ perl5321delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \
perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
- perltru64.pod perltw.pod perlvos.pod perlwin32.pod
+ perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
+ perlwin32.pod
-cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \
- perldoc perlivp libnetcfg enc2xs encguess piconv cpan *.bat \
+ perldoc perlivp libnetcfg enc2xs encguess piconv cpan streamzip *.bat \
xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails
-del /f ..\config.sh perlmain.c dlutils.c config.h.new \
perlmainst.c
diff --git a/gnu/usr.bin/perl/win32/perl.rc b/gnu/usr.bin/perl/win32/perl.rc
deleted file mode 100644
index 02507c1317d..00000000000
--- a/gnu/usr.bin/perl/win32/perl.rc
+++ /dev/null
@@ -1,36 +0,0 @@
-#include <windows.h>
-
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-
-1 ICON DISCARDABLE "perl.ico"
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 5,6,0,0
- PRODUCTVERSION 5,6,0,0
- FILEFLAGSMASK 0x3FL
- FILEFLAGS 0x0L
- FILEOS 0x4L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904B0"
- BEGIN
- VALUE "CompanyName", "Paranoyaxc Inc\0"
- VALUE "FileDescription", "Perl for WindowsCE\0"
- VALUE "FileVersion", "1, 0, 0, 0\0"
- VALUE "InternalName", "PerlCE\0"
- VALUE "LegalCopyright", "Copyright (C) Larry Wall\0"
- VALUE "OriginalFilename", "perl.exe"
- VALUE "ProductName", "Perl\0"
- VALUE "ProductVersion", "5, 7, 2, 0\0"
- VALUE "OLESelfRegister", "\0"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
diff --git a/gnu/usr.bin/perl/win32/perlglob.c b/gnu/usr.bin/perl/win32/perlglob.c
index 8add30f2a52..305fd3bee5c 100644
--- a/gnu/usr.bin/perl/win32/perlglob.c
+++ b/gnu/usr.bin/perl/win32/perlglob.c
@@ -20,6 +20,8 @@
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
+#include <assert.h>
+#include <limits.h>
#include <string.h>
#include <windows.h>
@@ -33,6 +35,7 @@ main(int argc, char *argv[])
char volname[MAX_PATH];
DWORD serial, maxname, flags;
BOOL downcase = TRUE;
+ int fd;
/* check out the file system characteristics */
if (GetFullPathName(".", MAX_PATH, root, &dummy)) {
@@ -45,7 +48,13 @@ main(int argc, char *argv[])
}
}
- setmode(fileno(stdout), O_BINARY);
+ fd = fileno(stdout);
+ /* rare VC linker bug causes uninit global FILE *s
+ fileno() implementation in VC 2003 is 2 blind pointer derefs so it will
+ never return -1 error as POSIX says, to be compliant fail for -1 and
+ for absurdly high FDs which are actually pointers */
+ assert(fd >= 0 && fd < SHRT_MAX);
+ setmode(fd, O_BINARY);
for (i = 1; i < argc; i++) {
len = strlen(argv[i]);
if (downcase)
diff --git a/gnu/usr.bin/perl/win32/perlhost.h b/gnu/usr.bin/perl/win32/perlhost.h
index 6dd269efa7a..f5ffca04e4a 100644
--- a/gnu/usr.bin/perl/win32/perlhost.h
+++ b/gnu/usr.bin/perl/win32/perlhost.h
@@ -7,16 +7,13 @@
* License or the Artistic License, as specified in the README file.
*/
-#ifndef UNDER_CE
#define CHECK_HOST_INTERP
-#endif
#ifndef ___PerlHost_H___
#define ___PerlHost_H___
-#ifndef UNDER_CE
#include <signal.h>
-#endif
+#include <wchar.h>
#include "iperlsys.h"
#include "vmem.h"
#include "vdir.h"
@@ -829,7 +826,6 @@ PerlStdIOGetOSfhandle(struct IPerlStdIO* piPerl, int filenum)
FILE*
PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf)
{
-#ifndef UNDER_CE
FILE* pfdup;
fpos_t pos;
char mode[3];
@@ -861,9 +857,6 @@ PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf)
fsetpos(pfdup, &pos);
}
return pfdup;
-#else
- return 0;
-#endif
}
const struct IPerlStdIO perlStdIO =
@@ -2132,10 +2125,6 @@ lookup(const void *arg1, const void *arg2)
LPSTR*
CPerlHost::Lookup(LPCSTR lpStr)
{
-#ifdef UNDER_CE
- if (!m_lppEnvList || !m_dwEnvCount)
- return NULL;
-#endif
if (!lpStr)
return NULL;
return (LPSTR*)bsearch(&lpStr, m_lppEnvList, m_dwEnvCount, sizeof(LPSTR), lookup);
diff --git a/gnu/usr.bin/perl/win32/perllib.c b/gnu/usr.bin/perl/win32/perllib.c
index 246f67aa1a2..755477c63af 100644
--- a/gnu/usr.bin/perl/win32/perllib.c
+++ b/gnu/usr.bin/perl/win32/perllib.c
@@ -44,9 +44,6 @@ xs_init(pTHX)
#ifdef PERL_IMPLICIT_SYS
-/* WINCE: include replaced by:
-extern "C" void win32_checkTLS(PerlInterpreter *host_perl);
-*/
#include "perlhost.h"
void
@@ -55,45 +52,10 @@ win32_checkTLS(PerlInterpreter *host_perl)
dTHX;
if (host_perl != my_perl) {
int *nowhere = NULL;
-#ifdef UNDER_CE
- printf(" ... bad in win32_checkTLS\n");
- printf(" %08X ne %08X\n",host_perl,my_perl);
-#endif
abort();
}
}
-#ifdef UNDER_CE
-int GetLogicalDrives() {
- return 0; /* no logical drives on CE */
-}
-int GetLogicalDriveStrings(int size, char addr[]) {
- return 0; /* no logical drives on CE */
-}
-/* TBD */
-DWORD GetFullPathNameA(LPCSTR fn, DWORD blen, LPTSTR buf, LPSTR *pfile) {
- return 0;
-}
-/* TBD */
-DWORD GetFullPathNameW(CONST WCHAR *fn, DWORD blen, WCHAR * buf, WCHAR **pfile) {
- return 0;
-}
-/* TBD */
-DWORD SetCurrentDirectoryA(LPSTR pPath) {
- return 0;
-}
-/* TBD */
-DWORD SetCurrentDirectoryW(CONST WCHAR *pPath) {
- return 0;
-}
-int xcesetuid(uid_t id){return 0;}
-int xceseteuid(uid_t id){ return 0;}
-int xcegetuid() {return 0;}
-int xcegeteuid(){ return 0;}
-#endif
-
-/* WINCE??: include "perlhost.h" */
-
EXTERN_C void
perl_get_host_info(struct IPerlMemInfo* perlMemInfo,
struct IPerlMemInfo* perlMemSharedInfo,
@@ -287,9 +249,7 @@ DllMain(HINSTANCE hModule, /* DLL module handle */
* initialization or a call to LoadLibrary.
*/
case DLL_PROCESS_ATTACH:
-#ifndef UNDER_CE
DisableThreadLibraryCalls((HMODULE)hModule);
-#endif
w32_perldll_handle = hModule;
set_w32_module_name();
diff --git a/gnu/usr.bin/perl/win32/perlmaince.c b/gnu/usr.bin/perl/win32/perlmaince.c
deleted file mode 100644
index ced3b86cc08..00000000000
--- a/gnu/usr.bin/perl/win32/perlmaince.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Time-stamp: <01/08/01 20:58:19 keuchel@w2k> */
-
-#include "EXTERN.h"
-#include "perl.h"
-
-#ifdef __GNUC__
-
-/* Mingw32 defaults to globing command line
- * This is inconsistent with other Win32 ports and
- * seems to cause trouble with passing -DXSVERSION=\"1.6\"
- * So we turn it off like this:
- */
-int _CRT_glob = 0;
-
-#endif
-
-/* Called from w32console/wmain.c */
-
-extern int w32console_usefunctionkeys;
-
-int
-main(int argc, char **argv, char **env)
-{
- int res;
-
- if(argc == 1)
- XCEShowMessageA("Starting perl with no args is currently\r\n"
- "not useful on Windows CE");
-
- w32console_usefunctionkeys = 0; /* this allows backspace key to work */
-
- res = RunPerl(argc, argv, env);
-
- if(res != 0)
- XCEShowMessageA("Exitcode: %d", res);
-
- return res;
-}
-
-
diff --git a/gnu/usr.bin/perl/win32/pod.mak b/gnu/usr.bin/perl/win32/pod.mak
index facf6d597d5..4e26a9ef695 100644
--- a/gnu/usr.bin/perl/win32/pod.mak
+++ b/gnu/usr.bin/perl/win32/pod.mak
@@ -57,10 +57,13 @@ POD = perl.pod \
perl5280delta.pod \
perl5281delta.pod \
perl5282delta.pod \
+ perl5283delta.pod \
perl5300delta.pod \
perl5301delta.pod \
perl5302delta.pod \
perl5303delta.pod \
+ perl5320delta.pod \
+ perl5321delta.pod \
perl561delta.pod \
perl56delta.pod \
perl581delta.pod \
@@ -101,6 +104,7 @@ POD = perl.pod \
perlform.pod \
perlfunc.pod \
perlgit.pod \
+ perlgov.pod \
perlgpl.pod \
perlguts.pod \
perlhack.pod \
@@ -147,6 +151,7 @@ POD = perl.pod \
perlretut.pod \
perlrun.pod \
perlsec.pod \
+ perlsecpolicy.pod \
perlsource.pod \
perlstyle.pod \
perlsub.pod \
@@ -213,10 +218,13 @@ MAN = perl.man \
perl5280delta.man \
perl5281delta.man \
perl5282delta.man \
+ perl5283delta.man \
perl5300delta.man \
perl5301delta.man \
perl5302delta.man \
perl5303delta.man \
+ perl5320delta.man \
+ perl5321delta.man \
perl561delta.man \
perl56delta.man \
perl581delta.man \
@@ -257,6 +265,7 @@ MAN = perl.man \
perlform.man \
perlfunc.man \
perlgit.man \
+ perlgov.man \
perlgpl.man \
perlguts.man \
perlhack.man \
@@ -303,6 +312,7 @@ MAN = perl.man \
perlretut.man \
perlrun.man \
perlsec.man \
+ perlsecpolicy.man \
perlsource.man \
perlstyle.man \
perlsub.man \
@@ -369,10 +379,13 @@ HTML = perl.html \
perl5280delta.html \
perl5281delta.html \
perl5282delta.html \
+ perl5283delta.html \
perl5300delta.html \
perl5301delta.html \
perl5302delta.html \
perl5303delta.html \
+ perl5320delta.html \
+ perl5321delta.html \
perl561delta.html \
perl56delta.html \
perl581delta.html \
@@ -413,6 +426,7 @@ HTML = perl.html \
perlform.html \
perlfunc.html \
perlgit.html \
+ perlgov.html \
perlgpl.html \
perlguts.html \
perlhack.html \
@@ -459,6 +473,7 @@ HTML = perl.html \
perlretut.html \
perlrun.html \
perlsec.html \
+ perlsecpolicy.html \
perlsource.html \
perlstyle.html \
perlsub.html \
@@ -525,10 +540,13 @@ TEX = perl.tex \
perl5280delta.tex \
perl5281delta.tex \
perl5282delta.tex \
+ perl5283delta.tex \
perl5300delta.tex \
perl5301delta.tex \
perl5302delta.tex \
perl5303delta.tex \
+ perl5320delta.tex \
+ perl5321delta.tex \
perl561delta.tex \
perl56delta.tex \
perl581delta.tex \
@@ -569,6 +587,7 @@ TEX = perl.tex \
perlform.tex \
perlfunc.tex \
perlgit.tex \
+ perlgov.tex \
perlgpl.tex \
perlguts.tex \
perlhack.tex \
@@ -615,6 +634,7 @@ TEX = perl.tex \
perlretut.tex \
perlrun.tex \
perlsec.tex \
+ perlsecpolicy.tex \
perlsource.tex \
perlstyle.tex \
perlsub.tex \
diff --git a/gnu/usr.bin/perl/win32/vdir.h b/gnu/usr.bin/perl/win32/vdir.h
index 9ff225eb16b..c21ec7c400a 100644
--- a/gnu/usr.bin/perl/win32/vdir.h
+++ b/gnu/usr.bin/perl/win32/vdir.h
@@ -334,7 +334,7 @@ inline bool IsSpecialFileName(const char* pName)
break;
case 'O': /* COMx, CON, CONIN$ CONOUT$ */
if ((pName[2] & ~0x20) == 'M') {
- if ((pName[3] >= '1') && (pName[3] <= '9')
+ if ( inRANGE(pName[3], '1', '9')
&& !pName[4])
return true;
}
@@ -361,7 +361,7 @@ inline bool IsSpecialFileName(const char* pName)
case 'L': /* LPTx */
if (((pName[1] & ~0x20) == 'U')
&& ((pName[2] & ~0x20) == 'X')
- && (pName[3] >= '1') && (pName[3] <= '9')
+ && inRANGE(pName[3], '1', '9')
&& !pName[4])
return true;
break;
@@ -566,7 +566,7 @@ inline bool IsSpecialFileName(const WCHAR* pName)
break;
case 'O': /* COMx, CON, CONIN$ CONOUT$ */
if ((pName[2] & ~0x20) == 'M') {
- if ((pName[3] >= '1') && (pName[3] <= '9')
+ if ( inRANGE(pName[3], '1', '9')
&& !pName[4])
return true;
}
@@ -593,7 +593,7 @@ inline bool IsSpecialFileName(const WCHAR* pName)
case 'L': /* LPTx */
if (((pName[1] & ~0x20) == 'U')
&& ((pName[2] & ~0x20) == 'X')
- && (pName[3] >= '1') && (pName[3] <= '9')
+ && inRANGE(pName[3], '1', '9')
&& !pName[4])
return true;
break;
diff --git a/gnu/usr.bin/perl/win32/vmem.h b/gnu/usr.bin/perl/win32/vmem.h
index c662887bcac..3fd7e169fc4 100644
--- a/gnu/usr.bin/perl/win32/vmem.h
+++ b/gnu/usr.bin/perl/win32/vmem.h
@@ -21,9 +21,7 @@
#ifndef ___VMEM_H_INC___
#define ___VMEM_H_INC___
-#ifndef UNDER_CE
#define _USE_MSVCRT_MEM_ALLOC
-#endif
#define _USE_LINKED_LIST
// #define _USE_BUDDY_BLOCKS
diff --git a/gnu/usr.bin/perl/win32/win32.c b/gnu/usr.bin/perl/win32/win32.c
index 0e199ac1210..491c204b3ac 100644
--- a/gnu/usr.bin/perl/win32/win32.c
+++ b/gnu/usr.bin/perl/win32/win32.c
@@ -64,6 +64,7 @@
#include <float.h>
#include <time.h>
#include <sys/utime.h>
+#include <wchar.h>
#ifdef __GNUC__
/* Mingw32 defaults to globing command line
@@ -1348,7 +1349,7 @@ get_hwnd_delay(pTHX, long child, DWORD tries)
* caching reasons, and the child thread was attached to a different CPU
* therefore there is no workload on that CPU and Sleep(0) returns control
* without yielding the time slot.
- * https://rt.perl.org/rt3/Ticket/Display.html?id=88840
+ * https://github.com/Perl/perl5/issues/11267
*/
Sleep(0);
win32_async_check(aTHX);
@@ -1722,7 +1723,7 @@ wstr_to_str(const wchar_t* wstr)
* then it will convert the short name instead.
*
* The buffer to the ansi pathname must be freed with win32_free() when it
- * it no longer needed.
+ * is no longer needed.
*
* The argument to win32_ansipath() must exist before this function is
* called; otherwise there is no way to determine the short path name.
@@ -2657,7 +2658,7 @@ win32_strerror(int e)
* additionally map them to corresponding Windows (sockets) error codes
* first to avoid getting the wrong system message.
*/
- else if (e >= EADDRINUSE && e <= EWOULDBLOCK) {
+ else if (inRANGE(e, EADDRINUSE, EWOULDBLOCK)) {
e = convert_errno_to_wsa_error(e);
}
#endif
@@ -2911,9 +2912,17 @@ win32_rewind(FILE *pf)
DllExport int
win32_tmpfd(void)
{
+ return win32_tmpfd_mode(0);
+}
+
+DllExport int
+win32_tmpfd_mode(int mode)
+{
char prefix[MAX_PATH+1];
char filename[MAX_PATH+1];
DWORD len = GetTempPath(MAX_PATH, prefix);
+ mode &= ~( O_ACCMODE | O_CREAT | O_EXCL );
+ mode |= O_RDWR;
if (len && len < MAX_PATH) {
if (GetTempFileName(prefix, "plx", 0, filename)) {
HANDLE fh = CreateFile(filename,
@@ -2925,7 +2934,7 @@ win32_tmpfd(void)
| FILE_FLAG_DELETE_ON_CLOSE,
NULL);
if (fh != INVALID_HANDLE_VALUE) {
- int fd = win32_open_osfhandle((intptr_t)fh, 0);
+ int fd = win32_open_osfhandle((intptr_t)fh, mode);
if (fd >= 0) {
PERL_DEB(dTHX;)
DEBUG_p(PerlIO_printf(Perl_debug_log,
@@ -3904,7 +3913,7 @@ RETRY:
w32_child_pids[w32_num_children] = (DWORD)ret;
++w32_num_children;
}
- else {
+ else {
DWORD status;
win32_msgwait(aTHX_ 1, &ProcessInformation.hProcess, INFINITE, NULL);
/* FIXME: if msgwait returned due to message perhaps forward the
@@ -4544,6 +4553,7 @@ Perl_win32_term(void)
PERLIO_TERM;
MALLOC_TERM;
LOCALE_TERM;
+ ENV_TERM;
#ifndef WIN32_NO_REGISTRY
/* handles might be NULL, RegCloseKey then returns ERROR_INVALID_HANDLE
but no point of checking and we can't die() at this point */
diff --git a/gnu/usr.bin/perl/win32/win32.h b/gnu/usr.bin/perl/win32/win32.h
index 73aa67a3bef..c0ee5a6e92a 100644
--- a/gnu/usr.bin/perl/win32/win32.h
+++ b/gnu/usr.bin/perl/win32/win32.h
@@ -70,11 +70,6 @@
# define __int64 long long
# endif
# define Win32_Winsock
-#ifdef __cplusplus
-/* Mingw32 gcc -xc++ objects to __attribute((unused)) at least */
-#undef PERL_UNUSED_DECL
-#define PERL_UNUSED_DECL
-#endif
#endif
@@ -85,7 +80,7 @@
/* now even GCC supports __declspec() */
/* miniperl has no reason to export anything */
-#if defined(PERL_IS_MINIPERL) && !defined(UNDER_CE)
+#if defined(PERL_IS_MINIPERL)
# define DllExport
#else
# if defined(PERLDLL)
@@ -144,6 +139,8 @@
#ifdef _MSC_VER
# define PERL_STATIC_NO_RET __declspec(noreturn) static
# define PERL_STATIC_INLINE_NO_RET __declspec(noreturn) PERL_STATIC_INLINE
+# define PERL_STATIC_FORCE_INLINE __forceinline static
+# define PERL_STATIC_FORCE_INLINE_NO_RET __declspec(noreturn) __forceinline static
#endif
#define WIN32_LEAN_AND_MEAN
@@ -259,24 +256,19 @@ struct utsname {
/* VC uses non-standard way to determine the size and alignment if bit-fields */
/* MinGW will compile with -mms-bitfields, so should use the same types */
-#define PERL_BITFIELD8 unsigned char
-#define PERL_BITFIELD16 unsigned short
-#define PERL_BITFIELD32 unsigned int
+#define PERL_BITFIELD8 U8
+#define PERL_BITFIELD16 U16
+#define PERL_BITFIELD32 U32
#ifdef _MSC_VER /* Microsoft Visual C++ */
-#ifndef UNDER_CE
typedef long uid_t;
typedef long gid_t;
typedef unsigned short mode_t;
-#endif
#if _MSC_VER < 1800
#define isnan _isnan /* Defined already in VC++ 12.0 */
#endif
-#ifdef UNDER_CE /* revisit what function this becomes celib vs corelibc, prv warning here*/
-# undef snprintf
-#endif
#define snprintf _snprintf
#define vsnprintf _vsnprintf
@@ -735,16 +727,13 @@ EXTERN_C _CRTIMP ioinfo* __pioinfo[];
DllExport void *win32_signal_context(void);
#define PERL_GET_SIG_CONTEXT win32_signal_context()
-#ifdef UNDER_CE
-#define Win_GetModuleHandle XCEGetModuleHandleA
-#define Win_GetProcAddress XCEGetProcAddressA
-#define Win_GetModuleFileName XCEGetModuleFileNameA
-#define Win_CreateSemaphore CreateSemaphoreW
-#else
#define Win_GetModuleHandle GetModuleHandle
#define Win_GetProcAddress GetProcAddress
#define Win_GetModuleFileName GetModuleFileName
#define Win_CreateSemaphore CreateSemaphore
+
+#if defined(PERL_CORE) && !defined(O_ACCMODE)
+# define O_ACCMODE (O_RDWR | O_WRONLY | O_RDONLY)
#endif
#endif /* _INC_WIN32_PERL5 */
diff --git a/gnu/usr.bin/perl/win32/win32ceio.c b/gnu/usr.bin/perl/win32/win32ceio.c
deleted file mode 100644
index aa916a18fe6..00000000000
--- a/gnu/usr.bin/perl/win32/win32ceio.c
+++ /dev/null
@@ -1,379 +0,0 @@
-#define PERL_NO_GET_CONTEXT
-#define WIN32_LEAN_AND_MEAN
-#define WIN32IO_IS_STDIO
-#include <tchar.h>
-#ifdef __GNUC__
-#define Win32_Winsock
-#endif
-#include <windows.h>
-#include <cewin32.h>
-
-#include <sys/stat.h>
-#include "EXTERN.h"
-#include "perl.h"
-
-#ifdef PERLIO_LAYERS
-
-#include "perliol.h"
-
-#define NO_XSLOCKS
-#include "XSUB.h"
-
-
-/* Bottom-most level for Win32 case */
-
-typedef struct
-{
- struct _PerlIO base; /* The generic part */
- HANDLE h; /* OS level handle */
- IV refcnt; /* REFCNT for the "fd" this represents */
- int fd; /* UNIX like file descriptor - index into fdtable */
-} PerlIOWin32;
-
-PerlIOWin32 *fdtable[256];
-IV max_open_fd = -1;
-
-IV
-PerlIOWin32_popped(pTHX_ PerlIO *f)
-{
- PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
- if (--s->refcnt > 0)
- {
- *f = PerlIOBase(f)->next;
- return 1;
- }
- fdtable[s->fd] = NULL;
- return 0;
-}
-
-IV
-PerlIOWin32_fileno(pTHX_ PerlIO *f)
-{
- return PerlIOSelf(f,PerlIOWin32)->fd;
-}
-
-IV
-PerlIOWin32_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab)
-{
- IV code = PerlIOBase_pushed(aTHX_ f,mode,arg,tab);
- if (*PerlIONext(f))
- {
- PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
- s->fd = PerlIO_fileno(PerlIONext(f));
- }
- PerlIOBase(f)->flags |= PERLIO_F_OPEN;
- return code;
-}
-
-PerlIO *
-PerlIOWin32_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *f, int narg, SV **args)
-{
- const char *tmode = mode;
- HANDLE h = INVALID_HANDLE_VALUE;
- if (f)
- {
- /* Close if already open */
- if (PerlIOBase(f)->flags & PERLIO_F_OPEN)
- (*PerlIOBase(f)->tab->Close)(aTHX_ f);
- }
- if (narg > 0)
- {
- char *path = SvPV_nolen(*args);
- DWORD access = 0;
- DWORD share = 0;
- DWORD create = -1;
- DWORD attr = FILE_ATTRIBUTE_NORMAL;
- if (*mode == '#')
- {
- /* sysopen - imode is UNIX-like O_RDONLY etc.
- - do_open has converted that back to string form in mode as well
- - perm is UNIX like permissions
- */
- mode++;
- }
- else
- {
- /* Normal open - decode mode string */
- }
- switch(*mode)
- {
- case 'r':
- access = GENERIC_READ;
- create = OPEN_EXISTING;
- if (*++mode == '+')
- {
- access |= GENERIC_WRITE;
- create = OPEN_ALWAYS;
- mode++;
- }
- break;
-
- case 'w':
- access = GENERIC_WRITE;
- create = TRUNCATE_EXISTING;
- if (*++mode == '+')
- {
- access |= GENERIC_READ;
- mode++;
- }
- break;
-
- case 'a':
- access = GENERIC_WRITE;
- create = OPEN_ALWAYS;
- if (*++mode == '+')
- {
- access |= GENERIC_READ;
- mode++;
- }
- break;
- }
- if (*mode == 'b')
- {
- mode++;
- }
- else if (*mode == 't')
- {
- mode++;
- }
- if (*mode || create == -1)
- {
- //FIX-ME: SETERRNO(EINVAL,LIB$_INVARG);
- XCEMessageBoxA(NULL, "NEED TO IMPLEMENT a place in ../wince/win32io.c", "Perl(developer)", 0);
- return NULL;
- }
- if (!(access & GENERIC_WRITE))
- share = FILE_SHARE_READ;
- h = CreateFileW(path,access,share,NULL,create,attr,NULL);
- if (h == INVALID_HANDLE_VALUE)
- {
- if (create == TRUNCATE_EXISTING)
- h = CreateFileW(path,access,share,NULL,(create = OPEN_ALWAYS),attr,NULL);
- }
- }
- else
- {
- /* fd open */
- h = INVALID_HANDLE_VALUE;
- if (fd >= 0 && fd <= max_open_fd)
- {
- PerlIOWin32 *s = fdtable[fd];
- if (s)
- {
- s->refcnt++;
- if (!f)
- f = PerlIO_allocate(aTHX);
- *f = &s->base;
- return f;
- }
- }
- if (*mode == 'I')
- {
- mode++;
- switch(fd)
- {
- case 0:
- h = XCEGetStdHandle(STD_INPUT_HANDLE);
- break;
- case 1:
- h = XCEGetStdHandle(STD_OUTPUT_HANDLE);
- break;
- case 2:
- h = XCEGetStdHandle(STD_ERROR_HANDLE);
- break;
- }
- }
- }
- if (h != INVALID_HANDLE_VALUE)
- fd = win32_open_osfhandle((intptr_t) h, PerlIOUnix_oflags(tmode));
- if (fd >= 0)
- {
- PerlIOWin32 *s;
- if (!f)
- f = PerlIO_allocate(aTHX);
- s = PerlIOSelf(PerlIO_push(aTHX_ f,self,tmode,PerlIOArg),PerlIOWin32);
- s->h = h;
- s->fd = fd;
- s->refcnt = 1;
- if (fd >= 0)
- {
- fdtable[fd] = s;
- if (fd > max_open_fd)
- max_open_fd = fd;
- }
- return f;
- }
- if (f)
- {
- /* FIXME: pop layers ??? */
- }
- return NULL;
-}
-
-SSize_t
-PerlIOWin32_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
-{
- PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
- DWORD len;
- if (!(PerlIOBase(f)->flags & PERLIO_F_CANREAD))
- return 0;
- if (ReadFile(s->h,vbuf,count,&len,NULL))
- {
- return len;
- }
- else
- {
- if (GetLastError() != NO_ERROR)
- {
- PerlIOBase(f)->flags |= PERLIO_F_ERROR;
- PerlIO_save_errno(f);
- return -1;
- }
- else
- {
- if (count != 0)
- PerlIOBase(f)->flags |= PERLIO_F_EOF;
- return 0;
- }
- }
-}
-
-SSize_t
-PerlIOWin32_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
-{
- PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
- DWORD len;
- if (WriteFile(s->h,vbuf,count,&len,NULL))
- {
- return len;
- }
- else
- {
- PerlIOBase(f)->flags |= PERLIO_F_ERROR;
- PerlIO_save_errno(f);
- return -1;
- }
-}
-
-IV
-PerlIOWin32_seek(pTHX_ PerlIO *f, Off_t offset, int whence)
-{
- static const DWORD where[3] = { FILE_BEGIN, FILE_CURRENT, FILE_END };
- PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
- DWORD high = (sizeof(offset) > sizeof(DWORD)) ? (DWORD)(offset >> 32) : 0;
- DWORD low = (DWORD) offset;
- DWORD res = SetFilePointer(s->h,low,&high,where[whence]);
- if (res != 0xFFFFFFFF || GetLastError() != NO_ERROR)
- {
- return 0;
- }
- else
- {
- return -1;
- }
-}
-
-Off_t
-PerlIOWin32_tell(pTHX_ PerlIO *f)
-{
- PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
- DWORD high = 0;
- DWORD res = SetFilePointer(s->h,0,&high,FILE_CURRENT);
- if (res != 0xFFFFFFFF || GetLastError() != NO_ERROR)
- {
- return ((Off_t) high << 32) | res;
- }
- return (Off_t) -1;
-}
-
-IV
-PerlIOWin32_close(pTHX_ PerlIO *f)
-{
- PerlIOWin32 *s = PerlIOSelf(f,PerlIOWin32);
- if (s->refcnt == 1)
- {
- IV code = 0;
-#if 0
- /* This does not do pipes etc. correctly */
- if (!CloseHandle(s->h))
- {
- s->h = INVALID_HANDLE_VALUE;
- return -1;
- }
-#else
- PerlIOBase(f)->flags &= ~PERLIO_F_OPEN;
- return win32_close(s->fd);
-#endif
- }
- return 0;
-}
-
-PerlIO *
-PerlIOWin32_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *params, int flags)
-{
- PerlIOWin32 *os = PerlIOSelf(f,PerlIOWin32);
- HANDLE proc = GetCurrentProcess();
- HANDLE new;
- if (DuplicateHandle(proc, os->h, proc, &new, 0, FALSE, DUPLICATE_SAME_ACCESS))
- {
- char mode[8];
- int fd = win32_open_osfhandle((intptr_t) new, PerlIOUnix_oflags(PerlIO_modestr(o,mode)));
- if (fd >= 0)
- {
- f = PerlIOBase_dup(aTHX_ f, o, params, flags);
- if (f)
- {
- PerlIOWin32 *fs = PerlIOSelf(f,PerlIOWin32);
- fs->h = new;
- fs->fd = fd;
- fs->refcnt = 1;
- fdtable[fd] = fs;
- if (fd > max_open_fd)
- max_open_fd = fd;
- }
- else
- {
- win32_close(fd);
- }
- }
- else
- {
- CloseHandle(new);
- }
- }
- return f;
-}
-
-PerlIO_funcs PerlIO_win32 = {
- sizeof(PerlIO_funcs),
- "win32",
- sizeof(PerlIOWin32),
- PERLIO_K_RAW,
- PerlIOWin32_pushed,
- PerlIOWin32_popped,
- PerlIOWin32_open,
- PerlIOBase_binmode,
- NULL, /* getarg */
- PerlIOWin32_fileno,
- PerlIOWin32_dup,
- PerlIOWin32_read,
- PerlIOBase_unread,
- PerlIOWin32_write,
- PerlIOWin32_seek,
- PerlIOWin32_tell,
- PerlIOWin32_close,
- PerlIOBase_noop_ok, /* flush */
- PerlIOBase_noop_fail, /* fill */
- PerlIOBase_eof,
- PerlIOBase_error,
- PerlIOBase_clearerr,
- PerlIOBase_setlinebuf,
- NULL, /* get_base */
- NULL, /* get_bufsiz */
- NULL, /* get_ptr */
- NULL, /* get_cnt */
- NULL, /* set_ptrcnt */
-};
-
-#endif
-
diff --git a/gnu/usr.bin/perl/win32/win32io.c b/gnu/usr.bin/perl/win32/win32io.c
index 00f5bb80498..814fc8bf8f3 100644
--- a/gnu/usr.bin/perl/win32/win32io.c
+++ b/gnu/usr.bin/perl/win32/win32io.c
@@ -159,7 +159,7 @@ PerlIOWin32_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, IV n, const ch
{
/* fd open */
h = INVALID_HANDLE_VALUE;
- if (fd >= 0 && fd <= max_open_fd)
+ if (inRANGE(fd, 0, max_open_fd))
{
PerlIOWin32 *s = fdtable[fd];
if (s)
diff --git a/gnu/usr.bin/perl/win32/win32iop-o.h b/gnu/usr.bin/perl/win32/win32iop-o.h
deleted file mode 100644
index 2b766dc5540..00000000000
--- a/gnu/usr.bin/perl/win32/win32iop-o.h
+++ /dev/null
@@ -1,327 +0,0 @@
-/* Time-stamp: <01/08/01 21:00:16 keuchel@w2k> */
-
-#ifndef WIN32IOP_H
-#define WIN32IOP_H
-
-#ifndef START_EXTERN_C
-#ifdef __cplusplus
-# define START_EXTERN_C extern "C" {
-# define END_EXTERN_C }
-# define EXTERN_C extern "C"
-#else
-# define START_EXTERN_C
-# define END_EXTERN_C
-# define EXTERN_C
-#endif
-#endif
-
-#ifndef UNDER_CE
-#include <sys/utime.h>
-#endif
-
-/*
- * defines for flock emulation
- */
-#define LOCK_SH 1
-#define LOCK_EX 2
-#define LOCK_NB 4
-#define LOCK_UN 8
-
-/*
- * Make this as close to original stdio as possible.
- */
-
-/*
- * function prototypes for our own win32io layer
- */
-START_EXTERN_C
-
-DllExport int * win32_errno(void);
-DllExport char *** win32_environ(void);
-DllExport FILE* win32_stdin(void);
-DllExport FILE* win32_stdout(void);
-DllExport FILE* win32_stderr(void);
-DllExport int win32_ferror(FILE *fp);
-DllExport int win32_feof(FILE *fp);
-DllExport char* win32_strerror(int e);
-
-DllExport int win32_fprintf(FILE *pf, const char *format, ...);
-DllExport int win32_printf(const char *format, ...);
-DllExport int win32_vfprintf(FILE *pf, const char *format, va_list arg);
-DllExport int win32_vprintf(const char *format, va_list arg);
-DllExport size_t win32_fread(void *buf, size_t size, size_t count, FILE *pf);
-DllExport size_t win32_fwrite(const void *buf, size_t size, size_t count, FILE *pf);
-DllExport FILE* win32_fopen(const char *path, const char *mode);
-DllExport FILE* win32_fdopen(int fh, const char *mode);
-DllExport FILE* win32_freopen(const char *path, const char *mode, FILE *pf);
-DllExport int win32_fclose(FILE *pf);
-DllExport int win32_fputs(const char *s,FILE *pf);
-DllExport int win32_fputc(int c,FILE *pf);
-DllExport int win32_ungetc(int c,FILE *pf);
-DllExport int win32_getc(FILE *pf);
-DllExport int win32_fileno(FILE *pf);
-DllExport void win32_clearerr(FILE *pf);
-DllExport int win32_fflush(FILE *pf);
-DllExport long win32_ftell(FILE *pf);
-DllExport int win32_fseek(FILE *pf,long offset,int origin);
-DllExport int win32_fgetpos(FILE *pf,fpos_t *p);
-DllExport int win32_fsetpos(FILE *pf,const fpos_t *p);
-DllExport void win32_rewind(FILE *pf);
-DllExport FILE* win32_tmpfile(void);
-DllExport int win32_tmpfd(void);
-DllExport void win32_abort(void);
-DllExport int win32_fstat(int fd,struct stat *sbufptr);
-DllExport int win32_stat(const char *name,struct stat *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);
-DllExport int win32_pclose( FILE *pf);
-DllExport int win32_rename( const char *oname, const char *newname);
-DllExport int win32_setmode( int fd, int mode);
-DllExport int win32_chsize(int fd, Off_t size);
-DllExport long win32_lseek( int fd, long offset, int origin);
-DllExport long win32_tell( int fd);
-DllExport int win32_dup( int fd);
-DllExport int win32_dup2(int h1, int h2);
-DllExport int win32_open(const char *path, int oflag,...);
-DllExport int win32_close(int fd);
-DllExport int win32_eof(int fd);
-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);
-DllExport int win32_mkdir(const char *dir, int mode);
-DllExport int win32_rmdir(const char *dir);
-DllExport int win32_chdir(const char *dir);
-DllExport int win32_flock(int fd, int oper);
-DllExport int win32_execv(const char *cmdname, const char *const *argv);
-DllExport int win32_execvp(const char *cmdname, const char *const *argv);
-DllExport void win32_perror(const char *str);
-DllExport void win32_setbuf(FILE *pf, char *buf);
-DllExport int win32_setvbuf(FILE *pf, char *buf, int type, size_t size);
-DllExport int win32_flushall(void);
-DllExport int win32_fcloseall(void);
-DllExport char* win32_fgets(char *s, int n, FILE *pf);
-DllExport char* win32_gets(char *s);
-DllExport int win32_fgetc(FILE *pf);
-DllExport int win32_putc(int c, FILE *pf);
-DllExport int win32_puts(const char *s);
-DllExport int win32_getchar(void);
-DllExport int win32_putchar(int c);
-DllExport void* win32_malloc(size_t size);
-DllExport void* win32_calloc(size_t numitems, size_t size);
-DllExport void* win32_realloc(void *block, size_t size);
-DllExport void win32_free(void *block);
-
-DllExport int win32_open_osfhandle(long handle, int flags);
-DllExport long win32_get_osfhandle(int fd);
-
-DllExport DIR* win32_opendir(char *filename);
-DllExport struct direct* win32_readdir(DIR *dirp);
-DllExport long win32_telldir(DIR *dirp);
-DllExport void win32_seekdir(DIR *dirp, long loc);
-DllExport void win32_rewinddir(DIR *dirp);
-DllExport int win32_closedir(DIR *dirp);
-
-DllExport char* win32_getenv(const char *name);
-DllExport int win32_putenv(const char *name);
-
-DllExport unsigned win32_sleep(unsigned int);
-DllExport int win32_times(struct tms *timebuf);
-DllExport unsigned win32_alarm(unsigned int sec);
-DllExport int win32_stat(const char *path, struct stat *buf);
-DllExport char* win32_longpath(char *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_gettimeofday(struct timeval *tp, void *not_used);
-DllExport int win32_unlink(const char *f);
-DllExport int win32_utime(const char *f, struct utimbuf *t);
-DllExport int win32_uname(struct utsname *n);
-DllExport int win32_wait(int *status);
-DllExport int win32_waitpid(int pid, int *status, int flags);
-DllExport int win32_kill(int pid, int sig);
-DllExport unsigned long win32_os_id(void);
-DllExport void* win32_dynaload(const char*filename);
-DllExport int win32_access(const char *path, int mode);
-DllExport int win32_chmod(const char *path, int mode);
-DllExport int win32_getpid(void);
-DllExport Sighandler_t win32_signal(int sig, Sighandler_t subcode);
-
-DllExport char * win32_crypt(const char *txt, const char *salt);
-
-END_EXTERN_C
-
-/*
- * the following six(6) is #define in stdio.h
- */
-#ifndef WIN32IO_IS_STDIO
-#undef errno
-#undef environ
-#undef stderr
-#undef stdin
-#undef stdout
-#undef ferror
-#undef feof
-#undef fclose
-#undef pipe
-#undef pause
-#undef sleep
-#undef times
-#undef alarm
-#undef ioctl
-#undef unlink
-#undef utime
-#undef uname
-#undef wait
-
-#define stderr win32_stderr()
-#define stdout win32_stdout()
-#define stdin win32_stdin()
-#define feof(f) win32_feof(f)
-#define ferror(f) win32_ferror(f)
-#define errno (*win32_errno())
-#define environ (*win32_environ())
-#define strerror win32_strerror
-
-/*
- * redirect to our own version
- */
-#undef fprintf
-#define fprintf win32_fprintf
-#undef vfprintf
-#define vfprintf win32_vfprintf
-#undef printf
-#define printf win32_printf
-#undef vprintf
-#define vprintf win32_vprintf
-#undef fread
-#define fread(buf,size,count,f) win32_fread(buf,size,count,f)
-#undef fwrite
-#define fwrite(buf,size,count,f) win32_fwrite(buf,size,count,f)
-#undef fopen
-#define fopen win32_fopen
-#undef fdopen
-#define fdopen win32_fdopen
-#undef freopen
-#define freopen win32_freopen
-#define fclose(f) win32_fclose(f)
-#undef fputs
-#define fputs(s,f) win32_fputs(s,f)
-#undef fputc
-#define fputc(c,f) win32_fputc(c,f)
-#undef ungetc
-#define ungetc(c,f) win32_ungetc(c,f)
-#undef getc
-#define getc(f) win32_getc(f)
-#undef fileno
-#define fileno(f) win32_fileno(f)
-#undef clearerr
-#define clearerr(f) win32_clearerr(f)
-#undef fflush
-#define fflush(f) win32_fflush(f)
-#undef ftell
-#define ftell(f) win32_ftell(f)
-#undef fseek
-#define fseek(f,o,w) win32_fseek(f,o,w)
-#undef fgetpos
-#define fgetpos(f,p) win32_fgetpos(f,p)
-#undef fsetpos
-#define fsetpos(f,p) win32_fsetpos(f,p)
-#undef rewind
-#define rewind(f) win32_rewind(f)
-#define tmpfile() win32_tmpfile()
-#define abort() win32_abort()
-#define fstat(fd,bufptr) win32_fstat(fd,bufptr)
-#define stat(pth,bufptr) win32_stat(pth,bufptr)
-#define longpath(pth) win32_longpath(pth)
-#define rename(old,new) win32_rename(old,new)
-#define setmode(fd,mode) win32_setmode(fd,mode)
-#define lseek(fd,offset,orig) win32_lseek(fd,offset,orig)
-#define tell(fd) win32_tell(fd)
-#define dup(fd) win32_dup(fd)
-#define dup2(fd1,fd2) win32_dup2(fd1,fd2)
-#define open win32_open
-#define close(fd) win32_close(fd)
-#define eof(fd) win32_eof(fd)
-#define read(fd,b,s) win32_read(fd,b,s)
-#define write(fd,b,s) win32_write(fd,b,s)
-#define _open_osfhandle win32_open_osfhandle
-#define _get_osfhandle win32_get_osfhandle
-#define spawnvp win32_spawnvp
-#define mkdir win32_mkdir
-#define rmdir win32_rmdir
-#define chdir win32_chdir
-#define flock(fd,o) win32_flock(fd,o)
-#define execv win32_execv
-#define execvp win32_execvp
-#define perror win32_perror
-#define setbuf win32_setbuf
-#undef setvbuf
-#define setvbuf win32_setvbuf
-#undef flushall
-#define flushall win32_flushall
-#undef fcloseall
-#define fcloseall win32_fcloseall
-#undef fgets
-#define fgets win32_fgets
-#undef gets
-#define gets win32_gets
-#undef fgetc
-#define fgetc win32_fgetc
-#undef putc
-#define putc win32_putc
-#undef puts
-#define puts win32_puts
-#undef getchar
-#define getchar win32_getchar
-#undef putchar
-#define putchar win32_putchar
-#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
-#undef realloc
-#undef free
-#define malloc win32_malloc
-#define calloc win32_calloc
-#define realloc win32_realloc
-#define free win32_free
-#endif
-
-#define pipe(fd) win32_pipe((fd), 512, O_BINARY)
-#define pause() win32_sleep((32767L << 16) + 32767)
-#define sleep win32_sleep
-#define times win32_times
-#define alarm win32_alarm
-#define ioctl win32_ioctl
-#define link win32_link
-#define unlink win32_unlink
-#define utime win32_utime
-#define uname win32_uname
-#define wait win32_wait
-#define waitpid win32_waitpid
-#define kill win32_kill
-
-#define opendir win32_opendir
-#define readdir win32_readdir
-#define telldir win32_telldir
-#define seekdir win32_seekdir
-#define rewinddir win32_rewinddir
-#define closedir win32_closedir
-#define os_id win32_os_id
-#define getpid win32_getpid
-
-#undef crypt
-#define crypt(t,s) win32_crypt(t,s)
-
-#undef getenv
-#define getenv win32_getenv
-#undef putenv
-#define putenv win32_putenv
-
-#endif /* WIN32IO_IS_STDIO */
-#endif /* WIN32IOP_H */
-
diff --git a/gnu/usr.bin/perl/win32/win32iop.h b/gnu/usr.bin/perl/win32/win32iop.h
index a9235d35956..559e1f9cd2e 100644
--- a/gnu/usr.bin/perl/win32/win32iop.h
+++ b/gnu/usr.bin/perl/win32/win32iop.h
@@ -64,6 +64,7 @@ DllExport int win32_fgetpos(FILE *pf,fpos_t *p);
DllExport int win32_fsetpos(FILE *pf,const fpos_t *p);
DllExport void win32_rewind(FILE *pf);
DllExport int win32_tmpfd(void);
+DllExport int win32_tmpfd_mode(int mode);
DllExport FILE* win32_tmpfile(void);
DllExport void win32_abort(void);
DllExport int win32_fstat(int fd,Stat_t *sbufptr);
@@ -207,210 +208,81 @@ END_EXTERN_C
*/
#undef fprintf
#define fprintf win32_fprintf
-#ifdef UNDER_CE /* celib also makes these be macros to celib's x* symbols */
-# undef vfprintf
-#endif
#define vfprintf win32_vfprintf
-#ifdef UNDER_CE
-# undef printf
-#endif
#define printf win32_printf
-#ifdef UNDER_CE
-# undef vprintf
-#endif
#define vprintf win32_vprintf
-#ifdef UNDER_CE
-# undef fread
-#endif
#define fread(buf,size,count,f) win32_fread(buf,size,count,f)
-#ifdef UNDER_CE
-# undef fwrite
-#endif
#define fwrite(buf,size,count,f) win32_fwrite(buf,size,count,f)
-#ifdef UNDER_CE
-# undef fopen
-#endif
#define fopen win32_fopen
#undef fdopen
#define fdopen win32_fdopen
-#ifdef UNDER_CE
-# undef freopen
-#endif
#define freopen win32_freopen
#define fclose(f) win32_fclose(f)
-#ifdef UNDER_CE
-# undef fputs
-#endif
#define fputs(s,f) win32_fputs(s,f)
-#ifdef UNDER_CE
-# undef fputc
-#endif
#define fputc(c,f) win32_fputc(c,f)
-#ifdef UNDER_CE
-# undef ungetc
-#endif
#define ungetc(c,f) win32_ungetc(c,f)
#undef getc
#define getc(f) win32_getc(f)
-#ifdef UNDER_CE
-# undef fileno
-#endif
#define fileno(f) win32_fileno(f)
-#ifdef UNDER_CE
-# undef clearerr
-#endif
#define clearerr(f) win32_clearerr(f)
-#ifdef UNDER_CE
-# undef fflush
-#endif
#define fflush(f) win32_fflush(f)
-#ifdef UNDER_CE
-# undef ftell
-#endif
#define ftell(f) win32_ftell(f)
-#ifdef UNDER_CE
-# undef fseek
-#endif
#define fseek(f,o,w) win32_fseek(f,o,w)
-#ifdef UNDER_CE
-# undef fgetpos
-#endif
#define fgetpos(f,p) win32_fgetpos(f,p)
-#ifdef UNDER_CE
-# undef fsetpos
-#endif
#define fsetpos(f,p) win32_fsetpos(f,p)
-#ifdef UNDER_CE
-# undef rewind
-#endif
#define rewind(f) win32_rewind(f)
#define tmpfile() win32_tmpfile()
-#ifdef UNDER_CE
-# undef abort
-#endif
#define abort() win32_abort()
-#if defined(UNDER_CE) || defined(__MINGW32__)
+#ifdef __MINGW32__
# undef fstat
#endif
#define fstat(fd,bufptr) win32_fstat(fd,bufptr)
-#if defined(UNDER_CE) || defined(__MINGW32__)
+#ifdef __MINGW32__
# undef stat
#endif
#define stat(pth,bufptr) win32_stat(pth,bufptr)
#define longpath(pth) win32_longpath(pth)
#define ansipath(pth) win32_ansipath(pth)
-#ifdef UNDER_CE
-# undef rename
-#endif
#define rename(old,new) win32_rename(old,new)
-#ifdef UNDER_CE
-# undef setmode
-#endif
#define setmode(fd,mode) win32_setmode(fd,mode)
#define chsize(fd,sz) win32_chsize(fd,sz)
-#ifdef UNDER_CE
-# undef lseek
-#endif
#define lseek(fd,offset,orig) win32_lseek(fd,offset,orig)
#define tell(fd) win32_tell(fd)
-#ifdef UNDER_CE
-# undef dup
-#endif
#define dup(fd) win32_dup(fd)
-#ifdef UNDER_CE
-# undef dup2
-#endif
#define dup2(fd1,fd2) win32_dup2(fd1,fd2)
-#ifdef UNDER_CE
-# undef open
-#endif
#define open win32_open
-#ifdef UNDER_CE
-# undef close
-#endif
#define close(fd) win32_close(fd)
#define eof(fd) win32_eof(fd)
-#ifdef UNDER_CE
-# undef isatty
-#endif
#define isatty(fd) win32_isatty(fd)
-#ifdef UNDER_CE
-# undef read
-#endif
#define read(fd,b,s) win32_read(fd,b,s)
-#ifdef UNDER_CE
-# undef write
-#endif
#define write(fd,b,s) win32_write(fd,b,s)
#define _open_osfhandle win32_open_osfhandle
-#ifdef UNDER_CE
-# undef _get_osfhandle
-#endif
#define _get_osfhandle win32_get_osfhandle
#define spawnvp win32_spawnvp
-#ifdef UNDER_CE
-# undef mkdir
-#endif
#define mkdir win32_mkdir
-#ifdef UNDER_CE
-# undef rmdir
-#endif
#define rmdir win32_rmdir
-#ifdef UNDER_CE
-# undef chdir
-#endif
#define chdir win32_chdir
#define flock(fd,o) win32_flock(fd,o)
-#ifdef UNDER_CE
-# undef execv
-#endif
#define execv win32_execv
-#ifdef UNDER_CE
-# undef execvp
-#endif
#define execvp win32_execvp
-#ifdef UNDER_CE
-# undef perror
-#endif
#define perror win32_perror
#define setbuf win32_setbuf
-#ifdef UNDER_CE
-# undef setvbuf
-#endif
#define setvbuf win32_setvbuf
#undef flushall
#define flushall win32_flushall
#undef fcloseall
#define fcloseall win32_fcloseall
-#ifdef UNDER_CE
-# undef fgets
-#endif
#define fgets win32_fgets
-#ifdef UNDER_CE
-# undef gets
-#endif
#define gets win32_gets
-#ifdef UNDER_CE
-# undef fgetc
-#endif
#define fgetc win32_fgetc
#undef putc
#define putc win32_putc
-#ifdef UNDER_CE
-# undef puts
-#endif
#define puts win32_puts
#undef getchar
#define getchar win32_getchar
#undef putchar
#define putchar win32_putchar
-#ifdef UNDER_CE
-# undef access
-#endif
#define access(p,m) win32_access(p,m)
-#ifdef UNDER_CE
-# undef chmod
-#endif
#define chmod(p,m) win32_chmod(p,m)
@@ -437,42 +309,21 @@ END_EXTERN_C
#define link win32_link
#define unlink win32_unlink
#define utime win32_utime
-#ifdef UNDER_CE
-# undef gettimeofday
-#endif
#define gettimeofday win32_gettimeofday
#define uname win32_uname
#define wait win32_wait
#define waitpid win32_waitpid
-#ifdef UNDER_CE
-# undef kill
-#endif
#define kill win32_kill
-#ifdef UNDER_CE
-# undef killpg
-#endif
#define killpg(pid, sig) win32_kill(pid, -(sig))
-#ifdef UNDER_CE
-# undef opendir
-#endif
#define opendir win32_opendir
-#ifdef UNDER_CE
-# undef readdir
-#endif
#define readdir win32_readdir
#define telldir win32_telldir
#define seekdir win32_seekdir
#define rewinddir win32_rewinddir
-#ifdef UNDER_CE
-# undef closedir
-#endif
#define closedir win32_closedir
#define os_id win32_os_id
-#ifdef UNDER_CE
-# undef getpid
-#endif
#define getpid win32_getpid
#undef crypt
diff --git a/gnu/usr.bin/perl/win32/win32sck.c b/gnu/usr.bin/perl/win32/win32sck.c
index d285ece082d..2798ee507b5 100644
--- a/gnu/usr.bin/perl/win32/win32sck.c
+++ b/gnu/usr.bin/perl/win32/win32sck.c
@@ -15,6 +15,7 @@
#ifdef __GNUC__
#define Win32_Winsock
#endif
+#include <wchar.h>
#include <windows.h>
#include <ws2spi.h>
diff --git a/gnu/usr.bin/perl/win32/wince.c b/gnu/usr.bin/perl/win32/wince.c
deleted file mode 100644
index 07585952409..00000000000
--- a/gnu/usr.bin/perl/win32/wince.c
+++ /dev/null
@@ -1,2877 +0,0 @@
-/* WINCE.C - stuff for Windows CE
- *
- * Time-stamp: <26/10/01 15:25:20 keuchel@keuchelnt>
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- */
-
-#define WIN32_LEAN_AND_MEAN
-#define WIN32IO_IS_STDIO
-#include <windows.h>
-#include <signal.h>
-
-#define PERLIO_NOT_STDIO 0
-
-#define PerlIO FILE
-
-#define wince_private
-#include "errno.h"
-
-#include "EXTERN.h"
-#include "perl.h"
-
-#define NO_XSLOCKS
-#define PERL_NO_GET_CONTEXT
-#include "XSUB.h"
-
-#include "win32iop.h"
-#include <string.h>
-#include <stdarg.h>
-#include <float.h>
-#include <shellapi.h>
-#include <process.h>
-
-#define perl
-#include "celib_defs.h"
-#include "cewin32.h"
-#include "cecrt.h"
-#include "cewin32_defs.h"
-#include "cecrt_defs.h"
-
-#define GetCurrentDirectoryW XCEGetCurrentDirectoryW
-
-#ifdef PALM_SIZE
-#include "stdio-palmsize.h"
-#endif
-
-#define EXECF_EXEC 1
-#define EXECF_SPAWN 2
-#define EXECF_SPAWN_NOWAIT 3
-
-#if defined(PERL_IMPLICIT_SYS)
-# undef do_spawn
-# define do_spawn g_do_spawn
-# undef getlogin
-# define getlogin g_getlogin
-#endif
-
-static void get_shell(void);
-static long tokenize(const char *str, char **dest, char ***destv);
-static int do_spawn2(pTHX_ char *cmd, int exectype);
-static BOOL has_shell_metachars(char *ptr);
-static long filetime_to_clock(PFILETIME ft);
-static BOOL filetime_from_time(PFILETIME ft, time_t t);
-static char * get_emd_part(SV **leading, STRLEN *const len,
- char *trailing, ...);
-static void remove_dead_process(long deceased);
-static long find_pid(pTHX_ int pid);
-static char * qualified_path(const char *cmd);
-static char * win32_get_xlib(const char *pl, const char *xlib,
- const char *libname, STRLEN *const len);
-
-#ifdef USE_ITHREADS
-static void remove_dead_pseudo_process(long child);
-static long find_pseudo_pid(pTHX_ int pid);
-#endif
-
-int _fmode = O_TEXT; /* celib do not provide _fmode, so we define it here */
-
-START_EXTERN_C
-HANDLE w32_perldll_handle = INVALID_HANDLE_VALUE;
-char w32_module_name[MAX_PATH+1];
-END_EXTERN_C
-
-static DWORD w32_platform = (DWORD)-1;
-
-int
-IsWin95(void)
-{
- return (win32_os_id() == VER_PLATFORM_WIN32_WINDOWS);
-}
-
-int
-IsWinNT(void)
-{
- return (win32_os_id() == VER_PLATFORM_WIN32_NT);
-}
-
-int
-IsWinCE(void)
-{
- return (win32_os_id() == VER_PLATFORM_WIN32_CE);
-}
-
-EXTERN_C void
-set_w32_module_name(void)
-{
- char* ptr;
- XCEGetModuleFileNameA((HMODULE)((w32_perldll_handle == INVALID_HANDLE_VALUE)
- ? XCEGetModuleHandleA(NULL)
- : w32_perldll_handle),
- w32_module_name, sizeof(w32_module_name));
-
- /* normalize to forward slashes */
- ptr = w32_module_name;
- while (*ptr) {
- if (*ptr == '\\')
- *ptr = '/';
- ++ptr;
- }
-}
-
-/* *svp (if non-NULL) is expected to be POK (valid allocated SvPVX(*svp)) */
-static char*
-get_regstr_from(HKEY hkey, const char *valuename, SV **svp)
-{
- /* Retrieve a REG_SZ or REG_EXPAND_SZ from the registry */
- HKEY handle;
- DWORD type;
- const char *subkey = "Software\\Perl";
- char *str = NULL;
- long retval;
-
- retval = XCERegOpenKeyExA(hkey, subkey, 0, KEY_READ, &handle);
- if (retval == ERROR_SUCCESS) {
- DWORD datalen;
- retval = XCERegQueryValueExA(handle, valuename, 0, &type, NULL, &datalen);
- if (retval == ERROR_SUCCESS && type == REG_SZ) {
- dTHX;
- if (!*svp)
- *svp = sv_2mortal(newSVpvs(""));
- SvGROW(*svp, datalen);
- retval = XCERegQueryValueExA(handle, valuename, 0, NULL,
- (PBYTE)SvPVX(*svp), &datalen);
- if (retval == ERROR_SUCCESS) {
- str = SvPVX(*svp);
- SvCUR_set(*svp,datalen-1);
- }
- }
- RegCloseKey(handle);
- }
- return str;
-}
-
-/* *svp (if non-NULL) is expected to be POK (valid allocated SvPVX(*svp)) */
-static char*
-get_regstr(const char *valuename, SV **svp)
-{
- char *str = get_regstr_from(HKEY_CURRENT_USER, valuename, svp);
- if (!str)
- str = get_regstr_from(HKEY_LOCAL_MACHINE, valuename, svp);
- return str;
-}
-
-/* *prev_pathp (if non-NULL) is expected to be POK (valid allocated SvPVX(sv)) */
-static char *
-get_emd_part(SV **prev_pathp, STRLEN *const len, char *trailing_path, ...)
-{
- char base[10];
- va_list ap;
- char mod_name[MAX_PATH+1];
- char *ptr;
- char *optr;
- char *strip;
- int oldsize, newsize;
- STRLEN baselen;
-
- va_start(ap, trailing_path);
- strip = va_arg(ap, char *);
-
- sprintf(base, "%d.%d", (int)PERL_REVISION, (int)PERL_VERSION);
- baselen = strlen(base);
-
- if (!*w32_module_name) {
- set_w32_module_name();
- }
- strcpy(mod_name, w32_module_name);
- ptr = strrchr(mod_name, '/');
- while (ptr && strip) {
- /* look for directories to skip back */
- optr = ptr;
- *ptr = '\0';
- ptr = strrchr(mod_name, '/');
- /* avoid stripping component if there is no slash,
- * or it doesn't match ... */
- if (!ptr || stricmp(ptr+1, strip) != 0) {
- /* ... but not if component matches m|5\.$patchlevel.*| */
- if (!ptr || !(*strip == '5' && *(ptr+1) == '5'
- && strnEQ(strip, base, baselen)
- && strnEQ(ptr+1, base, baselen)))
- {
- *optr = '/';
- ptr = optr;
- }
- }
- strip = va_arg(ap, char *);
- }
- if (!ptr) {
- ptr = mod_name;
- *ptr++ = '.';
- *ptr = '/';
- }
- va_end(ap);
- strcpy(++ptr, trailing_path);
-
- /* only add directory if it exists */
- if (XCEGetFileAttributesA(mod_name) != (DWORD) -1) {
- /* directory exists */
- dTHX;
- if (!*prev_pathp)
- *prev_pathp = sv_2mortal(newSVpvs(""));
- sv_catpvs(*prev_pathp, ";");
- sv_catpv(*prev_pathp, mod_name);
- if(len)
- *len = SvCUR(*prev_pathp);
- return SvPVX(*prev_pathp);
- }
-
- return NULL;
-}
-
-char *
-win32_get_privlib(WIN32_NO_REGISTRY_M_(const char *pl) STRLEN *const len)
-{
- dTHX;
- char *stdlib = "lib";
- char buffer[MAX_PATH+1];
- SV *sv = NULL;
-
- /* $stdlib = $HKCU{"lib-$]"} || $HKLM{"lib-$]"} || $HKCU{"lib"} || $HKLM{"lib"} || ""; */
- sprintf(buffer, "%s-%s", stdlib, pl);
- if (!get_regstr(buffer, &sv))
- (void)get_regstr(stdlib, &sv);
-
- /* $stdlib .= ";$EMD/../../lib" */
- return get_emd_part(&sv, len, stdlib, ARCHNAME, "bin", NULL);
-}
-
-static char *
-win32_get_xlib(const char *pl, const char *xlib, const char *libname,
- STRLEN *const len)
-{
- dTHX;
- char regstr[40];
- char pathstr[MAX_PATH+1];
- SV *sv1 = NULL;
- SV *sv2 = NULL;
-
- /* $HKCU{"$xlib-$]"} || $HKLM{"$xlib-$]"} . ---; */
- sprintf(regstr, "%s-%s", xlib, pl);
- (void)get_regstr(regstr, &sv1);
-
- /* $xlib .=
- * ";$EMD/" . ((-d $EMD/../../../$]) ? "../../.." : "../.."). "/$libname/$]/lib"; */
- sprintf(pathstr, "%s/%s/lib", libname, pl);
- (void)get_emd_part(&sv1, NULL, pathstr, ARCHNAME, "bin", pl, NULL);
-
- /* $HKCU{$xlib} || $HKLM{$xlib} . ---; */
- (void)get_regstr(xlib, &sv2);
-
- /* $xlib .=
- * ";$EMD/" . ((-d $EMD/../../../$]) ? "../../.." : "../.."). "/$libname/lib"; */
- sprintf(pathstr, "%s/lib", libname);
- (void)get_emd_part(&sv2, NULL, pathstr, ARCHNAME, "bin", pl, NULL);
-
- if (!sv1 && !sv2)
- return NULL;
- if (!sv1) {
- sv1 = sv2;
- } else if (sv2) {
- sv_catpvs(sv1, ";");
- sv_catsv(sv1, sv2);
- }
-
- if (len)
- *len = SvCUR(sv1);
- return SvPVX(sv1);
-}
-
-char *
-win32_get_sitelib(const char *pl, STRLEN *const len)
-{
- return win32_get_xlib(pl, "sitelib", "site", len);
-}
-
-#ifndef PERL_VENDORLIB_NAME
-# define PERL_VENDORLIB_NAME "vendor"
-#endif
-
-char *
-win32_get_vendorlib(const char *pl, STRLEN *const len)
-{
- return win32_get_xlib(pl, "vendorlib", PERL_VENDORLIB_NAME, len);
-}
-
-static BOOL
-has_shell_metachars(char *ptr)
-{
- int inquote = 0;
- char quote = '\0';
-
- /*
- * Scan string looking for redirection (< or >) or pipe
- * characters (|) that are not in a quoted string.
- * Shell variable interpolation (%VAR%) can also happen inside strings.
- */
- while (*ptr) {
- switch(*ptr) {
- case '%':
- return TRUE;
- case '\'':
- case '\"':
- if (inquote) {
- if (quote == *ptr) {
- inquote = 0;
- quote = '\0';
- }
- }
- else {
- quote = *ptr;
- inquote++;
- }
- break;
- case '>':
- case '<':
- case '|':
- if (!inquote)
- return TRUE;
- default:
- break;
- }
- ++ptr;
- }
- return FALSE;
-}
-
-#if !defined(PERL_IMPLICIT_SYS)
-/* since the current process environment is being updated in util.c
- * the library functions will get the correct environment
- */
-PerlIO *
-Perl_my_popen(pTHX_ const char *cmd, const char *mode)
-{
- printf("popen(%s)\n", cmd);
-
- Perl_croak(aTHX_ PL_no_func, "popen");
- return NULL;
-}
-
-long
-Perl_my_pclose(pTHX_ PerlIO *fp)
-{
- Perl_croak(aTHX_ PL_no_func, "pclose");
- return -1;
-}
-#endif
-
-DllExport unsigned long
-win32_os_id(void)
-{
- static OSVERSIONINFOA osver;
-
- if (osver.dwPlatformId != w32_platform) {
- memset(&osver, 0, sizeof(OSVERSIONINFOA));
- osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
- XCEGetVersionExA(&osver);
- w32_platform = osver.dwPlatformId;
- }
- return (unsigned long)w32_platform;
-}
-
-DllExport int
-win32_getpid(void)
-{
- int pid;
-#ifdef USE_ITHREADS
- dTHX;
- if (w32_pseudo_id)
- return -((int)w32_pseudo_id);
-#endif
- pid = xcegetpid();
- return pid;
-}
-
-/* Tokenize a string. Words are null-separated, and the list
- * ends with a doubled null. Any character (except null and
- * including backslash) may be escaped by preceding it with a
- * backslash (the backslash will be stripped).
- * Returns number of words in result buffer.
- */
-static long
-tokenize(const char *str, char **dest, char ***destv)
-{
- char *retstart = NULL;
- char **retvstart = 0;
- int items = -1;
- if (str) {
- dTHX;
- int slen = strlen(str);
- char *ret;
- char **retv;
- Newx(ret, slen+2, char);
- Newx(retv, (slen+3)/2, char*);
-
- retstart = ret;
- retvstart = retv;
- *retv = ret;
- items = 0;
- while (*str) {
- *ret = *str++;
- if (*ret == '\\' && *str)
- *ret = *str++;
- else if (*ret == ' ') {
- while (*str == ' ')
- str++;
- if (ret == retstart)
- ret--;
- else {
- *ret = '\0';
- ++items;
- if (*str)
- *++retv = ret+1;
- }
- }
- else if (!*str)
- ++items;
- ret++;
- }
- retvstart[items] = NULL;
- *ret++ = '\0';
- *ret = '\0';
- }
- *dest = retstart;
- *destv = retvstart;
- return items;
-}
-
-DllExport int
-win32_pipe(int *pfd, unsigned int size, int mode)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "pipe");
- return -1;
-}
-
-DllExport int
-win32_times(struct tms *timebuf)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "times");
- return -1;
-}
-
-Sighandler_t
-win32_signal(int sig, Sighandler_t subcode)
-{
- return xcesignal(sig, subcode);
-}
-
-static void
-get_shell(void)
-{
- dTHX;
- if (!w32_perlshell_tokens) {
- /* we don't use COMSPEC here for two reasons:
- * 1. the same reason perl on UNIX doesn't use SHELL--rampant and
- * uncontrolled unportability of the ensuing scripts.
- * 2. PERL5SHELL could be set to a shell that may not be fit for
- * interactive use (which is what most programs look in COMSPEC
- * for).
- */
- const char* defaultshell = (IsWinNT()
- ? "cmd.exe /x/d/c" : "command.com /c");
- const char *usershell = PerlEnv_getenv("PERL5SHELL");
- w32_perlshell_items = tokenize(usershell ? usershell : defaultshell,
- &w32_perlshell_tokens,
- &w32_perlshell_vec);
- }
-}
-
-int
-Perl_do_aspawn(pTHX_ SV *really, SV **mark, SV **sp)
-{
- PERL_ARGS_ASSERT_DO_ASPAWN;
-
- Perl_croak(aTHX_ PL_no_func, "aspawn");
- return -1;
-}
-
-/* returns pointer to the next unquoted space or the end of the string */
-static char*
-find_next_space(const char *s)
-{
- bool in_quotes = FALSE;
- while (*s) {
- /* ignore doubled backslashes, or backslash+quote */
- if (*s == '\\' && (s[1] == '\\' || s[1] == '"')) {
- s += 2;
- }
- /* keep track of when we're within quotes */
- else if (*s == '"') {
- s++;
- in_quotes = !in_quotes;
- }
- /* break it up only at spaces that aren't in quotes */
- else if (!in_quotes && isSPACE(*s))
- return (char*)s;
- else
- s++;
- }
- return (char*)s;
-}
-
-#if 1
-static int
-do_spawn2(pTHX_ char *cmd, int exectype)
-{
- char **a;
- char *s;
- char **argv;
- int status = -1;
- BOOL needToTry = TRUE;
- char *cmd2;
-
- /* Save an extra exec if possible. See if there are shell
- * metacharacters in it */
- if (!has_shell_metachars(cmd)) {
- Newx(argv, strlen(cmd) / 2 + 2, char*);
- Newx(cmd2, strlen(cmd) + 1, char);
- strcpy(cmd2, cmd);
- a = argv;
- for (s = cmd2; *s;) {
- while (*s && isSPACE(*s))
- s++;
- if (*s)
- *(a++) = s;
- s = find_next_space(s);
- if (*s)
- *s++ = '\0';
- }
- *a = NULL;
- if (argv[0]) {
- switch (exectype) {
- case EXECF_SPAWN:
- status = win32_spawnvp(P_WAIT, argv[0],
- (const char* const*)argv);
- break;
- case EXECF_SPAWN_NOWAIT:
- status = win32_spawnvp(P_NOWAIT, argv[0],
- (const char* const*)argv);
- break;
- case EXECF_EXEC:
- status = win32_execvp(argv[0], (const char* const*)argv);
- break;
- }
- if (status != -1 || errno == 0)
- needToTry = FALSE;
- }
- Safefree(argv);
- Safefree(cmd2);
- }
- if (needToTry) {
- char **argv;
- int i = -1;
- get_shell();
- Newx(argv, w32_perlshell_items + 2, char*);
- while (++i < w32_perlshell_items)
- argv[i] = w32_perlshell_vec[i];
- argv[i++] = cmd;
- argv[i] = NULL;
- switch (exectype) {
- case EXECF_SPAWN:
- status = win32_spawnvp(P_WAIT, argv[0],
- (const char* const*)argv);
- break;
- case EXECF_SPAWN_NOWAIT:
- status = win32_spawnvp(P_NOWAIT, argv[0],
- (const char* const*)argv);
- break;
- case EXECF_EXEC:
- status = win32_execvp(argv[0], (const char* const*)argv);
- break;
- }
- cmd = argv[0];
- Safefree(argv);
- }
- if (exectype == EXECF_SPAWN_NOWAIT) {
- if (IsWin95())
- PL_statusvalue = -1; /* >16bits hint for pp_system() */
- }
- else {
- if (status < 0) {
- if (ckWARN(WARN_EXEC))
- Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't %s \"%s\": %s",
- (exectype == EXECF_EXEC ? "exec" : "spawn"),
- cmd, strerror(errno));
- status = 255 * 256;
- }
- else
- status *= 256;
- PL_statusvalue = status;
- }
- return (status);
-}
-
-int
-Perl_do_spawn(pTHX_ char *cmd)
-{
- PERL_ARGS_ASSERT_DO_SPAWN;
-
- return do_spawn2(aTHX_ cmd, EXECF_SPAWN);
-}
-
-int
-Perl_do_spawn_nowait(pTHX_ char *cmd)
-{
- PERL_ARGS_ASSERT_DO_SPAWN_NOWAIT;
-
- return do_spawn2(aTHX_ cmd, EXECF_SPAWN_NOWAIT);
-}
-
-bool
-Perl_do_exec(pTHX_ const char *cmd)
-{
- PERL_ARGS_ASSERT_DO_EXEC;
-
- do_spawn2(aTHX_ cmd, EXECF_EXEC);
- return FALSE;
-}
-
-/* The idea here is to read all the directory names into a string table
- * (separated by nulls) and when one of the other dir functions is called
- * return the pointer to the current file name.
- */
-DllExport DIR *
-win32_opendir(const char *filename)
-{
- dTHX;
- DIR *dirp;
- long len;
- long idx;
- char scanname[MAX_PATH+3];
- Stat_t sbuf;
- WIN32_FIND_DATAA aFindData;
- WIN32_FIND_DATAW wFindData;
- HANDLE fh;
- char buffer[MAX_PATH*2];
- WCHAR wbuffer[MAX_PATH+1];
- char* ptr;
-
- len = strlen(filename);
- if (len > MAX_PATH)
- return NULL;
-
- /* check to see if filename is a directory */
- if (win32_stat(filename, &sbuf) < 0 || !S_ISDIR(sbuf.st_mode))
- return NULL;
-
- /* Get us a DIR structure */
- Newxz(dirp, 1, DIR);
-
- /* Create the search pattern */
- strcpy(scanname, filename);
-
- /* bare drive name means look in cwd for drive */
- if (len == 2 && isALPHA(scanname[0]) && scanname[1] == ':') {
- scanname[len++] = '.';
- scanname[len++] = '/';
- }
- else if (scanname[len-1] != '/' && scanname[len-1] != '\\') {
- scanname[len++] = '/';
- }
- scanname[len++] = '*';
- scanname[len] = '\0';
-
- /* do the FindFirstFile call */
- fh = FindFirstFile(PerlDir_mapA(scanname), &aFindData);
- dirp->handle = fh;
- if (fh == INVALID_HANDLE_VALUE) {
- DWORD err = GetLastError();
- /* FindFirstFile() fails on empty drives! */
- switch (err) {
- case ERROR_FILE_NOT_FOUND:
- return dirp;
- case ERROR_NO_MORE_FILES:
- case ERROR_PATH_NOT_FOUND:
- errno = ENOENT;
- break;
- case ERROR_NOT_ENOUGH_MEMORY:
- errno = ENOMEM;
- break;
- default:
- errno = EINVAL;
- break;
- }
- Safefree(dirp);
- return NULL;
- }
-
- /* now allocate the first part of the string table for
- * the filenames that we find.
- */
- ptr = aFindData.cFileName;
- idx = strlen(ptr)+1;
- if (idx < 256)
- dirp->size = 128;
- else
- dirp->size = idx;
- Newx(dirp->start, dirp->size, char);
- strcpy(dirp->start, ptr);
- dirp->nfiles++;
- dirp->end = dirp->curr = dirp->start;
- dirp->end += idx;
- return dirp;
-}
-
-
-/* Readdir just returns the current string pointer and bumps the
- * string pointer to the nDllExport entry.
- */
-DllExport struct direct *
-win32_readdir(DIR *dirp)
-{
- long len;
-
- if (dirp->curr) {
- /* first set up the structure to return */
- len = strlen(dirp->curr);
- strcpy(dirp->dirstr.d_name, dirp->curr);
- dirp->dirstr.d_namlen = len;
-
- /* Fake an inode */
- dirp->dirstr.d_ino = dirp->curr - dirp->start;
-
- /* Now set up for the next call to readdir */
- dirp->curr += len + 1;
- if (dirp->curr >= dirp->end) {
- dTHX;
- char* ptr;
- BOOL res;
- WIN32_FIND_DATAW wFindData;
- WIN32_FIND_DATAA aFindData;
- char buffer[MAX_PATH*2];
-
- /* finding the next file that matches the wildcard
- * (which should be all of them in this directory!).
- */
- res = FindNextFile(dirp->handle, &aFindData);
- if (res)
- ptr = aFindData.cFileName;
- if (res) {
- long endpos = dirp->end - dirp->start;
- long newsize = endpos + strlen(ptr) + 1;
- /* bump the string table size by enough for the
- * new name and its null terminator */
- while (newsize > dirp->size) {
- long curpos = dirp->curr - dirp->start;
- Renew(dirp->start, dirp->size * 2, char);
- dirp->size *= 2;
- dirp->curr = dirp->start + curpos;
- }
- strcpy(dirp->start + endpos, ptr);
- dirp->end = dirp->start + newsize;
- dirp->nfiles++;
- }
- else
- dirp->curr = NULL;
- }
- return &(dirp->dirstr);
- }
- else
- return NULL;
-}
-
-/* Telldir returns the current string pointer position */
-DllExport long
-win32_telldir(DIR *dirp)
-{
- return (dirp->curr - dirp->start);
-}
-
-
-/* Seekdir moves the string pointer to a previously saved position
- * (returned by telldir).
- */
-DllExport void
-win32_seekdir(DIR *dirp, long loc)
-{
- dirp->curr = dirp->start + loc;
-}
-
-/* Rewinddir resets the string pointer to the start */
-DllExport void
-win32_rewinddir(DIR *dirp)
-{
- dirp->curr = dirp->start;
-}
-
-/* free the memory allocated by opendir */
-DllExport int
-win32_closedir(DIR *dirp)
-{
- dTHX;
- if (dirp->handle != INVALID_HANDLE_VALUE)
- FindClose(dirp->handle);
- Safefree(dirp->start);
- Safefree(dirp);
- return 1;
-}
-
-#else
-/////!!!!!!!!!!! return here and do right stuff!!!!
-
-DllExport DIR *
-win32_opendir(const char *filename)
-{
- return opendir(filename);
-}
-
-DllExport struct direct *
-win32_readdir(DIR *dirp)
-{
- return readdir(dirp);
-}
-
-DllExport long
-win32_telldir(DIR *dirp)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "telldir");
- return -1;
-}
-
-DllExport void
-win32_seekdir(DIR *dirp, long loc)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "seekdir");
-}
-
-DllExport void
-win32_rewinddir(DIR *dirp)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "rewinddir");
-}
-
-DllExport int
-win32_closedir(DIR *dirp)
-{
- closedir(dirp);
- return 0;
-}
-#endif // 1
-
-DllExport int
-win32_kill(int pid, int sig)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "kill");
- return -1;
-}
-
-DllExport int
-win32_stat(const char *path, struct stat *sbuf)
-{
- return xcestat(path, sbuf);
-}
-
-DllExport char *
-win32_longpath(char *path)
-{
- return path;
-}
-
-static void
-out_of_memory(void)
-{
- if (PL_curinterp) {
- dTHX;
- /* Can't use PerlIO to write as it allocates memory */
- PerlLIO_write(PerlIO_fileno(Perl_error_log),
- PL_no_mem, strlen(PL_no_mem));
- my_exit(1);
- }
- exit(1);
-}
-
-/* The win32_ansipath() function takes a Unicode filename and converts it
- * into the current Windows codepage. If some characters cannot be mapped,
- * then it will convert the short name instead.
- *
- * The buffer to the ansi pathname must be freed with win32_free() when it
- * it no longer needed.
- *
- * The argument to win32_ansipath() must exist before this function is
- * called; otherwise there is no way to determine the short path name.
- *
- * Ideas for future refinement:
- * - Only convert those segments of the path that are not in the current
- * codepage, but leave the other segments in their long form.
- * - If the resulting name is longer than MAX_PATH, start converting
- * additional path segments into short names until the full name
- * is shorter than MAX_PATH. Shorten the filename part last!
- */
-DllExport char *
-win32_ansipath(const WCHAR *widename)
-{
- char *name;
- size_t widelen = wcslen(widename)+1;
- int len = WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, widename, widelen,
- NULL, 0, NULL, NULL);
- name = win32_malloc(len);
- if (!name)
- out_of_memory();
-
- WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, widename, widelen,
- name, len, NULL, NULL);
- return name;
-}
-
-DllExport char *
-win32_getenv(const char *name)
-{
- return xcegetenv(name);
-}
-
-DllExport int
-win32_putenv(const char *name)
-{
- return xceputenv(name);
-}
-
-static long
-filetime_to_clock(PFILETIME ft)
-{
- __int64 qw = ft->dwHighDateTime;
- qw <<= 32;
- qw |= ft->dwLowDateTime;
- qw /= 10000; /* File time ticks at 0.1uS, clock at 1mS */
- return (long) qw;
-}
-
-/* fix utime() so it works on directories in NT */
-static BOOL
-filetime_from_time(PFILETIME pFileTime, time_t Time)
-{
- struct tm *pTM = localtime(&Time);
- SYSTEMTIME SystemTime;
- FILETIME LocalTime;
-
- if (pTM == NULL)
- return FALSE;
-
- SystemTime.wYear = pTM->tm_year + 1900;
- SystemTime.wMonth = pTM->tm_mon + 1;
- SystemTime.wDay = pTM->tm_mday;
- SystemTime.wHour = pTM->tm_hour;
- SystemTime.wMinute = pTM->tm_min;
- SystemTime.wSecond = pTM->tm_sec;
- SystemTime.wMilliseconds = 0;
-
- return SystemTimeToFileTime(&SystemTime, &LocalTime) &&
- LocalFileTimeToFileTime(&LocalTime, pFileTime);
-}
-
-DllExport int
-win32_unlink(const char *filename)
-{
- return xceunlink(filename);
-}
-
-DllExport int
-win32_utime(const char *filename, struct utimbuf *times)
-{
- return xceutime(filename, (struct _utimbuf *) times);
-}
-
-DllExport int
-win32_gettimeofday(struct timeval *tp, void *not_used)
-{
- return xcegettimeofday(tp,not_used);
-}
-
-DllExport int
-win32_uname(struct utsname *name)
-{
- struct hostent *hep;
- STRLEN nodemax = sizeof(name->nodename)-1;
- OSVERSIONINFOA osver;
-
- memset(&osver, 0, sizeof(OSVERSIONINFOA));
- osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
- if (XCEGetVersionExA(&osver)) {
- /* sysname */
- switch (osver.dwPlatformId) {
- case VER_PLATFORM_WIN32_CE:
- strcpy(name->sysname, "Windows CE");
- break;
- case VER_PLATFORM_WIN32_WINDOWS:
- strcpy(name->sysname, "Windows");
- break;
- case VER_PLATFORM_WIN32_NT:
- strcpy(name->sysname, "Windows NT");
- break;
- case VER_PLATFORM_WIN32s:
- strcpy(name->sysname, "Win32s");
- break;
- default:
- strcpy(name->sysname, "Win32 Unknown");
- break;
- }
-
- /* release */
- sprintf(name->release, "%d.%d",
- osver.dwMajorVersion, osver.dwMinorVersion);
-
- /* version */
- sprintf(name->version, "Build %d",
- osver.dwPlatformId == VER_PLATFORM_WIN32_NT
- ? osver.dwBuildNumber : (osver.dwBuildNumber & 0xffff));
- if (osver.szCSDVersion[0]) {
- char *buf = name->version + strlen(name->version);
- sprintf(buf, " (%s)", osver.szCSDVersion);
- }
- }
- else {
- *name->sysname = '\0';
- *name->version = '\0';
- *name->release = '\0';
- }
-
- /* nodename */
- hep = win32_gethostbyname("localhost");
- if (hep) {
- STRLEN len = strlen(hep->h_name);
- if (len <= nodemax) {
- strcpy(name->nodename, hep->h_name);
- }
- else {
- strncpy(name->nodename, hep->h_name, nodemax);
- name->nodename[nodemax] = '\0';
- }
- }
- else {
- DWORD sz = nodemax;
- if (!XCEGetComputerNameA(name->nodename, &sz))
- *name->nodename = '\0';
- }
-
- /* machine (architecture) */
- {
- SYSTEM_INFO info;
- char *arch;
- GetSystemInfo(&info);
-
- switch (info.wProcessorArchitecture) {
- case PROCESSOR_ARCHITECTURE_INTEL:
- arch = "x86"; break;
- case PROCESSOR_ARCHITECTURE_MIPS:
- arch = "mips"; break;
- case PROCESSOR_ARCHITECTURE_ALPHA:
- arch = "alpha"; break;
- case PROCESSOR_ARCHITECTURE_PPC:
- arch = "ppc"; break;
- case PROCESSOR_ARCHITECTURE_ARM:
- arch = "arm"; break;
- case PROCESSOR_HITACHI_SH3:
- arch = "sh3"; break;
- case PROCESSOR_SHx_SH3:
- arch = "sh3"; break;
-
- default:
- arch = "unknown"; break;
- }
- strcpy(name->machine, arch);
- }
- return 0;
-}
-
-/* Timing related stuff */
-
-int
-do_raise(pTHX_ int sig)
-{
- if (sig < SIG_SIZE) {
- Sighandler_t handler = w32_sighandler[sig];
- if (handler == SIG_IGN) {
- return 0;
- }
- else if (handler != SIG_DFL) {
- (*handler)(sig);
- return 0;
- }
- else {
- /* Choose correct default behaviour */
- switch (sig) {
-#ifdef SIGCLD
- case SIGCLD:
-#endif
-#ifdef SIGCHLD
- case SIGCHLD:
-#endif
- case 0:
- return 0;
- case SIGTERM:
- default:
- break;
- }
- }
- }
- /* Tell caller to exit thread/process as appropriate */
- return 1;
-}
-
-void
-sig_terminate(pTHX_ int sig)
-{
- Perl_warn(aTHX_ "Terminating on signal SIG%s(%d)\n",PL_sig_name[sig], sig);
- /* exit() seems to be safe, my_exit() or die() is a problem in ^C
- thread
- */
- exit(sig);
-}
-
-DllExport int
-win32_async_check(pTHX)
-{
- MSG msg;
- int ours = 1;
- /* Passing PeekMessage -1 as HWND (2nd arg) only get PostThreadMessage() messages
- * and ignores window messages - should co-exist better with windows apps e.g. Tk
- */
- while (PeekMessage(&msg, (HWND)-1, 0, 0, PM_REMOVE|PM_NOYIELD)) {
- int sig;
- switch(msg.message) {
-
-#if 0
- /* Perhaps some other messages could map to signals ? ... */
- case WM_CLOSE:
- case WM_QUIT:
- /* Treat WM_QUIT like SIGHUP? */
- sig = SIGHUP;
- goto Raise;
- break;
-#endif
-
- /* We use WM_USER to fake kill() with other signals */
- case WM_USER: {
- sig = msg.wParam;
- Raise:
- if (do_raise(aTHX_ sig)) {
- sig_terminate(aTHX_ sig);
- }
- break;
- }
-
- case WM_TIMER: {
- /* alarm() is a one-shot but SetTimer() repeats so kill it */
- if (w32_timerid) {
- KillTimer(NULL,w32_timerid);
- w32_timerid=0;
- }
- /* Now fake a call to signal handler */
- if (do_raise(aTHX_ 14)) {
- sig_terminate(aTHX_ 14);
- }
- break;
- }
-
- /* Otherwise do normal Win32 thing - in case it is useful */
- default:
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- ours = 0;
- break;
- }
- }
- w32_poll_count = 0;
-
- /* Above or other stuff may have set a signal flag */
- if (PL_sig_pending) {
- despatch_signals();
- }
- return ours;
-}
-
-/* This function will not return until the timeout has elapsed, or until
- * one of the handles is ready. */
-DllExport DWORD
-win32_msgwait(pTHX_ DWORD count, LPHANDLE handles, DWORD timeout, LPDWORD resultp)
-{
- /* We may need several goes at this - so compute when we stop */
- DWORD ticks = 0;
- if (timeout != INFINITE) {
- ticks = GetTickCount();
- timeout += ticks;
- }
- while (1) {
- DWORD result = MsgWaitForMultipleObjects(count,handles,FALSE,timeout-ticks, QS_ALLEVENTS);
- if (resultp)
- *resultp = result;
- if (result == WAIT_TIMEOUT) {
- /* Ran out of time - explicit return of zero to avoid -ve if we
- have scheduling issues
- */
- return 0;
- }
- if (timeout != INFINITE) {
- ticks = GetTickCount();
- }
- if (result == WAIT_OBJECT_0 + count) {
- /* Message has arrived - check it */
- (void)win32_async_check(aTHX);
- }
- else {
- /* Not timeout or message - one of handles is ready */
- break;
- }
- }
- /* compute time left to wait */
- ticks = timeout - ticks;
- /* If we are past the end say zero */
- return (ticks > 0) ? ticks : 0;
-}
-
-static UINT timerid = 0;
-
-static VOID CALLBACK TimerProc(HWND win, UINT msg, UINT id, DWORD time)
-{
- dTHX;
- KillTimer(NULL,timerid);
- timerid=0;
- sighandler(14);
-}
-
-DllExport unsigned int
-win32_sleep(unsigned int t)
-{
- return xcesleep(t);
-}
-
-DllExport unsigned int
-win32_alarm(unsigned int sec)
-{
- /*
- * the 'obvious' implentation is SetTimer() with a callback
- * which does whatever receiving SIGALRM would do
- * we cannot use SIGALRM even via raise() as it is not
- * one of the supported codes in <signal.h>
- *
- * Snag is unless something is looking at the message queue
- * nothing happens :-(
- */
- dTHX;
- if (sec)
- {
- timerid = SetTimer(NULL,timerid,sec*1000,(TIMERPROC)TimerProc);
- if (!timerid)
- Perl_croak_nocontext("Cannot set timer");
- }
- else
- {
- if (timerid)
- {
- KillTimer(NULL,timerid);
- timerid=0;
- }
- }
- return 0;
-}
-
-#ifdef HAVE_DES_FCRYPT
-extern char * des_fcrypt(const char *txt, const char *salt, char *cbuf);
-#endif
-
-DllExport char *
-win32_crypt(const char *txt, const char *salt)
-{
- dTHX;
-#ifdef HAVE_DES_FCRYPT
- dTHR;
- return des_fcrypt(txt, salt, w32_crypt_buffer);
-#else
- Perl_croak(aTHX_ "The crypt() function is unimplemented due to excessive paranoia.");
- return NULL;
-#endif
-}
-
-
-/*
- * redirected io subsystem for all XS modules
- *
- */
-
-DllExport int *
-win32_errno(void)
-{
- return (&errno);
-}
-
-DllExport char ***
-win32_environ(void)
-{
- return (&(environ));
-}
-
-/* the rest are the remapped stdio routines */
-DllExport FILE *
-win32_stderr(void)
-{
- return (stderr);
-}
-
-char *g_getlogin() {
- return "no-getlogin";
-}
-
-DllExport FILE *
-win32_stdin(void)
-{
- return (stdin);
-}
-
-DllExport FILE *
-win32_stdout()
-{
- return (stdout);
-}
-
-DllExport int
-win32_ferror(FILE *fp)
-{
- return (ferror(fp));
-}
-
-
-DllExport int
-win32_feof(FILE *fp)
-{
- return (feof(fp));
-}
-
-/*
- * Since the errors returned by the socket error function
- * WSAGetLastError() are not known by the library routine strerror
- * we have to roll our own.
- */
-
-DllExport char *
-win32_strerror(int e)
-{
- return xcestrerror(e);
-}
-
-DllExport void
-win32_str_os_error(void *sv, DWORD dwErr)
-{
- dTHX;
-
- sv_setpvs((SV*)sv, "Error");
-}
-
-
-DllExport int
-win32_fprintf(FILE *fp, const char *format, ...)
-{
- va_list marker;
- va_start(marker, format); /* Initialize variable arguments. */
-
- return (vfprintf(fp, format, marker));
-}
-
-DllExport int
-win32_printf(const char *format, ...)
-{
- va_list marker;
- va_start(marker, format); /* Initialize variable arguments. */
-
- return (vprintf(format, marker));
-}
-
-DllExport int
-win32_vfprintf(FILE *fp, const char *format, va_list args)
-{
- return (vfprintf(fp, format, args));
-}
-
-DllExport int
-win32_vprintf(const char *format, va_list args)
-{
- return (vprintf(format, args));
-}
-
-DllExport size_t
-win32_fread(void *buf, size_t size, size_t count, FILE *fp)
-{
- return fread(buf, size, count, fp);
-}
-
-DllExport size_t
-win32_fwrite(const void *buf, size_t size, size_t count, FILE *fp)
-{
- return fwrite(buf, size, count, fp);
-}
-
-DllExport FILE *
-win32_fopen(const char *filename, const char *mode)
-{
- return xcefopen(filename, mode);
-}
-
-DllExport FILE *
-win32_fdopen(int handle, const char *mode)
-{
- return palm_fdopen(handle, mode);
-}
-
-DllExport FILE *
-win32_freopen(const char *path, const char *mode, FILE *stream)
-{
- return xcefreopen(path, mode, stream);
-}
-
-DllExport int
-win32_fclose(FILE *pf)
-{
- return xcefclose(pf);
-}
-
-DllExport int
-win32_fputs(const char *s,FILE *pf)
-{
- return fputs(s, pf);
-}
-
-DllExport int
-win32_fputc(int c,FILE *pf)
-{
- return fputc(c,pf);
-}
-
-DllExport int
-win32_ungetc(int c,FILE *pf)
-{
- return ungetc(c,pf);
-}
-
-DllExport int
-win32_getc(FILE *pf)
-{
- return getc(pf);
-}
-
-DllExport int
-win32_fileno(FILE *pf)
-{
- return palm_fileno(pf);
-}
-
-DllExport void
-win32_clearerr(FILE *pf)
-{
- clearerr(pf);
- return;
-}
-
-DllExport int
-win32_fflush(FILE *pf)
-{
- return fflush(pf);
-}
-
-DllExport long
-win32_ftell(FILE *pf)
-{
- return ftell(pf);
-}
-
-DllExport int
-win32_fseek(FILE *pf, Off_t offset,int origin)
-{
- return fseek(pf, offset, origin);
-}
-
-/* fpos_t seems to be int64 on hpc pro! Really stupid. */
-/* But maybe someday there will be such large disks in a hpc... */
-DllExport int
-win32_fgetpos(FILE *pf, fpos_t *p)
-{
- return fgetpos(pf, p);
-}
-
-DllExport int
-win32_fsetpos(FILE *pf, const fpos_t *p)
-{
- return fsetpos(pf, p);
-}
-
-DllExport void
-win32_rewind(FILE *pf)
-{
- fseek(pf, 0, SEEK_SET);
- return;
-}
-
-DllExport int
-win32_tmpfd(void)
-{
- dTHX;
- char prefix[MAX_PATH+1];
- char filename[MAX_PATH+1];
- DWORD len = GetTempPath(MAX_PATH, prefix);
- if (len && len < MAX_PATH) {
- if (GetTempFileName(prefix, "plx", 0, filename)) {
- HANDLE fh = CreateFile(filename,
- DELETE | GENERIC_READ | GENERIC_WRITE,
- 0,
- NULL,
- CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL
- | FILE_FLAG_DELETE_ON_CLOSE,
- NULL);
- if (fh != INVALID_HANDLE_VALUE) {
- int fd = win32_open_osfhandle((intptr_t)fh, 0);
- if (fd >= 0) {
- DEBUG_p(PerlIO_printf(Perl_debug_log,
- "Created tmpfile=%s\n",filename));
- return fd;
- }
- }
- }
- }
- return -1;
-}
-
-DllExport FILE*
-win32_tmpfile(void)
-{
- int fd = win32_tmpfd();
- if (fd >= 0)
- return win32_fdopen(fd, "w+b");
- return NULL;
-}
-
-DllExport void
-win32_abort(void)
-{
- xceabort();
-
- return;
-}
-
-DllExport int
-win32_fstat(int fd, struct stat *sbufptr)
-{
- return xcefstat(fd, sbufptr);
-}
-
-DllExport int
-win32_link(const char *oldname, const char *newname)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "link");
-
- return -1;
-}
-
-DllExport int
-win32_rename(const char *oname, const char *newname)
-{
- return xcerename(oname, newname);
-}
-
-DllExport int
-win32_setmode(int fd, int mode)
-{
- /* currently 'celib' seem to have this function in src, but not
- * exported. When it will be, we'll uncomment following line.
- */
- /* return xcesetmode(fd, mode); */
- return 0;
-}
-
-DllExport int
-win32_chsize(int fd, Off_t size)
-{
- return chsize(fd, size);
-}
-
-DllExport long
-win32_lseek(int fd, Off_t offset, int origin)
-{
- return xcelseek(fd, offset, origin);
-}
-
-DllExport long
-win32_tell(int fd)
-{
- return xcelseek(fd, 0, SEEK_CUR);
-}
-
-DllExport int
-win32_open(const char *path, int flag, ...)
-{
- int pmode;
- va_list ap;
-
- va_start(ap, flag);
- pmode = va_arg(ap, int);
- va_end(ap);
-
- return xceopen(path, flag, pmode);
-}
-
-DllExport int
-win32_close(int fd)
-{
- return xceclose(fd);
-}
-
-DllExport int
-win32_eof(int fd)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "eof");
- return -1;
-}
-
-DllExport int
-win32_dup(int fd)
-{
- return xcedup(fd); /* from celib/ceio.c; requires some more work on it */
-}
-
-DllExport int
-win32_dup2(int fd1,int fd2)
-{
- return xcedup2(fd1,fd2);
-}
-
-DllExport int
-win32_read(int fd, void *buf, unsigned int cnt)
-{
- return xceread(fd, buf, cnt);
-}
-
-DllExport int
-win32_write(int fd, const void *buf, unsigned int cnt)
-{
- return xcewrite(fd, (void *) buf, cnt);
-}
-
-DllExport int
-win32_mkdir(const char *dir, int mode)
-{
- return xcemkdir(dir);
-}
-
-DllExport int
-win32_rmdir(const char *dir)
-{
- return xcermdir(dir);
-}
-
-DllExport int
-win32_chdir(const char *dir)
-{
- return xcechdir(dir);
-}
-
-DllExport int
-win32_access(const char *path, int mode)
-{
- return xceaccess(path, mode);
-}
-
-DllExport int
-win32_chmod(const char *path, int mode)
-{
- return xcechmod(path, mode);
-}
-
-static char *
-create_command_line(char *cname, STRLEN clen, const char * const *args)
-{
- dTHX;
- int index, argc;
- char *cmd, *ptr;
- const char *arg;
- STRLEN len = 0;
- bool bat_file = FALSE;
- bool cmd_shell = FALSE;
- bool dumb_shell = FALSE;
- bool extra_quotes = FALSE;
- bool quote_next = FALSE;
-
- if (!cname)
- cname = (char*)args[0];
-
- /* The NT cmd.exe shell has the following peculiarity that needs to be
- * worked around. It strips a leading and trailing dquote when any
- * of the following is true:
- * 1. the /S switch was used
- * 2. there are more than two dquotes
- * 3. there is a special character from this set: &<>()@^|
- * 4. no whitespace characters within the two dquotes
- * 5. string between two dquotes isn't an executable file
- * To work around this, we always add a leading and trailing dquote
- * to the string, if the first argument is either "cmd.exe" or "cmd",
- * and there were at least two or more arguments passed to cmd.exe
- * (not including switches).
- * XXX the above rules (from "cmd /?") don't seem to be applied
- * always, making for the convolutions below :-(
- */
- if (cname) {
- if (!clen)
- clen = strlen(cname);
-
- if (clen > 4
- && (stricmp(&cname[clen-4], ".bat") == 0
- || (IsWinNT() && stricmp(&cname[clen-4], ".cmd") == 0)))
- {
- bat_file = TRUE;
- len += 3;
- }
- else {
- char *exe = strrchr(cname, '/');
- char *exe2 = strrchr(cname, '\\');
- if (exe2 > exe)
- exe = exe2;
- if (exe)
- ++exe;
- else
- exe = cname;
- if (stricmp(exe, "cmd.exe") == 0 || stricmp(exe, "cmd") == 0) {
- cmd_shell = TRUE;
- len += 3;
- }
- else if (stricmp(exe, "command.com") == 0
- || stricmp(exe, "command") == 0)
- {
- dumb_shell = TRUE;
- }
- }
- }
-
- DEBUG_p(PerlIO_printf(Perl_debug_log, "Args "));
- for (index = 0; (arg = (char*)args[index]) != NULL; ++index) {
- STRLEN curlen = strlen(arg);
- if (!(arg[0] == '"' && arg[curlen-1] == '"'))
- len += 2; /* assume quoting needed (worst case) */
- len += curlen + 1;
- DEBUG_p(PerlIO_printf(Perl_debug_log, "[%s]",arg));
- }
- DEBUG_p(PerlIO_printf(Perl_debug_log, "\n"));
-
- argc = index;
- Newx(cmd, len, char);
- ptr = cmd;
-
- if (bat_file) {
- *ptr++ = '"';
- extra_quotes = TRUE;
- }
-
- for (index = 0; (arg = (char*)args[index]) != NULL; ++index) {
- bool do_quote = 0;
- STRLEN curlen = strlen(arg);
-
- /* we want to protect empty arguments and ones with spaces with
- * dquotes, but only if they aren't already there */
- if (!dumb_shell) {
- if (!curlen) {
- do_quote = 1;
- }
- else if (quote_next) {
- /* see if it really is multiple arguments pretending to
- * be one and force a set of quotes around it */
- if (*find_next_space(arg))
- do_quote = 1;
- }
- else if (!(arg[0] == '"' && curlen > 1 && arg[curlen-1] == '"')) {
- STRLEN i = 0;
- while (i < curlen) {
- if (isSPACE(arg[i])) {
- do_quote = 1;
- }
- else if (arg[i] == '"') {
- do_quote = 0;
- break;
- }
- i++;
- }
- }
- }
-
- if (do_quote)
- *ptr++ = '"';
-
- strcpy(ptr, arg);
- ptr += curlen;
-
- if (do_quote)
- *ptr++ = '"';
-
- if (args[index+1])
- *ptr++ = ' ';
-
- if (!extra_quotes
- && cmd_shell
- && curlen >= 2
- && *arg == '/' /* see if arg is "/c", "/x/c", "/x/d/c" etc. */
- && stricmp(arg+curlen-2, "/c") == 0)
- {
- /* is there a next argument? */
- if (args[index+1]) {
- /* are there two or more next arguments? */
- if (args[index+2]) {
- *ptr++ = '"';
- extra_quotes = TRUE;
- }
- else {
- /* single argument, force quoting if it has spaces */
- quote_next = TRUE;
- }
- }
- }
- }
-
- if (extra_quotes)
- *ptr++ = '"';
-
- *ptr = '\0';
-
- return cmd;
-}
-
-static char *
-qualified_path(const char *cmd)
-{
- dTHX;
- char *pathstr;
- char *fullcmd, *curfullcmd;
- STRLEN cmdlen = 0;
- int has_slash = 0;
-
- if (!cmd)
- return NULL;
- fullcmd = (char*)cmd;
- while (*fullcmd) {
- if (*fullcmd == '/' || *fullcmd == '\\')
- has_slash++;
- fullcmd++;
- cmdlen++;
- }
-
- /* look in PATH */
- pathstr = PerlEnv_getenv("PATH");
- Newx(fullcmd, MAX_PATH+1, char);
- curfullcmd = fullcmd;
-
- while (1) {
- DWORD res;
-
- /* start by appending the name to the current prefix */
- strcpy(curfullcmd, cmd);
- curfullcmd += cmdlen;
-
- /* if it doesn't end with '.', or has no extension, try adding
- * a trailing .exe first */
- if (cmd[cmdlen-1] != '.'
- && (cmdlen < 4 || cmd[cmdlen-4] != '.'))
- {
- strcpy(curfullcmd, ".exe");
- res = GetFileAttributes(fullcmd);
- if (res != 0xFFFFFFFF && !(res & FILE_ATTRIBUTE_DIRECTORY))
- return fullcmd;
- *curfullcmd = '\0';
- }
-
- /* that failed, try the bare name */
- res = GetFileAttributes(fullcmd);
- if (res != 0xFFFFFFFF && !(res & FILE_ATTRIBUTE_DIRECTORY))
- return fullcmd;
-
- /* quit if no other path exists, or if cmd already has path */
- if (!pathstr || !*pathstr || has_slash)
- break;
-
- /* skip leading semis */
- while (*pathstr == ';')
- pathstr++;
-
- /* build a new prefix from scratch */
- curfullcmd = fullcmd;
- while (*pathstr && *pathstr != ';') {
- if (*pathstr == '"') { /* foo;"baz;etc";bar */
- pathstr++; /* skip initial '"' */
- while (*pathstr && *pathstr != '"') {
- if ((STRLEN)(curfullcmd-fullcmd) < MAX_PATH-cmdlen-5)
- *curfullcmd++ = *pathstr;
- pathstr++;
- }
- if (*pathstr)
- pathstr++; /* skip trailing '"' */
- }
- else {
- if ((STRLEN)(curfullcmd-fullcmd) < MAX_PATH-cmdlen-5)
- *curfullcmd++ = *pathstr;
- pathstr++;
- }
- }
- if (*pathstr)
- pathstr++; /* skip trailing semi */
- if (curfullcmd > fullcmd /* append a dir separator */
- && curfullcmd[-1] != '/' && curfullcmd[-1] != '\\')
- {
- *curfullcmd++ = '\\';
- }
- }
-
- Safefree(fullcmd);
- return NULL;
-}
-
-/* The following are just place holders.
- * Some hosts may provide and environment that the OS is
- * not tracking, therefore, these host must provide that
- * environment and the current directory to CreateProcess
- */
-
-DllExport void*
-win32_get_childenv(void)
-{
- return NULL;
-}
-
-DllExport void
-win32_free_childenv(void* d)
-{
-}
-
-DllExport void
-win32_clearenv(void)
-{
- char *envv = GetEnvironmentStrings();
- char *cur = envv;
- STRLEN len;
- while (*cur) {
- char *end = strchr(cur,'=');
- if (end && end != cur) {
- *end = '\0';
- xcesetenv(cur, "", 0);
- *end = '=';
- cur = end + strlen(end+1)+2;
- }
- else if ((len = strlen(cur)))
- cur += len+1;
- }
- FreeEnvironmentStrings(envv);
-}
-
-DllExport char*
-win32_get_childdir(void)
-{
- dTHX;
- char* ptr;
- char szfilename[MAX_PATH+1];
- GetCurrentDirectoryA(MAX_PATH+1, szfilename);
-
- Newx(ptr, strlen(szfilename)+1, char);
- strcpy(ptr, szfilename);
- return ptr;
-}
-
-DllExport void
-win32_free_childdir(char* d)
-{
- dTHX;
- Safefree(d);
-}
-
-/* XXX this needs to be made more compatible with the spawnvp()
- * provided by the various RTLs. In particular, searching for
- * *.{com,bat,cmd} files (as done by the RTLs) is unimplemented.
- * This doesn't significantly affect perl itself, because we
- * always invoke things using PERL5SHELL if a direct attempt to
- * spawn the executable fails.
- *
- * XXX splitting and rejoining the commandline between do_aspawn()
- * and win32_spawnvp() could also be avoided.
- */
-
-DllExport int
-win32_spawnvp(int mode, const char *cmdname, const char *const *argv)
-{
-#ifdef USE_RTL_SPAWNVP
- return spawnvp(mode, cmdname, (char * const *)argv);
-#else
- dTHX;
- int ret;
- void* env;
- char* dir;
- child_IO_table tbl;
- STARTUPINFO StartupInfo;
- PROCESS_INFORMATION ProcessInformation;
- DWORD create = 0;
- char *cmd;
- char *fullcmd = NULL;
- char *cname = (char *)cmdname;
- STRLEN clen = 0;
-
- if (cname) {
- clen = strlen(cname);
- /* if command name contains dquotes, must remove them */
- if (strchr(cname, '"')) {
- cmd = cname;
- Newx(cname,clen+1,char);
- clen = 0;
- while (*cmd) {
- if (*cmd != '"') {
- cname[clen] = *cmd;
- ++clen;
- }
- ++cmd;
- }
- cname[clen] = '\0';
- }
- }
-
- cmd = create_command_line(cname, clen, argv);
-
- env = PerlEnv_get_childenv();
- dir = PerlEnv_get_childdir();
-
- switch(mode) {
- case P_NOWAIT: /* asynch + remember result */
- if (w32_num_children >= MAXIMUM_WAIT_OBJECTS) {
- errno = EAGAIN;
- ret = -1;
- goto RETVAL;
- }
- /* Create a new process group so we can use GenerateConsoleCtrlEvent()
- * in win32_kill()
- */
- /* not supported on CE create |= CREATE_NEW_PROCESS_GROUP; */
- /* FALL THROUGH */
-
- case P_WAIT: /* synchronous execution */
- break;
- default: /* invalid mode */
- errno = EINVAL;
- ret = -1;
- goto RETVAL;
- }
- memset(&StartupInfo,0,sizeof(StartupInfo));
- StartupInfo.cb = sizeof(StartupInfo);
- memset(&tbl,0,sizeof(tbl));
- PerlEnv_get_child_IO(&tbl);
- StartupInfo.dwFlags = tbl.dwFlags;
- StartupInfo.dwX = tbl.dwX;
- StartupInfo.dwY = tbl.dwY;
- StartupInfo.dwXSize = tbl.dwXSize;
- StartupInfo.dwYSize = tbl.dwYSize;
- StartupInfo.dwXCountChars = tbl.dwXCountChars;
- StartupInfo.dwYCountChars = tbl.dwYCountChars;
- StartupInfo.dwFillAttribute = tbl.dwFillAttribute;
- StartupInfo.wShowWindow = tbl.wShowWindow;
- StartupInfo.hStdInput = tbl.childStdIn;
- StartupInfo.hStdOutput = tbl.childStdOut;
- StartupInfo.hStdError = tbl.childStdErr;
- if (StartupInfo.hStdInput == INVALID_HANDLE_VALUE &&
- StartupInfo.hStdOutput == INVALID_HANDLE_VALUE &&
- StartupInfo.hStdError == INVALID_HANDLE_VALUE)
- {
- create |= CREATE_NEW_CONSOLE;
- }
- else {
- StartupInfo.dwFlags |= STARTF_USESTDHANDLES;
- }
- if (w32_use_showwindow) {
- StartupInfo.dwFlags |= STARTF_USESHOWWINDOW;
- StartupInfo.wShowWindow = w32_showwindow;
- }
-
- DEBUG_p(PerlIO_printf(Perl_debug_log, "Spawning [%s] with [%s]\n",
- cname,cmd));
-RETRY:
- if (!CreateProcess(cname, /* search PATH to find executable */
- cmd, /* executable, and its arguments */
- NULL, /* process attributes */
- NULL, /* thread attributes */
- TRUE, /* inherit handles */
- create, /* creation flags */
- (LPVOID)env, /* inherit environment */
- dir, /* inherit cwd */
- &StartupInfo,
- &ProcessInformation))
- {
- /* initial NULL argument to CreateProcess() does a PATH
- * search, but it always first looks in the directory
- * where the current process was started, which behavior
- * is undesirable for backward compatibility. So we
- * jump through our own hoops by picking out the path
- * we really want it to use. */
- if (!fullcmd) {
- fullcmd = qualified_path(cname);
- if (fullcmd) {
- if (cname != cmdname)
- Safefree(cname);
- cname = fullcmd;
- DEBUG_p(PerlIO_printf(Perl_debug_log,
- "Retrying [%s] with same args\n",
- cname));
- goto RETRY;
- }
- }
- errno = ENOENT;
- ret = -1;
- goto RETVAL;
- }
-
- if (mode == P_NOWAIT) {
- /* asynchronous spawn -- store handle, return PID */
- ret = (int)ProcessInformation.dwProcessId;
- if (IsWin95() && ret < 0)
- ret = -ret;
-
- w32_child_handles[w32_num_children] = ProcessInformation.hProcess;
- w32_child_pids[w32_num_children] = (DWORD)ret;
- ++w32_num_children;
- }
- else {
- DWORD status;
- win32_msgwait(aTHX_ 1, &ProcessInformation.hProcess, INFINITE, NULL);
- /* FIXME: if msgwait returned due to message perhaps forward the
- "signal" to the process
- */
- GetExitCodeProcess(ProcessInformation.hProcess, &status);
- ret = (int)status;
- CloseHandle(ProcessInformation.hProcess);
- }
-
- CloseHandle(ProcessInformation.hThread);
-
-RETVAL:
- PerlEnv_free_childenv(env);
- PerlEnv_free_childdir(dir);
- Safefree(cmd);
- if (cname != cmdname)
- Safefree(cname);
- return ret;
-#endif
-}
-
-DllExport int
-win32_execv(const char *cmdname, const char *const *argv)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "execv");
- return -1;
-}
-
-DllExport int
-win32_execvp(const char *cmdname, const char *const *argv)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "execvp");
- return -1;
-}
-
-DllExport void
-win32_perror(const char *str)
-{
- xceperror(str);
-}
-
-DllExport void
-win32_setbuf(FILE *pf, char *buf)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "setbuf");
-}
-
-DllExport int
-win32_setvbuf(FILE *pf, char *buf, int type, size_t size)
-{
- return setvbuf(pf, buf, type, size);
-}
-
-DllExport int
-win32_flushall(void)
-{
- return flushall();
-}
-
-DllExport int
-win32_fcloseall(void)
-{
- return fcloseall();
-}
-
-DllExport char*
-win32_fgets(char *s, int n, FILE *pf)
-{
- return fgets(s, n, pf);
-}
-
-DllExport char*
-win32_gets(char *s)
-{
- return gets(s);
-}
-
-DllExport int
-win32_fgetc(FILE *pf)
-{
- return fgetc(pf);
-}
-
-DllExport int
-win32_putc(int c, FILE *pf)
-{
- return putc(c,pf);
-}
-
-DllExport int
-win32_puts(const char *s)
-{
- return puts(s);
-}
-
-DllExport int
-win32_getchar(void)
-{
- return getchar();
-}
-
-DllExport int
-win32_putchar(int c)
-{
- return putchar(c);
-}
-
-#ifdef MYMALLOC
-
-#ifndef USE_PERL_SBRK
-
-static char *committed = NULL;
-static char *base = NULL;
-static char *reserved = NULL;
-static char *brk = NULL;
-static DWORD pagesize = 0;
-static DWORD allocsize = 0;
-
-void *
-sbrk(int need)
-{
- void *result;
- if (!pagesize)
- {SYSTEM_INFO info;
- GetSystemInfo(&info);
- /* Pretend page size is larger so we don't perpetually
- * call the OS to commit just one page ...
- */
- pagesize = info.dwPageSize << 3;
- allocsize = info.dwAllocationGranularity;
- }
- /* This scheme fails eventually if request for contiguous
- * block is denied so reserve big blocks - this is only
- * address space not memory ...
- */
- if (brk+need >= reserved)
- {
- DWORD size = 64*1024*1024;
- char *addr;
- if (committed && reserved && committed < reserved)
- {
- /* Commit last of previous chunk cannot span allocations */
- addr = (char *) VirtualAlloc(committed,reserved-committed,MEM_COMMIT,PAGE_READWRITE);
- if (addr)
- committed = reserved;
- }
- /* Reserve some (more) space
- * Note this is a little sneaky, 1st call passes NULL as reserved
- * so lets system choose where we start, subsequent calls pass
- * the old end address so ask for a contiguous block
- */
- addr = (char *) VirtualAlloc(reserved,size,MEM_RESERVE,PAGE_NOACCESS);
- if (addr)
- {
- reserved = addr+size;
- if (!base)
- base = addr;
- if (!committed)
- committed = base;
- if (!brk)
- brk = committed;
- }
- else
- {
- return (void *) -1;
- }
- }
- result = brk;
- brk += need;
- if (brk > committed)
- {
- DWORD size = ((brk-committed + pagesize -1)/pagesize) * pagesize;
- char *addr = (char *) VirtualAlloc(committed,size,MEM_COMMIT,PAGE_READWRITE);
- if (addr)
- {
- committed += size;
- }
- else
- return (void *) -1;
- }
- return result;
-}
-
-#endif
-#endif
-
-DllExport void*
-win32_malloc(size_t size)
-{
- return malloc(size);
-}
-
-DllExport void*
-win32_calloc(size_t numitems, size_t size)
-{
- return calloc(numitems,size);
-}
-
-DllExport void*
-win32_realloc(void *block, size_t size)
-{
- return realloc(block,size);
-}
-
-DllExport void
-win32_free(void *block)
-{
- free(block);
-}
-
-int
-win32_open_osfhandle(intptr_t osfhandle, int flags)
-{
- int fh;
- char fileflags=0; /* _osfile flags */
-
- Perl_croak_nocontext("win32_open_osfhandle() TBD on this platform");
- return 0;
-}
-
-int
-win32_get_osfhandle(int fd)
-{
- int fh;
- char fileflags=0; /* _osfile flags */
-
- Perl_croak_nocontext("win32_get_osfhandle() TBD on this platform");
- return 0;
-}
-
-FILE *
-win32_fdupopen(FILE *pf)
-{
- FILE* pfdup;
- fpos_t pos;
- char mode[3];
- int fileno = win32_dup(win32_fileno(pf));
- int fmode = palm_fgetmode(pfdup);
-
- fprintf(stderr,"DEBUG for win32_fdupopen()\n");
-
- /* open the file in the same mode */
- if(fmode & O_RDONLY) {
- mode[0] = 'r';
- mode[1] = 0;
- }
- else if(fmode & O_APPEND) {
- mode[0] = 'a';
- mode[1] = 0;
- }
- else if(fmode & O_RDWR) {
- mode[0] = 'r';
- mode[1] = '+';
- mode[2] = 0;
- }
-
- /* it appears that the binmode is attached to the
- * file descriptor so binmode files will be handled
- * correctly
- */
- pfdup = win32_fdopen(fileno, mode);
-
- /* move the file pointer to the same position */
- if (!fgetpos(pf, &pos)) {
- fsetpos(pfdup, &pos);
- }
- return pfdup;
-}
-
-DllExport void*
-win32_dynaload(const char* filename)
-{
- dTHX;
- HMODULE hModule;
-
- hModule = XCELoadLibraryA(filename);
-
- return hModule;
-}
-
-/* this is needed by Cwd.pm... */
-
-static
-XS(w32_GetCwd)
-{
- dXSARGS;
- char buf[MAX_PATH];
- SV *sv = sv_newmortal();
-
- xcegetcwd(buf, sizeof(buf));
-
- sv_setpv(sv, xcestrdup(buf));
- EXTEND(SP,1);
- SvPOK_on(sv);
- ST(0) = sv;
- SvTAINTED_on(ST(0));
- XSRETURN(1);
-}
-
-static
-XS(w32_SetCwd)
-{
- dXSARGS;
-
- if (items != 1)
- Perl_croak(aTHX_ "usage: Win32::SetCwd($cwd)");
-
- if (!xcechdir(SvPV_nolen(ST(0))))
- XSRETURN_YES;
-
- XSRETURN_NO;
-}
-
-static
-XS(w32_GetTickCount)
-{
- dXSARGS;
- DWORD msec = GetTickCount();
- EXTEND(SP,1);
- if ((IV)msec > 0)
- XSRETURN_IV(msec);
- XSRETURN_NV(msec);
-}
-
-static
-XS(w32_GetOSVersion)
-{
- dXSARGS;
- OSVERSIONINFOA osver;
-
- osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
- if (!XCEGetVersionExA(&osver)) {
- XSRETURN_EMPTY;
- }
- mXPUSHp(osver.szCSDVersion, strlen(osver.szCSDVersion));
- mXPUSHi(osver.dwMajorVersion);
- mXPUSHi(osver.dwMinorVersion);
- mXPUSHi(osver.dwBuildNumber);
- /* WINCE = 3 */
- mXPUSHi(osver.dwPlatformId);
- PUTBACK;
-}
-
-static
-XS(w32_IsWinNT)
-{
- dXSARGS;
- EXTEND(SP,1);
- XSRETURN_IV(IsWinNT());
-}
-
-static
-XS(w32_IsWin95)
-{
- dXSARGS;
- EXTEND(SP,1);
- XSRETURN_IV(IsWin95());
-}
-
-static
-XS(w32_IsWinCE)
-{
- dXSARGS;
- EXTEND(SP,1);
- XSRETURN_IV(IsWinCE());
-}
-
-static
-XS(w32_GetOemInfo)
-{
- dXSARGS;
- wchar_t wbuf[126];
- char buf[126];
-
- if(SystemParametersInfoW(SPI_GETOEMINFO, sizeof(wbuf), wbuf, FALSE))
- WideCharToMultiByte(CP_ACP, 0, wbuf, -1, buf, sizeof(buf), 0, 0);
- else
- sprintf(buf, "SystemParametersInfo failed: %d", GetLastError());
-
- EXTEND(SP,1);
- XSRETURN_PV(buf);
-}
-
-static
-XS(w32_Sleep)
-{
- dXSARGS;
- if (items != 1)
- Perl_croak(aTHX_ "usage: Win32::Sleep($milliseconds)");
- Sleep(SvIV(ST(0)));
- XSRETURN_YES;
-}
-
-static
-XS(w32_CopyFile)
-{
- dXSARGS;
- BOOL bResult;
- if (items != 3)
- Perl_croak(aTHX_ "usage: Win32::CopyFile($from, $to, $overwrite)");
-
- {
- char szSourceFile[MAX_PATH+1];
- strcpy(szSourceFile, PerlDir_mapA(SvPV_nolen(ST(0))));
- bResult = XCECopyFileA(szSourceFile, SvPV_nolen(ST(1)),
- !SvTRUE(ST(2)));
- }
-
- if (bResult)
- XSRETURN_YES;
-
- XSRETURN_NO;
-}
-
-static
-XS(w32_MessageBox)
-{
- dXSARGS;
-
- char *txt;
- unsigned int res;
- unsigned int flags = MB_OK;
-
- txt = SvPV_nolen(ST(0));
-
- if (items < 1 || items > 2)
- Perl_croak(aTHX_ "usage: Win32::MessageBox($txt, [$flags])");
-
- if(items == 2)
- flags = SvIV(ST(1));
-
- res = XCEMessageBoxA(NULL, txt, "Perl", flags);
-
- XSRETURN_IV(res);
-}
-
-static
-XS(w32_GetPowerStatus)
-{
- dXSARGS;
-
- SYSTEM_POWER_STATUS_EX sps;
-
- if(GetSystemPowerStatusEx(&sps, TRUE) == FALSE)
- {
- XSRETURN_EMPTY;
- }
-
- mXPUSHi(sps.ACLineStatus);
- mXPUSHi(sps.BatteryFlag);
- mXPUSHi(sps.BatteryLifePercent);
- mXPUSHi(sps.BatteryLifeTime);
- mXPUSHi(sps.BatteryFullLifeTime);
- mXPUSHi(sps.BackupBatteryFlag);
- mXPUSHi(sps.BackupBatteryLifePercent);
- mXPUSHi(sps.BackupBatteryLifeTime);
- mXPUSHi(sps.BackupBatteryFullLifeTime);
-
- PUTBACK;
-}
-
-#if UNDER_CE > 200
-static
-XS(w32_ShellEx)
-{
- dXSARGS;
-
- char buf[126];
- SHELLEXECUTEINFO si;
- char *file, *verb;
- wchar_t wfile[MAX_PATH];
- wchar_t wverb[20];
-
- if (items != 2)
- Perl_croak(aTHX_ "usage: Win32::ShellEx($file, $verb)");
-
- file = SvPV_nolen(ST(0));
- verb = SvPV_nolen(ST(1));
-
- memset(&si, 0, sizeof(si));
- si.cbSize = sizeof(si);
- si.fMask = SEE_MASK_FLAG_NO_UI;
-
- MultiByteToWideChar(CP_ACP, 0, verb, -1,
- wverb, sizeof(wverb)/2);
- si.lpVerb = (TCHAR *)wverb;
-
- MultiByteToWideChar(CP_ACP, 0, file, -1,
- wfile, sizeof(wfile)/2);
- si.lpFile = (TCHAR *)wfile;
-
- if(ShellExecuteEx(&si) == FALSE)
- {
- XSRETURN_NO;
- }
- XSRETURN_YES;
-}
-#endif
-
-void
-Perl_init_os_extras(void)
-{
- dTHX;
- char *file = __FILE__;
- dXSUB_SYS;
-
- w32_perlshell_tokens = NULL;
- w32_perlshell_items = -1;
- w32_fdpid = newAV(); /* XX needs to be in Perl_win32_init()? */
- Newx(w32_children, 1, child_tab);
- w32_num_children = 0;
-
- newXS("Win32::GetCwd", w32_GetCwd, file);
- newXS("Win32::SetCwd", w32_SetCwd, file);
- newXS("Win32::GetTickCount", w32_GetTickCount, file);
- newXS("Win32::GetOSVersion", w32_GetOSVersion, file);
-#if UNDER_CE > 200
- newXS("Win32::ShellEx", w32_ShellEx, file);
-#endif
- newXS("Win32::IsWinNT", w32_IsWinNT, file);
- newXS("Win32::IsWin95", w32_IsWin95, file);
- newXS("Win32::IsWinCE", w32_IsWinCE, file);
- newXS("Win32::CopyFile", w32_CopyFile, file);
- newXS("Win32::Sleep", w32_Sleep, file);
- newXS("Win32::MessageBox", w32_MessageBox, file);
- newXS("Win32::GetPowerStatus", w32_GetPowerStatus, file);
- newXS("Win32::GetOemInfo", w32_GetOemInfo, file);
-}
-
-void
-myexit(void)
-{
- char buf[126];
-
- puts("Hit return");
- fgets(buf, sizeof(buf), stdin);
-}
-
-void
-Perl_win32_init(int *argcp, char ***argvp)
-{
-#ifdef UNDER_CE
- char *p;
-
- if((p = xcegetenv("PERLDEBUG")) && (p[0] == 'y' || p[0] == 'Y'))
- atexit(myexit);
-#endif
-
- MALLOC_INIT;
-}
-
-DllExport void
-Perl_win32_term(void)
-{
- dTHX;
- HINTS_REFCNT_TERM;
- OP_REFCNT_TERM;
- PERLIO_TERM;
- MALLOC_TERM;
- LOCALE_TERM;
-}
-
-void
-win32_get_child_IO(child_IO_table* ptbl)
-{
- ptbl->childStdIn = GetStdHandle(STD_INPUT_HANDLE);
- ptbl->childStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
- ptbl->childStdErr = GetStdHandle(STD_ERROR_HANDLE);
-}
-
-win32_flock(int fd, int oper)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "flock");
- return -1;
-}
-
-DllExport int
-win32_waitpid(int pid, int *status, int flags)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "waitpid");
- return -1;
-}
-
-DllExport int
-win32_wait(int *status)
-{
- dTHX;
- Perl_croak(aTHX_ PL_no_func, "wait");
- return -1;
-}
-
-int
-wce_reopen_stdout(char *fname)
-{
- if(xcefreopen(fname, "w", stdout) == NULL)
- return -1;
-
- return 0;
-}
-
-void
-wce_hitreturn()
-{
- char buf[126];
-
- printf("Hit RETURN");
- fflush(stdout);
- fgets(buf, sizeof(buf), stdin);
- return;
-}
-
-/* //////////////////////////////////////////////////////////////////// */
-
-#undef getcwd
-
-char *
-getcwd(char *buf, size_t size)
-{
- return xcegetcwd(buf, size);
-}
-
-
-DllExport PerlIO*
-win32_popenlist(const char *mode, IV narg, SV **args)
-{
- dTHX;
- Perl_croak(aTHX_ "List form of pipe open not implemented");
- return NULL;
-}
-
-/*
- * a popen() clone that respects PERL5SHELL
- *
- * changed to return PerlIO* rather than FILE * by BKS, 11-11-2000
- */
-
-DllExport PerlIO*
-win32_popen(const char *command, const char *mode)
-{
- return _popen(command, mode);
-}
-
-/*
- * pclose() clone
- */
-
-DllExport int
-win32_pclose(PerlIO *pf)
-{
- return _pclose(pf);
-}
-
-#ifdef HAVE_INTERP_INTERN
-
-
-static void
-win32_csighandler(int sig)
-{
-#if 0
- dTHXa(PERL_GET_SIG_CONTEXT);
- Perl_warn(aTHX_ "Got signal %d",sig);
-#endif
- /* Does nothing */
-}
-
-void
-Perl_sys_intern_init(pTHX)
-{
- int i;
- w32_perlshell_tokens = NULL;
- w32_perlshell_vec = (char**)NULL;
- w32_perlshell_items = 0;
- w32_fdpid = newAV();
- Newx(w32_children, 1, child_tab);
- w32_num_children = 0;
-# ifdef USE_ITHREADS
- w32_pseudo_id = 0;
- Newx(w32_pseudo_children, 1, child_tab);
- w32_num_pseudo_children = 0;
-# endif
- w32_init_socktype = 0;
- w32_timerid = 0;
- w32_poll_count = 0;
-}
-
-void
-Perl_sys_intern_clear(pTHX)
-{
- Safefree(w32_perlshell_tokens);
- Safefree(w32_perlshell_vec);
- /* NOTE: w32_fdpid is freed by sv_clean_all() */
- Safefree(w32_children);
- if (w32_timerid) {
- KillTimer(NULL,w32_timerid);
- w32_timerid=0;
- }
-# ifdef USE_ITHREADS
- Safefree(w32_pseudo_children);
-# endif
-}
-
-# ifdef USE_ITHREADS
-
-void
-Perl_sys_intern_dup(pTHX_ struct interp_intern *src, struct interp_intern *dst)
-{
- dst->perlshell_tokens = NULL;
- dst->perlshell_vec = (char**)NULL;
- dst->perlshell_items = 0;
- dst->fdpid = newAV();
- Newxz(dst->children, 1, child_tab);
- dst->pseudo_id = 0;
- Newxz(dst->pseudo_children, 1, child_tab);
- dst->thr_intern.Winit_socktype = 0;
- dst->timerid = 0;
- dst->poll_count = 0;
- Copy(src->sigtable,dst->sigtable,SIG_SIZE,Sighandler_t);
-}
-# endif /* USE_ITHREADS */
-#endif /* HAVE_INTERP_INTERN */
-
-// added to remove undefied symbol error in CodeWarrior compilation
-int
-Perl_Ireentrant_buffer_ptr(aTHX)
-{
- return 0;
-}
diff --git a/gnu/usr.bin/perl/win32/wince.h b/gnu/usr.bin/perl/win32/wince.h
deleted file mode 100644
index 2a97668bb15..00000000000
--- a/gnu/usr.bin/perl/win32/wince.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* wince.h */
-
-/* Time-stamp: <01/08/01 20:48:08 keuchel@w2k> */
-
-/* This file includes extracts from the celib-headers, because */
-/* the celib-headers produces macro conflicts with defines in */
-/* win32iop.h etc */
-
-#ifndef WINCE_H
-#define WINCE_H 1
-
-#include "celib_defs.h"
-
-/* include local copies of celib headers... */
-#include "errno.h"
-#include "sys/stat.h"
-#include "time.h"
-#include "cectype.h"
-
-#ifndef START_EXTERN_C
-#undef EXTERN_C
-#ifdef __cplusplus
-# define START_EXTERN_C extern "C" {
-# define END_EXTERN_C }
-# define EXTERN_C extern "C"
-#else
-# define START_EXTERN_C
-# define END_EXTERN_C
-# define EXTERN_C
-#endif
-#endif
-
-START_EXTERN_C
-
-#ifndef _IOFBF
-#define _IOFBF 0x0000
-#endif
-#ifndef _IOLBF
-#define _IOLBF 0x0040
-#endif
-#ifndef _IONBF
-#define _IONBF 0x0004
-#endif
-
-#if UNDER_CE <= 200
-XCE_EXPORT double xceatof(const char *);
-XCE_EXPORT int xcetoupper(int c);
-XCE_EXPORT int xcetolower(int c);
-#define atof xceatof
-#define toupper xcetoupper
-#define tolower xcetolower
-#else
-XCE_EXPORT double atof(const char *);
-#endif
-
-XCE_EXPORT void XCEShowMessageA(const char *fmt, ...);
-
-#define time xcetime
-#define gmtime xcegmtime
-#define localtime xcelocaltime
-#define asctime xceasctime
-/* #define utime xceutime */
-#define futime xcefutime
-#define ftime xceftime
-#define ctime xcectime
-#define gettimeofday xcegettimeofday
-#define GetSystemTimeAsFileTime XCEGetSystemTimeAsFileTime
-
-#define setuid xcesetuid
-#define getuid xcegetuid
-#define geteuid xcegeteuid
-#define seteuid xceseteuid
-
-#define setgid xcesetgid
-#define getgid xcegetgid
-#define getegid xcegetegid
-#define setegid xcesetegid
-
-XCE_EXPORT int xcechown(const char *filename, int owner, int group);
-#define chown xcechown
-
-XCE_EXPORT char *xcestrrchr(const char * string, int ch);
-#define strrchr xcestrrchr
-
-XCE_EXPORT void (*xcesignal(int, void (*)(int)))(int);
-XCE_EXPORT int xceraise(int);
-#define signal xcesignal
-#define raise xceraise
-
-XCE_EXPORT int xcecreat(const char *filename, int pmode);
-XCE_EXPORT int xceopen(const char *fname, int mode, ...);
-XCE_EXPORT int xceread(int fd, void *buf, int size);
-XCE_EXPORT int xcewrite(int fd, void *buf, int size);
-XCE_EXPORT int xceclose(int fd);
-XCE_EXPORT off_t xcelseek(int fd, int off, int whence);
-
-XCE_EXPORT char *xcestrupr(char *string);
-XCE_EXPORT char *xcestrlwr(char *string);
-#define strupr xcestrupr
-#define strlwr xcestrlwr
-
-XCE_EXPORT double xcestrtod(const char *s, char **errorptr);
-XCE_EXPORT long xcestrtol(const char *s, char **errorptr, int base);
-XCE_EXPORT unsigned long xcestrtoul(const char *s, char **errorptr, int base);
-#define strtod xcestrtod
-#define strtol xcestrtol
-#define strtoul xcestrtoul
-
-XCE_EXPORT int xcestrnicmp(const char *first, const char *last, size_t count);
-#define strnicmp xcestrnicmp
-
-XCE_EXPORT int xceumask(int mask);
-#define umask xceumask
-
-XCE_EXPORT int xceisatty(int fd);
-#define isatty xceisatty
-
-XCE_EXPORT int xcechsize(int fd, unsigned long size);
-#define chsize xcechsize
-
-XCE_EXPORT char *xcegetlogin();
-#define getlogin xcegetlogin
-
-XCE_EXPORT DWORD XCEAPI XCEGetModuleFileNameA(HMODULE hModule, LPTSTR lpName, DWORD nSize);
-XCE_EXPORT HMODULE XCEAPI XCEGetModuleHandleA(const char *lpName);
-XCE_EXPORT FARPROC XCEAPI XCEGetProcAddressA(HMODULE hMod, const char *name);
-
-/* //////////////////////////////////////////////////////////////////// */
-
-#define getgid xcegetgid
-#define getegid xcegetegid
-#define geteuid xcegeteuid
-#define setgid xcesetgid
-
-#define strupr xcestrupr
-#define time xcetime
-
-XCE_EXPORT BOOL XCEFreeEnvironmentStrings(LPCSTR buf);
-#define GetEnvironmentStrings XCEGetEnvironmentStrings
-#define FreeEnvironmentStrings XCEFreeEnvironmentStrings
-
-void wce_hitreturn();
-
-END_EXTERN_C
-
-#endif
diff --git a/gnu/usr.bin/perl/win32/wincesck.c b/gnu/usr.bin/perl/win32/wincesck.c
deleted file mode 100644
index 9ef025d46cb..00000000000
--- a/gnu/usr.bin/perl/win32/wincesck.c
+++ /dev/null
@@ -1,495 +0,0 @@
-/* Time-stamp: <01/08/01 21:01:12 keuchel@w2k> */
-
-/* wincesck.c
- *
- * (c) 1995 Microsoft Corporation. All rights reserved.
- * Developed by hip communications inc.
- * Portions (c) 1993 Intergraph Corporation. All rights reserved.
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Artistic License, as specified in the README file.
- */
-
-/* The socket calls use fd functions from celib... */
-
-#define WIN32IO_IS_STDIO
-#define WIN32SCK_IS_STDSCK
-#define WIN32_LEAN_AND_MEAN
-
-#ifdef __GNUC__
-#define Win32_Winsock
-#endif
-
-#include <windows.h>
-
-#define wince_private
-#include "errno.h"
-
-#include "EXTERN.h"
-#include "perl.h"
-
-#include "Win32iop.h"
-#include <sys/socket.h>
-
-#ifndef UNDER_CE
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <assert.h>
-#include <io.h>
-#endif
-
-#ifdef UNDER_CE
-
-XCE_EXPORT struct servent *xcegetservbyname(const char *sname, const char *sproto);
-XCE_EXPORT struct servent * xcegetservbyport(int aport, const char *sproto);
-XCE_EXPORT struct protoent *xcegetprotobyname(const char *name);
-XCE_EXPORT struct protoent *xcegetprotobynumber(int number);
-
-#define getservbyname xcegetservbyname
-#define getservbyport xcegetservbyport
-#define getprotobyname xcegetprotobyname
-#define getprotobynumber xcegetprotobynumber
-
-/* uses fdtab... */
-#include "cesocket2.h"
-
-#endif
-
-#define TO_SOCKET(X) (X)
-
-#define StartSockets() \
- STMT_START { \
- if (!wsock_started) \
- start_sockets(); \
- } STMT_END
-
-#define SOCKET_TEST(x, y) \
- STMT_START { \
- StartSockets(); \
- if((x) == (y)) \
- errno = WSAGetLastError(); \
- } STMT_END
-
-#define SOCKET_TEST_ERROR(x) SOCKET_TEST(x, SOCKET_ERROR)
-
-static struct servent* win32_savecopyservent(struct servent*d,
- struct servent*s,
- const char *proto);
-
-static int wsock_started = 0;
-
-EXTERN_C void
-EndSockets(void)
-{
- if (wsock_started)
- WSACleanup();
-}
-
-void
-start_sockets(void)
-{
- dTHX;
- unsigned short version;
- WSADATA retdata;
- int ret;
-
- /*
- * initalize the winsock interface and insure that it is
- * cleaned up at exit.
- */
- version = 0x101;
- if(ret = WSAStartup(version, &retdata))
- Perl_croak_nocontext("Unable to locate winsock library!\n");
- if(retdata.wVersion != version)
- Perl_croak_nocontext("Could not find version 1.1 of winsock dll\n");
-
- /* atexit((void (*)(void)) EndSockets); */
- wsock_started = 1;
-}
-
-u_long
-win32_htonl(u_long hostlong)
-{
- StartSockets();
- return htonl(hostlong);
-}
-
-u_short
-win32_htons(u_short hostshort)
-{
- StartSockets();
- return htons(hostshort);
-}
-
-u_long
-win32_ntohl(u_long netlong)
-{
- StartSockets();
- return ntohl(netlong);
-}
-
-u_short
-win32_ntohs(u_short netshort)
-{
- StartSockets();
- return ntohs(netshort);
-}
-
-SOCKET
-win32_socket(int af, int type, int protocol)
-{
- StartSockets();
- return xcesocket(af, type, protocol);
-}
-
-SOCKET
-win32_accept(SOCKET s, struct sockaddr *addr, int *addrlen)
-{
- StartSockets();
- return xceaccept(s, addr, addrlen);
-}
-
-int
-win32_bind(SOCKET s, const struct sockaddr *addr, int addrlen)
-{
- StartSockets();
- return xcebind(s, addr, addrlen);
-}
-
-int
-win32_connect(SOCKET s, const struct sockaddr *addr, int addrlen)
-{
- StartSockets();
- return xceconnect(s, addr, addrlen);
-}
-
-
-int
-win32_getpeername(SOCKET s, struct sockaddr *addr, int *addrlen)
-{
- StartSockets();
- return xcegetpeername(s, addr, addrlen);
-}
-
-int
-win32_getsockname(SOCKET s, struct sockaddr *addr, int *addrlen)
-{
- StartSockets();
- return xcegetsockname(s, addr, addrlen);
-}
-
-int
-win32_getsockopt(SOCKET s, int level, int optname, char *optval, int *optlen)
-{
- StartSockets();
- return xcegetsockopt(s, level, optname, optval, optlen);
-}
-
-int
-win32_ioctlsocket(SOCKET s, long cmd, u_long *argp)
-{
- StartSockets();
- return xceioctlsocket(s, cmd, argp);
-}
-
-int
-win32_listen(SOCKET s, int backlog)
-{
- StartSockets();
- return xcelisten(s, backlog);
-}
-
-int
-win32_recv(SOCKET s, char *buf, int len, int flags)
-{
- StartSockets();
- return xcerecv(s, buf, len, flags);
-}
-
-int
-win32_recvfrom(SOCKET s, char *buf, int len, int flags,
- struct sockaddr *from, int *fromlen)
-{
- StartSockets();
- return xcerecvfrom(s, buf, len, flags, from, fromlen);
-}
-
-int
-win32_select(int nfds, Perl_fd_set* rd, Perl_fd_set* wr,
- Perl_fd_set* ex, const struct timeval* timeout)
-{
- StartSockets();
- /* select not yet fixed */
- errno = ENOSYS;
- return -1;
-}
-
-int
-win32_send(SOCKET s, const char *buf, int len, int flags)
-{
- StartSockets();
- return xcesend(s, buf, len, flags);
-}
-
-int
-win32_sendto(SOCKET s, const char *buf, int len, int flags,
- const struct sockaddr *to, int tolen)
-{
- StartSockets();
- return xcesendto(s, buf, len, flags, to, tolen);
-}
-
-int
-win32_setsockopt(SOCKET s, int level, int optname,
- const char *optval, int optlen)
-{
- StartSockets();
- return xcesetsockopt(s, level, optname, optval, optlen);
-}
-
-int
-win32_shutdown(SOCKET s, int how)
-{
- StartSockets();
- return xceshutdown(s, how);
-}
-
-int
-win32_closesocket(SOCKET s)
-{
- StartSockets();
- return xceclosesocket(s);
-}
-
-struct hostent *
-win32_gethostbyaddr(const char *addr, int len, int type)
-{
- struct hostent *r;
-
- SOCKET_TEST(r = gethostbyaddr(addr, len, type), NULL);
- return r;
-}
-
-struct hostent *
-win32_gethostbyname(const char *name)
-{
- struct hostent *r;
-
- SOCKET_TEST(r = gethostbyname(name), NULL);
- return r;
-}
-
-int
-win32_gethostname(char *name, int len)
-{
- int r;
-
- SOCKET_TEST_ERROR(r = gethostname(name, len));
- return r;
-}
-
-struct protoent *
-win32_getprotobyname(const char *name)
-{
- struct protoent *r;
-
- SOCKET_TEST(r = getprotobyname(name), NULL);
- return r;
-}
-
-struct protoent *
-win32_getprotobynumber(int num)
-{
- struct protoent *r;
-
- SOCKET_TEST(r = getprotobynumber(num), NULL);
- return r;
-}
-
-struct servent *
-win32_getservbyname(const char *name, const char *proto)
-{
- dTHX;
- struct servent *r;
-
- SOCKET_TEST(r = getservbyname(name, proto), NULL);
- if (r) {
- r = win32_savecopyservent(&w32_servent, r, proto);
- }
- return r;
-}
-
-struct servent *
-win32_getservbyport(int port, const char *proto)
-{
- dTHX;
- struct servent *r;
-
- SOCKET_TEST(r = getservbyport(port, proto), NULL);
- if (r) {
- r = win32_savecopyservent(&w32_servent, r, proto);
- }
- return r;
-}
-
-int
-win32_ioctl(int i, unsigned int u, char *data)
-{
- dTHX;
- u_long u_long_arg;
- int retval;
-
- if (!wsock_started) {
- Perl_croak_nocontext("ioctl implemented only on sockets");
- /* NOTREACHED */
- }
-
- /* mauke says using memcpy avoids alignment issues */
- memcpy(&u_long_arg, data, sizeof u_long_arg);
- retval = ioctlsocket(TO_SOCKET(i), (long)u, &u_long_arg);
- memcpy(data, &u_long_arg, sizeof u_long_arg);
-
- if (retval == SOCKET_ERROR) {
- if (WSAGetLastError() == WSAENOTSOCK) {
- Perl_croak_nocontext("ioctl implemented only on sockets");
- /* NOTREACHED */
- }
- errno = WSAGetLastError();
- }
- return retval;
-}
-
-char FAR *
-win32_inet_ntoa(struct in_addr in)
-{
- StartSockets();
- return inet_ntoa(in);
-}
-
-unsigned long
-win32_inet_addr(const char FAR *cp)
-{
- StartSockets();
- return inet_addr(cp);
-}
-
-/*
- * Networking stubs
- */
-
-void
-win32_endhostent()
-{
- dTHX;
- Perl_croak_nocontext("endhostent not implemented!\n");
-}
-
-void
-win32_endnetent()
-{
- dTHX;
- Perl_croak_nocontext("endnetent not implemented!\n");
-}
-
-void
-win32_endprotoent()
-{
- dTHX;
- Perl_croak_nocontext("endprotoent not implemented!\n");
-}
-
-void
-win32_endservent()
-{
- dTHX;
- Perl_croak_nocontext("endservent not implemented!\n");
-}
-
-
-struct netent *
-win32_getnetent(void)
-{
- dTHX;
- Perl_croak_nocontext("getnetent not implemented!\n");
- return (struct netent *) NULL;
-}
-
-struct netent *
-win32_getnetbyname(char *name)
-{
- dTHX;
- Perl_croak_nocontext("getnetbyname not implemented!\n");
- return (struct netent *)NULL;
-}
-
-struct netent *
-win32_getnetbyaddr(long net, int type)
-{
- dTHX;
- Perl_croak_nocontext("getnetbyaddr not implemented!\n");
- return (struct netent *)NULL;
-}
-
-struct protoent *
-win32_getprotoent(void)
-{
- dTHX;
- Perl_croak_nocontext("getprotoent not implemented!\n");
- return (struct protoent *) NULL;
-}
-
-struct servent *
-win32_getservent(void)
-{
- dTHX;
- Perl_croak_nocontext("getservent not implemented!\n");
- return (struct servent *) NULL;
-}
-
-void
-win32_sethostent(int stayopen)
-{
- dTHX;
- Perl_croak_nocontext("sethostent not implemented!\n");
-}
-
-
-void
-win32_setnetent(int stayopen)
-{
- dTHX;
- Perl_croak_nocontext("setnetent not implemented!\n");
-}
-
-
-void
-win32_setprotoent(int stayopen)
-{
- dTHX;
- Perl_croak_nocontext("setprotoent not implemented!\n");
-}
-
-
-void
-win32_setservent(int stayopen)
-{
- dTHX;
- Perl_croak_nocontext("setservent not implemented!\n");
-}
-
-static struct servent*
-win32_savecopyservent(struct servent*d, struct servent*s, const char *proto)
-{
- d->s_name = s->s_name;
- d->s_aliases = s->s_aliases;
- d->s_port = s->s_port;
- if (!IsWin95() && s->s_proto && strlen(s->s_proto))
- d->s_proto = s->s_proto;
- else
- if (proto && strlen(proto))
- d->s_proto = (char *)proto;
- else
- d->s_proto = "tcp";
-
- return d;
-}
diff --git a/gnu/usr.bin/perl/write_buildcustomize.pl b/gnu/usr.bin/perl/write_buildcustomize.pl
index 862b09fab8c..b161aab01e6 100644
--- a/gnu/usr.bin/perl/write_buildcustomize.pl
+++ b/gnu/usr.bin/perl/write_buildcustomize.pl
@@ -26,6 +26,7 @@ if ( @ARGV ) {
# nonxs modules.
# Term::ReadLine is not here for building but for allowing the debugger to
# run under miniperl when nothing but miniperl will build :-(.
+# Text::ParseWords is required in ExtUtils::Liblist::Kid
my @toolchain = qw(cpan/AutoLoader/lib
dist/Carp/lib
@@ -42,13 +43,12 @@ my @toolchain = qw(cpan/AutoLoader/lib
dist/constant/lib
cpan/version/lib
cpan/Getopt-Long/lib
+ cpan/Text-ParseWords/lib
);
-# Text-ParseWords used only in ExtUtils::Liblist::Kid::_win32_ext()
-# the rest are for XS building on Win32, since nonxs and xs build simultaneously
+# These are for XS building on Win32, since nonxs and xs build simultaneously
# on Win32 if parallel building
push @toolchain, qw(
- cpan/Text-ParseWords/lib
dist/ExtUtils-ParseXS/lib
cpan/parent/lib
cpan/ExtUtils-Constant/lib